ETH Price: $3,606.79 (+4.66%)
 

Overview

Max Total Supply

1,000,000,000 FPUT

Holders

3

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Null: 0x000...000
Balance
0 FPUT

Value
$0.00
0x0000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
FuckPutin

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 2022-03-04
*/

// 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 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 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
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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

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 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 FuckPutin 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 ukraineWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    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 buyUkraineFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellUkraineFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForUkraine;
    
    /******************/

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

    // _isBlacklisted = can not buy or sell or transfer tokens at all <---- bot protection
    mapping(address => bool) public _isBlacklisted;

    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 ukraineWalletUpdated(address indexed newWallet, address indexed oldWallet);

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

    constructor() ERC20("FuckPutin", "FPUT") {
        
        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 = 2;
        uint256 _buyLiquidityFee = 6;
        uint256 _buyUkraineFee = 5;

        uint256 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 6;
        uint256 _sellUkraineFee = 5;
        
        uint256 totalSupply = 1 * 1e27;
        
        maxTransactionAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyUkraineFee = _buyUkraineFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyUkraineFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellUkraineFee = _sellUkraineFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellUkraineFee;
        
        marketingWallet = address(owner()); // set as marketing wallet
        ukraineWallet = 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;
    }
    
    // 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 / 100)/1e18, "Cannot set maxTransactionAmount lower than 1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 100)/1e18, "Cannot set maxWallet lower than 2%");
        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 _ukraineFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyUkraineFee = _ukraineFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyUkraineFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _ukraineFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellUkraineFee = _ukraineFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellUkraineFee;
        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 updateUkraineWallet(address newWallet) external onlyOwner {
        emit ukraineWalletUpdated(newWallet, ukraineWallet);
        ukraineWallet = newWallet;
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function addToBlacklist(address[] calldata addresses) external onlyOwner{ 
        for (uint256 i; i <addresses.length; i++){ 
            _isBlacklisted[addresses[i]] = true;
        }
    }

    function removeFromBlacklist(address account) external onlyOwner{ 
        _isBlacklisted[account] = false;
    }
    
    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        // makes sure seller or buyer is not blacklisted
        require(!_isBlacklisted[from] && !_isBlacklisted[to], "This account is blacklisted: If you feel this is incorrect please contac us and we will remove you");
        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;
        }
        
        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;
                tokensForUkraine += fees * sellUkraineFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForUkraine += fees * buyUkraineFee / 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 + tokensForUkraine;
        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(tokensForUkraine).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForUkraine = 0;
        
        (success,) = address(ukraineWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"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":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ukraineWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"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":"buyUkraineFee","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":"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[],"name":"sellUkraineFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"tokensForUkraine","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":"ukraineWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"_ukraineFee","type":"uint256"}],"name":"updateBuyFees","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":"_ukraineFee","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"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateUkraineWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600981526020017f4675636b507574696e00000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f465055540000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000bc0565b5080600490805190602001906200011b92919062000bc0565b5050506000620001306200068c60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb8160016200069460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027657600080fd5b505afa1580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b1919062000cda565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031457600080fd5b505afa15801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000cda565b6040518363ffffffff1660e01b81526004016200036e92919062000d1d565b602060405180830381600087803b1580156200038957600080fd5b505af11580156200039e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c4919062000cda565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200040c60a05160016200069460201b60201c565b6200042160a05160016200079160201b60201c565b60006002905060006006905060006005905060006002905060006006905060006005905060006b033b2e3c9fd0803ce80000009050606460018262000467919062000d83565b62000473919062000e13565b60088190555060646002826200048a919062000d83565b62000496919062000e13565b600a81905550612710600582620004ae919062000d83565b620004ba919062000e13565b60098190555086600f819055508560108190555084601181905550601154601054600f54620004ea919062000e4b565b620004f6919062000e4b565b600e8190555083601381905550826014819055508160158190555060155460145460135462000526919062000e4b565b62000532919062000e4b565b601281905550620005486200083260201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005986200083260201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005fa620005ec6200083260201b60201c565b60016200085c60201b60201c565b6200060d3060016200085c60201b60201c565b6200062261dead60016200085c60201b60201c565b62000644620006366200083260201b60201c565b60016200069460201b60201c565b620006573060016200069460201b60201c565b6200066c61dead60016200069460201b60201c565b6200067e3382620009a960201b60201c565b5050505050505050620010dc565b600033905090565b620006a46200068c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000736576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072d9062000f09565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200086c6200068c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008f59062000f09565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200099d919062000f48565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a139062000fb5565b60405180910390fd5b62000a306000838362000b5860201b60201c565b62000a4c8160025462000b5d60201b620028b31790919060201c565b60028190555062000aaa816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b5d60201b620028b31790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b4c919062000fe8565b60405180910390a35050565b505050565b600080828462000b6e919062000e4b565b90508381101562000bb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bad9062001055565b60405180910390fd5b8091505092915050565b82805462000bce90620010a6565b90600052602060002090601f01602090048101928262000bf2576000855562000c3e565b82601f1062000c0d57805160ff191683800117855562000c3e565b8280016001018555821562000c3e579182015b8281111562000c3d57825182559160200191906001019062000c20565b5b50905062000c4d919062000c51565b5090565b5b8082111562000c6c57600081600090555060010162000c52565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ca28262000c75565b9050919050565b62000cb48162000c95565b811462000cc057600080fd5b50565b60008151905062000cd48162000ca9565b92915050565b60006020828403121562000cf35762000cf262000c70565b5b600062000d038482850162000cc3565b91505092915050565b62000d178162000c95565b82525050565b600060408201905062000d34600083018562000d0c565b62000d43602083018462000d0c565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d908262000d4a565b915062000d9d8362000d4a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000dd95762000dd862000d54565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e208262000d4a565b915062000e2d8362000d4a565b92508262000e405762000e3f62000de4565b5b828204905092915050565b600062000e588262000d4a565b915062000e658362000d4a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e9d5762000e9c62000d54565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ef160208362000ea8565b915062000efe8262000eb9565b602082019050919050565b6000602082019050818103600083015262000f248162000ee2565b9050919050565b60008115159050919050565b62000f428162000f2b565b82525050565b600060208201905062000f5f600083018462000f37565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f9d601f8362000ea8565b915062000faa8262000f65565b602082019050919050565b6000602082019050818103600083015262000fd08162000f8e565b9050919050565b62000fe28162000d4a565b82525050565b600060208201905062000fff600083018462000fd7565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200103d601b8362000ea8565b91506200104a8262001005565b602082019050919050565b6000602082019050818103600083015262001070816200102e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010bf57607f821691505b60208210811415620010d657620010d562001077565b5b50919050565b60805160a051615a766200113a600039600081816111aa01528181611bed0152612f7f015260008181610e8c01528181612f270152818161409501528181614185015281816141ac01528181614248015261426f0152615a766000f3fe6080604052600436106103795760003560e01c80638a8c523c116101d1578063c024666811610102578063dd62ed3e116100a0578063f2403d0b1161006f578063f2403d0b14610d06578063f2fde38b14610d2f578063f637434214610d58578063f8b45b0514610d8357610380565b8063dd62ed3e14610c48578063e2f4560514610c85578063e884f26014610cb0578063f11a24d314610cdb57610380565b8063c876d0b9116100dc578063c876d0b914610b8a578063c8c8ebe414610bb5578063d257b34f14610be0578063d85ba06314610c1d57610380565b8063c024666814610b0f578063c17b5b8c14610b38578063c18bc19514610b6157610380565b8063a01bcd7b1161016f578063aacebbe311610149578063aacebbe314610a53578063ad88d06f14610a7c578063b62496f514610aa7578063bbc0c74214610ae457610380565b8063a01bcd7b146109ae578063a457c2d7146109d9578063a9059cbb14610a1657610380565b8063924de9b7116101ab578063924de9b714610908578063935eb35f1461093157806395d89b411461095a5780639a7a23d61461098557610380565b80638a8c523c1461089b5780638da5cb5b146108b257806392136913146108dd57610380565b806339509351116102ab57806370a08231116102495780637571336a116102235780637571336a146107f357806375f0a8741461081c5780637bce5a04146108475780638095d5641461087257610380565b806370a0823114610774578063715018a6146107b1578063751039fc146107c857610380565b80634fbee193116102855780634fbee193146106b8578063537df3b6146106f55780636a486a8e1461071e5780636ddd17131461074957610380565b8063395093511461062557806349bd5a5e146106625780634a62bb651461068d57610380565b80631a8145bb11610318578063203e727e116102f2578063203e727e1461056957806323b872dd1461059257806327c8f835146105cf578063313ce567146105fa57610380565b80631a8145bb146104d65780631cdd3be3146105015780631f3fed8f1461053e57610380565b8063095ea7b311610354578063095ea7b31461040657806310d5de53146104435780631694505e1461048057806318160ddd146104ab57610380565b8062b878e914610385578063041d549d146103b057806306fdde03146103db57610380565b3661038057005b600080fd5b34801561039157600080fd5b5061039a610dae565b6040516103a791906143a9565b60405180910390f35b3480156103bc57600080fd5b506103c5610db4565b6040516103d291906143a9565b60405180910390f35b3480156103e757600080fd5b506103f0610dba565b6040516103fd919061445d565b60405180910390f35b34801561041257600080fd5b5061042d60048036038101906104289190614513565b610e4c565b60405161043a919061456e565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190614589565b610e6a565b604051610477919061456e565b60405180910390f35b34801561048c57600080fd5b50610495610e8a565b6040516104a29190614615565b60405180910390f35b3480156104b757600080fd5b506104c0610eae565b6040516104cd91906143a9565b60405180910390f35b3480156104e257600080fd5b506104eb610eb8565b6040516104f891906143a9565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190614589565b610ebe565b604051610535919061456e565b60405180910390f35b34801561054a57600080fd5b50610553610ede565b60405161056091906143a9565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190614630565b610ee4565b005b34801561059e57600080fd5b506105b960048036038101906105b4919061465d565b61100d565b6040516105c6919061456e565b60405180910390f35b3480156105db57600080fd5b506105e46110e6565b6040516105f191906146bf565b60405180910390f35b34801561060657600080fd5b5061060f6110ec565b60405161061c91906146f6565b60405180910390f35b34801561063157600080fd5b5061064c60048036038101906106479190614513565b6110f5565b604051610659919061456e565b60405180910390f35b34801561066e57600080fd5b506106776111a8565b60405161068491906146bf565b60405180910390f35b34801561069957600080fd5b506106a26111cc565b6040516106af919061456e565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da9190614589565b6111df565b6040516106ec919061456e565b60405180910390f35b34801561070157600080fd5b5061071c60048036038101906107179190614589565b611235565b005b34801561072a57600080fd5b50610733611327565b60405161074091906143a9565b60405180910390f35b34801561075557600080fd5b5061075e61132d565b60405161076b919061456e565b60405180910390f35b34801561078057600080fd5b5061079b60048036038101906107969190614589565b611340565b6040516107a891906143a9565b60405180910390f35b3480156107bd57600080fd5b506107c6611388565b005b3480156107d457600080fd5b506107dd6114e0565b6040516107ea919061456e565b60405180910390f35b3480156107ff57600080fd5b5061081a6004803603810190610815919061473d565b61159b565b005b34801561082857600080fd5b5061083161168d565b60405161083e91906146bf565b60405180910390f35b34801561085357600080fd5b5061085c6116b3565b60405161086991906143a9565b60405180910390f35b34801561087e57600080fd5b506108996004803603810190610894919061477d565b6116b9565b005b3480156108a757600080fd5b506108b06117d3565b005b3480156108be57600080fd5b506108c76118a2565b6040516108d491906146bf565b60405180910390f35b3480156108e957600080fd5b506108f26118cc565b6040516108ff91906143a9565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a91906147d0565b6118d2565b005b34801561093d57600080fd5b5061095860048036038101906109539190614862565b611986565b005b34801561096657600080fd5b5061096f611ac2565b60405161097c919061445d565b60405180910390f35b34801561099157600080fd5b506109ac60048036038101906109a7919061473d565b611b54565b005b3480156109ba57600080fd5b506109c3611c88565b6040516109d091906143a9565b60405180910390f35b3480156109e557600080fd5b50610a0060048036038101906109fb9190614513565b611c8e565b604051610a0d919061456e565b60405180910390f35b348015610a2257600080fd5b50610a3d6004803603810190610a389190614513565b611d5b565b604051610a4a919061456e565b60405180910390f35b348015610a5f57600080fd5b50610a7a6004803603810190610a759190614589565b611d79565b005b348015610a8857600080fd5b50610a91611ed0565b604051610a9e91906146bf565b60405180910390f35b348015610ab357600080fd5b50610ace6004803603810190610ac99190614589565b611ef6565b604051610adb919061456e565b60405180910390f35b348015610af057600080fd5b50610af9611f16565b604051610b06919061456e565b60405180910390f35b348015610b1b57600080fd5b50610b366004803603810190610b31919061473d565b611f29565b005b348015610b4457600080fd5b50610b5f6004803603810190610b5a919061477d565b612069565b005b348015610b6d57600080fd5b50610b886004803603810190610b839190614630565b612183565b005b348015610b9657600080fd5b50610b9f6122ac565b604051610bac919061456e565b60405180910390f35b348015610bc157600080fd5b50610bca6122bf565b604051610bd791906143a9565b60405180910390f35b348015610bec57600080fd5b50610c076004803603810190610c029190614630565b6122c5565b604051610c14919061456e565b60405180910390f35b348015610c2957600080fd5b50610c32612435565b604051610c3f91906143a9565b60405180910390f35b348015610c5457600080fd5b50610c6f6004803603810190610c6a91906148af565b61243b565b604051610c7c91906143a9565b60405180910390f35b348015610c9157600080fd5b50610c9a6124c2565b604051610ca791906143a9565b60405180910390f35b348015610cbc57600080fd5b50610cc56124c8565b604051610cd2919061456e565b60405180910390f35b348015610ce757600080fd5b50610cf0612583565b604051610cfd91906143a9565b60405180910390f35b348015610d1257600080fd5b50610d2d6004803603810190610d289190614589565b612589565b005b348015610d3b57600080fd5b50610d566004803603810190610d519190614589565b6126e0565b005b348015610d6457600080fd5b50610d6d6128a7565b604051610d7a91906143a9565b60405180910390f35b348015610d8f57600080fd5b50610d986128ad565b604051610da591906143a9565b60405180910390f35b60115481565b60155481565b606060038054610dc99061491e565b80601f0160208091040260200160405190810160405280929190818152602001828054610df59061491e565b8015610e425780601f10610e1757610100808354040283529160200191610e42565b820191906000526020600020905b815481529060010190602001808311610e2557829003601f168201915b5050505050905090565b6000610e60610e59612911565b8484612919565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60175481565b601c6020528060005260406000206000915054906101000a900460ff1681565b60165481565b610eec612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f729061499c565b60405180910390fd5b670de0b6b3a764000060646001610f90610eae565b610f9a91906149eb565b610fa49190614a74565b610fae9190614a74565b811015610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe790614b17565b60405180910390fd5b670de0b6b3a76400008161100491906149eb565b60088190555050565b600061101a848484612ae4565b6110db84611026612911565b6110d6856040518060600160405280602881526020016159f460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061108c612911565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138619092919063ffffffff16565b612919565b600190509392505050565b61dead81565b60006012905090565b600061119e611102612911565b846111998560016000611113612911565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128b390919063ffffffff16565b612919565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61123d612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c39061499c565b60405180910390fd5b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60125481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611390612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461141f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114169061499c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114ea612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611579576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115709061499c565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6115a3612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611632576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116299061499c565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6116c1612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117479061499c565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f546117789190614b37565b6117829190614b37565b600e819055506014600e5411156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c590614bd9565b60405180910390fd5b505050565b6117db612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461186a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118619061499c565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6118da612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611969576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119609061499c565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b61198e612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a149061499c565b60405180910390fd5b60005b82829050811015611abd576001601c6000858585818110611a4457611a43614bf9565b5b9050602002016020810190611a599190614589565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ab590614c28565b915050611a20565b505050565b606060048054611ad19061491e565b80601f0160208091040260200160405190810160405280929190818152602001828054611afd9061491e565b8015611b4a5780601f10611b1f57610100808354040283529160200191611b4a565b820191906000526020600020905b815481529060010190602001808311611b2d57829003601f168201915b5050505050905090565b611b5c612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be29061499c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7190614ce3565b60405180910390fd5b611c8482826138c5565b5050565b60185481565b6000611d51611c9b612911565b84611d4c85604051806060016040528060258152602001615a1c6025913960016000611cc5612911565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138619092919063ffffffff16565b612919565b6001905092915050565b6000611d6f611d68612911565b8484612ae4565b6001905092915050565b611d81612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e079061499c565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611f31612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb79061499c565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161205d919061456e565b60405180910390a25050565b612071612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f79061499c565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546121289190614b37565b6121329190614b37565b6012819055506019601254111561217e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217590614d4f565b60405180910390fd5b505050565b61218b612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461221a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122119061499c565b60405180910390fd5b670de0b6b3a76400006064600261222f610eae565b61223991906149eb565b6122439190614a74565b61224d9190614a74565b81101561228f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228690614de1565b60405180910390fd5b670de0b6b3a7640000816122a391906149eb565b600a8190555050565b600d60009054906101000a900460ff1681565b60085481565b60006122cf612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461235e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123559061499c565b60405180910390fd5b620186a0600161236c610eae565b61237691906149eb565b6123809190614a74565b8210156123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614e73565b60405180910390fd5b6103e860056123cf610eae565b6123d991906149eb565b6123e39190614a74565b821115612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c90614f05565b60405180910390fd5b8160098190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006124d2612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612561576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125589061499c565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60105481565b612591612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612620576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126179061499c565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4e1c4a0a404f09f63a159ea16f4b6f8d96b307404456e2b71d87787d9b5f1e660405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126e8612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276e9061499c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127de90614f97565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600a5481565b60008082846128c29190614b37565b905083811015612907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fe90615003565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090615095565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f090615127565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ad791906143a9565b60405180910390a3505050565b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b885750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbe90615205565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2e90615297565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9e90615329565b60405180910390fd5b6000811415612cc157612cbc83836000613966565b61385c565b600b60009054906101000a900460ff161561338457612cde6118a2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d4c5750612d1c6118a2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d855750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dbf575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dd85750600560149054906101000a900460ff16155b1561338357600b60019054906101000a900460ff16612ed257601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e925750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec890615395565b60405180910390fd5b5b600d60009054906101000a900460ff161561309a57612eef6118a2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f7657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fce57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130995743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304b9061544d565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561313d5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131e457600854811115613187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317e906154df565b60405180910390fd5b600a5461319383611340565b8261319e9190614b37565b11156131df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d69061554b565b60405180910390fd5b613382565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132875750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132d6576008548111156132d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c8906155dd565b60405180910390fd5b613381565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661338057600a5461333383611340565b8261333e9190614b37565b111561337f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133769061554b565b60405180910390fd5b5b5b5b5b5b600061338f30611340565b9050600060095482101590508080156133b45750600b60029054906101000a900460ff165b80156133cd5750600560149054906101000a900460ff16155b80156134235750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134795750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134cf5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613513576001600560146101000a81548160ff0219169083151502179055506134f7613bfb565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135c95750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135d357600090505b6000811561384c57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561363657506000601254115b1561370357613663606461365560125488613ee290919063ffffffff16565b613f5d90919063ffffffff16565b90506012546014548261367691906149eb565b6136809190614a74565b601760008282546136919190614b37565b92505081905550601254601554826136a991906149eb565b6136b39190614a74565b601860008282546136c49190614b37565b92505081905550601254601354826136dc91906149eb565b6136e69190614a74565b601660008282546136f79190614b37565b92505081905550613828565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561375e57506000600e54115b156138275761378b606461377d600e5488613ee290919063ffffffff16565b613f5d90919063ffffffff16565b9050600e546010548261379e91906149eb565b6137a89190614a74565b601760008282546137b99190614b37565b92505081905550600e54601154826137d191906149eb565b6137db9190614a74565b601860008282546137ec9190614b37565b92505081905550600e54600f548261380491906149eb565b61380e9190614a74565b6016600082825461381f9190614b37565b925050819055505b5b600081111561383d5761383c873083613966565b5b808561384991906155fd565b94505b613857878787613966565b505050505b505050565b60008383111582906138a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a0919061445d565b60405180910390fd5b50600083856138b891906155fd565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cd90615297565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3d90615329565b60405180910390fd5b613a51838383613fa7565b613abc816040518060600160405280602681526020016159ce602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138619092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b4f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128b390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613bee91906143a9565b60405180910390a3505050565b6000613c0630611340565b90506000601854601654601754613c1d9190614b37565b613c279190614b37565b9050600080831480613c395750600082145b15613c4657505050613ee0565b6014600954613c5591906149eb565b831115613c6e576014600954613c6b91906149eb565b92505b600060028360175486613c8191906149eb565b613c8b9190614a74565b613c959190614a74565b90506000613cac8286613fac90919063ffffffff16565b90506000479050613cbc82613ff6565b6000613cd18247613fac90919063ffffffff16565b90506000613cfc87613cee60165485613ee290919063ffffffff16565b613f5d90919063ffffffff16565b90506000613d2788613d1960185486613ee290919063ffffffff16565b613f5d90919063ffffffff16565b90506000818385613d3891906155fd565b613d4291906155fd565b9050600060178190555060006016819055506000601881905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613da290615662565b60006040518083038185875af1925050503d8060008114613ddf576040519150601f19603f3d011682016040523d82523d6000602084013e613de4565b606091505b505080985050600087118015613dfa5750600081115b15613e4757613e098782614242565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601754604051613e3e93929190615677565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613e8d90615662565b60006040518083038185875af1925050503d8060008114613eca576040519150601f19603f3d011682016040523d82523d6000602084013e613ecf565b606091505b505080985050505050505050505050505b565b600080831415613ef55760009050613f57565b60008284613f0391906149eb565b9050828482613f129190614a74565b14613f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f4990615720565b60405180910390fd5b809150505b92915050565b6000613f9f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061432d565b905092915050565b505050565b6000613fee83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613861565b905092915050565b6000600267ffffffffffffffff81111561401357614012615740565b5b6040519080825280602002602001820160405280156140415781602001602082028036833780820191505090505b509050308160008151811061405957614058614bf9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156140f957600080fd5b505afa15801561410d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141319190615784565b8160018151811061414557614144614bf9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141aa307f000000000000000000000000000000000000000000000000000000000000000084612919565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161420c9594939291906158aa565b600060405180830381600087803b15801561422657600080fd5b505af115801561423a573d6000803e3d6000fd5b505050505050565b61426d307f000000000000000000000000000000000000000000000000000000000000000084612919565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016142d496959493929190615904565b6060604051808303818588803b1580156142ed57600080fd5b505af1158015614301573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614326919061597a565b5050505050565b60008083118290614374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161436b919061445d565b60405180910390fd5b50600083856143839190614a74565b9050809150509392505050565b6000819050919050565b6143a381614390565b82525050565b60006020820190506143be600083018461439a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143fe5780820151818401526020810190506143e3565b8381111561440d576000848401525b50505050565b6000601f19601f8301169050919050565b600061442f826143c4565b61443981856143cf565b93506144498185602086016143e0565b61445281614413565b840191505092915050565b600060208201905081810360008301526144778184614424565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144b482614489565b9050919050565b6144c4816144a9565b81146144cf57600080fd5b50565b6000813590506144e1816144bb565b92915050565b6144f081614390565b81146144fb57600080fd5b50565b60008135905061450d816144e7565b92915050565b6000806040838503121561452a5761452961447f565b5b6000614538858286016144d2565b9250506020614549858286016144fe565b9150509250929050565b60008115159050919050565b61456881614553565b82525050565b6000602082019050614583600083018461455f565b92915050565b60006020828403121561459f5761459e61447f565b5b60006145ad848285016144d2565b91505092915050565b6000819050919050565b60006145db6145d66145d184614489565b6145b6565b614489565b9050919050565b60006145ed826145c0565b9050919050565b60006145ff826145e2565b9050919050565b61460f816145f4565b82525050565b600060208201905061462a6000830184614606565b92915050565b6000602082840312156146465761464561447f565b5b6000614654848285016144fe565b91505092915050565b6000806000606084860312156146765761467561447f565b5b6000614684868287016144d2565b9350506020614695868287016144d2565b92505060406146a6868287016144fe565b9150509250925092565b6146b9816144a9565b82525050565b60006020820190506146d460008301846146b0565b92915050565b600060ff82169050919050565b6146f0816146da565b82525050565b600060208201905061470b60008301846146e7565b92915050565b61471a81614553565b811461472557600080fd5b50565b60008135905061473781614711565b92915050565b600080604083850312156147545761475361447f565b5b6000614762858286016144d2565b925050602061477385828601614728565b9150509250929050565b6000806000606084860312156147965761479561447f565b5b60006147a4868287016144fe565b93505060206147b5868287016144fe565b92505060406147c6868287016144fe565b9150509250925092565b6000602082840312156147e6576147e561447f565b5b60006147f484828501614728565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614822576148216147fd565b5b8235905067ffffffffffffffff81111561483f5761483e614802565b5b60208301915083602082028301111561485b5761485a614807565b5b9250929050565b600080602083850312156148795761487861447f565b5b600083013567ffffffffffffffff81111561489757614896614484565b5b6148a38582860161480c565b92509250509250929050565b600080604083850312156148c6576148c561447f565b5b60006148d4858286016144d2565b92505060206148e5858286016144d2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061493657607f821691505b6020821081141561494a576149496148ef565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006149866020836143cf565b915061499182614950565b602082019050919050565b600060208201905081810360008301526149b581614979565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149f682614390565b9150614a0183614390565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a3a57614a396149bc565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a7f82614390565b9150614a8a83614390565b925082614a9a57614a99614a45565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000614b01602d836143cf565b9150614b0c82614aa5565b604082019050919050565b60006020820190508181036000830152614b3081614af4565b9050919050565b6000614b4282614390565b9150614b4d83614390565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b8257614b816149bc565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614bc3601d836143cf565b9150614bce82614b8d565b602082019050919050565b60006020820190508181036000830152614bf281614bb6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614c3382614390565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c6657614c656149bc565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614ccd6039836143cf565b9150614cd882614c71565b604082019050919050565b60006020820190508181036000830152614cfc81614cc0565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614d39601d836143cf565b9150614d4482614d03565b602082019050919050565b60006020820190508181036000830152614d6881614d2c565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3225000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dcb6022836143cf565b9150614dd682614d6f565b604082019050919050565b60006020820190508181036000830152614dfa81614dbe565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614e5d6035836143cf565b9150614e6882614e01565b604082019050919050565b60006020820190508181036000830152614e8c81614e50565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614eef6034836143cf565b9150614efa82614e93565b604082019050919050565b60006020820190508181036000830152614f1e81614ee2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f816026836143cf565b9150614f8c82614f25565b604082019050919050565b60006020820190508181036000830152614fb081614f74565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614fed601b836143cf565b9150614ff882614fb7565b602082019050919050565b6000602082019050818103600083015261501c81614fe0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061507f6024836143cf565b915061508a82615023565b604082019050919050565b600060208201905081810360008301526150ae81615072565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151116022836143cf565b915061511c826150b5565b604082019050919050565b6000602082019050818103600083015261514081615104565b9050919050565b7f54686973206163636f756e7420697320626c61636b6c69737465643a2049662060008201527f796f75206665656c207468697320697320696e636f727265637420706c65617360208201527f6520636f6e74616320757320616e642077652077696c6c2072656d6f7665207960408201527f6f75000000000000000000000000000000000000000000000000000000000000606082015250565b60006151ef6062836143cf565b91506151fa82615147565b608082019050919050565b6000602082019050818103600083015261521e816151e2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006152816025836143cf565b915061528c82615225565b604082019050919050565b600060208201905081810360008301526152b081615274565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153136023836143cf565b915061531e826152b7565b604082019050919050565b6000602082019050818103600083015261534281615306565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061537f6016836143cf565b915061538a82615349565b602082019050919050565b600060208201905081810360008301526153ae81615372565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006154376049836143cf565b9150615442826153b5565b606082019050919050565b600060208201905081810360008301526154668161542a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006154c96035836143cf565b91506154d48261546d565b604082019050919050565b600060208201905081810360008301526154f8816154bc565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006155356013836143cf565b9150615540826154ff565b602082019050919050565b6000602082019050818103600083015261556481615528565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006155c76036836143cf565b91506155d28261556b565b604082019050919050565b600060208201905081810360008301526155f6816155ba565b9050919050565b600061560882614390565b915061561383614390565b925082821015615626576156256149bc565b5b828203905092915050565b600081905092915050565b50565b600061564c600083615631565b91506156578261563c565b600082019050919050565b600061566d8261563f565b9150819050919050565b600060608201905061568c600083018661439a565b615699602083018561439a565b6156a6604083018461439a565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061570a6021836143cf565b9150615715826156ae565b604082019050919050565b60006020820190508181036000830152615739816156fd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061577e816144bb565b92915050565b60006020828403121561579a5761579961447f565b5b60006157a88482850161576f565b91505092915050565b6000819050919050565b60006157d66157d16157cc846157b1565b6145b6565b614390565b9050919050565b6157e6816157bb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615821816144a9565b82525050565b60006158338383615818565b60208301905092915050565b6000602082019050919050565b6000615857826157ec565b61586181856157f7565b935061586c83615808565b8060005b8381101561589d5781516158848882615827565b975061588f8361583f565b925050600181019050615870565b5085935050505092915050565b600060a0820190506158bf600083018861439a565b6158cc60208301876157dd565b81810360408301526158de818661584c565b90506158ed60608301856146b0565b6158fa608083018461439a565b9695505050505050565b600060c08201905061591960008301896146b0565b615926602083018861439a565b61593360408301876157dd565b61594060608301866157dd565b61594d60808301856146b0565b61595a60a083018461439a565b979650505050505050565b600081519050615974816144e7565b92915050565b6000806000606084860312156159935761599261447f565b5b60006159a186828701615965565b93505060206159b286828701615965565b92505060406159c386828701615965565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220096c0739379b8bd6b2ec4e192ac4aab0dacb12c35de4d74e6cafbf27d1cd9b9664736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103795760003560e01c80638a8c523c116101d1578063c024666811610102578063dd62ed3e116100a0578063f2403d0b1161006f578063f2403d0b14610d06578063f2fde38b14610d2f578063f637434214610d58578063f8b45b0514610d8357610380565b8063dd62ed3e14610c48578063e2f4560514610c85578063e884f26014610cb0578063f11a24d314610cdb57610380565b8063c876d0b9116100dc578063c876d0b914610b8a578063c8c8ebe414610bb5578063d257b34f14610be0578063d85ba06314610c1d57610380565b8063c024666814610b0f578063c17b5b8c14610b38578063c18bc19514610b6157610380565b8063a01bcd7b1161016f578063aacebbe311610149578063aacebbe314610a53578063ad88d06f14610a7c578063b62496f514610aa7578063bbc0c74214610ae457610380565b8063a01bcd7b146109ae578063a457c2d7146109d9578063a9059cbb14610a1657610380565b8063924de9b7116101ab578063924de9b714610908578063935eb35f1461093157806395d89b411461095a5780639a7a23d61461098557610380565b80638a8c523c1461089b5780638da5cb5b146108b257806392136913146108dd57610380565b806339509351116102ab57806370a08231116102495780637571336a116102235780637571336a146107f357806375f0a8741461081c5780637bce5a04146108475780638095d5641461087257610380565b806370a0823114610774578063715018a6146107b1578063751039fc146107c857610380565b80634fbee193116102855780634fbee193146106b8578063537df3b6146106f55780636a486a8e1461071e5780636ddd17131461074957610380565b8063395093511461062557806349bd5a5e146106625780634a62bb651461068d57610380565b80631a8145bb11610318578063203e727e116102f2578063203e727e1461056957806323b872dd1461059257806327c8f835146105cf578063313ce567146105fa57610380565b80631a8145bb146104d65780631cdd3be3146105015780631f3fed8f1461053e57610380565b8063095ea7b311610354578063095ea7b31461040657806310d5de53146104435780631694505e1461048057806318160ddd146104ab57610380565b8062b878e914610385578063041d549d146103b057806306fdde03146103db57610380565b3661038057005b600080fd5b34801561039157600080fd5b5061039a610dae565b6040516103a791906143a9565b60405180910390f35b3480156103bc57600080fd5b506103c5610db4565b6040516103d291906143a9565b60405180910390f35b3480156103e757600080fd5b506103f0610dba565b6040516103fd919061445d565b60405180910390f35b34801561041257600080fd5b5061042d60048036038101906104289190614513565b610e4c565b60405161043a919061456e565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190614589565b610e6a565b604051610477919061456e565b60405180910390f35b34801561048c57600080fd5b50610495610e8a565b6040516104a29190614615565b60405180910390f35b3480156104b757600080fd5b506104c0610eae565b6040516104cd91906143a9565b60405180910390f35b3480156104e257600080fd5b506104eb610eb8565b6040516104f891906143a9565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190614589565b610ebe565b604051610535919061456e565b60405180910390f35b34801561054a57600080fd5b50610553610ede565b60405161056091906143a9565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190614630565b610ee4565b005b34801561059e57600080fd5b506105b960048036038101906105b4919061465d565b61100d565b6040516105c6919061456e565b60405180910390f35b3480156105db57600080fd5b506105e46110e6565b6040516105f191906146bf565b60405180910390f35b34801561060657600080fd5b5061060f6110ec565b60405161061c91906146f6565b60405180910390f35b34801561063157600080fd5b5061064c60048036038101906106479190614513565b6110f5565b604051610659919061456e565b60405180910390f35b34801561066e57600080fd5b506106776111a8565b60405161068491906146bf565b60405180910390f35b34801561069957600080fd5b506106a26111cc565b6040516106af919061456e565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da9190614589565b6111df565b6040516106ec919061456e565b60405180910390f35b34801561070157600080fd5b5061071c60048036038101906107179190614589565b611235565b005b34801561072a57600080fd5b50610733611327565b60405161074091906143a9565b60405180910390f35b34801561075557600080fd5b5061075e61132d565b60405161076b919061456e565b60405180910390f35b34801561078057600080fd5b5061079b60048036038101906107969190614589565b611340565b6040516107a891906143a9565b60405180910390f35b3480156107bd57600080fd5b506107c6611388565b005b3480156107d457600080fd5b506107dd6114e0565b6040516107ea919061456e565b60405180910390f35b3480156107ff57600080fd5b5061081a6004803603810190610815919061473d565b61159b565b005b34801561082857600080fd5b5061083161168d565b60405161083e91906146bf565b60405180910390f35b34801561085357600080fd5b5061085c6116b3565b60405161086991906143a9565b60405180910390f35b34801561087e57600080fd5b506108996004803603810190610894919061477d565b6116b9565b005b3480156108a757600080fd5b506108b06117d3565b005b3480156108be57600080fd5b506108c76118a2565b6040516108d491906146bf565b60405180910390f35b3480156108e957600080fd5b506108f26118cc565b6040516108ff91906143a9565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a91906147d0565b6118d2565b005b34801561093d57600080fd5b5061095860048036038101906109539190614862565b611986565b005b34801561096657600080fd5b5061096f611ac2565b60405161097c919061445d565b60405180910390f35b34801561099157600080fd5b506109ac60048036038101906109a7919061473d565b611b54565b005b3480156109ba57600080fd5b506109c3611c88565b6040516109d091906143a9565b60405180910390f35b3480156109e557600080fd5b50610a0060048036038101906109fb9190614513565b611c8e565b604051610a0d919061456e565b60405180910390f35b348015610a2257600080fd5b50610a3d6004803603810190610a389190614513565b611d5b565b604051610a4a919061456e565b60405180910390f35b348015610a5f57600080fd5b50610a7a6004803603810190610a759190614589565b611d79565b005b348015610a8857600080fd5b50610a91611ed0565b604051610a9e91906146bf565b60405180910390f35b348015610ab357600080fd5b50610ace6004803603810190610ac99190614589565b611ef6565b604051610adb919061456e565b60405180910390f35b348015610af057600080fd5b50610af9611f16565b604051610b06919061456e565b60405180910390f35b348015610b1b57600080fd5b50610b366004803603810190610b31919061473d565b611f29565b005b348015610b4457600080fd5b50610b5f6004803603810190610b5a919061477d565b612069565b005b348015610b6d57600080fd5b50610b886004803603810190610b839190614630565b612183565b005b348015610b9657600080fd5b50610b9f6122ac565b604051610bac919061456e565b60405180910390f35b348015610bc157600080fd5b50610bca6122bf565b604051610bd791906143a9565b60405180910390f35b348015610bec57600080fd5b50610c076004803603810190610c029190614630565b6122c5565b604051610c14919061456e565b60405180910390f35b348015610c2957600080fd5b50610c32612435565b604051610c3f91906143a9565b60405180910390f35b348015610c5457600080fd5b50610c6f6004803603810190610c6a91906148af565b61243b565b604051610c7c91906143a9565b60405180910390f35b348015610c9157600080fd5b50610c9a6124c2565b604051610ca791906143a9565b60405180910390f35b348015610cbc57600080fd5b50610cc56124c8565b604051610cd2919061456e565b60405180910390f35b348015610ce757600080fd5b50610cf0612583565b604051610cfd91906143a9565b60405180910390f35b348015610d1257600080fd5b50610d2d6004803603810190610d289190614589565b612589565b005b348015610d3b57600080fd5b50610d566004803603810190610d519190614589565b6126e0565b005b348015610d6457600080fd5b50610d6d6128a7565b604051610d7a91906143a9565b60405180910390f35b348015610d8f57600080fd5b50610d986128ad565b604051610da591906143a9565b60405180910390f35b60115481565b60155481565b606060038054610dc99061491e565b80601f0160208091040260200160405190810160405280929190818152602001828054610df59061491e565b8015610e425780601f10610e1757610100808354040283529160200191610e42565b820191906000526020600020905b815481529060010190602001808311610e2557829003601f168201915b5050505050905090565b6000610e60610e59612911565b8484612919565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60175481565b601c6020528060005260406000206000915054906101000a900460ff1681565b60165481565b610eec612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f729061499c565b60405180910390fd5b670de0b6b3a764000060646001610f90610eae565b610f9a91906149eb565b610fa49190614a74565b610fae9190614a74565b811015610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe790614b17565b60405180910390fd5b670de0b6b3a76400008161100491906149eb565b60088190555050565b600061101a848484612ae4565b6110db84611026612911565b6110d6856040518060600160405280602881526020016159f460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061108c612911565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138619092919063ffffffff16565b612919565b600190509392505050565b61dead81565b60006012905090565b600061119e611102612911565b846111998560016000611113612911565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128b390919063ffffffff16565b612919565b6001905092915050565b7f000000000000000000000000ad80182a7f7b310681e1415c19295c18efab778481565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61123d612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c39061499c565b60405180910390fd5b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60125481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611390612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461141f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114169061499c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114ea612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611579576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115709061499c565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6115a3612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611632576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116299061499c565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6116c1612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117479061499c565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f546117789190614b37565b6117829190614b37565b600e819055506014600e5411156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c590614bd9565b60405180910390fd5b505050565b6117db612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461186a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118619061499c565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6118da612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611969576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119609061499c565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b61198e612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a149061499c565b60405180910390fd5b60005b82829050811015611abd576001601c6000858585818110611a4457611a43614bf9565b5b9050602002016020810190611a599190614589565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ab590614c28565b915050611a20565b505050565b606060048054611ad19061491e565b80601f0160208091040260200160405190810160405280929190818152602001828054611afd9061491e565b8015611b4a5780601f10611b1f57610100808354040283529160200191611b4a565b820191906000526020600020905b815481529060010190602001808311611b2d57829003601f168201915b5050505050905090565b611b5c612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be29061499c565b60405180910390fd5b7f000000000000000000000000ad80182a7f7b310681e1415c19295c18efab778473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7190614ce3565b60405180910390fd5b611c8482826138c5565b5050565b60185481565b6000611d51611c9b612911565b84611d4c85604051806060016040528060258152602001615a1c6025913960016000611cc5612911565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138619092919063ffffffff16565b612919565b6001905092915050565b6000611d6f611d68612911565b8484612ae4565b6001905092915050565b611d81612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e079061499c565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611f31612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb79061499c565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161205d919061456e565b60405180910390a25050565b612071612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f79061499c565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546121289190614b37565b6121329190614b37565b6012819055506019601254111561217e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217590614d4f565b60405180910390fd5b505050565b61218b612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461221a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122119061499c565b60405180910390fd5b670de0b6b3a76400006064600261222f610eae565b61223991906149eb565b6122439190614a74565b61224d9190614a74565b81101561228f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228690614de1565b60405180910390fd5b670de0b6b3a7640000816122a391906149eb565b600a8190555050565b600d60009054906101000a900460ff1681565b60085481565b60006122cf612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461235e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123559061499c565b60405180910390fd5b620186a0600161236c610eae565b61237691906149eb565b6123809190614a74565b8210156123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614e73565b60405180910390fd5b6103e860056123cf610eae565b6123d991906149eb565b6123e39190614a74565b821115612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c90614f05565b60405180910390fd5b8160098190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006124d2612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612561576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125589061499c565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60105481565b612591612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612620576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126179061499c565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4e1c4a0a404f09f63a159ea16f4b6f8d96b307404456e2b71d87787d9b5f1e660405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126e8612911565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276e9061499c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127de90614f97565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600a5481565b60008082846128c29190614b37565b905083811015612907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fe90615003565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090615095565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f090615127565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ad791906143a9565b60405180910390a3505050565b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b885750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbe90615205565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2e90615297565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9e90615329565b60405180910390fd5b6000811415612cc157612cbc83836000613966565b61385c565b600b60009054906101000a900460ff161561338457612cde6118a2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d4c5750612d1c6118a2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d855750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dbf575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dd85750600560149054906101000a900460ff16155b1561338357600b60019054906101000a900460ff16612ed257601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e925750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec890615395565b60405180910390fd5b5b600d60009054906101000a900460ff161561309a57612eef6118a2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f7657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fce57507f000000000000000000000000ad80182a7f7b310681e1415c19295c18efab778473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130995743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304b9061544d565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561313d5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131e457600854811115613187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317e906154df565b60405180910390fd5b600a5461319383611340565b8261319e9190614b37565b11156131df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d69061554b565b60405180910390fd5b613382565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132875750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132d6576008548111156132d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c8906155dd565b60405180910390fd5b613381565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661338057600a5461333383611340565b8261333e9190614b37565b111561337f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133769061554b565b60405180910390fd5b5b5b5b5b5b600061338f30611340565b9050600060095482101590508080156133b45750600b60029054906101000a900460ff165b80156133cd5750600560149054906101000a900460ff16155b80156134235750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134795750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134cf5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613513576001600560146101000a81548160ff0219169083151502179055506134f7613bfb565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135c95750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135d357600090505b6000811561384c57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561363657506000601254115b1561370357613663606461365560125488613ee290919063ffffffff16565b613f5d90919063ffffffff16565b90506012546014548261367691906149eb565b6136809190614a74565b601760008282546136919190614b37565b92505081905550601254601554826136a991906149eb565b6136b39190614a74565b601860008282546136c49190614b37565b92505081905550601254601354826136dc91906149eb565b6136e69190614a74565b601660008282546136f79190614b37565b92505081905550613828565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561375e57506000600e54115b156138275761378b606461377d600e5488613ee290919063ffffffff16565b613f5d90919063ffffffff16565b9050600e546010548261379e91906149eb565b6137a89190614a74565b601760008282546137b99190614b37565b92505081905550600e54601154826137d191906149eb565b6137db9190614a74565b601860008282546137ec9190614b37565b92505081905550600e54600f548261380491906149eb565b61380e9190614a74565b6016600082825461381f9190614b37565b925050819055505b5b600081111561383d5761383c873083613966565b5b808561384991906155fd565b94505b613857878787613966565b505050505b505050565b60008383111582906138a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a0919061445d565b60405180910390fd5b50600083856138b891906155fd565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cd90615297565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3d90615329565b60405180910390fd5b613a51838383613fa7565b613abc816040518060600160405280602681526020016159ce602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138619092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b4f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128b390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613bee91906143a9565b60405180910390a3505050565b6000613c0630611340565b90506000601854601654601754613c1d9190614b37565b613c279190614b37565b9050600080831480613c395750600082145b15613c4657505050613ee0565b6014600954613c5591906149eb565b831115613c6e576014600954613c6b91906149eb565b92505b600060028360175486613c8191906149eb565b613c8b9190614a74565b613c959190614a74565b90506000613cac8286613fac90919063ffffffff16565b90506000479050613cbc82613ff6565b6000613cd18247613fac90919063ffffffff16565b90506000613cfc87613cee60165485613ee290919063ffffffff16565b613f5d90919063ffffffff16565b90506000613d2788613d1960185486613ee290919063ffffffff16565b613f5d90919063ffffffff16565b90506000818385613d3891906155fd565b613d4291906155fd565b9050600060178190555060006016819055506000601881905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613da290615662565b60006040518083038185875af1925050503d8060008114613ddf576040519150601f19603f3d011682016040523d82523d6000602084013e613de4565b606091505b505080985050600087118015613dfa5750600081115b15613e4757613e098782614242565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601754604051613e3e93929190615677565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613e8d90615662565b60006040518083038185875af1925050503d8060008114613eca576040519150601f19603f3d011682016040523d82523d6000602084013e613ecf565b606091505b505080985050505050505050505050505b565b600080831415613ef55760009050613f57565b60008284613f0391906149eb565b9050828482613f129190614a74565b14613f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f4990615720565b60405180910390fd5b809150505b92915050565b6000613f9f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061432d565b905092915050565b505050565b6000613fee83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613861565b905092915050565b6000600267ffffffffffffffff81111561401357614012615740565b5b6040519080825280602002602001820160405280156140415781602001602082028036833780820191505090505b509050308160008151811061405957614058614bf9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156140f957600080fd5b505afa15801561410d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141319190615784565b8160018151811061414557614144614bf9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141aa307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612919565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161420c9594939291906158aa565b600060405180830381600087803b15801561422657600080fd5b505af115801561423a573d6000803e3d6000fd5b505050505050565b61426d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612919565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016142d496959493929190615904565b6060604051808303818588803b1580156142ed57600080fd5b505af1158015614301573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614326919061597a565b5050505050565b60008083118290614374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161436b919061445d565b60405180910390fd5b50600083856143839190614a74565b9050809150509392505050565b6000819050919050565b6143a381614390565b82525050565b60006020820190506143be600083018461439a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143fe5780820151818401526020810190506143e3565b8381111561440d576000848401525b50505050565b6000601f19601f8301169050919050565b600061442f826143c4565b61443981856143cf565b93506144498185602086016143e0565b61445281614413565b840191505092915050565b600060208201905081810360008301526144778184614424565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144b482614489565b9050919050565b6144c4816144a9565b81146144cf57600080fd5b50565b6000813590506144e1816144bb565b92915050565b6144f081614390565b81146144fb57600080fd5b50565b60008135905061450d816144e7565b92915050565b6000806040838503121561452a5761452961447f565b5b6000614538858286016144d2565b9250506020614549858286016144fe565b9150509250929050565b60008115159050919050565b61456881614553565b82525050565b6000602082019050614583600083018461455f565b92915050565b60006020828403121561459f5761459e61447f565b5b60006145ad848285016144d2565b91505092915050565b6000819050919050565b60006145db6145d66145d184614489565b6145b6565b614489565b9050919050565b60006145ed826145c0565b9050919050565b60006145ff826145e2565b9050919050565b61460f816145f4565b82525050565b600060208201905061462a6000830184614606565b92915050565b6000602082840312156146465761464561447f565b5b6000614654848285016144fe565b91505092915050565b6000806000606084860312156146765761467561447f565b5b6000614684868287016144d2565b9350506020614695868287016144d2565b92505060406146a6868287016144fe565b9150509250925092565b6146b9816144a9565b82525050565b60006020820190506146d460008301846146b0565b92915050565b600060ff82169050919050565b6146f0816146da565b82525050565b600060208201905061470b60008301846146e7565b92915050565b61471a81614553565b811461472557600080fd5b50565b60008135905061473781614711565b92915050565b600080604083850312156147545761475361447f565b5b6000614762858286016144d2565b925050602061477385828601614728565b9150509250929050565b6000806000606084860312156147965761479561447f565b5b60006147a4868287016144fe565b93505060206147b5868287016144fe565b92505060406147c6868287016144fe565b9150509250925092565b6000602082840312156147e6576147e561447f565b5b60006147f484828501614728565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614822576148216147fd565b5b8235905067ffffffffffffffff81111561483f5761483e614802565b5b60208301915083602082028301111561485b5761485a614807565b5b9250929050565b600080602083850312156148795761487861447f565b5b600083013567ffffffffffffffff81111561489757614896614484565b5b6148a38582860161480c565b92509250509250929050565b600080604083850312156148c6576148c561447f565b5b60006148d4858286016144d2565b92505060206148e5858286016144d2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061493657607f821691505b6020821081141561494a576149496148ef565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006149866020836143cf565b915061499182614950565b602082019050919050565b600060208201905081810360008301526149b581614979565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149f682614390565b9150614a0183614390565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a3a57614a396149bc565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a7f82614390565b9150614a8a83614390565b925082614a9a57614a99614a45565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000614b01602d836143cf565b9150614b0c82614aa5565b604082019050919050565b60006020820190508181036000830152614b3081614af4565b9050919050565b6000614b4282614390565b9150614b4d83614390565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b8257614b816149bc565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614bc3601d836143cf565b9150614bce82614b8d565b602082019050919050565b60006020820190508181036000830152614bf281614bb6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614c3382614390565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c6657614c656149bc565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614ccd6039836143cf565b9150614cd882614c71565b604082019050919050565b60006020820190508181036000830152614cfc81614cc0565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614d39601d836143cf565b9150614d4482614d03565b602082019050919050565b60006020820190508181036000830152614d6881614d2c565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3225000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dcb6022836143cf565b9150614dd682614d6f565b604082019050919050565b60006020820190508181036000830152614dfa81614dbe565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614e5d6035836143cf565b9150614e6882614e01565b604082019050919050565b60006020820190508181036000830152614e8c81614e50565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614eef6034836143cf565b9150614efa82614e93565b604082019050919050565b60006020820190508181036000830152614f1e81614ee2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f816026836143cf565b9150614f8c82614f25565b604082019050919050565b60006020820190508181036000830152614fb081614f74565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614fed601b836143cf565b9150614ff882614fb7565b602082019050919050565b6000602082019050818103600083015261501c81614fe0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061507f6024836143cf565b915061508a82615023565b604082019050919050565b600060208201905081810360008301526150ae81615072565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151116022836143cf565b915061511c826150b5565b604082019050919050565b6000602082019050818103600083015261514081615104565b9050919050565b7f54686973206163636f756e7420697320626c61636b6c69737465643a2049662060008201527f796f75206665656c207468697320697320696e636f727265637420706c65617360208201527f6520636f6e74616320757320616e642077652077696c6c2072656d6f7665207960408201527f6f75000000000000000000000000000000000000000000000000000000000000606082015250565b60006151ef6062836143cf565b91506151fa82615147565b608082019050919050565b6000602082019050818103600083015261521e816151e2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006152816025836143cf565b915061528c82615225565b604082019050919050565b600060208201905081810360008301526152b081615274565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153136023836143cf565b915061531e826152b7565b604082019050919050565b6000602082019050818103600083015261534281615306565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061537f6016836143cf565b915061538a82615349565b602082019050919050565b600060208201905081810360008301526153ae81615372565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006154376049836143cf565b9150615442826153b5565b606082019050919050565b600060208201905081810360008301526154668161542a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006154c96035836143cf565b91506154d48261546d565b604082019050919050565b600060208201905081810360008301526154f8816154bc565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006155356013836143cf565b9150615540826154ff565b602082019050919050565b6000602082019050818103600083015261556481615528565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006155c76036836143cf565b91506155d28261556b565b604082019050919050565b600060208201905081810360008301526155f6816155ba565b9050919050565b600061560882614390565b915061561383614390565b925082821015615626576156256149bc565b5b828203905092915050565b600081905092915050565b50565b600061564c600083615631565b91506156578261563c565b600082019050919050565b600061566d8261563f565b9150819050919050565b600060608201905061568c600083018661439a565b615699602083018561439a565b6156a6604083018461439a565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061570a6021836143cf565b9150615715826156ae565b604082019050919050565b60006020820190508181036000830152615739816156fd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061577e816144bb565b92915050565b60006020828403121561579a5761579961447f565b5b60006157a88482850161576f565b91505092915050565b6000819050919050565b60006157d66157d16157cc846157b1565b6145b6565b614390565b9050919050565b6157e6816157bb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615821816144a9565b82525050565b60006158338383615818565b60208301905092915050565b6000602082019050919050565b6000615857826157ec565b61586181856157f7565b935061586c83615808565b8060005b8381101561589d5781516158848882615827565b975061588f8361583f565b925050600181019050615870565b5085935050505092915050565b600060a0820190506158bf600083018861439a565b6158cc60208301876157dd565b81810360408301526158de818661584c565b90506158ed60608301856146b0565b6158fa608083018461439a565b9695505050505050565b600060c08201905061591960008301896146b0565b615926602083018861439a565b61593360408301876157dd565b61594060608301866157dd565b61594d60808301856146b0565b61595a60a083018461439a565b979650505050505050565b600081519050615974816144e7565b92915050565b6000806000606084860312156159935761599261447f565b5b60006159a186828701615965565b93505060206159b286828701615965565b92505060406159c386828701615965565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220096c0739379b8bd6b2ec4e192ac4aab0dacb12c35de4d74e6cafbf27d1cd9b9664736f6c63430008090033

Deployed Bytecode Sourcemap

28515:16171:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29451:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29603:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7422:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9589:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29910:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28600:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8542:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29685:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30291:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29645:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34288:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10240:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28703:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8384:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11004:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28658:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28992:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36950:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37286:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29492:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29072:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8713:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21136:148;;;;;;;;;;;;;:::i;:::-;;33501:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34751:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28795:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29377;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35108:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33333:112;;;;;;;;;;;;;:::i;:::-;;20494:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29527:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34995:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37083:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7641:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36097:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29725:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11725:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9053:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36545:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28832:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30132:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29032:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35907:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35505:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34527:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29295:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28873:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33895:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29343:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9291:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28915:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33686:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29414:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36765:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21439:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29565:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28955:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29451:28;;;;:::o;29603:29::-;;;;:::o;7422:100::-;7476:13;7509:5;7502:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7422:100;:::o;9589:169::-;9672:4;9689:39;9698:12;:10;:12::i;:::-;9712:7;9721:6;9689:8;:39::i;:::-;9746:4;9739:11;;9589:169;;;;:::o;29910:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;28600:51::-;;;:::o;8542:108::-;8603:7;8630:12;;8623:19;;8542:108;:::o;29685:33::-;;;;:::o;30291:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;29645:33::-;;;;:::o;34288:231::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34406:4:::1;34401:3;34397:1;34381:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;34380:30;;;;:::i;:::-;34370:6;:40;;34362:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;34504:6;34494;:17;;;;:::i;:::-;34471:20;:40;;;;34288:231:::0;:::o;10240:355::-;10380:4;10397:36;10407:6;10415:9;10426:6;10397:9;:36::i;:::-;10444:121;10453:6;10461:12;:10;:12::i;:::-;10475:89;10513:6;10475:89;;;;;;;;;;;;;;;;;:11;:19;10487:6;10475:19;;;;;;;;;;;;;;;:33;10495:12;:10;:12::i;:::-;10475:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10444:8;:121::i;:::-;10583:4;10576:11;;10240:355;;;;;:::o;28703:53::-;28749:6;28703:53;:::o;8384:93::-;8442:5;8467:2;8460:9;;8384:93;:::o;11004:218::-;11092:4;11109:83;11118:12;:10;:12::i;:::-;11132:7;11141:50;11180:10;11141:11;:25;11153:12;:10;:12::i;:::-;11141:25;;;;;;;;;;;;;;;:34;11167:7;11141:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11109:8;:83::i;:::-;11210:4;11203:11;;11004:218;;;;:::o;28658:38::-;;;:::o;28992:33::-;;;;;;;;;;;;;:::o;36950:125::-;37015:4;37039:19;:28;37059:7;37039:28;;;;;;;;;;;;;;;;;;;;;;;;;37032:35;;36950:125;;;:::o;37286:115::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37388:5:::1;37362:14;:23;37377:7;37362:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;37286:115:::0;:::o;29492:28::-;;;;:::o;29072:31::-;;;;;;;;;;;;;:::o;8713:127::-;8787:7;8814:9;:18;8824:7;8814:18;;;;;;;;;;;;;;;;8807:25;;8713:127;;;:::o;21136:148::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21243:1:::1;21206:40;;21227:6;;;;;;;;;;;21206:40;;;;;;;;;;;;21274:1;21257:6;;:19;;;;;;;;;;;;;;;;;;21136:148::o:0;33501:120::-;33553:4;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33586:5:::1;33569:14;;:22;;;;;;;;;;;;;;;;;;33609:4;33602:11;;33501:120:::0;:::o;34751:144::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34883:4:::1;34841:31;:39;34873:6;34841:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34751:144:::0;;:::o;28795:30::-;;;;;;;;;;;;;:::o;29377:::-;;;;:::o;35108:385::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35246:13:::1;35228:15;:31;;;;35288:13;35270:15;:31;;;;35328:11;35312:13;:27;;;;35401:13;;35383:15;;35365;;:33;;;;:::i;:::-;:49;;;;:::i;:::-;35350:12;:64;;;;35449:2;35433:12;;:18;;35425:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35108:385:::0;;;:::o;33333:112::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33404:4:::1;33388:13;;:20;;;;;;;;;;;;;;;;;;33433:4;33419:11;;:18;;;;;;;;;;;;;;;;;;33333:112::o:0;20494:79::-;20532:7;20559:6;;;;;;;;;;;20552:13;;20494:79;:::o;29527:31::-;;;;:::o;34995:101::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35081:7:::1;35067:11;;:21;;;;;;;;;;;;;;;;;;34995:101:::0;:::o;37083:195::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37172:9:::1;37167:104;37186:9;;:16;;37183:1;:19;37167:104;;;37255:4;37224:14;:28;37239:9;;37249:1;37239:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;37224:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37204:3;;;;;:::i;:::-;;;;37167:104;;;;37083:195:::0;;:::o;7641:104::-;7697:13;7730:7;7723:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7641:104;:::o;36097:244::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36204:13:::1;36196:21;;:4;:21;;;;36188:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;36292:41;36321:4;36327:5;36292:28;:41::i;:::-;36097:244:::0;;:::o;29725:31::-;;;;:::o;11725:269::-;11818:4;11835:129;11844:12;:10;:12::i;:::-;11858:7;11867:96;11906:15;11867:96;;;;;;;;;;;;;;;;;:11;:25;11879:12;:10;:12::i;:::-;11867:25;;;;;;;;;;;;;;;:34;11893:7;11867:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11835:8;:129::i;:::-;11982:4;11975:11;;11725:269;;;;:::o;9053:175::-;9139:4;9156:42;9166:12;:10;:12::i;:::-;9180:9;9191:6;9156:9;:42::i;:::-;9216:4;9209:11;;9053:175;;;;:::o;36545:208::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36682:15:::1;;;;;;;;;;;36639:59;;36662:18;36639:59;;;;;;;;;;;;36727:18;36709:15;;:36;;;;;;;;;;;;;;;;;;36545:208:::0;:::o;28832:28::-;;;;;;;;;;;;;:::o;30132:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29032:33::-;;;;;;;;;;;;;:::o;35907:182::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36023:8:::1;35992:19;:28;36012:7;35992:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36063:7;36047:34;;;36072:8;36047:34;;;;;;:::i;:::-;;;;;;;;35907:182:::0;;:::o;35505:394::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35645:13:::1;35626:16;:32;;;;35688:13;35669:16;:32;;;;35729:11;35712:14;:28;;;;35805:14;;35786:16;;35767;;:35;;;;:::i;:::-;:52;;;;:::i;:::-;35751:13;:68;;;;35855:2;35838:13;;:19;;35830:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35505:394:::0;;;:::o;34527:212::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34648:4:::1;34643:3;34639:1;34623:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;34622:30;;;;:::i;:::-;34612:6;:40;;34604:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34724:6;34714;:17;;;;:::i;:::-;34702:9;:29;;;;34527:212:::0;:::o;29295:39::-;;;;;;;;;;;;;:::o;28873:35::-;;;;:::o;33895:381::-;33976:4;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34032:6:::1;34028:1;34012:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;33999:9;:39;;33991:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34147:4;34143:1;34127:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34114:9;:37;;34106:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34239:9;34218:18;:30;;;;34265:4;34258:11;;33895:381:::0;;;:::o;29343:27::-;;;;:::o;9291:151::-;9380:7;9407:11;:18;9419:5;9407:18;;;;;;;;;;;;;;;:27;9426:7;9407:27;;;;;;;;;;;;;;;;9400:34;;9291:151;;;;:::o;28915:33::-;;;;:::o;33686:134::-;33746:4;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33785:5:::1;33762:20;;:28;;;;;;;;;;;;;;;;;;33808:4;33801:11;;33686:134:::0;:::o;29414:30::-;;;;:::o;36765:173::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36880:13:::1;;;;;;;;;;;36848:46;;36869:9;36848:46;;;;;;;;;;;;36921:9;36905:13;;:25;;;;;;;;;;;;;;;;;;36765:173:::0;:::o;21439:244::-;20716:12;:10;:12::i;:::-;20706:22;;:6;;;;;;;;;;;:22;;;20698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21548:1:::1;21528:22;;:8;:22;;;;21520:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21638:8;21609:38;;21630:6;;;;;;;;;;;21609:38;;;;;;;;;;;;21667:8;21658:6;;:17;;;;;;;;;;;;;;;;;;21439:244:::0;:::o;29565:31::-;;;;:::o;28955:24::-;;;;:::o;15538:181::-;15596:7;15616:9;15632:1;15628;:5;;;;:::i;:::-;15616:17;;15657:1;15652;:6;;15644:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;15710:1;15703:8;;;15538:181;;;;:::o;225:98::-;278:7;305:10;298:17;;225:98;:::o;14160:380::-;14313:1;14296:19;;:5;:19;;;;14288:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14394:1;14375:21;;:7;:21;;;;14367:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14478:6;14448:11;:18;14460:5;14448:18;;;;;;;;;;;;;;;:27;14467:7;14448:27;;;;;;;;;;;;;;;:36;;;;14516:7;14500:32;;14509:5;14500:32;;;14525:6;14500:32;;;;;;:::i;:::-;;;;;;;;14160:380;;;:::o;37463:4382::-;37654:14;:20;37669:4;37654:20;;;;;;;;;;;;;;;;;;;;;;;;;37653:21;:44;;;;;37679:14;:18;37694:2;37679:18;;;;;;;;;;;;;;;;;;;;;;;;;37678:19;37653:44;37645:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;37835:1;37819:18;;:4;:18;;;;37811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37912:1;37898:16;;:2;:16;;;;37890:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37989:1;37979:6;:11;37976:92;;;38007:28;38023:4;38029:2;38033:1;38007:15;:28::i;:::-;38050:7;;37976:92;38091:14;;;;;;;;;;;38088:1841;;;38151:7;:5;:7::i;:::-;38143:15;;:4;:15;;;;:49;;;;;38185:7;:5;:7::i;:::-;38179:13;;:2;:13;;;;38143:49;:86;;;;;38227:1;38213:16;;:2;:16;;;;38143:86;:128;;;;;38264:6;38250:21;;:2;:21;;;;38143:128;:158;;;;;38293:8;;;;;;;;;;;38292:9;38143:158;38121:1797;;;38339:13;;;;;;;;;;;38335:148;;38384:19;:25;38404:4;38384:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38413:19;:23;38433:2;38413:23;;;;;;;;;;;;;;;;;;;;;;;;;38384:52;38376:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38335:148;38641:20;;;;;;;;;;;38637:423;;;38695:7;:5;:7::i;:::-;38689:13;;:2;:13;;;;:47;;;;;38720:15;38706:30;;:2;:30;;;;38689:47;:79;;;;;38754:13;38740:28;;:2;:28;;;;38689:79;38685:356;;;38846:12;38804:28;:39;38833:9;38804:39;;;;;;;;;;;;;;;;:54;38796:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39005:12;38963:28;:39;38992:9;38963:39;;;;;;;;;;;;;;;:54;;;;38685:356;38637:423;39129:25;:31;39155:4;39129:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39165:31;:35;39197:2;39165:35;;;;;;;;;;;;;;;;;;;;;;;;;39164:36;39129:71;39125:778;;;39247:20;;39237:6;:30;;39229:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39386:9;;39369:13;39379:2;39369:9;:13::i;:::-;39360:6;:22;;;;:::i;:::-;:35;;39352:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39125:778;;;39513:25;:29;39539:2;39513:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39547:31;:37;39579:4;39547:37;;;;;;;;;;;;;;;;;;;;;;;;;39546:38;39513:71;39509:394;;;39631:20;;39621:6;:30;;39613:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39509:394;;;39757:31;:35;39789:2;39757:35;;;;;;;;;;;;;;;;;;;;;;;;;39753:150;;39850:9;;39833:13;39843:2;39833:9;:13::i;:::-;39824:6;:22;;;;:::i;:::-;:35;;39816:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39753:150;39509:394;39125:778;38121:1797;38088:1841;39963:28;39994:24;40012:4;39994:9;:24::i;:::-;39963:55;;40039:12;40078:18;;40054:20;:42;;40039:57;;40127:7;:35;;;;;40151:11;;;;;;;;;;;40127:35;:61;;;;;40180:8;;;;;;;;;;;40179:9;40127:61;:110;;;;;40206:25;:31;40232:4;40206:31;;;;;;;;;;;;;;;;;;;;;;;;;40205:32;40127:110;:153;;;;;40255:19;:25;40275:4;40255:25;;;;;;;;;;;;;;;;;;;;;;;;;40254:26;40127:153;:194;;;;;40298:19;:23;40318:2;40298:23;;;;;;;;;;;;;;;;;;;;;;;;;40297:24;40127:194;40109:338;;;40359:4;40348:8;;:15;;;;;;;;;;;;;;;;;;40392:10;:8;:10::i;:::-;40430:5;40419:8;;:16;;;;;;;;;;;;;;;;;;40109:338;40467:12;40483:8;;;;;;;;;;;40482:9;40467:24;;40592:19;:25;40612:4;40592:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40621:19;:23;40641:2;40621:23;;;;;;;;;;;;;;;;;;;;;;;;;40592:52;40589:99;;;40671:5;40661:15;;40589:99;40708:12;40812:7;40809:983;;;40863:25;:29;40889:2;40863:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40912:1;40896:13;;:17;40863:50;40859:764;;;40940:34;40970:3;40940:25;40951:13;;40940:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40933:41;;41041:13;;41022:16;;41015:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40993:18;;:61;;;;;;;:::i;:::-;;;;;;;;41117:13;;41100:14;;41093:4;:21;;;;:::i;:::-;:37;;;;:::i;:::-;41073:16;;:57;;;;;;;:::i;:::-;;;;;;;;41197:13;;41178:16;;41171:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41149:18;;:61;;;;;;;:::i;:::-;;;;;;;;40859:764;;;41271:25;:31;41297:4;41271:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41321:1;41306:12;;:16;41271:51;41268:355;;;41347:33;41376:3;41347:24;41358:12;;41347:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41340:40;;41443:12;;41425:15;;41418:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41396:18;;:59;;;;;;;:::i;:::-;;;;;;;;41517:12;;41501:13;;41494:4;:20;;;;:::i;:::-;:35;;;;:::i;:::-;41474:16;;:55;;;;;;;:::i;:::-;;;;;;;;41595:12;;41577:15;;41570:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41548:18;;:59;;;;;;;:::i;:::-;;;;;;;;41268:355;40859:764;41661:1;41654:4;:8;41651:93;;;41686:42;41702:4;41716;41723;41686:15;:42::i;:::-;41651:93;41776:4;41766:14;;;;;:::i;:::-;;;40809:983;41804:33;41820:4;41826:2;41830:6;41804:15;:33::i;:::-;37576:4269;;;;37463:4382;;;;:::o;16441:192::-;16527:7;16560:1;16555;:6;;16563:12;16547:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16587:9;16603:1;16599;:5;;;;:::i;:::-;16587:17;;16624:1;16617:8;;;16441:192;;;;;:::o;36349:188::-;36466:5;36432:25;:31;36458:4;36432:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36523:5;36489:40;;36517:4;36489:40;;;;;;;;;;;;36349:188;;:::o;12484:573::-;12642:1;12624:20;;:6;:20;;;;12616:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12726:1;12705:23;;:9;:23;;;;12697:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12781:47;12802:6;12810:9;12821:6;12781:20;:47::i;:::-;12861:71;12883:6;12861:71;;;;;;;;;;;;;;;;;:9;:17;12871:6;12861:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12841:9;:17;12851:6;12841:17;;;;;;;;;;;;;;;:91;;;;12966:32;12991:6;12966:9;:20;12976:9;12966:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12943:9;:20;12953:9;12943:20;;;;;;;;;;;;;;;:55;;;;13031:9;13014:35;;13023:6;13014:35;;;13042:6;13014:35;;;;;;:::i;:::-;;;;;;;;12484:573;;;:::o;43001:1682::-;43040:23;43066:24;43084:4;43066:9;:24::i;:::-;43040:50;;43101:25;43171:16;;43150:18;;43129;;:39;;;;:::i;:::-;:58;;;;:::i;:::-;43101:86;;43198:12;43253:1;43234:15;:20;:46;;;;43279:1;43258:17;:22;43234:46;43231:60;;;43283:7;;;;;43231:60;43345:2;43324:18;;:23;;;;:::i;:::-;43306:15;:41;43303:111;;;43400:2;43379:18;;:23;;;;:::i;:::-;43361:41;;43303:111;43483:23;43568:1;43548:17;43527:18;;43509:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43483:86;;43580:26;43609:36;43629:15;43609;:19;;:36;;;;:::i;:::-;43580:65;;43666:25;43694:21;43666:49;;43728:36;43745:18;43728:16;:36::i;:::-;43786:18;43807:44;43833:17;43807:21;:25;;:44;;;;:::i;:::-;43786:65;;43872:23;43898:57;43937:17;43898:34;43913:18;;43898:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;43872:83;;43966:17;43986:55;44023:17;43986:32;44001:16;;43986:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;43966:75;;44072:23;44129:9;44111:15;44098:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;44072:66;;44190:1;44169:18;:22;;;;44223:1;44202:18;:22;;;;44254:1;44235:16;:20;;;;44297:13;;;;;;;;;;;44289:27;;44324:9;44289:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44276:62;;;;;44380:1;44362:15;:19;:42;;;;;44403:1;44385:15;:19;44362:42;44359:210;;;44420:46;44433:15;44450;44420:12;:46::i;:::-;44486:71;44501:18;44521:15;44538:18;;44486:71;;;;;;;;:::i;:::-;;;;;;;;44359:210;44620:15;;;;;;;;;;;44612:29;;44649:21;44612:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44599:76;;;;;43029:1654;;;;;;;;;;43001:1682;:::o;16892:471::-;16950:7;17200:1;17195;:6;17191:47;;;17225:1;17218:8;;;;17191:47;17250:9;17266:1;17262;:5;;;;:::i;:::-;17250:17;;17295:1;17290;17286;:5;;;;:::i;:::-;:10;17278:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17354:1;17347:8;;;16892:471;;;;;:::o;17839:132::-;17897:7;17924:39;17928:1;17931;17924:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;17917:46;;17839:132;;;;:::o;15143:125::-;;;;:::o;16002:136::-;16060:7;16087:43;16091:1;16094;16087:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16080:50;;16002:136;;;;:::o;41853:599::-;41979:21;42017:1;42003:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41979:40;;42048:4;42030;42035:1;42030:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42074:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42064:4;42069:1;42064:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42109:62;42126:4;42141:15;42159:11;42109:8;:62::i;:::-;42210:15;:66;;;42291:11;42317:1;42361:4;42388;42408:15;42210:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41908:544;41853:599;:::o;42476:517::-;42624:62;42641:4;42656:15;42674:11;42624:8;:62::i;:::-;42729:15;:31;;;42768:9;42801:4;42821:11;42847:1;42890;28749:6;42959:15;42729:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42476:517;;:::o;18467:278::-;18553:7;18585:1;18581;:5;18588:12;18573:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18612:9;18628:1;18624;:5;;;;:::i;:::-;18612:17;;18736:1;18729:8;;;18467:278;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:153::-;4604:9;4637:37;4668:5;4637:37;:::i;:::-;4624:50;;4527:153;;;:::o;4686:185::-;4800:64;4858:5;4800:64;:::i;:::-;4795:3;4788:77;4686:185;;:::o;4877:276::-;4997:4;5035:2;5024:9;5020:18;5012:26;;5048:98;5143:1;5132:9;5128:17;5119:6;5048:98;:::i;:::-;4877:276;;;;:::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:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:117::-;8699:1;8696;8689:12;8713:117;8822:1;8819;8812:12;8836:117;8945:1;8942;8935:12;8976:568;9049:8;9059:6;9109:3;9102:4;9094:6;9090:17;9086:27;9076:122;;9117:79;;:::i;:::-;9076:122;9230:6;9217:20;9207:30;;9260:18;9252:6;9249:30;9246:117;;;9282:79;;:::i;:::-;9246:117;9396:4;9388:6;9384:17;9372:29;;9450:3;9442:4;9434:6;9430:17;9420:8;9416:32;9413:41;9410:128;;;9457:79;;:::i;:::-;9410:128;8976:568;;;;;:::o;9550:559::-;9636:6;9644;9693:2;9681:9;9672:7;9668:23;9664:32;9661:119;;;9699:79;;:::i;:::-;9661:119;9847:1;9836:9;9832:17;9819:31;9877:18;9869:6;9866:30;9863:117;;;9899:79;;:::i;:::-;9863:117;10012:80;10084:7;10075:6;10064:9;10060:22;10012:80;:::i;:::-;9994:98;;;;9790:312;9550:559;;;;;:::o;10115:474::-;10183:6;10191;10240:2;10228:9;10219:7;10215:23;10211:32;10208:119;;;10246:79;;:::i;:::-;10208:119;10366:1;10391:53;10436:7;10427:6;10416:9;10412:22;10391:53;:::i;:::-;10381:63;;10337:117;10493:2;10519:53;10564:7;10555:6;10544:9;10540:22;10519:53;:::i;:::-;10509:63;;10464:118;10115:474;;;;;:::o;10595:180::-;10643:77;10640:1;10633:88;10740:4;10737:1;10730:15;10764:4;10761:1;10754:15;10781:320;10825:6;10862:1;10856:4;10852:12;10842:22;;10909:1;10903:4;10899:12;10930:18;10920:81;;10986:4;10978:6;10974:17;10964:27;;10920:81;11048:2;11040:6;11037:14;11017:18;11014:38;11011:84;;;11067:18;;:::i;:::-;11011:84;10832:269;10781:320;;;:::o;11107:182::-;11247:34;11243:1;11235:6;11231:14;11224:58;11107:182;:::o;11295:366::-;11437:3;11458:67;11522:2;11517:3;11458:67;:::i;:::-;11451:74;;11534:93;11623:3;11534:93;:::i;:::-;11652:2;11647:3;11643:12;11636:19;;11295:366;;;:::o;11667:419::-;11833:4;11871:2;11860:9;11856:18;11848:26;;11920:9;11914:4;11910:20;11906:1;11895:9;11891:17;11884:47;11948:131;12074:4;11948:131;:::i;:::-;11940:139;;11667:419;;;:::o;12092:180::-;12140:77;12137:1;12130:88;12237:4;12234:1;12227:15;12261:4;12258:1;12251:15;12278:348;12318:7;12341:20;12359:1;12341:20;:::i;:::-;12336:25;;12375:20;12393:1;12375:20;:::i;:::-;12370:25;;12563:1;12495:66;12491:74;12488:1;12485:81;12480:1;12473:9;12466:17;12462:105;12459:131;;;12570:18;;:::i;:::-;12459:131;12618:1;12615;12611:9;12600:20;;12278:348;;;;:::o;12632:180::-;12680:77;12677:1;12670:88;12777:4;12774:1;12767:15;12801:4;12798:1;12791:15;12818:185;12858:1;12875:20;12893:1;12875:20;:::i;:::-;12870:25;;12909:20;12927:1;12909:20;:::i;:::-;12904:25;;12948:1;12938:35;;12953:18;;:::i;:::-;12938:35;12995:1;12992;12988:9;12983:14;;12818:185;;;;:::o;13009:232::-;13149:34;13145:1;13137:6;13133:14;13126:58;13218:15;13213:2;13205:6;13201:15;13194:40;13009:232;:::o;13247:366::-;13389:3;13410:67;13474:2;13469:3;13410:67;:::i;:::-;13403:74;;13486:93;13575:3;13486:93;:::i;:::-;13604:2;13599:3;13595:12;13588:19;;13247:366;;;:::o;13619:419::-;13785:4;13823:2;13812:9;13808:18;13800:26;;13872:9;13866:4;13862:20;13858:1;13847:9;13843:17;13836:47;13900:131;14026:4;13900:131;:::i;:::-;13892:139;;13619:419;;;:::o;14044:305::-;14084:3;14103:20;14121:1;14103:20;:::i;:::-;14098:25;;14137:20;14155:1;14137:20;:::i;:::-;14132:25;;14291:1;14223:66;14219:74;14216:1;14213:81;14210:107;;;14297:18;;:::i;:::-;14210:107;14341:1;14338;14334:9;14327:16;;14044:305;;;;:::o;14355:179::-;14495:31;14491:1;14483:6;14479:14;14472:55;14355:179;:::o;14540:366::-;14682:3;14703:67;14767:2;14762:3;14703:67;:::i;:::-;14696:74;;14779:93;14868:3;14779:93;:::i;:::-;14897:2;14892:3;14888:12;14881:19;;14540:366;;;:::o;14912:419::-;15078:4;15116:2;15105:9;15101:18;15093:26;;15165:9;15159:4;15155:20;15151:1;15140:9;15136:17;15129:47;15193:131;15319:4;15193:131;:::i;:::-;15185:139;;14912:419;;;:::o;15337:180::-;15385:77;15382:1;15375:88;15482:4;15479:1;15472:15;15506:4;15503:1;15496:15;15523:233;15562:3;15585:24;15603:5;15585:24;:::i;:::-;15576:33;;15631:66;15624:5;15621:77;15618:103;;;15701:18;;:::i;:::-;15618:103;15748:1;15741:5;15737:13;15730:20;;15523:233;;;:::o;15762:244::-;15902:34;15898:1;15890:6;15886:14;15879:58;15971:27;15966:2;15958:6;15954:15;15947:52;15762:244;:::o;16012:366::-;16154:3;16175:67;16239:2;16234:3;16175:67;:::i;:::-;16168:74;;16251:93;16340:3;16251:93;:::i;:::-;16369:2;16364:3;16360:12;16353:19;;16012:366;;;:::o;16384:419::-;16550:4;16588:2;16577:9;16573:18;16565:26;;16637:9;16631:4;16627:20;16623:1;16612:9;16608:17;16601:47;16665:131;16791:4;16665:131;:::i;:::-;16657:139;;16384:419;;;:::o;16809:179::-;16949:31;16945:1;16937:6;16933:14;16926:55;16809:179;:::o;16994:366::-;17136:3;17157:67;17221:2;17216:3;17157:67;:::i;:::-;17150:74;;17233:93;17322:3;17233:93;:::i;:::-;17351:2;17346:3;17342:12;17335:19;;16994:366;;;:::o;17366:419::-;17532:4;17570:2;17559:9;17555:18;17547:26;;17619:9;17613:4;17609:20;17605:1;17594:9;17590:17;17583:47;17647:131;17773:4;17647:131;:::i;:::-;17639:139;;17366:419;;;:::o;17791:221::-;17931:34;17927:1;17919:6;17915:14;17908:58;18000:4;17995:2;17987:6;17983:15;17976:29;17791:221;:::o;18018:366::-;18160:3;18181:67;18245:2;18240:3;18181:67;:::i;:::-;18174:74;;18257:93;18346:3;18257:93;:::i;:::-;18375:2;18370:3;18366:12;18359:19;;18018:366;;;:::o;18390:419::-;18556:4;18594:2;18583:9;18579:18;18571:26;;18643:9;18637:4;18633:20;18629:1;18618:9;18614:17;18607:47;18671:131;18797:4;18671:131;:::i;:::-;18663:139;;18390:419;;;:::o;18815:240::-;18955:34;18951:1;18943:6;18939:14;18932:58;19024:23;19019:2;19011:6;19007:15;19000:48;18815:240;:::o;19061:366::-;19203:3;19224:67;19288:2;19283:3;19224:67;:::i;:::-;19217:74;;19300:93;19389:3;19300:93;:::i;:::-;19418:2;19413:3;19409:12;19402:19;;19061:366;;;:::o;19433:419::-;19599:4;19637:2;19626:9;19622:18;19614:26;;19686:9;19680:4;19676:20;19672:1;19661:9;19657:17;19650:47;19714:131;19840:4;19714:131;:::i;:::-;19706:139;;19433:419;;;:::o;19858:239::-;19998:34;19994:1;19986:6;19982:14;19975:58;20067:22;20062:2;20054:6;20050:15;20043:47;19858:239;:::o;20103:366::-;20245:3;20266:67;20330:2;20325:3;20266:67;:::i;:::-;20259:74;;20342:93;20431:3;20342:93;:::i;:::-;20460:2;20455:3;20451:12;20444:19;;20103:366;;;:::o;20475:419::-;20641:4;20679:2;20668:9;20664:18;20656:26;;20728:9;20722:4;20718:20;20714:1;20703:9;20699:17;20692:47;20756:131;20882:4;20756:131;:::i;:::-;20748:139;;20475:419;;;:::o;20900:225::-;21040:34;21036:1;21028:6;21024:14;21017:58;21109:8;21104:2;21096:6;21092:15;21085:33;20900:225;:::o;21131:366::-;21273:3;21294:67;21358:2;21353:3;21294:67;:::i;:::-;21287:74;;21370:93;21459:3;21370:93;:::i;:::-;21488:2;21483:3;21479:12;21472:19;;21131:366;;;:::o;21503:419::-;21669:4;21707:2;21696:9;21692:18;21684:26;;21756:9;21750:4;21746:20;21742:1;21731:9;21727:17;21720:47;21784:131;21910:4;21784:131;:::i;:::-;21776:139;;21503:419;;;:::o;21928:177::-;22068:29;22064:1;22056:6;22052:14;22045:53;21928:177;:::o;22111:366::-;22253:3;22274:67;22338:2;22333:3;22274:67;:::i;:::-;22267:74;;22350:93;22439:3;22350:93;:::i;:::-;22468:2;22463:3;22459:12;22452:19;;22111:366;;;:::o;22483:419::-;22649:4;22687:2;22676:9;22672:18;22664:26;;22736:9;22730:4;22726:20;22722:1;22711:9;22707:17;22700:47;22764:131;22890:4;22764:131;:::i;:::-;22756:139;;22483:419;;;:::o;22908:223::-;23048:34;23044:1;23036:6;23032:14;23025:58;23117:6;23112:2;23104:6;23100:15;23093:31;22908:223;:::o;23137:366::-;23279:3;23300:67;23364:2;23359:3;23300:67;:::i;:::-;23293:74;;23376:93;23465:3;23376:93;:::i;:::-;23494:2;23489:3;23485:12;23478:19;;23137:366;;;:::o;23509:419::-;23675:4;23713:2;23702:9;23698:18;23690:26;;23762:9;23756:4;23752:20;23748:1;23737:9;23733:17;23726:47;23790:131;23916:4;23790:131;:::i;:::-;23782:139;;23509:419;;;:::o;23934:221::-;24074:34;24070:1;24062:6;24058:14;24051:58;24143:4;24138:2;24130:6;24126:15;24119:29;23934:221;:::o;24161:366::-;24303:3;24324:67;24388:2;24383:3;24324:67;:::i;:::-;24317:74;;24400:93;24489:3;24400:93;:::i;:::-;24518:2;24513:3;24509:12;24502:19;;24161:366;;;:::o;24533:419::-;24699:4;24737:2;24726:9;24722:18;24714:26;;24786:9;24780:4;24776:20;24772:1;24761:9;24757:17;24750:47;24814:131;24940:4;24814:131;:::i;:::-;24806:139;;24533:419;;;:::o;24958:359::-;25098:34;25094:1;25086:6;25082:14;25075:58;25167:34;25162:2;25154:6;25150:15;25143:59;25236:34;25231:2;25223:6;25219:15;25212:59;25305:4;25300:2;25292:6;25288:15;25281:29;24958:359;:::o;25323:367::-;25465:3;25486:67;25550:2;25545:3;25486:67;:::i;:::-;25479:74;;25562:93;25651:3;25562:93;:::i;:::-;25680:3;25675;25671:13;25664:20;;25323:367;;;:::o;25696:419::-;25862:4;25900:2;25889:9;25885:18;25877:26;;25949:9;25943:4;25939:20;25935:1;25924:9;25920:17;25913:47;25977:131;26103:4;25977:131;:::i;:::-;25969:139;;25696:419;;;:::o;26121:224::-;26261:34;26257:1;26249:6;26245:14;26238:58;26330:7;26325:2;26317:6;26313:15;26306:32;26121:224;:::o;26351:366::-;26493:3;26514:67;26578:2;26573:3;26514:67;:::i;:::-;26507:74;;26590:93;26679:3;26590:93;:::i;:::-;26708:2;26703:3;26699:12;26692:19;;26351:366;;;:::o;26723:419::-;26889:4;26927:2;26916:9;26912:18;26904:26;;26976:9;26970:4;26966:20;26962:1;26951:9;26947:17;26940:47;27004:131;27130:4;27004:131;:::i;:::-;26996:139;;26723:419;;;:::o;27148:222::-;27288:34;27284:1;27276:6;27272:14;27265:58;27357:5;27352:2;27344:6;27340:15;27333:30;27148:222;:::o;27376:366::-;27518:3;27539:67;27603:2;27598:3;27539:67;:::i;:::-;27532:74;;27615:93;27704:3;27615:93;:::i;:::-;27733:2;27728:3;27724:12;27717:19;;27376:366;;;:::o;27748:419::-;27914:4;27952:2;27941:9;27937:18;27929:26;;28001:9;27995:4;27991:20;27987:1;27976:9;27972:17;27965:47;28029:131;28155:4;28029:131;:::i;:::-;28021:139;;27748:419;;;:::o;28173:172::-;28313:24;28309:1;28301:6;28297:14;28290:48;28173:172;:::o;28351:366::-;28493:3;28514:67;28578:2;28573:3;28514:67;:::i;:::-;28507:74;;28590:93;28679:3;28590:93;:::i;:::-;28708:2;28703:3;28699:12;28692:19;;28351:366;;;:::o;28723:419::-;28889:4;28927:2;28916:9;28912:18;28904:26;;28976:9;28970:4;28966:20;28962:1;28951:9;28947:17;28940:47;29004:131;29130:4;29004:131;:::i;:::-;28996:139;;28723:419;;;:::o;29148:297::-;29288:34;29284:1;29276:6;29272:14;29265:58;29357:34;29352:2;29344:6;29340:15;29333:59;29426:11;29421:2;29413:6;29409:15;29402:36;29148:297;:::o;29451:366::-;29593:3;29614:67;29678:2;29673:3;29614:67;:::i;:::-;29607:74;;29690:93;29779:3;29690:93;:::i;:::-;29808:2;29803:3;29799:12;29792:19;;29451:366;;;:::o;29823:419::-;29989:4;30027:2;30016:9;30012:18;30004:26;;30076:9;30070:4;30066:20;30062:1;30051:9;30047:17;30040:47;30104:131;30230:4;30104:131;:::i;:::-;30096:139;;29823:419;;;:::o;30248:240::-;30388:34;30384:1;30376:6;30372:14;30365:58;30457:23;30452:2;30444:6;30440:15;30433:48;30248:240;:::o;30494:366::-;30636:3;30657:67;30721:2;30716:3;30657:67;:::i;:::-;30650:74;;30733:93;30822:3;30733:93;:::i;:::-;30851:2;30846:3;30842:12;30835:19;;30494:366;;;:::o;30866:419::-;31032:4;31070:2;31059:9;31055:18;31047:26;;31119:9;31113:4;31109:20;31105:1;31094:9;31090:17;31083:47;31147:131;31273:4;31147:131;:::i;:::-;31139:139;;30866:419;;;:::o;31291:169::-;31431:21;31427:1;31419:6;31415:14;31408:45;31291:169;:::o;31466:366::-;31608:3;31629:67;31693:2;31688:3;31629:67;:::i;:::-;31622:74;;31705:93;31794:3;31705:93;:::i;:::-;31823:2;31818:3;31814:12;31807:19;;31466:366;;;:::o;31838:419::-;32004:4;32042:2;32031:9;32027:18;32019:26;;32091:9;32085:4;32081:20;32077:1;32066:9;32062:17;32055:47;32119:131;32245:4;32119:131;:::i;:::-;32111:139;;31838:419;;;:::o;32263:241::-;32403:34;32399:1;32391:6;32387:14;32380:58;32472:24;32467:2;32459:6;32455:15;32448:49;32263:241;:::o;32510:366::-;32652:3;32673:67;32737:2;32732:3;32673:67;:::i;:::-;32666:74;;32749:93;32838:3;32749:93;:::i;:::-;32867:2;32862:3;32858:12;32851:19;;32510:366;;;:::o;32882:419::-;33048:4;33086:2;33075:9;33071:18;33063:26;;33135:9;33129:4;33125:20;33121:1;33110:9;33106:17;33099:47;33163:131;33289:4;33163:131;:::i;:::-;33155:139;;32882:419;;;:::o;33307:191::-;33347:4;33367:20;33385:1;33367:20;:::i;:::-;33362:25;;33401:20;33419:1;33401:20;:::i;:::-;33396:25;;33440:1;33437;33434:8;33431:34;;;33445:18;;:::i;:::-;33431:34;33490:1;33487;33483:9;33475:17;;33307:191;;;;:::o;33504:147::-;33605:11;33642:3;33627:18;;33504:147;;;;:::o;33657:114::-;;:::o;33777:398::-;33936:3;33957:83;34038:1;34033:3;33957:83;:::i;:::-;33950:90;;34049:93;34138:3;34049:93;:::i;:::-;34167:1;34162:3;34158:11;34151:18;;33777:398;;;:::o;34181:379::-;34365:3;34387:147;34530:3;34387:147;:::i;:::-;34380:154;;34551:3;34544:10;;34181:379;;;:::o;34566:442::-;34715:4;34753:2;34742:9;34738:18;34730:26;;34766:71;34834:1;34823:9;34819:17;34810:6;34766:71;:::i;:::-;34847:72;34915:2;34904:9;34900:18;34891:6;34847:72;:::i;:::-;34929;34997:2;34986:9;34982:18;34973:6;34929:72;:::i;:::-;34566:442;;;;;;:::o;35014:220::-;35154:34;35150:1;35142:6;35138:14;35131:58;35223:3;35218:2;35210:6;35206:15;35199:28;35014:220;:::o;35240:366::-;35382:3;35403:67;35467:2;35462:3;35403:67;:::i;:::-;35396:74;;35479:93;35568:3;35479:93;:::i;:::-;35597:2;35592:3;35588:12;35581:19;;35240:366;;;:::o;35612:419::-;35778:4;35816:2;35805:9;35801:18;35793:26;;35865:9;35859:4;35855:20;35851:1;35840:9;35836:17;35829:47;35893:131;36019:4;35893:131;:::i;:::-;35885:139;;35612:419;;;:::o;36037:180::-;36085:77;36082:1;36075:88;36182:4;36179:1;36172:15;36206:4;36203:1;36196:15;36223:143;36280:5;36311:6;36305:13;36296:22;;36327:33;36354:5;36327:33;:::i;:::-;36223:143;;;;:::o;36372:351::-;36442:6;36491:2;36479:9;36470:7;36466:23;36462:32;36459:119;;;36497:79;;:::i;:::-;36459:119;36617:1;36642:64;36698:7;36689:6;36678:9;36674:22;36642:64;:::i;:::-;36632:74;;36588:128;36372:351;;;;:::o;36729:85::-;36774:7;36803:5;36792:16;;36729:85;;;:::o;36820:158::-;36878:9;36911:61;36929:42;36938:32;36964:5;36938:32;:::i;:::-;36929:42;:::i;:::-;36911:61;:::i;:::-;36898:74;;36820:158;;;:::o;36984:147::-;37079:45;37118:5;37079:45;:::i;:::-;37074:3;37067:58;36984:147;;:::o;37137:114::-;37204:6;37238:5;37232:12;37222:22;;37137:114;;;:::o;37257:184::-;37356:11;37390:6;37385:3;37378:19;37430:4;37425:3;37421:14;37406:29;;37257:184;;;;:::o;37447:132::-;37514:4;37537:3;37529:11;;37567:4;37562:3;37558:14;37550:22;;37447:132;;;:::o;37585:108::-;37662:24;37680:5;37662:24;:::i;:::-;37657:3;37650:37;37585:108;;:::o;37699:179::-;37768:10;37789:46;37831:3;37823:6;37789:46;:::i;:::-;37867:4;37862:3;37858:14;37844:28;;37699:179;;;;:::o;37884:113::-;37954:4;37986;37981:3;37977:14;37969:22;;37884:113;;;:::o;38033:732::-;38152:3;38181:54;38229:5;38181:54;:::i;:::-;38251:86;38330:6;38325:3;38251:86;:::i;:::-;38244:93;;38361:56;38411:5;38361:56;:::i;:::-;38440:7;38471:1;38456:284;38481:6;38478:1;38475:13;38456:284;;;38557:6;38551:13;38584:63;38643:3;38628:13;38584:63;:::i;:::-;38577:70;;38670:60;38723:6;38670:60;:::i;:::-;38660:70;;38516:224;38503:1;38500;38496:9;38491:14;;38456:284;;;38460:14;38756:3;38749:10;;38157:608;;;38033:732;;;;:::o;38771:831::-;39034:4;39072:3;39061:9;39057:19;39049:27;;39086:71;39154:1;39143:9;39139:17;39130:6;39086:71;:::i;:::-;39167:80;39243:2;39232:9;39228:18;39219:6;39167:80;:::i;:::-;39294:9;39288:4;39284:20;39279:2;39268:9;39264:18;39257:48;39322:108;39425:4;39416:6;39322:108;:::i;:::-;39314:116;;39440:72;39508:2;39497:9;39493:18;39484:6;39440:72;:::i;:::-;39522:73;39590:3;39579:9;39575:19;39566:6;39522:73;:::i;:::-;38771:831;;;;;;;;:::o;39608:807::-;39857:4;39895:3;39884:9;39880:19;39872:27;;39909:71;39977:1;39966:9;39962:17;39953:6;39909:71;:::i;:::-;39990:72;40058:2;40047:9;40043:18;40034:6;39990:72;:::i;:::-;40072:80;40148:2;40137:9;40133:18;40124:6;40072:80;:::i;:::-;40162;40238:2;40227:9;40223:18;40214:6;40162:80;:::i;:::-;40252:73;40320:3;40309:9;40305:19;40296:6;40252:73;:::i;:::-;40335;40403:3;40392:9;40388:19;40379:6;40335:73;:::i;:::-;39608:807;;;;;;;;;:::o;40421:143::-;40478:5;40509:6;40503:13;40494:22;;40525:33;40552:5;40525:33;:::i;:::-;40421:143;;;;:::o;40570:663::-;40658:6;40666;40674;40723:2;40711:9;40702:7;40698:23;40694:32;40691:119;;;40729:79;;:::i;:::-;40691:119;40849:1;40874:64;40930:7;40921:6;40910:9;40906:22;40874:64;:::i;:::-;40864:74;;40820:128;40987:2;41013:64;41069:7;41060:6;41049:9;41045:22;41013:64;:::i;:::-;41003:74;;40958:129;41126:2;41152:64;41208:7;41199:6;41188:9;41184:22;41152:64;:::i;:::-;41142:74;;41097:129;40570:663;;;;;:::o

Swarm Source

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