ETH Price: $2,306.66 (-0.46%)

Token

BURN AI ($BAI)
 

Overview

Max Total Supply

100,000,000 $BAI

Holders

28

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,483,329.541102081478726 $BAI

Value
$0.00
0x070857e63e54a9e6dbc5a16e198ed62751814024
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:
BURNAI

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * 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 Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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



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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

contract BURNAI 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 developmentWallet;
    address public marketingWallet;
    address public buyBackWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;

    bool public swapEnabled = true;
    

    uint256 public buyTotalFees;
    uint256 public buyDevelopmentFee;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBuyBackFee;
    
    uint256 public sellTotalFees;
    uint256 public sellDevelopmentFee;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellBuyBackFee;
    
    uint256 public tokensForDevelopment;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForBuyBack;
    
    /******************/

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    event BuyBackTriggered(uint256 amount);

    constructor() ERC20("BURN AI", "$BAI") {

        address newOwner = address(msg.sender);
        
        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 _buyDevelopmentFee = 2;
        uint256 _buyMarketingFee = 2;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyBuyBackFee = 2;
        
        uint256 _sellDevelopmentFee = 2;
        uint256 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellBuyBackFee = 2;
        
        uint256 totalSupply = 1 * 1e8 * 1e18;
        
        maxTransactionAmount = totalSupply * 2 / 100; // 2% maxTransactionAmountTxn
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        buyDevelopmentFee = _buyDevelopmentFee;
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyBuyBackFee = _buyBuyBackFee;
        buyTotalFees = buyDevelopmentFee + buyMarketingFee + buyLiquidityFee + buyBuyBackFee;
        
        sellDevelopmentFee = _sellDevelopmentFee;
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellBuyBackFee = _sellBuyBackFee;
        sellTotalFees = sellDevelopmentFee + sellLiquidityFee + sellBuyBackFee;
        
    	developmentWallet = address(0x405b550D9B76d883Cb4470E44c53569aF560A3a5); // set as development wallet
        marketingWallet = address(0xd55040A3E02e330B57EbA209D3e84cf08cDfaA0D); // set as marketing wallet
    	buyBackWallet = address(0x953cd8D3546EE752504F5ECCD9B74Ca25DB69aE9); // set as buyback wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(buyBackWallet, true);
        
        excludeFromMaxTransaction(newOwner, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(buyBackWallet, 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(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {

  	}
    
     // 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 updateMaxAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%");
        maxTransactionAmount = 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 _developmentFee, uint256 _liquidityFee, uint256 _buyBackFee, uint256 _marketingFee) external onlyOwner {
        buyDevelopmentFee = _developmentFee;
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyBuyBackFee = _buyBackFee;
        buyTotalFees = buyDevelopmentFee + buyMarketingFee + buyLiquidityFee + buyBuyBackFee;
        require(buyTotalFees <= 20, "Must keep fees at 15% or less");
    }
    
    function updateSellFees(uint256 _developmentFee, uint256 _liquidityFee, uint256 _buyBackFee, uint256 _marketingFee) external onlyOwner {
        sellDevelopmentFee = _developmentFee;
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellBuyBackFee = _buyBackFee;
        sellTotalFees = sellDevelopmentFee + sellMarketingFee + sellLiquidityFee + sellBuyBackFee;
        require(sellTotalFees <= 20, "Must keep fees at 30% 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 updatedevelopmentWallet(address newdevelopmentWallet) external onlyOwner {
        emit developmentWalletUpdated(newdevelopmentWallet, developmentWallet);
        developmentWallet = newdevelopmentWallet;
    }

    function updatemarketingWallet(address newmarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newmarketingWallet, marketingWallet);
        marketingWallet = newmarketingWallet;
    }
    
    function updateBuyBackWallet(address newWallet) external onlyOwner {
        emit buyBackWalletUpdated(newWallet, buyBackWallet);
        buyBackWallet = newWallet;
    }
    

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){        
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
            }
        
        
        
		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;
                tokensForBuyBack += fees * sellBuyBackFee / sellTotalFees;
                tokensForDevelopment += fees * sellDevelopmentFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForBuyBack += fees * buyBuyBackFee / buyTotalFees;
                tokensForDevelopment += fees * buyDevelopmentFee / 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 + tokensForDevelopment + tokensForBuyBack + tokensForMarketing;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // 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 ethForDev = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForBuyBack = ethBalance.mul(tokensForBuyBack).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForDev - ethForMarketing - ethForBuyBack;
        
        
        tokensForLiquidity = 0;
        tokensForDevelopment = 0;
        tokensForMarketing = 0;
        tokensForBuyBack = 0;
        
        (bool success,) = address(developmentWallet).call{value: ethForDev}("");
        (success,) = address(marketingWallet).call{value: ethForMarketing}("");
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        // keep leftover ETH for buyback
        (success,) = address(buyBackWallet).call{value: ethForBuyBack}("");
    }

    function withdrawStuckETH() external onlyOwner{
        require (address(this).balance > 0, "Can't withdraw negative or zero");
        payable(owner()).transfer(address(this).balance);
    }

    function removeStuckToken(address _address) external onlyOwner {
        require(_address != address(this), "Can't withdraw tokens destined for liquidity");
        require(IERC20(_address).balanceOf(address(this)) > 0, "Can't withdraw 0");

        IERC20(_address).transfer(owner(), IERC20(_address).balanceOf(address(this)));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"buyBackWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"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":"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":"_address","type":"address"}],"name":"removeStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"tokensForBuyBack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateBuyBackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","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":"newdevelopmentWallet","type":"address"}],"name":"updatedevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmarketingWallet","type":"address"}],"name":"updatemarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600781526020017f4255524e204149000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f24424149000000000000000000000000000000000000000000000000000000008152508160039081620000aa91906200101d565b508060049081620000bc91906200101d565b5050506000620000d1620006c660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060003390506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001a1816001620006ce60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024791906200116e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d591906200116e565b6040518363ffffffff1660e01b8152600401620002f4929190620011b1565b6020604051808303816000875af115801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a91906200116e565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200038260a0516001620006ce60201b60201c565b6200039760a0516001620007cb60201b60201c565b60006002905060006002905060006001905060006002905060006002905060006002905060006001905060006002905060006a52b7d2dcc80cd2e400000090506064600282620003e891906200120d565b620003f4919062001287565b6009819055506127106005826200040c91906200120d565b62000418919062001287565b600a8190555088600d8190555087600e8190555086600f8190555085601081905550601054600f54600e54600d54620004529190620012bf565b6200045e9190620012bf565b6200046a9190620012bf565b600c8190555084601281905550836013819055508260148190555081601581905550601554601454601254620004a19190620012bf565b620004ad9190620012bf565b60118190555073405b550d9b76d883cb4470e44c53569af560a3a5600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d55040a3e02e330b57eba209d3e84cf08cdfaa0d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073953cd8d3546ee752504f5eccd9b74ca25db69ae9600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005c58b60016200086c60201b60201c565b620005d83060016200086c60201b60201c565b620005ed61dead60016200086c60201b60201c565b62000622600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200086c60201b60201c565b620006358b6001620006ce60201b60201c565b62000648306001620006ce60201b60201c565b6200067d600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006ce60201b60201c565b6200069261dead6001620006ce60201b60201c565b620006a48b82620009b960201b60201c565b620006b58b62000b6760201b60201c565b505050505050505050505062001561565b600033905090565b620006de620006c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000767906200135b565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6200087c620006c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200090e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000905906200135b565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009ad91906200139a565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a229062001407565b60405180910390fd5b62000a3f6000838362000d3b60201b60201c565b62000a5b8160025462000d4060201b620027461790919060201c565b60028190555062000ab9816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d4060201b620027461790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b5b91906200143a565b60405180910390a35050565b62000b77620006c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000c09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c00906200135b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000c7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c7290620014cd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000d519190620012bf565b90508381101562000d99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d90906200153f565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e2557607f821691505b60208210810362000e3b5762000e3a62000ddd565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ea57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e66565b62000eb1868362000e66565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000efe62000ef862000ef28462000ec9565b62000ed3565b62000ec9565b9050919050565b6000819050919050565b62000f1a8362000edd565b62000f3262000f298262000f05565b84845462000e73565b825550505050565b600090565b62000f4962000f3a565b62000f5681848462000f0f565b505050565b5b8181101562000f7e5762000f7260008262000f3f565b60018101905062000f5c565b5050565b601f82111562000fcd5762000f978162000e41565b62000fa28462000e56565b8101602085101562000fb2578190505b62000fca62000fc18562000e56565b83018262000f5b565b50505b505050565b600082821c905092915050565b600062000ff26000198460080262000fd2565b1980831691505092915050565b60006200100d838362000fdf565b9150826002028217905092915050565b620010288262000da3565b67ffffffffffffffff81111562001044576200104362000dae565b5b62001050825462000e0c565b6200105d82828562000f82565b600060209050601f83116001811462001095576000841562001080578287015190505b6200108c858262000fff565b865550620010fc565b601f198416620010a58662000e41565b60005b82811015620010cf57848901518255600182019150602085019450602081019050620010a8565b86831015620010ef5784890151620010eb601f89168262000fdf565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011368262001109565b9050919050565b620011488162001129565b81146200115457600080fd5b50565b60008151905062001168816200113d565b92915050565b60006020828403121562001187576200118662001104565b5b6000620011978482850162001157565b91505092915050565b620011ab8162001129565b82525050565b6000604082019050620011c86000830185620011a0565b620011d76020830184620011a0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200121a8262000ec9565b9150620012278362000ec9565b9250828202620012378162000ec9565b91508282048414831517620012515762001250620011de565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012948262000ec9565b9150620012a18362000ec9565b925082620012b457620012b362001258565b5b828204905092915050565b6000620012cc8262000ec9565b9150620012d98362000ec9565b9250828201905080821115620012f457620012f3620011de565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001343602083620012fa565b915062001350826200130b565b602082019050919050565b60006020820190508181036000830152620013768162001334565b9050919050565b60008115159050919050565b62001394816200137d565b82525050565b6000602082019050620013b1600083018462001389565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620013ef601f83620012fa565b9150620013fc82620013b7565b602082019050919050565b600060208201905081810360008301526200142281620013e0565b9050919050565b620014348162000ec9565b82525050565b600060208201905062001451600083018462001429565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620014b5602683620012fa565b9150620014c28262001457565b604082019050919050565b60006020820190508181036000830152620014e881620014a6565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001527601b83620012fa565b91506200153482620014ef565b602082019050919050565b600060208201905081810360008301526200155a8162001518565b9050919050565b60805160a05161530e620015b16000396000818161132c015261188a015260008181610ff001528181613b7901528181613c5a01528181613c8101528181613d1d0152613d44015261530e6000f3fe60806040526004361061031e5760003560e01c806375f0a874116101ab578063c04a5414116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610c01578063f2fde38b14610c2c578063f5648a4f14610c55578063f637434214610c6c57610325565b8063e2f4560514610b82578063e7ad9fcd14610bad578063ef8700e514610bd657610325565b8063d257b34f116100d1578063d257b34f14610ab4578063d85ba06314610af1578063dd62ed3e14610b1c578063e083e92214610b5957610325565b8063c04a541414610a35578063c79c04fd14610a60578063c8c8ebe414610a8957610325565b80639a7a23d611610164578063b20414111161013e578063b20414111461097b578063b62496f5146109a6578063bff78169146109e3578063c024666814610a0c57610325565b80639a7a23d6146108d8578063a457c2d714610901578063a9059cbb1461093e57610325565b806375f0a874146107d85780637bce5a04146108035780638da5cb5b1461082e5780639213691314610859578063924de9b71461088457806395d89b41146108ad57610325565b80631fe70a981161026a57806349bd5a5e116102235780636ddd1713116101fd5780636ddd17131461073057806370a082311461075b578063715018a6146107985780637571336a146107af57610325565b806349bd5a5e1461069d5780634fbee193146106c85780636a486a8e1461070557610325565b80631fe70a981461057957806323b872dd146105a457806327c8f835146105e15780632e6ed7ef1461060c578063313ce56714610635578063395093511461066057610325565b80631694505e116102d75780631a221dbb116102b15780631a221dbb146104cd5780631a8145bb146104f85780631cd348c0146105235780631f3fed8f1461054e57610325565b80631694505e1461044c57806318160ddd1461047757806318a94cf1146104a257610325565b806306e7b14d1461032a57806306fdde0314610353578063095ea7b31461037e5780630b166d50146103bb578063106b5da1146103e657806310d5de531461040f57610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c9190613eb9565b610c97565b005b34801561035f57600080fd5b50610368610dee565b6040516103759190613f76565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613fce565b610e80565b6040516103b29190614029565b60405180910390f35b3480156103c757600080fd5b506103d0610e9e565b6040516103dd9190614053565b60405180910390f35b3480156103f257600080fd5b5061040d6004803603810190610408919061406e565b610ea4565b005b34801561041b57600080fd5b5061043660048036038101906104319190613eb9565b610fce565b6040516104439190614029565b60405180910390f35b34801561045857600080fd5b50610461610fee565b60405161046e91906140fa565b60405180910390f35b34801561048357600080fd5b5061048c611012565b6040516104999190614053565b60405180910390f35b3480156104ae57600080fd5b506104b761101c565b6040516104c49190614053565b60405180910390f35b3480156104d957600080fd5b506104e2611022565b6040516104ef9190614053565b60405180910390f35b34801561050457600080fd5b5061050d611028565b60405161051a9190614053565b60405180910390f35b34801561052f57600080fd5b5061053861102e565b6040516105459190614124565b60405180910390f35b34801561055a57600080fd5b50610563611054565b6040516105709190614053565b60405180910390f35b34801561058557600080fd5b5061058e61105a565b60405161059b9190614053565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c6919061413f565b611060565b6040516105d89190614029565b60405180910390f35b3480156105ed57600080fd5b506105f6611139565b6040516106039190614124565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190614192565b61113f565b005b34801561064157600080fd5b5061064a61126e565b6040516106579190614215565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190613fce565b611277565b6040516106949190614029565b60405180910390f35b3480156106a957600080fd5b506106b261132a565b6040516106bf9190614124565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea9190613eb9565b61134e565b6040516106fc9190614029565b60405180910390f35b34801561071157600080fd5b5061071a6113a4565b6040516107279190614053565b60405180910390f35b34801561073c57600080fd5b506107456113aa565b6040516107529190614029565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d9190613eb9565b6113bd565b60405161078f9190614053565b60405180910390f35b3480156107a457600080fd5b506107ad611405565b005b3480156107bb57600080fd5b506107d660048036038101906107d1919061425c565b61155d565b005b3480156107e457600080fd5b506107ed61164f565b6040516107fa9190614124565b60405180910390f35b34801561080f57600080fd5b50610818611675565b6040516108259190614053565b60405180910390f35b34801561083a57600080fd5b5061084361167b565b6040516108509190614124565b60405180910390f35b34801561086557600080fd5b5061086e6116a5565b60405161087b9190614053565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a6919061429c565b6116ab565b005b3480156108b957600080fd5b506108c261175f565b6040516108cf9190613f76565b60405180910390f35b3480156108e457600080fd5b506108ff60048036038101906108fa919061425c565b6117f1565b005b34801561090d57600080fd5b5061092860048036038101906109239190613fce565b611924565b6040516109359190614029565b60405180910390f35b34801561094a57600080fd5b5061096560048036038101906109609190613fce565b6119f1565b6040516109729190614029565b60405180910390f35b34801561098757600080fd5b50610990611a0f565b60405161099d9190614053565b60405180910390f35b3480156109b257600080fd5b506109cd60048036038101906109c89190613eb9565b611a15565b6040516109da9190614029565b60405180910390f35b3480156109ef57600080fd5b50610a0a6004803603810190610a059190613eb9565b611a35565b005b348015610a1857600080fd5b50610a336004803603810190610a2e919061425c565b611b8c565b005b348015610a4157600080fd5b50610a4a611ccc565b604051610a579190614124565b60405180910390f35b348015610a6c57600080fd5b50610a876004803603810190610a829190613eb9565b611cf2565b005b348015610a9557600080fd5b50610a9e611e49565b604051610aab9190614053565b60405180910390f35b348015610ac057600080fd5b50610adb6004803603810190610ad6919061406e565b611e4f565b604051610ae89190614029565b60405180910390f35b348015610afd57600080fd5b50610b06611fbf565b604051610b139190614053565b60405180910390f35b348015610b2857600080fd5b50610b436004803603810190610b3e91906142c9565b611fc5565b604051610b509190614053565b60405180910390f35b348015610b6557600080fd5b50610b806004803603810190610b7b9190613eb9565b61204c565b005b348015610b8e57600080fd5b50610b9761230f565b604051610ba49190614053565b60405180910390f35b348015610bb957600080fd5b50610bd46004803603810190610bcf9190614192565b612315565b005b348015610be257600080fd5b50610beb612444565b604051610bf89190614053565b60405180910390f35b348015610c0d57600080fd5b50610c1661244a565b604051610c239190614053565b60405180910390f35b348015610c3857600080fd5b50610c536004803603810190610c4e9190613eb9565b612450565b005b348015610c6157600080fd5b50610c6a612616565b005b348015610c7857600080fd5b50610c81612740565b604051610c8e9190614053565b60405180910390f35b610c9f6127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590614355565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f15e571905a1c816ac9ad091c2b82079da1ad3668d345e3894c424c5e5b47d97b60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610dfd906143a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610e29906143a4565b8015610e765780601f10610e4b57610100808354040283529160200191610e76565b820191906000526020600020905b815481529060010190602001808311610e5957829003601f168201915b5050505050905090565b6000610e94610e8d6127a4565b84846127ac565b6001905092915050565b60195481565b610eac6127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3290614355565b60405180910390fd5b670de0b6b3a76400006103e86005610f51611012565b610f5b9190614404565b610f659190614475565b610f6f9190614475565b811015610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa890614518565b60405180910390fd5b670de0b6b3a764000081610fc59190614404565b60098190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60125481565b60155481565b60185481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b60105481565b600061106d848484612975565b61112e846110796127a4565b6111298560405180606001604052806028815260200161528c60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110df6127a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132989092919063ffffffff16565b6127ac565b600190509392505050565b61dead81565b6111476127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90614355565b60405180910390fd5b83600d8190555080600e8190555082600f8190555081601081905550601054600f54600e54600d546112089190614538565b6112129190614538565b61121c9190614538565b600c819055506014600c541115611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f906145b8565b60405180910390fd5b50505050565b60006012905090565b60006113206112846127a4565b8461131b85600160006112956127a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274690919063ffffffff16565b6127ac565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b600b60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61140d6127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149390614355565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115656127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb90614355565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6116b36127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173990614355565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b60606004805461176e906143a4565b80601f016020809104026020016040519081016040528092919081815260200182805461179a906143a4565b80156117e75780601f106117bc576101008083540402835291602001916117e7565b820191906000526020600020905b8154815290600101906020018083116117ca57829003601f168201915b5050505050905090565b6117f96127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f90614355565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d9061464a565b60405180910390fd5b61192082826132fc565b5050565b60006119e76119316127a4565b846119e2856040518060600160405280602581526020016152b4602591396001600061195b6127a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132989092919063ffffffff16565b6127ac565b6001905092915050565b6000611a056119fe6127a4565b8484612975565b6001905092915050565b600d5481565b601c6020528060005260406000206000915054906101000a900460ff1681565b611a3d6127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390614355565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b946127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a90614355565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cc09190614029565b60405180910390a25050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cfa6127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8090614355565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6000611e596127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf90614355565b60405180910390fd5b620186a06001611ef6611012565b611f009190614404565b611f0a9190614475565b821015611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f43906146dc565b60405180910390fd5b6103e86005611f59611012565b611f639190614404565b611f6d9190614475565b821115611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa69061476e565b60405180910390fd5b81600a8190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120546127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da90614355565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214890614800565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161218c9190614124565b602060405180830381865afa1580156121a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121cd9190614835565b1161220d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612204906148ae565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61223161167b565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161226a9190614124565b602060405180830381865afa158015612287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ab9190614835565b6040518363ffffffff1660e01b81526004016122c89291906148ce565b6020604051808303816000875af11580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b919061490c565b5050565b600a5481565b61231d6127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a390614355565b60405180910390fd5b836012819055508060138190555082601481905550816015819055506015546014546013546012546123de9190614538565b6123e89190614538565b6123f29190614538565b6011819055506014601154111561243e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243590614985565b60405180910390fd5b50505050565b60165481565b600f5481565b6124586127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124de90614355565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d90614a17565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61261e6127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490614355565b60405180910390fd5b600047116126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e790614a83565b60405180910390fd5b6126f861167b565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561273d573d6000803e3d6000fd5b50565b60145481565b60008082846127559190614538565b90508381101561279a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279190614aef565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361281b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281290614b81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361288a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288190614c13565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129689190614053565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db90614ca5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4a90614d37565b60405180910390fd5b60008103612a6c57612a678383600061339d565b613293565b612a7461167b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ae25750612ab261167b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b1b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b55575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6e5750600560149054906101000a900460ff16155b15612d5557601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c165750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c6557600954811115612c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5790614dc9565b60405180910390fd5b612d54565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d085750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d5357600954811115612d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4990614e5b565b60405180910390fd5b5b5b5b6000612d60306113bd565b90506000600a548210159050808015612d855750600b60009054906101000a900460ff165b8015612d9e5750600560149054906101000a900460ff16155b8015612df45750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e4a5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ea05750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ee4576001600560146101000a81548160ff021916908315150217905550612ec8613630565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f9a5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fa457600090505b6000811561328357601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561300757506000601154115b15613107576130346064613026601154886139c790919063ffffffff16565b613a4190919063ffffffff16565b9050601154601454826130479190614404565b6130519190614475565b601860008282546130629190614538565b925050819055506011546015548261307a9190614404565b6130849190614475565b601960008282546130959190614538565b92505081905550601154601254826130ad9190614404565b6130b79190614475565b601660008282546130c89190614538565b92505081905550601154601354826130e09190614404565b6130ea9190614475565b601760008282546130fb9190614538565b9250508190555061325f565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561316257506000600c54115b1561325e5761318f6064613181600c54886139c790919063ffffffff16565b613a4190919063ffffffff16565b9050600c54600f54826131a29190614404565b6131ac9190614475565b601860008282546131bd9190614538565b92505081905550600c54601054826131d59190614404565b6131df9190614475565b601960008282546131f09190614538565b92505081905550600c54600d54826132089190614404565b6132129190614475565b601660008282546132239190614538565b92505081905550600c54600e548261323b9190614404565b6132459190614475565b601760008282546132569190614538565b925050819055505b5b60008111156132745761327387308361339d565b5b80856132809190614e7b565b94505b61328e87878761339d565b505050505b505050565b60008383111582906132e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d79190613f76565b60405180910390fd5b50600083856132ef9190614e7b565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361340c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340390614ca5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361347b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347290614d37565b60405180910390fd5b613486838383613a8b565b6134f181604051806060016040528060268152602001615266602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132989092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613584816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136239190614053565b60405180910390a3505050565b600061363b306113bd565b905060006017546019546016546018546136559190614538565b61365f9190614538565b6136699190614538565b9050600082148061367a5750600081145b156136865750506139c5565b6000600282601854856136999190614404565b6136a39190614475565b6136ad9190614475565b905060006136c48285613a9090919063ffffffff16565b905060004790506136d482613ada565b60006136e98247613a9090919063ffffffff16565b9050600061371486613706601654856139c790919063ffffffff16565b613a4190919063ffffffff16565b9050600061373f87613731601754866139c790919063ffffffff16565b613a4190919063ffffffff16565b9050600061376a8861375c601954876139c790919063ffffffff16565b613a4190919063ffffffff16565b905060008183858761377c9190614e7b565b6137869190614e7b565b6137909190614e7b565b905060006018819055506000601681905550600060178190555060006019819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856040516137fa90614ee0565b60006040518083038185875af1925050503d8060008114613837576040519150601f19603f3d011682016040523d82523d6000602084013e61383c565b606091505b50509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161388690614ee0565b60006040518083038185875af1925050503d80600081146138c3576040519150601f19603f3d011682016040523d82523d6000602084013e6138c8565b606091505b5050809150506000891180156138de5750600082115b1561392b576138ed8983613d17565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561888360185460405161392293929190614ef5565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161397190614ee0565b60006040518083038185875af1925050503d80600081146139ae576040519150601f19603f3d011682016040523d82523d6000602084013e6139b3565b606091505b50508091505050505050505050505050505b565b60008083036139d95760009050613a3b565b600082846139e79190614404565b90508284826139f69190614475565b14613a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2d90614f9e565b60405180910390fd5b809150505b92915050565b6000613a8383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613df3565b905092915050565b505050565b6000613ad283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613298565b905092915050565b6000600267ffffffffffffffff811115613af757613af6614fbe565b5b604051908082528060200260200182016040528015613b255781602001602082028036833780820191505090505b5090503081600081518110613b3d57613b3c614fed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613be2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c069190615031565b81600181518110613c1a57613c19614fed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c7f307f0000000000000000000000000000000000000000000000000000000000000000846127ac565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ce1959493929190615157565b600060405180830381600087803b158015613cfb57600080fd5b505af1158015613d0f573d6000803e3d6000fd5b505050505050565b613d42307f0000000000000000000000000000000000000000000000000000000000000000846127ac565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613da9969594939291906151b1565b60606040518083038185885af1158015613dc7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613dec9190615212565b5050505050565b60008083118290613e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e319190613f76565b60405180910390fd5b5060008385613e499190614475565b9050809150509392505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e8682613e5b565b9050919050565b613e9681613e7b565b8114613ea157600080fd5b50565b600081359050613eb381613e8d565b92915050565b600060208284031215613ecf57613ece613e56565b5b6000613edd84828501613ea4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f20578082015181840152602081019050613f05565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f4882613ee6565b613f528185613ef1565b9350613f62818560208601613f02565b613f6b81613f2c565b840191505092915050565b60006020820190508181036000830152613f908184613f3d565b905092915050565b6000819050919050565b613fab81613f98565b8114613fb657600080fd5b50565b600081359050613fc881613fa2565b92915050565b60008060408385031215613fe557613fe4613e56565b5b6000613ff385828601613ea4565b925050602061400485828601613fb9565b9150509250929050565b60008115159050919050565b6140238161400e565b82525050565b600060208201905061403e600083018461401a565b92915050565b61404d81613f98565b82525050565b60006020820190506140686000830184614044565b92915050565b60006020828403121561408457614083613e56565b5b600061409284828501613fb9565b91505092915050565b6000819050919050565b60006140c06140bb6140b684613e5b565b61409b565b613e5b565b9050919050565b60006140d2826140a5565b9050919050565b60006140e4826140c7565b9050919050565b6140f4816140d9565b82525050565b600060208201905061410f60008301846140eb565b92915050565b61411e81613e7b565b82525050565b60006020820190506141396000830184614115565b92915050565b60008060006060848603121561415857614157613e56565b5b600061416686828701613ea4565b935050602061417786828701613ea4565b925050604061418886828701613fb9565b9150509250925092565b600080600080608085870312156141ac576141ab613e56565b5b60006141ba87828801613fb9565b94505060206141cb87828801613fb9565b93505060406141dc87828801613fb9565b92505060606141ed87828801613fb9565b91505092959194509250565b600060ff82169050919050565b61420f816141f9565b82525050565b600060208201905061422a6000830184614206565b92915050565b6142398161400e565b811461424457600080fd5b50565b60008135905061425681614230565b92915050565b6000806040838503121561427357614272613e56565b5b600061428185828601613ea4565b925050602061429285828601614247565b9150509250929050565b6000602082840312156142b2576142b1613e56565b5b60006142c084828501614247565b91505092915050565b600080604083850312156142e0576142df613e56565b5b60006142ee85828601613ea4565b92505060206142ff85828601613ea4565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061433f602083613ef1565b915061434a82614309565b602082019050919050565b6000602082019050818103600083015261436e81614332565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143bc57607f821691505b6020821081036143cf576143ce614375565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061440f82613f98565b915061441a83613f98565b925082820261442881613f98565b9150828204841483151761443f5761443e6143d5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061448082613f98565b915061448b83613f98565b92508261449b5761449a614446565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614502602f83613ef1565b915061450d826144a6565b604082019050919050565b60006020820190508181036000830152614531816144f5565b9050919050565b600061454382613f98565b915061454e83613f98565b9250828201905080821115614566576145656143d5565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b60006145a2601d83613ef1565b91506145ad8261456c565b602082019050919050565b600060208201905081810360008301526145d181614595565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614634603983613ef1565b915061463f826145d8565b604082019050919050565b6000602082019050818103600083015261466381614627565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006146c6603583613ef1565b91506146d18261466a565b604082019050919050565b600060208201905081810360008301526146f5816146b9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614758603483613ef1565b9150614763826146fc565b604082019050919050565b600060208201905081810360008301526147878161474b565b9050919050565b7f43616e277420776974686472617720746f6b656e732064657374696e6564206660008201527f6f72206c69717569646974790000000000000000000000000000000000000000602082015250565b60006147ea602c83613ef1565b91506147f58261478e565b604082019050919050565b60006020820190508181036000830152614819816147dd565b9050919050565b60008151905061482f81613fa2565b92915050565b60006020828403121561484b5761484a613e56565b5b600061485984828501614820565b91505092915050565b7f43616e2774207769746864726177203000000000000000000000000000000000600082015250565b6000614898601083613ef1565b91506148a382614862565b602082019050919050565b600060208201905081810360008301526148c78161488b565b9050919050565b60006040820190506148e36000830185614115565b6148f06020830184614044565b9392505050565b60008151905061490681614230565b92915050565b60006020828403121561492257614921613e56565b5b6000614930848285016148f7565b91505092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b600061496f601d83613ef1565b915061497a82614939565b602082019050919050565b6000602082019050818103600083015261499e81614962565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a01602683613ef1565b9150614a0c826149a5565b604082019050919050565b60006020820190508181036000830152614a30816149f4565b9050919050565b7f43616e2774207769746864726177206e65676174697665206f72207a65726f00600082015250565b6000614a6d601f83613ef1565b9150614a7882614a37565b602082019050919050565b60006020820190508181036000830152614a9c81614a60565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614ad9601b83613ef1565b9150614ae482614aa3565b602082019050919050565b60006020820190508181036000830152614b0881614acc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b6b602483613ef1565b9150614b7682614b0f565b604082019050919050565b60006020820190508181036000830152614b9a81614b5e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bfd602283613ef1565b9150614c0882614ba1565b604082019050919050565b60006020820190508181036000830152614c2c81614bf0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c8f602583613ef1565b9150614c9a82614c33565b604082019050919050565b60006020820190508181036000830152614cbe81614c82565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d21602383613ef1565b9150614d2c82614cc5565b604082019050919050565b60006020820190508181036000830152614d5081614d14565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614db3603583613ef1565b9150614dbe82614d57565b604082019050919050565b60006020820190508181036000830152614de281614da6565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e45603683613ef1565b9150614e5082614de9565b604082019050919050565b60006020820190508181036000830152614e7481614e38565b9050919050565b6000614e8682613f98565b9150614e9183613f98565b9250828203905081811115614ea957614ea86143d5565b5b92915050565b600081905092915050565b50565b6000614eca600083614eaf565b9150614ed582614eba565b600082019050919050565b6000614eeb82614ebd565b9150819050919050565b6000606082019050614f0a6000830186614044565b614f176020830185614044565b614f246040830184614044565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f88602183613ef1565b9150614f9382614f2c565b604082019050919050565b60006020820190508181036000830152614fb781614f7b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061502b81613e8d565b92915050565b60006020828403121561504757615046613e56565b5b60006150558482850161501c565b91505092915050565b6000819050919050565b600061508361507e6150798461505e565b61409b565b613f98565b9050919050565b61509381615068565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150ce81613e7b565b82525050565b60006150e083836150c5565b60208301905092915050565b6000602082019050919050565b600061510482615099565b61510e81856150a4565b9350615119836150b5565b8060005b8381101561514a57815161513188826150d4565b975061513c836150ec565b92505060018101905061511d565b5085935050505092915050565b600060a08201905061516c6000830188614044565b615179602083018761508a565b818103604083015261518b81866150f9565b905061519a6060830185614115565b6151a76080830184614044565b9695505050505050565b600060c0820190506151c66000830189614115565b6151d36020830188614044565b6151e0604083018761508a565b6151ed606083018661508a565b6151fa6080830185614115565b61520760a0830184614044565b979650505050505050565b60008060006060848603121561522b5761522a613e56565b5b600061523986828701614820565b935050602061524a86828701614820565b925050604061525b86828701614820565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200759edac7e5a091c9d9550f8868dba8094ee05e54e205075773d31007b0876a264736f6c63430008120033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806375f0a874116101ab578063c04a5414116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610c01578063f2fde38b14610c2c578063f5648a4f14610c55578063f637434214610c6c57610325565b8063e2f4560514610b82578063e7ad9fcd14610bad578063ef8700e514610bd657610325565b8063d257b34f116100d1578063d257b34f14610ab4578063d85ba06314610af1578063dd62ed3e14610b1c578063e083e92214610b5957610325565b8063c04a541414610a35578063c79c04fd14610a60578063c8c8ebe414610a8957610325565b80639a7a23d611610164578063b20414111161013e578063b20414111461097b578063b62496f5146109a6578063bff78169146109e3578063c024666814610a0c57610325565b80639a7a23d6146108d8578063a457c2d714610901578063a9059cbb1461093e57610325565b806375f0a874146107d85780637bce5a04146108035780638da5cb5b1461082e5780639213691314610859578063924de9b71461088457806395d89b41146108ad57610325565b80631fe70a981161026a57806349bd5a5e116102235780636ddd1713116101fd5780636ddd17131461073057806370a082311461075b578063715018a6146107985780637571336a146107af57610325565b806349bd5a5e1461069d5780634fbee193146106c85780636a486a8e1461070557610325565b80631fe70a981461057957806323b872dd146105a457806327c8f835146105e15780632e6ed7ef1461060c578063313ce56714610635578063395093511461066057610325565b80631694505e116102d75780631a221dbb116102b15780631a221dbb146104cd5780631a8145bb146104f85780631cd348c0146105235780631f3fed8f1461054e57610325565b80631694505e1461044c57806318160ddd1461047757806318a94cf1146104a257610325565b806306e7b14d1461032a57806306fdde0314610353578063095ea7b31461037e5780630b166d50146103bb578063106b5da1146103e657806310d5de531461040f57610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c9190613eb9565b610c97565b005b34801561035f57600080fd5b50610368610dee565b6040516103759190613f76565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613fce565b610e80565b6040516103b29190614029565b60405180910390f35b3480156103c757600080fd5b506103d0610e9e565b6040516103dd9190614053565b60405180910390f35b3480156103f257600080fd5b5061040d6004803603810190610408919061406e565b610ea4565b005b34801561041b57600080fd5b5061043660048036038101906104319190613eb9565b610fce565b6040516104439190614029565b60405180910390f35b34801561045857600080fd5b50610461610fee565b60405161046e91906140fa565b60405180910390f35b34801561048357600080fd5b5061048c611012565b6040516104999190614053565b60405180910390f35b3480156104ae57600080fd5b506104b761101c565b6040516104c49190614053565b60405180910390f35b3480156104d957600080fd5b506104e2611022565b6040516104ef9190614053565b60405180910390f35b34801561050457600080fd5b5061050d611028565b60405161051a9190614053565b60405180910390f35b34801561052f57600080fd5b5061053861102e565b6040516105459190614124565b60405180910390f35b34801561055a57600080fd5b50610563611054565b6040516105709190614053565b60405180910390f35b34801561058557600080fd5b5061058e61105a565b60405161059b9190614053565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c6919061413f565b611060565b6040516105d89190614029565b60405180910390f35b3480156105ed57600080fd5b506105f6611139565b6040516106039190614124565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190614192565b61113f565b005b34801561064157600080fd5b5061064a61126e565b6040516106579190614215565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190613fce565b611277565b6040516106949190614029565b60405180910390f35b3480156106a957600080fd5b506106b261132a565b6040516106bf9190614124565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea9190613eb9565b61134e565b6040516106fc9190614029565b60405180910390f35b34801561071157600080fd5b5061071a6113a4565b6040516107279190614053565b60405180910390f35b34801561073c57600080fd5b506107456113aa565b6040516107529190614029565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d9190613eb9565b6113bd565b60405161078f9190614053565b60405180910390f35b3480156107a457600080fd5b506107ad611405565b005b3480156107bb57600080fd5b506107d660048036038101906107d1919061425c565b61155d565b005b3480156107e457600080fd5b506107ed61164f565b6040516107fa9190614124565b60405180910390f35b34801561080f57600080fd5b50610818611675565b6040516108259190614053565b60405180910390f35b34801561083a57600080fd5b5061084361167b565b6040516108509190614124565b60405180910390f35b34801561086557600080fd5b5061086e6116a5565b60405161087b9190614053565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a6919061429c565b6116ab565b005b3480156108b957600080fd5b506108c261175f565b6040516108cf9190613f76565b60405180910390f35b3480156108e457600080fd5b506108ff60048036038101906108fa919061425c565b6117f1565b005b34801561090d57600080fd5b5061092860048036038101906109239190613fce565b611924565b6040516109359190614029565b60405180910390f35b34801561094a57600080fd5b5061096560048036038101906109609190613fce565b6119f1565b6040516109729190614029565b60405180910390f35b34801561098757600080fd5b50610990611a0f565b60405161099d9190614053565b60405180910390f35b3480156109b257600080fd5b506109cd60048036038101906109c89190613eb9565b611a15565b6040516109da9190614029565b60405180910390f35b3480156109ef57600080fd5b50610a0a6004803603810190610a059190613eb9565b611a35565b005b348015610a1857600080fd5b50610a336004803603810190610a2e919061425c565b611b8c565b005b348015610a4157600080fd5b50610a4a611ccc565b604051610a579190614124565b60405180910390f35b348015610a6c57600080fd5b50610a876004803603810190610a829190613eb9565b611cf2565b005b348015610a9557600080fd5b50610a9e611e49565b604051610aab9190614053565b60405180910390f35b348015610ac057600080fd5b50610adb6004803603810190610ad6919061406e565b611e4f565b604051610ae89190614029565b60405180910390f35b348015610afd57600080fd5b50610b06611fbf565b604051610b139190614053565b60405180910390f35b348015610b2857600080fd5b50610b436004803603810190610b3e91906142c9565b611fc5565b604051610b509190614053565b60405180910390f35b348015610b6557600080fd5b50610b806004803603810190610b7b9190613eb9565b61204c565b005b348015610b8e57600080fd5b50610b9761230f565b604051610ba49190614053565b60405180910390f35b348015610bb957600080fd5b50610bd46004803603810190610bcf9190614192565b612315565b005b348015610be257600080fd5b50610beb612444565b604051610bf89190614053565b60405180910390f35b348015610c0d57600080fd5b50610c1661244a565b604051610c239190614053565b60405180910390f35b348015610c3857600080fd5b50610c536004803603810190610c4e9190613eb9565b612450565b005b348015610c6157600080fd5b50610c6a612616565b005b348015610c7857600080fd5b50610c81612740565b604051610c8e9190614053565b60405180910390f35b610c9f6127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590614355565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f15e571905a1c816ac9ad091c2b82079da1ad3668d345e3894c424c5e5b47d97b60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610dfd906143a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610e29906143a4565b8015610e765780601f10610e4b57610100808354040283529160200191610e76565b820191906000526020600020905b815481529060010190602001808311610e5957829003601f168201915b5050505050905090565b6000610e94610e8d6127a4565b84846127ac565b6001905092915050565b60195481565b610eac6127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3290614355565b60405180910390fd5b670de0b6b3a76400006103e86005610f51611012565b610f5b9190614404565b610f659190614475565b610f6f9190614475565b811015610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa890614518565b60405180910390fd5b670de0b6b3a764000081610fc59190614404565b60098190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60125481565b60155481565b60185481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b60105481565b600061106d848484612975565b61112e846110796127a4565b6111298560405180606001604052806028815260200161528c60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110df6127a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132989092919063ffffffff16565b6127ac565b600190509392505050565b61dead81565b6111476127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90614355565b60405180910390fd5b83600d8190555080600e8190555082600f8190555081601081905550601054600f54600e54600d546112089190614538565b6112129190614538565b61121c9190614538565b600c819055506014600c541115611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f906145b8565b60405180910390fd5b50505050565b60006012905090565b60006113206112846127a4565b8461131b85600160006112956127a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274690919063ffffffff16565b6127ac565b6001905092915050565b7f0000000000000000000000005df7e9b49e187795bf883e49d5032dccd632358d81565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b600b60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61140d6127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149390614355565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115656127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb90614355565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6116b36127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173990614355565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b60606004805461176e906143a4565b80601f016020809104026020016040519081016040528092919081815260200182805461179a906143a4565b80156117e75780601f106117bc576101008083540402835291602001916117e7565b820191906000526020600020905b8154815290600101906020018083116117ca57829003601f168201915b5050505050905090565b6117f96127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f90614355565b60405180910390fd5b7f0000000000000000000000005df7e9b49e187795bf883e49d5032dccd632358d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d9061464a565b60405180910390fd5b61192082826132fc565b5050565b60006119e76119316127a4565b846119e2856040518060600160405280602581526020016152b4602591396001600061195b6127a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132989092919063ffffffff16565b6127ac565b6001905092915050565b6000611a056119fe6127a4565b8484612975565b6001905092915050565b600d5481565b601c6020528060005260406000206000915054906101000a900460ff1681565b611a3d6127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390614355565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b946127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a90614355565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cc09190614029565b60405180910390a25050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cfa6127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8090614355565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6000611e596127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf90614355565b60405180910390fd5b620186a06001611ef6611012565b611f009190614404565b611f0a9190614475565b821015611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f43906146dc565b60405180910390fd5b6103e86005611f59611012565b611f639190614404565b611f6d9190614475565b821115611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa69061476e565b60405180910390fd5b81600a8190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120546127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da90614355565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214890614800565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161218c9190614124565b602060405180830381865afa1580156121a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121cd9190614835565b1161220d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612204906148ae565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61223161167b565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161226a9190614124565b602060405180830381865afa158015612287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ab9190614835565b6040518363ffffffff1660e01b81526004016122c89291906148ce565b6020604051808303816000875af11580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b919061490c565b5050565b600a5481565b61231d6127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a390614355565b60405180910390fd5b836012819055508060138190555082601481905550816015819055506015546014546013546012546123de9190614538565b6123e89190614538565b6123f29190614538565b6011819055506014601154111561243e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243590614985565b60405180910390fd5b50505050565b60165481565b600f5481565b6124586127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124de90614355565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d90614a17565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61261e6127a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490614355565b60405180910390fd5b600047116126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e790614a83565b60405180910390fd5b6126f861167b565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561273d573d6000803e3d6000fd5b50565b60145481565b60008082846127559190614538565b90508381101561279a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279190614aef565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361281b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281290614b81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361288a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288190614c13565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129689190614053565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db90614ca5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4a90614d37565b60405180910390fd5b60008103612a6c57612a678383600061339d565b613293565b612a7461167b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ae25750612ab261167b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b1b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b55575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6e5750600560149054906101000a900460ff16155b15612d5557601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c165750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c6557600954811115612c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5790614dc9565b60405180910390fd5b612d54565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d085750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d5357600954811115612d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4990614e5b565b60405180910390fd5b5b5b5b6000612d60306113bd565b90506000600a548210159050808015612d855750600b60009054906101000a900460ff165b8015612d9e5750600560149054906101000a900460ff16155b8015612df45750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e4a5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ea05750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ee4576001600560146101000a81548160ff021916908315150217905550612ec8613630565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f9a5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fa457600090505b6000811561328357601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561300757506000601154115b15613107576130346064613026601154886139c790919063ffffffff16565b613a4190919063ffffffff16565b9050601154601454826130479190614404565b6130519190614475565b601860008282546130629190614538565b925050819055506011546015548261307a9190614404565b6130849190614475565b601960008282546130959190614538565b92505081905550601154601254826130ad9190614404565b6130b79190614475565b601660008282546130c89190614538565b92505081905550601154601354826130e09190614404565b6130ea9190614475565b601760008282546130fb9190614538565b9250508190555061325f565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561316257506000600c54115b1561325e5761318f6064613181600c54886139c790919063ffffffff16565b613a4190919063ffffffff16565b9050600c54600f54826131a29190614404565b6131ac9190614475565b601860008282546131bd9190614538565b92505081905550600c54601054826131d59190614404565b6131df9190614475565b601960008282546131f09190614538565b92505081905550600c54600d54826132089190614404565b6132129190614475565b601660008282546132239190614538565b92505081905550600c54600e548261323b9190614404565b6132459190614475565b601760008282546132569190614538565b925050819055505b5b60008111156132745761327387308361339d565b5b80856132809190614e7b565b94505b61328e87878761339d565b505050505b505050565b60008383111582906132e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d79190613f76565b60405180910390fd5b50600083856132ef9190614e7b565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361340c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340390614ca5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361347b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347290614d37565b60405180910390fd5b613486838383613a8b565b6134f181604051806060016040528060268152602001615266602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132989092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613584816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136239190614053565b60405180910390a3505050565b600061363b306113bd565b905060006017546019546016546018546136559190614538565b61365f9190614538565b6136699190614538565b9050600082148061367a5750600081145b156136865750506139c5565b6000600282601854856136999190614404565b6136a39190614475565b6136ad9190614475565b905060006136c48285613a9090919063ffffffff16565b905060004790506136d482613ada565b60006136e98247613a9090919063ffffffff16565b9050600061371486613706601654856139c790919063ffffffff16565b613a4190919063ffffffff16565b9050600061373f87613731601754866139c790919063ffffffff16565b613a4190919063ffffffff16565b9050600061376a8861375c601954876139c790919063ffffffff16565b613a4190919063ffffffff16565b905060008183858761377c9190614e7b565b6137869190614e7b565b6137909190614e7b565b905060006018819055506000601681905550600060178190555060006019819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856040516137fa90614ee0565b60006040518083038185875af1925050503d8060008114613837576040519150601f19603f3d011682016040523d82523d6000602084013e61383c565b606091505b50509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161388690614ee0565b60006040518083038185875af1925050503d80600081146138c3576040519150601f19603f3d011682016040523d82523d6000602084013e6138c8565b606091505b5050809150506000891180156138de5750600082115b1561392b576138ed8983613d17565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561888360185460405161392293929190614ef5565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161397190614ee0565b60006040518083038185875af1925050503d80600081146139ae576040519150601f19603f3d011682016040523d82523d6000602084013e6139b3565b606091505b50508091505050505050505050505050505b565b60008083036139d95760009050613a3b565b600082846139e79190614404565b90508284826139f69190614475565b14613a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2d90614f9e565b60405180910390fd5b809150505b92915050565b6000613a8383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613df3565b905092915050565b505050565b6000613ad283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613298565b905092915050565b6000600267ffffffffffffffff811115613af757613af6614fbe565b5b604051908082528060200260200182016040528015613b255781602001602082028036833780820191505090505b5090503081600081518110613b3d57613b3c614fed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613be2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c069190615031565b81600181518110613c1a57613c19614fed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c7f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846127ac565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ce1959493929190615157565b600060405180830381600087803b158015613cfb57600080fd5b505af1158015613d0f573d6000803e3d6000fd5b505050505050565b613d42307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846127ac565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613da9969594939291906151b1565b60606040518083038185885af1158015613dc7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613dec9190615212565b5050505050565b60008083118290613e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e319190613f76565b60405180910390fd5b5060008385613e499190614475565b9050809150509392505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e8682613e5b565b9050919050565b613e9681613e7b565b8114613ea157600080fd5b50565b600081359050613eb381613e8d565b92915050565b600060208284031215613ecf57613ece613e56565b5b6000613edd84828501613ea4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f20578082015181840152602081019050613f05565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f4882613ee6565b613f528185613ef1565b9350613f62818560208601613f02565b613f6b81613f2c565b840191505092915050565b60006020820190508181036000830152613f908184613f3d565b905092915050565b6000819050919050565b613fab81613f98565b8114613fb657600080fd5b50565b600081359050613fc881613fa2565b92915050565b60008060408385031215613fe557613fe4613e56565b5b6000613ff385828601613ea4565b925050602061400485828601613fb9565b9150509250929050565b60008115159050919050565b6140238161400e565b82525050565b600060208201905061403e600083018461401a565b92915050565b61404d81613f98565b82525050565b60006020820190506140686000830184614044565b92915050565b60006020828403121561408457614083613e56565b5b600061409284828501613fb9565b91505092915050565b6000819050919050565b60006140c06140bb6140b684613e5b565b61409b565b613e5b565b9050919050565b60006140d2826140a5565b9050919050565b60006140e4826140c7565b9050919050565b6140f4816140d9565b82525050565b600060208201905061410f60008301846140eb565b92915050565b61411e81613e7b565b82525050565b60006020820190506141396000830184614115565b92915050565b60008060006060848603121561415857614157613e56565b5b600061416686828701613ea4565b935050602061417786828701613ea4565b925050604061418886828701613fb9565b9150509250925092565b600080600080608085870312156141ac576141ab613e56565b5b60006141ba87828801613fb9565b94505060206141cb87828801613fb9565b93505060406141dc87828801613fb9565b92505060606141ed87828801613fb9565b91505092959194509250565b600060ff82169050919050565b61420f816141f9565b82525050565b600060208201905061422a6000830184614206565b92915050565b6142398161400e565b811461424457600080fd5b50565b60008135905061425681614230565b92915050565b6000806040838503121561427357614272613e56565b5b600061428185828601613ea4565b925050602061429285828601614247565b9150509250929050565b6000602082840312156142b2576142b1613e56565b5b60006142c084828501614247565b91505092915050565b600080604083850312156142e0576142df613e56565b5b60006142ee85828601613ea4565b92505060206142ff85828601613ea4565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061433f602083613ef1565b915061434a82614309565b602082019050919050565b6000602082019050818103600083015261436e81614332565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143bc57607f821691505b6020821081036143cf576143ce614375565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061440f82613f98565b915061441a83613f98565b925082820261442881613f98565b9150828204841483151761443f5761443e6143d5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061448082613f98565b915061448b83613f98565b92508261449b5761449a614446565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614502602f83613ef1565b915061450d826144a6565b604082019050919050565b60006020820190508181036000830152614531816144f5565b9050919050565b600061454382613f98565b915061454e83613f98565b9250828201905080821115614566576145656143d5565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b60006145a2601d83613ef1565b91506145ad8261456c565b602082019050919050565b600060208201905081810360008301526145d181614595565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614634603983613ef1565b915061463f826145d8565b604082019050919050565b6000602082019050818103600083015261466381614627565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006146c6603583613ef1565b91506146d18261466a565b604082019050919050565b600060208201905081810360008301526146f5816146b9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614758603483613ef1565b9150614763826146fc565b604082019050919050565b600060208201905081810360008301526147878161474b565b9050919050565b7f43616e277420776974686472617720746f6b656e732064657374696e6564206660008201527f6f72206c69717569646974790000000000000000000000000000000000000000602082015250565b60006147ea602c83613ef1565b91506147f58261478e565b604082019050919050565b60006020820190508181036000830152614819816147dd565b9050919050565b60008151905061482f81613fa2565b92915050565b60006020828403121561484b5761484a613e56565b5b600061485984828501614820565b91505092915050565b7f43616e2774207769746864726177203000000000000000000000000000000000600082015250565b6000614898601083613ef1565b91506148a382614862565b602082019050919050565b600060208201905081810360008301526148c78161488b565b9050919050565b60006040820190506148e36000830185614115565b6148f06020830184614044565b9392505050565b60008151905061490681614230565b92915050565b60006020828403121561492257614921613e56565b5b6000614930848285016148f7565b91505092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b600061496f601d83613ef1565b915061497a82614939565b602082019050919050565b6000602082019050818103600083015261499e81614962565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a01602683613ef1565b9150614a0c826149a5565b604082019050919050565b60006020820190508181036000830152614a30816149f4565b9050919050565b7f43616e2774207769746864726177206e65676174697665206f72207a65726f00600082015250565b6000614a6d601f83613ef1565b9150614a7882614a37565b602082019050919050565b60006020820190508181036000830152614a9c81614a60565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614ad9601b83613ef1565b9150614ae482614aa3565b602082019050919050565b60006020820190508181036000830152614b0881614acc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b6b602483613ef1565b9150614b7682614b0f565b604082019050919050565b60006020820190508181036000830152614b9a81614b5e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bfd602283613ef1565b9150614c0882614ba1565b604082019050919050565b60006020820190508181036000830152614c2c81614bf0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c8f602583613ef1565b9150614c9a82614c33565b604082019050919050565b60006020820190508181036000830152614cbe81614c82565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d21602383613ef1565b9150614d2c82614cc5565b604082019050919050565b60006020820190508181036000830152614d5081614d14565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614db3603583613ef1565b9150614dbe82614d57565b604082019050919050565b60006020820190508181036000830152614de281614da6565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e45603683613ef1565b9150614e5082614de9565b604082019050919050565b60006020820190508181036000830152614e7481614e38565b9050919050565b6000614e8682613f98565b9150614e9183613f98565b9250828203905081811115614ea957614ea86143d5565b5b92915050565b600081905092915050565b50565b6000614eca600083614eaf565b9150614ed582614eba565b600082019050919050565b6000614eeb82614ebd565b9150819050919050565b6000606082019050614f0a6000830186614044565b614f176020830185614044565b614f246040830184614044565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f88602183613ef1565b9150614f9382614f2c565b604082019050919050565b60006020820190508181036000830152614fb781614f7b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061502b81613e8d565b92915050565b60006020828403121561504757615046613e56565b5b60006150558482850161501c565b91505092915050565b6000819050919050565b600061508361507e6150798461505e565b61409b565b613f98565b9050919050565b61509381615068565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150ce81613e7b565b82525050565b60006150e083836150c5565b60208301905092915050565b6000602082019050919050565b600061510482615099565b61510e81856150a4565b9350615119836150b5565b8060005b8381101561514a57815161513188826150d4565b975061513c836150ec565b92505060018101905061511d565b5085935050505092915050565b600060a08201905061516c6000830188614044565b615179602083018761508a565b818103604083015261518b81866150f9565b905061519a6060830185614115565b6151a76080830184614044565b9695505050505050565b600060c0820190506151c66000830189614115565b6151d36020830188614044565b6151e0604083018761508a565b6151ed606083018661508a565b6151fa6080830185614115565b61520760a0830184614044565b979650505050505050565b60008060006060848603121561522b5761522a613e56565b5b600061523986828701614820565b935050602061524a86828701614820565b925050604061525b86828701614820565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200759edac7e5a091c9d9550f8868dba8094ee05e54e205075773d31007b0876a264736f6c63430008120033

