ETH Price: $3,311.33 (-0.69%)

Token

OpenbetAI (OPENBET)

Overview

Max Total Supply

10,000,000 OPENBET

Holders

863 (0.00%)

Total Transfers

-

Market

Price

$0.0141 @ 0.000004 ETH

Onchain Market Cap

$140,610.20

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

OPENBET is a betting platform to integrate AI, OpenBetAI is revolutionizing the betting industry on Arbitrum. .

Contract Source Code Verified (Exact Match)

Contract Name:
OPENBETAI

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-02-28
*/

// File: contracts/opb2.sol


pragma solidity 0.8.13;

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


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


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



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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;


    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(address recipient) {
        require(recipient != address(0), "Parameter can't be zero address");
        uint256 TOTAL_SUPPLY = 10 * 10**6 * 10**18;
        _name = "OpenbetAI";
        _symbol = "OPENBET";
        _mint(recipient,TOTAL_SUPPLY);
        emit Transfer(address(0), recipient, TOTAL_SUPPLY);
    }

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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




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 OPENBETAI is ERC20 {
  IUniswapV2Router02 public constant uniswapV2Router= IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);
  address public immutable pair;

  address public developmentWallet;
  address public marketingWallet;
  address public rewardWallet;

  uint256 public maxWallet;

  uint256 public swapThreshold;
  bool public swapEnabled;

  bool tradingEnabled;
  bool inSwap;

  uint256 public buyTax = 500;
  uint256 public sellTax = 500;
  uint256 public transferTax = 0;
  uint256 public rewardShare = 600;
  uint256 public marketingShare = 200;
  uint256 public developmentShare = 200;
  uint256 totalShares = 1000;
  uint256 constant TAX_DENOMINATOR = 10000;

  uint256 public transferGas = 25000;

  mapping (address => bool) public isWhitelisted;
  mapping (address => bool) public isCEX;
  mapping (address => bool) public isMarketMaker;

  event EnableTrading();
  event TriggerSwapBack();
  event Burn(uint256 amount);
  event RecoverETH(uint256 amount);
  event RecoverERC20(address indexed token, uint256 amount);
  event SetWhitelisted(address indexed account, bool indexed status);
  event SetCEX(address indexed account, bool indexed exempt);
  event SetMarketMaker(address indexed account, bool indexed isMM);
  event SetTaxes(uint256 reward, uint256 liquidity, uint256 marketing);
  event SetShares(uint256 rewardShare, uint256 developmentShare, uint256 marketingShare);
  event SetSwapBackSettings(bool enabled, uint256 amount);
  event SetTransferGas(uint256 newGas, uint256 oldGas);
  event SetDevelopmentWallet(address newWallet, address oldWallet);
  event SetMarketingWallet(address newWallet, address oldWallet);
  event SetrewardWallet(address newAddress, address oldAddress);
  event DepositDevelopment(address indexed wallet, uint256 amount);
  event DepositMarketing(address indexed wallet, uint256 amount);
  event DepositRewards(address indexed wallet, uint256 amount);
  event UpdatedmaxWallet(uint256 amount);

  modifier swapping() { 
    inSwap = true;
    _;
    inSwap = false;
  }

  constructor(
    address owner,
    address marketing,
    address development,
    address reward
  ) ERC20(owner) {
    require(development != address(0) && reward != address(0), "Parameter can't be zero address");

    pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(uniswapV2Router.WETH(), address(this));
    _approve(address(this), address(uniswapV2Router), type(uint256).max);
    isMarketMaker[pair] = true;

    rewardWallet = reward;
    marketingWallet = marketing;
    developmentWallet = development;
    isWhitelisted[marketingWallet] = true;
    isWhitelisted[owner] = true;

    uint256 maxWalletPcnt = 2;   
    maxWallet = totalSupply() * maxWalletPcnt / 1000; // 0.2% max wallet
  }

  // Override

  function _transfer(address sender, address recipient, uint256 amount) internal override {
    if (isWhitelisted[sender] || isWhitelisted[recipient] || inSwap) {
      super._transfer(sender, recipient, amount);
      return;
    }
    
    require(tradingEnabled, "Trading is disabled");
    if (isMarketMaker[sender]) {
      require(amount + balanceOf(recipient) <= maxWallet, "Max wallet exceeded");
    }

    if (_shouldSwapBack(recipient)) { _swapBack(); }

    uint256 amountAfterTaxes = _takeTax(sender, recipient, amount);

    super._transfer(sender, recipient, amountAfterTaxes);
  }

  receive() external payable {}

  // Private

  function _takeTax(address sender, address recipient, uint256 amount) private returns (uint256) {
    if (amount == 0) { return amount; }

    uint256 taxAmount = amount * _getTotalTax(sender, recipient) / TAX_DENOMINATOR;
    if (taxAmount > 0) { super._transfer(sender, address(this), taxAmount); }

    return amount - taxAmount;
  }

  function _getTotalTax(address sender, address recipient) private view returns (uint256) {
    if (isCEX[recipient]) { return 0; }
    if (isCEX[sender]) { return buyTax; }

    if (isMarketMaker[sender]) {
      return buyTax;
    } else if (isMarketMaker[recipient]) {
      return sellTax;
    } else {
      return transferTax;
    }
  }

  function _shouldSwapBack(address recipient) private view returns (bool) {
    return isMarketMaker[recipient] && swapEnabled && balanceOf(address(this)) >= swapThreshold;
  }

  function _swapBack() private swapping {
    address[] memory path = new address[](2);
    path[0] = address(this);
    path[1] = uniswapV2Router.WETH();
    uint256 balanceBefore = address(this).balance;

    uniswapV2Router.swapExactTokensForETH(
      swapThreshold,
      0,
      path,
      address(this),
      block.timestamp
    );

    uint256 amountETH = address(this).balance - balanceBefore;
    uint256 amountETHDevelopment = amountETH * developmentShare / totalShares;
    uint256 amountETHMarketing = amountETH * marketingShare / totalShares;
    uint256 amountETHRewards = amountETH * rewardShare / totalShares;

    (bool developmentSuccess,) = payable(developmentWallet).call{value: amountETHDevelopment, gas: transferGas}("");
    if (developmentSuccess) { emit DepositDevelopment(developmentWallet, amountETHDevelopment); }

    (bool marketingSuccess,) = payable(marketingWallet).call{value: amountETHMarketing, gas: transferGas}("");
    if (marketingSuccess) { emit DepositMarketing(marketingWallet, amountETHMarketing); }

    (bool rewardSuccess,) = payable(rewardWallet).call{value: amountETHRewards, gas: transferGas}("");
    if (rewardSuccess) { emit DepositRewards(rewardWallet, amountETHRewards); }
  }

  function updateMaxWallet(uint256 amount) external onlyOwner {
        require(amount >= 1,"Minimum value is 1.");
        maxWallet = totalSupply() * amount / 1000; // 0.2% max wallet
        emit UpdatedmaxWallet(amount);
    }



  // Owner

  function enableTrading() external onlyOwner {
    tradingEnabled = true;
    emit EnableTrading();
  }


  function triggerSwapBack() external onlyOwner {
    _swapBack();
    emit TriggerSwapBack();
  }

  function burnFromStorage(uint256 amount) external onlyOwner {
    uint256 tokenAmount = amount * 10**decimals();
    super._transfer(address(this), address(0xdead), tokenAmount);
    emit Burn(amount);
  }

  function recoverETH() external onlyOwner {
    uint256 amount = address(this).balance;
    (bool sent,) = payable(marketingWallet).call{value: amount, gas: transferGas}("");
    require(sent, "Tx failed");
    emit RecoverETH(amount);
  }

  function recoverERC20(IERC20 token, address recipient) external onlyOwner {
    require(address(token) != address(this), "Can't withdraw OPENBET");
    uint256 amount = token.balanceOf(address(this));
    token.transfer(recipient, amount);
    emit RecoverERC20(address(token), amount);
  }

  function setIsWhitelisted(address account, bool value) external onlyOwner {
    isWhitelisted[account] = value;
    emit SetWhitelisted(account, value);
  }

  function setIsCEX(address account, bool value) external onlyOwner {
    isCEX[account] = value;
    emit SetCEX(account, value);
  }

  function setIsMarketMaker(address account, bool value) external onlyOwner {
    require(account != pair, "Can't modify pair");
    isMarketMaker[account] = value;
    emit SetMarketMaker(account, value);
  }

  function setTaxes(uint256 newBuyTax, uint256 newSellTax, uint256 newTransferTax) external onlyOwner {
    require(newBuyTax <= 1000 && newSellTax <= 2000, "Too high taxes");
    buyTax = newBuyTax;
    sellTax = newSellTax;
    transferTax = newTransferTax;
    emit SetTaxes(buyTax, sellTax, transferTax);
  }

  function setShares(
    uint256 newRewardShare,
    uint256 newDevelopmentShare,
    uint256 newMarketingShare
  ) external onlyOwner {
    totalShares = rewardShare + developmentShare + marketingShare;
    require(totalShares>0,"Total shares must be greater than 0.");
    rewardShare = newRewardShare;
    developmentShare = newDevelopmentShare;
    marketingShare = newMarketingShare;
    
    emit SetShares(rewardShare, developmentShare, marketingShare);
  }

  function setSwapBackSettings(bool enabled, uint256 amount) external onlyOwner {
    swapEnabled = enabled;
    swapThreshold = amount;
    emit SetSwapBackSettings(enabled, amount);
  }

  function setTransferGas(uint256 newGas) external onlyOwner {
    require(newGas >= 21000 && newGas <= 50000, "Invalid gas parameter");
    emit SetTransferGas(newGas, transferGas);
    transferGas = newGas;
  }

  function setDevelopmentWallet(address newWallet) external onlyOwner {
    require(newWallet != address(0), "New development wallet is the zero address");
    emit SetDevelopmentWallet(newWallet, developmentWallet);
    developmentWallet = newWallet;
  }

  function setMarketingWallet(address newWallet) external onlyOwner {
    require(newWallet != address(0), "New marketing wallet is the zero address");
    emit SetMarketingWallet(newWallet, marketingWallet);
    marketingWallet = newWallet;
  }

  function setrewardWallet(address newAddress) external onlyOwner {
    require(newAddress != address(0), "New reward pool is the zero address");
    emit SetrewardWallet(newAddress, rewardWallet);
    rewardWallet = newAddress;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"development","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositDevelopment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositRewards","type":"event"},{"anonymous":false,"inputs":[],"name":"EnableTrading","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":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RecoverERC20","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RecoverETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"exempt","type":"bool"}],"name":"SetCEX","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWallet","type":"address"},{"indexed":false,"internalType":"address","name":"oldWallet","type":"address"}],"name":"SetDevelopmentWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isMM","type":"bool"}],"name":"SetMarketMaker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWallet","type":"address"},{"indexed":false,"internalType":"address","name":"oldWallet","type":"address"}],"name":"SetMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"developmentShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingShare","type":"uint256"}],"name":"SetShares","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SetSwapBackSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"SetTaxes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newGas","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldGas","type":"uint256"}],"name":"SetTransferGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"SetWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"},{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"}],"name":"SetrewardWallet","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":[],"name":"TriggerSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedmaxWallet","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFromStorage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","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":"developmentShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","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":"","type":"address"}],"name":"isCEX","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketMaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsCEX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsMarketMaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRewardShare","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"}],"name":"setShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyTax","type":"uint256"},{"internalType":"uint256","name":"newSellTax","type":"uint256"},{"internalType":"uint256","name":"newTransferTax","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newGas","type":"uint256"}],"name":"setTransferGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setrewardWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526101f4600c556101f4600d556000600e55610258600f5560c860105560c86011556103e86012556161a86013553480156200003e57600080fd5b506040516200610c3803806200610c833981810160405281019062000064919062000c15565b836000620000776200079560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000187576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017e9062000ce8565b60405180910390fd5b60006a084595161401484a00000090506040518060400160405280600981526020017f4f70656e6265744149000000000000000000000000000000000000000000000081525060049080519060200190620001e492919062000afb565b506040518060400160405280600781526020017f4f50454e42455400000000000000000000000000000000000000000000000000815250600590805190602001906200023292919062000afb565b506200024582826200079d60201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002a5919062000d25565b60405180910390a35050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156200031a5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6200035c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003539062000ce8565b60405180910390fd5b731b02da8cb0d097eb8d57a175b88c7d8b4799750673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e2919062000d42565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396731b02da8cb0d097eb8d57a175b88c7d8b4799750673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200045d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000483919062000d42565b306040518363ffffffff1660e01b8152600401620004a392919062000d85565b6020604051808303816000875af1158015620004c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e9919062000d42565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200056330731b02da8cb0d097eb8d57a175b88c7d8b479975067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200091660201b60201c565b60016016600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160146000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600290506103e8816200076c62000ae760201b60201c565b62000778919062000de1565b62000784919062000e71565b60098190555050505050506200110c565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200080f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008069062000ef9565b60405180910390fd5b620008236000838362000af160201b60201c565b806003600082825462000837919062000f1b565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200088f919062000f1b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008f6919062000d25565b60405180910390a3620009126000838362000af660201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000988576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200097f9062000fee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f19062001086565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000ada919062000d25565b60405180910390a3505050565b6000600354905090565b505050565b505050565b82805462000b0990620010d7565b90600052602060002090601f01602090048101928262000b2d576000855562000b79565b82601f1062000b4857805160ff191683800117855562000b79565b8280016001018555821562000b79579182015b8281111562000b7857825182559160200191906001019062000b5b565b5b50905062000b88919062000b8c565b5090565b5b8082111562000ba757600081600090555060010162000b8d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bdd8262000bb0565b9050919050565b62000bef8162000bd0565b811462000bfb57600080fd5b50565b60008151905062000c0f8162000be4565b92915050565b6000806000806080858703121562000c325762000c3162000bab565b5b600062000c428782880162000bfe565b945050602062000c558782880162000bfe565b935050604062000c688782880162000bfe565b925050606062000c7b8782880162000bfe565b91505092959194509250565b600082825260208201905092915050565b7f506172616d657465722063616e2774206265207a65726f206164647265737300600082015250565b600062000cd0601f8362000c87565b915062000cdd8262000c98565b602082019050919050565b6000602082019050818103600083015262000d038162000cc1565b9050919050565b6000819050919050565b62000d1f8162000d0a565b82525050565b600060208201905062000d3c600083018462000d14565b92915050565b60006020828403121562000d5b5762000d5a62000bab565b5b600062000d6b8482850162000bfe565b91505092915050565b62000d7f8162000bd0565b82525050565b600060408201905062000d9c600083018562000d74565b62000dab602083018462000d74565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dee8262000d0a565b915062000dfb8362000d0a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e375762000e3662000db2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e7e8262000d0a565b915062000e8b8362000d0a565b92508262000e9e5762000e9d62000e42565b5b828204905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ee1601f8362000c87565b915062000eee8262000ea9565b602082019050919050565b6000602082019050818103600083015262000f148162000ed2565b9050919050565b600062000f288262000d0a565b915062000f358362000d0a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f6d5762000f6c62000db2565b5b828201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062000fd660248362000c87565b915062000fe38262000f78565b604082019050919050565b60006020820190508181036000830152620010098162000fc7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200106e60228362000c87565b91506200107b8262001010565b604082019050919050565b60006020820190508181036000830152620010a1816200105f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010f057607f821691505b602082108103620011065762001105620010a8565b5b50919050565b608051614fdd6200112f60003960008181611b050152611e230152614fdd6000f3fe6080604052600436106102975760003560e01c80638a8c523c1161015a578063c3f06e55116100c1578063e9dae5ed1161007a578063e9dae5ed146109ff578063f2fde38b14610a28578063f8b45b0514610a51578063fa03f79714610a7c578063fb75b2c714610aa7578063fd62136e14610ad25761029e565b8063c3f06e55146108df578063c7e066ba14610908578063cc1776d314610931578063cdc0519f1461095c578063dd62ed3e14610999578063df20fd49146109d65761029e565b8063a0885e9311610113578063a0885e93146107bd578063a457c2d7146107e6578063a8aa1b3114610823578063a9059cbb1461084e578063ab261a401461088b578063c04a5414146108b45761029e565b80638a8c523c146106bf5780638d48e2ae146106d65780638da5cb5b1461070157806395d89b411461072c578063974f7a51146107575780639d892a60146107805761029e565b80633af32abf116101fe57806370a08231116101b757806370a08231146105c3578063715018a61461060057806372ac24861461061757806375f0a874146106405780638124f7ac1461066b578063886f039a146106965761029e565b80633af32abf146104c55780633c32279814610502578063456d401a1461052d5780634f7041a5146105445780635d098b381461056f5780636ddd1713146105985761029e565b80631694505e116102505780631694505e146103a157806318160ddd146103cc5780631c499ab0146103f757806323b872dd14610420578063313ce5671461045d57806339509351146104885761029e565b80630445b667146102a35780630614117a146102ce57806306fdde03146102e557806309218ee714610310578063095ea7b31461033b57806309ec923a146103785761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610afb565b6040516102c591906137af565b60405180910390f35b3480156102da57600080fd5b506102e3610b01565b005b3480156102f157600080fd5b506102fa610ca9565b6040516103079190613863565b60405180910390f35b34801561031c57600080fd5b50610325610d3b565b60405161033291906137af565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190613923565b610d41565b60405161036f919061397e565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a91906139c5565b610d64565b005b3480156103ad57600080fd5b506103b6610e9a565b6040516103c39190613a64565b60405180910390f35b3480156103d857600080fd5b506103e1610eb2565b6040516103ee91906137af565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190613a7f565b610ebc565b005b34801561042c57600080fd5b5061044760048036038101906104429190613aac565b610ff5565b604051610454919061397e565b60405180910390f35b34801561046957600080fd5b50610472611024565b60405161047f9190613b1b565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190613923565b61102d565b6040516104bc919061397e565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613b36565b611064565b6040516104f9919061397e565b60405180910390f35b34801561050e57600080fd5b50610517611084565b60405161052491906137af565b60405180910390f35b34801561053957600080fd5b5061054261108a565b005b34801561055057600080fd5b50610559611155565b60405161056691906137af565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190613b36565b61115b565b005b3480156105a457600080fd5b506105ad6112fe565b6040516105ba919061397e565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190613b36565b611311565b6040516105f791906137af565b60405180910390f35b34801561060c57600080fd5b5061061561135a565b005b34801561062357600080fd5b5061063e60048036038101906106399190613b36565b6114ad565b005b34801561064c57600080fd5b50610655611650565b6040516106629190613b72565b60405180910390f35b34801561067757600080fd5b50610680611676565b60405161068d91906137af565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190613bcb565b61167c565b005b3480156106cb57600080fd5b506106d46118cf565b005b3480156106e257600080fd5b506106eb6119ad565b6040516106f891906137af565b60405180910390f35b34801561070d57600080fd5b506107166119b3565b6040516107239190613b72565b60405180910390f35b34801561073857600080fd5b506107416119dc565b60405161074e9190613863565b60405180910390f35b34801561076357600080fd5b5061077e600480360381019061077991906139c5565b611a6e565b005b34801561078c57600080fd5b506107a760048036038101906107a29190613b36565b611c32565b6040516107b4919061397e565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190613c0b565b611c52565b005b3480156107f257600080fd5b5061080d60048036038101906108089190613923565b611daa565b60405161081a919061397e565b60405180910390f35b34801561082f57600080fd5b50610838611e21565b6040516108459190613b72565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613923565b611e45565b604051610882919061397e565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad91906139c5565b611e68565b005b3480156108c057600080fd5b506108c9611f9e565b6040516108d69190613b72565b60405180910390f35b3480156108eb57600080fd5b5061090660048036038101906109019190613a7f565b611fc4565b005b34801561091457600080fd5b5061092f600480360381019061092a9190613a7f565b6120c4565b005b34801561093d57600080fd5b506109466121f1565b60405161095391906137af565b60405180910390f35b34801561096857600080fd5b50610983600480360381019061097e9190613b36565b6121f7565b604051610990919061397e565b60405180910390f35b3480156109a557600080fd5b506109c060048036038101906109bb9190613c5e565b612217565b6040516109cd91906137af565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190613c9e565b61229e565b005b348015610a0b57600080fd5b50610a266004803603810190610a219190613c0b565b612391565b005b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190613b36565b6124d4565b005b348015610a5d57600080fd5b50610a66612695565b604051610a7391906137af565b60405180910390f35b348015610a8857600080fd5b50610a9161269b565b604051610a9e91906137af565b60405180910390f35b348015610ab357600080fd5b50610abc6126a1565b604051610ac99190613b72565b60405180910390f35b348015610ade57600080fd5b50610af96004803603810190610af49190613b36565b6126c7565b005b600a5481565b610b0961286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8d90613d2a565b60405180910390fd5b60004790506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260135490604051610be790613d7b565b600060405180830381858888f193505050503d8060008114610c25576040519150601f19603f3d011682016040523d82523d6000602084013e610c2a565b606091505b5050905080610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6590613ddc565b60405180910390fd5b7f1a7b2077c74823735be4614fcd43560a79257045fed49803a9afcb829f5dd64082604051610c9d91906137af565b60405180910390a15050565b606060048054610cb890613e2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce490613e2b565b8015610d315780601f10610d0657610100808354040283529160200191610d31565b820191906000526020600020905b815481529060010190602001808311610d1457829003601f168201915b5050505050905090565b60105481565b600080610d4c61286a565b9050610d59818585612872565b600191505092915050565b610d6c61286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df090613d2a565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f26742d25b283cf51a0e3c4183d934871ed96d1bd33cf40706f87a94f29f686ac60405160405180910390a35050565b731b02da8cb0d097eb8d57a175b88c7d8b4799750681565b6000600354905090565b610ec461286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890613d2a565b60405180910390fd5b6001811015610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90613ea8565b60405180910390fd5b6103e881610fa1610eb2565b610fab9190613ef7565b610fb59190613f80565b6009819055507fe5256bd7f53a82b84850000e86f4c7a83417ef39249ec70aa373642b42fd81f281604051610fea91906137af565b60405180910390a150565b60008061100061286a565b905061100d858285612a3b565b611018858585612ac7565b60019150509392505050565b60006012905090565b60008061103861286a565b905061105981858561104a8589612217565b6110549190613fb1565b612872565b600191505092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b600f5481565b61109261286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690613d2a565b60405180910390fd5b611127612cc6565b7fc3847b85df00019847396e0b9ab32d1ffecd62345efde8c5a2e12e3faf16426060405160405180910390a1565b600c5481565b61116361286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790613d2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690614079565b60405180910390fd5b7f83e9b0264f846c733d721fc222bd1b60d47f257c00f2c8ee812d03d29fa87a6481600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516112b2929190614099565b60405180910390a180600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61136261286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690613d2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6114b561286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990613d2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890614134565b60405180910390fd5b7f2b355c7f17401d9755d704a4cf6149a26deb56a381bb5d06c87b608183dbe09c81600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611604929190614099565b60405180910390a180600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b61168461286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890613d2a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361177f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611776906141a0565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117ba9190613b72565b602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb91906141d5565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611838929190614202565b6020604051808303816000875af1158015611857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187b9190614240565b508273ffffffffffffffffffffffffffffffffffffffff167f162acc66e07bc6348204016cf61e16aba04a2747be6c50bebe02212375e45db3826040516118c291906137af565b60405180910390a2505050565b6118d761286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b90613d2a565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055507f1d97b7cdf6b6f3405cbe398b69512e5419a0ce78232b6e9c6ffbf1466774bd8d60405160405180910390a1565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546119eb90613e2b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1790613e2b565b8015611a645780601f10611a3957610100808354040283529160200191611a64565b820191906000526020600020905b815481529060010190602001808311611a4757829003601f168201915b5050505050905090565b611a7661286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa90613d2a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b88906142b9565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f91c7c4816685f676b7f12953bffd031e09ee4e1ab280ea728f0878b9e6169d2760405160405180910390a35050565b60156020528060005260406000206000915054906101000a900460ff1681565b611c5a61286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde90613d2a565b60405180910390fd5b601054601154600f54611cfa9190613fb1565b611d049190613fb1565b601281905550600060125411611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d469061434b565b60405180910390fd5b82600f8190555081601181905550806010819055507fe4249bdce1740711944d1ea1e985ec5a1242a1e59223a6600a022508c5f5cc92600f54601154601054604051611d9d9392919061436b565b60405180910390a1505050565b600080611db561286a565b90506000611dc38286612217565b905083811015611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff90614414565b60405180910390fd5b611e158286868403612872565b60019250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080611e5061286a565b9050611e5d818585612ac7565b600191505092915050565b611e7061286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef490613d2a565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fed21431d4765f69a883370d157f0281b346757dba7db85bf2e07279e637008f560405160405180910390a35050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fcc61286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205090613d2a565b60405180910390fd5b6000612063611024565b600a61206f9190614567565b8261207a9190613ef7565b90506120893061dead836132a6565b7fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb826040516120b891906137af565b60405180910390a15050565b6120cc61286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215090613d2a565b60405180910390fd5b615208811015801561216d575061c3508111155b6121ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a3906145fe565b60405180910390fd5b7f5f7d3624d8104c570d075b4974657a671fe520c17a32251cc222553dd2703956816013546040516121df92919061461e565b60405180910390a18060138190555050565b600d5481565b60166020528060005260406000206000915054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6122a661286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90613d2a565b60405180910390fd5b81600b60006101000a81548160ff02191690831515021790555080600a819055507f87648e954f6c9d5f5f7ddeb39f95ca8f7d2c14cbb2f190d5250f9b6eb04dd9348282604051612385929190614647565b60405180910390a15050565b61239961286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d90613d2a565b60405180910390fd5b6103e8831115801561243a57506107d08211155b612479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612470906146bc565b60405180910390fd5b82600c8190555081600d8190555080600e819055507f1b647027e5370ddacee0860509426ca1696d274d2496b55307819c3d9a7f432e600c54600d54600e546040516124c79392919061436b565b60405180910390a1505050565b6124dc61286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256090613d2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cf9061474e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b60135481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6126cf61286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461275c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275390613d2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c2906147e0565b60405180910390fd5b7f257bcc733500fc1235e5678bae75067872614f58e43af7060fc3e04fb72f828581600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161281e929190614099565b60405180910390a180600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d890614872565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294790614904565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a2e91906137af565b60405180910390a3505050565b6000612a478484612217565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612ac15781811015612ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aaa90614970565b60405180910390fd5b612ac08484848403612872565b5b50505050565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b685750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612b7f5750600b60029054906101000a900460ff165b15612b9457612b8f8383836132a6565b612cc1565b600b60019054906101000a900460ff16612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda906149dc565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612c8e57600954612c4183611311565b82612c4c9190613fb1565b1115612c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8490614a48565b60405180910390fd5b5b612c9782613528565b15612ca557612ca4612cc6565b5b6000612cb28484846135ac565b9050612cbf8484836132a6565b505b505050565b6001600b60026101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612cfe57612cfd614a68565b5b604051908082528060200260200182016040528015612d2c5781602001602082028036833780820191505090505b5090503081600081518110612d4457612d43614a97565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050731b02da8cb0d097eb8d57a175b88c7d8b4799750673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e019190614adb565b81600181518110612e1557612e14614a97565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050731b02da8cb0d097eb8d57a175b88c7d8b4799750673ffffffffffffffffffffffffffffffffffffffff166318cbafe5600a5460008530426040518663ffffffff1660e01b8152600401612eac959493929190614c01565b6000604051808303816000875af1158015612ecb573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612ef49190614d74565b5060008147612f039190614dbd565b9050600060125460115483612f189190613ef7565b612f229190613f80565b9050600060125460105484612f379190613ef7565b612f419190613f80565b90506000601254600f5485612f569190613ef7565b612f609190613f80565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460135490604051612fae90613d7b565b600060405180830381858888f193505050503d8060008114612fec576040519150601f19603f3d011682016040523d82523d6000602084013e612ff1565b606091505b50509050801561306c57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff4517c34a6d60f2c017c6bdea0c1fc068da72bfacbc4946424c4240fa3d5ba778560405161306391906137af565b60405180910390a25b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684601354906040516130b890613d7b565b600060405180830381858888f193505050503d80600081146130f6576040519150601f19603f3d011682016040523d82523d6000602084013e6130fb565b606091505b50509050801561317657600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3f23532d157662f8e9a6ac5b7e53203a21c32e3ecb7d8c113345a48fa88195198560405161316d91906137af565b60405180910390a25b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684601354906040516131c290613d7b565b600060405180830381858888f193505050503d8060008114613200576040519150601f19603f3d011682016040523d82523d6000602084013e613205565b606091505b50509050801561328057600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fb9ad861b752f80117b35bea6dec99933d8a5ae360f2839ee8784b750d56134098560405161327791906137af565b60405180910390a25b5050505050505050506000600b60026101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330c90614e63565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337b90614ef5565b60405180910390fd5b61338f83838361360f565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340d90614f87565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134ab9190613fb1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161350f91906137af565b60405180910390a3613522848484613614565b50505050565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561358f5750600b60009054906101000a900460ff165b80156135a55750600a546135a230611311565b10155b9050919050565b60008082036135bd57819050613608565b60006127106135cc8686613619565b846135d79190613ef7565b6135e19190613f80565b905060008111156135f8576135f78530836132a6565b5b80836136049190614dbd565b9150505b9392505050565b505050565b505050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136765760009050613790565b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136d257600c549050613790565b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561372e57600c549050613790565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561378a57600d549050613790565b600e5490505b92915050565b6000819050919050565b6137a981613796565b82525050565b60006020820190506137c460008301846137a0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138045780820151818401526020810190506137e9565b83811115613813576000848401525b50505050565b6000601f19601f8301169050919050565b6000613835826137ca565b61383f81856137d5565b935061384f8185602086016137e6565b61385881613819565b840191505092915050565b6000602082019050818103600083015261387d818461382a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138c482613899565b9050919050565b6138d4816138b9565b81146138df57600080fd5b50565b6000813590506138f1816138cb565b92915050565b61390081613796565b811461390b57600080fd5b50565b60008135905061391d816138f7565b92915050565b6000806040838503121561393a5761393961388f565b5b6000613948858286016138e2565b92505060206139598582860161390e565b9150509250929050565b60008115159050919050565b61397881613963565b82525050565b6000602082019050613993600083018461396f565b92915050565b6139a281613963565b81146139ad57600080fd5b50565b6000813590506139bf81613999565b92915050565b600080604083850312156139dc576139db61388f565b5b60006139ea858286016138e2565b92505060206139fb858286016139b0565b9150509250929050565b6000819050919050565b6000613a2a613a25613a2084613899565b613a05565b613899565b9050919050565b6000613a3c82613a0f565b9050919050565b6000613a4e82613a31565b9050919050565b613a5e81613a43565b82525050565b6000602082019050613a796000830184613a55565b92915050565b600060208284031215613a9557613a9461388f565b5b6000613aa38482850161390e565b91505092915050565b600080600060608486031215613ac557613ac461388f565b5b6000613ad3868287016138e2565b9350506020613ae4868287016138e2565b9250506040613af58682870161390e565b9150509250925092565b600060ff82169050919050565b613b1581613aff565b82525050565b6000602082019050613b306000830184613b0c565b92915050565b600060208284031215613b4c57613b4b61388f565b5b6000613b5a848285016138e2565b91505092915050565b613b6c816138b9565b82525050565b6000602082019050613b876000830184613b63565b92915050565b6000613b98826138b9565b9050919050565b613ba881613b8d565b8114613bb357600080fd5b50565b600081359050613bc581613b9f565b92915050565b60008060408385031215613be257613be161388f565b5b6000613bf085828601613bb6565b9250506020613c01858286016138e2565b9150509250929050565b600080600060608486031215613c2457613c2361388f565b5b6000613c328682870161390e565b9350506020613c438682870161390e565b9250506040613c548682870161390e565b9150509250925092565b60008060408385031215613c7557613c7461388f565b5b6000613c83858286016138e2565b9250506020613c94858286016138e2565b9150509250929050565b60008060408385031215613cb557613cb461388f565b5b6000613cc3858286016139b0565b9250506020613cd48582860161390e565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d146020836137d5565b9150613d1f82613cde565b602082019050919050565b60006020820190508181036000830152613d4381613d07565b9050919050565b600081905092915050565b50565b6000613d65600083613d4a565b9150613d7082613d55565b600082019050919050565b6000613d8682613d58565b9150819050919050565b7f5478206661696c65640000000000000000000000000000000000000000000000600082015250565b6000613dc66009836137d5565b9150613dd182613d90565b602082019050919050565b60006020820190508181036000830152613df581613db9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e4357607f821691505b602082108103613e5657613e55613dfc565b5b50919050565b7f4d696e696d756d2076616c756520697320312e00000000000000000000000000600082015250565b6000613e926013836137d5565b9150613e9d82613e5c565b602082019050919050565b60006020820190508181036000830152613ec181613e85565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f0282613796565b9150613f0d83613796565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f4657613f45613ec8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f8b82613796565b9150613f9683613796565b925082613fa657613fa5613f51565b5b828204905092915050565b6000613fbc82613796565b9150613fc783613796565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ffc57613ffb613ec8565b5b828201905092915050565b7f4e6577206d61726b6574696e672077616c6c657420697320746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006140636028836137d5565b915061406e82614007565b604082019050919050565b6000602082019050818103600083015261409281614056565b9050919050565b60006040820190506140ae6000830185613b63565b6140bb6020830184613b63565b9392505050565b7f4e657720646576656c6f706d656e742077616c6c657420697320746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061411e602a836137d5565b9150614129826140c2565b604082019050919050565b6000602082019050818103600083015261414d81614111565b9050919050565b7f43616e2774207769746864726177204f50454e42455400000000000000000000600082015250565b600061418a6016836137d5565b915061419582614154565b602082019050919050565b600060208201905081810360008301526141b98161417d565b9050919050565b6000815190506141cf816138f7565b92915050565b6000602082840312156141eb576141ea61388f565b5b60006141f9848285016141c0565b91505092915050565b60006040820190506142176000830185613b63565b61422460208301846137a0565b9392505050565b60008151905061423a81613999565b92915050565b6000602082840312156142565761425561388f565b5b60006142648482850161422b565b91505092915050565b7f43616e2774206d6f646966792070616972000000000000000000000000000000600082015250565b60006142a36011836137d5565b91506142ae8261426d565b602082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b7f546f74616c20736861726573206d75737420626520677265617465722074686160008201527f6e20302e00000000000000000000000000000000000000000000000000000000602082015250565b60006143356024836137d5565b9150614340826142d9565b604082019050919050565b6000602082019050818103600083015261436481614328565b9050919050565b600060608201905061438060008301866137a0565b61438d60208301856137a0565b61439a60408301846137a0565b949350505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006143fe6025836137d5565b9150614409826143a2565b604082019050919050565b6000602082019050818103600083015261442d816143f1565b9050919050565b60008160011c9050919050565b6000808291508390505b600185111561448b5780860481111561446757614466613ec8565b5b60018516156144765780820291505b808102905061448485614434565b945061444b565b94509492505050565b6000826144a45760019050614560565b816144b25760009050614560565b81600181146144c857600281146144d257614501565b6001915050614560565b60ff8411156144e4576144e3613ec8565b5b8360020a9150848211156144fb576144fa613ec8565b5b50614560565b5060208310610133831016604e8410600b84101617156145365782820a90508381111561453157614530613ec8565b5b614560565b6145438484846001614441565b9250905081840481111561455a57614559613ec8565b5b81810290505b9392505050565b600061457282613796565b915061457d83613aff565b92506145aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614494565b905092915050565b7f496e76616c69642067617320706172616d657465720000000000000000000000600082015250565b60006145e86015836137d5565b91506145f3826145b2565b602082019050919050565b60006020820190508181036000830152614617816145db565b9050919050565b600060408201905061463360008301856137a0565b61464060208301846137a0565b9392505050565b600060408201905061465c600083018561396f565b61466960208301846137a0565b9392505050565b7f546f6f2068696768207461786573000000000000000000000000000000000000600082015250565b60006146a6600e836137d5565b91506146b182614670565b602082019050919050565b600060208201905081810360008301526146d581614699565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147386026836137d5565b9150614743826146dc565b604082019050919050565b600060208201905081810360008301526147678161472b565b9050919050565b7f4e65772072657761726420706f6f6c20697320746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147ca6023836137d5565b91506147d58261476e565b604082019050919050565b600060208201905081810360008301526147f9816147bd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061485c6024836137d5565b915061486782614800565b604082019050919050565b6000602082019050818103600083015261488b8161484f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006148ee6022836137d5565b91506148f982614892565b604082019050919050565b6000602082019050818103600083015261491d816148e1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061495a601d836137d5565b915061496582614924565b602082019050919050565b600060208201905081810360008301526149898161494d565b9050919050565b7f54726164696e672069732064697361626c656400000000000000000000000000600082015250565b60006149c66013836137d5565b91506149d182614990565b602082019050919050565b600060208201905081810360008301526149f5816149b9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614a326013836137d5565b9150614a3d826149fc565b602082019050919050565b60006020820190508181036000830152614a6181614a25565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614ad5816138cb565b92915050565b600060208284031215614af157614af061388f565b5b6000614aff84828501614ac6565b91505092915050565b6000819050919050565b6000614b2d614b28614b2384614b08565b613a05565b613796565b9050919050565b614b3d81614b12565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b78816138b9565b82525050565b6000614b8a8383614b6f565b60208301905092915050565b6000602082019050919050565b6000614bae82614b43565b614bb88185614b4e565b9350614bc383614b5f565b8060005b83811015614bf4578151614bdb8882614b7e565b9750614be683614b96565b925050600181019050614bc7565b5085935050505092915050565b600060a082019050614c1660008301886137a0565b614c236020830187614b34565b8181036040830152614c358186614ba3565b9050614c446060830185613b63565b614c5160808301846137a0565b9695505050505050565b600080fd5b614c6982613819565b810181811067ffffffffffffffff82111715614c8857614c87614a68565b5b80604052505050565b6000614c9b613885565b9050614ca78282614c60565b919050565b600067ffffffffffffffff821115614cc757614cc6614a68565b5b602082029050602081019050919050565b600080fd5b6000614cf0614ceb84614cac565b614c91565b90508083825260208201905060208402830185811115614d1357614d12614cd8565b5b835b81811015614d3c5780614d2888826141c0565b845260208401935050602081019050614d15565b5050509392505050565b600082601f830112614d5b57614d5a614c5b565b5b8151614d6b848260208601614cdd565b91505092915050565b600060208284031215614d8a57614d8961388f565b5b600082015167ffffffffffffffff811115614da857614da7613894565b5b614db484828501614d46565b91505092915050565b6000614dc882613796565b9150614dd383613796565b925082821015614de657614de5613ec8565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e4d6025836137d5565b9150614e5882614df1565b604082019050919050565b60006020820190508181036000830152614e7c81614e40565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614edf6023836137d5565b9150614eea82614e83565b604082019050919050565b60006020820190508181036000830152614f0e81614ed2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f716026836137d5565b9150614f7c82614f15565b604082019050919050565b60006020820190508181036000830152614fa081614f64565b905091905056fea26469706673582212206de612a78b2446a33448a07ec9d128662f8754807a8832fc6b1a69b985c2ade464736f6c634300080d003300000000000000000000000020db2f48bca09ca03c133560aa10a03fbcd70aad0000000000000000000000004ea77d77e18de1ad4a8b3f501f6d06fa4877d34b0000000000000000000000008fab083437521ce8665cde5b31fab31cd2b86f3c0000000000000000000000008836a1a66f56908b3e7f3f7982e1444aa5e7a9d2

