Overview
BERA Balance
BERA Value
$0.00More Info
Private Name Tags
ContractCreator
Multichain Info
No addresses found
Latest 25 from a total of 840 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Addr | 2595077 | 4 hrs ago | IN | 0 BERA | 0.00000001 | ||||
Set Text | 2586988 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2586987 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2586985 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2586965 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2586962 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2586961 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2586894 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2586892 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2586891 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2586823 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2586822 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2586820 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2586759 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2586758 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2586756 | 8 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2559080 | 23 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2559078 | 23 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2559075 | 23 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2520423 | 44 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2520418 | 44 hrs ago | IN | 0 BERA | 0 | ||||
Set Addr | 2520412 | 44 hrs ago | IN | 0 BERA | 0 | ||||
Set Text | 2506336 | 2 days ago | IN | 0 BERA | 0 | ||||
Set Text | 2506334 | 2 days ago | IN | 0 BERA | 0 | ||||
Set Text | 2497418 | 2 days ago | IN | 0 BERA | 0 |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
BeraDefaultResolver
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.23; // Admin Controller import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; // Bera Name Service import {BNS} from "src/registry/interfaces/BNS.sol"; // Interfaces import {IExtendedResolver} from "src/resolver/interfaces/IExtendedResolver.sol"; import {IReverseRegistrar} from "src/registrar/interfaces/IReverseRegistrar.sol"; // Resolver Profiles import {ABIResolver} from "src/resolver/profiles/ABIResolver.sol"; import {AddrResolver} from "src/resolver/profiles/AddrResolver.sol"; import {ContentHashResolver} from "src/resolver/profiles/ContentHashResolver.sol"; // import {DNSResolver} from "src/resolver/profiles/DNSResolver.sol"; import {ExtendedResolver} from "src/resolver/profiles/ExtendedResolver.sol"; import {InterfaceResolver} from "src/resolver/profiles/InterfaceResolver.sol"; import {Multicallable} from "src/resolver/types/Multicallable.sol"; import {NameResolver} from "src/resolver/profiles/NameResolver.sol"; import {PubkeyResolver} from "src/resolver/profiles/PubkeyResolver.sol"; import {TextResolver} from "src/resolver/profiles/TextResolver.sol"; /// @title BeraResolver contract BeraDefaultResolver is // Accessability Controller Multicallable, // Resolvers ABIResolver, AddrResolver, ContentHashResolver, // DNSResolver, InterfaceResolver, NameResolver, PubkeyResolver, TextResolver, ExtendedResolver, // Admin Controller Ownable { /// Errors ----------------------------------------------------------- /// @notice Thown when msg.sender tries to set itself as an operator/delegate. error CantSetSelf(); /// @notice Thown when the registrar controller is not set. error InvalidRegistrarController(); /// @notice Thown when the reverse registrar is not set. error InvalidReverseRegistrar(); /// @notice Thown when the caller is not the owner of the node. error NotOwner(); /// Storage ---------------------------------------------------------- /// @notice The BNS registry. BNS public immutable bns; /// @notice The trusted registrar controller contract. address public registrarController; /// @notice The reverse registrar contract. address public reverseRegistrar; /// @notice A mapping of account operators: can control owner's nodes. mapping(address owner => mapping(address operator => bool isApproved)) private _operatorApprovals; /// @notice A mapping node operators: can control a specific node. mapping(address owner => mapping(bytes32 node => mapping(address delegate => bool isApproved))) private _tokenApprovals; /// Events ----------------------------------------------------------- /// @notice Emitted when an operator is added or removed. /// /// @param owner The address of the owner of names. /// @param operator The address of the approved operator for the `owner`. /// @param approved Whether the `operator` is approved or not. event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /// @notice Emitted when a delegate is approved or an approval is revoked. /// /// @param owner The address of the owner of the name. /// @param node The namehash of the name. /// @param delegate The address of the operator for the specified `node`. /// @param approved Whether the `delegate` is approved for the specified `node`. event Approved(address owner, bytes32 indexed node, address indexed delegate, bool indexed approved); /// @notice Emitted when the owner of this contract updates the Registrar Controller addrress. /// /// @param newRegistrarController The address of the new RegistrarController contract. event RegistrarControllerUpdated(address indexed newRegistrarController); /// @notice Emitted when the owner of this contract updates the Reverse Registrar address. /// /// @param newReverseRegistrar The address of the new ReverseRegistrar contract. event ReverseRegistrarUpdated(address indexed newReverseRegistrar); /// Constructor ------------------------------------------------------ /// @notice L2 Resolver constructor used to establish the necessary contract configuration. /// /// @param bns_ The Registry contract. /// @param registrarController_ The address of the RegistrarController contract. /// @param reverseRegistrar_ The address of the ReverseRegistrar contract. /// @param owner_ The permissioned address initialized as the `owner` in the `Ownable` context. constructor(BNS bns_, address registrarController_, address reverseRegistrar_, address owner_) Ownable(owner_) { // Set state bns = bns_; if (registrarController_ == address(0)) revert InvalidRegistrarController(); if (reverseRegistrar_ == address(0)) revert InvalidReverseRegistrar(); registrarController = registrarController_; reverseRegistrar = reverseRegistrar_; // Initialize reverse registrar IReverseRegistrar(reverseRegistrar_).claim(owner_); } /// Authorisation Functions ----------------------------------------- /// @dev See {IERC1155-setApprovalForAll}. function setApprovalForAll(address operator, bool approved) external { if (msg.sender == operator) revert CantSetSelf(); _operatorApprovals[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /// @dev See {IERC1155-isApprovedForAll}. function isApprovedForAll(address account, address operator) public view returns (bool) { return _operatorApprovals[account][operator]; } /// @notice Modify the permissions for a specified `delegate` for the specified `node`. /// /// @dev This method only sets the approval status for msg.sender's nodes. /// /// @param node The namehash `node` whose permissions are being updated. /// @param delegate The address of the `delegate` /// @param approved Whether the `delegate` has approval to modify records for `msg.sender`'s `node`. function approve(bytes32 node, address delegate, bool approved) external { if (msg.sender == delegate) revert CantSetSelf(); if (msg.sender != bns.owner(node)) revert NotOwner(); _tokenApprovals[msg.sender][node][delegate] = approved; emit Approved(msg.sender, node, delegate, approved); } /// @notice Check to see if the `delegate` has been approved by the `owner` for the `node`. /// /// @param owner The address of the name owner. /// @param node The namehash `node` whose permissions are being checked. /// @param delegate The address of the `delegate` whose permissions are being checked. /// /// @return `true` if `delegate` is approved to modify `msg.sender`'s `node`, else `false`. function isApprovedFor(address owner, bytes32 node, address delegate) public view returns (bool) { return _tokenApprovals[owner][node][delegate]; } /// @notice Check to see whether `msg.sender` is authorized to modify records for the specified `node`. /// /// @dev Override for `ResolverBase:isAuthorised()`. Used in the context of each inherited resolver "profile". /// Validates that `msg.sender` is one of: /// 1. The stored registrarController (for setting records upon registration) /// 2 The stored reverseRegistrar (for setting reverse records) /// 3. The owner of the node in the Registry /// 4. An approved operator for owner /// 5. An approved delegate for owner of the specified `node` /// /// @param node The namehashed `node` being authorized. /// /// @return `true` if `msg.sender` is authorized to modify records for the specified `node`, else `false`. function isAuthorised(bytes32 node) internal view override returns (bool) { if (msg.sender == registrarController || msg.sender == reverseRegistrar) { return true; } address owner = bns.owner(node); return owner == msg.sender || isApprovedForAll(owner, msg.sender) || isApprovedFor(owner, node, msg.sender); } /// ERC165 Interface Support ----------------------------------------- /// @notice ERC165 compliant signal for interface support. /// @param interfaceID the ERC165 iface id being checked for compliance /// @return bool Whether this contract supports the provided interfaceID function supportsInterface(bytes4 interfaceID) public view override( Multicallable, ABIResolver, AddrResolver, ContentHashResolver, // DNSResolver, InterfaceResolver, NameResolver, PubkeyResolver, TextResolver ) returns (bool) { return (interfaceID == type(IExtendedResolver).interfaceId || super.supportsInterface(interfaceID)); } /// Admin Functions -------------------------------------------------- /// @notice Allows the `owner` to set the registrar controller contract address. /// /// @dev Emits `RegistrarControllerUpdated` after setting the `registrarController` address. /// /// @param registrarController_ The address of the new RegistrarController contract. function setRegistrarController(address registrarController_) external onlyOwner { if (registrarController_ == address(0)) revert InvalidRegistrarController(); registrarController = registrarController_; emit RegistrarControllerUpdated(registrarController_); } /// @notice Allows the `owner` to set the reverse registrar contract address. /// /// @dev Emits `ReverseRegistrarUpdated` after setting the `reverseRegistrar` address. /// /// @param reverseRegistrar_ The address of the new ReverseRegistrar contract. function setReverseRegistrar(address reverseRegistrar_) external onlyOwner { if (reverseRegistrar_ == address(0)) revert InvalidReverseRegistrar(); reverseRegistrar = reverseRegistrar_; emit ReverseRegistrarUpdated(reverseRegistrar_); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.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. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface BNS { // Logged when the owner of a node assigns a new owner to a subnode. event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner); // Logged when the owner of a node transfers ownership to a new account. event Transfer(bytes32 indexed node, address owner); // Logged when the resolver for a node changes. event NewResolver(bytes32 indexed node, address resolver); // Logged when the TTL of a node changes event NewTTL(bytes32 indexed node, uint64 ttl); // Logged when an operator is added or removed. event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function setRecord(bytes32 node, address owner, address resolver, uint64 ttl) external; function setSubnodeRecord(bytes32 node, bytes32 label, address owner, address resolver, uint64 ttl) external; function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external returns (bytes32); function setResolver(bytes32 node, address resolver) external; function setOwner(bytes32 node, address owner) external; function setTTL(bytes32 node, uint64 ttl) external; function setApprovalForAll(address operator, bool approved) external; function owner(bytes32 node) external view returns (address); function resolver(bytes32 node) external view returns (address); function ttl(bytes32 node) external view returns (uint64); function recordExists(bytes32 node) external view returns (bool); function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; interface IExtendedResolver { function resolve(bytes memory name, bytes memory data) external view returns (bytes memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.23; interface IReverseRegistrar { /// @notice Thrown when the registry is invalid. error InvalidRegistry(); function claim(address claimant) external returns (bytes32); function setNameForAddr(address addr, address owner, address resolver, string memory name) external returns (bytes32); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; import {ResolverBase} from "src/resolver/types/ResolverBase.sol"; import {IABIResolver} from "src/resolver/interfaces/IABIResolver.sol"; abstract contract ABIResolver is IABIResolver, ResolverBase { mapping(uint64 => mapping(bytes32 => mapping(uint256 => bytes))) versionable_abis; /** * Sets the ABI associated with an BNS node. * Nodes may have one ABI of each content type. To remove an ABI, set it to * the empty string. * @param node The node to update. * @param contentType The content type of the ABI * @param data The ABI data. */ function setABI(bytes32 node, uint256 contentType, bytes calldata data) external virtual authorised(node) { // Content types must be powers of 2 require(((contentType - 1) & contentType) == 0); versionable_abis[recordVersions[node]][node][contentType] = data; emit ABIChanged(node, contentType); } /** * Returns the ABI associated with an BNS node. * Defined in EIP205. * @param node The BNS node to query * @param contentTypes A bitwise OR of the ABI formats accepted by the caller. * @return contentType The content type of the return value * @return data The ABI data */ function ABI(bytes32 node, uint256 contentTypes) external view virtual override returns (uint256, bytes memory) { mapping(uint256 => bytes) storage abiset = versionable_abis[recordVersions[node]][node]; for (uint256 contentType = 1; contentType <= contentTypes; contentType <<= 1) { if ((contentType & contentTypes) != 0 && abiset[contentType].length > 0) { return (contentType, abiset[contentType]); } } return (0, bytes("")); } function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { return interfaceID == type(IABIResolver).interfaceId || super.supportsInterface(interfaceID); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; import {ResolverBase} from "src/resolver/types/ResolverBase.sol"; import "src/resolver/interfaces/IAddrResolver.sol"; import "src/resolver/interfaces/IAddressResolver.sol"; abstract contract AddrResolver is IAddrResolver, IAddressResolver, ResolverBase { uint256 private constant COIN_TYPE_ETH = 60; mapping(uint64 => mapping(bytes32 => mapping(uint256 => bytes))) versionable_addresses; /** * Sets the address associated with an BNS node. * May only be called by the owner of that node in the BNS registry. * @param node The node to update. * @param a The address to set. */ function setAddr(bytes32 node, address a) external virtual authorised(node) { setAddr(node, COIN_TYPE_ETH, addressToBytes(a)); } /** * Returns the address associated with an BNS node. * @param node The BNS node to query. * @return The associated address. */ function addr(bytes32 node) public view virtual override returns (address payable) { bytes memory a = addr(node, COIN_TYPE_ETH); if (a.length == 0) { return payable(0); } return bytesToAddress(a); } function setAddr(bytes32 node, uint256 coinType, bytes memory a) public virtual authorised(node) { emit AddressChanged(node, coinType, a); if (coinType == COIN_TYPE_ETH) { emit AddrChanged(node, bytesToAddress(a)); } versionable_addresses[recordVersions[node]][node][coinType] = a; } function addr(bytes32 node, uint256 coinType) public view virtual override returns (bytes memory) { return versionable_addresses[recordVersions[node]][node][coinType]; } function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { return interfaceID == type(IAddrResolver).interfaceId || interfaceID == type(IAddressResolver).interfaceId || super.supportsInterface(interfaceID); } function bytesToAddress(bytes memory b) internal pure returns (address payable a) { require(b.length == 20); assembly { a := div(mload(add(b, 32)), exp(256, 12)) } } function addressToBytes(address a) internal pure returns (bytes memory b) { b = new bytes(20); assembly { mstore(add(b, 32), mul(a, exp(256, 12))) } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; import {ResolverBase} from "src/resolver/types/ResolverBase.sol"; import "src/resolver/interfaces/IContentHashResolver.sol"; abstract contract ContentHashResolver is IContentHashResolver, ResolverBase { mapping(uint64 => mapping(bytes32 => bytes)) versionable_hashes; /** * Sets the contenthash associated with an BNS node. * May only be called by the owner of that node in the BNS registry. * @param node The node to update. * @param hash The contenthash to set */ function setContenthash(bytes32 node, bytes calldata hash) external virtual authorised(node) { versionable_hashes[recordVersions[node]][node] = hash; emit ContenthashChanged(node, hash); } /** * Returns the contenthash associated with an BNS node. * @param node The BNS node to query. * @return The associated contenthash. */ function contenthash(bytes32 node) external view virtual override returns (bytes memory) { return versionable_hashes[recordVersions[node]][node]; } function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { return interfaceID == type(IContentHashResolver).interfaceId || super.supportsInterface(interfaceID); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; contract ExtendedResolver { function resolve(bytes memory, /* name */ bytes memory data) external view returns (bytes memory) { (bool success, bytes memory result) = address(this).staticcall(data); if (success) { return result; } else { // Revert with the reason provided by the call assembly { revert(add(result, 0x20), mload(result)) } } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import {ResolverBase} from "src/resolver/types/ResolverBase.sol"; import {AddrResolver} from "src/resolver/profiles/AddrResolver.sol"; import {IInterfaceResolver} from "src/resolver/interfaces/IInterfaceResolver.sol"; abstract contract InterfaceResolver is IInterfaceResolver, AddrResolver { mapping(uint64 => mapping(bytes32 => mapping(bytes4 => address))) versionable_interfaces; /** * Sets an interface associated with a name. * Setting the address to 0 restores the default behaviour of querying the contract at `addr()` for interface support. * @param node The node to update. * @param interfaceID The EIP 165 interface ID. * @param implementer The address of a contract that implements this interface for this node. */ function setInterface(bytes32 node, bytes4 interfaceID, address implementer) external virtual authorised(node) { versionable_interfaces[recordVersions[node]][node][interfaceID] = implementer; emit InterfaceChanged(node, interfaceID, implementer); } /** * Returns the address of a contract that implements the specified interface for this name. * If an implementer has not been set for this interfaceID and name, the resolver will query * the contract at `addr()`. If `addr()` is set, a contract exists at that address, and that * contract implements EIP165 and returns `true` for the specified interfaceID, its address * will be returned. * @param node The BNS node to query. * @param interfaceID The EIP 165 interface ID to check for. * @return The address that implements this interface, or 0 if the interface is unsupported. */ function interfaceImplementer(bytes32 node, bytes4 interfaceID) external view virtual override returns (address) { address implementer = versionable_interfaces[recordVersions[node]][node][interfaceID]; if (implementer != address(0)) { return implementer; } address a = addr(node); if (a == address(0)) { return address(0); } (bool success, bytes memory returnData) = a.staticcall(abi.encodeWithSignature("supportsInterface(bytes4)", type(IERC165).interfaceId)); if (!success || returnData.length < 32 || returnData[31] == 0) { // EIP 165 not supported by target return address(0); } (success, returnData) = a.staticcall(abi.encodeWithSignature("supportsInterface(bytes4)", interfaceID)); if (!success || returnData.length < 32 || returnData[31] == 0) { // Specified interface not supported by target return address(0); } return a; } function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { return interfaceID == type(IInterfaceResolver).interfaceId || super.supportsInterface(interfaceID); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; // Internal imports import "src/resolver/interfaces/IMulticallable.sol"; abstract contract Multicallable is IMulticallable, ERC165 { function _multicall(bytes32 nodehash, bytes[] calldata data) internal returns (bytes[] memory results) { results = new bytes[](data.length); for (uint256 i = 0; i < data.length; i++) { if (nodehash != bytes32(0)) { bytes32 txNamehash = bytes32(data[i][4:36]); require(txNamehash == nodehash, "multicall: All records must have a matching namehash"); } (bool success, bytes memory result) = address(this).delegatecall(data[i]); if (!success) { if (result.length > 0) { assembly { let revertDataSize := mload(result) revert(add(result, 32), revertDataSize) } } else { revert("Multicall delegatecall failed without a reason"); } } results[i] = result; } return results; } // This function provides an extra security check when called // from priviledged contracts (such as EthRegistrarController) // that can set records on behalf of the node owners function multicallWithNodeCheck(bytes32 nodehash, bytes[] calldata data) external returns (bytes[] memory results) { return _multicall(nodehash, data); } function multicall(bytes[] calldata data) public override returns (bytes[] memory results) { return _multicall(bytes32(0), data); } function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { return interfaceID == type(IMulticallable).interfaceId || super.supportsInterface(interfaceID); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; import {ResolverBase} from "src/resolver/types/ResolverBase.sol"; import "src/resolver/interfaces/INameResolver.sol"; abstract contract NameResolver is INameResolver, ResolverBase { mapping(uint64 => mapping(bytes32 => string)) versionable_names; /** * Sets the name associated with an BNS node, for reverse records. * May only be called by the owner of that node in the BNS registry. * @param node The node to update. */ function setName(bytes32 node, string calldata newName) external virtual authorised(node) { versionable_names[recordVersions[node]][node] = newName; emit NameChanged(node, newName); } /** * Returns the name associated with an BNS node, for reverse records. * Defined in EIP181. * @param node The BNS node to query. * @return The associated name. */ function name(bytes32 node) external view virtual override returns (string memory) { return versionable_names[recordVersions[node]][node]; } function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { return interfaceID == type(INameResolver).interfaceId || super.supportsInterface(interfaceID); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; import {ResolverBase} from "src/resolver/types/ResolverBase.sol"; import "src/resolver/interfaces/IPubkeyResolver.sol"; abstract contract PubkeyResolver is IPubkeyResolver, ResolverBase { struct PublicKey { bytes32 x; bytes32 y; } mapping(uint64 => mapping(bytes32 => PublicKey)) versionable_pubkeys; /** * Sets the SECP256k1 public key associated with an BNS node. * @param node The BNS node to query * @param x the X coordinate of the curve point for the public key. * @param y the Y coordinate of the curve point for the public key. */ function setPubkey(bytes32 node, bytes32 x, bytes32 y) external virtual authorised(node) { versionable_pubkeys[recordVersions[node]][node] = PublicKey(x, y); emit PubkeyChanged(node, x, y); } /** * Returns the SECP256k1 public key associated with an BNS node. * Defined in EIP 619. * @param node The BNS node to query * @return x The X coordinate of the curve point for the public key. * @return y The Y coordinate of the curve point for the public key. */ function pubkey(bytes32 node) external view virtual override returns (bytes32 x, bytes32 y) { uint64 currentRecordVersion = recordVersions[node]; return (versionable_pubkeys[currentRecordVersion][node].x, versionable_pubkeys[currentRecordVersion][node].y); } function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { return interfaceID == type(IPubkeyResolver).interfaceId || super.supportsInterface(interfaceID); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; import {ResolverBase} from "src/resolver/types/ResolverBase.sol"; import "src/resolver/interfaces/ITextResolver.sol"; abstract contract TextResolver is ITextResolver, ResolverBase { mapping(uint64 => mapping(bytes32 => mapping(string => string))) versionable_texts; /** * Sets the text data associated with an BNS node and key. * May only be called by the owner of that node in the BNS registry. * @param node The node to update. * @param key The key to set. * @param value The text data value to set. */ function setText(bytes32 node, string calldata key, string calldata value) external virtual authorised(node) { versionable_texts[recordVersions[node]][node][key] = value; emit TextChanged(node, key, key, value); } /** * Returns the text data associated with an BNS node and key. * @param node The BNS node to query. * @param key The text data key to query. * @return The associated text data. */ function text(bytes32 node, string calldata key) external view virtual override returns (string memory) { return versionable_texts[recordVersions[node]][node][key]; } function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { return interfaceID == type(ITextResolver).interfaceId || super.supportsInterface(interfaceID); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; import {IVersionableResolver} from "src/resolver/interfaces/IVersionableResolver.sol"; abstract contract ResolverBase is ERC165, IVersionableResolver { mapping(bytes32 => uint64) public recordVersions; function isAuthorised(bytes32 node) internal view virtual returns (bool); modifier authorised(bytes32 node) { require(isAuthorised(node), "Unauthorized"); _; } /** * Increments the record version associated with an BNS node. * May only be called by the owner of that node in the BNS registry. * @param node The node to update. */ function clearRecords(bytes32 node) public virtual authorised(node) { recordVersions[node]++; emit VersionChanged(node, recordVersions[node]); } function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { return interfaceID == type(IVersionableResolver).interfaceId || super.supportsInterface(interfaceID); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface IABIResolver { event ABIChanged(bytes32 indexed node, uint256 indexed contentType); /** * Returns the ABI associated with an ENS node. * Defined in EIP205. * @param node The ENS node to query * @param contentTypes A bitwise OR of the ABI formats accepted by the caller. * @return contentType The content type of the return value * @return data The ABI data */ function ABI(bytes32 node, uint256 contentTypes) external view returns (uint256, bytes memory); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; /** * Interface for the legacy (ETH-only) addr function. */ interface IAddrResolver { event AddrChanged(bytes32 indexed node, address a); /** * Returns the address associated with an BNS node. * @param node The BNS node to query. * @return The associated address. */ function addr(bytes32 node) external view returns (address payable); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; /** * Interface for the new (multicoin) addr function. */ interface IAddressResolver { event AddressChanged(bytes32 indexed node, uint256 coinType, bytes newAddress); function addr(bytes32 node, uint256 coinType) external view returns (bytes memory); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface IContentHashResolver { event ContenthashChanged(bytes32 indexed node, bytes hash); /** * Returns the contenthash associated with an BNS node. * @param node The BNS node to query. * @return The associated contenthash. */ function contenthash(bytes32 node) external view returns (bytes memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface IInterfaceResolver { event InterfaceChanged(bytes32 indexed node, bytes4 indexed interfaceID, address implementer); /** * Returns the address of a contract that implements the specified interface for this name. * If an implementer has not been set for this interfaceID and name, the resolver will query * the contract at `addr()`. If `addr()` is set, a contract exists at that address, and that * contract implements EIP165 and returns `true` for the specified interfaceID, its address * will be returned. * @param node The BNS node to query. * @param interfaceID The EIP 165 interface ID to check for. * @return The address that implements this interface, or 0 if the interface is unsupported. */ function interfaceImplementer(bytes32 node, bytes4 interfaceID) external view returns (address); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "./IERC165.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); * } * ``` */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; interface IMulticallable { function multicall(bytes[] calldata data) external returns (bytes[] memory results); function multicallWithNodeCheck(bytes32, bytes[] calldata data) external returns (bytes[] memory results); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface INameResolver { event NameChanged(bytes32 indexed node, string name); /** * Returns the name associated with an BNS node, for reverse records. * Defined in EIP181. * @param node The BNS node to query. * @return The associated name. */ function name(bytes32 node) external view returns (string memory); } abstract contract AbstractNameResolver { function setName(bytes32 node, string memory name) public virtual; }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface IPubkeyResolver { event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y); /** * Returns the SECP256k1 public key associated with an ENS node. * Defined in EIP 619. * @param node The ENS node to query * @return x The X coordinate of the curve point for the public key. * @return y The Y coordinate of the curve point for the public key. */ function pubkey(bytes32 node) external view returns (bytes32 x, bytes32 y); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface ITextResolver { event TextChanged(bytes32 indexed node, string indexed indexedKey, string key, string value); /** * Returns the text data associated with an BNS node and key. * @param node The BNS node to query. * @param key The text data key to query. * @return The associated text data. */ function text(bytes32 node, string calldata key) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface IVersionableResolver { event VersionChanged(bytes32 indexed node, uint64 newVersion); function recordVersions(bytes32 node) external view returns (uint64); }
{ "remappings": [ "@pythnetwork/pyth-sdk-solidity/=node_modules/@pythnetwork/pyth-sdk-solidity/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "forge-std/=lib/forge-std/src/", "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract BNS","name":"bns_","type":"address"},{"internalType":"address","name":"registrarController_","type":"address"},{"internalType":"address","name":"reverseRegistrar_","type":"address"},{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CantSetSelf","type":"error"},{"inputs":[],"name":"InvalidRegistrarController","type":"error"},{"inputs":[],"name":"InvalidReverseRegistrar","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"contentType","type":"uint256"}],"name":"ABIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"coinType","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"newAddress","type":"bytes"}],"name":"AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":false,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":true,"internalType":"bool","name":"approved","type":"bool"}],"name":"Approved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"hash","type":"bytes"}],"name":"ContenthashChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"indexed":false,"internalType":"address","name":"implementer","type":"address"}],"name":"InterfaceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"x","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"PubkeyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newRegistrarController","type":"address"}],"name":"RegistrarControllerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newReverseRegistrar","type":"address"}],"name":"ReverseRegistrarUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"string","name":"indexedKey","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"},{"indexed":false,"internalType":"string","name":"value","type":"string"}],"name":"TextChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"uint64","name":"newVersion","type":"uint64"}],"name":"VersionChanged","type":"event"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentTypes","type":"uint256"}],"name":"ABI","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"}],"name":"addr","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bns","outputs":[{"internalType":"contract BNS","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"clearRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"contenthash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"interfaceImplementer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"delegate","type":"address"}],"name":"isApprovedFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"nodehash","type":"bytes32"},{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicallWithNodeCheck","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"pubkey","outputs":[{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"recordVersions","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"registrarController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"resolve","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reverseRegistrar","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentType","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setABI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"bytes","name":"a","type":"bytes"}],"name":"setAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"a","type":"address"}],"name":"setAddr","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":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"hash","type":"bytes"}],"name":"setContenthash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"internalType":"address","name":"implementer","type":"address"}],"name":"setInterface","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"newName","type":"string"}],"name":"setName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"setPubkey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"registrarController_","type":"address"}],"name":"setRegistrarController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reverseRegistrar_","type":"address"}],"name":"setReverseRegistrar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"name":"setText","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":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"}],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405234801561000f575f5ffd5b5060405161278f38038061278f83398101604081905261002e916101b7565b806001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100658161014f565b506001600160a01b03808516608052831661009357604051630d39e15560e11b815260040160405180910390fd5b6001600160a01b0382166100ba5760405163650a718160e01b815260040160405180910390fd5b600980546001600160a01b038581166001600160a01b031992831617909255600a8054858416921682179055604051630f41a04d60e11b8152918316600483015290631e83409a906024016020604051808303815f875af1158015610121573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101459190610213565b505050505061022a565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03811681146101b4575f5ffd5b50565b5f5f5f5f608085870312156101ca575f5ffd5b84516101d5816101a0565b60208601519094506101e6816101a0565b60408601519093506101f7816101a0565b6060860151909250610208816101a0565b939692955090935050565b5f60208284031215610223575f5ffd5b5051919050565b60805161253f6102505f395f818161026e015281816112580152611629015261253f5ff3fe608060405234801561000f575f5ffd5b50600436106101fd575f3560e01c80638b95dd7111610114578063c8690233116100a9578063e59d895d11610079578063e59d895d14610527578063e985e9c51461053a578063f1cb7e0614610575578063f2fde38b14610588578063f9cd32c51461059b575f5ffd5b8063c86902331461046a578063d5fa2b00146104c1578063d700ff33146104d4578063e32954eb14610514575f5ffd5b8063a4b91a01116100e4578063a4b91a01146103e1578063a9784b3e146103f4578063ac9650d814610437578063bc1c58d114610457575f5ffd5b80638b95dd71146103975780638da5cb5b146103aa5780639061b923146103bb578063a22cb465146103ce575f5ffd5b80633603d75811610195578063623195b011610165578063623195b014610343578063691f343114610356578063715018a61461036957806377372213146103715780638086985314610384575f5ffd5b80633603d758146102ea5780633b3b57de146102fd578063557499ba1461031057806359d1d43c14610323575f5ffd5b80632203ab56116101d05780632203ab561461029057806329448e1d146102b157806329cd62ea146102c4578063304e6ade146102d7575f5ffd5b806301ffc9a71461020157806310f13a8c14610229578063124a319c1461023e5780631867e2f514610269575b5f5ffd5b61021461020f366004611b45565b6105ae565b60405190151581526020015b60405180910390f35b61023c610237366004611b9b565b6105d8565b005b61025161024c366004611c12565b6106bf565b6040516001600160a01b039091168152602001610220565b6102517f000000000000000000000000000000000000000000000000000000000000000081565b6102a361029e366004611c3c565b610904565b604051610220929190611c8a565b61023c6102bf366004611cb6565b610a32565b61023c6102d2366004611cd1565b610aaa565b61023c6102e5366004611cfa565b610b56565b61023c6102f8366004611d41565b610be3565b61025161030b366004611d41565b610c95565b61023c61031e366004611cb6565b610cc4565b610336610331366004611cfa565b610d3c565b6040516102209190611d58565b61023c610351366004611d6a565b610e18565b610336610364366004611d41565b610ec4565b61023c610f7f565b61023c61037f366004611cfa565b610f92565b600a54610251906001600160a01b031681565b61023c6103a5366004611e55565b61101f565b6008546001600160a01b0316610251565b6103366103c9366004611ea0565b611110565b61023c6103dc366004611f12565b611185565b61023c6103ef366004611f3c565b611219565b610214610402366004611f77565b6001600160a01b039283165f908152600c60209081526040808320948352938152838220929094168152925290205460ff1690565b61044a610445366004611ff6565b61136e565b6040516102209190612034565b610336610465366004611d41565b61137b565b6104ac610478366004611d41565b5f81815260208181526040808320546001600160401b03168352600682528083209383529290522080546001909101549091565b60408051928352602083019190915201610220565b61023c6104cf366004612097565b6113b3565b6104fc6104e2366004611d41565b5f602081905290815260409020546001600160401b031681565b6040516001600160401b039091168152602001610220565b61044a6105223660046120c5565b6113ed565b61023c6105353660046120ff565b611402565b610214610548366004612131565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205460ff1690565b610336610583366004611c3c565b6114ba565b61023c610596366004611cb6565b61157e565b600954610251906001600160a01b031681565b5f6001600160e01b03198216639061b92360e01b14806105d257506105d2826115bb565b92915050565b846105e2816115df565b6106075760405162461bcd60e51b81526004016105fe9061215d565b60405180910390fd5b5f86815260208181526040808320546001600160401b0316835260078252808320898452909152908190209051849184916106459089908990612183565b9081526020016040518091039020918261066092919061220e565b508484604051610671929190612183565b6040518091039020867f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a1878787876040516106af94939291906122ef565b60405180910390a3505050505050565b5f82815260208181526040808320546001600160401b031683526004825280832085845282528083206001600160e01b0319851684529091528120546001600160a01b031680156107115790506105d2565b5f61071b85610c95565b90506001600160a01b038116610735575f925050506105d2565b6040516301ffc9a760e01b60248201525f9081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525161078c9190612320565b5f60405180830381855afa9150503d805f81146107c4576040519150601f19603f3d011682016040523d82523d5f602084013e6107c9565b606091505b50915091508115806107dc575060208151105b80610806575080601f815181106107f5576107f5612336565b01602001516001600160f81b031916155b15610817575f9450505050506105d2565b6040516001600160e01b0319871660248201526001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525161086d9190612320565b5f60405180830381855afa9150503d805f81146108a5576040519150601f19603f3d011682016040523d82523d5f602084013e6108aa565b606091505b5090925090508115806108be575060208151105b806108e8575080601f815181106108d7576108d7612336565b01602001516001600160f81b031916155b156108f9575f9450505050506105d2565b509095945050505050565b5f82815260208181526040808320546001600160401b03168352600180835281842086855290925282206060915b848111610a14578085161580159061096157505f818152602083905260408120805461095d90612192565b9050115b15610a0c5780825f8381526020019081526020015f2080805461098390612192565b80601f01602080910402602001604051908101604052809291908181526020018280546109af90612192565b80156109fa5780601f106109d1576101008083540402835291602001916109fa565b820191905f5260205f20905b8154815290600101906020018083116109dd57829003601f168201915b50505050509050935093505050610a2b565b60011b610932565b505f60405180602001604052805f81525092509250505b9250929050565b610a3a61170e565b6001600160a01b038116610a6157604051630d39e15560e11b815260040160405180910390fd5b600980546001600160a01b0319166001600160a01b0383169081179091556040517f1877ffeba0b0229d8385c284d9b459f592be2d0f4acc2696fccfb0ae4b73b6b9905f90a250565b82610ab4816115df565b610ad05760405162461bcd60e51b81526004016105fe9061215d565b60408051808201825284815260208082018581525f888152808352848120546001600160401b031681526006835284812089825283528490209251835551600190920191909155815185815290810184905285917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a250505050565b82610b60816115df565b610b7c5760405162461bcd60e51b81526004016105fe9061215d565b5f84815260208181526040808320546001600160401b03168352600382528083208784529091529020610bb083858361220e565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484604051610b4892919061234a565b80610bed816115df565b610c095760405162461bcd60e51b81526004016105fe9061215d565b5f82815260208190526040812080546001600160401b031691610c2b83612371565b82546101009290920a6001600160401b038181021990931691831602179091555f84815260208181526040918290205491519190921681528492507fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db444910160405180910390a25050565b5f5f610ca283603c6114ba565b905080515f03610cb457505f92915050565b610cbd8161173b565b9392505050565b610ccc61170e565b6001600160a01b038116610cf35760405163650a718160e01b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0383169081179091556040517fd192c0b229b00473ccb6ccfebf6642805bca1dcdf2d9fb4fd102c7dc7ea4ce23905f90a250565b5f83815260208181526040808320546001600160401b031683526007825280832086845290915290819020905160609190610d7a9085908590612183565b90815260200160405180910390208054610d9390612192565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbf90612192565b8015610e0a5780601f10610de157610100808354040283529160200191610e0a565b820191905f5260205f20905b815481529060010190602001808311610ded57829003601f168201915b505050505090509392505050565b83610e22816115df565b610e3e5760405162461bcd60e51b81526004016105fe9061215d565b83610e4a60018261239b565b1615610e54575f5ffd5b5f85815260208181526040808320546001600160401b031683526001825280832088845282528083208784529091529020610e9083858361220e565b50604051849086907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe3905f90a35050505050565b5f81815260208181526040808320546001600160401b03168352600582528083208484529091529020805460609190610efc90612192565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2890612192565b8015610f735780601f10610f4a57610100808354040283529160200191610f73565b820191905f5260205f20905b815481529060010190602001808311610f5657829003601f168201915b50505050509050919050565b610f8761170e565b610f905f611758565b565b82610f9c816115df565b610fb85760405162461bcd60e51b81526004016105fe9061215d565b5f84815260208181526040808320546001600160401b03168352600582528083208784529091529020610fec83858361220e565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f78484604051610b4892919061234a565b82611029816115df565b6110455760405162461bcd60e51b81526004016105fe9061215d565b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af7528484604051611077929190611c8a565b60405180910390a2603c83036110ce57837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd26110b28461173b565b6040516001600160a01b03909116815260200160405180910390a25b5f84815260208181526040808320546001600160401b03168352600282528083208784528252808320868452909152902061110983826123ae565b5050505050565b60605f5f306001600160a01b03168460405161112c9190612320565b5f60405180830381855afa9150503d805f8114611164576040519150601f19603f3d011682016040523d82523d5f602084013e611169565b606091505b5091509150811561117d5791506105d29050565b805160208201fd5b6001600160a01b03821633036111ae576040516327cd53b360e01b815260040160405180910390fd5b335f818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b0382163303611242576040516327cd53b360e01b815260040160405180910390fd5b6040516302571be360e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302571be390602401602060405180830381865afa1580156112a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112c99190612468565b6001600160a01b0316336001600160a01b0316146112fa576040516330cd747160e01b815260040160405180910390fd5b335f818152600c6020908152604080832087845282528083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519384529286917ff0ddb3b04746704017f9aa8bd728fcc2c1d11675041205350018915f5e4750a0910160405180910390a4505050565b6060610cbd5f84846117a9565b5f81815260208181526040808320546001600160401b03168352600382528083208484529091529020805460609190610efc90612192565b816113bd816115df565b6113d95760405162461bcd60e51b81526004016105fe9061215d565b6113e883603c6103a5856119d1565b505050565b60606113fa8484846117a9565b949350505050565b8261140c816115df565b6114285760405162461bcd60e51b81526004016105fe9061215d565b5f84815260208181526040808320546001600160401b031683526004825280832087845282528083206001600160e01b031987168085529083529281902080546001600160a01b0319166001600160a01b038716908117909155905190815286917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a350505050565b5f82815260208181526040808320546001600160401b0316835260028252808320858452825280832084845290915290208054606091906114fa90612192565b80601f016020809104026020016040519081016040528092919081815260200182805461152690612192565b80156115715780601f1061154857610100808354040283529160200191611571565b820191905f5260205f20905b81548152906001019060200180831161155457829003601f168201915b5050505050905092915050565b61158661170e565b6001600160a01b0381166115af57604051631e4fbdf760e01b81525f60048201526024016105fe565b6115b881611758565b50565b5f6001600160e01b03198216631674750f60e21b14806105d257506105d282611a01565b6009545f906001600160a01b03163314806116045750600a546001600160a01b031633145b1561161157506001919050565b6040516302571be360e01b8152600481018390525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302571be390602401602060405180830381865afa158015611676573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169a9190612468565b90506001600160a01b0381163314806116d557506001600160a01b0381165f908152600b6020908152604080832033845290915290205460ff165b80610cbd57506001600160a01b0381165f908152600c60209081526040808320868452825280832033845290915290205460ff16610cbd565b6008546001600160a01b03163314610f905760405163118cdaa760e01b81523360048201526024016105fe565b5f8151601414611749575f5ffd5b5060200151600160601b900490565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6060816001600160401b038111156117c3576117c3611db8565b6040519080825280602002602001820160405280156117f657816020015b60608152602001906001900390816117e15790505b5090505f5b828110156119c95784156118b6575f84848381811061181c5761181c612336565b905060200281019061182e9190612483565b61183d916024916004916124c5565b611846916124ec565b90508581146118b45760405162461bcd60e51b815260206004820152603460248201527f6d756c746963616c6c3a20416c6c207265636f726473206d7573742068617665604482015273040c240dac2e8c6d0d2dcce40dcc2dacad0c2e6d60631b60648201526084016105fe565b505b5f80308686858181106118cb576118cb612336565b90506020028101906118dd9190612483565b6040516118eb929190612183565b5f60405180830381855af49150503d805f8114611923576040519150601f19603f3d011682016040523d82523d5f602084013e611928565b606091505b5091509150816119a1578051156119425780518060208301fd5b60405162461bcd60e51b815260206004820152602e60248201527f4d756c746963616c6c2064656c656761746563616c6c206661696c656420776960448201526d3a3437baba1030903932b0b9b7b760911b60648201526084016105fe565b808484815181106119b4576119b4612336565b602090810291909101015250506001016117fb565b509392505050565b604080516014808252818301909252606091602082018180368337505050600160601b9290920260208301525090565b5f6001600160e01b0319821663c869023360e01b14806105d257506105d2825f6001600160e01b0319821663691f343160e01b14806105d257506105d2825f6001600160e01b031982166304928c6760e21b14806105d257506105d2825f6001600160e01b0319821663bc1c58d160e01b14806105d257506105d2825f6001600160e01b03198216631d9dabef60e11b1480611aad57506001600160e01b031982166378e5bf0360e11b145b806105d257506105d2825f6001600160e01b03198216631101d5ab60e11b14806105d257506105d2825f6001600160e01b0319821663d700ff3360e01b14806105d257506105d2825f6001600160e01b03198216634fbf043360e01b14806105d257506301ffc9a760e01b6001600160e01b03198316146105d2565b80356001600160e01b031981168114611b40575f5ffd5b919050565b5f60208284031215611b55575f5ffd5b610cbd82611b29565b5f5f83601f840112611b6e575f5ffd5b5081356001600160401b03811115611b84575f5ffd5b602083019150836020828501011115610a2b575f5ffd5b5f5f5f5f5f60608688031215611baf575f5ffd5b8535945060208601356001600160401b03811115611bcb575f5ffd5b611bd788828901611b5e565b90955093505060408601356001600160401b03811115611bf5575f5ffd5b611c0188828901611b5e565b969995985093965092949392505050565b5f5f60408385031215611c23575f5ffd5b82359150611c3360208401611b29565b90509250929050565b5f5f60408385031215611c4d575f5ffd5b50508035926020909101359150565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b828152604060208201525f6113fa6040830184611c5c565b6001600160a01b03811681146115b8575f5ffd5b5f60208284031215611cc6575f5ffd5b8135610cbd81611ca2565b5f5f5f60608486031215611ce3575f5ffd5b505081359360208301359350604090920135919050565b5f5f5f60408486031215611d0c575f5ffd5b8335925060208401356001600160401b03811115611d28575f5ffd5b611d3486828701611b5e565b9497909650939450505050565b5f60208284031215611d51575f5ffd5b5035919050565b602081525f610cbd6020830184611c5c565b5f5f5f5f60608587031215611d7d575f5ffd5b843593506020850135925060408501356001600160401b03811115611da0575f5ffd5b611dac87828801611b5e565b95989497509550505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611ddb575f5ffd5b81356001600160401b03811115611df457611df4611db8565b604051601f8201601f19908116603f011681016001600160401b0381118282101715611e2257611e22611db8565b604052818152838201602001851015611e39575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215611e67575f5ffd5b833592506020840135915060408401356001600160401b03811115611e8a575f5ffd5b611e9686828701611dcc565b9150509250925092565b5f5f60408385031215611eb1575f5ffd5b82356001600160401b03811115611ec6575f5ffd5b611ed285828601611dcc565b92505060208301356001600160401b03811115611eed575f5ffd5b611ef985828601611dcc565b9150509250929050565b80358015158114611b40575f5ffd5b5f5f60408385031215611f23575f5ffd5b8235611f2e81611ca2565b9150611c3360208401611f03565b5f5f5f60608486031215611f4e575f5ffd5b833592506020840135611f6081611ca2565b9150611f6e60408501611f03565b90509250925092565b5f5f5f60608486031215611f89575f5ffd5b8335611f9481611ca2565b9250602084013591506040840135611fab81611ca2565b809150509250925092565b5f5f83601f840112611fc6575f5ffd5b5081356001600160401b03811115611fdc575f5ffd5b6020830191508360208260051b8501011115610a2b575f5ffd5b5f5f60208385031215612007575f5ffd5b82356001600160401b0381111561201c575f5ffd5b61202885828601611fb6565b90969095509350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561208b57603f19878603018452612076858351611c5c565b9450602093840193919091019060010161205a565b50929695505050505050565b5f5f604083850312156120a8575f5ffd5b8235915060208301356120ba81611ca2565b809150509250929050565b5f5f5f604084860312156120d7575f5ffd5b8335925060208401356001600160401b038111156120f3575f5ffd5b611d3486828701611fb6565b5f5f5f60608486031215612111575f5ffd5b8335925061212160208501611b29565b91506040840135611fab81611ca2565b5f5f60408385031215612142575f5ffd5b823561214d81611ca2565b915060208301356120ba81611ca2565b6020808252600c908201526b155b985d5d1a1bdc9a5e995960a21b604082015260600190565b818382375f9101908152919050565b600181811c908216806121a657607f821691505b6020821081036121c457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156113e857805f5260205f20601f840160051c810160208510156121ef5750805b601f840160051c820191505b81811015611109575f81556001016121fb565b6001600160401b0383111561222557612225611db8565b612239836122338354612192565b836121ca565b5f601f84116001811461226a575f85156122535750838201355b5f19600387901b1c1916600186901b178355611109565b5f83815260208120601f198716915b828110156122995786850135825560209485019460019092019101612279565b50868210156122b5575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f6123026040830186886122c7565b82810360208401526123158185876122c7565b979650505050505050565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52603260045260245ffd5b602081525f6113fa6020830184866122c7565b634e487b7160e01b5f52601160045260245ffd5b5f6001600160401b0382166001600160401b0381036123925761239261235d565b60010192915050565b818103818111156105d2576105d261235d565b81516001600160401b038111156123c7576123c7611db8565b6123db816123d58454612192565b846121ca565b6020601f82116001811461240d575f83156123f65750848201515b5f19600385901b1c1916600184901b178455611109565b5f84815260208120601f198516915b8281101561243c578785015182556020948501946001909201910161241c565b508482101561245957868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215612478575f5ffd5b8151610cbd81611ca2565b5f5f8335601e19843603018112612498575f5ffd5b8301803591506001600160401b038211156124b1575f5ffd5b602001915036819003821315610a2b575f5ffd5b5f5f858511156124d3575f5ffd5b838611156124df575f5ffd5b5050820193919092039150565b803560208310156105d2575f19602084900360031b1b169291505056fea264697066735822122026fe427a593be622dd0d13eff79ee234fe2941ca97f991db1567e4255dcbbb6d64736f6c634300081c00330000000000000000000000005b22280886a2f5e09a49bea7e320eab0e5320e280000000000000000000000005ede4408e78c36c3ab16c5813c418624c2823b270000000000000000000000003c05f49af5fa3b13ba780e3f1924d1c112bde92200000000000000000000000043aedb439f497b1d51d1b263d64abf026b2aed5c
Deployed Bytecode
0x608060405234801561000f575f5ffd5b50600436106101fd575f3560e01c80638b95dd7111610114578063c8690233116100a9578063e59d895d11610079578063e59d895d14610527578063e985e9c51461053a578063f1cb7e0614610575578063f2fde38b14610588578063f9cd32c51461059b575f5ffd5b8063c86902331461046a578063d5fa2b00146104c1578063d700ff33146104d4578063e32954eb14610514575f5ffd5b8063a4b91a01116100e4578063a4b91a01146103e1578063a9784b3e146103f4578063ac9650d814610437578063bc1c58d114610457575f5ffd5b80638b95dd71146103975780638da5cb5b146103aa5780639061b923146103bb578063a22cb465146103ce575f5ffd5b80633603d75811610195578063623195b011610165578063623195b014610343578063691f343114610356578063715018a61461036957806377372213146103715780638086985314610384575f5ffd5b80633603d758146102ea5780633b3b57de146102fd578063557499ba1461031057806359d1d43c14610323575f5ffd5b80632203ab56116101d05780632203ab561461029057806329448e1d146102b157806329cd62ea146102c4578063304e6ade146102d7575f5ffd5b806301ffc9a71461020157806310f13a8c14610229578063124a319c1461023e5780631867e2f514610269575b5f5ffd5b61021461020f366004611b45565b6105ae565b60405190151581526020015b60405180910390f35b61023c610237366004611b9b565b6105d8565b005b61025161024c366004611c12565b6106bf565b6040516001600160a01b039091168152602001610220565b6102517f0000000000000000000000005b22280886a2f5e09a49bea7e320eab0e5320e2881565b6102a361029e366004611c3c565b610904565b604051610220929190611c8a565b61023c6102bf366004611cb6565b610a32565b61023c6102d2366004611cd1565b610aaa565b61023c6102e5366004611cfa565b610b56565b61023c6102f8366004611d41565b610be3565b61025161030b366004611d41565b610c95565b61023c61031e366004611cb6565b610cc4565b610336610331366004611cfa565b610d3c565b6040516102209190611d58565b61023c610351366004611d6a565b610e18565b610336610364366004611d41565b610ec4565b61023c610f7f565b61023c61037f366004611cfa565b610f92565b600a54610251906001600160a01b031681565b61023c6103a5366004611e55565b61101f565b6008546001600160a01b0316610251565b6103366103c9366004611ea0565b611110565b61023c6103dc366004611f12565b611185565b61023c6103ef366004611f3c565b611219565b610214610402366004611f77565b6001600160a01b039283165f908152600c60209081526040808320948352938152838220929094168152925290205460ff1690565b61044a610445366004611ff6565b61136e565b6040516102209190612034565b610336610465366004611d41565b61137b565b6104ac610478366004611d41565b5f81815260208181526040808320546001600160401b03168352600682528083209383529290522080546001909101549091565b60408051928352602083019190915201610220565b61023c6104cf366004612097565b6113b3565b6104fc6104e2366004611d41565b5f602081905290815260409020546001600160401b031681565b6040516001600160401b039091168152602001610220565b61044a6105223660046120c5565b6113ed565b61023c6105353660046120ff565b611402565b610214610548366004612131565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205460ff1690565b610336610583366004611c3c565b6114ba565b61023c610596366004611cb6565b61157e565b600954610251906001600160a01b031681565b5f6001600160e01b03198216639061b92360e01b14806105d257506105d2826115bb565b92915050565b846105e2816115df565b6106075760405162461bcd60e51b81526004016105fe9061215d565b60405180910390fd5b5f86815260208181526040808320546001600160401b0316835260078252808320898452909152908190209051849184916106459089908990612183565b9081526020016040518091039020918261066092919061220e565b508484604051610671929190612183565b6040518091039020867f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a1878787876040516106af94939291906122ef565b60405180910390a3505050505050565b5f82815260208181526040808320546001600160401b031683526004825280832085845282528083206001600160e01b0319851684529091528120546001600160a01b031680156107115790506105d2565b5f61071b85610c95565b90506001600160a01b038116610735575f925050506105d2565b6040516301ffc9a760e01b60248201525f9081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525161078c9190612320565b5f60405180830381855afa9150503d805f81146107c4576040519150601f19603f3d011682016040523d82523d5f602084013e6107c9565b606091505b50915091508115806107dc575060208151105b80610806575080601f815181106107f5576107f5612336565b01602001516001600160f81b031916155b15610817575f9450505050506105d2565b6040516001600160e01b0319871660248201526001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525161086d9190612320565b5f60405180830381855afa9150503d805f81146108a5576040519150601f19603f3d011682016040523d82523d5f602084013e6108aa565b606091505b5090925090508115806108be575060208151105b806108e8575080601f815181106108d7576108d7612336565b01602001516001600160f81b031916155b156108f9575f9450505050506105d2565b509095945050505050565b5f82815260208181526040808320546001600160401b03168352600180835281842086855290925282206060915b848111610a14578085161580159061096157505f818152602083905260408120805461095d90612192565b9050115b15610a0c5780825f8381526020019081526020015f2080805461098390612192565b80601f01602080910402602001604051908101604052809291908181526020018280546109af90612192565b80156109fa5780601f106109d1576101008083540402835291602001916109fa565b820191905f5260205f20905b8154815290600101906020018083116109dd57829003601f168201915b50505050509050935093505050610a2b565b60011b610932565b505f60405180602001604052805f81525092509250505b9250929050565b610a3a61170e565b6001600160a01b038116610a6157604051630d39e15560e11b815260040160405180910390fd5b600980546001600160a01b0319166001600160a01b0383169081179091556040517f1877ffeba0b0229d8385c284d9b459f592be2d0f4acc2696fccfb0ae4b73b6b9905f90a250565b82610ab4816115df565b610ad05760405162461bcd60e51b81526004016105fe9061215d565b60408051808201825284815260208082018581525f888152808352848120546001600160401b031681526006835284812089825283528490209251835551600190920191909155815185815290810184905285917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a250505050565b82610b60816115df565b610b7c5760405162461bcd60e51b81526004016105fe9061215d565b5f84815260208181526040808320546001600160401b03168352600382528083208784529091529020610bb083858361220e565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484604051610b4892919061234a565b80610bed816115df565b610c095760405162461bcd60e51b81526004016105fe9061215d565b5f82815260208190526040812080546001600160401b031691610c2b83612371565b82546101009290920a6001600160401b038181021990931691831602179091555f84815260208181526040918290205491519190921681528492507fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db444910160405180910390a25050565b5f5f610ca283603c6114ba565b905080515f03610cb457505f92915050565b610cbd8161173b565b9392505050565b610ccc61170e565b6001600160a01b038116610cf35760405163650a718160e01b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0383169081179091556040517fd192c0b229b00473ccb6ccfebf6642805bca1dcdf2d9fb4fd102c7dc7ea4ce23905f90a250565b5f83815260208181526040808320546001600160401b031683526007825280832086845290915290819020905160609190610d7a9085908590612183565b90815260200160405180910390208054610d9390612192565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbf90612192565b8015610e0a5780601f10610de157610100808354040283529160200191610e0a565b820191905f5260205f20905b815481529060010190602001808311610ded57829003601f168201915b505050505090509392505050565b83610e22816115df565b610e3e5760405162461bcd60e51b81526004016105fe9061215d565b83610e4a60018261239b565b1615610e54575f5ffd5b5f85815260208181526040808320546001600160401b031683526001825280832088845282528083208784529091529020610e9083858361220e565b50604051849086907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe3905f90a35050505050565b5f81815260208181526040808320546001600160401b03168352600582528083208484529091529020805460609190610efc90612192565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2890612192565b8015610f735780601f10610f4a57610100808354040283529160200191610f73565b820191905f5260205f20905b815481529060010190602001808311610f5657829003601f168201915b50505050509050919050565b610f8761170e565b610f905f611758565b565b82610f9c816115df565b610fb85760405162461bcd60e51b81526004016105fe9061215d565b5f84815260208181526040808320546001600160401b03168352600582528083208784529091529020610fec83858361220e565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f78484604051610b4892919061234a565b82611029816115df565b6110455760405162461bcd60e51b81526004016105fe9061215d565b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af7528484604051611077929190611c8a565b60405180910390a2603c83036110ce57837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd26110b28461173b565b6040516001600160a01b03909116815260200160405180910390a25b5f84815260208181526040808320546001600160401b03168352600282528083208784528252808320868452909152902061110983826123ae565b5050505050565b60605f5f306001600160a01b03168460405161112c9190612320565b5f60405180830381855afa9150503d805f8114611164576040519150601f19603f3d011682016040523d82523d5f602084013e611169565b606091505b5091509150811561117d5791506105d29050565b805160208201fd5b6001600160a01b03821633036111ae576040516327cd53b360e01b815260040160405180910390fd5b335f818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b0382163303611242576040516327cd53b360e01b815260040160405180910390fd5b6040516302571be360e01b8152600481018490527f0000000000000000000000005b22280886a2f5e09a49bea7e320eab0e5320e286001600160a01b0316906302571be390602401602060405180830381865afa1580156112a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112c99190612468565b6001600160a01b0316336001600160a01b0316146112fa576040516330cd747160e01b815260040160405180910390fd5b335f818152600c6020908152604080832087845282528083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519384529286917ff0ddb3b04746704017f9aa8bd728fcc2c1d11675041205350018915f5e4750a0910160405180910390a4505050565b6060610cbd5f84846117a9565b5f81815260208181526040808320546001600160401b03168352600382528083208484529091529020805460609190610efc90612192565b816113bd816115df565b6113d95760405162461bcd60e51b81526004016105fe9061215d565b6113e883603c6103a5856119d1565b505050565b60606113fa8484846117a9565b949350505050565b8261140c816115df565b6114285760405162461bcd60e51b81526004016105fe9061215d565b5f84815260208181526040808320546001600160401b031683526004825280832087845282528083206001600160e01b031987168085529083529281902080546001600160a01b0319166001600160a01b038716908117909155905190815286917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a350505050565b5f82815260208181526040808320546001600160401b0316835260028252808320858452825280832084845290915290208054606091906114fa90612192565b80601f016020809104026020016040519081016040528092919081815260200182805461152690612192565b80156115715780601f1061154857610100808354040283529160200191611571565b820191905f5260205f20905b81548152906001019060200180831161155457829003601f168201915b5050505050905092915050565b61158661170e565b6001600160a01b0381166115af57604051631e4fbdf760e01b81525f60048201526024016105fe565b6115b881611758565b50565b5f6001600160e01b03198216631674750f60e21b14806105d257506105d282611a01565b6009545f906001600160a01b03163314806116045750600a546001600160a01b031633145b1561161157506001919050565b6040516302571be360e01b8152600481018390525f907f0000000000000000000000005b22280886a2f5e09a49bea7e320eab0e5320e286001600160a01b0316906302571be390602401602060405180830381865afa158015611676573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169a9190612468565b90506001600160a01b0381163314806116d557506001600160a01b0381165f908152600b6020908152604080832033845290915290205460ff165b80610cbd57506001600160a01b0381165f908152600c60209081526040808320868452825280832033845290915290205460ff16610cbd565b6008546001600160a01b03163314610f905760405163118cdaa760e01b81523360048201526024016105fe565b5f8151601414611749575f5ffd5b5060200151600160601b900490565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6060816001600160401b038111156117c3576117c3611db8565b6040519080825280602002602001820160405280156117f657816020015b60608152602001906001900390816117e15790505b5090505f5b828110156119c95784156118b6575f84848381811061181c5761181c612336565b905060200281019061182e9190612483565b61183d916024916004916124c5565b611846916124ec565b90508581146118b45760405162461bcd60e51b815260206004820152603460248201527f6d756c746963616c6c3a20416c6c207265636f726473206d7573742068617665604482015273040c240dac2e8c6d0d2dcce40dcc2dacad0c2e6d60631b60648201526084016105fe565b505b5f80308686858181106118cb576118cb612336565b90506020028101906118dd9190612483565b6040516118eb929190612183565b5f60405180830381855af49150503d805f8114611923576040519150601f19603f3d011682016040523d82523d5f602084013e611928565b606091505b5091509150816119a1578051156119425780518060208301fd5b60405162461bcd60e51b815260206004820152602e60248201527f4d756c746963616c6c2064656c656761746563616c6c206661696c656420776960448201526d3a3437baba1030903932b0b9b7b760911b60648201526084016105fe565b808484815181106119b4576119b4612336565b602090810291909101015250506001016117fb565b509392505050565b604080516014808252818301909252606091602082018180368337505050600160601b9290920260208301525090565b5f6001600160e01b0319821663c869023360e01b14806105d257506105d2825f6001600160e01b0319821663691f343160e01b14806105d257506105d2825f6001600160e01b031982166304928c6760e21b14806105d257506105d2825f6001600160e01b0319821663bc1c58d160e01b14806105d257506105d2825f6001600160e01b03198216631d9dabef60e11b1480611aad57506001600160e01b031982166378e5bf0360e11b145b806105d257506105d2825f6001600160e01b03198216631101d5ab60e11b14806105d257506105d2825f6001600160e01b0319821663d700ff3360e01b14806105d257506105d2825f6001600160e01b03198216634fbf043360e01b14806105d257506301ffc9a760e01b6001600160e01b03198316146105d2565b80356001600160e01b031981168114611b40575f5ffd5b919050565b5f60208284031215611b55575f5ffd5b610cbd82611b29565b5f5f83601f840112611b6e575f5ffd5b5081356001600160401b03811115611b84575f5ffd5b602083019150836020828501011115610a2b575f5ffd5b5f5f5f5f5f60608688031215611baf575f5ffd5b8535945060208601356001600160401b03811115611bcb575f5ffd5b611bd788828901611b5e565b90955093505060408601356001600160401b03811115611bf5575f5ffd5b611c0188828901611b5e565b969995985093965092949392505050565b5f5f60408385031215611c23575f5ffd5b82359150611c3360208401611b29565b90509250929050565b5f5f60408385031215611c4d575f5ffd5b50508035926020909101359150565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b828152604060208201525f6113fa6040830184611c5c565b6001600160a01b03811681146115b8575f5ffd5b5f60208284031215611cc6575f5ffd5b8135610cbd81611ca2565b5f5f5f60608486031215611ce3575f5ffd5b505081359360208301359350604090920135919050565b5f5f5f60408486031215611d0c575f5ffd5b8335925060208401356001600160401b03811115611d28575f5ffd5b611d3486828701611b5e565b9497909650939450505050565b5f60208284031215611d51575f5ffd5b5035919050565b602081525f610cbd6020830184611c5c565b5f5f5f5f60608587031215611d7d575f5ffd5b843593506020850135925060408501356001600160401b03811115611da0575f5ffd5b611dac87828801611b5e565b95989497509550505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611ddb575f5ffd5b81356001600160401b03811115611df457611df4611db8565b604051601f8201601f19908116603f011681016001600160401b0381118282101715611e2257611e22611db8565b604052818152838201602001851015611e39575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215611e67575f5ffd5b833592506020840135915060408401356001600160401b03811115611e8a575f5ffd5b611e9686828701611dcc565b9150509250925092565b5f5f60408385031215611eb1575f5ffd5b82356001600160401b03811115611ec6575f5ffd5b611ed285828601611dcc565b92505060208301356001600160401b03811115611eed575f5ffd5b611ef985828601611dcc565b9150509250929050565b80358015158114611b40575f5ffd5b5f5f60408385031215611f23575f5ffd5b8235611f2e81611ca2565b9150611c3360208401611f03565b5f5f5f60608486031215611f4e575f5ffd5b833592506020840135611f6081611ca2565b9150611f6e60408501611f03565b90509250925092565b5f5f5f60608486031215611f89575f5ffd5b8335611f9481611ca2565b9250602084013591506040840135611fab81611ca2565b809150509250925092565b5f5f83601f840112611fc6575f5ffd5b5081356001600160401b03811115611fdc575f5ffd5b6020830191508360208260051b8501011115610a2b575f5ffd5b5f5f60208385031215612007575f5ffd5b82356001600160401b0381111561201c575f5ffd5b61202885828601611fb6565b90969095509350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561208b57603f19878603018452612076858351611c5c565b9450602093840193919091019060010161205a565b50929695505050505050565b5f5f604083850312156120a8575f5ffd5b8235915060208301356120ba81611ca2565b809150509250929050565b5f5f5f604084860312156120d7575f5ffd5b8335925060208401356001600160401b038111156120f3575f5ffd5b611d3486828701611fb6565b5f5f5f60608486031215612111575f5ffd5b8335925061212160208501611b29565b91506040840135611fab81611ca2565b5f5f60408385031215612142575f5ffd5b823561214d81611ca2565b915060208301356120ba81611ca2565b6020808252600c908201526b155b985d5d1a1bdc9a5e995960a21b604082015260600190565b818382375f9101908152919050565b600181811c908216806121a657607f821691505b6020821081036121c457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156113e857805f5260205f20601f840160051c810160208510156121ef5750805b601f840160051c820191505b81811015611109575f81556001016121fb565b6001600160401b0383111561222557612225611db8565b612239836122338354612192565b836121ca565b5f601f84116001811461226a575f85156122535750838201355b5f19600387901b1c1916600186901b178355611109565b5f83815260208120601f198716915b828110156122995786850135825560209485019460019092019101612279565b50868210156122b5575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f6123026040830186886122c7565b82810360208401526123158185876122c7565b979650505050505050565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52603260045260245ffd5b602081525f6113fa6020830184866122c7565b634e487b7160e01b5f52601160045260245ffd5b5f6001600160401b0382166001600160401b0381036123925761239261235d565b60010192915050565b818103818111156105d2576105d261235d565b81516001600160401b038111156123c7576123c7611db8565b6123db816123d58454612192565b846121ca565b6020601f82116001811461240d575f83156123f65750848201515b5f19600385901b1c1916600184901b178455611109565b5f84815260208120601f198516915b8281101561243c578785015182556020948501946001909201910161241c565b508482101561245957868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215612478575f5ffd5b8151610cbd81611ca2565b5f5f8335601e19843603018112612498575f5ffd5b8301803591506001600160401b038211156124b1575f5ffd5b602001915036819003821315610a2b575f5ffd5b5f5f858511156124d3575f5ffd5b838611156124df575f5ffd5b5050820193919092039150565b803560208310156105d2575f19602084900360031b1b169291505056fea264697066735822122026fe427a593be622dd0d13eff79ee234fe2941ca97f991db1567e4255dcbbb6d64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005b22280886a2f5e09a49bea7e320eab0e5320e280000000000000000000000005ede4408e78c36c3ab16c5813c418624c2823b270000000000000000000000003c05f49af5fa3b13ba780e3f1924d1c112bde92200000000000000000000000043aedb439f497b1d51d1b263d64abf026b2aed5c
-----Decoded View---------------
Arg [0] : bns_ (address): 0x5B22280886a2F5e09A49bEa7E320eAB0e5320e28
Arg [1] : registrarController_ (address): 0x5ede4408e78c36C3AB16C5813c418624C2823b27
Arg [2] : reverseRegistrar_ (address): 0x3c05f49Af5fa3b13ba780e3f1924D1c112BdE922
Arg [3] : owner_ (address): 0x43aedB439F497b1d51D1b263D64Abf026B2Aed5c
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000005b22280886a2f5e09a49bea7e320eab0e5320e28
Arg [1] : 0000000000000000000000005ede4408e78c36c3ab16c5813c418624c2823b27
Arg [2] : 0000000000000000000000003c05f49af5fa3b13ba780e3f1924d1c112bde922
Arg [3] : 00000000000000000000000043aedb439f497b1d51d1b263d64abf026b2aed5c
Deployed Bytecode Sourcemap
1170:9054:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8526:495;;;;;;:::i;:::-;;:::i;:::-;;;546:14:28;;539:22;521:41;;509:2;494:18;8526:495:6;;;;;;;;607:233:25;;;;;;:::i;:::-;;:::i;:::-;;1814:1028:22;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2228:32:28;;;2210:51;;2198:2;2183:18;1814:1028:22;2064:203:28;2083:24:6;;;;;1301:507:18;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;9390:289:6:-;;;;;;:::i;:::-;;:::i;661:211:24:-;;;;;;:::i;:::-;;:::i;563:208:20:-;;;;;;:::i;:::-;;:::i;734:164:27:-;;;;;;:::i;:::-;;:::i;977:246:19:-;;;;;;:::i;:::-;;:::i;9957:265:6:-;;;;;;:::i;:::-;;:::i;1057:178:25:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;646:334:18:-;;;;;;:::i;:::-;;:::i;917:152:23:-;;;;;;:::i;:::-;;:::i;2293:101:0:-;;;:::i;514:203:23:-;;;;;;:::i;:::-;;:::i;2262:31:6:-;;;;;-1:-1:-1;;;;;2262:31:6;;;1229:331:19;;;;;;:::i;:::-;;:::i;1638:85:0:-;1710:6;;-1:-1:-1;;;;;1710:6:0;1638:85;;89:413:21;;;;;;:::i;:::-;;:::i;5262:257:6:-;;;;;;:::i;:::-;;:::i;6149:326::-;;;;;;:::i;:::-;;:::i;6909:159::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7023:22:6;;;7000:4;7023:22;;;:15;:22;;;;;;;;:28;;;;;;;;;:38;;;;;;;;;;;;;;6909:159;1613:143:26;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;938:159:20:-;;;;;;:::i;:::-;;:::i;1177:278:24:-;;;;;;:::i;:::-;1247:9;1309:20;;;;;;;;;;;;-1:-1:-1;;;;;1309:20:24;1347:41;;:19;:41;;;;;:47;;;;;;;:49;;1309:20;1398:49;;;;1347;;1177:278;;;;;12091:25:28;;;12147:2;12132:18;;12125:34;;;;12064:18;1177:278:24;11917:248:28;678:140:19;;;;;;:::i;:::-;;:::i;295:48:27:-;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;295:48:27;;;;;;-1:-1:-1;;;;;12704:31:28;;;12686:50;;12674:2;12659:18;295:48:27;12542:200:28;1422:185:26;;;;;;:::i;:::-;;:::i;909:268:22:-;;;;;;:::i;:::-;;:::i;5571:149:6:-;;;;;;:::i;:::-;-1:-1:-1;;;;;5676:27:6;;;5653:4;5676:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;5571:149;1566:181:19;;;;;;:::i;:::-;;:::i;2543:215:0:-;;;;;;:::i;:::-;;:::i;2173:34:6:-;;;;;-1:-1:-1;;;;;2173:34:6;;;8526:495;8895:4;-1:-1:-1;;;;;;8923:50:6;;-1:-1:-1;;;8923:50:6;;:90;;;8977:36;9001:11;8977:23;:36::i;:::-;8915:99;8526:495;-1:-1:-1;;8526:495:6:o;607:233:25:-;710:4;481:18:27;494:4;481:12;:18::i;:::-;473:43;;;;-1:-1:-1;;;473:43:27;;;;;;;:::i;:::-;;;;;;;;;726:39:25::1;744:20:::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;744:20:25::1;726:39:::0;;:17:::1;:39:::0;;;;;:45;;;;;;;;;;:50;;779:5;;;;726:50:::1;::::0;772:3;;;;726:50:::1;:::i;:::-;;;;;;;;;;;;;:58;;;;;;;:::i;:::-;;817:3;;799:34;;;;;;;:::i;:::-;;;;;;;;811:4;799:34;822:3;;827:5;;799:34;;;;;;;;;:::i;:::-;;;;;;;;607:233:::0;;;;;;:::o;1814:1028:22:-;1918:7;1982:20;;;;;;;;;;;;-1:-1:-1;;;;;1982:20:22;1959:44;;:22;:44;;;;;:50;;;;;;;;-1:-1:-1;;;;;;1959:63:22;;;;;;;;;;-1:-1:-1;;;;;1959:63:22;2036:25;;2032:74;;2084:11;-1:-1:-1;2077:18:22;;2032:74;2116:9;2128:10;2133:4;2128;:10::i;:::-;2116:22;-1:-1:-1;;;;;;2152:15:22;;2148:63;;2198:1;2183:17;;;;;;2148:63;2288:79;;-1:-1:-1;;;2288:79:22;;;18043:52:28;2222:12:22;;;;-1:-1:-1;;;;;2275:12:22;;;18016:18:28;;2288:79:22;;;-1:-1:-1;;2288:79:22;;;;;;;;;;;;;;-1:-1:-1;;;;;2288:79:22;-1:-1:-1;;;2288:79:22;;;2275:93;;;2288:79;2275:93;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2221:147;;;;2383:7;2382:8;:34;;;;2414:2;2394:10;:17;:22;2382:34;:57;;;;2420:10;2431:2;2420:14;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;2420:14:22;:19;2382:57;2378:152;;;2517:1;2502:17;;;;;;;;2378:152;2577:65;;-1:-1:-1;;;;;;18061:33:28;;2577:65:22;;;18043:52:28;-1:-1:-1;;;;;2564:12:22;;;18016:18:28;;2577:65:22;;;-1:-1:-1;;2577:65:22;;;;;;;;;;;;;;-1:-1:-1;;;;;2577:65:22;-1:-1:-1;;;2577:65:22;;;2564:79;;;2577:65;2564:79;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2540:103:22;;-1:-1:-1;2540:103:22;-1:-1:-1;2657:8:22;;;:34;;;2689:2;2669:10;:17;:22;2657:34;:57;;;;2695:10;2706:2;2695:14;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;2695:14:22;:19;2657:57;2653:164;;;2804:1;2789:17;;;;;;;;2653:164;-1:-1:-1;2834:1:22;;1814:1028;-1:-1:-1;;;;;1814:1028:22:o;1301:507:18:-;1390:7;1483:20;;;;;;;;;;;;-1:-1:-1;;;;;1483:20:18;1466:38;;:16;:38;;;;;;:44;;;;;;;;1399:12;;1521:249;1566:12;1551:11;:27;1521:249;;1618:26;;;1617:33;;;;:67;;-1:-1:-1;1683:1:18;1654:19;;;;;;;;;;:26;;;;;:::i;:::-;;;:30;1617:67;1613:147;;;1712:11;1725:6;:19;1732:11;1725:19;;;;;;;;;;;1704:41;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1613:147;1596:1;1580:17;1521:249;;;;1788:1;1791:9;;;;;;;;;;;;1780:21;;;;;1301:507;;;;;;:::o;9390:289:6:-;1531:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;9485:34:6;::::1;9481:75;;9528:28;;-1:-1:-1::0;;;9528:28:6::1;;;;;;;;;;;9481:75;9567:19;:42:::0;;-1:-1:-1;;;;;;9567:42:6::1;-1:-1:-1::0;;;;;9567:42:6;::::1;::::0;;::::1;::::0;;;9624:48:::1;::::0;::::1;::::0;-1:-1:-1;;9624:48:6::1;9390:289:::0;:::o;661:211:24:-;744:4;481:18:27;494:4;481:12;:18::i;:::-;473:43;;;;-1:-1:-1;;;473:43:27;;;;;;;:::i;:::-;810:15:24::1;::::0;;;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;780:20:24;;;;;;;;;;-1:-1:-1;;;;;780:20:24::1;760:41:::0;;:19:::1;:41:::0;;;;;:47;;;;;;;;:65;;;;;780:20;760:65;;::::1;::::0;;;;840:25;;12091::28;;;12132:18;;;12125:34;;;780:20:24;;840:25:::1;::::0;12064:18:28;840:25:24::1;;;;;;;;661:211:::0;;;;:::o;563:208:20:-;650:4;481:18:27;494:4;481:12;:18::i;:::-;473:43;;;;-1:-1:-1;;;473:43:27;;;;;;;:::i;:::-;666:40:20::1;685:20:::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;685:20:20::1;666:40:::0;;:18:::1;:40:::0;;;;;:46;;;;;;;;:53:::1;715:4:::0;;666:46;:53:::1;:::i;:::-;;753:4;734:30;759:4;;734:30;;;;;;;:::i;:164:27:-:0;796:4;481:18;494:4;481:12;:18::i;:::-;473:43;;;;-1:-1:-1;;;473:43:27;;;;;;;:::i;:::-;812:14:::1;:20:::0;;;::::1;::::0;;;;;;:22;;-1:-1:-1;;;;;812:22:27::1;::::0;::::1;::::0;::::1;:::i;:::-;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;;812:22:27;;::::1;;::::0;;::::1;::::0;;::::1;;;::::0;;;-1:-1:-1;870:20:27;;;::::1;::::0;;;;;;;;;849:42;;870:20;;;::::1;12686:50:28::0;;870:20:27;;-1:-1:-1;849:42:27::1;::::0;12659:18:28;849:42:27::1;;;;;;;734:164:::0;;:::o;977:246:19:-;1043:15;1070:14;1087:25;1092:4;359:2;1087:4;:25::i;:::-;1070:42;;1126:1;:8;1138:1;1126:13;1122:61;;-1:-1:-1;1170:1:19;;977:246;-1:-1:-1;;977:246:19:o;1122:61::-;1199:17;1214:1;1199:14;:17::i;:::-;1192:24;977:246;-1:-1:-1;;;977:246:19:o;9957:265:6:-;1531:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;10046:31:6;::::1;10042:69;;10086:25;;-1:-1:-1::0;;;10086:25:6::1;;;;;;;;;;;10042:69;10122:16;:36:::0;;-1:-1:-1;;;;;;10122:36:6::1;-1:-1:-1::0;;;;;10122:36:6;::::1;::::0;;::::1;::::0;;;10173:42:::1;::::0;::::1;::::0;-1:-1:-1;;10173:42:6::1;9957:265:::0;:::o;1057:178:25:-;1178:39;1196:20;;;;;;;;;;;;-1:-1:-1;;;;;1196:20:25;1178:39;;:17;:39;;;;;:45;;;;;;;;;;:50;;1146:13;;1178:45;:50;;1224:3;;;;1178:50;:::i;:::-;;;;;;;;;;;;;1171:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1057:178;;;;;:::o;646:334:18:-;746:4;481:18:27;494:4;481:12;:18::i;:::-;473:43;;;;-1:-1:-1;;;473:43:27;;;;;;;:::i;:::-;836:11:18;817:15:::1;831:1;836:11:::0;817:15:::1;:::i;:::-;816:31;815:38:::0;807:47:::1;;;;;;865:38;882:20:::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;882:20:18::1;865:38:::0;;:16:::1;:38:::0;;;;;:44;;;;;;;;:57;;;;;;;;:64:::1;925:4:::0;;865:57;:64:::1;:::i;:::-;-1:-1:-1::0;944:29:18::1;::::0;961:11;;955:4;;944:29:::1;::::0;;;::::1;646:334:::0;;;;;:::o;917:152:23:-;1017:39;1035:20;;;;;;;;;;;;-1:-1:-1;;;;;1035:20:23;1017:39;;:17;:39;;;;;:45;;;;;;;;1010:52;;985:13;;1017:45;1010:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;917:152;;;:::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;514:203:23:-;598:4;481:18:27;494:4;481:12;:18::i;:::-;473:43;;;;-1:-1:-1;;;473:43:27;;;;;;;:::i;:::-;614:39:23::1;632:20:::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;632:20:23::1;614:39:::0;;:17:::1;:39:::0;;;;;:45;;;;;;;;:55:::1;662:7:::0;;614:45;:55:::1;:::i;:::-;;696:4;684:26;702:7;;684:26;;;;;;;:::i;1229:331:19:-:0;1320:4;481:18:27;494:4;481:12;:18::i;:::-;473:43;;;;-1:-1:-1;;;473:43:27;;;;;;;:::i;:::-;1356:4:19::1;1341:33;1362:8;1372:1;1341:33;;;;;;;:::i;:::-;;;;;;;;359:2;1388:8;:25:::0;1384:97:::1;;1446:4;1434:36;1452:17;1467:1;1452:14;:17::i;:::-;1434:36;::::0;-1:-1:-1;;;;;2228:32:28;;;2210:51;;2198:2;2183:18;1434:36:19::1;;;;;;;1384:97;1490:43;1512:20:::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;1512:20:19::1;1490:43:::0;;:21:::1;:43:::0;;;;;:49;;;;;;;;:59;;;;;;;;:63:::1;1552:1:::0;1490:59;:63:::1;:::i;:::-;;1229:331:::0;;;;:::o;89:413:21:-;173:12;198;212:19;243:4;-1:-1:-1;;;;;235:24:21;260:4;235:30;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;197:68;;;;279:7;275:221;;;309:6;-1:-1:-1;302:13:21;;-1:-1:-1;302:13:21;275:221;464:6;458:13;451:4;443:6;439:17;432:40;5262:257:6;-1:-1:-1;;;;;5345:22:6;;:10;:22;5341:48;;5376:13;;-1:-1:-1;;;5376:13:6;;;;;;;;;;;5341:48;5419:10;5400:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;5400:40:6;;;;;;;;;;;;:51;;-1:-1:-1;;5400:51:6;;;;;;;;;;5466:46;;521:41:28;;;5400:40:6;;5419:10;5466:46;;494:18:28;5466:46:6;;;;;;;5262:257;;:::o;6149:326::-;-1:-1:-1;;;;;6236:22:6;;:10;:22;6232:48;;6267:13;;-1:-1:-1;;;6267:13:6;;;;;;;;;;;6232:48;6308:15;;-1:-1:-1;;;6308:15:6;;;;;22385:25:28;;;6308:3:6;-1:-1:-1;;;;;6308:9:6;;;;22358:18:28;;6308:15:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6294:29:6;:10;-1:-1:-1;;;;;6294:29:6;;6290:52;;6332:10;;-1:-1:-1;;;6332:10:6;;;;;;;;;;;6290:52;6369:10;6353:27;;;;:15;:27;;;;;;;;:33;;;;;;;;-1:-1:-1;;;;;6353:43:6;;;;;;;;;;;;:54;;-1:-1:-1;;6353:54:6;;;;;;;;;;6422:46;;2210:51:28;;;6353:54:6;:33;;6422:46;;2183:18:28;6422:46:6;;;;;;;6149:326;;;:::o;1613:143:26:-;1680:22;1721:28;1740:1;1744:4;;1721:10;:28::i;938:159:20:-;1044:40;1063:20;;;;;;;;;;;;-1:-1:-1;;;;;1063:20:20;1044:40;;:18;:40;;;;;:46;;;;;;;;1037:53;;1013:12;;1044:46;1037:53;;;:::i;678:140:19:-;748:4;481:18:27;494:4;481:12;:18::i;:::-;473:43;;;;-1:-1:-1;;;473:43:27;;;;;;;:::i;:::-;764:47:19::1;772:4;359:2;793:17;808:1;793:14;:17::i;764:47::-;678:140:::0;;;:::o;1422:185:26:-;1529:22;1574:26;1585:8;1595:4;;1574:10;:26::i;:::-;1567:33;1422:185;-1:-1:-1;;;;1422:185:26:o;909:268:22:-;1014:4;481:18:27;494:4;481:12;:18::i;:::-;473:43;;;;-1:-1:-1;;;473:43:27;;;;;;;:::i;:::-;1030:44:22::1;1053:20:::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;1053:20:22::1;1030:44:::0;;:22:::1;:44:::0;;;;;:50;;;;;;;;-1:-1:-1;;;;;;1030:63:22;::::1;::::0;;;;;;;;;;:77;;-1:-1:-1;;;;;;1030:77:22::1;-1:-1:-1::0;;;;;1030:77:22;::::1;::::0;;::::1;::::0;;;1122:48;;2210:51:28;;;1053:20:22;;1122:48:::1;::::0;2183:18:28;1122:48:22::1;;;;;;;909:268:::0;;;;:::o;1566:181:19:-;1681:43;1703:20;;;;;;;;;;;;-1:-1:-1;;;;;1703:20:19;1681:43;;:21;:43;;;;;:49;;;;;;;;:59;;;;;;;;1674:66;;1650:12;;1681:59;1674:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1566:181;;;;:::o;2543:215:0:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:0;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:0;;2700:1:::1;2672:31;::::0;::::1;2210:51:28::0;2183:18;;2672:31:0::1;2064:203:28::0;2623:91:0::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;1241:201:25:-;1326:4;-1:-1:-1;;;;;;1349:46:25;;-1:-1:-1;;;1349:46:25;;:86;;;1399:36;1423:11;1399:23;:36::i;7871:357:6:-;7973:19;;7939:4;;-1:-1:-1;;;;;7973:19:6;7959:10;:33;;:67;;-1:-1:-1;8010:16:6;;-1:-1:-1;;;;;8010:16:6;7996:10;:30;7959:67;7955:109;;;-1:-1:-1;8049:4:6;;7871:357;-1:-1:-1;7871:357:6:o;7955:109::-;8089:15;;-1:-1:-1;;;8089:15:6;;;;;22385:25:28;;;8073:13:6;;8089:3;-1:-1:-1;;;;;8089:9:6;;;;22358:18:28;;8089:15:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8073:31;-1:-1:-1;;;;;;8121:19:6;;8130:10;8121:19;;:58;;-1:-1:-1;;;;;;5676:27:6;;5653:4;5676:27;;;:18;:27;;;;;;;;8168:10;5676:37;;;;;;;;;;8144:35;8121:100;;;-1:-1:-1;;;;;;7023:22:6;;7000:4;7023:22;;;:15;:22;;;;;;;;:28;;;;;;;;8210:10;7023:38;;;;;;;;;;8183;6909:159;1796:162:0;1710:6;;-1:-1:-1;;;;;1710:6:0;735:10:1;1855:23:0;1851:101;;1901:40;;-1:-1:-1;;;1901:40:0;;735:10:1;1901:40:0;;;2210:51:28;2183:18;;1901:40:0;2064:203:28;2025:205:19;2088:17;2125:1;:8;2137:2;2125:14;2117:23;;;;;;-1:-1:-1;2195:2:19;2188:10;2182:17;-1:-1:-1;;;2178:36:19;;;2025:205::o;2912:187:0:-;3004:6;;;-1:-1:-1;;;;;3020:17:0;;;-1:-1:-1;;;;;;3020:17:0;;;;;;;3052:40;;3004:6;;;3020:17;3004:6;;3052:40;;2985:16;;3052:40;2975:124;2912:187;:::o;261:965:26:-;340:22;396:4;-1:-1:-1;;;;;384:24:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;374:34:26;-1:-1:-1;423:9:26;418:778;438:15;;;418:778;;;478:22;;474:209;;520:18;549:4;;554:1;549:7;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:13;;559:2;;557:1;;549:13;:::i;:::-;541:22;;;:::i;:::-;520:43;;603:8;589:10;:22;581:87;;;;-1:-1:-1;;;581:87:26;;24001:2:28;581:87:26;;;23983:21:28;24040:2;24020:18;;;24013:30;24079:34;24059:18;;;24052:62;-1:-1:-1;;;24130:18:28;;;24123:50;24190:19;;581:87:26;23799:416:28;581:87:26;502:181;474:209;698:12;;743:4;762;;767:1;762:7;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;735:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;697:73;;;;789:7;784:368;;820:13;;:17;816:322;;924:6;918:13;980:14;975:2;967:6;963:15;956:39;816:322;1063:56;;-1:-1:-1;;;1063:56:26;;24698:2:28;1063:56:26;;;24680:21:28;24737:2;24717:18;;;24710:30;24776:34;24756:18;;;24749:62;-1:-1:-1;;;24827:18:28;;;24820:44;24881:19;;1063:56:26;24496:410:28;816:322:26;1179:6;1166:7;1174:1;1166:10;;;;;;;;:::i;:::-;;;;;;;;;;:19;-1:-1:-1;;455:3:26;;418:778;;;;261:965;;;;;:::o;2236:190:19:-;2324:13;;;2334:2;2324:13;;;;;;;;;2294:14;;2324:13;;;;;;;;-1:-1:-1;;;;;;2389:20:19;;;;2384:2;2377:10;;2370:40;-1:-1:-1;2389:20:19;2236:190::o;1461:203:24:-;1546:4;-1:-1:-1;;;;;;1569:48:24;;-1:-1:-1;;;1569:48:24;;:88;;;1621:36;1645:11;1160:4:23;-1:-1:-1;;;;;;1183:46:23;;-1:-1:-1;;;1183:46:23;;:86;;;1233:36;1257:11;2933:4:22;-1:-1:-1;;;;;;2956:51:22;;-1:-1:-1;;;2956:51:22;;:91;;;3011:36;3035:11;1188:4:20;-1:-1:-1;;;;;;1211:53:20;;-1:-1:-1;;;1211:53:20;;:93;;;1268:36;1292:11;1838:4:19;-1:-1:-1;;;;;;1861:46:19;;-1:-1:-1;;;1861:46:19;;:99;;-1:-1:-1;;;;;;;1911:49:19;;-1:-1:-1;;;1911:49:19;1861:99;:151;;;;1976:36;2000:11;1899:4:18;-1:-1:-1;;;;;;1922:45:18;;-1:-1:-1;;;1922:45:18;;:85;;;1971:36;1995:11;989:4:27;-1:-1:-1;;;;;;1012:53:27;;-1:-1:-1;;;1012:53:27;;:93;;;1069:36;1093:11;1847:4:26;-1:-1:-1;;;;;;1870:47:26;;-1:-1:-1;;;1870:47:26;;:87;;-1:-1:-1;;;;;;;;;;861:40:2;;;1921:36:26;762:146:2;14:173:28;81:20;;-1:-1:-1;;;;;;130:32:28;;120:43;;110:71;;177:1;174;167:12;110:71;14:173;;;:::o;192:184::-;250:6;303:2;291:9;282:7;278:23;274:32;271:52;;;319:1;316;309:12;271:52;342:28;360:9;342:28;:::i;573:348::-;625:8;635:6;689:3;682:4;674:6;670:17;666:27;656:55;;707:1;704;697:12;656:55;-1:-1:-1;730:20:28;;-1:-1:-1;;;;;762:30:28;;759:50;;;805:1;802;795:12;759:50;842:4;834:6;830:17;818:29;;894:3;887:4;878:6;870;866:19;862:30;859:39;856:59;;;911:1;908;901:12;926:830;1027:6;1035;1043;1051;1059;1112:2;1100:9;1091:7;1087:23;1083:32;1080:52;;;1128:1;1125;1118:12;1080:52;1173:23;;;-1:-1:-1;1271:2:28;1256:18;;1243:32;-1:-1:-1;;;;;1287:30:28;;1284:50;;;1330:1;1327;1320:12;1284:50;1369:59;1420:7;1411:6;1400:9;1396:22;1369:59;:::i;:::-;1447:8;;-1:-1:-1;1343:85:28;-1:-1:-1;;1535:2:28;1520:18;;1507:32;-1:-1:-1;;;;;1551:32:28;;1548:52;;;1596:1;1593;1586:12;1548:52;1635:61;1688:7;1677:8;1666:9;1662:24;1635:61;:::i;:::-;926:830;;;;-1:-1:-1;926:830:28;;-1:-1:-1;1715:8:28;;1609:87;926:830;-1:-1:-1;;;926:830:28:o;1761:298::-;1828:6;1836;1889:2;1877:9;1868:7;1864:23;1860:32;1857:52;;;1905:1;1902;1895:12;1857:52;1950:23;;;-1:-1:-1;2016:37:28;2049:2;2034:18;;2016:37;:::i;:::-;2006:47;;1761:298;;;;;:::o;2491:346::-;2559:6;2567;2620:2;2608:9;2599:7;2595:23;2591:32;2588:52;;;2636:1;2633;2626:12;2588:52;-1:-1:-1;;2681:23:28;;;2801:2;2786:18;;;2773:32;;-1:-1:-1;2491:346:28:o;2842:288::-;2883:3;2921:5;2915:12;2948:6;2943:3;2936:19;3004:6;2997:4;2990:5;2986:16;2979:4;2974:3;2970:14;2964:47;3056:1;3049:4;3040:6;3035:3;3031:16;3027:27;3020:38;3119:4;3112:2;3108:7;3103:2;3095:6;3091:15;3087:29;3082:3;3078:39;3074:50;3067:57;;;2842:288;;;;:::o;3135:::-;3310:6;3299:9;3292:25;3353:2;3348;3337:9;3333:18;3326:30;3273:4;3373:44;3413:2;3402:9;3398:18;3390:6;3373:44;:::i;3428:131::-;-1:-1:-1;;;;;3503:31:28;;3493:42;;3483:70;;3549:1;3546;3539:12;3564:247;3623:6;3676:2;3664:9;3655:7;3651:23;3647:32;3644:52;;;3692:1;3689;3682:12;3644:52;3731:9;3718:23;3750:31;3775:5;3750:31;:::i;3816:466::-;3893:6;3901;3909;3962:2;3950:9;3941:7;3937:23;3933:32;3930:52;;;3978:1;3975;3968:12;3930:52;-1:-1:-1;;4023:23:28;;;4143:2;4128:18;;4115:32;;-1:-1:-1;4246:2:28;4231:18;;;4218:32;;3816:466;-1:-1:-1;3816:466:28:o;4287:524::-;4366:6;4374;4382;4435:2;4423:9;4414:7;4410:23;4406:32;4403:52;;;4451:1;4448;4441:12;4403:52;4496:23;;;-1:-1:-1;4594:2:28;4579:18;;4566:32;-1:-1:-1;;;;;4610:30:28;;4607:50;;;4653:1;4650;4643:12;4607:50;4692:59;4743:7;4734:6;4723:9;4719:22;4692:59;:::i;:::-;4287:524;;4770:8;;-1:-1:-1;4666:85:28;;-1:-1:-1;;;;4287:524:28:o;4816:226::-;4875:6;4928:2;4916:9;4907:7;4903:23;4899:32;4896:52;;;4944:1;4941;4934:12;4896:52;-1:-1:-1;4989:23:28;;4816:226;-1:-1:-1;4816:226:28:o;5801:219::-;5950:2;5939:9;5932:21;5913:4;5970:44;6010:2;5999:9;5995:18;5987:6;5970:44;:::i;6025:644::-;6113:6;6121;6129;6137;6190:2;6178:9;6169:7;6165:23;6161:32;6158:52;;;6206:1;6203;6196:12;6158:52;6251:23;;;-1:-1:-1;6371:2:28;6356:18;;6343:32;;-1:-1:-1;6452:2:28;6437:18;;6424:32;-1:-1:-1;;;;;6468:30:28;;6465:50;;;6511:1;6508;6501:12;6465:50;6550:59;6601:7;6592:6;6581:9;6577:22;6550:59;:::i;:::-;6025:644;;;;-1:-1:-1;6628:8:28;-1:-1:-1;;;;6025:644:28:o;6674:127::-;6735:10;6730:3;6726:20;6723:1;6716:31;6766:4;6763:1;6756:15;6790:4;6787:1;6780:15;6806:725;6848:5;6901:3;6894:4;6886:6;6882:17;6878:27;6868:55;;6919:1;6916;6909:12;6868:55;6959:6;6946:20;-1:-1:-1;;;;;6981:6:28;6978:30;6975:56;;;7011:18;;:::i;:::-;7060:2;7054:9;7152:2;7114:17;;-1:-1:-1;;7110:31:28;;;7143:2;7106:40;7102:54;7090:67;;-1:-1:-1;;;;;7172:34:28;;7208:22;;;7169:62;7166:88;;;7234:18;;:::i;:::-;7270:2;7263:22;7294;;;7335:19;;;7356:4;7331:30;7328:39;-1:-1:-1;7325:59:28;;;7380:1;7377;7370:12;7325:59;7444:6;7437:4;7429:6;7425:17;7418:4;7410:6;7406:17;7393:58;7499:1;7471:19;;;7492:4;7467:30;7460:41;;;;7475:6;6806:725;-1:-1:-1;;;6806:725:28:o;7536:554::-;7622:6;7630;7638;7691:2;7679:9;7670:7;7666:23;7662:32;7659:52;;;7707:1;7704;7697:12;7659:52;7752:23;;;-1:-1:-1;7872:2:28;7857:18;;7844:32;;-1:-1:-1;7953:2:28;7938:18;;7925:32;-1:-1:-1;;;;;7969:30:28;;7966:50;;;8012:1;8009;8002:12;7966:50;8035:49;8076:7;8067:6;8056:9;8052:22;8035:49;:::i;:::-;8025:59;;;7536:554;;;;;:::o;8095:534::-;8181:6;8189;8242:2;8230:9;8221:7;8217:23;8213:32;8210:52;;;8258:1;8255;8248:12;8210:52;8298:9;8285:23;-1:-1:-1;;;;;8323:6:28;8320:30;8317:50;;;8363:1;8360;8353:12;8317:50;8386:49;8427:7;8418:6;8407:9;8403:22;8386:49;:::i;:::-;8376:59;;;8488:2;8477:9;8473:18;8460:32;-1:-1:-1;;;;;8507:8:28;8504:32;8501:52;;;8549:1;8546;8539:12;8501:52;8572:51;8615:7;8604:8;8593:9;8589:24;8572:51;:::i;:::-;8562:61;;;8095:534;;;;;:::o;8856:160::-;8921:20;;8977:13;;8970:21;8960:32;;8950:60;;9006:1;9003;8996:12;9021:315;9086:6;9094;9147:2;9135:9;9126:7;9122:23;9118:32;9115:52;;;9163:1;9160;9153:12;9115:52;9202:9;9189:23;9221:31;9246:5;9221:31;:::i;:::-;9271:5;-1:-1:-1;9295:35:28;9326:2;9311:18;;9295:35;:::i;9341:435::-;9415:6;9423;9431;9484:2;9472:9;9463:7;9459:23;9455:32;9452:52;;;9500:1;9497;9490:12;9452:52;9545:23;;;-1:-1:-1;9644:2:28;9629:18;;9616:32;9657:33;9616:32;9657:33;:::i;:::-;9709:7;-1:-1:-1;9735:35:28;9766:2;9751:18;;9735:35;:::i;:::-;9725:45;;9341:435;;;;;:::o;9781:508::-;9858:6;9866;9874;9927:2;9915:9;9906:7;9902:23;9898:32;9895:52;;;9943:1;9940;9933:12;9895:52;9982:9;9969:23;10001:31;10026:5;10001:31;:::i;:::-;10051:5;-1:-1:-1;10129:2:28;10114:18;;10101:32;;-1:-1:-1;10211:2:28;10196:18;;10183:32;10224:33;10183:32;10224:33;:::i;:::-;10276:7;10266:17;;;9781:508;;;;;:::o;10294:374::-;10364:8;10374:6;10428:3;10421:4;10413:6;10409:17;10405:27;10395:55;;10446:1;10443;10436:12;10395:55;-1:-1:-1;10469:20:28;;-1:-1:-1;;;;;10501:30:28;;10498:50;;;10544:1;10541;10534:12;10498:50;10581:4;10573:6;10569:17;10557:29;;10641:3;10634:4;10624:6;10621:1;10617:14;10609:6;10605:27;10601:38;10598:47;10595:67;;;10658:1;10655;10648:12;10673:455;10770:6;10778;10831:2;10819:9;10810:7;10806:23;10802:32;10799:52;;;10847:1;10844;10837:12;10799:52;10887:9;10874:23;-1:-1:-1;;;;;10912:6:28;10909:30;10906:50;;;10952:1;10949;10942:12;10906:50;10991:77;11060:7;11051:6;11040:9;11036:22;10991:77;:::i;:::-;11087:8;;10965:103;;-1:-1:-1;10673:455:28;-1:-1:-1;;;;10673:455:28:o;11133:779::-;11293:4;11341:2;11330:9;11326:18;11371:2;11360:9;11353:21;11394:6;11429;11423:13;11460:6;11452;11445:22;11498:2;11487:9;11483:18;11476:25;;11560:2;11550:6;11547:1;11543:14;11532:9;11528:30;11524:39;11510:53;;11598:2;11590:6;11586:15;11619:1;11629:254;11643:6;11640:1;11637:13;11629:254;;;11736:2;11732:7;11720:9;11712:6;11708:22;11704:36;11699:3;11692:49;11764:39;11796:6;11787;11781:13;11764:39;:::i;:::-;11754:49;-1:-1:-1;11838:2:28;11861:12;;;;11826:15;;;;;11665:1;11658:9;11629:254;;;-1:-1:-1;11900:6:28;;11133:779;-1:-1:-1;;;;;;11133:779:28:o;12170:367::-;12238:6;12246;12299:2;12287:9;12278:7;12274:23;12270:32;12267:52;;;12315:1;12312;12305:12;12267:52;12360:23;;;-1:-1:-1;12459:2:28;12444:18;;12431:32;12472:33;12431:32;12472:33;:::i;:::-;12524:7;12514:17;;;12170:367;;;;;:::o;12747:569::-;12853:6;12861;12869;12922:2;12910:9;12901:7;12897:23;12893:32;12890:52;;;12938:1;12935;12928:12;12890:52;12983:23;;;-1:-1:-1;13081:2:28;13066:18;;13053:32;-1:-1:-1;;;;;13097:30:28;;13094:50;;;13140:1;13137;13130:12;13094:50;13179:77;13248:7;13239:6;13228:9;13224:22;13179:77;:::i;13321:439::-;13397:6;13405;13413;13466:2;13454:9;13445:7;13441:23;13437:32;13434:52;;;13482:1;13479;13472:12;13434:52;13527:23;;;-1:-1:-1;13593:37:28;13626:2;13611:18;;13593:37;:::i;:::-;13583:47;;13682:2;13671:9;13667:18;13654:32;13695:33;13720:7;13695:33;:::i;13765:388::-;13833:6;13841;13894:2;13882:9;13873:7;13869:23;13865:32;13862:52;;;13910:1;13907;13900:12;13862:52;13949:9;13936:23;13968:31;13993:5;13968:31;:::i;:::-;14018:5;-1:-1:-1;14075:2:28;14060:18;;14047:32;14088:33;14047:32;14088:33;:::i;14158:336::-;14360:2;14342:21;;;14399:2;14379:18;;;14372:30;-1:-1:-1;;;14433:2:28;14418:18;;14411:42;14485:2;14470:18;;14158:336::o;14499:273::-;14684:6;14676;14671:3;14658:33;14640:3;14710:16;;14735:13;;;14710:16;14499:273;-1:-1:-1;14499:273:28:o;14777:380::-;14856:1;14852:12;;;;14899;;;14920:61;;14974:4;14966:6;14962:17;14952:27;;14920:61;15027:2;15019:6;15016:14;14996:18;14993:38;14990:161;;15073:10;15068:3;15064:20;15061:1;15054:31;15108:4;15105:1;15098:15;15136:4;15133:1;15126:15;14990:161;;14777:380;;;:::o;15288:518::-;15390:2;15385:3;15382:11;15379:421;;;15426:5;15423:1;15416:16;15470:4;15467:1;15457:18;15540:2;15528:10;15524:19;15521:1;15517:27;15511:4;15507:38;15576:4;15564:10;15561:20;15558:47;;;-1:-1:-1;15599:4:28;15558:47;15654:2;15649:3;15645:12;15642:1;15638:20;15632:4;15628:31;15618:41;;15709:81;15727:2;15720:5;15717:13;15709:81;;;15786:1;15772:16;;15753:1;15742:13;15709:81;;15982:1198;-1:-1:-1;;;;;16101:3:28;16098:27;16095:53;;;16128:18;;:::i;:::-;16157:94;16247:3;16207:38;16239:4;16233:11;16207:38;:::i;:::-;16201:4;16157:94;:::i;:::-;16277:1;16302:2;16297:3;16294:11;16319:1;16314:608;;;;16966:1;16983:3;16980:93;;;-1:-1:-1;17039:19:28;;;17026:33;16980:93;-1:-1:-1;;15939:1:28;15935:11;;;15931:24;15927:29;15917:40;15963:1;15959:11;;;15914:57;17086:78;;16287:887;;16314:608;15235:1;15228:14;;;15272:4;15259:18;;-1:-1:-1;;16350:17:28;;;16465:229;16479:7;16476:1;16473:14;16465:229;;;16568:19;;;16555:33;16540:49;;16675:4;16660:20;;;;16628:1;16616:14;;;;16495:12;16465:229;;;16469:3;16722;16713:7;16710:16;16707:159;;;16846:1;16842:6;16836:3;16830;16827:1;16823:11;16819:21;16815:34;16811:39;16798:9;16793:3;16789:19;16776:33;16772:79;16764:6;16757:95;16707:159;;;16909:1;16903:3;16900:1;16896:11;16892:19;16886:4;16879:33;16287:887;;15982:1198;;;:::o;17185:267::-;17274:6;17269:3;17262:19;17326:6;17319:5;17312:4;17307:3;17303:14;17290:43;-1:-1:-1;17378:1:28;17353:16;;;17371:4;17349:27;;;17342:38;;;;17434:2;17413:15;;;-1:-1:-1;;17409:29:28;17400:39;;;17396:50;;17185:267::o;17457:437::-;17674:2;17663:9;17656:21;17637:4;17700:62;17758:2;17747:9;17743:18;17735:6;17727;17700:62;:::i;:::-;17810:9;17802:6;17798:22;17793:2;17782:9;17778:18;17771:50;17838;17881:6;17873;17865;17838:50;:::i;:::-;17830:58;17457:437;-1:-1:-1;;;;;;;17457:437:28:o;18106:301::-;18235:3;18273:6;18267:13;18319:6;18312:4;18304:6;18300:17;18295:3;18289:37;18381:1;18345:16;;18370:13;;;-1:-1:-1;18345:16:28;18106:301;-1:-1:-1;18106:301:28:o;18412:127::-;18473:10;18468:3;18464:20;18461:1;18454:31;18504:4;18501:1;18494:15;18528:4;18525:1;18518:15;19745:245;19902:2;19891:9;19884:21;19865:4;19922:62;19980:2;19969:9;19965:18;19957:6;19949;19922:62;:::i;19995:127::-;20056:10;20051:3;20047:20;20044:1;20037:31;20087:4;20084:1;20077:15;20111:4;20108:1;20101:15;20127:204;20165:3;-1:-1:-1;;;;;20202:5:28;20198:30;-1:-1:-1;;;;;20243:7:28;20240:31;20237:57;;20274:18;;:::i;:::-;20323:1;20310:15;;20127:204;-1:-1:-1;;20127:204:28:o;20336:128::-;20403:9;;;20424:11;;;20421:37;;;20438:18;;:::i;20937:1297::-;21061:3;21055:10;-1:-1:-1;;;;;21080:6:28;21077:30;21074:56;;;21110:18;;:::i;:::-;21139:97;21229:6;21189:38;21221:4;21215:11;21189:38;:::i;:::-;21183:4;21139:97;:::i;:::-;21285:4;21316:2;21305:14;;21333:1;21328:649;;;;22021:1;22038:6;22035:89;;;-1:-1:-1;22090:19:28;;;22084:26;22035:89;-1:-1:-1;;15939:1:28;15935:11;;;15931:24;15927:29;15917:40;15963:1;15959:11;;;15914:57;22137:81;;21298:930;;21328:649;15235:1;15228:14;;;15272:4;15259:18;;-1:-1:-1;;21364:20:28;;;21482:222;21496:7;21493:1;21490:14;21482:222;;;21578:19;;;21572:26;21557:42;;21685:4;21670:20;;;;21638:1;21626:14;;;;21512:12;21482:222;;;21486:3;21732:6;21723:7;21720:19;21717:201;;;21793:19;;;21787:26;-1:-1:-1;;21876:1:28;21872:14;;;21888:3;21868:24;21864:37;21860:42;21845:58;21830:74;;21717:201;-1:-1:-1;;;;21964:1:28;21948:14;;;21944:22;21931:36;;-1:-1:-1;20937:1297:28:o;22421:251::-;22491:6;22544:2;22532:9;22523:7;22519:23;22515:32;22512:52;;;22560:1;22557;22550:12;22512:52;22592:9;22586:16;22611:31;22636:5;22611:31;:::i;22677:521::-;22754:4;22760:6;22820:11;22807:25;22914:2;22910:7;22899:8;22883:14;22879:29;22875:43;22855:18;22851:68;22841:96;;22933:1;22930;22923:12;22841:96;22960:33;;23012:20;;;-1:-1:-1;;;;;;23044:30:28;;23041:50;;;23087:1;23084;23077:12;23041:50;23120:4;23108:17;;-1:-1:-1;23151:14:28;23147:27;;;23137:38;;23134:58;;;23188:1;23185;23178:12;23203:331;23308:9;23319;23361:8;23349:10;23346:24;23343:44;;;23383:1;23380;23373:12;23343:44;23412:6;23402:8;23399:20;23396:40;;;23432:1;23429;23422:12;23396:40;-1:-1:-1;;23458:23:28;;;23503:25;;;;;-1:-1:-1;23203:331:28:o;23539:255::-;23659:19;;23698:2;23690:11;;23687:101;;;-1:-1:-1;;23759:2:28;23755:12;;;23752:1;23748:20;23744:33;23733:45;23539:255;;;;:::o
Swarm Source
ipfs://26fe427a593be622dd0d13eff79ee234fe2941ca97f991db1567e4255dcbbb6d
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.