ETH Price: $3,653.01 (+18.14%)
Gas: 9 Gwei

Token

MintySwap (MINTYS)
 

Overview

Max Total Supply

980,914,786.141894466 MINTYS

Holders

5,653 (0.00%)

Total Transfers

-

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$765,289.27

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 9 Decimals)

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

OVERVIEW

Minty swap is a place where users can Mint NFTs and Swap tokens with a native deflationary token. Hence the name Minty swap. Minty swap is also their very own cross chain DEX allowing users to swap between multiple chains seamlessly

Market

Volume (24H):$0.00
Market Capitalization:$0.00
Circulating Supply:0.00 MINTYS
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MintySwapToken

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
byzantium EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-02
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;

/*
 * @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 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);
}

/**
 * @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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract MintySwapToken is Context, IERC20, Ownable {
  using SafeMath for uint256;
  using Address for address;

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

  mapping(address => bool) private _isExcluded;
  address[] private _excluded;

  uint256 constant private FEE_PERCENT = 1;
  uint256 constant private BURN_PERCENT = 1;
  uint8 constant private DECIMALS = 9;
  uint256 constant private TOTAL_SUPPLY = 1 * (10 ** 9) * (10 ** DECIMALS);
  uint256 constant private MAX = ~uint256(0);

  uint256 private _rTotal = (MAX - (MAX % TOTAL_SUPPLY));
  uint256 private _tTotal = TOTAL_SUPPLY;
  uint256 private _tFeeTotal;

  constructor () {
    address sender = _msgSender();
    _rOwned[sender] = _rTotal;
    emit Transfer(address(0), sender, TOTAL_SUPPLY);
  }

  function name() public pure returns (string memory) {
    return "MintySwap";
  }

  function symbol() public pure returns (string memory) {
    return "MINTYS";
  }

  function decimals() public pure returns (uint8) {
    return DECIMALS;
  }

  function totalSupply() public view override returns (uint256) {
    return _tTotal;
  }

  function balanceOf(address account) public view override returns (uint256) {
    return isExcluded(account) ? _tOwned[account] : tokenFromReflection(_rOwned[account]);
  }

  function transfer(address recipient, uint256 amount) public override returns (bool) {
    _transfer(_msgSender(), recipient, amount);
    return true;
  }

  function allowance(address owner, address spender) public view override returns (uint256) {
    return _allowances[owner][spender];
  }

  function approve(address spender, uint256 amount) public override returns (bool) {
    _approve(_msgSender(), spender, amount);
    return true;
  }

  function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
    _transfer(sender, recipient, amount);
    _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
    return true;
  }

  function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
    return true;
  }

  function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
    return true;
  }

  function isExcluded(address account) public view returns (bool) {
    return _isExcluded[account];
  }

  function totalFees() public view returns (uint256) {
    return _tFeeTotal;
  }

  function totalBurned() public view returns (uint256) {
    return TOTAL_SUPPLY - _tTotal;
  }

  function reflect(uint256 tAmount) public {
    address sender = _msgSender();
    require(!_isExcluded[sender], "Excluded addresses cannot call this function");

    (uint256 rAmount,,,,,,) = _getValues(tAmount);
    _rOwned[sender] = _rOwned[sender].sub(rAmount);
    _rTotal = _rTotal.sub(rAmount);
    _tFeeTotal = _tFeeTotal.add(tAmount);
  }

  function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) {
    require(tAmount <= _tTotal, "Amount must be less than supply");
    (uint256 rAmount,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
    return deductTransferFee ? rTransferAmount : rAmount;
  }

  function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
    require(rAmount <= _rTotal, "Amount must be less than total reflections");
    return rAmount.div(_getRate());
  }

  function excludeAccount(address account) external onlyOwner() {
    require(!_isExcluded[account], "Account is already excluded");
    if (_rOwned[account] > 0) {
      _tOwned[account] = tokenFromReflection(_rOwned[account]);
    }
    _isExcluded[account] = true;
    _excluded.push(account);
  }

  function includeAccount(address account) external onlyOwner() {
    require(_isExcluded[account], "Account is already excluded");
    for (uint256 i = 0; i < _excluded.length; i++) {
      if (_excluded[i] == account) {
        _excluded[i] = _excluded[_excluded.length - 1];
        _tOwned[account] = 0;
        _isExcluded[account] = false;
        _excluded.pop();
        break;
      }
    }
  }

  function airdrop(address recipient, uint256 amount) public onlyOwner() {
    require(amount > 0, "Invalid transfer amount");

    (uint256 rAmount,,,,,,) = _getValues(amount);
    address sender = _msgSender();
    require(rAmount <= _rOwned[sender], "Insufficient amount");

    _rOwned[sender] = _rOwned[sender].sub(rAmount);
    _rOwned[recipient] = _rOwned[recipient].add(rAmount);
    emit Transfer(sender, recipient, amount);
  }

  function _approve(address owner, address spender, uint256 amount) private {
    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);
  }

  function _transfer(address sender, address recipient, uint256 amount) private {
    require(sender != address(0), "ERC20: transfer from the zero address");
    require(recipient != address(0), "ERC20: transfer to the zero address");
    require(amount > 0, "Transfer amount must be greater than zero");

    if (_isExcluded[sender] && !_isExcluded[recipient]) {
      _transferFromExcluded(sender, recipient, amount);
    } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
      _transferToExcluded(sender, recipient, amount);
    } else if (_isExcluded[sender] && _isExcluded[recipient]) {
      _transferBothExcluded(sender, recipient, amount);
    } else {
      _transferStandard(sender, recipient, amount);
    }
  }

  function _transferStandard(address sender, address recipient, uint256 tAmount) private {
    (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rBurn, uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getValues(tAmount);
    _rOwned[sender] = _rOwned[sender].sub(rAmount);
    _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

    _reflectFee(rFee, tFee, rBurn, tBurn);
    emit Transfer(sender, recipient, tTransferAmount);
    emit Transfer(sender, address(0), tBurn);
  }

  function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
    (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rBurn, uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getValues(tAmount);
    _rOwned[sender] = _rOwned[sender].sub(rAmount);
    _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
    _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

    _reflectFee(rFee, tFee, rBurn, tBurn);
    emit Transfer(sender, recipient, tTransferAmount);
    emit Transfer(sender, address(0), tBurn);
  }

  function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
    (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rBurn, uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getValues(tAmount);
    _tOwned[sender] = _tOwned[sender].sub(tAmount);
    _rOwned[sender] = _rOwned[sender].sub(rAmount);
    _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

    _reflectFee(rFee, tFee, rBurn, tBurn);
    emit Transfer(sender, recipient, tTransferAmount);
    emit Transfer(sender, address(0), tBurn);
  }

  function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
    (,,,,uint256 tTransferAmount,,) = _getValues(tAmount);
    emit Transfer(sender, recipient, tTransferAmount);
  }

  function _reflectFee(uint256 rFee, uint256 tFee, uint256 rBurn, uint256 tBurn) private {
    _rTotal = _rTotal.sub(rFee.add(rBurn));
    _tTotal = _tTotal.sub(tBurn);
    _tFeeTotal = _tFeeTotal.add(tFee);
  }

  function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
    (uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getTValues(tAmount);
    (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rBurn) = _getRValues(tAmount, tFee, tBurn, _getRate());
    return (rAmount, rTransferAmount, rFee, rBurn, tTransferAmount, tFee, tBurn);
  }

  function _getTValues(uint256 tAmount) private pure returns (uint256, uint256, uint256) {
    uint256 tFee = tAmount.div(100).mul(FEE_PERCENT);
    uint256 tBurn = tAmount.div(100).mul(BURN_PERCENT);
    uint256 tTransferAmount = tAmount.sub(tFee.add(tBurn));
    return (tTransferAmount, tFee, tBurn);
  }

  function _getRValues(uint256 tAmount, uint256 tFee, uint256 tBurn, uint256 rate) private pure returns (uint256, uint256, uint256, uint256) {
    uint256 rAmount = tAmount.mul(rate);
    uint256 rFee = tFee.mul(rate);
    uint256 rBurn = tBurn.mul(rate);
    uint256 rTransferAmount = rAmount.sub(rFee.add(rBurn));
    return (rAmount, rTransferAmount, rFee, rBurn);
  }

  function _getRate() private view returns (uint256) {
    (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
    return rSupply.div(tSupply);
  }

  function _getCurrentSupply() private view returns (uint256, uint256) {
    uint256 rSupply = _rTotal;
    uint256 tSupply = _tTotal;
    for (uint256 i = 0; i < _excluded.length; i++) {
      if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
      rSupply = rSupply.sub(_rOwned[_excluded[i]]);
      tSupply = tSupply.sub(_tOwned[_excluded[i]]);
    }
    if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
    return (rSupply, tSupply);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526009600a620000149190620002f1565b633b9aca006200002591906200042e565b600019620000349190620004e1565b6000196200004391906200048f565b6006556009600a620000569190620002f1565b633b9aca006200006791906200042e565b6007553480156200007757600080fd5b50620000aa620000956200019c640100000000026401000000009004565b620001a4640100000000026401000000009004565b6000620000c56200019c640100000000026401000000009004565b9050600654600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a6200016d9190620002f1565b633b9aca006200017e91906200042e565b6040516200018d919062000279565b60405180910390a35062000584565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200027381620004ca565b82525050565b600060208201905062000290600083018462000268565b92915050565b6000808291508390505b6001851115620002e857808604811115620002c057620002bf62000519565b5b6001851615620002d05780820291505b8081029050620002e08562000577565b9450620002a0565b94509492505050565b6000620002fe82620004ca565b91506200030b83620004d4565b92506200033a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000342565b905092915050565b60008262000354576001905062000427565b8162000364576000905062000427565b81600181146200037d57600281146200038857620003be565b600191505062000427565b60ff8411156200039d576200039c62000519565b5b8360020a915084821115620003b757620003b662000519565b5b5062000427565b5060208310610133831016604e8410600b8410161715620003f85782820a905083811115620003f257620003f162000519565b5b62000427565b62000407848484600162000296565b9250905081840481111562000421576200042062000519565b5b81810290505b9392505050565b60006200043b82620004ca565b91506200044883620004ca565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000484576200048362000519565b5b828202905092915050565b60006200049c82620004ca565b9150620004a983620004ca565b925082821015620004bf57620004be62000519565b5b828203905092915050565b6000819050919050565b600060ff82169050919050565b6000620004ee82620004ca565b9150620004fb83620004ca565b9250826200050e576200050d62000548565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000600282049050919050565b61387880620005946000396000f3fe608060405234801561001057600080fd5b506004361061016a576000357c010000000000000000000000000000000000000000000000000000000090048063715018a6116100e0578063cba0e99611610099578063cba0e996146103e5578063d89135cd14610415578063dd62ed3e14610433578063f2cc0c1814610463578063f2fde38b1461047f578063f84354f11461049b5761016a565b8063715018a6146103235780638ba4cc3c1461032d5780638da5cb5b1461034957806395d89b4114610367578063a457c2d714610385578063a9059cbb146103b55761016a565b806323b872dd1161013257806323b872dd146102155780632d83811914610245578063313ce5671461027557806339509351146102935780634549b039146102c357806370a08231146102f35761016a565b8063053ab1821461016f57806306fdde031461018b578063095ea7b3146101a957806313114a9d146101d957806318160ddd146101f7575b600080fd5b61018960048036038101906101849190612b42565b6104b7565b005b610193610633565b6040516101a09190612e21565b60405180910390f35b6101c360048036038101906101be9190612b02565b610670565b6040516101d09190612e06565b60405180910390f35b6101e161068e565b6040516101ee9190612fe3565b60405180910390f35b6101ff610698565b60405161020c9190612fe3565b60405180910390f35b61022f600480360381019061022a9190612aaf565b6106a2565b60405161023c9190612e06565b60405180910390f35b61025f600480360381019061025a9190612b42565b61077b565b60405161026c9190612fe3565b60405180910390f35b61027d6107e3565b60405161028a9190612ffe565b60405180910390f35b6102ad60048036038101906102a89190612b02565b6107ec565b6040516102ba9190612e06565b60405180910390f35b6102dd60048036038101906102d89190612b6f565b61089f565b6040516102ea9190612fe3565b60405180910390f35b61030d60048036038101906103089190612a42565b610912565b60405161031a9190612fe3565b60405180910390f35b61032b6109b6565b005b61034760048036038101906103429190612b02565b610a3e565b005b610351610d33565b60405161035e9190612deb565b60405180910390f35b61036f610d5c565b60405161037c9190612e21565b60405180910390f35b61039f600480360381019061039a9190612b02565b610d99565b6040516103ac9190612e06565b60405180910390f35b6103cf60048036038101906103ca9190612b02565b610e66565b6040516103dc9190612e06565b60405180910390f35b6103ff60048036038101906103fa9190612a42565b610e84565b60405161040c9190612e06565b60405180910390f35b61041d610eda565b60405161042a9190612fe3565b60405180910390f35b61044d60048036038101906104489190612a6f565b610f0b565b60405161045a9190612fe3565b60405180910390f35b61047d60048036038101906104789190612a42565b610f92565b005b61049960048036038101906104949190612a42565b61122d565b005b6104b560048036038101906104b09190612a42565b611325565b005b60006104c161165b565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054790612fc3565b60405180910390fd5b600061055b83611663565b50505050505090506105b581600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c990919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061060d816006546116c990919063ffffffff16565b600681905550610628836008546116df90919063ffffffff16565b600881905550505050565b60606040518060400160405280600981526020017f4d696e7479537761700000000000000000000000000000000000000000000000815250905090565b600061068461067d61165b565b84846116f5565b6001905092915050565b6000600854905090565b6000600754905090565b60006106af8484846118c0565b610770846106bb61165b565b61076b856040518060600160405280602881526020016137f660289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061072161165b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c1d9092919063ffffffff16565b6116f5565b600190509392505050565b60006006548211156107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b990612e63565b60405180910390fd5b6107dc6107cd611c72565b83611c9d90919063ffffffff16565b9050919050565b60006009905090565b60006108956107f961165b565b84610890856003600061080a61165b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116df90919063ffffffff16565b6116f5565b6001905092915050565b60006007548311156108e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dd90612ee3565b60405180910390fd5b6000806108f285611663565b505050505091509150836109065781610908565b805b9250505092915050565b600061091d82610e84565b61096e57610969600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461077b565b6109af565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b9050919050565b6109be61165b565b73ffffffffffffffffffffffffffffffffffffffff166109dc610d33565b73ffffffffffffffffffffffffffffffffffffffff1614610a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2990612f03565b60405180910390fd5b610a3c6000611cb3565b565b610a4661165b565b73ffffffffffffffffffffffffffffffffffffffff16610a64610d33565b73ffffffffffffffffffffffffffffffffffffffff1614610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190612f03565b60405180910390fd5b60008111610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af490612f43565b60405180910390fd5b6000610b0882611663565b50505050505090506000610b1a61165b565b9050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590612f83565b60405180910390fd5b610bf082600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c990919063ffffffff16565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c8582600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116df90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610d259190612fe3565b60405180910390a350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600681526020017f4d494e5459530000000000000000000000000000000000000000000000000000815250905090565b6000610e5c610da661165b565b84610e578560405180606001604052806025815260200161381e6025913960036000610dd061165b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c1d9092919063ffffffff16565b6116f5565b6001905092915050565b6000610e7a610e7361165b565b84846118c0565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006007546009600a610eed919061310f565b633b9aca00610efc919061322d565b610f069190613287565b905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f9a61165b565b73ffffffffffffffffffffffffffffffffffffffff16610fb8610d33565b73ffffffffffffffffffffffffffffffffffffffff161461100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590612f03565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290612ec3565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561116f5761112b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461077b565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61123561165b565b73ffffffffffffffffffffffffffffffffffffffff16611253610d33565b73ffffffffffffffffffffffffffffffffffffffff16146112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a090612f03565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090612e83565b60405180910390fd5b61132281611cb3565b50565b61132d61165b565b73ffffffffffffffffffffffffffffffffffffffff1661134b610d33565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890612f03565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661142d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142490612ec3565b60405180910390fd5b60005b600580549050811015611657578173ffffffffffffffffffffffffffffffffffffffff166005828154811061146857611467613419565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561164457600560016005805490506114c39190613287565b815481106114d4576114d3613419565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005828154811061151357611512613419565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600580548061160a576116096133ea565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611657565b808061164f90613343565b915050611430565b5050565b600033905090565b60008060008060008060008060008061167b8b611d77565b92509250925060008060008061169a8f8787611695611c72565b611e0d565b9350935093509350838383838a8a8a9d509d509d509d509d509d509d5050505050505050919395979092949650565b600081836116d79190613287565b905092915050565b600081836116ed9190613035565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175c90612fa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90612ea3565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118b39190612fe3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790612f63565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790612e43565b60405180910390fd5b600081116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90612f23565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611a865750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a9b57611a96838383611e9c565b611c18565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b3e5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b5357611b4e838383612160565b611c17565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611bf55750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611c0a57611c05838383612424565b611c16565b611c158383836124a2565b5b5b5b505050565b6000838311158290611c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5c9190612e21565b60405180910390fd5b5082840390509392505050565b6000806000611c7f6126d1565b91509150611c968183611c9d90919063ffffffff16565b9250505090565b60008183611cab919061308b565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600080611da46001611d96606488611c9d90919063ffffffff16565b61298490919063ffffffff16565b90506000611dcf6001611dc1606489611c9d90919063ffffffff16565b61298490919063ffffffff16565b90506000611df8611de983856116df90919063ffffffff16565b886116c990919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806000611e28868a61298490919063ffffffff16565b90506000611e3f878a61298490919063ffffffff16565b90506000611e56888a61298490919063ffffffff16565b90506000611e7f611e7083856116df90919063ffffffff16565b856116c990919063ffffffff16565b905083818484975097509750975050505050945094509450949050565b6000806000806000806000611eb088611663565b9650965096509650965096509650611f1088600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c990919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fa587600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061203a86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116df90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120898583868461299a565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120e69190612fe3565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161214c9190612fe3565b60405180910390a350505050505050505050565b600080600080600080600061217488611663565b96509650965096509650965096506121d487600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061226983600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116df90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122fe86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116df90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061234d8583868461299a565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516123aa9190612fe3565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124109190612fe3565b60405180910390a350505050505050505050565b600061242f82611663565b50509450505050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124949190612fe3565b60405180910390a350505050565b60008060008060008060006124b688611663565b965096509650965096509650965061251687600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125ab86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116df90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125fa8583868461299a565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516126579190612fe3565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126bd9190612fe3565b60405180910390a350505050505050505050565b600080600060065490506000600754905060005b6005805490508110156129475782600160006005848154811061270b5761270a613419565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806127f9575081600260006005848154811061279157612790613419565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156128105760065460075494509450505050612980565b6128a0600160006005848154811061282b5761282a613419565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846116c990919063ffffffff16565b925061293260026000600584815481106128bd576128bc613419565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836116c990919063ffffffff16565b9150808061293f90613343565b9150506126e5565b5061295f600754600654611c9d90919063ffffffff16565b82101561297757600654600754935093505050612980565b81819350935050505b9091565b60008183612992919061322d565b905092915050565b6129c16129b083866116df90919063ffffffff16565b6006546116c990919063ffffffff16565b6006819055506129dc816007546116c990919063ffffffff16565b6007819055506129f7836008546116df90919063ffffffff16565b60088190555050505050565b600081359050612a12816137b0565b92915050565b600081359050612a27816137c7565b92915050565b600081359050612a3c816137de565b92915050565b600060208284031215612a5857612a57613448565b5b6000612a6684828501612a03565b91505092915050565b60008060408385031215612a8657612a85613448565b5b6000612a9485828601612a03565b9250506020612aa585828601612a03565b9150509250929050565b600080600060608486031215612ac857612ac7613448565b5b6000612ad686828701612a03565b9350506020612ae786828701612a03565b9250506040612af886828701612a2d565b9150509250925092565b60008060408385031215612b1957612b18613448565b5b6000612b2785828601612a03565b9250506020612b3885828601612a2d565b9150509250929050565b600060208284031215612b5857612b57613448565b5b6000612b6684828501612a2d565b91505092915050565b60008060408385031215612b8657612b85613448565b5b6000612b9485828601612a2d565b9250506020612ba585828601612a18565b9150509250929050565b612bb8816132bb565b82525050565b612bc7816132cd565b82525050565b6000612bd882613019565b612be28185613024565b9350612bf2818560208601613310565b612bfb8161344d565b840191505092915050565b6000612c13602383613024565b9150612c1e8261346b565b604082019050919050565b6000612c36602a83613024565b9150612c41826134ba565b604082019050919050565b6000612c59602683613024565b9150612c6482613509565b604082019050919050565b6000612c7c602283613024565b9150612c8782613558565b604082019050919050565b6000612c9f601b83613024565b9150612caa826135a7565b602082019050919050565b6000612cc2601f83613024565b9150612ccd826135d0565b602082019050919050565b6000612ce5602083613024565b9150612cf0826135f9565b602082019050919050565b6000612d08602983613024565b9150612d1382613622565b604082019050919050565b6000612d2b601783613024565b9150612d3682613671565b602082019050919050565b6000612d4e602583613024565b9150612d598261369a565b604082019050919050565b6000612d71601383613024565b9150612d7c826136e9565b602082019050919050565b6000612d94602483613024565b9150612d9f82613712565b604082019050919050565b6000612db7602c83613024565b9150612dc282613761565b604082019050919050565b612dd6816132f9565b82525050565b612de581613303565b82525050565b6000602082019050612e006000830184612baf565b92915050565b6000602082019050612e1b6000830184612bbe565b92915050565b60006020820190508181036000830152612e3b8184612bcd565b905092915050565b60006020820190508181036000830152612e5c81612c06565b9050919050565b60006020820190508181036000830152612e7c81612c29565b9050919050565b60006020820190508181036000830152612e9c81612c4c565b9050919050565b60006020820190508181036000830152612ebc81612c6f565b9050919050565b60006020820190508181036000830152612edc81612c92565b9050919050565b60006020820190508181036000830152612efc81612cb5565b9050919050565b60006020820190508181036000830152612f1c81612cd8565b9050919050565b60006020820190508181036000830152612f3c81612cfb565b9050919050565b60006020820190508181036000830152612f5c81612d1e565b9050919050565b60006020820190508181036000830152612f7c81612d41565b9050919050565b60006020820190508181036000830152612f9c81612d64565b9050919050565b60006020820190508181036000830152612fbc81612d87565b9050919050565b60006020820190508181036000830152612fdc81612daa565b9050919050565b6000602082019050612ff86000830184612dcd565b92915050565b60006020820190506130136000830184612ddc565b92915050565b600081519050919050565b600082825260208201905092915050565b6000613040826132f9565b915061304b836132f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130805761307f61338c565b5b828201905092915050565b6000613096826132f9565b91506130a1836132f9565b9250826130b1576130b06133bb565b5b828204905092915050565b6000808291508390505b6001851115613106578086048111156130e2576130e161338c565b5b60018516156130f15780820291505b80810290506130ff8561345e565b94506130c6565b94509492505050565b600061311a826132f9565b915061312583613303565b92506131527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461315a565b905092915050565b60008261316a5760019050613226565b816131785760009050613226565b816001811461318e5760028114613198576131c7565b6001915050613226565b60ff8411156131aa576131a961338c565b5b8360020a9150848211156131c1576131c061338c565b5b50613226565b5060208310610133831016604e8410600b84101617156131fc5782820a9050838111156131f7576131f661338c565b5b613226565b61320984848460016130bc565b925090508184048111156132205761321f61338c565b5b81810290505b9392505050565b6000613238826132f9565b9150613243836132f9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561327c5761327b61338c565b5b828202905092915050565b6000613292826132f9565b915061329d836132f9565b9250828210156132b0576132af61338c565b5b828203905092915050565b60006132c6826132d9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561332e578082015181840152602081019050613313565b8381111561333d576000848401525b50505050565b600061334e826132f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133815761338061338c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b6000600282049050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964207472616e7366657220616d6f756e74000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e7420616d6f756e7400000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6137b9816132bb565b81146137c457600080fd5b50565b6137d0816132cd565b81146137db57600080fd5b50565b6137e7816132f9565b81146137f257600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205089ba6231126e3349baf4da0ebdfde87c539f45a5ad5095df64315f6656ec2564736f6c63430008060033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061016a576000357c010000000000000000000000000000000000000000000000000000000090048063715018a6116100e0578063cba0e99611610099578063cba0e996146103e5578063d89135cd14610415578063dd62ed3e14610433578063f2cc0c1814610463578063f2fde38b1461047f578063f84354f11461049b5761016a565b8063715018a6146103235780638ba4cc3c1461032d5780638da5cb5b1461034957806395d89b4114610367578063a457c2d714610385578063a9059cbb146103b55761016a565b806323b872dd1161013257806323b872dd146102155780632d83811914610245578063313ce5671461027557806339509351146102935780634549b039146102c357806370a08231146102f35761016a565b8063053ab1821461016f57806306fdde031461018b578063095ea7b3146101a957806313114a9d146101d957806318160ddd146101f7575b600080fd5b61018960048036038101906101849190612b42565b6104b7565b005b610193610633565b6040516101a09190612e21565b60405180910390f35b6101c360048036038101906101be9190612b02565b610670565b6040516101d09190612e06565b60405180910390f35b6101e161068e565b6040516101ee9190612fe3565b60405180910390f35b6101ff610698565b60405161020c9190612fe3565b60405180910390f35b61022f600480360381019061022a9190612aaf565b6106a2565b60405161023c9190612e06565b60405180910390f35b61025f600480360381019061025a9190612b42565b61077b565b60405161026c9190612fe3565b60405180910390f35b61027d6107e3565b60405161028a9190612ffe565b60405180910390f35b6102ad60048036038101906102a89190612b02565b6107ec565b6040516102ba9190612e06565b60405180910390f35b6102dd60048036038101906102d89190612b6f565b61089f565b6040516102ea9190612fe3565b60405180910390f35b61030d60048036038101906103089190612a42565b610912565b60405161031a9190612fe3565b60405180910390f35b61032b6109b6565b005b61034760048036038101906103429190612b02565b610a3e565b005b610351610d33565b60405161035e9190612deb565b60405180910390f35b61036f610d5c565b60405161037c9190612e21565b60405180910390f35b61039f600480360381019061039a9190612b02565b610d99565b6040516103ac9190612e06565b60405180910390f35b6103cf60048036038101906103ca9190612b02565b610e66565b6040516103dc9190612e06565b60405180910390f35b6103ff60048036038101906103fa9190612a42565b610e84565b60405161040c9190612e06565b60405180910390f35b61041d610eda565b60405161042a9190612fe3565b60405180910390f35b61044d60048036038101906104489190612a6f565b610f0b565b60405161045a9190612fe3565b60405180910390f35b61047d60048036038101906104789190612a42565b610f92565b005b61049960048036038101906104949190612a42565b61122d565b005b6104b560048036038101906104b09190612a42565b611325565b005b60006104c161165b565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054790612fc3565b60405180910390fd5b600061055b83611663565b50505050505090506105b581600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c990919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061060d816006546116c990919063ffffffff16565b600681905550610628836008546116df90919063ffffffff16565b600881905550505050565b60606040518060400160405280600981526020017f4d696e7479537761700000000000000000000000000000000000000000000000815250905090565b600061068461067d61165b565b84846116f5565b6001905092915050565b6000600854905090565b6000600754905090565b60006106af8484846118c0565b610770846106bb61165b565b61076b856040518060600160405280602881526020016137f660289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061072161165b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c1d9092919063ffffffff16565b6116f5565b600190509392505050565b60006006548211156107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b990612e63565b60405180910390fd5b6107dc6107cd611c72565b83611c9d90919063ffffffff16565b9050919050565b60006009905090565b60006108956107f961165b565b84610890856003600061080a61165b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116df90919063ffffffff16565b6116f5565b6001905092915050565b60006007548311156108e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dd90612ee3565b60405180910390fd5b6000806108f285611663565b505050505091509150836109065781610908565b805b9250505092915050565b600061091d82610e84565b61096e57610969600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461077b565b6109af565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b9050919050565b6109be61165b565b73ffffffffffffffffffffffffffffffffffffffff166109dc610d33565b73ffffffffffffffffffffffffffffffffffffffff1614610a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2990612f03565b60405180910390fd5b610a3c6000611cb3565b565b610a4661165b565b73ffffffffffffffffffffffffffffffffffffffff16610a64610d33565b73ffffffffffffffffffffffffffffffffffffffff1614610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190612f03565b60405180910390fd5b60008111610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af490612f43565b60405180910390fd5b6000610b0882611663565b50505050505090506000610b1a61165b565b9050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590612f83565b60405180910390fd5b610bf082600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c990919063ffffffff16565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c8582600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116df90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610d259190612fe3565b60405180910390a350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600681526020017f4d494e5459530000000000000000000000000000000000000000000000000000815250905090565b6000610e5c610da661165b565b84610e578560405180606001604052806025815260200161381e6025913960036000610dd061165b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c1d9092919063ffffffff16565b6116f5565b6001905092915050565b6000610e7a610e7361165b565b84846118c0565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006007546009600a610eed919061310f565b633b9aca00610efc919061322d565b610f069190613287565b905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f9a61165b565b73ffffffffffffffffffffffffffffffffffffffff16610fb8610d33565b73ffffffffffffffffffffffffffffffffffffffff161461100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590612f03565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290612ec3565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561116f5761112b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461077b565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61123561165b565b73ffffffffffffffffffffffffffffffffffffffff16611253610d33565b73ffffffffffffffffffffffffffffffffffffffff16146112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a090612f03565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090612e83565b60405180910390fd5b61132281611cb3565b50565b61132d61165b565b73ffffffffffffffffffffffffffffffffffffffff1661134b610d33565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890612f03565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661142d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142490612ec3565b60405180910390fd5b60005b600580549050811015611657578173ffffffffffffffffffffffffffffffffffffffff166005828154811061146857611467613419565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561164457600560016005805490506114c39190613287565b815481106114d4576114d3613419565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005828154811061151357611512613419565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600580548061160a576116096133ea565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611657565b808061164f90613343565b915050611430565b5050565b600033905090565b60008060008060008060008060008061167b8b611d77565b92509250925060008060008061169a8f8787611695611c72565b611e0d565b9350935093509350838383838a8a8a9d509d509d509d509d509d509d5050505050505050919395979092949650565b600081836116d79190613287565b905092915050565b600081836116ed9190613035565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175c90612fa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90612ea3565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118b39190612fe3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790612f63565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790612e43565b60405180910390fd5b600081116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90612f23565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611a865750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a9b57611a96838383611e9c565b611c18565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b3e5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b5357611b4e838383612160565b611c17565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611bf55750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611c0a57611c05838383612424565b611c16565b611c158383836124a2565b5b5b5b505050565b6000838311158290611c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5c9190612e21565b60405180910390fd5b5082840390509392505050565b6000806000611c7f6126d1565b91509150611c968183611c9d90919063ffffffff16565b9250505090565b60008183611cab919061308b565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600080611da46001611d96606488611c9d90919063ffffffff16565b61298490919063ffffffff16565b90506000611dcf6001611dc1606489611c9d90919063ffffffff16565b61298490919063ffffffff16565b90506000611df8611de983856116df90919063ffffffff16565b886116c990919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806000611e28868a61298490919063ffffffff16565b90506000611e3f878a61298490919063ffffffff16565b90506000611e56888a61298490919063ffffffff16565b90506000611e7f611e7083856116df90919063ffffffff16565b856116c990919063ffffffff16565b905083818484975097509750975050505050945094509450949050565b6000806000806000806000611eb088611663565b9650965096509650965096509650611f1088600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c990919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fa587600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061203a86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116df90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120898583868461299a565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120e69190612fe3565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161214c9190612fe3565b60405180910390a350505050505050505050565b600080600080600080600061217488611663565b96509650965096509650965096506121d487600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061226983600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116df90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122fe86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116df90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061234d8583868461299a565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516123aa9190612fe3565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124109190612fe3565b60405180910390a350505050505050505050565b600061242f82611663565b50509450505050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124949190612fe3565b60405180910390a350505050565b60008060008060008060006124b688611663565b965096509650965096509650965061251687600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125ab86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116df90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125fa8583868461299a565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516126579190612fe3565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126bd9190612fe3565b60405180910390a350505050505050505050565b600080600060065490506000600754905060005b6005805490508110156129475782600160006005848154811061270b5761270a613419565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806127f9575081600260006005848154811061279157612790613419565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156128105760065460075494509450505050612980565b6128a0600160006005848154811061282b5761282a613419565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846116c990919063ffffffff16565b925061293260026000600584815481106128bd576128bc613419565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836116c990919063ffffffff16565b9150808061293f90613343565b9150506126e5565b5061295f600754600654611c9d90919063ffffffff16565b82101561297757600654600754935093505050612980565b81819350935050505b9091565b60008183612992919061322d565b905092915050565b6129c16129b083866116df90919063ffffffff16565b6006546116c990919063ffffffff16565b6006819055506129dc816007546116c990919063ffffffff16565b6007819055506129f7836008546116df90919063ffffffff16565b60088190555050505050565b600081359050612a12816137b0565b92915050565b600081359050612a27816137c7565b92915050565b600081359050612a3c816137de565b92915050565b600060208284031215612a5857612a57613448565b5b6000612a6684828501612a03565b91505092915050565b60008060408385031215612a8657612a85613448565b5b6000612a9485828601612a03565b9250506020612aa585828601612a03565b9150509250929050565b600080600060608486031215612ac857612ac7613448565b5b6000612ad686828701612a03565b9350506020612ae786828701612a03565b9250506040612af886828701612a2d565b9150509250925092565b60008060408385031215612b1957612b18613448565b5b6000612b2785828601612a03565b9250506020612b3885828601612a2d565b9150509250929050565b600060208284031215612b5857612b57613448565b5b6000612b6684828501612a2d565b91505092915050565b60008060408385031215612b8657612b85613448565b5b6000612b9485828601612a2d565b9250506020612ba585828601612a18565b9150509250929050565b612bb8816132bb565b82525050565b612bc7816132cd565b82525050565b6000612bd882613019565b612be28185613024565b9350612bf2818560208601613310565b612bfb8161344d565b840191505092915050565b6000612c13602383613024565b9150612c1e8261346b565b604082019050919050565b6000612c36602a83613024565b9150612c41826134ba565b604082019050919050565b6000612c59602683613024565b9150612c6482613509565b604082019050919050565b6000612c7c602283613024565b9150612c8782613558565b604082019050919050565b6000612c9f601b83613024565b9150612caa826135a7565b602082019050919050565b6000612cc2601f83613024565b9150612ccd826135d0565b602082019050919050565b6000612ce5602083613024565b9150612cf0826135f9565b602082019050919050565b6000612d08602983613024565b9150612d1382613622565b604082019050919050565b6000612d2b601783613024565b9150612d3682613671565b602082019050919050565b6000612d4e602583613024565b9150612d598261369a565b604082019050919050565b6000612d71601383613024565b9150612d7c826136e9565b602082019050919050565b6000612d94602483613024565b9150612d9f82613712565b604082019050919050565b6000612db7602c83613024565b9150612dc282613761565b604082019050919050565b612dd6816132f9565b82525050565b612de581613303565b82525050565b6000602082019050612e006000830184612baf565b92915050565b6000602082019050612e1b6000830184612bbe565b92915050565b60006020820190508181036000830152612e3b8184612bcd565b905092915050565b60006020820190508181036000830152612e5c81612c06565b9050919050565b60006020820190508181036000830152612e7c81612c29565b9050919050565b60006020820190508181036000830152612e9c81612c4c565b9050919050565b60006020820190508181036000830152612ebc81612c6f565b9050919050565b60006020820190508181036000830152612edc81612c92565b9050919050565b60006020820190508181036000830152612efc81612cb5565b9050919050565b60006020820190508181036000830152612f1c81612cd8565b9050919050565b60006020820190508181036000830152612f3c81612cfb565b9050919050565b60006020820190508181036000830152612f5c81612d1e565b9050919050565b60006020820190508181036000830152612f7c81612d41565b9050919050565b60006020820190508181036000830152612f9c81612d64565b9050919050565b60006020820190508181036000830152612fbc81612d87565b9050919050565b60006020820190508181036000830152612fdc81612daa565b9050919050565b6000602082019050612ff86000830184612dcd565b92915050565b60006020820190506130136000830184612ddc565b92915050565b600081519050919050565b600082825260208201905092915050565b6000613040826132f9565b915061304b836132f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130805761307f61338c565b5b828201905092915050565b6000613096826132f9565b91506130a1836132f9565b9250826130b1576130b06133bb565b5b828204905092915050565b6000808291508390505b6001851115613106578086048111156130e2576130e161338c565b5b60018516156130f15780820291505b80810290506130ff8561345e565b94506130c6565b94509492505050565b600061311a826132f9565b915061312583613303565b92506131527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461315a565b905092915050565b60008261316a5760019050613226565b816131785760009050613226565b816001811461318e5760028114613198576131c7565b6001915050613226565b60ff8411156131aa576131a961338c565b5b8360020a9150848211156131c1576131c061338c565b5b50613226565b5060208310610133831016604e8410600b84101617156131fc5782820a9050838111156131f7576131f661338c565b5b613226565b61320984848460016130bc565b925090508184048111156132205761321f61338c565b5b81810290505b9392505050565b6000613238826132f9565b9150613243836132f9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561327c5761327b61338c565b5b828202905092915050565b6000613292826132f9565b915061329d836132f9565b9250828210156132b0576132af61338c565b5b828203905092915050565b60006132c6826132d9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561332e578082015181840152602081019050613313565b8381111561333d576000848401525b50505050565b600061334e826132f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133815761338061338c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b6000600282049050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964207472616e7366657220616d6f756e74000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e7420616d6f756e7400000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6137b9816132bb565b81146137c457600080fd5b50565b6137d0816132cd565b81146137db57600080fd5b50565b6137e7816132f9565b81146137f257600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205089ba6231126e3349baf4da0ebdfde87c539f45a5ad5095df64315f6656ec2564736f6c63430008060033

Deployed Bytecode Sourcemap

20411:10055:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23403:354;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21325:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22164:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23215:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21584:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22321:299;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24078:199;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21502:76;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22626:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23763:309;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21679:173;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5121:94;;;:::i;:::-;;25012:445;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4470:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21414:82;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22840:259;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21858:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23105:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23302:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22021:137;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24283:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5370:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24594:412;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23403:354;23451:14;23468:12;:10;:12::i;:::-;23451:29;;23496:11;:19;23508:6;23496:19;;;;;;;;;;;;;;;;;;;;;;;;;23495:20;23487:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23574:15;23599:19;23610:7;23599:10;:19::i;:::-;23573:45;;;;;;;;23643:28;23663:7;23643;:15;23651:6;23643:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;23625:7;:15;23633:6;23625:15;;;;;;;;;;;;;;;:46;;;;23688:20;23700:7;23688;;:11;;:20;;;;:::i;:::-;23678:7;:30;;;;23728:23;23743:7;23728:10;;:14;;:23;;;;:::i;:::-;23715:10;:36;;;;23444:313;;23403:354;:::o;21325:83::-;21362:13;21384:18;;;;;;;;;;;;;;;;;;;21325:83;:::o;22164:151::-;22239:4;22252:39;22261:12;:10;:12::i;:::-;22275:7;22284:6;22252:8;:39::i;:::-;22305:4;22298:11;;22164:151;;;;:::o;23215:81::-;23257:7;23280:10;;23273:17;;23215:81;:::o;21584:89::-;21637:7;21660;;21653:14;;21584:89;:::o;22321:299::-;22419:4;22432:36;22442:6;22450:9;22461:6;22432:9;:36::i;:::-;22475:121;22484:6;22492:12;:10;:12::i;:::-;22506:89;22544:6;22506:89;;;;;;;;;;;;;;;;;:11;:19;22518:6;22506:19;;;;;;;;;;;;;;;:33;22526:12;:10;:12::i;:::-;22506:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22475:8;:121::i;:::-;22610:4;22603:11;;22321:299;;;;;:::o;24078:199::-;24145:7;24180;;24169;:18;;24161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24248:23;24260:10;:8;:10::i;:::-;24248:7;:11;;:23;;;;:::i;:::-;24241:30;;24078:199;;;:::o;21502:76::-;21543:5;20909:1;21557:15;;21502:76;:::o;22626:208::-;22714:4;22727:83;22736:12;:10;:12::i;:::-;22750:7;22759:50;22798:10;22759:11;:25;22771:12;:10;:12::i;:::-;22759:25;;;;;;;;;;;;;;;:34;22785:7;22759:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;22727:8;:83::i;:::-;22824:4;22817:11;;22626:208;;;;:::o;23763:309::-;23854:7;23889;;23878;:18;;23870:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23940:15;23956:23;23988:19;23999:7;23988:10;:19::i;:::-;23939:68;;;;;;;;;24021:17;:45;;24059:7;24021:45;;;24041:15;24021:45;24014:52;;;;23763:309;;;;:::o;21679:173::-;21745:7;21768:19;21779:7;21768:10;:19::i;:::-;:78;;21809:37;21829:7;:16;21837:7;21829:16;;;;;;;;;;;;;;;;21809:19;:37::i;:::-;21768:78;;;21790:7;:16;21798:7;21790:16;;;;;;;;;;;;;;;;21768:78;21761:85;;21679:173;;;:::o;5121:94::-;4701:12;:10;:12::i;:::-;4690:23;;:7;:5;:7::i;:::-;:23;;;4682:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5186:21:::1;5204:1;5186:9;:21::i;:::-;5121:94::o:0;25012:445::-;4701:12;:10;:12::i;:::-;4690:23;;:7;:5;:7::i;:::-;:23;;;4682:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25107:1:::1;25098:6;:10;25090:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;25146:15;25171:18;25182:6;25171:10;:18::i;:::-;25145:44;;;;;;;;25196:14;25213:12;:10;:12::i;:::-;25196:29;;25251:7;:15;25259:6;25251:15;;;;;;;;;;;;;;;;25240:7;:26;;25232:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25317:28;25337:7;25317;:15;25325:6;25317:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25299:7;:15;25307:6;25299:15;;;;;;;;;;;;;;;:46;;;;25373:31;25396:7;25373;:18;25381:9;25373:18;;;;;;;;;;;;;;;;:22;;:31;;;;:::i;:::-;25352:7;:18;25360:9;25352:18;;;;;;;;;;;;;;;:52;;;;25433:9;25416:35;;25425:6;25416:35;;;25444:6;25416:35;;;;;;:::i;:::-;;;;;;;;25083:374;;25012:445:::0;;:::o;4470:87::-;4516:7;4543:6;;;;;;;;;;;4536:13;;4470:87;:::o;21414:82::-;21453:13;21475:15;;;;;;;;;;;;;;;;;;;21414:82;:::o;22840:259::-;22933:4;22946:129;22955:12;:10;:12::i;:::-;22969:7;22978:96;23017:15;22978:96;;;;;;;;;;;;;;;;;:11;:25;22990:12;:10;:12::i;:::-;22978:25;;;;;;;;;;;;;;;:34;23004:7;22978:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;22946:8;:129::i;:::-;23089:4;23082:11;;22840:259;;;;:::o;21858:157::-;21936:4;21949:42;21959:12;:10;:12::i;:::-;21973:9;21984:6;21949:9;:42::i;:::-;22005:4;21998:11;;21858:157;;;;:::o;23105:104::-;23163:4;23183:11;:20;23195:7;23183:20;;;;;;;;;;;;;;;;;;;;;;;;;23176:27;;23105:104;;;:::o;23302:95::-;23346:7;23384;;20909:1;20972:2;:14;;;;:::i;:::-;20955:13;:32;;;;:::i;:::-;23369:22;;;;:::i;:::-;23362:29;;23302:95;:::o;22021:137::-;22102:7;22125:11;:18;22137:5;22125:18;;;;;;;;;;;;;;;:27;22144:7;22125:27;;;;;;;;;;;;;;;;22118:34;;22021:137;;;;:::o;24283:305::-;4701:12;:10;:12::i;:::-;4690:23;;:7;:5;:7::i;:::-;:23;;;4682:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24361:11:::1;:20;24373:7;24361:20;;;;;;;;;;;;;;;;;;;;;;;;;24360:21;24352:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24443:1;24424:7;:16;24432:7;24424:16;;;;;;;;;;;;;;;;:20;24420:99;;;24474:37;24494:7;:16;24502:7;24494:16;;;;;;;;;;;;;;;;24474:19;:37::i;:::-;24455:7;:16;24463:7;24455:16;;;;;;;;;;;;;;;:56;;;;24420:99;24548:4;24525:11;:20;24537:7;24525:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;24559:9;24574:7;24559:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24283:305:::0;:::o;5370:192::-;4701:12;:10;:12::i;:::-;4690:23;;:7;:5;:7::i;:::-;:23;;;4682:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5479:1:::1;5459:22;;:8;:22;;;;5451:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5535:19;5545:8;5535:9;:19::i;:::-;5370:192:::0;:::o;24594:412::-;4701:12;:10;:12::i;:::-;4690:23;;:7;:5;:7::i;:::-;:23;;;4682:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24671:11:::1;:20;24683:7;24671:20;;;;;;;;;;;;;;;;;;;;;;;;;24663:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24735:9;24730:271;24754:9;:16;;;;24750:1;:20;24730:271;;;24806:7;24790:23;;:9;24800:1;24790:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;24786:208;;;24841:9;24870:1;24851:9;:16;;;;:20;;;;:::i;:::-;24841:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24826:9;24836:1;24826:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24902:1;24883:7;:16;24891:7;24883:16;;;;;;;;;;;;;;;:20;;;;24937:5;24914:11;:20;24926:7;24914:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;24953:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;24979:5;;24786:208;24772:3;;;;;:::i;:::-;;;;24730:271;;;;24594:412:::0;:::o;599:98::-;652:7;679:10;672:17;;599:98;:::o;28667:421::-;28726:7;28735;28744;28753;28762;28771;28780;28797:23;28822:12;28836:13;28853:20;28865:7;28853:11;:20::i;:::-;28796:77;;;;;;28881:15;28898:23;28923:12;28937:13;28954:45;28966:7;28975:4;28981:5;28988:10;:8;:10::i;:::-;28954:11;:45::i;:::-;28880:119;;;;;;;;29014:7;29023:15;29040:4;29046:5;29053:15;29070:4;29076:5;29006:76;;;;;;;;;;;;;;;;;;;;;28667:421;;;;;;;;;:::o;8832:98::-;8890:7;8921:1;8917;:5;;;;:::i;:::-;8910:12;;8832:98;;;;:::o;8451:::-;8509:7;8540:1;8536;:5;;;;:::i;:::-;8529:12;;8451:98;;;;:::o;25463:317::-;25569:1;25552:19;;:5;:19;;;;25544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25646:1;25627:21;;:7;:21;;;;25619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25724:6;25694:11;:18;25706:5;25694:18;;;;;;;;;;;;;;;:27;25713:7;25694:27;;;;;;;;;;;;;;;:36;;;;25758:7;25742:32;;25751:5;25742:32;;;25767:6;25742:32;;;;;;:::i;:::-;;;;;;;;25463:317;;;:::o;25786:745::-;25897:1;25879:20;;:6;:20;;;;25871:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25977:1;25956:23;;:9;:23;;;;25948:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26043:1;26034:6;:10;26026:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26103:11;:19;26115:6;26103:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;26127:11;:22;26139:9;26127:22;;;;;;;;;;;;;;;;;;;;;;;;;26126:23;26103:46;26099:427;;;26160:48;26182:6;26190:9;26201:6;26160:21;:48::i;:::-;26099:427;;;26227:11;:19;26239:6;26227:19;;;;;;;;;;;;;;;;;;;;;;;;;26226:20;:46;;;;;26250:11;:22;26262:9;26250:22;;;;;;;;;;;;;;;;;;;;;;;;;26226:46;26222:304;;;26283:46;26303:6;26311:9;26322:6;26283:19;:46::i;:::-;26222:304;;;26347:11;:19;26359:6;26347:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;26370:11;:22;26382:9;26370:22;;;;;;;;;;;;;;;;;;;;;;;;;26347:45;26343:183;;;26403:48;26425:6;26433:9;26444:6;26403:21;:48::i;:::-;26343:183;;;26474:44;26492:6;26500:9;26511:6;26474:17;:44::i;:::-;26343:183;26222:304;26099:427;25786:745;;;:::o;10730:240::-;10850:7;10908:1;10903;:6;;10911:12;10895:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10950:1;10946;:5;10939:12;;10730:240;;;;;:::o;29791:154::-;29833:7;29850:15;29867;29886:19;:17;:19::i;:::-;29849:56;;;;29919:20;29931:7;29919;:11;;:20;;;;:::i;:::-;29912:27;;;;29791:154;:::o;9588:98::-;9646:7;9677:1;9673;:5;;;;:::i;:::-;9666:12;;9588:98;;;;:::o;5570:173::-;5626:16;5645:6;;;;;;;;;;;5626:25;;5671:8;5662:6;;:17;;;;;;;;;;;;;;;;;;5726:8;5695:40;;5716:8;5695:40;;;;;;;;;;;;5615:128;5570:173;:::o;29094:310::-;29154:7;29163;29172;29188:12;29203:33;20823:1;29203:16;29215:3;29203:7;:11;;:16;;;;:::i;:::-;:20;;:33;;;;:::i;:::-;29188:48;;29243:13;29259:34;20869:1;29259:16;29271:3;29259:7;:11;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;29243:50;;29300:23;29326:28;29338:15;29347:5;29338:4;:8;;:15;;;;:::i;:::-;29326:7;:11;;:28;;;;:::i;:::-;29300:54;;29369:15;29386:4;29392:5;29361:37;;;;;;;;;29094:310;;;;;:::o;29410:375::-;29513:7;29522;29531;29540;29556:15;29574:17;29586:4;29574:7;:11;;:17;;;;:::i;:::-;29556:35;;29598:12;29613:14;29622:4;29613;:8;;:14;;;;:::i;:::-;29598:29;;29634:13;29650:15;29660:4;29650:5;:9;;:15;;;;:::i;:::-;29634:31;;29672:23;29698:28;29710:15;29719:5;29710:4;:8;;:15;;;;:::i;:::-;29698:7;:11;;:28;;;;:::i;:::-;29672:54;;29741:7;29750:15;29767:4;29773:5;29733:46;;;;;;;;;;;;29410:375;;;;;;;;;:::o;27650:573::-;27749:15;27766:23;27791:12;27805:13;27820:23;27845:12;27859:13;27876:19;27887:7;27876:10;:19::i;:::-;27748:147;;;;;;;;;;;;;;27920:28;27940:7;27920;:15;27928:6;27920:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27902:7;:15;27910:6;27902:15;;;;;;;;;;;;;;;:46;;;;27973:28;27993:7;27973;:15;27981:6;27973:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27955:7;:15;27963:6;27955:15;;;;;;;;;;;;;;;:46;;;;28029:39;28052:15;28029:7;:18;28037:9;28029:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28008:7;:18;28016:9;28008:18;;;;;;;;;;;;;;;:60;;;;28077:37;28089:4;28095;28101:5;28108;28077:11;:37::i;:::-;28143:9;28126:44;;28135:6;28126:44;;;28154:15;28126:44;;;;;;:::i;:::-;;;;;;;;28207:1;28182:35;;28191:6;28182:35;;;28211:5;28182:35;;;;;;:::i;:::-;;;;;;;;27741:482;;;;;;;27650:573;;;:::o;27059:585::-;27156:15;27173:23;27198:12;27212:13;27227:23;27252:12;27266:13;27283:19;27294:7;27283:10;:19::i;:::-;27155:147;;;;;;;;;;;;;;27327:28;27347:7;27327;:15;27335:6;27327:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27309:7;:15;27317:6;27309:15;;;;;;;;;;;;;;;:46;;;;27383:39;27406:15;27383:7;:18;27391:9;27383:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27362:7;:18;27370:9;27362:18;;;;;;;;;;;;;;;:60;;;;27450:39;27473:15;27450:7;:18;27458:9;27450:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27429:7;:18;27437:9;27429:18;;;;;;;;;;;;;;;:60;;;;27498:37;27510:4;27516;27522:5;27529;27498:11;:37::i;:::-;27564:9;27547:44;;27556:6;27547:44;;;27575:15;27547:44;;;;;;:::i;:::-;;;;;;;;27628:1;27603:35;;27612:6;27603:35;;;27632:5;27603:35;;;;;;:::i;:::-;;;;;;;;27148:496;;;;;;;27059:585;;;:::o;28229:213::-;28332:23;28361:19;28372:7;28361:10;:19::i;:::-;28327:53;;;;;;;;28409:9;28392:44;;28401:6;28392:44;;;28420:15;28392:44;;;;;;:::i;:::-;;;;;;;;28320:122;28229:213;;;:::o;26537:516::-;26632:15;26649:23;26674:12;26688:13;26703:23;26728:12;26742:13;26759:19;26770:7;26759:10;:19::i;:::-;26631:147;;;;;;;;;;;;;;26803:28;26823:7;26803;:15;26811:6;26803:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26785:7;:15;26793:6;26785:15;;;;;;;;;;;;;;;:46;;;;26859:39;26882:15;26859:7;:18;26867:9;26859:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26838:7;:18;26846:9;26838:18;;;;;;;;;;;;;;;:60;;;;26907:37;26919:4;26925;26931:5;26938;26907:11;:37::i;:::-;26973:9;26956:44;;26965:6;26956:44;;;26984:15;26956:44;;;;;;:::i;:::-;;;;;;;;27037:1;27012:35;;27021:6;27012:35;;;27041:5;27012:35;;;;;;:::i;:::-;;;;;;;;26624:429;;;;;;;26537:516;;;:::o;29951:512::-;30002:7;30011;30027:15;30045:7;;30027:25;;30059:15;30077:7;;30059:25;;30096:9;30091:267;30115:9;:16;;;;30111:1;:20;30091:267;;;30175:7;30151;:21;30159:9;30169:1;30159:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30151:21;;;;;;;;;;;;;;;;:31;:66;;;;30210:7;30186;:21;30194:9;30204:1;30194:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30186:21;;;;;;;;;;;;;;;;:31;30151:66;30147:97;;;30227:7;;30236;;30219:25;;;;;;;;;30147:97;30263:34;30275:7;:21;30283:9;30293:1;30283:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30275:21;;;;;;;;;;;;;;;;30263:7;:11;;:34;;;;:::i;:::-;30253:44;;30316:34;30328:7;:21;30336:9;30346:1;30336:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30328:21;;;;;;;;;;;;;;;;30316:7;:11;;:34;;;;:::i;:::-;30306:44;;30133:3;;;;;:::i;:::-;;;;30091:267;;;;30378:20;30390:7;;30378;;:11;;:20;;;;:::i;:::-;30368:7;:30;30364:61;;;30408:7;;30417;;30400:25;;;;;;;;30364:61;30440:7;30449;30432:25;;;;;;29951:512;;;:::o;9189:98::-;9247:7;9278:1;9274;:5;;;;:::i;:::-;9267:12;;9189:98;;;;:::o;28448:213::-;28552:28;28564:15;28573:5;28564:4;:8;;:15;;;;:::i;:::-;28552:7;;:11;;:28;;;;:::i;:::-;28542:7;:38;;;;28597:18;28609:5;28597:7;;:11;;:18;;;;:::i;:::-;28587:7;:28;;;;28635:20;28650:4;28635:10;;:14;;:20;;;;:::i;:::-;28622:10;:33;;;;28448:213;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;337:5;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:329::-;495:6;544:2;532:9;523:7;519:23;515:32;512:2;;;550:79;;:::i;:::-;512:2;670:1;695:53;740:7;731:6;720:9;716:22;695:53;:::i;:::-;685:63;;641:117;502:263;;;;:::o;771:474::-;839:6;847;896:2;884:9;875:7;871:23;867:32;864:2;;;902:79;;:::i;:::-;864:2;1022:1;1047:53;1092:7;1083:6;1072:9;1068:22;1047:53;:::i;:::-;1037:63;;993:117;1149:2;1175:53;1220:7;1211:6;1200:9;1196:22;1175:53;:::i;:::-;1165:63;;1120:118;854:391;;;;;:::o;1251:619::-;1328:6;1336;1344;1393:2;1381:9;1372:7;1368:23;1364:32;1361:2;;;1399:79;;:::i;:::-;1361:2;1519:1;1544:53;1589:7;1580:6;1569:9;1565:22;1544:53;:::i;:::-;1534:63;;1490:117;1646:2;1672:53;1717:7;1708:6;1697:9;1693:22;1672:53;:::i;:::-;1662:63;;1617:118;1774:2;1800:53;1845:7;1836:6;1825:9;1821:22;1800:53;:::i;:::-;1790:63;;1745:118;1351:519;;;;;:::o;1876:474::-;1944:6;1952;2001:2;1989:9;1980:7;1976:23;1972:32;1969:2;;;2007:79;;:::i;:::-;1969:2;2127:1;2152:53;2197:7;2188:6;2177:9;2173:22;2152:53;:::i;:::-;2142:63;;2098:117;2254:2;2280:53;2325:7;2316:6;2305:9;2301:22;2280:53;:::i;:::-;2270:63;;2225:118;1959:391;;;;;:::o;2356:329::-;2415:6;2464:2;2452:9;2443:7;2439:23;2435:32;2432:2;;;2470:79;;:::i;:::-;2432:2;2590:1;2615:53;2660:7;2651:6;2640:9;2636:22;2615:53;:::i;:::-;2605:63;;2561:117;2422:263;;;;:::o;2691:468::-;2756:6;2764;2813:2;2801:9;2792:7;2788:23;2784:32;2781:2;;;2819:79;;:::i;:::-;2781:2;2939:1;2964:53;3009:7;3000:6;2989:9;2985:22;2964:53;:::i;:::-;2954:63;;2910:117;3066:2;3092:50;3134:7;3125:6;3114:9;3110:22;3092:50;:::i;:::-;3082:60;;3037:115;2771:388;;;;;:::o;3165:118::-;3252:24;3270:5;3252:24;:::i;:::-;3247:3;3240:37;3230:53;;:::o;3289:109::-;3370:21;3385:5;3370:21;:::i;:::-;3365:3;3358:34;3348:50;;:::o;3404:364::-;3492:3;3520:39;3553:5;3520:39;:::i;:::-;3575:71;3639:6;3634:3;3575:71;:::i;:::-;3568:78;;3655:52;3700:6;3695:3;3688:4;3681:5;3677:16;3655:52;:::i;:::-;3732:29;3754:6;3732:29;:::i;:::-;3727:3;3723:39;3716:46;;3496:272;;;;;:::o;3774:366::-;3916:3;3937:67;4001:2;3996:3;3937:67;:::i;:::-;3930:74;;4013:93;4102:3;4013:93;:::i;:::-;4131:2;4126:3;4122:12;4115:19;;3920:220;;;:::o;4146:366::-;4288:3;4309:67;4373:2;4368:3;4309:67;:::i;:::-;4302:74;;4385:93;4474:3;4385:93;:::i;:::-;4503:2;4498:3;4494:12;4487:19;;4292:220;;;:::o;4518:366::-;4660:3;4681:67;4745:2;4740:3;4681:67;:::i;:::-;4674:74;;4757:93;4846:3;4757:93;:::i;:::-;4875:2;4870:3;4866:12;4859:19;;4664:220;;;:::o;4890:366::-;5032:3;5053:67;5117:2;5112:3;5053:67;:::i;:::-;5046:74;;5129:93;5218:3;5129:93;:::i;:::-;5247:2;5242:3;5238:12;5231:19;;5036:220;;;:::o;5262:366::-;5404:3;5425:67;5489:2;5484:3;5425:67;:::i;:::-;5418:74;;5501:93;5590:3;5501:93;:::i;:::-;5619:2;5614:3;5610:12;5603:19;;5408:220;;;:::o;5634:366::-;5776:3;5797:67;5861:2;5856:3;5797:67;:::i;:::-;5790:74;;5873:93;5962:3;5873:93;:::i;:::-;5991:2;5986:3;5982:12;5975:19;;5780:220;;;:::o;6006:366::-;6148:3;6169:67;6233:2;6228:3;6169:67;:::i;:::-;6162:74;;6245:93;6334:3;6245:93;:::i;:::-;6363:2;6358:3;6354:12;6347:19;;6152:220;;;:::o;6378:366::-;6520:3;6541:67;6605:2;6600:3;6541:67;:::i;:::-;6534:74;;6617:93;6706:3;6617:93;:::i;:::-;6735:2;6730:3;6726:12;6719:19;;6524:220;;;:::o;6750:366::-;6892:3;6913:67;6977:2;6972:3;6913:67;:::i;:::-;6906:74;;6989:93;7078:3;6989:93;:::i;:::-;7107:2;7102:3;7098:12;7091:19;;6896:220;;;:::o;7122:366::-;7264:3;7285:67;7349:2;7344:3;7285:67;:::i;:::-;7278:74;;7361:93;7450:3;7361:93;:::i;:::-;7479:2;7474:3;7470:12;7463:19;;7268:220;;;:::o;7494:366::-;7636:3;7657:67;7721:2;7716:3;7657:67;:::i;:::-;7650:74;;7733:93;7822:3;7733:93;:::i;:::-;7851:2;7846:3;7842:12;7835:19;;7640:220;;;:::o;7866:366::-;8008:3;8029:67;8093:2;8088:3;8029:67;:::i;:::-;8022:74;;8105:93;8194:3;8105:93;:::i;:::-;8223:2;8218:3;8214:12;8207:19;;8012:220;;;:::o;8238:366::-;8380:3;8401:67;8465:2;8460:3;8401:67;:::i;:::-;8394:74;;8477:93;8566:3;8477:93;:::i;:::-;8595:2;8590:3;8586:12;8579:19;;8384:220;;;:::o;8610:118::-;8697:24;8715:5;8697:24;:::i;:::-;8692:3;8685:37;8675:53;;:::o;8734:112::-;8817:22;8833:5;8817:22;:::i;:::-;8812:3;8805:35;8795:51;;:::o;8852:222::-;8945:4;8983:2;8972:9;8968:18;8960:26;;8996:71;9064:1;9053:9;9049:17;9040:6;8996:71;:::i;:::-;8950:124;;;;:::o;9080:210::-;9167:4;9205:2;9194:9;9190:18;9182:26;;9218:65;9280:1;9269:9;9265:17;9256:6;9218:65;:::i;:::-;9172:118;;;;:::o;9296:313::-;9409:4;9447:2;9436:9;9432:18;9424:26;;9496:9;9490:4;9486:20;9482:1;9471:9;9467:17;9460:47;9524:78;9597:4;9588:6;9524:78;:::i;:::-;9516:86;;9414:195;;;;:::o;9615:419::-;9781:4;9819:2;9808:9;9804:18;9796:26;;9868:9;9862:4;9858:20;9854:1;9843:9;9839:17;9832:47;9896:131;10022:4;9896:131;:::i;:::-;9888:139;;9786:248;;;:::o;10040:419::-;10206:4;10244:2;10233:9;10229:18;10221:26;;10293:9;10287:4;10283:20;10279:1;10268:9;10264:17;10257:47;10321:131;10447:4;10321:131;:::i;:::-;10313:139;;10211:248;;;:::o;10465:419::-;10631:4;10669:2;10658:9;10654:18;10646:26;;10718:9;10712:4;10708:20;10704:1;10693:9;10689:17;10682:47;10746:131;10872:4;10746:131;:::i;:::-;10738:139;;10636:248;;;:::o;10890:419::-;11056:4;11094:2;11083:9;11079:18;11071:26;;11143:9;11137:4;11133:20;11129:1;11118:9;11114:17;11107:47;11171:131;11297:4;11171:131;:::i;:::-;11163:139;;11061:248;;;:::o;11315:419::-;11481:4;11519:2;11508:9;11504:18;11496:26;;11568:9;11562:4;11558:20;11554:1;11543:9;11539:17;11532:47;11596:131;11722:4;11596:131;:::i;:::-;11588:139;;11486:248;;;:::o;11740:419::-;11906:4;11944:2;11933:9;11929:18;11921:26;;11993:9;11987:4;11983:20;11979:1;11968:9;11964:17;11957:47;12021:131;12147:4;12021:131;:::i;:::-;12013:139;;11911:248;;;:::o;12165:419::-;12331:4;12369:2;12358:9;12354:18;12346:26;;12418:9;12412:4;12408:20;12404:1;12393:9;12389:17;12382:47;12446:131;12572:4;12446:131;:::i;:::-;12438:139;;12336:248;;;:::o;12590:419::-;12756:4;12794:2;12783:9;12779:18;12771:26;;12843:9;12837:4;12833:20;12829:1;12818:9;12814:17;12807:47;12871:131;12997:4;12871:131;:::i;:::-;12863:139;;12761:248;;;:::o;13015:419::-;13181:4;13219:2;13208:9;13204:18;13196:26;;13268:9;13262:4;13258:20;13254:1;13243:9;13239:17;13232:47;13296:131;13422:4;13296:131;:::i;:::-;13288:139;;13186:248;;;:::o;13440:419::-;13606:4;13644:2;13633:9;13629:18;13621:26;;13693:9;13687:4;13683:20;13679:1;13668:9;13664:17;13657:47;13721:131;13847:4;13721:131;:::i;:::-;13713:139;;13611:248;;;:::o;13865:419::-;14031:4;14069:2;14058:9;14054:18;14046:26;;14118:9;14112:4;14108:20;14104:1;14093:9;14089:17;14082:47;14146:131;14272:4;14146:131;:::i;:::-;14138:139;;14036:248;;;:::o;14290:419::-;14456:4;14494:2;14483:9;14479:18;14471:26;;14543:9;14537:4;14533:20;14529:1;14518:9;14514:17;14507:47;14571:131;14697:4;14571:131;:::i;:::-;14563:139;;14461:248;;;:::o;14715:419::-;14881:4;14919:2;14908:9;14904:18;14896:26;;14968:9;14962:4;14958:20;14954:1;14943:9;14939:17;14932:47;14996:131;15122:4;14996:131;:::i;:::-;14988:139;;14886:248;;;:::o;15140:222::-;15233:4;15271:2;15260:9;15256:18;15248:26;;15284:71;15352:1;15341:9;15337:17;15328:6;15284:71;:::i;:::-;15238:124;;;;:::o;15368:214::-;15457:4;15495:2;15484:9;15480:18;15472:26;;15508:67;15572:1;15561:9;15557:17;15548:6;15508:67;:::i;:::-;15462:120;;;;:::o;15669:99::-;15721:6;15755:5;15749:12;15739:22;;15728:40;;;:::o;15774:169::-;15858:11;15892:6;15887:3;15880:19;15932:4;15927:3;15923:14;15908:29;;15870:73;;;;:::o;15949:305::-;15989:3;16008:20;16026:1;16008:20;:::i;:::-;16003:25;;16042:20;16060:1;16042:20;:::i;:::-;16037:25;;16196:1;16128:66;16124:74;16121:1;16118:81;16115:2;;;16202:18;;:::i;:::-;16115:2;16246:1;16243;16239:9;16232:16;;15993:261;;;;:::o;16260:185::-;16300:1;16317:20;16335:1;16317:20;:::i;:::-;16312:25;;16351:20;16369:1;16351:20;:::i;:::-;16346:25;;16390:1;16380:2;;16395:18;;:::i;:::-;16380:2;16437:1;16434;16430:9;16425:14;;16302:143;;;;:::o;16451:848::-;16512:5;16519:4;16543:6;16534:15;;16567:5;16558:14;;16581:712;16602:1;16592:8;16589:15;16581:712;;;16697:4;16692:3;16688:14;16682:4;16679:24;16676:2;;;16706:18;;:::i;:::-;16676:2;16756:1;16746:8;16742:16;16739:2;;;17171:4;17164:5;17160:16;17151:25;;16739:2;17221:4;17215;17211:15;17203:23;;17251:32;17274:8;17251:32;:::i;:::-;17239:44;;16581:712;;;16524:775;;;;;;;:::o;17305:281::-;17363:5;17387:23;17405:4;17387:23;:::i;:::-;17379:31;;17431:25;17447:8;17431:25;:::i;:::-;17419:37;;17475:104;17512:66;17502:8;17496:4;17475:104;:::i;:::-;17466:113;;17369:217;;;;:::o;17592:1073::-;17646:5;17837:8;17827:2;;17858:1;17849:10;;17860:5;;17827:2;17886:4;17876:2;;17903:1;17894:10;;17905:5;;17876:2;17972:4;18020:1;18015:27;;;;18056:1;18051:191;;;;17965:277;;18015:27;18033:1;18024:10;;18035:5;;;18051:191;18096:3;18086:8;18083:17;18080:2;;;18103:18;;:::i;:::-;18080:2;18152:8;18149:1;18145:16;18136:25;;18187:3;18180:5;18177:14;18174:2;;;18194:18;;:::i;:::-;18174:2;18227:5;;;17965:277;;18351:2;18341:8;18338:16;18332:3;18326:4;18323:13;18319:36;18301:2;18291:8;18288:16;18283:2;18277:4;18274:12;18270:35;18254:111;18251:2;;;18407:8;18401:4;18397:19;18388:28;;18442:3;18435:5;18432:14;18429:2;;;18449:18;;:::i;:::-;18429:2;18482:5;;18251:2;18522:42;18560:3;18550:8;18544:4;18541:1;18522:42;:::i;:::-;18507:57;;;;18596:4;18591:3;18587:14;18580:5;18577:25;18574:2;;;18605:18;;:::i;:::-;18574:2;18654:4;18647:5;18643:16;18634:25;;17652:1013;;;;;;:::o;18671:348::-;18711:7;18734:20;18752:1;18734:20;:::i;:::-;18729:25;;18768:20;18786:1;18768:20;:::i;:::-;18763:25;;18956:1;18888:66;18884:74;18881:1;18878:81;18873:1;18866:9;18859:17;18855:105;18852:2;;;18963:18;;:::i;:::-;18852:2;19011:1;19008;19004:9;18993:20;;18719:300;;;;:::o;19025:191::-;19065:4;19085:20;19103:1;19085:20;:::i;:::-;19080:25;;19119:20;19137:1;19119:20;:::i;:::-;19114:25;;19158:1;19155;19152:8;19149:2;;;19163:18;;:::i;:::-;19149:2;19208:1;19205;19201:9;19193:17;;19070:146;;;;:::o;19222:96::-;19259:7;19288:24;19306:5;19288:24;:::i;:::-;19277:35;;19267:51;;;:::o;19324:90::-;19358:7;19401:5;19394:13;19387:21;19376:32;;19366:48;;;:::o;19420:126::-;19457:7;19497:42;19490:5;19486:54;19475:65;;19465:81;;;:::o;19552:77::-;19589:7;19618:5;19607:16;;19597:32;;;:::o;19635:86::-;19670:7;19710:4;19703:5;19699:16;19688:27;;19678:43;;;:::o;19727:307::-;19795:1;19805:113;19819:6;19816:1;19813:13;19805:113;;;19904:1;19899:3;19895:11;19889:18;19885:1;19880:3;19876:11;19869:39;19841:2;19838:1;19834:10;19829:15;;19805:113;;;19936:6;19933:1;19930:13;19927:2;;;20016:1;20007:6;20002:3;19998:16;19991:27;19927:2;19776:258;;;;:::o;20040:233::-;20079:3;20102:24;20120:5;20102:24;:::i;:::-;20093:33;;20148:66;20141:5;20138:77;20135:2;;;20218:18;;:::i;:::-;20135:2;20265:1;20258:5;20254:13;20247:20;;20083:190;;;:::o;20279:180::-;20327:77;20324:1;20317:88;20424:4;20421:1;20414:15;20448:4;20445:1;20438:15;20465:180;20513:77;20510:1;20503:88;20610:4;20607:1;20600:15;20634:4;20631:1;20624:15;20651:180;20699:77;20696:1;20689:88;20796:4;20793:1;20786:15;20820:4;20817:1;20810:15;20837:180;20885:77;20882:1;20875:88;20982:4;20979:1;20972:15;21006:4;21003:1;20996:15;21146:117;21255:1;21252;21245:12;21269:102;21310:6;21361:2;21357:7;21352:2;21345:5;21341:14;21337:28;21327:38;;21317:54;;;:::o;21377:105::-;21419:8;21470:4;21463:5;21459:16;21438:37;;21428:54;;;:::o;21488:222::-;21628:34;21624:1;21616:6;21612:14;21605:58;21697:5;21692:2;21684:6;21680:15;21673:30;21594:116;:::o;21716:229::-;21856:34;21852:1;21844:6;21840:14;21833:58;21925:12;21920:2;21912:6;21908:15;21901:37;21822:123;:::o;21951:225::-;22091:34;22087:1;22079:6;22075:14;22068:58;22160:8;22155:2;22147:6;22143:15;22136:33;22057:119;:::o;22182:221::-;22322:34;22318:1;22310:6;22306:14;22299:58;22391:4;22386:2;22378:6;22374:15;22367:29;22288:115;:::o;22409:177::-;22549:29;22545:1;22537:6;22533:14;22526:53;22515:71;:::o;22592:181::-;22732:33;22728:1;22720:6;22716:14;22709:57;22698:75;:::o;22779:182::-;22919:34;22915:1;22907:6;22903:14;22896:58;22885:76;:::o;22967:228::-;23107:34;23103:1;23095:6;23091:14;23084:58;23176:11;23171:2;23163:6;23159:15;23152:36;23073:122;:::o;23201:173::-;23341:25;23337:1;23329:6;23325:14;23318:49;23307:67;:::o;23380:224::-;23520:34;23516:1;23508:6;23504:14;23497:58;23589:7;23584:2;23576:6;23572:15;23565:32;23486:118;:::o;23610:169::-;23750:21;23746:1;23738:6;23734:14;23727:45;23716:63;:::o;23785:223::-;23925:34;23921:1;23913:6;23909:14;23902:58;23994:6;23989:2;23981:6;23977:15;23970:31;23891:117;:::o;24014:231::-;24154:34;24150:1;24142:6;24138:14;24131:58;24223:14;24218:2;24210:6;24206:15;24199:39;24120:125;:::o;24251:122::-;24324:24;24342:5;24324:24;:::i;:::-;24317:5;24314:35;24304:2;;24363:1;24360;24353:12;24304:2;24294:79;:::o;24379:116::-;24449:21;24464:5;24449:21;:::i;:::-;24442:5;24439:32;24429:2;;24485:1;24482;24475:12;24429:2;24419:76;:::o;24501:122::-;24574:24;24592:5;24574:24;:::i;:::-;24567:5;24564:35;24554:2;;24613:1;24610;24603:12;24554:2;24544:79;:::o

Swarm Source

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