ETH Price: $2,549.85 (-4.94%)

Token

BullRun (BRL)
 

Overview

Max Total Supply

966,254.735044483739622917 BRL

Holders

1,242

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
93.191641590139443345 BRL

Value
$0.00
0xffec9a9b0d02badebf5ed8d27fdcbc91c4dd82a6
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:
BullRun

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-19
*/

// SPDX-License-Identifier: Unlicensed

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

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: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

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: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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: @openzeppelin/contracts/utils/Context.sol


// 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: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts v4.4.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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @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: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @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: BRLv2.sol



pragma solidity ^0.8.9;





contract BullRunFeeHandler is Ownable {

    IUniswapV2Router02 public immutable uniswapV2Router;
    IERC20 public usdc;
    IERC20 public brlToken;

    address public marketingWallet;
    address public opsWallet;

    uint256 residualTokens;

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

    constructor(address _brlToken, address _marketingWallet, address _opsWallet) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Router = _uniswapV2Router;

        brlToken = IERC20(_brlToken);
        marketingWallet = _marketingWallet;
        opsWallet = _opsWallet;

        usdc = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
        IERC20(usdc).approve(address(_uniswapV2Router), type(uint256).max);

    }

    function processFees(uint256 liquidityTokens, uint256 opsTokens, uint256 marketingTokens) external onlyOwner {

        liquidityTokens += residualTokens;
        residualTokens = 0;
        uint256 half = liquidityTokens / 2;
        uint256 otherHalf = liquidityTokens - half;

        uint256 total = half + opsTokens + marketingTokens;

        IERC20(brlToken).approve(address(uniswapV2Router), total + otherHalf);

        address[] memory path = new address[](2);
        path[0] = address(brlToken);
        path[1] = address(usdc);

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            total,
            0, // accept any amount of USDC
            path,
            address(this),
            block.timestamp
        );

        uint256 usdcBalance = IERC20(usdc).balanceOf(address(this));
        uint256 liquidity = usdcBalance * half / total;
        uint256 marketing = usdcBalance * marketingTokens / total;
        uint256 ops = usdcBalance - liquidity - marketing;

        (uint256 amountA,,) = uniswapV2Router.addLiquidity(
            address(brlToken),
            address(usdc),
            otherHalf,
            liquidity,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
        residualTokens += (otherHalf - amountA);

        emit SwapAndLiquify(half, liquidity, otherHalf);

        usdc.transfer(marketingWallet, marketing);
        usdc.transfer(opsWallet, ops);

    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function updateOpsWallet(address newWallet) external onlyOwner {
        opsWallet = newWallet;
    }

}

error InvalidTransfer(address from, address to);
error TransferDelayEnabled(uint256 currentBlock, uint256 enabledBlock);
error ExceedsMaxTxAmount(uint256 attempt, uint256 max);
error ExceedsMaxWalletAmount(uint256 attempt, uint256 max);
error InvalidConfiguration();
error TradingNotEnabled();

