ETH Price: $3,748.02 (-2.65%)

Contract

0xF1d1A5306daaE314AF6c5d027a492B313e07e1A0
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Envoy (ENV) (@$0.0004)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer213520722024-12-07 17:22:112 days ago1733592131IN
ENVOY: ENV Token
0 ETH0.0010227519.52449801
Transfer213496282024-12-07 9:09:113 days ago1733562551IN
ENVOY: ENV Token
0 ETH0.0005917411.2965296
Transfer213353382024-12-05 9:16:115 days ago1733390171IN
ENVOY: ENV Token
0 ETH0.0010387719.83040738
Transfer212781272024-11-27 9:14:4713 days ago1732698887IN
ENVOY: ENV Token
0 ETH0.000458.59272501
Transfer211804972024-11-13 18:15:1126 days ago1731521711IN
ENVOY: ENV Token
0 ETH0.0025571472.4999995
Transfer211796392024-11-13 15:22:3526 days ago1731511355IN
ENVOY: ENV Token
0 ETH0.0041748979.71770817
Transfer211446102024-11-08 18:07:1131 days ago1731089231IN
ENVOY: ENV Token
0 ETH0.0009114317.39542109
Transfer211277882024-11-06 9:42:5934 days ago1730886179IN
ENVOY: ENV Token
0 ETH0.0008164315.58950075
Transfer210585622024-10-27 17:49:1143 days ago1730051351IN
ENVOY: ENV Token
0 ETH0.000336246.41897276
Transfer210257942024-10-23 4:08:2348 days ago1729656503IN
ENVOY: ENV Token
0 ETH0.000194735.51730636
Transfer210257682024-10-23 4:03:1148 days ago1729656191IN
ENVOY: ENV Token
0 ETH0.00031946.10025353
Transfer210155162024-10-21 17:41:2349 days ago1729532483IN
ENVOY: ENV Token
0 ETH0.000298138.44697176
Transfer210154972024-10-21 17:37:3549 days ago1729532255IN
ENVOY: ENV Token
0 ETH0.000484689.25688677
Approve209842522024-10-17 9:00:3554 days ago1729155635IN
ENVOY: ENV Token
0 ETH0.00054221.7
Transfer208728282024-10-01 19:47:1169 days ago1727812031IN
ENVOY: ENV Token
0 ETH0.0005906716.73537485
Transfer208727402024-10-01 19:29:3569 days ago1727810975IN
ENVOY: ENV Token
0 ETH0.0010136419.35506693
Transfer208034922024-09-22 3:41:2379 days ago1726976483IN
ENVOY: ENV Token
0 ETH0.000366296.99109276
Transfer207417872024-09-13 12:46:4787 days ago1726231607IN
ENVOY: ENV Token
0 ETH0.000161923.09050941
Transfer207035172024-09-08 4:30:3593 days ago1725769835IN
ENVOY: ENV Token
0 ETH0.000099041.89080547
Transfer206655372024-09-02 21:21:2398 days ago1725312083IN
ENVOY: ENV Token
0 ETH0.000412837.87932953
Transfer206331802024-08-29 8:54:59103 days ago1724921699IN
ENVOY: ENV Token
0 ETH0.000097441.85985256
Transfer206159392024-08-26 23:07:11105 days ago1724713631IN
ENVOY: ENV Token
0 ETH0.00009481.80937352
Transfer205279522024-08-14 16:05:47117 days ago1723651547IN
ENVOY: ENV Token
0 ETH0.000462098.81948043
Transfer204812112024-08-08 3:34:47124 days ago1723088087IN
ENVOY: ENV Token
0 ETH0.000162223.09616647
Approve196690932024-04-16 15:59:59237 days ago1713283199IN
ENVOY: ENV Token
0 ETH0.0008224817.40302901
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EnvoyToken

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-28
*/

/**
 *Submitted for verification at BscScan.com on 2021-10-23
*/

pragma solidity ^0.8.0;

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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