Deployed Bytecode

0x6080604052600436106102975760003560e01c80638a8c523c1161015a578063c3f06e55116100c1578063e9dae5ed1161007a578063e9dae5ed146109ff578063f2fde38b14610a28578063f8b45b0514610a51578063fa03f79714610a7c578063fb75b2c714610aa7578063fd62136e14610ad25761029e565b8063c3f06e55146108df578063c7e066ba14610908578063cc1776d314610931578063cdc0519f1461095c578063dd62ed3e14610999578063df20fd49146109d65761029e565b8063a0885e9311610113578063a0885e93146107bd578063a457c2d7146107e6578063a8aa1b3114610823578063a9059cbb1461084e578063ab261a401461088b578063c04a5414146108b45761029e565b80638a8c523c146106bf5780638d48e2ae146106d65780638da5cb5b1461070157806395d89b411461072c578063974f7a51146107575780639d892a60146107805761029e565b80633af32abf116101fe57806370a08231116101b757806370a08231146105c3578063715018a61461060057806372ac24861461061757806375f0a874146106405780638124f7ac1461066b578063886f039a146106965761029e565b80633af32abf146104c55780633c32279814610502578063456d401a1461052d5780634f7041a5146105445780635d098b381461056f5780636ddd1713146105985761029e565b80631694505e116102505780631694505e146103a157806318160ddd146103cc5780631c499ab0146103f757806323b872dd14610420578063313ce5671461045d57806339509351146104885761029e565b80630445b667146102a35780630614117a146102ce57806306fdde03146102e557806309218ee714610310578063095ea7b31461033b57806309ec923a146103785761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610afb565b6040516102c591906137af565b60405180910390f35b3480156102da57600080fd5b506102e3610b01565b005b3480156102f157600080fd5b506102fa610ca9565b6040516103079190613863565b60405180910390f35b34801561031c57600080fd5b50610325610d3b565b60405161033291906137af565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190613923565b610d41565b60405161036f919061397e565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a91906139c5565b610d64565b005b3480156103ad57600080fd5b506103b6610e9a565b6040516103c39190613a64565b60405180910390f35b3480156103d857600080fd5b506103e1610eb2565b6040516103ee91906137af565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190613a7f565b610ebc565b005b34801561042c57600080fd5b5061044760048036038101906104429190613aac565b610ff5565b604051610454919061397e565b60405180910390f35b34801561046957600080fd5b50610472611024565b60405161047f9190613b1b565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190613923565b61102d565b6040516104bc919061397e565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613b36565b611064565b6040516104f9919061397e565b60405180910390f35b34801561050e57600080fd5b50610517611084565b60405161052491906137af565b60405180910390f35b34801561053957600080fd5b5061054261108a565b005b34801561055057600080fd5b50610559611155565b60405161056691906137af565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190613b36565b61115b565b005b3480156105a457600080fd5b506105ad6112fe565b6040516105ba919061397e565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190613b36565b611311565b6040516105f791906137af565b60405180910390f35b34801561060c57600080fd5b5061061561135a565b005b34801561062357600080fd5b5061063e60048036038101906106399190613b36565b6114ad565b005b34801561064c57600080fd5b50610655611650565b6040516106629190613b72565b60405180910390f35b34801561067757600080fd5b50610680611676565b60405161068d91906137af565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190613bcb565b61167c565b005b3480156106cb57600080fd5b506106d46118cf565b005b3480156106e257600080fd5b506106eb6119ad565b6040516106f891906137af565b60405180910390f35b34801561070d57600080fd5b506107166119b3565b6040516107239190613b72565b60405180910390f35b34801561073857600080fd5b506107416119dc565b60405161074e9190613863565b60405180910390f35b34801561076357600080fd5b5061077e600480360381019061077991906139c5565b611a6e565b005b34801561078c57600080fd5b506107a760048036038101906107a29190613b36565b611c32565b6040516107b4919061397e565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190613c0b565b611c52565b005b3480156107f257600080fd5b5061080d60048036038101906108089190613923565b611daa565b60405161081a919061397e565b60405180910390f35b34801561082f57600080fd5b50610838611e21565b6040516108459190613b72565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613923565b611e45565b604051610882919061397e565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad91906139c5565b611e68565b005b3480156108c057600080fd5b506108c9611f9e565b6040516108d69190613b72565b60405180910390f35b3480156108eb57600080fd5b5061090660048036038101906109019190613a7f565b611fc4565b005b34801561091457600080fd5b5061092f600480360381019061092a9190613a7f565b6120c4565b005b34801561093d57600080fd5b506109466121f1565b60405161095391906137af565b60405180910390f35b34801561096857600080fd5b50610983600480360381019061097e9190613b36565b6121f7565b604051610990919061397e565b60405180910390f35b3480156109a557600080fd5b506109c060048036038101906109bb9190613c5e565b612217565b6040516109cd91906137af565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190613c9e565b61229e565b005b348015610a0b57600080fd5b50610a266004803603810190610a219190613c0b565b612391565b005b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190613b36565b6124d4565b005b348015610a5d57600080fd5b50610a66612695565b604051610a7391906137af565b60405180910390f35b348015610a8857600080fd5b50610a9161269b565b604051610a9e91906137af565b60405180910390f35b348015610ab357600080fd5b50610abc6126a1565b604051610ac99190613b72565b60405180910390f35b348015610ade57600080fd5b50610af96004803603810190610af49190613b36565b6126c7565b005b600a5481565b610b0961286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8d90613d2a565b60405180910390fd5b60004790506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260135490604051610be790613d7b565b600060405180830381858888f193505050503d8060008114610c25576040519150601f19603f3d011682016040523d82523d6000602084013e610c2a565b606091505b5050905080610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6590613ddc565b60405180910390fd5b7f1a7b2077c74823735be4614fcd43560a79257045fed49803a9afcb829f5dd64082604051610c9d91906137af565b60405180910390a15050565b606060048054610cb890613e2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce490613e2b565b8015610d315780601f10610d0657610100808354040283529160200191610d31565b820191906000526020600020905b815481529060010190602001808311610d1457829003601f168201915b5050505050905090565b60105481565b600080610d4c61286a565b9050610d59818585612872565b600191505092915050565b610d6c61286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df090613d2a565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f26742d25b283cf51a0e3c4183d934871ed96d1bd33cf40706f87a94f29f686ac60405160405180910390a35050565b731b02da8cb0d097eb8d57a175b88c7d8b4799750681565b6000600354905090565b610ec461286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890613d2a565b60405180910390fd5b6001811015610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90613ea8565b60405180910390fd5b6103e881610fa1610eb2565b610fab9190613ef7565b610fb59190613f80565b6009819055507fe5256bd7f53a82b84850000e86f4c7a83417ef39249ec70aa373642b42fd81f281604051610fea91906137af565b60405180910390a150565b60008061100061286a565b905061100d858285612a3b565b611018858585612ac7565b60019150509392505050565b60006012905090565b60008061103861286a565b905061105981858561104a8589612217565b6110549190613fb1565b612872565b600191505092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b600f5481565b61109261286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690613d2a565b60405180910390fd5b611127612cc6565b7fc3847b85df00019847396e0b9ab32d1ffecd62345efde8c5a2e12e3faf16426060405160405180910390a1565b600c5481565b61116361286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790613d2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690614079565b60405180910390fd5b7f83e9b0264f846c733d721fc222bd1b60d47f257c00f2c8ee812d03d29fa87a6481600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516112b2929190614099565b60405180910390a180600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61136261286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690613d2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6114b561286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990613d2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890614134565b60405180910390fd5b7f2b355c7f17401d9755d704a4cf6149a26deb56a381bb5d06c87b608183dbe09c81600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611604929190614099565b60405180910390a180600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b61168461286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890613d2a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361177f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611776906141a0565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117ba9190613b72565b602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb91906141d5565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611838929190614202565b6020604051808303816000875af1158015611857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187b9190614240565b508273ffffffffffffffffffffffffffffffffffffffff167f162acc66e07bc6348204016cf61e16aba04a2747be6c50bebe02212375e45db3826040516118c291906137af565b60405180910390a2505050565b6118d761286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b90613d2a565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055507f1d97b7cdf6b6f3405cbe398b69512e5419a0ce78232b6e9c6ffbf1466774bd8d60405160405180910390a1565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546119eb90613e2b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1790613e2b565b8015611a645780601f10611a3957610100808354040283529160200191611a64565b820191906000526020600020905b815481529060010190602001808311611a4757829003601f168201915b5050505050905090565b611a7661286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa90613d2a565b60405180910390fd5b7f00000000000000000000000036970fc0dc6f3e21c924997bdf4df2a790ddf50373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b88906142b9565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f91c7c4816685f676b7f12953bffd031e09ee4e1ab280ea728f0878b9e6169d2760405160405180910390a35050565b60156020528060005260406000206000915054906101000a900460ff1681565b611c5a61286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde90613d2a565b60405180910390fd5b601054601154600f54611cfa9190613fb1565b611d049190613fb1565b601281905550600060125411611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d469061434b565b60405180910390fd5b82600f8190555081601181905550806010819055507fe4249bdce1740711944d1ea1e985ec5a1242a1e59223a6600a022508c5f5cc92600f54601154601054604051611d9d9392919061436b565b60405180910390a1505050565b600080611db561286a565b90506000611dc38286612217565b905083811015611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff90614414565b60405180910390fd5b611e158286868403612872565b60019250505092915050565b7f00000000000000000000000036970fc0dc6f3e21c924997bdf4df2a790ddf50381565b600080611e5061286a565b9050611e5d818585612ac7565b600191505092915050565b611e7061286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef490613d2a565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fed21431d4765f69a883370d157f0281b346757dba7db85bf2e07279e637008f560405160405180910390a35050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fcc61286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205090613d2a565b60405180910390fd5b6000612063611024565b600a61206f9190614567565b8261207a9190613ef7565b90506120893061dead836132a6565b7fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb826040516120b891906137af565b60405180910390a15050565b6120cc61286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215090613d2a565b60405180910390fd5b615208811015801561216d575061c3508111155b6121ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a3906145fe565b60405180910390fd5b7f5f7d3624d8104c570d075b4974657a671fe520c17a32251cc222553dd2703956816013546040516121df92919061461e565b60405180910390a18060138190555050565b600d5481565b60166020528060005260406000206000915054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6122a661286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90613d2a565b60405180910390fd5b81600b60006101000a81548160ff02191690831515021790555080600a819055507f87648e954f6c9d5f5f7ddeb39f95ca8f7d2c14cbb2f190d5250f9b6eb04dd9348282604051612385929190614647565b60405180910390a15050565b61239961286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d90613d2a565b60405180910390fd5b6103e8831115801561243a57506107d08211155b612479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612470906146bc565b60405180910390fd5b82600c8190555081600d8190555080600e819055507f1b647027e5370ddacee0860509426ca1696d274d2496b55307819c3d9a7f432e600c54600d54600e546040516124c79392919061436b565b60405180910390a1505050565b6124dc61286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256090613d2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cf9061474e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b60135481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6126cf61286a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461275c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275390613d2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c2906147e0565b60405180910390fd5b7f257bcc733500fc1235e5678bae75067872614f58e43af7060fc3e04fb72f828581600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161281e929190614099565b60405180910390a180600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d890614872565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294790614904565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a2e91906137af565b60405180910390a3505050565b6000612a478484612217565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612ac15781811015612ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aaa90614970565b60405180910390fd5b612ac08484848403612872565b5b50505050565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b685750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612b7f5750600b60029054906101000a900460ff165b15612b9457612b8f8383836132a6565b612cc1565b600b60019054906101000a900460ff16612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda906149dc565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612c8e57600954612c4183611311565b82612c4c9190613fb1565b1115612c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8490614a48565b60405180910390fd5b5b612c9782613528565b15612ca557612ca4612cc6565b5b6000612cb28484846135ac565b9050612cbf8484836132a6565b505b505050565b6001600b60026101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612cfe57612cfd614a68565b5b604051908082528060200260200182016040528015612d2c5781602001602082028036833780820191505090505b5090503081600081518110612d4457612d43614a97565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050731b02da8cb0d097eb8d57a175b88c7d8b4799750673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e019190614adb565b81600181518110612e1557612e14614a97565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050731b02da8cb0d097eb8d57a175b88c7d8b4799750673ffffffffffffffffffffffffffffffffffffffff166318cbafe5600a5460008530426040518663ffffffff1660e01b8152600401612eac959493929190614c01565b6000604051808303816000875af1158015612ecb573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612ef49190614d74565b5060008147612f039190614dbd565b9050600060125460115483612f189190613ef7565b612f229190613f80565b9050600060125460105484612f379190613ef7565b612f419190613f80565b90506000601254600f5485612f569190613ef7565b612f609190613f80565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460135490604051612fae90613d7b565b600060405180830381858888f193505050503d8060008114612fec576040519150601f19603f3d011682016040523d82523d6000602084013e612ff1565b606091505b50509050801561306c57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff4517c34a6d60f2c017c6bdea0c1fc068da72bfacbc4946424c4240fa3d5ba778560405161306391906137af565b60405180910390a25b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684601354906040516130b890613d7b565b600060405180830381858888f193505050503d80600081146130f6576040519150601f19603f3d011682016040523d82523d6000602084013e6130fb565b606091505b50509050801561317657600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3f23532d157662f8e9a6ac5b7e53203a21c32e3ecb7d8c113345a48fa88195198560405161316d91906137af565b60405180910390a25b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684601354906040516131c290613d7b565b600060405180830381858888f193505050503d8060008114613200576040519150601f19603f3d011682016040523d82523d6000602084013e613205565b606091505b50509050801561328057600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fb9ad861b752f80117b35bea6dec99933d8a5ae360f2839ee8784b750d56134098560405161327791906137af565b60405180910390a25b5050505050505050506000600b60026101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330c90614e63565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337b90614ef5565b60405180910390fd5b61338f83838361360f565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340d90614f87565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134ab9190613fb1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161350f91906137af565b60405180910390a3613522848484613614565b50505050565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561358f5750600b60009054906101000a900460ff165b80156135a55750600a546135a230611311565b10155b9050919050565b60008082036135bd57819050613608565b60006127106135cc8686613619565b846135d79190613ef7565b6135e19190613f80565b905060008111156135f8576135f78530836132a6565b5b80836136049190614dbd565b9150505b9392505050565b505050565b505050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136765760009050613790565b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136d257600c549050613790565b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561372e57600c549050613790565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561378a57600d549050613790565b600e5490505b92915050565b6000819050919050565b6137a981613796565b82525050565b60006020820190506137c460008301846137a0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138045780820151818401526020810190506137e9565b83811115613813576000848401525b50505050565b6000601f19601f8301169050919050565b6000613835826137ca565b61383f81856137d5565b935061384f8185602086016137e6565b61385881613819565b840191505092915050565b6000602082019050818103600083015261387d818461382a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138c482613899565b9050919050565b6138d4816138b9565b81146138df57600080fd5b50565b6000813590506138f1816138cb565b92915050565b61390081613796565b811461390b57600080fd5b50565b60008135905061391d816138f7565b92915050565b6000806040838503121561393a5761393961388f565b5b6000613948858286016138e2565b92505060206139598582860161390e565b9150509250929050565b60008115159050919050565b61397881613963565b82525050565b6000602082019050613993600083018461396f565b92915050565b6139a281613963565b81146139ad57600080fd5b50565b6000813590506139bf81613999565b92915050565b600080604083850312156139dc576139db61388f565b5b60006139ea858286016138e2565b92505060206139fb858286016139b0565b9150509250929050565b6000819050919050565b6000613a2a613a25613a2084613899565b613a05565b613899565b9050919050565b6000613a3c82613a0f565b9050919050565b6000613a4e82613a31565b9050919050565b613a5e81613a43565b82525050565b6000602082019050613a796000830184613a55565b92915050565b600060208284031215613a9557613a9461388f565b5b6000613aa38482850161390e565b91505092915050565b600080600060608486031215613ac557613ac461388f565b5b6000613ad3868287016138e2565b9350506020613ae4868287016138e2565b9250506040613af58682870161390e565b9150509250925092565b600060ff82169050919050565b613b1581613aff565b82525050565b6000602082019050613b306000830184613b0c565b92915050565b600060208284031215613b4c57613b4b61388f565b5b6000613b5a848285016138e2565b91505092915050565b613b6c816138b9565b82525050565b6000602082019050613b876000830184613b63565b92915050565b6000613b98826138b9565b9050919050565b613ba881613b8d565b8114613bb357600080fd5b50565b600081359050613bc581613b9f565b92915050565b60008060408385031215613be257613be161388f565b5b6000613bf085828601613bb6565b9250506020613c01858286016138e2565b9150509250929050565b600080600060608486031215613c2457613c2361388f565b5b6000613c328682870161390e565b9350506020613c438682870161390e565b9250506040613c548682870161390e565b9150509250925092565b60008060408385031215613c7557613c7461388f565b5b6000613c83858286016138e2565b9250506020613c94858286016138e2565b9150509250929050565b60008060408385031215613cb557613cb461388f565b5b6000613cc3858286016139b0565b9250506020613cd48582860161390e565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d146020836137d5565b9150613d1f82613cde565b602082019050919050565b60006020820190508181036000830152613d4381613d07565b9050919050565b600081905092915050565b50565b6000613d65600083613d4a565b9150613d7082613d55565b600082019050919050565b6000613d8682613d58565b9150819050919050565b7f5478206661696c65640000000000000000000000000000000000000000000000600082015250565b6000613dc66009836137d5565b9150613dd182613d90565b602082019050919050565b60006020820190508181036000830152613df581613db9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e4357607f821691505b602082108103613e5657613e55613dfc565b5b50919050565b7f4d696e696d756d2076616c756520697320312e00000000000000000000000000600082015250565b6000613e926013836137d5565b9150613e9d82613e5c565b602082019050919050565b60006020820190508181036000830152613ec181613e85565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f0282613796565b9150613f0d83613796565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f4657613f45613ec8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f8b82613796565b9150613f9683613796565b925082613fa657613fa5613f51565b5b828204905092915050565b6000613fbc82613796565b9150613fc783613796565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ffc57613ffb613ec8565b5b828201905092915050565b7f4e6577206d61726b6574696e672077616c6c657420697320746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006140636028836137d5565b915061406e82614007565b604082019050919050565b6000602082019050818103600083015261409281614056565b9050919050565b60006040820190506140ae6000830185613b63565b6140bb6020830184613b63565b9392505050565b7f4e657720646576656c6f706d656e742077616c6c657420697320746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061411e602a836137d5565b9150614129826140c2565b604082019050919050565b6000602082019050818103600083015261414d81614111565b9050919050565b7f43616e2774207769746864726177204f50454e42455400000000000000000000600082015250565b600061418a6016836137d5565b915061419582614154565b602082019050919050565b600060208201905081810360008301526141b98161417d565b9050919050565b6000815190506141cf816138f7565b92915050565b6000602082840312156141eb576141ea61388f565b5b60006141f9848285016141c0565b91505092915050565b60006040820190506142176000830185613b63565b61422460208301846137a0565b9392505050565b60008151905061423a81613999565b92915050565b6000602082840312156142565761425561388f565b5b60006142648482850161422b565b91505092915050565b7f43616e2774206d6f646966792070616972000000000000000000000000000000600082015250565b60006142a36011836137d5565b91506142ae8261426d565b602082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b7f546f74616c20736861726573206d75737420626520677265617465722074686160008201527f6e20302e00000000000000000000000000000000000000000000000000000000602082015250565b60006143356024836137d5565b9150614340826142d9565b604082019050919050565b6000602082019050818103600083015261436481614328565b9050919050565b600060608201905061438060008301866137a0565b61438d60208301856137a0565b61439a60408301846137a0565b949350505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006143fe6025836137d5565b9150614409826143a2565b604082019050919050565b6000602082019050818103600083015261442d816143f1565b9050919050565b60008160011c9050919050565b6000808291508390505b600185111561448b5780860481111561446757614466613ec8565b5b60018516156144765780820291505b808102905061448485614434565b945061444b565b94509492505050565b6000826144a45760019050614560565b816144b25760009050614560565b81600181146144c857600281146144d257614501565b6001915050614560565b60ff8411156144e4576144e3613ec8565b5b8360020a9150848211156144fb576144fa613ec8565b5b50614560565b5060208310610133831016604e8410600b84101617156145365782820a90508381111561453157614530613ec8565b5b614560565b6145438484846001614441565b9250905081840481111561455a57614559613ec8565b5b81810290505b9392505050565b600061457282613796565b915061457d83613aff565b92506145aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614494565b905092915050565b7f496e76616c69642067617320706172616d657465720000000000000000000000600082015250565b60006145e86015836137d5565b91506145f3826145b2565b602082019050919050565b60006020820190508181036000830152614617816145db565b9050919050565b600060408201905061463360008301856137a0565b61464060208301846137a0565b9392505050565b600060408201905061465c600083018561396f565b61466960208301846137a0565b9392505050565b7f546f6f2068696768207461786573000000000000000000000000000000000000600082015250565b60006146a6600e836137d5565b91506146b182614670565b602082019050919050565b600060208201905081810360008301526146d581614699565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147386026836137d5565b9150614743826146dc565b604082019050919050565b600060208201905081810360008301526147678161472b565b9050919050565b7f4e65772072657761726420706f6f6c20697320746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147ca6023836137d5565b91506147d58261476e565b604082019050919050565b600060208201905081810360008301526147f9816147bd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061485c6024836137d5565b915061486782614800565b604082019050919050565b6000602082019050818103600083015261488b8161484f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006148ee6022836137d5565b91506148f982614892565b604082019050919050565b6000602082019050818103600083015261491d816148e1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061495a601d836137d5565b915061496582614924565b602082019050919050565b600060208201905081810360008301526149898161494d565b9050919050565b7f54726164696e672069732064697361626c656400000000000000000000000000600082015250565b60006149c66013836137d5565b91506149d182614990565b602082019050919050565b600060208201905081810360008301526149f5816149b9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614a326013836137d5565b9150614a3d826149fc565b602082019050919050565b60006020820190508181036000830152614a6181614a25565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614ad5816138cb565b92915050565b600060208284031215614af157614af061388f565b5b6000614aff84828501614ac6565b91505092915050565b6000819050919050565b6000614b2d614b28614b2384614b08565b613a05565b613796565b9050919050565b614b3d81614b12565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b78816138b9565b82525050565b6000614b8a8383614b6f565b60208301905092915050565b6000602082019050919050565b6000614bae82614b43565b614bb88185614b4e565b9350614bc383614b5f565b8060005b83811015614bf4578151614bdb8882614b7e565b9750614be683614b96565b925050600181019050614bc7565b5085935050505092915050565b600060a082019050614c1660008301886137a0565b614c236020830187614b34565b8181036040830152614c358186614ba3565b9050614c446060830185613b63565b614c5160808301846137a0565b9695505050505050565b600080fd5b614c6982613819565b810181811067ffffffffffffffff82111715614c8857614c87614a68565b5b80604052505050565b6000614c9b613885565b9050614ca78282614c60565b919050565b600067ffffffffffffffff821115614cc757614cc6614a68565b5b602082029050602081019050919050565b600080fd5b6000614cf0614ceb84614cac565b614c91565b90508083825260208201905060208402830185811115614d1357614d12614cd8565b5b835b81811015614d3c5780614d2888826141c0565b845260208401935050602081019050614d15565b5050509392505050565b600082601f830112614d5b57614d5a614c5b565b5b8151614d6b848260208601614cdd565b91505092915050565b600060208284031215614d8a57614d8961388f565b5b600082015167ffffffffffffffff811115614da857614da7613894565b5b614db484828501614d46565b91505092915050565b6000614dc882613796565b9150614dd383613796565b925082821015614de657614de5613ec8565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e4d6025836137d5565b9150614e5882614df1565b604082019050919050565b60006020820190508181036000830152614e7c81614e40565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614edf6023836137d5565b9150614eea82614e83565b604082019050919050565b60006020820190508181036000830152614f0e81614ed2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f716026836137d5565b9150614f7c82614f15565b604082019050919050565b60006020820190508181036000830152614fa081614f64565b905091905056fea26469706673582212206de612a78b2446a33448a07ec9d128662f8754807a8832fc6b1a69b985c2ade464736f6c634300080d0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000020db2f48bca09ca03c133560aa10a03fbcd70aad0000000000000000000000004ea77d77e18de1ad4a8b3f501f6d06fa4877d34b0000000000000000000000008fab083437521ce8665cde5b31fab31cd2b86f3c0000000000000000000000008836a1a66f56908b3e7f3f7982e1444aa5e7a9d2