Deployed Bytecode Sourcemap

29434:15248:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37605:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7590:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9757:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30454:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34934:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30639:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29510:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8710:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30174:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30290:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30414:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29781:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30374:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30098:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10408:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29613:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35534:476;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8552:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11172:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29568:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37792:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30139:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29906:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8881:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22055:148;;;;;;;;;;;;;:::i;:::-;;35177:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29744:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30024;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21413:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30214:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35421:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7809:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36707:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11893:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9221:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29985:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30861:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37385:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36517:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29705:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37155:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29822:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34541:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29951:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9459:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44340:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29864:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36022:487;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30332:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30061:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22358:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44138:194;;;;;;;;;;;;;:::i;:::-;;30252:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37605:173;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37720:13:::1;;;;;;;;;;;37688:46;;37709:9;37688:46;;;;;;;;;;;;37761:9;37745:13;;:25;;;;;;;;;;;;;;;;;;37605:173:::0;:::o;7590:100::-;7644:13;7677:5;7670:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7590:100;:::o;9757:169::-;9840:4;9857:39;9866:12;:10;:12::i;:::-;9880:7;9889:6;9857:8;:39::i;:::-;9914:4;9907:11;;9757:169;;;;:::o;30454:31::-;;;;:::o;34934:231::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35050:4:::1;35044;35040:1;35024:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35023:31;;;;:::i;:::-;35013:6;:41;;35005:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35150:6;35140;:17;;;;:::i;:::-;35117:20;:40;;;;34934:231:::0;:::o;30639:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29510:51::-;;;:::o;8710:108::-;8771:7;8798:12;;8791:19;;8710:108;:::o;30174:33::-;;;;:::o;30290:29::-;;;;:::o;30414:33::-;;;;:::o;29781:28::-;;;;;;;;;;;;;:::o;30374:33::-;;;;:::o;30098:28::-;;;;:::o;10408:355::-;10548:4;10565:36;10575:6;10583:9;10594:6;10565:9;:36::i;:::-;10612:121;10621:6;10629:12;:10;:12::i;:::-;10643:89;10681:6;10643:89;;;;;;;;;;;;;;;;;:11;:19;10655:6;10643:19;;;;;;;;;;;;;;;:33;10663:12;:10;:12::i;:::-;10643:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10612:8;:121::i;:::-;10751:4;10744:11;;10408:355;;;;;:::o;29613:53::-;29659:6;29613:53;:::o;35534:476::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35699:15:::1;35679:17;:35;;;;35743:13;35725:15;:31;;;;35785:13;35767:15;:31;;;;35825:11;35809:13;:27;;;;35918:13;;35900:15;;35882;;35862:17;;:35;;;;:::i;:::-;:53;;;;:::i;:::-;:69;;;;:::i;:::-;35847:12;:84;;;;35966:2;35950:12;;:18;;35942:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35534:476:::0;;;;:::o;8552:93::-;8610:5;8635:2;8628:9;;8552:93;:::o;11172:218::-;11260:4;11277:83;11286:12;:10;:12::i;:::-;11300:7;11309:50;11348:10;11309:11;:25;11321:12;:10;:12::i;:::-;11309:25;;;;;;;;;;;;;;;:34;11335:7;11309:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11277:8;:83::i;:::-;11378:4;11371:11;;11172:218;;;;:::o;29568:38::-;;;:::o;37792:125::-;37857:4;37881:19;:28;37901:7;37881:28;;;;;;;;;;;;;;;;;;;;;;;;;37874:35;;37792:125;;;:::o;30139:28::-;;;;:::o;29906:30::-;;;;;;;;;;;;;:::o;8881:127::-;8955:7;8982:9;:18;8992:7;8982:18;;;;;;;;;;;;;;;;8975:25;;8881:127;;;:::o;22055:148::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22162:1:::1;22125:40;;22146:6;;;;;;;;;;;22125:40;;;;;;;;;;;;22193:1;22176:6;;:19;;;;;;;;;;;;;;;;;;22055:148::o:0;35177:144::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35309:4:::1;35267:31;:39;35299:6;35267:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35177:144:::0;;:::o;29744:30::-;;;;;;;;;;;;;:::o;30024:::-;;;;:::o;21413:79::-;21451:7;21478:6;;;;;;;;;;;21471:13;;21413:79;:::o;30214:31::-;;;;:::o;35421:101::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35507:7:::1;35493:11;;:21;;;;;;;;;;;;;;;;;;35421:101:::0;:::o;7809:104::-;7865:13;7898:7;7891:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7809:104;:::o;36707:244::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36814:13:::1;36806:21;;:4;:21;;::::0;36798:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36902:41;36931:4;36937:5;36902:28;:41::i;:::-;36707:244:::0;;:::o;11893:269::-;11986:4;12003:129;12012:12;:10;:12::i;:::-;12026:7;12035:96;12074:15;12035:96;;;;;;;;;;;;;;;;;:11;:25;12047:12;:10;:12::i;:::-;12035:25;;;;;;;;;;;;;;;:34;12061:7;12035:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12003:8;:129::i;:::-;12150:4;12143:11;;11893:269;;;;:::o;9221:175::-;9307:4;9324:42;9334:12;:10;:12::i;:::-;9348:9;9359:6;9324:9;:42::i;:::-;9384:4;9377:11;;9221:175;;;;:::o;29985:32::-;;;;:::o;30861:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;37385:208::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37522:15:::1;;;;;;;;;;;37479:59;;37502:18;37479:59;;;;;;;;;;;;37567:18;37549:15;;:36;;;;;;;;;;;;;;;;;;37385:208:::0;:::o;36517:182::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36633:8:::1;36602:19;:28;36622:7;36602:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36673:7;36657:34;;;36682:8;36657:34;;;;;;:::i;:::-;;;;;;;;36517:182:::0;;:::o;29705:32::-;;;;;;;;;;;;;:::o;37155:222::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37300:17:::1;;;;;;;;;;;37253:65;;37278:20;37253:65;;;;;;;;;;;;37349:20;37329:17;;:40;;;;;;;;;;;;;;;;;;37155:222:::0;:::o;29822:35::-;;;;:::o;34541:381::-;34622:4;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34678:6:::1;34674:1;34658:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34645:9;:39;;34637:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34793:4;34789:1;34773:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34760:9;:37;;34752:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34885:9;34864:18;:30;;;;34911:4;34904:11;;34541:381:::0;;;:::o;29951:27::-;;;;:::o;9459:151::-;9548:7;9575:11;:18;9587:5;9575:18;;;;;;;;;;;;;;;:27;9594:7;9575:27;;;;;;;;;;;;;;;;9568:34;;9459:151;;;;:::o;44340:339::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44442:4:::1;44422:25;;:8;:25;;::::0;44414:82:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;44559:1;44522:8;44515:26;;;44550:4;44515:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;44507:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;44601:8;44594:25;;;44620:7;:5;:7::i;:::-;44636:8;44629:26;;;44664:4;44629:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44594:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44340:339:::0;:::o;29864:33::-;;;;:::o;36022:487::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36189:15:::1;36168:18;:36;;;;36234:13;36215:16;:32;;;;36277:13;36258:16;:32;;;;36318:11;36301:14;:28;;;;36415:14;;36396:16;;36377;;36356:18;;:37;;;;:::i;:::-;:56;;;;:::i;:::-;:73;;;;:::i;:::-;36340:13;:89;;;;36465:2;36448:13;;:19;;36440:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36022:487:::0;;;;:::o;30332:35::-;;;;:::o;30061:30::-;;;;:::o;22358:244::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22467:1:::1;22447:22;;:8;:22;;::::0;22439:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22557:8;22528:38;;22549:6;;;;;;;;;;;22528:38;;;;;;;;;;;;22586:8;22577:6;;:17;;;;;;;;;;;;;;;;;;22358:244:::0;:::o;44138:194::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44228:1:::1;44204:21;:25;44195:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44284:7;:5;:7::i;:::-;44276:25;;:48;44302:21;44276:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44138:194::o:0;30252:31::-;;;;:::o;16457:181::-;16515:7;16535:9;16551:1;16547;:5;;;;:::i;:::-;16535:17;;16576:1;16571;:6;;16563:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16629:1;16622:8;;;16457:181;;;;:::o;226:98::-;279:7;306:10;299:17;;226:98;:::o;15079:380::-;15232:1;15215:19;;:5;:19;;;15207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15313:1;15294:21;;:7;:21;;;15286:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15397:6;15367:11;:18;15379:5;15367:18;;;;;;;;;;;;;;;:27;15386:7;15367:27;;;;;;;;;;;;;;;:36;;;;15435:7;15419:32;;15428:5;15419:32;;;15444:6;15419:32;;;;;;:::i;:::-;;;;;;;;15079:380;;;:::o;37925:3253::-;38073:1;38057:18;;:4;:18;;;38049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38150:1;38136:16;;:2;:16;;;38128:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38227:1;38217:6;:11;38214:92;;38245:28;38261:4;38267:2;38271:1;38245:15;:28::i;:::-;38288:7;;38214:92;38350:7;:5;:7::i;:::-;38342:15;;:4;:15;;;;:49;;;;;38384:7;:5;:7::i;:::-;38378:13;;:2;:13;;;;38342:49;:86;;;;;38426:1;38412:16;;:2;:16;;;;38342:86;:128;;;;;38463:6;38449:21;;:2;:21;;;;38342:128;:158;;;;;38492:8;;;;;;;;;;;38491:9;38342:158;38320:776;;;38574:25;:31;38600:4;38574:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38610:31;:35;38642:2;38610:35;;;;;;;;;;;;;;;;;;;;;;;;;38609:36;38574:71;38570:511;;;38692:20;;38682:6;:30;;38674:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;38570:511;;;38864:25;:29;38890:2;38864:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38898:31;:37;38930:4;38898:37;;;;;;;;;;;;;;;;;;;;;;;;;38897:38;38864:71;38860:221;;;38982:20;;38972:6;:30;;38964:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;38860:221;38570:511;38320:776;39130:28;39161:24;39179:4;39161:9;:24::i;:::-;39130:55;;39206:12;39245:18;;39221:20;:42;;39206:57;;39294:7;:35;;;;;39318:11;;;;;;;;;;;39294:35;:61;;;;;39347:8;;;;;;;;;;;39346:9;39294:61;:110;;;;;39373:25;:31;39399:4;39373:31;;;;;;;;;;;;;;;;;;;;;;;;;39372:32;39294:110;:153;;;;;39422:19;:25;39442:4;39422:25;;;;;;;;;;;;;;;;;;;;;;;;;39421:26;39294:153;:194;;;;;39465:19;:23;39485:2;39465:23;;;;;;;;;;;;;;;;;;;;;;;;;39464:24;39294:194;39276:338;;;39526:4;39515:8;;:15;;;;;;;;;;;;;;;;;;39559:10;:8;:10::i;:::-;39597:5;39586:8;;:16;;;;;;;;;;;;;;;;;;39276:338;39634:12;39650:8;;;;;;;;;;;39649:9;39634:24;;39759:19;:25;39779:4;39759:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39788:19;:23;39808:2;39788:23;;;;;;;;;;;;;;;;;;;;;;;;;39759:52;39756:99;;;39838:5;39828:15;;39756:99;39875:12;39979:7;39976:1149;;;40030:25;:29;40056:2;40030:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40079:1;40063:13;;:17;40030:50;40026:930;;;40107:34;40137:3;40107:25;40118:13;;40107:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40100:41;;40208:13;;40189:16;;40182:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40160:18;;:61;;;;;;;:::i;:::-;;;;;;;;40284:13;;40267:14;;40260:4;:21;;;;:::i;:::-;:37;;;;:::i;:::-;40240:16;;:57;;;;;;;:::i;:::-;;;;;;;;40368:13;;40347:18;;40340:4;:25;;;;:::i;:::-;:41;;;;:::i;:::-;40316:20;;:65;;;;;;;:::i;:::-;;;;;;;;40448:13;;40429:16;;40422:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40400:18;;:61;;;;;;;:::i;:::-;;;;;;;;40026:930;;;40522:25;:31;40548:4;40522:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;40572:1;40557:12;;:16;40522:51;40519:437;;;40598:33;40627:3;40598:24;40609:12;;40598:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40591:40;;40694:12;;40676:15;;40669:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40647:18;;:59;;;;;;;:::i;:::-;;;;;;;;40768:12;;40752:13;;40745:4;:20;;;;:::i;:::-;:35;;;;:::i;:::-;40725:16;;:55;;;;;;;:::i;:::-;;;;;;;;40850:12;;40830:17;;40823:4;:24;;;;:::i;:::-;:39;;;;:::i;:::-;40799:20;;:63;;;;;;;:::i;:::-;;;;;;;;40928:12;;40910:15;;40903:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40881:18;;:59;;;;;;;:::i;:::-;;;;;;;;40519:437;40026:930;40994:1;40987:4;:8;40984:93;;;41019:42;41035:4;41049;41056;41019:15;:42::i;:::-;40984:93;41109:4;41099:14;;;;;:::i;:::-;;;39976:1149;41137:33;41153:4;41159:2;41163:6;41137:15;:33::i;:::-;38038:3140;;;;37925:3253;;;;:::o;17360:192::-;17446:7;17479:1;17474;:6;;17482:12;17466:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17506:9;17522:1;17518;:5;;;;:::i;:::-;17506:17;;17543:1;17536:8;;;17360:192;;;;;:::o;36959:188::-;37076:5;37042:25;:31;37068:4;37042:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37133:5;37099:40;;37127:4;37099:40;;;;;;;;;;;;36959:188;;:::o;12652:573::-;12810:1;12792:20;;:6;:20;;;12784:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12894:1;12873:23;;:9;:23;;;12865:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12949:47;12970:6;12978:9;12989:6;12949:20;:47::i;:::-;13029:71;13051:6;13029:71;;;;;;;;;;;;;;;;;:9;:17;13039:6;13029:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13009:9;:17;13019:6;13009:17;;;;;;;;;;;;;;;:91;;;;13134:32;13159:6;13134:9;:20;13144:9;13134:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13111:9;:20;13121:9;13111:20;;;;;;;;;;;;;;;:55;;;;13199:9;13182:35;;13191:6;13182:35;;;13210:6;13182:35;;;;;;:::i;:::-;;;;;;;;12652:573;;;:::o;42324:1806::-;42363:23;42389:24;42407:4;42389:9;:24::i;:::-;42363:50;;42424:25;42515:18;;42496:16;;42473:20;;42452:18;;:41;;;;:::i;:::-;:60;;;;:::i;:::-;:81;;;;:::i;:::-;42424:109;;42576:1;42557:15;:20;:46;;;;42602:1;42581:17;:22;42557:46;42554:60;;;42606:7;;;;42554:60;42683:23;42768:1;42748:17;42727:18;;42709:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;42683:86;;42780:26;42809:36;42829:15;42809;:19;;:36;;;;:::i;:::-;42780:65;;42866:25;42894:21;42866:49;;42928:36;42945:18;42928:16;:36::i;:::-;42986:18;43007:44;43033:17;43007:21;:25;;:44;;;;:::i;:::-;42986:65;;43072:17;43092:59;43133:17;43092:36;43107:20;;43092:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;43072:79;;43162:23;43188:57;43227:17;43188:34;43203:18;;43188:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;43162:83;;43256:21;43280:55;43317:17;43280:32;43295:16;;43280:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;43256:79;;43366:23;43435:13;43417:15;43405:9;43392:10;:22;;;;:::i;:::-;:40;;;;:::i;:::-;:56;;;;:::i;:::-;43366:82;;43500:1;43479:18;:22;;;;43535:1;43512:20;:24;;;;43568:1;43547:18;:22;;;;43599:1;43580:16;:20;;;;43622:12;43647:17;;;;;;;;;;;43639:31;;43678:9;43639:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43621:71;;;43724:15;;;;;;;;;;;43716:29;;43753:15;43716:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43703:70;;;;;43805:1;43787:15;:19;:42;;;;;43828:1;43810:15;:19;43787:42;43784:210;;;43845:46;43858:15;43875;43845:12;:46::i;:::-;43911:71;43926:18;43946:15;43963:18;;43911:71;;;;;;;;:::i;:::-;;;;;;;;43784:210;44077:13;;;;;;;;;;;44069:27;;44104:13;44069:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44056:66;;;;;42352:1778;;;;;;;;;;;42324:1806;:::o;17811:471::-;17869:7;18119:1;18114;:6;18110:47;;18144:1;18137:8;;;;18110:47;18169:9;18185:1;18181;:5;;;;:::i;:::-;18169:17;;18214:1;18209;18205;:5;;;;:::i;:::-;:10;18197:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18273:1;18266:8;;;17811:471;;;;;:::o;18758:132::-;18816:7;18843:39;18847:1;18850;18843:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18836:46;;18758:132;;;;:::o;16062:125::-;;;;:::o;16921:136::-;16979:7;17006:43;17010:1;17013;17006:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16999:50;;16921:136;;;;:::o;41186:601::-;41314:21;41352:1;41338:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41314:40;;41383:4;41365;41370:1;41365:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41409:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41399:4;41404:1;41399:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41444:62;41461:4;41476:15;41494:11;41444:8;:62::i;:::-;41545:15;:66;;;41626:11;41652:1;41696:4;41723;41743:15;41545:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41241:546;41186:601;:::o;41799:517::-;41947:62;41964:4;41979:15;41997:11;41947:8;:62::i;:::-;42052:15;:31;;;42091:9;42124:4;42144:11;42170:1;42213;29659:6;42282:15;42052:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41799:517;;:::o;19386:278::-;19472:7;19504:1;19500;:5;19507:12;19492:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19531:9;19547:1;19543;:5;;;;:::i;:::-;19531:17;;19655:1;19648:8;;;19386:278;;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:246::-;1537:1;1547:113;1561:6;1558:1;1555:13;1547:113;;;1646:1;1641:3;1637:11;1631:18;1627:1;1622:3;1618:11;1611:39;1583:2;1580:1;1576:10;1571:15;;1547:113;;;1694:1;1685:6;1680:3;1676:16;1669:27;1518:184;1456:246;;;:::o;1708:102::-;1749:6;1800:2;1796:7;1791:2;1784:5;1780:14;1776:28;1766:38;;1708:102;;;:::o;1816:377::-;1904:3;1932:39;1965:5;1932:39;:::i;:::-;1987:71;2051:6;2046:3;1987:71;:::i;:::-;1980:78;;2067:65;2125:6;2120:3;2113:4;2106:5;2102:16;2067:65;:::i;:::-;2157:29;2179:6;2157:29;:::i;:::-;2152:3;2148:39;2141:46;;1908:285;1816:377;;;;:::o;2199:313::-;2312:4;2350:2;2339:9;2335:18;2327:26;;2399:9;2393:4;2389:20;2385:1;2374:9;2370:17;2363:47;2427:78;2500:4;2491:6;2427:78;:::i;:::-;2419:86;;2199:313;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:329::-;4192:6;4241:2;4229:9;4220:7;4216:23;4212:32;4209:119;;;4247:79;;:::i;:::-;4209:119;4367:1;4392:53;4437:7;4428:6;4417:9;4413:22;4392:53;:::i;:::-;4382:63;;4338:117;4133:329;;;;:::o;4468:60::-;4496:3;4517:5;4510:12;;4468:60;;;:::o;4534:142::-;4584:9;4617:53;4635:34;4644:24;4662:5;4644:24;:::i;:::-;4635:34;:::i;:::-;4617:53;:::i;:::-;4604:66;;4534:142;;;:::o;4682:126::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4682:126;;;:::o;4814:153::-;4891:9;4924:37;4955:5;4924:37;:::i;:::-;4911:50;;4814:153;;;:::o;4973:185::-;5087:64;5145:5;5087:64;:::i;:::-;5082:3;5075:77;4973:185;;:::o;5164:276::-;5284:4;5322:2;5311:9;5307:18;5299:26;;5335:98;5430:1;5419:9;5415:17;5406:6;5335:98;:::i;:::-;5164:276;;;;:::o;5446:118::-;5533:24;5551:5;5533:24;:::i;:::-;5528:3;5521:37;5446:118;;:::o;5570:222::-;5663:4;5701:2;5690:9;5686:18;5678:26;;5714:71;5782:1;5771:9;5767:17;5758:6;5714:71;:::i;:::-;5570:222;;;;:::o;5798:619::-;5875:6;5883;5891;5940:2;5928:9;5919:7;5915:23;5911:32;5908:119;;;5946:79;;:::i;:::-;5908:119;6066:1;6091:53;6136:7;6127:6;6116:9;6112:22;6091:53;:::i;:::-;6081:63;;6037:117;6193:2;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6164:118;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;5798:619;;;;;:::o;6423:765::-;6509:6;6517;6525;6533;6582:3;6570:9;6561:7;6557:23;6553:33;6550:120;;;6589:79;;:::i;:::-;6550:120;6709:1;6734:53;6779:7;6770:6;6759:9;6755:22;6734:53;:::i;:::-;6724:63;;6680:117;6836:2;6862:53;6907:7;6898:6;6887:9;6883:22;6862:53;:::i;:::-;6852:63;;6807:118;6964:2;6990:53;7035:7;7026:6;7015:9;7011:22;6990:53;:::i;:::-;6980:63;;6935:118;7092:2;7118:53;7163:7;7154:6;7143:9;7139:22;7118:53;:::i;:::-;7108:63;;7063:118;6423:765;;;;;;;:::o;7194:86::-;7229:7;7269:4;7262:5;7258:16;7247:27;;7194:86;;;:::o;7286:112::-;7369:22;7385:5;7369:22;:::i;:::-;7364:3;7357:35;7286:112;;:::o;7404:214::-;7493:4;7531:2;7520:9;7516:18;7508:26;;7544:67;7608:1;7597:9;7593:17;7584:6;7544:67;:::i;:::-;7404:214;;;;:::o;7624:116::-;7694:21;7709:5;7694:21;:::i;:::-;7687:5;7684:32;7674:60;;7730:1;7727;7720:12;7674:60;7624:116;:::o;7746:133::-;7789:5;7827:6;7814:20;7805:29;;7843:30;7867:5;7843:30;:::i;:::-;7746:133;;;;:::o;7885:468::-;7950:6;7958;8007:2;7995:9;7986:7;7982:23;7978:32;7975:119;;;8013:79;;:::i;:::-;7975:119;8133:1;8158:53;8203:7;8194:6;8183:9;8179:22;8158:53;:::i;:::-;8148:63;;8104:117;8260:2;8286:50;8328:7;8319:6;8308:9;8304:22;8286:50;:::i;:::-;8276:60;;8231:115;7885:468;;;;;:::o;8359:323::-;8415:6;8464:2;8452:9;8443:7;8439:23;8435:32;8432:119;;;8470:79;;:::i;:::-;8432:119;8590:1;8615:50;8657:7;8648:6;8637:9;8633:22;8615:50;:::i;:::-;8605:60;;8561:114;8359:323;;;;:::o;8688:474::-;8756:6;8764;8813:2;8801:9;8792:7;8788:23;8784:32;8781:119;;;8819:79;;:::i;:::-;8781:119;8939:1;8964:53;9009:7;9000:6;8989:9;8985:22;8964:53;:::i;:::-;8954:63;;8910:117;9066:2;9092:53;9137:7;9128:6;9117:9;9113:22;9092:53;:::i;:::-;9082:63;;9037:118;8688:474;;;;;:::o;9168:182::-;9308:34;9304:1;9296:6;9292:14;9285:58;9168:182;:::o;9356:366::-;9498:3;9519:67;9583:2;9578:3;9519:67;:::i;:::-;9512:74;;9595:93;9684:3;9595:93;:::i;:::-;9713:2;9708:3;9704:12;9697:19;;9356:366;;;:::o;9728:419::-;9894:4;9932:2;9921:9;9917:18;9909:26;;9981:9;9975:4;9971:20;9967:1;9956:9;9952:17;9945:47;10009:131;10135:4;10009:131;:::i;:::-;10001:139;;9728:419;;;:::o;10153:180::-;10201:77;10198:1;10191:88;10298:4;10295:1;10288:15;10322:4;10319:1;10312:15;10339:320;10383:6;10420:1;10414:4;10410:12;10400:22;;10467:1;10461:4;10457:12;10488:18;10478:81;;10544:4;10536:6;10532:17;10522:27;;10478:81;10606:2;10598:6;10595:14;10575:18;10572:38;10569:84;;10625:18;;:::i;:::-;10569:84;10390:269;10339:320;;;:::o;10665:180::-;10713:77;10710:1;10703:88;10810:4;10807:1;10800:15;10834:4;10831:1;10824:15;10851:410;10891:7;10914:20;10932:1;10914:20;:::i;:::-;10909:25;;10948:20;10966:1;10948:20;:::i;:::-;10943:25;;11003:1;11000;10996:9;11025:30;11043:11;11025:30;:::i;:::-;11014:41;;11204:1;11195:7;11191:15;11188:1;11185:22;11165:1;11158:9;11138:83;11115:139;;11234:18;;:::i;:::-;11115:139;10899:362;10851:410;;;;:::o;11267:180::-;11315:77;11312:1;11305:88;11412:4;11409:1;11402:15;11436:4;11433:1;11426:15;11453:185;11493:1;11510:20;11528:1;11510:20;:::i;:::-;11505:25;;11544:20;11562:1;11544:20;:::i;:::-;11539:25;;11583:1;11573:35;;11588:18;;:::i;:::-;11573:35;11630:1;11627;11623:9;11618:14;;11453:185;;;;:::o;11644:234::-;11784:34;11780:1;11772:6;11768:14;11761:58;11853:17;11848:2;11840:6;11836:15;11829:42;11644:234;:::o;11884:366::-;12026:3;12047:67;12111:2;12106:3;12047:67;:::i;:::-;12040:74;;12123:93;12212:3;12123:93;:::i;:::-;12241:2;12236:3;12232:12;12225:19;;11884:366;;;:::o;12256:419::-;12422:4;12460:2;12449:9;12445:18;12437:26;;12509:9;12503:4;12499:20;12495:1;12484:9;12480:17;12473:47;12537:131;12663:4;12537:131;:::i;:::-;12529:139;;12256:419;;;:::o;12681:191::-;12721:3;12740:20;12758:1;12740:20;:::i;:::-;12735:25;;12774:20;12792:1;12774:20;:::i;:::-;12769:25;;12817:1;12814;12810:9;12803:16;;12838:3;12835:1;12832:10;12829:36;;;12845:18;;:::i;:::-;12829:36;12681:191;;;;:::o;12878:179::-;13018:31;13014:1;13006:6;13002:14;12995:55;12878:179;:::o;13063:366::-;13205:3;13226:67;13290:2;13285:3;13226:67;:::i;:::-;13219:74;;13302:93;13391:3;13302:93;:::i;:::-;13420:2;13415:3;13411:12;13404:19;;13063:366;;;:::o;13435:419::-;13601:4;13639:2;13628:9;13624:18;13616:26;;13688:9;13682:4;13678:20;13674:1;13663:9;13659:17;13652:47;13716:131;13842:4;13716:131;:::i;:::-;13708:139;;13435:419;;;:::o;13860:244::-;14000:34;13996:1;13988:6;13984:14;13977:58;14069:27;14064:2;14056:6;14052:15;14045:52;13860:244;:::o;14110:366::-;14252:3;14273:67;14337:2;14332:3;14273:67;:::i;:::-;14266:74;;14349:93;14438:3;14349:93;:::i;:::-;14467:2;14462:3;14458:12;14451:19;;14110:366;;;:::o;14482:419::-;14648:4;14686:2;14675:9;14671:18;14663:26;;14735:9;14729:4;14725:20;14721:1;14710:9;14706:17;14699:47;14763:131;14889:4;14763:131;:::i;:::-;14755:139;;14482:419;;;:::o;14907:240::-;15047:34;15043:1;15035:6;15031:14;15024:58;15116:23;15111:2;15103:6;15099:15;15092:48;14907:240;:::o;15153:366::-;15295:3;15316:67;15380:2;15375:3;15316:67;:::i;:::-;15309:74;;15392:93;15481:3;15392:93;:::i;:::-;15510:2;15505:3;15501:12;15494:19;;15153:366;;;:::o;15525:419::-;15691:4;15729:2;15718:9;15714:18;15706:26;;15778:9;15772:4;15768:20;15764:1;15753:9;15749:17;15742:47;15806:131;15932:4;15806:131;:::i;:::-;15798:139;;15525:419;;;:::o;15950:239::-;16090:34;16086:1;16078:6;16074:14;16067:58;16159:22;16154:2;16146:6;16142:15;16135:47;15950:239;:::o;16195:366::-;16337:3;16358:67;16422:2;16417:3;16358:67;:::i;:::-;16351:74;;16434:93;16523:3;16434:93;:::i;:::-;16552:2;16547:3;16543:12;16536:19;;16195:366;;;:::o;16567:419::-;16733:4;16771:2;16760:9;16756:18;16748:26;;16820:9;16814:4;16810:20;16806:1;16795:9;16791:17;16784:47;16848:131;16974:4;16848:131;:::i;:::-;16840:139;;16567:419;;;:::o;16992:231::-;17132:34;17128:1;17120:6;17116:14;17109:58;17201:14;17196:2;17188:6;17184:15;17177:39;16992:231;:::o;17229:366::-;17371:3;17392:67;17456:2;17451:3;17392:67;:::i;:::-;17385:74;;17468:93;17557:3;17468:93;:::i;:::-;17586:2;17581:3;17577:12;17570:19;;17229:366;;;:::o;17601:419::-;17767:4;17805:2;17794:9;17790:18;17782:26;;17854:9;17848:4;17844:20;17840:1;17829:9;17825:17;17818:47;17882:131;18008:4;17882:131;:::i;:::-;17874:139;;17601:419;;;:::o;18026:143::-;18083:5;18114:6;18108:13;18099:22;;18130:33;18157:5;18130:33;:::i;:::-;18026:143;;;;:::o;18175:351::-;18245:6;18294:2;18282:9;18273:7;18269:23;18265:32;18262:119;;;18300:79;;:::i;:::-;18262:119;18420:1;18445:64;18501:7;18492:6;18481:9;18477:22;18445:64;:::i;:::-;18435:74;;18391:128;18175:351;;;;:::o;18532:166::-;18672:18;18668:1;18660:6;18656:14;18649:42;18532:166;:::o;18704:366::-;18846:3;18867:67;18931:2;18926:3;18867:67;:::i;:::-;18860:74;;18943:93;19032:3;18943:93;:::i;:::-;19061:2;19056:3;19052:12;19045:19;;18704:366;;;:::o;19076:419::-;19242:4;19280:2;19269:9;19265:18;19257:26;;19329:9;19323:4;19319:20;19315:1;19304:9;19300:17;19293:47;19357:131;19483:4;19357:131;:::i;:::-;19349:139;;19076:419;;;:::o;19501:332::-;19622:4;19660:2;19649:9;19645:18;19637:26;;19673:71;19741:1;19730:9;19726:17;19717:6;19673:71;:::i;:::-;19754:72;19822:2;19811:9;19807:18;19798:6;19754:72;:::i;:::-;19501:332;;;;;:::o;19839:137::-;19893:5;19924:6;19918:13;19909:22;;19940:30;19964:5;19940:30;:::i;:::-;19839:137;;;;:::o;19982:345::-;20049:6;20098:2;20086:9;20077:7;20073:23;20069:32;20066:119;;;20104:79;;:::i;:::-;20066:119;20224:1;20249:61;20302:7;20293:6;20282:9;20278:22;20249:61;:::i;:::-;20239:71;;20195:125;19982:345;;;;:::o;20333:179::-;20473:31;20469:1;20461:6;20457:14;20450:55;20333:179;:::o;20518:366::-;20660:3;20681:67;20745:2;20740:3;20681:67;:::i;:::-;20674:74;;20757:93;20846:3;20757:93;:::i;:::-;20875:2;20870:3;20866:12;20859:19;;20518:366;;;:::o;20890:419::-;21056:4;21094:2;21083:9;21079:18;21071:26;;21143:9;21137:4;21133:20;21129:1;21118:9;21114:17;21107:47;21171:131;21297:4;21171:131;:::i;:::-;21163:139;;20890:419;;;:::o;21315:225::-;21455:34;21451:1;21443:6;21439:14;21432:58;21524:8;21519:2;21511:6;21507:15;21500:33;21315:225;:::o;21546:366::-;21688:3;21709:67;21773:2;21768:3;21709:67;:::i;:::-;21702:74;;21785:93;21874:3;21785:93;:::i;:::-;21903:2;21898:3;21894:12;21887:19;;21546:366;;;:::o;21918:419::-;22084:4;22122:2;22111:9;22107:18;22099:26;;22171:9;22165:4;22161:20;22157:1;22146:9;22142:17;22135:47;22199:131;22325:4;22199:131;:::i;:::-;22191:139;;21918:419;;;:::o;22343:181::-;22483:33;22479:1;22471:6;22467:14;22460:57;22343:181;:::o;22530:366::-;22672:3;22693:67;22757:2;22752:3;22693:67;:::i;:::-;22686:74;;22769:93;22858:3;22769:93;:::i;:::-;22887:2;22882:3;22878:12;22871:19;;22530:366;;;:::o;22902:419::-;23068:4;23106:2;23095:9;23091:18;23083:26;;23155:9;23149:4;23145:20;23141:1;23130:9;23126:17;23119:47;23183:131;23309:4;23183:131;:::i;:::-;23175:139;;22902:419;;;:::o;23327:177::-;23467:29;23463:1;23455:6;23451:14;23444:53;23327:177;:::o;23510:366::-;23652:3;23673:67;23737:2;23732:3;23673:67;:::i;:::-;23666:74;;23749:93;23838:3;23749:93;:::i;:::-;23867:2;23862:3;23858:12;23851:19;;23510:366;;;:::o;23882:419::-;24048:4;24086:2;24075:9;24071:18;24063:26;;24135:9;24129:4;24125:20;24121:1;24110:9;24106:17;24099:47;24163:131;24289:4;24163:131;:::i;:::-;24155:139;;23882:419;;;:::o;24307:223::-;24447:34;24443:1;24435:6;24431:14;24424:58;24516:6;24511:2;24503:6;24499:15;24492:31;24307:223;:::o;24536:366::-;24678:3;24699:67;24763:2;24758:3;24699:67;:::i;:::-;24692:74;;24775:93;24864:3;24775:93;:::i;:::-;24893:2;24888:3;24884:12;24877:19;;24536:366;;;:::o;24908:419::-;25074:4;25112:2;25101:9;25097:18;25089:26;;25161:9;25155:4;25151:20;25147:1;25136:9;25132:17;25125:47;25189:131;25315:4;25189:131;:::i;:::-;25181:139;;24908:419;;;:::o;25333:221::-;25473:34;25469:1;25461:6;25457:14;25450:58;25542:4;25537:2;25529:6;25525:15;25518:29;25333:221;:::o;25560:366::-;25702:3;25723:67;25787:2;25782:3;25723:67;:::i;:::-;25716:74;;25799:93;25888:3;25799:93;:::i;:::-;25917:2;25912:3;25908:12;25901:19;;25560:366;;;:::o;25932:419::-;26098:4;26136:2;26125:9;26121:18;26113:26;;26185:9;26179:4;26175:20;26171:1;26160:9;26156:17;26149:47;26213:131;26339:4;26213:131;:::i;:::-;26205:139;;25932:419;;;:::o;26357:224::-;26497:34;26493:1;26485:6;26481:14;26474:58;26566:7;26561:2;26553:6;26549:15;26542:32;26357:224;:::o;26587:366::-;26729:3;26750:67;26814:2;26809:3;26750:67;:::i;:::-;26743:74;;26826:93;26915:3;26826:93;:::i;:::-;26944:2;26939:3;26935:12;26928:19;;26587:366;;;:::o;26959:419::-;27125:4;27163:2;27152:9;27148:18;27140:26;;27212:9;27206:4;27202:20;27198:1;27187:9;27183:17;27176:47;27240:131;27366:4;27240:131;:::i;:::-;27232:139;;26959:419;;;:::o;27384:222::-;27524:34;27520:1;27512:6;27508:14;27501:58;27593:5;27588:2;27580:6;27576:15;27569:30;27384:222;:::o;27612:366::-;27754:3;27775:67;27839:2;27834:3;27775:67;:::i;:::-;27768:74;;27851:93;27940:3;27851:93;:::i;:::-;27969:2;27964:3;27960:12;27953:19;;27612:366;;;:::o;27984:419::-;28150:4;28188:2;28177:9;28173:18;28165:26;;28237:9;28231:4;28227:20;28223:1;28212:9;28208:17;28201:47;28265:131;28391:4;28265:131;:::i;:::-;28257:139;;27984:419;;;:::o;28409:240::-;28549:34;28545:1;28537:6;28533:14;28526:58;28618:23;28613:2;28605:6;28601:15;28594:48;28409:240;:::o;28655:366::-;28797:3;28818:67;28882:2;28877:3;28818:67;:::i;:::-;28811:74;;28894:93;28983:3;28894:93;:::i;:::-;29012:2;29007:3;29003:12;28996:19;;28655:366;;;:::o;29027:419::-;29193:4;29231:2;29220:9;29216:18;29208:26;;29280:9;29274:4;29270:20;29266:1;29255:9;29251:17;29244:47;29308:131;29434:4;29308:131;:::i;:::-;29300:139;;29027:419;;;:::o;29452:241::-;29592:34;29588:1;29580:6;29576:14;29569:58;29661:24;29656:2;29648:6;29644:15;29637:49;29452:241;:::o;29699:366::-;29841:3;29862:67;29926:2;29921:3;29862:67;:::i;:::-;29855:74;;29938:93;30027:3;29938:93;:::i;:::-;30056:2;30051:3;30047:12;30040:19;;29699:366;;;:::o;30071:419::-;30237:4;30275:2;30264:9;30260:18;30252:26;;30324:9;30318:4;30314:20;30310:1;30299:9;30295:17;30288:47;30352:131;30478:4;30352:131;:::i;:::-;30344:139;;30071:419;;;:::o;30496:194::-;30536:4;30556:20;30574:1;30556:20;:::i;:::-;30551:25;;30590:20;30608:1;30590:20;:::i;:::-;30585:25;;30634:1;30631;30627:9;30619:17;;30658:1;30652:4;30649:11;30646:37;;;30663:18;;:::i;:::-;30646:37;30496:194;;;;:::o;30696:147::-;30797:11;30834:3;30819:18;;30696:147;;;;:::o;30849:114::-;;:::o;30969:398::-;31128:3;31149:83;31230:1;31225:3;31149:83;:::i;:::-;31142:90;;31241:93;31330:3;31241:93;:::i;:::-;31359:1;31354:3;31350:11;31343:18;;30969:398;;;:::o;31373:379::-;31557:3;31579:147;31722:3;31579:147;:::i;:::-;31572:154;;31743:3;31736:10;;31373:379;;;:::o;31758:442::-;31907:4;31945:2;31934:9;31930:18;31922:26;;31958:71;32026:1;32015:9;32011:17;32002:6;31958:71;:::i;:::-;32039:72;32107:2;32096:9;32092:18;32083:6;32039:72;:::i;:::-;32121;32189:2;32178:9;32174:18;32165:6;32121:72;:::i;:::-;31758:442;;;;;;:::o;32206:220::-;32346:34;32342:1;32334:6;32330:14;32323:58;32415:3;32410:2;32402:6;32398:15;32391:28;32206:220;:::o;32432:366::-;32574:3;32595:67;32659:2;32654:3;32595:67;:::i;:::-;32588:74;;32671:93;32760:3;32671:93;:::i;:::-;32789:2;32784:3;32780:12;32773:19;;32432:366;;;:::o;32804:419::-;32970:4;33008:2;32997:9;32993:18;32985:26;;33057:9;33051:4;33047:20;33043:1;33032:9;33028:17;33021:47;33085:131;33211:4;33085:131;:::i;:::-;33077:139;;32804:419;;;:::o;33229:180::-;33277:77;33274:1;33267:88;33374:4;33371:1;33364:15;33398:4;33395:1;33388:15;33415:180;33463:77;33460:1;33453:88;33560:4;33557:1;33550:15;33584:4;33581:1;33574:15;33601:143;33658:5;33689:6;33683:13;33674:22;;33705:33;33732:5;33705:33;:::i;:::-;33601:143;;;;:::o;33750:351::-;33820:6;33869:2;33857:9;33848:7;33844:23;33840:32;33837:119;;;33875:79;;:::i;:::-;33837:119;33995:1;34020:64;34076:7;34067:6;34056:9;34052:22;34020:64;:::i;:::-;34010:74;;33966:128;33750:351;;;;:::o;34107:85::-;34152:7;34181:5;34170:16;;34107:85;;;:::o;34198:158::-;34256:9;34289:61;34307:42;34316:32;34342:5;34316:32;:::i;:::-;34307:42;:::i;:::-;34289:61;:::i;:::-;34276:74;;34198:158;;;:::o;34362:147::-;34457:45;34496:5;34457:45;:::i;:::-;34452:3;34445:58;34362:147;;:::o;34515:114::-;34582:6;34616:5;34610:12;34600:22;;34515:114;;;:::o;34635:184::-;34734:11;34768:6;34763:3;34756:19;34808:4;34803:3;34799:14;34784:29;;34635:184;;;;:::o;34825:132::-;34892:4;34915:3;34907:11;;34945:4;34940:3;34936:14;34928:22;;34825:132;;;:::o;34963:108::-;35040:24;35058:5;35040:24;:::i;:::-;35035:3;35028:37;34963:108;;:::o;35077:179::-;35146:10;35167:46;35209:3;35201:6;35167:46;:::i;:::-;35245:4;35240:3;35236:14;35222:28;;35077:179;;;;:::o;35262:113::-;35332:4;35364;35359:3;35355:14;35347:22;;35262:113;;;:::o;35411:732::-;35530:3;35559:54;35607:5;35559:54;:::i;:::-;35629:86;35708:6;35703:3;35629:86;:::i;:::-;35622:93;;35739:56;35789:5;35739:56;:::i;:::-;35818:7;35849:1;35834:284;35859:6;35856:1;35853:13;35834:284;;;35935:6;35929:13;35962:63;36021:3;36006:13;35962:63;:::i;:::-;35955:70;;36048:60;36101:6;36048:60;:::i;:::-;36038:70;;35894:224;35881:1;35878;35874:9;35869:14;;35834:284;;;35838:14;36134:3;36127:10;;35535:608;;;35411:732;;;;:::o;36149:831::-;36412:4;36450:3;36439:9;36435:19;36427:27;;36464:71;36532:1;36521:9;36517:17;36508:6;36464:71;:::i;:::-;36545:80;36621:2;36610:9;36606:18;36597:6;36545:80;:::i;:::-;36672:9;36666:4;36662:20;36657:2;36646:9;36642:18;36635:48;36700:108;36803:4;36794:6;36700:108;:::i;:::-;36692:116;;36818:72;36886:2;36875:9;36871:18;36862:6;36818:72;:::i;:::-;36900:73;36968:3;36957:9;36953:19;36944:6;36900:73;:::i;:::-;36149:831;;;;;;;;:::o;36986:807::-;37235:4;37273:3;37262:9;37258:19;37250:27;;37287:71;37355:1;37344:9;37340:17;37331:6;37287:71;:::i;:::-;37368:72;37436:2;37425:9;37421:18;37412:6;37368:72;:::i;:::-;37450:80;37526:2;37515:9;37511:18;37502:6;37450:80;:::i;:::-;37540;37616:2;37605:9;37601:18;37592:6;37540:80;:::i;:::-;37630:73;37698:3;37687:9;37683:19;37674:6;37630:73;:::i;:::-;37713;37781:3;37770:9;37766:19;37757:6;37713:73;:::i;:::-;36986:807;;;;;;;;;:::o;37799:663::-;37887:6;37895;37903;37952:2;37940:9;37931:7;37927:23;37923:32;37920:119;;;37958:79;;:::i;:::-;37920:119;38078:1;38103:64;38159:7;38150:6;38139:9;38135:22;38103:64;:::i;:::-;38093:74;;38049:128;38216:2;38242:64;38298:7;38289:6;38278:9;38274:22;38242:64;:::i;:::-;38232:74;;38187:129;38355:2;38381:64;38437:7;38428:6;38417:9;38413:22;38381:64;:::i;:::-;38371:74;;38326:129;37799:663;;;;;:::o

Swarm Source

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