ERC-20
Overview
Max Total Supply
498,524,852.823134879459419495 BRO
Holders
6,070
Total Transfers
-
Market
Price
$0.00 @ 0.000000 FTM
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
ERC20Pauser
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2021-11-07 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/utils/structs/EnumerableSet.sol pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/access/IAccessControl.sol pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; } // File: @openzeppelin/contracts/access/IAccessControlEnumerable.sol pragma solidity ^0.8.0; /** * @dev External interface of AccessControlEnumerable declared to support ERC165 detection. */ interface IAccessControlEnumerable is IAccessControl { /** * @dev Returns one of the accounts that have `role`. `index` must be a * value between 0 and {getRoleMemberCount}, non-inclusive. * * Role bearers are not sorted in any particular way, and their ordering may * change at any point. * * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure * you perform all queries on the same block. See the following * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] * for more information. */ function getRoleMember(bytes32 role, uint256 index) external view returns (address); /** * @dev Returns the number of accounts that have `role`. Can be used * together with {getRoleMember} to enumerate all bearers of a role. */ function getRoleMemberCount(bytes32 role) external view returns (uint256); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/security/Pausable.sol pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol pragma solidity ^0.8.0; /** * @dev ERC20 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. */ abstract contract ERC20Pausable is ERC20, Pausable { /** * @dev See {ERC20-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override { super._beforeTokenTransfer(from, to, amount); require(!paused(), "ERC20Pausable: token transfer while paused"); } } // File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); unchecked { _approve(account, _msgSender(), currentAllowance - amount); } _burn(account, amount); } } // File: @openzeppelin/contracts/access/AccessControl.sol pragma solidity ^0.8.0; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File: @openzeppelin/contracts/access/AccessControlEnumerable.sol pragma solidity ^0.8.0; /** * @dev Extension of {AccessControl} that allows enumerating the members of each role. */ abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl { using EnumerableSet for EnumerableSet.AddressSet; mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns one of the accounts that have `role`. `index` must be a * value between 0 and {getRoleMemberCount}, non-inclusive. * * Role bearers are not sorted in any particular way, and their ordering may * change at any point. * * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure * you perform all queries on the same block. See the following * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] * for more information. */ function getRoleMember(bytes32 role, uint256 index) public view override returns (address) { return _roleMembers[role].at(index); } /** * @dev Returns the number of accounts that have `role`. Can be used * together with {getRoleMember} to enumerate all bearers of a role. */ function getRoleMemberCount(bytes32 role) public view override returns (uint256) { return _roleMembers[role].length(); } /** * @dev Overload {grantRole} to track enumerable memberships */ function grantRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) { super.grantRole(role, account); _roleMembers[role].add(account); } /** * @dev Overload {revokeRole} to track enumerable memberships */ function revokeRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) { super.revokeRole(role, account); _roleMembers[role].remove(account); } /** * @dev Overload {renounceRole} to track enumerable memberships */ function renounceRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) { super.renounceRole(role, account); _roleMembers[role].remove(account); } /** * @dev Overload {_setupRole} to track enumerable memberships */ function _setupRole(bytes32 role, address account) internal virtual override { super._setupRole(role, account); _roleMembers[role].add(account); } } // File: contracts/ERC20Pauser.sol // contracts/ERC20Pauser.sol pragma solidity ^0.8.0; contract ERC20Pauser is Context, AccessControlEnumerable, ERC20Burnable, ERC20Pausable { bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); /** * @dev Grants `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE` and `PAUSER_ROLE` to the * account that deploys the contract. * * See {ERC20-constructor}. */ constructor( string memory name, string memory symbol, uint256 totalSupply, address multisig ) ERC20(name, symbol) { _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(MINTER_ROLE, _msgSender()); _setupRole(PAUSER_ROLE, _msgSender()); super._mint(multisig, totalSupply); } /** * @dev Pauses all token transfers. * * See {ERC20Pausable} and {Pausable-_pause}. * * Requirements: * * - the caller must have the `PAUSER_ROLE`. */ function pause() public virtual { require(hasRole(PAUSER_ROLE, _msgSender()), "pauser role to pause"); _pause(); } /** * @dev Unpauses all token transfers. * * See {ERC20Pausable} and {Pausable-_unpause}. * * Requirements: * * - the caller must have the `PAUSER_ROLE`. */ function unpause() public virtual { require(hasRole(PAUSER_ROLE, _msgSender()), "pauser role to unpause"); _unpause(); } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override(ERC20, ERC20Pausable) { super._beforeTokenTransfer(from, to, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"address","name":"multisig","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200215d3803806200215d833981016040819052620000349162000528565b8351849084906200004d906005906020850190620003d7565b50805162000063906006906020840190620003d7565b50506007805460ff19169055506200008660006200008062000105565b62000109565b620000b57f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66200008062000105565b620000e47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6200008062000105565b620000fb81836200014c60201b620008651760201c565b50505050620006bb565b3390565b6200012082826200022e60201b620009311760201c565b6000828152600160209081526040909120620001479183906200093b6200023a821b17901c565b505050565b6001600160a01b0382166200017e5760405162461bcd60e51b81526004016200017590620005b9565b60405180910390fd5b6200018c600083836200025a565b8060046000828254620001a0919062000643565b90915550506001600160a01b03821660009081526002602052604081208054839290620001cf90849062000643565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620002149085906200063a565b60405180910390a36200022a6000838362000147565b5050565b6200022a828262000272565b600062000251836001600160a01b038416620002fc565b90505b92915050565b620001478383836200034b60201b620009501760201c565b6200027e82826200038d565b6200022a576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002b862000105565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200030a8383620003b6565b620003425750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000254565b50600062000254565b620003638383836200014760201b620005401760201c565b6200036d620003ce565b15620001475760405162461bcd60e51b81526004016200017590620005f0565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60009081526001919091016020526040902054151590565b60075460ff1690565b828054620003e59062000668565b90600052602060002090601f01602090048101928262000409576000855562000454565b82601f106200042457805160ff191683800117855562000454565b8280016001018555821562000454579182015b828111156200045457825182559160200191906001019062000437565b506200046292915062000466565b5090565b5b8082111562000462576000815560010162000467565b600082601f8301126200048e578081fd5b81516001600160401b0380821115620004ab57620004ab620006a5565b6040516020601f8401601f1916820181018381118382101715620004d357620004d3620006a5565b6040528382528584018101871015620004ea578485fd5b8492505b838310156200050d5785830181015182840182015291820191620004ee565b838311156200051e57848185840101525b5095945050505050565b600080600080608085870312156200053e578384fd5b84516001600160401b038082111562000555578586fd5b62000563888389016200047d565b9550602087015191508082111562000579578485fd5b5062000588878288016200047d565b60408701516060880151919550935090506001600160a01b0381168114620005ae578182fd5b939692955090935050565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b6020808252602a908201527f45524332305061757361626c653a20746f6b656e207472616e736665722077686040820152691a5b19481c185d5cd95960b21b606082015260800190565b90815260200190565b600082198211156200066357634e487b7160e01b81526011600452602481fd5b500190565b6002810460018216806200067d57607f821691505b602082108114156200069f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611a9280620006cb6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063a457c2d711610097578063d539139311610071578063d539139314610357578063d547741f1461035f578063dd62ed3e14610372578063e63ab1e914610385576101a9565b8063a457c2d71461031e578063a9059cbb14610331578063ca15c87314610344576101a9565b80639010d07c116100d35780639010d07c146102db57806391d14854146102fb57806395d89b411461030e578063a217fddf14610316576101a9565b806370a08231146102ad57806379cc6790146102c05780638456cb59146102d3576101a9565b80632f2ff15d11610166578063395093511161014057806339509351146102775780633f4ba83a1461028a57806342966c68146102925780635c975abb146102a5576101a9565b80632f2ff15d1461023a578063313ce5671461024f57806336568abe14610264576101a9565b806301ffc9a7146101ae57806306fdde03146101d7578063095ea7b3146101ec57806318160ddd146101ff57806323b872dd14610214578063248a9ca314610227575b600080fd5b6101c16101bc366004611411565b61038d565b6040516101ce91906114c2565b60405180910390f35b6101df6103ba565b6040516101ce91906114d6565b6101c16101fa36600461138d565b61044c565b61020761046a565b6040516101ce91906114cd565b6101c1610222366004611352565b610470565b6102076102353660046113b6565b610509565b61024d6102483660046113ce565b61051e565b005b610257610545565b6040516101ce919061196c565b61024d6102723660046113ce565b61054a565b6101c161028536600461138d565b61056c565b61024d6105c0565b61024d6102a03660046113b6565b610612565b6101c1610626565b6102076102bb366004611306565b61062f565b61024d6102ce36600461138d565b61064a565b61024d610698565b6102ee6102e93660046113f0565b6106e8565b6040516101ce91906114ae565b6101c16103093660046113ce565b610707565b6101df610730565b61020761073f565b6101c161032c36600461138d565b610744565b6101c161033f36600461138d565b6107bd565b6102076103523660046113b6565b6107d1565b6102076107e8565b61024d61036d3660046113ce565b61080c565b610207610380366004611320565b610816565b610207610841565b60006001600160e01b03198216635a05180f60e01b14806103b257506103b282610980565b90505b919050565b6060600580546103c990611a0b565b80601f01602080910402602001604051908101604052809291908181526020018280546103f590611a0b565b80156104425780601f1061041757610100808354040283529160200191610442565b820191906000526020600020905b81548152906001019060200180831161042557829003601f168201915b5050505050905090565b60006104606104596109a5565b84846109a9565b5060015b92915050565b60045490565b600061047d848484610a5d565b6001600160a01b03841660009081526003602052604081208161049e6109a5565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156104ea5760405162461bcd60e51b81526004016104e1906116d1565b60405180910390fd5b6104fe856104f66109a5565b8584036109a9565b506001949350505050565b60009081526020819052604090206001015490565b6105288282610b87565b6000828152600160205260409020610540908261093b565b505050565b601290565b6105548282610bab565b60008281526001602052604090206105409082610bed565b60006104606105796109a5565b8484600360006105876109a5565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546105bb919061197a565b6109a9565b6105ec7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6103096109a5565b6106085760405162461bcd60e51b81526004016104e190611827565b610610610c02565b565b61062361061d6109a5565b82610c70565b50565b60075460ff1690565b6001600160a01b031660009081526002602052604090205490565b6000610658836103806109a5565b90508181101561067a5760405162461bcd60e51b81526004016104e190611719565b61068e836106866109a5565b8484036109a9565b6105408383610c70565b6106c47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6103096109a5565b6106e05760405162461bcd60e51b81526004016104e190611679565b610610610d61565b60008281526001602052604081206107009083610dbc565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600680546103c990611a0b565b600081565b600080600360006107536109a5565b6001600160a01b039081168252602080830193909352604091820160009081209188168152925290205490508281101561079f5760405162461bcd60e51b81526004016104e190611857565b6107b36107aa6109a5565b858584036109a9565b5060019392505050565b60006104606107ca6109a5565b8484610a5d565b60008181526001602052604081206103b290610dc8565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6105548282610dd3565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6001600160a01b03821661088b5760405162461bcd60e51b81526004016104e1906118eb565b61089760008383610df2565b80600460008282546108a9919061197a565b90915550506001600160a01b038216600090815260026020526040812080548392906108d690849061197a565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906109199085906114cd565b60405180910390a361092d60008383610540565b5050565b61092d8282610dfd565b6000610700836001600160a01b038416610e82565b61095b838383610540565b610963610626565b156105405760405162461bcd60e51b81526004016104e190611922565b60006001600160e01b03198216637965db0b60e01b14806103b257506103b282610ecc565b3390565b6001600160a01b0383166109cf5760405162461bcd60e51b81526004016104e1906117e3565b6001600160a01b0382166109f55760405162461bcd60e51b81526004016104e1906115f1565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a509085906114cd565b60405180910390a3505050565b6001600160a01b038316610a835760405162461bcd60e51b81526004016104e19061179e565b6001600160a01b038216610aa95760405162461bcd60e51b81526004016104e19061153e565b610ab4838383610df2565b6001600160a01b03831660009081526002602052604090205481811015610aed5760405162461bcd60e51b81526004016104e190611633565b6001600160a01b03808516600090815260026020526040808220858503905591851681529081208054849290610b2490849061197a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b6e91906114cd565b60405180910390a3610b81848484610540565b50505050565b610b9082610509565b610ba181610b9c6109a5565b610ee5565b6105408383610dfd565b610bb36109a5565b6001600160a01b0316816001600160a01b031614610be35760405162461bcd60e51b81526004016104e19061189c565b61092d8282610f49565b6000610700836001600160a01b038416610fcc565b610c0a610626565b610c265760405162461bcd60e51b81526004016104e190611581565b6007805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610c596109a5565b604051610c6691906114ae565b60405180910390a1565b6001600160a01b038216610c965760405162461bcd60e51b81526004016104e19061175d565b610ca282600083610df2565b6001600160a01b03821660009081526002602052604090205481811015610cdb5760405162461bcd60e51b81526004016104e1906115af565b6001600160a01b0383166000908152600260205260408120838303905560048054849290610d0a9084906119b1565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d4d9086906114cd565b60405180910390a361054083600084610540565b610d69610626565b15610d865760405162461bcd60e51b81526004016104e1906116a7565b6007805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c596109a5565b600061070083836110e9565b60006103b282611121565b610ddc82610509565b610de881610b9c6109a5565b6105408383610f49565b610540838383610950565b610e078282610707565b61092d576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610e3e6109a5565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e8e8383611125565b610ec457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610464565b506000610464565b6001600160e01b031981166301ffc9a760e01b14919050565b610eef8282610707565b61092d57610f07816001600160a01b0316601461113d565b610f1283602061113d565b604051602001610f23929190611439565b60408051601f198184030181529082905262461bcd60e51b82526104e1916004016114d6565b610f538282610707565b1561092d576000828152602081815260408083206001600160a01b03851684529091529020805460ff19169055610f886109a5565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b600081815260018301602052604081205480156110df576000610ff06001836119b1565b8554909150600090611004906001906119b1565b905081811461108557600086600001828154811061103257634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061106357634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b85548690806110a457634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610464565b6000915050610464565b600082600001828154811061110e57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b5490565b60009081526001919091016020526040902054151590565b6060600061114c836002611992565b61115790600261197a565b67ffffffffffffffff81111561117d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156111a7576020820181803683370190505b509050600360fc1b816000815181106111d057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061120d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611231846002611992565b61123c90600161197a565b90505b60018111156112d0576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061127e57634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106112a257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936112c9816119f4565b905061123f565b5083156107005760405162461bcd60e51b81526004016104e190611509565b80356001600160a01b03811681146103b557600080fd5b600060208284031215611317578081fd5b610700826112ef565b60008060408385031215611332578081fd5b61133b836112ef565b9150611349602084016112ef565b90509250929050565b600080600060608486031215611366578081fd5b61136f846112ef565b925061137d602085016112ef565b9150604084013590509250925092565b6000806040838503121561139f578182fd5b6113a8836112ef565b946020939093013593505050565b6000602082840312156113c7578081fd5b5035919050565b600080604083850312156113e0578182fd5b82359150611349602084016112ef565b60008060408385031215611402578182fd5b50508035926020909101359150565b600060208284031215611422578081fd5b81356001600160e01b031981168114610700578182fd5b60007f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000825283516114718160178501602088016119c8565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516114a28160288401602088016119c8565b01602801949350505050565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b60006020825282518060208401526114f58160408501602087016119c8565b601f01601f19169190910160400192915050565b6020808252818101527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526014908201527370617573657220726f6c6520746f20706175736560601b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b60208082526024908201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604082015263616e636560e01b606082015260800190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526016908201527570617573657220726f6c6520746f20756e706175736560501b604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b6020808252602a908201527f45524332305061757361626c653a20746f6b656e207472616e736665722077686040820152691a5b19481c185d5cd95960b21b606082015260800190565b60ff91909116815260200190565b6000821982111561198d5761198d611a46565b500190565b60008160001904831182151516156119ac576119ac611a46565b500290565b6000828210156119c3576119c3611a46565b500390565b60005b838110156119e35781810151838201526020016119cb565b83811115610b815750506000910152565b600081611a0357611a03611a46565b506000190190565b600281046001821680611a1f57607f821691505b60208210811415611a4057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea264697066735822122039ce1fe800d7924c0f4ced0d2e6da2ffd9c8350c604d32317f88c2706fc071a964736f6c63430008000033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000019d971e4fe8401e74000000000000000000000000000000abbbdc5ada7ab9c61e044328aa62285a223bc252000000000000000000000000000000000000000000000000000000000000000a44657842726f7773657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342524f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063a457c2d711610097578063d539139311610071578063d539139314610357578063d547741f1461035f578063dd62ed3e14610372578063e63ab1e914610385576101a9565b8063a457c2d71461031e578063a9059cbb14610331578063ca15c87314610344576101a9565b80639010d07c116100d35780639010d07c146102db57806391d14854146102fb57806395d89b411461030e578063a217fddf14610316576101a9565b806370a08231146102ad57806379cc6790146102c05780638456cb59146102d3576101a9565b80632f2ff15d11610166578063395093511161014057806339509351146102775780633f4ba83a1461028a57806342966c68146102925780635c975abb146102a5576101a9565b80632f2ff15d1461023a578063313ce5671461024f57806336568abe14610264576101a9565b806301ffc9a7146101ae57806306fdde03146101d7578063095ea7b3146101ec57806318160ddd146101ff57806323b872dd14610214578063248a9ca314610227575b600080fd5b6101c16101bc366004611411565b61038d565b6040516101ce91906114c2565b60405180910390f35b6101df6103ba565b6040516101ce91906114d6565b6101c16101fa36600461138d565b61044c565b61020761046a565b6040516101ce91906114cd565b6101c1610222366004611352565b610470565b6102076102353660046113b6565b610509565b61024d6102483660046113ce565b61051e565b005b610257610545565b6040516101ce919061196c565b61024d6102723660046113ce565b61054a565b6101c161028536600461138d565b61056c565b61024d6105c0565b61024d6102a03660046113b6565b610612565b6101c1610626565b6102076102bb366004611306565b61062f565b61024d6102ce36600461138d565b61064a565b61024d610698565b6102ee6102e93660046113f0565b6106e8565b6040516101ce91906114ae565b6101c16103093660046113ce565b610707565b6101df610730565b61020761073f565b6101c161032c36600461138d565b610744565b6101c161033f36600461138d565b6107bd565b6102076103523660046113b6565b6107d1565b6102076107e8565b61024d61036d3660046113ce565b61080c565b610207610380366004611320565b610816565b610207610841565b60006001600160e01b03198216635a05180f60e01b14806103b257506103b282610980565b90505b919050565b6060600580546103c990611a0b565b80601f01602080910402602001604051908101604052809291908181526020018280546103f590611a0b565b80156104425780601f1061041757610100808354040283529160200191610442565b820191906000526020600020905b81548152906001019060200180831161042557829003601f168201915b5050505050905090565b60006104606104596109a5565b84846109a9565b5060015b92915050565b60045490565b600061047d848484610a5d565b6001600160a01b03841660009081526003602052604081208161049e6109a5565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156104ea5760405162461bcd60e51b81526004016104e1906116d1565b60405180910390fd5b6104fe856104f66109a5565b8584036109a9565b506001949350505050565b60009081526020819052604090206001015490565b6105288282610b87565b6000828152600160205260409020610540908261093b565b505050565b601290565b6105548282610bab565b60008281526001602052604090206105409082610bed565b60006104606105796109a5565b8484600360006105876109a5565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546105bb919061197a565b6109a9565b6105ec7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6103096109a5565b6106085760405162461bcd60e51b81526004016104e190611827565b610610610c02565b565b61062361061d6109a5565b82610c70565b50565b60075460ff1690565b6001600160a01b031660009081526002602052604090205490565b6000610658836103806109a5565b90508181101561067a5760405162461bcd60e51b81526004016104e190611719565b61068e836106866109a5565b8484036109a9565b6105408383610c70565b6106c47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6103096109a5565b6106e05760405162461bcd60e51b81526004016104e190611679565b610610610d61565b60008281526001602052604081206107009083610dbc565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600680546103c990611a0b565b600081565b600080600360006107536109a5565b6001600160a01b039081168252602080830193909352604091820160009081209188168152925290205490508281101561079f5760405162461bcd60e51b81526004016104e190611857565b6107b36107aa6109a5565b858584036109a9565b5060019392505050565b60006104606107ca6109a5565b8484610a5d565b60008181526001602052604081206103b290610dc8565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6105548282610dd3565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6001600160a01b03821661088b5760405162461bcd60e51b81526004016104e1906118eb565b61089760008383610df2565b80600460008282546108a9919061197a565b90915550506001600160a01b038216600090815260026020526040812080548392906108d690849061197a565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906109199085906114cd565b60405180910390a361092d60008383610540565b5050565b61092d8282610dfd565b6000610700836001600160a01b038416610e82565b61095b838383610540565b610963610626565b156105405760405162461bcd60e51b81526004016104e190611922565b60006001600160e01b03198216637965db0b60e01b14806103b257506103b282610ecc565b3390565b6001600160a01b0383166109cf5760405162461bcd60e51b81526004016104e1906117e3565b6001600160a01b0382166109f55760405162461bcd60e51b81526004016104e1906115f1565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a509085906114cd565b60405180910390a3505050565b6001600160a01b038316610a835760405162461bcd60e51b81526004016104e19061179e565b6001600160a01b038216610aa95760405162461bcd60e51b81526004016104e19061153e565b610ab4838383610df2565b6001600160a01b03831660009081526002602052604090205481811015610aed5760405162461bcd60e51b81526004016104e190611633565b6001600160a01b03808516600090815260026020526040808220858503905591851681529081208054849290610b2490849061197a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b6e91906114cd565b60405180910390a3610b81848484610540565b50505050565b610b9082610509565b610ba181610b9c6109a5565b610ee5565b6105408383610dfd565b610bb36109a5565b6001600160a01b0316816001600160a01b031614610be35760405162461bcd60e51b81526004016104e19061189c565b61092d8282610f49565b6000610700836001600160a01b038416610fcc565b610c0a610626565b610c265760405162461bcd60e51b81526004016104e190611581565b6007805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610c596109a5565b604051610c6691906114ae565b60405180910390a1565b6001600160a01b038216610c965760405162461bcd60e51b81526004016104e19061175d565b610ca282600083610df2565b6001600160a01b03821660009081526002602052604090205481811015610cdb5760405162461bcd60e51b81526004016104e1906115af565b6001600160a01b0383166000908152600260205260408120838303905560048054849290610d0a9084906119b1565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d4d9086906114cd565b60405180910390a361054083600084610540565b610d69610626565b15610d865760405162461bcd60e51b81526004016104e1906116a7565b6007805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c596109a5565b600061070083836110e9565b60006103b282611121565b610ddc82610509565b610de881610b9c6109a5565b6105408383610f49565b610540838383610950565b610e078282610707565b61092d576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610e3e6109a5565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e8e8383611125565b610ec457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610464565b506000610464565b6001600160e01b031981166301ffc9a760e01b14919050565b610eef8282610707565b61092d57610f07816001600160a01b0316601461113d565b610f1283602061113d565b604051602001610f23929190611439565b60408051601f198184030181529082905262461bcd60e51b82526104e1916004016114d6565b610f538282610707565b1561092d576000828152602081815260408083206001600160a01b03851684529091529020805460ff19169055610f886109a5565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b600081815260018301602052604081205480156110df576000610ff06001836119b1565b8554909150600090611004906001906119b1565b905081811461108557600086600001828154811061103257634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061106357634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b85548690806110a457634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610464565b6000915050610464565b600082600001828154811061110e57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b5490565b60009081526001919091016020526040902054151590565b6060600061114c836002611992565b61115790600261197a565b67ffffffffffffffff81111561117d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156111a7576020820181803683370190505b509050600360fc1b816000815181106111d057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061120d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611231846002611992565b61123c90600161197a565b90505b60018111156112d0576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061127e57634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106112a257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936112c9816119f4565b905061123f565b5083156107005760405162461bcd60e51b81526004016104e190611509565b80356001600160a01b03811681146103b557600080fd5b600060208284031215611317578081fd5b610700826112ef565b60008060408385031215611332578081fd5b61133b836112ef565b9150611349602084016112ef565b90509250929050565b600080600060608486031215611366578081fd5b61136f846112ef565b925061137d602085016112ef565b9150604084013590509250925092565b6000806040838503121561139f578182fd5b6113a8836112ef565b946020939093013593505050565b6000602082840312156113c7578081fd5b5035919050565b600080604083850312156113e0578182fd5b82359150611349602084016112ef565b60008060408385031215611402578182fd5b50508035926020909101359150565b600060208284031215611422578081fd5b81356001600160e01b031981168114610700578182fd5b60007f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000825283516114718160178501602088016119c8565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516114a28160288401602088016119c8565b01602801949350505050565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b60006020825282518060208401526114f58160408501602087016119c8565b601f01601f19169190910160400192915050565b6020808252818101527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526014908201527370617573657220726f6c6520746f20706175736560601b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b60208082526024908201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604082015263616e636560e01b606082015260800190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526016908201527570617573657220726f6c6520746f20756e706175736560501b604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b6020808252602a908201527f45524332305061757361626c653a20746f6b656e207472616e736665722077686040820152691a5b19481c185d5cd95960b21b606082015260800190565b60ff91909116815260200190565b6000821982111561198d5761198d611a46565b500190565b60008160001904831182151516156119ac576119ac611a46565b500290565b6000828210156119c3576119c3611a46565b500390565b60005b838110156119e35781810151838201526020016119cb565b83811115610b815750506000910152565b600081611a0357611a03611a46565b506000190190565b600281046001821680611a1f57607f821691505b60208210811415611a4057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea264697066735822122039ce1fe800d7924c0f4ced0d2e6da2ffd9c8350c604d32317f88c2706fc071a964736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000019d971e4fe8401e74000000000000000000000000000000abbbdc5ada7ab9c61e044328aa62285a223bc252000000000000000000000000000000000000000000000000000000000000000a44657842726f7773657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342524f0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): DexBrowser
Arg [1] : symbol (string): BRO
Arg [2] : totalSupply (uint256): 500000000000000000000000000
Arg [3] : multisig (address): 0xABbbDC5Ada7AB9C61e044328aa62285A223BC252
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000019d971e4fe8401e74000000
Arg [3] : 000000000000000000000000abbbdc5ada7ab9c61e044328aa62285a223bc252
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [5] : 44657842726f7773657200000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 42524f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
51496:1701:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48972:214;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29233:100;;;:::i;:::-;;;;;;;:::i;31400:169::-;;;;;;:::i;:::-;;:::i;30353:108::-;;;:::i;:::-;;;;;;;:::i;32051:492::-;;;;;;:::i;:::-;;:::i;45268:123::-;;;;;;:::i;:::-;;:::i;50330:196::-;;;;;;:::i;:::-;;:::i;:::-;;30195:93;;;:::i;:::-;;;;;;;:::i;50915:205::-;;;;;;:::i;:::-;;:::i;32952:215::-;;;;;;:::i;:::-;;:::i;52860:143::-;;;:::i;40557:91::-;;;;;;:::i;:::-;;:::i;25974:86::-;;;:::i;30524:127::-;;;;;;:::i;:::-;;:::i;40967:368::-;;;;;;:::i;:::-;;:::i;52505:137::-;;;:::i;49785:145::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;44153:139::-;;;;;;:::i;:::-;;:::i;29452:104::-;;;:::i;43244:49::-;;;:::i;33670:413::-;;;;;;:::i;:::-;;:::i;30864:175::-;;;;;;:::i;:::-;;:::i;50104:134::-;;;;;;:::i;:::-;;:::i;51590:62::-;;;:::i;50619:201::-;;;;;;:::i;:::-;;:::i;31102:151::-;;;;;;:::i;:::-;;:::i;51659:62::-;;;:::i;48972:214::-;49057:4;-1:-1:-1;;;;;;49081:57:0;;-1:-1:-1;;;49081:57:0;;:97;;;49142:36;49166:11;49142:23;:36::i;:::-;49074:104;;48972:214;;;;:::o;29233:100::-;29287:13;29320:5;29313:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29233:100;:::o;31400:169::-;31483:4;31500:39;31509:12;:10;:12::i;:::-;31523:7;31532:6;31500:8;:39::i;:::-;-1:-1:-1;31557:4:0;31400:169;;;;;:::o;30353:108::-;30441:12;;30353:108;:::o;32051:492::-;32191:4;32208:36;32218:6;32226:9;32237:6;32208:9;:36::i;:::-;-1:-1:-1;;;;;32284:19:0;;32257:24;32284:19;;;:11;:19;;;;;32257:24;32304:12;:10;:12::i;:::-;-1:-1:-1;;;;;32284:33:0;-1:-1:-1;;;;;32284:33:0;;;;;;;;;;;;;32257:60;;32356:6;32336:16;:26;;32328:79;;;;-1:-1:-1;;;32328:79:0;;;;;;;:::i;:::-;;;;;;;;;32443:57;32452:6;32460:12;:10;:12::i;:::-;32493:6;32474:16;:25;32443:8;:57::i;:::-;-1:-1:-1;32531:4:0;;32051:492;-1:-1:-1;;;;32051:492:0:o;45268:123::-;45334:7;45361:12;;;;;;;;;;:22;;;;45268:123::o;50330:196::-;50446:30;50462:4;50468:7;50446:15;:30::i;:::-;50487:18;;;;:12;:18;;;;;:31;;50510:7;50487:22;:31::i;:::-;;50330:196;;:::o;30195:93::-;30278:2;30195:93;:::o;50915:205::-;51034:33;51053:4;51059:7;51034:18;:33::i;:::-;51078:18;;;;:12;:18;;;;;:34;;51104:7;51078:25;:34::i;32952:215::-;33040:4;33057:80;33066:12;:10;:12::i;:::-;33080:7;33126:10;33089:11;:25;33101:12;:10;:12::i;:::-;-1:-1:-1;;;;;33089:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;33089:25:0;;;:34;;;;;;;;;;:47;;;;:::i;:::-;33057:8;:80::i;52860:143::-;52913:34;51697:24;52934:12;:10;:12::i;52913:34::-;52905:69;;;;-1:-1:-1;;;52905:69:0;;;;;;;:::i;:::-;52985:10;:8;:10::i;:::-;52860:143::o;40557:91::-;40613:27;40619:12;:10;:12::i;:::-;40633:6;40613:5;:27::i;:::-;40557:91;:::o;25974:86::-;26045:7;;;;25974:86;:::o;30524:127::-;-1:-1:-1;;;;;30625:18:0;30598:7;30625:18;;;:9;:18;;;;;;;30524:127::o;40967:368::-;41044:24;41071:32;41081:7;41090:12;:10;:12::i;41071:32::-;41044:59;;41142:6;41122:16;:26;;41114:75;;;;-1:-1:-1;;;41114:75:0;;;;;;;:::i;:::-;41225:58;41234:7;41243:12;:10;:12::i;:::-;41276:6;41257:16;:25;41225:8;:58::i;:::-;41305:22;41311:7;41320:6;41305:5;:22::i;52505:137::-;52556:34;51697:24;52577:12;:10;:12::i;52556:34::-;52548:67;;;;-1:-1:-1;;;52548:67:0;;;;;;;:::i;:::-;52626:8;:6;:8::i;49785:145::-;49867:7;49894:18;;;:12;:18;;;;;:28;;49916:5;49894:21;:28::i;:::-;49887:35;49785:145;-1:-1:-1;;;49785:145:0:o;44153:139::-;44231:4;44255:12;;;;;;;;;;;-1:-1:-1;;;;;44255:29:0;;;;;;;;;;;;;;;44153:139::o;29452:104::-;29508:13;29541:7;29534:14;;;;;:::i;43244:49::-;43289:4;43244:49;:::o;33670:413::-;33763:4;33780:24;33807:11;:25;33819:12;:10;:12::i;:::-;-1:-1:-1;;;;;33807:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;33807:25:0;;;:34;;;;;;;;;;;-1:-1:-1;33860:35:0;;;;33852:85;;;;-1:-1:-1;;;33852:85:0;;;;;;;:::i;:::-;33973:67;33982:12;:10;:12::i;:::-;33996:7;34024:15;34005:16;:34;33973:8;:67::i;:::-;-1:-1:-1;34071:4:0;;33670:413;-1:-1:-1;;;33670:413:0:o;30864:175::-;30950:4;30967:42;30977:12;:10;:12::i;:::-;30991:9;31002:6;30967:9;:42::i;50104:134::-;50176:7;50203:18;;;:12;:18;;;;;:27;;:25;:27::i;51590:62::-;51628:24;51590:62;:::o;50619:201::-;50736:31;50753:4;50759:7;50736:16;:31::i;31102:151::-;-1:-1:-1;;;;;31218:18:0;;;31191:7;31218:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31102:151::o;51659:62::-;51697:24;51659:62;:::o;35593:399::-;-1:-1:-1;;;;;35677:21:0;;35669:65;;;;-1:-1:-1;;;35669:65:0;;;;;;;:::i;:::-;35747:49;35776:1;35780:7;35789:6;35747:20;:49::i;:::-;35825:6;35809:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;35842:18:0;;;;;;:9;:18;;;;;:28;;35864:6;;35842:18;:28;;35864:6;;35842:28;:::i;:::-;;;;-1:-1:-1;;35886:37:0;;-1:-1:-1;;;;;35886:37:0;;;35903:1;;35886:37;;;;35916:6;;35886:37;:::i;:::-;;;;;;;;35936:48;35964:1;35968:7;35977:6;35936:19;:48::i;:::-;35593:399;;:::o;47502:112::-;47581:25;47592:4;47598:7;47581:10;:25::i;11298:152::-;11368:4;11392:50;11397:3;-1:-1:-1;;;;;11417:23:0;;11392:4;:50::i;39787:272::-;39930:44;39957:4;39963:2;39967:6;39930:26;:44::i;:::-;39996:8;:6;:8::i;:::-;39995:9;39987:64;;;;-1:-1:-1;;;39987:64:0;;;;;;;:::i;43857:204::-;43942:4;-1:-1:-1;;;;;;43966:47:0;;-1:-1:-1;;;43966:47:0;;:87;;;44017:36;44041:11;44017:23;:36::i;24686:98::-;24766:10;24686:98;:::o;37354:380::-;-1:-1:-1;;;;;37490:19:0;;37482:68;;;;-1:-1:-1;;;37482:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37569:21:0;;37561:68;;;;-1:-1:-1;;;37561:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37642:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;37694:32;;;;;37672:6;;37694:32;:::i;:::-;;;;;;;;37354:380;;;:::o;34573:733::-;-1:-1:-1;;;;;34713:20:0;;34705:70;;;;-1:-1:-1;;;34705:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34794:23:0;;34786:71;;;;-1:-1:-1;;;34786:71:0;;;;;;;:::i;:::-;34870:47;34891:6;34899:9;34910:6;34870:20;:47::i;:::-;-1:-1:-1;;;;;34954:17:0;;34930:21;34954:17;;;:9;:17;;;;;;34990:23;;;;34982:74;;;;-1:-1:-1;;;34982:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35092:17:0;;;;;;;:9;:17;;;;;;35112:22;;;35092:42;;35156:20;;;;;;;;:30;;35128:6;;35092:17;35156:30;;35128:6;;35156:30;:::i;:::-;;;;;;;;35221:9;-1:-1:-1;;;;;35204:35:0;35213:6;-1:-1:-1;;;;;35204:35:0;;35232:6;35204:35;;;;;;:::i;:::-;;;;;;;;35252:46;35272:6;35280:9;35291:6;35252:19;:46::i;:::-;34573:733;;;;:::o;45653:147::-;45736:18;45749:4;45736:12;:18::i;:::-;43735:30;43746:4;43752:12;:10;:12::i;:::-;43735:10;:30::i;:::-;45767:25:::1;45778:4;45784:7;45767:10;:25::i;46701:218::-:0;46808:12;:10;:12::i;:::-;-1:-1:-1;;;;;46797:23:0;:7;-1:-1:-1;;;;;46797:23:0;;46789:83;;;;-1:-1:-1;;;46789:83:0;;;;;;;:::i;:::-;46885:26;46897:4;46903:7;46885:11;:26::i;11626:158::-;11699:4;11723:53;11731:3;-1:-1:-1;;;;;11751:23:0;;11723:7;:53::i;27033:120::-;26577:8;:6;:8::i;:::-;26569:41;;;;-1:-1:-1;;;26569:41:0;;;;;;;:::i;:::-;27092:7:::1;:15:::0;;-1:-1:-1;;27092:15:0::1;::::0;;27123:22:::1;27132:12;:10;:12::i;:::-;27123:22;;;;;;:::i;:::-;;;;;;;;27033:120::o:0;36325:591::-;-1:-1:-1;;;;;36409:21:0;;36401:67;;;;-1:-1:-1;;;36401:67:0;;;;;;;:::i;:::-;36481:49;36502:7;36519:1;36523:6;36481:20;:49::i;:::-;-1:-1:-1;;;;;36568:18:0;;36543:22;36568:18;;;:9;:18;;;;;;36605:24;;;;36597:71;;;;-1:-1:-1;;;36597:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36704:18:0;;;;;;:9;:18;;;;;36725:23;;;36704:44;;36770:12;:22;;36742:6;;36704:18;36770:22;;36742:6;;36770:22;:::i;:::-;;;;-1:-1:-1;;36810:37:0;;36836:1;;-1:-1:-1;;;;;36810:37:0;;;;;;;36840:6;;36810:37;:::i;:::-;;;;;;;;36860:48;36880:7;36897:1;36901:6;36860:19;:48::i;26774:118::-;26300:8;:6;:8::i;:::-;26299:9;26291:38;;;;-1:-1:-1;;;26291:38:0;;;;;;;:::i;:::-;26834:7:::1;:14:::0;;-1:-1:-1;;26834:14:0::1;26844:4;26834:14;::::0;;26864:20:::1;26871:12;:10;:12::i;12594:158::-:0;12668:7;12719:22;12723:3;12735:5;12719:3;:22::i;12123:117::-;12186:7;12213:19;12221:3;12213:7;:19::i;46045:149::-;46129:18;46142:4;46129:12;:18::i;:::-;43735:30;43746:4;43752:12;:10;:12::i;43735:30::-;46160:26:::1;46172:4;46178:7;46160:11;:26::i;53011:183::-:0;53142:44;53169:4;53175:2;53179:6;53142:26;:44::i;48005:229::-;48080:22;48088:4;48094:7;48080;:22::i;:::-;48075:152;;48119:6;:12;;;;;;;;;;;-1:-1:-1;;;;;48119:29:0;;;;;;;;;:36;;-1:-1:-1;;48119:36:0;48151:4;48119:36;;;48202:12;:10;:12::i;:::-;-1:-1:-1;;;;;48175:40:0;48193:7;-1:-1:-1;;;;;48175:40:0;48187:4;48175:40;;;;;;;;;;48005:229;;:::o;5213:414::-;5276:4;5298:21;5308:3;5313:5;5298:9;:21::i;:::-;5293:327;;-1:-1:-1;5336:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;5519:18;;5497:19;;;:12;;;:19;;;;;;:40;;;;5552:11;;5293:327;-1:-1:-1;5603:5:0;5596:12;;17650:157;-1:-1:-1;;;;;;17759:40:0;;-1:-1:-1;;;17759:40:0;17650:157;;;:::o;44582:497::-;44663:22;44671:4;44677:7;44663;:22::i;:::-;44658:414;;44851:41;44879:7;-1:-1:-1;;;;;44851:41:0;44889:2;44851:19;:41::i;:::-;44965:38;44993:4;45000:2;44965:19;:38::i;:::-;44756:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;44756:270:0;;;;;;;;;;-1:-1:-1;;;44702:358:0;;;;;;;:::i;48242:230::-;48317:22;48325:4;48331:7;48317;:22::i;:::-;48313:152;;;48388:5;48356:12;;;;;;;;;;;-1:-1:-1;;;;;48356:29:0;;;;;;;;;:37;;-1:-1:-1;;48356:37:0;;;48440:12;:10;:12::i;:::-;-1:-1:-1;;;;;48413:40:0;48431:7;-1:-1:-1;;;;;48413:40:0;48425:4;48413:40;;;;;;;;;;48242:230;;:::o;5803:1420::-;5869:4;6008:19;;;:12;;;:19;;;;;;6044:15;;6040:1176;;6419:21;6443:14;6456:1;6443:10;:14;:::i;:::-;6492:18;;6419:38;;-1:-1:-1;6472:17:0;;6492:22;;6513:1;;6492:22;:::i;:::-;6472:42;;6548:13;6535:9;:26;6531:405;;6582:17;6602:3;:11;;6614:9;6602:22;;;;;;-1:-1:-1;;;6602:22:0;;;;;;;;;;;;;;;;;6582:42;;6756:9;6727:3;:11;;6739:13;6727:26;;;;;;-1:-1:-1;;;6727:26:0;;;;;;;;;;;;;;;;;;;;:38;;;;6841:23;;;:12;;;:23;;;;;:36;;;6531:405;7017:17;;:3;;:17;;;-1:-1:-1;;;7017:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;7112:3;:12;;:19;7125:5;7112:19;;;;;;;;;;;7105:26;;;7155:4;7148:11;;;;;;;6040:1176;7199:5;7192:12;;;;;7987:120;8054:7;8081:3;:11;;8093:5;8081:18;;;;;;-1:-1:-1;;;8081:18:0;;;;;;;;;;;;;;;;;8074:25;;7987:120;;;;:::o;7524:109::-;7607:18;;7524:109::o;7309:129::-;7382:4;7406:19;;;:12;;;;;:19;;;;;;:24;;;7309:129::o;19426:451::-;19501:13;19527:19;19559:10;19563:6;19559:1;:10;:::i;:::-;:14;;19572:1;19559:14;:::i;:::-;19549:25;;;;;;-1:-1:-1;;;19549:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19549:25:0;;19527:47;;-1:-1:-1;;;19585:6:0;19592:1;19585:9;;;;;;-1:-1:-1;;;19585:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;19585:15:0;;;;;;;;;-1:-1:-1;;;19611:6:0;19618:1;19611:9;;;;;;-1:-1:-1;;;19611:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;19611:15:0;;;;;;;;-1:-1:-1;19642:9:0;19654:10;19658:6;19654:1;:10;:::i;:::-;:14;;19667:1;19654:14;:::i;:::-;19642:26;;19637:135;19674:1;19670;:5;19637:135;;;-1:-1:-1;;;19722:5:0;19730:3;19722:11;19709:25;;;;;-1:-1:-1;;;19709:25:0;;;;;;;;;;;;19697:6;19704:1;19697:9;;;;;;-1:-1:-1;;;19697:9:0;;;;;;;;;;;;:37;-1:-1:-1;;;;;19697:37:0;;;;;;;;-1:-1:-1;19759:1:0;19749:11;;;;;19677:3;;;:::i;:::-;;;19637:135;;;-1:-1:-1;19790:10:0;;19782:55;;;;-1:-1:-1;;;19782:55:0;;;;;;;:::i;14:175:1:-;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:198;;306:2;294:9;285:7;281:23;277:32;274:2;;;327:6;319;312:22;274:2;355:31;376:9;355:31;:::i;397:274::-;;;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;575:31;596:9;575:31;:::i;:::-;565:41;;625:40;661:2;650:9;646:18;625:40;:::i;:::-;615:50;;484:187;;;;;:::o;676:342::-;;;;822:2;810:9;801:7;797:23;793:32;790:2;;;843:6;835;828:22;790:2;871:31;892:9;871:31;:::i;:::-;861:41;;921:40;957:2;946:9;942:18;921:40;:::i;:::-;911:50;;1008:2;997:9;993:18;980:32;970:42;;780:238;;;;;:::o;1023:266::-;;;1152:2;1140:9;1131:7;1127:23;1123:32;1120:2;;;1173:6;1165;1158:22;1120:2;1201:31;1222:9;1201:31;:::i;:::-;1191:41;1279:2;1264:18;;;;1251:32;;-1:-1:-1;;;1110:179:1:o;1294:190::-;;1406:2;1394:9;1385:7;1381:23;1377:32;1374:2;;;1427:6;1419;1412:22;1374:2;-1:-1:-1;1455:23:1;;1364:120;-1:-1:-1;1364:120:1:o;1489:266::-;;;1618:2;1606:9;1597:7;1593:23;1589:32;1586:2;;;1639:6;1631;1624:22;1586:2;1680:9;1667:23;1657:33;;1709:40;1745:2;1734:9;1730:18;1709:40;:::i;1760:258::-;;;1889:2;1877:9;1868:7;1864:23;1860:32;1857:2;;;1910:6;1902;1895:22;1857:2;-1:-1:-1;;1938:23:1;;;2008:2;1993:18;;;1980:32;;-1:-1:-1;1847:171:1:o;2023:306::-;;2134:2;2122:9;2113:7;2109:23;2105:32;2102:2;;;2155:6;2147;2140:22;2102:2;2186:23;;-1:-1:-1;;;;;;2238:32:1;;2228:43;;2218:2;;2290:6;2282;2275:22;2529:786;;2940:25;2935:3;2928:38;2995:6;2989:13;3011:62;3066:6;3061:2;3056:3;3052:12;3045:4;3037:6;3033:17;3011:62;:::i;:::-;-1:-1:-1;;;3132:2:1;3092:16;;;3124:11;;;3117:40;3182:13;;3204:63;3182:13;3253:2;3245:11;;3238:4;3226:17;;3204:63;:::i;:::-;3287:17;3306:2;3283:26;;2918:397;-1:-1:-1;;;;2918:397:1:o;3320:203::-;-1:-1:-1;;;;;3484:32:1;;;;3466:51;;3454:2;3439:18;;3421:102::o;3528:187::-;3693:14;;3686:22;3668:41;;3656:2;3641:18;;3623:92::o;3720:177::-;3866:25;;;3854:2;3839:18;;3821:76::o;3902:383::-;;4051:2;4040:9;4033:21;4083:6;4077:13;4126:6;4121:2;4110:9;4106:18;4099:34;4142:66;4201:6;4196:2;4185:9;4181:18;4176:2;4168:6;4164:15;4142:66;:::i;:::-;4269:2;4248:15;-1:-1:-1;;4244:29:1;4229:45;;;;4276:2;4225:54;;4023:262;-1:-1:-1;;4023:262:1:o;4290:356::-;4492:2;4474:21;;;4511:18;;;4504:30;4570:34;4565:2;4550:18;;4543:62;4637:2;4622:18;;4464:182::o;4651:399::-;4853:2;4835:21;;;4892:2;4872:18;;;4865:30;4931:34;4926:2;4911:18;;4904:62;-1:-1:-1;;;4997:2:1;4982:18;;4975:33;5040:3;5025:19;;4825:225::o;5055:344::-;5257:2;5239:21;;;5296:2;5276:18;;;5269:30;-1:-1:-1;;;5330:2:1;5315:18;;5308:50;5390:2;5375:18;;5229:170::o;5404:398::-;5606:2;5588:21;;;5645:2;5625:18;;;5618:30;5684:34;5679:2;5664:18;;5657:62;-1:-1:-1;;;5750:2:1;5735:18;;5728:32;5792:3;5777:19;;5578:224::o;5807:398::-;6009:2;5991:21;;;6048:2;6028:18;;;6021:30;6087:34;6082:2;6067:18;;6060:62;-1:-1:-1;;;6153:2:1;6138:18;;6131:32;6195:3;6180:19;;5981:224::o;6210:402::-;6412:2;6394:21;;;6451:2;6431:18;;;6424:30;6490:34;6485:2;6470:18;;6463:62;-1:-1:-1;;;6556:2:1;6541:18;;6534:36;6602:3;6587:19;;6384:228::o;6617:344::-;6819:2;6801:21;;;6858:2;6838:18;;;6831:30;-1:-1:-1;;;6892:2:1;6877:18;;6870:50;6952:2;6937:18;;6791:170::o;6966:340::-;7168:2;7150:21;;;7207:2;7187:18;;;7180:30;-1:-1:-1;;;7241:2:1;7226:18;;7219:46;7297:2;7282:18;;7140:166::o;7311:404::-;7513:2;7495:21;;;7552:2;7532:18;;;7525:30;7591:34;7586:2;7571:18;;7564:62;-1:-1:-1;;;7657:2:1;7642:18;;7635:38;7705:3;7690:19;;7485:230::o;7720:400::-;7922:2;7904:21;;;7961:2;7941:18;;;7934:30;8000:34;7995:2;7980:18;;7973:62;-1:-1:-1;;;8066:2:1;8051:18;;8044:34;8110:3;8095:19;;7894:226::o;8125:397::-;8327:2;8309:21;;;8366:2;8346:18;;;8339:30;8405:34;8400:2;8385:18;;8378:62;-1:-1:-1;;;8471:2:1;8456:18;;8449:31;8512:3;8497:19;;8299:223::o;8527:401::-;8729:2;8711:21;;;8768:2;8748:18;;;8741:30;8807:34;8802:2;8787:18;;8780:62;-1:-1:-1;;;8873:2:1;8858:18;;8851:35;8918:3;8903:19;;8701:227::o;8933:400::-;9135:2;9117:21;;;9174:2;9154:18;;;9147:30;9213:34;9208:2;9193:18;;9186:62;-1:-1:-1;;;9279:2:1;9264:18;;9257:34;9323:3;9308:19;;9107:226::o;9338:346::-;9540:2;9522:21;;;9579:2;9559:18;;;9552:30;-1:-1:-1;;;9613:2:1;9598:18;;9591:52;9675:2;9660:18;;9512:172::o;9689:401::-;9891:2;9873:21;;;9930:2;9910:18;;;9903:30;9969:34;9964:2;9949:18;;9942:62;-1:-1:-1;;;10035:2:1;10020:18;;10013:35;10080:3;10065:19;;9863:227::o;10095:411::-;10297:2;10279:21;;;10336:2;10316:18;;;10309:30;10375:34;10370:2;10355:18;;10348:62;-1:-1:-1;;;10441:2:1;10426:18;;10419:45;10496:3;10481:19;;10269:237::o;10511:355::-;10713:2;10695:21;;;10752:2;10732:18;;;10725:30;10791:33;10786:2;10771:18;;10764:61;10857:2;10842:18;;10685:181::o;10871:406::-;11073:2;11055:21;;;11112:2;11092:18;;;11085:30;11151:34;11146:2;11131:18;;11124:62;-1:-1:-1;;;11217:2:1;11202:18;;11195:40;11267:3;11252:19;;11045:232::o;11464:184::-;11636:4;11624:17;;;;11606:36;;11594:2;11579:18;;11561:87::o;11653:128::-;;11724:1;11720:6;11717:1;11714:13;11711:2;;;11730:18;;:::i;:::-;-1:-1:-1;11766:9:1;;11701:80::o;11786:168::-;;11892:1;11888;11884:6;11880:14;11877:1;11874:21;11869:1;11862:9;11855:17;11851:45;11848:2;;;11899:18;;:::i;:::-;-1:-1:-1;11939:9:1;;11838:116::o;11959:125::-;;12027:1;12024;12021:8;12018:2;;;12032:18;;:::i;:::-;-1:-1:-1;12069:9:1;;12008:76::o;12089:258::-;12161:1;12171:113;12185:6;12182:1;12179:13;12171:113;;;12261:11;;;12255:18;12242:11;;;12235:39;12207:2;12200:10;12171:113;;;12302:6;12299:1;12296:13;12293:2;;;-1:-1:-1;;12337:1:1;12319:16;;12312:27;12142:205::o;12352:136::-;;12419:5;12409:2;;12428:18;;:::i;:::-;-1:-1:-1;;;12464:18:1;;12399:89::o;12493:380::-;12578:1;12568:12;;12625:1;12615:12;;;12636:2;;12690:4;12682:6;12678:17;12668:27;;12636:2;12743;12735:6;12732:14;12712:18;12709:38;12706:2;;;12789:10;12784:3;12780:20;12777:1;12770:31;12824:4;12821:1;12814:15;12852:4;12849:1;12842:15;12706:2;;12548:325;;;:::o;12878:127::-;12939:10;12934:3;12930:20;12927:1;12920:31;12970:4;12967:1;12960:15;12994:4;12991:1;12984:15
Swarm Source
ipfs://39ce1fe800d7924c0f4ced0d2e6da2ffd9c8350c604d32317f88c2706fc071a9
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.