-----Decoded View---------------
Arg [0] : owner (address): 0x20db2F48BcA09cA03c133560aa10A03FbCD70AAD
Arg [1] : marketing (address): 0x4Ea77D77e18de1ad4A8b3f501f6d06FA4877d34B
Arg [2] : development (address): 0x8fAB083437521ce8665cDE5b31Fab31CD2B86F3C
Arg [3] : reward (address): 0x8836A1A66F56908b3E7F3F7982E1444AA5e7a9d2

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000020db2f48bca09ca03c133560aa10a03fbcd70aad
Arg [1] : 0000000000000000000000004ea77d77e18de1ad4a8b3f501f6d06fa4877d34b
Arg [2] : 0000000000000000000000008fab083437521ce8665cde5b31fab31cd2b86f3c
Arg [3] : 0000000000000000000000008836a1a66f56908b3e7f3f7982e1444aa5e7a9d2


Deployed Bytecode Sourcemap

26193:9425:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26518:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32574:243;;;;;;;;;;;;;:::i;:::-;;10538:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26760:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12889:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33124:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26226:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11658:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31885:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13670:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11500:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14374:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26961:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26723:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32254:99;;;;;;;;;;;;;:::i;:::-;;26623:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35128:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26551:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11829:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7782:148;;;;;;;;;;;;;:::i;:::-;;34865:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26418:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26688;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32823:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32141:105;;;;;;;;;;;;;:::i;:::-;;26800:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7140:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10757:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33430:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27012:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33969:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15115:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26345:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12162:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33289:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26381:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32359:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34645:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26655:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27055:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12418:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34450:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33647:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8085:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26487:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26920:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26453:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35381:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26518:28;;;;:::o;32574:243::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32622:14:::1;32639:21;32622:38;;32668:9;32690:15;;;;;;;;;;;32682:29;;32719:6;32732:11;;32682:66;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32667:81;;;32763:4;32755:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;32793:18;32804:6;32793:18;;;;;;:::i;:::-;;;;;;;;32615:202;;32574:243::o:0;10538:100::-;10592:13;10625:5;10618:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10538:100;:::o;26760:35::-;;;;:::o;12889:201::-;12972:4;12989:13;13005:12;:10;:12::i;:::-;12989:28;;13028:32;13037:5;13044:7;13053:6;13028:8;:32::i;:::-;13078:4;13071:11;;;12889:201;;;;:::o;33124:159::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33230:5:::1;33205:13;:22;33219:7;33205:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;33271:5;33247:30;;33262:7;33247:30;;;;;;;;;;;;33124:159:::0;;:::o;26226:114::-;26297:42;26226:114;:::o;11658:108::-;11719:7;11746:12;;11739:19;;11658:108;:::o;31885:232::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31974:1:::1;31964:6;:11;;31956:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;32046:4;32037:6;32021:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:29;;;;:::i;:::-;32009:9;:41;;;;32085:24;32102:6;32085:24;;;;;;:::i;:::-;;;;;;;;31885:232:::0;:::o;13670:295::-;13801:4;13818:15;13836:12;:10;:12::i;:::-;13818:30;;13859:38;13875:4;13881:7;13890:6;13859:15;:38::i;:::-;13908:27;13918:4;13924:2;13928:6;13908:9;:27::i;:::-;13953:4;13946:11;;;13670:295;;;;;:::o;11500:93::-;11558:5;11583:2;11576:9;;11500:93;:::o;14374:238::-;14462:4;14479:13;14495:12;:10;:12::i;:::-;14479:28;;14518:64;14527:5;14534:7;14571:10;14543:25;14553:5;14560:7;14543:9;:25::i;:::-;:38;;;;:::i;:::-;14518:8;:64::i;:::-;14600:4;14593:11;;;14374:238;;;;:::o;26961:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;26723:32::-;;;;:::o;32254:99::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32307:11:::1;:9;:11::i;:::-;32330:17;;;;;;;;;;32254:99::o:0;26623:27::-;;;;:::o;35128:247::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35230:1:::1;35209:23;;:9;:23;;::::0;35201:76:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35289:46;35308:9;35319:15;;;;;;;;;;;35289:46;;;;;;;:::i;:::-;;;;;;;;35360:9;35342:15;;:27;;;;;;;;;;;;;;;;;;35128:247:::0;:::o;26551:23::-;;;;;;;;;;;;;:::o;11829:127::-;11903:7;11930:9;:18;11940:7;11930:18;;;;;;;;;;;;;;;;11923:25;;11829:127;;;:::o;7782:148::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7889:1:::1;7852:40;;7873:6;::::0;::::1;;;;;;;;7852:40;;;;;;;;;;;;7920:1;7903:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7782:148::o:0;34865:257::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34969:1:::1;34948:23;;:9;:23;;::::0;34940:78:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35030:50;35051:9;35062:17;;;;;;;;;;;35030:50;;;;;;;:::i;:::-;;;;;;;;35107:9;35087:17;;:29;;;;;;;;;;;;;;;;;;34865:257:::0;:::o;26418:30::-;;;;;;;;;;;;;:::o;26688:::-;;;;:::o;32823:295::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32938:4:::1;32912:31;;32920:5;32912:31;;::::0;32904:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32977:14;32994:5;:15;;;33018:4;32994:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32977:47;;33031:5;:14;;;33046:9;33057:6;33031:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33097:5;33076:36;;;33105:6;33076:36;;;;;;:::i;:::-;;;;;;;;32897:221;32823:295:::0;;:::o;32141:105::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32209:4:::1;32192:14;;:21;;;;;;;;;;;;;;;;;;32225:15;;;;;;;;;;32141:105::o:0;26800:37::-;;;;:::o;7140:79::-;7178:7;7205:6;;;;;;;;;;;7198:13;;7140:79;:::o;10757:104::-;10813:13;10846:7;10839:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10757:104;:::o;33430:211::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33530:4:::1;33519:15;;:7;:15;;::::0;33511:45:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33588:5;33563:13;:22;33577:7;33563:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;33629:5;33605:30;;33620:7;33605:30;;;;;;;;;;;;33430:211:::0;;:::o;27012:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;33969:475::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34161:14:::1;;34142:16;;34128:11;;:30;;;;:::i;:::-;:47;;;;:::i;:::-;34114:11;:61;;;;34202:1;34190:11;;:13;34182:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34264:14;34250:11;:28;;;;34304:19;34285:16;:38;;;;34347:17;34330:14;:34;;;;34382:56;34392:11;;34405:16;;34423:14;;34382:56;;;;;;;;:::i;:::-;;;;;;;;33969:475:::0;;;:::o;15115:436::-;15208:4;15225:13;15241:12;:10;:12::i;:::-;15225:28;;15264:24;15291:25;15301:5;15308:7;15291:9;:25::i;:::-;15264:52;;15355:15;15335:16;:35;;15327:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15448:60;15457:5;15464:7;15492:15;15473:16;:34;15448:8;:60::i;:::-;15539:4;15532:11;;;;15115:436;;;;:::o;26345:29::-;;;:::o;12162:193::-;12241:4;12258:13;12274:12;:10;:12::i;:::-;12258:28;;12297;12307:5;12314:2;12318:6;12297:9;:28::i;:::-;12343:4;12336:11;;;12162:193;;;;:::o;33289:135::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33379:5:::1;33362;:14;33368:7;33362:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;33412:5;33396:22;;33403:7;33396:22;;;;;;;;;;;;33289:135:::0;;:::o;26381:32::-;;;;;;;;;;;;;:::o;32359:209::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32426:19:::1;32461:10;:8;:10::i;:::-;32457:2;:14;;;;:::i;:::-;32448:6;:23;;;;:::i;:::-;32426:45;;32478:60;32502:4;32517:6;32526:11;32478:15;:60::i;:::-;32550:12;32555:6;32550:12;;;;;;:::i;:::-;;;;;;;;32419:149;32359:209:::0;:::o;34645:214::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34729:5:::1;34719:6;:15;;:34;;;;;34748:5;34738:6;:15;;34719:34;34711:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34791:35;34806:6;34814:11;;34791:35;;;;;;;:::i;:::-;;;;;;;;34847:6;34833:11;:20;;;;34645:214:::0;:::o;26655:28::-;;;;:::o;27055:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;12418:151::-;12507:7;12534:11;:18;12546:5;12534:18;;;;;;;;;;;;;;;:27;12553:7;12534:27;;;;;;;;;;;;;;;;12527:34;;12418:151;;;;:::o;34450:189::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34549:7:::1;34535:11;;:21;;;;;;;;;;;;;;;;;;34579:6;34563:13;:22;;;;34597:36;34617:7;34626:6;34597:36;;;;;;;:::i;:::-;;;;;;;;34450:189:::0;;:::o;33647:316::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33775:4:::1;33762:9;:17;;:39;;;;;33797:4;33783:10;:18;;33762:39;33754:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33836:9;33827:6;:18;;;;33862:10;33852:7;:20;;;;33893:14;33879:11;:28;;;;33919:38;33928:6;;33936:7;;33945:11;;33919:38;;;;;;;;:::i;:::-;;;;;;;;33647:316:::0;;;:::o;8085:244::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8194:1:::1;8174:22;;:8;:22;;::::0;8166:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8284:8;8255:38;;8276:6;::::0;::::1;;;;;;;;8255:38;;;;;;;;;;;;8313:8;8304:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;8085:244:::0;:::o;26487:24::-;;;;:::o;26920:34::-;;;;:::o;26453:27::-;;;;;;;;;;;;;:::o;35381:234::-;7362:12;:10;:12::i;:::-;7352:22;;:6;;;;;;;;;;:22;;;7344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35482:1:::1;35460:24;;:10;:24;;::::0;35452:72:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35536:41;35552:10;35564:12;;;;;;;;;;;35536:41;;;;;;;:::i;:::-;;;;;;;;35599:10;35584:12;;:25;;;;;;;;;;;;;;;;;;35381:234:::0;:::o;6294:98::-;6347:7;6374:10;6367:17;;6294:98;:::o;18740:380::-;18893:1;18876:19;;:5;:19;;;18868:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18974:1;18955:21;;:7;:21;;;18947:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19058:6;19028:11;:18;19040:5;19028:18;;;;;;;;;;;;;;;:27;19047:7;19028:27;;;;;;;;;;;;;;;:36;;;;19096:7;19080:32;;19089:5;19080:32;;;19105:6;19080:32;;;;;;:::i;:::-;;;;;;;;18740:380;;;:::o;19411:453::-;19546:24;19573:25;19583:5;19590:7;19573:9;:25::i;:::-;19546:52;;19633:17;19613:16;:37;19609:248;;19695:6;19675:16;:26;;19667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19779:51;19788:5;19795:7;19823:6;19804:16;:25;19779:8;:51::i;:::-;19609:248;19535:329;19411:453;;;:::o;29065:610::-;29164:13;:21;29178:6;29164:21;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;29189:13;:24;29203:9;29189:24;;;;;;;;;;;;;;;;;;;;;;;;;29164:49;:59;;;;29217:6;;;;;;;;;;;29164:59;29160:139;;;29234:42;29250:6;29258:9;29269:6;29234:15;:42::i;:::-;29285:7;;29160:139;29319:14;;;;;;;;;;;29311:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29368:13;:21;29382:6;29368:21;;;;;;;;;;;;;;;;;;;;;;;;;29364:118;;;29441:9;;29417:20;29427:9;29417;:20::i;:::-;29408:6;:29;;;;:::i;:::-;:42;;29400:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29364:118;29494:26;29510:9;29494:15;:26::i;:::-;29490:48;;;29524:11;:9;:11::i;:::-;29490:48;29546:24;29573:35;29582:6;29590:9;29601:6;29573:8;:35::i;:::-;29546:62;;29617:52;29633:6;29641:9;29652:16;29617:15;:52::i;:::-;29153:522;29065:610;;;;:::o;30619:1260::-;28261:4;28252:6;;:13;;;;;;;;;;;;;;;;;;30664:21:::1;30702:1;30688:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30664:40;;30729:4;30711;30716:1;30711:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;26297:42;30751:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30741:4;30746:1;30741:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;30780:21;30804;30780:45;;26297:42;30834:37;;;30880:13;;30902:1;30912:4;30933;30947:15;30834:135;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30978:17;31022:13;30998:21;:37;;;;:::i;:::-;30978:57;;31042:28;31104:11;;31085:16;;31073:9;:28;;;;:::i;:::-;:42;;;;:::i;:::-;31042:73;;31122:26;31180:11;;31163:14;;31151:9;:26;;;;:::i;:::-;:40;;;;:::i;:::-;31122:69;;31198:24;31251:11;;31237;;31225:9;:23;;;;:::i;:::-;:37;;;;:::i;:::-;31198:64;;31272:23;31308:17;;;;;;;;;;;31300:31;;31339:20;31366:11;;31300:82;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31271:111;;;31393:18;31389:93;;;31439:17;;;;;;;;;;;31420:59;;;31458:20;31420:59;;;;;;:::i;:::-;;;;;;;;31389:93;31491:21;31525:15;;;;;;;;;;;31517:29;;31554:18;31579:11;;31517:78;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31490:105;;;31606:16;31602:85;;;31648:15;;;;;;;;;;;31631:53;;;31665:18;31631:53;;;;;;:::i;:::-;;;;;;;;31602:85;31696:18;31727:12;;;;;;;;;;;31719:26;;31753:16;31776:11;;31719:73;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31695:97;;;31803:13;31799:75;;;31840:12;;;;;;;;;;;31825:46;;;31854:16;31825:46;;;;;;:::i;:::-;;;;;;;;31799:75;30657:1222;;;;;;;;;28289:5:::0;28280:6;;:14;;;;;;;;;;;;;;;;;;30619:1260::o;16021:671::-;16168:1;16152:18;;:4;:18;;;16144:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16245:1;16231:16;;:2;:16;;;16223:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16300:38;16321:4;16327:2;16331:6;16300:20;:38::i;:::-;16351:19;16373:9;:15;16383:4;16373:15;;;;;;;;;;;;;;;;16351:37;;16422:6;16407:11;:21;;16399:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;16539:6;16525:11;:20;16507:9;:15;16517:4;16507:15;;;;;;;;;;;;;;;:38;;;;16584:6;16567:9;:13;16577:2;16567:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;16623:2;16608:26;;16617:4;16608:26;;;16627:6;16608:26;;;;;;:::i;:::-;;;;;;;;16647:37;16667:4;16673:2;16677:6;16647:19;:37::i;:::-;16133:559;16021:671;;;:::o;30437:176::-;30503:4;30523:13;:24;30537:9;30523:24;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;;;30551:11;;;;;;;;;;;30523:39;:84;;;;;30594:13;;30566:24;30584:4;30566:9;:24::i;:::-;:41;;30523:84;30516:91;;30437:176;;;:::o;29732:342::-;29818:7;29848:1;29838:6;:11;29834:35;;29860:6;29853:13;;;;29834:35;29877:17;26908:5;29906:31;29919:6;29927:9;29906:12;:31::i;:::-;29897:6;:40;;;;:::i;:::-;:58;;;;:::i;:::-;29877:78;;29978:1;29966:9;:13;29962:73;;;29983:49;29999:6;30015:4;30022:9;29983:15;:49::i;:::-;29962:73;30059:9;30050:6;:18;;;;:::i;:::-;30043:25;;;29732:342;;;;;;:::o;20464:125::-;;;;:::o;21193:124::-;;;;:::o;30080:351::-;30159:7;30179:5;:16;30185:9;30179:16;;;;;;;;;;;;;;;;;;;;;;;;;30175:35;;;30206:1;30199:8;;;;30175:35;30220:5;:13;30226:6;30220:13;;;;;;;;;;;;;;;;;;;;;;;;;30216:37;;;30244:6;;30237:13;;;;30216:37;30265:13;:21;30279:6;30265:21;;;;;;;;;;;;;;;;;;;;;;;;;30261:165;;;30304:6;;30297:13;;;;30261:165;30328:13;:24;30342:9;30328:24;;;;;;;;;;;;;;;;;;;;;;;;;30324:102;;;30370:7;;30363:14;;;;30324:102;30407:11;;30400:18;;30080:351;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1832:75::-;1865:6;1898:2;1892:9;1882:19;;1832:75;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:116::-;3916:21;3931:5;3916:21;:::i;:::-;3909:5;3906:32;3896:60;;3952:1;3949;3942:12;3896:60;3846:116;:::o;3968:133::-;4011:5;4049:6;4036:20;4027:29;;4065:30;4089:5;4065:30;:::i;:::-;3968:133;;;;:::o;4107:468::-;4172:6;4180;4229:2;4217:9;4208:7;4204:23;4200:32;4197:119;;;4235:79;;:::i;:::-;4197:119;4355:1;4380:53;4425:7;4416:6;4405:9;4401:22;4380:53;:::i;:::-;4370:63;;4326:117;4482:2;4508:50;4550:7;4541:6;4530:9;4526:22;4508:50;:::i;:::-;4498:60;;4453:115;4107:468;;;;;:::o;4581:60::-;4609:3;4630:5;4623:12;;4581:60;;;:::o;4647:142::-;4697:9;4730:53;4748:34;4757:24;4775:5;4757:24;:::i;:::-;4748:34;:::i;:::-;4730:53;:::i;:::-;4717:66;;4647:142;;;:::o;4795:126::-;4845:9;4878:37;4909:5;4878:37;:::i;:::-;4865:50;;4795:126;;;:::o;4927:153::-;5004:9;5037:37;5068:5;5037:37;:::i;:::-;5024:50;;4927:153;;;:::o;5086:185::-;5200:64;5258:5;5200:64;:::i;:::-;5195:3;5188:77;5086:185;;:::o;5277:276::-;5397:4;5435:2;5424:9;5420:18;5412:26;;5448:98;5543:1;5532:9;5528:17;5519:6;5448:98;:::i;:::-;5277:276;;;;:::o;5559:329::-;5618:6;5667:2;5655:9;5646:7;5642:23;5638:32;5635:119;;;5673:79;;:::i;:::-;5635:119;5793:1;5818:53;5863:7;5854:6;5843:9;5839:22;5818:53;:::i;:::-;5808:63;;5764:117;5559:329;;;;:::o;5894:619::-;5971:6;5979;5987;6036:2;6024:9;6015:7;6011:23;6007:32;6004:119;;;6042:79;;:::i;:::-;6004:119;6162:1;6187:53;6232:7;6223:6;6212:9;6208:22;6187:53;:::i;:::-;6177:63;;6133:117;6289:2;6315:53;6360:7;6351:6;6340:9;6336:22;6315:53;:::i;:::-;6305:63;;6260:118;6417:2;6443:53;6488:7;6479:6;6468:9;6464:22;6443:53;:::i;:::-;6433:63;;6388:118;5894:619;;;;;:::o;6519:86::-;6554:7;6594:4;6587:5;6583:16;6572:27;;6519:86;;;:::o;6611:112::-;6694:22;6710:5;6694:22;:::i;:::-;6689:3;6682:35;6611:112;;:::o;6729:214::-;6818:4;6856:2;6845:9;6841:18;6833:26;;6869:67;6933:1;6922:9;6918:17;6909:6;6869:67;:::i;:::-;6729:214;;;;:::o;6949:329::-;7008:6;7057:2;7045:9;7036:7;7032:23;7028:32;7025:119;;;7063:79;;:::i;:::-;7025:119;7183:1;7208:53;7253:7;7244:6;7233:9;7229:22;7208:53;:::i;:::-;7198:63;;7154:117;6949:329;;;;:::o;7284:118::-;7371:24;7389:5;7371:24;:::i;:::-;7366:3;7359:37;7284:118;;:::o;7408:222::-;7501:4;7539:2;7528:9;7524:18;7516:26;;7552:71;7620:1;7609:9;7605:17;7596:6;7552:71;:::i;:::-;7408:222;;;;:::o;7636:110::-;7687:7;7716:24;7734:5;7716:24;:::i;:::-;7705:35;;7636:110;;;:::o;7752:150::-;7839:38;7871:5;7839:38;:::i;:::-;7832:5;7829:49;7819:77;;7892:1;7889;7882:12;7819:77;7752:150;:::o;7908:167::-;7968:5;8006:6;7993:20;7984:29;;8022:47;8063:5;8022:47;:::i;:::-;7908:167;;;;:::o;8081:502::-;8163:6;8171;8220:2;8208:9;8199:7;8195:23;8191:32;8188:119;;;8226:79;;:::i;:::-;8188:119;8346:1;8371:67;8430:7;8421:6;8410:9;8406:22;8371:67;:::i;:::-;8361:77;;8317:131;8487:2;8513:53;8558:7;8549:6;8538:9;8534:22;8513:53;:::i;:::-;8503:63;;8458:118;8081:502;;;;;:::o;8589:619::-;8666:6;8674;8682;8731:2;8719:9;8710:7;8706:23;8702:32;8699:119;;;8737:79;;:::i;:::-;8699:119;8857:1;8882:53;8927:7;8918:6;8907:9;8903:22;8882:53;:::i;:::-;8872:63;;8828:117;8984:2;9010:53;9055:7;9046:6;9035:9;9031:22;9010:53;:::i;:::-;9000:63;;8955:118;9112:2;9138:53;9183:7;9174:6;9163:9;9159:22;9138:53;:::i;:::-;9128:63;;9083:118;8589:619;;;;;:::o;9214:474::-;9282:6;9290;9339:2;9327:9;9318:7;9314:23;9310:32;9307:119;;;9345:79;;:::i;:::-;9307:119;9465:1;9490:53;9535:7;9526:6;9515:9;9511:22;9490:53;:::i;:::-;9480:63;;9436:117;9592:2;9618:53;9663:7;9654:6;9643:9;9639:22;9618:53;:::i;:::-;9608:63;;9563:118;9214:474;;;;;:::o;9694:468::-;9759:6;9767;9816:2;9804:9;9795:7;9791:23;9787:32;9784:119;;;9822:79;;:::i;:::-;9784:119;9942:1;9967:50;10009:7;10000:6;9989:9;9985:22;9967:50;:::i;:::-;9957:60;;9913:114;10066:2;10092:53;10137:7;10128:6;10117:9;10113:22;10092:53;:::i;:::-;10082:63;;10037:118;9694:468;;;;;:::o;10168:182::-;10308:34;10304:1;10296:6;10292:14;10285:58;10168:182;:::o;10356:366::-;10498:3;10519:67;10583:2;10578:3;10519:67;:::i;:::-;10512:74;;10595:93;10684:3;10595:93;:::i;:::-;10713:2;10708:3;10704:12;10697:19;;10356:366;;;:::o;10728:419::-;10894:4;10932:2;10921:9;10917:18;10909:26;;10981:9;10975:4;10971:20;10967:1;10956:9;10952:17;10945:47;11009:131;11135:4;11009:131;:::i;:::-;11001:139;;10728:419;;;:::o;11153:147::-;11254:11;11291:3;11276:18;;11153:147;;;;:::o;11306:114::-;;:::o;11426:398::-;11585:3;11606:83;11687:1;11682:3;11606:83;:::i;:::-;11599:90;;11698:93;11787:3;11698:93;:::i;:::-;11816:1;11811:3;11807:11;11800:18;;11426:398;;;:::o;11830:379::-;12014:3;12036:147;12179:3;12036:147;:::i;:::-;12029:154;;12200:3;12193:10;;11830:379;;;:::o;12215:159::-;12355:11;12351:1;12343:6;12339:14;12332:35;12215:159;:::o;12380:365::-;12522:3;12543:66;12607:1;12602:3;12543:66;:::i;:::-;12536:73;;12618:93;12707:3;12618:93;:::i;:::-;12736:2;12731:3;12727:12;12720:19;;12380:365;;;:::o;12751:419::-;12917:4;12955:2;12944:9;12940:18;12932:26;;13004:9;12998:4;12994:20;12990:1;12979:9;12975:17;12968:47;13032:131;13158:4;13032:131;:::i;:::-;13024:139;;12751:419;;;:::o;13176:180::-;13224:77;13221:1;13214:88;13321:4;13318:1;13311:15;13345:4;13342:1;13335:15;13362:320;13406:6;13443:1;13437:4;13433:12;13423:22;;13490:1;13484:4;13480:12;13511:18;13501:81;;13567:4;13559:6;13555:17;13545:27;;13501:81;13629:2;13621:6;13618:14;13598:18;13595:38;13592:84;;13648:18;;:::i;:::-;13592:84;13413:269;13362:320;;;:::o;13688:169::-;13828:21;13824:1;13816:6;13812:14;13805:45;13688:169;:::o;13863:366::-;14005:3;14026:67;14090:2;14085:3;14026:67;:::i;:::-;14019:74;;14102:93;14191:3;14102:93;:::i;:::-;14220:2;14215:3;14211:12;14204:19;;13863:366;;;:::o;14235:419::-;14401:4;14439:2;14428:9;14424:18;14416:26;;14488:9;14482:4;14478:20;14474:1;14463:9;14459:17;14452:47;14516:131;14642:4;14516:131;:::i;:::-;14508:139;;14235:419;;;:::o;14660:180::-;14708:77;14705:1;14698:88;14805:4;14802:1;14795:15;14829:4;14826:1;14819:15;14846:348;14886:7;14909:20;14927:1;14909:20;:::i;:::-;14904:25;;14943:20;14961:1;14943:20;:::i;:::-;14938:25;;15131:1;15063:66;15059:74;15056:1;15053:81;15048:1;15041:9;15034:17;15030:105;15027:131;;;15138:18;;:::i;:::-;15027:131;15186:1;15183;15179:9;15168:20;;14846:348;;;;:::o;15200:180::-;15248:77;15245:1;15238:88;15345:4;15342:1;15335:15;15369:4;15366:1;15359:15;15386:185;15426:1;15443:20;15461:1;15443:20;:::i;:::-;15438:25;;15477:20;15495:1;15477:20;:::i;:::-;15472:25;;15516:1;15506:35;;15521:18;;:::i;:::-;15506:35;15563:1;15560;15556:9;15551:14;;15386:185;;;;:::o;15577:305::-;15617:3;15636:20;15654:1;15636:20;:::i;:::-;15631:25;;15670:20;15688:1;15670:20;:::i;:::-;15665:25;;15824:1;15756:66;15752:74;15749:1;15746:81;15743:107;;;15830:18;;:::i;:::-;15743:107;15874:1;15871;15867:9;15860:16;;15577:305;;;;:::o;15888:227::-;16028:34;16024:1;16016:6;16012:14;16005:58;16097:10;16092:2;16084:6;16080:15;16073:35;15888:227;:::o;16121:366::-;16263:3;16284:67;16348:2;16343:3;16284:67;:::i;:::-;16277:74;;16360:93;16449:3;16360:93;:::i;:::-;16478:2;16473:3;16469:12;16462:19;;16121:366;;;:::o;16493:419::-;16659:4;16697:2;16686:9;16682:18;16674:26;;16746:9;16740:4;16736:20;16732:1;16721:9;16717:17;16710:47;16774:131;16900:4;16774:131;:::i;:::-;16766:139;;16493:419;;;:::o;16918:332::-;17039:4;17077:2;17066:9;17062:18;17054:26;;17090:71;17158:1;17147:9;17143:17;17134:6;17090:71;:::i;:::-;17171:72;17239:2;17228:9;17224:18;17215:6;17171:72;:::i;:::-;16918:332;;;;;:::o;17256:229::-;17396:34;17392:1;17384:6;17380:14;17373:58;17465:12;17460:2;17452:6;17448:15;17441:37;17256:229;:::o;17491:366::-;17633:3;17654:67;17718:2;17713:3;17654:67;:::i;:::-;17647:74;;17730:93;17819:3;17730:93;:::i;:::-;17848:2;17843:3;17839:12;17832:19;;17491:366;;;:::o;17863:419::-;18029:4;18067:2;18056:9;18052:18;18044:26;;18116:9;18110:4;18106:20;18102:1;18091:9;18087:17;18080:47;18144:131;18270:4;18144:131;:::i;:::-;18136:139;;17863:419;;;:::o;18288:172::-;18428:24;18424:1;18416:6;18412:14;18405:48;18288:172;:::o;18466:366::-;18608:3;18629:67;18693:2;18688:3;18629:67;:::i;:::-;18622:74;;18705:93;18794:3;18705:93;:::i;:::-;18823:2;18818:3;18814:12;18807:19;;18466:366;;;:::o;18838:419::-;19004:4;19042:2;19031:9;19027:18;19019:26;;19091:9;19085:4;19081:20;19077:1;19066:9;19062:17;19055:47;19119:131;19245:4;19119:131;:::i;:::-;19111:139;;18838:419;;;:::o;19263:143::-;19320:5;19351:6;19345:13;19336:22;;19367:33;19394:5;19367:33;:::i;:::-;19263:143;;;;:::o;19412:351::-;19482:6;19531:2;19519:9;19510:7;19506:23;19502:32;19499:119;;;19537:79;;:::i;:::-;19499:119;19657:1;19682:64;19738:7;19729:6;19718:9;19714:22;19682:64;:::i;:::-;19672:74;;19628:128;19412:351;;;;:::o;19769:332::-;19890:4;19928:2;19917:9;19913:18;19905:26;;19941:71;20009:1;19998:9;19994:17;19985:6;19941:71;:::i;:::-;20022:72;20090:2;20079:9;20075:18;20066:6;20022:72;:::i;:::-;19769:332;;;;;:::o;20107:137::-;20161:5;20192:6;20186:13;20177:22;;20208:30;20232:5;20208:30;:::i;:::-;20107:137;;;;:::o;20250:345::-;20317:6;20366:2;20354:9;20345:7;20341:23;20337:32;20334:119;;;20372:79;;:::i;:::-;20334:119;20492:1;20517:61;20570:7;20561:6;20550:9;20546:22;20517:61;:::i;:::-;20507:71;;20463:125;20250:345;;;;:::o;20601:167::-;20741:19;20737:1;20729:6;20725:14;20718:43;20601:167;:::o;20774:366::-;20916:3;20937:67;21001:2;20996:3;20937:67;:::i;:::-;20930:74;;21013:93;21102:3;21013:93;:::i;:::-;21131:2;21126:3;21122:12;21115:19;;20774:366;;;:::o;21146:419::-;21312:4;21350:2;21339:9;21335:18;21327:26;;21399:9;21393:4;21389:20;21385:1;21374:9;21370:17;21363:47;21427:131;21553:4;21427:131;:::i;:::-;21419:139;;21146:419;;;:::o;21571:223::-;21711:34;21707:1;21699:6;21695:14;21688:58;21780:6;21775:2;21767:6;21763:15;21756:31;21571:223;:::o;21800:366::-;21942:3;21963:67;22027:2;22022:3;21963:67;:::i;:::-;21956:74;;22039:93;22128:3;22039:93;:::i;:::-;22157:2;22152:3;22148:12;22141:19;;21800:366;;;:::o;22172:419::-;22338:4;22376:2;22365:9;22361:18;22353:26;;22425:9;22419:4;22415:20;22411:1;22400:9;22396:17;22389:47;22453:131;22579:4;22453:131;:::i;:::-;22445:139;;22172:419;;;:::o;22597:442::-;22746:4;22784:2;22773:9;22769:18;22761:26;;22797:71;22865:1;22854:9;22850:17;22841:6;22797:71;:::i;:::-;22878:72;22946:2;22935:9;22931:18;22922:6;22878:72;:::i;:::-;22960;23028:2;23017:9;23013:18;23004:6;22960:72;:::i;:::-;22597:442;;;;;;:::o;23045:224::-;23185:34;23181:1;23173:6;23169:14;23162:58;23254:7;23249:2;23241:6;23237:15;23230:32;23045:224;:::o;23275:366::-;23417:3;23438:67;23502:2;23497:3;23438:67;:::i;:::-;23431:74;;23514:93;23603:3;23514:93;:::i;:::-;23632:2;23627:3;23623:12;23616:19;;23275:366;;;:::o;23647:419::-;23813:4;23851:2;23840:9;23836:18;23828:26;;23900:9;23894:4;23890:20;23886:1;23875:9;23871:17;23864:47;23928:131;24054:4;23928:131;:::i;:::-;23920:139;;23647:419;;;:::o;24072:102::-;24114:8;24161:5;24158:1;24154:13;24133:34;;24072:102;;;:::o;24180:848::-;24241:5;24248:4;24272:6;24263:15;;24296:5;24287:14;;24310:712;24331:1;24321:8;24318:15;24310:712;;;24426:4;24421:3;24417:14;24411:4;24408:24;24405:50;;;24435:18;;:::i;:::-;24405:50;24485:1;24475:8;24471:16;24468:451;;;24900:4;24893:5;24889:16;24880:25;;24468:451;24950:4;24944;24940:15;24932:23;;24980:32;25003:8;24980:32;:::i;:::-;24968:44;;24310:712;;;24180:848;;;;;;;:::o;25034:1073::-;25088:5;25279:8;25269:40;;25300:1;25291:10;;25302:5;;25269:40;25328:4;25318:36;;25345:1;25336:10;;25347:5;;25318:36;25414:4;25462:1;25457:27;;;;25498:1;25493:191;;;;25407:277;;25457:27;25475:1;25466:10;;25477:5;;;25493:191;25538:3;25528:8;25525:17;25522:43;;;25545:18;;:::i;:::-;25522:43;25594:8;25591:1;25587:16;25578:25;;25629:3;25622:5;25619:14;25616:40;;;25636:18;;:::i;:::-;25616:40;25669:5;;;25407:277;;25793:2;25783:8;25780:16;25774:3;25768:4;25765:13;25761:36;25743:2;25733:8;25730:16;25725:2;25719:4;25716:12;25712:35;25696:111;25693:246;;;25849:8;25843:4;25839:19;25830:28;;25884:3;25877:5;25874:14;25871:40;;;25891:18;;:::i;:::-;25871:40;25924:5;;25693:246;25964:42;26002:3;25992:8;25986:4;25983:1;25964:42;:::i;:::-;25949:57;;;;26038:4;26033:3;26029:14;26022:5;26019:25;26016:51;;;26047:18;;:::i;:::-;26016:51;26096:4;26089:5;26085:16;26076:25;;25034:1073;;;;;;:::o;26113:281::-;26171:5;26195:23;26213:4;26195:23;:::i;:::-;26187:31;;26239:25;26255:8;26239:25;:::i;:::-;26227:37;;26283:104;26320:66;26310:8;26304:4;26283:104;:::i;:::-;26274:113;;26113:281;;;;:::o;26400:171::-;26540:23;26536:1;26528:6;26524:14;26517:47;26400:171;:::o;26577:366::-;26719:3;26740:67;26804:2;26799:3;26740:67;:::i;:::-;26733:74;;26816:93;26905:3;26816:93;:::i;:::-;26934:2;26929:3;26925:12;26918:19;;26577:366;;;:::o;26949:419::-;27115:4;27153:2;27142:9;27138:18;27130:26;;27202:9;27196:4;27192:20;27188:1;27177:9;27173:17;27166:47;27230:131;27356:4;27230:131;:::i;:::-;27222:139;;26949:419;;;:::o;27374:332::-;27495:4;27533:2;27522:9;27518:18;27510:26;;27546:71;27614:1;27603:9;27599:17;27590:6;27546:71;:::i;:::-;27627:72;27695:2;27684:9;27680:18;27671:6;27627:72;:::i;:::-;27374:332;;;;;:::o;27712:320::-;27827:4;27865:2;27854:9;27850:18;27842:26;;27878:65;27940:1;27929:9;27925:17;27916:6;27878:65;:::i;:::-;27953:72;28021:2;28010:9;28006:18;27997:6;27953:72;:::i;:::-;27712:320;;;;;:::o;28038:164::-;28178:16;28174:1;28166:6;28162:14;28155:40;28038:164;:::o;28208:366::-;28350:3;28371:67;28435:2;28430:3;28371:67;:::i;:::-;28364:74;;28447:93;28536:3;28447:93;:::i;:::-;28565:2;28560:3;28556:12;28549:19;;28208:366;;;:::o;28580:419::-;28746:4;28784:2;28773:9;28769:18;28761:26;;28833:9;28827:4;28823:20;28819:1;28808:9;28804:17;28797:47;28861:131;28987:4;28861:131;:::i;:::-;28853:139;;28580:419;;;:::o;29005:225::-;29145:34;29141:1;29133:6;29129:14;29122:58;29214:8;29209:2;29201:6;29197:15;29190:33;29005:225;:::o;29236:366::-;29378:3;29399:67;29463:2;29458:3;29399:67;:::i;:::-;29392:74;;29475:93;29564:3;29475:93;:::i;:::-;29593:2;29588:3;29584:12;29577:19;;29236:366;;;:::o;29608:419::-;29774:4;29812:2;29801:9;29797:18;29789:26;;29861:9;29855:4;29851:20;29847:1;29836:9;29832:17;29825:47;29889:131;30015:4;29889:131;:::i;:::-;29881:139;;29608:419;;;:::o;30033:222::-;30173:34;30169:1;30161:6;30157:14;30150:58;30242:5;30237:2;30229:6;30225:15;30218:30;30033:222;:::o;30261:366::-;30403:3;30424:67;30488:2;30483:3;30424:67;:::i;:::-;30417:74;;30500:93;30589:3;30500:93;:::i;:::-;30618:2;30613:3;30609:12;30602:19;;30261:366;;;:::o;30633:419::-;30799:4;30837:2;30826:9;30822:18;30814:26;;30886:9;30880:4;30876:20;30872:1;30861:9;30857:17;30850:47;30914:131;31040:4;30914:131;:::i;:::-;30906:139;;30633:419;;;:::o;31058:223::-;31198:34;31194:1;31186:6;31182:14;31175:58;31267:6;31262:2;31254:6;31250:15;31243:31;31058:223;:::o;31287:366::-;31429:3;31450:67;31514:2;31509:3;31450:67;:::i;:::-;31443:74;;31526:93;31615:3;31526:93;:::i;:::-;31644:2;31639:3;31635:12;31628:19;;31287:366;;;:::o;31659:419::-;31825:4;31863:2;31852:9;31848:18;31840:26;;31912:9;31906:4;31902:20;31898:1;31887:9;31883:17;31876:47;31940:131;32066:4;31940:131;:::i;:::-;31932:139;;31659:419;;;:::o;32084:221::-;32224:34;32220:1;32212:6;32208:14;32201:58;32293:4;32288:2;32280:6;32276:15;32269:29;32084:221;:::o;32311:366::-;32453:3;32474:67;32538:2;32533:3;32474:67;:::i;:::-;32467:74;;32550:93;32639:3;32550:93;:::i;:::-;32668:2;32663:3;32659:12;32652:19;;32311:366;;;:::o;32683:419::-;32849:4;32887:2;32876:9;32872:18;32864:26;;32936:9;32930:4;32926:20;32922:1;32911:9;32907:17;32900:47;32964:131;33090:4;32964:131;:::i;:::-;32956:139;;32683:419;;;:::o;33108:179::-;33248:31;33244:1;33236:6;33232:14;33225:55;33108:179;:::o;33293:366::-;33435:3;33456:67;33520:2;33515:3;33456:67;:::i;:::-;33449:74;;33532:93;33621:3;33532:93;:::i;:::-;33650:2;33645:3;33641:12;33634:19;;33293:366;;;:::o;33665:419::-;33831:4;33869:2;33858:9;33854:18;33846:26;;33918:9;33912:4;33908:20;33904:1;33893:9;33889:17;33882:47;33946:131;34072:4;33946:131;:::i;:::-;33938:139;;33665:419;;;:::o;34090:169::-;34230:21;34226:1;34218:6;34214:14;34207:45;34090:169;:::o;34265:366::-;34407:3;34428:67;34492:2;34487:3;34428:67;:::i;:::-;34421:74;;34504:93;34593:3;34504:93;:::i;:::-;34622:2;34617:3;34613:12;34606:19;;34265:366;;;:::o;34637:419::-;34803:4;34841:2;34830:9;34826:18;34818:26;;34890:9;34884:4;34880:20;34876:1;34865:9;34861:17;34854:47;34918:131;35044:4;34918:131;:::i;:::-;34910:139;;34637:419;;;:::o;35062:169::-;35202:21;35198:1;35190:6;35186:14;35179:45;35062:169;:::o;35237:366::-;35379:3;35400:67;35464:2;35459:3;35400:67;:::i;:::-;35393:74;;35476:93;35565:3;35476:93;:::i;:::-;35594:2;35589:3;35585:12;35578:19;;35237:366;;;:::o;35609:419::-;35775:4;35813:2;35802:9;35798:18;35790:26;;35862:9;35856:4;35852:20;35848:1;35837:9;35833:17;35826:47;35890:131;36016:4;35890:131;:::i;:::-;35882:139;;35609:419;;;:::o;36034:180::-;36082:77;36079:1;36072:88;36179:4;36176:1;36169:15;36203:4;36200:1;36193:15;36220:180;36268:77;36265:1;36258:88;36365:4;36362:1;36355:15;36389:4;36386:1;36379:15;36406:143;36463:5;36494:6;36488:13;36479:22;;36510:33;36537:5;36510:33;:::i;:::-;36406:143;;;;:::o;36555:351::-;36625:6;36674:2;36662:9;36653:7;36649:23;36645:32;36642:119;;;36680:79;;:::i;:::-;36642:119;36800:1;36825:64;36881:7;36872:6;36861:9;36857:22;36825:64;:::i;:::-;36815:74;;36771:128;36555:351;;;;:::o;36912:85::-;36957:7;36986:5;36975:16;;36912:85;;;:::o;37003:158::-;37061:9;37094:61;37112:42;37121:32;37147:5;37121:32;:::i;:::-;37112:42;:::i;:::-;37094:61;:::i;:::-;37081:74;;37003:158;;;:::o;37167:147::-;37262:45;37301:5;37262:45;:::i;:::-;37257:3;37250:58;37167:147;;:::o;37320:114::-;37387:6;37421:5;37415:12;37405:22;;37320:114;;;:::o;37440:184::-;37539:11;37573:6;37568:3;37561:19;37613:4;37608:3;37604:14;37589:29;;37440:184;;;;:::o;37630:132::-;37697:4;37720:3;37712:11;;37750:4;37745:3;37741:14;37733:22;;37630:132;;;:::o;37768:108::-;37845:24;37863:5;37845:24;:::i;:::-;37840:3;37833:37;37768:108;;:::o;37882:179::-;37951:10;37972:46;38014:3;38006:6;37972:46;:::i;:::-;38050:4;38045:3;38041:14;38027:28;;37882:179;;;;:::o;38067:113::-;38137:4;38169;38164:3;38160:14;38152:22;;38067:113;;;:::o;38216:732::-;38335:3;38364:54;38412:5;38364:54;:::i;:::-;38434:86;38513:6;38508:3;38434:86;:::i;:::-;38427:93;;38544:56;38594:5;38544:56;:::i;:::-;38623:7;38654:1;38639:284;38664:6;38661:1;38658:13;38639:284;;;38740:6;38734:13;38767:63;38826:3;38811:13;38767:63;:::i;:::-;38760:70;;38853:60;38906:6;38853:60;:::i;:::-;38843:70;;38699:224;38686:1;38683;38679:9;38674:14;;38639:284;;;38643:14;38939:3;38932:10;;38340:608;;;38216:732;;;;:::o;38954:831::-;39217:4;39255:3;39244:9;39240:19;39232:27;;39269:71;39337:1;39326:9;39322:17;39313:6;39269:71;:::i;:::-;39350:80;39426:2;39415:9;39411:18;39402:6;39350:80;:::i;:::-;39477:9;39471:4;39467:20;39462:2;39451:9;39447:18;39440:48;39505:108;39608:4;39599:6;39505:108;:::i;:::-;39497:116;;39623:72;39691:2;39680:9;39676:18;39667:6;39623:72;:::i;:::-;39705:73;39773:3;39762:9;39758:19;39749:6;39705:73;:::i;:::-;38954:831;;;;;;;;:::o;39791:117::-;39900:1;39897;39890:12;39914:281;39997:27;40019:4;39997:27;:::i;:::-;39989:6;39985:40;40127:6;40115:10;40112:22;40091:18;40079:10;40076:34;40073:62;40070:88;;;40138:18;;:::i;:::-;40070:88;40178:10;40174:2;40167:22;39957:238;39914:281;;:::o;40201:129::-;40235:6;40262:20;;:::i;:::-;40252:30;;40291:33;40319:4;40311:6;40291:33;:::i;:::-;40201:129;;;:::o;40336:311::-;40413:4;40503:18;40495:6;40492:30;40489:56;;;40525:18;;:::i;:::-;40489:56;40575:4;40567:6;40563:17;40555:25;;40635:4;40629;40625:15;40617:23;;40336:311;;;:::o;40653:117::-;40762:1;40759;40752:12;40793:732;40900:5;40925:81;40941:64;40998:6;40941:64;:::i;:::-;40925:81;:::i;:::-;40916:90;;41026:5;41055:6;41048:5;41041:21;41089:4;41082:5;41078:16;41071:23;;41142:4;41134:6;41130:17;41122:6;41118:30;41171:3;41163:6;41160:15;41157:122;;;41190:79;;:::i;:::-;41157:122;41305:6;41288:231;41322:6;41317:3;41314:15;41288:231;;;41397:3;41426:48;41470:3;41458:10;41426:48;:::i;:::-;41421:3;41414:61;41504:4;41499:3;41495:14;41488:21;;41364:155;41348:4;41343:3;41339:14;41332:21;;41288:231;;;41292:21;40906:619;;40793:732;;;;;:::o;41548:385::-;41630:5;41679:3;41672:4;41664:6;41660:17;41656:27;41646:122;;41687:79;;:::i;:::-;41646:122;41797:6;41791:13;41822:105;41923:3;41915:6;41908:4;41900:6;41896:17;41822:105;:::i;:::-;41813:114;;41636:297;41548:385;;;;:::o;41939:554::-;42034:6;42083:2;42071:9;42062:7;42058:23;42054:32;42051:119;;;42089:79;;:::i;:::-;42051:119;42230:1;42219:9;42215:17;42209:24;42260:18;42252:6;42249:30;42246:117;;;42282:79;;:::i;:::-;42246:117;42387:89;42468:7;42459:6;42448:9;42444:22;42387:89;:::i;:::-;42377:99;;42180:306;41939:554;;;;:::o;42499:191::-;42539:4;42559:20;42577:1;42559:20;:::i;:::-;42554:25;;42593:20;42611:1;42593:20;:::i;:::-;42588:25;;42632:1;42629;42626:8;42623:34;;;42637:18;;:::i;:::-;42623:34;42682:1;42679;42675:9;42667:17;;42499:191;;;;:::o;42696:224::-;42836:34;42832:1;42824:6;42820:14;42813:58;42905:7;42900:2;42892:6;42888:15;42881:32;42696:224;:::o;42926:366::-;43068:3;43089:67;43153:2;43148:3;43089:67;:::i;:::-;43082:74;;43165:93;43254:3;43165:93;:::i;:::-;43283:2;43278:3;43274:12;43267:19;;42926:366;;;:::o;43298:419::-;43464:4;43502:2;43491:9;43487:18;43479:26;;43551:9;43545:4;43541:20;43537:1;43526:9;43522:17;43515:47;43579:131;43705:4;43579:131;:::i;:::-;43571:139;;43298:419;;;:::o;43723:222::-;43863:34;43859:1;43851:6;43847:14;43840:58;43932:5;43927:2;43919:6;43915:15;43908:30;43723:222;:::o;43951:366::-;44093:3;44114:67;44178:2;44173:3;44114:67;:::i;:::-;44107:74;;44190:93;44279:3;44190:93;:::i;:::-;44308:2;44303:3;44299:12;44292:19;;43951:366;;;:::o;44323:419::-;44489:4;44527:2;44516:9;44512:18;44504:26;;44576:9;44570:4;44566:20;44562:1;44551:9;44547:17;44540:47;44604:131;44730:4;44604:131;:::i;:::-;44596:139;;44323:419;;;:::o;44748:225::-;44888:34;44884:1;44876:6;44872:14;44865:58;44957:8;44952:2;44944:6;44940:15;44933:33;44748:225;:::o;44979:366::-;45121:3;45142:67;45206:2;45201:3;45142:67;:::i;:::-;45135:74;;45218:93;45307:3;45218:93;:::i;:::-;45336:2;45331:3;45327:12;45320:19;;44979:366;;;:::o;45351:419::-;45517:4;45555:2;45544:9;45540:18;45532:26;;45604:9;45598:4;45594:20;45590:1;45579:9;45575:17;45568:47;45632:131;45758:4;45632:131;:::i;:::-;45624:139;;45351:419;;;:::o

Swarm Source

ipfs://6de612a78b2446a33448a07ec9d128662f8754807a8832fc6b1a69b985c2ade4
[ 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.