contract BullRun is ERC20, Ownable {

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    mapping (address => bool) public _isExcludedFromDelay;
    mapping (address => bool) public _isBlacklisted;
    mapping (address => uint256) private _holderLastTxBlock;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    BullRunFeeHandler public brlFeeHandler;

    bool private swapping;
    bool public swapEnabled = true;
    bool public isTradingEnabled;

    uint256 public burnBuyFee = 100;
    uint256 public liquidityBuyFee = 400;
    uint256 public opsBuyFee = 300;
    uint256 public marketingBuyFee = 200;
    uint256 public totalBuyFees = 1000;

    uint256 public burnSellFee = 100;
    uint256 public liquiditySellFee = 500;
    uint256 public opsSellFee = 300;
    uint256 public marketingSellFee = 300;
    uint256 public totalSellFees = 1200;

    uint256 public liquidityTokens;
    uint256 public opsTokens;
    uint256 public marketingTokens;

    uint256 public maxTransactionAmount = 5000 * 10**18; //0.5% of total supply
    uint256 public swapTokensAtAmount = 500 * 10**18; //0.05% of total supply
    uint256 public maxWallet = 10000 * 10**18; //1% of total supply

    uint256 public buyDelay = 2;
    uint256 public sellDelay = 5;
    uint256 public transferDelay = 1;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event UpdateFeeHandler(address indexed newAddress, address indexed oldAddress);

    constructor(address _marketingWallet, address _opsWallet) ERC20("BullRun", "BRL") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Router = _uniswapV2Router;

        address usdc = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), usdc);

        brlFeeHandler = new BullRunFeeHandler(address(this), _marketingWallet, _opsWallet);

        _isBlacklisted[address(0)] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(brlFeeHandler)] = true;
        _isExcludedFromFees[address(0xdead)] = true;

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(brlFeeHandler)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;

        _isExcludedMaxTransactionAmount[address(_uniswapV2Router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;

        _mint(owner(), 10**6 * 10**18);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (_isBlacklisted[from] || _isBlacklisted[to]) {
            revert InvalidTransfer(from, to);
        }

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

        if (
            from != owner() &&
            to != owner() &&
            to != address(0xdead) &&
            !swapping
        ){

            if (!isTradingEnabled) {
               revert TradingNotEnabled();
            }

            uint256 delayedUntil = _holderLastTxBlock[tx.origin];
            if (from == uniswapV2Pair) {
                delayedUntil += buyDelay;
            } else if (to == uniswapV2Pair) {
                delayedUntil += sellDelay;
            } else if (!_isExcludedFromDelay[from] && !_isExcludedFromDelay[to]) {
                delayedUntil += transferDelay;
            }

            if (delayedUntil > block.number) {
                revert TransferDelayEnabled(block.number, delayedUntil);
            }
            _holderLastTxBlock[tx.origin] = block.number;

            if (from == uniswapV2Pair && !_isExcludedMaxTransactionAmount[to]) { //buys
                if (amount > maxTransactionAmount) {
                    revert ExceedsMaxTxAmount(amount, maxTransactionAmount);
                }
                uint256 potentialBalance = amount + balanceOf(to);
                if (potentialBalance > maxWallet) {
                    revert ExceedsMaxWalletAmount(potentialBalance, maxWallet);
                }

            } else if (to == uniswapV2Pair && !_isExcludedMaxTransactionAmount[from]) { //sells
                if (amount > maxTransactionAmount) {
                    revert ExceedsMaxTxAmount(amount, maxTransactionAmount);
                }
            } else if(!_isExcludedMaxTransactionAmount[to]){
                uint256 potentialBalance = amount + balanceOf(to);
                if (potentialBalance > maxWallet) {
                    revert ExceedsMaxWalletAmount(potentialBalance, maxWallet);
                }
            }
        }

		    bool canSwap = balanceOf(address(brlFeeHandler)) >= swapTokensAtAmount;

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

            uint256 total = liquidityTokens + opsTokens + marketingTokens;
            uint256 liqToSwap = swapTokensAtAmount * liquidityTokens / total;
            uint256 opsToSwap = swapTokensAtAmount * opsTokens / total;
            uint256 marToSwap = swapTokensAtAmount * marketingTokens / total;

            brlFeeHandler.processFees(liqToSwap, opsToSwap, marToSwap);

            liquidityTokens -= liqToSwap;
            marketingTokens -= marToSwap;
            opsTokens -= opsToSwap;

            swapping = false;
        }

        if(!swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 fees;
            uint256 burnTokens;
            if (to == uniswapV2Pair && totalSellFees != 0) { //sell
                fees = amount * totalSellFees / 10000;
                burnTokens += fees * burnSellFee / totalSellFees;
                liquidityTokens += fees * liquiditySellFee / totalSellFees;
                opsTokens += fees * opsSellFee / totalSellFees;
                marketingTokens += fees * marketingSellFee / totalSellFees;
            } else if (from == uniswapV2Pair && totalBuyFees != 0) { //buy
                fees = amount * totalBuyFees / 10000;
                burnTokens += fees * burnBuyFee / totalBuyFees;
                liquidityTokens += fees * liquidityBuyFee / totalBuyFees;
                opsTokens += fees * opsBuyFee / totalBuyFees;
                marketingTokens += fees * marketingBuyFee / totalBuyFees;
            }
            if (fees > 0) {
                amount -= fees;
                super._transfer(from, address(brlFeeHandler), fees);
                super._burn(address(brlFeeHandler), burnTokens);
            }

        }

        super._transfer(from, to, amount);

    }

    function setBlacklist(address account, bool value) external onlyOwner {
        _isBlacklisted[account] = value;
    }

    function blacklistMany(address[] memory accounts) external onlyOwner {
        uint256 len = accounts.length;
        for (uint256 i = 0; i < len; i++) {
            _isBlacklisted[accounts[i]] = true;
        }
    }

    function updateDelayBlocks(uint256 _buy, uint256 _sell, uint256 _tx) external onlyOwner {
        buyDelay = _buy;
        sellDelay = _sell;
        transferDelay = _tx;
    }

    function setExcludedFromMaxTransaction(address account, bool value) public onlyOwner {
        _isExcludedMaxTransactionAmount[account] = value;
    }

    function excludeManyFromMaxTransaction(address[] memory accounts) public onlyOwner {
        uint256 len = accounts.length;
        for (uint256 i = 0; i < len; i++) {
            _isExcludedMaxTransactionAmount[accounts[i]] = true;
        }
    }

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

    function excludeManyFromFees(address[] memory accounts) public onlyOwner {
        uint256 len = accounts.length;
        for (uint256 i = 0; i < len; i++) {
            _isExcludedFromFees[accounts[i]] = true;
        }
    }

    function setExcludedFromDelay(address account, bool value) public onlyOwner {
        _isExcludedFromDelay[account] = value;
    }

    function setSellFees(uint256 burn, uint256 liquidity, uint256 ops, uint256 marketing) external onlyOwner {
        uint256 total = burn + liquidity + ops + marketing;
        if (total > 2500) {
            revert InvalidConfiguration();
        }
        burnSellFee = burn;
        liquiditySellFee = liquidity;
        opsSellFee = ops;
        marketingSellFee = marketing;
        totalSellFees = total;
    }

    function setBuyFees(uint256 burn, uint256 liquidity, uint256 ops, uint256 marketing) external onlyOwner {
        uint256 total = burn + liquidity + ops + marketing;
        if (total > 2500) {
            revert InvalidConfiguration();
        }
        burnBuyFee = burn;
        liquidityBuyFee = liquidity;
        opsBuyFee = ops;
        marketingBuyFee = marketing;
        totalBuyFees = total;
    }

    function airdrop(address[] memory _user, uint256[] memory _amount) external onlyOwner {
        uint256 len = _user.length;
        if (len != _amount.length) {
            revert InvalidConfiguration();
        }
        for (uint256 i = 0; i < len; i++) {
            super._transfer(_msgSender(), _user[i], _amount[i]);
        }
    }

    function setSwapAtAmount(uint256 amount) external onlyOwner {
        swapTokensAtAmount = amount;
    }

    function setMaxTxAmount(uint256 _maxTxAmt) external onlyOwner() {
        maxTransactionAmount = _maxTxAmt;
    }

    function setMaxWalletSize(uint256 _maxWalletSize) external onlyOwner() {
        maxWallet = _maxWalletSize;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        brlFeeHandler.updateMarketingWallet(newWallet);
    }

    function updateOpsWallet(address newWallet) external onlyOwner {
        brlFeeHandler.updateOpsWallet(newWallet);
    }

    function enableTrading() external onlyOwner {
        if (isTradingEnabled) {
            revert InvalidConfiguration();
        }
        isTradingEnabled = true;
    }

    function updateFeeHandler(address newAddress) public onlyOwner {
        if (newAddress == address(brlFeeHandler)) {
            revert InvalidConfiguration();
        }

        BullRunFeeHandler newFeeHandler = BullRunFeeHandler(newAddress);

        if (newFeeHandler.owner() != address(this)) {
            revert InvalidConfiguration();
        }

        setExcludedFromMaxTransaction(address(newFeeHandler), true);
        setExcludedFromFees(address(newFeeHandler), true);

        brlFeeHandler = newFeeHandler;

        emit UpdateFeeHandler(newAddress, address(brlFeeHandler));
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_opsWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"attempt","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"ExceedsMaxTxAmount","type":"error"},{"inputs":[{"internalType":"uint256","name":"attempt","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"ExceedsMaxWalletAmount","type":"error"},{"inputs":[],"name":"InvalidConfiguration","type":"error"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"InvalidTransfer","type":"error"},{"inputs":[],"name":"TradingNotEnabled","type":"error"},{"inputs":[{"internalType":"uint256","name":"currentBlock","type":"uint256"},{"internalType":"uint256","name":"enabledBlock","type":"uint256"}],"name":"TransferDelayEnabled","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateFeeHandler","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_user","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"blacklistMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"brlFeeHandler","outputs":[{"internalType":"contract BullRunFeeHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeManyFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeManyFromMaxTransaction","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":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"opsBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"opsSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"opsTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"ops","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmt","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"ops","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_tx","type":"uint256"}],"name":"updateDelayBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateFeeHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateOpsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040526001600c60156101000a81548160ff0219169083151502179055506064600d55610190600e5561012c600f5560c86010556103e860115560646012556101f460135561012c60145561012c6015556104b060165569010f0cf064dd59200000601a55681b1ae4d6e2ef500000601b5569021e19e0c9bab2400000601c556002601d556005601e556001601f553480156200009d57600080fd5b5060405162007641380380620076418339818101604052810190620000c3919062000bc2565b6040518060400160405280600781526020017f42756c6c52756e000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f42524c000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200014792919062000a9a565b5080600490805190602001906200016092919062000a9a565b50505062000183620001776200081f60201b60201c565b6200082760201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4890508173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023d57600080fd5b505afa15801562000252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000278919062000c09565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630836040518363ffffffff1660e01b8152600401620002b492919062000c4c565b602060405180830381600087803b158015620002cf57600080fd5b505af1158015620002e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030a919062000c09565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250503084846040516200034e9062000b2b565b6200035c9392919062000c79565b604051809103906000f08015801562000379573d6000803e3d6000fd5b50600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600062000428620008ed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000620005bb620008ed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000815620007fe620008ed60201b60201c565b69d3c21bcecceda10000006200091760201b60201c565b5050505062000e62565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200098a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009819062000d17565b60405180910390fd5b6200099e6000838362000a9060201b60201c565b8060026000828254620009b2919062000d72565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a09919062000d72565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a70919062000de0565b60405180910390a362000a8c6000838362000a9560201b60201c565b5050565b505050565b505050565b82805462000aa89062000e2c565b90600052602060002090601f01602090048101928262000acc576000855562000b18565b82601f1062000ae757805160ff191683800117855562000b18565b8280016001018555821562000b18579182015b8281111562000b1757825182559160200191906001019062000afa565b5b50905062000b27919062000b39565b5090565b611b838062005abe83390190565b5b8082111562000b5457600081600090555060010162000b3a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b8a8262000b5d565b9050919050565b62000b9c8162000b7d565b811462000ba857600080fd5b50565b60008151905062000bbc8162000b91565b92915050565b6000806040838503121562000bdc5762000bdb62000b58565b5b600062000bec8582860162000bab565b925050602062000bff8582860162000bab565b9150509250929050565b60006020828403121562000c225762000c2162000b58565b5b600062000c328482850162000bab565b91505092915050565b62000c468162000b7d565b82525050565b600060408201905062000c63600083018562000c3b565b62000c72602083018462000c3b565b9392505050565b600060608201905062000c90600083018662000c3b565b62000c9f602083018562000c3b565b62000cae604083018462000c3b565b949350505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000cff601f8362000cb6565b915062000d0c8262000cc7565b602082019050919050565b6000602082019050818103600083015262000d328162000cf0565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d7f8262000d39565b915062000d8c8362000d39565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dc45762000dc362000d43565b5b828201905092915050565b62000dda8162000d39565b82525050565b600060208201905062000df7600083018462000dcf565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e4557607f821691505b6020821081141562000e5c5762000e5b62000dfd565b5b50919050565b608051614c0f62000eaf6000396000818161152601528181612979015281816129e201528181612b9201528181612cf001528181612f110152818161326d01526133b30152614c0f6000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c80636ddd1713116101e9578063bdc4d8631161010f578063d0a39814116100ad578063ea1644d51161007c578063ea1644d514610aa5578063ec28438a14610ac1578063f2fde38b14610add578063f8b45b0514610af9576103a4565b8063d0a3981414610a1b578063dd62ed3e14610a39578063e2f4560514610a69578063e7f444b314610a87576103a4565b8063c5e5d885116100e9578063c5e5d885146109a5578063c8c8ebe4146109c3578063c8f8d62c146109e1578063ccb61358146109fd576103a4565b8063bdc4d8631461094d578063c2bd8f9b1461096b578063c49b9a8014610989576103a4565b80638c2c690911610187578063a9059cbb11610156578063a9059cbb146108c5578063aacebbe3146108f5578063ae23087814610911578063b9e937001461092f576103a4565b80638c2c69091461083d5780638da5cb5b1461085957806395d89b4114610877578063a457c2d714610895576103a4565b80637ae3ff47116101c35780637ae3ff47146107d95780637e761377146107f75780638a8c523c146108155780638b27306d1461081f576103a4565b80636ddd17131461078157806370a082311461079f578063715018a6146107cf576103a4565b806329988b04116102ce5780634b8ce6021161026c57806366650dae1161023b57806366650dae1461070f578063672434821461072b57806368078952146107475780636c5b285514610765576103a4565b80634b8ce6021461069d578063590ffdce146106bb578063611bfa37146106d75780636402511e146106f3576103a4565b806337f2bc14116102a857806337f2bc1414610601578063395093511461061f57806343e968a31461064f57806349bd5a5e1461067f576103a4565b806329988b04146105ab578063313ce567146105c7578063373bf3b1146105e5576103a4565b8063153b0d1e116103465780631c3909e6116103155780631c3909e6146105115780631cdd3be31461052d578063234cee1e1461055d57806323b872dd1461057b576103a4565b8063153b0d1e1461049d5780631694505e146104b9578063178d9b8e146104d757806318160ddd146104f3576103a4565b8063099d0d3011610382578063099d0d30146104155780630a702e8d1461043357806310d5de5314610451578063121a6bcb14610481576103a4565b8063064a59d0146103a957806306fdde03146103c7578063095ea7b3146103e5575b600080fd5b6103b1610b17565b6040516103be9190613abd565b60405180910390f35b6103cf610b2a565b6040516103dc9190613b71565b60405180910390f35b6103ff60048036038101906103fa9190613c3b565b610bbc565b60405161040c9190613abd565b60405180910390f35b61041d610bdf565b60405161042a9190613c8a565b60405180910390f35b61043b610be5565b6040516104489190613c8a565b60405180910390f35b61046b60048036038101906104669190613ca5565b610beb565b6040516104789190613abd565b60405180910390f35b61049b60048036038101906104969190613cfe565b610c0b565b005b6104b760048036038101906104b29190613cfe565b610ce2565b005b6104c1610db9565b6040516104ce9190613d9d565b60405180910390f35b6104f160048036038101906104ec9190613db8565b610ddf565b005b6104fb610ee7565b6040516105089190613c8a565b60405180910390f35b61052b60048036038101906105269190613ca5565b610ef1565b005b61054760048036038101906105429190613ca5565b610ffd565b6040516105549190613abd565b60405180910390f35b61056561101d565b6040516105729190613e40565b60405180910390f35b61059560048036038101906105909190613e5b565b611043565b6040516105a29190613abd565b60405180910390f35b6105c560048036038101906105c09190613ca5565b611072565b005b6105cf611334565b6040516105dc9190613eca565b60405180910390f35b6105ff60048036038101906105fa919061402d565b61133d565b005b610609611454565b6040516106169190613c8a565b60405180910390f35b61063960048036038101906106349190613c3b565b61145a565b6040516106469190613abd565b60405180910390f35b61066960048036038101906106649190613ca5565b611504565b6040516106769190613abd565b60405180910390f35b610687611524565b6040516106949190614085565b60405180910390f35b6106a5611548565b6040516106b29190613c8a565b60405180910390f35b6106d560048036038101906106d09190613cfe565b61154e565b005b6106f160048036038101906106ec919061402d565b611625565b005b61070d600480360381019061070891906140a0565b61173c565b005b61072960048036038101906107249190613cfe565b6117c2565b005b61074560048036038101906107409190614190565b611899565b005b61074f6119bf565b60405161075c9190613c8a565b60405180910390f35b61077f600480360381019061077a9190613db8565b6119c5565b005b610789611acd565b6040516107969190613abd565b60405180910390f35b6107b960048036038101906107b49190613ca5565b611ae0565b6040516107c69190613c8a565b60405180910390f35b6107d7611b28565b005b6107e1611bb0565b6040516107ee9190613c8a565b60405180910390f35b6107ff611bb6565b60405161080c9190613c8a565b60405180910390f35b61081d611bbc565b005b610827611c9c565b6040516108349190613c8a565b60405180910390f35b6108576004803603810190610852919061402d565b611ca2565b005b610861611db9565b60405161086e9190614085565b60405180910390f35b61087f611de3565b60405161088c9190613b71565b60405180910390f35b6108af60048036038101906108aa9190613c3b565b611e75565b6040516108bc9190613abd565b60405180910390f35b6108df60048036038101906108da9190613c3b565b611f5f565b6040516108ec9190613abd565b60405180910390f35b61090f600480360381019061090a9190613ca5565b611f82565b005b61091961208e565b6040516109269190613c8a565b60405180910390f35b610937612094565b6040516109449190613c8a565b60405180910390f35b61095561209a565b6040516109629190613c8a565b60405180910390f35b6109736120a0565b6040516109809190613c8a565b60405180910390f35b6109a3600480360381019061099e9190614208565b6120a6565b005b6109ad612176565b6040516109ba9190613c8a565b60405180910390f35b6109cb61217c565b6040516109d89190613c8a565b60405180910390f35b6109fb60048036038101906109f69190614235565b612182565b005b610a05612218565b604051610a129190613c8a565b60405180910390f35b610a2361221e565b604051610a309190613c8a565b60405180910390f35b610a536004803603810190610a4e9190614288565b612224565b604051610a609190613c8a565b60405180910390f35b610a716122ab565b604051610a7e9190613c8a565b60405180910390f35b610a8f6122b1565b604051610a9c9190613c8a565b60405180910390f35b610abf6004803603810190610aba91906140a0565b6122b7565b005b610adb6004803603810190610ad691906140a0565b61233d565b005b610af76004803603810190610af29190613ca5565b6123c3565b005b610b016124bb565b604051610b0e9190613c8a565b60405180910390f35b600c60169054906101000a900460ff1681565b606060038054610b39906142f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b65906142f7565b8015610bb25780601f10610b8757610100808354040283529160200191610bb2565b820191906000526020600020905b815481529060010190602001808311610b9557829003601f168201915b5050505050905090565b600080610bc76124c1565b9050610bd48185856124c9565b600191505092915050565b60135481565b601f5481565b60076020528060005260406000206000915054906101000a900460ff1681565b610c136124c1565b73ffffffffffffffffffffffffffffffffffffffff16610c31611db9565b73ffffffffffffffffffffffffffffffffffffffff1614610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e90614375565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610cea6124c1565b73ffffffffffffffffffffffffffffffffffffffff16610d08611db9565b73ffffffffffffffffffffffffffffffffffffffff1614610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5590614375565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610de76124c1565b73ffffffffffffffffffffffffffffffffffffffff16610e05611db9565b73ffffffffffffffffffffffffffffffffffffffff1614610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614375565b60405180910390fd5b600081838587610e6b91906143c4565b610e7591906143c4565b610e7f91906143c4565b90506109c4811115610ebd576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600d8190555083600e8190555082600f8190555081601081905550806011819055505050505050565b6000600254905090565b610ef96124c1565b73ffffffffffffffffffffffffffffffffffffffff16610f17611db9565b73ffffffffffffffffffffffffffffffffffffffff1614610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6490614375565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c3909e6826040518263ffffffff1660e01b8152600401610fc89190614085565b600060405180830381600087803b158015610fe257600080fd5b505af1158015610ff6573d6000803e3d6000fd5b5050505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061104e6124c1565b905061105b858285612694565b611066858585612720565b60019150509392505050565b61107a6124c1565b73ffffffffffffffffffffffffffffffffffffffff16611098611db9565b73ffffffffffffffffffffffffffffffffffffffff16146110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590614375565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611176576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008190503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111d857600080fd5b505afa1580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611210919061442f565b73ffffffffffffffffffffffffffffffffffffffff161461125d576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112688160016117c2565b61127381600161154e565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc6a663dfd3d64dce542f49c3119b9e2ded1311d56c163cc6da28cd0e72d9c24960405160405180910390a35050565b60006012905090565b6113456124c1565b73ffffffffffffffffffffffffffffffffffffffff16611363611db9565b73ffffffffffffffffffffffffffffffffffffffff16146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614375565b60405180910390fd5b60008151905060005b8181101561144f576001600660008584815181106113e3576113e261445c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806114479061448b565b9150506113c2565b505050565b60185481565b6000806114656124c1565b90506114f9818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f491906143c4565b6124c9565b600191505092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60175481565b6115566124c1565b73ffffffffffffffffffffffffffffffffffffffff16611574611db9565b73ffffffffffffffffffffffffffffffffffffffff16146115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c190614375565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61162d6124c1565b73ffffffffffffffffffffffffffffffffffffffff1661164b611db9565b73ffffffffffffffffffffffffffffffffffffffff16146116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890614375565b60405180910390fd5b60008151905060005b81811015611737576001600960008584815181106116cb576116ca61445c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061172f9061448b565b9150506116aa565b505050565b6117446124c1565b73ffffffffffffffffffffffffffffffffffffffff16611762611db9565b73ffffffffffffffffffffffffffffffffffffffff16146117b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117af90614375565b60405180910390fd5b80601b8190555050565b6117ca6124c1565b73ffffffffffffffffffffffffffffffffffffffff166117e8611db9565b73ffffffffffffffffffffffffffffffffffffffff161461183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183590614375565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118a16124c1565b73ffffffffffffffffffffffffffffffffffffffff166118bf611db9565b73ffffffffffffffffffffffffffffffffffffffff1614611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c90614375565b60405180910390fd5b60008251905081518114611955576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156119b9576119a661196b6124c1565b85838151811061197e5761197d61445c565b5b60200260200101518584815181106119995761199861445c565b5b602002602001015161357a565b80806119b19061448b565b915050611958565b50505050565b60105481565b6119cd6124c1565b73ffffffffffffffffffffffffffffffffffffffff166119eb611db9565b73ffffffffffffffffffffffffffffffffffffffff1614611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3890614375565b60405180910390fd5b600081838587611a5191906143c4565b611a5b91906143c4565b611a6591906143c4565b90506109c4811115611aa3576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84601281905550836013819055508260148190555081601581905550806016819055505050505050565b600c60159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b306124c1565b73ffffffffffffffffffffffffffffffffffffffff16611b4e611db9565b73ffffffffffffffffffffffffffffffffffffffff1614611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90614375565b60405180910390fd5b611bae60006137fb565b565b600d5481565b60125481565b611bc46124c1565b73ffffffffffffffffffffffffffffffffffffffff16611be2611db9565b73ffffffffffffffffffffffffffffffffffffffff1614611c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2f90614375565b60405180910390fd5b600c60169054906101000a900460ff1615611c7f576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600c60166101000a81548160ff021916908315150217905550565b60195481565b611caa6124c1565b73ffffffffffffffffffffffffffffffffffffffff16611cc8611db9565b73ffffffffffffffffffffffffffffffffffffffff1614611d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1590614375565b60405180910390fd5b60008151905060005b81811015611db457600160076000858481518110611d4857611d4761445c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611dac9061448b565b915050611d27565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611df2906142f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1e906142f7565b8015611e6b5780601f10611e4057610100808354040283529160200191611e6b565b820191906000526020600020905b815481529060010190602001808311611e4e57829003601f168201915b5050505050905090565b600080611e806124c1565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d90614546565b60405180910390fd5b611f5382868684036124c9565b60019250505092915050565b600080611f6a6124c1565b9050611f77818585612720565b600191505092915050565b611f8a6124c1565b73ffffffffffffffffffffffffffffffffffffffff16611fa8611db9565b73ffffffffffffffffffffffffffffffffffffffff1614611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590614375565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aacebbe3826040518263ffffffff1660e01b81526004016120599190614085565b600060405180830381600087803b15801561207357600080fd5b505af1158015612087573d6000803e3d6000fd5b5050505050565b601e5481565b60115481565b600f5481565b601d5481565b6120ae6124c1565b73ffffffffffffffffffffffffffffffffffffffff166120cc611db9565b73ffffffffffffffffffffffffffffffffffffffff1614612122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211990614375565b60405180910390fd5b80600c60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161216b9190613abd565b60405180910390a150565b60145481565b601a5481565b61218a6124c1565b73ffffffffffffffffffffffffffffffffffffffff166121a8611db9565b73ffffffffffffffffffffffffffffffffffffffff16146121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f590614375565b60405180910390fd5b82601d8190555081601e8190555080601f81905550505050565b600e5481565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601b5481565b60155481565b6122bf6124c1565b73ffffffffffffffffffffffffffffffffffffffff166122dd611db9565b73ffffffffffffffffffffffffffffffffffffffff1614612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90614375565b60405180910390fd5b80601c8190555050565b6123456124c1565b73ffffffffffffffffffffffffffffffffffffffff16612363611db9565b73ffffffffffffffffffffffffffffffffffffffff16146123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b090614375565b60405180910390fd5b80601a8190555050565b6123cb6124c1565b73ffffffffffffffffffffffffffffffffffffffff166123e9611db9565b73ffffffffffffffffffffffffffffffffffffffff161461243f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243690614375565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a6906145d8565b60405180910390fd5b6124b8816137fb565b50565b601c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125309061466a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a0906146fc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126879190613c8a565b60405180910390a3505050565b60006126a08484612224565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461271a578181101561270c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270390614768565b60405180910390fd5b61271984848484036124c9565b5b50505050565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c15750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128055782826040517f709ac0170000000000000000000000000000000000000000000000000000000081526004016127fc929190614788565b60405180910390fd5b600081141561281f5761281a8383600061357a565b613575565b612827611db9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128955750612865611db9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128cf575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128e85750600c60149054906101000a900460ff16155b15612ea257600c60169054906101000a900460ff16612933576040517f12f1f92300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129e057601d54816129d991906143c4565b9050612b05565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a4957601e5481612a4291906143c4565b9050612b04565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612aed5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b0357601f5481612b0091906143c4565b90505b5b5b43811115612b4c5743816040517f4a24f3d2000000000000000000000000000000000000000000000000000000008152600401612b439291906147b1565b60405180910390fd5b43600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612c355750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cee57601a54821115612c855781601a546040517f22a8406a000000000000000000000000000000000000000000000000000000008152600401612c7c9291906147b1565b60405180910390fd5b6000612c9084611ae0565b83612c9b91906143c4565b9050601c54811115612ce85780601c546040517f2194bdde000000000000000000000000000000000000000000000000000000008152600401612cdf9291906147b1565b60405180910390fd5b50612ea0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612d935750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612de857601a54821115612de35781601a546040517f22a8406a000000000000000000000000000000000000000000000000000000008152600401612dda9291906147b1565b60405180910390fd5b612e9f565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e9e576000612e4484611ae0565b83612e4f91906143c4565b9050601c54811115612e9c5780601c546040517f2194bdde000000000000000000000000000000000000000000000000000000008152600401612e939291906147b1565b60405180910390fd5b505b5b5b505b6000601b54612ed2600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ae0565b10159050808015612ef05750600c60149054906101000a900460ff16155b8015612f085750600c60159054906101000a900460ff165b8015612f6057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612fb65750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561300c5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131a6576001600c60146101000a81548160ff021916908315150217905550600060195460185460175461304191906143c4565b61304b91906143c4565b9050600081601754601b5461306091906147da565b61306a9190614863565b9050600082601854601b5461307f91906147da565b6130899190614863565b9050600083601954601b5461309e91906147da565b6130a89190614863565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394adc0d08484846040518463ffffffff1660e01b815260040161310993929190614894565b600060405180830381600087803b15801561312357600080fd5b505af1158015613137573d6000803e3d6000fd5b50505050826017600082825461314d91906148cb565b92505081905550806019600082825461316691906148cb565b92505081905550816018600082825461317f91906148cb565b925050819055506000600c60146101000a81548160ff021916908315150217905550505050505b600c60149054906101000a900460ff1615801561320d5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132635750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613568576000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480156132c95750600060165414155b156133b157612710601654856132df91906147da565b6132e99190614863565b9150601654601254836132fc91906147da565b6133069190614863565b8161331191906143c4565b90506016546013548361332491906147da565b61332e9190614863565b6017600082825461333f91906143c4565b925050819055506016546014548361335791906147da565b6133619190614863565b6018600082825461337291906143c4565b925050819055506016546015548361338a91906147da565b6133949190614863565b601960008282546133a591906143c4565b925050819055506134f4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614801561340f5750600060115414155b156134f3576127106011548561342591906147da565b61342f9190614863565b9150601154600d548361344291906147da565b61344c9190614863565b8161345791906143c4565b9050601154600e548361346a91906147da565b6134749190614863565b6017600082825461348591906143c4565b92505081905550601154600f548361349d91906147da565b6134a79190614863565b601860008282546134b891906143c4565b92505081905550601154601054836134d091906147da565b6134da9190614863565b601960008282546134eb91906143c4565b925050819055505b5b600082111561356557818461350991906148cb565b935061353886600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461357a565b613564600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826138c1565b5b50505b61357384848461357a565b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e190614971565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561365a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365190614a03565b60405180910390fd5b613665838383613a98565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156136eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e290614a95565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461377e91906143c4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137e29190613c8a565b60405180910390a36137f5848484613a9d565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392890614b27565b60405180910390fd5b61393d82600083613a98565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ba90614bb9565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254613a1a91906148cb565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a7f9190613c8a565b60405180910390a3613a9383600084613a9d565b505050565b505050565b505050565b60008115159050919050565b613ab781613aa2565b82525050565b6000602082019050613ad26000830184613aae565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b12578082015181840152602081019050613af7565b83811115613b21576000848401525b50505050565b6000601f19601f8301169050919050565b6000613b4382613ad8565b613b4d8185613ae3565b9350613b5d818560208601613af4565b613b6681613b27565b840191505092915050565b60006020820190508181036000830152613b8b8184613b38565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bd282613ba7565b9050919050565b613be281613bc7565b8114613bed57600080fd5b50565b600081359050613bff81613bd9565b92915050565b6000819050919050565b613c1881613c05565b8114613c2357600080fd5b50565b600081359050613c3581613c0f565b92915050565b60008060408385031215613c5257613c51613b9d565b5b6000613c6085828601613bf0565b9250506020613c7185828601613c26565b9150509250929050565b613c8481613c05565b82525050565b6000602082019050613c9f6000830184613c7b565b92915050565b600060208284031215613cbb57613cba613b9d565b5b6000613cc984828501613bf0565b91505092915050565b613cdb81613aa2565b8114613ce657600080fd5b50565b600081359050613cf881613cd2565b92915050565b60008060408385031215613d1557613d14613b9d565b5b6000613d2385828601613bf0565b9250506020613d3485828601613ce9565b9150509250929050565b6000819050919050565b6000613d63613d5e613d5984613ba7565b613d3e565b613ba7565b9050919050565b6000613d7582613d48565b9050919050565b6000613d8782613d6a565b9050919050565b613d9781613d7c565b82525050565b6000602082019050613db26000830184613d8e565b92915050565b60008060008060808587031215613dd257613dd1613b9d565b5b6000613de087828801613c26565b9450506020613df187828801613c26565b9350506040613e0287828801613c26565b9250506060613e1387828801613c26565b91505092959194509250565b6000613e2a82613d6a565b9050919050565b613e3a81613e1f565b82525050565b6000602082019050613e556000830184613e31565b92915050565b600080600060608486031215613e7457613e73613b9d565b5b6000613e8286828701613bf0565b9350506020613e9386828701613bf0565b9250506040613ea486828701613c26565b9150509250925092565b600060ff82169050919050565b613ec481613eae565b82525050565b6000602082019050613edf6000830184613ebb565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f2282613b27565b810181811067ffffffffffffffff82111715613f4157613f40613eea565b5b80604052505050565b6000613f54613b93565b9050613f608282613f19565b919050565b600067ffffffffffffffff821115613f8057613f7f613eea565b5b602082029050602081019050919050565b600080fd5b6000613fa9613fa484613f65565b613f4a565b90508083825260208201905060208402830185811115613fcc57613fcb613f91565b5b835b81811015613ff55780613fe18882613bf0565b845260208401935050602081019050613fce565b5050509392505050565b600082601f83011261401457614013613ee5565b5b8135614024848260208601613f96565b91505092915050565b60006020828403121561404357614042613b9d565b5b600082013567ffffffffffffffff81111561406157614060613ba2565b5b61406d84828501613fff565b91505092915050565b61407f81613bc7565b82525050565b600060208201905061409a6000830184614076565b92915050565b6000602082840312156140b6576140b5613b9d565b5b60006140c484828501613c26565b91505092915050565b600067ffffffffffffffff8211156140e8576140e7613eea565b5b602082029050602081019050919050565b600061410c614107846140cd565b613f4a565b9050808382526020820190506020840283018581111561412f5761412e613f91565b5b835b8181101561415857806141448882613c26565b845260208401935050602081019050614131565b5050509392505050565b600082601f83011261417757614176613ee5565b5b81356141878482602086016140f9565b91505092915050565b600080604083850312156141a7576141a6613b9d565b5b600083013567ffffffffffffffff8111156141c5576141c4613ba2565b5b6141d185828601613fff565b925050602083013567ffffffffffffffff8111156141f2576141f1613ba2565b5b6141fe85828601614162565b9150509250929050565b60006020828403121561421e5761421d613b9d565b5b600061422c84828501613ce9565b91505092915050565b60008060006060848603121561424e5761424d613b9d565b5b600061425c86828701613c26565b935050602061426d86828701613c26565b925050604061427e86828701613c26565b9150509250925092565b6000806040838503121561429f5761429e613b9d565b5b60006142ad85828601613bf0565b92505060206142be85828601613bf0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061430f57607f821691505b60208210811415614323576143226142c8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061435f602083613ae3565b915061436a82614329565b602082019050919050565b6000602082019050818103600083015261438e81614352565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143cf82613c05565b91506143da83613c05565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561440f5761440e614395565b5b828201905092915050565b60008151905061442981613bd9565b92915050565b60006020828403121561444557614444613b9d565b5b60006144538482850161441a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061449682613c05565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144c9576144c8614395565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614530602583613ae3565b915061453b826144d4565b604082019050919050565b6000602082019050818103600083015261455f81614523565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145c2602683613ae3565b91506145cd82614566565b604082019050919050565b600060208201905081810360008301526145f1816145b5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614654602483613ae3565b915061465f826145f8565b604082019050919050565b6000602082019050818103600083015261468381614647565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146e6602283613ae3565b91506146f18261468a565b604082019050919050565b60006020820190508181036000830152614715816146d9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614752601d83613ae3565b915061475d8261471c565b602082019050919050565b6000602082019050818103600083015261478181614745565b9050919050565b600060408201905061479d6000830185614076565b6147aa6020830184614076565b9392505050565b60006040820190506147c66000830185613c7b565b6147d36020830184613c7b565b9392505050565b60006147e582613c05565b91506147f083613c05565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561482957614828614395565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061486e82613c05565b915061487983613c05565b92508261488957614888614834565b5b828204905092915050565b60006060820190506148a96000830186613c7b565b6148b66020830185613c7b565b6148c36040830184613c7b565b949350505050565b60006148d682613c05565b91506148e183613c05565b9250828210156148f4576148f3614395565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061495b602583613ae3565b9150614966826148ff565b604082019050919050565b6000602082019050818103600083015261498a8161494e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006149ed602383613ae3565b91506149f882614991565b604082019050919050565b60006020820190508181036000830152614a1c816149e0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614a7f602683613ae3565b9150614a8a82614a23565b604082019050919050565b60006020820190508181036000830152614aae81614a72565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b11602183613ae3565b9150614b1c82614ab5565b604082019050919050565b60006020820190508181036000830152614b4081614b04565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ba3602283613ae3565b9150614bae82614b47565b604082019050919050565b60006020820190508181036000830152614bd281614b96565b905091905056fea2646970667358221220cc7ea2f1a73fbd0f2c581eaad36cddf0bff746aabe6d6e98f238444a18e93ee264736f6c6343000809003360a06040523480156200001157600080fd5b5060405162001b8338038062001b838339818101604052810190620000379190620003d2565b620000576200004b6200029c60201b60201c565b620002a460201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505083600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200023b9291906200045a565b602060405180830381600087803b1580156200025657600080fd5b505af11580156200026b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002919190620004c4565b5050505050620004f6565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200039a826200036d565b9050919050565b620003ac816200038d565b8114620003b857600080fd5b50565b600081519050620003cc81620003a1565b92915050565b600080600060608486031215620003ee57620003ed62000368565b5b6000620003fe86828701620003bb565b93505060206200041186828701620003bb565b92505060406200042486828701620003bb565b9150509250925092565b62000439816200038d565b82525050565b6000819050919050565b62000454816200043f565b82525050565b60006040820190506200047160008301856200042e565b62000480602083018462000449565b9392505050565b60008115159050919050565b6200049e8162000487565b8114620004aa57600080fd5b50565b600081519050620004be8162000493565b92915050565b600060208284031215620004dd57620004dc62000368565b5b6000620004ed84828501620004ad565b91505092915050565b60805161165c62000527600039600081816101de015281816104f3015281816106c00152610856015261165c6000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806375f0a8741161007157806375f0a8741461012e5780638da5cb5b1461014c57806394adc0d01461016a578063a9545a1014610186578063aacebbe3146101a4578063f2fde38b146101c0576100a9565b80631694505e146100ae5780631c3909e6146100cc5780633e413bee146100e857806368db925a14610106578063715018a614610124575b600080fd5b6100b66101dc565b6040516100c39190610e92565b60405180910390f35b6100e660048036038101906100e19190610ef0565b610200565b005b6100f06102c0565b6040516100fd9190610f3e565b60405180910390f35b61010e6102e6565b60405161011b9190610f68565b60405180910390f35b61012c61030c565b005b610136610394565b6040516101439190610f68565b60405180910390f35b6101546103ba565b6040516101619190610f68565b60405180910390f35b610184600480360381019061017f9190610fb9565b6103e3565b005b61018e610b69565b60405161019b9190610f3e565b60405180910390f35b6101be60048036038101906101b99190610ef0565b610b8f565b005b6101da60048036038101906101d59190610ef0565b610c4f565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b610208610d47565b73ffffffffffffffffffffffffffffffffffffffff166102266103ba565b73ffffffffffffffffffffffffffffffffffffffff161461027c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027390611069565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610314610d47565b73ffffffffffffffffffffffffffffffffffffffff166103326103ba565b73ffffffffffffffffffffffffffffffffffffffff1614610388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037f90611069565b60405180910390fd5b6103926000610d4f565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103eb610d47565b73ffffffffffffffffffffffffffffffffffffffff166104096103ba565b73ffffffffffffffffffffffffffffffffffffffff161461045f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045690611069565b60405180910390fd5b6005548361046d91906110b8565b925060006005819055506000600284610486919061113d565b905060008185610496919061116e565b905060008385846104a791906110b8565b6104b191906110b8565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000848461051e91906110b8565b6040518363ffffffff1660e01b815260040161053b9291906111b1565b602060405180830381600087803b15801561055557600080fd5b505af1158015610569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058d9190611212565b506000600267ffffffffffffffff8111156105ab576105aa61123f565b5b6040519080825280602002602001820160405280156105d95781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106106135761061261126e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106106845761068361126e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d7958360008430426040518663ffffffff1660e01b8152600401610720959493929190611396565b600060405180830381600087803b15801561073a57600080fd5b505af115801561074e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107af9190610f68565b60206040518083038186803b1580156107c757600080fd5b505afa1580156107db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ff9190611405565b905060008386836108109190611432565b61081a919061113d565b9050600084888461082b9190611432565b610835919061113d565b90506000818385610846919061116e565b610850919061116e565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e8e33700600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168b8860008061dead426040518963ffffffff1660e01b815260040161090298979695949392919061148c565b606060405180830381600087803b15801561091c57600080fd5b505af1158015610930573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610954919061150a565b505090508088610964919061116e565b6005600082825461097591906110b8565b925050819055507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56189858a6040516109af9392919061155d565b60405180910390a1600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b8152600401610a369291906111b1565b602060405180830381600087803b158015610a5057600080fd5b505af1158015610a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a889190611212565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401610b089291906111b1565b602060405180830381600087803b158015610b2257600080fd5b505af1158015610b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5a9190611212565b50505050505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b97610d47565b73ffffffffffffffffffffffffffffffffffffffff16610bb56103ba565b73ffffffffffffffffffffffffffffffffffffffff1614610c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0290611069565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c57610d47565b73ffffffffffffffffffffffffffffffffffffffff16610c756103ba565b73ffffffffffffffffffffffffffffffffffffffff1614610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc290611069565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3290611606565b60405180910390fd5b610d4481610d4f565b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610e58610e53610e4e84610e13565b610e33565b610e13565b9050919050565b6000610e6a82610e3d565b9050919050565b6000610e7c82610e5f565b9050919050565b610e8c81610e71565b82525050565b6000602082019050610ea76000830184610e83565b92915050565b600080fd5b6000610ebd82610e13565b9050919050565b610ecd81610eb2565b8114610ed857600080fd5b50565b600081359050610eea81610ec4565b92915050565b600060208284031215610f0657610f05610ead565b5b6000610f1484828501610edb565b91505092915050565b6000610f2882610e5f565b9050919050565b610f3881610f1d565b82525050565b6000602082019050610f536000830184610f2f565b92915050565b610f6281610eb2565b82525050565b6000602082019050610f7d6000830184610f59565b92915050565b6000819050919050565b610f9681610f83565b8114610fa157600080fd5b50565b600081359050610fb381610f8d565b92915050565b600080600060608486031215610fd257610fd1610ead565b5b6000610fe086828701610fa4565b9350506020610ff186828701610fa4565b925050604061100286828701610fa4565b9150509250925092565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061105360208361100c565b915061105e8261101d565b602082019050919050565b6000602082019050818103600083015261108281611046565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006110c382610f83565b91506110ce83610f83565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561110357611102611089565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061114882610f83565b915061115383610f83565b9250826111635761116261110e565b5b828204905092915050565b600061117982610f83565b915061118483610f83565b92508282101561119757611196611089565b5b828203905092915050565b6111ab81610f83565b82525050565b60006040820190506111c66000830185610f59565b6111d360208301846111a2565b9392505050565b60008115159050919050565b6111ef816111da565b81146111fa57600080fd5b50565b60008151905061120c816111e6565b92915050565b60006020828403121561122857611227610ead565b5b6000611236848285016111fd565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006112c26112bd6112b88461129d565b610e33565b610f83565b9050919050565b6112d2816112a7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61130d81610eb2565b82525050565b600061131f8383611304565b60208301905092915050565b6000602082019050919050565b6000611343826112d8565b61134d81856112e3565b9350611358836112f4565b8060005b838110156113895781516113708882611313565b975061137b8361132b565b92505060018101905061135c565b5085935050505092915050565b600060a0820190506113ab60008301886111a2565b6113b860208301876112c9565b81810360408301526113ca8186611338565b90506113d96060830185610f59565b6113e660808301846111a2565b9695505050505050565b6000815190506113ff81610f8d565b92915050565b60006020828403121561141b5761141a610ead565b5b6000611429848285016113f0565b91505092915050565b600061143d82610f83565b915061144883610f83565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561148157611480611089565b5b828202905092915050565b6000610100820190506114a2600083018b610f59565b6114af602083018a610f59565b6114bc60408301896111a2565b6114c960608301886111a2565b6114d660808301876112c9565b6114e360a08301866112c9565b6114f060c0830185610f59565b6114fd60e08301846111a2565b9998505050505050505050565b60008060006060848603121561152357611522610ead565b5b6000611531868287016113f0565b9350506020611542868287016113f0565b9250506040611553868287016113f0565b9150509250925092565b600060608201905061157260008301866111a2565b61157f60208301856111a2565b61158c60408301846111a2565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006115f060268361100c565b91506115fb82611594565b604082019050919050565b6000602082019050818103600083015261161f816115e3565b905091905056fea26469706673582212201d31de7d2e9f89a9a816a1af25ccadb51eee5395ec9bbbc70cc4a855bdbda2c464736f6c63430008090033000000000000000000000000bc88b50f7230cdf2ee27b5d58b8255b7865e03b600000000000000000000000070d3687889b9844f42b97d8d45118dd3c042dadd

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103a45760003560e01c80636ddd1713116101e9578063bdc4d8631161010f578063d0a39814116100ad578063ea1644d51161007c578063ea1644d514610aa5578063ec28438a14610ac1578063f2fde38b14610add578063f8b45b0514610af9576103a4565b8063d0a3981414610a1b578063dd62ed3e14610a39578063e2f4560514610a69578063e7f444b314610a87576103a4565b8063c5e5d885116100e9578063c5e5d885146109a5578063c8c8ebe4146109c3578063c8f8d62c146109e1578063ccb61358146109fd576103a4565b8063bdc4d8631461094d578063c2bd8f9b1461096b578063c49b9a8014610989576103a4565b80638c2c690911610187578063a9059cbb11610156578063a9059cbb146108c5578063aacebbe3146108f5578063ae23087814610911578063b9e937001461092f576103a4565b80638c2c69091461083d5780638da5cb5b1461085957806395d89b4114610877578063a457c2d714610895576103a4565b80637ae3ff47116101c35780637ae3ff47146107d95780637e761377146107f75780638a8c523c146108155780638b27306d1461081f576103a4565b80636ddd17131461078157806370a082311461079f578063715018a6146107cf576103a4565b806329988b04116102ce5780634b8ce6021161026c57806366650dae1161023b57806366650dae1461070f578063672434821461072b57806368078952146107475780636c5b285514610765576103a4565b80634b8ce6021461069d578063590ffdce146106bb578063611bfa37146106d75780636402511e146106f3576103a4565b806337f2bc14116102a857806337f2bc1414610601578063395093511461061f57806343e968a31461064f57806349bd5a5e1461067f576103a4565b806329988b04146105ab578063313ce567146105c7578063373bf3b1146105e5576103a4565b8063153b0d1e116103465780631c3909e6116103155780631c3909e6146105115780631cdd3be31461052d578063234cee1e1461055d57806323b872dd1461057b576103a4565b8063153b0d1e1461049d5780631694505e146104b9578063178d9b8e146104d757806318160ddd146104f3576103a4565b8063099d0d3011610382578063099d0d30146104155780630a702e8d1461043357806310d5de5314610451578063121a6bcb14610481576103a4565b8063064a59d0146103a957806306fdde03146103c7578063095ea7b3146103e5575b600080fd5b6103b1610b17565b6040516103be9190613abd565b60405180910390f35b6103cf610b2a565b6040516103dc9190613b71565b60405180910390f35b6103ff60048036038101906103fa9190613c3b565b610bbc565b60405161040c9190613abd565b60405180910390f35b61041d610bdf565b60405161042a9190613c8a565b60405180910390f35b61043b610be5565b6040516104489190613c8a565b60405180910390f35b61046b60048036038101906104669190613ca5565b610beb565b6040516104789190613abd565b60405180910390f35b61049b60048036038101906104969190613cfe565b610c0b565b005b6104b760048036038101906104b29190613cfe565b610ce2565b005b6104c1610db9565b6040516104ce9190613d9d565b60405180910390f35b6104f160048036038101906104ec9190613db8565b610ddf565b005b6104fb610ee7565b6040516105089190613c8a565b60405180910390f35b61052b60048036038101906105269190613ca5565b610ef1565b005b61054760048036038101906105429190613ca5565b610ffd565b6040516105549190613abd565b60405180910390f35b61056561101d565b6040516105729190613e40565b60405180910390f35b61059560048036038101906105909190613e5b565b611043565b6040516105a29190613abd565b60405180910390f35b6105c560048036038101906105c09190613ca5565b611072565b005b6105cf611334565b6040516105dc9190613eca565b60405180910390f35b6105ff60048036038101906105fa919061402d565b61133d565b005b610609611454565b6040516106169190613c8a565b60405180910390f35b61063960048036038101906106349190613c3b565b61145a565b6040516106469190613abd565b60405180910390f35b61066960048036038101906106649190613ca5565b611504565b6040516106769190613abd565b60405180910390f35b610687611524565b6040516106949190614085565b60405180910390f35b6106a5611548565b6040516106b29190613c8a565b60405180910390f35b6106d560048036038101906106d09190613cfe565b61154e565b005b6106f160048036038101906106ec919061402d565b611625565b005b61070d600480360381019061070891906140a0565b61173c565b005b61072960048036038101906107249190613cfe565b6117c2565b005b61074560048036038101906107409190614190565b611899565b005b61074f6119bf565b60405161075c9190613c8a565b60405180910390f35b61077f600480360381019061077a9190613db8565b6119c5565b005b610789611acd565b6040516107969190613abd565b60405180910390f35b6107b960048036038101906107b49190613ca5565b611ae0565b6040516107c69190613c8a565b60405180910390f35b6107d7611b28565b005b6107e1611bb0565b6040516107ee9190613c8a565b60405180910390f35b6107ff611bb6565b60405161080c9190613c8a565b60405180910390f35b61081d611bbc565b005b610827611c9c565b6040516108349190613c8a565b60405180910390f35b6108576004803603810190610852919061402d565b611ca2565b005b610861611db9565b60405161086e9190614085565b60405180910390f35b61087f611de3565b60405161088c9190613b71565b60405180910390f35b6108af60048036038101906108aa9190613c3b565b611e75565b6040516108bc9190613abd565b60405180910390f35b6108df60048036038101906108da9190613c3b565b611f5f565b6040516108ec9190613abd565b60405180910390f35b61090f600480360381019061090a9190613ca5565b611f82565b005b61091961208e565b6040516109269190613c8a565b60405180910390f35b610937612094565b6040516109449190613c8a565b60405180910390f35b61095561209a565b6040516109629190613c8a565b60405180910390f35b6109736120a0565b6040516109809190613c8a565b60405180910390f35b6109a3600480360381019061099e9190614208565b6120a6565b005b6109ad612176565b6040516109ba9190613c8a565b60405180910390f35b6109cb61217c565b6040516109d89190613c8a565b60405180910390f35b6109fb60048036038101906109f69190614235565b612182565b005b610a05612218565b604051610a129190613c8a565b60405180910390f35b610a2361221e565b604051610a309190613c8a565b60405180910390f35b610a536004803603810190610a4e9190614288565b612224565b604051610a609190613c8a565b60405180910390f35b610a716122ab565b604051610a7e9190613c8a565b60405180910390f35b610a8f6122b1565b604051610a9c9190613c8a565b60405180910390f35b610abf6004803603810190610aba91906140a0565b6122b7565b005b610adb6004803603810190610ad691906140a0565b61233d565b005b610af76004803603810190610af29190613ca5565b6123c3565b005b610b016124bb565b604051610b0e9190613c8a565b60405180910390f35b600c60169054906101000a900460ff1681565b606060038054610b39906142f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b65906142f7565b8015610bb25780601f10610b8757610100808354040283529160200191610bb2565b820191906000526020600020905b815481529060010190602001808311610b9557829003601f168201915b5050505050905090565b600080610bc76124c1565b9050610bd48185856124c9565b600191505092915050565b60135481565b601f5481565b60076020528060005260406000206000915054906101000a900460ff1681565b610c136124c1565b73ffffffffffffffffffffffffffffffffffffffff16610c31611db9565b73ffffffffffffffffffffffffffffffffffffffff1614610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e90614375565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610cea6124c1565b73ffffffffffffffffffffffffffffffffffffffff16610d08611db9565b73ffffffffffffffffffffffffffffffffffffffff1614610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5590614375565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610de76124c1565b73ffffffffffffffffffffffffffffffffffffffff16610e05611db9565b73ffffffffffffffffffffffffffffffffffffffff1614610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614375565b60405180910390fd5b600081838587610e6b91906143c4565b610e7591906143c4565b610e7f91906143c4565b90506109c4811115610ebd576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600d8190555083600e8190555082600f8190555081601081905550806011819055505050505050565b6000600254905090565b610ef96124c1565b73ffffffffffffffffffffffffffffffffffffffff16610f17611db9565b73ffffffffffffffffffffffffffffffffffffffff1614610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6490614375565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c3909e6826040518263ffffffff1660e01b8152600401610fc89190614085565b600060405180830381600087803b158015610fe257600080fd5b505af1158015610ff6573d6000803e3d6000fd5b5050505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061104e6124c1565b905061105b858285612694565b611066858585612720565b60019150509392505050565b61107a6124c1565b73ffffffffffffffffffffffffffffffffffffffff16611098611db9565b73ffffffffffffffffffffffffffffffffffffffff16146110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590614375565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611176576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008190503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111d857600080fd5b505afa1580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611210919061442f565b73ffffffffffffffffffffffffffffffffffffffff161461125d576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112688160016117c2565b61127381600161154e565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc6a663dfd3d64dce542f49c3119b9e2ded1311d56c163cc6da28cd0e72d9c24960405160405180910390a35050565b60006012905090565b6113456124c1565b73ffffffffffffffffffffffffffffffffffffffff16611363611db9565b73ffffffffffffffffffffffffffffffffffffffff16146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614375565b60405180910390fd5b60008151905060005b8181101561144f576001600660008584815181106113e3576113e261445c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806114479061448b565b9150506113c2565b505050565b60185481565b6000806114656124c1565b90506114f9818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f491906143c4565b6124c9565b600191505092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000f0e66ec47608b99c6378e28fe395590d989b283e81565b60175481565b6115566124c1565b73ffffffffffffffffffffffffffffffffffffffff16611574611db9565b73ffffffffffffffffffffffffffffffffffffffff16146115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c190614375565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61162d6124c1565b73ffffffffffffffffffffffffffffffffffffffff1661164b611db9565b73ffffffffffffffffffffffffffffffffffffffff16146116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890614375565b60405180910390fd5b60008151905060005b81811015611737576001600960008584815181106116cb576116ca61445c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061172f9061448b565b9150506116aa565b505050565b6117446124c1565b73ffffffffffffffffffffffffffffffffffffffff16611762611db9565b73ffffffffffffffffffffffffffffffffffffffff16146117b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117af90614375565b60405180910390fd5b80601b8190555050565b6117ca6124c1565b73ffffffffffffffffffffffffffffffffffffffff166117e8611db9565b73ffffffffffffffffffffffffffffffffffffffff161461183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183590614375565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118a16124c1565b73ffffffffffffffffffffffffffffffffffffffff166118bf611db9565b73ffffffffffffffffffffffffffffffffffffffff1614611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c90614375565b60405180910390fd5b60008251905081518114611955576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156119b9576119a661196b6124c1565b85838151811061197e5761197d61445c565b5b60200260200101518584815181106119995761199861445c565b5b602002602001015161357a565b80806119b19061448b565b915050611958565b50505050565b60105481565b6119cd6124c1565b73ffffffffffffffffffffffffffffffffffffffff166119eb611db9565b73ffffffffffffffffffffffffffffffffffffffff1614611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3890614375565b60405180910390fd5b600081838587611a5191906143c4565b611a5b91906143c4565b611a6591906143c4565b90506109c4811115611aa3576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84601281905550836013819055508260148190555081601581905550806016819055505050505050565b600c60159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b306124c1565b73ffffffffffffffffffffffffffffffffffffffff16611b4e611db9565b73ffffffffffffffffffffffffffffffffffffffff1614611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90614375565b60405180910390fd5b611bae60006137fb565b565b600d5481565b60125481565b611bc46124c1565b73ffffffffffffffffffffffffffffffffffffffff16611be2611db9565b73ffffffffffffffffffffffffffffffffffffffff1614611c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2f90614375565b60405180910390fd5b600c60169054906101000a900460ff1615611c7f576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600c60166101000a81548160ff021916908315150217905550565b60195481565b611caa6124c1565b73ffffffffffffffffffffffffffffffffffffffff16611cc8611db9565b73ffffffffffffffffffffffffffffffffffffffff1614611d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1590614375565b60405180910390fd5b60008151905060005b81811015611db457600160076000858481518110611d4857611d4761445c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611dac9061448b565b915050611d27565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611df2906142f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1e906142f7565b8015611e6b5780601f10611e4057610100808354040283529160200191611e6b565b820191906000526020600020905b815481529060010190602001808311611e4e57829003601f168201915b5050505050905090565b600080611e806124c1565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d90614546565b60405180910390fd5b611f5382868684036124c9565b60019250505092915050565b600080611f6a6124c1565b9050611f77818585612720565b600191505092915050565b611f8a6124c1565b73ffffffffffffffffffffffffffffffffffffffff16611fa8611db9565b73ffffffffffffffffffffffffffffffffffffffff1614611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590614375565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aacebbe3826040518263ffffffff1660e01b81526004016120599190614085565b600060405180830381600087803b15801561207357600080fd5b505af1158015612087573d6000803e3d6000fd5b5050505050565b601e5481565b60115481565b600f5481565b601d5481565b6120ae6124c1565b73ffffffffffffffffffffffffffffffffffffffff166120cc611db9565b73ffffffffffffffffffffffffffffffffffffffff1614612122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211990614375565b60405180910390fd5b80600c60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161216b9190613abd565b60405180910390a150565b60145481565b601a5481565b61218a6124c1565b73ffffffffffffffffffffffffffffffffffffffff166121a8611db9565b73ffffffffffffffffffffffffffffffffffffffff16146121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f590614375565b60405180910390fd5b82601d8190555081601e8190555080601f81905550505050565b600e5481565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601b5481565b60155481565b6122bf6124c1565b73ffffffffffffffffffffffffffffffffffffffff166122dd611db9565b73ffffffffffffffffffffffffffffffffffffffff1614612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90614375565b60405180910390fd5b80601c8190555050565b6123456124c1565b73ffffffffffffffffffffffffffffffffffffffff16612363611db9565b73ffffffffffffffffffffffffffffffffffffffff16146123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b090614375565b60405180910390fd5b80601a8190555050565b6123cb6124c1565b73ffffffffffffffffffffffffffffffffffffffff166123e9611db9565b73ffffffffffffffffffffffffffffffffffffffff161461243f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243690614375565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a6906145d8565b60405180910390fd5b6124b8816137fb565b50565b601c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125309061466a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a0906146fc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126879190613c8a565b60405180910390a3505050565b60006126a08484612224565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461271a578181101561270c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270390614768565b60405180910390fd5b61271984848484036124c9565b5b50505050565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c15750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128055782826040517f709ac0170000000000000000000000000000000000000000000000000000000081526004016127fc929190614788565b60405180910390fd5b600081141561281f5761281a8383600061357a565b613575565b612827611db9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128955750612865611db9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128cf575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128e85750600c60149054906101000a900460ff16155b15612ea257600c60169054906101000a900460ff16612933576040517f12f1f92300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507f000000000000000000000000f0e66ec47608b99c6378e28fe395590d989b283e73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129e057601d54816129d991906143c4565b9050612b05565b7f000000000000000000000000f0e66ec47608b99c6378e28fe395590d989b283e73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a4957601e5481612a4291906143c4565b9050612b04565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612aed5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b0357601f5481612b0091906143c4565b90505b5b5b43811115612b4c5743816040517f4a24f3d2000000000000000000000000000000000000000000000000000000008152600401612b439291906147b1565b60405180910390fd5b43600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f000000000000000000000000f0e66ec47608b99c6378e28fe395590d989b283e73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612c355750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cee57601a54821115612c855781601a546040517f22a8406a000000000000000000000000000000000000000000000000000000008152600401612c7c9291906147b1565b60405180910390fd5b6000612c9084611ae0565b83612c9b91906143c4565b9050601c54811115612ce85780601c546040517f2194bdde000000000000000000000000000000000000000000000000000000008152600401612cdf9291906147b1565b60405180910390fd5b50612ea0565b7f000000000000000000000000f0e66ec47608b99c6378e28fe395590d989b283e73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612d935750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612de857601a54821115612de35781601a546040517f22a8406a000000000000000000000000000000000000000000000000000000008152600401612dda9291906147b1565b60405180910390fd5b612e9f565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e9e576000612e4484611ae0565b83612e4f91906143c4565b9050601c54811115612e9c5780601c546040517f2194bdde000000000000000000000000000000000000000000000000000000008152600401612e939291906147b1565b60405180910390fd5b505b5b5b505b6000601b54612ed2600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ae0565b10159050808015612ef05750600c60149054906101000a900460ff16155b8015612f085750600c60159054906101000a900460ff165b8015612f6057507f000000000000000000000000f0e66ec47608b99c6378e28fe395590d989b283e73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612fb65750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561300c5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131a6576001600c60146101000a81548160ff021916908315150217905550600060195460185460175461304191906143c4565b61304b91906143c4565b9050600081601754601b5461306091906147da565b61306a9190614863565b9050600082601854601b5461307f91906147da565b6130899190614863565b9050600083601954601b5461309e91906147da565b6130a89190614863565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394adc0d08484846040518463ffffffff1660e01b815260040161310993929190614894565b600060405180830381600087803b15801561312357600080fd5b505af1158015613137573d6000803e3d6000fd5b50505050826017600082825461314d91906148cb565b92505081905550806019600082825461316691906148cb565b92505081905550816018600082825461317f91906148cb565b925050819055506000600c60146101000a81548160ff021916908315150217905550505050505b600c60149054906101000a900460ff1615801561320d5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132635750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613568576000807f000000000000000000000000f0e66ec47608b99c6378e28fe395590d989b283e73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480156132c95750600060165414155b156133b157612710601654856132df91906147da565b6132e99190614863565b9150601654601254836132fc91906147da565b6133069190614863565b8161331191906143c4565b90506016546013548361332491906147da565b61332e9190614863565b6017600082825461333f91906143c4565b925050819055506016546014548361335791906147da565b6133619190614863565b6018600082825461337291906143c4565b925050819055506016546015548361338a91906147da565b6133949190614863565b601960008282546133a591906143c4565b925050819055506134f4565b7f000000000000000000000000f0e66ec47608b99c6378e28fe395590d989b283e73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614801561340f5750600060115414155b156134f3576127106011548561342591906147da565b61342f9190614863565b9150601154600d548361344291906147da565b61344c9190614863565b8161345791906143c4565b9050601154600e548361346a91906147da565b6134749190614863565b6017600082825461348591906143c4565b92505081905550601154600f548361349d91906147da565b6134a79190614863565b601860008282546134b891906143c4565b92505081905550601154601054836134d091906147da565b6134da9190614863565b601960008282546134eb91906143c4565b925050819055505b5b600082111561356557818461350991906148cb565b935061353886600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461357a565b613564600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826138c1565b5b50505b61357384848461357a565b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e190614971565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561365a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365190614a03565b60405180910390fd5b613665838383613a98565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156136eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e290614a95565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461377e91906143c4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137e29190613c8a565b60405180910390a36137f5848484613a9d565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392890614b27565b60405180910390fd5b61393d82600083613a98565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ba90614bb9565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254613a1a91906148cb565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a7f9190613c8a565b60405180910390a3613a9383600084613a9d565b505050565b505050565b505050565b60008115159050919050565b613ab781613aa2565b82525050565b6000602082019050613ad26000830184613aae565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b12578082015181840152602081019050613af7565b83811115613b21576000848401525b50505050565b6000601f19601f8301169050919050565b6000613b4382613ad8565b613b4d8185613ae3565b9350613b5d818560208601613af4565b613b6681613b27565b840191505092915050565b60006020820190508181036000830152613b8b8184613b38565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bd282613ba7565b9050919050565b613be281613bc7565b8114613bed57600080fd5b50565b600081359050613bff81613bd9565b92915050565b6000819050919050565b613c1881613c05565b8114613c2357600080fd5b50565b600081359050613c3581613c0f565b92915050565b60008060408385031215613c5257613c51613b9d565b5b6000613c6085828601613bf0565b9250506020613c7185828601613c26565b9150509250929050565b613c8481613c05565b82525050565b6000602082019050613c9f6000830184613c7b565b92915050565b600060208284031215613cbb57613cba613b9d565b5b6000613cc984828501613bf0565b91505092915050565b613cdb81613aa2565b8114613ce657600080fd5b50565b600081359050613cf881613cd2565b92915050565b60008060408385031215613d1557613d14613b9d565b5b6000613d2385828601613bf0565b9250506020613d3485828601613ce9565b9150509250929050565b6000819050919050565b6000613d63613d5e613d5984613ba7565b613d3e565b613ba7565b9050919050565b6000613d7582613d48565b9050919050565b6000613d8782613d6a565b9050919050565b613d9781613d7c565b82525050565b6000602082019050613db26000830184613d8e565b92915050565b60008060008060808587031215613dd257613dd1613b9d565b5b6000613de087828801613c26565b9450506020613df187828801613c26565b9350506040613e0287828801613c26565b9250506060613e1387828801613c26565b91505092959194509250565b6000613e2a82613d6a565b9050919050565b613e3a81613e1f565b82525050565b6000602082019050613e556000830184613e31565b92915050565b600080600060608486031215613e7457613e73613b9d565b5b6000613e8286828701613bf0565b9350506020613e9386828701613bf0565b9250506040613ea486828701613c26565b9150509250925092565b600060ff82169050919050565b613ec481613eae565b82525050565b6000602082019050613edf6000830184613ebb565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f2282613b27565b810181811067ffffffffffffffff82111715613f4157613f40613eea565b5b80604052505050565b6000613f54613b93565b9050613f608282613f19565b919050565b600067ffffffffffffffff821115613f8057613f7f613eea565b5b602082029050602081019050919050565b600080fd5b6000613fa9613fa484613f65565b613f4a565b90508083825260208201905060208402830185811115613fcc57613fcb613f91565b5b835b81811015613ff55780613fe18882613bf0565b845260208401935050602081019050613fce565b5050509392505050565b600082601f83011261401457614013613ee5565b5b8135614024848260208601613f96565b91505092915050565b60006020828403121561404357614042613b9d565b5b600082013567ffffffffffffffff81111561406157614060613ba2565b5b61406d84828501613fff565b91505092915050565b61407f81613bc7565b82525050565b600060208201905061409a6000830184614076565b92915050565b6000602082840312156140b6576140b5613b9d565b5b60006140c484828501613c26565b91505092915050565b600067ffffffffffffffff8211156140e8576140e7613eea565b5b602082029050602081019050919050565b600061410c614107846140cd565b613f4a565b9050808382526020820190506020840283018581111561412f5761412e613f91565b5b835b8181101561415857806141448882613c26565b845260208401935050602081019050614131565b5050509392505050565b600082601f83011261417757614176613ee5565b5b81356141878482602086016140f9565b91505092915050565b600080604083850312156141a7576141a6613b9d565b5b600083013567ffffffffffffffff8111156141c5576141c4613ba2565b5b6141d185828601613fff565b925050602083013567ffffffffffffffff8111156141f2576141f1613ba2565b5b6141fe85828601614162565b9150509250929050565b60006020828403121561421e5761421d613b9d565b5b600061422c84828501613ce9565b91505092915050565b60008060006060848603121561424e5761424d613b9d565b5b600061425c86828701613c26565b935050602061426d86828701613c26565b925050604061427e86828701613c26565b9150509250925092565b6000806040838503121561429f5761429e613b9d565b5b60006142ad85828601613bf0565b92505060206142be85828601613bf0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061430f57607f821691505b60208210811415614323576143226142c8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061435f602083613ae3565b915061436a82614329565b602082019050919050565b6000602082019050818103600083015261438e81614352565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143cf82613c05565b91506143da83613c05565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561440f5761440e614395565b5b828201905092915050565b60008151905061442981613bd9565b92915050565b60006020828403121561444557614444613b9d565b5b60006144538482850161441a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061449682613c05565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144c9576144c8614395565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614530602583613ae3565b915061453b826144d4565b604082019050919050565b6000602082019050818103600083015261455f81614523565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145c2602683613ae3565b91506145cd82614566565b604082019050919050565b600060208201905081810360008301526145f1816145b5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614654602483613ae3565b915061465f826145f8565b604082019050919050565b6000602082019050818103600083015261468381614647565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146e6602283613ae3565b91506146f18261468a565b604082019050919050565b60006020820190508181036000830152614715816146d9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614752601d83613ae3565b915061475d8261471c565b602082019050919050565b6000602082019050818103600083015261478181614745565b9050919050565b600060408201905061479d6000830185614076565b6147aa6020830184614076565b9392505050565b60006040820190506147c66000830185613c7b565b6147d36020830184613c7b565b9392505050565b60006147e582613c05565b91506147f083613c05565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561482957614828614395565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061486e82613c05565b915061487983613c05565b92508261488957614888614834565b5b828204905092915050565b60006060820190506148a96000830186613c7b565b6148b66020830185613c7b565b6148c36040830184613c7b565b949350505050565b60006148d682613c05565b91506148e183613c05565b9250828210156148f4576148f3614395565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061495b602583613ae3565b9150614966826148ff565b604082019050919050565b6000602082019050818103600083015261498a8161494e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006149ed602383613ae3565b91506149f882614991565b604082019050919050565b60006020820190508181036000830152614a1c816149e0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614a7f602683613ae3565b9150614a8a82614a23565b604082019050919050565b60006020820190508181036000830152614aae81614a72565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b11602183613ae3565b9150614b1c82614ab5565b604082019050919050565b60006020820190508181036000830152614b4081614b04565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ba3602283613ae3565b9150614bae82614b47565b604082019050919050565b60006020820190508181036000830152614bd281614b96565b905091905056fea2646970667358221220cc7ea2f1a73fbd0f2c581eaad36cddf0bff746aabe6d6e98f238444a18e93ee264736f6c63430008090033

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

000000000000000000000000bc88b50f7230cdf2ee27b5d58b8255b7865e03b600000000000000000000000070d3687889b9844f42b97d8d45118dd3c042dadd

-----Decoded View---------------
Arg [0] : _marketingWallet (address): 0xbc88b50F7230cDF2Ee27b5d58B8255b7865e03b6
Arg [1] : _opsWallet (address): 0x70D3687889B9844F42b97d8d45118dd3C042daDD

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000bc88b50f7230cdf2ee27b5d58b8255b7865e03b6
Arg [1] : 00000000000000000000000070d3687889b9844f42b97d8d45118dd3c042dadd


Deployed Bytecode Sourcemap

28908:11579:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29468:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15069:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17420:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29748:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30325:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29012:64;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37535:132;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36191:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29261:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38107:418;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16189:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39559:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29143:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29356:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18201:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39871:611;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16031:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37296:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29955:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18905:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29083:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29309:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29918:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37158:130;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36319:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38887:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36737:152;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38533:346;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29623:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37675:424;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29431:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16360:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8475:103;;;:::i;:::-;;29505:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29709:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39689:174;;;:::i;:::-;;29986:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36897:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7824:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15288:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19648:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16693:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39417:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30290:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29666:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29586:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30256:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39248:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29792:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30025:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36549:180;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29543:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29874:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16949:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30106:48;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29830:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39124:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39001:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8733:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30185:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29468:28;;;;;;;;;;;;;:::o;15069:100::-;15123:13;15156:5;15149:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15069:100;:::o;17420:201::-;17503:4;17520:13;17536:12;:10;:12::i;:::-;17520:28;;17559:32;17568:5;17575:7;17584:6;17559:8;:32::i;:::-;17609:4;17602:11;;;17420:201;;;;:::o;29748:37::-;;;;:::o;30325:32::-;;;;:::o;29012:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;37535:132::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37654:5:::1;37622:20;:29;37643:7;37622:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;37535:132:::0;;:::o;36191:120::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36298:5:::1;36272:14;:23;36287:7;36272:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;36191:120:::0;;:::o;29261:41::-;;;;;;;;;;;;;:::o;38107:418::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38222:13:::1;38263:9;38257:3;38245:9;38238:4;:16;;;;:::i;:::-;:22;;;;:::i;:::-;:34;;;;:::i;:::-;38222:50;;38295:4;38287:5;:12;38283:74;;;38323:22;;;;;;;;;;;;;;38283:74;38380:4;38367:10;:17;;;;38413:9;38395:15;:27;;;;38445:3;38433:9;:15;;;;38477:9;38459:15;:27;;;;38512:5;38497:12;:20;;;;38211:314;38107:418:::0;;;;:::o;16189:108::-;16250:7;16277:12;;16270:19;;16189:108;:::o;39559:122::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39633:13:::1;;;;;;;;;;;:29;;;39663:9;39633:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39559:122:::0;:::o;29143:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;29356:38::-;;;;;;;;;;;;;:::o;18201:295::-;18332:4;18349:15;18367:12;:10;:12::i;:::-;18349:30;;18390:38;18406:4;18412:7;18421:6;18390:15;:38::i;:::-;18439:27;18449:4;18455:2;18459:6;18439:9;:27::i;:::-;18484:4;18477:11;;;18201:295;;;;;:::o;39871:611::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39971:13:::1;;;;;;;;;;;39949:36;;:10;:36;;;39945:98;;;40009:22;;;;;;;;;;;;;;39945:98;40055:31;40107:10;40055:63;;40168:4;40135:38;;:13;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;;;40131:100;;40197:22;;;;;;;;;;;;;;40131:100;40243:59;40281:13;40297:4;40243:29;:59::i;:::-;40313:49;40341:13;40357:4;40313:19;:49::i;:::-;40391:13;40375;;:29;;;;;;;;;;;;;;;;;;40459:13;;;;;;;;;;;40422:52;;40439:10;40422:52;;;;;;;;;;;;39934:548;39871:611:::0;:::o;16031:93::-;16089:5;16114:2;16107:9;;16031:93;:::o;37296:231::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37380:11:::1;37394:8;:15;37380:29;;37425:9;37420:100;37444:3;37440:1;:7;37420:100;;;37504:4;37469:19;:32;37489:8;37498:1;37489:11;;;;;;;;:::i;:::-;;;;;;;;37469:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37449:3;;;;;:::i;:::-;;;;37420:100;;;;37369:158;37296:231:::0;:::o;29955:24::-;;;;:::o;18905:240::-;18993:4;19010:13;19026:12;:10;:12::i;:::-;19010:28;;19049:66;19058:5;19065:7;19104:10;19074:11;:18;19086:5;19074:18;;;;;;;;;;;;;;;:27;19093:7;19074:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;19049:8;:66::i;:::-;19133:4;19126:11;;;18905:240;;;;:::o;29083:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;29309:38::-;;;:::o;29918:30::-;;;;:::o;37158:130::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37275:5:::1;37244:19;:28;37264:7;37244:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;37158:130:::0;;:::o;36319:222::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36399:11:::1;36413:8;:15;36399:29;;36444:9;36439:95;36463:3;36459:1;:7;36439:95;;;36518:4;36488:14;:27;36503:8;36512:1;36503:11;;;;;;;;:::i;:::-;;;;;;;;36488:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;36468:3;;;;;:::i;:::-;;;;36439:95;;;;36388:153;36319:222:::0;:::o;38887:106::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38979:6:::1;38958:18;:27;;;;38887:106:::0;:::o;36737:152::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36876:5:::1;36833:31;:40;36865:7;36833:40;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;36737:152:::0;;:::o;38533:346::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38630:11:::1;38644:5;:12;38630:26;;38678:7;:14;38671:3;:21;38667:83;;38716:22;;;;;;;;;;;;;;38667:83;38765:9;38760:112;38784:3;38780:1;:7;38760:112;;;38809:51;38825:12;:10;:12::i;:::-;38839:5;38845:1;38839:8;;;;;;;;:::i;:::-;;;;;;;;38849:7;38857:1;38849:10;;;;;;;;:::i;:::-;;;;;;;;38809:15;:51::i;:::-;38789:3;;;;;:::i;:::-;;;;38760:112;;;;38619:260;38533:346:::0;;:::o;29623:36::-;;;;:::o;37675:424::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37791:13:::1;37832:9;37826:3;37814:9;37807:4;:16;;;;:::i;:::-;:22;;;;:::i;:::-;:34;;;;:::i;:::-;37791:50;;37864:4;37856:5;:12;37852:74;;;37892:22;;;;;;;;;;;;;;37852:74;37950:4;37936:11;:18;;;;37984:9;37965:16;:28;;;;38017:3;38004:10;:16;;;;38050:9;38031:16;:28;;;;38086:5;38070:13;:21;;;;37780:319;37675:424:::0;;;;:::o;29431:30::-;;;;;;;;;;;;;:::o;16360:127::-;16434:7;16461:9;:18;16471:7;16461:18;;;;;;;;;;;;;;;;16454:25;;16360:127;;;:::o;8475:103::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8540:30:::1;8567:1;8540:18;:30::i;:::-;8475:103::o:0;29505:31::-;;;;:::o;29709:32::-;;;;:::o;39689:174::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39748:16:::1;;;;;;;;;;;39744:78;;;39788:22;;;;;;;;;;;;;;39744:78;39851:4;39832:16;;:23;;;;;;;;;;;;;;;;;;39689:174::o:0;29986:30::-;;;;:::o;36897:253::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36991:11:::1;37005:8;:15;36991:29;;37036:9;37031:112;37055:3;37051:1;:7;37031:112;;;37127:4;37080:31;:44;37112:8;37121:1;37112:11;;;;;;;;:::i;:::-;;;;;;;;37080:44;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;37060:3;;;;;:::i;:::-;;;;37031:112;;;;36980:170;36897:253:::0;:::o;7824:87::-;7870:7;7897:6;;;;;;;;;;;7890:13;;7824:87;:::o;15288:104::-;15344:13;15377:7;15370:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15288:104;:::o;19648:438::-;19741:4;19758:13;19774:12;:10;:12::i;:::-;19758:28;;19797:24;19824:11;:18;19836:5;19824:18;;;;;;;;;;;;;;;:27;19843:7;19824:27;;;;;;;;;;;;;;;;19797:54;;19890:15;19870:16;:35;;19862:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;19983:60;19992:5;19999:7;20027:15;20008:16;:34;19983:8;:60::i;:::-;20074:4;20067:11;;;;19648:438;;;;:::o;16693:193::-;16772:4;16789:13;16805:12;:10;:12::i;:::-;16789:28;;16828;16838:5;16845:2;16849:6;16828:9;:28::i;:::-;16874:4;16867:11;;;16693:193;;;;:::o;39417:134::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39497:13:::1;;;;;;;;;;;:35;;;39533:9;39497:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39417:134:::0;:::o;30290:28::-;;;;:::o;29666:34::-;;;;:::o;29586:30::-;;;;:::o;30256:27::-;;;;:::o;39248:161::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39339:8:::1;39325:11;;:22;;;;;;;;;;;;;;;;;;39363:38;39392:8;39363:38;;;;;;:::i;:::-;;;;;;;;39248:161:::0;:::o;29792:31::-;;;;:::o;30025:51::-;;;;:::o;36549:180::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36659:4:::1;36648:8;:15;;;;36686:5;36674:9;:17;;;;36718:3;36702:13;:19;;;;36549:180:::0;;;:::o;29543:36::-;;;;:::o;29874:35::-;;;;:::o;16949:151::-;17038:7;17065:11;:18;17077:5;17065:18;;;;;;;;;;;;;;;:27;17084:7;17065:27;;;;;;;;;;;;;;;;17058:34;;16949:151;;;;:::o;30106:48::-;;;;:::o;29830:37::-;;;;:::o;39124:116::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39218:14:::1;39206:9;:26;;;;39124:116:::0;:::o;39001:115::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39099:9:::1;39076:20;:32;;;;39001:115:::0;:::o;8733:201::-;8055:12;:10;:12::i;:::-;8044:23;;:7;:5;:7::i;:::-;:23;;;8036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8842:1:::1;8822:22;;:8;:22;;;;8814:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8898:28;8917:8;8898:18;:28::i;:::-;8733:201:::0;:::o;30185:41::-;;;;:::o;6548:98::-;6601:7;6628:10;6621:17;;6548:98;:::o;23284:380::-;23437:1;23420:19;;:5;:19;;;;23412:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23518:1;23499:21;;:7;:21;;;;23491:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23602:6;23572:11;:18;23584:5;23572:18;;;;;;;;;;;;;;;:27;23591:7;23572:27;;;;;;;;;;;;;;;:36;;;;23640:7;23624:32;;23633:5;23624:32;;;23649:6;23624:32;;;;;;:::i;:::-;;;;;;;;23284:380;;;:::o;23951:453::-;24086:24;24113:25;24123:5;24130:7;24113:9;:25::i;:::-;24086:52;;24173:17;24153:16;:37;24149:248;;24235:6;24215:16;:26;;24207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24319:51;24328:5;24335:7;24363:6;24344:16;:25;24319:8;:51::i;:::-;24149:248;24075:329;23951:453;;;:::o;31835:4348::-;31963:14;:20;31978:4;31963:20;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;31987:14;:18;32002:2;31987:18;;;;;;;;;;;;;;;;;;;;;;;;;31963:42;31959:107;;;32045:4;32051:2;32029:25;;;;;;;;;;;;:::i;:::-;;;;;;;;31959:107;32091:1;32081:6;:11;32078:92;;;32109:28;32125:4;32131:2;32135:1;32109:15;:28::i;:::-;32152:7;;32078:92;32208:7;:5;:7::i;:::-;32200:15;;:4;:15;;;;:45;;;;;32238:7;:5;:7::i;:::-;32232:13;;:2;:13;;;;32200:45;:83;;;;;32276:6;32262:21;;:2;:21;;;;32200:83;:109;;;;;32301:8;;;;;;;;;;;32300:9;32200:109;32182:1850;;;32342:16;;;;;;;;;;;32337:83;;32385:19;;;;;;;;;;;;;;32337:83;32436:20;32459:18;:29;32478:9;32459:29;;;;;;;;;;;;;;;;32436:52;;32515:13;32507:21;;:4;:21;;;32503:309;;;32565:8;;32549:24;;;;;:::i;:::-;;;32503:309;;;32605:13;32599:19;;:2;:19;;;32595:217;;;32655:9;;32639:25;;;;;:::i;:::-;;;32595:217;;;32691:20;:26;32712:4;32691:26;;;;;;;;;;;;;;;;;;;;;;;;;32690:27;:56;;;;;32722:20;:24;32743:2;32722:24;;;;;;;;;;;;;;;;;;;;;;;;;32721:25;32690:56;32686:126;;;32783:13;;32767:29;;;;;:::i;:::-;;;32686:126;32595:217;32503:309;32847:12;32832;:27;32828:123;;;32908:12;32922;32887:48;;;;;;;;;;;;:::i;:::-;;;;;;;;32828:123;32997:12;32965:18;:29;32984:9;32965:29;;;;;;;;;;;;;;;:44;;;;33038:13;33030:21;;:4;:21;;;:61;;;;;33056:31;:35;33088:2;33056:35;;;;;;;;;;;;;;;;;;;;;;;;;33055:36;33030:61;33026:995;;;33132:20;;33123:6;:29;33119:133;;;33203:6;33211:20;;33184:48;;;;;;;;;;;;:::i;:::-;;;;;;;;33119:133;33270:24;33306:13;33316:2;33306:9;:13::i;:::-;33297:6;:22;;;;:::i;:::-;33270:49;;33361:9;;33342:16;:28;33338:135;;;33425:16;33443:9;;33402:51;;;;;;;;;;;;:::i;:::-;;;;;;;;33338:135;33093:397;33026:995;;;33506:13;33500:19;;:2;:19;;;:61;;;;;33524:31;:37;33556:4;33524:37;;;;;;;;;;;;;;;;;;;;;;;;;33523:38;33500:61;33496:525;;;33603:20;;33594:6;:29;33590:133;;;33674:6;33682:20;;33655:48;;;;;;;;;;;;:::i;:::-;;;;;;;;33590:133;33496:525;;;33748:31;:35;33780:2;33748:35;;;;;;;;;;;;;;;;;;;;;;;;;33744:277;;33803:24;33839:13;33849:2;33839:9;:13::i;:::-;33830:6;:22;;;;:::i;:::-;33803:49;;33894:9;;33875:16;:28;33871:135;;;33958:16;33976:9;;33935:51;;;;;;;;;;;;:::i;:::-;;;;;;;;33871:135;33784:237;33744:277;33496:525;33026:995;32320:1712;32182:1850;34042:12;34094:18;;34057:33;34075:13;;;;;;;;;;;34057:9;:33::i;:::-;:55;;34042:70;;34143:7;:33;;;;;34168:8;;;;;;;;;;;34167:9;34143:33;:61;;;;;34193:11;;;;;;;;;;;34143:61;:99;;;;;34229:13;34221:21;;:4;:21;;;;34143:99;:142;;;;;34260:19;:25;34280:4;34260:25;;;;;;;;;;;;;;;;;;;;;;;;;34259:26;34143:142;:183;;;;;34303:19;:23;34323:2;34303:23;;;;;;;;;;;;;;;;;;;;;;;;;34302:24;34143:183;34125:797;;;34364:4;34353:8;;:15;;;;;;;;;;;;;;;;;;34385:13;34431:15;;34419:9;;34401:15;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;34385:61;;34461:17;34520:5;34502:15;;34481:18;;:36;;;;:::i;:::-;:44;;;;:::i;:::-;34461:64;;34540:17;34593:5;34581:9;;34560:18;;:30;;;;:::i;:::-;:38;;;;:::i;:::-;34540:58;;34613:17;34672:5;34654:15;;34633:18;;:36;;;;:::i;:::-;:44;;;;:::i;:::-;34613:64;;34694:13;;;;;;;;;;;:25;;;34720:9;34731;34742;34694:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34788:9;34769:15;;:28;;;;;;;:::i;:::-;;;;;;;;34831:9;34812:15;;:28;;;;;;;:::i;:::-;;;;;;;;34868:9;34855;;:22;;;;;;;:::i;:::-;;;;;;;;34905:5;34894:8;;:16;;;;;;;;;;;;;;;;;;34338:584;;;;34125:797;34938:8;;;;;;;;;;;34937:9;:39;;;;;34951:19;:25;34971:4;34951:25;;;;;;;;;;;;;;;;;;;;;;;;;34950:26;34937:39;:67;;;;;34981:19;:23;35001:2;34981:23;;;;;;;;;;;;;;;;;;;;;;;;;34980:24;34937:67;34934:1194;;;35021:12;35048:18;35091:13;35085:19;;:2;:19;;;:41;;;;;35125:1;35108:13;;:18;;35085:41;35081:821;;;35186:5;35170:13;;35161:6;:22;;;;:::i;:::-;:30;;;;:::i;:::-;35154:37;;35245:13;;35231:11;;35224:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;35210:48;;;;;:::i;:::-;;;35322:13;;35303:16;;35296:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;35277:15;;:58;;;;;;;:::i;:::-;;;;;;;;35387:13;;35374:10;;35367:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;35354:9;;:46;;;;;;;:::i;:::-;;;;;;;;35464:13;;35445:16;;35438:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;35419:15;;:58;;;;;;;:::i;:::-;;;;;;;;35081:821;;;35511:13;35503:21;;:4;:21;;;:42;;;;;35544:1;35528:12;;:17;;35503:42;35499:403;;;35603:5;35588:12;;35579:6;:21;;;;:::i;:::-;:29;;;;:::i;:::-;35572:36;;35661:12;;35648:10;;35641:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;35627:46;;;;;:::i;:::-;;;35736:12;;35718:15;;35711:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;35692:15;;:56;;;;;;;:::i;:::-;;;;;;;;35799:12;;35787:9;;35780:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;35767:9;;:44;;;;;;;:::i;:::-;;;;;;;;35874:12;;35856:15;;35849:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;35830:15;;:56;;;;;;;:::i;:::-;;;;;;;;35499:403;35081:821;35927:1;35920:4;:8;35916:199;;;35959:4;35949:14;;;;;:::i;:::-;;;35982:51;35998:4;36012:13;;;;;;;;;;;36028:4;35982:15;:51::i;:::-;36052:47;36072:13;;;;;;;;;;;36088:10;36052:11;:47::i;:::-;35916:199;35006:1122;;34934:1194;36140:33;36156:4;36162:2;36166:6;36140:15;:33::i;:::-;31948:4235;31835:4348;;;;:::o;20565:671::-;20712:1;20696:18;;:4;:18;;;;20688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20789:1;20775:16;;:2;:16;;;;20767:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20844:38;20865:4;20871:2;20875:6;20844:20;:38::i;:::-;20895:19;20917:9;:15;20927:4;20917:15;;;;;;;;;;;;;;;;20895:37;;20966:6;20951:11;:21;;20943:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21083:6;21069:11;:20;21051:9;:15;21061:4;21051:15;;;;;;;;;;;;;;;:38;;;;21128:6;21111:9;:13;21121:2;21111:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;21167:2;21152:26;;21161:4;21152:26;;;21171:6;21152:26;;;;;;:::i;:::-;;;;;;;;21191:37;21211:4;21217:2;21221:6;21191:19;:37::i;:::-;20677:559;20565:671;;;:::o;9094:191::-;9168:16;9187:6;;;;;;;;;;;9168:25;;9213:8;9204:6;;:17;;;;;;;;;;;;;;;;;;9268:8;9237:40;;9258:8;9237:40;;;;;;;;;;;;9157:128;9094:191;:::o;22255:591::-;22358:1;22339:21;;:7;:21;;;;22331:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22411:49;22432:7;22449:1;22453:6;22411:20;:49::i;:::-;22473:22;22498:9;:18;22508:7;22498:18;;;;;;;;;;;;;;;;22473:43;;22553:6;22535:14;:24;;22527:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22672:6;22655:14;:23;22634:9;:18;22644:7;22634:18;;;;;;;;;;;;;;;:44;;;;22716:6;22700:12;;:22;;;;;;;:::i;:::-;;;;;;;;22766:1;22740:37;;22749:7;22740:37;;;22770:6;22740:37;;;;;;:::i;:::-;;;;;;;;22790:48;22810:7;22827:1;22831:6;22790:19;:48::i;:::-;22320:526;22255:591;;:::o;25004:125::-;;;;:::o;25733:124::-;;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:99::-;486:6;520:5;514:12;504:22;;434:99;;;:::o;539:169::-;623:11;657:6;652:3;645:19;697:4;692:3;688:14;673:29;;539:169;;;;:::o;714:307::-;782:1;792:113;806:6;803:1;800:13;792:113;;;891:1;886:3;882:11;876:18;872:1;867:3;863:11;856:39;828:2;825:1;821:10;816:15;;792:113;;;923:6;920:1;917:13;914:101;;;1003:1;994:6;989:3;985:16;978:27;914:101;763:258;714:307;;;:::o;1027:102::-;1068:6;1119:2;1115:7;1110:2;1103:5;1099:14;1095:28;1085:38;;1027:102;;;:::o;1135:364::-;1223:3;1251:39;1284:5;1251:39;:::i;:::-;1306:71;1370:6;1365:3;1306:71;:::i;:::-;1299:78;;1386:52;1431:6;1426:3;1419:4;1412:5;1408:16;1386:52;:::i;:::-;1463:29;1485:6;1463:29;:::i;:::-;1458:3;1454:39;1447:46;;1227:272;1135:364;;;;:::o;1505:313::-;1618:4;1656:2;1645:9;1641:18;1633:26;;1705:9;1699:4;1695:20;1691:1;1680:9;1676:17;1669:47;1733:78;1806:4;1797:6;1733:78;:::i;:::-;1725:86;;1505:313;;;;:::o;1824:75::-;1857:6;1890:2;1884:9;1874:19;;1824:75;:::o;1905:117::-;2014:1;2011;2004:12;2028:117;2137:1;2134;2127:12;2151:126;2188:7;2228:42;2221:5;2217:54;2206:65;;2151:126;;;:::o;2283:96::-;2320:7;2349:24;2367:5;2349:24;:::i;:::-;2338:35;;2283:96;;;:::o;2385:122::-;2458:24;2476:5;2458:24;:::i;:::-;2451:5;2448:35;2438:63;;2497:1;2494;2487:12;2438:63;2385:122;:::o;2513:139::-;2559:5;2597:6;2584:20;2575:29;;2613:33;2640:5;2613:33;:::i;:::-;2513:139;;;;:::o;2658:77::-;2695:7;2724:5;2713:16;;2658:77;;;:::o;2741:122::-;2814:24;2832:5;2814:24;:::i;:::-;2807:5;2804:35;2794:63;;2853:1;2850;2843:12;2794:63;2741:122;:::o;2869:139::-;2915:5;2953:6;2940:20;2931:29;;2969:33;2996:5;2969:33;:::i;:::-;2869:139;;;;:::o;3014:474::-;3082:6;3090;3139:2;3127:9;3118:7;3114:23;3110:32;3107:119;;;3145:79;;:::i;:::-;3107:119;3265:1;3290:53;3335:7;3326:6;3315:9;3311:22;3290:53;:::i;:::-;3280:63;;3236:117;3392:2;3418:53;3463:7;3454:6;3443:9;3439:22;3418:53;:::i;:::-;3408:63;;3363:118;3014:474;;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:116::-;4251:21;4266:5;4251:21;:::i;:::-;4244:5;4241:32;4231:60;;4287:1;4284;4277:12;4231:60;4181:116;:::o;4303:133::-;4346:5;4384:6;4371:20;4362:29;;4400:30;4424:5;4400:30;:::i;:::-;4303:133;;;;:::o;4442:468::-;4507:6;4515;4564:2;4552:9;4543:7;4539:23;4535:32;4532:119;;;4570:79;;:::i;:::-;4532:119;4690:1;4715:53;4760:7;4751:6;4740:9;4736:22;4715:53;:::i;:::-;4705:63;;4661:117;4817:2;4843:50;4885:7;4876:6;4865:9;4861:22;4843:50;:::i;:::-;4833:60;;4788:115;4442:468;;;;;:::o;4916:60::-;4944:3;4965:5;4958:12;;4916:60;;;:::o;4982:142::-;5032:9;5065:53;5083:34;5092:24;5110:5;5092:24;:::i;:::-;5083:34;:::i;:::-;5065:53;:::i;:::-;5052:66;;4982:142;;;:::o;5130:126::-;5180:9;5213:37;5244:5;5213:37;:::i;:::-;5200:50;;5130:126;;;:::o;5262:152::-;5338:9;5371:37;5402:5;5371:37;:::i;:::-;5358:50;;5262:152;;;:::o;5420:183::-;5533:63;5590:5;5533:63;:::i;:::-;5528:3;5521:76;5420:183;;:::o;5609:274::-;5728:4;5766:2;5755:9;5751:18;5743:26;;5779:97;5873:1;5862:9;5858:17;5849:6;5779:97;:::i;:::-;5609:274;;;;:::o;5889:765::-;5975:6;5983;5991;5999;6048:3;6036:9;6027:7;6023:23;6019:33;6016:120;;;6055:79;;:::i;:::-;6016:120;6175:1;6200:53;6245:7;6236:6;6225:9;6221:22;6200:53;:::i;:::-;6190:63;;6146:117;6302:2;6328:53;6373:7;6364:6;6353:9;6349:22;6328:53;:::i;:::-;6318:63;;6273:118;6430:2;6456:53;6501:7;6492:6;6481:9;6477:22;6456:53;:::i;:::-;6446:63;;6401:118;6558:2;6584:53;6629:7;6620:6;6609:9;6605:22;6584:53;:::i;:::-;6574:63;;6529:118;5889:765;;;;;;;:::o;6660:152::-;6736:9;6769:37;6800:5;6769:37;:::i;:::-;6756:50;;6660:152;;;:::o;6818:183::-;6931:63;6988:5;6931:63;:::i;:::-;6926:3;6919:76;6818:183;;:::o;7007:274::-;7126:4;7164:2;7153:9;7149:18;7141:26;;7177:97;7271:1;7260:9;7256:17;7247:6;7177:97;:::i;:::-;7007:274;;;;:::o;7287:619::-;7364:6;7372;7380;7429:2;7417:9;7408:7;7404:23;7400:32;7397:119;;;7435:79;;:::i;:::-;7397:119;7555:1;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7526:117;7682:2;7708:53;7753:7;7744:6;7733:9;7729:22;7708:53;:::i;:::-;7698:63;;7653:118;7810:2;7836:53;7881:7;7872:6;7861:9;7857:22;7836:53;:::i;:::-;7826:63;;7781:118;7287:619;;;;;:::o;7912:86::-;7947:7;7987:4;7980:5;7976:16;7965:27;;7912:86;;;:::o;8004:112::-;8087:22;8103:5;8087:22;:::i;:::-;8082:3;8075:35;8004:112;;:::o;8122:214::-;8211:4;8249:2;8238:9;8234:18;8226:26;;8262:67;8326:1;8315:9;8311:17;8302:6;8262:67;:::i;:::-;8122:214;;;;:::o;8342:117::-;8451:1;8448;8441:12;8465:180;8513:77;8510:1;8503:88;8610:4;8607:1;8600:15;8634:4;8631:1;8624:15;8651:281;8734:27;8756:4;8734:27;:::i;:::-;8726:6;8722:40;8864:6;8852:10;8849:22;8828:18;8816:10;8813:34;8810:62;8807:88;;;8875:18;;:::i;:::-;8807:88;8915:10;8911:2;8904:22;8694:238;8651:281;;:::o;8938:129::-;8972:6;8999:20;;:::i;:::-;8989:30;;9028:33;9056:4;9048:6;9028:33;:::i;:::-;8938:129;;;:::o;9073:311::-;9150:4;9240:18;9232:6;9229:30;9226:56;;;9262:18;;:::i;:::-;9226:56;9312:4;9304:6;9300:17;9292:25;;9372:4;9366;9362:15;9354:23;;9073:311;;;:::o;9390:117::-;9499:1;9496;9489:12;9530:710;9626:5;9651:81;9667:64;9724:6;9667:64;:::i;:::-;9651:81;:::i;:::-;9642:90;;9752:5;9781:6;9774:5;9767:21;9815:4;9808:5;9804:16;9797:23;;9868:4;9860:6;9856:17;9848:6;9844:30;9897:3;9889:6;9886:15;9883:122;;;9916:79;;:::i;:::-;9883:122;10031:6;10014:220;10048:6;10043:3;10040:15;10014:220;;;10123:3;10152:37;10185:3;10173:10;10152:37;:::i;:::-;10147:3;10140:50;10219:4;10214:3;10210:14;10203:21;;10090:144;10074:4;10069:3;10065:14;10058:21;;10014:220;;;10018:21;9632:608;;9530:710;;;;;:::o;10263:370::-;10334:5;10383:3;10376:4;10368:6;10364:17;10360:27;10350:122;;10391:79;;:::i;:::-;10350:122;10508:6;10495:20;10533:94;10623:3;10615:6;10608:4;10600:6;10596:17;10533:94;:::i;:::-;10524:103;;10340:293;10263:370;;;;:::o;10639:539::-;10723:6;10772:2;10760:9;10751:7;10747:23;10743:32;10740:119;;;10778:79;;:::i;:::-;10740:119;10926:1;10915:9;10911:17;10898:31;10956:18;10948:6;10945:30;10942:117;;;10978:79;;:::i;:::-;10942:117;11083:78;11153:7;11144:6;11133:9;11129:22;11083:78;:::i;:::-;11073:88;;10869:302;10639:539;;;;:::o;11184:118::-;11271:24;11289:5;11271:24;:::i;:::-;11266:3;11259:37;11184:118;;:::o;11308:222::-;11401:4;11439:2;11428:9;11424:18;11416:26;;11452:71;11520:1;11509:9;11505:17;11496:6;11452:71;:::i;:::-;11308:222;;;;:::o;11536:329::-;11595:6;11644:2;11632:9;11623:7;11619:23;11615:32;11612:119;;;11650:79;;:::i;:::-;11612:119;11770:1;11795:53;11840:7;11831:6;11820:9;11816:22;11795:53;:::i;:::-;11785:63;;11741:117;11536:329;;;;:::o;11871:311::-;11948:4;12038:18;12030:6;12027:30;12024:56;;;12060:18;;:::i;:::-;12024:56;12110:4;12102:6;12098:17;12090:25;;12170:4;12164;12160:15;12152:23;;11871:311;;;:::o;12205:710::-;12301:5;12326:81;12342:64;12399:6;12342:64;:::i;:::-;12326:81;:::i;:::-;12317:90;;12427:5;12456:6;12449:5;12442:21;12490:4;12483:5;12479:16;12472:23;;12543:4;12535:6;12531:17;12523:6;12519:30;12572:3;12564:6;12561:15;12558:122;;;12591:79;;:::i;:::-;12558:122;12706:6;12689:220;12723:6;12718:3;12715:15;12689:220;;;12798:3;12827:37;12860:3;12848:10;12827:37;:::i;:::-;12822:3;12815:50;12894:4;12889:3;12885:14;12878:21;;12765:144;12749:4;12744:3;12740:14;12733:21;;12689:220;;;12693:21;12307:608;;12205:710;;;;;:::o;12938:370::-;13009:5;13058:3;13051:4;13043:6;13039:17;13035:27;13025:122;;13066:79;;:::i;:::-;13025:122;13183:6;13170:20;13208:94;13298:3;13290:6;13283:4;13275:6;13271:17;13208:94;:::i;:::-;13199:103;;13015:293;12938:370;;;;:::o;13314:894::-;13432:6;13440;13489:2;13477:9;13468:7;13464:23;13460:32;13457:119;;;13495:79;;:::i;:::-;13457:119;13643:1;13632:9;13628:17;13615:31;13673:18;13665:6;13662:30;13659:117;;;13695:79;;:::i;:::-;13659:117;13800:78;13870:7;13861:6;13850:9;13846:22;13800:78;:::i;:::-;13790:88;;13586:302;13955:2;13944:9;13940:18;13927:32;13986:18;13978:6;13975:30;13972:117;;;14008:79;;:::i;:::-;13972:117;14113:78;14183:7;14174:6;14163:9;14159:22;14113:78;:::i;:::-;14103:88;;13898:303;13314:894;;;;;:::o;14214:323::-;14270:6;14319:2;14307:9;14298:7;14294:23;14290:32;14287:119;;;14325:79;;:::i;:::-;14287:119;14445:1;14470:50;14512:7;14503:6;14492:9;14488:22;14470:50;:::i;:::-;14460:60;;14416:114;14214:323;;;;:::o;14543:619::-;14620:6;14628;14636;14685:2;14673:9;14664:7;14660:23;14656:32;14653:119;;;14691:79;;:::i;:::-;14653:119;14811:1;14836:53;14881:7;14872:6;14861:9;14857:22;14836:53;:::i;:::-;14826:63;;14782:117;14938:2;14964:53;15009:7;15000:6;14989:9;14985:22;14964:53;:::i;:::-;14954:63;;14909:118;15066:2;15092:53;15137:7;15128:6;15117:9;15113:22;15092:53;:::i;:::-;15082:63;;15037:118;14543:619;;;;;:::o;15168:474::-;15236:6;15244;15293:2;15281:9;15272:7;15268:23;15264:32;15261:119;;;15299:79;;:::i;:::-;15261:119;15419:1;15444:53;15489:7;15480:6;15469:9;15465:22;15444:53;:::i;:::-;15434:63;;15390:117;15546:2;15572:53;15617:7;15608:6;15597:9;15593:22;15572:53;:::i;:::-;15562:63;;15517:118;15168:474;;;;;:::o;15648:180::-;15696:77;15693:1;15686:88;15793:4;15790:1;15783:15;15817:4;15814:1;15807:15;15834:320;15878:6;15915:1;15909:4;15905:12;15895:22;;15962:1;15956:4;15952:12;15983:18;15973:81;;16039:4;16031:6;16027:17;16017:27;;15973:81;16101:2;16093:6;16090:14;16070:18;16067:38;16064:84;;;16120:18;;:::i;:::-;16064:84;15885:269;15834:320;;;:::o;16160:182::-;16300:34;16296:1;16288:6;16284:14;16277:58;16160:182;:::o;16348:366::-;16490:3;16511:67;16575:2;16570:3;16511:67;:::i;:::-;16504:74;;16587:93;16676:3;16587:93;:::i;:::-;16705:2;16700:3;16696:12;16689:19;;16348:366;;;:::o;16720:419::-;16886:4;16924:2;16913:9;16909:18;16901:26;;16973:9;16967:4;16963:20;16959:1;16948:9;16944:17;16937:47;17001:131;17127:4;17001:131;:::i;:::-;16993:139;;16720:419;;;:::o;17145:180::-;17193:77;17190:1;17183:88;17290:4;17287:1;17280:15;17314:4;17311:1;17304:15;17331:305;17371:3;17390:20;17408:1;17390:20;:::i;:::-;17385:25;;17424:20;17442:1;17424:20;:::i;:::-;17419:25;;17578:1;17510:66;17506:74;17503:1;17500:81;17497:107;;;17584:18;;:::i;:::-;17497:107;17628:1;17625;17621:9;17614:16;;17331:305;;;;:::o;17642:143::-;17699:5;17730:6;17724:13;17715:22;;17746:33;17773:5;17746:33;:::i;:::-;17642:143;;;;:::o;17791:351::-;17861:6;17910:2;17898:9;17889:7;17885:23;17881:32;17878:119;;;17916:79;;:::i;:::-;17878:119;18036:1;18061:64;18117:7;18108:6;18097:9;18093:22;18061:64;:::i;:::-;18051:74;;18007:128;17791:351;;;;:::o;18148:180::-;18196:77;18193:1;18186:88;18293:4;18290:1;18283:15;18317:4;18314:1;18307:15;18334:233;18373:3;18396:24;18414:5;18396:24;:::i;:::-;18387:33;;18442:66;18435:5;18432:77;18429:103;;;18512:18;;:::i;:::-;18429:103;18559:1;18552:5;18548:13;18541:20;;18334:233;;;:::o;18573:224::-;18713:34;18709:1;18701:6;18697:14;18690:58;18782:7;18777:2;18769:6;18765:15;18758:32;18573:224;:::o;18803:366::-;18945:3;18966:67;19030:2;19025:3;18966:67;:::i;:::-;18959:74;;19042:93;19131:3;19042:93;:::i;:::-;19160:2;19155:3;19151:12;19144:19;;18803:366;;;:::o;19175:419::-;19341:4;19379:2;19368:9;19364:18;19356:26;;19428:9;19422:4;19418:20;19414:1;19403:9;19399:17;19392:47;19456:131;19582:4;19456:131;:::i;:::-;19448:139;;19175:419;;;:::o;19600:225::-;19740:34;19736:1;19728:6;19724:14;19717:58;19809:8;19804:2;19796:6;19792:15;19785:33;19600:225;:::o;19831:366::-;19973:3;19994:67;20058:2;20053:3;19994:67;:::i;:::-;19987:74;;20070:93;20159:3;20070:93;:::i;:::-;20188:2;20183:3;20179:12;20172:19;;19831:366;;;:::o;20203:419::-;20369:4;20407:2;20396:9;20392:18;20384:26;;20456:9;20450:4;20446:20;20442:1;20431:9;20427:17;20420:47;20484:131;20610:4;20484:131;:::i;:::-;20476:139;;20203:419;;;:::o;20628:223::-;20768:34;20764:1;20756:6;20752:14;20745:58;20837:6;20832:2;20824:6;20820:15;20813:31;20628:223;:::o;20857:366::-;20999:3;21020:67;21084:2;21079:3;21020:67;:::i;:::-;21013:74;;21096:93;21185:3;21096:93;:::i;:::-;21214:2;21209:3;21205:12;21198:19;;20857:366;;;:::o;21229:419::-;21395:4;21433:2;21422:9;21418:18;21410:26;;21482:9;21476:4;21472:20;21468:1;21457:9;21453:17;21446:47;21510:131;21636:4;21510:131;:::i;:::-;21502:139;;21229:419;;;:::o;21654:221::-;21794:34;21790:1;21782:6;21778:14;21771:58;21863:4;21858:2;21850:6;21846:15;21839:29;21654:221;:::o;21881:366::-;22023:3;22044:67;22108:2;22103:3;22044:67;:::i;:::-;22037:74;;22120:93;22209:3;22120:93;:::i;:::-;22238:2;22233:3;22229:12;22222:19;;21881:366;;;:::o;22253:419::-;22419:4;22457:2;22446:9;22442:18;22434:26;;22506:9;22500:4;22496:20;22492:1;22481:9;22477:17;22470:47;22534:131;22660:4;22534:131;:::i;:::-;22526:139;;22253:419;;;:::o;22678:179::-;22818:31;22814:1;22806:6;22802:14;22795:55;22678:179;:::o;22863:366::-;23005:3;23026:67;23090:2;23085:3;23026:67;:::i;:::-;23019:74;;23102:93;23191:3;23102:93;:::i;:::-;23220:2;23215:3;23211:12;23204:19;;22863:366;;;:::o;23235:419::-;23401:4;23439:2;23428:9;23424:18;23416:26;;23488:9;23482:4;23478:20;23474:1;23463:9;23459:17;23452:47;23516:131;23642:4;23516:131;:::i;:::-;23508:139;;23235:419;;;:::o;23660:332::-;23781:4;23819:2;23808:9;23804:18;23796:26;;23832:71;23900:1;23889:9;23885:17;23876:6;23832:71;:::i;:::-;23913:72;23981:2;23970:9;23966:18;23957:6;23913:72;:::i;:::-;23660:332;;;;;:::o;23998:::-;24119:4;24157:2;24146:9;24142:18;24134:26;;24170:71;24238:1;24227:9;24223:17;24214:6;24170:71;:::i;:::-;24251:72;24319:2;24308:9;24304:18;24295:6;24251:72;:::i;:::-;23998:332;;;;;:::o;24336:348::-;24376:7;24399:20;24417:1;24399:20;:::i;:::-;24394:25;;24433:20;24451:1;24433:20;:::i;:::-;24428:25;;24621:1;24553:66;24549:74;24546:1;24543:81;24538:1;24531:9;24524:17;24520:105;24517:131;;;24628:18;;:::i;:::-;24517:131;24676:1;24673;24669:9;24658:20;;24336:348;;;;:::o;24690:180::-;24738:77;24735:1;24728:88;24835:4;24832:1;24825:15;24859:4;24856:1;24849:15;24876:185;24916:1;24933:20;24951:1;24933:20;:::i;:::-;24928:25;;24967:20;24985:1;24967:20;:::i;:::-;24962:25;;25006:1;24996:35;;25011:18;;:::i;:::-;24996:35;25053:1;25050;25046:9;25041:14;;24876:185;;;;:::o;25067:442::-;25216:4;25254:2;25243:9;25239:18;25231:26;;25267:71;25335:1;25324:9;25320:17;25311:6;25267:71;:::i;:::-;25348:72;25416:2;25405:9;25401:18;25392:6;25348:72;:::i;:::-;25430;25498:2;25487:9;25483:18;25474:6;25430:72;:::i;:::-;25067:442;;;;;;:::o;25515:191::-;25555:4;25575:20;25593:1;25575:20;:::i;:::-;25570:25;;25609:20;25627:1;25609:20;:::i;:::-;25604:25;;25648:1;25645;25642:8;25639:34;;;25653:18;;:::i;:::-;25639:34;25698:1;25695;25691:9;25683:17;;25515:191;;;;:::o;25712:224::-;25852:34;25848:1;25840:6;25836:14;25829:58;25921:7;25916:2;25908:6;25904:15;25897:32;25712:224;:::o;25942:366::-;26084:3;26105:67;26169:2;26164:3;26105:67;:::i;:::-;26098:74;;26181:93;26270:3;26181:93;:::i;:::-;26299:2;26294:3;26290:12;26283:19;;25942:366;;;:::o;26314:419::-;26480:4;26518:2;26507:9;26503:18;26495:26;;26567:9;26561:4;26557:20;26553:1;26542:9;26538:17;26531:47;26595:131;26721:4;26595:131;:::i;:::-;26587:139;;26314:419;;;:::o;26739:222::-;26879:34;26875:1;26867:6;26863:14;26856:58;26948:5;26943:2;26935:6;26931:15;26924:30;26739:222;:::o;26967:366::-;27109:3;27130:67;27194:2;27189:3;27130:67;:::i;:::-;27123:74;;27206:93;27295:3;27206:93;:::i;:::-;27324:2;27319:3;27315:12;27308:19;;26967:366;;;:::o;27339:419::-;27505:4;27543:2;27532:9;27528:18;27520:26;;27592:9;27586:4;27582:20;27578:1;27567:9;27563:17;27556:47;27620:131;27746:4;27620:131;:::i;:::-;27612:139;;27339:419;;;:::o;27764:225::-;27904:34;27900:1;27892:6;27888:14;27881:58;27973:8;27968:2;27960:6;27956:15;27949:33;27764:225;:::o;27995:366::-;28137:3;28158:67;28222:2;28217:3;28158:67;:::i;:::-;28151:74;;28234:93;28323:3;28234:93;:::i;:::-;28352:2;28347:3;28343:12;28336:19;;27995:366;;;:::o;28367:419::-;28533:4;28571:2;28560:9;28556:18;28548:26;;28620:9;28614:4;28610:20;28606:1;28595:9;28591:17;28584:47;28648:131;28774:4;28648:131;:::i;:::-;28640:139;;28367:419;;;:::o;28792:220::-;28932:34;28928:1;28920:6;28916:14;28909:58;29001:3;28996:2;28988:6;28984:15;28977:28;28792:220;:::o;29018:366::-;29160:3;29181:67;29245:2;29240:3;29181:67;:::i;:::-;29174:74;;29257:93;29346:3;29257:93;:::i;:::-;29375:2;29370:3;29366:12;29359:19;;29018:366;;;:::o;29390:419::-;29556:4;29594:2;29583:9;29579:18;29571:26;;29643:9;29637:4;29633:20;29629:1;29618:9;29614:17;29607:47;29671:131;29797:4;29671:131;:::i;:::-;29663:139;;29390:419;;;:::o;29815:221::-;29955:34;29951:1;29943:6;29939:14;29932:58;30024:4;30019:2;30011:6;30007:15;30000:29;29815:221;:::o;30042:366::-;30184:3;30205:67;30269:2;30264:3;30205:67;:::i;:::-;30198:74;;30281:93;30370:3;30281:93;:::i;:::-;30399:2;30394:3;30390:12;30383:19;;30042:366;;;:::o;30414:419::-;30580:4;30618:2;30607:9;30603:18;30595:26;;30667:9;30661:4;30657:20;30653:1;30642:9;30638:17;30631:47;30695:131;30821:4;30695:131;:::i;:::-;30687:139;;30414:419;;;:::o

Swarm Source

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