ETH Price: $3,412.55 (+3.03%)

Token

JUST A COIN (JAC)
 

Overview

Max Total Supply

100,000,000,000 JAC

Holders

690

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
48,500,000 JAC

Value
$0.00
0x2eb7c1f4a4cd6e0a2a18342813f3918e227e6f8f
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:
JAC

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-11-07
*/

// SPDX-License-Identifier: Unlicensed


// JUST A COIN
// The Fair Launch
// Max Wallet 0.05% *2 Every 3 Hours 
// 0/0 tax after 1 week
// Tax used to buy $JAC and burn
// No social, whoever leads $JAC create CTO



pragma solidity 0.8.9;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract JAC is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
    address public marketingWallet;
 
    uint256 public swapTokensAtAmount;
 
    bool public tradingActive = false;
    bool public swapEnabled = false;
 
    // block number of opened trading
    uint256 launchedAt;
    uint256 launchedTime = 0;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxWalletAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    constructor() ERC20(unicode"JUST A COIN",unicode"JAC") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
		excludeFromMaxWallet(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxWallet(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
		
        uint256 totalSupply = 100000000000 * 1e18;
 
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet
  
        marketingWallet = address(owner()); // set as marketing wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxWallet(owner(), true);
        excludeFromMaxWallet(address(this), true);
        excludeFromMaxWallet(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
  	}
		
	function maxWallet() public view returns(uint256) {
        uint256 _initialMaxWallet = 50000000 * 1e18;
		uint256 _timeRound = (block.timestamp - launchedTime) / 3 hours;
		uint256 _maxWallet = _initialMaxWallet;
		
		if(_timeRound <= 100){
			if(totalSupply() / (2**_timeRound) > 0){
				_maxWallet = _initialMaxWallet * 2**_timeRound;
				
				if(_maxWallet >= totalSupply()){
					_maxWallet =  totalSupply();
				}
			} else {
				_maxWallet =  totalSupply();
			}
		} else {
			_maxWallet =  totalSupply();
		}
		
        return _maxWallet;
    }
		
	function buyMarketingFee() public view returns(uint256) {
        uint256 _initialBuyFee = 3;
        uint256 _timeRound = (block.timestamp - launchedTime) / 1 weeks;
		uint256 _buyFee = _initialBuyFee;
		
		if(_timeRound <= _initialBuyFee){
			_buyFee = _initialBuyFee - _timeRound;
		} else {
			_buyFee = 0;
		}
		

        return _buyFee;
    }
		
	function sellMarketingFee() public view returns(uint256) {
        uint256 _initialSellFee = 3;
        uint256 _timeRound = (block.timestamp - launchedTime) / 1 weeks;
		uint256 _sellFee = _initialSellFee;
		
		if(_timeRound <= _initialSellFee){
			_sellFee = _initialSellFee - _timeRound;
		} else {
			_sellFee = 0;
		}
		

        return _sellFee;
    }
		
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Trading is active");
		tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }
 
    function excludeFromMaxWallet(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxWalletAmount[updAds] = isEx;
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    } 
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        
		if (
			from != owner() &&
			to != owner() &&
			to != address(0) &&
			to != address(0xdead) &&
			!swapping
		){
			if(!tradingActive){
				require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
			}

			//when buy
			if (automatedMarketMakerPairs[from] && !_isExcludedMaxWalletAmount[to]) {
					require(amount + balanceOf(to) <= maxWallet(), "Max wallet exceeded");
			} else if(!_isExcludedMaxWalletAmount[to]){
				require(amount + balanceOf(to) <= maxWallet(), "Max wallet exceeded");
			}
		}

		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
		bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        uint256 _sellMarketingFee = sellMarketingFee();
        uint256 _buyMarketingFee = buyMarketingFee();
		
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && _sellMarketingFee > 0){
                fees = amount.mul(_sellMarketingFee).div(100);
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && _buyMarketingFee > 0) {
        	    fees = amount.mul(_buyMarketingFee).div(100);
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
        	amount -= fees;
        }
		
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
  
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
 
        if(contractBalance == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        uint256 amountToSwapForETH = contractBalance;
        swapTokensForEth(amountToSwapForETH); 
 
     
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600860006101000a81548160ff0219169083151502179055506000600860016101000a81548160ff0219169083151502179055506000600a553480156200004c57600080fd5b506040518060400160405280600b81526020017f4a555354204120434f494e0000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4a414300000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000d192919062000a58565b508060049080519060200190620000ea92919062000a58565b5050506000620000ff6200052460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ca8160016200052c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024557600080fd5b505afa1580156200025a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000280919062000b72565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002e357600080fd5b505afa158015620002f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031e919062000b72565b6040518363ffffffff1660e01b81526004016200033d92919062000bb5565b602060405180830381600087803b1580156200035857600080fd5b505af11580156200036d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000393919062000b72565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003db60a05160016200052c60201b60201c565b620003f060a05160016200062960201b60201c565b60006c01431e0fae6d7217caa0000000905061271060058262000414919062000c1b565b62000420919062000cab565b60078190555062000436620006ca60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004986200048a620006ca60201b60201c565b6001620006f460201b60201c565b620004ab306001620006f460201b60201c565b620004c061dead6001620006f460201b60201c565b620004e2620004d4620006ca60201b60201c565b60016200052c60201b60201c565b620004f53060016200052c60201b60201c565b6200050a61dead60016200052c60201b60201c565b6200051c33826200084160201b60201c565b505062000f74565b600033905090565b6200053c6200052460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620005ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005c59062000d44565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007046200052460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000796576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200078d9062000d44565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000835919062000d83565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ab9062000df0565b60405180910390fd5b620008c860008383620009f060201b60201c565b620008e481600254620009f560201b620018051790919060201c565b60028190555062000942816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620009f560201b620018051790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009e4919062000e23565b60405180910390a35050565b505050565b600080828462000a06919062000e40565b90508381101562000a4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a459062000eed565b60405180910390fd5b8091505092915050565b82805462000a669062000f3e565b90600052602060002090601f01602090048101928262000a8a576000855562000ad6565b82601f1062000aa557805160ff191683800117855562000ad6565b8280016001018555821562000ad6579182015b8281111562000ad557825182559160200191906001019062000ab8565b5b50905062000ae5919062000ae9565b5090565b5b8082111562000b0457600081600090555060010162000aea565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b3a8262000b0d565b9050919050565b62000b4c8162000b2d565b811462000b5857600080fd5b50565b60008151905062000b6c8162000b41565b92915050565b60006020828403121562000b8b5762000b8a62000b08565b5b600062000b9b8482850162000b5b565b91505092915050565b62000baf8162000b2d565b82525050565b600060408201905062000bcc600083018562000ba4565b62000bdb602083018462000ba4565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c288262000be2565b915062000c358362000be2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c715762000c7062000bec565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cb88262000be2565b915062000cc58362000be2565b92508262000cd85762000cd762000c7c565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d2c60208362000ce3565b915062000d398262000cf4565b602082019050919050565b6000602082019050818103600083015262000d5f8162000d1d565b9050919050565b60008115159050919050565b62000d7d8162000d66565b82525050565b600060208201905062000d9a600083018462000d72565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000dd8601f8362000ce3565b915062000de58262000da0565b602082019050919050565b6000602082019050818103600083015262000e0b8162000dc9565b9050919050565b62000e1d8162000be2565b82525050565b600060208201905062000e3a600083018462000e12565b92915050565b600062000e4d8262000be2565b915062000e5a8362000be2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e925762000e9162000bec565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000ed5601b8362000ce3565b915062000ee28262000e9d565b602082019050919050565b6000602082019050818103600083015262000f088162000ec6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f5757607f821691505b6020821081141562000f6e5762000f6d62000f0f565b5b50919050565b60805160a051613ae762000fb660003960008181610a140152610faf015260008181610851015281816128f1015281816129e10152612a080152613ae76000f3fe6080604052600436106101dc5760003560e01c80638da5cb5b11610102578063b62496f511610095578063dd62ed3e11610064578063dd62ed3e146106e3578063e2f4560514610720578063f2fde38b1461074b578063f8b45b0514610774576101e3565b8063b62496f514610629578063bbc0c74214610666578063c024666814610691578063d2fcc001146106ba576101e3565b80639a7a23d6116100d15780639a7a23d61461055d578063a457c2d714610586578063a9059cbb146105c3578063aacebbe314610600576101e3565b80638da5cb5b1461049f57806392136913146104ca57806395d89b41146104f557806396880b1714610520576101e3565b806349bd5a5e1161017a578063715018a611610149578063715018a61461041b57806375f0a874146104325780637bce5a041461045d5780638a8c523c14610488576101e3565b806349bd5a5e1461034b5780634fbee193146103765780636ddd1713146103b357806370a08231146103de576101e3565b806318160ddd116101b657806318160ddd1461027b57806323b872dd146102a6578063313ce567146102e3578063395093511461030e576101e3565b806306fdde03146101e8578063095ea7b3146102135780631694505e14610250576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b506101fd61079f565b60405161020a9190612b37565b60405180910390f35b34801561021f57600080fd5b5061023a60048036038101906102359190612bf2565b610831565b6040516102479190612c4d565b60405180910390f35b34801561025c57600080fd5b5061026561084f565b6040516102729190612cc7565b60405180910390f35b34801561028757600080fd5b50610290610873565b60405161029d9190612cf1565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190612d0c565b61087d565b6040516102da9190612c4d565b60405180910390f35b3480156102ef57600080fd5b506102f8610956565b6040516103059190612d7b565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190612bf2565b61095f565b6040516103429190612c4d565b60405180910390f35b34801561035757600080fd5b50610360610a12565b60405161036d9190612da5565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190612dc0565b610a36565b6040516103aa9190612c4d565b60405180910390f35b3480156103bf57600080fd5b506103c8610a8c565b6040516103d59190612c4d565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190612dc0565b610a9f565b6040516104129190612cf1565b60405180910390f35b34801561042757600080fd5b50610430610ae7565b005b34801561043e57600080fd5b50610447610c3f565b6040516104549190612da5565b60405180910390f35b34801561046957600080fd5b50610472610c65565b60405161047f9190612cf1565b60405180910390f35b34801561049457600080fd5b5061049d610cb9565b005b3480156104ab57600080fd5b506104b4610de6565b6040516104c19190612da5565b60405180910390f35b3480156104d657600080fd5b506104df610e10565b6040516104ec9190612cf1565b60405180910390f35b34801561050157600080fd5b5061050a610e64565b6040516105179190612b37565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190612dc0565b610ef6565b6040516105549190612c4d565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190612e19565b610f16565b005b34801561059257600080fd5b506105ad60048036038101906105a89190612bf2565b61104a565b6040516105ba9190612c4d565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190612bf2565b611117565b6040516105f79190612c4d565b60405180910390f35b34801561060c57600080fd5b5061062760048036038101906106229190612dc0565b611135565b005b34801561063557600080fd5b50610650600480360381019061064b9190612dc0565b61128c565b60405161065d9190612c4d565b60405180910390f35b34801561067257600080fd5b5061067b6112ac565b6040516106889190612c4d565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190612e19565b6112bf565b005b3480156106c657600080fd5b506106e160048036038101906106dc9190612e19565b6113ff565b005b3480156106ef57600080fd5b5061070a60048036038101906107059190612e59565b6114f1565b6040516107179190612cf1565b60405180910390f35b34801561072c57600080fd5b50610735611578565b6040516107429190612cf1565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190612dc0565b61157e565b005b34801561078057600080fd5b50610789611745565b6040516107969190612cf1565b60405180910390f35b6060600380546107ae90612ec8565b80601f01602080910402602001604051908101604052809291908181526020018280546107da90612ec8565b80156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b5050505050905090565b600061084561083e611863565b848461186b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600061088a848484611a36565b61094b84610896611863565b61094685604051806060016040528060288152602001613a6560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108fc611863565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122a39092919063ffffffff16565b61186b565b600190509392505050565b60006012905090565b6000610a0861096c611863565b84610a03856001600061097d611863565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461180590919063ffffffff16565b61186b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610aef611863565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590612f46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060039050600062093a80600a5442610c809190612f95565b610c8a9190612ff8565b90506000829050828211610cab578183610ca49190612f95565b9050610cb0565b600090505b80935050505090565b610cc1611863565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790612f46565b60405180910390fd5b600860009054906101000a900460ff1615610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790613075565b60405180910390fd5b6001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055504360098190555042600a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060039050600062093a80600a5442610e2b9190612f95565b610e359190612ff8565b90506000829050828211610e56578183610e4f9190612f95565b9050610e5b565b600090505b80935050505090565b606060048054610e7390612ec8565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9f90612ec8565b8015610eec5780601f10610ec157610100808354040283529160200191610eec565b820191906000526020600020905b815481529060010190602001808311610ecf57829003601f168201915b5050505050905090565b600c6020528060005260406000206000915054906101000a900460ff1681565b610f1e611863565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490612f46565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390613107565b60405180910390fd5b6110468282612307565b5050565b600061110d611057611863565b8461110885604051806060016040528060258152602001613a8d6025913960016000611081611863565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122a39092919063ffffffff16565b61186b565b6001905092915050565b600061112b611124611863565b8484611a36565b6001905092915050565b61113d611863565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c390612f46565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900460ff1681565b6112c7611863565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d90612f46565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113f39190612c4d565b60405180910390a25050565b611407611863565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d90612f46565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b611586611863565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90612f46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167c90613199565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806a295be96e6406697200000090506000612a30600a54426117699190612f95565b6117739190612ff8565b90506000829050606482116117f157600082600261179191906132ec565b611799610873565b6117a39190612ff8565b11156117e1578160026117b691906132ec565b836117c19190613337565b90506117cb610873565b81106117dc576117d9610873565b90505b6117ec565b6117e9610873565b90505b6117fc565b6117f9610873565b90505b80935050505090565b60008082846118149190613391565b905083811015611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090613433565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d2906134c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561194b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194290613557565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a299190612cf1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d906135e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d9061367b565b60405180910390fd5b6000811415611b3057611b2b838360006123a8565b61229e565b611b38610de6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ba65750611b76610de6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611bdf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c19575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c325750600560149054906101000a900460ff16155b15611ee757600860009054906101000a900460ff16611d2c57600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611cec5750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d22906136e7565b60405180910390fd5b5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611dcf5750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e3657611ddc611745565b611de583610a9f565b82611df09190613391565b1115611e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2890613753565b60405180910390fd5b611ee6565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ee557611e8f611745565b611e9883610a9f565b82611ea39190613391565b1115611ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edb90613753565b60405180910390fd5b5b5b5b6000611ef230610a9f565b9050600060075482101590506000600560149054906101000a900460ff16159050600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611fb45750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611fbe57600090505b600080611fc9610e10565b90506000611fd5610c65565b9050831561211457600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120365750600082115b15612068576120616064612053848a61263d90919063ffffffff16565b6126b890919063ffffffff16565b92506120f0565b600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120c15750600081115b156120ef576120ec60646120de838a61263d90919063ffffffff16565b6126b890919063ffffffff16565b92505b5b6000831115612105576121048930856123a8565b5b82876121119190612f95565b96505b84801561212d5750600860019054906101000a900460ff165b80156121465750600560149054906101000a900460ff16155b801561219c5750600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121f25750600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122485750600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561228c576001600560146101000a81548160ff021916908315150217905550612270612702565b6000600560146101000a81548160ff0219169083151502179055505b6122978989896123a8565b5050505050505b505050565b60008383111582906122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e29190612b37565b60405180910390fd5b50600083856122fa9190612f95565b9050809150509392505050565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f906135e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f9061367b565b60405180910390fd5b6124938383836127ea565b6124fe81604051806060016040528060268152602001613a3f602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122a39092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612591816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461180590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126309190612cf1565b60405180910390a3505050565b60008083141561265057600090506126b2565b6000828461265e9190613337565b905082848261266d9190612ff8565b146126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a4906137e5565b60405180910390fd5b809150505b92915050565b60006126fa83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127ef565b905092915050565b600061270d30610a9f565b90506000808214156127205750506127e8565b601460075461272f9190613337565b8211156127485760146007546127459190613337565b91505b600082905061275681612852565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161279c90613836565b60006040518083038185875af1925050503d80600081146127d9576040519150601f19603f3d011682016040523d82523d6000602084013e6127de565b606091505b5050809250505050505b565b505050565b60008083118290612836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282d9190612b37565b60405180910390fd5b50600083856128459190612ff8565b9050809150509392505050565b6000600267ffffffffffffffff81111561286f5761286e61384b565b5b60405190808252806020026020018201604052801561289d5781602001602082028036833780820191505090505b50905030816000815181106128b5576128b461387a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561295557600080fd5b505afa158015612969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298d91906138be565b816001815181106129a1576129a061387a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a06307f00000000000000000000000000000000000000000000000000000000000000008461186b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612a689594939291906139e4565b600060405180830381600087803b158015612a8257600080fd5b505af1158015612a96573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ad8578082015181840152602081019050612abd565b83811115612ae7576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b0982612a9e565b612b138185612aa9565b9350612b23818560208601612aba565b612b2c81612aed565b840191505092915050565b60006020820190508181036000830152612b518184612afe565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b8982612b5e565b9050919050565b612b9981612b7e565b8114612ba457600080fd5b50565b600081359050612bb681612b90565b92915050565b6000819050919050565b612bcf81612bbc565b8114612bda57600080fd5b50565b600081359050612bec81612bc6565b92915050565b60008060408385031215612c0957612c08612b59565b5b6000612c1785828601612ba7565b9250506020612c2885828601612bdd565b9150509250929050565b60008115159050919050565b612c4781612c32565b82525050565b6000602082019050612c626000830184612c3e565b92915050565b6000819050919050565b6000612c8d612c88612c8384612b5e565b612c68565b612b5e565b9050919050565b6000612c9f82612c72565b9050919050565b6000612cb182612c94565b9050919050565b612cc181612ca6565b82525050565b6000602082019050612cdc6000830184612cb8565b92915050565b612ceb81612bbc565b82525050565b6000602082019050612d066000830184612ce2565b92915050565b600080600060608486031215612d2557612d24612b59565b5b6000612d3386828701612ba7565b9350506020612d4486828701612ba7565b9250506040612d5586828701612bdd565b9150509250925092565b600060ff82169050919050565b612d7581612d5f565b82525050565b6000602082019050612d906000830184612d6c565b92915050565b612d9f81612b7e565b82525050565b6000602082019050612dba6000830184612d96565b92915050565b600060208284031215612dd657612dd5612b59565b5b6000612de484828501612ba7565b91505092915050565b612df681612c32565b8114612e0157600080fd5b50565b600081359050612e1381612ded565b92915050565b60008060408385031215612e3057612e2f612b59565b5b6000612e3e85828601612ba7565b9250506020612e4f85828601612e04565b9150509250929050565b60008060408385031215612e7057612e6f612b59565b5b6000612e7e85828601612ba7565b9250506020612e8f85828601612ba7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ee057607f821691505b60208210811415612ef457612ef3612e99565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f30602083612aa9565b9150612f3b82612efa565b602082019050919050565b60006020820190508181036000830152612f5f81612f23565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fa082612bbc565b9150612fab83612bbc565b925082821015612fbe57612fbd612f66565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061300382612bbc565b915061300e83612bbc565b92508261301e5761301d612fc9565b5b828204905092915050565b7f54726164696e6720697320616374697665000000000000000000000000000000600082015250565b600061305f601183612aa9565b915061306a82613029565b602082019050919050565b6000602082019050818103600083015261308e81613052565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006130f1603983612aa9565b91506130fc82613095565b604082019050919050565b60006020820190508181036000830152613120816130e4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613183602683612aa9565b915061318e82613127565b604082019050919050565b600060208201905081810360008301526131b281613176565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613210578086048111156131ec576131eb612f66565b5b60018516156131fb5780820291505b8081029050613209856131b9565b94506131d0565b94509492505050565b60008261322957600190506132e5565b8161323757600090506132e5565b816001811461324d576002811461325757613286565b60019150506132e5565b60ff84111561326957613268612f66565b5b8360020a9150848211156132805761327f612f66565b5b506132e5565b5060208310610133831016604e8410600b84101617156132bb5782820a9050838111156132b6576132b5612f66565b5b6132e5565b6132c884848460016131c6565b925090508184048111156132df576132de612f66565b5b81810290505b9392505050565b60006132f782612bbc565b915061330283612bbc565b925061332f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613219565b905092915050565b600061334282612bbc565b915061334d83612bbc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561338657613385612f66565b5b828202905092915050565b600061339c82612bbc565b91506133a783612bbc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133dc576133db612f66565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061341d601b83612aa9565b9150613428826133e7565b602082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006134af602483612aa9565b91506134ba82613453565b604082019050919050565b600060208201905081810360008301526134de816134a2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613541602283612aa9565b915061354c826134e5565b604082019050919050565b6000602082019050818103600083015261357081613534565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006135d3602583612aa9565b91506135de82613577565b604082019050919050565b60006020820190508181036000830152613602816135c6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613665602383612aa9565b915061367082613609565b604082019050919050565b6000602082019050818103600083015261369481613658565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006136d1601683612aa9565b91506136dc8261369b565b602082019050919050565b60006020820190508181036000830152613700816136c4565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061373d601383612aa9565b915061374882613707565b602082019050919050565b6000602082019050818103600083015261376c81613730565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006137cf602183612aa9565b91506137da82613773565b604082019050919050565b600060208201905081810360008301526137fe816137c2565b9050919050565b600081905092915050565b50565b6000613820600083613805565b915061382b82613810565b600082019050919050565b600061384182613813565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506138b881612b90565b92915050565b6000602082840312156138d4576138d3612b59565b5b60006138e2848285016138a9565b91505092915050565b6000819050919050565b600061391061390b613906846138eb565b612c68565b612bbc565b9050919050565b613920816138f5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61395b81612b7e565b82525050565b600061396d8383613952565b60208301905092915050565b6000602082019050919050565b600061399182613926565b61399b8185613931565b93506139a683613942565b8060005b838110156139d75781516139be8882613961565b97506139c983613979565b9250506001810190506139aa565b5085935050505092915050565b600060a0820190506139f96000830188612ce2565b613a066020830187613917565b8181036040830152613a188186613986565b9050613a276060830185612d96565b613a346080830184612ce2565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c25d508146c23bf87b96d3b8106bf2c828c94e85252fbe3fbfb49eec7cc9aeee64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c80638da5cb5b11610102578063b62496f511610095578063dd62ed3e11610064578063dd62ed3e146106e3578063e2f4560514610720578063f2fde38b1461074b578063f8b45b0514610774576101e3565b8063b62496f514610629578063bbc0c74214610666578063c024666814610691578063d2fcc001146106ba576101e3565b80639a7a23d6116100d15780639a7a23d61461055d578063a457c2d714610586578063a9059cbb146105c3578063aacebbe314610600576101e3565b80638da5cb5b1461049f57806392136913146104ca57806395d89b41146104f557806396880b1714610520576101e3565b806349bd5a5e1161017a578063715018a611610149578063715018a61461041b57806375f0a874146104325780637bce5a041461045d5780638a8c523c14610488576101e3565b806349bd5a5e1461034b5780634fbee193146103765780636ddd1713146103b357806370a08231146103de576101e3565b806318160ddd116101b657806318160ddd1461027b57806323b872dd146102a6578063313ce567146102e3578063395093511461030e576101e3565b806306fdde03146101e8578063095ea7b3146102135780631694505e14610250576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b506101fd61079f565b60405161020a9190612b37565b60405180910390f35b34801561021f57600080fd5b5061023a60048036038101906102359190612bf2565b610831565b6040516102479190612c4d565b60405180910390f35b34801561025c57600080fd5b5061026561084f565b6040516102729190612cc7565b60405180910390f35b34801561028757600080fd5b50610290610873565b60405161029d9190612cf1565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190612d0c565b61087d565b6040516102da9190612c4d565b60405180910390f35b3480156102ef57600080fd5b506102f8610956565b6040516103059190612d7b565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190612bf2565b61095f565b6040516103429190612c4d565b60405180910390f35b34801561035757600080fd5b50610360610a12565b60405161036d9190612da5565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190612dc0565b610a36565b6040516103aa9190612c4d565b60405180910390f35b3480156103bf57600080fd5b506103c8610a8c565b6040516103d59190612c4d565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190612dc0565b610a9f565b6040516104129190612cf1565b60405180910390f35b34801561042757600080fd5b50610430610ae7565b005b34801561043e57600080fd5b50610447610c3f565b6040516104549190612da5565b60405180910390f35b34801561046957600080fd5b50610472610c65565b60405161047f9190612cf1565b60405180910390f35b34801561049457600080fd5b5061049d610cb9565b005b3480156104ab57600080fd5b506104b4610de6565b6040516104c19190612da5565b60405180910390f35b3480156104d657600080fd5b506104df610e10565b6040516104ec9190612cf1565b60405180910390f35b34801561050157600080fd5b5061050a610e64565b6040516105179190612b37565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190612dc0565b610ef6565b6040516105549190612c4d565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190612e19565b610f16565b005b34801561059257600080fd5b506105ad60048036038101906105a89190612bf2565b61104a565b6040516105ba9190612c4d565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190612bf2565b611117565b6040516105f79190612c4d565b60405180910390f35b34801561060c57600080fd5b5061062760048036038101906106229190612dc0565b611135565b005b34801561063557600080fd5b50610650600480360381019061064b9190612dc0565b61128c565b60405161065d9190612c4d565b60405180910390f35b34801561067257600080fd5b5061067b6112ac565b6040516106889190612c4d565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190612e19565b6112bf565b005b3480156106c657600080fd5b506106e160048036038101906106dc9190612e19565b6113ff565b005b3480156106ef57600080fd5b5061070a60048036038101906107059190612e59565b6114f1565b6040516107179190612cf1565b60405180910390f35b34801561072c57600080fd5b50610735611578565b6040516107429190612cf1565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190612dc0565b61157e565b005b34801561078057600080fd5b50610789611745565b6040516107969190612cf1565b60405180910390f35b6060600380546107ae90612ec8565b80601f01602080910402602001604051908101604052809291908181526020018280546107da90612ec8565b80156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b5050505050905090565b600061084561083e611863565b848461186b565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600061088a848484611a36565b61094b84610896611863565b61094685604051806060016040528060288152602001613a6560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108fc611863565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122a39092919063ffffffff16565b61186b565b600190509392505050565b60006012905090565b6000610a0861096c611863565b84610a03856001600061097d611863565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461180590919063ffffffff16565b61186b565b6001905092915050565b7f0000000000000000000000003563d077a119dc53be8d9f4826d2f97547eed26f81565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610aef611863565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590612f46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060039050600062093a80600a5442610c809190612f95565b610c8a9190612ff8565b90506000829050828211610cab578183610ca49190612f95565b9050610cb0565b600090505b80935050505090565b610cc1611863565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790612f46565b60405180910390fd5b600860009054906101000a900460ff1615610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790613075565b60405180910390fd5b6001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055504360098190555042600a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060039050600062093a80600a5442610e2b9190612f95565b610e359190612ff8565b90506000829050828211610e56578183610e4f9190612f95565b9050610e5b565b600090505b80935050505090565b606060048054610e7390612ec8565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9f90612ec8565b8015610eec5780601f10610ec157610100808354040283529160200191610eec565b820191906000526020600020905b815481529060010190602001808311610ecf57829003601f168201915b5050505050905090565b600c6020528060005260406000206000915054906101000a900460ff1681565b610f1e611863565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490612f46565b60405180910390fd5b7f0000000000000000000000003563d077a119dc53be8d9f4826d2f97547eed26f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390613107565b60405180910390fd5b6110468282612307565b5050565b600061110d611057611863565b8461110885604051806060016040528060258152602001613a8d6025913960016000611081611863565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122a39092919063ffffffff16565b61186b565b6001905092915050565b600061112b611124611863565b8484611a36565b6001905092915050565b61113d611863565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c390612f46565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900460ff1681565b6112c7611863565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d90612f46565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113f39190612c4d565b60405180910390a25050565b611407611863565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d90612f46565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b611586611863565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90612f46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167c90613199565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806a295be96e6406697200000090506000612a30600a54426117699190612f95565b6117739190612ff8565b90506000829050606482116117f157600082600261179191906132ec565b611799610873565b6117a39190612ff8565b11156117e1578160026117b691906132ec565b836117c19190613337565b90506117cb610873565b81106117dc576117d9610873565b90505b6117ec565b6117e9610873565b90505b6117fc565b6117f9610873565b90505b80935050505090565b60008082846118149190613391565b905083811015611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090613433565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d2906134c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561194b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194290613557565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a299190612cf1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d906135e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d9061367b565b60405180910390fd5b6000811415611b3057611b2b838360006123a8565b61229e565b611b38610de6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ba65750611b76610de6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611bdf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c19575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c325750600560149054906101000a900460ff16155b15611ee757600860009054906101000a900460ff16611d2c57600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611cec5750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d22906136e7565b60405180910390fd5b5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611dcf5750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e3657611ddc611745565b611de583610a9f565b82611df09190613391565b1115611e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2890613753565b60405180910390fd5b611ee6565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ee557611e8f611745565b611e9883610a9f565b82611ea39190613391565b1115611ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edb90613753565b60405180910390fd5b5b5b5b6000611ef230610a9f565b9050600060075482101590506000600560149054906101000a900460ff16159050600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611fb45750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611fbe57600090505b600080611fc9610e10565b90506000611fd5610c65565b9050831561211457600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120365750600082115b15612068576120616064612053848a61263d90919063ffffffff16565b6126b890919063ffffffff16565b92506120f0565b600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120c15750600081115b156120ef576120ec60646120de838a61263d90919063ffffffff16565b6126b890919063ffffffff16565b92505b5b6000831115612105576121048930856123a8565b5b82876121119190612f95565b96505b84801561212d5750600860019054906101000a900460ff165b80156121465750600560149054906101000a900460ff16155b801561219c5750600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121f25750600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122485750600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561228c576001600560146101000a81548160ff021916908315150217905550612270612702565b6000600560146101000a81548160ff0219169083151502179055505b6122978989896123a8565b5050505050505b505050565b60008383111582906122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e29190612b37565b60405180910390fd5b50600083856122fa9190612f95565b9050809150509392505050565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f906135e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f9061367b565b60405180910390fd5b6124938383836127ea565b6124fe81604051806060016040528060268152602001613a3f602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122a39092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612591816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461180590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126309190612cf1565b60405180910390a3505050565b60008083141561265057600090506126b2565b6000828461265e9190613337565b905082848261266d9190612ff8565b146126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a4906137e5565b60405180910390fd5b809150505b92915050565b60006126fa83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127ef565b905092915050565b600061270d30610a9f565b90506000808214156127205750506127e8565b601460075461272f9190613337565b8211156127485760146007546127459190613337565b91505b600082905061275681612852565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161279c90613836565b60006040518083038185875af1925050503d80600081146127d9576040519150601f19603f3d011682016040523d82523d6000602084013e6127de565b606091505b5050809250505050505b565b505050565b60008083118290612836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282d9190612b37565b60405180910390fd5b50600083856128459190612ff8565b9050809150509392505050565b6000600267ffffffffffffffff81111561286f5761286e61384b565b5b60405190808252806020026020018201604052801561289d5781602001602082028036833780820191505090505b50905030816000815181106128b5576128b461387a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561295557600080fd5b505afa158015612969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298d91906138be565b816001815181106129a1576129a061387a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a06307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461186b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612a689594939291906139e4565b600060405180830381600087803b158015612a8257600080fd5b505af1158015612a96573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ad8578082015181840152602081019050612abd565b83811115612ae7576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b0982612a9e565b612b138185612aa9565b9350612b23818560208601612aba565b612b2c81612aed565b840191505092915050565b60006020820190508181036000830152612b518184612afe565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b8982612b5e565b9050919050565b612b9981612b7e565b8114612ba457600080fd5b50565b600081359050612bb681612b90565b92915050565b6000819050919050565b612bcf81612bbc565b8114612bda57600080fd5b50565b600081359050612bec81612bc6565b92915050565b60008060408385031215612c0957612c08612b59565b5b6000612c1785828601612ba7565b9250506020612c2885828601612bdd565b9150509250929050565b60008115159050919050565b612c4781612c32565b82525050565b6000602082019050612c626000830184612c3e565b92915050565b6000819050919050565b6000612c8d612c88612c8384612b5e565b612c68565b612b5e565b9050919050565b6000612c9f82612c72565b9050919050565b6000612cb182612c94565b9050919050565b612cc181612ca6565b82525050565b6000602082019050612cdc6000830184612cb8565b92915050565b612ceb81612bbc565b82525050565b6000602082019050612d066000830184612ce2565b92915050565b600080600060608486031215612d2557612d24612b59565b5b6000612d3386828701612ba7565b9350506020612d4486828701612ba7565b9250506040612d5586828701612bdd565b9150509250925092565b600060ff82169050919050565b612d7581612d5f565b82525050565b6000602082019050612d906000830184612d6c565b92915050565b612d9f81612b7e565b82525050565b6000602082019050612dba6000830184612d96565b92915050565b600060208284031215612dd657612dd5612b59565b5b6000612de484828501612ba7565b91505092915050565b612df681612c32565b8114612e0157600080fd5b50565b600081359050612e1381612ded565b92915050565b60008060408385031215612e3057612e2f612b59565b5b6000612e3e85828601612ba7565b9250506020612e4f85828601612e04565b9150509250929050565b60008060408385031215612e7057612e6f612b59565b5b6000612e7e85828601612ba7565b9250506020612e8f85828601612ba7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ee057607f821691505b60208210811415612ef457612ef3612e99565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f30602083612aa9565b9150612f3b82612efa565b602082019050919050565b60006020820190508181036000830152612f5f81612f23565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fa082612bbc565b9150612fab83612bbc565b925082821015612fbe57612fbd612f66565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061300382612bbc565b915061300e83612bbc565b92508261301e5761301d612fc9565b5b828204905092915050565b7f54726164696e6720697320616374697665000000000000000000000000000000600082015250565b600061305f601183612aa9565b915061306a82613029565b602082019050919050565b6000602082019050818103600083015261308e81613052565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006130f1603983612aa9565b91506130fc82613095565b604082019050919050565b60006020820190508181036000830152613120816130e4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613183602683612aa9565b915061318e82613127565b604082019050919050565b600060208201905081810360008301526131b281613176565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613210578086048111156131ec576131eb612f66565b5b60018516156131fb5780820291505b8081029050613209856131b9565b94506131d0565b94509492505050565b60008261322957600190506132e5565b8161323757600090506132e5565b816001811461324d576002811461325757613286565b60019150506132e5565b60ff84111561326957613268612f66565b5b8360020a9150848211156132805761327f612f66565b5b506132e5565b5060208310610133831016604e8410600b84101617156132bb5782820a9050838111156132b6576132b5612f66565b5b6132e5565b6132c884848460016131c6565b925090508184048111156132df576132de612f66565b5b81810290505b9392505050565b60006132f782612bbc565b915061330283612bbc565b925061332f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613219565b905092915050565b600061334282612bbc565b915061334d83612bbc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561338657613385612f66565b5b828202905092915050565b600061339c82612bbc565b91506133a783612bbc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133dc576133db612f66565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061341d601b83612aa9565b9150613428826133e7565b602082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006134af602483612aa9565b91506134ba82613453565b604082019050919050565b600060208201905081810360008301526134de816134a2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613541602283612aa9565b915061354c826134e5565b604082019050919050565b6000602082019050818103600083015261357081613534565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006135d3602583612aa9565b91506135de82613577565b604082019050919050565b60006020820190508181036000830152613602816135c6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613665602383612aa9565b915061367082613609565b604082019050919050565b6000602082019050818103600083015261369481613658565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006136d1601683612aa9565b91506136dc8261369b565b602082019050919050565b60006020820190508181036000830152613700816136c4565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061373d601383612aa9565b915061374882613707565b602082019050919050565b6000602082019050818103600083015261376c81613730565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006137cf602183612aa9565b91506137da82613773565b604082019050919050565b600060208201905081810360008301526137fe816137c2565b9050919050565b600081905092915050565b50565b6000613820600083613805565b915061382b82613810565b600082019050919050565b600061384182613813565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506138b881612b90565b92915050565b6000602082840312156138d4576138d3612b59565b5b60006138e2848285016138a9565b91505092915050565b6000819050919050565b600061391061390b613906846138eb565b612c68565b612bbc565b9050919050565b613920816138f5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61395b81612b7e565b82525050565b600061396d8383613952565b60208301905092915050565b6000602082019050919050565b600061399182613926565b61399b8185613931565b93506139a683613942565b8060005b838110156139d75781516139be8882613961565b97506139c983613979565b9250506001810190506139aa565b5085935050505092915050565b600060a0820190506139f96000830188612ce2565b613a066020830187613917565b8181036040830152613a188186613986565b9050613a276060830185612d96565b613a346080830184612ce2565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c25d508146c23bf87b96d3b8106bf2c828c94e85252fbe3fbfb49eec7cc9aeee64736f6c63430008090033

Deployed Bytecode Sourcemap

29588:8808:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7686:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9860:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29662:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8809:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10512:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8650:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11277:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29720:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34714:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29919:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8981:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22188:148;;;;;;;;;;;;;:::i;:::-;;29796:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32675:361;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33469:238;;;;;;;;;;;;;:::i;:::-;;21544:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33043:370;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7906:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30200:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34050:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11999:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9322:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34496:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30418:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29879:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33859:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33716:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9561:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29836:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22492:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32096:572;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7686:100;7740:13;7773:5;7766:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7686:100;:::o;9860:169::-;9943:4;9960:39;9969:12;:10;:12::i;:::-;9983:7;9992:6;9960:8;:39::i;:::-;10017:4;10010:11;;9860:169;;;;:::o;29662:51::-;;;:::o;8809:108::-;8870:7;8897:12;;8890:19;;8809:108;:::o;10512:355::-;10652:4;10669:36;10679:6;10687:9;10698:6;10669:9;:36::i;:::-;10716:121;10725:6;10733:12;:10;:12::i;:::-;10747:89;10785:6;10747:89;;;;;;;;;;;;;;;;;:11;:19;10759:6;10747:19;;;;;;;;;;;;;;;:33;10767:12;:10;:12::i;:::-;10747:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10716:8;:121::i;:::-;10855:4;10848:11;;10512:355;;;;;:::o;8650:93::-;8708:5;8733:2;8726:9;;8650:93;:::o;11277:218::-;11365:4;11382:83;11391:12;:10;:12::i;:::-;11405:7;11414:50;11453:10;11414:11;:25;11426:12;:10;:12::i;:::-;11414:25;;;;;;;;;;;;;;;:34;11440:7;11414:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11382:8;:83::i;:::-;11483:4;11476:11;;11277:218;;;;:::o;29720:38::-;;;:::o;34714:125::-;34779:4;34803:19;:28;34823:7;34803:28;;;;;;;;;;;;;;;;;;;;;;;;;34796:35;;34714:125;;;:::o;29919:31::-;;;;;;;;;;;;;:::o;8981:127::-;9055:7;9082:9;:18;9092:7;9082:18;;;;;;;;;;;;;;;;9075:25;;8981:127;;;:::o;22188:148::-;21767:12;:10;:12::i;:::-;21757:22;;:6;;;;;;;;;;;:22;;;21749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22295:1:::1;22258:40;;22279:6;;;;;;;;;;;22258:40;;;;;;;;;;;;22326:1;22309:6;;:19;;;;;;;;;;;;;;;;;;22188:148::o:0;29796:30::-;;;;;;;;;;;;;:::o;32675:361::-;32722:7;32742:22;32767:1;32742:26;;32779:18;32835:7;32819:12;;32801:15;:30;;;;:::i;:::-;32800:42;;;;:::i;:::-;32779:63;;32847:15;32865:14;32847:32;;32905:14;32891:10;:28;32888:110;;32953:10;32936:14;:27;;;;:::i;:::-;32926:37;;32888:110;;;32991:1;32981:11;;32888:110;33021:7;33014:14;;;;;32675:361;:::o;33469:238::-;21767:12;:10;:12::i;:::-;21757:22;;:6;;;;;;;;;;;:22;;;21749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33533:13:::1;;;;;;;;;;;33532:14;33524:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;33589:4;33573:13;;:20;;;;;;;;;;;;;;;;;;33618:4;33604:11;;:18;;;;;;;;;;;;;;;;;;33646:12;33633:10;:25;;;;33684:15;33669:12;:30;;;;33469:238::o:0;21544:79::-;21582:7;21609:6;;;;;;;;;;;21602:13;;21544:79;:::o;33043:370::-;33091:7;33111:23;33137:1;33111:27;;33149:18;33205:7;33189:12;;33171:15;:30;;;;:::i;:::-;33170:42;;;;:::i;:::-;33149:63;;33217:16;33236:15;33217:34;;33277:15;33263:10;:29;33260:114;;33328:10;33310:15;:28;;;;:::i;:::-;33299:39;;33260:114;;;33367:1;33356:12;;33260:114;33397:8;33390:15;;;;;33043:370;:::o;7906:104::-;7962:13;7995:7;7988:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7906:104;:::o;30200:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;34050:242::-;21767:12;:10;:12::i;:::-;21757:22;;:6;;;;;;;;;;;:22;;;21749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34157:13:::1;34149:21;;:4;:21;;;;34141:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;34243:41;34272:4;34278:5;34243:28;:41::i;:::-;34050:242:::0;;:::o;11999:269::-;12092:4;12109:129;12118:12;:10;:12::i;:::-;12132:7;12141:96;12180:15;12141:96;;;;;;;;;;;;;;;;;:11;:25;12153:12;:10;:12::i;:::-;12141:25;;;;;;;;;;;;;;;:34;12167:7;12141:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12109:8;:129::i;:::-;12256:4;12249:11;;11999:269;;;;:::o;9322:175::-;9408:4;9425:42;9435:12;:10;:12::i;:::-;9449:9;9460:6;9425:9;:42::i;:::-;9485:4;9478:11;;9322:175;;;;:::o;34496:208::-;21767:12;:10;:12::i;:::-;21757:22;;:6;;;;;;;;;;;:22;;;21749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34633:15:::1;;;;;;;;;;;34590:59;;34613:18;34590:59;;;;;;;;;;;;34678:18;34660:15;;:36;;;;;;;;;;;;;;;;;;34496:208:::0;:::o;30418:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29879:33::-;;;;;;;;;;;;;:::o;33859:182::-;21767:12;:10;:12::i;:::-;21757:22;;:6;;;;;;;;;;;:22;;;21749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33975:8:::1;33944:19;:28;33964:7;33944:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34015:7;33999:34;;;34024:8;33999:34;;;;;;:::i;:::-;;;;;;;;33859:182:::0;;:::o;33716:134::-;21767:12;:10;:12::i;:::-;21757:22;;:6;;;;;;;;;;;:22;;;21749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33838:4:::1;33801:26;:34;33828:6;33801:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;33716:134:::0;;:::o;9561:151::-;9650:7;9677:11;:18;9689:5;9677:18;;;;;;;;;;;;;;;:27;9696:7;9677:27;;;;;;;;;;;;;;;;9670:34;;9561:151;;;;:::o;29836:33::-;;;;:::o;22492:244::-;21767:12;:10;:12::i;:::-;21757:22;;:6;;;;;;;;;;;:22;;;21749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22601:1:::1;22581:22;;:8;:22;;;;22573:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22691:8;22662:38;;22683:6;;;;;;;;;;;22662:38;;;;;;;;;;;;22720:8;22711:6;;:17;;;;;;;;;;;;;;;;;;22492:244:::0;:::o;32096:572::-;32137:7;32157:25;32185:15;32157:43;;32205:18;32261:7;32245:12;;32227:15;:30;;;;:::i;:::-;32226:42;;;;:::i;:::-;32205:63;;32273:18;32294:17;32273:38;;32337:3;32323:10;:17;32320:309;;32384:1;32370:10;32367:1;:13;;;;:::i;:::-;32350;:11;:13::i;:::-;:31;;;;:::i;:::-;:35;32347:232;;;32429:10;32426:1;:13;;;;:::i;:::-;32406:17;:33;;;;:::i;:::-;32393:46;;32469:13;:11;:13::i;:::-;32455:10;:27;32452:74;;32505:13;:11;:13::i;:::-;32491:27;;32452:74;32347:232;;;32559:13;:11;:13::i;:::-;32545:27;;32347:232;32320:309;;;32610:13;:11;:13::i;:::-;32596:27;;32320:309;32650:10;32643:17;;;;;32096:572;:::o;16576:182::-;16634:7;16654:9;16670:1;16666;:5;;;;:::i;:::-;16654:17;;16695:1;16690;:6;;16682:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16749:1;16742:8;;;16576:182;;;;:::o;288:98::-;341:7;368:10;361:17;;288:98;:::o;15195:381::-;15348:1;15331:19;;:5;:19;;;;15323:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15429:1;15410:21;;:7;:21;;;;15402:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15514:6;15484:11;:18;15496:5;15484:18;;;;;;;;;;;;;;;:27;15503:7;15484:27;;;;;;;;;;;;;;;:36;;;;15552:7;15536:32;;15545:5;15536:32;;;15561:6;15536:32;;;;;;:::i;:::-;;;;;;;;15195:381;;;:::o;34848:2433::-;34996:1;34980:18;;:4;:18;;;;34972:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35073:1;35059:16;;:2;:16;;;;35051:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35140:1;35130:6;:11;35127:92;;;35158:28;35174:4;35180:2;35184:1;35158:15;:28::i;:::-;35201:7;;35127:92;35253:7;:5;:7::i;:::-;35245:15;;:4;:15;;;;:36;;;;;35274:7;:5;:7::i;:::-;35268:13;;:2;:13;;;;35245:36;:60;;;;;35303:1;35289:16;;:2;:16;;;;35245:60;:89;;;;;35327:6;35313:21;;:2;:21;;;;35245:89;:106;;;;;35343:8;;;;;;;;;;;35342:9;35245:106;35236:552;;;35366:13;;;;;;;;;;;35362:119;;35395:19;:25;35415:4;35395:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35424:19;:23;35444:2;35424:23;;;;;;;;;;;;;;;;;;;;;;;;;35395:52;35387:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35362:119;35507:25;:31;35533:4;35507:31;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;35543:26;:30;35570:2;35543:30;;;;;;;;;;;;;;;;;;;;;;;;;35542:31;35507:66;35503:280;;;35617:11;:9;:11::i;:::-;35600:13;35610:2;35600:9;:13::i;:::-;35591:6;:22;;;;:::i;:::-;:37;;35583:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35503:280;;;35669:26;:30;35696:2;35669:30;;;;;;;;;;;;;;;;;;;;;;;;;35665:118;;35741:11;:9;:11::i;:::-;35724:13;35734:2;35724:9;:13::i;:::-;35715:6;:22;;;;:::i;:::-;:37;;35707:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35665:118;35503:280;35236:552;35794:28;35825:24;35843:4;35825:9;:24::i;:::-;35794:55;;35860:12;35899:18;;35875:20;:42;;35860:57;;35922:12;35938:8;;;;;;;;;;;35937:9;35922:24;;36048:19;:25;36068:4;36048:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36077:19;:23;36097:2;36077:23;;;;;;;;;;;;;;;;;;;;;;;;;36048:52;36045:99;;;36127:5;36117:15;;36045:99;36157:12;36184:25;36212:18;:16;:18::i;:::-;36184:46;;36241:24;36268:17;:15;:17::i;:::-;36241:44;;36377:7;36374:517;;;36428:25;:29;36454:2;36428:29;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;36481:1;36461:17;:21;36428:54;36424:317;;;36509:38;36543:3;36509:29;36520:17;36509:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;36502:45;;36424:317;;;36608:25;:31;36634:4;36608:31;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;36662:1;36643:16;:20;36608:55;36605:136;;;36688:37;36721:3;36688:28;36699:16;36688:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;36681:44;;36605:136;36424:317;36768:1;36761:4;:8;36758:93;;;36793:42;36809:4;36823;36830;36793:15;:42::i;:::-;36758:93;36875:4;36865:14;;;;;:::i;:::-;;;36374:517;36923:7;:35;;;;;36947:11;;;;;;;;;;;36923:35;:61;;;;;36976:8;;;;;;;;;;;36975:9;36923:61;:110;;;;;37002:25;:31;37028:4;37002:31;;;;;;;;;;;;;;;;;;;;;;;;;37001:32;36923:110;:153;;;;;37051:19;:25;37071:4;37051:25;;;;;;;;;;;;;;;;;;;;;;;;;37050:26;36923:153;:194;;;;;37094:19;:23;37114:2;37094:23;;;;;;;;;;;;;;;;;;;;;;;;;37093:24;36923:194;36905:322;;;37155:4;37144:8;;:15;;;;;;;;;;;;;;;;;;37174:10;:8;:10::i;:::-;37210:5;37199:8;;:16;;;;;;;;;;;;;;;;;;36905:322;37240:33;37256:4;37262:2;37266:6;37240:15;:33::i;:::-;34961:2320;;;;;;34848:2433;;;;:::o;17482:193::-;17568:7;17601:1;17596;:6;;17604:12;17588:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17628:9;17644:1;17640;:5;;;;:::i;:::-;17628:17;;17666:1;17659:8;;;17482:193;;;;;:::o;34301:186::-;34418:5;34384:25;:31;34410:4;34384:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34473:5;34439:40;;34467:4;34439:40;;;;;;;;;;;;34301:186;;:::o;12759:575::-;12917:1;12899:20;;:6;:20;;;;12891:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13001:1;12980:23;;:9;:23;;;;12972:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13057:47;13078:6;13086:9;13097:6;13057:20;:47::i;:::-;13138:71;13160:6;13138:71;;;;;;;;;;;;;;;;;:9;:17;13148:6;13138:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13118:9;:17;13128:6;13118:17;;;;;;;;;;;;;;;:91;;;;13243:32;13268:6;13243:9;:20;13253:9;13243:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13220:9;:20;13230:9;13220:20;;;;;;;;;;;;;;;:55;;;;13308:9;13291:35;;13300:6;13291:35;;;13319:6;13291:35;;;;;;:::i;:::-;;;;;;;;12759:575;;;:::o;17935:473::-;17993:7;18243:1;18238;:6;18234:47;;;18268:1;18261:8;;;;18234:47;18294:9;18310:1;18306;:5;;;;:::i;:::-;18294:17;;18339:1;18334;18330;:5;;;;:::i;:::-;:10;18322:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18399:1;18392:8;;;17935:473;;;;;:::o;18885:132::-;18943:7;18970:39;18974:1;18977;18970:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18963:46;;18885:132;;;;:::o;37897:494::-;37936:23;37962:24;37980:4;37962:9;:24::i;:::-;37936:50;;37997:12;38045:1;38026:15;:20;38023:34;;;38049:7;;;;38023:34;38112:2;38091:18;;:23;;;;:::i;:::-;38073:15;:41;38070:111;;;38167:2;38146:18;;:23;;;;:::i;:::-;38128:41;;38070:111;38194:26;38223:15;38194:44;;38249:36;38266:18;38249:16;:36::i;:::-;38328:15;;;;;;;;;;;38320:29;;38357:21;38320:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38307:76;;;;;37925:466;;;37897:494;:::o;16180:125::-;;;;:::o;19514:279::-;19600:7;19632:1;19628;:5;19635:12;19620:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19659:9;19675:1;19671;:5;;;;:::i;:::-;19659:17;;19784:1;19777:8;;;19514:279;;;;;:::o;37290:597::-;37419:21;37457:1;37443:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37419:40;;37488:4;37470;37475:1;37470:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37514:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37504:4;37509:1;37504:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37550:62;37567:4;37582:15;37600:11;37550:8;:62::i;:::-;37652:15;:66;;;37733:11;37759:1;37803:4;37830;37850:15;37652:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37345:542;37290:597;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:153::-;3917:9;3950:37;3981:5;3950:37;:::i;:::-;3937:50;;3840:153;;;:::o;3999:185::-;4113:64;4171:5;4113:64;:::i;:::-;4108:3;4101:77;3999:185;;:::o;4190:276::-;4310:4;4348:2;4337:9;4333:18;4325:26;;4361:98;4456:1;4445:9;4441:17;4432:6;4361:98;:::i;:::-;4190:276;;;;:::o;4472:118::-;4559:24;4577:5;4559:24;:::i;:::-;4554:3;4547:37;4472:118;;:::o;4596:222::-;4689:4;4727:2;4716:9;4712:18;4704:26;;4740:71;4808:1;4797:9;4793:17;4784:6;4740:71;:::i;:::-;4596:222;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:86::-;5484:7;5524:4;5517:5;5513:16;5502:27;;5449:86;;;:::o;5541:112::-;5624:22;5640:5;5624:22;:::i;:::-;5619:3;5612:35;5541:112;;:::o;5659:214::-;5748:4;5786:2;5775:9;5771:18;5763:26;;5799:67;5863:1;5852:9;5848:17;5839:6;5799:67;:::i;:::-;5659:214;;;;:::o;5879:118::-;5966:24;5984:5;5966:24;:::i;:::-;5961:3;5954:37;5879:118;;:::o;6003:222::-;6096:4;6134:2;6123:9;6119:18;6111:26;;6147:71;6215:1;6204:9;6200:17;6191:6;6147:71;:::i;:::-;6003:222;;;;:::o;6231:329::-;6290:6;6339:2;6327:9;6318:7;6314:23;6310:32;6307:119;;;6345:79;;:::i;:::-;6307:119;6465:1;6490:53;6535:7;6526:6;6515:9;6511:22;6490:53;:::i;:::-;6480:63;;6436:117;6231:329;;;;:::o;6566:116::-;6636:21;6651:5;6636:21;:::i;:::-;6629:5;6626:32;6616:60;;6672:1;6669;6662:12;6616:60;6566:116;:::o;6688:133::-;6731:5;6769:6;6756:20;6747:29;;6785:30;6809:5;6785:30;:::i;:::-;6688:133;;;;:::o;6827:468::-;6892:6;6900;6949:2;6937:9;6928:7;6924:23;6920:32;6917:119;;;6955:79;;:::i;:::-;6917:119;7075:1;7100:53;7145:7;7136:6;7125:9;7121:22;7100:53;:::i;:::-;7090:63;;7046:117;7202:2;7228:50;7270:7;7261:6;7250:9;7246:22;7228:50;:::i;:::-;7218:60;;7173:115;6827:468;;;;;:::o;7301:474::-;7369:6;7377;7426:2;7414:9;7405:7;7401:23;7397:32;7394:119;;;7432:79;;:::i;:::-;7394:119;7552:1;7577:53;7622:7;7613:6;7602:9;7598:22;7577:53;:::i;:::-;7567:63;;7523:117;7679:2;7705:53;7750:7;7741:6;7730:9;7726:22;7705:53;:::i;:::-;7695:63;;7650:118;7301:474;;;;;:::o;7781:180::-;7829:77;7826:1;7819:88;7926:4;7923:1;7916:15;7950:4;7947:1;7940:15;7967:320;8011:6;8048:1;8042:4;8038:12;8028:22;;8095:1;8089:4;8085:12;8116:18;8106:81;;8172:4;8164:6;8160:17;8150:27;;8106:81;8234:2;8226:6;8223:14;8203:18;8200:38;8197:84;;;8253:18;;:::i;:::-;8197:84;8018:269;7967:320;;;:::o;8293:182::-;8433:34;8429:1;8421:6;8417:14;8410:58;8293:182;:::o;8481:366::-;8623:3;8644:67;8708:2;8703:3;8644:67;:::i;:::-;8637:74;;8720:93;8809:3;8720:93;:::i;:::-;8838:2;8833:3;8829:12;8822:19;;8481:366;;;:::o;8853:419::-;9019:4;9057:2;9046:9;9042:18;9034:26;;9106:9;9100:4;9096:20;9092:1;9081:9;9077:17;9070:47;9134:131;9260:4;9134:131;:::i;:::-;9126:139;;8853:419;;;:::o;9278:180::-;9326:77;9323:1;9316:88;9423:4;9420:1;9413:15;9447:4;9444:1;9437:15;9464:191;9504:4;9524:20;9542:1;9524:20;:::i;:::-;9519:25;;9558:20;9576:1;9558:20;:::i;:::-;9553:25;;9597:1;9594;9591:8;9588:34;;;9602:18;;:::i;:::-;9588:34;9647:1;9644;9640:9;9632:17;;9464:191;;;;:::o;9661:180::-;9709:77;9706:1;9699:88;9806:4;9803:1;9796:15;9830:4;9827:1;9820:15;9847:185;9887:1;9904:20;9922:1;9904:20;:::i;:::-;9899:25;;9938:20;9956:1;9938:20;:::i;:::-;9933:25;;9977:1;9967:35;;9982:18;;:::i;:::-;9967:35;10024:1;10021;10017:9;10012:14;;9847:185;;;;:::o;10038:167::-;10178:19;10174:1;10166:6;10162:14;10155:43;10038:167;:::o;10211:366::-;10353:3;10374:67;10438:2;10433:3;10374:67;:::i;:::-;10367:74;;10450:93;10539:3;10450:93;:::i;:::-;10568:2;10563:3;10559:12;10552:19;;10211:366;;;:::o;10583:419::-;10749:4;10787:2;10776:9;10772:18;10764:26;;10836:9;10830:4;10826:20;10822:1;10811:9;10807:17;10800:47;10864:131;10990:4;10864:131;:::i;:::-;10856:139;;10583:419;;;:::o;11008:244::-;11148:34;11144:1;11136:6;11132:14;11125:58;11217:27;11212:2;11204:6;11200:15;11193:52;11008:244;:::o;11258:366::-;11400:3;11421:67;11485:2;11480:3;11421:67;:::i;:::-;11414:74;;11497:93;11586:3;11497:93;:::i;:::-;11615:2;11610:3;11606:12;11599:19;;11258:366;;;:::o;11630:419::-;11796:4;11834:2;11823:9;11819:18;11811:26;;11883:9;11877:4;11873:20;11869:1;11858:9;11854:17;11847:47;11911:131;12037:4;11911:131;:::i;:::-;11903:139;;11630:419;;;:::o;12055:225::-;12195:34;12191:1;12183:6;12179:14;12172:58;12264:8;12259:2;12251:6;12247:15;12240:33;12055:225;:::o;12286:366::-;12428:3;12449:67;12513:2;12508:3;12449:67;:::i;:::-;12442:74;;12525:93;12614:3;12525:93;:::i;:::-;12643:2;12638:3;12634:12;12627:19;;12286:366;;;:::o;12658:419::-;12824:4;12862:2;12851:9;12847:18;12839:26;;12911:9;12905:4;12901:20;12897:1;12886:9;12882:17;12875:47;12939:131;13065:4;12939:131;:::i;:::-;12931:139;;12658:419;;;:::o;13083:102::-;13125:8;13172:5;13169:1;13165:13;13144:34;;13083:102;;;:::o;13191:848::-;13252:5;13259:4;13283:6;13274:15;;13307:5;13298:14;;13321:712;13342:1;13332:8;13329:15;13321:712;;;13437:4;13432:3;13428:14;13422:4;13419:24;13416:50;;;13446:18;;:::i;:::-;13416:50;13496:1;13486:8;13482:16;13479:451;;;13911:4;13904:5;13900:16;13891:25;;13479:451;13961:4;13955;13951:15;13943:23;;13991:32;14014:8;13991:32;:::i;:::-;13979:44;;13321:712;;;13191:848;;;;;;;:::o;14045:1073::-;14099:5;14290:8;14280:40;;14311:1;14302:10;;14313:5;;14280:40;14339:4;14329:36;;14356:1;14347:10;;14358:5;;14329:36;14425:4;14473:1;14468:27;;;;14509:1;14504:191;;;;14418:277;;14468:27;14486:1;14477:10;;14488:5;;;14504:191;14549:3;14539:8;14536:17;14533:43;;;14556:18;;:::i;:::-;14533:43;14605:8;14602:1;14598:16;14589:25;;14640:3;14633:5;14630:14;14627:40;;;14647:18;;:::i;:::-;14627:40;14680:5;;;14418:277;;14804:2;14794:8;14791:16;14785:3;14779:4;14776:13;14772:36;14754:2;14744:8;14741:16;14736:2;14730:4;14727:12;14723:35;14707:111;14704:246;;;14860:8;14854:4;14850:19;14841:28;;14895:3;14888:5;14885:14;14882:40;;;14902:18;;:::i;:::-;14882:40;14935:5;;14704:246;14975:42;15013:3;15003:8;14997:4;14994:1;14975:42;:::i;:::-;14960:57;;;;15049:4;15044:3;15040:14;15033:5;15030:25;15027:51;;;15058:18;;:::i;:::-;15027:51;15107:4;15100:5;15096:16;15087:25;;14045:1073;;;;;;:::o;15124:285::-;15184:5;15208:23;15226:4;15208:23;:::i;:::-;15200:31;;15252:27;15270:8;15252:27;:::i;:::-;15240:39;;15298:104;15335:66;15325:8;15319:4;15298:104;:::i;:::-;15289:113;;15124:285;;;;:::o;15415:348::-;15455:7;15478:20;15496:1;15478:20;:::i;:::-;15473:25;;15512:20;15530:1;15512:20;:::i;:::-;15507:25;;15700:1;15632:66;15628:74;15625:1;15622:81;15617:1;15610:9;15603:17;15599:105;15596:131;;;15707:18;;:::i;:::-;15596:131;15755:1;15752;15748:9;15737:20;;15415:348;;;;:::o;15769:305::-;15809:3;15828:20;15846:1;15828:20;:::i;:::-;15823:25;;15862:20;15880:1;15862:20;:::i;:::-;15857:25;;16016:1;15948:66;15944:74;15941:1;15938:81;15935:107;;;16022:18;;:::i;:::-;15935:107;16066:1;16063;16059:9;16052:16;;15769:305;;;;:::o;16080:177::-;16220:29;16216:1;16208:6;16204:14;16197:53;16080:177;:::o;16263:366::-;16405:3;16426:67;16490:2;16485:3;16426:67;:::i;:::-;16419:74;;16502:93;16591:3;16502:93;:::i;:::-;16620:2;16615:3;16611:12;16604:19;;16263:366;;;:::o;16635:419::-;16801:4;16839:2;16828:9;16824:18;16816:26;;16888:9;16882:4;16878:20;16874:1;16863:9;16859:17;16852:47;16916:131;17042:4;16916:131;:::i;:::-;16908:139;;16635:419;;;:::o;17060:223::-;17200:34;17196:1;17188:6;17184:14;17177:58;17269:6;17264:2;17256:6;17252:15;17245:31;17060:223;:::o;17289:366::-;17431:3;17452:67;17516:2;17511:3;17452:67;:::i;:::-;17445:74;;17528:93;17617:3;17528:93;:::i;:::-;17646:2;17641:3;17637:12;17630:19;;17289:366;;;:::o;17661:419::-;17827:4;17865:2;17854:9;17850:18;17842:26;;17914:9;17908:4;17904:20;17900:1;17889:9;17885:17;17878:47;17942:131;18068:4;17942:131;:::i;:::-;17934:139;;17661:419;;;:::o;18086:221::-;18226:34;18222:1;18214:6;18210:14;18203:58;18295:4;18290:2;18282:6;18278:15;18271:29;18086:221;:::o;18313:366::-;18455:3;18476:67;18540:2;18535:3;18476:67;:::i;:::-;18469:74;;18552:93;18641:3;18552:93;:::i;:::-;18670:2;18665:3;18661:12;18654:19;;18313:366;;;:::o;18685:419::-;18851:4;18889:2;18878:9;18874:18;18866:26;;18938:9;18932:4;18928:20;18924:1;18913:9;18909:17;18902:47;18966:131;19092:4;18966:131;:::i;:::-;18958:139;;18685:419;;;:::o;19110:224::-;19250:34;19246:1;19238:6;19234:14;19227:58;19319:7;19314:2;19306:6;19302:15;19295:32;19110:224;:::o;19340:366::-;19482:3;19503:67;19567:2;19562:3;19503:67;:::i;:::-;19496:74;;19579:93;19668:3;19579:93;:::i;:::-;19697:2;19692:3;19688:12;19681:19;;19340:366;;;:::o;19712:419::-;19878:4;19916:2;19905:9;19901:18;19893:26;;19965:9;19959:4;19955:20;19951:1;19940:9;19936:17;19929:47;19993:131;20119:4;19993:131;:::i;:::-;19985:139;;19712:419;;;:::o;20137:222::-;20277:34;20273:1;20265:6;20261:14;20254:58;20346:5;20341:2;20333:6;20329:15;20322:30;20137:222;:::o;20365:366::-;20507:3;20528:67;20592:2;20587:3;20528:67;:::i;:::-;20521:74;;20604:93;20693:3;20604:93;:::i;:::-;20722:2;20717:3;20713:12;20706:19;;20365:366;;;:::o;20737:419::-;20903:4;20941:2;20930:9;20926:18;20918:26;;20990:9;20984:4;20980:20;20976:1;20965:9;20961:17;20954:47;21018:131;21144:4;21018:131;:::i;:::-;21010:139;;20737:419;;;:::o;21162:172::-;21302:24;21298:1;21290:6;21286:14;21279:48;21162:172;:::o;21340:366::-;21482:3;21503:67;21567:2;21562:3;21503:67;:::i;:::-;21496:74;;21579:93;21668:3;21579:93;:::i;:::-;21697:2;21692:3;21688:12;21681:19;;21340:366;;;:::o;21712:419::-;21878:4;21916:2;21905:9;21901:18;21893:26;;21965:9;21959:4;21955:20;21951:1;21940:9;21936:17;21929:47;21993:131;22119:4;21993:131;:::i;:::-;21985:139;;21712:419;;;:::o;22137:169::-;22277:21;22273:1;22265:6;22261:14;22254:45;22137:169;:::o;22312:366::-;22454:3;22475:67;22539:2;22534:3;22475:67;:::i;:::-;22468:74;;22551:93;22640:3;22551:93;:::i;:::-;22669:2;22664:3;22660:12;22653:19;;22312:366;;;:::o;22684:419::-;22850:4;22888:2;22877:9;22873:18;22865:26;;22937:9;22931:4;22927:20;22923:1;22912:9;22908:17;22901:47;22965:131;23091:4;22965:131;:::i;:::-;22957:139;;22684:419;;;:::o;23109:220::-;23249:34;23245:1;23237:6;23233:14;23226:58;23318:3;23313:2;23305:6;23301:15;23294:28;23109:220;:::o;23335:366::-;23477:3;23498:67;23562:2;23557:3;23498:67;:::i;:::-;23491:74;;23574:93;23663:3;23574:93;:::i;:::-;23692:2;23687:3;23683:12;23676:19;;23335:366;;;:::o;23707:419::-;23873:4;23911:2;23900:9;23896:18;23888:26;;23960:9;23954:4;23950:20;23946:1;23935:9;23931:17;23924:47;23988:131;24114:4;23988:131;:::i;:::-;23980:139;;23707:419;;;:::o;24132:147::-;24233:11;24270:3;24255:18;;24132:147;;;;:::o;24285:114::-;;:::o;24405:398::-;24564:3;24585:83;24666:1;24661:3;24585:83;:::i;:::-;24578:90;;24677:93;24766:3;24677:93;:::i;:::-;24795:1;24790:3;24786:11;24779:18;;24405:398;;;:::o;24809:379::-;24993:3;25015:147;25158:3;25015:147;:::i;:::-;25008:154;;25179:3;25172:10;;24809:379;;;:::o;25194:180::-;25242:77;25239:1;25232:88;25339:4;25336:1;25329:15;25363:4;25360:1;25353:15;25380:180;25428:77;25425:1;25418:88;25525:4;25522:1;25515:15;25549:4;25546:1;25539:15;25566:143;25623:5;25654:6;25648:13;25639:22;;25670:33;25697:5;25670:33;:::i;:::-;25566:143;;;;:::o;25715:351::-;25785:6;25834:2;25822:9;25813:7;25809:23;25805:32;25802:119;;;25840:79;;:::i;:::-;25802:119;25960:1;25985:64;26041:7;26032:6;26021:9;26017:22;25985:64;:::i;:::-;25975:74;;25931:128;25715:351;;;;:::o;26072:85::-;26117:7;26146:5;26135:16;;26072:85;;;:::o;26163:158::-;26221:9;26254:61;26272:42;26281:32;26307:5;26281:32;:::i;:::-;26272:42;:::i;:::-;26254:61;:::i;:::-;26241:74;;26163:158;;;:::o;26327:147::-;26422:45;26461:5;26422:45;:::i;:::-;26417:3;26410:58;26327:147;;:::o;26480:114::-;26547:6;26581:5;26575:12;26565:22;;26480:114;;;:::o;26600:184::-;26699:11;26733:6;26728:3;26721:19;26773:4;26768:3;26764:14;26749:29;;26600:184;;;;:::o;26790:132::-;26857:4;26880:3;26872:11;;26910:4;26905:3;26901:14;26893:22;;26790:132;;;:::o;26928:108::-;27005:24;27023:5;27005:24;:::i;:::-;27000:3;26993:37;26928:108;;:::o;27042:179::-;27111:10;27132:46;27174:3;27166:6;27132:46;:::i;:::-;27210:4;27205:3;27201:14;27187:28;;27042:179;;;;:::o;27227:113::-;27297:4;27329;27324:3;27320:14;27312:22;;27227:113;;;:::o;27376:732::-;27495:3;27524:54;27572:5;27524:54;:::i;:::-;27594:86;27673:6;27668:3;27594:86;:::i;:::-;27587:93;;27704:56;27754:5;27704:56;:::i;:::-;27783:7;27814:1;27799:284;27824:6;27821:1;27818:13;27799:284;;;27900:6;27894:13;27927:63;27986:3;27971:13;27927:63;:::i;:::-;27920:70;;28013:60;28066:6;28013:60;:::i;:::-;28003:70;;27859:224;27846:1;27843;27839:9;27834:14;;27799:284;;;27803:14;28099:3;28092:10;;27500:608;;;27376:732;;;;:::o;28114:831::-;28377:4;28415:3;28404:9;28400:19;28392:27;;28429:71;28497:1;28486:9;28482:17;28473:6;28429:71;:::i;:::-;28510:80;28586:2;28575:9;28571:18;28562:6;28510:80;:::i;:::-;28637:9;28631:4;28627:20;28622:2;28611:9;28607:18;28600:48;28665:108;28768:4;28759:6;28665:108;:::i;:::-;28657:116;;28783:72;28851:2;28840:9;28836:18;28827:6;28783:72;:::i;:::-;28865:73;28933:3;28922:9;28918:19;28909:6;28865:73;:::i;:::-;28114:831;;;;;;;;:::o

Swarm Source

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