ETH Price: $2,475.91 (+1.49%)

Token

Mondo Community Coin (MNDCC)
 

Overview

Max Total Supply

180,000,000 MNDCC

Holders

1,914 (0.00%)

Market

Price

$0.01 @ 0.000005 ETH

Onchain Market Cap

$2,340,244.80

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
18,847.336045781328169814 MNDCC

Value
$245.04 ( ~0.0989695999033554 Eth) [0.0105%]
0x5973c65008ec929f50695d92340d59e823cffbbd
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Mondo e-commerce ecosystem represents a revolutionary business model that focuses on producers, retailers and customers.

Market

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

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ERC20Vested

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-04-12
*/

// Sources flattened with hardhat v2.0.10 https://hardhat.org

// File contracts/utils/Context.sol

// SPDX-License-Identifier: MIT

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 GSN 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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


// File contracts/access/Ownable.sol



pragma solidity ^0.8.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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


// File contracts/token/ERC20/IERC20.sol



pragma solidity ^0.8.0;

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

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


// File contracts/token/ERC20/ERC20.sol



pragma solidity ^0.8.0;


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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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
     * overloaded;
     *
     * 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 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");
        _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");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `to` 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);
    }

    /**
     * @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");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

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

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

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

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


// File contracts/math/SafeMath.sol



pragma solidity ^0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 */
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. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * 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;
        }
    }
}


// File contracts/math/Math.sol



pragma solidity ^0.8.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}


// File contracts/utils/Arrays.sol



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to array types.
 */
library Arrays {
    /**
     * @dev Searches a sorted `array` and returns the first index that contains
     * a value greater or equal to `element`. If no such index exists (i.e. all
     * values in the array are strictly less than `element`), the array length is
     * returned. Time complexity O(log n).
     *
     * `array` is expected to be sorted in ascending order, and to contain no
     * repeated elements.
     */
    function findUpperBound(uint256[] storage array, uint256 element)
        internal
        view
        returns (uint256)
    {
        if (array.length == 0) {
            return 0;
        }

        uint256 low = 0;
        uint256 high = array.length;

        while (low < high) {
            uint256 mid = Math.average(low, high);

            // Note that mid will always be strictly less than high (i.e. it will be a valid array index)
            // because Math.average rounds down (it does integer division with truncation).
            if (array[mid] > element) {
                high = mid;
            } else {
                low = mid + 1;
            }
        }

        // At this point `low` is the exclusive upper bound. We will return the inclusive upper bound.
        if (low > 0 && array[low - 1] == element) {
            return low - 1;
        } else {
            return low;
        }
    }
}


// File hardhat/[email protected]

pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

	function _sendLogPayload(bytes memory payload) private view {
		uint256 payloadLength = payload.length;
		address consoleAddress = CONSOLE_ADDRESS;
		assembly {
			let payloadStart := add(payload, 32)
			let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
		}
	}

	function log() internal view {
		_sendLogPayload(abi.encodeWithSignature("log()"));
	}

	function logInt(int p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
	}

	function logUint(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function logString(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function logBool(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function logAddress(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function logBytes(bytes memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
	}

	function logBytes1(bytes1 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
	}

	function logBytes2(bytes2 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
	}

	function logBytes3(bytes3 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
	}

	function logBytes4(bytes4 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
	}

	function logBytes5(bytes5 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
	}

	function logBytes6(bytes6 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
	}

	function logBytes7(bytes7 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
	}

	function logBytes8(bytes8 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
	}

	function logBytes9(bytes9 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
	}

	function logBytes10(bytes10 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
	}

	function logBytes11(bytes11 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
	}

	function logBytes12(bytes12 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
	}

	function logBytes13(bytes13 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
	}

	function logBytes14(bytes14 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
	}

	function logBytes15(bytes15 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
	}

	function logBytes16(bytes16 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
	}

	function logBytes17(bytes17 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
	}

	function logBytes18(bytes18 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
	}

	function logBytes19(bytes19 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
	}

	function logBytes20(bytes20 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
	}

	function logBytes21(bytes21 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
	}

	function logBytes22(bytes22 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
	}

	function logBytes23(bytes23 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
	}

	function logBytes24(bytes24 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
	}

	function logBytes25(bytes25 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
	}

	function logBytes26(bytes26 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
	}

	function logBytes27(bytes27 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
	}

	function logBytes28(bytes28 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
	}

	function logBytes29(bytes29 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
	}

	function logBytes30(bytes30 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
	}

	function logBytes31(bytes31 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
	}

	function logBytes32(bytes32 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
	}

	function log(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function log(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function log(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function log(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function log(uint p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
	}

	function log(uint p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
	}

	function log(uint p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
	}

	function log(uint p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
	}

	function log(string memory p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
	}

	function log(string memory p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
	}

	function log(string memory p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
	}

	function log(string memory p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
	}

	function log(bool p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
	}

	function log(bool p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
	}

	function log(bool p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
	}

	function log(bool p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
	}

	function log(address p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
	}

	function log(address p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
	}

	function log(address p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
	}

	function log(address p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
	}

	function log(uint p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2));
	}

	function log(uint p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2));
	}

	function log(uint p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2));
	}

	function log(uint p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2));
	}

	function log(uint p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2));
	}

	function log(uint p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2));
	}

	function log(uint p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2));
	}

	function log(uint p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2));
	}

	function log(uint p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2));
	}

	function log(uint p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2));
	}

	function log(uint p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2));
	}

	function log(uint p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
	}

	function log(string memory p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2));
	}

	function log(string memory p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
	}

	function log(string memory p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
	}

	function log(string memory p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
	}

	function log(bool p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2));
	}

	function log(bool p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2));
	}

	function log(bool p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2));
	}

	function log(bool p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
	}

	function log(bool p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2));
	}

	function log(bool p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
	}

	function log(bool p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
	}

	function log(bool p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
	}

	function log(bool p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2));
	}

	function log(bool p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
	}

	function log(bool p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
	}

	function log(bool p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
	}

	function log(address p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2));
	}

	function log(address p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2));
	}

	function log(address p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2));
	}

	function log(address p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2));
	}

	function log(address p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2));
	}

	function log(address p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
	}

	function log(address p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
	}

	function log(address p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
	}

	function log(address p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2));
	}

	function log(address p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
	}

	function log(address p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
	}

	function log(address p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
	}

	function log(address p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2));
	}

	function log(address p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
	}

	function log(address p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
	}

	function log(address p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
	}

	function log(uint p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
	}

}


// File contracts/ERC20Vested.sol

pragma solidity ^0.8.1;





contract ERC20Vested is ERC20, Ownable {
    event Vesting(address indexed recipient, uint256 value, uint256 startDate);

    uint256 constant BASIS_POINT_DIVISOR = 10000;

    struct vesting {
        uint256 amount;
        uint256 startDate;
    }

    /**
     * @dev Since Solidity 0.8.0 reverting on overflow is the default but
     * let's keep SafeMath nevertheless in case someone messes with the compiler version.
     */
    using SafeMath for uint256;

    using Arrays for uint256[];

    uint256[] private _vestingDays;

    uint256[] private _vestingBasisPoints;

    mapping(address => vesting) private _vesting;

    constructor(
        string memory name,
        string memory symbol,
        uint256 totalSupply,
        uint256[] memory vestingDays,
        uint256[] memory vestingBasisPoints
    ) payable Ownable() ERC20(name, symbol) {
        require(
            vestingDays.length == vestingBasisPoints.length,
            "ERC20Vested: Date array and basis points array have different lengths."
        );
        _mint(owner(), totalSupply);
        _vestingDays = vestingDays;
        _vestingBasisPoints = vestingBasisPoints;
    }

    function _hasVesting(address account) private view returns (bool) {
        return _vesting[account].amount > 0;
    }

    function transferOwnership(address newOwner)
        public
        virtual
        override
        onlyOwner
    {
        require(
            !_hasVesting(newOwner),
            "ERC20Vested: New owner must not have vesting."
        );
        super.transferOwnership(newOwner);
        transfer(newOwner, balanceOf(_msgSender()));
    }

    function today() public view virtual returns (uint128) {
        return uint128(block.timestamp);
    }

    function transferVested(
        address recipient,
        uint256 amount,
        uint256 startDate
    ) public onlyOwner {
        address owner = owner();
        require(
            recipient != owner,
            "ERC20Vested: Owner must not have vesting."
        );
        require(
            amount > 0,
            "ERC20Vested: Amount vested must be larger than 0."
        );
        require(
            !_hasVesting(recipient),
            "ERC20Vested: Recipient already has vesting."
        );
        _vesting[recipient] = vesting(amount, startDate);
        emit Vesting(recipient, amount, startDate);
        _transfer(owner, recipient, amount);
    }

    function _amountAvailable(address from) internal view returns (uint256) {
        vesting memory vested = _vesting[from];
        uint256 totalBalance = _totalBalanceOf(from);
        if (vested.amount > 0) {
            // vesting applies
            uint256 vestingIndex =
                _vestingDays.findUpperBound(today() - vested.startDate);

            if (vestingIndex < _vestingDays.length) {
                // still in vesting phase
                uint256 vestingBasisPoints = _vestingBasisPoints[vestingIndex];
                uint256 maxAmountAvailable =
                    vested.amount.mul(vestingBasisPoints).div(
                        BASIS_POINT_DIVISOR
                    );
                uint256 remainingVestedAmount =
                    vested.amount.sub(maxAmountAvailable);
                return totalBalance.sub(remainingVestedAmount);
            } else {
                return totalBalance;
            }
        } else {
            return totalBalance;
        }
    }

    function totalBalanceOf(address account) public view returns (uint256) {
        return _totalBalanceOf(account);
    }

    function _totalBalanceOf(address account)
        internal
        view
        virtual
        returns (uint256)
    {
        return super.balanceOf(account);
    }

    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _amountAvailable(account);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);

        if (from == address(0)) {
            // When minting tokens
            require(
                owner() == _msgSender(),
                "ERC20Vested: Only owner is allowed to mint tokens."
            );
        } else {
            uint256 amountAvailable = _amountAvailable(from);
            require(
                amountAvailable >= amount,
                "ERC20Vested: Amount exceeds amount available"
            );
        }
    }
}


