ETH Price: $3,396.34 (+1.34%)
Gas: 7 Gwei

Token

RESTINPEACECZ (RIPCZ)
 

Overview

Max Total Supply

4,300,000,000 RIPCZ

Holders

28

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
108,690,057.134922659955724743 RIPCZ

Value
$0.00
0x1709735efb831bf0f9bb3794eff8aff175068a76
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
V3SaintbotToken

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-22
*/

/* --------
 Token Deployed using Saintbot
 Contract Renounced automatically
 Liquidity Locked on UNCX, 0 Owner Tokens, Anti-Rug by default
 Deploy and manage fair launch anti-rug tokens seamlessly and lightning-fast with low gas on our free-to-use Telegram bot.
 --------
 Website:
 Twitter: https://twitter.com/https://twitter.com/RESTINPEACECZ
 Telegram: https://t.me/https://t.me/restinpeacecz
 Gitbook:
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;

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

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

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

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

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

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

  /**
   * @dev Moves `amount` tokens from the caller's account to `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);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

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

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

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

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

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

  uint256 private _totalSupply;

  string private _name;
  string private _symbol;

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

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

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

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

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

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

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

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

  /**
   * @dev See {IERC20-approve}.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   */
  function approve(
    address spender,
    uint256 amount
  ) public virtual override returns (bool) {
    _approve(_msgSender(), spender, amount);
    return true;
  }

  /**
   * @dev See {IERC20-transferFrom}.
   *
   * Emits an {Approval} event indicating the updated allowance. This is not
   * required by the EIP. See the note at the beginning of {ERC20}.
   *
   * Requirements:
   *
   * - `sender` and `recipient` cannot be the zero address.
   * - `sender` must have a balance of at least `amount`.
   * - the caller must have allowance for ``sender``'s tokens of at least
   * `amount`.
   */
  function transferFrom(
    address sender,
    address recipient,
    uint256 amount
  ) public virtual override returns (bool) {
    _transfer(sender, recipient, amount);

    uint256 currentAllowance = _allowances[sender][_msgSender()];
    require(
      currentAllowance >= amount,
      "ERC20: transfer amount exceeds allowance"
    );
    unchecked {
      _approve(sender, _msgSender(), currentAllowance - 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) {
    _approve(
      _msgSender(),
      spender,
      _allowances[_msgSender()][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) {
    uint256 currentAllowance = _allowances[_msgSender()][spender];
    require(
      currentAllowance >= subtractedValue,
      "ERC20: decreased allowance below zero"
    );
    unchecked {
      _approve(_msgSender(), spender, currentAllowance - subtractedValue);
    }

    return true;
  }

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

    _beforeTokenTransfer(sender, recipient, amount);

    uint256 senderBalance = _balances[sender];
    require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
    unchecked {
      _balances[sender] = senderBalance - amount;
    }
    _balances[recipient] += amount;

    emit Transfer(sender, recipient, amount);

    _afterTokenTransfer(sender, recipient, amount);
  }

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

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

    _totalSupply += 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 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 {}
}

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
  /**
   * @dev Returns the addition of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `+` operator.
   *
   * Requirements:
   *
   * - Addition cannot overflow.
   */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    return a + b;
  }

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

  /**
   * @dev Returns the multiplication of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `*` operator.
   *
   * Requirements:
   *
   * - Multiplication cannot overflow.
   */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    return a * b;
  }

  /**
   * @dev Returns the integer division of two unsigned integers, reverting on
   * division by zero. The result is rounded towards zero.
   *
   * Counterpart to Solidity's `/` operator.
   *
   * Requirements:
   *
   * - The divisor cannot be zero.
   */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    return a / b;
  }

  /**
   * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
   * overflow (when the result is negative).
   *
   * CAUTION: This function is deprecated because it requires allocating memory for the error
   * message unnecessarily. For custom revert reasons use {trySub}.
   *
   * Counterpart to Solidity's `-` operator.
   *
   * Requirements:
   *
   * - Subtraction cannot overflow.
   */
  function sub(
    uint256 a,
    uint256 b,
    string memory errorMessage
  ) internal pure returns (uint256) {
    unchecked {
      require(b <= a, errorMessage);
      return a - b;
    }
  }

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

interface IUniswapV2Factory {
  function createPair(
    address tokenA,
    address tokenB
  ) external returns (address pair);
}

interface IUniswapV2Pair {
  event Approval(address indexed owner, address indexed spender, uint256 value);
  event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

  function balanceOf(address owner) external view returns (uint256);

  function allowance(
    address owner,
    address spender
  ) external view returns (uint256);

  function approve(address spender, uint256 value) external returns (bool);

  function transfer(address to, uint256 value) external returns (bool);

  function transferFrom(
    address from,
    address to,
    uint256 value
  ) external returns (bool);

  function factory() external view returns (address);

  function token0() external view returns (address);

  function token1() external view returns (address);

  function mint(address to) external returns (uint256 liquidity);

  function burn(address to) external returns (uint256 amount0, uint256 amount1);

  function swap(
    uint256 amount0Out,
    uint256 amount1Out,
    address to,
    bytes calldata data
  ) external;
}

interface IUniswapV2Router02 {
  function factory() external pure returns (address);

  function WETH() external pure returns (address);

  function addLiquidity(
    address tokenA,
    address tokenB,
    uint256 amountADesired,
    uint256 amountBDesired,
    uint256 amountAMin,
    uint256 amountBMin,
    address to,
    uint256 deadline
  ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

  function addLiquidityETH(
    address token,
    uint256 amountTokenDesired,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline
  )
    external
    payable
    returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

  function swapExactTokensForTokensSupportingFeeOnTransferTokens(
    uint256 amountIn,
    uint256 amountOutMin,
    address[] calldata path,
    address to,
    uint256 deadline
  ) external;

  function swapExactETHForTokensSupportingFeeOnTransferTokens(
    uint256 amountOutMin,
    address[] calldata path,
    address to,
    uint256 deadline
  ) external payable;

  function swapExactTokensForETHSupportingFeeOnTransferTokens(
    uint256 amountIn,
    uint256 amountOutMin,
    address[] calldata path,
    address to,
    uint256 deadline
  ) external;
}

interface IERCBurn {
  function burn(uint256 _amount) external;

  function approve(address spender, uint256 amount) external returns (bool);

  function allowance(address owner, address spender) external returns (uint256);

  function balanceOf(address account) external view returns (uint256);

  function transfer(address to, uint256 value) external returns (bool);
}

interface IUNCX {
  function lockLPToken(
    address _lpToken,
    uint256 _amount,
    uint256 _unlock_date,
    address payable _referral,
    bool _fee_in_eth,
    address payable _withdrawer
  ) external payable;

  struct FeeStruct {
    uint256 ethFee; // Small eth fee to prevent spam on the platform
    IERCBurn secondaryFeeToken; // UNCX or UNCL
    uint256 secondaryTokenFee; // optional, UNCX or UNCL
    uint256 secondaryTokenDiscount; // discount on liquidity fee for burning secondaryToken
    uint256 liquidityFee; // fee on univ2 liquidity tokens
    uint256 referralPercent; // fee for referrals
    IERCBurn referralToken; // token the refferer must hold to qualify as a referrer
    uint256 referralHold; // balance the referrer must hold to qualify as a referrer
    uint256 referralDiscount; // discount on flatrate fees for using a valid referral address
  }

  function gFees() external returns (FeeStruct memory);
}

interface IRefSys {
  function getRefReceiver(
    bytes memory _refCode
  ) external view returns (address receiverWallet);
}

contract V3SaintbotToken is ERC20, Ownable {
  using SafeMath for uint256;

  IUNCX public constant LOCKER =
    IUNCX(0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214);

  IUniswapV2Router02 public immutable uniswapV2Router;
  address public immutable uniswapV2Pair;
  address public constant deadAddress = address(0xdead);

  bool private swapping;

  address public teamWallet;

  uint256 public maxTransactionAmount;
  uint256 public swapTokensAtAmount;
  uint256 public maxWallet;

  bool public tradingActive = false;
  bool public swapEnabled = false;

  uint256 public immutable buyTotalFees;
  uint256 public immutable sellTotalFees;
  uint256 public immutable maxSell;

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

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

  event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

  address public immutable REF;
  uint256 public immutable NONCE;

  IRefSys public constant REF_SYS =
    IRefSys(0x8A99c005C7B425ce999441afeE22D4987F7a9869);
  address public constant MAINNET_BOT_TRADING_RECEIVER =
    0xD5E2E43e30b706de8A0e01e72a6aBa2b8930af44;

  constructor(
    string memory _name,
    string memory _symbol,
    uint256 _totalSupply,
    uint256 _buyTaxes,
    uint256 _sellTaxes,
    address _lockOwnerAndTaxReceiver,
    bytes memory _ref
  ) payable ERC20(_name, _symbol) {
    require(
      msg.value >= 0.4 ether,
      "weth liquidity need to be bigger than 0.4"
    );
    require(
      _totalSupply >= 10 && _totalSupply <= 1_000_000_000_000_000,
      "InvalidSupply()"
    );
    require(_buyTaxes >= 1 && _buyTaxes <= 7, "InvalidTaxes()");
    require(_sellTaxes >= 1 && _sellTaxes <= 7, "InvalidTaxes()");

    IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
      0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
    );

    excludeFromMaxTransaction(address(_uniswapV2Router), true);

    uniswapV2Router = _uniswapV2Router;

    uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
      address(this),
      _uniswapV2Router.WETH()
    );

