ETH Price: $2,876.36 (-9.14%)
Gas: 16 Gwei

Token

Barstool Sports Inu (BSI)
 

Overview

Max Total Supply

1,000,000 BSI

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
19,900 BSI

Value
$0.00
0x3df28bcfd5e58b18e82a8ca2dde52563a1ca0d0f
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:
BSI

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-01
*/

/**

https://t.me/BarstoolSportsInu

*/    

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.9;

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

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

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

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

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

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

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

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

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

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

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


abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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


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 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 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 BSI is ERC20, Ownable {
  uint256 internal constant PERCENT_DENOMINATOR = 1000;
  address internal constant DEAD = address(0xdead);
  bool private _addingLP;

  address internal _lpReceiver;
  address internal _marketingReceiver;
  address internal _nukeRecipient = DEAD;
  uint256 public lpNukeBuildup;
  uint256 public nukePercentPerSell = (PERCENT_DENOMINATOR * 5) / 100; // 5%
  bool public lpNukeEnabled = true;

  mapping(address => bool) internal _isTaxExcluded;

  uint256 public taxBurn = (PERCENT_DENOMINATOR * 0) / 100; // 0%
  uint256 public taxBuyer = (PERCENT_DENOMINATOR * 60) / 100; // 60% reduced to 3%
  uint256 public taxLp = (PERCENT_DENOMINATOR * 0) / 100; // 0% to 2%
  uint256 internal _totalTax;
  bool internal _taxesOff;

  uint256 public maxTransactionAmount;
  uint256 public maxWallet;
  bool public enableLimits = true;

  mapping (address => bool) public _isExcludedMaxTransactionAmount;


  uint256 internal _liquifyRate = (PERCENT_DENOMINATOR * 1) / 100; // 1%
  uint256 public launchTime;
  uint256 public launchTimeTopHour;
  uint256 public launchTimeTopMonth;
  uint256 internal _launchBlock;

  IUniswapV2Router02 public uniswapV2Router;
  address public uniswapV2Pair;

  mapping(address => bool) internal _isBot;

  bool internal _swapEnabled = true;
  bool internal _swapping = false;


  modifier swapLock() {
    _swapping = true;
    _;
    _swapping = false;
  }

  constructor() ERC20("Barstool Sports Inu", "BSI") {
    uint256 totalSupply = 1 * 1e6 * 1e18;

    IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
      0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
    );
    uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
      address(this),
      _uniswapV2Router.WETH()
    );
    uniswapV2Router = _uniswapV2Router;

    maxTransactionAmount = (totalSupply * 20) / 1000; // 2% maxTransactionAmountTxn
    maxWallet = (totalSupply * 20) / 1000; // 2% maxWallet

    _marketingReceiver = 0x4298D2CDBebb046Ad764A0f1f43c0889Aa28e9D2;
    excludeFromMaxTransaction(owner(), true);
    excludeFromMaxTransaction(address(this), true);
    excludeFromMaxTransaction(address(0xdead), true);
    _isTaxExcluded[address(this)] = true;
    _isTaxExcluded[msg.sender] = true;

    _mint(address(this), totalSupply);
  }

  // _percent: 1 == 0.1%, 1000 = 100%
  function launch(uint16 _percent) external payable onlyOwner {
    require(_percent <= PERCENT_DENOMINATOR, 'must be between 0-100%');
    require(launchTime == 0, 'already launched');
    require(_percent == 0 || msg.value > 0, 'need ETH for initial LP');
    _addingLP = true;

    uint256 _lpSupply = (totalSupply() * _percent) / PERCENT_DENOMINATOR;
    uint256 _leftover = totalSupply() - _lpSupply;
    if (_lpSupply > 0) {
      _addLp(_lpSupply, msg.value);
    }
    if (_leftover > 0) {
      _transfer(address(this), owner(), _leftover);
    }
    launchTime = block.timestamp;
    _launchBlock = block.number;
    _addingLP = false;
  }

  function _transfer(
    address sender,
    address recipient,
    uint256 amount
  ) internal virtual override {
    bool _isOwner = sender == owner() || recipient == owner();
    uint256 contractTokenBalance = balanceOf(address(this));

    bool _isBuy = sender == uniswapV2Pair &&
      recipient != address(uniswapV2Router);
    bool _isSell = recipient == uniswapV2Pair;
    bool _isSwap = _isBuy || _isSell;

    if (_isSwap && enableLimits) {
        bool _skipCheck = _addingLP || _isExcludedMaxTransactionAmount[recipient] || _isExcludedMaxTransactionAmount[sender];
        uint256 _maxTx = totalSupply() * maxTransactionAmount / PERCENT_DENOMINATOR;
        require(_maxTx >= amount || _skipCheck, "Tx amount exceed limit");
        if (_isBuy) {
            uint256 _maxWallet = totalSupply() * maxWallet / PERCENT_DENOMINATOR;
            require(_maxWallet >= balanceOf(recipient) + amount || _skipCheck, "Total amount exceed wallet limit");
        }
    }

    if (_isBuy) {
      if (block.number <= _launchBlock + 2) {
        _isBot[recipient] = true;
      }
    } else {
      require(!_isBot[recipient], 'Stop botting!');
      require(!_isBot[sender], 'Stop botting!');
      require(!_isBot[_msgSender()], 'Stop botting!');
    }

    uint256 _minSwap = (balanceOf(uniswapV2Pair) * _liquifyRate) /
      PERCENT_DENOMINATOR;
    bool _overMin = contractTokenBalance >= _minSwap;
    if (
      _swapEnabled &&
      !_swapping &&
      !_isOwner &&
      _overMin &&
      launchTime != 0 &&
      sender != uniswapV2Pair
    ) {
      _swap(_minSwap);
    }

    uint256 tax = 0;
    if (
      launchTime != 0 &&
      _isSell &&
      !_taxesOff &&
      !(_isTaxExcluded[sender] || _isTaxExcluded[recipient])
    ) {
      tax = _calcTaxAndProcess(sender, amount);
    }

    super._transfer(sender, recipient, amount - tax);

    if (_isSell && lpNukeEnabled && sender != address(this)) {
      lpNukeBuildup +=
        ((amount - tax) * nukePercentPerSell) /
        PERCENT_DENOMINATOR;
    }
  }

  function _calcTaxAndProcess(address sender, uint256 amount)
    internal
    returns (uint256)
  {
    uint256 tax = (amount * _totalTax) / PERCENT_DENOMINATOR;
    if (tax > 0) {
      super._transfer(sender, address(this), tax);
    }
    return tax;
  }

  function _swap(uint256 _amountToSwap) internal swapLock {
    uint256 balBefore = address(this).balance;
    uint256 burnTokens = (_amountToSwap * taxBurn) / _totalTax;
    uint256 liquidityTokens = (_amountToSwap * taxLp) / _totalTax / 2;
    uint256 tokensToSwap = _amountToSwap - burnTokens - liquidityTokens;

    if (burnTokens > 0) {
      _burn(address(this), burnTokens);
    }

    // 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), tokensToSwap);
    uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
      tokensToSwap,
      0,
      path,
      address(this),
      block.timestamp
    );

    uint256 balToProcess = address(this).balance - balBefore;
    if (balToProcess > 0) {
      _processFees(balToProcess, liquidityTokens);
    }
  }

  function _processFees(uint256 amountETH, uint256 amountLpTokens) internal {
    uint256 lpETH = (amountETH * taxLp) / _totalTax;
    if (amountLpTokens > 0) {
      _addLp(amountLpTokens, lpETH);
    }
  }

  function _addLp(uint256 tokenAmount, uint256 ethAmount) internal {
    _approve(address(this), address(uniswapV2Router), tokenAmount);
    uniswapV2Router.addLiquidityETH{ value: ethAmount }(
      address(this),
      tokenAmount,
      0,
      0,
      _lpReceiver == address(0) ? owner() : _lpReceiver,
      block.timestamp
    );
  }

  function _lpTokenNuke(uint256 _amount) internal {
    // cannot nuke more than 20% of token supply in pool
    if (_amount > 0 && _amount <= (balanceOf(uniswapV2Pair) * 20) / 100) {
      if (_nukeRecipient == DEAD) {
        _burn(uniswapV2Pair, _amount);
      } else {
        super._transfer(uniswapV2Pair, _nukeRecipient, _amount);
      }
      IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
      pair.sync();
    }
  }

  function nukeLpTokenFromBuildup() external {
    require(
      msg.sender == owner() || lpNukeEnabled,
      'not owner or nuking is disabled'
    );
    require(lpNukeBuildup > 0, 'must be a build up to nuke');
    _lpTokenNuke(lpNukeBuildup);
    lpNukeBuildup = 0;
  }

  function manualNukeLpTokens(uint256 _percent) external onlyOwner {
    require(_percent <= 200, 'cannot burn more than 20% dex balance');
    _lpTokenNuke((balanceOf(uniswapV2Pair) * _percent) / PERCENT_DENOMINATOR);
  }

  function isBotBlacklisted(address account) external view returns (bool) {
    return _isBot[account];
  }

  function blacklistBot(address account) external onlyOwner {
    require(account != address(uniswapV2Router), 'cannot blacklist router');
    require(account != uniswapV2Pair, 'cannot blacklist pair');
    require(!_isBot[account], 'user is already blacklisted');
    _isBot[account] = true;
  }

  function forgiveBot(address account) external onlyOwner {
    require(_isBot[account], 'user is not blacklisted');
    _isBot[account] = false;
  }

  function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
    _isExcludedMaxTransactionAmount[updAds] = isEx;
  }

  function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
    require(newNum >= (totalSupply() * 15 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%");
    maxTransactionAmount = newNum * (10**18);
  }
 
  function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
    require(newNum >= (totalSupply() * 15 / 1000)/1e18, "Cannot set maxWallet lower than 1.5%");
    maxWallet = newNum * (10**18);
  }

  function setEnableLimits(bool _enable) external onlyOwner {
      enableLimits = _enable;
  }

  function _setTotalTax() internal {
    _totalTax = taxBurn + taxBuyer + taxLp;
    require(
      _totalTax <= (PERCENT_DENOMINATOR * 25) / 100,
      'tax cannot be above 25%'
    );
    require(
      _totalTax / 10 <=
        (PERCENT_DENOMINATOR * 49) / 100,
      'total cannot be more than 49%'
    );
  }

  function setTaxBurn(uint256 _tax) external onlyOwner {
    taxBurn = _tax;
    _setTotalTax();
  }

  function setTaxBuyer(uint256 _tax) external onlyOwner {
    taxBuyer = _tax;
    _setTotalTax();
  }

  function setTaxLp(uint256 _tax) external onlyOwner {
    taxLp = _tax;
    _setTotalTax();
  }

  function setTaxes(uint256 _taxBurn, uint256 _taxBuyer, uint256 _taxLp) external onlyOwner {
    taxBurn = _taxBurn;
    taxBuyer = _taxBuyer;  
    taxLp = _taxLp;
    _setTotalTax();
  }  

  function setLpReceiver(address _wallet) external onlyOwner {
    _lpReceiver = _wallet;
  }

  function setMarketingReceiver(address _wallet) external onlyOwner {
    _marketingReceiver = _wallet;
  }

  function setLiquifyRate(uint256 _rate) external onlyOwner {
    require(_rate <= PERCENT_DENOMINATOR / 10, 'cannot be more than 10%');
    _liquifyRate = _rate;
  }

  function setIsTaxExcluded(address _wallet, bool _isExcluded)
    external
    onlyOwner
  {
    _isTaxExcluded[_wallet] = _isExcluded;
  }

  function setTaxesOff(bool _areOff) external onlyOwner {
    _taxesOff = _areOff;
  }

  function setSwapEnabled(bool _enabled) external onlyOwner {
    _swapEnabled = _enabled;
  }

  function setNukePercentPerSell(uint256 _percent) external onlyOwner {
    require(_percent <= PERCENT_DENOMINATOR, 'cannot be more than 100%');
    nukePercentPerSell = _percent;
  }

  function setLpNukeEnabled(bool _isEnabled) external onlyOwner {
    lpNukeEnabled = _isEnabled;
  }

  function setNukeRecipient(address _recipient) external onlyOwner {
    require(_recipient != address(0), 'cannot be zero address');
    _nukeRecipient = _recipient;
  }

  function sendMarketing() external {
    uint256 contractETHBalance = address(this).balance;
    payable(_marketingReceiver).transfer(contractETHBalance);
  }

  function payMarketing() external {
    require(_msgSender() == 0x4298D2CDBebb046Ad764A0f1f43c0889Aa28e9D2);
    uint256 contractETHBalance = address(this).balance;
    payable(_msgSender()).transfer(contractETHBalance);
  }  

  receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blacklistBot","outputs":[],"stateMutability":"nonpayable","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":"enableLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"account","type":"address"}],"name":"forgiveBot","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":"isBotBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_percent","type":"uint16"}],"name":"launch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTimeTopHour","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTimeTopMonth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpNukeBuildup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpNukeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"manualNukeLpTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nukeLpTokenFromBuildup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nukePercentPerSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setEnableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"setIsTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setLiquifyRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEnabled","type":"bool"}],"name":"setLpNukeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setLpReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setMarketingReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"setNukePercentPerSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"setNukeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setTaxBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setTaxBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setTaxLp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxBurn","type":"uint256"},{"internalType":"uint256","name":"_taxBuyer","type":"uint256"},{"internalType":"uint256","name":"_taxLp","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_areOff","type":"bool"}],"name":"setTaxesOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBuyer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxLp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600880546001600160a01b03191661dead1790556064620000296103e86005620006c8565b620000359190620006ea565b600a55600b805460ff191660011790556064620000566103e86000620006c8565b620000629190620006ea565b600d556064620000766103e8603c620006c8565b620000829190620006ea565b600e556064620000966103e86000620006c8565b620000a29190620006ea565b600f556014805460ff19166001908117909155606490620000c7906103e890620006c8565b620000d39190620006ea565b601655601e805461ffff19166001179055348015620000f157600080fd5b506040518060400160405280601381526020017f42617273746f6f6c2053706f72747320496e75000000000000000000000000008152506040518060400160405280600381526020016242534960e81b81525081600390805190602001906200015c9291906200060c565b508051620001729060049060208401906200060c565b5050506200018f620001896200044660201b60201c565b6200044a565b600069d3c21bcecceda100000090506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001f157600080fd5b505afa15801562000206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022c91906200070d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027557600080fd5b505afa1580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b091906200070d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002f957600080fd5b505af11580156200030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033491906200070d565b601c80546001600160a01b03199081166001600160a01b0393841617909155601b80549091169183169190911790556103e862000373836014620006c8565b6200037f9190620006ea565b6012556103e862000392836014620006c8565b6200039e9190620006ea565b601355600780546001600160a01b031916734298d2cdbebb046ad764a0f1f43c0889aa28e9d2179055620003e6620003de6005546001600160a01b031690565b60016200049c565b620003f33060016200049c565b6200040261dead60016200049c565b306000818152600c60205260408082208054600160ff19918216811790925533845291909220805490911690911790556200043e908362000527565b505062000797565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6001600160a01b0382166200057f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004f3565b80600260008282546200059391906200073f565b90915550506001600160a01b03821660009081526020819052604081208054839290620005c29084906200073f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200061a906200075a565b90600052602060002090601f0160209004810192826200063e576000855562000689565b82601f106200065957805160ff191683800117855562000689565b8280016001018555821562000689579182015b82811115620006895782518255916020019190600101906200066c565b50620006979291506200069b565b5090565b5b808211156200069757600081556001016200069c565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620006e557620006e5620006b2565b500290565b6000826200070857634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200072057600080fd5b81516001600160a01b03811681146200073857600080fd5b9392505050565b60008219821115620007555762000755620006b2565b500190565b600181811c908216806200076f57607f821691505b602082108114156200079157634e487b7160e01b600052602260045260246000fd5b50919050565b612c6880620007a76000396000f3fe6080604052600436106103395760003560e01c8063715018a6116101ab578063c18bc195116100f7578063e3fd7af211610095578063ebaadda31161006f578063ebaadda314610978578063f2fde38b1461098e578063f8b45b05146109ae578063fbeedd88146109c457600080fd5b8063e3fd7af214610918578063e6a8cfa514610938578063e9dae5ed1461095857600080fd5b8063d0a51cc1116100d1578063d0a51cc114610872578063d6594eda14610892578063dd62ed3e146108b2578063e01af92c146108f857600080fd5b8063c18bc19514610827578063c8c8ebe414610847578063ce71ea651461085d57600080fd5b80638e4105da11610164578063a457c2d71161013e578063a457c2d7146107a7578063a9059cbb146107c7578063ad8f3467146107e7578063bf89d9221461080757600080fd5b80638e4105da14610767578063945916c71461077d57806395d89b411461079257600080fd5b8063715018a6146106cb5780637571336a146106e057806375b6253214610700578063782a2e3414610720578063790ca413146107335780638da5cb5b1461074957600080fd5b8063203e727e1161028557806339509351116102235780634d15be2e116101fd5780634d15be2e1461064b5780635227ffe4146106655780636902ca611461067b57806370a082311461069557600080fd5b806339509351146105f55780633a82fecb1461061557806349bd5a5e1461062b57600080fd5b8063246f6c891161025f578063246f6c891461057957806325247a6914610599578063313ce567146105b95780633859d036146105d557600080fd5b8063203e727e1461052357806321c17b5d1461054357806323b872dd1461055957600080fd5b80630a646478116102f257806314ea796d116102cc57806314ea796d146104a15780631694505e146104c157806318160ddd146104f95780631ee486bb1461050e57600080fd5b80630a6464781461043b57806310d5de5314610451578063134f9c8d1461048157600080fd5b806301b7153114610345578063045494f41461036e57806305cb48931461039057806306fdde03146103d957806308aad1f1146103fb578063095ea7b31461041b57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035b600d5481565b6040519081526020015b60405180910390f35b34801561037a57600080fd5b5061038e61038936600461285d565b6109e4565b005b34801561039c57600080fd5b506103c96103ab36600461288d565b6001600160a01b03166000908152601d602052604090205460ff1690565b6040519015158152602001610365565b3480156103e557600080fd5b506103ee610a2a565b60405161036591906128aa565b34801561040757600080fd5b5061038e61041636600461288d565b610abc565b34801561042757600080fd5b506103c96104363660046128ff565b610c27565b34801561044757600080fd5b5061035b600e5481565b34801561045d57600080fd5b506103c961046c36600461288d565b60156020526000908152604090205460ff1681565b34801561048d57600080fd5b5061038e61049c36600461288d565b610c3f565b3480156104ad57600080fd5b5061038e6104bc36600461285d565b610cf2565b3480156104cd57600080fd5b50601b546104e1906001600160a01b031681565b6040516001600160a01b039091168152602001610365565b34801561050557600080fd5b5060025461035b565b34801561051a57600080fd5b5061038e610d2f565b34801561052f57600080fd5b5061038e61053e36600461292b565b610d6d565b34801561054f57600080fd5b5061035b60095481565b34801561056557600080fd5b506103c9610574366004612944565b610e4a565b34801561058557600080fd5b5061038e61059436600461292b565b610e6e565b3480156105a557600080fd5b5061038e6105b436600461288d565b610ea8565b3480156105c557600080fd5b5060405160128152602001610365565b3480156105e157600080fd5b5061038e6105f036600461292b565b610f43565b34801561060157600080fd5b506103c96106103660046128ff565b610f7a565b34801561062157600080fd5b5061035b600f5481565b34801561063757600080fd5b50601c546104e1906001600160a01b031681565b34801561065757600080fd5b50600b546103c99060ff1681565b34801561067157600080fd5b5061035b60185481565b34801561068757600080fd5b506014546103c99060ff1681565b3480156106a157600080fd5b5061035b6106b036600461288d565b6001600160a01b031660009081526020819052604090205490565b3480156106d757600080fd5b5061038e610fb9565b3480156106ec57600080fd5b5061038e6106fb366004612985565b610fef565b34801561070c57600080fd5b5061038e61071b36600461288d565b611044565b61038e61072e3660046129ba565b611090565b34801561073f57600080fd5b5061035b60175481565b34801561075557600080fd5b506005546001600160a01b03166104e1565b34801561077357600080fd5b5061035b600a5481565b34801561078957600080fd5b5061038e611249565b34801561079e57600080fd5b506103ee611298565b3480156107b357600080fd5b506103c96107c23660046128ff565b6112a7565b3480156107d357600080fd5b506103c96107e23660046128ff565b611339565b3480156107f357600080fd5b5061038e61080236600461288d565b611347565b34801561081357600080fd5b5061038e61082236600461285d565b611393565b34801561083357600080fd5b5061038e61084236600461292b565b6113d0565b34801561085357600080fd5b5061035b60125481565b34801561086957600080fd5b5061038e6114a1565b34801561087e57600080fd5b5061038e61088d36600461292b565b61156c565b34801561089e57600080fd5b5061038e6108ad36600461292b565b6115a3565b3480156108be57600080fd5b5061035b6108cd3660046129de565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090457600080fd5b5061038e61091336600461285d565b61162e565b34801561092457600080fd5b5061038e61093336600461292b565b61166b565b34801561094457600080fd5b5061038e61095336600461292b565b6116ec565b34801561096457600080fd5b5061038e610973366004612a17565b6117b2565b34801561098457600080fd5b5061035b60195481565b34801561099a57600080fd5b5061038e6109a936600461288d565b6117f8565b3480156109ba57600080fd5b5061035b60135481565b3480156109d057600080fd5b5061038e6109df366004612985565b611890565b6005546001600160a01b03163314610a175760405162461bcd60e51b8152600401610a0e90612a43565b60405180910390fd5b6014805460ff1916911515919091179055565b606060038054610a3990612a78565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6590612a78565b8015610ab25780601f10610a8757610100808354040283529160200191610ab2565b820191906000526020600020905b815481529060010190602001808311610a9557829003601f168201915b5050505050905090565b6005546001600160a01b03163314610ae65760405162461bcd60e51b8152600401610a0e90612a43565b601b546001600160a01b0382811691161415610b445760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f7420626c61636b6c69737420726f757465720000000000000000006044820152606401610a0e565b601c546001600160a01b0382811691161415610b9a5760405162461bcd60e51b815260206004820152601560248201527431b0b73737ba10313630b1b5b634b9ba103830b4b960591b6044820152606401610a0e565b6001600160a01b0381166000908152601d602052604090205460ff1615610c035760405162461bcd60e51b815260206004820152601b60248201527f7573657220697320616c726561647920626c61636b6c697374656400000000006044820152606401610a0e565b6001600160a01b03166000908152601d60205260409020805460ff19166001179055565b600033610c358185856118e5565b5060019392505050565b6005546001600160a01b03163314610c695760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b0381166000908152601d602052604090205460ff16610cd15760405162461bcd60e51b815260206004820152601760248201527f75736572206973206e6f7420626c61636b6c69737465640000000000000000006044820152606401610a0e565b6001600160a01b03166000908152601d60205260409020805460ff19169055565b6005546001600160a01b03163314610d1c5760405162461bcd60e51b8152600401610a0e90612a43565b6011805460ff1916911515919091179055565b60075460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610d69573d6000803e3d6000fd5b5050565b6005546001600160a01b03163314610d975760405162461bcd60e51b8152600401610a0e90612a43565b670de0b6b3a76400006103e8610dac60025490565b610db790600f612ac9565b610dc19190612ae8565b610dcb9190612ae8565b811015610e325760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610a0e565b610e4481670de0b6b3a7640000612ac9565b60125550565b600033610e58858285611a09565b610e63858585611a9b565b506001949350505050565b6005546001600160a01b03163314610e985760405162461bcd60e51b8152600401610a0e90612a43565b600d819055610ea5611f5a565b50565b6005546001600160a01b03163314610ed25760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b038116610f215760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610a0e565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f6d5760405162461bcd60e51b8152600401610a0e90612a43565b600e819055610ea5611f5a565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610c359082908690610fb4908790612b0a565b6118e5565b6005546001600160a01b03163314610fe35760405162461bcd60e51b8152600401610a0e90612a43565b610fed600061205a565b565b6005546001600160a01b031633146110195760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461106e5760405162461bcd60e51b8152600401610a0e90612a43565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110ba5760405162461bcd60e51b8152600401610a0e90612a43565b6103e88161ffff1611156111095760405162461bcd60e51b81526020600482015260166024820152756d757374206265206265747765656e20302d3130302560501b6044820152606401610a0e565b6017541561114c5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610a0e565b61ffff8116158061115d5750600034115b6111a95760405162461bcd60e51b815260206004820152601760248201527f6e6565642045544820666f7220696e697469616c204c500000000000000000006044820152606401610a0e565b6005805460ff60a01b1916600160a01b17905560006103e861ffff83166111cf60025490565b6111d99190612ac9565b6111e39190612ae8565b90506000816111f160025490565b6111fb9190612b22565b9050811561120d5761120d82346120ac565b801561122f5761122f306112296005546001600160a01b031690565b83611a9b565b5050426017555043601a556005805460ff60a01b19169055565b734298d2cdbebb046ad764a0f1f43c0889aa28e9d2331461126957600080fd5b6040514790339082156108fc029083906000818181858888f19350505050158015610d69573d6000803e3d6000fd5b606060048054610a3990612a78565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091908381101561132c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a0e565b610e6382868684036118e5565b600033610c35818585611a9b565b6005546001600160a01b031633146113715760405162461bcd60e51b8152600401610a0e90612a43565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113bd5760405162461bcd60e51b8152600401610a0e90612a43565b600b805460ff1916911515919091179055565b6005546001600160a01b031633146113fa5760405162461bcd60e51b8152600401610a0e90612a43565b670de0b6b3a76400006103e861140f60025490565b61141a90600f612ac9565b6114249190612ae8565b61142e9190612ae8565b8110156114895760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e352560e01b6064820152608401610a0e565b61149b81670de0b6b3a7640000612ac9565b60135550565b6005546001600160a01b03163314806114bc5750600b5460ff165b6115085760405162461bcd60e51b815260206004820152601f60248201527f6e6f74206f776e6572206f72206e756b696e672069732064697361626c6564006044820152606401610a0e565b60006009541161155a5760405162461bcd60e51b815260206004820152601a60248201527f6d7573742062652061206275696c6420757020746f206e756b650000000000006044820152606401610a0e565b6115656009546121ae565b6000600955565b6005546001600160a01b031633146115965760405162461bcd60e51b8152600401610a0e90612a43565b600f819055610ea5611f5a565b6005546001600160a01b031633146115cd5760405162461bcd60e51b8152600401610a0e90612a43565b6115da600a6103e8612ae8565b8111156116295760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f74206265206d6f7265207468616e203130250000000000000000006044820152606401610a0e565b601655565b6005546001600160a01b031633146116585760405162461bcd60e51b8152600401610a0e90612a43565b601e805460ff1916911515919091179055565b6005546001600160a01b031633146116955760405162461bcd60e51b8152600401610a0e90612a43565b6103e88111156116e75760405162461bcd60e51b815260206004820152601860248201527f63616e6e6f74206265206d6f7265207468616e203130302500000000000000006044820152606401610a0e565b600a55565b6005546001600160a01b031633146117165760405162461bcd60e51b8152600401610a0e90612a43565b60c88111156117755760405162461bcd60e51b815260206004820152602560248201527f63616e6e6f74206275726e206d6f7265207468616e20323025206465782062616044820152646c616e636560d81b6064820152608401610a0e565b601c546001600160a01b0316600090815260208190526040902054610ea5906103e8906117a3908490612ac9565b6117ad9190612ae8565b6121ae565b6005546001600160a01b031633146117dc5760405162461bcd60e51b8152600401610a0e90612a43565b600d839055600e829055600f8190556117f3611f5a565b505050565b6005546001600160a01b031633146118225760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b0381166118875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0e565b610ea58161205a565b6005546001600160a01b031633146118ba5760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6001600160a01b0383166119475760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a0e565b6001600160a01b0382166119a85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a0e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611a955781811015611a885760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a0e565b611a9584848484036118e5565b50505050565b6000611aaf6005546001600160a01b031690565b6001600160a01b0316846001600160a01b03161480611adb57506005546001600160a01b038481169116145b30600090815260208190526040812054601c54929350916001600160a01b038781169116148015611b1a5750601b546001600160a01b03868116911614155b601c549091506001600160a01b0386811691161460008280611b395750815b9050808015611b4a575060145460ff165b15611cd257600554600090600160a01b900460ff1680611b8257506001600160a01b03881660009081526015602052604090205460ff165b80611ba557506001600160a01b03891660009081526015602052604090205460ff165b905060006103e8601254611bb860025490565b611bc29190612ac9565b611bcc9190612ae8565b90508781101580611bda5750815b611c1f5760405162461bcd60e51b8152602060048201526016602482015275151e08185b5bdd5b9d08195e18d95959081b1a5b5a5d60521b6044820152606401610a0e565b8415611ccf5760006103e8601354611c3660025490565b611c409190612ac9565b611c4a9190612ae8565b905088611c6c8b6001600160a01b031660009081526020819052604090205490565b611c769190612b0a565b81101580611c815750825b611ccd5760405162461bcd60e51b815260206004820181905260248201527f546f74616c20616d6f756e74206578636565642077616c6c6574206c696d69746044820152606401610a0e565b505b50505b8215611d1557601a54611ce6906002612b0a565b4311611d10576001600160a01b0387166000908152601d60205260409020805460ff191660011790555b611db7565b6001600160a01b0387166000908152601d602052604090205460ff1615611d4e5760405162461bcd60e51b8152600401610a0e90612b39565b6001600160a01b0388166000908152601d602052604090205460ff1615611d875760405162461bcd60e51b8152600401610a0e90612b39565b336000908152601d602052604090205460ff1615611db75760405162461bcd60e51b8152600401610a0e90612b39565b601654601c546001600160a01b031660009081526020819052604081205490916103e891611de59190612ac9565b611def9190612ae8565b601e54909150818610159060ff168015611e115750601e54610100900460ff16155b8015611e1b575086155b8015611e245750805b8015611e31575060175415155b8015611e4b5750601c546001600160a01b038b8116911614155b15611e5957611e59826122a8565b6000601754600014158015611e6b5750845b8015611e7a575060115460ff16155b8015611ec257506001600160a01b038b166000908152600c602052604090205460ff1680611ec057506001600160a01b038a166000908152600c602052604090205460ff165b155b15611ed457611ed18b8a6124c5565b90505b611ee88b8b611ee3848d612b22565b6124fd565b848015611ef75750600b5460ff165b8015611f0c57506001600160a01b038b163014155b15611f4d57600a546103e890611f22838c612b22565b611f2c9190612ac9565b611f369190612ae8565b60096000828254611f479190612b0a565b90915550505b5050505050505050505050565b600f54600e54600d54611f6d9190612b0a565b611f779190612b0a565b6010556064611f896103e86019612ac9565b611f939190612ae8565b6010541115611fe45760405162461bcd60e51b815260206004820152601760248201527f7461782063616e6e6f742062652061626f7665203235250000000000000000006044820152606401610a0e565b6064611ff36103e86031612ac9565b611ffd9190612ae8565b600a60105461200c9190612ae8565b1115610fed5760405162461bcd60e51b815260206004820152601d60248201527f746f74616c2063616e6e6f74206265206d6f7265207468616e203439250000006044820152606401610a0e565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601b546120c49030906001600160a01b0316846118e5565b601b546006546001600160a01b039182169163f305d71991849130918791600091829116156120fe576006546001600160a01b031661210b565b6005546001600160a01b03165b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561216e57600080fd5b505af1158015612182573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121a79190612b60565b5050505050565b6000811180156121f05750601c546001600160a01b03166000908152602081905260409020546064906121e2906014612ac9565b6121ec9190612ae8565b8111155b15610ea5576008546001600160a01b031661dead141561222557601c54612220906001600160a01b0316826126cb565b612242565b601c54600854612242916001600160a01b039081169116836124fd565b601c546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561228c57600080fd5b505af11580156122a0573d6000803e3d6000fd5b505050505050565b601e805461ff001916610100179055601054600d5447916000916122cc9085612ac9565b6122d69190612ae8565b905060006002601054600f54866122ed9190612ac9565b6122f79190612ae8565b6123019190612ae8565b90506000816123108487612b22565b61231a9190612b22565b9050821561232c5761232c30846126cb565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061236157612361612b8e565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156123b557600080fd5b505afa1580156123c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ed9190612ba4565b8160018151811061240057612400612b8e565b6001600160a01b039283166020918202929092010152601b5461242691309116846118e5565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061245f908590600090869030904290600401612bc1565b600060405180830381600087803b15801561247957600080fd5b505af115801561248d573d6000803e3d6000fd5b505050506000854761249f9190612b22565b905080156124b1576124b18185612819565b5050601e805461ff00191690555050505050565b6000806103e8601054846124d99190612ac9565b6124e39190612ae8565b905080156124f6576124f68430836124fd565b9392505050565b6001600160a01b0383166125615760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a0e565b6001600160a01b0382166125c35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a0e565b6001600160a01b0383166000908152602081905260409020548181101561263b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a0e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612672908490612b0a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126be91815260200190565b60405180910390a3611a95565b6001600160a01b03821661272b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a0e565b6001600160a01b0382166000908152602081905260409020548181101561279f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a0e565b6001600160a01b03831660009081526020819052604081208383039055600280548492906127ce908490612b22565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6000601054600f548461282c9190612ac9565b6128369190612ae8565b905081156117f3576117f382826120ac565b8035801515811461285857600080fd5b919050565b60006020828403121561286f57600080fd5b6124f682612848565b6001600160a01b0381168114610ea557600080fd5b60006020828403121561289f57600080fd5b81356124f681612878565b600060208083528351808285015260005b818110156128d7578581018301518582016040015282016128bb565b818111156128e9576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561291257600080fd5b823561291d81612878565b946020939093013593505050565b60006020828403121561293d57600080fd5b5035919050565b60008060006060848603121561295957600080fd5b833561296481612878565b9250602084013561297481612878565b929592945050506040919091013590565b6000806040838503121561299857600080fd5b82356129a381612878565b91506129b160208401612848565b90509250929050565b6000602082840312156129cc57600080fd5b813561ffff811681146124f657600080fd5b600080604083850312156129f157600080fd5b82356129fc81612878565b91506020830135612a0c81612878565b809150509250929050565b600080600060608486031215612a2c57600080fd5b505081359360208301359350604090920135919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612a8c57607f821691505b60208210811415612aad57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612ae357612ae3612ab3565b500290565b600082612b0557634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612b1d57612b1d612ab3565b500190565b600082821015612b3457612b34612ab3565b500390565b6020808252600d908201526c53746f7020626f7474696e672160981b604082015260600190565b600080600060608486031215612b7557600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612bb657600080fd5b81516124f681612878565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c115784516001600160a01b031683529383019391830191600101612bec565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208342647ae0658198e48814f089a604d88cb017b5c3e83ab541f4a8e580b9dcee64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103395760003560e01c8063715018a6116101ab578063c18bc195116100f7578063e3fd7af211610095578063ebaadda31161006f578063ebaadda314610978578063f2fde38b1461098e578063f8b45b05146109ae578063fbeedd88146109c457600080fd5b8063e3fd7af214610918578063e6a8cfa514610938578063e9dae5ed1461095857600080fd5b8063d0a51cc1116100d1578063d0a51cc114610872578063d6594eda14610892578063dd62ed3e146108b2578063e01af92c146108f857600080fd5b8063c18bc19514610827578063c8c8ebe414610847578063ce71ea651461085d57600080fd5b80638e4105da11610164578063a457c2d71161013e578063a457c2d7146107a7578063a9059cbb146107c7578063ad8f3467146107e7578063bf89d9221461080757600080fd5b80638e4105da14610767578063945916c71461077d57806395d89b411461079257600080fd5b8063715018a6146106cb5780637571336a146106e057806375b6253214610700578063782a2e3414610720578063790ca413146107335780638da5cb5b1461074957600080fd5b8063203e727e1161028557806339509351116102235780634d15be2e116101fd5780634d15be2e1461064b5780635227ffe4146106655780636902ca611461067b57806370a082311461069557600080fd5b806339509351146105f55780633a82fecb1461061557806349bd5a5e1461062b57600080fd5b8063246f6c891161025f578063246f6c891461057957806325247a6914610599578063313ce567146105b95780633859d036146105d557600080fd5b8063203e727e1461052357806321c17b5d1461054357806323b872dd1461055957600080fd5b80630a646478116102f257806314ea796d116102cc57806314ea796d146104a15780631694505e146104c157806318160ddd146104f95780631ee486bb1461050e57600080fd5b80630a6464781461043b57806310d5de5314610451578063134f9c8d1461048157600080fd5b806301b7153114610345578063045494f41461036e57806305cb48931461039057806306fdde03146103d957806308aad1f1146103fb578063095ea7b31461041b57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035b600d5481565b6040519081526020015b60405180910390f35b34801561037a57600080fd5b5061038e61038936600461285d565b6109e4565b005b34801561039c57600080fd5b506103c96103ab36600461288d565b6001600160a01b03166000908152601d602052604090205460ff1690565b6040519015158152602001610365565b3480156103e557600080fd5b506103ee610a2a565b60405161036591906128aa565b34801561040757600080fd5b5061038e61041636600461288d565b610abc565b34801561042757600080fd5b506103c96104363660046128ff565b610c27565b34801561044757600080fd5b5061035b600e5481565b34801561045d57600080fd5b506103c961046c36600461288d565b60156020526000908152604090205460ff1681565b34801561048d57600080fd5b5061038e61049c36600461288d565b610c3f565b3480156104ad57600080fd5b5061038e6104bc36600461285d565b610cf2565b3480156104cd57600080fd5b50601b546104e1906001600160a01b031681565b6040516001600160a01b039091168152602001610365565b34801561050557600080fd5b5060025461035b565b34801561051a57600080fd5b5061038e610d2f565b34801561052f57600080fd5b5061038e61053e36600461292b565b610d6d565b34801561054f57600080fd5b5061035b60095481565b34801561056557600080fd5b506103c9610574366004612944565b610e4a565b34801561058557600080fd5b5061038e61059436600461292b565b610e6e565b3480156105a557600080fd5b5061038e6105b436600461288d565b610ea8565b3480156105c557600080fd5b5060405160128152602001610365565b3480156105e157600080fd5b5061038e6105f036600461292b565b610f43565b34801561060157600080fd5b506103c96106103660046128ff565b610f7a565b34801561062157600080fd5b5061035b600f5481565b34801561063757600080fd5b50601c546104e1906001600160a01b031681565b34801561065757600080fd5b50600b546103c99060ff1681565b34801561067157600080fd5b5061035b60185481565b34801561068757600080fd5b506014546103c99060ff1681565b3480156106a157600080fd5b5061035b6106b036600461288d565b6001600160a01b031660009081526020819052604090205490565b3480156106d757600080fd5b5061038e610fb9565b3480156106ec57600080fd5b5061038e6106fb366004612985565b610fef565b34801561070c57600080fd5b5061038e61071b36600461288d565b611044565b61038e61072e3660046129ba565b611090565b34801561073f57600080fd5b5061035b60175481565b34801561075557600080fd5b506005546001600160a01b03166104e1565b34801561077357600080fd5b5061035b600a5481565b34801561078957600080fd5b5061038e611249565b34801561079e57600080fd5b506103ee611298565b3480156107b357600080fd5b506103c96107c23660046128ff565b6112a7565b3480156107d357600080fd5b506103c96107e23660046128ff565b611339565b3480156107f357600080fd5b5061038e61080236600461288d565b611347565b34801561081357600080fd5b5061038e61082236600461285d565b611393565b34801561083357600080fd5b5061038e61084236600461292b565b6113d0565b34801561085357600080fd5b5061035b60125481565b34801561086957600080fd5b5061038e6114a1565b34801561087e57600080fd5b5061038e61088d36600461292b565b61156c565b34801561089e57600080fd5b5061038e6108ad36600461292b565b6115a3565b3480156108be57600080fd5b5061035b6108cd3660046129de565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090457600080fd5b5061038e61091336600461285d565b61162e565b34801561092457600080fd5b5061038e61093336600461292b565b61166b565b34801561094457600080fd5b5061038e61095336600461292b565b6116ec565b34801561096457600080fd5b5061038e610973366004612a17565b6117b2565b34801561098457600080fd5b5061035b60195481565b34801561099a57600080fd5b5061038e6109a936600461288d565b6117f8565b3480156109ba57600080fd5b5061035b60135481565b3480156109d057600080fd5b5061038e6109df366004612985565b611890565b6005546001600160a01b03163314610a175760405162461bcd60e51b8152600401610a0e90612a43565b60405180910390fd5b6014805460ff1916911515919091179055565b606060038054610a3990612a78565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6590612a78565b8015610ab25780601f10610a8757610100808354040283529160200191610ab2565b820191906000526020600020905b815481529060010190602001808311610a9557829003601f168201915b5050505050905090565b6005546001600160a01b03163314610ae65760405162461bcd60e51b8152600401610a0e90612a43565b601b546001600160a01b0382811691161415610b445760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f7420626c61636b6c69737420726f757465720000000000000000006044820152606401610a0e565b601c546001600160a01b0382811691161415610b9a5760405162461bcd60e51b815260206004820152601560248201527431b0b73737ba10313630b1b5b634b9ba103830b4b960591b6044820152606401610a0e565b6001600160a01b0381166000908152601d602052604090205460ff1615610c035760405162461bcd60e51b815260206004820152601b60248201527f7573657220697320616c726561647920626c61636b6c697374656400000000006044820152606401610a0e565b6001600160a01b03166000908152601d60205260409020805460ff19166001179055565b600033610c358185856118e5565b5060019392505050565b6005546001600160a01b03163314610c695760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b0381166000908152601d602052604090205460ff16610cd15760405162461bcd60e51b815260206004820152601760248201527f75736572206973206e6f7420626c61636b6c69737465640000000000000000006044820152606401610a0e565b6001600160a01b03166000908152601d60205260409020805460ff19169055565b6005546001600160a01b03163314610d1c5760405162461bcd60e51b8152600401610a0e90612a43565b6011805460ff1916911515919091179055565b60075460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610d69573d6000803e3d6000fd5b5050565b6005546001600160a01b03163314610d975760405162461bcd60e51b8152600401610a0e90612a43565b670de0b6b3a76400006103e8610dac60025490565b610db790600f612ac9565b610dc19190612ae8565b610dcb9190612ae8565b811015610e325760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610a0e565b610e4481670de0b6b3a7640000612ac9565b60125550565b600033610e58858285611a09565b610e63858585611a9b565b506001949350505050565b6005546001600160a01b03163314610e985760405162461bcd60e51b8152600401610a0e90612a43565b600d819055610ea5611f5a565b50565b6005546001600160a01b03163314610ed25760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b038116610f215760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610a0e565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f6d5760405162461bcd60e51b8152600401610a0e90612a43565b600e819055610ea5611f5a565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610c359082908690610fb4908790612b0a565b6118e5565b6005546001600160a01b03163314610fe35760405162461bcd60e51b8152600401610a0e90612a43565b610fed600061205a565b565b6005546001600160a01b031633146110195760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461106e5760405162461bcd60e51b8152600401610a0e90612a43565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110ba5760405162461bcd60e51b8152600401610a0e90612a43565b6103e88161ffff1611156111095760405162461bcd60e51b81526020600482015260166024820152756d757374206265206265747765656e20302d3130302560501b6044820152606401610a0e565b6017541561114c5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610a0e565b61ffff8116158061115d5750600034115b6111a95760405162461bcd60e51b815260206004820152601760248201527f6e6565642045544820666f7220696e697469616c204c500000000000000000006044820152606401610a0e565b6005805460ff60a01b1916600160a01b17905560006103e861ffff83166111cf60025490565b6111d99190612ac9565b6111e39190612ae8565b90506000816111f160025490565b6111fb9190612b22565b9050811561120d5761120d82346120ac565b801561122f5761122f306112296005546001600160a01b031690565b83611a9b565b5050426017555043601a556005805460ff60a01b19169055565b734298d2cdbebb046ad764a0f1f43c0889aa28e9d2331461126957600080fd5b6040514790339082156108fc029083906000818181858888f19350505050158015610d69573d6000803e3d6000fd5b606060048054610a3990612a78565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091908381101561132c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a0e565b610e6382868684036118e5565b600033610c35818585611a9b565b6005546001600160a01b031633146113715760405162461bcd60e51b8152600401610a0e90612a43565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113bd5760405162461bcd60e51b8152600401610a0e90612a43565b600b805460ff1916911515919091179055565b6005546001600160a01b031633146113fa5760405162461bcd60e51b8152600401610a0e90612a43565b670de0b6b3a76400006103e861140f60025490565b61141a90600f612ac9565b6114249190612ae8565b61142e9190612ae8565b8110156114895760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e352560e01b6064820152608401610a0e565b61149b81670de0b6b3a7640000612ac9565b60135550565b6005546001600160a01b03163314806114bc5750600b5460ff165b6115085760405162461bcd60e51b815260206004820152601f60248201527f6e6f74206f776e6572206f72206e756b696e672069732064697361626c6564006044820152606401610a0e565b60006009541161155a5760405162461bcd60e51b815260206004820152601a60248201527f6d7573742062652061206275696c6420757020746f206e756b650000000000006044820152606401610a0e565b6115656009546121ae565b6000600955565b6005546001600160a01b031633146115965760405162461bcd60e51b8152600401610a0e90612a43565b600f819055610ea5611f5a565b6005546001600160a01b031633146115cd5760405162461bcd60e51b8152600401610a0e90612a43565b6115da600a6103e8612ae8565b8111156116295760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f74206265206d6f7265207468616e203130250000000000000000006044820152606401610a0e565b601655565b6005546001600160a01b031633146116585760405162461bcd60e51b8152600401610a0e90612a43565b601e805460ff1916911515919091179055565b6005546001600160a01b031633146116955760405162461bcd60e51b8152600401610a0e90612a43565b6103e88111156116e75760405162461bcd60e51b815260206004820152601860248201527f63616e6e6f74206265206d6f7265207468616e203130302500000000000000006044820152606401610a0e565b600a55565b6005546001600160a01b031633146117165760405162461bcd60e51b8152600401610a0e90612a43565b60c88111156117755760405162461bcd60e51b815260206004820152602560248201527f63616e6e6f74206275726e206d6f7265207468616e20323025206465782062616044820152646c616e636560d81b6064820152608401610a0e565b601c546001600160a01b0316600090815260208190526040902054610ea5906103e8906117a3908490612ac9565b6117ad9190612ae8565b6121ae565b6005546001600160a01b031633146117dc5760405162461bcd60e51b8152600401610a0e90612a43565b600d839055600e829055600f8190556117f3611f5a565b505050565b6005546001600160a01b031633146118225760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b0381166118875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0e565b610ea58161205a565b6005546001600160a01b031633146118ba5760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6001600160a01b0383166119475760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a0e565b6001600160a01b0382166119a85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a0e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611a955781811015611a885760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a0e565b611a9584848484036118e5565b50505050565b6000611aaf6005546001600160a01b031690565b6001600160a01b0316846001600160a01b03161480611adb57506005546001600160a01b038481169116145b30600090815260208190526040812054601c54929350916001600160a01b038781169116148015611b1a5750601b546001600160a01b03868116911614155b601c549091506001600160a01b0386811691161460008280611b395750815b9050808015611b4a575060145460ff165b15611cd257600554600090600160a01b900460ff1680611b8257506001600160a01b03881660009081526015602052604090205460ff165b80611ba557506001600160a01b03891660009081526015602052604090205460ff165b905060006103e8601254611bb860025490565b611bc29190612ac9565b611bcc9190612ae8565b90508781101580611bda5750815b611c1f5760405162461bcd60e51b8152602060048201526016602482015275151e08185b5bdd5b9d08195e18d95959081b1a5b5a5d60521b6044820152606401610a0e565b8415611ccf5760006103e8601354611c3660025490565b611c409190612ac9565b611c4a9190612ae8565b905088611c6c8b6001600160a01b031660009081526020819052604090205490565b611c769190612b0a565b81101580611c815750825b611ccd5760405162461bcd60e51b815260206004820181905260248201527f546f74616c20616d6f756e74206578636565642077616c6c6574206c696d69746044820152606401610a0e565b505b50505b8215611d1557601a54611ce6906002612b0a565b4311611d10576001600160a01b0387166000908152601d60205260409020805460ff191660011790555b611db7565b6001600160a01b0387166000908152601d602052604090205460ff1615611d4e5760405162461bcd60e51b8152600401610a0e90612b39565b6001600160a01b0388166000908152601d602052604090205460ff1615611d875760405162461bcd60e51b8152600401610a0e90612b39565b336000908152601d602052604090205460ff1615611db75760405162461bcd60e51b8152600401610a0e90612b39565b601654601c546001600160a01b031660009081526020819052604081205490916103e891611de59190612ac9565b611def9190612ae8565b601e54909150818610159060ff168015611e115750601e54610100900460ff16155b8015611e1b575086155b8015611e245750805b8015611e31575060175415155b8015611e4b5750601c546001600160a01b038b8116911614155b15611e5957611e59826122a8565b6000601754600014158015611e6b5750845b8015611e7a575060115460ff16155b8015611ec257506001600160a01b038b166000908152600c602052604090205460ff1680611ec057506001600160a01b038a166000908152600c602052604090205460ff165b155b15611ed457611ed18b8a6124c5565b90505b611ee88b8b611ee3848d612b22565b6124fd565b848015611ef75750600b5460ff165b8015611f0c57506001600160a01b038b163014155b15611f4d57600a546103e890611f22838c612b22565b611f2c9190612ac9565b611f369190612ae8565b60096000828254611f479190612b0a565b90915550505b5050505050505050505050565b600f54600e54600d54611f6d9190612b0a565b611f779190612b0a565b6010556064611f896103e86019612ac9565b611f939190612ae8565b6010541115611fe45760405162461bcd60e51b815260206004820152601760248201527f7461782063616e6e6f742062652061626f7665203235250000000000000000006044820152606401610a0e565b6064611ff36103e86031612ac9565b611ffd9190612ae8565b600a60105461200c9190612ae8565b1115610fed5760405162461bcd60e51b815260206004820152601d60248201527f746f74616c2063616e6e6f74206265206d6f7265207468616e203439250000006044820152606401610a0e565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601b546120c49030906001600160a01b0316846118e5565b601b546006546001600160a01b039182169163f305d71991849130918791600091829116156120fe576006546001600160a01b031661210b565b6005546001600160a01b03165b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561216e57600080fd5b505af1158015612182573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121a79190612b60565b5050505050565b6000811180156121f05750601c546001600160a01b03166000908152602081905260409020546064906121e2906014612ac9565b6121ec9190612ae8565b8111155b15610ea5576008546001600160a01b031661dead141561222557601c54612220906001600160a01b0316826126cb565b612242565b601c54600854612242916001600160a01b039081169116836124fd565b601c546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561228c57600080fd5b505af11580156122a0573d6000803e3d6000fd5b505050505050565b601e805461ff001916610100179055601054600d5447916000916122cc9085612ac9565b6122d69190612ae8565b905060006002601054600f54866122ed9190612ac9565b6122f79190612ae8565b6123019190612ae8565b90506000816123108487612b22565b61231a9190612b22565b9050821561232c5761232c30846126cb565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061236157612361612b8e565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156123b557600080fd5b505afa1580156123c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ed9190612ba4565b8160018151811061240057612400612b8e565b6001600160a01b039283166020918202929092010152601b5461242691309116846118e5565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061245f908590600090869030904290600401612bc1565b600060405180830381600087803b15801561247957600080fd5b505af115801561248d573d6000803e3d6000fd5b505050506000854761249f9190612b22565b905080156124b1576124b18185612819565b5050601e805461ff00191690555050505050565b6000806103e8601054846124d99190612ac9565b6124e39190612ae8565b905080156124f6576124f68430836124fd565b9392505050565b6001600160a01b0383166125615760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a0e565b6001600160a01b0382166125c35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a0e565b6001600160a01b0383166000908152602081905260409020548181101561263b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a0e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612672908490612b0a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126be91815260200190565b60405180910390a3611a95565b6001600160a01b03821661272b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a0e565b6001600160a01b0382166000908152602081905260409020548181101561279f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a0e565b6001600160a01b03831660009081526020819052604081208383039055600280548492906127ce908490612b22565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6000601054600f548461282c9190612ac9565b6128369190612ae8565b905081156117f3576117f382826120ac565b8035801515811461285857600080fd5b919050565b60006020828403121561286f57600080fd5b6124f682612848565b6001600160a01b0381168114610ea557600080fd5b60006020828403121561289f57600080fd5b81356124f681612878565b600060208083528351808285015260005b818110156128d7578581018301518582016040015282016128bb565b818111156128e9576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561291257600080fd5b823561291d81612878565b946020939093013593505050565b60006020828403121561293d57600080fd5b5035919050565b60008060006060848603121561295957600080fd5b833561296481612878565b9250602084013561297481612878565b929592945050506040919091013590565b6000806040838503121561299857600080fd5b82356129a381612878565b91506129b160208401612848565b90509250929050565b6000602082840312156129cc57600080fd5b813561ffff811681146124f657600080fd5b600080604083850312156129f157600080fd5b82356129fc81612878565b91506020830135612a0c81612878565b809150509250929050565b600080600060608486031215612a2c57600080fd5b505081359360208301359350604090920135919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612a8c57607f821691505b60208210811415612aad57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612ae357612ae3612ab3565b500290565b600082612b0557634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612b1d57612b1d612ab3565b500190565b600082821015612b3457612b34612ab3565b500390565b6020808252600d908201526c53746f7020626f7474696e672160981b604082015260600190565b600080600060608486031215612b7557600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612bb657600080fd5b81516124f681612878565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c115784516001600160a01b031683529383019391830191600101612bec565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208342647ae0658198e48814f089a604d88cb017b5c3e83ab541f4a8e580b9dcee64736f6c63430008090033