// File contracts/ERC20VestedView.sol


pragma solidity ^0.8.1;






contract ERC20VestedView is ERC20 {
    ERC20Vested private _vestingContract;

    constructor(
        string memory name,
        string memory symbol,
        uint256 totalSupply,
        ERC20Vested vestingContract
    ) payable ERC20(name, symbol) {
        _vestingContract = vestingContract;
        _mint(_msgSender(), totalSupply);
    }

    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _vestingContract.totalBalanceOf(account);
    }

    function transfer(address recipient, uint256 amount)
        public
        pure
        override
        returns (bool)
    {
        revert();
    }

    function allowance(address owner, address spender)
        public
        pure
        override
        returns (uint256)
    {
        return 0;
    }

    function approve(address spender, uint256 amount)
        public
        pure
        override
        returns (bool)
    {
        revert();
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public pure override returns (bool) {
        revert();
    }
}


// File contracts/math/SignedSafeMath.sol



pragma solidity ^0.8.0;

/**
 * @title SignedSafeMath
 * @dev Signed math operations that revert on error.
 */
library SignedSafeMath {
    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

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

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

    /**
     * @dev Returns the addition of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        return a + b;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256[]","name":"vestingDays","type":"uint256[]"},{"internalType":"uint256[]","name":"vestingBasisPoints","type":"uint256[]"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startDate","type":"uint256"}],"name":"Vesting","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"today","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"totalBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startDate","type":"uint256"}],"name":"transferVested","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040516200389538038062003895833981810160405281019062000029919062000b02565b8484816003908051906020019062000043929190620008d5565b5080600490805190602001906200005c929190620008d5565b505050600062000071620001b560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350805182511462000157576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200014e9062000cb7565b60405180910390fd5b620001786200016b620001bd60201b60201c565b84620001e760201b60201c565b81600690805190602001906200019092919062000966565b508060079080519060200190620001a992919062000966565b50505050505062001211565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200025a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002519062000cfb565b60405180910390fd5b6200026e600083836200034c60201b60201c565b806002600082825462000282919062000dd9565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002d9919062000dd9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000340919062000d1d565b60405180910390a35050565b620003648383836200049160201b62000cee1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200042f57620003aa620001b560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003d0620001bd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000429576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004209062000c95565b60405180910390fd5b6200048c565b600062000442846200049660201b60201c565b9050818110156200048a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004819062000cd9565b60405180910390fd5b505b505050565b505050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201548152602001600182015481525050905060006200050c846200066360201b60201c565b9050600082600001511115620006585760006200056b8360200151620005376200068260201b60201c565b6fffffffffffffffffffffffffffffffff1662000555919062000ecf565b60066200068a60201b62000cf31790919060201c565b90506006805490508110156200064c57600060078281548110620005b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050600062000600612710620005ec848860000151620007ce60201b62000e191790919060201c565b620007e660201b62000e2f1790919060201c565b9050600062000622828760000151620007fe60201b62000e451790919060201c565b90506200063e8186620007fe60201b62000e451790919060201c565b96505050505050506200065e565b8193505050506200065e565b80925050505b919050565b60006200067b826200081660201b62000e5b1760201c565b9050919050565b600042905090565b60008083805490501415620006a35760009050620007c8565b600080848054905090505b8082101562000741576000620006d083836200085e60201b62000ea31760201c565b9050848682815481106200070d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154111562000728578091506200073a565b60018162000737919062000dd9565b92505b50620006ae565b600082118015620007a3575083856001846200075e919062000ecf565b8154811062000796577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154145b15620007c257600182620007b8919062000ecf565b92505050620007c8565b81925050505b92915050565b60008183620007de919062000e6e565b905092915050565b60008183620007f6919062000e36565b905092915050565b600081836200080e919062000ecf565b905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006002808362000870919062000fb6565b6002856200087f919062000fb6565b6200088b919062000dd9565b62000897919062000e36565b600283620008a6919062000e36565b600285620008b5919062000e36565b620008c1919062000dd9565b620008cd919062000dd9565b905092915050565b828054620008e39062000f4a565b90600052602060002090601f01602090048101928262000907576000855562000953565b82601f106200092257805160ff191683800117855562000953565b8280016001018555821562000953579182015b828111156200095257825182559160200191906001019062000935565b5b509050620009629190620009b8565b5090565b828054828255906000526020600020908101928215620009a5579160200282015b82811115620009a457825182559160200191906001019062000987565b5b509050620009b49190620009b8565b5090565b5b80821115620009d3576000816000905550600101620009b9565b5090565b6000620009ee620009e88462000d63565b62000d3a565b9050808382526020820190508285602086028201111562000a0e57600080fd5b60005b8581101562000a42578162000a27888262000aeb565b84526020840193506020830192505060018101905062000a11565b5050509392505050565b600062000a6362000a5d8462000d92565b62000d3a565b90508281526020810184848401111562000a7c57600080fd5b62000a8984828562000f14565b509392505050565b600082601f83011262000aa357600080fd5b815162000ab5848260208601620009d7565b91505092915050565b600082601f83011262000ad057600080fd5b815162000ae284826020860162000a4c565b91505092915050565b60008151905062000afc81620011f7565b92915050565b600080600080600060a0868803121562000b1b57600080fd5b600086015167ffffffffffffffff81111562000b3657600080fd5b62000b448882890162000abe565b955050602086015167ffffffffffffffff81111562000b6257600080fd5b62000b708882890162000abe565b945050604062000b838882890162000aeb565b935050606086015167ffffffffffffffff81111562000ba157600080fd5b62000baf8882890162000a91565b925050608086015167ffffffffffffffff81111562000bcd57600080fd5b62000bdb8882890162000a91565b9150509295509295909350565b600062000bf760328362000dc8565b915062000c0482620010bb565b604082019050919050565b600062000c1e60468362000dc8565b915062000c2b826200110a565b606082019050919050565b600062000c45602c8362000dc8565b915062000c52826200117f565b604082019050919050565b600062000c6c601f8362000dc8565b915062000c7982620011ce565b602082019050919050565b62000c8f8162000f0a565b82525050565b6000602082019050818103600083015262000cb08162000be8565b9050919050565b6000602082019050818103600083015262000cd28162000c0f565b9050919050565b6000602082019050818103600083015262000cf48162000c36565b9050919050565b6000602082019050818103600083015262000d168162000c5d565b9050919050565b600060208201905062000d34600083018462000c84565b92915050565b600062000d4662000d59565b905062000d54828262000f80565b919050565b6000604051905090565b600067ffffffffffffffff82111562000d815762000d806200107b565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000db05762000daf6200107b565b5b62000dbb82620010aa565b9050602081019050919050565b600082825260208201905092915050565b600062000de68262000f0a565b915062000df38362000f0a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e2b5762000e2a62000fee565b5b828201905092915050565b600062000e438262000f0a565b915062000e508362000f0a565b92508262000e635762000e626200101d565b5b828204905092915050565b600062000e7b8262000f0a565b915062000e888362000f0a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ec45762000ec362000fee565b5b828202905092915050565b600062000edc8262000f0a565b915062000ee98362000f0a565b92508282101562000eff5762000efe62000fee565b5b828203905092915050565b6000819050919050565b60005b8381101562000f3457808201518184015260208101905062000f17565b8381111562000f44576000848401525b50505050565b6000600282049050600182168062000f6357607f821691505b6020821081141562000f7a5762000f796200104c565b5b50919050565b62000f8b82620010aa565b810181811067ffffffffffffffff8211171562000fad5762000fac6200107b565b5b80604052505050565b600062000fc38262000f0a565b915062000fd08362000f0a565b92508262000fe35762000fe26200101d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332305665737465643a204f6e6c79206f776e657220697320616c6c6f7760008201527f656420746f206d696e7420746f6b656e732e0000000000000000000000000000602082015250565b7f45524332305665737465643a204461746520617272617920616e64206261736960008201527f7320706f696e7473206172726179206861766520646966666572656e74206c6560208201527f6e677468732e0000000000000000000000000000000000000000000000000000604082015250565b7f45524332305665737465643a20416d6f756e74206578636565647320616d6f7560008201527f6e7420617661696c61626c650000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b620012028162000f0a565b81146200120e57600080fd5b50565b61267480620012216000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d7146102bc578063a9059cbb146102ec578063b74e452b1461031c578063dd62ed3e1461033a578063f2fde38b1461036a5761010b565b806370a0823114610246578063715018a6146102765780638da5cb5b1461028057806395d89b411461029e5761010b565b806323b872dd116100de57806323b872dd14610198578063313ce567146101c857806339509351146101e65780634b0ee02a146102165761010b565b806306fdde0314610110578063095ea7b31461012e57806314f7da8f1461015e57806318160ddd1461017a575b600080fd5b610118610386565b6040516101259190611c43565b60405180910390f35b610148600480360381019061014391906118f1565b610418565b6040516101559190611c28565b60405180910390f35b6101786004803603810190610173919061192d565b610436565b005b610182610685565b60405161018f9190611e60565b60405180910390f35b6101b260048036038101906101ad91906118a2565b61068f565b6040516101bf9190611c28565b60405180910390f35b6101d0610790565b6040516101dd9190611ea4565b60405180910390f35b61020060048036038101906101fb91906118f1565b610799565b60405161020d9190611c28565b60405180910390f35b610230600480360381019061022b919061183d565b610845565b60405161023d9190611e60565b60405180910390f35b610260600480360381019061025b919061183d565b610857565b60405161026d9190611e60565b60405180910390f35b61027e610869565b005b6102886109a6565b6040516102959190611c0d565b60405180910390f35b6102a66109d0565b6040516102b39190611c43565b60405180910390f35b6102d660048036038101906102d191906118f1565b610a62565b6040516102e39190611c28565b60405180910390f35b610306600480360381019061030191906118f1565b610b56565b6040516103139190611c28565b60405180910390f35b610324610b74565b6040516103319190611e45565b60405180910390f35b610354600480360381019061034f9190611866565b610b7c565b6040516103619190611e60565b60405180910390f35b610384600480360381019061037f919061183d565b610c03565b005b60606003805461039590612094565b80601f01602080910402602001604051908101604052809291908181526020018280546103c190612094565b801561040e5780601f106103e35761010080835404028352916020019161040e565b820191906000526020600020905b8154815290600101906020018083116103f157829003601f168201915b5050505050905090565b600061042c610425610f0a565b8484610f12565b6001905092915050565b61043e610f0a565b73ffffffffffffffffffffffffffffffffffffffff1661045c6109a6565b73ffffffffffffffffffffffffffffffffffffffff16146104b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a990611da5565b60405180910390fd5b60006104bc6109a6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561052d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052490611d05565b60405180910390fd5b60008311610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056790611e05565b60405180910390fd5b610579846110dd565b156105b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b090611d65565b60405180910390fd5b604051806040016040528084815260200183815250600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508373ffffffffffffffffffffffffffffffffffffffff167ff870f86d1eff0cf4fa95d14a2b2ae48a13568195fd90101457a4e41d1ec5982e848460405161066c929190611e7b565b60405180910390a261067f81858561112b565b50505050565b6000600254905090565b600061069c84848461112b565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106e7610f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90611d85565b60405180910390fd5b61078485610773610f0a565b858461077f9190611fbc565b610f12565b60019150509392505050565b60006012905090565b600061083b6107a6610f0a565b8484600160006107b4610f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108369190611edb565b610f12565b6001905092915050565b6000610850826113aa565b9050919050565b6000610862826113bc565b9050919050565b610871610f0a565b73ffffffffffffffffffffffffffffffffffffffff1661088f6109a6565b73ffffffffffffffffffffffffffffffffffffffff16146108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90611da5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546109df90612094565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0b90612094565b8015610a585780601f10610a2d57610100808354040283529160200191610a58565b820191906000526020600020905b815481529060010190602001808311610a3b57829003601f168201915b5050505050905090565b60008060016000610a71610f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590611e25565b60405180910390fd5b610b4b610b39610f0a565b858584610b469190611fbc565b610f12565b600191505092915050565b6000610b6a610b63610f0a565b848461112b565b6001905092915050565b600042905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c0b610f0a565b73ffffffffffffffffffffffffffffffffffffffff16610c296109a6565b73ffffffffffffffffffffffffffffffffffffffff1614610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690611da5565b60405180910390fd5b610c88816110dd565b15610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90611c85565b60405180910390fd5b610cd18161154f565b610cea81610ce5610ce0610f0a565b610857565b610b56565b5050565b505050565b60008083805490501415610d0a5760009050610e13565b600080848054905090505b80821015610d94576000610d298383610ea3565b905084868281548110610d65577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001541115610d7e57809150610d8e565b600181610d8b9190611edb565b92505b50610d15565b600082118015610df257508385600184610dae9190611fbc565b81548110610de5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154145b15610e0d57600182610e049190611fbc565b92505050610e13565b81925050505b92915050565b60008183610e279190611f62565b905092915050565b60008183610e3d9190611f31565b905092915050565b60008183610e539190611fbc565b905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600060028083610eb391906120c6565b600285610ec091906120c6565b610eca9190611edb565b610ed49190611f31565b600283610ee19190611f31565b600285610eee9190611f31565b610ef89190611edb565b610f029190611edb565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990611de5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe990611ce5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110d09190611e60565b60405180910390a3505050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290611dc5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290611c65565b60405180910390fd5b6112168383836116fb565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561129c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129390611d25565b60405180910390fd5b81816112a89190611fbc565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113389190611edb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161139c9190611e60565b60405180910390a350505050565b60006113b582610e5b565b9050919050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050600061142a846113aa565b9050600082600001511115611544576000611477836020015161144b610b74565b6fffffffffffffffffffffffffffffffff166114679190611fbc565b6006610cf390919063ffffffff16565b9050600680549050811015611539576000600782815481106114c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905060006114fc6127106114ee848860000151610e1990919063ffffffff16565b610e2f90919063ffffffff16565b90506000611517828760000151610e4590919063ffffffff16565b905061152c8186610e4590919063ffffffff16565b965050505050505061154a565b81935050505061154a565b80925050505b919050565b611557610f0a565b73ffffffffffffffffffffffffffffffffffffffff166115756109a6565b73ffffffffffffffffffffffffffffffffffffffff16146115cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c290611da5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290611cc5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611706838383610cee565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117bc57611743610f0a565b73ffffffffffffffffffffffffffffffffffffffff166117616109a6565b73ffffffffffffffffffffffffffffffffffffffff16146117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90611ca5565b60405180910390fd5b61180e565b60006117c7846113bc565b90508181101561180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180390611d45565b60405180910390fd5b505b505050565b60008135905061182281612610565b92915050565b60008135905061183781612627565b92915050565b60006020828403121561184f57600080fd5b600061185d84828501611813565b91505092915050565b6000806040838503121561187957600080fd5b600061188785828601611813565b925050602061189885828601611813565b9150509250929050565b6000806000606084860312156118b757600080fd5b60006118c586828701611813565b93505060206118d686828701611813565b92505060406118e786828701611828565b9150509250925092565b6000806040838503121561190457600080fd5b600061191285828601611813565b925050602061192385828601611828565b9150509250929050565b60008060006060848603121561194257600080fd5b600061195086828701611813565b935050602061196186828701611828565b925050604061197286828701611828565b9150509250925092565b61198581611ff0565b82525050565b61199481612002565b82525050565b60006119a582611ebf565b6119af8185611eca565b93506119bf818560208601612061565b6119c881612184565b840191505092915050565b60006119e0602383611eca565b91506119eb82612195565b604082019050919050565b6000611a03602d83611eca565b9150611a0e826121e4565b604082019050919050565b6000611a26603283611eca565b9150611a3182612233565b604082019050919050565b6000611a49602683611eca565b9150611a5482612282565b604082019050919050565b6000611a6c602283611eca565b9150611a77826122d1565b604082019050919050565b6000611a8f602983611eca565b9150611a9a82612320565b604082019050919050565b6000611ab2602683611eca565b9150611abd8261236f565b604082019050919050565b6000611ad5602c83611eca565b9150611ae0826123be565b604082019050919050565b6000611af8602b83611eca565b9150611b038261240d565b604082019050919050565b6000611b1b602883611eca565b9150611b268261245c565b604082019050919050565b6000611b3e602083611eca565b9150611b49826124ab565b602082019050919050565b6000611b61602583611eca565b9150611b6c826124d4565b604082019050919050565b6000611b84602483611eca565b9150611b8f82612523565b604082019050919050565b6000611ba7603183611eca565b9150611bb282612572565b604082019050919050565b6000611bca602583611eca565b9150611bd5826125c1565b604082019050919050565b611be98161200e565b82525050565b611bf88161204a565b82525050565b611c0781612054565b82525050565b6000602082019050611c22600083018461197c565b92915050565b6000602082019050611c3d600083018461198b565b92915050565b60006020820190508181036000830152611c5d818461199a565b905092915050565b60006020820190508181036000830152611c7e816119d3565b9050919050565b60006020820190508181036000830152611c9e816119f6565b9050919050565b60006020820190508181036000830152611cbe81611a19565b9050919050565b60006020820190508181036000830152611cde81611a3c565b9050919050565b60006020820190508181036000830152611cfe81611a5f565b9050919050565b60006020820190508181036000830152611d1e81611a82565b9050919050565b60006020820190508181036000830152611d3e81611aa5565b9050919050565b60006020820190508181036000830152611d5e81611ac8565b9050919050565b60006020820190508181036000830152611d7e81611aeb565b9050919050565b60006020820190508181036000830152611d9e81611b0e565b9050919050565b60006020820190508181036000830152611dbe81611b31565b9050919050565b60006020820190508181036000830152611dde81611b54565b9050919050565b60006020820190508181036000830152611dfe81611b77565b9050919050565b60006020820190508181036000830152611e1e81611b9a565b9050919050565b60006020820190508181036000830152611e3e81611bbd565b9050919050565b6000602082019050611e5a6000830184611be0565b92915050565b6000602082019050611e756000830184611bef565b92915050565b6000604082019050611e906000830185611bef565b611e9d6020830184611bef565b9392505050565b6000602082019050611eb96000830184611bfe565b92915050565b600081519050919050565b600082825260208201905092915050565b6000611ee68261204a565b9150611ef18361204a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611f2657611f256120f7565b5b828201905092915050565b6000611f3c8261204a565b9150611f478361204a565b925082611f5757611f56612126565b5b828204905092915050565b6000611f6d8261204a565b9150611f788361204a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611fb157611fb06120f7565b5b828202905092915050565b6000611fc78261204a565b9150611fd28361204a565b925082821015611fe557611fe46120f7565b5b828203905092915050565b6000611ffb8261202a565b9050919050565b60008115159050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561207f578082015181840152602081019050612064565b8381111561208e576000848401525b50505050565b600060028204905060018216806120ac57607f821691505b602082108114156120c0576120bf612155565b5b50919050565b60006120d18261204a565b91506120dc8361204a565b9250826120ec576120eb612126565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305665737465643a204e6577206f776e6572206d757374206e6f742060008201527f686176652076657374696e672e00000000000000000000000000000000000000602082015250565b7f45524332305665737465643a204f6e6c79206f776e657220697320616c6c6f7760008201527f656420746f206d696e7420746f6b656e732e0000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305665737465643a204f776e6572206d757374206e6f74206861766560008201527f2076657374696e672e0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332305665737465643a20416d6f756e74206578636565647320616d6f7560008201527f6e7420617661696c61626c650000000000000000000000000000000000000000602082015250565b7f45524332305665737465643a20526563697069656e7420616c7265616479206860008201527f61732076657374696e672e000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305665737465643a20416d6f756e7420766573746564206d7573742060008201527f6265206c6172676572207468616e20302e000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61261981611ff0565b811461262457600080fd5b50565b6126308161204a565b811461263b57600080fd5b5056fea2646970667358221220ff477603eee65922adc0e88083abef1fcda42c119dc941d4d45d38e1cb8f776f64736f6c6343000801003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000094e47b8d681715340000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000144d6f6e646f20436f6d6d756e69747920436f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000054d4e444343000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000278d0000000000000000000000000000000000000000000000000000000000004f1a00000000000000000000000000000000000000000000000000000000000076a70000000000000000000000000000000000000000000000000000000000009e34000000000000000000000000000000000000000000000000000000000000c5c1000000000000000000000000000000000000000000000000000000000000ed4e00000000000000000000000000000000000000000000000000000000000114db0000000000000000000000000000000000000000000000000000000000013c6800000000000000000000000000000000000000000000000000000000000163f50000000000000000000000000000000000000000000000000000000000018b82000000000000000000000000000000000000000000000000000000000001b30f000000000000000000000000000000000000000000000000000000000001da9c000000000000000000000000000000000000000000000000000000000002022900000000000000000000000000000000000000000000000000000000000229b6000000000000000000000000000000000000000000000000000000000002514300000000000000000000000000000000000000000000000000000000000278d0000000000000000000000000000000000000000000000000000000000002a05d000000000000000000000000000000000000000000000000000000000002c7ea000000000000000000000000000000000000000000000000000000000002ef7700000000000000000000000000000000000000000000000000000000000317040000000000000000000000000000000000000000000000000000000000033e91000000000000000000000000000000000000000000000000000000000003661e0000000000000000000000000000000000000000000000000000000000038dab000000000000000000000000000000000000000000000000000000000003b538000000000000000000000000000000000000000000000000000000000003dcc500000000000000000000000000000000000000000000000000000000000404520000000000000000000000000000000000000000000000000000000000042bdf000000000000000000000000000000000000000000000000000000000004536c0000000000000000000000000000000000000000000000000000000000047af9000000000000000000000000000000000000000000000000000000000004a28600000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000009600000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000fa000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000002260000000000000000000000000000000000000000000000000000000000000258000000000000000000000000000000000000000000000000000000000000028a00000000000000000000000000000000000000000000000000000000000002bc00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000352000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003b600000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000017700000000000000000000000000000000000000000000000000000000000001b580000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000023280000000000000000000000000000000000000000000000000000000000002710

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d7146102bc578063a9059cbb146102ec578063b74e452b1461031c578063dd62ed3e1461033a578063f2fde38b1461036a5761010b565b806370a0823114610246578063715018a6146102765780638da5cb5b1461028057806395d89b411461029e5761010b565b806323b872dd116100de57806323b872dd14610198578063313ce567146101c857806339509351146101e65780634b0ee02a146102165761010b565b806306fdde0314610110578063095ea7b31461012e57806314f7da8f1461015e57806318160ddd1461017a575b600080fd5b610118610386565b6040516101259190611c43565b60405180910390f35b610148600480360381019061014391906118f1565b610418565b6040516101559190611c28565b60405180910390f35b6101786004803603810190610173919061192d565b610436565b005b610182610685565b60405161018f9190611e60565b60405180910390f35b6101b260048036038101906101ad91906118a2565b61068f565b6040516101bf9190611c28565b60405180910390f35b6101d0610790565b6040516101dd9190611ea4565b60405180910390f35b61020060048036038101906101fb91906118f1565b610799565b60405161020d9190611c28565b60405180910390f35b610230600480360381019061022b919061183d565b610845565b60405161023d9190611e60565b60405180910390f35b610260600480360381019061025b919061183d565b610857565b60405161026d9190611e60565b60405180910390f35b61027e610869565b005b6102886109a6565b6040516102959190611c0d565b60405180910390f35b6102a66109d0565b6040516102b39190611c43565b60405180910390f35b6102d660048036038101906102d191906118f1565b610a62565b6040516102e39190611c28565b60405180910390f35b610306600480360381019061030191906118f1565b610b56565b6040516103139190611c28565b60405180910390f35b610324610b74565b6040516103319190611e45565b60405180910390f35b610354600480360381019061034f9190611866565b610b7c565b6040516103619190611e60565b60405180910390f35b610384600480360381019061037f919061183d565b610c03565b005b60606003805461039590612094565b80601f01602080910402602001604051908101604052809291908181526020018280546103c190612094565b801561040e5780601f106103e35761010080835404028352916020019161040e565b820191906000526020600020905b8154815290600101906020018083116103f157829003601f168201915b5050505050905090565b600061042c610425610f0a565b8484610f12565b6001905092915050565b61043e610f0a565b73ffffffffffffffffffffffffffffffffffffffff1661045c6109a6565b73ffffffffffffffffffffffffffffffffffffffff16146104b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a990611da5565b60405180910390fd5b60006104bc6109a6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561052d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052490611d05565b60405180910390fd5b60008311610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056790611e05565b60405180910390fd5b610579846110dd565b156105b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b090611d65565b60405180910390fd5b604051806040016040528084815260200183815250600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508373ffffffffffffffffffffffffffffffffffffffff167ff870f86d1eff0cf4fa95d14a2b2ae48a13568195fd90101457a4e41d1ec5982e848460405161066c929190611e7b565b60405180910390a261067f81858561112b565b50505050565b6000600254905090565b600061069c84848461112b565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106e7610f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90611d85565b60405180910390fd5b61078485610773610f0a565b858461077f9190611fbc565b610f12565b60019150509392505050565b60006012905090565b600061083b6107a6610f0a565b8484600160006107b4610f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108369190611edb565b610f12565b6001905092915050565b6000610850826113aa565b9050919050565b6000610862826113bc565b9050919050565b610871610f0a565b73ffffffffffffffffffffffffffffffffffffffff1661088f6109a6565b73ffffffffffffffffffffffffffffffffffffffff16146108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90611da5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546109df90612094565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0b90612094565b8015610a585780601f10610a2d57610100808354040283529160200191610a58565b820191906000526020600020905b815481529060010190602001808311610a3b57829003601f168201915b5050505050905090565b60008060016000610a71610f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590611e25565b60405180910390fd5b610b4b610b39610f0a565b858584610b469190611fbc565b610f12565b600191505092915050565b6000610b6a610b63610f0a565b848461112b565b6001905092915050565b600042905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c0b610f0a565b73ffffffffffffffffffffffffffffffffffffffff16610c296109a6565b73ffffffffffffffffffffffffffffffffffffffff1614610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690611da5565b60405180910390fd5b610c88816110dd565b15610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90611c85565b60405180910390fd5b610cd18161154f565b610cea81610ce5610ce0610f0a565b610857565b610b56565b5050565b505050565b60008083805490501415610d0a5760009050610e13565b600080848054905090505b80821015610d94576000610d298383610ea3565b905084868281548110610d65577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001541115610d7e57809150610d8e565b600181610d8b9190611edb565b92505b50610d15565b600082118015610df257508385600184610dae9190611fbc565b81548110610de5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154145b15610e0d57600182610e049190611fbc565b92505050610e13565b81925050505b92915050565b60008183610e279190611f62565b905092915050565b60008183610e3d9190611f31565b905092915050565b60008183610e539190611fbc565b905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600060028083610eb391906120c6565b600285610ec091906120c6565b610eca9190611edb565b610ed49190611f31565b600283610ee19190611f31565b600285610eee9190611f31565b610ef89190611edb565b610f029190611edb565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990611de5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe990611ce5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110d09190611e60565b60405180910390a3505050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290611dc5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290611c65565b60405180910390fd5b6112168383836116fb565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561129c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129390611d25565b60405180910390fd5b81816112a89190611fbc565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113389190611edb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161139c9190611e60565b60405180910390a350505050565b60006113b582610e5b565b9050919050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050600061142a846113aa565b9050600082600001511115611544576000611477836020015161144b610b74565b6fffffffffffffffffffffffffffffffff166114679190611fbc565b6006610cf390919063ffffffff16565b9050600680549050811015611539576000600782815481106114c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905060006114fc6127106114ee848860000151610e1990919063ffffffff16565b610e2f90919063ffffffff16565b90506000611517828760000151610e4590919063ffffffff16565b905061152c8186610e4590919063ffffffff16565b965050505050505061154a565b81935050505061154a565b80925050505b919050565b611557610f0a565b73ffffffffffffffffffffffffffffffffffffffff166115756109a6565b73ffffffffffffffffffffffffffffffffffffffff16146115cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c290611da5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290611cc5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611706838383610cee565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117bc57611743610f0a565b73ffffffffffffffffffffffffffffffffffffffff166117616109a6565b73ffffffffffffffffffffffffffffffffffffffff16146117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90611ca5565b60405180910390fd5b61180e565b60006117c7846113bc565b90508181101561180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180390611d45565b60405180910390fd5b505b505050565b60008135905061182281612610565b92915050565b60008135905061183781612627565b92915050565b60006020828403121561184f57600080fd5b600061185d84828501611813565b91505092915050565b6000806040838503121561187957600080fd5b600061188785828601611813565b925050602061189885828601611813565b9150509250929050565b6000806000606084860312156118b757600080fd5b60006118c586828701611813565b93505060206118d686828701611813565b92505060406118e786828701611828565b9150509250925092565b6000806040838503121561190457600080fd5b600061191285828601611813565b925050602061192385828601611828565b9150509250929050565b60008060006060848603121561194257600080fd5b600061195086828701611813565b935050602061196186828701611828565b925050604061197286828701611828565b9150509250925092565b61198581611ff0565b82525050565b61199481612002565b82525050565b60006119a582611ebf565b6119af8185611eca565b93506119bf818560208601612061565b6119c881612184565b840191505092915050565b60006119e0602383611eca565b91506119eb82612195565b604082019050919050565b6000611a03602d83611eca565b9150611a0e826121e4565b604082019050919050565b6000611a26603283611eca565b9150611a3182612233565b604082019050919050565b6000611a49602683611eca565b9150611a5482612282565b604082019050919050565b6000611a6c602283611eca565b9150611a77826122d1565b604082019050919050565b6000611a8f602983611eca565b9150611a9a82612320565b604082019050919050565b6000611ab2602683611eca565b9150611abd8261236f565b604082019050919050565b6000611ad5602c83611eca565b9150611ae0826123be565b604082019050919050565b6000611af8602b83611eca565b9150611b038261240d565b604082019050919050565b6000611b1b602883611eca565b9150611b268261245c565b604082019050919050565b6000611b3e602083611eca565b9150611b49826124ab565b602082019050919050565b6000611b61602583611eca565b9150611b6c826124d4565b604082019050919050565b6000611b84602483611eca565b9150611b8f82612523565b604082019050919050565b6000611ba7603183611eca565b9150611bb282612572565b604082019050919050565b6000611bca602583611eca565b9150611bd5826125c1565b604082019050919050565b611be98161200e565b82525050565b611bf88161204a565b82525050565b611c0781612054565b82525050565b6000602082019050611c22600083018461197c565b92915050565b6000602082019050611c3d600083018461198b565b92915050565b60006020820190508181036000830152611c5d818461199a565b905092915050565b60006020820190508181036000830152611c7e816119d3565b9050919050565b60006020820190508181036000830152611c9e816119f6565b9050919050565b60006020820190508181036000830152611cbe81611a19565b9050919050565b60006020820190508181036000830152611cde81611a3c565b9050919050565b60006020820190508181036000830152611cfe81611a5f565b9050919050565b60006020820190508181036000830152611d1e81611a82565b9050919050565b60006020820190508181036000830152611d3e81611aa5565b9050919050565b60006020820190508181036000830152611d5e81611ac8565b9050919050565b60006020820190508181036000830152611d7e81611aeb565b9050919050565b60006020820190508181036000830152611d9e81611b0e565b9050919050565b60006020820190508181036000830152611dbe81611b31565b9050919050565b60006020820190508181036000830152611dde81611b54565b9050919050565b60006020820190508181036000830152611dfe81611b77565b9050919050565b60006020820190508181036000830152611e1e81611b9a565b9050919050565b60006020820190508181036000830152611e3e81611bbd565b9050919050565b6000602082019050611e5a6000830184611be0565b92915050565b6000602082019050611e756000830184611bef565b92915050565b6000604082019050611e906000830185611bef565b611e9d6020830184611bef565b9392505050565b6000602082019050611eb96000830184611bfe565b92915050565b600081519050919050565b600082825260208201905092915050565b6000611ee68261204a565b9150611ef18361204a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611f2657611f256120f7565b5b828201905092915050565b6000611f3c8261204a565b9150611f478361204a565b925082611f5757611f56612126565b5b828204905092915050565b6000611f6d8261204a565b9150611f788361204a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611fb157611fb06120f7565b5b828202905092915050565b6000611fc78261204a565b9150611fd28361204a565b925082821015611fe557611fe46120f7565b5b828203905092915050565b6000611ffb8261202a565b9050919050565b60008115159050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561207f578082015181840152602081019050612064565b8381111561208e576000848401525b50505050565b600060028204905060018216806120ac57607f821691505b602082108114156120c0576120bf612155565b5b50919050565b60006120d18261204a565b91506120dc8361204a565b9250826120ec576120eb612126565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305665737465643a204e6577206f776e6572206d757374206e6f742060008201527f686176652076657374696e672e00000000000000000000000000000000000000602082015250565b7f45524332305665737465643a204f6e6c79206f776e657220697320616c6c6f7760008201527f656420746f206d696e7420746f6b656e732e0000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305665737465643a204f776e6572206d757374206e6f74206861766560008201527f2076657374696e672e0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332305665737465643a20416d6f756e74206578636565647320616d6f7560008201527f6e7420617661696c61626c650000000000000000000000000000000000000000602082015250565b7f45524332305665737465643a20526563697069656e7420616c7265616479206860008201527f61732076657374696e672e000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305665737465643a20416d6f756e7420766573746564206d7573742060008201527f6265206c6172676572207468616e20302e000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61261981611ff0565b811461262457600080fd5b50565b6126308161204a565b811461263b57600080fd5b5056fea2646970667358221220ff477603eee65922adc0e88083abef1fcda42c119dc941d4d45d38e1cb8f776f64736f6c63430008010033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000094e47b8d681715340000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000144d6f6e646f20436f6d6d756e69747920436f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000054d4e444343000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000278d0000000000000000000000000000000000000000000000000000000000004f1a00000000000000000000000000000000000000000000000000000000000076a70000000000000000000000000000000000000000000000000000000000009e34000000000000000000000000000000000000000000000000000000000000c5c1000000000000000000000000000000000000000000000000000000000000ed4e00000000000000000000000000000000000000000000000000000000000114db0000000000000000000000000000000000000000000000000000000000013c6800000000000000000000000000000000000000000000000000000000000163f50000000000000000000000000000000000000000000000000000000000018b82000000000000000000000000000000000000000000000000000000000001b30f000000000000000000000000000000000000000000000000000000000001da9c000000000000000000000000000000000000000000000000000000000002022900000000000000000000000000000000000000000000000000000000000229b6000000000000000000000000000000000000000000000000000000000002514300000000000000000000000000000000000000000000000000000000000278d0000000000000000000000000000000000000000000000000000000000002a05d000000000000000000000000000000000000000000000000000000000002c7ea000000000000000000000000000000000000000000000000000000000002ef7700000000000000000000000000000000000000000000000000000000000317040000000000000000000000000000000000000000000000000000000000033e91000000000000000000000000000000000000000000000000000000000003661e0000000000000000000000000000000000000000000000000000000000038dab000000000000000000000000000000000000000000000000000000000003b538000000000000000000000000000000000000000000000000000000000003dcc500000000000000000000000000000000000000000000000000000000000404520000000000000000000000000000000000000000000000000000000000042bdf000000000000000000000000000000000000000000000000000000000004536c0000000000000000000000000000000000000000000000000000000000047af9000000000000000000000000000000000000000000000000000000000004a28600000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000009600000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000fa000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000002260000000000000000000000000000000000000000000000000000000000000258000000000000000000000000000000000000000000000000000000000000028a00000000000000000000000000000000000000000000000000000000000002bc00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000352000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003b600000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000017700000000000000000000000000000000000000000000000000000000000001b580000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000023280000000000000000000000000000000000000000000000000000000000002710

-----Decoded View---------------
Arg [0] : name (string): Mondo Community Coin
Arg [1] : symbol (string): MNDCC
Arg [2] : totalSupply (uint256): 180000000000000000000000000
Arg [3] : vestingDays (uint256[]): 2592000,5184000,7776000,10368000,12960000,15552000,18144000,20736000,23328000,25920000,28512000,31104000,33696000,36288000,38880000,41472000,44064000,46656000,49248000,51840000,54432000,57024000,59616000,62208000,64800000,67392000,69984000,72576000,75168000,77760000
Arg [4] : vestingBasisPoints (uint256[]): 0,50,100,150,200,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950,1000,2000,3000,4000,5000,6000,7000,8000,9000,10000

-----Encoded View---------------
71 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 00000000000000000000000000000000000000000094e47b8d68171534000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000500
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [6] : 4d6f6e646f20436f6d6d756e69747920436f696e000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [8] : 4d4e444343000000000000000000000000000000000000000000000000000000
Arg [9] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [10] : 0000000000000000000000000000000000000000000000000000000000278d00
Arg [11] : 00000000000000000000000000000000000000000000000000000000004f1a00
Arg [12] : 000000000000000000000000000000000000000000000000000000000076a700
Arg [13] : 00000000000000000000000000000000000000000000000000000000009e3400
Arg [14] : 0000000000000000000000000000000000000000000000000000000000c5c100
Arg [15] : 0000000000000000000000000000000000000000000000000000000000ed4e00
Arg [16] : 000000000000000000000000000000000000000000000000000000000114db00
Arg [17] : 00000000000000000000000000000000000000000000000000000000013c6800
Arg [18] : 000000000000000000000000000000000000000000000000000000000163f500
Arg [19] : 00000000000000000000000000000000000000000000000000000000018b8200
Arg [20] : 0000000000000000000000000000000000000000000000000000000001b30f00
Arg [21] : 0000000000000000000000000000000000000000000000000000000001da9c00
Arg [22] : 0000000000000000000000000000000000000000000000000000000002022900
Arg [23] : 000000000000000000000000000000000000000000000000000000000229b600
Arg [24] : 0000000000000000000000000000000000000000000000000000000002514300
Arg [25] : 000000000000000000000000000000000000000000000000000000000278d000
Arg [26] : 0000000000000000000000000000000000000000000000000000000002a05d00
Arg [27] : 0000000000000000000000000000000000000000000000000000000002c7ea00
Arg [28] : 0000000000000000000000000000000000000000000000000000000002ef7700
Arg [29] : 0000000000000000000000000000000000000000000000000000000003170400
Arg [30] : 00000000000000000000000000000000000000000000000000000000033e9100
Arg [31] : 0000000000000000000000000000000000000000000000000000000003661e00
Arg [32] : 00000000000000000000000000000000000000000000000000000000038dab00
Arg [33] : 0000000000000000000000000000000000000000000000000000000003b53800
Arg [34] : 0000000000000000000000000000000000000000000000000000000003dcc500
Arg [35] : 0000000000000000000000000000000000000000000000000000000004045200
Arg [36] : 00000000000000000000000000000000000000000000000000000000042bdf00
Arg [37] : 0000000000000000000000000000000000000000000000000000000004536c00
Arg [38] : 00000000000000000000000000000000000000000000000000000000047af900
Arg [39] : 0000000000000000000000000000000000000000000000000000000004a28600
Arg [40] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [41] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [42] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [43] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [44] : 0000000000000000000000000000000000000000000000000000000000000096
Arg [45] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [46] : 00000000000000000000000000000000000000000000000000000000000000fa
Arg [47] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [48] : 000000000000000000000000000000000000000000000000000000000000015e
Arg [49] : 0000000000000000000000000000000000000000000000000000000000000190
Arg [50] : 00000000000000000000000000000000000000000000000000000000000001c2
Arg [51] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [52] : 0000000000000000000000000000000000000000000000000000000000000226
Arg [53] : 0000000000000000000000000000000000000000000000000000000000000258
Arg [54] : 000000000000000000000000000000000000000000000000000000000000028a
Arg [55] : 00000000000000000000000000000000000000000000000000000000000002bc
Arg [56] : 00000000000000000000000000000000000000000000000000000000000002ee
Arg [57] : 0000000000000000000000000000000000000000000000000000000000000320
Arg [58] : 0000000000000000000000000000000000000000000000000000000000000352
Arg [59] : 0000000000000000000000000000000000000000000000000000000000000384
Arg [60] : 00000000000000000000000000000000000000000000000000000000000003b6
Arg [61] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [62] : 00000000000000000000000000000000000000000000000000000000000007d0
Arg [63] : 0000000000000000000000000000000000000000000000000000000000000bb8
Arg [64] : 0000000000000000000000000000000000000000000000000000000000000fa0
Arg [65] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [66] : 0000000000000000000000000000000000000000000000000000000000001770
Arg [67] : 0000000000000000000000000000000000000000000000000000000000001b58
Arg [68] : 0000000000000000000000000000000000000000000000000000000000001f40
Arg [69] : 0000000000000000000000000000000000000000000000000000000000002328
Arg [70] : 0000000000000000000000000000000000000000000000000000000000002710


Deployed Bytecode Sourcemap

89733:4718:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8167:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10307:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;91546:696;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9260:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10958:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9111:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11789:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;93290:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;93600:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2789:148;;;:::i;:::-;;2138:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8377:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12507:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9771:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;91433:105;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10009:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;91071:354;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8167:91;8212:13;8245:5;8238:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8167:91;:::o;10307:169::-;10390:4;10407:39;10416:12;:10;:12::i;:::-;10430:7;10439:6;10407:8;:39::i;:::-;10464:4;10457:11;;10307:169;;;;:::o;91546:696::-;2369:12;:10;:12::i;:::-;2358:23;;:7;:5;:7::i;:::-;:23;;;2350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;91686:13:::1;91702:7;:5;:7::i;:::-;91686:23;;91755:5;91742:18;;:9;:18;;;;91720:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;91871:1;91862:6;:10;91840:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;91983:22;91995:9;91983:11;:22::i;:::-;91982:23;91960:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;92109:26;;;;;;;;92117:6;92109:26;;;;92125:9;92109:26;;::::0;92087:8:::1;:19;92096:9;92087:19;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;;92159:9;92151:37;;;92170:6;92178:9;92151:37;;;;;;;:::i;:::-;;;;;;;;92199:35;92209:5;92216:9;92227:6;92199:9;:35::i;:::-;2429:1;91546:696:::0;;;:::o;9260:108::-;9321:7;9348:12;;9341:19;;9260:108;:::o;10958:422::-;11064:4;11081:36;11091:6;11099:9;11110:6;11081:9;:36::i;:::-;11130:24;11157:11;:19;11169:6;11157:19;;;;;;;;;;;;;;;:33;11177:12;:10;:12::i;:::-;11157:33;;;;;;;;;;;;;;;;11130:60;;11229:6;11209:16;:26;;11201:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11291:57;11300:6;11308:12;:10;:12::i;:::-;11341:6;11322:16;:25;;;;:::i;:::-;11291:8;:57::i;:::-;11368:4;11361:11;;;10958:422;;;;;:::o;9111:84::-;9160:5;9185:2;9178:9;;9111:84;:::o;11789:215::-;11877:4;11894:80;11903:12;:10;:12::i;:::-;11917:7;11963:10;11926:11;:25;11938:12;:10;:12::i;:::-;11926:25;;;;;;;;;;;;;;;:34;11952:7;11926:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;11894:8;:80::i;:::-;11992:4;11985:11;;11789:215;;;;:::o;93290:121::-;93352:7;93379:24;93395:7;93379:15;:24::i;:::-;93372:31;;93290:121;;;:::o;93600:184::-;93719:7;93751:25;93768:7;93751:16;:25::i;:::-;93744:32;;93600:184;;;:::o;2789:148::-;2369:12;:10;:12::i;:::-;2358:23;;:7;:5;:7::i;:::-;:23;;;2350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2896:1:::1;2859:40;;2880:6;;;;;;;;;;;2859:40;;;;;;;;;;;;2927:1;2910:6;;:19;;;;;;;;;;;;;;;;;;2789:148::o:0;2138:87::-;2184:7;2211:6;;;;;;;;;;;2204:13;;2138:87;:::o;8377:95::-;8424:13;8457:7;8450:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8377:95;:::o;12507:377::-;12600:4;12617:24;12644:11;:25;12656:12;:10;:12::i;:::-;12644:25;;;;;;;;;;;;;;;:34;12670:7;12644:34;;;;;;;;;;;;;;;;12617:61;;12717:15;12697:16;:35;;12689:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;12785:67;12794:12;:10;:12::i;:::-;12808:7;12836:15;12817:16;:34;;;;:::i;:::-;12785:8;:67::i;:::-;12872:4;12865:11;;;12507:377;;;;:::o;9771:175::-;9857:4;9874:42;9884:12;:10;:12::i;:::-;9898:9;9909:6;9874:9;:42::i;:::-;9934:4;9927:11;;9771:175;;;;:::o;91433:105::-;91479:7;91514:15;91499:31;;91433:105;:::o;10009:151::-;10098:7;10125:11;:18;10137:5;10125:18;;;;;;;;;;;;;;;:27;10144:7;10125:27;;;;;;;;;;;;;;;;10118:34;;10009:151;;;;:::o;91071:354::-;2369:12;:10;:12::i;:::-;2358:23;;:7;:5;:7::i;:::-;:23;;;2350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;91225:21:::1;91237:8;91225:11;:21::i;:::-;91224:22;91202:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;91330:33;91354:8;91330:23;:33::i;:::-;91374:43;91383:8;91393:23;91403:12;:10;:12::i;:::-;91393:9;:23::i;:::-;91374:8;:43::i;:::-;;91071:354:::0;:::o;16812:92::-;;;;:::o;25112:950::-;25228:7;25273:1;25257:5;:12;;;;:17;25253:58;;;25298:1;25291:8;;;;25253:58;25323:11;25349:12;25364:5;:12;;;;25349:27;;25389:424;25402:4;25396:3;:10;25389:424;;;25423:11;25437:23;25450:3;25455:4;25437:12;:23::i;:::-;25423:37;;25694:7;25681:5;25687:3;25681:10;;;;;;;;;;;;;;;;;;;;;;;;:20;25677:125;;;25729:3;25722:10;;25677:125;;;25785:1;25779:3;:7;;;;:::i;:::-;25773:13;;25677:125;25389:424;;;;25939:1;25933:3;:7;:36;;;;;25962:7;25944:5;25956:1;25950:3;:7;;;;:::i;:::-;25944:14;;;;;;;;;;;;;;;;;;;;;;;;:25;25933:36;25929:126;;;25999:1;25993:3;:7;;;;:::i;:::-;25986:14;;;;;;25929:126;26040:3;26033:10;;;;25112:950;;;;;:::o;20139:98::-;20197:7;20228:1;20224;:5;;;;:::i;:::-;20217:12;;20139:98;;;;:::o;20538:::-;20596:7;20627:1;20623;:5;;;;:::i;:::-;20616:12;;20538:98;;;;:::o;19782:::-;19840:7;19871:1;19867;:5;;;;:::i;:::-;19860:12;;19782:98;;;;:::o;9431:127::-;9505:7;9532:9;:18;9542:7;9532:18;;;;;;;;;;;;;;;;9525:25;;9431:127;;;:::o;24331:193::-;24393:7;24514:1;24509;24505;:5;;;;:::i;:::-;24501:1;24497;:5;;;;:::i;:::-;:13;;;;:::i;:::-;24496:19;;;;:::i;:::-;24490:1;24486;:5;;;;:::i;:::-;24480:1;24476;:5;;;;:::i;:::-;24475:17;;;;:::i;:::-;:41;;;;:::i;:::-;24468:48;;24331:193;;;;:::o;709:98::-;762:7;789:10;782:17;;709:98;:::o;15863:346::-;15982:1;15965:19;;:5;:19;;;;15957:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16063:1;16044:21;;:7;:21;;;;16036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16147:6;16117:11;:18;16129:5;16117:18;;;;;;;;;;;;;;;:27;16136:7;16117:27;;;;;;;;;;;;;;;:36;;;;16185:7;16169:32;;16178:5;16169:32;;;16194:6;16169:32;;;;;;:::i;:::-;;;;;;;;15863:346;;;:::o;90943:120::-;91003:4;91054:1;91027:8;:17;91036:7;91027:17;;;;;;;;;;;;;;;:24;;;:28;91020:35;;90943:120;;;:::o;13374:604::-;13498:1;13480:20;;:6;:20;;;;13472:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13582:1;13561:23;;:9;:23;;;;13553:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13637:47;13658:6;13666:9;13677:6;13637:20;:47::i;:::-;13697:21;13721:9;:17;13731:6;13721:17;;;;;;;;;;;;;;;;13697:41;;13774:6;13757:13;:23;;13749:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13870:6;13854:13;:22;;;;:::i;:::-;13834:9;:17;13844:6;13834:17;;;;;;;;;;;;;;;:42;;;;13911:6;13887:9;:20;13897:9;13887:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;13952:9;13935:35;;13944:6;13935:35;;;13963:6;13935:35;;;;;;:::i;:::-;;;;;;;;13374:604;;;;:::o;93419:173::-;93528:7;93560:24;93576:7;93560:15;:24::i;:::-;93553:31;;93419:173;;;:::o;92250:1032::-;92313:7;92333:21;92357:8;:14;92366:4;92357:14;;;;;;;;;;;;;;;92333:38;;;;;;;;;;;;;;;;;;;;;;;;;;;92382:20;92405:21;92421:4;92405:15;:21::i;:::-;92382:44;;92457:1;92441:6;:13;;;:17;92437:838;;;92507:20;92547:55;92585:6;:16;;;92575:7;:5;:7::i;:::-;:26;;;;;;:::i;:::-;92547:12;:27;;:55;;;;:::i;:::-;92507:95;;92638:12;:19;;;;92623:12;:34;92619:593;;;92721:26;92750:19;92770:12;92750:33;;;;;;;;;;;;;;;;;;;;;;;;92721:62;;92802:26;92852:110;89901:5;92852:37;92870:18;92852:6;:13;;;:17;;:37;;;;:::i;:::-;:41;;:110;;;;:::i;:::-;92802:160;;92981:29;93034:37;93052:18;93034:6;:13;;;:17;;:37;;;;:::i;:::-;92981:90;;93097:39;93114:21;93097:12;:16;;:39;;;;:::i;:::-;93090:46;;;;;;;;;;92619:593;93184:12;93177:19;;;;;;;92437:838;93251:12;93244:19;;;;92250:1032;;;;:::o;3092:244::-;2369:12;:10;:12::i;:::-;2358:23;;:7;:5;:7::i;:::-;:23;;;2350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3201:1:::1;3181:22;;:8;:22;;;;3173:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3291:8;3262:38;;3283:6;;;;;;;;;;;3262:38;;;;;;;;;;;;3320:8;3311:6;;:17;;;;;;;;;;;;;;;;;;3092:244:::0;:::o;93792:656::-;93935:44;93962:4;93968:2;93972:6;93935:26;:44::i;:::-;94012:1;93996:18;;:4;:18;;;93992:449;;;94104:12;:10;:12::i;:::-;94093:23;;:7;:5;:7::i;:::-;:23;;;94067:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;93992:449;;;94235:23;94261:22;94278:4;94261:16;:22::i;:::-;94235:48;;94343:6;94324:15;:25;;94298:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;93992:449;;93792:656;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:262::-;;405:2;393:9;384:7;380:23;376:32;373:2;;;421:1;418;411:12;373:2;464:1;489:53;534:7;525:6;514:9;510:22;489:53;:::i;:::-;479:63;;435:117;363:196;;;;:::o;565:407::-;;;690:2;678:9;669:7;665:23;661:32;658:2;;;706:1;703;696:12;658:2;749:1;774:53;819:7;810:6;799:9;795:22;774:53;:::i;:::-;764:63;;720:117;876:2;902:53;947:7;938:6;927:9;923:22;902:53;:::i;:::-;892:63;;847:118;648:324;;;;;:::o;978:552::-;;;;1120:2;1108:9;1099:7;1095:23;1091:32;1088:2;;;1136:1;1133;1126:12;1088:2;1179:1;1204:53;1249:7;1240:6;1229:9;1225:22;1204:53;:::i;:::-;1194:63;;1150:117;1306:2;1332:53;1377:7;1368:6;1357:9;1353:22;1332:53;:::i;:::-;1322:63;;1277:118;1434:2;1460:53;1505:7;1496:6;1485:9;1481:22;1460:53;:::i;:::-;1450:63;;1405:118;1078:452;;;;;:::o;1536:407::-;;;1661:2;1649:9;1640:7;1636:23;1632:32;1629:2;;;1677:1;1674;1667:12;1629:2;1720:1;1745:53;1790:7;1781:6;1770:9;1766:22;1745:53;:::i;:::-;1735:63;;1691:117;1847:2;1873:53;1918:7;1909:6;1898:9;1894:22;1873:53;:::i;:::-;1863:63;;1818:118;1619:324;;;;;:::o;1949:552::-;;;;2091:2;2079:9;2070:7;2066:23;2062:32;2059:2;;;2107:1;2104;2097:12;2059:2;2150:1;2175:53;2220:7;2211:6;2200:9;2196:22;2175:53;:::i;:::-;2165:63;;2121:117;2277:2;2303:53;2348:7;2339:6;2328:9;2324:22;2303:53;:::i;:::-;2293:63;;2248:118;2405:2;2431:53;2476:7;2467:6;2456:9;2452:22;2431:53;:::i;:::-;2421:63;;2376:118;2049:452;;;;;:::o;2507:118::-;2594:24;2612:5;2594:24;:::i;:::-;2589:3;2582:37;2572:53;;:::o;2631:109::-;2712:21;2727:5;2712:21;:::i;:::-;2707:3;2700:34;2690:50;;:::o;2746:364::-;;2862:39;2895:5;2862:39;:::i;:::-;2917:71;2981:6;2976:3;2917:71;:::i;:::-;2910:78;;2997:52;3042:6;3037:3;3030:4;3023:5;3019:16;2997:52;:::i;:::-;3074:29;3096:6;3074:29;:::i;:::-;3069:3;3065:39;3058:46;;2838:272;;;;;:::o;3116:366::-;;3279:67;3343:2;3338:3;3279:67;:::i;:::-;3272:74;;3355:93;3444:3;3355:93;:::i;:::-;3473:2;3468:3;3464:12;3457:19;;3262:220;;;:::o;3488:366::-;;3651:67;3715:2;3710:3;3651:67;:::i;:::-;3644:74;;3727:93;3816:3;3727:93;:::i;:::-;3845:2;3840:3;3836:12;3829:19;;3634:220;;;:::o;3860:366::-;;4023:67;4087:2;4082:3;4023:67;:::i;:::-;4016:74;;4099:93;4188:3;4099:93;:::i;:::-;4217:2;4212:3;4208:12;4201:19;;4006:220;;;:::o;4232:366::-;;4395:67;4459:2;4454:3;4395:67;:::i;:::-;4388:74;;4471:93;4560:3;4471:93;:::i;:::-;4589:2;4584:3;4580:12;4573:19;;4378:220;;;:::o;4604:366::-;;4767:67;4831:2;4826:3;4767:67;:::i;:::-;4760:74;;4843:93;4932:3;4843:93;:::i;:::-;4961:2;4956:3;4952:12;4945:19;;4750:220;;;:::o;4976:366::-;;5139:67;5203:2;5198:3;5139:67;:::i;:::-;5132:74;;5215:93;5304:3;5215:93;:::i;:::-;5333:2;5328:3;5324:12;5317:19;;5122:220;;;:::o;5348:366::-;;5511:67;5575:2;5570:3;5511:67;:::i;:::-;5504:74;;5587:93;5676:3;5587:93;:::i;:::-;5705:2;5700:3;5696:12;5689:19;;5494:220;;;:::o;5720:366::-;;5883:67;5947:2;5942:3;5883:67;:::i;:::-;5876:74;;5959:93;6048:3;5959:93;:::i;:::-;6077:2;6072:3;6068:12;6061:19;;5866:220;;;:::o;6092:366::-;;6255:67;6319:2;6314:3;6255:67;:::i;:::-;6248:74;;6331:93;6420:3;6331:93;:::i;:::-;6449:2;6444:3;6440:12;6433:19;;6238:220;;;:::o;6464:366::-;;6627:67;6691:2;6686:3;6627:67;:::i;:::-;6620:74;;6703:93;6792:3;6703:93;:::i;:::-;6821:2;6816:3;6812:12;6805:19;;6610:220;;;:::o;6836:366::-;;6999:67;7063:2;7058:3;6999:67;:::i;:::-;6992:74;;7075:93;7164:3;7075:93;:::i;:::-;7193:2;7188:3;7184:12;7177:19;;6982:220;;;:::o;7208:366::-;;7371:67;7435:2;7430:3;7371:67;:::i;:::-;7364:74;;7447:93;7536:3;7447:93;:::i;:::-;7565:2;7560:3;7556:12;7549:19;;7354:220;;;:::o;7580:366::-;;7743:67;7807:2;7802:3;7743:67;:::i;:::-;7736:74;;7819:93;7908:3;7819:93;:::i;:::-;7937:2;7932:3;7928:12;7921:19;;7726:220;;;:::o;7952:366::-;;8115:67;8179:2;8174:3;8115:67;:::i;:::-;8108:74;;8191:93;8280:3;8191:93;:::i;:::-;8309:2;8304:3;8300:12;8293:19;;8098:220;;;:::o;8324:366::-;;8487:67;8551:2;8546:3;8487:67;:::i;:::-;8480:74;;8563:93;8652:3;8563:93;:::i;:::-;8681:2;8676:3;8672:12;8665:19;;8470:220;;;:::o;8696:118::-;8783:24;8801:5;8783:24;:::i;:::-;8778:3;8771:37;8761:53;;:::o;8820:118::-;8907:24;8925:5;8907:24;:::i;:::-;8902:3;8895:37;8885:53;;:::o;8944:112::-;9027:22;9043:5;9027:22;:::i;:::-;9022:3;9015:35;9005:51;;:::o;9062:222::-;;9193:2;9182:9;9178:18;9170:26;;9206:71;9274:1;9263:9;9259:17;9250:6;9206:71;:::i;:::-;9160:124;;;;:::o;9290:210::-;;9415:2;9404:9;9400:18;9392:26;;9428:65;9490:1;9479:9;9475:17;9466:6;9428:65;:::i;:::-;9382:118;;;;:::o;9506:313::-;;9657:2;9646:9;9642:18;9634:26;;9706:9;9700:4;9696:20;9692:1;9681:9;9677:17;9670:47;9734:78;9807:4;9798:6;9734:78;:::i;:::-;9726:86;;9624:195;;;;:::o;9825:419::-;;10029:2;10018:9;10014:18;10006:26;;10078:9;10072:4;10068:20;10064:1;10053:9;10049:17;10042:47;10106:131;10232:4;10106:131;:::i;:::-;10098:139;;9996:248;;;:::o;10250:419::-;;10454:2;10443:9;10439:18;10431:26;;10503:9;10497:4;10493:20;10489:1;10478:9;10474:17;10467:47;10531:131;10657:4;10531:131;:::i;:::-;10523:139;;10421:248;;;:::o;10675:419::-;;10879:2;10868:9;10864:18;10856:26;;10928:9;10922:4;10918:20;10914:1;10903:9;10899:17;10892:47;10956:131;11082:4;10956:131;:::i;:::-;10948:139;;10846:248;;;:::o;11100:419::-;;11304:2;11293:9;11289:18;11281:26;;11353:9;11347:4;11343:20;11339:1;11328:9;11324:17;11317:47;11381:131;11507:4;11381:131;:::i;:::-;11373:139;;11271:248;;;:::o;11525:419::-;;11729:2;11718:9;11714:18;11706:26;;11778:9;11772:4;11768:20;11764:1;11753:9;11749:17;11742:47;11806:131;11932:4;11806:131;:::i;:::-;11798:139;;11696:248;;;:::o;11950:419::-;;12154:2;12143:9;12139:18;12131:26;;12203:9;12197:4;12193:20;12189:1;12178:9;12174:17;12167:47;12231:131;12357:4;12231:131;:::i;:::-;12223:139;;12121:248;;;:::o;12375:419::-;;12579:2;12568:9;12564:18;12556:26;;12628:9;12622:4;12618:20;12614:1;12603:9;12599:17;12592:47;12656:131;12782:4;12656:131;:::i;:::-;12648:139;;12546:248;;;:::o;12800:419::-;;13004:2;12993:9;12989:18;12981:26;;13053:9;13047:4;13043:20;13039:1;13028:9;13024:17;13017:47;13081:131;13207:4;13081:131;:::i;:::-;13073:139;;12971:248;;;:::o;13225:419::-;;13429:2;13418:9;13414:18;13406:26;;13478:9;13472:4;13468:20;13464:1;13453:9;13449:17;13442:47;13506:131;13632:4;13506:131;:::i;:::-;13498:139;;13396:248;;;:::o;13650:419::-;;13854:2;13843:9;13839:18;13831:26;;13903:9;13897:4;13893:20;13889:1;13878:9;13874:17;13867:47;13931:131;14057:4;13931:131;:::i;:::-;13923:139;;13821:248;;;:::o;14075:419::-;;14279:2;14268:9;14264:18;14256:26;;14328:9;14322:4;14318:20;14314:1;14303:9;14299:17;14292:47;14356:131;14482:4;14356:131;:::i;:::-;14348:139;;14246:248;;;:::o;14500:419::-;;14704:2;14693:9;14689:18;14681:26;;14753:9;14747:4;14743:20;14739:1;14728:9;14724:17;14717:47;14781:131;14907:4;14781:131;:::i;:::-;14773:139;;14671:248;;;:::o;14925:419::-;;15129:2;15118:9;15114:18;15106:26;;15178:9;15172:4;15168:20;15164:1;15153:9;15149:17;15142:47;15206:131;15332:4;15206:131;:::i;:::-;15198:139;;15096:248;;;:::o;15350:419::-;;15554:2;15543:9;15539:18;15531:26;;15603:9;15597:4;15593:20;15589:1;15578:9;15574:17;15567:47;15631:131;15757:4;15631:131;:::i;:::-;15623:139;;15521:248;;;:::o;15775:419::-;;15979:2;15968:9;15964:18;15956:26;;16028:9;16022:4;16018:20;16014:1;16003:9;15999:17;15992:47;16056:131;16182:4;16056:131;:::i;:::-;16048:139;;15946:248;;;:::o;16200:222::-;;16331:2;16320:9;16316:18;16308:26;;16344:71;16412:1;16401:9;16397:17;16388:6;16344:71;:::i;:::-;16298:124;;;;:::o;16428:222::-;;16559:2;16548:9;16544:18;16536:26;;16572:71;16640:1;16629:9;16625:17;16616:6;16572:71;:::i;:::-;16526:124;;;;:::o;16656:332::-;;16815:2;16804:9;16800:18;16792:26;;16828:71;16896:1;16885:9;16881:17;16872:6;16828:71;:::i;:::-;16909:72;16977:2;16966:9;16962:18;16953:6;16909:72;:::i;:::-;16782:206;;;;;:::o;16994:214::-;;17121:2;17110:9;17106:18;17098:26;;17134:67;17198:1;17187:9;17183:17;17174:6;17134:67;:::i;:::-;17088:120;;;;:::o;17214:99::-;;17300:5;17294:12;17284:22;;17273:40;;;:::o;17319:169::-;;17437:6;17432:3;17425:19;17477:4;17472:3;17468:14;17453:29;;17415:73;;;;:::o;17494:305::-;;17553:20;17571:1;17553:20;:::i;:::-;17548:25;;17587:20;17605:1;17587:20;:::i;:::-;17582:25;;17741:1;17673:66;17669:74;17666:1;17663:81;17660:2;;;17747:18;;:::i;:::-;17660:2;17791:1;17788;17784:9;17777:16;;17538:261;;;;:::o;17805:185::-;;17862:20;17880:1;17862:20;:::i;:::-;17857:25;;17896:20;17914:1;17896:20;:::i;:::-;17891:25;;17935:1;17925:2;;17940:18;;:::i;:::-;17925:2;17982:1;17979;17975:9;17970:14;;17847:143;;;;:::o;17996:348::-;;18059:20;18077:1;18059:20;:::i;:::-;18054:25;;18093:20;18111:1;18093:20;:::i;:::-;18088:25;;18281:1;18213:66;18209:74;18206:1;18203:81;18198:1;18191:9;18184:17;18180:105;18177:2;;;18288:18;;:::i;:::-;18177:2;18336:1;18333;18329:9;18318:20;;18044:300;;;;:::o;18350:191::-;;18410:20;18428:1;18410:20;:::i;:::-;18405:25;;18444:20;18462:1;18444:20;:::i;:::-;18439:25;;18483:1;18480;18477:8;18474:2;;;18488:18;;:::i;:::-;18474:2;18533:1;18530;18526:9;18518:17;;18395:146;;;;:::o;18547:96::-;;18613:24;18631:5;18613:24;:::i;:::-;18602:35;;18592:51;;;:::o;18649:90::-;;18726:5;18719:13;18712:21;18701:32;;18691:48;;;:::o;18745:118::-;;18822:34;18815:5;18811:46;18800:57;;18790:73;;;:::o;18869:126::-;;18946:42;18939:5;18935:54;18924:65;;18914:81;;;:::o;19001:77::-;;19067:5;19056:16;;19046:32;;;:::o;19084:86::-;;19159:4;19152:5;19148:16;19137:27;;19127:43;;;:::o;19176:307::-;19244:1;19254:113;19268:6;19265:1;19262:13;19254:113;;;19353:1;19348:3;19344:11;19338:18;19334:1;19329:3;19325:11;19318:39;19290:2;19287:1;19283:10;19278:15;;19254:113;;;19385:6;19382:1;19379:13;19376:2;;;19465:1;19456:6;19451:3;19447:16;19440:27;19376:2;19225:258;;;;:::o;19489:320::-;;19570:1;19564:4;19560:12;19550:22;;19617:1;19611:4;19607:12;19638:18;19628:2;;19694:4;19686:6;19682:17;19672:27;;19628:2;19756;19748:6;19745:14;19725:18;19722:38;19719:2;;;19775:18;;:::i;:::-;19719:2;19540:269;;;;:::o;19815:176::-;;19864:20;19882:1;19864:20;:::i;:::-;19859:25;;19898:20;19916:1;19898:20;:::i;:::-;19893:25;;19937:1;19927:2;;19942:18;;:::i;:::-;19927:2;19983:1;19980;19976:9;19971:14;;19849:142;;;;:::o;19997:180::-;20045:77;20042:1;20035:88;20142:4;20139:1;20132:15;20166:4;20163:1;20156:15;20183:180;20231:77;20228:1;20221:88;20328:4;20325:1;20318:15;20352:4;20349:1;20342:15;20369:180;20417:77;20414:1;20407:88;20514:4;20511:1;20504:15;20538:4;20535:1;20528:15;20555:102;;20647:2;20643:7;20638:2;20631:5;20627:14;20623:28;20613:38;;20603:54;;;:::o;20663:222::-;20803:34;20799:1;20791:6;20787:14;20780:58;20872:5;20867:2;20859:6;20855:15;20848:30;20769:116;:::o;20891:232::-;21031:34;21027:1;21019:6;21015:14;21008:58;21100:15;21095:2;21087:6;21083:15;21076:40;20997:126;:::o;21129:237::-;21269:34;21265:1;21257:6;21253:14;21246:58;21338:20;21333:2;21325:6;21321:15;21314:45;21235:131;:::o;21372:225::-;21512:34;21508:1;21500:6;21496:14;21489:58;21581:8;21576:2;21568:6;21564:15;21557:33;21478:119;:::o;21603:221::-;21743:34;21739:1;21731:6;21727:14;21720:58;21812:4;21807:2;21799:6;21795:15;21788:29;21709:115;:::o;21830:228::-;21970:34;21966:1;21958:6;21954:14;21947:58;22039:11;22034:2;22026:6;22022:15;22015:36;21936:122;:::o;22064:225::-;22204:34;22200:1;22192:6;22188:14;22181:58;22273:8;22268:2;22260:6;22256:15;22249:33;22170:119;:::o;22295:231::-;22435:34;22431:1;22423:6;22419:14;22412:58;22504:14;22499:2;22491:6;22487:15;22480:39;22401:125;:::o;22532:230::-;22672:34;22668:1;22660:6;22656:14;22649:58;22741:13;22736:2;22728:6;22724:15;22717:38;22638:124;:::o;22768:227::-;22908:34;22904:1;22896:6;22892:14;22885:58;22977:10;22972:2;22964:6;22960:15;22953:35;22874:121;:::o;23001:182::-;23141:34;23137:1;23129:6;23125:14;23118:58;23107:76;:::o;23189:224::-;23329:34;23325:1;23317:6;23313:14;23306:58;23398:7;23393:2;23385:6;23381:15;23374:32;23295:118;:::o;23419:223::-;23559:34;23555:1;23547:6;23543:14;23536:58;23628:6;23623:2;23615:6;23611:15;23604:31;23525:117;:::o;23648:236::-;23788:34;23784:1;23776:6;23772:14;23765:58;23857:19;23852:2;23844:6;23840:15;23833:44;23754:130;:::o;23890:224::-;24030:34;24026:1;24018:6;24014:14;24007:58;24099:7;24094:2;24086:6;24082:15;24075:32;23996:118;:::o;24120:122::-;24193:24;24211:5;24193:24;:::i;:::-;24186:5;24183:35;24173:2;;24232:1;24229;24222:12;24173:2;24163:79;:::o;24248:122::-;24321:24;24339:5;24321:24;:::i;:::-;24314:5;24311:35;24301:2;;24360:1;24357;24350:12;24301:2;24291:79;:::o

Swarm Source

ipfs://ff477603eee65922adc0e88083abef1fcda42c119dc941d4d45d38e1cb8f776f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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