ETH Price: $3,372.95 (+3.11%)
Gas: 2 Gwei

Token

COLLIE INU (COLLIE)
 

Overview

Max Total Supply

1,000,000,000,000 COLLIE

Holders

274 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
209,351,306.798737176855184578 COLLIE

Value
$0.00
0xab02b148bdbf5678699a43fb772e89278e2d66a8
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Collie Inu is more than just a meme coin. It's a community-driven coin backed by huge utilities and business plans. The Most Intelligent & Smartest Dog in the #Cryptocurrency World. Staking, 3D NFTs, Dapp, LauncPad, and Game.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CollieInu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-04
*/

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

/**
    *Telegram:https://t.me/collieInu_Official
    *linktr: https://linktr.ee/collieinu_token
    *TikTok: https://www.tiktok.com/@collie_inu_token
    *Facebook: Collie inu token 
    *Twitter: https://twitter.com/Collieinu_token
    *Instagram: https://www.instagram.com/Collie_inu_token/
    *Snapchat: Collieinu_token
    *reddit: Collieinu_token
    *Website: https://collieinu.net
*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity 0.8.9;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    /**
     * @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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, 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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 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 to 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 {}
}

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

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

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

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

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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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

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

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

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    /******************/

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);

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

    constructor() ERC20("COLLIE INU", "COLLIE") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 5;
        uint256 _buyLiquidityFee = 3;
        uint256 _buyDevFee = 2;

        uint256 _sellMarketingFee = 4;
        uint256 _sellLiquidityFee = 4;
        uint256 _sellDevFee = 2;
        
        uint256 totalSupply = 1 * 1e12 * 1e18;
        
        //maxTransactionAmount = totalSupply * 5 / 1000; // 0.5% maxTransactionAmountTxn
        maxTransactionAmount = 5000000000 * 1e18;
        maxWallet = totalSupply * 5 / 1000; // 0.50% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.050% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet

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

    receive() external payable {

  	}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

        //Use this in case BNB are sent to the contract by mistake
    function rescueBNB(uint256 weiAmount) external onlyOwner{
        require(address(this).balance >= weiAmount, "insufficient BNB balance");
        payable(msg.sender).transfer(weiAmount);
    }

    function rescueAnyBEP20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }

    
    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
        
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }
        
        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

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

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    
    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal returns (bool){
        
        lastLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyBEP20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556001600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600a81526020017f434f4c4c494520494e55000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f434f4c4c4945000000000000000000000000000000000000000000000000000081525081600390805190602001906200012e92919062000bde565b5080600490805190602001906200014792919062000bde565b50505060006200015c620006aa60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000227816001620006b260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a257600080fd5b505afa158015620002b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dd919062000cf8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034057600080fd5b505afa15801562000355573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037b919062000cf8565b6040518363ffffffff1660e01b81526004016200039a92919062000d3b565b602060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062000cf8565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200043860a0516001620006b260201b60201c565b6200044d60a0516001620007af60201b60201c565b60006005905060006003905060006002905060006004905060006004905060006002905060006c0c9f2c9cd04674edea4000000090506b1027e72f1f128130880000006008819055506103e8600582620004a8919062000da1565b620004b4919062000e31565b600a81905550612710600582620004cc919062000da1565b620004d8919062000e31565b60098190555086601581905550856016819055508460178190555060175460165460155462000508919062000e69565b62000514919062000e69565b6014819055508360198190555082601a8190555081601b81905550601b54601a5460195462000544919062000e69565b62000550919062000e69565b601881905550620005666200085060201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005b66200085060201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006186200060a6200085060201b60201c565b60016200087a60201b60201c565b6200062b3060016200087a60201b60201c565b6200064061dead60016200087a60201b60201c565b62000662620006546200085060201b60201c565b6001620006b260201b60201c565b62000675306001620006b260201b60201c565b6200068a61dead6001620006b260201b60201c565b6200069c3382620009c760201b60201c565b5050505050505050620010fa565b600033905090565b620006c2620006aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000754576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074b9062000f27565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200088a620006aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200091c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009139062000f27565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009bb919062000f66565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a319062000fd3565b60405180910390fd5b62000a4e6000838362000b7660201b60201c565b62000a6a8160025462000b7b60201b62002b771790919060201c565b60028190555062000ac8816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b7b60201b62002b771790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b6a919062001006565b60405180910390a35050565b505050565b600080828462000b8c919062000e69565b90508381101562000bd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bcb9062001073565b60405180910390fd5b8091505092915050565b82805462000bec90620010c4565b90600052602060002090601f01602090048101928262000c10576000855562000c5c565b82601f1062000c2b57805160ff191683800117855562000c5c565b8280016001018555821562000c5c579182015b8281111562000c5b57825182559160200191906001019062000c3e565b5b50905062000c6b919062000c6f565b5090565b5b8082111562000c8a57600081600090555060010162000c70565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cc08262000c93565b9050919050565b62000cd28162000cb3565b811462000cde57600080fd5b50565b60008151905062000cf28162000cc7565b92915050565b60006020828403121562000d115762000d1062000c8e565b5b600062000d218482850162000ce1565b91505092915050565b62000d358162000cb3565b82525050565b600060408201905062000d52600083018562000d2a565b62000d61602083018462000d2a565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dae8262000d68565b915062000dbb8362000d68565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000df75762000df662000d72565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e3e8262000d68565b915062000e4b8362000d68565b92508262000e5e5762000e5d62000e02565b5b828204905092915050565b600062000e768262000d68565b915062000e838362000d68565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ebb5762000eba62000d72565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f0f60208362000ec6565b915062000f1c8262000ed7565b602082019050919050565b6000602082019050818103600083015262000f428162000f00565b9050919050565b60008115159050919050565b62000f608162000f49565b82525050565b600060208201905062000f7d600083018462000f55565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fbb601f8362000ec6565b915062000fc88262000f83565b602082019050919050565b6000602082019050818103600083015262000fee8162000fac565b9050919050565b620010008162000d68565b82525050565b60006020820190506200101d600083018462000ff5565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200105b601b8362000ec6565b9150620010688262001023565b602082019050919050565b600060208201905081810360008301526200108e816200104c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010dd57607f821691505b60208210811415620010f457620010f362001095565b5b50919050565b60805160a051615fc76200116d600039600081816116790152818161201501528181613160015281816141ea015281816142b201526142df015260008181610fb001528181613108015281816145490152818161463901528181614660015281816146fc01526147230152615fc76000f3fe6080604052600436106103bc5760003560e01c80638095d564116101f2578063b62496f51161010d578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610e35578063f2fde38b14610e60578063f637434214610e89578063f8b45b0514610eb4576103c3565b8063d85ba06314610d77578063dd62ed3e14610da2578063e2f4560514610ddf578063e884f26014610e0a576103c3565b8063c18bc195116100dc578063c18bc19514610cbb578063c876d0b914610ce4578063c8c8ebe414610d0f578063d257b34f14610d3a576103c3565b8063b62496f514610c01578063bbc0c74214610c3e578063c024666814610c69578063c17b5b8c14610c92576103c3565b80639c3b4fdc11610185578063a457c2d711610154578063a457c2d714610b33578063a4c82a0014610b70578063a9059cbb14610b9b578063aacebbe314610bd8576103c3565b80639c3b4fdc14610a875780639ec22c0e14610ab25780639fccce3214610add578063a0d82dc514610b08576103c3565b806392136913116101c157806392136913146109df578063924de9b714610a0a57806395d89b4114610a335780639a7a23d614610a5e576103c3565b80638095d564146109495780638a8c523c146109725780638da5cb5b146109895780638ea5220f146109b4576103c3565b8063313ce567116102e25780636ddd171311610275578063751039fc11610244578063751039fc1461089f5780637571336a146108ca57806375f0a874146108f35780637bce5a041461091e576103c3565b80636ddd1713146107f757806370a0823114610822578063715018a61461085f578063730c188814610876576103c3565b806349bd5a5e116102b157806349bd5a5e146107395780634a62bb65146107645780634fbee1931461078f5780636a486a8e146107cc576103c3565b8063313ce5671461067f57806339509351146106aa578063441b1d30146106e757806347c2309214610710576103c3565b8063199ffc721161035a57806323b872dd1161032957806323b872dd146105c157806327c8f835146105fe5780632c3e486c146106295780632e82f1a014610654576103c3565b8063199ffc72146105175780631a8145bb146105425780631f3fed8f1461056d578063203e727e14610598576103c3565b80631694505e116103965780631694505e1461046d57806318160ddd146104985780631816467f146104c3578063184c16c5146104ec576103c3565b806306fdde03146103c8578063095ea7b3146103f357806310d5de5314610430576103c3565b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610edf565b6040516103ea91906148dd565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190614998565b610f71565b60405161042791906149f3565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190614a0e565b610f8f565b60405161046491906149f3565b60405180910390f35b34801561047957600080fd5b50610482610fae565b60405161048f9190614a9a565b60405180910390f35b3480156104a457600080fd5b506104ad610fd2565b6040516104ba9190614ac4565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190614a0e565b610fdc565b005b3480156104f857600080fd5b50610501611133565b60405161050e9190614ac4565b60405180910390f35b34801561052357600080fd5b5061052c611139565b6040516105399190614ac4565b60405180910390f35b34801561054e57600080fd5b5061055761113f565b6040516105649190614ac4565b60405180910390f35b34801561057957600080fd5b50610582611145565b60405161058f9190614ac4565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190614adf565b61114b565b005b3480156105cd57600080fd5b506105e860048036038101906105e39190614b0c565b611275565b6040516105f591906149f3565b60405180910390f35b34801561060a57600080fd5b5061061361134e565b6040516106209190614b6e565b60405180910390f35b34801561063557600080fd5b5061063e611354565b60405161064b9190614ac4565b60405180910390f35b34801561066057600080fd5b5061066961135a565b60405161067691906149f3565b60405180910390f35b34801561068b57600080fd5b5061069461136d565b6040516106a19190614ba5565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190614998565b611376565b6040516106de91906149f3565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190614adf565b611429565b005b34801561071c57600080fd5b5061073760048036038101906107329190614b0c565b61154d565b005b34801561074557600080fd5b5061074e611677565b60405161075b9190614b6e565b60405180910390f35b34801561077057600080fd5b5061077961169b565b60405161078691906149f3565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190614a0e565b6116ae565b6040516107c391906149f3565b60405180910390f35b3480156107d857600080fd5b506107e1611704565b6040516107ee9190614ac4565b60405180910390f35b34801561080357600080fd5b5061080c61170a565b60405161081991906149f3565b60405180910390f35b34801561082e57600080fd5b5061084960048036038101906108449190614a0e565b61171d565b6040516108569190614ac4565b60405180910390f35b34801561086b57600080fd5b50610874611765565b005b34801561088257600080fd5b5061089d60048036038101906108989190614bec565b6118bd565b005b3480156108ab57600080fd5b506108b4611a18565b6040516108c191906149f3565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec9190614c3f565b611ad3565b005b3480156108ff57600080fd5b50610908611bc5565b6040516109159190614b6e565b60405180910390f35b34801561092a57600080fd5b50610933611beb565b6040516109409190614ac4565b60405180910390f35b34801561095557600080fd5b50610970600480360381019061096b9190614c7f565b611bf1565b005b34801561097e57600080fd5b50610987611d0a565b005b34801561099557600080fd5b5061099e611de0565b6040516109ab9190614b6e565b60405180910390f35b3480156109c057600080fd5b506109c9611e0a565b6040516109d69190614b6e565b60405180910390f35b3480156109eb57600080fd5b506109f4611e30565b604051610a019190614ac4565b60405180910390f35b348015610a1657600080fd5b50610a316004803603810190610a2c9190614cd2565b611e36565b005b348015610a3f57600080fd5b50610a48611eea565b604051610a5591906148dd565b60405180910390f35b348015610a6a57600080fd5b50610a856004803603810190610a809190614c3f565b611f7c565b005b348015610a9357600080fd5b50610a9c6120b0565b604051610aa99190614ac4565b60405180910390f35b348015610abe57600080fd5b50610ac76120b6565b604051610ad49190614ac4565b60405180910390f35b348015610ae957600080fd5b50610af26120bc565b604051610aff9190614ac4565b60405180910390f35b348015610b1457600080fd5b50610b1d6120c2565b604051610b2a9190614ac4565b60405180910390f35b348015610b3f57600080fd5b50610b5a6004803603810190610b559190614998565b6120c8565b604051610b6791906149f3565b60405180910390f35b348015610b7c57600080fd5b50610b85612195565b604051610b929190614ac4565b60405180910390f35b348015610ba757600080fd5b50610bc26004803603810190610bbd9190614998565b61219b565b604051610bcf91906149f3565b60405180910390f35b348015610be457600080fd5b50610bff6004803603810190610bfa9190614a0e565b6121b9565b005b348015610c0d57600080fd5b50610c286004803603810190610c239190614a0e565b612310565b604051610c3591906149f3565b60405180910390f35b348015610c4a57600080fd5b50610c53612330565b604051610c6091906149f3565b60405180910390f35b348015610c7557600080fd5b50610c906004803603810190610c8b9190614c3f565b612343565b005b348015610c9e57600080fd5b50610cb96004803603810190610cb49190614c7f565b612483565b005b348015610cc757600080fd5b50610ce26004803603810190610cdd9190614adf565b61259d565b005b348015610cf057600080fd5b50610cf96126c7565b604051610d0691906149f3565b60405180910390f35b348015610d1b57600080fd5b50610d246126da565b604051610d319190614ac4565b60405180910390f35b348015610d4657600080fd5b50610d616004803603810190610d5c9190614adf565b6126e0565b604051610d6e91906149f3565b60405180910390f35b348015610d8357600080fd5b50610d8c612850565b604051610d999190614ac4565b60405180910390f35b348015610dae57600080fd5b50610dc96004803603810190610dc49190614cff565b612856565b604051610dd69190614ac4565b60405180910390f35b348015610deb57600080fd5b50610df46128dd565b604051610e019190614ac4565b60405180910390f35b348015610e1657600080fd5b50610e1f6128e3565b604051610e2c91906149f3565b60405180910390f35b348015610e4157600080fd5b50610e4a61299e565b604051610e579190614ac4565b60405180910390f35b348015610e6c57600080fd5b50610e876004803603810190610e829190614a0e565b6129a4565b005b348015610e9557600080fd5b50610e9e612b6b565b604051610eab9190614ac4565b60405180910390f35b348015610ec057600080fd5b50610ec9612b71565b604051610ed69190614ac4565b60405180910390f35b606060038054610eee90614d6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1a90614d6e565b8015610f675780601f10610f3c57610100808354040283529160200191610f67565b820191906000526020600020905b815481529060010190602001808311610f4a57829003601f168201915b5050505050905090565b6000610f85610f7e612bd5565b8484612bdd565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610fe4612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90614dec565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b611153612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d990614dec565b60405180910390fd5b670de0b6b3a76400006103e860016111f8610fd2565b6112029190614e3b565b61120c9190614ec4565b6112169190614ec4565b811015611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f90614f67565b60405180910390fd5b670de0b6b3a76400008161126c9190614e3b565b60088190555050565b6000611282848484612da8565b6113438461128e612bd5565b61133e85604051806060016040528060288152602001615f4560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112f4612bd5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b409092919063ffffffff16565b612bdd565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061141f611383612bd5565b8461141a8560016000611394612bd5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b7790919063ffffffff16565b612bdd565b6001905092915050565b611431612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790614dec565b60405180910390fd5b80471015611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90614fd3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611549573d6000803e3d6000fd5b5050565b611555612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90614dec565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161161f929190614ff3565b602060405180830381600087803b15801561163957600080fd5b505af115801561164d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116719190615031565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61176d612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614dec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118c5612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194b90614dec565b60405180910390fd5b610258831015611999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611990906150d0565b60405180910390fd5b6103e882111580156119ac575060008210155b6119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e290615162565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b6000611a22612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa890614dec565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b611adb612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6190614dec565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611bf9612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7f90614dec565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611cb09190615182565b611cba9190615182565b601481905550601480541115611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90615224565b60405180910390fd5b505050565b611d12612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9890614dec565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b611e3e612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490614dec565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611ef990614d6e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2590614d6e565b8015611f725780601f10611f4757610100808354040283529160200191611f72565b820191906000526020600020905b815481529060010190602001808311611f5557829003601f168201915b5050505050905090565b611f84612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90614dec565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612099906152b6565b60405180910390fd5b6120ac8282613ba4565b5050565b60175481565b60105481565b601e5481565b601b5481565b600061218b6120d5612bd5565b8461218685604051806060016040528060258152602001615f6d60259139600160006120ff612bd5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b409092919063ffffffff16565b612bdd565b6001905092915050565b600e5481565b60006121af6121a8612bd5565b8484612da8565b6001905092915050565b6121c1612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224790614dec565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b61234b612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d190614dec565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161247791906149f3565b60405180910390a25050565b61248b612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190614dec565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a546019546125429190615182565b61254c9190615182565b60188190555060196018541115612598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258f90615322565b60405180910390fd5b505050565b6125a5612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b90614dec565b60405180910390fd5b670de0b6b3a76400006103e8600561264a610fd2565b6126549190614e3b565b61265e9190614ec4565b6126689190614ec4565b8110156126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a1906153b4565b60405180910390fd5b670de0b6b3a7640000816126be9190614e3b565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006126ea612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277090614dec565b60405180910390fd5b620186a06001612787610fd2565b6127919190614e3b565b61279b9190614ec4565b8210156127dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d490615446565b60405180910390fd5b6103e860056127ea610fd2565b6127f49190614e3b565b6127fe9190614ec4565b821115612840576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612837906154d8565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006128ed612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461297c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297390614dec565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b6129ac612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3290614dec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa29061556a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b600a5481565b6000808284612b869190615182565b905083811015612bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc2906155d6565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4490615668565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb4906156fa565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d9b9190614ac4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0f9061578c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7f9061581e565b60405180910390fd5b6000811415612ea257612e9d83836000613c45565b613b3b565b601160009054906101000a900460ff161561356557612ebf611de0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f2d5750612efd611de0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f665750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fa0575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fb95750600560149054906101000a900460ff16155b1561356457601160019054906101000a900460ff166130b357601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130735750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6130b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a99061588a565b60405180910390fd5b5b601360009054906101000a900460ff161561327b576130d0611de0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561315757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131af57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561327a5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322c90615942565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561331e5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133c557600854811115613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f906159d4565b60405180910390fd5b600a546133748361171d565b8261337f9190615182565b11156133c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b790615a40565b60405180910390fd5b613563565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134685750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134b7576008548111156134b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a990615ad2565b60405180910390fd5b613562565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661356157600a546135148361171d565b8261351f9190615182565b1115613560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355790615a40565b60405180910390fd5b5b5b5b5b5b60006135703061171d565b9050600060095482101590508080156135955750601160029054906101000a900460ff165b80156135ae5750600560149054906101000a900460ff16155b80156136045750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561365a5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136b05750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136f4576001600560146101000a81548160ff0219169083151502179055506136d8613eda565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff1615801561375a5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156137725750600c60009054906101000a900460ff165b801561378d5750600d54600e546137899190615182565b4210155b80156137e35750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137f2576137f06141c1565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138a85750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138b257600090505b60008115613b2b57602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561391557506000601854115b156139e25761394260646139346018548861439690919063ffffffff16565b61441190919063ffffffff16565b9050601854601a54826139559190614e3b565b61395f9190614ec4565b601d60008282546139709190615182565b92505081905550601854601b54826139889190614e3b565b6139929190614ec4565b601e60008282546139a39190615182565b92505081905550601854601954826139bb9190614e3b565b6139c59190614ec4565b601c60008282546139d69190615182565b92505081905550613b07565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a3d57506000601454115b15613b0657613a6a6064613a5c6014548861439690919063ffffffff16565b61441190919063ffffffff16565b905060145460165482613a7d9190614e3b565b613a879190614ec4565b601d6000828254613a989190615182565b9250508190555060145460175482613ab09190614e3b565b613aba9190614ec4565b601e6000828254613acb9190615182565b9250508190555060145460155482613ae39190614e3b565b613aed9190614ec4565b601c6000828254613afe9190615182565b925050819055505b5b6000811115613b1c57613b1b873083613c45565b5b8085613b289190615af2565b94505b613b36878787613c45565b505050505b505050565b6000838311158290613b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7f91906148dd565b60405180910390fd5b5060008385613b979190615af2565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cac9061578c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d1c9061581e565b60405180910390fd5b613d3083838361445b565b613d9b81604051806060016040528060268152602001615f1f602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b409092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e2e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b7790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ecd9190614ac4565b60405180910390a3505050565b6000613ee53061171d565b90506000601e54601c54601d54613efc9190615182565b613f069190615182565b9050600080831480613f185750600082145b15613f25575050506141bf565b6014600954613f349190614e3b565b831115613f4d576014600954613f4a9190614e3b565b92505b6000600283601d5486613f609190614e3b565b613f6a9190614ec4565b613f749190614ec4565b90506000613f8b828661446090919063ffffffff16565b90506000479050613f9b826144aa565b6000613fb0824761446090919063ffffffff16565b90506000613fdb87613fcd601c548561439690919063ffffffff16565b61441190919063ffffffff16565b9050600061400688613ff8601e548661439690919063ffffffff16565b61441190919063ffffffff16565b905060008183856140179190615af2565b6140219190615af2565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161408190615b57565b60006040518083038185875af1925050503d80600081146140be576040519150601f19603f3d011682016040523d82523d6000602084013e6140c3565b606091505b5050809850506000871180156140d95750600081115b15614126576140e887826146f6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d5460405161411d93929190615b6c565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161416c90615b57565b60006040518083038185875af1925050503d80600081146141a9576040519150601f19603f3d011682016040523d82523d6000602084013e6141ae565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016142259190614b6e565b60206040518083038186803b15801561423d57600080fd5b505afa158015614251573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142759190615bb8565b905060006142a2612710614294600b548561439690919063ffffffff16565b61441190919063ffffffff16565b905060008111156142db576142da7f000000000000000000000000000000000000000000000000000000000000000061dead83613c45565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561434857600080fd5b505af115801561435c573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b6000808314156143a9576000905061440b565b600082846143b79190614e3b565b90508284826143c69190614ec4565b14614406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143fd90615c57565b60405180910390fd5b809150505b92915050565b600061445383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506147e1565b905092915050565b505050565b60006144a283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b40565b905092915050565b6000600267ffffffffffffffff8111156144c7576144c6615c77565b5b6040519080825280602002602001820160405280156144f55781602001602082028036833780820191505090505b509050308160008151811061450d5761450c615ca6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156145ad57600080fd5b505afa1580156145c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145e59190615cea565b816001815181106145f9576145f8615ca6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061465e307f000000000000000000000000000000000000000000000000000000000000000084612bdd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016146c0959493929190615e10565b600060405180830381600087803b1580156146da57600080fd5b505af11580156146ee573d6000803e3d6000fd5b505050505050565b614721307f000000000000000000000000000000000000000000000000000000000000000084612bdd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161478896959493929190615e6a565b6060604051808303818588803b1580156147a157600080fd5b505af11580156147b5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906147da9190615ecb565b5050505050565b60008083118290614828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161481f91906148dd565b60405180910390fd5b50600083856148379190614ec4565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561487e578082015181840152602081019050614863565b8381111561488d576000848401525b50505050565b6000601f19601f8301169050919050565b60006148af82614844565b6148b9818561484f565b93506148c9818560208601614860565b6148d281614893565b840191505092915050565b600060208201905081810360008301526148f781846148a4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061492f82614904565b9050919050565b61493f81614924565b811461494a57600080fd5b50565b60008135905061495c81614936565b92915050565b6000819050919050565b61497581614962565b811461498057600080fd5b50565b6000813590506149928161496c565b92915050565b600080604083850312156149af576149ae6148ff565b5b60006149bd8582860161494d565b92505060206149ce85828601614983565b9150509250929050565b60008115159050919050565b6149ed816149d8565b82525050565b6000602082019050614a0860008301846149e4565b92915050565b600060208284031215614a2457614a236148ff565b5b6000614a328482850161494d565b91505092915050565b6000819050919050565b6000614a60614a5b614a5684614904565b614a3b565b614904565b9050919050565b6000614a7282614a45565b9050919050565b6000614a8482614a67565b9050919050565b614a9481614a79565b82525050565b6000602082019050614aaf6000830184614a8b565b92915050565b614abe81614962565b82525050565b6000602082019050614ad96000830184614ab5565b92915050565b600060208284031215614af557614af46148ff565b5b6000614b0384828501614983565b91505092915050565b600080600060608486031215614b2557614b246148ff565b5b6000614b338682870161494d565b9350506020614b448682870161494d565b9250506040614b5586828701614983565b9150509250925092565b614b6881614924565b82525050565b6000602082019050614b836000830184614b5f565b92915050565b600060ff82169050919050565b614b9f81614b89565b82525050565b6000602082019050614bba6000830184614b96565b92915050565b614bc9816149d8565b8114614bd457600080fd5b50565b600081359050614be681614bc0565b92915050565b600080600060608486031215614c0557614c046148ff565b5b6000614c1386828701614983565b9350506020614c2486828701614983565b9250506040614c3586828701614bd7565b9150509250925092565b60008060408385031215614c5657614c556148ff565b5b6000614c648582860161494d565b9250506020614c7585828601614bd7565b9150509250929050565b600080600060608486031215614c9857614c976148ff565b5b6000614ca686828701614983565b9350506020614cb786828701614983565b9250506040614cc886828701614983565b9150509250925092565b600060208284031215614ce857614ce76148ff565b5b6000614cf684828501614bd7565b91505092915050565b60008060408385031215614d1657614d156148ff565b5b6000614d248582860161494d565b9250506020614d358582860161494d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d8657607f821691505b60208210811415614d9a57614d99614d3f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614dd660208361484f565b9150614de182614da0565b602082019050919050565b60006020820190508181036000830152614e0581614dc9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e4682614962565b9150614e5183614962565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e8a57614e89614e0c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ecf82614962565b9150614eda83614962565b925082614eea57614ee9614e95565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614f51602f8361484f565b9150614f5c82614ef5565b604082019050919050565b60006020820190508181036000830152614f8081614f44565b9050919050565b7f696e73756666696369656e7420424e422062616c616e63650000000000000000600082015250565b6000614fbd60188361484f565b9150614fc882614f87565b602082019050919050565b60006020820190508181036000830152614fec81614fb0565b9050919050565b60006040820190506150086000830185614b5f565b6150156020830184614ab5565b9392505050565b60008151905061502b81614bc0565b92915050565b600060208284031215615047576150466148ff565b5b60006150558482850161501c565b91505092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b60006150ba60338361484f565b91506150c58261505e565b604082019050919050565b600060208201905081810360008301526150e9816150ad565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061514c60308361484f565b9150615157826150f0565b604082019050919050565b6000602082019050818103600083015261517b8161513f565b9050919050565b600061518d82614962565b915061519883614962565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151cd576151cc614e0c565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b600061520e601d8361484f565b9150615219826151d8565b602082019050919050565b6000602082019050818103600083015261523d81615201565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006152a060398361484f565b91506152ab82615244565b604082019050919050565b600060208201905081810360008301526152cf81615293565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b600061530c601d8361484f565b9150615317826152d6565b602082019050919050565b6000602082019050818103600083015261533b816152ff565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061539e60248361484f565b91506153a982615342565b604082019050919050565b600060208201905081810360008301526153cd81615391565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061543060358361484f565b915061543b826153d4565b604082019050919050565b6000602082019050818103600083015261545f81615423565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006154c260348361484f565b91506154cd82615466565b604082019050919050565b600060208201905081810360008301526154f1816154b5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061555460268361484f565b915061555f826154f8565b604082019050919050565b6000602082019050818103600083015261558381615547565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006155c0601b8361484f565b91506155cb8261558a565b602082019050919050565b600060208201905081810360008301526155ef816155b3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061565260248361484f565b915061565d826155f6565b604082019050919050565b6000602082019050818103600083015261568181615645565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156e460228361484f565b91506156ef82615688565b604082019050919050565b60006020820190508181036000830152615713816156d7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061577660258361484f565b91506157818261571a565b604082019050919050565b600060208201905081810360008301526157a581615769565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061580860238361484f565b9150615813826157ac565b604082019050919050565b60006020820190508181036000830152615837816157fb565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061587460168361484f565b915061587f8261583e565b602082019050919050565b600060208201905081810360008301526158a381615867565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061592c60498361484f565b9150615937826158aa565b606082019050919050565b6000602082019050818103600083015261595b8161591f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006159be60358361484f565b91506159c982615962565b604082019050919050565b600060208201905081810360008301526159ed816159b1565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615a2a60138361484f565b9150615a35826159f4565b602082019050919050565b60006020820190508181036000830152615a5981615a1d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615abc60368361484f565b9150615ac782615a60565b604082019050919050565b60006020820190508181036000830152615aeb81615aaf565b9050919050565b6000615afd82614962565b9150615b0883614962565b925082821015615b1b57615b1a614e0c565b5b828203905092915050565b600081905092915050565b50565b6000615b41600083615b26565b9150615b4c82615b31565b600082019050919050565b6000615b6282615b34565b9150819050919050565b6000606082019050615b816000830186614ab5565b615b8e6020830185614ab5565b615b9b6040830184614ab5565b949350505050565b600081519050615bb28161496c565b92915050565b600060208284031215615bce57615bcd6148ff565b5b6000615bdc84828501615ba3565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c4160218361484f565b9150615c4c82615be5565b604082019050919050565b60006020820190508181036000830152615c7081615c34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615ce481614936565b92915050565b600060208284031215615d0057615cff6148ff565b5b6000615d0e84828501615cd5565b91505092915050565b6000819050919050565b6000615d3c615d37615d3284615d17565b614a3b565b614962565b9050919050565b615d4c81615d21565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d8781614924565b82525050565b6000615d998383615d7e565b60208301905092915050565b6000602082019050919050565b6000615dbd82615d52565b615dc78185615d5d565b9350615dd283615d6e565b8060005b83811015615e03578151615dea8882615d8d565b9750615df583615da5565b925050600181019050615dd6565b5085935050505092915050565b600060a082019050615e256000830188614ab5565b615e326020830187615d43565b8181036040830152615e448186615db2565b9050615e536060830185614b5f565b615e606080830184614ab5565b9695505050505050565b600060c082019050615e7f6000830189614b5f565b615e8c6020830188614ab5565b615e996040830187615d43565b615ea66060830186615d43565b615eb36080830185614b5f565b615ec060a0830184614ab5565b979650505050505050565b600080600060608486031215615ee457615ee36148ff565b5b6000615ef286828701615ba3565b9350506020615f0386828701615ba3565b9250506040615f1486828701615ba3565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d44f2b276626c7aa8fb749ed26ad1c0bba0a73adcc10144fd36bb690824b741964736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c80638095d564116101f2578063b62496f51161010d578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610e35578063f2fde38b14610e60578063f637434214610e89578063f8b45b0514610eb4576103c3565b8063d85ba06314610d77578063dd62ed3e14610da2578063e2f4560514610ddf578063e884f26014610e0a576103c3565b8063c18bc195116100dc578063c18bc19514610cbb578063c876d0b914610ce4578063c8c8ebe414610d0f578063d257b34f14610d3a576103c3565b8063b62496f514610c01578063bbc0c74214610c3e578063c024666814610c69578063c17b5b8c14610c92576103c3565b80639c3b4fdc11610185578063a457c2d711610154578063a457c2d714610b33578063a4c82a0014610b70578063a9059cbb14610b9b578063aacebbe314610bd8576103c3565b80639c3b4fdc14610a875780639ec22c0e14610ab25780639fccce3214610add578063a0d82dc514610b08576103c3565b806392136913116101c157806392136913146109df578063924de9b714610a0a57806395d89b4114610a335780639a7a23d614610a5e576103c3565b80638095d564146109495780638a8c523c146109725780638da5cb5b146109895780638ea5220f146109b4576103c3565b8063313ce567116102e25780636ddd171311610275578063751039fc11610244578063751039fc1461089f5780637571336a146108ca57806375f0a874146108f35780637bce5a041461091e576103c3565b80636ddd1713146107f757806370a0823114610822578063715018a61461085f578063730c188814610876576103c3565b806349bd5a5e116102b157806349bd5a5e146107395780634a62bb65146107645780634fbee1931461078f5780636a486a8e146107cc576103c3565b8063313ce5671461067f57806339509351146106aa578063441b1d30146106e757806347c2309214610710576103c3565b8063199ffc721161035a57806323b872dd1161032957806323b872dd146105c157806327c8f835146105fe5780632c3e486c146106295780632e82f1a014610654576103c3565b8063199ffc72146105175780631a8145bb146105425780631f3fed8f1461056d578063203e727e14610598576103c3565b80631694505e116103965780631694505e1461046d57806318160ddd146104985780631816467f146104c3578063184c16c5146104ec576103c3565b806306fdde03146103c8578063095ea7b3146103f357806310d5de5314610430576103c3565b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610edf565b6040516103ea91906148dd565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190614998565b610f71565b60405161042791906149f3565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190614a0e565b610f8f565b60405161046491906149f3565b60405180910390f35b34801561047957600080fd5b50610482610fae565b60405161048f9190614a9a565b60405180910390f35b3480156104a457600080fd5b506104ad610fd2565b6040516104ba9190614ac4565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190614a0e565b610fdc565b005b3480156104f857600080fd5b50610501611133565b60405161050e9190614ac4565b60405180910390f35b34801561052357600080fd5b5061052c611139565b6040516105399190614ac4565b60405180910390f35b34801561054e57600080fd5b5061055761113f565b6040516105649190614ac4565b60405180910390f35b34801561057957600080fd5b50610582611145565b60405161058f9190614ac4565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190614adf565b61114b565b005b3480156105cd57600080fd5b506105e860048036038101906105e39190614b0c565b611275565b6040516105f591906149f3565b60405180910390f35b34801561060a57600080fd5b5061061361134e565b6040516106209190614b6e565b60405180910390f35b34801561063557600080fd5b5061063e611354565b60405161064b9190614ac4565b60405180910390f35b34801561066057600080fd5b5061066961135a565b60405161067691906149f3565b60405180910390f35b34801561068b57600080fd5b5061069461136d565b6040516106a19190614ba5565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190614998565b611376565b6040516106de91906149f3565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190614adf565b611429565b005b34801561071c57600080fd5b5061073760048036038101906107329190614b0c565b61154d565b005b34801561074557600080fd5b5061074e611677565b60405161075b9190614b6e565b60405180910390f35b34801561077057600080fd5b5061077961169b565b60405161078691906149f3565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190614a0e565b6116ae565b6040516107c391906149f3565b60405180910390f35b3480156107d857600080fd5b506107e1611704565b6040516107ee9190614ac4565b60405180910390f35b34801561080357600080fd5b5061080c61170a565b60405161081991906149f3565b60405180910390f35b34801561082e57600080fd5b5061084960048036038101906108449190614a0e565b61171d565b6040516108569190614ac4565b60405180910390f35b34801561086b57600080fd5b50610874611765565b005b34801561088257600080fd5b5061089d60048036038101906108989190614bec565b6118bd565b005b3480156108ab57600080fd5b506108b4611a18565b6040516108c191906149f3565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec9190614c3f565b611ad3565b005b3480156108ff57600080fd5b50610908611bc5565b6040516109159190614b6e565b60405180910390f35b34801561092a57600080fd5b50610933611beb565b6040516109409190614ac4565b60405180910390f35b34801561095557600080fd5b50610970600480360381019061096b9190614c7f565b611bf1565b005b34801561097e57600080fd5b50610987611d0a565b005b34801561099557600080fd5b5061099e611de0565b6040516109ab9190614b6e565b60405180910390f35b3480156109c057600080fd5b506109c9611e0a565b6040516109d69190614b6e565b60405180910390f35b3480156109eb57600080fd5b506109f4611e30565b604051610a019190614ac4565b60405180910390f35b348015610a1657600080fd5b50610a316004803603810190610a2c9190614cd2565b611e36565b005b348015610a3f57600080fd5b50610a48611eea565b604051610a5591906148dd565b60405180910390f35b348015610a6a57600080fd5b50610a856004803603810190610a809190614c3f565b611f7c565b005b348015610a9357600080fd5b50610a9c6120b0565b604051610aa99190614ac4565b60405180910390f35b348015610abe57600080fd5b50610ac76120b6565b604051610ad49190614ac4565b60405180910390f35b348015610ae957600080fd5b50610af26120bc565b604051610aff9190614ac4565b60405180910390f35b348015610b1457600080fd5b50610b1d6120c2565b604051610b2a9190614ac4565b60405180910390f35b348015610b3f57600080fd5b50610b5a6004803603810190610b559190614998565b6120c8565b604051610b6791906149f3565b60405180910390f35b348015610b7c57600080fd5b50610b85612195565b604051610b929190614ac4565b60405180910390f35b348015610ba757600080fd5b50610bc26004803603810190610bbd9190614998565b61219b565b604051610bcf91906149f3565b60405180910390f35b348015610be457600080fd5b50610bff6004803603810190610bfa9190614a0e565b6121b9565b005b348015610c0d57600080fd5b50610c286004803603810190610c239190614a0e565b612310565b604051610c3591906149f3565b60405180910390f35b348015610c4a57600080fd5b50610c53612330565b604051610c6091906149f3565b60405180910390f35b348015610c7557600080fd5b50610c906004803603810190610c8b9190614c3f565b612343565b005b348015610c9e57600080fd5b50610cb96004803603810190610cb49190614c7f565b612483565b005b348015610cc757600080fd5b50610ce26004803603810190610cdd9190614adf565b61259d565b005b348015610cf057600080fd5b50610cf96126c7565b604051610d0691906149f3565b60405180910390f35b348015610d1b57600080fd5b50610d246126da565b604051610d319190614ac4565b60405180910390f35b348015610d4657600080fd5b50610d616004803603810190610d5c9190614adf565b6126e0565b604051610d6e91906149f3565b60405180910390f35b348015610d8357600080fd5b50610d8c612850565b604051610d999190614ac4565b60405180910390f35b348015610dae57600080fd5b50610dc96004803603810190610dc49190614cff565b612856565b604051610dd69190614ac4565b60405180910390f35b348015610deb57600080fd5b50610df46128dd565b604051610e019190614ac4565b60405180910390f35b348015610e1657600080fd5b50610e1f6128e3565b604051610e2c91906149f3565b60405180910390f35b348015610e4157600080fd5b50610e4a61299e565b604051610e579190614ac4565b60405180910390f35b348015610e6c57600080fd5b50610e876004803603810190610e829190614a0e565b6129a4565b005b348015610e9557600080fd5b50610e9e612b6b565b604051610eab9190614ac4565b60405180910390f35b348015610ec057600080fd5b50610ec9612b71565b604051610ed69190614ac4565b60405180910390f35b606060038054610eee90614d6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1a90614d6e565b8015610f675780601f10610f3c57610100808354040283529160200191610f67565b820191906000526020600020905b815481529060010190602001808311610f4a57829003601f168201915b5050505050905090565b6000610f85610f7e612bd5565b8484612bdd565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610fe4612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90614dec565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b611153612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d990614dec565b60405180910390fd5b670de0b6b3a76400006103e860016111f8610fd2565b6112029190614e3b565b61120c9190614ec4565b6112169190614ec4565b811015611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f90614f67565b60405180910390fd5b670de0b6b3a76400008161126c9190614e3b565b60088190555050565b6000611282848484612da8565b6113438461128e612bd5565b61133e85604051806060016040528060288152602001615f4560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112f4612bd5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b409092919063ffffffff16565b612bdd565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061141f611383612bd5565b8461141a8560016000611394612bd5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b7790919063ffffffff16565b612bdd565b6001905092915050565b611431612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790614dec565b60405180910390fd5b80471015611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90614fd3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611549573d6000803e3d6000fd5b5050565b611555612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90614dec565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161161f929190614ff3565b602060405180830381600087803b15801561163957600080fd5b505af115801561164d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116719190615031565b50505050565b7f0000000000000000000000000898da18afef4225e5a9c3d95bf298ceb056fbdc81565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61176d612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614dec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118c5612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194b90614dec565b60405180910390fd5b610258831015611999576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611990906150d0565b60405180910390fd5b6103e882111580156119ac575060008210155b6119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e290615162565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b6000611a22612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa890614dec565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b611adb612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6190614dec565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611bf9612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7f90614dec565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611cb09190615182565b611cba9190615182565b601481905550601480541115611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90615224565b60405180910390fd5b505050565b611d12612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9890614dec565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b611e3e612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490614dec565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611ef990614d6e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2590614d6e565b8015611f725780601f10611f4757610100808354040283529160200191611f72565b820191906000526020600020905b815481529060010190602001808311611f5557829003601f168201915b5050505050905090565b611f84612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90614dec565b60405180910390fd5b7f0000000000000000000000000898da18afef4225e5a9c3d95bf298ceb056fbdc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612099906152b6565b60405180910390fd5b6120ac8282613ba4565b5050565b60175481565b60105481565b601e5481565b601b5481565b600061218b6120d5612bd5565b8461218685604051806060016040528060258152602001615f6d60259139600160006120ff612bd5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b409092919063ffffffff16565b612bdd565b6001905092915050565b600e5481565b60006121af6121a8612bd5565b8484612da8565b6001905092915050565b6121c1612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224790614dec565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b61234b612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d190614dec565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161247791906149f3565b60405180910390a25050565b61248b612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190614dec565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a546019546125429190615182565b61254c9190615182565b60188190555060196018541115612598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258f90615322565b60405180910390fd5b505050565b6125a5612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b90614dec565b60405180910390fd5b670de0b6b3a76400006103e8600561264a610fd2565b6126549190614e3b565b61265e9190614ec4565b6126689190614ec4565b8110156126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a1906153b4565b60405180910390fd5b670de0b6b3a7640000816126be9190614e3b565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006126ea612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277090614dec565b60405180910390fd5b620186a06001612787610fd2565b6127919190614e3b565b61279b9190614ec4565b8210156127dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d490615446565b60405180910390fd5b6103e860056127ea610fd2565b6127f49190614e3b565b6127fe9190614ec4565b821115612840576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612837906154d8565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006128ed612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461297c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297390614dec565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b6129ac612bd5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3290614dec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa29061556a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b600a5481565b6000808284612b869190615182565b905083811015612bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc2906155d6565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4490615668565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb4906156fa565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d9b9190614ac4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0f9061578c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7f9061581e565b60405180910390fd5b6000811415612ea257612e9d83836000613c45565b613b3b565b601160009054906101000a900460ff161561356557612ebf611de0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f2d5750612efd611de0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f665750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fa0575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fb95750600560149054906101000a900460ff16155b1561356457601160019054906101000a900460ff166130b357601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130735750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6130b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a99061588a565b60405180910390fd5b5b601360009054906101000a900460ff161561327b576130d0611de0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561315757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131af57507f0000000000000000000000000898da18afef4225e5a9c3d95bf298ceb056fbdc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561327a5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322c90615942565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561331e5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133c557600854811115613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f906159d4565b60405180910390fd5b600a546133748361171d565b8261337f9190615182565b11156133c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b790615a40565b60405180910390fd5b613563565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134685750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134b7576008548111156134b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a990615ad2565b60405180910390fd5b613562565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661356157600a546135148361171d565b8261351f9190615182565b1115613560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355790615a40565b60405180910390fd5b5b5b5b5b5b60006135703061171d565b9050600060095482101590508080156135955750601160029054906101000a900460ff165b80156135ae5750600560149054906101000a900460ff16155b80156136045750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561365a5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136b05750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136f4576001600560146101000a81548160ff0219169083151502179055506136d8613eda565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff1615801561375a5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156137725750600c60009054906101000a900460ff165b801561378d5750600d54600e546137899190615182565b4210155b80156137e35750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137f2576137f06141c1565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138a85750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138b257600090505b60008115613b2b57602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561391557506000601854115b156139e25761394260646139346018548861439690919063ffffffff16565b61441190919063ffffffff16565b9050601854601a54826139559190614e3b565b61395f9190614ec4565b601d60008282546139709190615182565b92505081905550601854601b54826139889190614e3b565b6139929190614ec4565b601e60008282546139a39190615182565b92505081905550601854601954826139bb9190614e3b565b6139c59190614ec4565b601c60008282546139d69190615182565b92505081905550613b07565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a3d57506000601454115b15613b0657613a6a6064613a5c6014548861439690919063ffffffff16565b61441190919063ffffffff16565b905060145460165482613a7d9190614e3b565b613a879190614ec4565b601d6000828254613a989190615182565b9250508190555060145460175482613ab09190614e3b565b613aba9190614ec4565b601e6000828254613acb9190615182565b9250508190555060145460155482613ae39190614e3b565b613aed9190614ec4565b601c6000828254613afe9190615182565b925050819055505b5b6000811115613b1c57613b1b873083613c45565b5b8085613b289190615af2565b94505b613b36878787613c45565b505050505b505050565b6000838311158290613b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7f91906148dd565b60405180910390fd5b5060008385613b979190615af2565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cac9061578c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d1c9061581e565b60405180910390fd5b613d3083838361445b565b613d9b81604051806060016040528060268152602001615f1f602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b409092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e2e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b7790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ecd9190614ac4565b60405180910390a3505050565b6000613ee53061171d565b90506000601e54601c54601d54613efc9190615182565b613f069190615182565b9050600080831480613f185750600082145b15613f25575050506141bf565b6014600954613f349190614e3b565b831115613f4d576014600954613f4a9190614e3b565b92505b6000600283601d5486613f609190614e3b565b613f6a9190614ec4565b613f749190614ec4565b90506000613f8b828661446090919063ffffffff16565b90506000479050613f9b826144aa565b6000613fb0824761446090919063ffffffff16565b90506000613fdb87613fcd601c548561439690919063ffffffff16565b61441190919063ffffffff16565b9050600061400688613ff8601e548661439690919063ffffffff16565b61441190919063ffffffff16565b905060008183856140179190615af2565b6140219190615af2565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161408190615b57565b60006040518083038185875af1925050503d80600081146140be576040519150601f19603f3d011682016040523d82523d6000602084013e6140c3565b606091505b5050809850506000871180156140d95750600081115b15614126576140e887826146f6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d5460405161411d93929190615b6c565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161416c90615b57565b60006040518083038185875af1925050503d80600081146141a9576040519150601f19603f3d011682016040523d82523d6000602084013e6141ae565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000000898da18afef4225e5a9c3d95bf298ceb056fbdc6040518263ffffffff1660e01b81526004016142259190614b6e565b60206040518083038186803b15801561423d57600080fd5b505afa158015614251573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142759190615bb8565b905060006142a2612710614294600b548561439690919063ffffffff16565b61441190919063ffffffff16565b905060008111156142db576142da7f0000000000000000000000000898da18afef4225e5a9c3d95bf298ceb056fbdc61dead83613c45565b5b60007f0000000000000000000000000898da18afef4225e5a9c3d95bf298ceb056fbdc90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561434857600080fd5b505af115801561435c573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b6000808314156143a9576000905061440b565b600082846143b79190614e3b565b90508284826143c69190614ec4565b14614406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143fd90615c57565b60405180910390fd5b809150505b92915050565b600061445383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506147e1565b905092915050565b505050565b60006144a283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b40565b905092915050565b6000600267ffffffffffffffff8111156144c7576144c6615c77565b5b6040519080825280602002602001820160405280156144f55781602001602082028036833780820191505090505b509050308160008151811061450d5761450c615ca6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156145ad57600080fd5b505afa1580156145c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145e59190615cea565b816001815181106145f9576145f8615ca6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061465e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612bdd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016146c0959493929190615e10565b600060405180830381600087803b1580156146da57600080fd5b505af11580156146ee573d6000803e3d6000fd5b505050505050565b614721307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612bdd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161478896959493929190615e6a565b6060604051808303818588803b1580156147a157600080fd5b505af11580156147b5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906147da9190615ecb565b5050505050565b60008083118290614828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161481f91906148dd565b60405180910390fd5b50600083856148379190614ec4565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561487e578082015181840152602081019050614863565b8381111561488d576000848401525b50505050565b6000601f19601f8301169050919050565b60006148af82614844565b6148b9818561484f565b93506148c9818560208601614860565b6148d281614893565b840191505092915050565b600060208201905081810360008301526148f781846148a4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061492f82614904565b9050919050565b61493f81614924565b811461494a57600080fd5b50565b60008135905061495c81614936565b92915050565b6000819050919050565b61497581614962565b811461498057600080fd5b50565b6000813590506149928161496c565b92915050565b600080604083850312156149af576149ae6148ff565b5b60006149bd8582860161494d565b92505060206149ce85828601614983565b9150509250929050565b60008115159050919050565b6149ed816149d8565b82525050565b6000602082019050614a0860008301846149e4565b92915050565b600060208284031215614a2457614a236148ff565b5b6000614a328482850161494d565b91505092915050565b6000819050919050565b6000614a60614a5b614a5684614904565b614a3b565b614904565b9050919050565b6000614a7282614a45565b9050919050565b6000614a8482614a67565b9050919050565b614a9481614a79565b82525050565b6000602082019050614aaf6000830184614a8b565b92915050565b614abe81614962565b82525050565b6000602082019050614ad96000830184614ab5565b92915050565b600060208284031215614af557614af46148ff565b5b6000614b0384828501614983565b91505092915050565b600080600060608486031215614b2557614b246148ff565b5b6000614b338682870161494d565b9350506020614b448682870161494d565b9250506040614b5586828701614983565b9150509250925092565b614b6881614924565b82525050565b6000602082019050614b836000830184614b5f565b92915050565b600060ff82169050919050565b614b9f81614b89565b82525050565b6000602082019050614bba6000830184614b96565b92915050565b614bc9816149d8565b8114614bd457600080fd5b50565b600081359050614be681614bc0565b92915050565b600080600060608486031215614c0557614c046148ff565b5b6000614c1386828701614983565b9350506020614c2486828701614983565b9250506040614c3586828701614bd7565b9150509250925092565b60008060408385031215614c5657614c556148ff565b5b6000614c648582860161494d565b9250506020614c7585828601614bd7565b9150509250929050565b600080600060608486031215614c9857614c976148ff565b5b6000614ca686828701614983565b9350506020614cb786828701614983565b9250506040614cc886828701614983565b9150509250925092565b600060208284031215614ce857614ce76148ff565b5b6000614cf684828501614bd7565b91505092915050565b60008060408385031215614d1657614d156148ff565b5b6000614d248582860161494d565b9250506020614d358582860161494d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d8657607f821691505b60208210811415614d9a57614d99614d3f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614dd660208361484f565b9150614de182614da0565b602082019050919050565b60006020820190508181036000830152614e0581614dc9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e4682614962565b9150614e5183614962565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e8a57614e89614e0c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ecf82614962565b9150614eda83614962565b925082614eea57614ee9614e95565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614f51602f8361484f565b9150614f5c82614ef5565b604082019050919050565b60006020820190508181036000830152614f8081614f44565b9050919050565b7f696e73756666696369656e7420424e422062616c616e63650000000000000000600082015250565b6000614fbd60188361484f565b9150614fc882614f87565b602082019050919050565b60006020820190508181036000830152614fec81614fb0565b9050919050565b60006040820190506150086000830185614b5f565b6150156020830184614ab5565b9392505050565b60008151905061502b81614bc0565b92915050565b600060208284031215615047576150466148ff565b5b60006150558482850161501c565b91505092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b60006150ba60338361484f565b91506150c58261505e565b604082019050919050565b600060208201905081810360008301526150e9816150ad565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061514c60308361484f565b9150615157826150f0565b604082019050919050565b6000602082019050818103600083015261517b8161513f565b9050919050565b600061518d82614962565b915061519883614962565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151cd576151cc614e0c565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b600061520e601d8361484f565b9150615219826151d8565b602082019050919050565b6000602082019050818103600083015261523d81615201565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006152a060398361484f565b91506152ab82615244565b604082019050919050565b600060208201905081810360008301526152cf81615293565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b600061530c601d8361484f565b9150615317826152d6565b602082019050919050565b6000602082019050818103600083015261533b816152ff565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061539e60248361484f565b91506153a982615342565b604082019050919050565b600060208201905081810360008301526153cd81615391565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061543060358361484f565b915061543b826153d4565b604082019050919050565b6000602082019050818103600083015261545f81615423565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006154c260348361484f565b91506154cd82615466565b604082019050919050565b600060208201905081810360008301526154f1816154b5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061555460268361484f565b915061555f826154f8565b604082019050919050565b6000602082019050818103600083015261558381615547565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006155c0601b8361484f565b91506155cb8261558a565b602082019050919050565b600060208201905081810360008301526155ef816155b3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061565260248361484f565b915061565d826155f6565b604082019050919050565b6000602082019050818103600083015261568181615645565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156e460228361484f565b91506156ef82615688565b604082019050919050565b60006020820190508181036000830152615713816156d7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061577660258361484f565b91506157818261571a565b604082019050919050565b600060208201905081810360008301526157a581615769565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061580860238361484f565b9150615813826157ac565b604082019050919050565b60006020820190508181036000830152615837816157fb565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061587460168361484f565b915061587f8261583e565b602082019050919050565b600060208201905081810360008301526158a381615867565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061592c60498361484f565b9150615937826158aa565b606082019050919050565b6000602082019050818103600083015261595b8161591f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006159be60358361484f565b91506159c982615962565b604082019050919050565b600060208201905081810360008301526159ed816159b1565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615a2a60138361484f565b9150615a35826159f4565b602082019050919050565b60006020820190508181036000830152615a5981615a1d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615abc60368361484f565b9150615ac782615a60565b604082019050919050565b60006020820190508181036000830152615aeb81615aaf565b9050919050565b6000615afd82614962565b9150615b0883614962565b925082821015615b1b57615b1a614e0c565b5b828203905092915050565b600081905092915050565b50565b6000615b41600083615b26565b9150615b4c82615b31565b600082019050919050565b6000615b6282615b34565b9150819050919050565b6000606082019050615b816000830186614ab5565b615b8e6020830185614ab5565b615b9b6040830184614ab5565b949350505050565b600081519050615bb28161496c565b92915050565b600060208284031215615bce57615bcd6148ff565b5b6000615bdc84828501615ba3565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c4160218361484f565b9150615c4c82615be5565b604082019050919050565b60006020820190508181036000830152615c7081615c34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615ce481614936565b92915050565b600060208284031215615d0057615cff6148ff565b5b6000615d0e84828501615cd5565b91505092915050565b6000819050919050565b6000615d3c615d37615d3284615d17565b614a3b565b614962565b9050919050565b615d4c81615d21565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d8781614924565b82525050565b6000615d998383615d7e565b60208301905092915050565b6000602082019050919050565b6000615dbd82615d52565b615dc78185615d5d565b9350615dd283615d6e565b8060005b83811015615e03578151615dea8882615d8d565b9750615df583615da5565b925050600181019050615dd6565b5085935050505092915050565b600060a082019050615e256000830188614ab5565b615e326020830187615d43565b8181036040830152615e448186615db2565b9050615e536060830185614b5f565b615e606080830184614ab5565b9695505050505050565b600060c082019050615e7f6000830189614b5f565b615e8c6020830188614ab5565b615e996040830187615d43565b615ea66060830186615d43565b615eb36080830185614b5f565b615ec060a0830184614ab5565b979650505050505050565b600080600060608486031215615ee457615ee36148ff565b5b6000615ef286828701615ba3565b9350506020615f0386828701615ba3565b9250506040615f1486828701615ba3565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d44f2b276626c7aa8fb749ed26ad1c0bba0a73adcc10144fd36bb690824b741964736f6c63430008090033

Deployed Bytecode Sourcemap

29911:17676:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8067:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10234:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31571:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29990:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9187:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38327:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30567:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30378:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31350:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31310;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35876:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10885:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30093:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30473:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30434:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9029:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11649:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38705:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38909:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30048:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30665:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38504:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31161:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30745:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9358:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22532:148;;;;;;;;;;;;;:::i;:::-;;46321:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35089:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36345:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30185:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31050;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36702:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34878:155;;;;;;;;;;;;;:::i;:::-;;21890:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30222:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31196:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36589:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8286:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37659:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31124:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30621:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31390:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31272:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12370:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30525:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9698:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38107:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31793:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30705:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37469:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37083:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36118:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30968:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30259:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35483:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31016:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9936:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30301:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35274:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31087:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22835:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31234:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30341:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8067:100;8121:13;8154:5;8147:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8067:100;:::o;10234:169::-;10317:4;10334:39;10343:12;:10;:12::i;:::-;10357:7;10366:6;10334:8;:39::i;:::-;10391:4;10384:11;;10234:169;;;;:::o;31571:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29990:51::-;;;:::o;9187:108::-;9248:7;9275:12;;9268:19;;9187:108;:::o;38327:157::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38434:9:::1;;;;;;;;;;;38406:38;;38423:9;38406:38;;;;;;;;;;;;38467:9;38455;;:21;;;;;;;;;;;;;;;;;;38327:157:::0;:::o;30567:47::-;;;;:::o;30378:36::-;;;;:::o;31350:33::-;;;;:::o;31310:::-;;;;:::o;35876:234::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35995:4:::1;35989;35985:1;35969:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35968:31;;;;:::i;:::-;35958:6;:41;;35950:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;36095:6;36085;:17;;;;:::i;:::-;36062:20;:40;;;;35876:234:::0;:::o;10885:355::-;11025:4;11042:36;11052:6;11060:9;11071:6;11042:9;:36::i;:::-;11089:121;11098:6;11106:12;:10;:12::i;:::-;11120:89;11158:6;11120:89;;;;;;;;;;;;;;;;;:11;:19;11132:6;11120:19;;;;;;;;;;;;;;;:33;11140:12;:10;:12::i;:::-;11120:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11089:8;:121::i;:::-;11228:4;11221:11;;10885:355;;;;;:::o;30093:53::-;30139:6;30093:53;:::o;30473:45::-;;;;:::o;30434:32::-;;;;;;;;;;;;;:::o;9029:93::-;9087:5;9112:2;9105:9;;9029:93;:::o;11649:218::-;11737:4;11754:83;11763:12;:10;:12::i;:::-;11777:7;11786:50;11825:10;11786:11;:25;11798:12;:10;:12::i;:::-;11786:25;;;;;;;;;;;;;;;:34;11812:7;11786:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11754:8;:83::i;:::-;11855:4;11848:11;;11649:218;;;;:::o;38705:196::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38805:9:::1;38780:21;:34;;38772:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38862:10;38854:28;;:39;38883:9;38854:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38705:196:::0;:::o;38909:154::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39021:10:::1;39014:27;;;39042:3;39047:7;39014:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38909:154:::0;;;:::o;30048:38::-;;;:::o;30665:33::-;;;;;;;;;;;;;:::o;38504:125::-;38569:4;38593:19;:28;38613:7;38593:28;;;;;;;;;;;;;;;;;;;;;;;;;38586:35;;38504:125;;;:::o;31161:28::-;;;;:::o;30745:31::-;;;;;;;;;;;;;:::o;9358:127::-;9432:7;9459:9;:18;9469:7;9459:18;;;;;;;;;;;;;;;;9452:25;;9358:127;;;:::o;22532:148::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22639:1:::1;22602:40;;22623:6;;;;;;;;;;;22602:40;;;;;;;;;;;;22670:1;22653:6;;:19;;;;;;;;;;;;;;;;;;22532:148::o:0;46321:447::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46475:3:::1;46452:19;:26;;46444:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;46565:4;46553:8;:16;;:33;;;;;46585:1;46573:8;:13;;46553:33;46545:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;46668:19;46650:15;:37;;;;46717:8;46698:16;:27;;;;46752:8;46736:13;;:24;;;;;;;;;;;;;;;;;;46321:447:::0;;;:::o;35089:120::-;35141:4;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35174:5:::1;35157:14;;:22;;;;;;;;;;;;;;;;;;35197:4;35190:11;;35089:120:::0;:::o;36345:144::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36477:4:::1;36435:31;:39;36467:6;36435:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36345:144:::0;;:::o;30185:30::-;;;;;;;;;;;;;:::o;31050:::-;;;;:::o;36702:369::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36836:13:::1;36818:15;:31;;;;36878:13;36860:15;:31;;;;36914:7;36902:9;:19;;;;36983:9;;36965:15;;36947;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;36932:12;:60;;;;37027:2;37011:12:::0;::::1;:18;;37003:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36702:369:::0;;;:::o;34878:155::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34949:4:::1;34933:13;;:20;;;;;;;;;;;;;;;;;;34978:4;34964:11;;:18;;;;;;;;;;;;;;;;;;35010:15;34993:14;:32;;;;34878:155::o:0;21890:79::-;21928:7;21955:6;;;;;;;;;;;21948:13;;21890:79;:::o;30222:24::-;;;;;;;;;;;;;:::o;31196:31::-;;;;:::o;36589:101::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36675:7:::1;36661:11;;:21;;;;;;;;;;;;;;;;;;36589:101:::0;:::o;8286:104::-;8342:13;8375:7;8368:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8286:104;:::o;37659:244::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37766:13:::1;37758:21;;:4;:21;;;;37750:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37854:41;37883:4;37889:5;37854:28;:41::i;:::-;37659:244:::0;;:::o;31124:24::-;;;;:::o;30621:35::-;;;;:::o;31390:27::-;;;;:::o;31272:25::-;;;;:::o;12370:269::-;12463:4;12480:129;12489:12;:10;:12::i;:::-;12503:7;12512:96;12551:15;12512:96;;;;;;;;;;;;;;;;;:11;:25;12524:12;:10;:12::i;:::-;12512:25;;;;;;;;;;;;;;;:34;12538:7;12512:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12480:8;:129::i;:::-;12627:4;12620:11;;12370:269;;;;:::o;30525:29::-;;;;:::o;9698:175::-;9784:4;9801:42;9811:12;:10;:12::i;:::-;9825:9;9836:6;9801:9;:42::i;:::-;9861:4;9854:11;;9698:175;;;;:::o;38107:208::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38244:15:::1;;;;;;;;;;;38201:59;;38224:18;38201:59;;;;;;;;;;;;38289:18;38271:15;;:36;;;;;;;;;;;;;;;;;;38107:208:::0;:::o;31793:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30705:33::-;;;;;;;;;;;;;:::o;37469:182::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37585:8:::1;37554:19;:28;37574:7;37554:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37625:7;37609:34;;;37634:8;37609:34;;;;;;:::i;:::-;;;;;;;;37469:182:::0;;:::o;37083:378::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37219:13:::1;37200:16;:32;;;;37262:13;37243:16;:32;;;;37299:7;37286:10;:20;;;;37371:10;;37352:16;;37333;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;37317:13;:64;;;;37417:2;37400:13;;:19;;37392:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37083:378:::0;;;:::o;36118:215::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36240:4:::1;36234;36230:1;36214:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36213:31;;;;:::i;:::-;36203:6;:41;;36195:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36318:6;36308;:17;;;;:::i;:::-;36296:9;:29;;;;36118:215:::0;:::o;30968:39::-;;;;;;;;;;;;;:::o;30259:35::-;;;;:::o;35483:381::-;35564:4;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35620:6:::1;35616:1;35600:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35587:9;:39;;35579:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35735:4;35731:1;35715:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35702:9;:37;;35694:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35827:9;35806:18;:30;;;;35853:4;35846:11;;35483:381:::0;;;:::o;31016:27::-;;;;:::o;9936:151::-;10025:7;10052:11;:18;10064:5;10052:18;;;;;;;;;;;;;;;:27;10071:7;10052:27;;;;;;;;;;;;;;;;10045:34;;9936:151;;;;:::o;30301:33::-;;;;:::o;35274:134::-;35334:4;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35373:5:::1;35350:20;;:28;;;;;;;;;;;;;;;;;;35396:4;35389:11;;35274:134:::0;:::o;31087:30::-;;;;:::o;22835:244::-;22112:12;:10;:12::i;:::-;22102:22;;:6;;;;;;;;;;;:22;;;22094:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22944:1:::1;22924:22;;:8;:22;;;;22916:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23034:8;23005:38;;23026:6;;;;;;;;;;;23005:38;;;;;;;;;;;;23063:8;23054:6;;:17;;;;;;;;;;;;;;;;;;22835:244:::0;:::o;31234:31::-;;;;:::o;30341:24::-;;;;:::o;16934:181::-;16992:7;17012:9;17028:1;17024;:5;;;;:::i;:::-;17012:17;;17053:1;17048;:6;;17040:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17106:1;17099:8;;;16934:181;;;;:::o;702:98::-;755:7;782:10;775:17;;702:98;:::o;15556:380::-;15709:1;15692:19;;:5;:19;;;;15684:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15790:1;15771:21;;:7;:21;;;;15763:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15874:6;15844:11;:18;15856:5;15844:18;;;;;;;;;;;;;;;:27;15863:7;15844:27;;;;;;;;;;;;;;;:36;;;;15912:7;15896:32;;15905:5;15896:32;;;15921:6;15896:32;;;;;;:::i;:::-;;;;;;;;15556:380;;;:::o;39127:4358::-;39275:1;39259:18;;:4;:18;;;;39251:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39352:1;39338:16;;:2;:16;;;;39330:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39429:1;39419:6;:11;39416:92;;;39447:28;39463:4;39469:2;39473:1;39447:15;:28::i;:::-;39490:7;;39416:92;39531:14;;;;;;;;;;;39528:1841;;;39591:7;:5;:7::i;:::-;39583:15;;:4;:15;;;;:49;;;;;39625:7;:5;:7::i;:::-;39619:13;;:2;:13;;;;39583:49;:86;;;;;39667:1;39653:16;;:2;:16;;;;39583:86;:128;;;;;39704:6;39690:21;;:2;:21;;;;39583:128;:158;;;;;39733:8;;;;;;;;;;;39732:9;39583:158;39561:1797;;;39779:13;;;;;;;;;;;39775:148;;39824:19;:25;39844:4;39824:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39853:19;:23;39873:2;39853:23;;;;;;;;;;;;;;;;;;;;;;;;;39824:52;39816:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39775:148;40081:20;;;;;;;;;;;40077:423;;;40135:7;:5;:7::i;:::-;40129:13;;:2;:13;;;;:47;;;;;40160:15;40146:30;;:2;:30;;;;40129:47;:79;;;;;40194:13;40180:28;;:2;:28;;;;40129:79;40125:356;;;40286:12;40244:28;:39;40273:9;40244:39;;;;;;;;;;;;;;;;:54;40236:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40445:12;40403:28;:39;40432:9;40403:39;;;;;;;;;;;;;;;:54;;;;40125:356;40077:423;40569:25;:31;40595:4;40569:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40605:31;:35;40637:2;40605:35;;;;;;;;;;;;;;;;;;;;;;;;;40604:36;40569:71;40565:778;;;40687:20;;40677:6;:30;;40669:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40826:9;;40809:13;40819:2;40809:9;:13::i;:::-;40800:6;:22;;;;:::i;:::-;:35;;40792:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40565:778;;;40953:25;:29;40979:2;40953:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40987:31;:37;41019:4;40987:37;;;;;;;;;;;;;;;;;;;;;;;;;40986:38;40953:71;40949:394;;;41071:20;;41061:6;:30;;41053:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40949:394;;;41197:31;:35;41229:2;41197:35;;;;;;;;;;;;;;;;;;;;;;;;;41193:150;;41290:9;;41273:13;41283:2;41273:9;:13::i;:::-;41264:6;:22;;;;:::i;:::-;:35;;41256:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41193:150;40949:394;40565:778;39561:1797;39528:1841;41403:28;41434:24;41452:4;41434:9;:24::i;:::-;41403:55;;41479:12;41518:18;;41494:20;:42;;41479:57;;41567:7;:35;;;;;41591:11;;;;;;;;;;;41567:35;:61;;;;;41620:8;;;;;;;;;;;41619:9;41567:61;:110;;;;;41646:25;:31;41672:4;41646:31;;;;;;;;;;;;;;;;;;;;;;;;;41645:32;41567:110;:153;;;;;41695:19;:25;41715:4;41695:25;;;;;;;;;;;;;;;;;;;;;;;;;41694:26;41567:153;:194;;;;;41738:19;:23;41758:2;41738:23;;;;;;;;;;;;;;;;;;;;;;;;;41737:24;41567:194;41549:338;;;41799:4;41788:8;;:15;;;;;;;;;;;;;;;;;;41832:10;:8;:10::i;:::-;41870:5;41859:8;;:16;;;;;;;;;;;;;;;;;;41549:338;41911:8;;;;;;;;;;;41910:9;:42;;;;;41923:25;:29;41949:2;41923:29;;;;;;;;;;;;;;;;;;;;;;;;;41910:42;:59;;;;;41956:13;;;;;;;;;;;41910:59;:114;;;;;42009:15;;41992:14;;:32;;;;:::i;:::-;41973:15;:51;;41910:114;:144;;;;;42029:19;:25;42049:4;42029:25;;;;;;;;;;;;;;;;;;;;;;;;;42028:26;41910:144;41907:204;;;42070:29;:27;:29::i;:::-;;41907:204;42123:12;42139:8;;;;;;;;;;;42138:9;42123:24;;42248:19;:25;42268:4;42248:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42277:19;:23;42297:2;42277:23;;;;;;;;;;;;;;;;;;;;;;;;;42248:52;42245:99;;;42327:5;42317:15;;42245:99;42364:12;42468:7;42465:967;;;42519:25;:29;42545:2;42519:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;42568:1;42552:13;;:17;42519:50;42515:748;;;42596:34;42626:3;42596:25;42607:13;;42596:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42589:41;;42697:13;;42678:16;;42671:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42649:18;;:61;;;;;;;:::i;:::-;;;;;;;;42765:13;;42752:10;;42745:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;42729:12;;:49;;;;;;;:::i;:::-;;;;;;;;42845:13;;42826:16;;42819:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42797:18;;:61;;;;;;;:::i;:::-;;;;;;;;42515:748;;;42919:25;:31;42945:4;42919:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42969:1;42954:12;;:16;42919:51;42916:347;;;42995:33;43024:3;42995:24;43006:12;;42995:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42988:40;;43091:12;;43073:15;;43066:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43044:18;;:59;;;;;;;:::i;:::-;;;;;;;;43157:12;;43145:9;;43138:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;43122:12;;:47;;;;;;;:::i;:::-;;;;;;;;43235:12;;43217:15;;43210:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43188:18;;:59;;;;;;;:::i;:::-;;;;;;;;42916:347;42515:748;43301:1;43294:4;:8;43291:93;;;43326:42;43342:4;43356;43363;43326:15;:42::i;:::-;43291:93;43416:4;43406:14;;;;;:::i;:::-;;;42465:967;43444:33;43460:4;43466:2;43470:6;43444:15;:33::i;:::-;39240:4245;;;;39127:4358;;;;:::o;17837:192::-;17923:7;17956:1;17951;:6;;17959:12;17943:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17983:9;17999:1;17995;:5;;;;:::i;:::-;17983:17;;18020:1;18013:8;;;17837:192;;;;;:::o;37911:188::-;38028:5;37994:25;:31;38020:4;37994:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38085:5;38051:40;;38079:4;38051:40;;;;;;;;;;;;37911:188;;:::o;13129:573::-;13287:1;13269:20;;:6;:20;;;;13261:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13371:1;13350:23;;:9;:23;;;;13342:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13426:47;13447:6;13455:9;13466:6;13426:20;:47::i;:::-;13506:71;13528:6;13506:71;;;;;;;;;;;;;;;;;:9;:17;13516:6;13506:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13486:9;:17;13496:6;13486:17;;;;;;;;;;;;;;;:91;;;;13611:32;13636:6;13611:9;:20;13621:9;13611:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13588:9;:20;13598:9;13588:20;;;;;;;;;;;;;;;:55;;;;13676:9;13659:35;;13668:6;13659:35;;;13687:6;13659:35;;;;;;:::i;:::-;;;;;;;;13129:573;;;:::o;44643:1666::-;44682:23;44708:24;44726:4;44708:9;:24::i;:::-;44682:50;;44743:25;44813:12;;44792:18;;44771;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;44743:82;;44836:12;44891:1;44872:15;:20;:46;;;;44917:1;44896:17;:22;44872:46;44869:60;;;44921:7;;;;;44869:60;44983:2;44962:18;;:23;;;;:::i;:::-;44944:15;:41;44941:111;;;45038:2;45017:18;;:23;;;;:::i;:::-;44999:41;;44941:111;45121:23;45206:1;45186:17;45165:18;;45147:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;45121:86;;45218:26;45247:36;45267:15;45247;:19;;:36;;;;:::i;:::-;45218:65;;45304:25;45332:21;45304:49;;45366:36;45383:18;45366:16;:36::i;:::-;45424:18;45445:44;45471:17;45445:21;:25;;:44;;;;:::i;:::-;45424:65;;45510:23;45536:57;45575:17;45536:34;45551:18;;45536:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;45510:83;;45604:17;45624:51;45657:17;45624:28;45639:12;;45624:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;45604:71;;45706:23;45763:9;45745:15;45732:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;45706:66;;45824:1;45803:18;:22;;;;45857:1;45836:18;:22;;;;45884:1;45869:12;:16;;;;45927:9;;;;;;;;;;;45919:23;;45950:9;45919:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45906:58;;;;;46006:1;45988:15;:19;:42;;;;;46029:1;46011:15;:19;45988:42;45985:210;;;46046:46;46059:15;46076;46046:12;:46::i;:::-;46112:71;46127:18;46147:15;46164:18;;46112:71;;;;;;;;:::i;:::-;;;;;;;;45985:210;46246:15;;;;;;;;;;;46238:29;;46275:21;46238:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46225:76;;;;;44671:1638;;;;;;;;;;44643:1666;:::o;46780:804::-;46837:4;46880:15;46863:14;:32;;;;46958:28;46989:4;:14;;;47004:13;46989:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46958:60;;47076:20;47099:53;47146:5;47099:42;47124:16;;47099:20;:24;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;47076:76;;47280:1;47265:12;:16;47261:109;;;47297:61;47313:13;47336:6;47345:12;47297:15;:61::i;:::-;47261:109;47453:19;47490:13;47453:51;;47515:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47542:12;;;;;;;;;;47572:4;47565:11;;;;;46780:804;:::o;18288:471::-;18346:7;18596:1;18591;:6;18587:47;;;18621:1;18614:8;;;;18587:47;18646:9;18662:1;18658;:5;;;;:::i;:::-;18646:17;;18691:1;18686;18682;:5;;;;:::i;:::-;:10;18674:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18750:1;18743:8;;;18288:471;;;;;:::o;19235:132::-;19293:7;19320:39;19324:1;19327;19320:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19313:46;;19235:132;;;;:::o;16539:125::-;;;;:::o;17398:136::-;17456:7;17483:43;17487:1;17490;17483:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17476:50;;17398:136;;;;:::o;43493:601::-;43621:21;43659:1;43645:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43621:40;;43690:4;43672;43677:1;43672:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43716:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43706:4;43711:1;43706:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43751:62;43768:4;43783:15;43801:11;43751:8;:62::i;:::-;43852:15;:66;;;43933:11;43959:1;44003:4;44030;44050:15;43852:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43548:546;43493:601;:::o;44118:517::-;44266:62;44283:4;44298:15;44316:11;44266:8;:62::i;:::-;44371:15;:31;;;44410:9;44443:4;44463:11;44489:1;44532;30139:6;44601:15;44371:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44118:517;;:::o;19863:278::-;19949:7;19981:1;19977;:5;19984:12;19969:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20008:9;20024:1;20020;:5;;;;:::i;:::-;20008:17;;20132:1;20125:8;;;19863:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:619::-;8332:6;8340;8348;8397:2;8385:9;8376:7;8372:23;8368:32;8365:119;;;8403:79;;:::i;:::-;8365:119;8523:1;8548:53;8593:7;8584:6;8573:9;8569:22;8548:53;:::i;:::-;8538:63;;8494:117;8650:2;8676:53;8721:7;8712:6;8701:9;8697:22;8676:53;:::i;:::-;8666:63;;8621:118;8778:2;8804:53;8849:7;8840:6;8829:9;8825:22;8804:53;:::i;:::-;8794:63;;8749:118;8255:619;;;;;:::o;8880:323::-;8936:6;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:50;9178:7;9169:6;9158:9;9154:22;9136:50;:::i;:::-;9126:60;;9082:114;8880:323;;;;:::o;9209:474::-;9277:6;9285;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9587:2;9613:53;9658:7;9649:6;9638:9;9634:22;9613:53;:::i;:::-;9603:63;;9558:118;9209:474;;;;;:::o;9689:180::-;9737:77;9734:1;9727:88;9834:4;9831:1;9824:15;9858:4;9855:1;9848:15;9875:320;9919:6;9956:1;9950:4;9946:12;9936:22;;10003:1;9997:4;9993:12;10024:18;10014:81;;10080:4;10072:6;10068:17;10058:27;;10014:81;10142:2;10134:6;10131:14;10111:18;10108:38;10105:84;;;10161:18;;:::i;:::-;10105:84;9926:269;9875:320;;;:::o;10201:182::-;10341:34;10337:1;10329:6;10325:14;10318:58;10201:182;:::o;10389:366::-;10531:3;10552:67;10616:2;10611:3;10552:67;:::i;:::-;10545:74;;10628:93;10717:3;10628:93;:::i;:::-;10746:2;10741:3;10737:12;10730:19;;10389:366;;;:::o;10761:419::-;10927:4;10965:2;10954:9;10950:18;10942:26;;11014:9;11008:4;11004:20;11000:1;10989:9;10985:17;10978:47;11042:131;11168:4;11042:131;:::i;:::-;11034:139;;10761:419;;;:::o;11186:180::-;11234:77;11231:1;11224:88;11331:4;11328:1;11321:15;11355:4;11352:1;11345:15;11372:348;11412:7;11435:20;11453:1;11435:20;:::i;:::-;11430:25;;11469:20;11487:1;11469:20;:::i;:::-;11464:25;;11657:1;11589:66;11585:74;11582:1;11579:81;11574:1;11567:9;11560:17;11556:105;11553:131;;;11664:18;;:::i;:::-;11553:131;11712:1;11709;11705:9;11694:20;;11372:348;;;;:::o;11726:180::-;11774:77;11771:1;11764:88;11871:4;11868:1;11861:15;11895:4;11892:1;11885:15;11912:185;11952:1;11969:20;11987:1;11969:20;:::i;:::-;11964:25;;12003:20;12021:1;12003:20;:::i;:::-;11998:25;;12042:1;12032:35;;12047:18;;:::i;:::-;12032:35;12089:1;12086;12082:9;12077:14;;11912:185;;;;:::o;12103:234::-;12243:34;12239:1;12231:6;12227:14;12220:58;12312:17;12307:2;12299:6;12295:15;12288:42;12103:234;:::o;12343:366::-;12485:3;12506:67;12570:2;12565:3;12506:67;:::i;:::-;12499:74;;12582:93;12671:3;12582:93;:::i;:::-;12700:2;12695:3;12691:12;12684:19;;12343:366;;;:::o;12715:419::-;12881:4;12919:2;12908:9;12904:18;12896:26;;12968:9;12962:4;12958:20;12954:1;12943:9;12939:17;12932:47;12996:131;13122:4;12996:131;:::i;:::-;12988:139;;12715:419;;;:::o;13140:174::-;13280:26;13276:1;13268:6;13264:14;13257:50;13140:174;:::o;13320:366::-;13462:3;13483:67;13547:2;13542:3;13483:67;:::i;:::-;13476:74;;13559:93;13648:3;13559:93;:::i;:::-;13677:2;13672:3;13668:12;13661:19;;13320:366;;;:::o;13692:419::-;13858:4;13896:2;13885:9;13881:18;13873:26;;13945:9;13939:4;13935:20;13931:1;13920:9;13916:17;13909:47;13973:131;14099:4;13973:131;:::i;:::-;13965:139;;13692:419;;;:::o;14117:332::-;14238:4;14276:2;14265:9;14261:18;14253:26;;14289:71;14357:1;14346:9;14342:17;14333:6;14289:71;:::i;:::-;14370:72;14438:2;14427:9;14423:18;14414:6;14370:72;:::i;:::-;14117:332;;;;;:::o;14455:137::-;14509:5;14540:6;14534:13;14525:22;;14556:30;14580:5;14556:30;:::i;:::-;14455:137;;;;:::o;14598:345::-;14665:6;14714:2;14702:9;14693:7;14689:23;14685:32;14682:119;;;14720:79;;:::i;:::-;14682:119;14840:1;14865:61;14918:7;14909:6;14898:9;14894:22;14865:61;:::i;:::-;14855:71;;14811:125;14598:345;;;;:::o;14949:238::-;15089:34;15085:1;15077:6;15073:14;15066:58;15158:21;15153:2;15145:6;15141:15;15134:46;14949:238;:::o;15193:366::-;15335:3;15356:67;15420:2;15415:3;15356:67;:::i;:::-;15349:74;;15432:93;15521:3;15432:93;:::i;:::-;15550:2;15545:3;15541:12;15534:19;;15193:366;;;:::o;15565:419::-;15731:4;15769:2;15758:9;15754:18;15746:26;;15818:9;15812:4;15808:20;15804:1;15793:9;15789:17;15782:47;15846:131;15972:4;15846:131;:::i;:::-;15838:139;;15565:419;;;:::o;15990:235::-;16130:34;16126:1;16118:6;16114:14;16107:58;16199:18;16194:2;16186:6;16182:15;16175:43;15990:235;:::o;16231:366::-;16373:3;16394:67;16458:2;16453:3;16394:67;:::i;:::-;16387:74;;16470:93;16559:3;16470:93;:::i;:::-;16588:2;16583:3;16579:12;16572:19;;16231:366;;;:::o;16603:419::-;16769:4;16807:2;16796:9;16792:18;16784:26;;16856:9;16850:4;16846:20;16842:1;16831:9;16827:17;16820:47;16884:131;17010:4;16884:131;:::i;:::-;16876:139;;16603:419;;;:::o;17028:305::-;17068:3;17087:20;17105:1;17087:20;:::i;:::-;17082:25;;17121:20;17139:1;17121:20;:::i;:::-;17116:25;;17275:1;17207:66;17203:74;17200:1;17197:81;17194:107;;;17281:18;;:::i;:::-;17194:107;17325:1;17322;17318:9;17311:16;;17028:305;;;;:::o;17339:179::-;17479:31;17475:1;17467:6;17463:14;17456:55;17339:179;:::o;17524:366::-;17666:3;17687:67;17751:2;17746:3;17687:67;:::i;:::-;17680:74;;17763:93;17852:3;17763:93;:::i;:::-;17881:2;17876:3;17872:12;17865:19;;17524:366;;;:::o;17896:419::-;18062:4;18100:2;18089:9;18085:18;18077:26;;18149:9;18143:4;18139:20;18135:1;18124:9;18120:17;18113:47;18177:131;18303:4;18177:131;:::i;:::-;18169:139;;17896:419;;;:::o;18321:244::-;18461:34;18457:1;18449:6;18445:14;18438:58;18530:27;18525:2;18517:6;18513:15;18506:52;18321:244;:::o;18571:366::-;18713:3;18734:67;18798:2;18793:3;18734:67;:::i;:::-;18727:74;;18810:93;18899:3;18810:93;:::i;:::-;18928:2;18923:3;18919:12;18912:19;;18571:366;;;:::o;18943:419::-;19109:4;19147:2;19136:9;19132:18;19124:26;;19196:9;19190:4;19186:20;19182:1;19171:9;19167:17;19160:47;19224:131;19350:4;19224:131;:::i;:::-;19216:139;;18943:419;;;:::o;19368:179::-;19508:31;19504:1;19496:6;19492:14;19485:55;19368:179;:::o;19553:366::-;19695:3;19716:67;19780:2;19775:3;19716:67;:::i;:::-;19709:74;;19792:93;19881:3;19792:93;:::i;:::-;19910:2;19905:3;19901:12;19894:19;;19553:366;;;:::o;19925:419::-;20091:4;20129:2;20118:9;20114:18;20106:26;;20178:9;20172:4;20168:20;20164:1;20153:9;20149:17;20142:47;20206:131;20332:4;20206:131;:::i;:::-;20198:139;;19925:419;;;:::o;20350:223::-;20490:34;20486:1;20478:6;20474:14;20467:58;20559:6;20554:2;20546:6;20542:15;20535:31;20350:223;:::o;20579:366::-;20721:3;20742:67;20806:2;20801:3;20742:67;:::i;:::-;20735:74;;20818:93;20907:3;20818:93;:::i;:::-;20936:2;20931:3;20927:12;20920:19;;20579:366;;;:::o;20951:419::-;21117:4;21155:2;21144:9;21140:18;21132:26;;21204:9;21198:4;21194:20;21190:1;21179:9;21175:17;21168:47;21232:131;21358:4;21232:131;:::i;:::-;21224:139;;20951:419;;;:::o;21376:240::-;21516:34;21512:1;21504:6;21500:14;21493:58;21585:23;21580:2;21572:6;21568:15;21561:48;21376:240;:::o;21622:366::-;21764:3;21785:67;21849:2;21844:3;21785:67;:::i;:::-;21778:74;;21861:93;21950:3;21861:93;:::i;:::-;21979:2;21974:3;21970:12;21963:19;;21622:366;;;:::o;21994:419::-;22160:4;22198:2;22187:9;22183:18;22175:26;;22247:9;22241:4;22237:20;22233:1;22222:9;22218:17;22211:47;22275:131;22401:4;22275:131;:::i;:::-;22267:139;;21994:419;;;:::o;22419:239::-;22559:34;22555:1;22547:6;22543:14;22536:58;22628:22;22623:2;22615:6;22611:15;22604:47;22419:239;:::o;22664:366::-;22806:3;22827:67;22891:2;22886:3;22827:67;:::i;:::-;22820:74;;22903:93;22992:3;22903:93;:::i;:::-;23021:2;23016:3;23012:12;23005:19;;22664:366;;;:::o;23036:419::-;23202:4;23240:2;23229:9;23225:18;23217:26;;23289:9;23283:4;23279:20;23275:1;23264:9;23260:17;23253:47;23317:131;23443:4;23317:131;:::i;:::-;23309:139;;23036:419;;;:::o;23461:225::-;23601:34;23597:1;23589:6;23585:14;23578:58;23670:8;23665:2;23657:6;23653:15;23646:33;23461:225;:::o;23692:366::-;23834:3;23855:67;23919:2;23914:3;23855:67;:::i;:::-;23848:74;;23931:93;24020:3;23931:93;:::i;:::-;24049:2;24044:3;24040:12;24033:19;;23692:366;;;:::o;24064:419::-;24230:4;24268:2;24257:9;24253:18;24245:26;;24317:9;24311:4;24307:20;24303:1;24292:9;24288:17;24281:47;24345:131;24471:4;24345:131;:::i;:::-;24337:139;;24064:419;;;:::o;24489:177::-;24629:29;24625:1;24617:6;24613:14;24606:53;24489:177;:::o;24672:366::-;24814:3;24835:67;24899:2;24894:3;24835:67;:::i;:::-;24828:74;;24911:93;25000:3;24911:93;:::i;:::-;25029:2;25024:3;25020:12;25013:19;;24672:366;;;:::o;25044:419::-;25210:4;25248:2;25237:9;25233:18;25225:26;;25297:9;25291:4;25287:20;25283:1;25272:9;25268:17;25261:47;25325:131;25451:4;25325:131;:::i;:::-;25317:139;;25044:419;;;:::o;25469:223::-;25609:34;25605:1;25597:6;25593:14;25586:58;25678:6;25673:2;25665:6;25661:15;25654:31;25469:223;:::o;25698:366::-;25840:3;25861:67;25925:2;25920:3;25861:67;:::i;:::-;25854:74;;25937:93;26026:3;25937:93;:::i;:::-;26055:2;26050:3;26046:12;26039:19;;25698:366;;;:::o;26070:419::-;26236:4;26274:2;26263:9;26259:18;26251:26;;26323:9;26317:4;26313:20;26309:1;26298:9;26294:17;26287:47;26351:131;26477:4;26351:131;:::i;:::-;26343:139;;26070:419;;;:::o;26495:221::-;26635:34;26631:1;26623:6;26619:14;26612:58;26704:4;26699:2;26691:6;26687:15;26680:29;26495:221;:::o;26722:366::-;26864:3;26885:67;26949:2;26944:3;26885:67;:::i;:::-;26878:74;;26961:93;27050:3;26961:93;:::i;:::-;27079:2;27074:3;27070:12;27063:19;;26722:366;;;:::o;27094:419::-;27260:4;27298:2;27287:9;27283:18;27275:26;;27347:9;27341:4;27337:20;27333:1;27322:9;27318:17;27311:47;27375:131;27501:4;27375:131;:::i;:::-;27367:139;;27094:419;;;:::o;27519:224::-;27659:34;27655:1;27647:6;27643:14;27636:58;27728:7;27723:2;27715:6;27711:15;27704:32;27519:224;:::o;27749:366::-;27891:3;27912:67;27976:2;27971:3;27912:67;:::i;:::-;27905:74;;27988:93;28077:3;27988:93;:::i;:::-;28106:2;28101:3;28097:12;28090:19;;27749:366;;;:::o;28121:419::-;28287:4;28325:2;28314:9;28310:18;28302:26;;28374:9;28368:4;28364:20;28360:1;28349:9;28345:17;28338:47;28402:131;28528:4;28402:131;:::i;:::-;28394:139;;28121:419;;;:::o;28546:222::-;28686:34;28682:1;28674:6;28670:14;28663:58;28755:5;28750:2;28742:6;28738:15;28731:30;28546:222;:::o;28774:366::-;28916:3;28937:67;29001:2;28996:3;28937:67;:::i;:::-;28930:74;;29013:93;29102:3;29013:93;:::i;:::-;29131:2;29126:3;29122:12;29115:19;;28774:366;;;:::o;29146:419::-;29312:4;29350:2;29339:9;29335:18;29327:26;;29399:9;29393:4;29389:20;29385:1;29374:9;29370:17;29363:47;29427:131;29553:4;29427:131;:::i;:::-;29419:139;;29146:419;;;:::o;29571:172::-;29711:24;29707:1;29699:6;29695:14;29688:48;29571:172;:::o;29749:366::-;29891:3;29912:67;29976:2;29971:3;29912:67;:::i;:::-;29905:74;;29988:93;30077:3;29988:93;:::i;:::-;30106:2;30101:3;30097:12;30090:19;;29749:366;;;:::o;30121:419::-;30287:4;30325:2;30314:9;30310:18;30302:26;;30374:9;30368:4;30364:20;30360:1;30349:9;30345:17;30338:47;30402:131;30528:4;30402:131;:::i;:::-;30394:139;;30121:419;;;:::o;30546:297::-;30686:34;30682:1;30674:6;30670:14;30663:58;30755:34;30750:2;30742:6;30738:15;30731:59;30824:11;30819:2;30811:6;30807:15;30800:36;30546:297;:::o;30849:366::-;30991:3;31012:67;31076:2;31071:3;31012:67;:::i;:::-;31005:74;;31088:93;31177:3;31088:93;:::i;:::-;31206:2;31201:3;31197:12;31190:19;;30849:366;;;:::o;31221:419::-;31387:4;31425:2;31414:9;31410:18;31402:26;;31474:9;31468:4;31464:20;31460:1;31449:9;31445:17;31438:47;31502:131;31628:4;31502:131;:::i;:::-;31494:139;;31221:419;;;:::o;31646:240::-;31786:34;31782:1;31774:6;31770:14;31763:58;31855:23;31850:2;31842:6;31838:15;31831:48;31646:240;:::o;31892:366::-;32034:3;32055:67;32119:2;32114:3;32055:67;:::i;:::-;32048:74;;32131:93;32220:3;32131:93;:::i;:::-;32249:2;32244:3;32240:12;32233:19;;31892:366;;;:::o;32264:419::-;32430:4;32468:2;32457:9;32453:18;32445:26;;32517:9;32511:4;32507:20;32503:1;32492:9;32488:17;32481:47;32545:131;32671:4;32545:131;:::i;:::-;32537:139;;32264:419;;;:::o;32689:169::-;32829:21;32825:1;32817:6;32813:14;32806:45;32689:169;:::o;32864:366::-;33006:3;33027:67;33091:2;33086:3;33027:67;:::i;:::-;33020:74;;33103:93;33192:3;33103:93;:::i;:::-;33221:2;33216:3;33212:12;33205:19;;32864:366;;;:::o;33236:419::-;33402:4;33440:2;33429:9;33425:18;33417:26;;33489:9;33483:4;33479:20;33475:1;33464:9;33460:17;33453:47;33517:131;33643:4;33517:131;:::i;:::-;33509:139;;33236:419;;;:::o;33661:241::-;33801:34;33797:1;33789:6;33785:14;33778:58;33870:24;33865:2;33857:6;33853:15;33846:49;33661:241;:::o;33908:366::-;34050:3;34071:67;34135:2;34130:3;34071:67;:::i;:::-;34064:74;;34147:93;34236:3;34147:93;:::i;:::-;34265:2;34260:3;34256:12;34249:19;;33908:366;;;:::o;34280:419::-;34446:4;34484:2;34473:9;34469:18;34461:26;;34533:9;34527:4;34523:20;34519:1;34508:9;34504:17;34497:47;34561:131;34687:4;34561:131;:::i;:::-;34553:139;;34280:419;;;:::o;34705:191::-;34745:4;34765:20;34783:1;34765:20;:::i;:::-;34760:25;;34799:20;34817:1;34799:20;:::i;:::-;34794:25;;34838:1;34835;34832:8;34829:34;;;34843:18;;:::i;:::-;34829:34;34888:1;34885;34881:9;34873:17;;34705:191;;;;:::o;34902:147::-;35003:11;35040:3;35025:18;;34902:147;;;;:::o;35055:114::-;;:::o;35175:398::-;35334:3;35355:83;35436:1;35431:3;35355:83;:::i;:::-;35348:90;;35447:93;35536:3;35447:93;:::i;:::-;35565:1;35560:3;35556:11;35549:18;;35175:398;;;:::o;35579:379::-;35763:3;35785:147;35928:3;35785:147;:::i;:::-;35778:154;;35949:3;35942:10;;35579:379;;;:::o;35964:442::-;36113:4;36151:2;36140:9;36136:18;36128:26;;36164:71;36232:1;36221:9;36217:17;36208:6;36164:71;:::i;:::-;36245:72;36313:2;36302:9;36298:18;36289:6;36245:72;:::i;:::-;36327;36395:2;36384:9;36380:18;36371:6;36327:72;:::i;:::-;35964:442;;;;;;:::o;36412:143::-;36469:5;36500:6;36494:13;36485:22;;36516:33;36543:5;36516:33;:::i;:::-;36412:143;;;;:::o;36561:351::-;36631:6;36680:2;36668:9;36659:7;36655:23;36651:32;36648:119;;;36686:79;;:::i;:::-;36648:119;36806:1;36831:64;36887:7;36878:6;36867:9;36863:22;36831:64;:::i;:::-;36821:74;;36777:128;36561:351;;;;:::o;36918:220::-;37058:34;37054:1;37046:6;37042:14;37035:58;37127:3;37122:2;37114:6;37110:15;37103:28;36918:220;:::o;37144:366::-;37286:3;37307:67;37371:2;37366:3;37307:67;:::i;:::-;37300:74;;37383:93;37472:3;37383:93;:::i;:::-;37501:2;37496:3;37492:12;37485:19;;37144:366;;;:::o;37516:419::-;37682:4;37720:2;37709:9;37705:18;37697:26;;37769:9;37763:4;37759:20;37755:1;37744:9;37740:17;37733:47;37797:131;37923:4;37797:131;:::i;:::-;37789:139;;37516:419;;;:::o;37941:180::-;37989:77;37986:1;37979:88;38086:4;38083:1;38076:15;38110:4;38107:1;38100:15;38127:180;38175:77;38172:1;38165:88;38272:4;38269:1;38262:15;38296:4;38293:1;38286:15;38313:143;38370:5;38401:6;38395:13;38386:22;;38417:33;38444:5;38417:33;:::i;:::-;38313:143;;;;:::o;38462:351::-;38532:6;38581:2;38569:9;38560:7;38556:23;38552:32;38549:119;;;38587:79;;:::i;:::-;38549:119;38707:1;38732:64;38788:7;38779:6;38768:9;38764:22;38732:64;:::i;:::-;38722:74;;38678:128;38462:351;;;;:::o;38819:85::-;38864:7;38893:5;38882:16;;38819:85;;;:::o;38910:158::-;38968:9;39001:61;39019:42;39028:32;39054:5;39028:32;:::i;:::-;39019:42;:::i;:::-;39001:61;:::i;:::-;38988:74;;38910:158;;;:::o;39074:147::-;39169:45;39208:5;39169:45;:::i;:::-;39164:3;39157:58;39074:147;;:::o;39227:114::-;39294:6;39328:5;39322:12;39312:22;;39227:114;;;:::o;39347:184::-;39446:11;39480:6;39475:3;39468:19;39520:4;39515:3;39511:14;39496:29;;39347:184;;;;:::o;39537:132::-;39604:4;39627:3;39619:11;;39657:4;39652:3;39648:14;39640:22;;39537:132;;;:::o;39675:108::-;39752:24;39770:5;39752:24;:::i;:::-;39747:3;39740:37;39675:108;;:::o;39789:179::-;39858:10;39879:46;39921:3;39913:6;39879:46;:::i;:::-;39957:4;39952:3;39948:14;39934:28;;39789:179;;;;:::o;39974:113::-;40044:4;40076;40071:3;40067:14;40059:22;;39974:113;;;:::o;40123:732::-;40242:3;40271:54;40319:5;40271:54;:::i;:::-;40341:86;40420:6;40415:3;40341:86;:::i;:::-;40334:93;;40451:56;40501:5;40451:56;:::i;:::-;40530:7;40561:1;40546:284;40571:6;40568:1;40565:13;40546:284;;;40647:6;40641:13;40674:63;40733:3;40718:13;40674:63;:::i;:::-;40667:70;;40760:60;40813:6;40760:60;:::i;:::-;40750:70;;40606:224;40593:1;40590;40586:9;40581:14;;40546:284;;;40550:14;40846:3;40839:10;;40247:608;;;40123:732;;;;:::o;40861:831::-;41124:4;41162:3;41151:9;41147:19;41139:27;;41176:71;41244:1;41233:9;41229:17;41220:6;41176:71;:::i;:::-;41257:80;41333:2;41322:9;41318:18;41309:6;41257:80;:::i;:::-;41384:9;41378:4;41374:20;41369:2;41358:9;41354:18;41347:48;41412:108;41515:4;41506:6;41412:108;:::i;:::-;41404:116;;41530:72;41598:2;41587:9;41583:18;41574:6;41530:72;:::i;:::-;41612:73;41680:3;41669:9;41665:19;41656:6;41612:73;:::i;:::-;40861:831;;;;;;;;:::o;41698:807::-;41947:4;41985:3;41974:9;41970:19;41962:27;;41999:71;42067:1;42056:9;42052:17;42043:6;41999:71;:::i;:::-;42080:72;42148:2;42137:9;42133:18;42124:6;42080:72;:::i;:::-;42162:80;42238:2;42227:9;42223:18;42214:6;42162:80;:::i;:::-;42252;42328:2;42317:9;42313:18;42304:6;42252:80;:::i;:::-;42342:73;42410:3;42399:9;42395:19;42386:6;42342:73;:::i;:::-;42425;42493:3;42482:9;42478:19;42469:6;42425:73;:::i;:::-;41698:807;;;;;;;;;:::o;42511:663::-;42599:6;42607;42615;42664:2;42652:9;42643:7;42639:23;42635:32;42632:119;;;42670:79;;:::i;:::-;42632:119;42790:1;42815:64;42871:7;42862:6;42851:9;42847:22;42815:64;:::i;:::-;42805:74;;42761:128;42928:2;42954:64;43010:7;43001:6;42990:9;42986:22;42954:64;:::i;:::-;42944:74;;42899:129;43067:2;43093:64;43149:7;43140:6;43129:9;43125:22;43093:64;:::i;:::-;43083:74;;43038:129;42511:663;;;;;:::o

Swarm Source

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