contract EnvoyToken is ERC20 {

  using SafeMath for uint256;

  //
  // ******************* VARIABLES *******************
  //

  // Deploy time
  uint256 private _deployTime = 1635429600; 
  uint256 private _startTime = 1635933600; 

  // Contract owner
  address public _ownerWallet;

  // Public sale - 1M
  address public _publicSaleWallet;
  // Team - 20M
  address public _teamWallet;
  // Ecosystem - 25M
  address public _ecosystemWallet;
  // Reserves - 20M
  address public _reservesWallet;
  // DEX - 2M
  address public _dexWallet;
  // Liquidity incentives - 7M
  address public _liqWallet;

  // Amount of tokens per buyer in private sale - 25M
  mapping(address => uint256) public _buyerTokens;

  // Amount of tokens assigned to buyers
  uint256 public _totalBuyerTokens;

  // Amount of tokens a wallet has withdrawn already, per type
  mapping(string => mapping(address => uint256)) public _walletTokensWithdrawn;


  //
  // ******************* SETUP *******************
  //

  constructor (string memory name, string memory symbol) public ERC20(name, symbol) {

    // Set owner wallet
    _ownerWallet = _msgSender();

    // Mint 100M tokens for contract
    _mint(address(this), 100000000000000000000000000);
  }

  //
  // ******************* WALLETS SETUP *******************
  //

  // Owner can update owner
  function updateOwner(address owner) external {
    require(_msgSender() == _ownerWallet, "Only owner can update wallets");

    _ownerWallet = owner; 
  }

  // Update wallets
  function updateWallets(address publicSale, address team, address ecosystem, address reserves, address dex, address liq) external {
    require(_msgSender() == _ownerWallet, "Only owner can update wallets");

    require(publicSale != address(0), "Should not set zero address");
    require(team != address(0), "Should not set zero address");
    require(ecosystem != address(0), "Should not set zero address");
    require(reserves != address(0), "Should not set zero address");
    require(dex != address(0), "Should not set zero address");
    require(liq != address(0), "Should not set zero address");

    _walletTokensWithdrawn["publicsale"][publicSale] = _walletTokensWithdrawn["publicsale"][_publicSaleWallet];
    _walletTokensWithdrawn["team"][team] = _walletTokensWithdrawn["team"][_teamWallet];
    _walletTokensWithdrawn["ecosystem"][ecosystem] = _walletTokensWithdrawn["ecosystem"][_ecosystemWallet];
    _walletTokensWithdrawn["reserve"][reserves] = _walletTokensWithdrawn["reserve"][_reservesWallet];
    _walletTokensWithdrawn["dex"][dex] = _walletTokensWithdrawn["dex"][_dexWallet];
    _walletTokensWithdrawn["liq"][liq] = _walletTokensWithdrawn["liq"][_liqWallet];

    _publicSaleWallet = publicSale; 
    _teamWallet = team;
    _ecosystemWallet = ecosystem;
    _reservesWallet = reserves;
    _dexWallet = dex;
    _liqWallet = liq;
  }

  // Update buyer tokens
  function setBuyerTokens(address buyer, uint256 tokenAmount) external {
    require(_msgSender() == _ownerWallet, "Only owner can set buyer tokens");

    // Update total
    _totalBuyerTokens -= _buyerTokens[buyer];
    _totalBuyerTokens += tokenAmount;

    // Check if enough tokens left, can max assign 25M
    require(_totalBuyerTokens <= 25000000000000000000000000, "Max amount reached");

    // Update map
    _buyerTokens[buyer] = tokenAmount;
  }

  //
  // ******************* OWNER *******************
  //

  function publicSaleWithdraw(uint256 tokenAmount) external {
    require(_msgSender() == _publicSaleWallet, "Unauthorized public sale wallet");

    uint256 hasWithdrawn = _walletTokensWithdrawn["publicsale"][_msgSender()];

    // Total = 1M instant
    uint256 canWithdraw = 1000000000000000000000000 - hasWithdrawn;

    require(tokenAmount <= canWithdraw, "Withdraw amount too high");

    _walletTokensWithdrawn["publicsale"][_msgSender()] += tokenAmount;

    _transfer(address(this), _msgSender(), tokenAmount);    
  }

  function liqWithdraw(uint256 tokenAmount) external {
    require(_msgSender() == _liqWallet, "Unauthorized liquidity incentives wallet");

    // TGE = 40%
    // Cliff = 1 months = 43800 minutes
    // Vesting = 6 months 262800 minutes
    // Total = 20M
    uint256 canWithdraw = walletCanWithdraw(_msgSender(), "liq", 40, 43800, 262800, 7000000000000000000000000, _deployTime);
    
    require(tokenAmount <= canWithdraw, "Withdraw amount too high");

    _walletTokensWithdrawn["liq"][_msgSender()] += tokenAmount;

    _transfer(address(this), _msgSender(), tokenAmount);  
  
  }

  function teamWithdraw(uint256 tokenAmount) external {
    require(_msgSender() == _teamWallet, "Unauthorized team wallet");

    // Cliff = 6 months = 262800 minutes
    // Vesting = 20 months 876001 minutes
    // Total = 20M
    uint256 canWithdraw = walletCanWithdraw(_msgSender(), "team", 0, 262800, 876001, 20000000000000000000000000, _deployTime);
    
    require(tokenAmount <= canWithdraw, "Withdraw amount too high");

    _walletTokensWithdrawn["team"][_msgSender()] += tokenAmount;

    _transfer(address(this), _msgSender(), tokenAmount);  
  }

  function ecosystemWithdraw(uint256 tokenAmount) external {
    require(_msgSender() == _ecosystemWallet, "Unauthorized ecosystem wallet");

    // TGE = 5%
    // Cliff = 1 months = 43800 minutes
    // Vesting = 19 months = 832201 minutes
    // Total = 25M
    uint256 canWithdraw = walletCanWithdraw(_msgSender(), "ecosystem", 5, 43800, 832201, 25000000000000000000000000, _deployTime);
    
    require(tokenAmount <= canWithdraw, "Withdraw amount too high");

    _walletTokensWithdrawn["ecosystem"][_msgSender()] += tokenAmount;

    _transfer(address(this), _msgSender(), tokenAmount);  
  }

  function reservesWithdraw(uint256 tokenAmount) external {
    require(_msgSender() == _reservesWallet, "Unauthorized reserves wallet");

    // Cliff = 6 months = 262800 minutes
    // Vesting = 20 months = 876001 minutes
    // Total = 20M
    uint256 canWithdraw = walletCanWithdraw(_msgSender(), "reserve", 0, 262800, 876001, 20000000000000000000000000, _deployTime);
    
    require(tokenAmount <= canWithdraw, "Withdraw amount too high");

    _walletTokensWithdrawn["reserve"][_msgSender()] += tokenAmount;

    _transfer(address(this), _msgSender(), tokenAmount);  
  }

  function dexWithdraw(uint256 tokenAmount) external {
    require(_msgSender() == _dexWallet, "Unauthorized dex wallet");

    uint256 hasWithdrawn = _walletTokensWithdrawn["dex"][_msgSender()];

    // Total = 2M instant
    uint256 canWithdraw = 2000000000000000000000000 - hasWithdrawn;

    require(tokenAmount <= canWithdraw, "Withdraw amount too high");

    _walletTokensWithdrawn["dex"][_msgSender()] += tokenAmount;

    _transfer(address(this), _msgSender(), tokenAmount);    
  }

  function buyerWithdraw(uint256 tokenAmount) external {
    
    // TGE = 10%
    // Cliff = 4 months = 175200 minutes
    // Vesting = 18 months = 788401 minutes
    uint256 canWithdraw = walletCanWithdraw(_msgSender(), "privatesale", 10, 175200, 788401, _buyerTokens[_msgSender()], _startTime);
    
    require(tokenAmount <= canWithdraw, "Withdraw amount too high");

    _walletTokensWithdrawn["privatesale"][_msgSender()] += tokenAmount;

    _transfer(address(this), _msgSender(), tokenAmount);    
  }

  //
  // ******************* UNLOCK CALCULATION *******************
  //

  function walletCanWithdraw(address wallet, string memory walletType, uint256 initialPercentage, uint256 cliffMinutes, uint256 vestingMinutes, uint256 totalTokens, uint256 startTime) public view returns(uint256) {
    
    uint256 minutesDiff = (block.timestamp - startTime).div(60);

    // Tokens already withdrawn
    uint256 withdrawnTokens = _walletTokensWithdrawn[walletType][wallet];

    // Initial tokens
    uint256 initialTokens = 0;
    if (initialPercentage != 0) {
      initialTokens = totalTokens.mul(initialPercentage).div(100);
    }

    // Cliff not ended
    if (minutesDiff < uint256(cliffMinutes)) {
      return initialTokens - withdrawnTokens;
    }

    // Tokens per minute over vesting period
    uint256 buyerTokensPerMinute = totalTokens.sub(initialTokens).div(vestingMinutes); 

    // Advanced minutes minus cliff
    uint256 unlockedMinutes = minutesDiff - uint256(cliffMinutes); 

    // Unlocked minutes * tokens per minutes + initial tokens
    uint256 unlockedTokens = unlockedMinutes.mul(buyerTokensPerMinute).add(initialTokens); 
    
    // No extra tokens unlocked
    if (unlockedTokens <= withdrawnTokens) {
      return 0;
    }

    // Check if buyer reached max
    if (unlockedTokens > totalTokens) {
      return totalTokens - withdrawnTokens;
    }

    // Result
    return unlockedTokens - withdrawnTokens;
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_buyerTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dexWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ecosystemWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liqWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ownerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_publicSaleWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reservesWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBuyerTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"}],"name":"_walletTokensWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"buyerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"dexWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"ecosystemWithdraw","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":"uint256","name":"tokenAmount","type":"uint256"}],"name":"liqWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"publicSaleWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"reservesWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"setBuyerTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"teamWithdraw","outputs":[],"stateMutability":"nonpayable","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":"owner","type":"address"}],"name":"updateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"publicSale","type":"address"},{"internalType":"address","name":"team","type":"address"},{"internalType":"address","name":"ecosystem","type":"address"},{"internalType":"address","name":"reserves","type":"address"},{"internalType":"address","name":"dex","type":"address"},{"internalType":"address","name":"liq","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"string","name":"walletType","type":"string"},{"internalType":"uint256","name":"initialPercentage","type":"uint256"},{"internalType":"uint256","name":"cliffMinutes","type":"uint256"},{"internalType":"uint256","name":"vestingMinutes","type":"uint256"},{"internalType":"uint256","name":"totalTokens","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"}],"name":"walletCanWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405263617aace06005556361825da06006553480156200002157600080fd5b50604051620044743803806200447483398181016040528101906200004791906200039f565b81818160039080519060200190620000619291906200027d565b5080600490805190602001906200007a9291906200027d565b5050506200008d620000f260201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000ea306a52b7d2dcc80cd2e4000000620000fa60201b60201c565b50506200067c565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000465565b60405180910390fd5b62000181600083836200027360201b60201c565b80600260008282546200019591906200051c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620001ec91906200051c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000253919062000487565b60405180910390a36200026f600083836200027860201b60201c565b5050565b505050565b505050565b8280546200028b90620005b9565b90600052602060002090601f016020900481019282620002af5760008555620002fb565b82601f10620002ca57805160ff1916838001178555620002fb565b82800160010185558215620002fb579182015b82811115620002fa578251825591602001919060010190620002dd565b5b5090506200030a91906200030e565b5090565b5b80821115620003295760008160009055506001016200030f565b5090565b6000620003446200033e84620004d8565b620004a4565b9050828152602081018484840111156200035d57600080fd5b6200036a84828562000583565b509392505050565b600082601f8301126200038457600080fd5b8151620003968482602086016200032d565b91505092915050565b60008060408385031215620003b357600080fd5b600083015167ffffffffffffffff811115620003ce57600080fd5b620003dc8582860162000372565b925050602083015167ffffffffffffffff811115620003fa57600080fd5b620004088582860162000372565b9150509250929050565b600062000421601f836200050b565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6200045f8162000579565b82525050565b60006020820190508181036000830152620004808162000412565b9050919050565b60006020820190506200049e600083018462000454565b92915050565b6000604051905081810181811067ffffffffffffffff82111715620004ce57620004cd6200064d565b5b8060405250919050565b600067ffffffffffffffff821115620004f657620004f56200064d565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b6000620005298262000579565b9150620005368362000579565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200056e576200056d620005ef565b5b828201905092915050565b6000819050919050565b60005b83811015620005a357808201518184015260208101905062000586565b83811115620005b3576000848401525b50505050565b60006002820490506001821680620005d257607f821691505b60208210811415620005e957620005e86200061e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613de8806200068c6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806373ab79251161010f578063a457c2d7116100a2578063b96190d611610071578063b96190d6146105cd578063bec3fab1146105eb578063d6aedc6d14610609578063dd62ed3e14610625576101f0565b8063a457c2d714610535578063a9059cbb14610565578063b03fd85a14610595578063b620743a146105b1576101f0565b806393d60990116100de57806393d60990146104c157806395d89b41146104dd57806399c26c53146104fb5780639f1161c314610517576101f0565b806373ab79251461043b5780637a0f06e71461046b57806381640a9114610489578063880cdc31146104a5576101f0565b8063313ce567116101875780634c420743116101565780634c420743146103a15780634e5fde97146103bf57806363586f39146103db57806370a082311461040b576101f0565b8063313ce5671461031757806337e294d51461033557806339509351146103535780634825fc0d14610383576101f0565b8063100505b9116101c3578063100505b91461028f57806318160ddd146102ad57806322cb364e146102cb57806323b872dd146102e7576101f0565b806306fdde03146101f557806307562e2914610213578063095ea7b31461022f5780630c790fbe1461025f575b600080fd5b6101fd610655565b60405161020a91906137b9565b60405180910390f35b61022d60048036038101906102289190612e9a565b6106e7565b005b61024960048036038101906102449190612e0a565b6108cf565b604051610256919061379e565b60405180910390f35b61027960048036038101906102749190612e46565b6108ed565b6040516102869190613a1b565b60405180910390f35b610297610928565b6040516102a49190613783565b60405180910390f35b6102b561094e565b6040516102c29190613a1b565b60405180910390f35b6102e560048036038101906102e09190612c7c565b610958565b005b61030160048036038101906102fc9190612d05565b611333565b60405161030e919061379e565b60405180910390f35b61031f61142b565b60405161032c9190613a36565b60405180910390f35b61033d611434565b60405161034a9190613783565b60405180910390f35b61036d60048036038101906103689190612e0a565b61145a565b60405161037a919061379e565b60405180910390f35b61038b611506565b6040516103989190613783565b60405180910390f35b6103a961152c565b6040516103b69190613783565b60405180910390f35b6103d960048036038101906103d49190612e9a565b611552565b005b6103f560048036038101906103f09190612c17565b611739565b6040516104029190613a1b565b60405180910390f35b61042560048036038101906104209190612c17565b611751565b6040516104329190613a1b565b60405180910390f35b61045560048036038101906104509190612d54565b611799565b6040516104629190613a1b565b60405180910390f35b610473611926565b6040516104809190613783565b60405180910390f35b6104a3600480360381019061049e9190612e9a565b61194c565b005b6104bf60048036038101906104ba9190612c17565b611b15565b005b6104db60048036038101906104d69190612e9a565b611bf0565b005b6104e5611dba565b6040516104f291906137b9565b60405180910390f35b61051560048036038101906105109190612e9a565b611e4c565b005b61051f612015565b60405161052c9190613783565b60405180910390f35b61054f600480360381019061054a9190612e0a565b61203b565b60405161055c919061379e565b60405180910390f35b61057f600480360381019061057a9190612e0a565b612126565b60405161058c919061379e565b60405180910390f35b6105af60048036038101906105aa9190612e9a565b612144565b005b6105cb60048036038101906105c69190612e9a565b6122b2565b005b6105d561247c565b6040516105e29190613a1b565b60405180910390f35b6105f3612482565b6040516106009190613783565b60405180910390f35b610623600480360381019061061e9190612e0a565b6124a8565b005b61063f600480360381019061063a9190612c40565b612648565b60405161064c9190613a1b565b60405180910390f35b60606003805461066490613c85565b80601f016020809104026020016040519081016040528092919081815260200182805461069090613c85565b80156106dd5780601f106106b2576101008083540402835291602001916106dd565b820191906000526020600020905b8154815290600101906020018083116106c057829003601f168201915b5050505050905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107286126cf565b73ffffffffffffffffffffffffffffffffffffffff161461077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775906139fb565b60405180910390fd5b6000601060405161078e906136f0565b908152602001604051809103902060006107a66126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000816a01a784379d99db420000006107fc9190613bba565b905080831115610841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610838906138bb565b60405180910390fd5b826010604051610850906136f0565b908152602001604051809103902060006108686126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108b19190613ad9565b925050819055506108ca306108c46126cf565b856126d7565b505050565b60006108e36108dc6126cf565b8484612958565b6001905092915050565b601082805160208101820180518482526020830160208501208183528095505050505050602052806000526040600020600091509150505481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166109996126cf565b73ffffffffffffffffffffffffffffffffffffffff16146109ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e6906139bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a56906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b36906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba6906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c16906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c86906138fb565b60405180910390fd5b6010604051610c9d9061371a565b90815260200160405180910390206000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610d199061371a565b908152602001604051809103902060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051610d7690613759565b90815260200160405180910390206000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610df290613759565b908152602001604051809103902060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051610e4f90613744565b90815260200160405180910390206000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610ecb90613744565b908152602001604051809103902060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051610f289061376e565b90815260200160405180910390206000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610fa49061376e565b908152602001604051809103902060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051611001906136f0565b90815260200160405180910390206000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060405161107d906136f0565b908152602001604051809103902060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060106040516110da90613705565b90815260200160405180910390206000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060405161115690613705565b908152602001604051809103902060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050565b60006113408484846126d7565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061138b6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561140b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114029061391b565b60405180910390fd5b61141f856114176126cf565b858403612958565b60019150509392505050565b60006012905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006114fc6114676126cf565b8484600160006114756126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f79190613ad9565b612958565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115936126cf565b73ffffffffffffffffffffffffffffffffffffffff16146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e09061389b565b60405180910390fd5b600060106040516115f99061371a565b908152602001604051809103902060006116116126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008169d3c21bcecceda10000006116669190613bba565b9050808311156116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a2906138bb565b60405180910390fd5b8260106040516116ba9061371a565b908152602001604051809103902060006116d26126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461171b9190613ad9565b925050819055506117343061172e6126cf565b856126d7565b505050565b600e6020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806117bb603c84426117ad9190613bba565b612b2390919063ffffffff16565b905060006010896040516117cf91906136d9565b908152602001604051809103902060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600080891461184f5761184c606461183e8b89612b3990919063ffffffff16565b612b2390919063ffffffff16565b90505b8783101561186d5781816118639190613bba565b935050505061191b565b600061189488611886848a612b4f90919063ffffffff16565b612b2390919063ffffffff16565b9050600089856118a49190613bba565b905060006118cd846118bf8585612b3990919063ffffffff16565b612b6590919063ffffffff16565b90508481116118e5576000965050505050505061191b565b888111156119065784896118f99190613bba565b965050505050505061191b565b84816119129190613bba565b96505050505050505b979650505050505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661198d6126cf565b73ffffffffffffffffffffffffffffffffffffffff16146119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da9061381b565b60405180910390fd5b6000611a436119f06126cf565b6040518060400160405280600381526020017f6c69710000000000000000000000000000000000000000000000000000000000815250602861ab18620402906a05ca4ec2a79a7f67000000600554611799565b905080821115611a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7f906138bb565b60405180910390fd5b816010604051611a9790613705565b90815260200160405180910390206000611aaf6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af89190613ad9565b92505081905550611b1130611b0b6126cf565b846126d7565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b566126cf565b73ffffffffffffffffffffffffffffffffffffffff1614611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba3906139bb565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c316126cf565b73ffffffffffffffffffffffffffffffffffffffff1614611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e9061385b565b60405180910390fd5b6000611ce8611c946126cf565b6040518060400160405280600481526020017f7465616d00000000000000000000000000000000000000000000000000000000815250600062040290620d5de16a108b2a2c28029094000000600554611799565b905080821115611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d24906138bb565b60405180910390fd5b816010604051611d3c90613759565b90815260200160405180910390206000611d546126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d9d9190613ad9565b92505081905550611db630611db06126cf565b846126d7565b5050565b606060048054611dc990613c85565b80601f0160208091040260200160405190810160405280929190818152602001828054611df590613c85565b8015611e425780601f10611e1757610100808354040283529160200191611e42565b820191906000526020600020905b815481529060010190602001808311611e2557829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e8d6126cf565b73ffffffffffffffffffffffffffffffffffffffff1614611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda906138db565b60405180910390fd5b6000611f43611ef06126cf565b6040518060400160405280600981526020017f65636f73797374656d0000000000000000000000000000000000000000000000815250600561ab18620cb2c96a14adf4b7320334b9000000600554611799565b905080821115611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f906138bb565b60405180910390fd5b816010604051611f9790613744565b90815260200160405180910390206000611faf6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff89190613ad9565b925050819055506120113061200b6126cf565b846126d7565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806001600061204a6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fe906139db565b60405180910390fd5b61211b6121126126cf565b85858403612958565b600191505092915050565b600061213a6121336126cf565b84846126d7565b6001905092915050565b60006121e06121516126cf565b6040518060400160405280600b81526020017f7072697661746573616c65000000000000000000000000000000000000000000815250600a6202ac60620c07b1600e600061219d6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600654611799565b905080821115612225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221c906138bb565b60405180910390fd5b8160106040516122349061372f565b9081526020016040518091039020600061224c6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122959190613ad9565b925050819055506122ae306122a86126cf565b846126d7565b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122f36126cf565b73ffffffffffffffffffffffffffffffffffffffff1614612349576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123409061399b565b60405180910390fd5b60006123aa6123566126cf565b6040518060400160405280600781526020017f7265736572766500000000000000000000000000000000000000000000000000815250600062040290620d5de16a108b2a2c28029094000000600554611799565b9050808211156123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e6906138bb565b60405180910390fd5b8160106040516123fe9061376e565b908152602001604051809103902060006124166126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461245f9190613ad9565b92505081905550612478306124726126cf565b846126d7565b5050565b600f5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166124e96126cf565b73ffffffffffffffffffffffffffffffffffffffff161461253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061393b565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008282546125909190613bba565b9250508190555080600f60008282546125a99190613ad9565b925050819055506a14adf4b7320334b9000000600f541115612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f79061387b565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e9061395b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae906137db565b60405180910390fd5b6127c2838383612b7b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f9061383b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128db9190613ad9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161293f9190613a1b565b60405180910390a3612952848484612b80565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf9061397b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2f906137fb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b169190613a1b565b60405180910390a3505050565b60008183612b319190613b2f565b905092915050565b60008183612b479190613b60565b905092915050565b60008183612b5d9190613bba565b905092915050565b60008183612b739190613ad9565b905092915050565b505050565b505050565b6000612b98612b9384613a82565b613a51565b905082815260208101848484011115612bb057600080fd5b612bbb848285613c43565b509392505050565b600081359050612bd281613d84565b92915050565b600082601f830112612be957600080fd5b8135612bf9848260208601612b85565b91505092915050565b600081359050612c1181613d9b565b92915050565b600060208284031215612c2957600080fd5b6000612c3784828501612bc3565b91505092915050565b60008060408385031215612c5357600080fd5b6000612c6185828601612bc3565b9250506020612c7285828601612bc3565b9150509250929050565b60008060008060008060c08789031215612c9557600080fd5b6000612ca389828a01612bc3565b9650506020612cb489828a01612bc3565b9550506040612cc589828a01612bc3565b9450506060612cd689828a01612bc3565b9350506080612ce789828a01612bc3565b92505060a0612cf889828a01612bc3565b9150509295509295509295565b600080600060608486031215612d1a57600080fd5b6000612d2886828701612bc3565b9350506020612d3986828701612bc3565b9250506040612d4a86828701612c02565b9150509250925092565b600080600080600080600060e0888a031215612d6f57600080fd5b6000612d7d8a828b01612bc3565b975050602088013567ffffffffffffffff811115612d9a57600080fd5b612da68a828b01612bd8565b9650506040612db78a828b01612c02565b9550506060612dc88a828b01612c02565b9450506080612dd98a828b01612c02565b93505060a0612dea8a828b01612c02565b92505060c0612dfb8a828b01612c02565b91505092959891949750929550565b60008060408385031215612e1d57600080fd5b6000612e2b85828601612bc3565b9250506020612e3c85828601612c02565b9150509250929050565b60008060408385031215612e5957600080fd5b600083013567ffffffffffffffff811115612e7357600080fd5b612e7f85828601612bd8565b9250506020612e9085828601612bc3565b9150509250929050565b600060208284031215612eac57600080fd5b6000612eba84828501612c02565b91505092915050565b612ecc81613bee565b82525050565b612edb81613c00565b82525050565b6000612eec82613ab2565b612ef68185613abd565b9350612f06818560208601613c52565b612f0f81613d73565b840191505092915050565b6000612f2582613ab2565b612f2f8185613ace565b9350612f3f818560208601613c52565b80840191505092915050565b6000612f58602383613abd565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612fbe600383613ace565b91507f64657800000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b6000612ffe600383613ace565b91507f6c697100000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b600061303e602283613abd565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130a4600a83613ace565b91507f7075626c696373616c65000000000000000000000000000000000000000000006000830152600a82019050919050565b60006130e4602883613abd565b91507f556e617574686f72697a6564206c697175696469747920696e63656e7469766560008301527f732077616c6c65740000000000000000000000000000000000000000000000006020830152604082019050919050565b600061314a602683613abd565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131b0601883613abd565b91507f556e617574686f72697a6564207465616d2077616c6c657400000000000000006000830152602082019050919050565b60006131f0601283613abd565b91507f4d617820616d6f756e74207265616368656400000000000000000000000000006000830152602082019050919050565b6000613230601f83613abd565b91507f556e617574686f72697a6564207075626c69632073616c652077616c6c6574006000830152602082019050919050565b6000613270601883613abd565b91507f576974686472617720616d6f756e7420746f6f206869676800000000000000006000830152602082019050919050565b60006132b0601d83613abd565b91507f556e617574686f72697a65642065636f73797374656d2077616c6c65740000006000830152602082019050919050565b60006132f0600b83613ace565b91507f7072697661746573616c650000000000000000000000000000000000000000006000830152600b82019050919050565b6000613330601b83613abd565b91507f53686f756c64206e6f7420736574207a65726f206164647265737300000000006000830152602082019050919050565b6000613370602883613abd565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133d6600983613ace565b91507f65636f73797374656d00000000000000000000000000000000000000000000006000830152600982019050919050565b6000613416601f83613abd565b91507f4f6e6c79206f776e65722063616e2073657420627579657220746f6b656e73006000830152602082019050919050565b6000613456602583613abd565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134bc602483613abd565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613522601c83613abd565b91507f556e617574686f72697a65642072657365727665732077616c6c6574000000006000830152602082019050919050565b6000613562601d83613abd565b91507f4f6e6c79206f776e65722063616e207570646174652077616c6c6574730000006000830152602082019050919050565b60006135a2600483613ace565b91507f7465616d000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b60006135e2600783613ace565b91507f72657365727665000000000000000000000000000000000000000000000000006000830152600782019050919050565b6000613622602583613abd565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613688601783613abd565b91507f556e617574686f72697a6564206465782077616c6c65740000000000000000006000830152602082019050919050565b6136c481613c2c565b82525050565b6136d381613c36565b82525050565b60006136e58284612f1a565b915081905092915050565b60006136fb82612fb1565b9150819050919050565b600061371082612ff1565b9150819050919050565b600061372582613097565b9150819050919050565b600061373a826132e3565b9150819050919050565b600061374f826133c9565b9150819050919050565b600061376482613595565b9150819050919050565b6000613779826135d5565b9150819050919050565b60006020820190506137986000830184612ec3565b92915050565b60006020820190506137b36000830184612ed2565b92915050565b600060208201905081810360008301526137d38184612ee1565b905092915050565b600060208201905081810360008301526137f481612f4b565b9050919050565b6000602082019050818103600083015261381481613031565b9050919050565b60006020820190508181036000830152613834816130d7565b9050919050565b600060208201905081810360008301526138548161313d565b9050919050565b60006020820190508181036000830152613874816131a3565b9050919050565b60006020820190508181036000830152613894816131e3565b9050919050565b600060208201905081810360008301526138b481613223565b9050919050565b600060208201905081810360008301526138d481613263565b9050919050565b600060208201905081810360008301526138f4816132a3565b9050919050565b6000602082019050818103600083015261391481613323565b9050919050565b6000602082019050818103600083015261393481613363565b9050919050565b6000602082019050818103600083015261395481613409565b9050919050565b6000602082019050818103600083015261397481613449565b9050919050565b60006020820190508181036000830152613994816134af565b9050919050565b600060208201905081810360008301526139b481613515565b9050919050565b600060208201905081810360008301526139d481613555565b9050919050565b600060208201905081810360008301526139f481613615565b9050919050565b60006020820190508181036000830152613a148161367b565b9050919050565b6000602082019050613a3060008301846136bb565b92915050565b6000602082019050613a4b60008301846136ca565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613a7857613a77613d44565b5b8060405250919050565b600067ffffffffffffffff821115613a9d57613a9c613d44565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000613ae482613c2c565b9150613aef83613c2c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b2457613b23613cb7565b5b828201905092915050565b6000613b3a82613c2c565b9150613b4583613c2c565b925082613b5557613b54613ce6565b5b828204905092915050565b6000613b6b82613c2c565b9150613b7683613c2c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613baf57613bae613cb7565b5b828202905092915050565b6000613bc582613c2c565b9150613bd083613c2c565b925082821015613be357613be2613cb7565b5b828203905092915050565b6000613bf982613c0c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613c70578082015181840152602081019050613c55565b83811115613c7f576000848401525b50505050565b60006002820490506001821680613c9d57607f821691505b60208210811415613cb157613cb0613d15565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613d8d81613bee565b8114613d9857600080fd5b50565b613da481613c2c565b8114613daf57600080fd5b5056fea26469706673582212203d72b2129de14afa9bc74af7f53f3a952be4af8d686a22f4c512db83727f80ef64736f6c63430008000033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000005454e564f590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003454e560000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101f05760003560e01c806373ab79251161010f578063a457c2d7116100a2578063b96190d611610071578063b96190d6146105cd578063bec3fab1146105eb578063d6aedc6d14610609578063dd62ed3e14610625576101f0565b8063a457c2d714610535578063a9059cbb14610565578063b03fd85a14610595578063b620743a146105b1576101f0565b806393d60990116100de57806393d60990146104c157806395d89b41146104dd57806399c26c53146104fb5780639f1161c314610517576101f0565b806373ab79251461043b5780637a0f06e71461046b57806381640a9114610489578063880cdc31146104a5576101f0565b8063313ce567116101875780634c420743116101565780634c420743146103a15780634e5fde97146103bf57806363586f39146103db57806370a082311461040b576101f0565b8063313ce5671461031757806337e294d51461033557806339509351146103535780634825fc0d14610383576101f0565b8063100505b9116101c3578063100505b91461028f57806318160ddd146102ad57806322cb364e146102cb57806323b872dd146102e7576101f0565b806306fdde03146101f557806307562e2914610213578063095ea7b31461022f5780630c790fbe1461025f575b600080fd5b6101fd610655565b60405161020a91906137b9565b60405180910390f35b61022d60048036038101906102289190612e9a565b6106e7565b005b61024960048036038101906102449190612e0a565b6108cf565b604051610256919061379e565b60405180910390f35b61027960048036038101906102749190612e46565b6108ed565b6040516102869190613a1b565b60405180910390f35b610297610928565b6040516102a49190613783565b60405180910390f35b6102b561094e565b6040516102c29190613a1b565b60405180910390f35b6102e560048036038101906102e09190612c7c565b610958565b005b61030160048036038101906102fc9190612d05565b611333565b60405161030e919061379e565b60405180910390f35b61031f61142b565b60405161032c9190613a36565b60405180910390f35b61033d611434565b60405161034a9190613783565b60405180910390f35b61036d60048036038101906103689190612e0a565b61145a565b60405161037a919061379e565b60405180910390f35b61038b611506565b6040516103989190613783565b60405180910390f35b6103a961152c565b6040516103b69190613783565b60405180910390f35b6103d960048036038101906103d49190612e9a565b611552565b005b6103f560048036038101906103f09190612c17565b611739565b6040516104029190613a1b565b60405180910390f35b61042560048036038101906104209190612c17565b611751565b6040516104329190613a1b565b60405180910390f35b61045560048036038101906104509190612d54565b611799565b6040516104629190613a1b565b60405180910390f35b610473611926565b6040516104809190613783565b60405180910390f35b6104a3600480360381019061049e9190612e9a565b61194c565b005b6104bf60048036038101906104ba9190612c17565b611b15565b005b6104db60048036038101906104d69190612e9a565b611bf0565b005b6104e5611dba565b6040516104f291906137b9565b60405180910390f35b61051560048036038101906105109190612e9a565b611e4c565b005b61051f612015565b60405161052c9190613783565b60405180910390f35b61054f600480360381019061054a9190612e0a565b61203b565b60405161055c919061379e565b60405180910390f35b61057f600480360381019061057a9190612e0a565b612126565b60405161058c919061379e565b60405180910390f35b6105af60048036038101906105aa9190612e9a565b612144565b005b6105cb60048036038101906105c69190612e9a565b6122b2565b005b6105d561247c565b6040516105e29190613a1b565b60405180910390f35b6105f3612482565b6040516106009190613783565b60405180910390f35b610623600480360381019061061e9190612e0a565b6124a8565b005b61063f600480360381019061063a9190612c40565b612648565b60405161064c9190613a1b565b60405180910390f35b60606003805461066490613c85565b80601f016020809104026020016040519081016040528092919081815260200182805461069090613c85565b80156106dd5780601f106106b2576101008083540402835291602001916106dd565b820191906000526020600020905b8154815290600101906020018083116106c057829003601f168201915b5050505050905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107286126cf565b73ffffffffffffffffffffffffffffffffffffffff161461077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775906139fb565b60405180910390fd5b6000601060405161078e906136f0565b908152602001604051809103902060006107a66126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000816a01a784379d99db420000006107fc9190613bba565b905080831115610841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610838906138bb565b60405180910390fd5b826010604051610850906136f0565b908152602001604051809103902060006108686126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108b19190613ad9565b925050819055506108ca306108c46126cf565b856126d7565b505050565b60006108e36108dc6126cf565b8484612958565b6001905092915050565b601082805160208101820180518482526020830160208501208183528095505050505050602052806000526040600020600091509150505481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166109996126cf565b73ffffffffffffffffffffffffffffffffffffffff16146109ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e6906139bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a56906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b36906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba6906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c16906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c86906138fb565b60405180910390fd5b6010604051610c9d9061371a565b90815260200160405180910390206000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610d199061371a565b908152602001604051809103902060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051610d7690613759565b90815260200160405180910390206000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610df290613759565b908152602001604051809103902060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051610e4f90613744565b90815260200160405180910390206000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610ecb90613744565b908152602001604051809103902060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051610f289061376e565b90815260200160405180910390206000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610fa49061376e565b908152602001604051809103902060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051611001906136f0565b90815260200160405180910390206000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060405161107d906136f0565b908152602001604051809103902060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060106040516110da90613705565b90815260200160405180910390206000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060405161115690613705565b908152602001604051809103902060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050565b60006113408484846126d7565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061138b6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561140b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114029061391b565b60405180910390fd5b61141f856114176126cf565b858403612958565b60019150509392505050565b60006012905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006114fc6114676126cf565b8484600160006114756126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f79190613ad9565b612958565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115936126cf565b73ffffffffffffffffffffffffffffffffffffffff16146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e09061389b565b60405180910390fd5b600060106040516115f99061371a565b908152602001604051809103902060006116116126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008169d3c21bcecceda10000006116669190613bba565b9050808311156116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a2906138bb565b60405180910390fd5b8260106040516116ba9061371a565b908152602001604051809103902060006116d26126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461171b9190613ad9565b925050819055506117343061172e6126cf565b856126d7565b505050565b600e6020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806117bb603c84426117ad9190613bba565b612b2390919063ffffffff16565b905060006010896040516117cf91906136d9565b908152602001604051809103902060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600080891461184f5761184c606461183e8b89612b3990919063ffffffff16565b612b2390919063ffffffff16565b90505b8783101561186d5781816118639190613bba565b935050505061191b565b600061189488611886848a612b4f90919063ffffffff16565b612b2390919063ffffffff16565b9050600089856118a49190613bba565b905060006118cd846118bf8585612b3990919063ffffffff16565b612b6590919063ffffffff16565b90508481116118e5576000965050505050505061191b565b888111156119065784896118f99190613bba565b965050505050505061191b565b84816119129190613bba565b96505050505050505b979650505050505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661198d6126cf565b73ffffffffffffffffffffffffffffffffffffffff16146119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da9061381b565b60405180910390fd5b6000611a436119f06126cf565b6040518060400160405280600381526020017f6c69710000000000000000000000000000000000000000000000000000000000815250602861ab18620402906a05ca4ec2a79a7f67000000600554611799565b905080821115611a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7f906138bb565b60405180910390fd5b816010604051611a9790613705565b90815260200160405180910390206000611aaf6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af89190613ad9565b92505081905550611b1130611b0b6126cf565b846126d7565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b566126cf565b73ffffffffffffffffffffffffffffffffffffffff1614611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba3906139bb565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c316126cf565b73ffffffffffffffffffffffffffffffffffffffff1614611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e9061385b565b60405180910390fd5b6000611ce8611c946126cf565b6040518060400160405280600481526020017f7465616d00000000000000000000000000000000000000000000000000000000815250600062040290620d5de16a108b2a2c28029094000000600554611799565b905080821115611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d24906138bb565b60405180910390fd5b816010604051611d3c90613759565b90815260200160405180910390206000611d546126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d9d9190613ad9565b92505081905550611db630611db06126cf565b846126d7565b5050565b606060048054611dc990613c85565b80601f0160208091040260200160405190810160405280929190818152602001828054611df590613c85565b8015611e425780601f10611e1757610100808354040283529160200191611e42565b820191906000526020600020905b815481529060010190602001808311611e2557829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e8d6126cf565b73ffffffffffffffffffffffffffffffffffffffff1614611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda906138db565b60405180910390fd5b6000611f43611ef06126cf565b6040518060400160405280600981526020017f65636f73797374656d0000000000000000000000000000000000000000000000815250600561ab18620cb2c96a14adf4b7320334b9000000600554611799565b905080821115611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f906138bb565b60405180910390fd5b816010604051611f9790613744565b90815260200160405180910390206000611faf6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff89190613ad9565b925050819055506120113061200b6126cf565b846126d7565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806001600061204a6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fe906139db565b60405180910390fd5b61211b6121126126cf565b85858403612958565b600191505092915050565b600061213a6121336126cf565b84846126d7565b6001905092915050565b60006121e06121516126cf565b6040518060400160405280600b81526020017f7072697661746573616c65000000000000000000000000000000000000000000815250600a6202ac60620c07b1600e600061219d6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600654611799565b905080821115612225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221c906138bb565b60405180910390fd5b8160106040516122349061372f565b9081526020016040518091039020600061224c6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122959190613ad9565b925050819055506122ae306122a86126cf565b846126d7565b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122f36126cf565b73ffffffffffffffffffffffffffffffffffffffff1614612349576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123409061399b565b60405180910390fd5b60006123aa6123566126cf565b6040518060400160405280600781526020017f7265736572766500000000000000000000000000000000000000000000000000815250600062040290620d5de16a108b2a2c28029094000000600554611799565b9050808211156123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e6906138bb565b60405180910390fd5b8160106040516123fe9061376e565b908152602001604051809103902060006124166126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461245f9190613ad9565b92505081905550612478306124726126cf565b846126d7565b5050565b600f5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166124e96126cf565b73ffffffffffffffffffffffffffffffffffffffff161461253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061393b565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008282546125909190613bba565b9250508190555080600f60008282546125a99190613ad9565b925050819055506a14adf4b7320334b9000000600f541115612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f79061387b565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e9061395b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae906137db565b60405180910390fd5b6127c2838383612b7b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f9061383b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128db9190613ad9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161293f9190613a1b565b60405180910390a3612952848484612b80565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf9061397b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2f906137fb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b169190613a1b565b60405180910390a3505050565b60008183612b319190613b2f565b905092915050565b60008183612b479190613b60565b905092915050565b60008183612b5d9190613bba565b905092915050565b60008183612b739190613ad9565b905092915050565b505050565b505050565b6000612b98612b9384613a82565b613a51565b905082815260208101848484011115612bb057600080fd5b612bbb848285613c43565b509392505050565b600081359050612bd281613d84565b92915050565b600082601f830112612be957600080fd5b8135612bf9848260208601612b85565b91505092915050565b600081359050612c1181613d9b565b92915050565b600060208284031215612c2957600080fd5b6000612c3784828501612bc3565b91505092915050565b60008060408385031215612c5357600080fd5b6000612c6185828601612bc3565b9250506020612c7285828601612bc3565b9150509250929050565b60008060008060008060c08789031215612c9557600080fd5b6000612ca389828a01612bc3565b9650506020612cb489828a01612bc3565b9550506040612cc589828a01612bc3565b9450506060612cd689828a01612bc3565b9350506080612ce789828a01612bc3565b92505060a0612cf889828a01612bc3565b9150509295509295509295565b600080600060608486031215612d1a57600080fd5b6000612d2886828701612bc3565b9350506020612d3986828701612bc3565b9250506040612d4a86828701612c02565b9150509250925092565b600080600080600080600060e0888a031215612d6f57600080fd5b6000612d7d8a828b01612bc3565b975050602088013567ffffffffffffffff811115612d9a57600080fd5b612da68a828b01612bd8565b9650506040612db78a828b01612c02565b9550506060612dc88a828b01612c02565b9450506080612dd98a828b01612c02565b93505060a0612dea8a828b01612c02565b92505060c0612dfb8a828b01612c02565b91505092959891949750929550565b60008060408385031215612e1d57600080fd5b6000612e2b85828601612bc3565b9250506020612e3c85828601612c02565b9150509250929050565b60008060408385031215612e5957600080fd5b600083013567ffffffffffffffff811115612e7357600080fd5b612e7f85828601612bd8565b9250506020612e9085828601612bc3565b9150509250929050565b600060208284031215612eac57600080fd5b6000612eba84828501612c02565b91505092915050565b612ecc81613bee565b82525050565b612edb81613c00565b82525050565b6000612eec82613ab2565b612ef68185613abd565b9350612f06818560208601613c52565b612f0f81613d73565b840191505092915050565b6000612f2582613ab2565b612f2f8185613ace565b9350612f3f818560208601613c52565b80840191505092915050565b6000612f58602383613abd565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612fbe600383613ace565b91507f64657800000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b6000612ffe600383613ace565b91507f6c697100000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b600061303e602283613abd565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130a4600a83613ace565b91507f7075626c696373616c65000000000000000000000000000000000000000000006000830152600a82019050919050565b60006130e4602883613abd565b91507f556e617574686f72697a6564206c697175696469747920696e63656e7469766560008301527f732077616c6c65740000000000000000000000000000000000000000000000006020830152604082019050919050565b600061314a602683613abd565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131b0601883613abd565b91507f556e617574686f72697a6564207465616d2077616c6c657400000000000000006000830152602082019050919050565b60006131f0601283613abd565b91507f4d617820616d6f756e74207265616368656400000000000000000000000000006000830152602082019050919050565b6000613230601f83613abd565b91507f556e617574686f72697a6564207075626c69632073616c652077616c6c6574006000830152602082019050919050565b6000613270601883613abd565b91507f576974686472617720616d6f756e7420746f6f206869676800000000000000006000830152602082019050919050565b60006132b0601d83613abd565b91507f556e617574686f72697a65642065636f73797374656d2077616c6c65740000006000830152602082019050919050565b60006132f0600b83613ace565b91507f7072697661746573616c650000000000000000000000000000000000000000006000830152600b82019050919050565b6000613330601b83613abd565b91507f53686f756c64206e6f7420736574207a65726f206164647265737300000000006000830152602082019050919050565b6000613370602883613abd565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133d6600983613ace565b91507f65636f73797374656d00000000000000000000000000000000000000000000006000830152600982019050919050565b6000613416601f83613abd565b91507f4f6e6c79206f776e65722063616e2073657420627579657220746f6b656e73006000830152602082019050919050565b6000613456602583613abd565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134bc602483613abd565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613522601c83613abd565b91507f556e617574686f72697a65642072657365727665732077616c6c6574000000006000830152602082019050919050565b6000613562601d83613abd565b91507f4f6e6c79206f776e65722063616e207570646174652077616c6c6574730000006000830152602082019050919050565b60006135a2600483613ace565b91507f7465616d000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b60006135e2600783613ace565b91507f72657365727665000000000000000000000000000000000000000000000000006000830152600782019050919050565b6000613622602583613abd565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613688601783613abd565b91507f556e617574686f72697a6564206465782077616c6c65740000000000000000006000830152602082019050919050565b6136c481613c2c565b82525050565b6136d381613c36565b82525050565b60006136e58284612f1a565b915081905092915050565b60006136fb82612fb1565b9150819050919050565b600061371082612ff1565b9150819050919050565b600061372582613097565b9150819050919050565b600061373a826132e3565b9150819050919050565b600061374f826133c9565b9150819050919050565b600061376482613595565b9150819050919050565b6000613779826135d5565b9150819050919050565b60006020820190506137986000830184612ec3565b92915050565b60006020820190506137b36000830184612ed2565b92915050565b600060208201905081810360008301526137d38184612ee1565b905092915050565b600060208201905081810360008301526137f481612f4b565b9050919050565b6000602082019050818103600083015261381481613031565b9050919050565b60006020820190508181036000830152613834816130d7565b9050919050565b600060208201905081810360008301526138548161313d565b9050919050565b60006020820190508181036000830152613874816131a3565b9050919050565b60006020820190508181036000830152613894816131e3565b9050919050565b600060208201905081810360008301526138b481613223565b9050919050565b600060208201905081810360008301526138d481613263565b9050919050565b600060208201905081810360008301526138f4816132a3565b9050919050565b6000602082019050818103600083015261391481613323565b9050919050565b6000602082019050818103600083015261393481613363565b9050919050565b6000602082019050818103600083015261395481613409565b9050919050565b6000602082019050818103600083015261397481613449565b9050919050565b60006020820190508181036000830152613994816134af565b9050919050565b600060208201905081810360008301526139b481613515565b9050919050565b600060208201905081810360008301526139d481613555565b9050919050565b600060208201905081810360008301526139f481613615565b9050919050565b60006020820190508181036000830152613a148161367b565b9050919050565b6000602082019050613a3060008301846136bb565b92915050565b6000602082019050613a4b60008301846136ca565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613a7857613a77613d44565b5b8060405250919050565b600067ffffffffffffffff821115613a9d57613a9c613d44565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000613ae482613c2c565b9150613aef83613c2c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b2457613b23613cb7565b5b828201905092915050565b6000613b3a82613c2c565b9150613b4583613c2c565b925082613b5557613b54613ce6565b5b828204905092915050565b6000613b6b82613c2c565b9150613b7683613c2c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613baf57613bae613cb7565b5b828202905092915050565b6000613bc582613c2c565b9150613bd083613c2c565b925082821015613be357613be2613cb7565b5b828203905092915050565b6000613bf982613c0c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613c70578082015181840152602081019050613c55565b83811115613c7f576000848401525b50505050565b60006002820490506001821680613c9d57607f821691505b60208210811415613cb157613cb0613d15565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613d8d81613bee565b8114613d9857600080fd5b50565b613da481613c2c565b8114613daf57600080fd5b5056fea26469706673582212203d72b2129de14afa9bc74af7f53f3a952be4af8d686a22f4c512db83727f80ef64736f6c63430008000033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000005454e564f590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003454e560000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): ENVOY
Arg [1] : symbol (string): ENV

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [3] : 454e564f59000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 454e560000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

