Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 246 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Unlock | 12276584 | 1804 days ago | IN | 0 ETH | 0.00826294 | ||||
| Unlock | 12276584 | 1804 days ago | IN | 0 ETH | 0.01184794 | ||||
| Unlock | 12276582 | 1804 days ago | IN | 0 ETH | 0.01184794 | ||||
| Unlock | 12276575 | 1804 days ago | IN | 0 ETH | 0.00966673 | ||||
| Unlock | 12276575 | 1804 days ago | IN | 0 ETH | 0.00966673 | ||||
| Unlock | 12276570 | 1804 days ago | IN | 0 ETH | 0.01179837 | ||||
| Unlock | 12276545 | 1804 days ago | IN | 0 ETH | 0.00966673 | ||||
| Unlock | 12276545 | 1804 days ago | IN | 0 ETH | 0.00966673 | ||||
| Unlock | 12276539 | 1804 days ago | IN | 0 ETH | 0.01095563 | ||||
| Unlock | 12276539 | 1804 days ago | IN | 0 ETH | 0.01095563 | ||||
| Unlock | 12276537 | 1804 days ago | IN | 0 ETH | 0.01095563 | ||||
| Unlock | 12276535 | 1804 days ago | IN | 0 ETH | 0.01095563 | ||||
| Unlock | 12276534 | 1804 days ago | IN | 0 ETH | 0.01095563 | ||||
| Unlock | 12276531 | 1804 days ago | IN | 0 ETH | 0.01060862 | ||||
| Unlock | 12276531 | 1804 days ago | IN | 0 ETH | 0.01060862 | ||||
| Unlock | 12276525 | 1804 days ago | IN | 0 ETH | 0.01060862 | ||||
| Unlock | 12276523 | 1804 days ago | IN | 0 ETH | 0.01060862 | ||||
| Unlock | 12276522 | 1804 days ago | IN | 0 ETH | 0.01060862 | ||||
| Unlock | 12276514 | 1804 days ago | IN | 0 ETH | 0.01386798 | ||||
| Unlock | 12276514 | 1804 days ago | IN | 0 ETH | 0.01031118 | ||||
| Unlock | 12276514 | 1804 days ago | IN | 0 ETH | 0.01031118 | ||||
| Unlock | 12276514 | 1804 days ago | IN | 0 ETH | 0.01031118 | ||||
| Unlock | 12276514 | 1804 days ago | IN | 0 ETH | 0.01031118 | ||||
| Unlock | 12276495 | 1804 days ago | IN | 0 ETH | 0.0104599 | ||||
| Unlock | 12276495 | 1804 days ago | IN | 0 ETH | 0.01045737 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GeoLock
Compiler Version
v0.6.10+commit.00c0fcaf
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-03-18
*/
// File: contracts/helpers/Claimable.sol
pragma solidity ^0.6.0;
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender
* account.
*/
constructor () public {
owner = msg.sender;
emit OwnershipTransferred(address(0), owner);
}
function isOwner() public view returns(bool) {
return (owner == msg.sender);
}
modifier onlyContractOwner() {
require(isOwner(), "Not a contract owner");
_;
}
}
contract Claimable is Ownable {
address public pendingOwner;
function transferOwnership(address _newOwner) public onlyContractOwner() {
require(_newOwner != address(0), "Owner is zero address");
pendingOwner = _newOwner;
}
function claimOwnership() public {
require(msg.sender == pendingOwner, "Not a pending owner");
address previousOwner = owner;
owner = msg.sender;
pendingOwner = address(0);
emit OwnershipTransferred(previousOwner, msg.sender);
}
}
// File: @openzeppelin/contracts/math/SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
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) {
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) {
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) {
// 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) {
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) {
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) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @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) {
require(b <= a, "SafeMath: subtraction overflow");
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) {
if (a == 0) return 0;
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @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. 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) internal pure returns (uint256) {
require(b > 0, "SafeMath: division by zero");
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) {
require(b > 0, "SafeMath: modulo by zero");
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) {
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.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryDiv}.
*
* 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) {
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) {
require(b > 0, errorMessage);
return a % b;
}
}
// File: @openzeppelin/contracts/utils/Context.sol
pragma solidity >=0.6.0 <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 payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File: @openzeppelin/contracts/token/ERC777/IERC777.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Interface of the ERC777Token standard as defined in the EIP.
*
* This contract uses the
* https://eips.ethereum.org/EIPS/eip-1820[ERC1820 registry standard] to let
* token holders and recipients react to token movements by using setting implementers
* for the associated interfaces in said registry. See {IERC1820Registry} and
* {ERC1820Implementer}.
*/
interface IERC777 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the smallest part of the token that is not divisible. This
* means all token operations (creation, movement and destruction) must have
* amounts that are a multiple of this number.
*
* For most token contracts, this value will equal 1.
*/
function granularity() external view returns (uint256);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by an account (`owner`).
*/
function balanceOf(address owner) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* If send or receive hooks are registered for the caller and `recipient`,
* the corresponding functions will be called with `data` and empty
* `operatorData`. See {IERC777Sender} and {IERC777Recipient}.
*
* Emits a {Sent} event.
*
* Requirements
*
* - the caller must have at least `amount` tokens.
* - `recipient` cannot be the zero address.
* - if `recipient` is a contract, it must implement the {IERC777Recipient}
* interface.
*/
function send(address recipient, uint256 amount, bytes calldata data) external;
/**
* @dev Destroys `amount` tokens from the caller's account, reducing the
* total supply.
*
* If a send hook is registered for the caller, the corresponding function
* will be called with `data` and empty `operatorData`. See {IERC777Sender}.
*
* Emits a {Burned} event.
*
* Requirements
*
* - the caller must have at least `amount` tokens.
*/
function burn(uint256 amount, bytes calldata data) external;
/**
* @dev Returns true if an account is an operator of `tokenHolder`.
* Operators can send and burn tokens on behalf of their owners. All
* accounts are their own operator.
*
* See {operatorSend} and {operatorBurn}.
*/
function isOperatorFor(address operator, address tokenHolder) external view returns (bool);
/**
* @dev Make an account an operator of the caller.
*
* See {isOperatorFor}.
*
* Emits an {AuthorizedOperator} event.
*
* Requirements
*
* - `operator` cannot be calling address.
*/
function authorizeOperator(address operator) external;
/**
* @dev Revoke an account's operator status for the caller.
*
* See {isOperatorFor} and {defaultOperators}.
*
* Emits a {RevokedOperator} event.
*
* Requirements
*
* - `operator` cannot be calling address.
*/
function revokeOperator(address operator) external;
/**
* @dev Returns the list of default operators. These accounts are operators
* for all token holders, even if {authorizeOperator} was never called on
* them.
*
* This list is immutable, but individual holders may revoke these via
* {revokeOperator}, in which case {isOperatorFor} will return false.
*/
function defaultOperators() external view returns (address[] memory);
/**
* @dev Moves `amount` tokens from `sender` to `recipient`. The caller must
* be an operator of `sender`.
*
* If send or receive hooks are registered for `sender` and `recipient`,
* the corresponding functions will be called with `data` and
* `operatorData`. See {IERC777Sender} and {IERC777Recipient}.
*
* Emits a {Sent} event.
*
* Requirements
*
* - `sender` cannot be the zero address.
* - `sender` must have at least `amount` tokens.
* - the caller must be an operator for `sender`.
* - `recipient` cannot be the zero address.
* - if `recipient` is a contract, it must implement the {IERC777Recipient}
* interface.
*/
function operatorSend(
address sender,
address recipient,
uint256 amount,
bytes calldata data,
bytes calldata operatorData
) external;
/**
* @dev Destroys `amount` tokens from `account`, reducing the total supply.
* The caller must be an operator of `account`.
*
* If a send hook is registered for `account`, the corresponding function
* will be called with `data` and `operatorData`. See {IERC777Sender}.
*
* Emits a {Burned} event.
*
* Requirements
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
* - the caller must be an operator for `account`.
*/
function operatorBurn(
address account,
uint256 amount,
bytes calldata data,
bytes calldata operatorData
) external;
event Sent(
address indexed operator,
address indexed from,
address indexed to,
uint256 amount,
bytes data,
bytes operatorData
);
event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData);
event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData);
event AuthorizedOperator(address indexed operator, address indexed tokenHolder);
event RevokedOperator(address indexed operator, address indexed tokenHolder);
}
// File: @openzeppelin/contracts/token/ERC777/IERC777Recipient.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Interface of the ERC777TokensRecipient standard as defined in the EIP.
*
* Accounts can be notified of {IERC777} tokens being sent to them by having a
* contract implement this interface (contract holders can be their own
* implementer) and registering it on the
* https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry].
*
* See {IERC1820Registry} and {ERC1820Implementer}.
*/
interface IERC777Recipient {
/**
* @dev Called by an {IERC777} token contract whenever tokens are being
* moved or created into a registered account (`to`). The type of operation
* is conveyed by `from` being the zero address or not.
*
* This call occurs _after_ the token contract's state is updated, so
* {IERC777-balanceOf}, etc., can be used to query the post-operation state.
*
* This function may revert to prevent the operation from being executed.
*/
function tokensReceived(
address operator,
address from,
address to,
uint256 amount,
bytes calldata userData,
bytes calldata operatorData
) external;
}
// File: @openzeppelin/contracts/token/ERC777/IERC777Sender.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Interface of the ERC777TokensSender standard as defined in the EIP.
*
* {IERC777} Token holders can be notified of operations performed on their
* tokens by having a contract implement this interface (contract holders can be
* their own implementer) and registering it on the
* https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry].
*
* See {IERC1820Registry} and {ERC1820Implementer}.
*/
interface IERC777Sender {
/**
* @dev Called by an {IERC777} token contract whenever a registered holder's
* (`from`) tokens are about to be moved or destroyed. The type of operation
* is conveyed by `to` being the zero address or not.
*
* This call occurs _before_ the token contract's state is updated, so
* {IERC777-balanceOf}, etc., can be used to query the pre-operation state.
*
* This function may revert to prevent the operation from being executed.
*/
function tokensToSend(
address operator,
address from,
address to,
uint256 amount,
bytes calldata userData,
bytes calldata operatorData
) external;
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
pragma solidity >=0.6.0 <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: @openzeppelin/contracts/utils/Address.sol
pragma solidity >=0.6.2 <0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/introspection/IERC1820Registry.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Interface of the global ERC1820 Registry, as defined in the
* https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register
* implementers for interfaces in this registry, as well as query support.
*
* Implementers may be shared by multiple accounts, and can also implement more
* than a single interface for each account. Contracts can implement interfaces
* for themselves, but externally-owned accounts (EOA) must delegate this to a
* contract.
*
* {IERC165} interfaces can also be queried via the registry.
*
* For an in-depth explanation and source code analysis, see the EIP text.
*/
interface IERC1820Registry {
/**
* @dev Sets `newManager` as the manager for `account`. A manager of an
* account is able to set interface implementers for it.
*
* By default, each account is its own manager. Passing a value of `0x0` in
* `newManager` will reset the manager to this initial state.
*
* Emits a {ManagerChanged} event.
*
* Requirements:
*
* - the caller must be the current manager for `account`.
*/
function setManager(address account, address newManager) external;
/**
* @dev Returns the manager for `account`.
*
* See {setManager}.
*/
function getManager(address account) external view returns (address);
/**
* @dev Sets the `implementer` contract as ``account``'s implementer for
* `interfaceHash`.
*
* `account` being the zero address is an alias for the caller's address.
* The zero address can also be used in `implementer` to remove an old one.
*
* See {interfaceHash} to learn how these are created.
*
* Emits an {InterfaceImplementerSet} event.
*
* Requirements:
*
* - the caller must be the current manager for `account`.
* - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not
* end in 28 zeroes).
* - `implementer` must implement {IERC1820Implementer} and return true when
* queried for support, unless `implementer` is the caller. See
* {IERC1820Implementer-canImplementInterfaceForAddress}.
*/
function setInterfaceImplementer(address account, bytes32 _interfaceHash, address implementer) external;
/**
* @dev Returns the implementer of `interfaceHash` for `account`. If no such
* implementer is registered, returns the zero address.
*
* If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28
* zeroes), `account` will be queried for support of it.
*
* `account` being the zero address is an alias for the caller's address.
*/
function getInterfaceImplementer(address account, bytes32 _interfaceHash) external view returns (address);
/**
* @dev Returns the interface hash for an `interfaceName`, as defined in the
* corresponding
* https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP].
*/
function interfaceHash(string calldata interfaceName) external pure returns (bytes32);
/**
* @notice Updates the cache with whether the contract implements an ERC165 interface or not.
* @param account Address of the contract for which to update the cache.
* @param interfaceId ERC165 interface for which to update the cache.
*/
function updateERC165Cache(address account, bytes4 interfaceId) external;
/**
* @notice Checks whether a contract implements an ERC165 interface or not.
* If the result is not cached a direct lookup on the contract address is performed.
* If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling
* {updateERC165Cache} with the contract address.
* @param account Address of the contract to check.
* @param interfaceId ERC165 interface to check.
* @return True if `account` implements `interfaceId`, false otherwise.
*/
function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool);
/**
* @notice Checks whether a contract implements an ERC165 interface or not without using nor updating the cache.
* @param account Address of the contract to check.
* @param interfaceId ERC165 interface to check.
* @return True if `account` implements `interfaceId`, false otherwise.
*/
function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool);
event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer);
event ManagerChanged(address indexed account, address indexed newManager);
}
// File: @openzeppelin/contracts/token/ERC777/ERC777.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Implementation of the {IERC777} 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}.
*
* Support for ERC20 is included in this contract, as specified by the EIP: both
* the ERC777 and ERC20 interfaces can be safely used when interacting with it.
* Both {IERC777-Sent} and {IERC20-Transfer} events are emitted on token
* movements.
*
* Additionally, the {IERC777-granularity} value is hard-coded to `1`, meaning that there
* are no special restrictions in the amount of tokens that created, moved, or
* destroyed. This makes integration with ERC20 applications seamless.
*/
contract ERC777 is Context, IERC777, IERC20 {
using SafeMath for uint256;
using Address for address;
IERC1820Registry constant internal _ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);
mapping(address => uint256) private _balances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
// We inline the result of the following hashes because Solidity doesn't resolve them at compile time.
// See https://github.com/ethereum/solidity/issues/4024.
// keccak256("ERC777TokensSender")
bytes32 constant private _TOKENS_SENDER_INTERFACE_HASH =
0x29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe895;
// keccak256("ERC777TokensRecipient")
bytes32 constant private _TOKENS_RECIPIENT_INTERFACE_HASH =
0xb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b;
// This isn't ever read from - it's only used to respond to the defaultOperators query.
address[] private _defaultOperatorsArray;
// Immutable, but accounts may revoke them (tracked in __revokedDefaultOperators).
mapping(address => bool) private _defaultOperators;
// For each account, a mapping of its operators and revoked default operators.
mapping(address => mapping(address => bool)) private _operators;
mapping(address => mapping(address => bool)) private _revokedDefaultOperators;
// ERC20-allowances
mapping (address => mapping (address => uint256)) private _allowances;
/**
* @dev `defaultOperators` may be an empty array.
*/
constructor(
string memory name_,
string memory symbol_,
address[] memory defaultOperators_
)
public
{
_name = name_;
_symbol = symbol_;
_defaultOperatorsArray = defaultOperators_;
for (uint256 i = 0; i < _defaultOperatorsArray.length; i++) {
_defaultOperators[_defaultOperatorsArray[i]] = true;
}
// register interfaces
_ERC1820_REGISTRY.setInterfaceImplementer(address(this), keccak256("ERC777Token"), address(this));
_ERC1820_REGISTRY.setInterfaceImplementer(address(this), keccak256("ERC20Token"), address(this));
}
/**
* @dev See {IERC777-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC777-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {ERC20-decimals}.
*
* Always returns 18, as per the
* [ERC777 EIP](https://eips.ethereum.org/EIPS/eip-777#backward-compatibility).
*/
function decimals() public pure virtual returns (uint8) {
return 18;
}
/**
* @dev See {IERC777-granularity}.
*
* This implementation always returns `1`.
*/
function granularity() public view virtual override returns (uint256) {
return 1;
}
/**
* @dev See {IERC777-totalSupply}.
*/
function totalSupply() public view virtual override(IERC20, IERC777) returns (uint256) {
return _totalSupply;
}
/**
* @dev Returns the amount of tokens owned by an account (`tokenHolder`).
*/
function balanceOf(address tokenHolder) public view virtual override(IERC20, IERC777) returns (uint256) {
return _balances[tokenHolder];
}
/**
* @dev See {IERC777-send}.
*
* Also emits a {IERC20-Transfer} event for ERC20 compatibility.
*/
function send(address recipient, uint256 amount, bytes memory data) public virtual override {
_send(_msgSender(), recipient, amount, data, "", true);
}
/**
* @dev See {IERC20-transfer}.
*
* Unlike `send`, `recipient` is _not_ required to implement the {IERC777Recipient}
* interface if it is a contract.
*
* Also emits a {Sent} event.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
require(recipient != address(0), "ERC777: transfer to the zero address");
address from = _msgSender();
_callTokensToSend(from, from, recipient, amount, "", "");
_move(from, from, recipient, amount, "", "");
_callTokensReceived(from, from, recipient, amount, "", "", false);
return true;
}
/**
* @dev See {IERC777-burn}.
*
* Also emits a {IERC20-Transfer} event for ERC20 compatibility.
*/
function burn(uint256 amount, bytes memory data) public virtual override {
_burn(_msgSender(), amount, data, "");
}
/**
* @dev See {IERC777-isOperatorFor}.
*/
function isOperatorFor(address operator, address tokenHolder) public view virtual override returns (bool) {
return operator == tokenHolder ||
(_defaultOperators[operator] && !_revokedDefaultOperators[tokenHolder][operator]) ||
_operators[tokenHolder][operator];
}
/**
* @dev See {IERC777-authorizeOperator}.
*/
function authorizeOperator(address operator) public virtual override {
require(_msgSender() != operator, "ERC777: authorizing self as operator");
if (_defaultOperators[operator]) {
delete _revokedDefaultOperators[_msgSender()][operator];
} else {
_operators[_msgSender()][operator] = true;
}
emit AuthorizedOperator(operator, _msgSender());
}
/**
* @dev See {IERC777-revokeOperator}.
*/
function revokeOperator(address operator) public virtual override {
require(operator != _msgSender(), "ERC777: revoking self as operator");
if (_defaultOperators[operator]) {
_revokedDefaultOperators[_msgSender()][operator] = true;
} else {
delete _operators[_msgSender()][operator];
}
emit RevokedOperator(operator, _msgSender());
}
/**
* @dev See {IERC777-defaultOperators}.
*/
function defaultOperators() public view virtual override returns (address[] memory) {
return _defaultOperatorsArray;
}
/**
* @dev See {IERC777-operatorSend}.
*
* Emits {Sent} and {IERC20-Transfer} events.
*/
function operatorSend(
address sender,
address recipient,
uint256 amount,
bytes memory data,
bytes memory operatorData
)
public
virtual
override
{
require(isOperatorFor(_msgSender(), sender), "ERC777: caller is not an operator for holder");
_send(sender, recipient, amount, data, operatorData, true);
}
/**
* @dev See {IERC777-operatorBurn}.
*
* Emits {Burned} and {IERC20-Transfer} events.
*/
function operatorBurn(address account, uint256 amount, bytes memory data, bytes memory operatorData) public virtual override {
require(isOperatorFor(_msgSender(), account), "ERC777: caller is not an operator for holder");
_burn(account, amount, data, operatorData);
}
/**
* @dev See {IERC20-allowance}.
*
* Note that operator and allowance concepts are orthogonal: operators may
* not have allowance, and accounts with allowance may not be operators
* themselves.
*/
function allowance(address holder, address spender) public view virtual override returns (uint256) {
return _allowances[holder][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Note that accounts cannot have allowance issued by their operators.
*/
function approve(address spender, uint256 value) public virtual override returns (bool) {
address holder = _msgSender();
_approve(holder, spender, value);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Note that operator and allowance concepts are orthogonal: operators cannot
* call `transferFrom` (unless they have allowance), and accounts with
* allowance cannot call `operatorSend` (unless they are operators).
*
* Emits {Sent}, {IERC20-Transfer} and {IERC20-Approval} events.
*/
function transferFrom(address holder, address recipient, uint256 amount) public virtual override returns (bool) {
require(recipient != address(0), "ERC777: transfer to the zero address");
require(holder != address(0), "ERC777: transfer from the zero address");
address spender = _msgSender();
_callTokensToSend(spender, holder, recipient, amount, "", "");
_move(spender, holder, recipient, amount, "", "");
_approve(holder, spender, _allowances[holder][spender].sub(amount, "ERC777: transfer amount exceeds allowance"));
_callTokensReceived(spender, holder, recipient, amount, "", "", false);
return true;
}
/**
* @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* If a send hook is registered for `account`, the corresponding function
* will be called with `operator`, `data` and `operatorData`.
*
* See {IERC777Sender} and {IERC777Recipient}.
*
* Emits {Minted} and {IERC20-Transfer} events.
*
* Requirements
*
* - `account` cannot be the zero address.
* - if `account` is a contract, it must implement the {IERC777Recipient}
* interface.
*/
function _mint(
address account,
uint256 amount,
bytes memory userData,
bytes memory operatorData
)
internal
virtual
{
require(account != address(0), "ERC777: mint to the zero address");
address operator = _msgSender();
_beforeTokenTransfer(operator, address(0), account, amount);
// Update state variables
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
_callTokensReceived(operator, address(0), account, amount, userData, operatorData, true);
emit Minted(operator, account, amount, userData, operatorData);
emit Transfer(address(0), account, amount);
}
/**
* @dev Send tokens
* @param from address token holder address
* @param to address recipient address
* @param amount uint256 amount of tokens to transfer
* @param userData bytes extra information provided by the token holder (if any)
* @param operatorData bytes extra information provided by the operator (if any)
* @param requireReceptionAck if true, contract recipients are required to implement ERC777TokensRecipient
*/
function _send(
address from,
address to,
uint256 amount,
bytes memory userData,
bytes memory operatorData,
bool requireReceptionAck
)
internal
virtual
{
require(from != address(0), "ERC777: send from the zero address");
require(to != address(0), "ERC777: send to the zero address");
address operator = _msgSender();
_callTokensToSend(operator, from, to, amount, userData, operatorData);
_move(operator, from, to, amount, userData, operatorData);
_callTokensReceived(operator, from, to, amount, userData, operatorData, requireReceptionAck);
}
/**
* @dev Burn tokens
* @param from address token holder address
* @param amount uint256 amount of tokens to burn
* @param data bytes extra information provided by the token holder
* @param operatorData bytes extra information provided by the operator (if any)
*/
function _burn(
address from,
uint256 amount,
bytes memory data,
bytes memory operatorData
)
internal
virtual
{
require(from != address(0), "ERC777: burn from the zero address");
address operator = _msgSender();
_callTokensToSend(operator, from, address(0), amount, data, operatorData);
_beforeTokenTransfer(operator, from, address(0), amount);
// Update state variables
_balances[from] = _balances[from].sub(amount, "ERC777: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Burned(operator, from, amount, data, operatorData);
emit Transfer(from, address(0), amount);
}
function _move(
address operator,
address from,
address to,
uint256 amount,
bytes memory userData,
bytes memory operatorData
)
private
{
_beforeTokenTransfer(operator, from, to, amount);
_balances[from] = _balances[from].sub(amount, "ERC777: transfer amount exceeds balance");
_balances[to] = _balances[to].add(amount);
emit Sent(operator, from, to, amount, userData, operatorData);
emit Transfer(from, to, amount);
}
/**
* @dev See {ERC20-_approve}.
*
* Note that accounts cannot have allowance issued by their operators.
*/
function _approve(address holder, address spender, uint256 value) internal {
require(holder != address(0), "ERC777: approve from the zero address");
require(spender != address(0), "ERC777: approve to the zero address");
_allowances[holder][spender] = value;
emit Approval(holder, spender, value);
}
/**
* @dev Call from.tokensToSend() if the interface is registered
* @param operator address operator requesting the transfer
* @param from address token holder address
* @param to address recipient address
* @param amount uint256 amount of tokens to transfer
* @param userData bytes extra information provided by the token holder (if any)
* @param operatorData bytes extra information provided by the operator (if any)
*/
function _callTokensToSend(
address operator,
address from,
address to,
uint256 amount,
bytes memory userData,
bytes memory operatorData
)
private
{
address implementer = _ERC1820_REGISTRY.getInterfaceImplementer(from, _TOKENS_SENDER_INTERFACE_HASH);
if (implementer != address(0)) {
IERC777Sender(implementer).tokensToSend(operator, from, to, amount, userData, operatorData);
}
}
/**
* @dev Call to.tokensReceived() if the interface is registered. Reverts if the recipient is a contract but
* tokensReceived() was not registered for the recipient
* @param operator address operator requesting the transfer
* @param from address token holder address
* @param to address recipient address
* @param amount uint256 amount of tokens to transfer
* @param userData bytes extra information provided by the token holder (if any)
* @param operatorData bytes extra information provided by the operator (if any)
* @param requireReceptionAck if true, contract recipients are required to implement ERC777TokensRecipient
*/
function _callTokensReceived(
address operator,
address from,
address to,
uint256 amount,
bytes memory userData,
bytes memory operatorData,
bool requireReceptionAck
)
private
{
address implementer = _ERC1820_REGISTRY.getInterfaceImplementer(to, _TOKENS_RECIPIENT_INTERFACE_HASH);
if (implementer != address(0)) {
IERC777Recipient(implementer).tokensReceived(operator, from, to, amount, userData, operatorData);
} else if (requireReceptionAck) {
require(!to.isContract(), "ERC777: token recipient contract has no implementer for ERC777TokensRecipient");
}
}
/**
* @dev Hook that is called before any token transfer. This includes
* calls to {send}, {transfer}, {operatorSend}, 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 operator, address from, address to, uint256 amount) internal virtual { }
}
// File: contracts/GeoLock.sol
pragma solidity ^0.6.0;
contract GeoLock is Claimable {
using SafeMath for uint;
uint256 public constant MAX_LOCK_AMOUNT = 300000000000000000000000;
uint256 public constant MULTIPLIER = 3;
IERC1820Registry private _erc1820 =
IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24); // See EIP1820
bytes32 private constant TOKENS_SENDER_INTERFACE_HASH =
keccak256("ERC777TokensSender"); // See EIP777
bytes32 private constant TOKENS_RECIPIENT_INTERFACE_HASH =
keccak256("ERC777TokensRecipient"); // See EIP777
ERC777 public geoToken;
mapping(address => uint256) public lockedAssets;
mapping(address => bool) public whitelist;
constructor (ERC777 _geoToken, address[] memory _whitelist) public {
require(address(_geoToken) != address(0), "Token is zero address");
geoToken = _geoToken;
for (uint256 i = 0; i < _whitelist.length; i++) {
whitelist[_whitelist[i]] = true;
}
// Register as a oken receiver
_erc1820.setInterfaceImplementer(
address(this),
TOKENS_RECIPIENT_INTERFACE_HASH,
address(this)
);
// Register as a token sender
_erc1820.setInterfaceImplementer(
address(this),
TOKENS_SENDER_INTERFACE_HASH,
address(this)
);
}
function tokensToSend(
address, /*operator*/
address from,
address, /*to*/
uint256, /*amount*/
bytes calldata, /*userData*/
bytes calldata /*operatorData*/
) external view {
require(
msg.sender == address(geoToken),
"Can only be called by the GeoDB GeoTokens contract"
);
require(from == address(this), "Sender is not SelfContract");
}
function tokensReceived(
address operator,
address, /*from*/
address, /*to*/
uint256, /*amount*/
bytes calldata, /*userData*/
bytes calldata /*operatorData*/
) external view {
require(
msg.sender == address(geoToken),
"Can only receive GeoDB GeoTokens"
);
require(
operator == address(this),
"Can only receive tokens from this contract"
);
}
modifier onlyWhitelisted() {
require(whitelist[msg.sender], "Not whitelisted");
_;
}
function addToWhitelist(address[] memory _whitelist) external onlyContractOwner() {
for (uint256 i = 0; i < _whitelist.length; i++) {
whitelist[_whitelist[i]] = true;
}
}
function lock(uint256 _amount) external onlyWhitelisted() {
uint256 _userAsset = lockedAssets[msg.sender];
require(_userAsset.add(_amount) <= MAX_LOCK_AMOUNT, "Total lock amount exceeds MAX_LOCK_AMOUNT");
geoToken.transferFrom(msg.sender, address(this), _amount);
lockedAssets[msg.sender] = _userAsset.add(_amount);
}
function unlock(address _user) external onlyContractOwner() {
uint256 lockedAmount = lockedAssets[_user];
lockedAssets[_user] = 0;
geoToken.transfer(_user, lockedAmount);
}
function burnForUser(address _user) external onlyContractOwner() {
uint256 lockedAmount = lockedAssets[_user];
lockedAssets[_user] = 0;
geoToken.burn(lockedAmount, "");
}
function burnAll() external onlyContractOwner() {
geoToken.burn(geoToken.balanceOf(address(this)), "");
}
function getDividedAmount(address _user) external view returns(uint256) {
return lockedAssets[_user].div(MULTIPLIER);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract ERC777","name":"_geoToken","type":"address"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"MAX_LOCK_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"burnForUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geoToken","outputs":[{"internalType":"contract ERC777","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getDividedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lockedAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"tokensReceived","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"tokensToSend","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052731820a4b7618bde71dce8cdc73aab6c95905fad24600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006657600080fd5b5060405162001fe038038062001fe0833981810160405260408110156200008c57600080fd5b810190808051906020019092919080516040519392919084640100000000821115620000b757600080fd5b83820191506020820185811115620000ce57600080fd5b8251866020820283011164010000000082111715620000ec57600080fd5b8083526020830192505050908051906020019060200280838360005b838110156200012557808201518184015260208101905062000108565b50505050905001604052505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000292576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f6b656e206973207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008090505b81518110156200035d57600160056000848481518110620002f657fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050620002d9565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329965a1d3060405180807f455243373737546f6b656e73526563697069656e74000000000000000000000081525060150190506040518091039020306040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156200047157600080fd5b505af115801562000486573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329965a1d3060405180807f455243373737546f6b656e7353656e646572000000000000000000000000000081525060120190506040518091039020306040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156200059d57600080fd5b505af1158015620005b2573d6000803e3d6000fd5b505050505050611a1880620005c86000396000f3fe608060405234801561001057600080fd5b50600436106101155760003560e01c80638da5cb5b116100a2578063dd46706411610071578063dd4670641461064e578063e30c39781461067c578063ef25e5ef146106c6578063f2fde38b14610710578063fc720f701461075457610115565b80638da5cb5b1461057c5780638f32d59b146105c65780639975038c146105e85780639b19251a146105f257610115565b80633e5a2dc7116100e95780633e5a2dc71461030c5780634e71e0c81461032a57806375ab9782146103345780637f6497831461046c5780638ad68c361461052457610115565b806223de291461011a578063059f8b16146102525780631721c5aa146102705780632f6c493c146102c8575b600080fd5b610250600480360360c081101561013057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156101b757600080fd5b8201836020820111156101c957600080fd5b803590602001918460018302840111640100000000831117156101eb57600080fd5b90919293919293908035906020019064010000000081111561020c57600080fd5b82018360208201111561021e57600080fd5b8035906020019184600183028401116401000000008311171561024057600080fd5b9091929391929390505050610798565b005b61025a6108e9565b6040518082815260200191505060405180910390f35b6102b26004803603602081101561028657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108ee565b6040518082815260200191505060405180910390f35b61030a600480360360208110156102de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610906565b005b610314610af2565b6040518082815260200191505060405180910390f35b610332610b00565b005b61046a600480360360c081101561034a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156103d157600080fd5b8201836020820111156103e357600080fd5b8035906020019184600183028401116401000000008311171561040557600080fd5b90919293919293908035906020019064010000000081111561042657600080fd5b82018360208201111561043857600080fd5b8035906020019184600183028401116401000000008311171561045a57600080fd5b9091929391929390505050610cc8565b005b6105226004803603602081101561048257600080fd5b810190808035906020019064010000000081111561049f57600080fd5b8201836020820111156104b157600080fd5b803590602001918460208302840111640100000000831117156104d357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610e19565b005b6105666004803603602081101561053a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f1e565b6040518082815260200191505060405180910390f35b610584610f7a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105ce610f9f565b604051808215151515815260200191505060405180910390f35b6105f0610ff6565b005b6106346004803603602081101561060857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111ec565b604051808215151515815260200191505060405180910390f35b61067a6004803603602081101561066457600080fd5b810190808035906020019092919050505061120c565b005b6106846114f7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106ce61151d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107526004803603602081101561072657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611543565b005b6107966004803603602081101561076a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a4565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461085b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f43616e206f6e6c7920726563656976652047656f44422047656f546f6b656e7381525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146108df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061195e602a913960400191505060405180910390fd5b5050505050505050565b600381565b60046020528060005260406000206000915090505481565b61090e610f9f565b610980576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ab257600080fd5b505af1158015610ac6573d6000803e3d6000fd5b505050506040513d6020811015610adc57600080fd5b8101908080519060200190929190505050505050565b693f870857a3e0e380000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7420612070656e64696e67206f776e65720000000000000000000000000081525060200191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d6e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806119b16032913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614610e0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f53656e646572206973206e6f742053656c66436f6e747261637400000000000081525060200191505060405180910390fd5b5050505050505050565b610e21610f9f565b610e93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b60008090505b8151811015610f1a57600160056000848481518110610eb457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610e99565b5050565b6000610f736003600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461184c90919063ffffffff16565b9050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b610ffe610f9f565b611070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe9d9303600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561114d57600080fd5b505afa158015611161573d6000803e3d6000fd5b505050506040513d602081101561117757600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b8152600401808281526020018060200182810382526000815260200160200192505050600060405180830381600087803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b50505050565b60056020528060005260406000206000915054906101000a900460ff1681565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6f742077686974656c6973746564000000000000000000000000000000000081525060200191505060405180910390fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050693f870857a3e0e380000061132d83836118d590919063ffffffff16565b1115611384576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806119886029913960400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561146157600080fd5b505af1158015611475573d6000803e3d6000fd5b505050506040513d602081101561148b57600080fd5b8101908080519060200190929190505050506114b082826118d590919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61154b610f9f565b6115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f776e6572206973207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116ac610f9f565b61171e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe9d9303826040518263ffffffff1660e01b8152600401808281526020018060200182810382526000815260200160200192505050600060405180830381600087803b15801561183057600080fd5b505af1158015611844573d6000803e3d6000fd5b505050505050565b60008082116118c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816118cc57fe5b04905092915050565b600080828401905083811015611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056fe43616e206f6e6c79207265636569766520746f6b656e732066726f6d207468697320636f6e7472616374546f74616c206c6f636b20616d6f756e742065786365656473204d41585f4c4f434b5f414d4f554e5443616e206f6e6c792062652063616c6c6564206279207468652047656f44422047656f546f6b656e7320636f6e7472616374a264697066735822122071a56679a457cbfb47e8b56278c04adf8fe50a8baa1130c128dc1f2a1c89b2a164736f6c634300060a0033000000000000000000000000147faf8de9d8d8daae129b187f0d02d81912675000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000065000000000000000000000000dd12a8f820d185fd662f60fce7682ab7b53080dc0000000000000000000000001249f9015331520aa22ebf3a421c294cb299a1a70000000000000000000000005a036bddce2097da65ba0aa03ee83de44f7cab230000000000000000000000001f9e70dc4da50530297db5d667d264f16af888bf000000000000000000000000d11eb5db7cfbb9ecae4b62e71ec0a461f6baf6690000000000000000000000009ea10c2ea3c4304182fba9959653c86368d9deac000000000000000000000000783d0516daab858a3cb513e659107686fd3ae6d50000000000000000000000007254ee757a6d0e0bbfa9670c9ecee3421f795431000000000000000000000000d36ca466242ae57031ad5a70a412da2ffe6a4e980000000000000000000000005111df5857c784d6cf9bebc46216254af2b06705000000000000000000000000f46156ffc474948dcfcc96b25b62b0682c48c8b70000000000000000000000003f4c81bb05e8056ad609091f3e4821e0df8cbf05000000000000000000000000597f160da6be3068f4c85ad9028d71dc358aa1dc0000000000000000000000005e20d14cb8ee9f7af6ea87709a6e7fa1106bd8690000000000000000000000002ca16b3bd70a628f4194121445de0fa90b8074e400000000000000000000000050c96f0aea732e4a010ef079f31fe085cc0fef9400000000000000000000000088c6a08bd25d8c687fc05796fe8b1c96155f9bcd000000000000000000000000ade8aff0ed3b9a1efb9456374e80ca9d97a2cc5b0000000000000000000000004f00120ca37d594c8f20755975871671bf7123fe000000000000000000000000ae1987031ccac33bb4374ec16d716b50592d44cc0000000000000000000000003a4a617d56452bb33e0c370d0b05de44a2e79aca00000000000000000000000069a9e74a795173e2bbb8c70113048edb234bbc4000000000000000000000000020e10d173a7c8319c173c994a0b198b201312a24000000000000000000000000f837e11ad1834a606f526074b5e0d6bca38c165a0000000000000000000000007e6cd0fef5e8ad1374f52cbd0e5d6a535aab2da300000000000000000000000067e5e1e58e6105bce51b4fed196a1004faf85f2b00000000000000000000000032371b624fad61fcc122813ac42ec6f8639f7fb4000000000000000000000000b1096b00ccf53fabfc463194c6a3ca5571ffac67000000000000000000000000a3e992ce71df5c709886eb7eb09f7510ea7e4b4100000000000000000000000003ebd2f80c52e901ed5643393485f40ea35a5c78000000000000000000000000b778fccd249f4b8195e53048db6d7777f4407b2500000000000000000000000040d3313cdc91f719df3176272145b5d165bf4bc10000000000000000000000005460675e258b0350170c6b6069800730239c3cde0000000000000000000000004823c99a351e71286dbeee3535793e6f5dae8de400000000000000000000000008e1c0bd86fb6d822a7d5e04b5942402a8dc5f200000000000000000000000003ae5381de8f6ca9e672ed55a3cd802286b45c9b40000000000000000000000007868ceb3a8055656f8bdeb9451108b02459929340000000000000000000000007ff8fe451109f3527da450c3a8b2f392dedb028b00000000000000000000000004ff4ccd931d1a868d48da60f9d0c03a4bd2cf0d000000000000000000000000c84ea67f774fe28e85f644de2e53d8e25e9282da0000000000000000000000000ef45edeaf2a9927d3b69cf2c8ea1befe10eb9860000000000000000000000006e496a605b93d1332b3e07cb1535365ebc50bbd3000000000000000000000000fc0ac081405ad9b335d6a2d5a0812a4959ad4372000000000000000000000000cc7403dad70b030d7d38f2b672e725973c4d7b560000000000000000000000006592978bc047b2fddddbf11899c7b981a72f548900000000000000000000000012b9117e58ea3d96c897eddc00d275d71e34cee100000000000000000000000048633975386331abbb1bb7a1a9cdbad8882100a400000000000000000000000075dde3460611e4030d73a2fe313e035dfeb931890000000000000000000000006c92e5c65e314e209dae6a23233180d0db273b27000000000000000000000000d1989596de5159efc28fbee7061b4fd54b0dc7110000000000000000000000008d5addfebf2f674574550fd85e293c077dbbd5ee000000000000000000000000a93a7fe390a8a376ebfae9891bf6b62379d5e4d00000000000000000000000009e6736cd78bfd0d94a5b78b3a4fc2968d6c279f2000000000000000000000000500e6cdfb33c18330f3555aca30d1cd38b0ea60c00000000000000000000000098dc82470cd96449eff7a21837644e8a0b83f40e0000000000000000000000004e30c59544b929a767725d9c7d05a06dbb443abf000000000000000000000000c046b112bd5dfec65a50ac7370eceabaa33b7736000000000000000000000000d410c418d0d335d9683f1b218de5e7b60fb9cc9e000000000000000000000000e9778fb1c334eb4043962e4782db5786e97c43990000000000000000000000008e26530e1d3ce2e31322ff12ddf27a65cc2bd92a0000000000000000000000006c7d5769843388f9887696511083ac742d45f3490000000000000000000000000108346f70514fed9e67421fffd638aec47fb4d700000000000000000000000087b078a26e27b1185f66c9b0f524ecf4df25842e000000000000000000000000ecb0aa13708aad92e61eadc89995ac501af19ae40000000000000000000000000a10f8bc23bb07b585e8380b5408cabb9c62cb750000000000000000000000001345cd3daf6e59896e31b9ae359aadaf00b87ba4000000000000000000000000cff8b5cda7871831eed4c46e405a2ce0c4a08a64000000000000000000000000382c92dd5458b2be80db1f9b3cf29e918543e3b7000000000000000000000000a290e4ed0d90b7632bcf977501803a027bba424e0000000000000000000000007d34759be00a8605666289f381156d710a7929e7000000000000000000000000fffd50003979997017cc57578cede38a366786b200000000000000000000000041de1a706c5946cd62265d6c9391ead45c70a48b000000000000000000000000748b5f7bcd65b214ee25a0647c151eaadd53668f00000000000000000000000061e5776b24e2e2db07d2ac729a39ed70f96a9b7c000000000000000000000000eb0cd42592025f7443d1a76f095038cf07661ebb000000000000000000000000db4529b47281ddb8e2804071421c723a83d5ffcd000000000000000000000000ad8d46a5328ca929adecab9f585d94848241e48f000000000000000000000000b60d20e7739c9329e7925fb5514934610f528859000000000000000000000000633ffa2b4e2531a3d1952543d858539fbbca6c100000000000000000000000009ebf866592453fab0d28aea2087d2ef7c85ac9d40000000000000000000000002808370606f07a16442a77ba45b9994beec6aed2000000000000000000000000660ac9e42bfbe2ec23acb6b9f0814f81e9d218a000000000000000000000000034af01703f4707cbca0fe7ffe6acec03e621841300000000000000000000000038b807a474553d3f5eb3e93b3927383fbe4bb2a70000000000000000000000008475c0dc0e1679ef925681a5b83d05e1a74c0c570000000000000000000000005696d7d90cbe77a700ce0b4f5d473053b06e42cf0000000000000000000000005a760c1b94d3138233cd95ee856f502a810d4e6d000000000000000000000000431b5ddb0ace97ebc3d936403ea25831bad832b6000000000000000000000000f8aea73693c53eeff6af01fea0cfdda1b045c91b0000000000000000000000007d96a6f41fd31c7624f7069415be58b5e3576d340000000000000000000000008a9e087868f1132db43662e09c7767a8e45c058b000000000000000000000000f5a85a1ac5988b2e1f34f01837d17bb6683eba1d00000000000000000000000010b7079787143abb3f047070e19234d51c5ed15800000000000000000000000058dbfe31ce1e639ec9d0da60d82cabce637b2ba4000000000000000000000000e2e4e7677154e9c4d09df74a4b281ebb848449ca000000000000000000000000e19fb59ae3d4beeb30d894a2a46e293d11dfc6e30000000000000000000000009ea10c2ea3c4304182fba9959653c86368d9deac0000000000000000000000005e20d14cb8ee9f7af6ea87709a6e7fa1106bd869000000000000000000000000ade8aff0ed3b9a1efb9456374e80ca9d97a2cc5b000000000000000000000000c016e3cf2a2bf4fa89bb037af9d7f2299a42923f000000000000000000000000b03285a1cf1a51fd03892d56b6235a18e2f7e363
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101155760003560e01c80638da5cb5b116100a2578063dd46706411610071578063dd4670641461064e578063e30c39781461067c578063ef25e5ef146106c6578063f2fde38b14610710578063fc720f701461075457610115565b80638da5cb5b1461057c5780638f32d59b146105c65780639975038c146105e85780639b19251a146105f257610115565b80633e5a2dc7116100e95780633e5a2dc71461030c5780634e71e0c81461032a57806375ab9782146103345780637f6497831461046c5780638ad68c361461052457610115565b806223de291461011a578063059f8b16146102525780631721c5aa146102705780632f6c493c146102c8575b600080fd5b610250600480360360c081101561013057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156101b757600080fd5b8201836020820111156101c957600080fd5b803590602001918460018302840111640100000000831117156101eb57600080fd5b90919293919293908035906020019064010000000081111561020c57600080fd5b82018360208201111561021e57600080fd5b8035906020019184600183028401116401000000008311171561024057600080fd5b9091929391929390505050610798565b005b61025a6108e9565b6040518082815260200191505060405180910390f35b6102b26004803603602081101561028657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108ee565b6040518082815260200191505060405180910390f35b61030a600480360360208110156102de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610906565b005b610314610af2565b6040518082815260200191505060405180910390f35b610332610b00565b005b61046a600480360360c081101561034a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156103d157600080fd5b8201836020820111156103e357600080fd5b8035906020019184600183028401116401000000008311171561040557600080fd5b90919293919293908035906020019064010000000081111561042657600080fd5b82018360208201111561043857600080fd5b8035906020019184600183028401116401000000008311171561045a57600080fd5b9091929391929390505050610cc8565b005b6105226004803603602081101561048257600080fd5b810190808035906020019064010000000081111561049f57600080fd5b8201836020820111156104b157600080fd5b803590602001918460208302840111640100000000831117156104d357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610e19565b005b6105666004803603602081101561053a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f1e565b6040518082815260200191505060405180910390f35b610584610f7a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105ce610f9f565b604051808215151515815260200191505060405180910390f35b6105f0610ff6565b005b6106346004803603602081101561060857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111ec565b604051808215151515815260200191505060405180910390f35b61067a6004803603602081101561066457600080fd5b810190808035906020019092919050505061120c565b005b6106846114f7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106ce61151d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107526004803603602081101561072657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611543565b005b6107966004803603602081101561076a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a4565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461085b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f43616e206f6e6c7920726563656976652047656f44422047656f546f6b656e7381525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146108df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061195e602a913960400191505060405180910390fd5b5050505050505050565b600381565b60046020528060005260406000206000915090505481565b61090e610f9f565b610980576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ab257600080fd5b505af1158015610ac6573d6000803e3d6000fd5b505050506040513d6020811015610adc57600080fd5b8101908080519060200190929190505050505050565b693f870857a3e0e380000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7420612070656e64696e67206f776e65720000000000000000000000000081525060200191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d6e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806119b16032913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614610e0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f53656e646572206973206e6f742053656c66436f6e747261637400000000000081525060200191505060405180910390fd5b5050505050505050565b610e21610f9f565b610e93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b60008090505b8151811015610f1a57600160056000848481518110610eb457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610e99565b5050565b6000610f736003600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461184c90919063ffffffff16565b9050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b610ffe610f9f565b611070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe9d9303600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561114d57600080fd5b505afa158015611161573d6000803e3d6000fd5b505050506040513d602081101561117757600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b8152600401808281526020018060200182810382526000815260200160200192505050600060405180830381600087803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b50505050565b60056020528060005260406000206000915054906101000a900460ff1681565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6f742077686974656c6973746564000000000000000000000000000000000081525060200191505060405180910390fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050693f870857a3e0e380000061132d83836118d590919063ffffffff16565b1115611384576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806119886029913960400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561146157600080fd5b505af1158015611475573d6000803e3d6000fd5b505050506040513d602081101561148b57600080fd5b8101908080519060200190929190505050506114b082826118d590919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61154b610f9f565b6115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f776e6572206973207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116ac610f9f565b61171e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe9d9303826040518263ffffffff1660e01b8152600401808281526020018060200182810382526000815260200160200192505050600060405180830381600087803b15801561183057600080fd5b505af1158015611844573d6000803e3d6000fd5b505050505050565b60008082116118c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816118cc57fe5b04905092915050565b600080828401905083811015611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056fe43616e206f6e6c79207265636569766520746f6b656e732066726f6d207468697320636f6e7472616374546f74616c206c6f636b20616d6f756e742065786365656473204d41585f4c4f434b5f414d4f554e5443616e206f6e6c792062652063616c6c6564206279207468652047656f44422047656f546f6b656e7320636f6e7472616374a264697066735822122071a56679a457cbfb47e8b56278c04adf8fe50a8baa1130c128dc1f2a1c89b2a164736f6c634300060a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000147faf8de9d8d8daae129b187f0d02d81912675000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000065000000000000000000000000dd12a8f820d185fd662f60fce7682ab7b53080dc0000000000000000000000001249f9015331520aa22ebf3a421c294cb299a1a70000000000000000000000005a036bddce2097da65ba0aa03ee83de44f7cab230000000000000000000000001f9e70dc4da50530297db5d667d264f16af888bf000000000000000000000000d11eb5db7cfbb9ecae4b62e71ec0a461f6baf6690000000000000000000000009ea10c2ea3c4304182fba9959653c86368d9deac000000000000000000000000783d0516daab858a3cb513e659107686fd3ae6d50000000000000000000000007254ee757a6d0e0bbfa9670c9ecee3421f795431000000000000000000000000d36ca466242ae57031ad5a70a412da2ffe6a4e980000000000000000000000005111df5857c784d6cf9bebc46216254af2b06705000000000000000000000000f46156ffc474948dcfcc96b25b62b0682c48c8b70000000000000000000000003f4c81bb05e8056ad609091f3e4821e0df8cbf05000000000000000000000000597f160da6be3068f4c85ad9028d71dc358aa1dc0000000000000000000000005e20d14cb8ee9f7af6ea87709a6e7fa1106bd8690000000000000000000000002ca16b3bd70a628f4194121445de0fa90b8074e400000000000000000000000050c96f0aea732e4a010ef079f31fe085cc0fef9400000000000000000000000088c6a08bd25d8c687fc05796fe8b1c96155f9bcd000000000000000000000000ade8aff0ed3b9a1efb9456374e80ca9d97a2cc5b0000000000000000000000004f00120ca37d594c8f20755975871671bf7123fe000000000000000000000000ae1987031ccac33bb4374ec16d716b50592d44cc0000000000000000000000003a4a617d56452bb33e0c370d0b05de44a2e79aca00000000000000000000000069a9e74a795173e2bbb8c70113048edb234bbc4000000000000000000000000020e10d173a7c8319c173c994a0b198b201312a24000000000000000000000000f837e11ad1834a606f526074b5e0d6bca38c165a0000000000000000000000007e6cd0fef5e8ad1374f52cbd0e5d6a535aab2da300000000000000000000000067e5e1e58e6105bce51b4fed196a1004faf85f2b00000000000000000000000032371b624fad61fcc122813ac42ec6f8639f7fb4000000000000000000000000b1096b00ccf53fabfc463194c6a3ca5571ffac67000000000000000000000000a3e992ce71df5c709886eb7eb09f7510ea7e4b4100000000000000000000000003ebd2f80c52e901ed5643393485f40ea35a5c78000000000000000000000000b778fccd249f4b8195e53048db6d7777f4407b2500000000000000000000000040d3313cdc91f719df3176272145b5d165bf4bc10000000000000000000000005460675e258b0350170c6b6069800730239c3cde0000000000000000000000004823c99a351e71286dbeee3535793e6f5dae8de400000000000000000000000008e1c0bd86fb6d822a7d5e04b5942402a8dc5f200000000000000000000000003ae5381de8f6ca9e672ed55a3cd802286b45c9b40000000000000000000000007868ceb3a8055656f8bdeb9451108b02459929340000000000000000000000007ff8fe451109f3527da450c3a8b2f392dedb028b00000000000000000000000004ff4ccd931d1a868d48da60f9d0c03a4bd2cf0d000000000000000000000000c84ea67f774fe28e85f644de2e53d8e25e9282da0000000000000000000000000ef45edeaf2a9927d3b69cf2c8ea1befe10eb9860000000000000000000000006e496a605b93d1332b3e07cb1535365ebc50bbd3000000000000000000000000fc0ac081405ad9b335d6a2d5a0812a4959ad4372000000000000000000000000cc7403dad70b030d7d38f2b672e725973c4d7b560000000000000000000000006592978bc047b2fddddbf11899c7b981a72f548900000000000000000000000012b9117e58ea3d96c897eddc00d275d71e34cee100000000000000000000000048633975386331abbb1bb7a1a9cdbad8882100a400000000000000000000000075dde3460611e4030d73a2fe313e035dfeb931890000000000000000000000006c92e5c65e314e209dae6a23233180d0db273b27000000000000000000000000d1989596de5159efc28fbee7061b4fd54b0dc7110000000000000000000000008d5addfebf2f674574550fd85e293c077dbbd5ee000000000000000000000000a93a7fe390a8a376ebfae9891bf6b62379d5e4d00000000000000000000000009e6736cd78bfd0d94a5b78b3a4fc2968d6c279f2000000000000000000000000500e6cdfb33c18330f3555aca30d1cd38b0ea60c00000000000000000000000098dc82470cd96449eff7a21837644e8a0b83f40e0000000000000000000000004e30c59544b929a767725d9c7d05a06dbb443abf000000000000000000000000c046b112bd5dfec65a50ac7370eceabaa33b7736000000000000000000000000d410c418d0d335d9683f1b218de5e7b60fb9cc9e000000000000000000000000e9778fb1c334eb4043962e4782db5786e97c43990000000000000000000000008e26530e1d3ce2e31322ff12ddf27a65cc2bd92a0000000000000000000000006c7d5769843388f9887696511083ac742d45f3490000000000000000000000000108346f70514fed9e67421fffd638aec47fb4d700000000000000000000000087b078a26e27b1185f66c9b0f524ecf4df25842e000000000000000000000000ecb0aa13708aad92e61eadc89995ac501af19ae40000000000000000000000000a10f8bc23bb07b585e8380b5408cabb9c62cb750000000000000000000000001345cd3daf6e59896e31b9ae359aadaf00b87ba4000000000000000000000000cff8b5cda7871831eed4c46e405a2ce0c4a08a64000000000000000000000000382c92dd5458b2be80db1f9b3cf29e918543e3b7000000000000000000000000a290e4ed0d90b7632bcf977501803a027bba424e0000000000000000000000007d34759be00a8605666289f381156d710a7929e7000000000000000000000000fffd50003979997017cc57578cede38a366786b200000000000000000000000041de1a706c5946cd62265d6c9391ead45c70a48b000000000000000000000000748b5f7bcd65b214ee25a0647c151eaadd53668f00000000000000000000000061e5776b24e2e2db07d2ac729a39ed70f96a9b7c000000000000000000000000eb0cd42592025f7443d1a76f095038cf07661ebb000000000000000000000000db4529b47281ddb8e2804071421c723a83d5ffcd000000000000000000000000ad8d46a5328ca929adecab9f585d94848241e48f000000000000000000000000b60d20e7739c9329e7925fb5514934610f528859000000000000000000000000633ffa2b4e2531a3d1952543d858539fbbca6c100000000000000000000000009ebf866592453fab0d28aea2087d2ef7c85ac9d40000000000000000000000002808370606f07a16442a77ba45b9994beec6aed2000000000000000000000000660ac9e42bfbe2ec23acb6b9f0814f81e9d218a000000000000000000000000034af01703f4707cbca0fe7ffe6acec03e621841300000000000000000000000038b807a474553d3f5eb3e93b3927383fbe4bb2a70000000000000000000000008475c0dc0e1679ef925681a5b83d05e1a74c0c570000000000000000000000005696d7d90cbe77a700ce0b4f5d473053b06e42cf0000000000000000000000005a760c1b94d3138233cd95ee856f502a810d4e6d000000000000000000000000431b5ddb0ace97ebc3d936403ea25831bad832b6000000000000000000000000f8aea73693c53eeff6af01fea0cfdda1b045c91b0000000000000000000000007d96a6f41fd31c7624f7069415be58b5e3576d340000000000000000000000008a9e087868f1132db43662e09c7767a8e45c058b000000000000000000000000f5a85a1ac5988b2e1f34f01837d17bb6683eba1d00000000000000000000000010b7079787143abb3f047070e19234d51c5ed15800000000000000000000000058dbfe31ce1e639ec9d0da60d82cabce637b2ba4000000000000000000000000e2e4e7677154e9c4d09df74a4b281ebb848449ca000000000000000000000000e19fb59ae3d4beeb30d894a2a46e293d11dfc6e30000000000000000000000009ea10c2ea3c4304182fba9959653c86368d9deac0000000000000000000000005e20d14cb8ee9f7af6ea87709a6e7fa1106bd869000000000000000000000000ade8aff0ed3b9a1efb9456374e80ca9d97a2cc5b000000000000000000000000c016e3cf2a2bf4fa89bb037af9d7f2299a42923f000000000000000000000000b03285a1cf1a51fd03892d56b6235a18e2f7e363
-----Decoded View---------------
Arg [0] : _geoToken (address): 0x147faF8De9d8D8DAAE129B187F0D02D819126750
Arg [1] : _whitelist (address[]): 0xDd12a8F820D185fd662F60FcE7682Ab7B53080Dc,0x1249f9015331520AA22EBF3A421C294cb299a1a7,0x5a036bDDcE2097da65Ba0AA03ee83De44f7caB23,0x1F9e70dC4Da50530297DB5D667D264F16aF888bf,0xD11Eb5Db7cFbB9ECae4B62E71Ec0A461F6baF669,0x9eA10C2Ea3C4304182FbA9959653C86368d9dEAC,0x783D0516DaaB858a3Cb513E659107686FD3ae6D5,0x7254eE757a6d0e0bBFa9670C9ecEE3421f795431,0xD36cA466242Ae57031ad5A70A412da2ffE6A4E98,0x5111dF5857c784d6cf9bEBc46216254Af2b06705,0xF46156fFc474948DCFcc96B25B62B0682C48C8B7,0x3f4c81bB05E8056ad609091F3e4821E0DF8cbf05,0x597F160dA6BE3068f4C85AD9028D71dc358Aa1dC,0x5E20D14cb8ee9F7AF6EA87709A6E7fa1106Bd869,0x2CA16b3Bd70a628F4194121445de0fa90b8074e4,0x50C96f0AEa732E4A010ef079F31fE085cc0fef94,0x88C6A08BD25d8c687fc05796fE8B1c96155F9BcD,0xaDE8aFF0ED3B9a1eFB9456374e80cA9d97a2CC5B,0x4F00120ca37d594C8f20755975871671bF7123FE,0xae1987031cCAC33bB4374EC16D716b50592d44Cc,0x3A4a617d56452Bb33E0c370D0b05dE44A2e79Aca,0x69A9E74A795173e2bbb8C70113048EDB234bbC40,0x20e10D173a7c8319C173c994a0b198b201312a24,0xF837e11AD1834A606f526074b5e0d6BCa38C165a,0x7e6CD0fEF5e8ad1374F52cbd0e5D6A535AAb2DA3,0x67E5E1E58e6105BCe51B4fEd196A1004FAf85F2b,0x32371B624FAD61FCc122813Ac42ec6F8639F7fb4,0xb1096B00cCf53faBFC463194c6a3ca5571FFAc67,0xa3e992CE71Df5c709886EB7EB09F7510EA7E4B41,0x03eBd2F80C52E901ed5643393485F40ea35a5C78,0xb778fccD249f4B8195e53048DB6D7777F4407b25,0x40d3313CdC91F719df3176272145b5d165Bf4Bc1,0x5460675E258B0350170C6b6069800730239c3Cde,0x4823C99A351e71286DBeEe3535793e6f5dAE8de4,0x08E1c0bD86fb6D822A7D5E04B5942402a8Dc5F20,0x3AE5381de8f6CA9e672ed55a3cD802286B45C9B4,0x7868cEb3A8055656F8BdEb9451108B0245992934,0x7ff8FE451109F3527da450C3a8B2f392deDB028b,0x04ff4CCd931D1a868d48DA60F9d0c03A4BD2cf0D,0xC84ea67F774FE28e85F644de2E53d8e25e9282dA,0x0Ef45edeaf2a9927D3B69CF2C8ea1befE10EB986,0x6E496a605B93d1332b3E07CB1535365EBC50bBD3,0xfc0ac081405AD9B335d6A2d5a0812a4959Ad4372,0xcc7403DaD70b030D7D38F2B672e725973c4D7B56,0x6592978Bc047B2fDdDDBF11899C7B981A72F5489,0x12B9117e58Ea3d96C897eddC00d275d71e34Cee1,0x48633975386331ABBB1bb7a1A9CDBad8882100A4,0x75DdE3460611e4030d73A2Fe313e035DFEB93189,0x6c92e5c65e314e209dAe6a23233180d0dB273B27,0xd1989596De5159Efc28fBeE7061b4fD54b0dc711,0x8d5AdDFeBF2f674574550fd85e293c077DBbD5Ee,0xa93A7Fe390A8a376EbfAE9891bf6b62379d5E4d0,0x9E6736cD78bfd0d94a5B78B3A4fc2968d6c279f2,0x500E6cdfB33c18330F3555ACA30D1cD38B0eA60c,0x98dc82470CD96449efF7a21837644e8a0b83f40e,0x4E30C59544b929A767725D9C7d05a06DBB443abf,0xC046b112Bd5DfEc65A50Ac7370EcEABAa33B7736,0xD410C418D0D335D9683f1B218de5E7b60Fb9cc9e,0xE9778fb1c334eb4043962e4782db5786e97c4399,0x8e26530E1d3Ce2e31322ff12DDf27a65cC2Bd92a,0x6c7D5769843388f9887696511083AC742D45f349,0x0108346F70514FEd9e67421fFfd638aEC47FB4D7,0x87b078a26E27b1185F66C9b0F524ECF4df25842E,0xeCB0AA13708Aad92E61EadC89995AC501AF19AE4,0x0a10f8Bc23BB07B585E8380b5408CaBB9c62cb75,0x1345cD3daF6e59896e31B9ae359AADaF00B87bA4,0xCff8B5CDA7871831Eed4c46e405A2Ce0c4A08a64,0x382c92dD5458b2be80db1f9b3CF29e918543e3B7,0xA290E4ED0D90b7632bCF977501803a027BBa424e,0x7D34759bE00A8605666289F381156D710A7929E7,0xFFfD50003979997017Cc57578CedE38a366786B2,0x41dE1a706C5946Cd62265d6c9391eaD45C70A48B,0x748b5F7BcD65B214eE25A0647C151eaADD53668F,0x61E5776b24e2e2db07d2aC729A39eD70F96A9b7C,0xEb0cd42592025f7443D1a76F095038cf07661eBB,0xdB4529b47281DdB8e2804071421c723A83D5fFcd,0xaD8D46A5328ca929adeCab9f585D94848241E48F,0xb60d20e7739C9329e7925fb5514934610f528859,0x633FFa2b4E2531A3D1952543d858539fBbCa6c10,0x9EbF866592453fab0d28aEa2087d2Ef7c85Ac9d4,0x2808370606f07A16442A77bA45b9994bEeC6aEd2,0x660ac9E42bFbE2Ec23Acb6B9F0814F81E9d218A0,0x34Af01703F4707cBCA0FE7fFe6Acec03e6218413,0x38B807A474553d3f5eb3E93B3927383fbe4Bb2A7,0x8475C0dc0e1679Ef925681A5B83D05E1a74C0C57,0x5696d7d90Cbe77A700Ce0B4f5D473053B06e42cF,0x5a760C1B94D3138233cd95ee856F502A810D4e6d,0x431b5DDB0AcE97eBC3d936403ea25831BaD832B6,0xf8Aea73693C53EEfF6Af01fea0cFdDa1B045C91B,0x7d96A6f41fd31C7624f7069415BE58b5e3576D34,0x8A9e087868f1132Db43662e09C7767A8E45c058b,0xf5A85a1ac5988B2E1f34F01837d17bb6683eBa1D,0x10b7079787143AbB3f047070e19234d51C5ED158,0x58dBFe31CE1e639Ec9D0Da60d82CABcE637b2bA4,0xe2E4e7677154e9c4d09Df74A4B281eBB848449ca,0xe19Fb59Ae3d4BeEB30d894a2a46e293d11DFc6e3,0x9eA10C2Ea3C4304182FbA9959653C86368d9dEAC,0x5E20D14cb8ee9F7AF6EA87709A6E7fa1106Bd869,0xaDE8aFF0ED3B9a1eFB9456374e80cA9d97a2CC5B,0xC016E3cF2a2bf4fA89bB037Af9d7f2299A42923f,0xb03285A1Cf1A51FD03892d56B6235A18e2F7E363
-----Encoded View---------------
104 Constructor Arguments found :
Arg [0] : 000000000000000000000000147faf8de9d8d8daae129b187f0d02d819126750
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000065
Arg [3] : 000000000000000000000000dd12a8f820d185fd662f60fce7682ab7b53080dc
Arg [4] : 0000000000000000000000001249f9015331520aa22ebf3a421c294cb299a1a7
Arg [5] : 0000000000000000000000005a036bddce2097da65ba0aa03ee83de44f7cab23
Arg [6] : 0000000000000000000000001f9e70dc4da50530297db5d667d264f16af888bf
Arg [7] : 000000000000000000000000d11eb5db7cfbb9ecae4b62e71ec0a461f6baf669
Arg [8] : 0000000000000000000000009ea10c2ea3c4304182fba9959653c86368d9deac
Arg [9] : 000000000000000000000000783d0516daab858a3cb513e659107686fd3ae6d5
Arg [10] : 0000000000000000000000007254ee757a6d0e0bbfa9670c9ecee3421f795431
Arg [11] : 000000000000000000000000d36ca466242ae57031ad5a70a412da2ffe6a4e98
Arg [12] : 0000000000000000000000005111df5857c784d6cf9bebc46216254af2b06705
Arg [13] : 000000000000000000000000f46156ffc474948dcfcc96b25b62b0682c48c8b7
Arg [14] : 0000000000000000000000003f4c81bb05e8056ad609091f3e4821e0df8cbf05
Arg [15] : 000000000000000000000000597f160da6be3068f4c85ad9028d71dc358aa1dc
Arg [16] : 0000000000000000000000005e20d14cb8ee9f7af6ea87709a6e7fa1106bd869
Arg [17] : 0000000000000000000000002ca16b3bd70a628f4194121445de0fa90b8074e4
Arg [18] : 00000000000000000000000050c96f0aea732e4a010ef079f31fe085cc0fef94
Arg [19] : 00000000000000000000000088c6a08bd25d8c687fc05796fe8b1c96155f9bcd
Arg [20] : 000000000000000000000000ade8aff0ed3b9a1efb9456374e80ca9d97a2cc5b
Arg [21] : 0000000000000000000000004f00120ca37d594c8f20755975871671bf7123fe
Arg [22] : 000000000000000000000000ae1987031ccac33bb4374ec16d716b50592d44cc
Arg [23] : 0000000000000000000000003a4a617d56452bb33e0c370d0b05de44a2e79aca
Arg [24] : 00000000000000000000000069a9e74a795173e2bbb8c70113048edb234bbc40
Arg [25] : 00000000000000000000000020e10d173a7c8319c173c994a0b198b201312a24
Arg [26] : 000000000000000000000000f837e11ad1834a606f526074b5e0d6bca38c165a
Arg [27] : 0000000000000000000000007e6cd0fef5e8ad1374f52cbd0e5d6a535aab2da3
Arg [28] : 00000000000000000000000067e5e1e58e6105bce51b4fed196a1004faf85f2b
Arg [29] : 00000000000000000000000032371b624fad61fcc122813ac42ec6f8639f7fb4
Arg [30] : 000000000000000000000000b1096b00ccf53fabfc463194c6a3ca5571ffac67
Arg [31] : 000000000000000000000000a3e992ce71df5c709886eb7eb09f7510ea7e4b41
Arg [32] : 00000000000000000000000003ebd2f80c52e901ed5643393485f40ea35a5c78
Arg [33] : 000000000000000000000000b778fccd249f4b8195e53048db6d7777f4407b25
Arg [34] : 00000000000000000000000040d3313cdc91f719df3176272145b5d165bf4bc1
Arg [35] : 0000000000000000000000005460675e258b0350170c6b6069800730239c3cde
Arg [36] : 0000000000000000000000004823c99a351e71286dbeee3535793e6f5dae8de4
Arg [37] : 00000000000000000000000008e1c0bd86fb6d822a7d5e04b5942402a8dc5f20
Arg [38] : 0000000000000000000000003ae5381de8f6ca9e672ed55a3cd802286b45c9b4
Arg [39] : 0000000000000000000000007868ceb3a8055656f8bdeb9451108b0245992934
Arg [40] : 0000000000000000000000007ff8fe451109f3527da450c3a8b2f392dedb028b
Arg [41] : 00000000000000000000000004ff4ccd931d1a868d48da60f9d0c03a4bd2cf0d
Arg [42] : 000000000000000000000000c84ea67f774fe28e85f644de2e53d8e25e9282da
Arg [43] : 0000000000000000000000000ef45edeaf2a9927d3b69cf2c8ea1befe10eb986
Arg [44] : 0000000000000000000000006e496a605b93d1332b3e07cb1535365ebc50bbd3
Arg [45] : 000000000000000000000000fc0ac081405ad9b335d6a2d5a0812a4959ad4372
Arg [46] : 000000000000000000000000cc7403dad70b030d7d38f2b672e725973c4d7b56
Arg [47] : 0000000000000000000000006592978bc047b2fddddbf11899c7b981a72f5489
Arg [48] : 00000000000000000000000012b9117e58ea3d96c897eddc00d275d71e34cee1
Arg [49] : 00000000000000000000000048633975386331abbb1bb7a1a9cdbad8882100a4
Arg [50] : 00000000000000000000000075dde3460611e4030d73a2fe313e035dfeb93189
Arg [51] : 0000000000000000000000006c92e5c65e314e209dae6a23233180d0db273b27
Arg [52] : 000000000000000000000000d1989596de5159efc28fbee7061b4fd54b0dc711
Arg [53] : 0000000000000000000000008d5addfebf2f674574550fd85e293c077dbbd5ee
Arg [54] : 000000000000000000000000a93a7fe390a8a376ebfae9891bf6b62379d5e4d0
Arg [55] : 0000000000000000000000009e6736cd78bfd0d94a5b78b3a4fc2968d6c279f2
Arg [56] : 000000000000000000000000500e6cdfb33c18330f3555aca30d1cd38b0ea60c
Arg [57] : 00000000000000000000000098dc82470cd96449eff7a21837644e8a0b83f40e
Arg [58] : 0000000000000000000000004e30c59544b929a767725d9c7d05a06dbb443abf
Arg [59] : 000000000000000000000000c046b112bd5dfec65a50ac7370eceabaa33b7736
Arg [60] : 000000000000000000000000d410c418d0d335d9683f1b218de5e7b60fb9cc9e
Arg [61] : 000000000000000000000000e9778fb1c334eb4043962e4782db5786e97c4399
Arg [62] : 0000000000000000000000008e26530e1d3ce2e31322ff12ddf27a65cc2bd92a
Arg [63] : 0000000000000000000000006c7d5769843388f9887696511083ac742d45f349
Arg [64] : 0000000000000000000000000108346f70514fed9e67421fffd638aec47fb4d7
Arg [65] : 00000000000000000000000087b078a26e27b1185f66c9b0f524ecf4df25842e
Arg [66] : 000000000000000000000000ecb0aa13708aad92e61eadc89995ac501af19ae4
Arg [67] : 0000000000000000000000000a10f8bc23bb07b585e8380b5408cabb9c62cb75
Arg [68] : 0000000000000000000000001345cd3daf6e59896e31b9ae359aadaf00b87ba4
Arg [69] : 000000000000000000000000cff8b5cda7871831eed4c46e405a2ce0c4a08a64
Arg [70] : 000000000000000000000000382c92dd5458b2be80db1f9b3cf29e918543e3b7
Arg [71] : 000000000000000000000000a290e4ed0d90b7632bcf977501803a027bba424e
Arg [72] : 0000000000000000000000007d34759be00a8605666289f381156d710a7929e7
Arg [73] : 000000000000000000000000fffd50003979997017cc57578cede38a366786b2
Arg [74] : 00000000000000000000000041de1a706c5946cd62265d6c9391ead45c70a48b
Arg [75] : 000000000000000000000000748b5f7bcd65b214ee25a0647c151eaadd53668f
Arg [76] : 00000000000000000000000061e5776b24e2e2db07d2ac729a39ed70f96a9b7c
Arg [77] : 000000000000000000000000eb0cd42592025f7443d1a76f095038cf07661ebb
Arg [78] : 000000000000000000000000db4529b47281ddb8e2804071421c723a83d5ffcd
Arg [79] : 000000000000000000000000ad8d46a5328ca929adecab9f585d94848241e48f
Arg [80] : 000000000000000000000000b60d20e7739c9329e7925fb5514934610f528859
Arg [81] : 000000000000000000000000633ffa2b4e2531a3d1952543d858539fbbca6c10
Arg [82] : 0000000000000000000000009ebf866592453fab0d28aea2087d2ef7c85ac9d4
Arg [83] : 0000000000000000000000002808370606f07a16442a77ba45b9994beec6aed2
Arg [84] : 000000000000000000000000660ac9e42bfbe2ec23acb6b9f0814f81e9d218a0
Arg [85] : 00000000000000000000000034af01703f4707cbca0fe7ffe6acec03e6218413
Arg [86] : 00000000000000000000000038b807a474553d3f5eb3e93b3927383fbe4bb2a7
Arg [87] : 0000000000000000000000008475c0dc0e1679ef925681a5b83d05e1a74c0c57
Arg [88] : 0000000000000000000000005696d7d90cbe77a700ce0b4f5d473053b06e42cf
Arg [89] : 0000000000000000000000005a760c1b94d3138233cd95ee856f502a810d4e6d
Arg [90] : 000000000000000000000000431b5ddb0ace97ebc3d936403ea25831bad832b6
Arg [91] : 000000000000000000000000f8aea73693c53eeff6af01fea0cfdda1b045c91b
Arg [92] : 0000000000000000000000007d96a6f41fd31c7624f7069415be58b5e3576d34
Arg [93] : 0000000000000000000000008a9e087868f1132db43662e09c7767a8e45c058b
Arg [94] : 000000000000000000000000f5a85a1ac5988b2e1f34f01837d17bb6683eba1d
Arg [95] : 00000000000000000000000010b7079787143abb3f047070e19234d51c5ed158
Arg [96] : 00000000000000000000000058dbfe31ce1e639ec9d0da60d82cabce637b2ba4
Arg [97] : 000000000000000000000000e2e4e7677154e9c4d09df74a4b281ebb848449ca
Arg [98] : 000000000000000000000000e19fb59ae3d4beeb30d894a2a46e293d11dfc6e3
Arg [99] : 0000000000000000000000009ea10c2ea3c4304182fba9959653c86368d9deac
Arg [100] : 0000000000000000000000005e20d14cb8ee9f7af6ea87709a6e7fa1106bd869
Arg [101] : 000000000000000000000000ade8aff0ed3b9a1efb9456374e80ca9d97a2cc5b
Arg [102] : 000000000000000000000000c016e3cf2a2bf4fa89bb037af9d7f2299a42923f
Arg [103] : 000000000000000000000000b03285a1cf1a51fd03892d56b6235a18e2f7e363
Deployed Bytecode Sourcemap
52163:3740:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54014:493;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;52305:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;52752:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;55218:204;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;52232:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;956:282;;;:::i;:::-;;53554:452;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;54630:210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;55767:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;95:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;470:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;55640:119;;;:::i;:::-;;52806:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;54848:362;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;720:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;52721:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;760:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;55430:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;54014:493;54302:8;;;;;;;;;;;54280:31;;:10;:31;;;54258:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54424:4;54404:25;;:8;:25;;;54382:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54014:493;;;;;;;;:::o;52305:38::-;52342:1;52305:38;:::o;52752:47::-;;;;;;;;;;;;;;;;;:::o;55218:204::-;622:9;:7;:9::i;:::-;614:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55289:20:::1;55312:12;:19;55325:5;55312:19;;;;;;;;;;;;;;;;55289:42;;55364:1;55342:12;:19;55355:5;55342:19;;;;;;;;;;;;;;;:23;;;;55376:8;;;;;;;;;;;:17;;;55394:5;55401:12;55376:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;667:1;55218:204:::0;:::o;52232:66::-;52274:24;52232:66;:::o;956:282::-;1022:12;;;;;;;;;;;1008:26;;:10;:26;;;1000:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1071:21;1095:5;;;;;;;;;;;1071:29;;1119:10;1111:5;;:18;;;;;;;;;;;;;;;;;;1163:1;1140:12;;:25;;;;;;;;;;;;;;;;;;1219:10;1183:47;;1204:13;1183:47;;;;;;;;;;;;956:282;:::o;53554:452::-;53840:8;;;;;;;;;;;53818:31;;:10;:31;;;53796:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53962:4;53946:21;;:4;:21;;;53938:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53554:452;;;;;;;;:::o;54630:210::-;622:9;:7;:9::i;:::-;614:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54728:9:::1;54740:1:::0;54728:13:::1;;54723:110;54747:10;:17;54743:1;:21;54723:110;;;54815:4;54788:9;:24;54798:10;54809:1;54798:13;;;;;;;;;;;;;;54788:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;54766:3;;;;;;;54723:110;;;;54630:210:::0;:::o;55767:133::-;55830:7;55857:35;52342:1;55857:12;:19;55870:5;55857:19;;;;;;;;;;;;;;;;:23;;:35;;;;:::i;:::-;55850:42;;55767:133;;;:::o;95:20::-;;;;;;;;;;;;;:::o;470:92::-;509:4;543:10;534:19;;:5;;;;;;;;;;;:19;;;526:28;;470:92;:::o;55640:119::-;622:9;:7;:9::i;:::-;614:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55699:8:::1;;;;;;;;;;;:13;;;55713:8;;;;;;;;;;;:18;;;55740:4;55713:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;55699:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;55640:119::o:0;52806:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;54848:362::-;54561:9;:21;54571:10;54561:21;;;;;;;;;;;;;;;;;;;;;;;;;54553:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54917:18:::1;54938:12;:24;54951:10;54938:24;;;;;;;;;;;;;;;;54917:45;;52274:24;54981:23;54996:7;54981:10;:14;;:23;;;;:::i;:::-;:42;;54973:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55082:8;;;;;;;;;;;:21;;;55104:10;55124:4;55131:7;55082:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;55179:23;55194:7;55179:10;:14;;:23;;;;:::i;:::-;55152:12;:24;55165:10;55152:24;;;;;;;;;;;;;;;:50;;;;54613:1;54848:362:::0;:::o;720:27::-;;;;;;;;;;;;;:::o;52721:22::-;;;;;;;;;;;;;:::o;760:184::-;622:9;:7;:9::i;:::-;614:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;873:1:::1;852:23;;:9;:23;;;;844:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;927:9;912:12;;:24;;;;;;;;;;;;;;;;;;760:184:::0;:::o;55430:202::-;622:9;:7;:9::i;:::-;614:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55506:20:::1;55529:12;:19;55542:5;55529:19;;;;;;;;;;;;;;;;55506:42;;55581:1;55559:12;:19;55572:5;55559:19;;;;;;;;;;;;;;;:23;;;;55593:8;;;;;;;;;;;:13;;;55607:12;55593:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;667:1;55430:202:::0;:::o;5650:153::-;5708:7;5740:1;5736;:5;5728:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5794:1;5790;:5;;;;;;5783:12;;5650:153;;;;:::o;4073:179::-;4131:7;4151:9;4167:1;4163;:5;4151:17;;4192:1;4187;:6;;4179:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4243:1;4236:8;;;4073:179;;;;:::o
Swarm Source
ipfs://71a56679a457cbfb47e8b56278c04adf8fe50a8baa1130c128dc1f2a1c89b2a1
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.