    excludeFromMaxTransaction(address(uniswapV2Pair), true);
    _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

    uint256 totalSupply_ = _totalSupply * 1e18;

    maxTransactionAmount = (totalSupply_ * 3) / 100;
    maxWallet = (totalSupply_ * 6) / 100;
    swapTokensAtAmount = (totalSupply_ * 5) / 10000; // 0.05%
    maxSell = (totalSupply_ * 5) / 1_000;

    buyTotalFees = _buyTaxes;
    sellTotalFees = _sellTaxes;

    teamWallet = _lockOwnerAndTaxReceiver; // set as team wallet

    // exclude from paying fees or having max transaction amount
    excludeFromFees(address(this), true);
    excludeFromFees(address(0xdead), true);

    excludeFromMaxTransaction(address(this), true);
    excludeFromMaxTransaction(address(0xdead), true);
    excludeFromMaxTransaction(_lockOwnerAndTaxReceiver, true);
    excludeFromMaxTransaction(address(uniswapV2Router), true);

    REF = REF_SYS.getRefReceiver(_ref);

    /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
    _mint(address(this), totalSupply_);
  }

  function addLiquidity(uint256 _multiplier) external {
    require(msg.sender == owner(), "auth");

    _approve(address(this), address(uniswapV2Router), totalSupply());
    tradingActive = true;
    swapEnabled = true;

    uint256 minLock = 30 days;
    uint256 uncxExpenses = LOCKER.gFees().ethFee;
    address _pair = address(uniswapV2Pair);

    uniswapV2Router.addLiquidityETH{
      value: address(this).balance - uncxExpenses
    }(
      address(this),
      balanceOf(address(this)),
      0,
      0,
      address(this),
      block.timestamp
    );

    IERCBurn(_pair).approve(
      address(LOCKER),
      IERC20(_pair).balanceOf(address(this))
    );

    LOCKER.lockLPToken{value: uncxExpenses}(
      address(_pair),
      IERC20(_pair).balanceOf(address(this)),
      block.timestamp + (minLock * _multiplier),
      payable(address(0)),
      true,
      payable(owner())
    );

    renounceOwnership();
  }

  receive() external payable {}

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

  function excludeFromFees(address account, bool excluded) internal {
    _isExcludedFromFees[account] = excluded;
    emit ExcludeFromFees(account, excluded);
  }

  function setAutomatedMarketMakerPair(address pair, bool value) internal {
    require(
      pair != uniswapV2Pair,
      "The pair cannot be removed from automatedMarketMakerPairs"
    );

    _setAutomatedMarketMakerPair(pair, value);
  }

  function _setAutomatedMarketMakerPair(address pair, bool value) private {
    automatedMarketMakerPairs[pair] = value;

    emit SetAutomatedMarketMakerPair(pair, value);
  }

  function updateTeamWallet(address newWallet) external {
    require(msg.sender == teamWallet, "auth");

    emit teamWalletUpdated(newWallet, teamWallet);

    teamWallet = newWallet;
  }

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

  function _transfer(
    address from,
    address to,
    uint256 amount
  ) internal override {
    require(from != address(0), "ERC20: transfer from the zero address");
    require(to != address(0), "ERC20: transfer to the zero address");

    if (amount == 0) {
      super._transfer(from, to, 0);
      return;
    }

    if (to != address(0) && to != address(0xdead) && !swapping) {
      if (!tradingActive) {
        require(
          _isExcludedFromFees[from] || _isExcludedFromFees[to],
          "Trading is not active."
        );
      }

      //when buy
      if (
        automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]
      ) {
        require(
          amount <= maxTransactionAmount,
          "Buy transfer amount exceeds the maxTransactionAmount."
        );
        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
      }
      //when sell
      else if (
        automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]
      ) {
        require(
          amount <= maxTransactionAmount,
          "Sell transfer amount exceeds the maxTransactionAmount."
        );
      } else if (!_isExcludedMaxTransactionAmount[to]) {
        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
      }
    }

    uint256 contractTokenBalance = balanceOf(address(this));

    bool canSwap = contractTokenBalance >= swapTokensAtAmount;

    if (
      canSwap &&
      swapEnabled &&
      !swapping &&
      !automatedMarketMakerPairs[from] &&
      !_isExcludedFromFees[from] &&
      !_isExcludedFromFees[to]
    ) {
      swapping = true;

      swapBack();

      swapping = false;
    }

    bool takeFee = !swapping;

    // if any account belongs to _isExcludedFromFee account then remove the fee
    if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
      takeFee = false;
    }

    uint256 fees = 0;

    // only take fees on buys/sells, do not take on wallet transfers
    if (takeFee) {
      // on sell
      if (automatedMarketMakerPairs[to]) {
        fees = amount.mul(sellTotalFees).div(100);
      }
      // on buy
      else if (automatedMarketMakerPairs[from]) {
        fees = amount.mul(buyTotalFees).div(100);
      }

      if (fees > 0) {
        super._transfer(from, address(this), fees);
      }

      amount -= fees;
    }

    super._transfer(from, to, amount);
  }

  function swapTokensForEth(uint256 tokenAmount) private {
    // generate the uniswap pair path of token -> weth
    address[] memory path = new address[](2);
    path[0] = address(this);
    path[1] = uniswapV2Router.WETH();

    uint256 sellAmount_ = min(tokenAmount, min(tokenAmount, maxSell));

    _approve(address(this), address(uniswapV2Router), sellAmount_);

    // make the swap
    uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
      sellAmount_,
      0, // accept any amount of ETH
      path,
      address(this),
      block.timestamp
    );
  }

  function min(uint256 a, uint256 b) private pure returns (uint256) {
    return (a > b) ? b : a;
  }

  function swapBack() private {
    uint256 contractBalance = balanceOf(address(this));

    swapTokensForEth(contractBalance);

    uint256 ethBalance = address(this).balance;

    if (REF == address(0)) {
      // If user has not entered a ref code, he will receive 4% fees
      uint256 taxWalletAmount = (ethBalance * 80) / 100;

      // Send 80% of the fees
      (bool success, ) = teamWallet.call{value: taxWalletAmount}("");

      require(success, "failed sending eth");

      address payable SAINTBOT_TAXES = payable(MAINNET_BOT_TRADING_RECEIVER);

      // Send 100% - 80% of the fees to us
      (success, ) = SAINTBOT_TAXES.call{value: ethBalance - taxWalletAmount}(
        ""
      );

      require(success, "failed sending eth");
    } else {
      // If he did enter a ref code, he will receive 4.1% fees
      uint256 taxWalletAmount = (ethBalance * 82) / 100;

      // Send 82% of the fees
      (bool success, ) = teamWallet.call{value: taxWalletAmount}("");

      require(success, "failed sending eth");

      // 0.15% to ref address, meaning that its 3% out of the 5%
      payable(REF).transfer((taxWalletAmount * 3) / 100);

      address payable SAINTBOT_TAXES = payable(MAINNET_BOT_TRADING_RECEIVER);

      (success, ) = SAINTBOT_TAXES.call{value: (ethBalance * 15) / 100}("");

      require(success, "failed sending eth");
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint256","name":"_buyTaxes","type":"uint256"},{"internalType":"uint256","name":"_sellTaxes","type":"uint256"},{"internalType":"address","name":"_lockOwnerAndTaxReceiver","type":"address"},{"internalType":"bytes","name":"_ref","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"teamWalletUpdated","type":"event"},{"inputs":[],"name":"LOCKER","outputs":[{"internalType":"contract IUNCX","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAINNET_BOT_TRADING_RECEIVER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NONCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REF","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REF_SYS","outputs":[{"internalType":"contract IRefSys","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_multiplier","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101606040525f600a5f6101000a81548160ff0219169083151502179055505f600a60016101000a81548160ff0219169083151502179055506040516200551d3803806200551d83398181016040528101906200005d919062000d1a565b8686816003908162000070919062001053565b50806004908162000082919062001053565b505050620000a5620000996200066960201b60201c565b6200067060201b60201c565b67058d15e176280000341015620000f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000ea90620011bb565b60405180910390fd5b600a85101580156200010c575066038d7ea4c680008511155b6200014e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001459062001229565b60405180910390fd5b6001841015801562000161575060078411155b620001a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019a9062001297565b60405180910390fd5b60018310158015620001b6575060078311155b620001f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ef9062001297565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002238160016200073360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002c79190620012b7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003539190620012b7565b6040518363ffffffff1660e01b815260040162000372929190620012f8565b6020604051808303815f875af11580156200038f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003b59190620012b7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003fd60a05160016200073360201b60201c565b6200041260a05160016200078b60201b60201c565b5f670de0b6b3a76400008762000429919062001350565b905060646003826200043c919062001350565b620004489190620013c7565b60078190555060646006826200045f919062001350565b6200046b9190620013c7565b60098190555061271060058262000483919062001350565b6200048f9190620013c7565b6008819055506103e8600582620004a7919062001350565b620004b39190620013c7565b61010081815250508560c081815250508460e081815250508360065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200051e3060016200082960201b60201c565b6200053361dead60016200082960201b60201c565b620005463060016200073360201b60201c565b6200055b61dead60016200073360201b60201c565b6200056e8460016200073360201b60201c565b6200058360805160016200073360201b60201c565b738a99c005c7b425ce999441afee22d4987f7a986973ffffffffffffffffffffffffffffffffffffffff1663eec40869846040518263ffffffff1660e01b8152600401620005d2919062001458565b602060405180830381865afa158015620005ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620006149190620012b7565b73ffffffffffffffffffffffffffffffffffffffff166101208173ffffffffffffffffffffffffffffffffffffffff16815250506200065a3082620008d160201b60201c565b50505050505050505062001585565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008c5919062001496565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093990620014ff565b60405180910390fd5b620009555f838362000a4160201b60201c565b8060025f8282546200096891906200151f565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254620009bc91906200151f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a2291906200156a565b60405180910390a362000a3d5f838362000a4660201b60201c565b5050565b505050565b505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b62000aac8262000a64565b810181811067ffffffffffffffff8211171562000ace5762000acd62000a74565b5b80604052505050565b5f62000ae262000a4b565b905062000af0828262000aa1565b919050565b5f67ffffffffffffffff82111562000b125762000b1162000a74565b5b62000b1d8262000a64565b9050602081019050919050565b5f5b8381101562000b4957808201518184015260208101905062000b2c565b5f8484015250505050565b5f62000b6a62000b648462000af5565b62000ad7565b90508281526020810184848401111562000b895762000b8862000a60565b5b62000b9684828562000b2a565b509392505050565b5f82601f83011262000bb55762000bb462000a5c565b5b815162000bc784826020860162000b54565b91505092915050565b5f819050919050565b62000be48162000bd0565b811462000bef575f80fd5b50565b5f8151905062000c028162000bd9565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000c338262000c08565b9050919050565b62000c458162000c27565b811462000c50575f80fd5b50565b5f8151905062000c638162000c3a565b92915050565b5f67ffffffffffffffff82111562000c865762000c8562000a74565b5b62000c918262000a64565b9050602081019050919050565b5f62000cb462000cae8462000c69565b62000ad7565b90508281526020810184848401111562000cd35762000cd262000a60565b5b62000ce084828562000b2a565b509392505050565b5f82601f83011262000cff5762000cfe62000a5c565b5b815162000d1184826020860162000c9e565b91505092915050565b5f805f805f805f60e0888a03121562000d385762000d3762000a54565b5b5f88015167ffffffffffffffff81111562000d585762000d5762000a58565b5b62000d668a828b0162000b9e565b975050602088015167ffffffffffffffff81111562000d8a5762000d8962000a58565b5b62000d988a828b0162000b9e565b965050604062000dab8a828b0162000bf2565b955050606062000dbe8a828b0162000bf2565b945050608062000dd18a828b0162000bf2565b93505060a062000de48a828b0162000c53565b92505060c088015167ffffffffffffffff81111562000e085762000e0762000a58565b5b62000e168a828b0162000ce8565b91505092959891949750929550565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000e7457607f821691505b60208210810362000e8a5762000e8962000e2f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000eee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000eb1565b62000efa868362000eb1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000f3b62000f3562000f2f8462000bd0565b62000f12565b62000bd0565b9050919050565b5f819050919050565b62000f568362000f1b565b62000f6e62000f658262000f42565b84845462000ebd565b825550505050565b5f90565b62000f8462000f76565b62000f9181848462000f4b565b505050565b5b8181101562000fb85762000fac5f8262000f7a565b60018101905062000f97565b5050565b601f821115620010075762000fd18162000e90565b62000fdc8462000ea2565b8101602085101562000fec578190505b6200100462000ffb8562000ea2565b83018262000f96565b50505b505050565b5f82821c905092915050565b5f620010295f19846008026200100c565b1980831691505092915050565b5f62001043838362001018565b9150826002028217905092915050565b6200105e8262000e25565b67ffffffffffffffff8111156200107a576200107962000a74565b5b62001086825462000e5c565b6200109382828562000fbc565b5f60209050601f831160018114620010c9575f8415620010b4578287015190505b620010c0858262001036565b8655506200112f565b601f198416620010d98662000e90565b5f5b828110156200110257848901518255600182019150602085019450602081019050620010db565b868310156200112257848901516200111e601f89168262001018565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f77657468206c6971756964697479206e65656420746f206265206269676765725f8201527f207468616e20302e340000000000000000000000000000000000000000000000602082015250565b5f620011a360298362001137565b9150620011b08262001147565b604082019050919050565b5f6020820190508181035f830152620011d48162001195565b9050919050565b7f496e76616c6964537570706c79282900000000000000000000000000000000005f82015250565b5f62001211600f8362001137565b91506200121e82620011db565b602082019050919050565b5f6020820190508181035f830152620012428162001203565b9050919050565b7f496e76616c6964546178657328290000000000000000000000000000000000005f82015250565b5f6200127f600e8362001137565b91506200128c8262001249565b602082019050919050565b5f6020820190508181035f830152620012b08162001271565b9050919050565b5f60208284031215620012cf57620012ce62000a54565b5b5f620012de8482850162000c53565b91505092915050565b620012f28162000c27565b82525050565b5f6040820190506200130d5f830185620012e7565b6200131c6020830184620012e7565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200135c8262000bd0565b9150620013698362000bd0565b9250828202620013798162000bd0565b9150828204841483151762001393576200139262001323565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620013d38262000bd0565b9150620013e08362000bd0565b925082620013f357620013f26200139a565b5b828204905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f6200142482620013fe565b62001430818562001408565b93506200144281856020860162000b2a565b6200144d8162000a64565b840191505092915050565b5f6020820190508181035f83015262001472818462001418565b905092915050565b5f8115159050919050565b62001490816200147a565b82525050565b5f602082019050620014ab5f83018462001485565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620014e7601f8362001137565b9150620014f482620014b1565b602082019050919050565b5f6020820190508181035f8301526200151881620014d9565b9050919050565b5f6200152b8262000bd0565b9150620015388362000bd0565b925082820190508082111562001553576200155262001323565b5b92915050565b620015648162000bd0565b82525050565b5f6020820190506200157f5f83018462001559565b92915050565b60805160a05160c05160e051610100516101205161014051613ef9620016245f395f6115cb01525f81816108a10152818161251501526127ef01525f81816114d10152612aff01525f81816110a9015261209701525f8181611525015261213301525f8181610b7b0152610d5e01525f81816109a701528181610c6a01528181610d8101528181612a1b01528181612b300152612b570152613ef95ff3fe608060405260043610610212575f3560e01c806370a0823111610117578063bbc0c7421161009f578063dd62ed3e1161006e578063dd62ed3e146107bd578063e091dd1a146107f9578063e2f4560514610823578063f2fde38b1461084d578063f8b45b051461087557610219565b8063bbc0c74214610715578063c8c8ebe41461073f578063d0bb6c0b14610769578063d85ba0631461079357610219565b806395d89b41116100e657806395d89b411461060d578063a457c2d714610637578063a9059cbb14610673578063b62496f5146106af578063b8eb3546146106eb57610219565b806370a0823114610569578063715018a6146105a55780637cb332bb146105bb5780638da5cb5b146105e357610219565b8063313ce5671161019a57806351c6590a1161016957806351c6590a1461049957806359927044146104c1578063671241a1146104eb5780636a486a8e146105155780636ddd17131461053f57610219565b8063313ce567146103cd57806339509351146103f757806349bd5a5e146104335780634fbee1931461045d57610219565b806310d5de53116101e157806310d5de53146102d75780631694505e1461031357806318160ddd1461033d57806323b872dd1461036757806327c8f835146103a357610219565b8063066034fc1461021d57806306fdde031461024757806308ecd9a614610271578063095ea7b31461029b57610219565b3661021957005b5f80fd5b348015610228575f80fd5b5061023161089f565b60405161023e9190612c3f565b60405180910390f35b348015610252575f80fd5b5061025b6108c3565b6040516102689190612ce2565b60405180910390f35b34801561027c575f80fd5b50610285610953565b6040516102929190612d5d565b60405180910390f35b3480156102a6575f80fd5b506102c160048036038101906102bc9190612de0565b61096b565b6040516102ce9190612e38565b60405180910390f35b3480156102e2575f80fd5b506102fd60048036038101906102f89190612e51565b610988565b60405161030a9190612e38565b60405180910390f35b34801561031e575f80fd5b506103276109a5565b6040516103349190612e9c565b60405180910390f35b348015610348575f80fd5b506103516109c9565b60405161035e9190612ec4565b60405180910390f35b348015610372575f80fd5b5061038d60048036038101906103889190612edd565b6109d2565b60405161039a9190612e38565b60405180910390f35b3480156103ae575f80fd5b506103b7610ac4565b6040516103c49190612c3f565b60405180910390f35b3480156103d8575f80fd5b506103e1610aca565b6040516103ee9190612f48565b60405180910390f35b348015610402575f80fd5b5061041d60048036038101906104189190612de0565b610ad2565b60405161042a9190612e38565b60405180910390f35b34801561043e575f80fd5b50610447610b79565b6040516104549190612c3f565b60405180910390f35b348015610468575f80fd5b50610483600480360381019061047e9190612e51565b610b9d565b6040516104909190612e38565b60405180910390f35b3480156104a4575f80fd5b506104bf60048036038101906104ba9190612f61565b610bef565b005b3480156104cc575f80fd5b506104d561106a565b6040516104e29190612c3f565b60405180910390f35b3480156104f6575f80fd5b506104ff61108f565b60405161050c9190612fac565b60405180910390f35b348015610520575f80fd5b506105296110a7565b6040516105369190612ec4565b60405180910390f35b34801561054a575f80fd5b506105536110cb565b6040516105609190612e38565b60405180910390f35b348015610574575f80fd5b5061058f600480360381019061058a9190612e51565b6110de565b60405161059c9190612ec4565b60405180910390f35b3480156105b0575f80fd5b506105b9611123565b005b3480156105c6575f80fd5b506105e160048036038101906105dc9190612e51565b6111aa565b005b3480156105ee575f80fd5b506105f76112f7565b6040516106049190612c3f565b60405180910390f35b348015610618575f80fd5b5061062161131f565b60405161062e9190612ce2565b60405180910390f35b348015610642575f80fd5b5061065d60048036038101906106589190612de0565b6113af565b60405161066a9190612e38565b60405180910390f35b34801561067e575f80fd5b5061069960048036038101906106949190612de0565b611495565b6040516106a69190612e38565b60405180910390f35b3480156106ba575f80fd5b506106d560048036038101906106d09190612e51565b6114b2565b6040516106e29190612e38565b60405180910390f35b3480156106f6575f80fd5b506106ff6114cf565b60405161070c9190612ec4565b60405180910390f35b348015610720575f80fd5b506107296114f3565b6040516107369190612e38565b60405180910390f35b34801561074a575f80fd5b50610753611505565b6040516107609190612ec4565b60405180910390f35b348015610774575f80fd5b5061077d61150b565b60405161078a9190612c3f565b60405180910390f35b34801561079e575f80fd5b506107a7611523565b6040516107b49190612ec4565b60405180910390f35b3480156107c8575f80fd5b506107e360048036038101906107de9190612fc5565b611547565b6040516107f09190612ec4565b60405180910390f35b348015610804575f80fd5b5061080d6115c9565b60405161081a9190612ec4565b60405180910390f35b34801561082e575f80fd5b506108376115ed565b6040516108449190612ec4565b60405180910390f35b348015610858575f80fd5b50610873600480360381019061086e9190612e51565b6115f3565b005b348015610880575f80fd5b506108896116e9565b6040516108969190612ec4565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6060600380546108d290613030565b80601f01602080910402602001604051908101604052809291908181526020018280546108fe90613030565b80156109495780601f1061092057610100808354040283529160200191610949565b820191905f5260205f20905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b73663a5c229c09b049e36dcc11a9b0d4a8eb9db21481565b5f61097e6109776116ef565b84846116f6565b6001905092915050565b600c602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b5f6109de8484846118b9565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610a256116ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9b906130d0565b60405180910390fd5b610ab885610ab06116ef565b8584036116f6565b60019150509392505050565b61dead81565b5f6012905090565b5f610b6f610ade6116ef565b848460015f610aeb6116ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b6a919061311b565b6116f6565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610bf76112f7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b90613198565b60405180910390fd5b610c96307f0000000000000000000000000000000000000000000000000000000000000000610c916109c9565b6116f6565b6001600a5f6101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055505f62278d0090505f73663a5c229c09b049e36dcc11a9b0d4a8eb9db21473ffffffffffffffffffffffffffffffffffffffff166390e1a0036040518163ffffffff1660e01b8152600401610120604051808303815f875af1158015610d32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d56919061335e565b5f015190505f7f000000000000000000000000000000000000000000000000000000000000000090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198347610dc7919061338a565b30610dd1306110de565b5f8030426040518863ffffffff1660e01b8152600401610df6969594939291906133f6565b60606040518083038185885af1158015610e12573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610e379190613455565b5050508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b373663a5c229c09b049e36dcc11a9b0d4a8eb9db2148373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ea49190612c3f565b602060405180830381865afa158015610ebf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee391906134a5565b6040518363ffffffff1660e01b8152600401610f009291906134d0565b6020604051808303815f875af1158015610f1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f409190613521565b5073663a5c229c09b049e36dcc11a9b0d4a8eb9db21473ffffffffffffffffffffffffffffffffffffffff16638af416f683838473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fac9190612c3f565b602060405180830381865afa158015610fc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610feb91906134a5565b8888610ff7919061354c565b42611002919061311b565b5f600161100d6112f7565b6040518863ffffffff1660e01b815260040161102e969594939291906135ad565b5f604051808303818588803b158015611045575f80fd5b505af1158015611057573d5f803e3d5ffd5b5050505050611064611123565b50505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b738a99c005c7b425ce999441afee22d4987f7a986981565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61112b6116ef565b73ffffffffffffffffffffffffffffffffffffffff166111496112f7565b73ffffffffffffffffffffffffffffffffffffffff161461119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690613656565b60405180910390fd5b6111a85f6121ab565b565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123090613198565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166860405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461132e90613030565b80601f016020809104026020016040519081016040528092919081815260200182805461135a90613030565b80156113a55780601f1061137c576101008083540402835291602001916113a5565b820191905f5260205f20905b81548152906001019060200180831161138857829003601f168201915b5050505050905090565b5f8060015f6113bc6116ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d906136e4565b60405180910390fd5b61148a6114816116ef565b858584036116f6565b600191505092915050565b5f6114a86114a16116ef565b84846118b9565b6001905092915050565b600d602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5f9054906101000a900460ff1681565b60075481565b73d5e2e43e30b706de8a0e01e72a6aba2b8930af4481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60085481565b6115fb6116ef565b73ffffffffffffffffffffffffffffffffffffffff166116196112f7565b73ffffffffffffffffffffffffffffffffffffffff161461166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690613656565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490613772565b60405180910390fd5b6116e6816121ab565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b90613800565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c99061388e565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118ac9190612ec4565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e9061391c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c906139aa565b60405180910390fd5b5f81036119ac576119a783835f61226e565b6121a6565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611a16575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a2f5750600560149054906101000a900460ff16155b15611dfc57600a5f9054906101000a900460ff16611b2257600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611ae25750600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1890613a12565b60405180910390fd5b5b600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611bbf5750600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611c6657600754811115611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0090613aa0565b60405180910390fd5b600954611c15836110de565b82611c20919061311b565b1115611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890613b08565b60405180910390fd5b611dfb565b600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611d035750600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611d5257600754811115611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4490613b96565b60405180910390fd5b611dfa565b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611df957600954611dac836110de565b82611db7919061311b565b1115611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90613b08565b60405180910390fd5b5b5b5b5b5f611e06306110de565b90505f6008548210159050808015611e2a5750600a60019054906101000a900460ff165b8015611e435750600560149054906101000a900460ff16155b8015611e965750600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611ee95750600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611f3c5750600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611f7f576001600560146101000a81548160ff021916908315150217905550611f646124e3565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061202e5750600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612037575f90505b5f811561219657600d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156120da576120d360646120c57f00000000000000000000000000000000000000000000000000000000000000008861294a90919063ffffffff16565b61295f90919063ffffffff16565b9050612173565b600d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156121725761216f60646121617f00000000000000000000000000000000000000000000000000000000000000008861294a90919063ffffffff16565b61295f90919063ffffffff16565b90505b5b5f8111156121875761218687308361226e565b5b8085612193919061338a565b94505b6121a187878761226e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d39061391c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361234a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612341906139aa565b60405180910390fd5b612355838383612974565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf90613c24565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612466919061311b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124ca9190612ec4565b60405180910390a36124dd848484612979565b50505050565b5f6124ed306110de565b90506124f88161297e565b5f4790505f73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1603612708575f606460508361255f919061354c565b6125699190613c6f565b90505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516125b190613ccc565b5f6040518083038185875af1925050503d805f81146125eb576040519150601f19603f3d011682016040523d82523d5f602084013e6125f0565b606091505b5050905080612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b90613d2a565b60405180910390fd5b5f73d5e2e43e30b706de8a0e01e72a6aba2b8930af4490508073ffffffffffffffffffffffffffffffffffffffff16838561266f919061338a565b60405161267b90613ccc565b5f6040518083038185875af1925050503d805f81146126b5576040519150601f19603f3d011682016040523d82523d5f602084013e6126ba565b606091505b50508092505081612700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f790613d2a565b60405180910390fd5b505050612946565b5f6064605283612718919061354c565b6127229190613c6f565b90505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161276a90613ccc565b5f6040518083038185875af1925050503d805f81146127a4576040519150601f19603f3d011682016040523d82523d5f602084013e6127a9565b606091505b50509050806127ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e490613d2a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc6064600385612836919061354c565b6128409190613c6f565b90811502906040515f60405180830381858888f19350505050158015612868573d5f803e3d5ffd5b505f73d5e2e43e30b706de8a0e01e72a6aba2b8930af4490508073ffffffffffffffffffffffffffffffffffffffff166064600f866128a7919061354c565b6128b19190613c6f565b6040516128bd90613ccc565b5f6040518083038185875af1925050503d805f81146128f7576040519150601f19603f3d011682016040523d82523d5f602084013e6128fc565b606091505b50508092505081612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990613d2a565b60405180910390fd5b5050505b5050565b5f8183612957919061354c565b905092915050565b5f818361296c9190613c6f565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561299a576129996131ba565b5b6040519080825280602002602001820160405280156129c85781602001602082028036833780820191505090505b50905030815f815181106129df576129de613d48565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a82573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aa69190613d89565b81600181518110612aba57612ab9613d48565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f612b2883612b23857f0000000000000000000000000000000000000000000000000000000000000000612be8565b612be8565b9050612b55307f0000000000000000000000000000000000000000000000000000000000000000836116f6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947825f8530426040518663ffffffff1660e01b8152600401612bb6959493929190613e6b565b5f604051808303815f87803b158015612bcd575f80fd5b505af1158015612bdf573d5f803e3d5ffd5b50505050505050565b5f818311612bf65782612bf8565b815b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612c2982612c00565b9050919050565b612c3981612c1f565b82525050565b5f602082019050612c525f830184612c30565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612c8f578082015181840152602081019050612c74565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612cb482612c58565b612cbe8185612c62565b9350612cce818560208601612c72565b612cd781612c9a565b840191505092915050565b5f6020820190508181035f830152612cfa8184612caa565b905092915050565b5f819050919050565b5f612d25612d20612d1b84612c00565b612d02565b612c00565b9050919050565b5f612d3682612d0b565b9050919050565b5f612d4782612d2c565b9050919050565b612d5781612d3d565b82525050565b5f602082019050612d705f830184612d4e565b92915050565b5f604051905090565b5f80fd5b612d8c81612c1f565b8114612d96575f80fd5b50565b5f81359050612da781612d83565b92915050565b5f819050919050565b612dbf81612dad565b8114612dc9575f80fd5b50565b5f81359050612dda81612db6565b92915050565b5f8060408385031215612df657612df5612d7f565b5b5f612e0385828601612d99565b9250506020612e1485828601612dcc565b9150509250929050565b5f8115159050919050565b612e3281612e1e565b82525050565b5f602082019050612e4b5f830184612e29565b92915050565b5f60208284031215612e6657612e65612d7f565b5b5f612e7384828501612d99565b91505092915050565b5f612e8682612d2c565b9050919050565b612e9681612e7c565b82525050565b5f602082019050612eaf5f830184612e8d565b92915050565b612ebe81612dad565b82525050565b5f602082019050612ed75f830184612eb5565b92915050565b5f805f60608486031215612ef457612ef3612d7f565b5b5f612f0186828701612d99565b9350506020612f1286828701612d99565b9250506040612f2386828701612dcc565b9150509250925092565b5f60ff82169050919050565b612f4281612f2d565b82525050565b5f602082019050612f5b5f830184612f39565b92915050565b5f60208284031215612f7657612f75612d7f565b5b5f612f8384828501612dcc565b91505092915050565b5f612f9682612d2c565b9050919050565b612fa681612f8c565b82525050565b5f602082019050612fbf5f830184612f9d565b92915050565b5f8060408385031215612fdb57612fda612d7f565b5b5f612fe885828601612d99565b9250506020612ff985828601612d99565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061304757607f821691505b60208210810361305a57613059613003565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6130ba602883612c62565b91506130c582613060565b604082019050919050565b5f6020820190508181035f8301526130e7816130ae565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61312582612dad565b915061313083612dad565b9250828201905080821115613148576131476130ee565b5b92915050565b7f61757468000000000000000000000000000000000000000000000000000000005f82015250565b5f613182600483612c62565b915061318d8261314e565b602082019050919050565b5f6020820190508181035f8301526131af81613176565b9050919050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6131f082612c9a565b810181811067ffffffffffffffff8211171561320f5761320e6131ba565b5b80604052505050565b5f613221612d76565b905061322d82826131e7565b919050565b5f8151905061324081612db6565b92915050565b5f61325082612c1f565b9050919050565b61326081613246565b811461326a575f80fd5b50565b5f8151905061327b81613257565b92915050565b5f6101208284031215613297576132966131b6565b5b6132a2610120613218565b90505f6132b184828501613232565b5f8301525060206132c48482850161326d565b60208301525060406132d884828501613232565b60408301525060606132ec84828501613232565b606083015250608061330084828501613232565b60808301525060a061331484828501613232565b60a08301525060c06133288482850161326d565b60c08301525060e061333c84828501613232565b60e08301525061010061335184828501613232565b6101008301525092915050565b5f610120828403121561337457613373612d7f565b5b5f61338184828501613281565b91505092915050565b5f61339482612dad565b915061339f83612dad565b92508282039050818111156133b7576133b66130ee565b5b92915050565b5f819050919050565b5f6133e06133db6133d6846133bd565b612d02565b612dad565b9050919050565b6133f0816133c6565b82525050565b5f60c0820190506134095f830189612c30565b6134166020830188612eb5565b61342360408301876133e7565b61343060608301866133e7565b61343d6080830185612c30565b61344a60a0830184612eb5565b979650505050505050565b5f805f6060848603121561346c5761346b612d7f565b5b5f61347986828701613232565b935050602061348a86828701613232565b925050604061349b86828701613232565b9150509250925092565b5f602082840312156134ba576134b9612d7f565b5b5f6134c784828501613232565b91505092915050565b5f6040820190506134e35f830185612c30565b6134f06020830184612eb5565b9392505050565b61350081612e1e565b811461350a575f80fd5b50565b5f8151905061351b816134f7565b92915050565b5f6020828403121561353657613535612d7f565b5b5f6135438482850161350d565b91505092915050565b5f61355682612dad565b915061356183612dad565b925082820261356f81612dad565b91508282048414831517613586576135856130ee565b5b5092915050565b5f61359782612c00565b9050919050565b6135a78161358d565b82525050565b5f60c0820190506135c05f830189612c30565b6135cd6020830188612eb5565b6135da6040830187612eb5565b6135e7606083018661359e565b6135f46080830185612e29565b61360160a083018461359e565b979650505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613640602083612c62565b915061364b8261360c565b602082019050919050565b5f6020820190508181035f83015261366d81613634565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6136ce602583612c62565b91506136d982613674565b604082019050919050565b5f6020820190508181035f8301526136fb816136c2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61375c602683612c62565b915061376782613702565b604082019050919050565b5f6020820190508181035f83015261378981613750565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6137ea602483612c62565b91506137f582613790565b604082019050919050565b5f6020820190508181035f830152613817816137de565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613878602283612c62565b91506138838261381e565b604082019050919050565b5f6020820190508181035f8301526138a58161386c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613906602583612c62565b9150613911826138ac565b604082019050919050565b5f6020820190508181035f830152613933816138fa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613994602383612c62565b915061399f8261393a565b604082019050919050565b5f6020820190508181035f8301526139c181613988565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6139fc601683612c62565b9150613a07826139c8565b602082019050919050565b5f6020820190508181035f830152613a29816139f0565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613a8a603583612c62565b9150613a9582613a30565b604082019050919050565b5f6020820190508181035f830152613ab781613a7e565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613af2601383612c62565b9150613afd82613abe565b602082019050919050565b5f6020820190508181035f830152613b1f81613ae6565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f613b80603683612c62565b9150613b8b82613b26565b604082019050919050565b5f6020820190508181035f830152613bad81613b74565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613c0e602683612c62565b9150613c1982613bb4565b604082019050919050565b5f6020820190508181035f830152613c3b81613c02565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c7982612dad565b9150613c8483612dad565b925082613c9457613c93613c42565b5b828204905092915050565b5f81905092915050565b50565b5f613cb75f83613c9f565b9150613cc282613ca9565b5f82019050919050565b5f613cd682613cac565b9150819050919050565b7f6661696c65642073656e64696e672065746800000000000000000000000000005f82015250565b5f613d14601283612c62565b9150613d1f82613ce0565b602082019050919050565b5f6020820190508181035f830152613d4181613d08565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613d8381612d83565b92915050565b5f60208284031215613d9e57613d9d612d7f565b5b5f613dab84828501613d75565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613de681612c1f565b82525050565b5f613df78383613ddd565b60208301905092915050565b5f602082019050919050565b5f613e1982613db4565b613e238185613dbe565b9350613e2e83613dce565b805f5b83811015613e5e578151613e458882613dec565b9750613e5083613e03565b925050600181019050613e31565b5085935050505092915050565b5f60a082019050613e7e5f830188612eb5565b613e8b60208301876133e7565b8181036040830152613e9d8186613e0f565b9050613eac6060830185612c30565b613eb96080830184612eb5565b969550505050505056fea2646970667358221220f57dd126fb1ba6deb9a01bb300cfb26ca951c59de0a4dea217ad10c529bb2dfa64736f6c6343000815003300000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000001004ccb0000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005000000000000000000000000d97e215a1cd9eb610f68c6fcb9fb91b277a65a900000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000d52455354494e5045414345435a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005524950435a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405260043610610212575f3560e01c806370a0823111610117578063bbc0c7421161009f578063dd62ed3e1161006e578063dd62ed3e146107bd578063e091dd1a146107f9578063e2f4560514610823578063f2fde38b1461084d578063f8b45b051461087557610219565b8063bbc0c74214610715578063c8c8ebe41461073f578063d0bb6c0b14610769578063d85ba0631461079357610219565b806395d89b41116100e657806395d89b411461060d578063a457c2d714610637578063a9059cbb14610673578063b62496f5146106af578063b8eb3546146106eb57610219565b806370a0823114610569578063715018a6146105a55780637cb332bb146105bb5780638da5cb5b146105e357610219565b8063313ce5671161019a57806351c6590a1161016957806351c6590a1461049957806359927044146104c1578063671241a1146104eb5780636a486a8e146105155780636ddd17131461053f57610219565b8063313ce567146103cd57806339509351146103f757806349bd5a5e146104335780634fbee1931461045d57610219565b806310d5de53116101e157806310d5de53146102d75780631694505e1461031357806318160ddd1461033d57806323b872dd1461036757806327c8f835146103a357610219565b8063066034fc1461021d57806306fdde031461024757806308ecd9a614610271578063095ea7b31461029b57610219565b3661021957005b5f80fd5b348015610228575f80fd5b5061023161089f565b60405161023e9190612c3f565b60405180910390f35b348015610252575f80fd5b5061025b6108c3565b6040516102689190612ce2565b60405180910390f35b34801561027c575f80fd5b50610285610953565b6040516102929190612d5d565b60405180910390f35b3480156102a6575f80fd5b506102c160048036038101906102bc9190612de0565b61096b565b6040516102ce9190612e38565b60405180910390f35b3480156102e2575f80fd5b506102fd60048036038101906102f89190612e51565b610988565b60405161030a9190612e38565b60405180910390f35b34801561031e575f80fd5b506103276109a5565b6040516103349190612e9c565b60405180910390f35b348015610348575f80fd5b506103516109c9565b60405161035e9190612ec4565b60405180910390f35b348015610372575f80fd5b5061038d60048036038101906103889190612edd565b6109d2565b60405161039a9190612e38565b60405180910390f35b3480156103ae575f80fd5b506103b7610ac4565b6040516103c49190612c3f565b60405180910390f35b3480156103d8575f80fd5b506103e1610aca565b6040516103ee9190612f48565b60405180910390f35b348015610402575f80fd5b5061041d60048036038101906104189190612de0565b610ad2565b60405161042a9190612e38565b60405180910390f35b34801561043e575f80fd5b50610447610b79565b6040516104549190612c3f565b60405180910390f35b348015610468575f80fd5b50610483600480360381019061047e9190612e51565b610b9d565b6040516104909190612e38565b60405180910390f35b3480156104a4575f80fd5b506104bf60048036038101906104ba9190612f61565b610bef565b005b3480156104cc575f80fd5b506104d561106a565b6040516104e29190612c3f565b60405180910390f35b3480156104f6575f80fd5b506104ff61108f565b60405161050c9190612fac565b60405180910390f35b348015610520575f80fd5b506105296110a7565b6040516105369190612ec4565b60405180910390f35b34801561054a575f80fd5b506105536110cb565b6040516105609190612e38565b60405180910390f35b348015610574575f80fd5b5061058f600480360381019061058a9190612e51565b6110de565b60405161059c9190612ec4565b60405180910390f35b3480156105b0575f80fd5b506105b9611123565b005b3480156105c6575f80fd5b506105e160048036038101906105dc9190612e51565b6111aa565b005b3480156105ee575f80fd5b506105f76112f7565b6040516106049190612c3f565b60405180910390f35b348015610618575f80fd5b5061062161131f565b60405161062e9190612ce2565b60405180910390f35b348015610642575f80fd5b5061065d60048036038101906106589190612de0565b6113af565b60405161066a9190612e38565b60405180910390f35b34801561067e575f80fd5b5061069960048036038101906106949190612de0565b611495565b6040516106a69190612e38565b60405180910390f35b3480156106ba575f80fd5b506106d560048036038101906106d09190612e51565b6114b2565b6040516106e29190612e38565b60405180910390f35b3480156106f6575f80fd5b506106ff6114cf565b60405161070c9190612ec4565b60405180910390f35b348015610720575f80fd5b506107296114f3565b6040516107369190612e38565b60405180910390f35b34801561074a575f80fd5b50610753611505565b6040516107609190612ec4565b60405180910390f35b348015610774575f80fd5b5061077d61150b565b60405161078a9190612c3f565b60405180910390f35b34801561079e575f80fd5b506107a7611523565b6040516107b49190612ec4565b60405180910390f35b3480156107c8575f80fd5b506107e360048036038101906107de9190612fc5565b611547565b6040516107f09190612ec4565b60405180910390f35b348015610804575f80fd5b5061080d6115c9565b60405161081a9190612ec4565b60405180910390f35b34801561082e575f80fd5b506108376115ed565b6040516108449190612ec4565b60405180910390f35b348015610858575f80fd5b50610873600480360381019061086e9190612e51565b6115f3565b005b348015610880575f80fd5b506108896116e9565b6040516108969190612ec4565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6060600380546108d290613030565b80601f01602080910402602001604051908101604052809291908181526020018280546108fe90613030565b80156109495780601f1061092057610100808354040283529160200191610949565b820191905f5260205f20905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b73663a5c229c09b049e36dcc11a9b0d4a8eb9db21481565b5f61097e6109776116ef565b84846116f6565b6001905092915050565b600c602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b5f6109de8484846118b9565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610a256116ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9b906130d0565b60405180910390fd5b610ab885610ab06116ef565b8584036116f6565b60019150509392505050565b61dead81565b5f6012905090565b5f610b6f610ade6116ef565b848460015f610aeb6116ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b6a919061311b565b6116f6565b6001905092915050565b7f000000000000000000000000c282e590f5f97f82fb058df0953bc3ed5903c31981565b5f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610bf76112f7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b90613198565b60405180910390fd5b610c96307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d610c916109c9565b6116f6565b6001600a5f6101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055505f62278d0090505f73663a5c229c09b049e36dcc11a9b0d4a8eb9db21473ffffffffffffffffffffffffffffffffffffffff166390e1a0036040518163ffffffff1660e01b8152600401610120604051808303815f875af1158015610d32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d56919061335e565b5f015190505f7f000000000000000000000000c282e590f5f97f82fb058df0953bc3ed5903c31990507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198347610dc7919061338a565b30610dd1306110de565b5f8030426040518863ffffffff1660e01b8152600401610df6969594939291906133f6565b60606040518083038185885af1158015610e12573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610e379190613455565b5050508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b373663a5c229c09b049e36dcc11a9b0d4a8eb9db2148373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ea49190612c3f565b602060405180830381865afa158015610ebf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee391906134a5565b6040518363ffffffff1660e01b8152600401610f009291906134d0565b6020604051808303815f875af1158015610f1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f409190613521565b5073663a5c229c09b049e36dcc11a9b0d4a8eb9db21473ffffffffffffffffffffffffffffffffffffffff16638af416f683838473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fac9190612c3f565b602060405180830381865afa158015610fc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610feb91906134a5565b8888610ff7919061354c565b42611002919061311b565b5f600161100d6112f7565b6040518863ffffffff1660e01b815260040161102e969594939291906135ad565b5f604051808303818588803b158015611045575f80fd5b505af1158015611057573d5f803e3d5ffd5b5050505050611064611123565b50505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b738a99c005c7b425ce999441afee22d4987f7a986981565b7f000000000000000000000000000000000000000000000000000000000000000581565b600a60019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61112b6116ef565b73ffffffffffffffffffffffffffffffffffffffff166111496112f7565b73ffffffffffffffffffffffffffffffffffffffff161461119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690613656565b60405180910390fd5b6111a85f6121ab565b565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123090613198565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166860405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461132e90613030565b80601f016020809104026020016040519081016040528092919081815260200182805461135a90613030565b80156113a55780601f1061137c576101008083540402835291602001916113a5565b820191905f5260205f20905b81548152906001019060200180831161138857829003601f168201915b5050505050905090565b5f8060015f6113bc6116ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d906136e4565b60405180910390fd5b61148a6114816116ef565b858584036116f6565b600191505092915050565b5f6114a86114a16116ef565b84846118b9565b6001905092915050565b600d602052805f5260405f205f915054906101000a900460ff1681565b7f00000000000000000000000000000000000000000011c8cd55de35f50580000081565b600a5f9054906101000a900460ff1681565b60075481565b73d5e2e43e30b706de8a0e01e72a6aba2b8930af4481565b7f000000000000000000000000000000000000000000000000000000000000000581565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60085481565b6115fb6116ef565b73ffffffffffffffffffffffffffffffffffffffff166116196112f7565b73ffffffffffffffffffffffffffffffffffffffff161461166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690613656565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490613772565b60405180910390fd5b6116e6816121ab565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b90613800565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c99061388e565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118ac9190612ec4565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e9061391c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c906139aa565b60405180910390fd5b5f81036119ac576119a783835f61226e565b6121a6565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611a16575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a2f5750600560149054906101000a900460ff16155b15611dfc57600a5f9054906101000a900460ff16611b2257600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611ae25750600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1890613a12565b60405180910390fd5b5b600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611bbf5750600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611c6657600754811115611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0090613aa0565b60405180910390fd5b600954611c15836110de565b82611c20919061311b565b1115611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890613b08565b60405180910390fd5b611dfb565b600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611d035750600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611d5257600754811115611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4490613b96565b60405180910390fd5b611dfa565b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611df957600954611dac836110de565b82611db7919061311b565b1115611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90613b08565b60405180910390fd5b5b5b5b5b5f611e06306110de565b90505f6008548210159050808015611e2a5750600a60019054906101000a900460ff165b8015611e435750600560149054906101000a900460ff16155b8015611e965750600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611ee95750600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611f3c5750600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611f7f576001600560146101000a81548160ff021916908315150217905550611f646124e3565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061202e5750600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612037575f90505b5f811561219657600d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156120da576120d360646120c57f00000000000000000000000000000000000000000000000000000000000000058861294a90919063ffffffff16565b61295f90919063ffffffff16565b9050612173565b600d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156121725761216f60646121617f00000000000000000000000000000000000000000000000000000000000000058861294a90919063ffffffff16565b61295f90919063ffffffff16565b90505b5b5f8111156121875761218687308361226e565b5b8085612193919061338a565b94505b6121a187878761226e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d39061391c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361234a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612341906139aa565b60405180910390fd5b612355838383612974565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf90613c24565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612466919061311b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124ca9190612ec4565b60405180910390a36124dd848484612979565b50505050565b5f6124ed306110de565b90506124f88161297e565b5f4790505f73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1603612708575f606460508361255f919061354c565b6125699190613c6f565b90505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516125b190613ccc565b5f6040518083038185875af1925050503d805f81146125eb576040519150601f19603f3d011682016040523d82523d5f602084013e6125f0565b606091505b5050905080612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b90613d2a565b60405180910390fd5b5f73d5e2e43e30b706de8a0e01e72a6aba2b8930af4490508073ffffffffffffffffffffffffffffffffffffffff16838561266f919061338a565b60405161267b90613ccc565b5f6040518083038185875af1925050503d805f81146126b5576040519150601f19603f3d011682016040523d82523d5f602084013e6126ba565b606091505b50508092505081612700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f790613d2a565b60405180910390fd5b505050612946565b5f6064605283612718919061354c565b6127229190613c6f565b90505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161276a90613ccc565b5f6040518083038185875af1925050503d805f81146127a4576040519150601f19603f3d011682016040523d82523d5f602084013e6127a9565b606091505b50509050806127ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e490613d2a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc6064600385612836919061354c565b6128409190613c6f565b90811502906040515f60405180830381858888f19350505050158015612868573d5f803e3d5ffd5b505f73d5e2e43e30b706de8a0e01e72a6aba2b8930af4490508073ffffffffffffffffffffffffffffffffffffffff166064600f866128a7919061354c565b6128b19190613c6f565b6040516128bd90613ccc565b5f6040518083038185875af1925050503d805f81146128f7576040519150601f19603f3d011682016040523d82523d5f602084013e6128fc565b606091505b50508092505081612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990613d2a565b60405180910390fd5b5050505b5050565b5f8183612957919061354c565b905092915050565b5f818361296c9190613c6f565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561299a576129996131ba565b5b6040519080825280602002602001820160405280156129c85781602001602082028036833780820191505090505b50905030815f815181106129df576129de613d48565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a82573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aa69190613d89565b81600181518110612aba57612ab9613d48565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f612b2883612b23857f00000000000000000000000000000000000000000011c8cd55de35f505800000612be8565b612be8565b9050612b55307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d836116f6565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947825f8530426040518663ffffffff1660e01b8152600401612bb6959493929190613e6b565b5f604051808303815f87803b158015612bcd575f80fd5b505af1158015612bdf573d5f803e3d5ffd5b50505050505050565b5f818311612bf65782612bf8565b815b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612c2982612c00565b9050919050565b612c3981612c1f565b82525050565b5f602082019050612c525f830184612c30565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612c8f578082015181840152602081019050612c74565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612cb482612c58565b612cbe8185612c62565b9350612cce818560208601612c72565b612cd781612c9a565b840191505092915050565b5f6020820190508181035f830152612cfa8184612caa565b905092915050565b5f819050919050565b5f612d25612d20612d1b84612c00565b612d02565b612c00565b9050919050565b5f612d3682612d0b565b9050919050565b5f612d4782612d2c565b9050919050565b612d5781612d3d565b82525050565b5f602082019050612d705f830184612d4e565b92915050565b5f604051905090565b5f80fd5b612d8c81612c1f565b8114612d96575f80fd5b50565b5f81359050612da781612d83565b92915050565b5f819050919050565b612dbf81612dad565b8114612dc9575f80fd5b50565b5f81359050612dda81612db6565b92915050565b5f8060408385031215612df657612df5612d7f565b5b5f612e0385828601612d99565b9250506020612e1485828601612dcc565b9150509250929050565b5f8115159050919050565b612e3281612e1e565b82525050565b5f602082019050612e4b5f830184612e29565b92915050565b5f60208284031215612e6657612e65612d7f565b5b5f612e7384828501612d99565b91505092915050565b5f612e8682612d2c565b9050919050565b612e9681612e7c565b82525050565b5f602082019050612eaf5f830184612e8d565b92915050565b612ebe81612dad565b82525050565b5f602082019050612ed75f830184612eb5565b92915050565b5f805f60608486031215612ef457612ef3612d7f565b5b5f612f0186828701612d99565b9350506020612f1286828701612d99565b9250506040612f2386828701612dcc565b9150509250925092565b5f60ff82169050919050565b612f4281612f2d565b82525050565b5f602082019050612f5b5f830184612f39565b92915050565b5f60208284031215612f7657612f75612d7f565b5b5f612f8384828501612dcc565b91505092915050565b5f612f9682612d2c565b9050919050565b612fa681612f8c565b82525050565b5f602082019050612fbf5f830184612f9d565b92915050565b5f8060408385031215612fdb57612fda612d7f565b5b5f612fe885828601612d99565b9250506020612ff985828601612d99565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061304757607f821691505b60208210810361305a57613059613003565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6130ba602883612c62565b91506130c582613060565b604082019050919050565b5f6020820190508181035f8301526130e7816130ae565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61312582612dad565b915061313083612dad565b9250828201905080821115613148576131476130ee565b5b92915050565b7f61757468000000000000000000000000000000000000000000000000000000005f82015250565b5f613182600483612c62565b915061318d8261314e565b602082019050919050565b5f6020820190508181035f8301526131af81613176565b9050919050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6131f082612c9a565b810181811067ffffffffffffffff8211171561320f5761320e6131ba565b5b80604052505050565b5f613221612d76565b905061322d82826131e7565b919050565b5f8151905061324081612db6565b92915050565b5f61325082612c1f565b9050919050565b61326081613246565b811461326a575f80fd5b50565b5f8151905061327b81613257565b92915050565b5f6101208284031215613297576132966131b6565b5b6132a2610120613218565b90505f6132b184828501613232565b5f8301525060206132c48482850161326d565b60208301525060406132d884828501613232565b60408301525060606132ec84828501613232565b606083015250608061330084828501613232565b60808301525060a061331484828501613232565b60a08301525060c06133288482850161326d565b60c08301525060e061333c84828501613232565b60e08301525061010061335184828501613232565b6101008301525092915050565b5f610120828403121561337457613373612d7f565b5b5f61338184828501613281565b91505092915050565b5f61339482612dad565b915061339f83612dad565b92508282039050818111156133b7576133b66130ee565b5b92915050565b5f819050919050565b5f6133e06133db6133d6846133bd565b612d02565b612dad565b9050919050565b6133f0816133c6565b82525050565b5f60c0820190506134095f830189612c30565b6134166020830188612eb5565b61342360408301876133e7565b61343060608301866133e7565b61343d6080830185612c30565b61344a60a0830184612eb5565b979650505050505050565b5f805f6060848603121561346c5761346b612d7f565b5b5f61347986828701613232565b935050602061348a86828701613232565b925050604061349b86828701613232565b9150509250925092565b5f602082840312156134ba576134b9612d7f565b5b5f6134c784828501613232565b91505092915050565b5f6040820190506134e35f830185612c30565b6134f06020830184612eb5565b9392505050565b61350081612e1e565b811461350a575f80fd5b50565b5f8151905061351b816134f7565b92915050565b5f6020828403121561353657613535612d7f565b5b5f6135438482850161350d565b91505092915050565b5f61355682612dad565b915061356183612dad565b925082820261356f81612dad565b91508282048414831517613586576135856130ee565b5b5092915050565b5f61359782612c00565b9050919050565b6135a78161358d565b82525050565b5f60c0820190506135c05f830189612c30565b6135cd6020830188612eb5565b6135da6040830187612eb5565b6135e7606083018661359e565b6135f46080830185612e29565b61360160a083018461359e565b979650505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613640602083612c62565b915061364b8261360c565b602082019050919050565b5f6020820190508181035f83015261366d81613634565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6136ce602583612c62565b91506136d982613674565b604082019050919050565b5f6020820190508181035f8301526136fb816136c2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61375c602683612c62565b915061376782613702565b604082019050919050565b5f6020820190508181035f83015261378981613750565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6137ea602483612c62565b91506137f582613790565b604082019050919050565b5f6020820190508181035f830152613817816137de565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613878602283612c62565b91506138838261381e565b604082019050919050565b5f6020820190508181035f8301526138a58161386c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613906602583612c62565b9150613911826138ac565b604082019050919050565b5f6020820190508181035f830152613933816138fa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613994602383612c62565b915061399f8261393a565b604082019050919050565b5f6020820190508181035f8301526139c181613988565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6139fc601683612c62565b9150613a07826139c8565b602082019050919050565b5f6020820190508181035f830152613a29816139f0565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613a8a603583612c62565b9150613a9582613a30565b604082019050919050565b5f6020820190508181035f830152613ab781613a7e565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613af2601383612c62565b9150613afd82613abe565b602082019050919050565b5f6020820190508181035f830152613b1f81613ae6565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f613b80603683612c62565b9150613b8b82613b26565b604082019050919050565b5f6020820190508181035f830152613bad81613b74565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613c0e602683612c62565b9150613c1982613bb4565b604082019050919050565b5f6020820190508181035f830152613c3b81613c02565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c7982612dad565b9150613c8483612dad565b925082613c9457613c93613c42565b5b828204905092915050565b5f81905092915050565b50565b5f613cb75f83613c9f565b9150613cc282613ca9565b5f82019050919050565b5f613cd682613cac565b9150819050919050565b7f6661696c65642073656e64696e672065746800000000000000000000000000005f82015250565b5f613d14601283612c62565b9150613d1f82613ce0565b602082019050919050565b5f6020820190508181035f830152613d4181613d08565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613d8381612d83565b92915050565b5f60208284031215613d9e57613d9d612d7f565b5b5f613dab84828501613d75565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613de681612c1f565b82525050565b5f613df78383613ddd565b60208301905092915050565b5f602082019050919050565b5f613e1982613db4565b613e238185613dbe565b9350613e2e83613dce565b805f5b83811015613e5e578151613e458882613dec565b9750613e5083613e03565b925050600181019050613e31565b5085935050505092915050565b5f60a082019050613e7e5f830188612eb5565b613e8b60208301876133e7565b8181036040830152613e9d8186613e0f565b9050613eac6060830185612c30565b613eb96080830184612eb5565b969550505050505056fea2646970667358221220f57dd126fb1ba6deb9a01bb300cfb26ca951c59de0a4dea217ad10c529bb2dfa64736f6c63430008150033

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

00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000001004ccb0000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005000000000000000000000000d97e215a1cd9eb610f68c6fcb9fb91b277a65a900000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000d52455354494e5045414345435a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005524950435a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): RESTINPEACECZ
Arg [1] : _symbol (string): RIPCZ
Arg [2] : _totalSupply (uint256): 4300000000
Arg [3] : _buyTaxes (uint256): 5
Arg [4] : _sellTaxes (uint256): 5
Arg [5] : _lockOwnerAndTaxReceiver (address): 0xd97e215A1cD9Eb610f68C6fCb9fB91B277A65a90
Arg [6] : _ref (bytes): 0x

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 00000000000000000000000000000000000000000000000000000001004ccb00
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 000000000000000000000000d97e215a1cd9eb610f68c6fcb9fb91b277a65a90
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [8] : 52455354494e5045414345435a00000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [10] : 524950435a000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.