21403:8991:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4924:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27877:502;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7091:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22293:76;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21731:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6044:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22983:1382;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7742:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5886:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21785:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8643:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21674:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21838:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24936:538;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22094:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6215:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28990:1399;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22007:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25480:601;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22798:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26087:570;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5143:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26663:612;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21945:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9361:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6555:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28385:520;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27281:590;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22190:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21895:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24397:467;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6793:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4924:100;4978:13;5011:5;5004:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4924:100;:::o;27877:502::-;27959:10;;;;;;;;;;;27943:26;;:12;:10;:12::i;:::-;:26;;;27935:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28006:20;28029:22;:29;;;;;:::i;:::-;;;;;;;;;;;;;:43;28059:12;:10;:12::i;:::-;28029:43;;;;;;;;;;;;;;;;28006:66;;28108:19;28158:12;28130:25;:40;;;;:::i;:::-;28108:62;;28202:11;28187;:26;;28179:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28298:11;28251:22;:29;;;;;:::i;:::-;;;;;;;;;;;;;:43;28281:12;:10;:12::i;:::-;28251:43;;;;;;;;;;;;;;;;:58;;;;;;;:::i;:::-;;;;;;;;28318:51;28336:4;28343:12;:10;:12::i;:::-;28357:11;28318:9;:51::i;:::-;27877:502;;;:::o;7091:169::-;7174:4;7191:39;7200:12;:10;:12::i;:::-;7214:7;7223:6;7191:8;:39::i;:::-;7248:4;7241:11;;7091:169;;;;:::o;22293:76::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21731:32::-;;;;;;;;;;;;;:::o;6044:108::-;6105:7;6132:12;;6125:19;;6044:108;:::o;22983:1382::-;23143:12;;;;;;;;;;;23127:28;;:12;:10;:12::i;:::-;:28;;;23119:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23228:1;23206:24;;:10;:24;;;;23198:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23293:1;23277:18;;:4;:18;;;;23269:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;23363:1;23342:23;;:9;:23;;;;23334:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23432:1;23412:22;;:8;:22;;;;23404:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23496:1;23481:17;;:3;:17;;;;23473:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23560:1;23545:17;;:3;:17;;;;23537:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23654:22;:36;;;;;:::i;:::-;;;;;;;;;;;;;:55;23691:17;;;;;;;;;;;23654:55;;;;;;;;;;;;;;;;23603:22;:36;;;;;:::i;:::-;;;;;;;;;;;;;:48;23640:10;23603:48;;;;;;;;;;;;;;;:106;;;;23755:22;:30;;;;;:::i;:::-;;;;;;;;;;;;;:43;23786:11;;;;;;;;;;;23755:43;;;;;;;;;;;;;;;;23716:22;:30;;;;;:::i;:::-;;;;;;;;;;;;;:36;23747:4;23716:36;;;;;;;;;;;;;;;:82;;;;23854:22;:35;;;;;:::i;:::-;;;;;;;;;;;;;:53;23890:16;;;;;;;;;;;23854:53;;;;;;;;;;;;;;;;23805:22;:35;;;;;:::i;:::-;;;;;;;;;;;;;:46;23841:9;23805:46;;;;;;;;;;;;;;;:102;;;;23960:22;:33;;;;;:::i;:::-;;;;;;;;;;;;;:50;23994:15;;;;;;;;;;;23960:50;;;;;;;;;;;;;;;;23914:22;:33;;;;;:::i;:::-;;;;;;;;;;;;;:43;23948:8;23914:43;;;;;;;;;;;;;;;:96;;;;24054:22;:29;;;;;:::i;:::-;;;;;;;;;;;;;:41;24084:10;;;;;;;;;;;24054:41;;;;;;;;;;;;;;;;24017:22;:29;;;;;:::i;:::-;;;;;;;;;;;;;:34;24047:3;24017:34;;;;;;;;;;;;;;;:78;;;;24139:22;:29;;;;;:::i;:::-;;;;;;;;;;;;;:41;24169:10;;;;;;;;;;;24139:41;;;;;;;;;;;;;;;;24102:22;:29;;;;;:::i;:::-;;;;;;;;;;;;;:34;24132:3;24102:34;;;;;;;;;;;;;;;:78;;;;24209:10;24189:17;;:30;;;;;;;;;;;;;;;;;;24241:4;24227:11;;:18;;;;;;;;;;;;;;;;;;24271:9;24252:16;;:28;;;;;;;;;;;;;;;;;;24305:8;24287:15;;:26;;;;;;;;;;;;;;;;;;24333:3;24320:10;;:16;;;;;;;;;;;;;;;;;;24356:3;24343:10;;:16;;;;;;;;;;;;;;;;;;22983:1382;;;;;;:::o;7742:492::-;7882:4;7899:36;7909:6;7917:9;7928:6;7899:9;:36::i;:::-;7948:24;7975:11;:19;7987:6;7975:19;;;;;;;;;;;;;;;:33;7995:12;:10;:12::i;:::-;7975:33;;;;;;;;;;;;;;;;7948:60;;8047:6;8027:16;:26;;8019:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8134:57;8143:6;8151:12;:10;:12::i;:::-;8184:6;8165:16;:25;8134:8;:57::i;:::-;8222:4;8215:11;;;7742:492;;;;;:::o;5886:93::-;5944:5;5969:2;5962:9;;5886:93;:::o;21785:26::-;;;;;;;;;;;;;:::o;8643:215::-;8731:4;8748:80;8757:12;:10;:12::i;:::-;8771:7;8817:10;8780:11;:25;8792:12;:10;:12::i;:::-;8780:25;;;;;;;;;;;;;;;:34;8806:7;8780:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;8748:8;:80::i;:::-;8846:4;8839:11;;8643:215;;;;:::o;21674:27::-;;;;;;;;;;;;;:::o;21838:31::-;;;;;;;;;;;;;:::o;24936:538::-;25025:17;;;;;;;;;;;25009:33;;:12;:10;:12::i;:::-;:33;;;25001:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25087:20;25110:22;:36;;;;;:::i;:::-;;;;;;;;;;;;;:50;25147:12;:10;:12::i;:::-;25110:50;;;;;;;;;;;;;;;;25087:73;;25196:19;25246:12;25218:25;:40;;;;:::i;:::-;25196:62;;25290:11;25275;:26;;25267:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;25393:11;25339:22;:36;;;;;:::i;:::-;;;;;;;;;;;;;:50;25376:12;:10;:12::i;:::-;25339:50;;;;;;;;;;;;;;;;:65;;;;;;;:::i;:::-;;;;;;;;25413:51;25431:4;25438:12;:10;:12::i;:::-;25452:11;25413:9;:51::i;:::-;24936:538;;;:::o;22094:47::-;;;;;;;;;;;;;;;;;:::o;6215:127::-;6289:7;6316:9;:18;6326:7;6316:18;;;;;;;;;;;;;;;;6309:25;;6215:127;;;:::o;28990:1399::-;29192:7;29214:19;29236:37;29270:2;29255:9;29237:15;:27;;;;:::i;:::-;29236:33;;:37;;;;:::i;:::-;29214:59;;29315:23;29341:22;29364:10;29341:34;;;;;;:::i;:::-;;;;;;;;;;;;;:42;29376:6;29341:42;;;;;;;;;;;;;;;;29315:68;;29415:21;29472:1;29451:17;:22;29447:104;;29500:43;29539:3;29500:34;29516:17;29500:11;:15;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;29484:59;;29447:104;29609:12;29587:11;:35;29583:96;;;29656:15;29640:13;:31;;;;:::i;:::-;29633:38;;;;;;;29583:96;29733:28;29764:50;29799:14;29764:30;29780:13;29764:11;:15;;:30;;;;:::i;:::-;:34;;:50;;;;:::i;:::-;29733:81;;29861:23;29909:12;29887:11;:35;;;;:::i;:::-;29861:61;;29995:22;30020:60;30066:13;30020:41;30040:20;30020:15;:19;;:41;;;;:::i;:::-;:45;;:60;;;;:::i;:::-;29995:85;;30149:15;30131:14;:33;30127:64;;30182:1;30175:8;;;;;;;;;;30127:64;30255:11;30238:14;:28;30234:87;;;30298:15;30284:11;:29;;;;:::i;:::-;30277:36;;;;;;;;;;30234:87;30368:15;30351:14;:32;;;;:::i;:::-;30344:39;;;;;;;;28990:1399;;;;;;;;;;:::o;22007:25::-;;;;;;;;;;;;;:::o;25480:601::-;25562:10;;;;;;;;;;;25546:26;;:12;:10;:12::i;:::-;:26;;;25538:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;25747:19;25769:97;25787:12;:10;:12::i;:::-;25769:97;;;;;;;;;;;;;;;;;25808:2;25812:5;25819:6;25827:25;25854:11;;25769:17;:97::i;:::-;25747:119;;25902:11;25887;:26;;25879:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;25998:11;25951:22;:29;;;;;:::i;:::-;;;;;;;;;;;;;:43;25981:12;:10;:12::i;:::-;25951:43;;;;;;;;;;;;;;;;:58;;;;;;;:::i;:::-;;;;;;;;26018:51;26036:4;26043:12;:10;:12::i;:::-;26057:11;26018:9;:51::i;:::-;25480:601;;:::o;22798:158::-;22874:12;;;;;;;;;;;22858:28;;:12;:10;:12::i;:::-;:28;;;22850:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22944:5;22929:12;;:20;;;;;;;;;;;;;;;;;;22798:158;:::o;26087:570::-;26170:11;;;;;;;;;;;26154:27;;:12;:10;:12::i;:::-;:27;;;26146:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26324:19;26346:99;26364:12;:10;:12::i;:::-;26346:99;;;;;;;;;;;;;;;;;26386:1;26389:6;26397;26405:26;26433:11;;26346:17;:99::i;:::-;26324:121;;26481:11;26466;:26;;26458:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;26578:11;26530:22;:30;;;;;:::i;:::-;;;;;;;;;;;;;:44;26561:12;:10;:12::i;:::-;26530:44;;;;;;;;;;;;;;;;:59;;;;;;;:::i;:::-;;;;;;;;26598:51;26616:4;26623:12;:10;:12::i;:::-;26637:11;26598:9;:51::i;:::-;26087:570;;:::o;5143:104::-;5199:13;5232:7;5225:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5143:104;:::o;26663:612::-;26751:16;;;;;;;;;;;26735:32;;:12;:10;:12::i;:::-;:32;;;26727:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26933:19;26955:103;26973:12;:10;:12::i;:::-;26955:103;;;;;;;;;;;;;;;;;27000:1;27003:5;27010:6;27018:26;27046:11;;26955:17;:103::i;:::-;26933:125;;27094:11;27079;:26;;27071:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27196:11;27143:22;:35;;;;;:::i;:::-;;;;;;;;;;;;;:49;27179:12;:10;:12::i;:::-;27143:49;;;;;;;;;;;;;;;;:64;;;;;;;:::i;:::-;;;;;;;;27216:51;27234:4;27241:12;:10;:12::i;:::-;27255:11;27216:9;:51::i;:::-;26663:612;;:::o;21945:25::-;;;;;;;;;;;;;:::o;9361:413::-;9454:4;9471:24;9498:11;:25;9510:12;:10;:12::i;:::-;9498:25;;;;;;;;;;;;;;;:34;9524:7;9498:34;;;;;;;;;;;;;;;;9471:61;;9571:15;9551:16;:35;;9543:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9664:67;9673:12;:10;:12::i;:::-;9687:7;9715:15;9696:16;:34;9664:8;:67::i;:::-;9762:4;9755:11;;;9361:413;;;;:::o;6555:175::-;6641:4;6658:42;6668:12;:10;:12::i;:::-;6682:9;6693:6;6658:9;:42::i;:::-;6718:4;6711:11;;6555:175;;;;:::o;28385:520::-;28556:19;28578:106;28596:12;:10;:12::i;:::-;28578:106;;;;;;;;;;;;;;;;;28625:2;28629:6;28637;28645:12;:26;28658:12;:10;:12::i;:::-;28645:26;;;;;;;;;;;;;;;;28673:10;;28578:17;:106::i;:::-;28556:128;;28720:11;28705;:26;;28697:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28824:11;28769:22;:37;;;;;:::i;:::-;;;;;;;;;;;;;:51;28807:12;:10;:12::i;:::-;28769:51;;;;;;;;;;;;;;;;:66;;;;;;;:::i;:::-;;;;;;;;28844:51;28862:4;28869:12;:10;:12::i;:::-;28883:11;28844:9;:51::i;:::-;28385:520;;:::o;27281:590::-;27368:15;;;;;;;;;;;27352:31;;:12;:10;:12::i;:::-;:31;;;27344:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;27532:19;27554:102;27572:12;:10;:12::i;:::-;27554:102;;;;;;;;;;;;;;;;;27597:1;27600:6;27608;27616:26;27644:11;;27554:17;:102::i;:::-;27532:124;;27692:11;27677;:26;;27669:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27792:11;27741:22;:33;;;;;:::i;:::-;;;;;;;;;;;;;:47;27775:12;:10;:12::i;:::-;27741:47;;;;;;;;;;;;;;;;:62;;;;;;;:::i;:::-;;;;;;;;27812:51;27830:4;27837:12;:10;:12::i;:::-;27851:11;27812:9;:51::i;:::-;27281:590;;:::o;22190:32::-;;;;:::o;21895:30::-;;;;;;;;;;;;;:::o;24397:467::-;24497:12;;;;;;;;;;;24481:28;;:12;:10;:12::i;:::-;:28;;;24473:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;24596:12;:19;24609:5;24596:19;;;;;;;;;;;;;;;;24575:17;;:40;;;;;;;:::i;:::-;;;;;;;;24643:11;24622:17;;:32;;;;;;;:::i;:::-;;;;;;;;24748:26;24727:17;;:47;;24719:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;24847:11;24825:12;:19;24838:5;24825:19;;;;;;;;;;;;;;;:33;;;;24397:467;;:::o;6793:151::-;6882:7;6909:11;:18;6921:5;6909:18;;;;;;;;;;;;;;;:27;6928:7;6909:27;;;;;;;;;;;;;;;;6902:34;;6793:151;;;;:::o;637:98::-;690:7;717:10;710:17;;637:98;:::o;10264:733::-;10422:1;10404:20;;:6;:20;;;;10396:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10506:1;10485:23;;:9;:23;;;;10477:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10561:47;10582:6;10590:9;10601:6;10561:20;:47::i;:::-;10621:21;10645:9;:17;10655:6;10645:17;;;;;;;;;;;;;;;;10621:41;;10698:6;10681:13;:23;;10673:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;10819:6;10803:13;:22;10783:9;:17;10793:6;10783:17;;;;;;;;;;;;;;;:42;;;;10871:6;10847:9;:20;10857:9;10847:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;10912:9;10895:35;;10904:6;10895:35;;;10923:6;10895:35;;;;;;:::i;:::-;;;;;;;;10943:46;10963:6;10971:9;10982:6;10943:19;:46::i;:::-;10264:733;;;;:::o;13045:380::-;13198:1;13181:19;;:5;:19;;;;13173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13279:1;13260:21;;:7;:21;;;;13252:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13363:6;13333:11;:18;13345:5;13333:18;;;;;;;;;;;;;;;:27;13352:7;13333:27;;;;;;;;;;;;;;;:36;;;;13401:7;13385:32;;13394:5;13385:32;;;13410:6;13385:32;;;;;;:::i;:::-;;;;;;;;13045:380;;;:::o;18373:98::-;18431:7;18462:1;18458;:5;;;;:::i;:::-;18451:12;;18373:98;;;;:::o;17974:::-;18032:7;18063:1;18059;:5;;;;:::i;:::-;18052:12;;17974:98;;;;:::o;17617:::-;17675:7;17706:1;17702;:5;;;;:::i;:::-;17695:12;;17617:98;;;;:::o;17236:::-;17294:7;17325:1;17321;:5;;;;:::i;:::-;17314:12;;17236:98;;;;:::o;14025:125::-;;;;:::o;14754:124::-;;;;:::o;7:344:1:-;;110:65;125:49;167:6;125:49;:::i;:::-;110:65;:::i;:::-;101:74;;198:6;191:5;184:21;236:4;229:5;225:16;274:3;265:6;260:3;256:16;253:25;250:2;;;291:1;288;281:12;250:2;304:41;338:6;333:3;328;304:41;:::i;:::-;91:260;;;;;;:::o;357:139::-;;441:6;428:20;419:29;;457:33;484:5;457:33;:::i;:::-;409:87;;;;:::o;516:273::-;;621:3;614:4;606:6;602:17;598:27;588:2;;639:1;636;629:12;588:2;679:6;666:20;704:79;779:3;771:6;764:4;756:6;752:17;704:79;:::i;:::-;695:88;;578:211;;;;;:::o;795:139::-;;879:6;866:20;857:29;;895:33;922:5;895:33;:::i;:::-;847:87;;;;:::o;940:262::-;;1048:2;1036:9;1027:7;1023:23;1019:32;1016:2;;;1064:1;1061;1054:12;1016:2;1107:1;1132:53;1177:7;1168:6;1157:9;1153:22;1132:53;:::i;:::-;1122:63;;1078:117;1006:196;;;;:::o;1208:407::-;;;1333:2;1321:9;1312:7;1308:23;1304:32;1301:2;;;1349:1;1346;1339:12;1301:2;1392:1;1417:53;1462:7;1453:6;1442:9;1438:22;1417:53;:::i;:::-;1407:63;;1363:117;1519:2;1545:53;1590:7;1581:6;1570:9;1566:22;1545:53;:::i;:::-;1535:63;;1490:118;1291:324;;;;;:::o;1621:990::-;;;;;;;1814:3;1802:9;1793:7;1789:23;1785:33;1782:2;;;1831:1;1828;1821:12;1782:2;1874:1;1899:53;1944:7;1935:6;1924:9;1920:22;1899:53;:::i;:::-;1889:63;;1845:117;2001:2;2027:53;2072:7;2063:6;2052:9;2048:22;2027:53;:::i;:::-;2017:63;;1972:118;2129:2;2155:53;2200:7;2191:6;2180:9;2176:22;2155:53;:::i;:::-;2145:63;;2100:118;2257:2;2283:53;2328:7;2319:6;2308:9;2304:22;2283:53;:::i;:::-;2273:63;;2228:118;2385:3;2412:53;2457:7;2448:6;2437:9;2433:22;2412:53;:::i;:::-;2402:63;;2356:119;2514:3;2541:53;2586:7;2577:6;2566:9;2562:22;2541:53;:::i;:::-;2531:63;;2485:119;1772:839;;;;;;;;:::o;2617:552::-;;;;2759:2;2747:9;2738:7;2734:23;2730:32;2727:2;;;2775:1;2772;2765:12;2727:2;2818:1;2843:53;2888:7;2879:6;2868:9;2864:22;2843:53;:::i;:::-;2833:63;;2789:117;2945:2;2971:53;3016:7;3007:6;2996:9;2992:22;2971:53;:::i;:::-;2961:63;;2916:118;3073:2;3099:53;3144:7;3135:6;3124:9;3120:22;3099:53;:::i;:::-;3089:63;;3044:118;2717:452;;;;;:::o;3175:1249::-;;;;;;;;3395:3;3383:9;3374:7;3370:23;3366:33;3363:2;;;3412:1;3409;3402:12;3363:2;3455:1;3480:53;3525:7;3516:6;3505:9;3501:22;3480:53;:::i;:::-;3470:63;;3426:117;3610:2;3599:9;3595:18;3582:32;3641:18;3633:6;3630:30;3627:2;;;3673:1;3670;3663:12;3627:2;3701:63;3756:7;3747:6;3736:9;3732:22;3701:63;:::i;:::-;3691:73;;3553:221;3813:2;3839:53;3884:7;3875:6;3864:9;3860:22;3839:53;:::i;:::-;3829:63;;3784:118;3941:2;3967:53;4012:7;4003:6;3992:9;3988:22;3967:53;:::i;:::-;3957:63;;3912:118;4069:3;4096:53;4141:7;4132:6;4121:9;4117:22;4096:53;:::i;:::-;4086:63;;4040:119;4198:3;4225:53;4270:7;4261:6;4250:9;4246:22;4225:53;:::i;:::-;4215:63;;4169:119;4327:3;4354:53;4399:7;4390:6;4379:9;4375:22;4354:53;:::i;:::-;4344:63;;4298:119;3353:1071;;;;;;;;;;:::o;4430:407::-;;;4555:2;4543:9;4534:7;4530:23;4526:32;4523:2;;;4571:1;4568;4561:12;4523:2;4614:1;4639:53;4684:7;4675:6;4664:9;4660:22;4639:53;:::i;:::-;4629:63;;4585:117;4741:2;4767:53;4812:7;4803:6;4792:9;4788:22;4767:53;:::i;:::-;4757:63;;4712:118;4513:324;;;;;:::o;4843:520::-;;;4978:2;4966:9;4957:7;4953:23;4949:32;4946:2;;;4994:1;4991;4984:12;4946:2;5065:1;5054:9;5050:17;5037:31;5095:18;5087:6;5084:30;5081:2;;;5127:1;5124;5117:12;5081:2;5155:63;5210:7;5201:6;5190:9;5186:22;5155:63;:::i;:::-;5145:73;;5008:220;5267:2;5293:53;5338:7;5329:6;5318:9;5314:22;5293:53;:::i;:::-;5283:63;;5238:118;4936:427;;;;;:::o;5369:262::-;;5477:2;5465:9;5456:7;5452:23;5448:32;5445:2;;;5493:1;5490;5483:12;5445:2;5536:1;5561:53;5606:7;5597:6;5586:9;5582:22;5561:53;:::i;:::-;5551:63;;5507:117;5435:196;;;;:::o;5637:118::-;5724:24;5742:5;5724:24;:::i;:::-;5719:3;5712:37;5702:53;;:::o;5761:109::-;5842:21;5857:5;5842:21;:::i;:::-;5837:3;5830:34;5820:50;;:::o;5876:364::-;;5992:39;6025:5;5992:39;:::i;:::-;6047:71;6111:6;6106:3;6047:71;:::i;:::-;6040:78;;6127:52;6172:6;6167:3;6160:4;6153:5;6149:16;6127:52;:::i;:::-;6204:29;6226:6;6204:29;:::i;:::-;6199:3;6195:39;6188:46;;5968:272;;;;;:::o;6246:377::-;;6380:39;6413:5;6380:39;:::i;:::-;6435:89;6517:6;6512:3;6435:89;:::i;:::-;6428:96;;6533:52;6578:6;6573:3;6566:4;6559:5;6555:16;6533:52;:::i;:::-;6610:6;6605:3;6601:16;6594:23;;6356:267;;;;;:::o;6629:367::-;;6792:67;6856:2;6851:3;6792:67;:::i;:::-;6785:74;;6889:34;6885:1;6880:3;6876:11;6869:55;6955:5;6950:2;6945:3;6941:12;6934:27;6987:2;6982:3;6978:12;6971:19;;6775:221;;;:::o;7002:335::-;;7183:84;7265:1;7260:3;7183:84;:::i;:::-;7176:91;;7297:5;7293:1;7288:3;7284:11;7277:26;7329:1;7324:3;7320:11;7313:18;;7166:171;;;:::o;7343:335::-;;7524:84;7606:1;7601:3;7524:84;:::i;:::-;7517:91;;7638:5;7634:1;7629:3;7625:11;7618:26;7670:1;7665:3;7661:11;7654:18;;7507:171;;;:::o;7684:366::-;;7847:67;7911:2;7906:3;7847:67;:::i;:::-;7840:74;;7944:34;7940:1;7935:3;7931:11;7924:55;8010:4;8005:2;8000:3;7996:12;7989:26;8041:2;8036:3;8032:12;8025:19;;7830:220;;;:::o;8056:344::-;;8237:85;8319:2;8314:3;8237:85;:::i;:::-;8230:92;;8352:12;8348:1;8343:3;8339:11;8332:33;8391:2;8386:3;8382:12;8375:19;;8220:180;;;:::o;8406:372::-;;8569:67;8633:2;8628:3;8569:67;:::i;:::-;8562:74;;8666:34;8662:1;8657:3;8653:11;8646:55;8732:10;8727:2;8722:3;8718:12;8711:32;8769:2;8764:3;8760:12;8753:19;;8552:226;;;:::o;8784:370::-;;8947:67;9011:2;9006:3;8947:67;:::i;:::-;8940:74;;9044:34;9040:1;9035:3;9031:11;9024:55;9110:8;9105:2;9100:3;9096:12;9089:30;9145:2;9140:3;9136:12;9129:19;;8930:224;;;:::o;9160:322::-;;9323:67;9387:2;9382:3;9323:67;:::i;:::-;9316:74;;9420:26;9416:1;9411:3;9407:11;9400:47;9473:2;9468:3;9464:12;9457:19;;9306:176;;;:::o;9488:316::-;;9651:67;9715:2;9710:3;9651:67;:::i;:::-;9644:74;;9748:20;9744:1;9739:3;9735:11;9728:41;9795:2;9790:3;9786:12;9779:19;;9634:170;;;:::o;9810:329::-;;9973:67;10037:2;10032:3;9973:67;:::i;:::-;9966:74;;10070:33;10066:1;10061:3;10057:11;10050:54;10130:2;10125:3;10121:12;10114:19;;9956:183;;;:::o;10145:322::-;;10308:67;10372:2;10367:3;10308:67;:::i;:::-;10301:74;;10405:26;10401:1;10396:3;10392:11;10385:47;10458:2;10453:3;10449:12;10442:19;;10291:176;;;:::o;10473:327::-;;10636:67;10700:2;10695:3;10636:67;:::i;:::-;10629:74;;10733:31;10729:1;10724:3;10720:11;10713:52;10791:2;10786:3;10782:12;10775:19;;10619:181;;;:::o;10806:345::-;;10987:85;11069:2;11064:3;10987:85;:::i;:::-;10980:92;;11102:13;11098:1;11093:3;11089:11;11082:34;11142:2;11137:3;11133:12;11126:19;;10970:181;;;:::o;11157:325::-;;11320:67;11384:2;11379:3;11320:67;:::i;:::-;11313:74;;11417:29;11413:1;11408:3;11404:11;11397:50;11473:2;11468:3;11464:12;11457:19;;11303:179;;;:::o;11488:372::-;;11651:67;11715:2;11710:3;11651:67;:::i;:::-;11644:74;;11748:34;11744:1;11739:3;11735:11;11728:55;11814:10;11809:2;11804:3;11800:12;11793:32;11851:2;11846:3;11842:12;11835:19;;11634:226;;;:::o;11866:341::-;;12047:84;12129:1;12124:3;12047:84;:::i;:::-;12040:91;;12161:11;12157:1;12152:3;12148:11;12141:32;12199:1;12194:3;12190:11;12183:18;;12030:177;;;:::o;12213:329::-;;12376:67;12440:2;12435:3;12376:67;:::i;:::-;12369:74;;12473:33;12469:1;12464:3;12460:11;12453:54;12533:2;12528:3;12524:12;12517:19;;12359:183;;;:::o;12548:369::-;;12711:67;12775:2;12770:3;12711:67;:::i;:::-;12704:74;;12808:34;12804:1;12799:3;12795:11;12788:55;12874:7;12869:2;12864:3;12860:12;12853:29;12908:2;12903:3;12899:12;12892:19;;12694:223;;;:::o;12923:368::-;;13086:67;13150:2;13145:3;13086:67;:::i;:::-;13079:74;;13183:34;13179:1;13174:3;13170:11;13163:55;13249:6;13244:2;13239:3;13235:12;13228:28;13282:2;13277:3;13273:12;13266:19;;13069:222;;;:::o;13297:326::-;;13460:67;13524:2;13519:3;13460:67;:::i;:::-;13453:74;;13557:30;13553:1;13548:3;13544:11;13537:51;13614:2;13609:3;13605:12;13598:19;;13443:180;;;:::o;13629:327::-;;13792:67;13856:2;13851:3;13792:67;:::i;:::-;13785:74;;13889:31;13885:1;13880:3;13876:11;13869:52;13947:2;13942:3;13938:12;13931:19;;13775:181;;;:::o;13962:336::-;;14143:84;14225:1;14220:3;14143:84;:::i;:::-;14136:91;;14257:6;14253:1;14248:3;14244:11;14237:27;14290:1;14285:3;14281:11;14274:18;;14126:172;;;:::o;14304:339::-;;14485:84;14567:1;14562:3;14485:84;:::i;:::-;14478:91;;14599:9;14595:1;14590:3;14586:11;14579:30;14635:1;14630:3;14626:11;14619:18;;14468:175;;;:::o;14649:369::-;;14812:67;14876:2;14871:3;14812:67;:::i;:::-;14805:74;;14909:34;14905:1;14900:3;14896:11;14889:55;14975:7;14970:2;14965:3;14961:12;14954:29;15009:2;15004:3;15000:12;14993:19;;14795:223;;;:::o;15024:321::-;;15187:67;15251:2;15246:3;15187:67;:::i;:::-;15180:74;;15284:25;15280:1;15275:3;15271:11;15264:46;15336:2;15331:3;15327:12;15320:19;;15170:175;;;:::o;15351:118::-;15438:24;15456:5;15438:24;:::i;:::-;15433:3;15426:37;15416:53;;:::o;15475:112::-;15558:22;15574:5;15558:22;:::i;:::-;15553:3;15546:35;15536:51;;:::o;15593:275::-;;15747:95;15838:3;15829:6;15747:95;:::i;:::-;15740:102;;15859:3;15852:10;;15729:139;;;;:::o;15874:381::-;;16081:148;16225:3;16081:148;:::i;:::-;16074:155;;16246:3;16239:10;;16063:192;;;:::o;16261:381::-;;16468:148;16612:3;16468:148;:::i;:::-;16461:155;;16633:3;16626:10;;16450:192;;;:::o;16648:381::-;;16855:148;16999:3;16855:148;:::i;:::-;16848:155;;17020:3;17013:10;;16837:192;;;:::o;17035:381::-;;17242:148;17386:3;17242:148;:::i;:::-;17235:155;;17407:3;17400:10;;17224:192;;;:::o;17422:381::-;;17629:148;17773:3;17629:148;:::i;:::-;17622:155;;17794:3;17787:10;;17611:192;;;:::o;17809:381::-;;18016:148;18160:3;18016:148;:::i;:::-;18009:155;;18181:3;18174:10;;17998:192;;;:::o;18196:381::-;;18403:148;18547:3;18403:148;:::i;:::-;18396:155;;18568:3;18561:10;;18385:192;;;:::o;18583:222::-;;18714:2;18703:9;18699:18;18691:26;;18727:71;18795:1;18784:9;18780:17;18771:6;18727:71;:::i;:::-;18681:124;;;;:::o;18811:210::-;;18936:2;18925:9;18921:18;18913:26;;18949:65;19011:1;19000:9;18996:17;18987:6;18949:65;:::i;:::-;18903:118;;;;:::o;19027:313::-;;19178:2;19167:9;19163:18;19155:26;;19227:9;19221:4;19217:20;19213:1;19202:9;19198:17;19191:47;19255:78;19328:4;19319:6;19255:78;:::i;:::-;19247:86;;19145:195;;;;:::o;19346:419::-;;19550:2;19539:9;19535:18;19527:26;;19599:9;19593:4;19589:20;19585:1;19574:9;19570:17;19563:47;19627:131;19753:4;19627:131;:::i;:::-;19619:139;;19517:248;;;:::o;19771:419::-;;19975:2;19964:9;19960:18;19952:26;;20024:9;20018:4;20014:20;20010:1;19999:9;19995:17;19988:47;20052:131;20178:4;20052:131;:::i;:::-;20044:139;;19942:248;;;:::o;20196:419::-;;20400:2;20389:9;20385:18;20377:26;;20449:9;20443:4;20439:20;20435:1;20424:9;20420:17;20413:47;20477:131;20603:4;20477:131;:::i;:::-;20469:139;;20367:248;;;:::o;20621:419::-;;20825:2;20814:9;20810:18;20802:26;;20874:9;20868:4;20864:20;20860:1;20849:9;20845:17;20838:47;20902:131;21028:4;20902:131;:::i;:::-;20894:139;;20792:248;;;:::o;21046:419::-;;21250:2;21239:9;21235:18;21227:26;;21299:9;21293:4;21289:20;21285:1;21274:9;21270:17;21263:47;21327:131;21453:4;21327:131;:::i;:::-;21319:139;;21217:248;;;:::o;21471:419::-;;21675:2;21664:9;21660:18;21652:26;;21724:9;21718:4;21714:20;21710:1;21699:9;21695:17;21688:47;21752:131;21878:4;21752:131;:::i;:::-;21744:139;;21642:248;;;:::o;21896:419::-;;22100:2;22089:9;22085:18;22077:26;;22149:9;22143:4;22139:20;22135:1;22124:9;22120:17;22113:47;22177:131;22303:4;22177:131;:::i;:::-;22169:139;;22067:248;;;:::o;22321:419::-;;22525:2;22514:9;22510:18;22502:26;;22574:9;22568:4;22564:20;22560:1;22549:9;22545:17;22538:47;22602:131;22728:4;22602:131;:::i;:::-;22594:139;;22492:248;;;:::o;22746:419::-;;22950:2;22939:9;22935:18;22927:26;;22999:9;22993:4;22989:20;22985:1;22974:9;22970:17;22963:47;23027:131;23153:4;23027:131;:::i;:::-;23019:139;;22917:248;;;:::o;23171:419::-;;23375:2;23364:9;23360:18;23352:26;;23424:9;23418:4;23414:20;23410:1;23399:9;23395:17;23388:47;23452:131;23578:4;23452:131;:::i;:::-;23444:139;;23342:248;;;:::o;23596:419::-;;23800:2;23789:9;23785:18;23777:26;;23849:9;23843:4;23839:20;23835:1;23824:9;23820:17;23813:47;23877:131;24003:4;23877:131;:::i;:::-;23869:139;;23767:248;;;:::o;24021:419::-;;24225:2;24214:9;24210:18;24202:26;;24274:9;24268:4;24264:20;24260:1;24249:9;24245:17;24238:47;24302:131;24428:4;24302:131;:::i;:::-;24294:139;;24192:248;;;:::o;24446:419::-;;24650:2;24639:9;24635:18;24627:26;;24699:9;24693:4;24689:20;24685:1;24674:9;24670:17;24663:47;24727:131;24853:4;24727:131;:::i;:::-;24719:139;;24617:248;;;:::o;24871:419::-;;25075:2;25064:9;25060:18;25052:26;;25124:9;25118:4;25114:20;25110:1;25099:9;25095:17;25088:47;25152:131;25278:4;25152:131;:::i;:::-;25144:139;;25042:248;;;:::o;25296:419::-;;25500:2;25489:9;25485:18;25477:26;;25549:9;25543:4;25539:20;25535:1;25524:9;25520:17;25513:47;25577:131;25703:4;25577:131;:::i;:::-;25569:139;;25467:248;;;:::o;25721:419::-;;25925:2;25914:9;25910:18;25902:26;;25974:9;25968:4;25964:20;25960:1;25949:9;25945:17;25938:47;26002:131;26128:4;26002:131;:::i;:::-;25994:139;;25892:248;;;:::o;26146:419::-;;26350:2;26339:9;26335:18;26327:26;;26399:9;26393:4;26389:20;26385:1;26374:9;26370:17;26363:47;26427:131;26553:4;26427:131;:::i;:::-;26419:139;;26317:248;;;:::o;26571:419::-;;26775:2;26764:9;26760:18;26752:26;;26824:9;26818:4;26814:20;26810:1;26799:9;26795:17;26788:47;26852:131;26978:4;26852:131;:::i;:::-;26844:139;;26742:248;;;:::o;26996:222::-;;27127:2;27116:9;27112:18;27104:26;;27140:71;27208:1;27197:9;27193:17;27184:6;27140:71;:::i;:::-;27094:124;;;;:::o;27224:214::-;;27351:2;27340:9;27336:18;27328:26;;27364:67;27428:1;27417:9;27413:17;27404:6;27364:67;:::i;:::-;27318:120;;;;:::o;27444:283::-;;27510:2;27504:9;27494:19;;27552:4;27544:6;27540:17;27659:6;27647:10;27644:22;27623:18;27611:10;27608:34;27605:62;27602:2;;;27670:18;;:::i;:::-;27602:2;27710:10;27706:2;27699:22;27484:243;;;;:::o;27733:332::-;;27885:18;27877:6;27874:30;27871:2;;;27907:18;;:::i;:::-;27871:2;27992:4;27988:9;27981:4;27973:6;27969:17;27965:33;27957:41;;28053:4;28047;28043:15;28035:23;;27800:265;;;:::o;28071:99::-;;28157:5;28151:12;28141:22;;28130:40;;;:::o;28176:169::-;;28294:6;28289:3;28282:19;28334:4;28329:3;28325:14;28310:29;;28272:73;;;;:::o;28351:148::-;;28490:3;28475:18;;28465:34;;;;:::o;28505:305::-;;28564:20;28582:1;28564:20;:::i;:::-;28559:25;;28598:20;28616:1;28598:20;:::i;:::-;28593:25;;28752:1;28684:66;28680:74;28677:1;28674:81;28671:2;;;28758:18;;:::i;:::-;28671:2;28802:1;28799;28795:9;28788:16;;28549:261;;;;:::o;28816:185::-;;28873:20;28891:1;28873:20;:::i;:::-;28868:25;;28907:20;28925:1;28907:20;:::i;:::-;28902:25;;28946:1;28936:2;;28951:18;;:::i;:::-;28936:2;28993:1;28990;28986:9;28981:14;;28858:143;;;;:::o;29007:348::-;;29070:20;29088:1;29070:20;:::i;:::-;29065:25;;29104:20;29122:1;29104:20;:::i;:::-;29099:25;;29292:1;29224:66;29220:74;29217:1;29214:81;29209:1;29202:9;29195:17;29191:105;29188:2;;;29299:18;;:::i;:::-;29188:2;29347:1;29344;29340:9;29329:20;;29055:300;;;;:::o;29361:191::-;;29421:20;29439:1;29421:20;:::i;:::-;29416:25;;29455:20;29473:1;29455:20;:::i;:::-;29450:25;;29494:1;29491;29488:8;29485:2;;;29499:18;;:::i;:::-;29485:2;29544:1;29541;29537:9;29529:17;;29406:146;;;;:::o;29558:96::-;;29624:24;29642:5;29624:24;:::i;:::-;29613:35;;29603:51;;;:::o;29660:90::-;;29737:5;29730:13;29723:21;29712:32;;29702:48;;;:::o;29756:126::-;;29833:42;29826:5;29822:54;29811:65;;29801:81;;;:::o;29888:77::-;;29954:5;29943:16;;29933:32;;;:::o;29971:86::-;;30046:4;30039:5;30035:16;30024:27;;30014:43;;;:::o;30063:154::-;30147:6;30142:3;30137;30124:30;30209:1;30200:6;30195:3;30191:16;30184:27;30114:103;;;:::o;30223:307::-;30291:1;30301:113;30315:6;30312:1;30309:13;30301:113;;;30400:1;30395:3;30391:11;30385:18;30381:1;30376:3;30372:11;30365:39;30337:2;30334:1;30330:10;30325:15;;30301:113;;;30432:6;30429:1;30426:13;30423:2;;;30512:1;30503:6;30498:3;30494:16;30487:27;30423:2;30272:258;;;;:::o;30536:320::-;;30617:1;30611:4;30607:12;30597:22;;30664:1;30658:4;30654:12;30685:18;30675:2;;30741:4;30733:6;30729:17;30719:27;;30675:2;30803;30795:6;30792:14;30772:18;30769:38;30766:2;;;30822:18;;:::i;:::-;30766:2;30587:269;;;;:::o;30862:180::-;30910:77;30907:1;30900:88;31007:4;31004:1;30997:15;31031:4;31028:1;31021:15;31048:180;31096:77;31093:1;31086:88;31193:4;31190:1;31183:15;31217:4;31214:1;31207:15;31234:180;31282:77;31279:1;31272:88;31379:4;31376:1;31369:15;31403:4;31400:1;31393:15;31420:180;31468:77;31465:1;31458:88;31565:4;31562:1;31555:15;31589:4;31586:1;31579:15;31606:102;;31698:2;31694:7;31689:2;31682:5;31678:14;31674:28;31664:38;;31654:54;;;:::o;31714:122::-;31787:24;31805:5;31787:24;:::i;:::-;31780:5;31777:35;31767:2;;31826:1;31823;31816:12;31767:2;31757:79;:::o;31842:122::-;31915:24;31933:5;31915:24;:::i;:::-;31908:5;31905:35;31895:2;;31954:1;31951;31944:12;31895:2;31885:79;:::o

Swarm Source

ipfs://3d72b2129de14afa9bc74af7f53f3a952be4af8d686a22f4c512db83727f80ef

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Our goal is to build a new kind of product suite that brings utility to NFTs, fueled by the utility token ENV. First glimpse of the roadmap: Collectors Deck, ENVOY Vault and a Gamification mechanism with level based Collector Points (CP) and rewards.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.