ERC-1155
Overview
Max Total Supply
0
Holders
357
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ERC1155PresetMinterPauserUpgradeable
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-05-25 */ // Bitchcoin by Sarah Meyohas // www.sarahmeyohas.com/bitchcoin // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol /* * @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 ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/utils/introspection/IERC165Upgradeable.sol /** * @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 IERC165Upgradeable { /** * @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: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol /** * @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 ERC165Upgradeable is Initializable, IERC165Upgradeable { function __ERC165_init() internal initializer { __ERC165_init_unchained(); } function __ERC165_init_unchained() internal initializer { } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165Upgradeable).interfaceId; } uint256[50] private __gap; } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/utils/StringsUpgradeable.sol /** * @dev String operations. */ library StringsUpgradeable { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControlUpgradeable { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @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 AccessControlUpgradeable is Initializable, ContextUpgradeable, IAccessControlUpgradeable, ERC165Upgradeable { function __AccessControl_init() internal initializer { __Context_init_unchained(); __ERC165_init_unchained(); __AccessControl_init_unchained(); } function __AccessControl_init_unchained() internal initializer { } struct RoleData { mapping (address => bool) members; bytes32 adminRole; } mapping (bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @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 {_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 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]{20}) is missing role (0x[0-9a-f]{32})$/ * * _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(IAccessControlUpgradeable).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]{20}) is missing role (0x[0-9a-f]{32})$/ */ function _checkRole(bytes32 role, address account) internal view { if(!hasRole(role, account)) { revert(string(abi.encodePacked( "AccessControl: account ", StringsUpgradeable.toHexString(uint160(account), 20), " is missing role ", StringsUpgradeable.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 { emit RoleAdminChanged(role, getRoleAdmin(role), adminRole); _roles[role].adminRole = 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()); } } uint256[49] private __gap; } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/utils/structs/EnumerableSetUpgradeable.sol /** * @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 EnumerableSetUpgradeable { // 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]; } // 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); } // 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)))); } // 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)); } } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/access/AccessControlEnumerableUpgradeable.sol /** * @dev External interface of AccessControlEnumerable declared to support ERC165 detection. */ interface IAccessControlEnumerableUpgradeable { function getRoleMember(bytes32 role, uint256 index) external view returns (address); function getRoleMemberCount(bytes32 role) external view returns (uint256); } /** * @dev Extension of {AccessControl} that allows enumerating the members of each role. */ abstract contract AccessControlEnumerableUpgradeable is Initializable, IAccessControlEnumerableUpgradeable, AccessControlUpgradeable { function __AccessControlEnumerable_init() internal initializer { __Context_init_unchained(); __ERC165_init_unchained(); __AccessControl_init_unchained(); __AccessControlEnumerable_init_unchained(); } function __AccessControlEnumerable_init_unchained() internal initializer { } using EnumerableSetUpgradeable for EnumerableSetUpgradeable.AddressSet; mapping (bytes32 => EnumerableSetUpgradeable.AddressSet) private _roleMembers; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControlEnumerableUpgradeable).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 { super.grantRole(role, account); _roleMembers[role].add(account); } /** * @dev Overload {revokeRole} to track enumerable memberships */ function revokeRole(bytes32 role, address account) public virtual override { super.revokeRole(role, account); _roleMembers[role].remove(account); } /** * @dev Overload {renounceRole} to track enumerable memberships */ function renounceRole(bytes32 role, address account) public virtual override { 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); } uint256[49] private __gap; } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/IERC1155Upgradeable.sol /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155Upgradeable is IERC165Upgradeable { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external; } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/extensions/IERC1155MetadataURIUpgradeable.sol /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/IERC1155ReceiverUpgradeable.sol /** * @dev _Available since v3.1._ */ interface IERC1155ReceiverUpgradeable is IERC165Upgradeable { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns(bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns(bytes4); } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable { using AddressUpgradeable for address; // Mapping from token ID to account balances mapping (uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping (address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ function __ERC1155_init(string memory uri_) internal initializer { __Context_init_unchained(); __ERC165_init_unchained(); __ERC1155_init_unchained(uri_); } function __ERC1155_init_unchained(string memory uri_) internal initializer { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, IERC165Upgradeable) returns (bool) { return interfaceId == type(IERC1155Upgradeable).interfaceId || interfaceId == type(IERC1155MetadataURIUpgradeable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] memory accounts, uint256[] memory ids ) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(_msgSender() != operator, "ERC1155: setting approval status for self"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`. * * Emits a {TransferSingle} event. * * Requirements: * * - `account` cannot be the zero address. * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual { require(account != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][account] += amount; emit TransferSingle(operator, address(0), account, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `account` * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens of token type `id`. */ function _burn(address account, uint256 id, uint256 amount) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } emit TransferSingle(operator, account, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), ids, amounts, ""); for (uint i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } } emit TransferBatch(operator, account, address(0), ids, amounts); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { } function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) { if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } uint256[47] private __gap; } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/extensions/ERC1155BurnableUpgradeable.sol /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable { function __ERC1155Burnable_init() internal initializer { __Context_init_unchained(); __ERC165_init_unchained(); __ERC1155Burnable_init_unchained(); } function __ERC1155Burnable_init_unchained() internal initializer { } function burn(address account, uint256 id, uint256 value) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } uint256[50] private __gap; } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol /** * @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 PausableUpgradeable is Initializable, ContextUpgradeable { /** * @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. */ function __Pausable_init() internal initializer { __Context_init_unchained(); __Pausable_init_unchained(); } function __Pausable_init_unchained() internal initializer { _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()); } uint256[49] private __gap; } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/extensions/ERC1155PausableUpgradeable.sol /** * @dev ERC1155 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. * * _Available since v3.1._ */ abstract contract ERC1155PausableUpgradeable is Initializable, ERC1155Upgradeable, PausableUpgradeable { function __ERC1155Pausable_init() internal initializer { __Context_init_unchained(); __ERC165_init_unchained(); __Pausable_init_unchained(); __ERC1155Pausable_init_unchained(); } function __ERC1155Pausable_init_unchained() internal initializer { } /** * @dev See {ERC1155-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); require(!paused(), "ERC1155Pausable: token transfer while paused"); } uint256[50] private __gap; } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; } // File: .deps/github/OpenZeppelin/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/presets/ERC1155PresetMinterPauserUpgradeable.sol /** * @dev {ERC1155} token, including: * * - ability for holders to burn (destroy) their tokens * - a minter role that allows for token minting (creation) * - a pauser role that allows to stop all token transfers * * This contract uses {AccessControl} to lock permissioned functions using the * different roles - head to its documentation for details. * * The account that deploys the contract will be granted the minter and pauser * roles, as well as the default admin role, which will let it grant both minter * and pauser roles to other accounts. */ contract ERC1155PresetMinterPauserUpgradeable is Initializable, ContextUpgradeable, AccessControlEnumerableUpgradeable, ERC1155BurnableUpgradeable, ERC1155PausableUpgradeable, OwnableUpgradeable { function initialize(string memory uri) public virtual initializer { __ERC1155PresetMinterPauser_init(uri); } 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. */ function __ERC1155PresetMinterPauser_init(string memory uri) internal initializer { __Context_init_unchained(); __ERC165_init_unchained(); __AccessControl_init_unchained(); __AccessControlEnumerable_init_unchained(); __Ownable_init_unchained(); __ERC1155_init_unchained(uri); __ERC1155Burnable_init_unchained(); __Pausable_init_unchained(); __ERC1155Pausable_init_unchained(); __ERC1155PresetMinterPauser_init_unchained(uri); } function __ERC1155PresetMinterPauser_init_unchained(string memory /*uri*/) internal initializer { _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(MINTER_ROLE, _msgSender()); _setupRole(PAUSER_ROLE, _msgSender()); } /** * @dev Creates `amount` new tokens for `to`, of token type `id`. * * See {ERC1155-_mint}. * * Requirements: * * - the caller must have the `MINTER_ROLE`. */ function mint(address to, uint256 id, uint256 amount, bytes memory data) public virtual { require(hasRole(MINTER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have minter role to mint"); _mint(to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] variant of {mint}. */ function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public virtual { require(hasRole(MINTER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have minter role to mint"); _mintBatch(to, ids, amounts, data); } function setURI(string memory _newURI) public onlyOwner { _setURI(_newURI); } /** * @dev Pauses all token transfers. * * See {ERC1155Pausable} and {Pausable-_pause}. * * Requirements: * * - the caller must have the `PAUSER_ROLE`. */ function pause() public virtual { require(hasRole(PAUSER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have pauser role to pause"); _pause(); } /** * @dev Unpauses all token transfers. * * See {ERC1155Pausable} and {Pausable-_unpause}. * * Requirements: * * - the caller must have the `PAUSER_ROLE`. */ function unpause() public virtual { require(hasRole(PAUSER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have pauser role to unpause"); _unpause(); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(AccessControlEnumerableUpgradeable, ERC1155Upgradeable) returns (bool) { return super.supportsInterface(interfaceId); } function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override(ERC1155Upgradeable, ERC1155PausableUpgradeable) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } uint256[50] private __gap; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","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":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"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":"string","name":"uri","type":"string"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setURI","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506134e6806100206000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c80638456cb5911610104578063d5391393116100a2578063f242432a11610071578063f242432a146103c0578063f2fde38b146103d3578063f5298aca146103e6578063f62d1888146103f9576101d9565b8063d53913931461038a578063d547741f14610392578063e63ab1e9146103a5578063e985e9c5146103ad576101d9565b806391d14854116100de57806391d1485414610349578063a217fddf1461035c578063a22cb46514610364578063ca15c87314610377576101d9565b80638456cb59146103195780638da5cb5b146103215780639010d07c14610336576101d9565b80632f2ff15d1161017c5780635c975abb1161014b5780635c975abb146102e35780636b20c454146102eb578063715018a6146102fe578063731133e914610306576101d9565b80632f2ff15d1461029557806336568abe146102a85780633f4ba83a146102bb5780634e1273f4146102c3576101d9565b80630e89341c116101b85780630e89341c1461023c5780631f7fdffa1461025c578063248a9ca31461026f5780632eb2c2d614610282576101d9565b8062fdd58e146101de57806301ffc9a71461020757806302fe530514610227575b600080fd5b6101f16101ec366004612721565b61040c565b6040516101fe9190612b61565b60405180910390f35b61021a6102153660046128f3565b610468565b6040516101fe9190612b56565b61023a61023536600461292b565b61047b565b005b61024f61024a366004612898565b6104c6565b6040516101fe9190612b6a565b61023a61026a366004612652565b61055a565b6101f161027d366004612898565b6105b4565b61023a6102903660046124d8565b6105c9565b61023a6102a33660046128b0565b610627565b61023a6102b63660046128b0565b61064e565b61023a610670565b6102d66102d13660046127cf565b6106c2565b6040516101fe9190612b15565b61021a6107e2565b61023a6102f93660046125e1565b6107ed565b61023a610842565b61023a61031436600461277c565b6108cd565b61023a610921565b610329610971565b6040516101fe9190612a60565b6103296103443660046128d2565b610981565b61021a6103573660046128b0565b6109a0565b6101f16109cb565b61023a6103723660046126e7565b6109d0565b6101f1610385366004612898565b610a9e565b6101f1610ab5565b61023a6103a03660046128b0565b610ad9565b6101f1610ae3565b61021a6103bb3660046124a6565b610b07565b61023a6103ce36600461257e565b610b35565b61023a6103e136600461248c565b610b8c565b61023a6103f436600461274a565b610c4f565b61023a61040736600461292b565b610ca4565b60006001600160a01b03831661043d5760405162461bcd60e51b815260040161043490612c8e565b60405180910390fd5b50600081815260c9602090815260408083206001600160a01b03861684529091529020545b92915050565b600061047382610d23565b90505b919050565b610483610d63565b6001600160a01b0316610494610971565b6001600160a01b0316146104ba5760405162461bcd60e51b815260040161043490613018565b6104c381610d67565b50565b606060cb80546104d590613342565b80601f016020809104026020016040519081016040528092919081815260200182805461050190613342565b801561054e5780601f106105235761010080835404028352916020019161054e565b820191906000526020600020905b81548152906001019060200180831161053157829003601f168201915b50505050509050919050565b6105867f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610357610d63565b6105a25760405162461bcd60e51b815260040161043490612f71565b6105ae84848484610d7a565b50505050565b60009081526065602052604090206001015490565b6105d1610d63565b6001600160a01b0316856001600160a01b031614806105f757506105f7856103bb610d63565b6106135760405162461bcd60e51b815260040161043490612e74565b6106208585858585610efc565b5050505050565b61063182826110d0565b600082815260976020526040902061064990826110f4565b505050565b6106588282611109565b6000828152609760205260409020610649908261114b565b61069c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610357610d63565b6106b85760405162461bcd60e51b81526004016104349061304d565b6106c0611160565b565b606081518351146106e55760405162461bcd60e51b815260040161043490613150565b6000835167ffffffffffffffff81111561070f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610738578160200160208202803683370190505b50905060005b84518110156107da5761079f85828151811061076a57634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061079257634e487b7160e01b600052603260045260246000fd5b602002602001015161040c565b8282815181106107bf57634e487b7160e01b600052603260045260246000fd5b60209081029190910101526107d3816133aa565b905061073e565b509392505050565b61012d5460ff165b90565b6107f5610d63565b6001600160a01b0316836001600160a01b0316148061081b575061081b836103bb610d63565b6108375760405162461bcd60e51b815260040161043490612daf565b6106498383836111cf565b61084a610d63565b6001600160a01b031661085b610971565b6001600160a01b0316146108815760405162461bcd60e51b815260040161043490613018565b610191546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a361019180546001600160a01b0319169055565b6108f97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610357610d63565b6109155760405162461bcd60e51b815260040161043490612f71565b6105ae84848484611383565b61094d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610357610d63565b6109695760405162461bcd60e51b8152600401610434906130aa565b6106c0611474565b610191546001600160a01b031690565b600082815260976020526040812061099990836114d0565b9392505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081565b816001600160a01b03166109e2610d63565b6001600160a01b03161415610a095760405162461bcd60e51b815260040161043490613107565b8060ca6000610a16610d63565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610a5a610d63565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610a929190612b56565b60405180910390a35050565b6000818152609760205260408120610473906114dc565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61065882826114e7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6001600160a01b03918216600090815260ca6020908152604080832093909416825291909152205460ff1690565b610b3d610d63565b6001600160a01b0316856001600160a01b03161480610b635750610b63856103bb610d63565b610b7f5760405162461bcd60e51b815260040161043490612daf565b6106208585858585611506565b610b94610d63565b6001600160a01b0316610ba5610971565b6001600160a01b031614610bcb5760405162461bcd60e51b815260040161043490613018565b6001600160a01b038116610bf15760405162461bcd60e51b815260040161043490612cd9565b610191546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a361019180546001600160a01b0319166001600160a01b0392909216919091179055565b610c57610d63565b6001600160a01b0316836001600160a01b03161480610c7d5750610c7d836103bb610d63565b610c995760405162461bcd60e51b815260040161043490612daf565b61064983838361163e565b600054610100900460ff1680610cbd575060005460ff16155b610cd95760405162461bcd60e51b815260040161043490612ed1565b600054610100900460ff16158015610d04576000805460ff1961ff0019909116610100171660011790555b610d0d82611751565b8015610d1f576000805461ff00191690555b5050565b60006001600160e01b03198216636cdb3d1360e11b1480610d5457506001600160e01b031982166303a24d0760e21b145b80610473575061047382611803565b3390565b8051610d1f9060cb9060208401906122ed565b6001600160a01b038416610da05760405162461bcd60e51b8152600401610434906131e1565b8151835114610dc15760405162461bcd60e51b815260040161043490613199565b6000610dcb610d63565b9050610ddc81600087878787611828565b60005b8451811015610e9457838181518110610e0857634e487b7160e01b600052603260045260246000fd5b602002602001015160c96000878481518110610e3457634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610e7c91906132b1565b90915550819050610e8c816133aa565b915050610ddf565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610ee5929190612b28565b60405180910390a461062081600087878787611836565b8151835114610f1d5760405162461bcd60e51b815260040161043490613199565b6001600160a01b038416610f435760405162461bcd60e51b815260040161043490612e2f565b6000610f4d610d63565b9050610f5d818787878787611828565b60005b8451811015611062576000858281518110610f8b57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000858381518110610fb757634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815260c9835260408082206001600160a01b038e1683529093529190912054909150818110156110085760405162461bcd60e51b815260040161043490612fce565b600083815260c9602090815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906110479084906132b1565b925050819055505050508061105b906133aa565b9050610f60565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110b2929190612b28565b60405180910390a46110c8818787878787611836565b505050505050565b6110d9826105b4565b6110ea816110e5610d63565b61195b565b61064983836119bf565b6000610999836001600160a01b038416611a46565b611111610d63565b6001600160a01b0316816001600160a01b0316146111415760405162461bcd60e51b815260040161043490613222565b610d1f8282611a90565b6000610999836001600160a01b038416611b15565b6111686107e2565b6111845760405162461bcd60e51b815260040161043490612c57565b61012d805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6111b8610d63565b6040516111c59190612a60565b60405180910390a1565b6001600160a01b0383166111f55760405162461bcd60e51b815260040161043490612f2e565b80518251146112165760405162461bcd60e51b815260040161043490613199565b6000611220610d63565b905061124081856000868660405180602001604052806000815250611828565b60005b835181101561132457600084828151811061126e57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600084838151811061129a57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815260c9835260408082206001600160a01b038c1683529093529190912054909150818110156112eb5760405162461bcd60e51b815260040161043490612d1f565b600092835260c9602090815260408085206001600160a01b038b168652909152909220910390558061131c816133aa565b915050611243565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611375929190612b28565b60405180910390a450505050565b6001600160a01b0384166113a95760405162461bcd60e51b8152600401610434906131e1565b60006113b3610d63565b90506113d4816000876113c588611c32565b6113ce88611c32565b87611828565b600084815260c9602090815260408083206001600160a01b0389168452909152812080548592906114069084906132b1565b92505081905550846001600160a01b031660006001600160a01b0316826001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161145d92919061327f565b60405180910390a461062081600087878787611c8b565b61147c6107e2565b156114995760405162461bcd60e51b815260040161043490612df8565b61012d805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111b8610d63565b60006109998383611d5c565b600061047382611d94565b6114f0826105b4565b6114fc816110e5610d63565b6106498383611a90565b6001600160a01b03841661152c5760405162461bcd60e51b815260040161043490612e2f565b6000611536610d63565b90506115478187876113c588611c32565b600084815260c9602090815260408083206001600160a01b038a1684529091529020548381101561158a5760405162461bcd60e51b815260040161043490612fce565b600085815260c9602090815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906115c99084906132b1565b92505081905550856001600160a01b0316876001600160a01b0316836001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161161f92919061327f565b60405180910390a4611635828888888888611c8b565b50505050505050565b6001600160a01b0383166116645760405162461bcd60e51b815260040161043490612f2e565b600061166e610d63565b905061169e8185600061168087611c32565b61168987611c32565b60405180602001604052806000815250611828565b600083815260c9602090815260408083206001600160a01b0388168452909152902054828110156116e15760405162461bcd60e51b815260040161043490612d1f565b600084815260c9602090815260408083206001600160a01b03808a16808652919093528184208786039055905190918516907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6290611742908990899061327f565b60405180910390a45050505050565b600054610100900460ff168061176a575060005460ff16155b6117865760405162461bcd60e51b815260040161043490612ed1565b600054610100900460ff161580156117b1576000805460ff1961ff0019909116610100171660011790555b6117b9611d98565b6117c1611d98565b6117c9611d98565b6117d1611d98565b6117d9611e0c565b6117e282611ed9565b6117ea611d98565b6117f2611f42565b6117fa611d98565b610d0d82611fc1565b60006001600160e01b03198216635a05180f60e01b148061047357506104738261208b565b6110c88686868686866120b0565b611848846001600160a01b03166120e3565b156110c85760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906118819089908990889088908890600401612a74565b602060405180830381600087803b15801561189b57600080fd5b505af19250505080156118cb575060408051601f3d908101601f191682019092526118c89181019061290f565b60015b61192b576118d76133f1565b806308c379a0141561191157506118ec613408565b806118f75750611913565b8060405162461bcd60e51b81526004016104349190612b6a565b505b60405162461bcd60e51b815260040161043490612b7d565b6001600160e01b0319811663bc197c8160e01b146116355760405162461bcd60e51b815260040161043490612c0f565b61196582826109a0565b610d1f5761197d816001600160a01b031660146120e9565b6119888360206120e9565b6040516020016119999291906129df565b60408051601f198184030181529082905262461bcd60e51b825261043491600401612b6a565b6119c982826109a0565b610d1f5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611a02610d63565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611a5283836122a8565b611a8857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610462565b506000610462565b611a9a82826109a0565b15610d1f5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19169055611ad1610d63565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60008181526001830160205260408120548015611c28576000611b396001836132e8565b8554909150600090611b4d906001906132e8565b9050818114611bce576000866000018281548110611b7b57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080876000018481548110611bac57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611bed57634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610462565b6000915050610462565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611c7a57634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b611c9d846001600160a01b03166120e3565b156110c85760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611cd69089908990889088908890600401612ad2565b602060405180830381600087803b158015611cf057600080fd5b505af1925050508015611d20575060408051601f3d908101601f19168201909252611d1d9181019061290f565b60015b611d2c576118d76133f1565b6001600160e01b0319811663f23a6e6160e01b146116355760405162461bcd60e51b815260040161043490612c0f565b6000826000018281548110611d8157634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b5490565b600054610100900460ff1680611db1575060005460ff16155b611dcd5760405162461bcd60e51b815260040161043490612ed1565b600054610100900460ff16158015611df8576000805460ff1961ff0019909116610100171660011790555b80156104c3576000805461ff001916905550565b600054610100900460ff1680611e25575060005460ff16155b611e415760405162461bcd60e51b815260040161043490612ed1565b600054610100900460ff16158015611e6c576000805460ff1961ff0019909116610100171660011790555b6000611e76610d63565b61019180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156104c3576000805461ff001916905550565b600054610100900460ff1680611ef2575060005460ff16155b611f0e5760405162461bcd60e51b815260040161043490612ed1565b600054610100900460ff16158015611f39576000805460ff1961ff0019909116610100171660011790555b610d0d82610d67565b600054610100900460ff1680611f5b575060005460ff16155b611f775760405162461bcd60e51b815260040161043490612ed1565b600054610100900460ff16158015611fa2576000805460ff1961ff0019909116610100171660011790555b61012d805460ff1916905580156104c3576000805461ff001916905550565b600054610100900460ff1680611fda575060005460ff16155b611ff65760405162461bcd60e51b815260040161043490612ed1565b600054610100900460ff16158015612021576000805460ff1961ff0019909116610100171660011790555b612033600061202e610d63565b6122c0565b61205f7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661202e610d63565b610d0d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61202e610d63565b60006001600160e01b03198216637965db0b60e01b14806104735750610473826122ca565b6120be8686868686866110c8565b6120c66107e2565b156110c85760405162461bcd60e51b815260040161043490612d63565b3b151590565b606060006120f88360026132c9565b6121039060026132b1565b67ffffffffffffffff81111561212957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612153576020820181803683370190505b509050600360fc1b8160008151811061217c57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106121b957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006121dd8460026132c9565b6121e89060016132b1565b90505b6001811115612289577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061223757634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061225b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936122828161332b565b90506121eb565b5083156109995760405162461bcd60e51b815260040161043490612bda565b60009081526001919091016020526040902054151590565b61063182826122e3565b6001600160e01b031981166301ffc9a760e01b14919050565b610d1f82826119bf565b8280546122f990613342565b90600052602060002090601f01602090048101928261231b5760008555612361565b82601f1061233457805160ff1916838001178555612361565b82800160010185558215612361579182015b82811115612361578251825591602001919060010190612346565b5061236d929150612371565b5090565b5b8082111561236d5760008155600101612372565b600067ffffffffffffffff8311156123a0576123a06133db565b6040516123b7601f8501601f19166020018261337d565b8091508381528484840111156123cc57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461047657600080fd5b600082601f83011261240b578081fd5b813560206124188261328d565b604051612425828261337d565b838152828101915085830183850287018401881015612442578586fd5b855b8581101561246057813584529284019290840190600101612444565b5090979650505050505050565b600082601f83011261247d578081fd5b61099983833560208501612386565b60006020828403121561249d578081fd5b610999826123e4565b600080604083850312156124b8578081fd5b6124c1836123e4565b91506124cf602084016123e4565b90509250929050565b600080600080600060a086880312156124ef578081fd5b6124f8866123e4565b9450612506602087016123e4565b9350604086013567ffffffffffffffff80821115612522578283fd5b61252e89838a016123fb565b94506060880135915080821115612543578283fd5b61254f89838a016123fb565b93506080880135915080821115612564578283fd5b506125718882890161246d565b9150509295509295909350565b600080600080600060a08688031215612595578081fd5b61259e866123e4565b94506125ac602087016123e4565b93506040860135925060608601359150608086013567ffffffffffffffff8111156125d5578182fd5b6125718882890161246d565b6000806000606084860312156125f5578283fd5b6125fe846123e4565b9250602084013567ffffffffffffffff8082111561261a578384fd5b612626878388016123fb565b9350604086013591508082111561263b578283fd5b50612648868287016123fb565b9150509250925092565b60008060008060808587031215612667578384fd5b612670856123e4565b9350602085013567ffffffffffffffff8082111561268c578485fd5b612698888389016123fb565b945060408701359150808211156126ad578384fd5b6126b9888389016123fb565b935060608701359150808211156126ce578283fd5b506126db8782880161246d565b91505092959194509250565b600080604083850312156126f9578081fd5b612702836123e4565b915060208301358015158114612716578182fd5b809150509250929050565b60008060408385031215612733578182fd5b61273c836123e4565b946020939093013593505050565b60008060006060848603121561275e578081fd5b612767846123e4565b95602085013595506040909401359392505050565b60008060008060808587031215612791578182fd5b61279a856123e4565b93506020850135925060408501359150606085013567ffffffffffffffff8111156127c3578182fd5b6126db8782880161246d565b600080604083850312156127e1578182fd5b823567ffffffffffffffff808211156127f8578384fd5b818501915085601f83011261280b578384fd5b813560206128188261328d565b604051612825828261337d565b8381528281019150858301838502870184018b1015612842578889fd5b8896505b8487101561286b57612857816123e4565b835260019690960195918301918301612846565b5096505086013592505080821115612881578283fd5b5061288e858286016123fb565b9150509250929050565b6000602082840312156128a9578081fd5b5035919050565b600080604083850312156128c2578182fd5b823591506124cf602084016123e4565b600080604083850312156128e4578182fd5b50508035926020909101359150565b600060208284031215612904578081fd5b81356109998161349a565b600060208284031215612920578081fd5b81516109998161349a565b60006020828403121561293c578081fd5b813567ffffffffffffffff811115612952578182fd5b8201601f81018413612962578182fd5b61297184823560208401612386565b949350505050565b6000815180845260208085019450808401835b838110156129a85781518752958201959082019060010161298c565b509495945050505050565b600081518084526129cb8160208601602086016132ff565b601f01601f19169290920160200192915050565b60007f416363657373436f6e74726f6c3a206163636f756e742000000000000000000082528351612a178160178501602088016132ff565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612a548160288401602088016132ff565b01602801949350505050565b6001600160a01b0391909116815260200190565b60006001600160a01b03808816835280871660208401525060a06040830152612aa060a0830186612979565b8281036060840152612ab28186612979565b90508281036080840152612ac681856129b3565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152612b0a60a08301846129b3565b979650505050505050565b6000602082526109996020830184612979565b600060408252612b3b6040830185612979565b8281036020840152612b4d8185612979565b95945050505050565b901515815260200190565b90815260200190565b60006020825261099960208301846129b3565b60208082526034908201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560408201527f526563656976657220696d706c656d656e746572000000000000000000000000606082015260800190565b6020808252818101527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604082015260600190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526014908201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604082015260600190565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6020808252602c908201527f455243313135355061757361626c653a20746f6b656e207472616e736665722060408201526b1dda1a5b19481c185d5cd95960a21b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526010908201527f5061757361626c653a2070617573656400000000000000000000000000000000604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526032908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060408201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201527f647920696e697469616c697a6564000000000000000000000000000000000000606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526038908201527f455243313135355072657365744d696e7465725061757365723a206d7573742060408201527f68617665206d696e74657220726f6c6520746f206d696e740000000000000000606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603b908201527f455243313135355072657365744d696e7465725061757365723a206d7573742060408201527f686176652070617573657220726f6c6520746f20756e70617573650000000000606082015260800190565b60208082526039908201527f455243313135355072657365744d696e7465725061757365723a206d7573742060408201527f686176652070617573657220726f6c6520746f20706175736500000000000000606082015260800190565b60208082526029908201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604082015268103337b91039b2b63360b91b606082015260800190565b60208082526029908201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201527f20726f6c657320666f722073656c660000000000000000000000000000000000606082015260800190565b918252602082015260400190565b600067ffffffffffffffff8211156132a7576132a76133db565b5060209081020190565b600082198211156132c4576132c46133c5565b500190565b60008160001904831182151516156132e3576132e36133c5565b500290565b6000828210156132fa576132fa6133c5565b500390565b60005b8381101561331a578181015183820152602001613302565b838111156105ae5750506000910152565b60008161333a5761333a6133c5565b506000190190565b60028104600182168061335657607f821691505b6020821081141561337757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff811182821017156133a3576133a36133db565b6040525050565b60006000198214156133be576133be6133c5565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156107ea57600481823e5160e01c90565b600060443d1015613418576107ea565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561344a5750505050506107ea565b8285019150815181811115613464575050505050506107ea565b843d8701016020828501011115613480575050505050506107ea565b61348f6020828601018761337d565b509094505050505090565b6001600160e01b0319811681146104c357600080fdfea2646970667358221220bbf7c40e425024061e69c6c7fdb7c1d3efe8c6cb896a21fbe06638f57aa8c6f764736f6c63430008010033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101d95760003560e01c80638456cb5911610104578063d5391393116100a2578063f242432a11610071578063f242432a146103c0578063f2fde38b146103d3578063f5298aca146103e6578063f62d1888146103f9576101d9565b8063d53913931461038a578063d547741f14610392578063e63ab1e9146103a5578063e985e9c5146103ad576101d9565b806391d14854116100de57806391d1485414610349578063a217fddf1461035c578063a22cb46514610364578063ca15c87314610377576101d9565b80638456cb59146103195780638da5cb5b146103215780639010d07c14610336576101d9565b80632f2ff15d1161017c5780635c975abb1161014b5780635c975abb146102e35780636b20c454146102eb578063715018a6146102fe578063731133e914610306576101d9565b80632f2ff15d1461029557806336568abe146102a85780633f4ba83a146102bb5780634e1273f4146102c3576101d9565b80630e89341c116101b85780630e89341c1461023c5780631f7fdffa1461025c578063248a9ca31461026f5780632eb2c2d614610282576101d9565b8062fdd58e146101de57806301ffc9a71461020757806302fe530514610227575b600080fd5b6101f16101ec366004612721565b61040c565b6040516101fe9190612b61565b60405180910390f35b61021a6102153660046128f3565b610468565b6040516101fe9190612b56565b61023a61023536600461292b565b61047b565b005b61024f61024a366004612898565b6104c6565b6040516101fe9190612b6a565b61023a61026a366004612652565b61055a565b6101f161027d366004612898565b6105b4565b61023a6102903660046124d8565b6105c9565b61023a6102a33660046128b0565b610627565b61023a6102b63660046128b0565b61064e565b61023a610670565b6102d66102d13660046127cf565b6106c2565b6040516101fe9190612b15565b61021a6107e2565b61023a6102f93660046125e1565b6107ed565b61023a610842565b61023a61031436600461277c565b6108cd565b61023a610921565b610329610971565b6040516101fe9190612a60565b6103296103443660046128d2565b610981565b61021a6103573660046128b0565b6109a0565b6101f16109cb565b61023a6103723660046126e7565b6109d0565b6101f1610385366004612898565b610a9e565b6101f1610ab5565b61023a6103a03660046128b0565b610ad9565b6101f1610ae3565b61021a6103bb3660046124a6565b610b07565b61023a6103ce36600461257e565b610b35565b61023a6103e136600461248c565b610b8c565b61023a6103f436600461274a565b610c4f565b61023a61040736600461292b565b610ca4565b60006001600160a01b03831661043d5760405162461bcd60e51b815260040161043490612c8e565b60405180910390fd5b50600081815260c9602090815260408083206001600160a01b03861684529091529020545b92915050565b600061047382610d23565b90505b919050565b610483610d63565b6001600160a01b0316610494610971565b6001600160a01b0316146104ba5760405162461bcd60e51b815260040161043490613018565b6104c381610d67565b50565b606060cb80546104d590613342565b80601f016020809104026020016040519081016040528092919081815260200182805461050190613342565b801561054e5780601f106105235761010080835404028352916020019161054e565b820191906000526020600020905b81548152906001019060200180831161053157829003601f168201915b50505050509050919050565b6105867f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610357610d63565b6105a25760405162461bcd60e51b815260040161043490612f71565b6105ae84848484610d7a565b50505050565b60009081526065602052604090206001015490565b6105d1610d63565b6001600160a01b0316856001600160a01b031614806105f757506105f7856103bb610d63565b6106135760405162461bcd60e51b815260040161043490612e74565b6106208585858585610efc565b5050505050565b61063182826110d0565b600082815260976020526040902061064990826110f4565b505050565b6106588282611109565b6000828152609760205260409020610649908261114b565b61069c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610357610d63565b6106b85760405162461bcd60e51b81526004016104349061304d565b6106c0611160565b565b606081518351146106e55760405162461bcd60e51b815260040161043490613150565b6000835167ffffffffffffffff81111561070f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610738578160200160208202803683370190505b50905060005b84518110156107da5761079f85828151811061076a57634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061079257634e487b7160e01b600052603260045260246000fd5b602002602001015161040c565b8282815181106107bf57634e487b7160e01b600052603260045260246000fd5b60209081029190910101526107d3816133aa565b905061073e565b509392505050565b61012d5460ff165b90565b6107f5610d63565b6001600160a01b0316836001600160a01b0316148061081b575061081b836103bb610d63565b6108375760405162461bcd60e51b815260040161043490612daf565b6106498383836111cf565b61084a610d63565b6001600160a01b031661085b610971565b6001600160a01b0316146108815760405162461bcd60e51b815260040161043490613018565b610191546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a361019180546001600160a01b0319169055565b6108f97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610357610d63565b6109155760405162461bcd60e51b815260040161043490612f71565b6105ae84848484611383565b61094d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610357610d63565b6109695760405162461bcd60e51b8152600401610434906130aa565b6106c0611474565b610191546001600160a01b031690565b600082815260976020526040812061099990836114d0565b9392505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081565b816001600160a01b03166109e2610d63565b6001600160a01b03161415610a095760405162461bcd60e51b815260040161043490613107565b8060ca6000610a16610d63565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610a5a610d63565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610a929190612b56565b60405180910390a35050565b6000818152609760205260408120610473906114dc565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61065882826114e7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6001600160a01b03918216600090815260ca6020908152604080832093909416825291909152205460ff1690565b610b3d610d63565b6001600160a01b0316856001600160a01b03161480610b635750610b63856103bb610d63565b610b7f5760405162461bcd60e51b815260040161043490612daf565b6106208585858585611506565b610b94610d63565b6001600160a01b0316610ba5610971565b6001600160a01b031614610bcb5760405162461bcd60e51b815260040161043490613018565b6001600160a01b038116610bf15760405162461bcd60e51b815260040161043490612cd9565b610191546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a361019180546001600160a01b0319166001600160a01b0392909216919091179055565b610c57610d63565b6001600160a01b0316836001600160a01b03161480610c7d5750610c7d836103bb610d63565b610c995760405162461bcd60e51b815260040161043490612daf565b61064983838361163e565b600054610100900460ff1680610cbd575060005460ff16155b610cd95760405162461bcd60e51b815260040161043490612ed1565b600054610100900460ff16158015610d04576000805460ff1961ff0019909116610100171660011790555b610d0d82611751565b8015610d1f576000805461ff00191690555b5050565b60006001600160e01b03198216636cdb3d1360e11b1480610d5457506001600160e01b031982166303a24d0760e21b145b80610473575061047382611803565b3390565b8051610d1f9060cb9060208401906122ed565b6001600160a01b038416610da05760405162461bcd60e51b8152600401610434906131e1565b8151835114610dc15760405162461bcd60e51b815260040161043490613199565b6000610dcb610d63565b9050610ddc81600087878787611828565b60005b8451811015610e9457838181518110610e0857634e487b7160e01b600052603260045260246000fd5b602002602001015160c96000878481518110610e3457634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610e7c91906132b1565b90915550819050610e8c816133aa565b915050610ddf565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610ee5929190612b28565b60405180910390a461062081600087878787611836565b8151835114610f1d5760405162461bcd60e51b815260040161043490613199565b6001600160a01b038416610f435760405162461bcd60e51b815260040161043490612e2f565b6000610f4d610d63565b9050610f5d818787878787611828565b60005b8451811015611062576000858281518110610f8b57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000858381518110610fb757634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815260c9835260408082206001600160a01b038e1683529093529190912054909150818110156110085760405162461bcd60e51b815260040161043490612fce565b600083815260c9602090815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906110479084906132b1565b925050819055505050508061105b906133aa565b9050610f60565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110b2929190612b28565b60405180910390a46110c8818787878787611836565b505050505050565b6110d9826105b4565b6110ea816110e5610d63565b61195b565b61064983836119bf565b6000610999836001600160a01b038416611a46565b611111610d63565b6001600160a01b0316816001600160a01b0316146111415760405162461bcd60e51b815260040161043490613222565b610d1f8282611a90565b6000610999836001600160a01b038416611b15565b6111686107e2565b6111845760405162461bcd60e51b815260040161043490612c57565b61012d805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6111b8610d63565b6040516111c59190612a60565b60405180910390a1565b6001600160a01b0383166111f55760405162461bcd60e51b815260040161043490612f2e565b80518251146112165760405162461bcd60e51b815260040161043490613199565b6000611220610d63565b905061124081856000868660405180602001604052806000815250611828565b60005b835181101561132457600084828151811061126e57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600084838151811061129a57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815260c9835260408082206001600160a01b038c1683529093529190912054909150818110156112eb5760405162461bcd60e51b815260040161043490612d1f565b600092835260c9602090815260408085206001600160a01b038b168652909152909220910390558061131c816133aa565b915050611243565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611375929190612b28565b60405180910390a450505050565b6001600160a01b0384166113a95760405162461bcd60e51b8152600401610434906131e1565b60006113b3610d63565b90506113d4816000876113c588611c32565b6113ce88611c32565b87611828565b600084815260c9602090815260408083206001600160a01b0389168452909152812080548592906114069084906132b1565b92505081905550846001600160a01b031660006001600160a01b0316826001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161145d92919061327f565b60405180910390a461062081600087878787611c8b565b61147c6107e2565b156114995760405162461bcd60e51b815260040161043490612df8565b61012d805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111b8610d63565b60006109998383611d5c565b600061047382611d94565b6114f0826105b4565b6114fc816110e5610d63565b6106498383611a90565b6001600160a01b03841661152c5760405162461bcd60e51b815260040161043490612e2f565b6000611536610d63565b90506115478187876113c588611c32565b600084815260c9602090815260408083206001600160a01b038a1684529091529020548381101561158a5760405162461bcd60e51b815260040161043490612fce565b600085815260c9602090815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906115c99084906132b1565b92505081905550856001600160a01b0316876001600160a01b0316836001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161161f92919061327f565b60405180910390a4611635828888888888611c8b565b50505050505050565b6001600160a01b0383166116645760405162461bcd60e51b815260040161043490612f2e565b600061166e610d63565b905061169e8185600061168087611c32565b61168987611c32565b60405180602001604052806000815250611828565b600083815260c9602090815260408083206001600160a01b0388168452909152902054828110156116e15760405162461bcd60e51b815260040161043490612d1f565b600084815260c9602090815260408083206001600160a01b03808a16808652919093528184208786039055905190918516907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6290611742908990899061327f565b60405180910390a45050505050565b600054610100900460ff168061176a575060005460ff16155b6117865760405162461bcd60e51b815260040161043490612ed1565b600054610100900460ff161580156117b1576000805460ff1961ff0019909116610100171660011790555b6117b9611d98565b6117c1611d98565b6117c9611d98565b6117d1611d98565b6117d9611e0c565b6117e282611ed9565b6117ea611d98565b6117f2611f42565b6117fa611d98565b610d0d82611fc1565b60006001600160e01b03198216635a05180f60e01b148061047357506104738261208b565b6110c88686868686866120b0565b611848846001600160a01b03166120e3565b156110c85760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906118819089908990889088908890600401612a74565b602060405180830381600087803b15801561189b57600080fd5b505af19250505080156118cb575060408051601f3d908101601f191682019092526118c89181019061290f565b60015b61192b576118d76133f1565b806308c379a0141561191157506118ec613408565b806118f75750611913565b8060405162461bcd60e51b81526004016104349190612b6a565b505b60405162461bcd60e51b815260040161043490612b7d565b6001600160e01b0319811663bc197c8160e01b146116355760405162461bcd60e51b815260040161043490612c0f565b61196582826109a0565b610d1f5761197d816001600160a01b031660146120e9565b6119888360206120e9565b6040516020016119999291906129df565b60408051601f198184030181529082905262461bcd60e51b825261043491600401612b6a565b6119c982826109a0565b610d1f5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611a02610d63565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611a5283836122a8565b611a8857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610462565b506000610462565b611a9a82826109a0565b15610d1f5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19169055611ad1610d63565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60008181526001830160205260408120548015611c28576000611b396001836132e8565b8554909150600090611b4d906001906132e8565b9050818114611bce576000866000018281548110611b7b57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080876000018481548110611bac57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611bed57634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610462565b6000915050610462565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611c7a57634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b611c9d846001600160a01b03166120e3565b156110c85760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611cd69089908990889088908890600401612ad2565b602060405180830381600087803b158015611cf057600080fd5b505af1925050508015611d20575060408051601f3d908101601f19168201909252611d1d9181019061290f565b60015b611d2c576118d76133f1565b6001600160e01b0319811663f23a6e6160e01b146116355760405162461bcd60e51b815260040161043490612c0f565b6000826000018281548110611d8157634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b5490565b600054610100900460ff1680611db1575060005460ff16155b611dcd5760405162461bcd60e51b815260040161043490612ed1565b600054610100900460ff16158015611df8576000805460ff1961ff0019909116610100171660011790555b80156104c3576000805461ff001916905550565b600054610100900460ff1680611e25575060005460ff16155b611e415760405162461bcd60e51b815260040161043490612ed1565b600054610100900460ff16158015611e6c576000805460ff1961ff0019909116610100171660011790555b6000611e76610d63565b61019180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156104c3576000805461ff001916905550565b600054610100900460ff1680611ef2575060005460ff16155b611f0e5760405162461bcd60e51b815260040161043490612ed1565b600054610100900460ff16158015611f39576000805460ff1961ff0019909116610100171660011790555b610d0d82610d67565b600054610100900460ff1680611f5b575060005460ff16155b611f775760405162461bcd60e51b815260040161043490612ed1565b600054610100900460ff16158015611fa2576000805460ff1961ff0019909116610100171660011790555b61012d805460ff1916905580156104c3576000805461ff001916905550565b600054610100900460ff1680611fda575060005460ff16155b611ff65760405162461bcd60e51b815260040161043490612ed1565b600054610100900460ff16158015612021576000805460ff1961ff0019909116610100171660011790555b612033600061202e610d63565b6122c0565b61205f7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661202e610d63565b610d0d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61202e610d63565b60006001600160e01b03198216637965db0b60e01b14806104735750610473826122ca565b6120be8686868686866110c8565b6120c66107e2565b156110c85760405162461bcd60e51b815260040161043490612d63565b3b151590565b606060006120f88360026132c9565b6121039060026132b1565b67ffffffffffffffff81111561212957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612153576020820181803683370190505b509050600360fc1b8160008151811061217c57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106121b957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006121dd8460026132c9565b6121e89060016132b1565b90505b6001811115612289577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061223757634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061225b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936122828161332b565b90506121eb565b5083156109995760405162461bcd60e51b815260040161043490612bda565b60009081526001919091016020526040902054151590565b61063182826122e3565b6001600160e01b031981166301ffc9a760e01b14919050565b610d1f82826119bf565b8280546122f990613342565b90600052602060002090601f01602090048101928261231b5760008555612361565b82601f1061233457805160ff1916838001178555612361565b82800160010185558215612361579182015b82811115612361578251825591602001919060010190612346565b5061236d929150612371565b5090565b5b8082111561236d5760008155600101612372565b600067ffffffffffffffff8311156123a0576123a06133db565b6040516123b7601f8501601f19166020018261337d565b8091508381528484840111156123cc57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461047657600080fd5b600082601f83011261240b578081fd5b813560206124188261328d565b604051612425828261337d565b838152828101915085830183850287018401881015612442578586fd5b855b8581101561246057813584529284019290840190600101612444565b5090979650505050505050565b600082601f83011261247d578081fd5b61099983833560208501612386565b60006020828403121561249d578081fd5b610999826123e4565b600080604083850312156124b8578081fd5b6124c1836123e4565b91506124cf602084016123e4565b90509250929050565b600080600080600060a086880312156124ef578081fd5b6124f8866123e4565b9450612506602087016123e4565b9350604086013567ffffffffffffffff80821115612522578283fd5b61252e89838a016123fb565b94506060880135915080821115612543578283fd5b61254f89838a016123fb565b93506080880135915080821115612564578283fd5b506125718882890161246d565b9150509295509295909350565b600080600080600060a08688031215612595578081fd5b61259e866123e4565b94506125ac602087016123e4565b93506040860135925060608601359150608086013567ffffffffffffffff8111156125d5578182fd5b6125718882890161246d565b6000806000606084860312156125f5578283fd5b6125fe846123e4565b9250602084013567ffffffffffffffff8082111561261a578384fd5b612626878388016123fb565b9350604086013591508082111561263b578283fd5b50612648868287016123fb565b9150509250925092565b60008060008060808587031215612667578384fd5b612670856123e4565b9350602085013567ffffffffffffffff8082111561268c578485fd5b612698888389016123fb565b945060408701359150808211156126ad578384fd5b6126b9888389016123fb565b935060608701359150808211156126ce578283fd5b506126db8782880161246d565b91505092959194509250565b600080604083850312156126f9578081fd5b612702836123e4565b915060208301358015158114612716578182fd5b809150509250929050565b60008060408385031215612733578182fd5b61273c836123e4565b946020939093013593505050565b60008060006060848603121561275e578081fd5b612767846123e4565b95602085013595506040909401359392505050565b60008060008060808587031215612791578182fd5b61279a856123e4565b93506020850135925060408501359150606085013567ffffffffffffffff8111156127c3578182fd5b6126db8782880161246d565b600080604083850312156127e1578182fd5b823567ffffffffffffffff808211156127f8578384fd5b818501915085601f83011261280b578384fd5b813560206128188261328d565b604051612825828261337d565b8381528281019150858301838502870184018b1015612842578889fd5b8896505b8487101561286b57612857816123e4565b835260019690960195918301918301612846565b5096505086013592505080821115612881578283fd5b5061288e858286016123fb565b9150509250929050565b6000602082840312156128a9578081fd5b5035919050565b600080604083850312156128c2578182fd5b823591506124cf602084016123e4565b600080604083850312156128e4578182fd5b50508035926020909101359150565b600060208284031215612904578081fd5b81356109998161349a565b600060208284031215612920578081fd5b81516109998161349a565b60006020828403121561293c578081fd5b813567ffffffffffffffff811115612952578182fd5b8201601f81018413612962578182fd5b61297184823560208401612386565b949350505050565b6000815180845260208085019450808401835b838110156129a85781518752958201959082019060010161298c565b509495945050505050565b600081518084526129cb8160208601602086016132ff565b601f01601f19169290920160200192915050565b60007f416363657373436f6e74726f6c3a206163636f756e742000000000000000000082528351612a178160178501602088016132ff565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612a548160288401602088016132ff565b01602801949350505050565b6001600160a01b0391909116815260200190565b60006001600160a01b03808816835280871660208401525060a06040830152612aa060a0830186612979565b8281036060840152612ab28186612979565b90508281036080840152612ac681856129b3565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152612b0a60a08301846129b3565b979650505050505050565b6000602082526109996020830184612979565b600060408252612b3b6040830185612979565b8281036020840152612b4d8185612979565b95945050505050565b901515815260200190565b90815260200190565b60006020825261099960208301846129b3565b60208082526034908201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560408201527f526563656976657220696d706c656d656e746572000000000000000000000000606082015260800190565b6020808252818101527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604082015260600190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526014908201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604082015260600190565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6020808252602c908201527f455243313135355061757361626c653a20746f6b656e207472616e736665722060408201526b1dda1a5b19481c185d5cd95960a21b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526010908201527f5061757361626c653a2070617573656400000000000000000000000000000000604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526032908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060408201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201527f647920696e697469616c697a6564000000000000000000000000000000000000606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526038908201527f455243313135355072657365744d696e7465725061757365723a206d7573742060408201527f68617665206d696e74657220726f6c6520746f206d696e740000000000000000606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603b908201527f455243313135355072657365744d696e7465725061757365723a206d7573742060408201527f686176652070617573657220726f6c6520746f20756e70617573650000000000606082015260800190565b60208082526039908201527f455243313135355072657365744d696e7465725061757365723a206d7573742060408201527f686176652070617573657220726f6c6520746f20706175736500000000000000606082015260800190565b60208082526029908201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604082015268103337b91039b2b63360b91b606082015260800190565b60208082526029908201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201527f20726f6c657320666f722073656c660000000000000000000000000000000000606082015260800190565b918252602082015260400190565b600067ffffffffffffffff8211156132a7576132a76133db565b5060209081020190565b600082198211156132c4576132c46133c5565b500190565b60008160001904831182151516156132e3576132e36133c5565b500290565b6000828210156132fa576132fa6133c5565b500390565b60005b8381101561331a578181015183820152602001613302565b838111156105ae5750506000910152565b60008161333a5761333a6133c5565b506000190190565b60028104600182168061335657607f821691505b6020821081141561337757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff811182821017156133a3576133a36133db565b6040525050565b60006000198214156133be576133be6133c5565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156107ea57600481823e5160e01c90565b600060443d1015613418576107ea565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561344a5750505050506107ea565b8285019150815181811115613464575050505050506107ea565b843d8701016020828501011115613480575050505050506107ea565b61348f6020828601018761337d565b509094505050505090565b6001600160e01b0319811681146104c357600080fdfea2646970667358221220bbf7c40e425024061e69c6c7fdb7c1d3efe8c6cb896a21fbe06638f57aa8c6f764736f6c63430008010033
Deployed Bytecode Sourcemap
68262:3845:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46227:231;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;71480:209;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;70529:91::-;;;;;;:::i;:::-;;:::i;:::-;;45971:105;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;70241:282::-;;;;;;:::i;:::-;;:::i;13256:123::-;;;;;;:::i;:::-;;:::i;48379:474::-;;;;;;:::i;:::-;;:::i;28618:165::-;;;;;;:::i;:::-;;:::i;29141:174::-;;;;;;:::i;:::-;;:::i;71228:180::-;;;:::i;46624:549::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;62252:86::-;;;:::i;60577:319::-;;;;;;:::i;:::-;;:::i;66943:148::-;;;:::i;69884:250::-;;;;;;:::i;:::-;;:::i;70834:174::-;;;:::i;66292:87::-;;;:::i;:::-;;;;;;;:::i;28073:145::-;;;;;;:::i;:::-;;:::i;12232:139::-;;;;;;:::i;:::-;;:::i;10186:49::-;;;:::i;47246:311::-;;;;;;:::i;:::-;;:::i;28392:134::-;;;;;;:::i;:::-;;:::i;68592:62::-;;;:::i;28876:170::-;;;;;;:::i;:::-;;:::i;68661:62::-;;;:::i;47629:168::-;;;;;;:::i;:::-;;:::i;47869:433::-;;;;;;:::i;:::-;;:::i;67246:244::-;;;;;;:::i;:::-;;:::i;60282:287::-;;;;;;:::i;:::-;;:::i;68464:122::-;;;;;;:::i;:::-;;:::i;46227:231::-;46313:7;-1:-1:-1;;;;;46341:21:0;;46333:77;;;;-1:-1:-1;;;46333:77:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;46428:13:0;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;46428:22:0;;;;;;;;;;46227:231;;;;;:::o;71480:209::-;71621:4;71645:36;71669:11;71645:23;:36::i;:::-;71638:43;;71480:209;;;;:::o;70529:91::-;66523:12;:10;:12::i;:::-;-1:-1:-1;;;;;66512:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;66512:23:0;;66504:68;;;;-1:-1:-1;;;66504:68:0;;;;;;;:::i;:::-;70596:16:::1;70604:7;70596;:16::i;:::-;70529:91:::0;:::o;45971:105::-;46031:13;46064:4;46057:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45971:105;;;:::o;70241:282::-;70373:34;68630:24;70394:12;:10;:12::i;70373:34::-;70365:103;;;;-1:-1:-1;;;70365:103:0;;;;;;;:::i;:::-;70481:34;70492:2;70496:3;70501:7;70510:4;70481:10;:34::i;:::-;70241:282;;;;:::o;13256:123::-;13322:7;13349:12;;;:6;:12;;;;;:22;;;;13256:123::o;48379:474::-;48652:12;:10;:12::i;:::-;-1:-1:-1;;;;;48644:20:0;:4;-1:-1:-1;;;;;48644:20:0;;:60;;;;48668:36;48685:4;48691:12;:10;:12::i;48668:36::-;48622:160;;;;-1:-1:-1;;;48622:160:0;;;;;;;:::i;:::-;48793:52;48816:4;48822:2;48826:3;48831:7;48840:4;48793:22;:52::i;:::-;48379:474;;;;;:::o;28618:165::-;28703:30;28719:4;28725:7;28703:15;:30::i;:::-;28744:18;;;;:12;:18;;;;;:31;;28767:7;28744:22;:31::i;:::-;;28618:165;;:::o;29141:174::-;29229:33;29248:4;29254:7;29229:18;:33::i;:::-;29273:18;;;;:12;:18;;;;;:34;;29299:7;29273:25;:34::i;71228:180::-;71281:34;68699:24;71302:12;:10;:12::i;71281:34::-;71273:106;;;;-1:-1:-1;;;71273:106:0;;;;;;;:::i;:::-;71390:10;:8;:10::i;:::-;71228:180::o;46624:549::-;46805:16;46866:3;:10;46847:8;:15;:29;46839:83;;;;-1:-1:-1;;;46839:83:0;;;;;;;:::i;:::-;46935:30;46982:8;:15;46968:30;;;;;;-1:-1:-1;;;46968:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46968:30:0;;46935:63;;47016:9;47011:122;47035:8;:15;47031:1;:19;47011:122;;;47091:30;47101:8;47110:1;47101:11;;;;;;-1:-1:-1;;;47101:11:0;;;;;;;;;;;;;;;47114:3;47118:1;47114:6;;;;;;-1:-1:-1;;;47114:6:0;;;;;;;;;;;;;;;47091:9;:30::i;:::-;47072:13;47086:1;47072:16;;;;;;-1:-1:-1;;;47072:16:0;;;;;;;;;;;;;;;;;;:49;47052:3;;;:::i;:::-;;;47011:122;;;-1:-1:-1;47152:13:0;46624:549;-1:-1:-1;;;46624:549:0:o;62252:86::-;62323:7;;;;62252:86;;:::o;60577:319::-;60719:12;:10;:12::i;:::-;-1:-1:-1;;;;;60708:23:0;:7;-1:-1:-1;;;;;60708:23:0;;:66;;;;60735:39;60752:7;60761:12;:10;:12::i;60735:39::-;60686:157;;;;-1:-1:-1;;;60686:157:0;;;;;;;:::i;:::-;60856:32;60867:7;60876:3;60881:6;60856:10;:32::i;66943:148::-;66523:12;:10;:12::i;:::-;-1:-1:-1;;;;;66512:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;66512:23:0;;66504:68;;;;-1:-1:-1;;;66504:68:0;;;;;;;:::i;:::-;67034:6:::1;::::0;67013:40:::1;::::0;67050:1:::1;::::0;-1:-1:-1;;;;;67034:6:0::1;::::0;67013:40:::1;::::0;67050:1;;67013:40:::1;67064:6;:19:::0;;-1:-1:-1;;;;;;67064:19:0::1;::::0;;66943:148::o;69884:250::-;69991:34;68630:24;70012:12;:10;:12::i;69991:34::-;69983:103;;;;-1:-1:-1;;;69983:103:0;;;;;;;:::i;:::-;70099:27;70105:2;70109;70113:6;70121:4;70099:5;:27::i;70834:174::-;70885:34;68699:24;70906:12;:10;:12::i;70885:34::-;70877:104;;;;-1:-1:-1;;;70877:104:0;;;;;;;:::i;:::-;70992:8;:6;:8::i;66292:87::-;66365:6;;-1:-1:-1;;;;;66365:6:0;66292:87;:::o;28073:145::-;28155:7;28182:18;;;:12;:18;;;;;:28;;28204:5;28182:21;:28::i;:::-;28175:35;28073:145;-1:-1:-1;;;28073:145:0:o;12232:139::-;12310:4;12334:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;12334:29:0;;;;;;;;;;;;;;;12232:139::o;10186:49::-;10231:4;10186:49;:::o;47246:311::-;47365:8;-1:-1:-1;;;;;47349:24:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;47349:24:0;;;47341:78;;;;-1:-1:-1;;;47341:78:0;;;;;;;:::i;:::-;47477:8;47432:18;:32;47451:12;:10;:12::i;:::-;-1:-1:-1;;;;;47432:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;47432:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;47432:53:0;;;;;;;;;;;47516:12;:10;:12::i;:::-;-1:-1:-1;;;;;47501:48:0;;47540:8;47501:48;;;;;;:::i;:::-;;;;;;;;47246:311;;:::o;28392:134::-;28464:7;28491:18;;;:12;:18;;;;;:27;;:25;:27::i;68592:62::-;68630:24;68592:62;:::o;28876:170::-;28962:31;28979:4;28985:7;28962:16;:31::i;68661:62::-;68699:24;68661:62;:::o;47629:168::-;-1:-1:-1;;;;;47752:27:0;;;47728:4;47752:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;47629:168::o;47869:433::-;48117:12;:10;:12::i;:::-;-1:-1:-1;;;;;48109:20:0;:4;-1:-1:-1;;;;;48109:20:0;;:60;;;;48133:36;48150:4;48156:12;:10;:12::i;48133:36::-;48087:151;;;;-1:-1:-1;;;48087:151:0;;;;;;;:::i;:::-;48249:45;48267:4;48273:2;48277;48281:6;48289:4;48249:17;:45::i;67246:244::-;66523:12;:10;:12::i;:::-;-1:-1:-1;;;;;66512:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;66512:23:0;;66504:68;;;;-1:-1:-1;;;66504:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;67335:22:0;::::1;67327:73;;;;-1:-1:-1::0;;;67327:73:0::1;;;;;;;:::i;:::-;67437:6;::::0;67416:38:::1;::::0;-1:-1:-1;;;;;67416:38:0;;::::1;::::0;67437:6:::1;::::0;67416:38:::1;::::0;67437:6:::1;::::0;67416:38:::1;67465:6;:17:::0;;-1:-1:-1;;;;;;67465:17:0::1;-1:-1:-1::0;;;;;67465:17:0;;;::::1;::::0;;;::::1;::::0;;67246:244::o;60282:287::-;60399:12;:10;:12::i;:::-;-1:-1:-1;;;;;60388:23:0;:7;-1:-1:-1;;;;;60388:23:0;;:66;;;;60415:39;60432:7;60441:12;:10;:12::i;60415:39::-;60366:157;;;;-1:-1:-1;;;60366:157:0;;;;;;;:::i;:::-;60536:25;60542:7;60551:2;60555:5;60536;:25::i;68464:122::-;1627:13;;;;;;;;:30;;-1:-1:-1;1645:12:0;;;;1644:13;1627:30;1619:89;;;;-1:-1:-1;;;1619:89:0;;;;;;;:::i;:::-;1721:19;1744:13;;;;;;1743:14;1768:101;;;;1803:13;:20;;-1:-1:-1;;;;1803:20:0;;;;;1838:19;1819:4;1838:19;;;1768:101;68541:37:::1;68574:3;68541:32;:37::i;:::-;1899:14:::0;1895:68;;;1946:5;1930:21;;-1:-1:-1;;1930:21:0;;;1895:68;68464:122;;:::o;45219:341::-;45343:4;-1:-1:-1;;;;;;45367:52:0;;-1:-1:-1;;;45367:52:0;;:132;;-1:-1:-1;;;;;;;45436:63:0;;-1:-1:-1;;;45436:63:0;45367:132;:185;;;;45516:36;45540:11;45516:23;:36::i;2831:98::-;2911:10;2831:98;:::o;52459:88::-;52526:13;;;;:4;;:13;;;;;:::i;53860:689::-;-1:-1:-1;;;;;53995:16:0;;53987:62;;;;-1:-1:-1;;;53987:62:0;;;;;;;:::i;:::-;54082:7;:14;54068:3;:10;:28;54060:81;;;;-1:-1:-1;;;54060:81:0;;;;;;;:::i;:::-;54154:16;54173:12;:10;:12::i;:::-;54154:31;;54198:66;54219:8;54237:1;54241:2;54245:3;54250:7;54259:4;54198:20;:66::i;:::-;54282:6;54277:100;54298:3;:10;54294:1;:14;54277:100;;;54355:7;54363:1;54355:10;;;;;;-1:-1:-1;;;54355:10:0;;;;;;;;;;;;;;;54330:9;:17;54340:3;54344:1;54340:6;;;;;;-1:-1:-1;;;54340:6:0;;;;;;;;;;;;;;;54330:17;;;;;;;;;;;:21;54348:2;-1:-1:-1;;;;;54330:21:0;-1:-1:-1;;;;;54330:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;54310:3:0;;-1:-1:-1;54310:3:0;;;:::i;:::-;;;;54277:100;;;;54430:2;-1:-1:-1;;;;;54394:53:0;54426:1;-1:-1:-1;;;;;54394:53:0;54408:8;-1:-1:-1;;;;;54394:53:0;;54434:3;54439:7;54394:53;;;;;;;:::i;:::-;;;;;;;;54460:81;54496:8;54514:1;54518:2;54522:3;54527:7;54536:4;54460:35;:81::i;50518:1097::-;50768:7;:14;50754:3;:10;:28;50746:81;;;;-1:-1:-1;;;50746:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50846:16:0;;50838:66;;;;-1:-1:-1;;;50838:66:0;;;;;;;:::i;:::-;50917:16;50936:12;:10;:12::i;:::-;50917:31;;50961:60;50982:8;50992:4;50998:2;51002:3;51007:7;51016:4;50961:20;:60::i;:::-;51039:9;51034:421;51058:3;:10;51054:1;:14;51034:421;;;51090:10;51103:3;51107:1;51103:6;;;;;;-1:-1:-1;;;51103:6:0;;;;;;;;;;;;;;;51090:19;;51124:14;51141:7;51149:1;51141:10;;;;;;-1:-1:-1;;;51141:10:0;;;;;;;;;;;;;;;;;;;;51168:19;51190:13;;;:9;:13;;;;;;-1:-1:-1;;;;;51190:19:0;;;;;;;;;;;;51141:10;;-1:-1:-1;51232:21:0;;;;51224:76;;;;-1:-1:-1;;;51224:76:0;;;;;;;:::i;:::-;51344:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;51344:19:0;;;;;;;;;;51366:20;;;51344:42;;51416:17;;;;;;;:27;;51366:20;;51344:13;51416:27;;51366:20;;51416:27;:::i;:::-;;;;;;;;51034:421;;;51070:3;;;;:::i;:::-;;;51034:421;;;;51502:2;-1:-1:-1;;;;;51472:47:0;51496:4;-1:-1:-1;;;;;51472:47:0;51486:8;-1:-1:-1;;;;;51472:47:0;;51506:3;51511:7;51472:47;;;;;;;:::i;:::-;;;;;;;;51532:75;51568:8;51578:4;51584:2;51588:3;51593:7;51602:4;51532:35;:75::i;:::-;50518:1097;;;;;;:::o;13641:147::-;13724:18;13737:4;13724:12;:18::i;:::-;11790:30;11801:4;11807:12;:10;:12::i;:::-;11790:10;:30::i;:::-;13755:25:::1;13766:4;13772:7;13755:10;:25::i;22918:152::-:0;22988:4;23012:50;23017:3;-1:-1:-1;;;;;23037:23:0;;23012:4;:50::i;14689:218::-;14796:12;:10;:12::i;:::-;-1:-1:-1;;;;;14785:23:0;:7;-1:-1:-1;;;;;14785:23:0;;14777:83;;;;-1:-1:-1;;;14777:83:0;;;;;;;:::i;:::-;14873:26;14885:4;14891:7;14873:11;:26::i;23246:158::-;23319:4;23343:53;23351:3;-1:-1:-1;;;;;23371:23:0;;23343:7;:53::i;63311:120::-;62855:8;:6;:8::i;:::-;62847:41;;;;-1:-1:-1;;;62847:41:0;;;;;;;:::i;:::-;63370:7:::1;:15:::0;;-1:-1:-1;;63370:15:0::1;::::0;;63401:22:::1;63410:12;:10;:12::i;:::-;63401:22;;;;;;:::i;:::-;;;;;;;;63311:120::o:0;55652:881::-;-1:-1:-1;;;;;55773:21:0;;55765:69;;;;-1:-1:-1;;;55765:69:0;;;;;;;:::i;:::-;55867:7;:14;55853:3;:10;:28;55845:81;;;;-1:-1:-1;;;55845:81:0;;;;;;;:::i;:::-;55939:16;55958:12;:10;:12::i;:::-;55939:31;;55983:69;56004:8;56014:7;56031:1;56035:3;56040:7;55983:69;;;;;;;;;;;;:20;:69::i;:::-;56070:6;56065:385;56086:3;:10;56082:1;:14;56065:385;;;56118:10;56131:3;56135:1;56131:6;;;;;;-1:-1:-1;;;56131:6:0;;;;;;;;;;;;;;;56118:19;;56152:14;56169:7;56177:1;56169:10;;;;;;-1:-1:-1;;;56169:10:0;;;;;;;;;;;;;;;;;;;;56196:22;56221:13;;;:9;:13;;;;;;-1:-1:-1;;;;;56221:22:0;;;;;;;;;;;;56169:10;;-1:-1:-1;56266:24:0;;;;56258:73;;;;-1:-1:-1;;;56258:73:0;;;;;;;:::i;:::-;56375:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;56375:22:0;;;;;;;;;;56400:23;;56375:48;;56098:3;;;;:::i;:::-;;;;56065:385;;;;56508:1;-1:-1:-1;;;;;56467:58:0;56491:7;-1:-1:-1;;;;;56467:58:0;56481:8;-1:-1:-1;;;;;56467:58:0;;56512:3;56517:7;56467:58;;;;;;;:::i;:::-;;;;;;;;55652:881;;;;:::o;52948:556::-;-1:-1:-1;;;;;53063:21:0;;53055:67;;;;-1:-1:-1;;;53055:67:0;;;;;;;:::i;:::-;53135:16;53154:12;:10;:12::i;:::-;53135:31;;53179:107;53200:8;53218:1;53222:7;53231:21;53249:2;53231:17;:21::i;:::-;53254:25;53272:6;53254:17;:25::i;:::-;53281:4;53179:20;:107::i;:::-;53299:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;53299:22:0;;;;;;;;;:32;;53325:6;;53299:13;:32;;53325:6;;53299:32;:::i;:::-;;;;;;;;53384:7;-1:-1:-1;;;;;53347:57:0;53380:1;-1:-1:-1;;;;;53347:57:0;53362:8;-1:-1:-1;;;;;53347:57:0;;53393:2;53397:6;53347:57;;;;;;;:::i;:::-;;;;;;;;53417:79;53448:8;53466:1;53470:7;53479:2;53483:6;53491:4;53417:30;:79::i;63052:118::-;62578:8;:6;:8::i;:::-;62577:9;62569:38;;;;-1:-1:-1;;;62569:38:0;;;;;;;:::i;:::-;63112:7:::1;:14:::0;;-1:-1:-1;;63112:14:0::1;63122:4;63112:14;::::0;;63142:20:::1;63149:12;:10;:12::i;24204:158::-:0;24278:7;24329:22;24333:3;24345:5;24329:3;:22::i;23743:117::-;23806:7;23833:19;23841:3;23833:7;:19::i;14033:149::-;14117:18;14130:4;14117:12;:18::i;:::-;11790:30;11801:4;11807:12;:10;:12::i;11790:30::-;14148:26:::1;14160:4;14166:7;14148:11;:26::i;49317:843::-:0;-1:-1:-1;;;;;49528:16:0;;49520:66;;;;-1:-1:-1;;;49520:66:0;;;;;;;:::i;:::-;49599:16;49618:12;:10;:12::i;:::-;49599:31;;49643:96;49664:8;49674:4;49680:2;49684:21;49702:2;49684:17;:21::i;49643:96::-;49752:19;49774:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;49774:19:0;;;;;;;;;;49812:21;;;;49804:76;;;;-1:-1:-1;;;49804:76:0;;;;;;;:::i;:::-;49916:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;49916:19:0;;;;;;;;;;49938:20;;;49916:42;;49980:17;;;;;;;:27;;49938:20;;49916:13;49980:27;;49938:20;;49980:27;:::i;:::-;;;;;;;;50056:2;-1:-1:-1;;;;;50025:46:0;50050:4;-1:-1:-1;;;;;50025:46:0;50040:8;-1:-1:-1;;;;;50025:46:0;;50060:2;50064:6;50025:46;;;;;;;:::i;:::-;;;;;;;;50084:68;50115:8;50125:4;50131:2;50135;50139:6;50147:4;50084:30;:68::i;:::-;49317:843;;;;;;;:::o;54808:641::-;-1:-1:-1;;;;;54904:21:0;;54896:69;;;;-1:-1:-1;;;54896:69:0;;;;;;;:::i;:::-;54978:16;54997:12;:10;:12::i;:::-;54978:31;;55022:105;55043:8;55053:7;55070:1;55074:21;55092:2;55074:17;:21::i;:::-;55097:25;55115:6;55097:17;:25::i;:::-;55022:105;;;;;;;;;;;;:20;:105::i;:::-;55140:22;55165:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;55165:22:0;;;;;;;;;;55206:24;;;;55198:73;;;;-1:-1:-1;;;55198:73:0;;;;;;;:::i;:::-;55307:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;55307:22:0;;;;;;;;;;;;;55332:23;;;55307:48;;55384:57;;55307:22;;55384:57;;;;;;;55317:2;;55349:6;;55384:57;:::i;:::-;;;;;;;;54808:641;;;;;:::o;68875:522::-;1627:13;;;;;;;;:30;;-1:-1:-1;1645:12:0;;;;1644:13;1627:30;1619:89;;;;-1:-1:-1;;;1619:89:0;;;;;;;:::i;:::-;1721:19;1744:13;;;;;;1743:14;1768:101;;;;1803:13;:20;;-1:-1:-1;;;;1803:20:0;;;;;1838:19;1819:4;1838:19;;;1768:101;68968:26:::1;:24;:26::i;:::-;69005:25;:23;:25::i;:::-;69041:32;:30;:32::i;:::-;69084:42;:40;:42::i;:::-;69137:26;:24;:26::i;:::-;69174:29;69199:3;69174:24;:29::i;:::-;69214:34;:32;:34::i;:::-;69259:27;:25;:27::i;:::-;69297:34;:32;:34::i;:::-;69342:47;69385:3;69342:42;:47::i;27236:238::-:0;27321:4;-1:-1:-1;;;;;;27345:68:0;;-1:-1:-1;;;27345:68:0;;:121;;;27430:36;27454:11;27430:23;:36::i;71697:375::-;71998:66;72025:8;72035:4;72041:2;72045:3;72050:7;72059:4;71998:26;:66::i;58534:821::-;58788:15;:2;-1:-1:-1;;;;;58788:13:0;;:15::i;:::-;58784:564;;;58824:90;;-1:-1:-1;;;58824:90:0;;-1:-1:-1;;;;;58824:54:0;;;;;:90;;58879:8;;58889:4;;58895:3;;58900:7;;58909:4;;58824:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58824:90:0;;;;;;;;-1:-1:-1;;58824:90:0;;;;;;;;;;;;:::i;:::-;;;58820:517;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;59210:6;59203:14;;-1:-1:-1;;;59203:14:0;;;;;;;;:::i;58820:517::-;;;59259:62;;-1:-1:-1;;;59259:62:0;;;;;;;:::i;58820:517::-;-1:-1:-1;;;;;;58964:75:0;;-1:-1:-1;;;58964:75:0;58960:174;;59064:50;;-1:-1:-1;;;59064:50:0;;;;;;;:::i;12661:406::-;12741:22;12749:4;12755:7;12741;:22::i;:::-;12737:323;;12873:52;12912:7;-1:-1:-1;;;;;12873:52:0;12922:2;12873:30;:52::i;:::-;12982:49;13021:4;13028:2;12982:30;:49::i;:::-;12794:252;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;12794:252:0;;;;;;;;;;-1:-1:-1;;;12780:268:0;;;;;;;:::i;15937:229::-;16012:22;16020:4;16026:7;16012;:22::i;:::-;16007:152;;16051:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;16051:29:0;;;;;;;;;:36;;-1:-1:-1;;16051:36:0;16083:4;16051:36;;;16134:12;:10;:12::i;:::-;-1:-1:-1;;;;;16107:40:0;16125:7;-1:-1:-1;;;;;16107:40:0;16119:4;16107:40;;;;;;;;;;15937:229;;:::o;18203:414::-;18266:4;18288:21;18298:3;18303:5;18288:9;:21::i;:::-;18283:327;;-1:-1:-1;18326:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;18509:18;;18487:19;;;:12;;;:19;;;;;;:40;;;;18542:11;;18283:327;-1:-1:-1;18593:5:0;18586:12;;16174:230;16249:22;16257:4;16263:7;16249;:22::i;:::-;16245:152;;;16320:5;16288:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;16288:29:0;;;;;;;;;:37;;-1:-1:-1;;16288:37:0;;;16372:12;:10;:12::i;:::-;-1:-1:-1;;;;;16345:40:0;16363:7;-1:-1:-1;;;;;16345:40:0;16357:4;16345:40;;;;;;;;;;16174:230;;:::o;18793:1407::-;18859:4;18998:19;;;:12;;;:19;;;;;;19034:15;;19030:1163;;19396:21;19420:14;19433:1;19420:10;:14;:::i;:::-;19469:18;;19396:38;;-1:-1:-1;19449:17:0;;19469:22;;19490:1;;19469:22;:::i;:::-;19449:42;;19525:13;19512:9;:26;19508:405;;19559:17;19579:3;:11;;19591:9;19579:22;;;;;;-1:-1:-1;;;19579:22:0;;;;;;;;;;;;;;;;;19559:42;;19733:9;19704:3;:11;;19716:13;19704:26;;;;;;-1:-1:-1;;;19704:26:0;;;;;;;;;;;;;;;;;;;;:38;;;;19818:23;;;:12;;;:23;;;;;:36;;;19508:405;19994:17;;:3;;:17;;;-1:-1:-1;;;19994:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;20089:3;:12;;:19;20102:5;20089:19;;;;;;;;;;;20082:26;;;20132:4;20125:11;;;;;;;19030:1163;20176:5;20169:12;;;;;59363:198;59483:16;;;59497:1;59483:16;;;;;;;;;59429;;59458:22;;59483:16;;;;;;;;;;;;-1:-1:-1;59483:16:0;59458:41;;59521:7;59510:5;59516:1;59510:8;;;;;;-1:-1:-1;;;59510:8:0;;;;;;;;;;;;;;;;;;:18;59548:5;59363:198;-1:-1:-1;;59363:198:0:o;57742:784::-;57971:15;:2;-1:-1:-1;;;;;57971:13:0;;:15::i;:::-;57967:552;;;58007:83;;-1:-1:-1;;;58007:83:0;;-1:-1:-1;;;;;58007:49:0;;;;;:83;;58057:8;;58067:4;;58073:2;;58077:6;;58085:4;;58007:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58007:83:0;;;;;;;;-1:-1:-1;;58007:83:0;;;;;;;;;;;;:::i;:::-;;;58003:505;;;;:::i;:::-;-1:-1:-1;;;;;;58140:70:0;;-1:-1:-1;;;58140:70:0;58136:169;;58235:50;;-1:-1:-1;;;58235:50:0;;;;;;;:::i;20954:120::-;21021:7;21048:3;:11;;21060:5;21048:18;;;;;;-1:-1:-1;;;21048:18:0;;;;;;;;;;;;;;;;;21041:25;;20954:120;;;;:::o;20501:109::-;20584:18;;20501:109::o;2760:65::-;1627:13;;;;;;;;:30;;-1:-1:-1;1645:12:0;;;;1644:13;1627:30;1619:89;;;;-1:-1:-1;;;1619:89:0;;;;;;;:::i;:::-;1721:19;1744:13;;;;;;1743:14;1768:101;;;;1803:13;:20;;-1:-1:-1;;;;1803:20:0;;;;;1838:19;1819:4;1838:19;;;1768:101;1899:14;1895:68;;;1946:5;1930:21;;-1:-1:-1;;1930:21:0;;;2760:65;:::o;66015:196::-;1627:13;;;;;;;;:30;;-1:-1:-1;1645:12:0;;;;1644:13;1627:30;1619:89;;;;-1:-1:-1;;;1619:89:0;;;;;;;:::i;:::-;1721:19;1744:13;;;;;;1743:14;1768:101;;;;1803:13;:20;;-1:-1:-1;;;;1803:20:0;;;;;1838:19;1819:4;1838:19;;;1768:101;66083:17:::1;66103:12;:10;:12::i;:::-;66126:6;:18:::0;;-1:-1:-1;;;;;;66126:18:0::1;-1:-1:-1::0;;;;;66126:18:0;::::1;::::0;;::::1;::::0;;;66160:43:::1;::::0;66126:18;;-1:-1:-1;66126:18:0;-1:-1:-1;;66160:43:0::1;::::0;-1:-1:-1;;66160:43:0::1;1881:1;1899:14:::0;1895:68;;;1946:5;1930:21;;-1:-1:-1;;1930:21:0;;;66015:196;:::o;45040:107::-;1627:13;;;;;;;;:30;;-1:-1:-1;1645:12:0;;;;1644:13;1627:30;1619:89;;;;-1:-1:-1;;;1619:89:0;;;;;;;:::i;:::-;1721:19;1744:13;;;;;;1743:14;1768:101;;;;1803:13;:20;;-1:-1:-1;;;;1803:20:0;;;;;1838:19;1819:4;1838:19;;;1768:101;45126:13:::1;45134:4;45126:7;:13::i;62060:92::-:0;1627:13;;;;;;;;:30;;-1:-1:-1;1645:12:0;;;;1644:13;1627:30;1619:89;;;;-1:-1:-1;;;1619:89:0;;;;;;;:::i;:::-;1721:19;1744:13;;;;;;1743:14;1768:101;;;;1803:13;:20;;-1:-1:-1;;;;1803:20:0;;;;;1838:19;1819:4;1838:19;;;1768:101;62129:7:::1;:15:::0;;-1:-1:-1;;62129:15:0::1;::::0;;1895:68;;;;1946:5;1930:21;;-1:-1:-1;;1930:21:0;;;62060:92;:::o;69405:255::-;1627:13;;;;;;;;:30;;-1:-1:-1;1645:12:0;;;;1644:13;1627:30;1619:89;;;;-1:-1:-1;;;1619:89:0;;;;;;;:::i;:::-;1721:19;1744:13;;;;;;1743:14;1768:101;;;;1803:13;:20;;-1:-1:-1;;;;1803:20:0;;;;;1838:19;1819:4;1838:19;;;1768:101;69512:44:::1;10231:4;69543:12;:10;:12::i;:::-;69512:10;:44::i;:::-;69567:37;68630:24;69591:12;:10;:12::i;69567:37::-;69615;68699:24;69639:12;:10;:12::i;11912:228::-:0;11997:4;-1:-1:-1;;;;;;12021:58:0;;-1:-1:-1;;;12021:58:0;;:111;;;12096:36;12120:11;12096:23;:36::i;64488:424::-;64759:66;64786:8;64796:4;64802:2;64806:3;64811:7;64820:4;64759:26;:66::i;:::-;64847:8;:6;:8::i;:::-;64846:9;64838:66;;;;-1:-1:-1;;;64838:66:0;;;;;;;:::i;37607:422::-;37974:20;38013:8;;;37607:422::o;6987:447::-;7062:13;7088:19;7120:10;7124:6;7120:1;:10;:::i;:::-;:14;;7133:1;7120:14;:::i;:::-;7110:25;;;;;;-1:-1:-1;;;7110:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7110:25:0;;7088:47;;-1:-1:-1;;;7146:6:0;7153:1;7146:9;;;;;;-1:-1:-1;;;7146:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;7146:15:0;;;;;;;;;-1:-1:-1;;;7172:6:0;7179:1;7172:9;;;;;;-1:-1:-1;;;7172:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;7172:15:0;;;;;;;;-1:-1:-1;7203:9:0;7215:10;7219:6;7215:1;:10;:::i;:::-;:14;;7228:1;7215:14;:::i;:::-;7203:26;;7198:131;7235:1;7231;:5;7198:131;;;7270:8;7279:5;7287:3;7279:11;7270:21;;;;;-1:-1:-1;;;7270:21:0;;;;;;;;;;;;7258:6;7265:1;7258:9;;;;;;-1:-1:-1;;;7258:9:0;;;;;;;;;;;;:33;-1:-1:-1;;;;;7258:33:0;;;;;;;;-1:-1:-1;7316:1:0;7306:11;;;;;7238:3;;;:::i;:::-;;;7198:131;;;-1:-1:-1;7347:10:0;;7339:55;;;;-1:-1:-1;;;7339:55:0;;;;;;;:::i;20286:129::-;20359:4;20383:19;;;:12;;;;;:19;;;;;;:24;;;20286:129::o;29408:169::-;29496:31;29513:4;29519:7;29496:16;:31::i;5134:168::-;-1:-1:-1;;;;;;5243:51:0;;-1:-1:-1;;;5243:51:0;5134:168;;;:::o;15490:112::-;15569:25;15580:4;15586:7;15569:10;:25::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:470:1;;114:18;106:6;103:30;100:2;;;136:18;;:::i;:::-;185:2;179:9;197:69;254:2;233:15;;-1:-1:-1;;229:29:1;260:4;225:40;179:9;197:69;:::i;:::-;284:6;275:15;;314:6;306;299:22;354:3;345:6;340:3;336:16;333:25;330:2;;;371:1;368;361:12;330:2;421:6;416:3;409:4;401:6;397:17;384:44;476:1;469:4;460:6;452;448:19;444:30;437:41;;90:394;;;;;:::o;489:198::-;559:20;;-1:-1:-1;;;;;608:54:1;;598:65;;588:2;;677:1;674;667:12;692:768;;805:3;798:4;790:6;786:17;782:27;772:2;;827:5;820;813:20;772:2;867:6;854:20;893:4;916:49;962:2;916:49;:::i;:::-;994:2;988:9;1006:31;1034:2;1026:6;1006:31;:::i;:::-;1072:18;;;1106:15;;;;-1:-1:-1;1141:15:1;;;1187:11;;;1175:24;;1171:33;;1168:42;-1:-1:-1;1165:2:1;;;1227:5;1220;1213:20;1165:2;1253:5;1267:163;1281:2;1278:1;1275:9;1267:163;;;1338:17;;1326:30;;1376:12;;;;1408;;;;1299:1;1292:9;1267:163;;;-1:-1:-1;1448:6:1;;762:698;-1:-1:-1;;;;;;;762:698:1:o;1465:232::-;;1562:3;1555:4;1547:6;1543:17;1539:27;1529:2;;1584:5;1577;1570:20;1529:2;1610:81;1687:3;1678:6;1665:20;1658:4;1650:6;1646:17;1610:81;:::i;1702:198::-;;1814:2;1802:9;1793:7;1789:23;1785:32;1782:2;;;1835:6;1827;1820:22;1782:2;1863:31;1884:9;1863:31;:::i;1905:274::-;;;2034:2;2022:9;2013:7;2009:23;2005:32;2002:2;;;2055:6;2047;2040:22;2002:2;2083:31;2104:9;2083:31;:::i;:::-;2073:41;;2133:40;2169:2;2158:9;2154:18;2133:40;:::i;:::-;2123:50;;1992:187;;;;;:::o;2184:1001::-;;;;;;2423:3;2411:9;2402:7;2398:23;2394:33;2391:2;;;2445:6;2437;2430:22;2391:2;2473:31;2494:9;2473:31;:::i;:::-;2463:41;;2523:40;2559:2;2548:9;2544:18;2523:40;:::i;:::-;2513:50;;2614:2;2603:9;2599:18;2586:32;2637:18;2678:2;2670:6;2667:14;2664:2;;;2699:6;2691;2684:22;2664:2;2727:67;2786:7;2777:6;2766:9;2762:22;2727:67;:::i;:::-;2717:77;;2847:2;2836:9;2832:18;2819:32;2803:48;;2876:2;2866:8;2863:16;2860:2;;;2897:6;2889;2882:22;2860:2;2925:69;2986:7;2975:8;2964:9;2960:24;2925:69;:::i;:::-;2915:79;;3047:3;3036:9;3032:19;3019:33;3003:49;;3077:2;3067:8;3064:16;3061:2;;;3098:6;3090;3083:22;3061:2;;3126:53;3171:7;3160:8;3149:9;3145:24;3126:53;:::i;:::-;3116:63;;;2381:804;;;;;;;;:::o;3190:632::-;;;;;;3379:3;3367:9;3358:7;3354:23;3350:33;3347:2;;;3401:6;3393;3386:22;3347:2;3429:31;3450:9;3429:31;:::i;:::-;3419:41;;3479:40;3515:2;3504:9;3500:18;3479:40;:::i;:::-;3469:50;;3566:2;3555:9;3551:18;3538:32;3528:42;;3617:2;3606:9;3602:18;3589:32;3579:42;;3672:3;3661:9;3657:19;3644:33;3700:18;3692:6;3689:30;3686:2;;;3737:6;3729;3722:22;3686:2;3765:51;3808:7;3799:6;3788:9;3784:22;3765:51;:::i;3827:713::-;;;;4023:2;4011:9;4002:7;3998:23;3994:32;3991:2;;;4044:6;4036;4029:22;3991:2;4072:31;4093:9;4072:31;:::i;:::-;4062:41;;4154:2;4143:9;4139:18;4126:32;4177:18;4218:2;4210:6;4207:14;4204:2;;;4239:6;4231;4224:22;4204:2;4267:67;4326:7;4317:6;4306:9;4302:22;4267:67;:::i;:::-;4257:77;;4387:2;4376:9;4372:18;4359:32;4343:48;;4416:2;4406:8;4403:16;4400:2;;;4437:6;4429;4422:22;4400:2;;4465:69;4526:7;4515:8;4504:9;4500:24;4465:69;:::i;:::-;4455:79;;;3981:559;;;;;:::o;4545:924::-;;;;;4767:3;4755:9;4746:7;4742:23;4738:33;4735:2;;;4789:6;4781;4774:22;4735:2;4817:31;4838:9;4817:31;:::i;:::-;4807:41;;4899:2;4888:9;4884:18;4871:32;4922:18;4963:2;4955:6;4952:14;4949:2;;;4984:6;4976;4969:22;4949:2;5012:67;5071:7;5062:6;5051:9;5047:22;5012:67;:::i;:::-;5002:77;;5132:2;5121:9;5117:18;5104:32;5088:48;;5161:2;5151:8;5148:16;5145:2;;;5182:6;5174;5167:22;5145:2;5210:69;5271:7;5260:8;5249:9;5245:24;5210:69;:::i;:::-;5200:79;;5332:2;5321:9;5317:18;5304:32;5288:48;;5361:2;5351:8;5348:16;5345:2;;;5382:6;5374;5367:22;5345:2;;5410:53;5455:7;5444:8;5433:9;5429:24;5410:53;:::i;:::-;5400:63;;;4725:744;;;;;;;:::o;5474:369::-;;;5600:2;5588:9;5579:7;5575:23;5571:32;5568:2;;;5621:6;5613;5606:22;5568:2;5649:31;5670:9;5649:31;:::i;:::-;5639:41;;5730:2;5719:9;5715:18;5702:32;5777:5;5770:13;5763:21;5756:5;5753:32;5743:2;;5804:6;5796;5789:22;5743:2;5832:5;5822:15;;;5558:285;;;;;:::o;5848:266::-;;;5977:2;5965:9;5956:7;5952:23;5948:32;5945:2;;;5998:6;5990;5983:22;5945:2;6026:31;6047:9;6026:31;:::i;:::-;6016:41;6104:2;6089:18;;;;6076:32;;-1:-1:-1;;;5935:179:1:o;6119:334::-;;;;6265:2;6253:9;6244:7;6240:23;6236:32;6233:2;;;6286:6;6278;6271:22;6233:2;6314:31;6335:9;6314:31;:::i;:::-;6304:41;6392:2;6377:18;;6364:32;;-1:-1:-1;6443:2:1;6428:18;;;6415:32;;6223:230;-1:-1:-1;;;6223:230:1:o;6458:555::-;;;;;6630:3;6618:9;6609:7;6605:23;6601:33;6598:2;;;6652:6;6644;6637:22;6598:2;6680:31;6701:9;6680:31;:::i;:::-;6670:41;;6758:2;6747:9;6743:18;6730:32;6720:42;;6809:2;6798:9;6794:18;6781:32;6771:42;;6864:2;6853:9;6849:18;6836:32;6891:18;6883:6;6880:30;6877:2;;;6928:6;6920;6913:22;6877:2;6956:51;6999:7;6990:6;6979:9;6975:22;6956:51;:::i;7018:1289::-;;;7197:2;7185:9;7176:7;7172:23;7168:32;7165:2;;;7218:6;7210;7203:22;7165:2;7263:9;7250:23;7292:18;7333:2;7325:6;7322:14;7319:2;;;7354:6;7346;7339:22;7319:2;7397:6;7386:9;7382:22;7372:32;;7442:7;7435:4;7431:2;7427:13;7423:27;7413:2;;7469:6;7461;7454:22;7413:2;7510;7497:16;7532:4;7555:49;7601:2;7555:49;:::i;:::-;7633:2;7627:9;7645:31;7673:2;7665:6;7645:31;:::i;:::-;7711:18;;;7745:15;;;;-1:-1:-1;7780:11:1;;;7818;;;7810:20;;7806:29;;7803:42;-1:-1:-1;7800:2:1;;;7863:6;7855;7848:22;7800:2;7890:6;7881:15;;7905:171;7919:2;7916:1;7913:9;7905:171;;;7976:25;7997:3;7976:25;:::i;:::-;7964:38;;7937:1;7930:9;;;;;8022:12;;;;8054;;7905:171;;;-1:-1:-1;8095:6:1;-1:-1:-1;;8139:18:1;;8126:32;;-1:-1:-1;;8170:16:1;;;8167:2;;;8204:6;8196;8189:22;8167:2;;8232:69;8293:7;8282:8;8271:9;8267:24;8232:69;:::i;:::-;8222:79;;;7155:1152;;;;;:::o;8312:190::-;;8424:2;8412:9;8403:7;8399:23;8395:32;8392:2;;;8445:6;8437;8430:22;8392:2;-1:-1:-1;8473:23:1;;8382:120;-1:-1:-1;8382:120:1:o;8507:266::-;;;8636:2;8624:9;8615:7;8611:23;8607:32;8604:2;;;8657:6;8649;8642:22;8604:2;8698:9;8685:23;8675:33;;8727:40;8763:2;8752:9;8748:18;8727:40;:::i;8778:258::-;;;8907:2;8895:9;8886:7;8882:23;8878:32;8875:2;;;8928:6;8920;8913:22;8875:2;-1:-1:-1;;8956:23:1;;;9026:2;9011:18;;;8998:32;;-1:-1:-1;8865:171:1:o;9041:257::-;;9152:2;9140:9;9131:7;9127:23;9123:32;9120:2;;;9173:6;9165;9158:22;9120:2;9217:9;9204:23;9236:32;9262:5;9236:32;:::i;9303:261::-;;9425:2;9413:9;9404:7;9400:23;9396:32;9393:2;;;9446:6;9438;9431:22;9393:2;9483:9;9477:16;9502:32;9528:5;9502:32;:::i;9569:482::-;;9691:2;9679:9;9670:7;9666:23;9662:32;9659:2;;;9712:6;9704;9697:22;9659:2;9757:9;9744:23;9790:18;9782:6;9779:30;9776:2;;;9827:6;9819;9812:22;9776:2;9855:22;;9908:4;9900:13;;9896:27;-1:-1:-1;9886:2:1;;9942:6;9934;9927:22;9886:2;9970:75;10037:7;10032:2;10019:16;10014:2;10010;10006:11;9970:75;:::i;:::-;9960:85;9649:402;-1:-1:-1;;;;9649:402:1:o;10251:443::-;;10348:5;10342:12;10375:6;10370:3;10363:19;10401:4;10430:2;10425:3;10421:12;10414:19;;10467:2;10460:5;10456:14;10488:3;10500:169;10514:6;10511:1;10508:13;10500:169;;;10575:13;;10563:26;;10609:12;;;;10644:15;;;;10536:1;10529:9;10500:169;;;-1:-1:-1;10685:3:1;;10318:376;-1:-1:-1;;;;;10318:376:1:o;10699:259::-;;10780:5;10774:12;10807:6;10802:3;10795:19;10823:63;10879:6;10872:4;10867:3;10863:14;10856:4;10849:5;10845:16;10823:63;:::i;:::-;10940:2;10919:15;-1:-1:-1;;10915:29:1;10906:39;;;;10947:4;10902:50;;10750:208;-1:-1:-1;;10750:208:1:o;10963:786::-;;11374:25;11369:3;11362:38;11429:6;11423:13;11445:62;11500:6;11495:2;11490:3;11486:12;11479:4;11471:6;11467:17;11445:62;:::i;:::-;11571:19;11566:2;11526:16;;;11558:11;;;11551:40;11616:13;;11638:63;11616:13;11687:2;11679:11;;11672:4;11660:17;;11638:63;:::i;:::-;11721:17;11740:2;11717:26;;11352:397;-1:-1:-1;;;;11352:397:1:o;11754:226::-;-1:-1:-1;;;;;11918:55:1;;;;11900:74;;11888:2;11873:18;;11855:125::o;11985:863::-;;-1:-1:-1;;;;;12417:2:1;12409:6;12405:15;12394:9;12387:34;12469:2;12461:6;12457:15;12452:2;12441:9;12437:18;12430:43;;12509:3;12504:2;12493:9;12489:18;12482:31;12536:63;12594:3;12583:9;12579:19;12571:6;12536:63;:::i;:::-;12647:9;12639:6;12635:22;12630:2;12619:9;12615:18;12608:50;12681;12724:6;12716;12681:50;:::i;:::-;12667:64;;12780:9;12772:6;12768:22;12762:3;12751:9;12747:19;12740:51;12808:34;12835:6;12827;12808:34;:::i;:::-;12800:42;12316:532;-1:-1:-1;;;;;;;;12316:532:1:o;12853:585::-;;-1:-1:-1;;;;;13185:2:1;13177:6;13173:15;13162:9;13155:34;13237:2;13229:6;13225:15;13220:2;13209:9;13205:18;13198:43;;13277:6;13272:2;13261:9;13257:18;13250:34;13320:6;13315:2;13304:9;13300:18;13293:34;13364:3;13358;13347:9;13343:19;13336:32;13385:47;13427:3;13416:9;13412:19;13404:6;13385:47;:::i;:::-;13377:55;13084:354;-1:-1:-1;;;;;;;13084:354:1:o;13443:267::-;;13622:2;13611:9;13604:21;13642:62;13700:2;13689:9;13685:18;13677:6;13642:62;:::i;13715:477::-;;13972:2;13961:9;13954:21;13998:62;14056:2;14045:9;14041:18;14033:6;13998:62;:::i;:::-;14108:9;14100:6;14096:22;14091:2;14080:9;14076:18;14069:50;14136;14179:6;14171;14136:50;:::i;:::-;14128:58;13944:248;-1:-1:-1;;;;;13944:248:1:o;14197:187::-;14362:14;;14355:22;14337:41;;14325:2;14310:18;;14292:92::o;14389:177::-;14535:25;;;14523:2;14508:18;;14490:76::o;14571:221::-;;14720:2;14709:9;14702:21;14740:46;14782:2;14771:9;14767:18;14759:6;14740:46;:::i;14797:416::-;14999:2;14981:21;;;15038:2;15018:18;;;15011:30;15077:34;15072:2;15057:18;;15050:62;15148:22;15143:2;15128:18;;15121:50;15203:3;15188:19;;14971:242::o;15218:356::-;15420:2;15402:21;;;15439:18;;;15432:30;15498:34;15493:2;15478:18;;15471:62;15565:2;15550:18;;15392:182::o;15579:404::-;15781:2;15763:21;;;15820:2;15800:18;;;15793:30;15859:34;15854:2;15839:18;;15832:62;-1:-1:-1;;;15925:2:1;15910:18;;15903:38;15973:3;15958:19;;15753:230::o;15988:344::-;16190:2;16172:21;;;16229:2;16209:18;;;16202:30;16268:22;16263:2;16248:18;;16241:50;16323:2;16308:18;;16162:170::o;16337:407::-;16539:2;16521:21;;;16578:2;16558:18;;;16551:30;16617:34;16612:2;16597:18;;16590:62;-1:-1:-1;;;16683:2:1;16668:18;;16661:41;16734:3;16719:19;;16511:233::o;16749:402::-;16951:2;16933:21;;;16990:2;16970:18;;;16963:30;17029:34;17024:2;17009:18;;17002:62;-1:-1:-1;;;17095:2:1;17080:18;;17073:36;17141:3;17126:19;;16923:228::o;17156:400::-;17358:2;17340:21;;;17397:2;17377:18;;;17370:30;17436:34;17431:2;17416:18;;17409:62;-1:-1:-1;;;17502:2:1;17487:18;;17480:34;17546:3;17531:19;;17330:226::o;17561:408::-;17763:2;17745:21;;;17802:2;17782:18;;;17775:30;17841:34;17836:2;17821:18;;17814:62;-1:-1:-1;;;17907:2:1;17892:18;;17885:42;17959:3;17944:19;;17735:234::o;17974:405::-;18176:2;18158:21;;;18215:2;18195:18;;;18188:30;18254:34;18249:2;18234:18;;18227:62;-1:-1:-1;;;18320:2:1;18305:18;;18298:39;18369:3;18354:19;;18148:231::o;18384:340::-;18586:2;18568:21;;;18625:2;18605:18;;;18598:30;18664:18;18659:2;18644:18;;18637:46;18715:2;18700:18;;18558:166::o;18729:401::-;18931:2;18913:21;;;18970:2;18950:18;;;18943:30;19009:34;19004:2;18989:18;;18982:62;-1:-1:-1;;;19075:2:1;19060:18;;19053:35;19120:3;19105:19;;18903:227::o;19135:414::-;19337:2;19319:21;;;19376:2;19356:18;;;19349:30;19415:34;19410:2;19395:18;;19388:62;19486:20;19481:2;19466:18;;19459:48;19539:3;19524:19;;19309:240::o;19554:410::-;19756:2;19738:21;;;19795:2;19775:18;;;19768:30;19834:34;19829:2;19814:18;;19807:62;19905:16;19900:2;19885:18;;19878:44;19954:3;19939:19;;19728:236::o;19969:399::-;20171:2;20153:21;;;20210:2;20190:18;;;20183:30;20249:34;20244:2;20229:18;;20222:62;-1:-1:-1;;;20315:2:1;20300:18;;20293:33;20358:3;20343:19;;20143:225::o;20373:420::-;20575:2;20557:21;;;20614:2;20594:18;;;20587:30;20653:34;20648:2;20633:18;;20626:62;20724:26;20719:2;20704:18;;20697:54;20783:3;20768:19;;20547:246::o;20798:406::-;21000:2;20982:21;;;21039:2;21019:18;;;21012:30;21078:34;21073:2;21058:18;;21051:62;-1:-1:-1;;;21144:2:1;21129:18;;21122:40;21194:3;21179:19;;20972:232::o;21209:356::-;21411:2;21393:21;;;21430:18;;;21423:30;21489:34;21484:2;21469:18;;21462:62;21556:2;21541:18;;21383:182::o;21570:423::-;21772:2;21754:21;;;21811:2;21791:18;;;21784:30;21850:34;21845:2;21830:18;;21823:62;21921:29;21916:2;21901:18;;21894:57;21983:3;21968:19;;21744:249::o;21998:421::-;22200:2;22182:21;;;22239:2;22219:18;;;22212:30;22278:34;22273:2;22258:18;;22251:62;22349:27;22344:2;22329:18;;22322:55;22409:3;22394:19;;22172:247::o;22424:405::-;22626:2;22608:21;;;22665:2;22645:18;;;22638:30;22704:34;22699:2;22684:18;;22677:62;-1:-1:-1;;;22770:2:1;22755:18;;22748:39;22819:3;22804:19;;22598:231::o;22834:405::-;23036:2;23018:21;;;23075:2;23055:18;;;23048:30;23114:34;23109:2;23094:18;;23087:62;-1:-1:-1;;;23180:2:1;23165:18;;23158:39;23229:3;23214:19;;23008:231::o;23244:404::-;23446:2;23428:21;;;23485:2;23465:18;;;23458:30;23524:34;23519:2;23504:18;;23497:62;-1:-1:-1;;;23590:2:1;23575:18;;23568:38;23638:3;23623:19;;23418:230::o;23653:397::-;23855:2;23837:21;;;23894:2;23874:18;;;23867:30;23933:34;23928:2;23913:18;;23906:62;-1:-1:-1;;;23999:2:1;23984:18;;23977:31;24040:3;24025:19;;23827:223::o;24055:411::-;24257:2;24239:21;;;24296:2;24276:18;;;24269:30;24335:34;24330:2;24315:18;;24308:62;24406:17;24401:2;24386:18;;24379:45;24456:3;24441:19;;24229:237::o;24653:248::-;24827:25;;;24883:2;24868:18;;24861:34;24815:2;24800:18;;24782:119::o;24906:192::-;;25005:18;24997:6;24994:30;24991:2;;;25027:18;;:::i;:::-;-1:-1:-1;25087:4:1;25068:17;;;25064:28;;24981:117::o;25103:128::-;;25174:1;25170:6;25167:1;25164:13;25161:2;;;25180:18;;:::i;:::-;-1:-1:-1;25216:9:1;;25151:80::o;25236:168::-;;25342:1;25338;25334:6;25330:14;25327:1;25324:21;25319:1;25312:9;25305:17;25301:45;25298:2;;;25349:18;;:::i;:::-;-1:-1:-1;25389:9:1;;25288:116::o;25409:125::-;;25477:1;25474;25471:8;25468:2;;;25482:18;;:::i;:::-;-1:-1:-1;25519:9:1;;25458:76::o;25539:258::-;25611:1;25621:113;25635:6;25632:1;25629:13;25621:113;;;25711:11;;;25705:18;25692:11;;;25685:39;25657:2;25650:10;25621:113;;;25752:6;25749:1;25746:13;25743:2;;;-1:-1:-1;;25787:1:1;25769:16;;25762:27;25592:205::o;25802:136::-;;25869:5;25859:2;;25878:18;;:::i;:::-;-1:-1:-1;;;25914:18:1;;25849:89::o;25943:380::-;26028:1;26018:12;;26075:1;26065:12;;;26086:2;;26140:4;26132:6;26128:17;26118:27;;26086:2;26193;26185:6;26182:14;26162:18;26159:38;26156:2;;;26239:10;26234:3;26230:20;26227:1;26220:31;26274:4;26271:1;26264:15;26302:4;26299:1;26292:15;26156:2;;25998:325;;;:::o;26328:249::-;26438:2;26419:13;;-1:-1:-1;;26415:27:1;26403:40;;26473:18;26458:34;;26494:22;;;26455:62;26452:2;;;26520:18;;:::i;:::-;26556:2;26549:22;-1:-1:-1;;26375:202:1:o;26582:135::-;;-1:-1:-1;;26642:17:1;;26639:2;;;26662:18;;:::i;:::-;-1:-1:-1;26709:1:1;26698:13;;26629:88::o;26722:127::-;26783:10;26778:3;26774:20;26771:1;26764:31;26814:4;26811:1;26804:15;26838:4;26835:1;26828:15;26854:127;26915:10;26910:3;26906:20;26903:1;26896:31;26946:4;26943:1;26936:15;26970:4;26967:1;26960:15;26986:185;;27063:1;27045:16;27042:23;27039:2;;;27113:1;27108:3;27103;27088:27;27144:10;27139:3;27135:20;27029:142;:::o;27176:671::-;;27257:4;27239:16;27236:26;27233:2;;;27265:5;;27233:2;27299;27293:9;-1:-1:-1;;27364:16:1;27360:25;;27357:1;27293:9;27336:50;27415:4;27409:11;27439:16;27474:18;27545:2;27538:4;27530:6;27526:17;27523:25;27518:2;27510:6;27507:14;27504:45;27501:2;;;27552:5;;;;;;;27501:2;27589:6;27583:4;27579:17;27568:28;;27625:3;27619:10;27652:2;27644:6;27641:14;27638:2;;;27658:5;;;;;;;;27638:2;27742;27723:16;27717:4;27713:27;27709:36;27702:4;27693:6;27688:3;27684:16;27680:27;27677:69;27674:2;;;27749:5;;;;;;;;27674:2;27765:57;27816:4;27807:6;27799;27795:19;27791:30;27785:4;27765:57;:::i;:::-;-1:-1:-1;27838:3:1;;-1:-1:-1;;;;;27223:624:1;:::o;27852:133::-;-1:-1:-1;;;;;;27928:32:1;;27918:43;;27908:2;;27975:1;27972;27965:12
Swarm Source
ipfs://bbf7c40e425024061e69c6c7fdb7c1d3efe8c6cb896a21fbe06638f57aa8c6f7
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.