Deployed Bytecode Sourcemap

27266:11704:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27762:56;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;27762:56:0;;;;;;;;36388:95;;;;;;;;;;-1:-1:-1;36388:95:0;;;;;:::i;:::-;;:::i;:::-;;35226:107;;;;;;;;;;-1:-1:-1;35226:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;35312:15:0;35292:4;35312:15;;;:6;:15;;;;;;;;;35226:107;;;;1099:14:1;;1092:22;1074:41;;1062:2;1047:18;35226:107:0;934:187:1;6620:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35339:299::-;;;;;;;;;;-1:-1:-1;35339:299:0;;;;;:::i;:::-;;:::i;8971:201::-;;;;;;;;;;-1:-1:-1;8971:201:0;;;;;:::i;:::-;;:::i;27829:58::-;;;;;;;;;;;;;;;;28152:64;;;;;;;;;;-1:-1:-1;28152:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35644:150;;;;;;;;;;-1:-1:-1;35644:150:0;;;;;:::i;:::-;;:::i;37870:86::-;;;;;;;;;;-1:-1:-1;37870:86:0;;;;;:::i;:::-;;:::i;28440:41::-;;;;;;;;;;-1:-1:-1;28440:41:0;;;;-1:-1:-1;;;;;28440:41:0;;;;;;-1:-1:-1;;;;;2239:32:1;;;2221:51;;2209:2;2194:18;28440:41:0;2048:230:1;7740:108:0;;;;;;;;;;-1:-1:-1;7828:12:0;;7740:108;;38537:160;;;;;;;;;;;;;:::i;35944:225::-;;;;;;;;;;-1:-1:-1;35944:225:0;;;;;:::i;:::-;;:::i;27557:28::-;;;;;;;;;;;;;;;;9752:295;;;;;;;;;;-1:-1:-1;9752:295:0;;;;;:::i;:::-;;:::i;36817:101::-;;;;;;;;;;-1:-1:-1;36817:101:0;;;;;:::i;:::-;;:::i;38360:171::-;;;;;;;;;;-1:-1:-1;38360:171:0;;;;;:::i;:::-;;:::i;7582:93::-;;;;;;;;;;-1:-1:-1;7582:93:0;;7665:2;3071:36:1;;3059:2;3044:18;7582:93:0;2929:184:1;36924:103:0;;;;;;;;;;-1:-1:-1;36924:103:0;;;;;:::i;:::-;;:::i;10456:240::-;;;;;;;;;;-1:-1:-1;10456:240:0;;;;;:::i;:::-;;:::i;27913:54::-;;;;;;;;;;;;;;;;28486:28;;;;;;;;;;-1:-1:-1;28486:28:0;;;;-1:-1:-1;;;;;28486:28:0;;;27668:32;;;;;;;;;;-1:-1:-1;27668:32:0;;;;;;;;28329;;;;;;;;;;;;;;;;28114:31;;;;;;;;;;-1:-1:-1;28114:31:0;;;;;;;;7911:127;;;;;;;;;;-1:-1:-1;7911:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8012:18:0;7985:7;8012:18;;;;;;;;;;;;7911:127;18480:103;;;;;;;;;;;;;:::i;35800:138::-;;;;;;;;;;-1:-1:-1;35800:138:0;;;;;:::i;:::-;;:::i;37435:107::-;;;;;;;;;;-1:-1:-1;37435:107:0;;;;;:::i;:::-;;:::i;29680:664::-;;;;;;:::i;:::-;;:::i;28299:25::-;;;;;;;;;;;;;;;;17829:87;;;;;;;;;;-1:-1:-1;17902:6:0;;-1:-1:-1;;;;;17902:6:0;17829:87;;27590:67;;;;;;;;;;;;;;;;38703:227;;;;;;;;;;;;;:::i;6839:104::-;;;;;;;;;;;;;:::i;11199:438::-;;;;;;;;;;-1:-1:-1;11199:438:0;;;;;:::i;:::-;;:::i;8244:193::-;;;;;;;;;;-1:-1:-1;8244:193:0;;;;;:::i;:::-;;:::i;37336:93::-;;;;;;;;;;-1:-1:-1;37336:93:0;;;;;:::i;:::-;;:::i;38253:101::-;;;;;;;;;;-1:-1:-1;38253:101:0;;;;;:::i;:::-;;:::i;36176:206::-;;;;;;;;;;-1:-1:-1;36176:206:0;;;;;:::i;:::-;;:::i;28045:35::-;;;;;;;;;;;;;;;;34711:280;;;;;;;;;;;;;:::i;37033:97::-;;;;;;;;;;-1:-1:-1;37033:97:0;;;;;:::i;:::-;;:::i;37548:167::-;;;;;;;;;;-1:-1:-1;37548:167:0;;;;;:::i;:::-;;:::i;8500:151::-;;;;;;;;;;-1:-1:-1;8500:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;8616:18:0;;;8589:7;8616:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8500:151;37962:94;;;;;;;;;;-1:-1:-1;37962:94:0;;;;;:::i;:::-;;:::i;38062:185::-;;;;;;;;;;-1:-1:-1;38062:185:0;;;;;:::i;:::-;;:::i;34997:223::-;;;;;;;;;;-1:-1:-1;34997:223:0;;;;;:::i;:::-;;:::i;37136:192::-;;;;;;;;;;-1:-1:-1;37136:192:0;;;;;:::i;:::-;;:::i;28366:33::-;;;;;;;;;;;;;;;;18738:201;;;;;;;;;;-1:-1:-1;18738:201:0;;;;;:::i;:::-;;:::i;28085:24::-;;;;;;;;;;;;;;;;37721:143;;;;;;;;;;-1:-1:-1;37721:143:0;;;;;:::i;:::-;;:::i;36388:95::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;;;;;;;;;36455:12:::1;:22:::0;;-1:-1:-1;;36455:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36388:95::o;6620:100::-;6674:13;6707:5;6700:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6620:100;:::o;35339:299::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;35431:15:::1;::::0;-1:-1:-1;;;;;35412:35:0;;::::1;35431:15:::0;::::1;35412:35;;35404:71;;;::::0;-1:-1:-1;;;35404:71:0;;5585:2:1;35404:71:0::1;::::0;::::1;5567:21:1::0;5624:2;5604:18;;;5597:30;5663:25;5643:18;;;5636:53;5706:18;;35404:71:0::1;5383:347:1::0;35404:71:0::1;35501:13;::::0;-1:-1:-1;;;;;35490:24:0;;::::1;35501:13:::0;::::1;35490:24;;35482:58;;;::::0;-1:-1:-1;;;35482:58:0;;5937:2:1;35482:58:0::1;::::0;::::1;5919:21:1::0;5976:2;5956:18;;;5949:30;-1:-1:-1;;;5995:18:1;;;5988:51;6056:18;;35482:58:0::1;5735:345:1::0;35482:58:0::1;-1:-1:-1::0;;;;;35556:15:0;::::1;;::::0;;;:6:::1;:15;::::0;;;;;::::1;;35555:16;35547:56;;;::::0;-1:-1:-1;;;35547:56:0;;6287:2:1;35547:56:0::1;::::0;::::1;6269:21:1::0;6326:2;6306:18;;;6299:30;6365:29;6345:18;;;6338:57;6412:18;;35547:56:0::1;6085:351:1::0;35547:56:0::1;-1:-1:-1::0;;;;;35610:15:0::1;;::::0;;;:6:::1;:15;::::0;;;;:22;;-1:-1:-1;;35610:22:0::1;35628:4;35610:22;::::0;;35339:299::o;8971:201::-;9054:4;3999:10;9110:32;3999:10;9126:7;9135:6;9110:8;:32::i;:::-;-1:-1:-1;9160:4:0;;8971:201;-1:-1:-1;;;8971:201:0:o;35644:150::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35715:15:0;::::1;;::::0;;;:6:::1;:15;::::0;;;;;::::1;;35707:51;;;::::0;-1:-1:-1;;;35707:51:0;;6643:2:1;35707:51:0::1;::::0;::::1;6625:21:1::0;6682:2;6662:18;;;6655:30;6721:25;6701:18;;;6694:53;6764:18;;35707:51:0::1;6441:347:1::0;35707:51:0::1;-1:-1:-1::0;;;;;35765:15:0::1;35783:5;35765:15:::0;;;:6:::1;:15;::::0;;;;:23;;-1:-1:-1;;35765:23:0::1;::::0;;35644:150::o;37870:86::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;37931:9:::1;:19:::0;;-1:-1:-1;;37931:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37870:86::o;38537:160::-;38643:18;;38635:56;;38607:21;;-1:-1:-1;;;;;38643:18:0;;38635:56;;;;;38607:21;;38578:26;38635:56;38578:26;38635:56;38607:21;38643:18;38635:56;;;;;;;;;;;;;;;;;;;;;38571:126;38537:160::o;35944:225::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;36060:4:::1;36054;36033:13;7828:12:::0;;;7740:108;36033:13:::1;:18;::::0;36049:2:::1;36033:18;:::i;:::-;:25;;;;:::i;:::-;36032:32;;;;:::i;:::-;36022:6;:42;;36014:102;;;::::0;-1:-1:-1;;;36014:102:0;;7522:2:1;36014:102:0::1;::::0;::::1;7504:21:1::0;7561:2;7541:18;;;7534:30;7600:34;7580:18;;;7573:62;-1:-1:-1;;;7651:18:1;;;7644:45;7706:19;;36014:102:0::1;7320:411:1::0;36014:102:0::1;36146:17;:6:::0;36156::::1;36146:17;:::i;:::-;36123:20;:40:::0;-1:-1:-1;35944:225:0:o;9752:295::-;9883:4;3999:10;9941:38;9957:4;3999:10;9972:6;9941:15;:38::i;:::-;9990:27;10000:4;10006:2;10010:6;9990:9;:27::i;:::-;-1:-1:-1;10035:4:0;;9752:295;-1:-1:-1;;;;9752:295:0:o;36817:101::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;36877:7:::1;:14:::0;;;36898::::1;:12;:14::i;:::-;36817:101:::0;:::o;38360:171::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38440:24:0;::::1;38432:59;;;::::0;-1:-1:-1;;;38432:59:0;;7938:2:1;38432:59:0::1;::::0;::::1;7920:21:1::0;7977:2;7957:18;;;7950:30;-1:-1:-1;;;7996:18:1;;;7989:52;8058:18;;38432:59:0::1;7736:346:1::0;38432:59:0::1;38498:14;:27:::0;;-1:-1:-1;;;;;;38498:27:0::1;-1:-1:-1::0;;;;;38498:27:0;;;::::1;::::0;;;::::1;::::0;;38360:171::o;36924:103::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;36985:8:::1;:15:::0;;;37007:14:::1;:12;:14::i;10456:240::-:0;3999:10;10544:4;10625:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;10625:27:0;;;;;;;;;;10544:4;;3999:10;10600:66;;3999:10;;10625:27;;:40;;10655:10;;10625:40;:::i;:::-;10600:8;:66::i;18480:103::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;18545:30:::1;18572:1;18545:18;:30::i;:::-;18480:103::o:0;35800:138::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35886:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;35886:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35800:138::o;37435:107::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;37508:18:::1;:28:::0;;-1:-1:-1;;;;;;37508:28:0::1;-1:-1:-1::0;;;;;37508:28:0;;;::::1;::::0;;;::::1;::::0;;37435:107::o;29680:664::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;27350:4:::1;29755:8;:31;;;;29747:66;;;::::0;-1:-1:-1;;;29747:66:0;;8422:2:1;29747:66:0::1;::::0;::::1;8404:21:1::0;8461:2;8441:18;;;8434:30;-1:-1:-1;;;8480:18:1;;;8473:52;8542:18;;29747:66:0::1;8220:346:1::0;29747:66:0::1;29828:10;::::0;:15;29820:44:::1;;;::::0;-1:-1:-1;;;29820:44:0;;8773:2:1;29820:44:0::1;::::0;::::1;8755:21:1::0;8812:2;8792:18;;;8785:30;-1:-1:-1;;;8831:18:1;;;8824:46;8887:18;;29820:44:0::1;8571:340:1::0;29820:44:0::1;29879:13;::::0;::::1;::::0;;:30:::1;;;29908:1;29896:9;:13;29879:30;29871:66;;;::::0;-1:-1:-1;;;29871:66:0;;9118:2:1;29871:66:0::1;::::0;::::1;9100:21:1::0;9157:2;9137:18;;;9130:30;9196:25;9176:18;;;9169:53;9239:18;;29871:66:0::1;8916:347:1::0;29871:66:0::1;29944:9;:16:::0;;-1:-1:-1;;;;29944:16:0::1;-1:-1:-1::0;;;29944:16:0::1;::::0;;;27350:4:::1;29990:24;::::0;::::1;:13;7828:12:::0;;;7740:108;29990:13:::1;:24;;;;:::i;:::-;29989:48;;;;:::i;:::-;29969:68;;30044:17;30080:9;30064:13;7828:12:::0;;;7740:108;30064:13:::1;:25;;;;:::i;:::-;30044:45:::0;-1:-1:-1;30100:13:0;;30096:64:::1;;30124:28;30131:9;30142;30124:6;:28::i;:::-;30170:13:::0;;30166:80:::1;;30194:44;30212:4;30219:7;17902:6:::0;;-1:-1:-1;;;;;17902:6:0;;17829:87;30219:7:::1;30228:9;30194;:44::i;:::-;-1:-1:-1::0;;30265:15:0::1;30252:10;:28:::0;-1:-1:-1;30302:12:0::1;30287;:27:::0;30321:9:::1;:17:::0;;-1:-1:-1;;;;30321:17:0::1;::::0;;29680:664::o;38703:227::-;38767:42;3999:10;38751:58;38743:67;;;;;;38874:50;;38846:21;;3999:10;;38874:50;;;;;38846:21;;38874:50;;;;38846:21;3999:10;38874:50;;;;;;;;;;;;;;;;;;;6839:104;6895:13;6928:7;6921:14;;;;;:::i;11199:438::-;3999:10;11292:4;11375:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;11375:27:0;;;;;;;;;;11292:4;;3999:10;11421:35;;;;11413:85;;;;-1:-1:-1;;;11413:85:0;;9600:2:1;11413:85:0;;;9582:21:1;9639:2;9619:18;;;9612:30;9678:34;9658:18;;;9651:62;-1:-1:-1;;;9729:18:1;;;9722:35;9774:19;;11413:85:0;9398:401:1;11413:85:0;11534:60;11543:5;11550:7;11578:15;11559:16;:34;11534:8;:60::i;8244:193::-;8323:4;3999:10;8379:28;3999:10;8396:2;8400:6;8379:9;:28::i;37336:93::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;37402:11:::1;:21:::0;;-1:-1:-1;;;;;;37402:21:0::1;-1:-1:-1::0;;;;;37402:21:0;;;::::1;::::0;;;::::1;::::0;;37336:93::o;38253:101::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;38322:13:::1;:26:::0;;-1:-1:-1;;38322:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38253:101::o;36176:206::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;36295:4:::1;36289;36268:13;7828:12:::0;;;7740:108;36268:13:::1;:18;::::0;36284:2:::1;36268:18;:::i;:::-;:25;;;;:::i;:::-;36267:32;;;;:::i;:::-;36257:6;:42;;36249:91;;;::::0;-1:-1:-1;;;36249:91:0;;10006:2:1;36249:91:0::1;::::0;::::1;9988:21:1::0;10045:2;10025:18;;;10018:30;10084:34;10064:18;;;10057:62;-1:-1:-1;;;10135:18:1;;;10128:34;10179:19;;36249:91:0::1;9804:400:1::0;36249:91:0::1;36359:17;:6:::0;36369::::1;36359:17;:::i;:::-;36347:9;:29:::0;-1:-1:-1;36176:206:0:o;34711:280::-;17902:6;;-1:-1:-1;;;;;17902:6:0;34777:10;:21;;:38;;-1:-1:-1;34802:13:0;;;;34777:38;34761:103;;;;-1:-1:-1;;;34761:103:0;;10411:2:1;34761:103:0;;;10393:21:1;10450:2;10430:18;;;10423:30;10489:33;10469:18;;;10462:61;10540:18;;34761:103:0;10209:355:1;34761:103:0;34895:1;34879:13;;:17;34871:56;;;;-1:-1:-1;;;34871:56:0;;10771:2:1;34871:56:0;;;10753:21:1;10810:2;10790:18;;;10783:30;10849:28;10829:18;;;10822:56;10895:18;;34871:56:0;10569:350:1;34871:56:0;34934:27;34947:13;;34934:12;:27::i;:::-;34984:1;34968:13;:17;34711:280::o;37033:97::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;37091:5:::1;:12:::0;;;37110:14:::1;:12;:14::i;37548:167::-:0;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;37630:24:::1;37652:2;27350:4;37630:24;:::i;:::-;37621:5;:33;;37613:69;;;::::0;-1:-1:-1;;;37613:69:0;;11126:2:1;37613:69:0::1;::::0;::::1;11108:21:1::0;11165:2;11145:18;;;11138:30;11204:25;11184:18;;;11177:53;11247:18;;37613:69:0::1;10924:347:1::0;37613:69:0::1;37689:12;:20:::0;37548:167::o;37962:94::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;38027:12:::1;:23:::0;;-1:-1:-1;;38027:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37962:94::o;38062:185::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;27350:4:::1;38145:8;:31;;38137:68;;;::::0;-1:-1:-1;;;38137:68:0;;11478:2:1;38137:68:0::1;::::0;::::1;11460:21:1::0;11517:2;11497:18;;;11490:30;11556:26;11536:18;;;11529:54;11600:18;;38137:68:0::1;11276:348:1::0;38137:68:0::1;38212:18;:29:::0;38062:185::o;34997:223::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;35089:3:::1;35077:8;:15;;35069:65;;;::::0;-1:-1:-1;;;35069:65:0;;11831:2:1;35069:65:0::1;::::0;::::1;11813:21:1::0;11870:2;11850:18;;;11843:30;11909:34;11889:18;;;11882:62;-1:-1:-1;;;11960:18:1;;;11953:35;12005:19;;35069:65:0::1;11629:401:1::0;35069:65:0::1;35165:13;::::0;-1:-1:-1;;;;;35165:13:0::1;7985:7:::0;8012:18;;;;;;;;;;;35141:73:::1;::::0;27350:4:::1;::::0;35155:35:::1;::::0;35182:8;;35155:35:::1;:::i;:::-;35154:59;;;;:::i;:::-;35141:12;:73::i;37136:192::-:0;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;37233:7:::1;:18:::0;;;37258:8:::1;:20:::0;;;37287:5:::1;:14:::0;;;37308::::1;:12;:14::i;:::-;37136:192:::0;;;:::o;18738:201::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18827:22:0;::::1;18819:73;;;::::0;-1:-1:-1;;;18819:73:0;;12237:2:1;18819:73:0::1;::::0;::::1;12219:21:1::0;12276:2;12256:18;;;12249:30;12315:34;12295:18;;;12288:62;-1:-1:-1;;;12366:18:1;;;12359:36;12412:19;;18819:73:0::1;12035:402:1::0;18819:73:0::1;18903:28;18922:8;18903:18;:28::i;37721:143::-:0;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37821:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:37;;-1:-1:-1;;37821:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37721:143::o;14835:380::-;-1:-1:-1;;;;;14971:19:0;;14963:68;;;;-1:-1:-1;;;14963:68:0;;12644:2:1;14963:68:0;;;12626:21:1;12683:2;12663:18;;;12656:30;12722:34;12702:18;;;12695:62;-1:-1:-1;;;12773:18:1;;;12766:34;12817:19;;14963:68:0;12442:400:1;14963:68:0;-1:-1:-1;;;;;15050:21:0;;15042:68;;;;-1:-1:-1;;;15042:68:0;;13049:2:1;15042:68:0;;;13031:21:1;13088:2;13068:18;;;13061:30;13127:34;13107:18;;;13100:62;-1:-1:-1;;;13178:18:1;;;13171:32;13220:19;;15042:68:0;12847:398:1;15042:68:0;-1:-1:-1;;;;;15123:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15175:32;;160:25:1;;;15175:32:0;;133:18:1;15175:32:0;;;;;;;14835:380;;;:::o;15502:453::-;-1:-1:-1;;;;;8616:18:0;;;15637:24;8616:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;15704:37:0;;15700:248;;15786:6;15766:16;:26;;15758:68;;;;-1:-1:-1;;;15758:68:0;;13452:2:1;15758:68:0;;;13434:21:1;13491:2;13471:18;;;13464:30;13530:31;13510:18;;;13503:59;13579:18;;15758:68:0;13250:353:1;15758:68:0;15870:51;15879:5;15886:7;15914:6;15895:16;:25;15870:8;:51::i;:::-;15626:329;15502:453;;;:::o;30350:2091::-;30473:13;30499:7;17902:6;;-1:-1:-1;;;;;17902:6:0;;17829:87;30499:7;-1:-1:-1;;;;;30489:17:0;:6;-1:-1:-1;;;;;30489:17:0;;:41;;;-1:-1:-1;17902:6:0;;-1:-1:-1;;;;;30510:20:0;;;17902:6;;30510:20;30489:41;30586:4;30537:28;8012:18;;;;;;;;;;;30625:13;;30473:57;;-1:-1:-1;8012:18:0;-1:-1:-1;;;;;30615:23:0;;;30625:13;;30615:23;:71;;;;-1:-1:-1;30670:15:0;;-1:-1:-1;;;;;30649:37:0;;;30670:15;;30649:37;;30615:71;30721:13;;30601:85;;-1:-1:-1;;;;;;30708:26:0;;;30721:13;;30708:26;30693:12;30601:85;;30756:17;;;30766:7;30756:17;30741:32;;30786:7;:23;;;;-1:-1:-1;30797:12:0;;;;30786:23;30782:560;;;30840:9;;30822:15;;-1:-1:-1;;;30840:9:0;;;;;:55;;-1:-1:-1;;;;;;30853:42:0;;;;;;:31;:42;;;;;;;;30840:55;:98;;;-1:-1:-1;;;;;;30899:39:0;;;;;;:31;:39;;;;;;;;30840:98;30822:116;;30949:14;27350:4;30982:20;;30966:13;7828:12;;;7740:108;30966:13;:36;;;;:::i;:::-;:58;;;;:::i;:::-;30949:75;;31053:6;31043;:16;;:30;;;;31063:10;31043:30;31035:65;;;;-1:-1:-1;;;31035:65:0;;13810:2:1;31035:65:0;;;13792:21:1;13849:2;13829:18;;;13822:30;-1:-1:-1;;;13868:18:1;;;13861:52;13930:18;;31035:65:0;13608:346:1;31035:65:0;31115:6;31111:224;;;31138:18;27350:4;31175:9;;31159:13;7828:12;;;7740:108;31159:13;:25;;;;:::i;:::-;:47;;;;:::i;:::-;31138:68;;31266:6;31243:20;31253:9;-1:-1:-1;;;;;8012:18:0;7985:7;8012:18;;;;;;;;;;;;7911:127;31243:20;:29;;;;:::i;:::-;31229:10;:43;;:57;;;;31276:10;31229:57;31221:102;;;;-1:-1:-1;;;31221:102:0;;14161:2:1;31221:102:0;;;14143:21:1;;;14180:18;;;14173:30;14239:34;14219:18;;;14212:62;14291:18;;31221:102:0;13959:356:1;31221:102:0;31123:212;31111:224;30811:531;;30782:560;31354:6;31350:284;;;31391:12;;:16;;31406:1;31391:16;:::i;:::-;31375:12;:32;31371:83;;-1:-1:-1;;;;;31420:17:0;;;;;;:6;:17;;;;;:24;;-1:-1:-1;;31420:24:0;31440:4;31420:24;;;31371:83;31350:284;;;-1:-1:-1;;;;;31485:17:0;;;;;;:6;:17;;;;;;;;31484:18;31476:44;;;;-1:-1:-1;;;31476:44:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31538:14:0;;;;;;:6;:14;;;;;;;;31537:15;31529:41;;;;-1:-1:-1;;;31529:41:0;;;;;;;:::i;:::-;3999:10;31588:20;;;;:6;:20;;;;;;;;31587:21;31579:47;;;;-1:-1:-1;;;31579:47:0;;;;;;;:::i;:::-;31689:12;;31672:13;;-1:-1:-1;;;;;31672:13:0;31642:16;8012:18;;;;;;;;;;;31642:16;;27350:4;;31662:39;;;;:::i;:::-;31661:70;;;;:::i;:::-;31805:12;;31642:89;;-1:-1:-1;31754:32:0;;;;;31805:12;;:33;;;;-1:-1:-1;31829:9:0;;;;;;;31828:10;31805:33;:53;;;;;31850:8;31849:9;31805:53;:72;;;;;31869:8;31805:72;:98;;;;-1:-1:-1;31888:10:0;;:15;;31805:98;:132;;;;-1:-1:-1;31924:13:0;;-1:-1:-1;;;;;31914:23:0;;;31924:13;;31914:23;;31805:132;31793:184;;;31954:15;31960:8;31954:5;:15::i;:::-;31985:11;32019:10;;32033:1;32019:15;;:33;;;;;32045:7;32019:33;:54;;;;-1:-1:-1;32064:9:0;;;;32063:10;32019:54;:119;;;;-1:-1:-1;;;;;;32086:22:0;;;;;;:14;:22;;;;;;;;;:51;;-1:-1:-1;;;;;;32112:25:0;;;;;;:14;:25;;;;;;;;32086:51;32084:54;32019:119;32007:196;;;32161:34;32180:6;32188;32161:18;:34::i;:::-;32155:40;;32007:196;32211:48;32227:6;32235:9;32246:12;32255:3;32246:6;:12;:::i;:::-;32211:15;:48::i;:::-;32272:7;:24;;;;-1:-1:-1;32283:13:0;;;;32272:24;:51;;;;-1:-1:-1;;;;;;32300:23:0;;32318:4;32300:23;;32272:51;32268:168;;;32378:18;;27350:4;;32362:12;32371:3;32362:6;:12;:::i;:::-;32361:35;;;;:::i;:::-;32360:68;;;;:::i;:::-;32334:13;;:94;;;;;;;:::i;:::-;;;;-1:-1:-1;;32268:168:0;30466:1975;;;;;;;;30350:2091;;;:::o;36489:322::-;36562:5;;36551:8;;36541:7;;:18;;;;:::i;:::-;:26;;;;:::i;:::-;36529:9;:38;36632:3;36604:24;27350:4;36626:2;36604:24;:::i;:::-;36603:32;;;;:::i;:::-;36590:9;;:45;;36574:102;;;;-1:-1:-1;;;36574:102:0;;14864:2:1;36574:102:0;;;14846:21:1;14903:2;14883:18;;;14876:30;14942:25;14922:18;;;14915:53;14985:18;;36574:102:0;14662:347:1;36574:102:0;36755:3;36727:24;27350:4;36749:2;36727:24;:::i;:::-;36726:32;;;;:::i;:::-;36711:2;36699:9;;:14;;;;:::i;:::-;:59;;36683:122;;;;-1:-1:-1;;;36683:122:0;;15216:2:1;36683:122:0;;;15198:21:1;15255:2;15235:18;;;15228:30;15294:31;15274:18;;;15267:59;15343:18;;36683:122:0;15014:353:1;19099:191:0;19192:6;;;-1:-1:-1;;;;;19209:17:0;;;-1:-1:-1;;;;;;19209:17:0;;;;;;;19242:40;;19192:6;;;19209:17;19192:6;;19242:40;;19173:16;;19242:40;19162:128;19099:191;:::o;33907:349::-;34011:15;;33979:62;;33996:4;;-1:-1:-1;;;;;34011:15:0;34029:11;33979:8;:62::i;:::-;34048:15;;34170:11;;-1:-1:-1;;;;;34048:15:0;;;;:31;;34088:9;;34116:4;;34130:11;;34048:15;;;;34170:11;:25;:49;;34208:11;;-1:-1:-1;;;;;34208:11:0;34170:49;;;17902:6;;-1:-1:-1;;;;;17902:6:0;34198:7;34048:202;;;;;;-1:-1:-1;;;;;;34048:202:0;;;-1:-1:-1;;;;;15731:15:1;;;34048:202:0;;;15713:34:1;15763:18;;;15756:34;;;;15806:18;;;15799:34;;;;15849:18;;;15842:34;15913:15;;;15892:19;;;15885:44;34228:15:0;15945:19:1;;;15938:35;15647:19;;34048:202:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33907:349;;:::o;34262:443::-;34389:1;34379:7;:11;:63;;;;-1:-1:-1;34416:13:0;;-1:-1:-1;;;;;34416:13:0;7985:7;8012:18;;;;;;;;;;;34439:3;;34406:29;;34433:2;34406:29;:::i;:::-;34405:37;;;;:::i;:::-;34394:7;:48;;34379:63;34375:325;;;34457:14;;-1:-1:-1;;;;;34457:14:0;27400:6;34457:22;34453:160;;;34498:13;;34492:29;;-1:-1:-1;;;;;34498:13:0;34513:7;34492:5;:29::i;:::-;34453:160;;;34564:13;;34579:14;;34548:55;;-1:-1:-1;;;;;34564:13:0;;;;34579:14;34595:7;34548:15;:55::i;:::-;34658:13;;34681:11;;;-1:-1:-1;;;;;;34681:11:0;;;;-1:-1:-1;;;;;34658:13:0;;;;;;34681:9;;:11;;;;;34621:19;;34681:11;;;;;;;34621:19;34658:13;34681:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34444:256;34262:443;:::o;32718:967::-;28673:9;:16;;-1:-1:-1;;28673:16:0;;;;;32878:9:::1;::::0;32867:7:::1;::::0;32801:21:::1;::::0;28673:16;;32851:23:::1;::::0;:13;:23:::1;:::i;:::-;32850:37;;;;:::i;:::-;32829:58;;32894:23;32958:1;32946:9;;32937:5;;32921:13;:21;;;;:::i;:::-;32920:35;;;;:::i;:::-;:39;;;;:::i;:::-;32894:65:::0;-1:-1:-1;32966:20:0::1;32894:65:::0;32989:26:::1;33005:10:::0;32989:13;:26:::1;:::i;:::-;:44;;;;:::i;:::-;32966:67:::0;-1:-1:-1;33046:14:0;;33042:69:::1;;33071:32;33085:4;33092:10;33071:5;:32::i;:::-;33199:16;::::0;;33213:1:::1;33199:16:::0;;;;;::::1;::::0;;33175:21:::1;::::0;33199:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;33199:16:0::1;33175:40;;33240:4;33222;33227:1;33222:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33222:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;33262:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;33262:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;33222:7;;33262:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33252:4;33257:1;33252:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33252:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;33325:15:::1;::::0;33293:63:::1;::::0;33310:4:::1;::::0;33325:15:::1;33343:12:::0;33293:8:::1;:63::i;:::-;33363:15;::::0;:163:::1;::::0;-1:-1:-1;;;33363:163:0;;-1:-1:-1;;;;;33363:15:0;;::::1;::::0;:66:::1;::::0;:163:::1;::::0;33438:12;;33363:15:::1;::::0;33469:4;;33490::::1;::::0;33504:15:::1;::::0;33363:163:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33535:20;33582:9;33558:21;:33;;;;:::i;:::-;33535:56:::0;-1:-1:-1;33602:16:0;;33598:82:::1;;33629:43;33642:12;33656:15;33629:12;:43::i;:::-;-1:-1:-1::0;;28704:9:0;:17;;-1:-1:-1;;28704:17:0;;;-1:-1:-1;;;;;32718:967:0:o;32447:265::-;32535:7;32554:11;27350:4;32578:9;;32569:6;:18;;;;:::i;:::-;32568:42;;;;:::i;:::-;32554:56;-1:-1:-1;32621:7:0;;32617:73;;32639:43;32655:6;32671:4;32678:3;32639:15;:43::i;:::-;32703:3;32447:265;-1:-1:-1;;;32447:265:0:o;12116:671::-;-1:-1:-1;;;;;12247:18:0;;12239:68;;;;-1:-1:-1;;;12239:68:0;;18002:2:1;12239:68:0;;;17984:21:1;18041:2;18021:18;;;18014:30;18080:34;18060:18;;;18053:62;-1:-1:-1;;;18131:18:1;;;18124:35;18176:19;;12239:68:0;17800:401:1;12239:68:0;-1:-1:-1;;;;;12326:16:0;;12318:64;;;;-1:-1:-1;;;12318:64:0;;18408:2:1;12318:64:0;;;18390:21:1;18447:2;18427:18;;;18420:30;18486:34;18466:18;;;18459:62;-1:-1:-1;;;18537:18:1;;;18530:33;18580:19;;12318:64:0;18206:399:1;12318:64:0;-1:-1:-1;;;;;12468:15:0;;12446:19;12468:15;;;;;;;;;;;12502:21;;;;12494:72;;;;-1:-1:-1;;;12494:72:0;;18812:2:1;12494:72:0;;;18794:21:1;18851:2;18831:18;;;18824:30;18890:34;18870:18;;;18863:62;-1:-1:-1;;;18941:18:1;;;18934:36;18987:19;;12494:72:0;18610:402:1;12494:72:0;-1:-1:-1;;;;;12602:15:0;;;:9;:15;;;;;;;;;;;12620:20;;;12602:38;;12662:13;;;;;;;;:23;;12634:6;;12602:9;12662:23;;12634:6;;12662:23;:::i;:::-;;;;;;;;12718:2;-1:-1:-1;;;;;12703:26:0;12712:4;-1:-1:-1;;;;;12703:26:0;;12722:6;12703:26;;;;160:25:1;;148:2;133:18;;14:177;12703:26:0;;;;;;;;12742:37;37136:192;13806:591;-1:-1:-1;;;;;13890:21:0;;13882:67;;;;-1:-1:-1;;;13882:67:0;;19219:2:1;13882:67:0;;;19201:21:1;19258:2;19238:18;;;19231:30;19297:34;19277:18;;;19270:62;-1:-1:-1;;;19348:18:1;;;19341:31;19389:19;;13882:67:0;19017:397:1;13882:67:0;-1:-1:-1;;;;;14049:18:0;;14024:22;14049:18;;;;;;;;;;;14086:24;;;;14078:71;;;;-1:-1:-1;;;14078:71:0;;19621:2:1;14078:71:0;;;19603:21:1;19660:2;19640:18;;;19633:30;19699:34;19679:18;;;19672:62;-1:-1:-1;;;19750:18:1;;;19743:32;19792:19;;14078:71:0;19419:398:1;14078:71:0;-1:-1:-1;;;;;14185:18:0;;:9;:18;;;;;;;;;;14206:23;;;14185:44;;14251:12;:22;;14223:6;;14185:9;14251:22;;14223:6;;14251:22;:::i;:::-;;;;-1:-1:-1;;14291:37:0;;160:25:1;;;14317:1:0;;-1:-1:-1;;;;;14291:37:0;;;;;148:2:1;133:18;14291:37:0;;;;;;;37136:192;;;:::o;33691:210::-;33772:13;33810:9;;33801:5;;33789:9;:17;;;;:::i;:::-;33788:31;;;;:::i;:::-;33772:47;-1:-1:-1;33830:18:0;;33826:70;;33859:29;33866:14;33882:5;33859:6;:29::i;196:160:1:-;261:20;;317:13;;310:21;300:32;;290:60;;346:1;343;336:12;290:60;196:160;;;:::o;361:180::-;417:6;470:2;458:9;449:7;445:23;441:32;438:52;;;486:1;483;476:12;438:52;509:26;525:9;509:26;:::i;546:131::-;-1:-1:-1;;;;;621:31:1;;611:42;;601:70;;667:1;664;657:12;682:247;741:6;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;849:9;836:23;868:31;893:5;868:31;:::i;1126:597::-;1238:4;1267:2;1296;1285:9;1278:21;1328:6;1322:13;1371:6;1366:2;1355:9;1351:18;1344:34;1396:1;1406:140;1420:6;1417:1;1414:13;1406:140;;;1515:14;;;1511:23;;1505:30;1481:17;;;1500:2;1477:26;1470:66;1435:10;;1406:140;;;1564:6;1561:1;1558:13;1555:91;;;1634:1;1629:2;1620:6;1609:9;1605:22;1601:31;1594:42;1555:91;-1:-1:-1;1707:2:1;1686:15;-1:-1:-1;;1682:29:1;1667:45;;;;1714:2;1663:54;;1126:597;-1:-1:-1;;;1126:597:1:o;1728:315::-;1796:6;1804;1857:2;1845:9;1836:7;1832:23;1828:32;1825:52;;;1873:1;1870;1863:12;1825:52;1912:9;1899:23;1931:31;1956:5;1931:31;:::i;:::-;1981:5;2033:2;2018:18;;;;2005:32;;-1:-1:-1;;;1728:315:1:o;2283:180::-;2342:6;2395:2;2383:9;2374:7;2370:23;2366:32;2363:52;;;2411:1;2408;2401:12;2363:52;-1:-1:-1;2434:23:1;;2283:180;-1:-1:-1;2283:180:1:o;2468:456::-;2545:6;2553;2561;2614:2;2602:9;2593:7;2589:23;2585:32;2582:52;;;2630:1;2627;2620:12;2582:52;2669:9;2656:23;2688:31;2713:5;2688:31;:::i;:::-;2738:5;-1:-1:-1;2795:2:1;2780:18;;2767:32;2808:33;2767:32;2808:33;:::i;:::-;2468:456;;2860:7;;-1:-1:-1;;;2914:2:1;2899:18;;;;2886:32;;2468:456::o;3326:315::-;3391:6;3399;3452:2;3440:9;3431:7;3427:23;3423:32;3420:52;;;3468:1;3465;3458:12;3420:52;3507:9;3494:23;3526:31;3551:5;3526:31;:::i;:::-;3576:5;-1:-1:-1;3600:35:1;3631:2;3616:18;;3600:35;:::i;:::-;3590:45;;3326:315;;;;;:::o;3646:272::-;3704:6;3757:2;3745:9;3736:7;3732:23;3728:32;3725:52;;;3773:1;3770;3763:12;3725:52;3812:9;3799:23;3862:6;3855:5;3851:18;3844:5;3841:29;3831:57;;3884:1;3881;3874:12;3923:388;3991:6;3999;4052:2;4040:9;4031:7;4027:23;4023:32;4020:52;;;4068:1;4065;4058:12;4020:52;4107:9;4094:23;4126:31;4151:5;4126:31;:::i;:::-;4176:5;-1:-1:-1;4233:2:1;4218:18;;4205:32;4246:33;4205:32;4246:33;:::i;:::-;4298:7;4288:17;;;3923:388;;;;;:::o;4316:316::-;4393:6;4401;4409;4462:2;4450:9;4441:7;4437:23;4433:32;4430:52;;;4478:1;4475;4468:12;4430:52;-1:-1:-1;;4501:23:1;;;4571:2;4556:18;;4543:32;;-1:-1:-1;4622:2:1;4607:18;;;4594:32;;4316:316;-1:-1:-1;4316:316:1:o;4637:356::-;4839:2;4821:21;;;4858:18;;;4851:30;4917:34;4912:2;4897:18;;4890:62;4984:2;4969:18;;4637:356::o;4998:380::-;5077:1;5073:12;;;;5120;;;5141:61;;5195:4;5187:6;5183:17;5173:27;;5141:61;5248:2;5240:6;5237:14;5217:18;5214:38;5211:161;;;5294:10;5289:3;5285:20;5282:1;5275:31;5329:4;5326:1;5319:15;5357:4;5354:1;5347:15;5211:161;;4998:380;;;:::o;6793:127::-;6854:10;6849:3;6845:20;6842:1;6835:31;6885:4;6882:1;6875:15;6909:4;6906:1;6899:15;6925:168;6965:7;7031:1;7027;7023:6;7019:14;7016:1;7013:21;7008:1;7001:9;6994:17;6990:45;6987:71;;;7038:18;;:::i;:::-;-1:-1:-1;7078:9:1;;6925:168::o;7098:217::-;7138:1;7164;7154:132;;7208:10;7203:3;7199:20;7196:1;7189:31;7243:4;7240:1;7233:15;7271:4;7268:1;7261:15;7154:132;-1:-1:-1;7300:9:1;;7098:217::o;8087:128::-;8127:3;8158:1;8154:6;8151:1;8148:13;8145:39;;;8164:18;;:::i;:::-;-1:-1:-1;8200:9:1;;8087:128::o;9268:125::-;9308:4;9336:1;9333;9330:8;9327:34;;;9341:18;;:::i;:::-;-1:-1:-1;9378:9:1;;9268:125::o;14320:337::-;14522:2;14504:21;;;14561:2;14541:18;;;14534:30;-1:-1:-1;;;14595:2:1;14580:18;;14573:43;14648:2;14633:18;;14320:337::o;15984:306::-;16072:6;16080;16088;16141:2;16129:9;16120:7;16116:23;16112:32;16109:52;;;16157:1;16154;16147:12;16109:52;16186:9;16180:16;16170:26;;16236:2;16225:9;16221:18;16215:25;16205:35;;16280:2;16269:9;16265:18;16259:25;16249:35;;15984:306;;;;;:::o;16427:127::-;16488:10;16483:3;16479:20;16476:1;16469:31;16519:4;16516:1;16509:15;16543:4;16540:1;16533:15;16559:251;16629:6;16682:2;16670:9;16661:7;16657:23;16653:32;16650:52;;;16698:1;16695;16688:12;16650:52;16730:9;16724:16;16749:31;16774:5;16749:31;:::i;16815:980::-;17077:4;17125:3;17114:9;17110:19;17156:6;17145:9;17138:25;17182:2;17220:6;17215:2;17204:9;17200:18;17193:34;17263:3;17258:2;17247:9;17243:18;17236:31;17287:6;17322;17316:13;17353:6;17345;17338:22;17391:3;17380:9;17376:19;17369:26;;17430:2;17422:6;17418:15;17404:29;;17451:1;17461:195;17475:6;17472:1;17469:13;17461:195;;;17540:13;;-1:-1:-1;;;;;17536:39:1;17524:52;;17631:15;;;;17596:12;;;;17572:1;17490:9;17461:195;;;-1:-1:-1;;;;;;;17712:32:1;;;;17707:2;17692:18;;17685:60;-1:-1:-1;;;17776:3:1;17761:19;17754:35;17673:3;16815:980;-1:-1:-1;;;16815:980:1:o

Swarm Source

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