More Info
Private Name Tags
ContractCreator
Sponsored
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
107516069 | 432 days ago | 0 ETH | ||||
107516069 | 432 days ago | 0 ETH | ||||
107516069 | 432 days ago | 0 ETH | ||||
107442160 | 434 days ago | 0 ETH | ||||
107442160 | 434 days ago | 0 ETH | ||||
107442160 | 434 days ago | 0 ETH | ||||
107442160 | 434 days ago | 0 ETH | ||||
107442160 | 434 days ago | 0 ETH | ||||
107442160 | 434 days ago | 0 ETH | ||||
107442160 | 434 days ago | 0 ETH | ||||
107442160 | 434 days ago | 0 ETH | ||||
107442160 | 434 days ago | 0 ETH | ||||
106783032 | 449 days ago | 0 ETH | ||||
106783032 | 449 days ago | 0 ETH | ||||
106783032 | 449 days ago | 0 ETH | ||||
106783032 | 449 days ago | 0 ETH | ||||
106783032 | 449 days ago | 0 ETH | ||||
106783032 | 449 days ago | 0 ETH | ||||
106783032 | 449 days ago | 0 ETH | ||||
106783032 | 449 days ago | 0 ETH | ||||
106783032 | 449 days ago | 0 ETH | ||||
106783032 | 449 days ago | 0 ETH | ||||
106783032 | 449 days ago | 0 ETH | ||||
106783032 | 449 days ago | 0 ETH | ||||
106783032 | 449 days ago | 0 ETH |
Loading...
Loading
Contract Name:
VaultRegistry
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at optimistic.etherscan.io on 2022-09-09 */ // File: github/pandadefi/registry/contracts/IVault.sol pragma solidity ^0.8.15; interface IVault { function token() external view returns (address); function apiVersion() external view returns (string memory); function governance() external view returns (address); function initialize( address _token, address _governance, address _rewards, string calldata _name, string calldata _symbol, address _guardian ) external; } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @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 { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); _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); } } // File: github/pandadefi/registry/contracts/VaultRegistry.sol pragma solidity ^0.8.15; interface IReleaseRegistry { function numReleases() external view returns (uint256); function releases(uint256 _version) external view returns (address); function newVault( address _token, address _governance, address _guardian, address _rewards, string calldata _name, string calldata _symbol, uint256 _releaseDelta ) external returns (address); } contract VaultRegistry is Ownable { uint256 constant DEFAULT_TYPE = 1; address immutable LEGACY_REGISTRY; address public releaseRegistry; // token => vaults mapping(address => address[]) public vaults; address[] public tokens; mapping(address => bool) public isRegistered; mapping(address => uint256) public vaultType; mapping(address => bool) public approvedVaultsOwner; mapping(address => bool) public isVaultEndorsed; mapping(address => bool) public vaultEndorsers; event NewVault( address indexed token, uint256 indexed vaultId, uint256 vaultType, address vault, string apiVersion ); event ApprovedVaultOwnerUpdated(address governance, bool approved); event ApprovedVaultEndorser(address account, bool canEndorse); event ReleaseRegistryUpdated(address newRegistry); error GovernanceMismatch(address vault); error NotAllowedToEndorse(); error VersionMissmatch(string v1, string v2); error EndorseVaultWithSameVersion(address existingVault, address newVault); error VaultAlreadyEndorsed(address vault, uint256 vaultType); error InvalidVaultType(); constructor(address _releaseRegistry, address _legacyRegistry) { releaseRegistry = _releaseRegistry; LEGACY_REGISTRY = _legacyRegistry; emit ReleaseRegistryUpdated(_releaseRegistry); } function numTokens() external view returns (uint256) { return tokens.length; } function numVaults(address _token) external view returns (uint256) { return _numVaults(_token); } function _numVaults(address _token) internal view returns (uint256) { return vaults[_token].length; } function _latestVault(address _token) internal view returns (address) { uint256 length = _numVaults(_token); if (length == 0) { return _fetchFromLegacy(_token); } return vaults[_token][length - 1]; } function _latestVaultOfType(address _token, uint256 _type) internal view returns (address) { uint256 length = _numVaults(_token); if (length == 0) { return address(0); } uint256 i = length - 1; while (true) { address vault = vaults[_token][i]; if (vaultType[vault] == _type) { return vault; } if (i == 0) { break; } unchecked { i--; } } return address(0); } function _fetchFromLegacy(address _token) internal view returns (address) { bytes memory data = abi.encodeWithSignature( "latestVault(address)", _token ); (bool success, bytes memory returnBytes) = address(LEGACY_REGISTRY) .staticcall(data); if (success) { return abi.decode(returnBytes, (address)); } return address(0); } /** @notice Returns the latest deployed vault for the given token. @dev Return zero if no vault is associated with the token @param _token The token address to find the latest vault for. @return The address of the latest vault for the given token. */ function latestVault(address _token) external view returns (address) { return _latestVault(_token); } /** @notice Returns the latest deployed vault for the given token and type. @dev Return zero if no vault exists for both token and type. @param _token The token address to find the latest vault for. @param _type The vault type to find the latest vault for. @return The address of the latest vault found matching both token and type. */ function latestVaultOfType(address _token, uint256 _type) external view returns (address) { return _latestVaultOfType(_token, _type); } function _registerVault( address _token, address _vault, uint256 _type ) internal { // Check if there is an existing deployment for this token + type combination at the particular api version // NOTE: This doesn't check for strict semver-style linearly increasing release versions if (vaultType[_vault] != 0) { revert VaultAlreadyEndorsed(_vault, vaultType[_vault]); } if (_type == 0) { revert InvalidVaultType(); } address latest = _latestVaultOfType(_token, _type); if (latest != address(0)) { if ( keccak256(bytes(IVault(latest).apiVersion())) == keccak256(bytes(IVault(_vault).apiVersion())) ) { revert EndorseVaultWithSameVersion(latest, _vault); } } uint256 id = _numVaults(_token); // Update the latest deployment vaults[_token].push(_vault); vaultType[_vault] = _type; // Register tokens for endorsed vaults if (isRegistered[_token] == false) { isRegistered[_token] = true; tokens.push(_token); } isVaultEndorsed[_vault] = true; emit NewVault(_token, id, _type, _vault, IVault(_vault).apiVersion()); } /** @notice Adds an existing vault to the list of "endorsed" vaults for that token. @dev `governance` is set in the new vault as `governance`, with no ability to override. Throws if caller isn't `governance`. Throws if `vault`'s governance isn't `governance`. Throws if no releases are registered yet. Throws if `vault`'s api version does not match latest release. Throws if there already is a deployment for the vault's token with the latest api version. Emits a `NewVault` event. @param _vault The vault that will be endorsed by the Registry. @param _releaseDelta Specify the number of releases prior to the latest to use as a target. DEFAULT_TYPE is latest. @param _type Vault type */ function endorseVault( address _vault, uint256 _releaseDelta, uint256 _type ) public { if (vaultEndorsers[msg.sender] == false) { revert NotAllowedToEndorse(); } if (approvedVaultsOwner[IVault(_vault).governance()] == false) { revert GovernanceMismatch(_vault); } // NOTE: Underflow if no releases created yet, or targeting prior to release history uint256 releaseTarget = IReleaseRegistry(releaseRegistry) .numReleases() - 1 - _releaseDelta; // dev: no releases string memory apiVersion = IVault( IReleaseRegistry(releaseRegistry).releases(releaseTarget) ).apiVersion(); if ( keccak256(bytes((IVault(_vault).apiVersion()))) != keccak256(bytes((apiVersion))) ) { revert VersionMissmatch(IVault(_vault).apiVersion(), apiVersion); } // Add to the end of the list of vaults for token _registerVault(IVault(_vault).token(), _vault, _type); } function endorseVault(address _vault, uint256 _releaseDelta) external { endorseVault(_vault, _releaseDelta, DEFAULT_TYPE); } function endorseVault(address _vault) external { endorseVault(_vault, 0, DEFAULT_TYPE); } function newVault( address _token, address _guardian, address _rewards, string calldata _name, string calldata _symbol, uint256 _releaseDelta ) external returns (address) { return newVault( _token, msg.sender, _guardian, _rewards, _name, _symbol, _releaseDelta, DEFAULT_TYPE ); } /** @notice Create a new vault for the given token using the latest release in the registry, as a simple "forwarder-style" delegatecall proxy to the latest release. @dev `governance` is set in the new vault as `governance`, with no ability to override. Throws if caller isn't `governance`. Throws if no releases are registered yet. Throws if there already is a registered vault for the given token with the latest api version. Emits a `NewVault` event. @param _token The token that may be deposited into the new Vault. @param _guardian The address authorized for guardian interactions in the new Vault. @param _rewards The address to use for collecting rewards in the new Vault @param _name Specify a custom Vault name. Set to empty string for DEFAULT_TYPE choice. @param _symbol Specify a custom Vault symbol name. Set to empty string for DEFAULT_TYPE choice. @param _releaseDelta Specify the number of releases prior to the latest to use as a target. DEFAULT_TYPE is latest. @param _type Vault type @return The address of the newly-deployed vault */ function newVault( address _token, address _governance, address _guardian, address _rewards, string calldata _name, string calldata _symbol, uint256 _releaseDelta, uint256 _type ) public returns (address) { require(vaultEndorsers[msg.sender], "unauthorized"); require(approvedVaultsOwner[_governance], "not allowed vault owner"); address vault = IReleaseRegistry(releaseRegistry).newVault( _token, _governance, _guardian, _rewards, _name, _symbol, _releaseDelta ); _registerVault(_token, vault, _type); return vault; } /** @notice Set the ability of a particular tagger to tag current vaults. @dev Throws if caller is not `governance`. @param _addr The address to approve or deny access. @param _approved Allowed to endorse */ function setVaultEndorsers(address _addr, bool _approved) external onlyOwner { vaultEndorsers[_addr] = _approved; emit ApprovedVaultEndorser(_addr, _approved); } /** @notice Set the vaults owners @dev Throws if caller is not `governance`. @param _addr The address to approve or deny access. @param _approved Allowed to own vault */ function setApprovedVaultsOwner(address _addr, bool _approved) external onlyOwner { approvedVaultsOwner[_addr] = _approved; emit ApprovedVaultOwnerUpdated(_addr, _approved); } function updateReleaseRegistry(address _newRegistry) external onlyOwner { releaseRegistry = _newRegistry; emit ReleaseRegistryUpdated(_newRegistry); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_releaseRegistry","type":"address"},{"internalType":"address","name":"_legacyRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"existingVault","type":"address"},{"internalType":"address","name":"newVault","type":"address"}],"name":"EndorseVaultWithSameVersion","type":"error"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"GovernanceMismatch","type":"error"},{"inputs":[],"name":"InvalidVaultType","type":"error"},{"inputs":[],"name":"NotAllowedToEndorse","type":"error"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint256","name":"vaultType","type":"uint256"}],"name":"VaultAlreadyEndorsed","type":"error"},{"inputs":[{"internalType":"string","name":"v1","type":"string"},{"internalType":"string","name":"v2","type":"string"}],"name":"VersionMissmatch","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"canEndorse","type":"bool"}],"name":"ApprovedVaultEndorser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"governance","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovedVaultOwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"vaultId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"vaultType","type":"uint256"},{"indexed":false,"internalType":"address","name":"vault","type":"address"},{"indexed":false,"internalType":"string","name":"apiVersion","type":"string"}],"name":"NewVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRegistry","type":"address"}],"name":"ReleaseRegistryUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedVaultsOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"endorseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_releaseDelta","type":"uint256"},{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"endorseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_releaseDelta","type":"uint256"}],"name":"endorseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isVaultEndorsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"latestVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"latestVaultOfType","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_guardian","type":"address"},{"internalType":"address","name":"_rewards","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_releaseDelta","type":"uint256"},{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"newVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_guardian","type":"address"},{"internalType":"address","name":"_rewards","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_releaseDelta","type":"uint256"}],"name":"newVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"numTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"numVaults","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releaseRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovedVaultsOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setVaultEndorsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRegistry","type":"address"}],"name":"updateReleaseRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vaultEndorsers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vaultType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"vaults","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b50604051620018033803806200180383398101604081905262000034916200010c565b6200003f336200009f565b600180546001600160a01b0319166001600160a01b038481169182179092559082166080526040519081527f65104c4699f20a240a0ce199d616669f9518c0469b60b2a8c904f7cd4eb471fd9060200160405180910390a1505062000144565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200010757600080fd5b919050565b600080604083850312156200012057600080fd5b6200012b83620000ef565b91506200013b60208401620000ef565b90509250929050565b6080516116a362000160600039600061109f01526116a36000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80638e499bcf116100c3578063c3c5a5471161007c578063c3c5a547146102e6578063c9b8f05514610309578063dbf4246114610329578063e177dc701461033c578063f2fde38b1461034f578063f9c7bba51461036257600080fd5b80638e499bcf14610265578063931074ba146102775780639de312f01461028a578063a0dd0bcf1461029d578063b0b40fce146102c0578063b366a35c146102d357600080fd5b806351f69a6e1161011557806351f69a6e146101f05780636fc74f9e14610203578063715018a6146102265780637bbfc69e1461022e5780638cd473c2146102415780638da5cb5b1461025457600080fd5b8063125d43361461015257806319ee073e1461018257806329b2e0c6146101955780632b017c8b146101aa5780634f64b2be146101dd575b600080fd5b610165610160366004611191565b610375565b6040516001600160a01b0390911681526020015b60405180910390f35b600154610165906001600160a01b031681565b6101a86101a336600461125e565b6104d0565b005b6101cd6101b836600461125e565b60066020526000908152604090205460ff1681565b6040519015158152602001610179565b6101656101eb36600461127b565b6104e0565b6101a86101fe366004611294565b61050a565b6101cd61021136600461125e565b60086020526000908152604090205460ff1681565b6101a8610576565b61016561023c3660046112d2565b61058a565b6101a861024f36600461125e565b6105c2565b6000546001600160a01b0316610165565b6003545b604051908152602001610179565b6101a86102853660046112fe565b61061e565b6101656102983660046112d2565b6109db565b6101cd6102ab36600461125e565b60076020526000908152604090205460ff1681565b6101656102ce366004611333565b6109f0565b6101a86102e13660046112d2565b610a12565b6101cd6102f436600461125e565b60046020526000908152604090205460ff1681565b61026961031736600461125e565b60056020526000908152604090205481565b6101a8610337366004611294565b610a22565b61016561034a36600461125e565b610a86565b6101a861035d36600461125e565b610a91565b61026961037036600461125e565b610b07565b3360009081526008602052604081205460ff166103c85760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b60448201526064015b60405180910390fd5b6001600160a01b038a1660009081526006602052604090205460ff166104305760405162461bcd60e51b815260206004820152601760248201527f6e6f7420616c6c6f776564207661756c74206f776e657200000000000000000060448201526064016103bf565b60015460405163e1c6ba5d60e01b81526000916001600160a01b03169063e1c6ba5d90610471908f908f908f908f908f908f908f908f908f9060040161140b565b6020604051808303816000875af1158015610490573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b49190611472565b90506104c18c8285610b25565b9b9a5050505050505050505050565b6104dd816000600161061e565b50565b600381815481106104f057600080fd5b6000918252602090912001546001600160a01b0316905081565b610512610e5d565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527fc9219e6871f1efb578009a697784e88c6375187771bda2c8899b8ead4bbea82291015b60405180910390a15050565b61057e610e5d565b6105886000610eb7565b565b600260205281600052604060002081815481106105a657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6105ca610e5d565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f65104c4699f20a240a0ce199d616669f9518c0469b60b2a8c904f7cd4eb471fd9060200160405180910390a150565b3360009081526008602052604081205460ff161515900361065257604051632e1027db60e11b815260040160405180910390fd5b60066000846001600160a01b0316635aa6e6756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b89190611472565b6001600160a01b03168152602081019190915260400160009081205460ff16151590036107035760405163d0c41e7960e01b81526001600160a01b03841660048201526024016103bf565b60008260018060009054906101000a90046001600160a01b03166001600160a01b03166356e0a94b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077e919061148f565b61078891906114a8565b61079291906114a8565b60015460405163b6a9f40f60e01b8152600481018390529192506000916001600160a01b039091169063b6a9f40f90602401602060405180830381865afa1580156107e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108059190611472565b6001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261086a9190810190611513565b90508080519060200120856001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108da9190810190611513565b805190602001201461096857846001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610924573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261094c9190810190611513565b81604051639102966160e01b81526004016103bf9291906115ec565b6109d4856001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cd9190611472565b8685610b25565b5050505050565b60006109e78383610f07565b90505b92915050565b6000610a0589338a8a8a8a8a8a8a6001610375565b9998505050505050505050565b610a1e8282600161061e565b5050565b610a2a610e5d565b6001600160a01b038216600081815260086020908152604091829020805460ff19168515159081179091558251938452908301527f0432d20aa3457fdf75aad100b0473a9a5a3f29275b066abbeb243dc7e0db4a48910161056a565b60006109ea82610fc8565b610a99610e5d565b6001600160a01b038116610afe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103bf565b6104dd81610eb7565b6001600160a01b0381166000908152600260205260408120546109ea565b6001600160a01b03821660009081526005602052604090205415610b7f576001600160a01b038216600081815260056020526040908190205490516314e3ee7560e01b8152600481019290925260248201526044016103bf565b80600003610ba05760405163031366db60e01b815260040160405180910390fd5b6000610bac8483610f07565b90506001600160a01b03811615610cc857826001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610bfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c239190810190611513565b80519060200120816001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c68573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c909190810190611513565b8051906020012003610cc8576040516318aec0af60e01b81526001600160a01b038083166004830152841660248201526044016103bf565b6001600160a01b0384811660008181526002602090815260408083208054600181018255908452828420810180546001600160a01b031916968a16968717905594835260058252808320879055928252600490529081205460ff1615159003610d91576001600160a01b0385166000818152600460205260408120805460ff191660019081179091556003805491820181559091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b03191690911790555b6001600160a01b03808516600081815260076020526040808220805460ff191660011790558051630258294160e41b8152905185948a16937f665814fc0711cd098dc48648ad2f63460a3cb758a6aca058c168d7a9067d9f389389938b936325829410926004808401939192918290030181865afa158015610e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e3f9190810190611513565b604051610e4e93929190611611565b60405180910390a35050505050565b6000546001600160a01b031633146105885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bf565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03821660009081526002602052604081205480600003610f325760009150506109ea565b6000610f3f6001836114a8565b90505b6001600160a01b0385166000908152600260205260408120805483908110610f6c57610f6c61163b565b60009182526020808320909101546001600160a01b03168083526005909152604090912054909150859003610fa55792506109ea915050565b81600003610fb35750610fbd565b5060001901610f42565b506000949350505050565b6001600160a01b03811660009081526002602052604081205480600003610ff957610ff283611048565b9392505050565b6001600160a01b038316600090815260026020526040902061101c6001836114a8565b8154811061102c5761102c61163b565b6000918252602090912001546001600160a01b03169392505050565b6040516001600160a01b0382166024820152600090819060440160408051601f198184030181529181526020820180516001600160e01b0316630e177dc760e41b1790525190915060009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906110cb908590611651565b600060405180830381855afa9150503d8060008114611106576040519150601f19603f3d011682016040523d82523d6000602084013e61110b565b606091505b50915091508115610fbd578080602001905181019061112a9190611472565b95945050505050565b6001600160a01b03811681146104dd57600080fd5b60008083601f84011261115a57600080fd5b50813567ffffffffffffffff81111561117257600080fd5b60208301915083602082850101111561118a57600080fd5b9250929050565b6000806000806000806000806000806101008b8d0312156111b157600080fd5b8a356111bc81611133565b995060208b01356111cc81611133565b985060408b01356111dc81611133565b975060608b01356111ec81611133565b965060808b013567ffffffffffffffff8082111561120957600080fd5b6112158e838f01611148565b909850965060a08d013591508082111561122e57600080fd5b5061123b8d828e01611148565b9b9e9a9d50989b979a969995989760c08101359660e09091013595509350505050565b60006020828403121561127057600080fd5b8135610ff281611133565b60006020828403121561128d57600080fd5b5035919050565b600080604083850312156112a757600080fd5b82356112b281611133565b9150602083013580151581146112c757600080fd5b809150509250929050565b600080604083850312156112e557600080fd5b82356112f081611133565b946020939093013593505050565b60008060006060848603121561131357600080fd5b833561131e81611133565b95602085013595506040909401359392505050565b60008060008060008060008060c0898b03121561134f57600080fd5b883561135a81611133565b9750602089013561136a81611133565b9650604089013561137a81611133565b9550606089013567ffffffffffffffff8082111561139757600080fd5b6113a38c838d01611148565b909750955060808b01359150808211156113bc57600080fd5b506113c98b828c01611148565b999c989b50969995989497949560a00135949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038a81168252898116602083015288811660408301528716606082015260e06080820181905260009061144890830187896113e2565b82810360a084015261145b8186886113e2565b9150508260c08301529a9950505050505050505050565b60006020828403121561148457600080fd5b8151610ff281611133565b6000602082840312156114a157600080fd5b5051919050565b6000828210156114c857634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052604160045260246000fd5b60005b838110156114fe5781810151838201526020016114e6565b8381111561150d576000848401525b50505050565b60006020828403121561152557600080fd5b815167ffffffffffffffff8082111561153d57600080fd5b818401915084601f83011261155157600080fd5b815181811115611563576115636114cd565b604051601f8201601f19908116603f0116810190838211818310171561158b5761158b6114cd565b816040528281528760208487010111156115a457600080fd5b6115b58360208301602088016114e3565b979650505050505050565b600081518084526115d88160208601602086016114e3565b601f01601f19169290920160200192915050565b6040815260006115ff60408301856115c0565b828103602084015261112a81856115c0565b8381526001600160a01b038316602082015260606040820181905260009061112a908301846115c0565b634e487b7160e01b600052603260045260246000fd5b600082516116638184602087016114e3565b919091019291505056fea26469706673582212204bbd9b31e5cb45a46b0ec6b42ef775db826e44a3e26253f3600ce3c6ac807aff64736f6c634300080f003300000000000000000000000081291ceb9bb265185a9d07b91b5b50df94f005bf0000000000000000000000001ba4eb0f44ab82541e56669e18972b0d6037dfe0
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c80638e499bcf116100c3578063c3c5a5471161007c578063c3c5a547146102e6578063c9b8f05514610309578063dbf4246114610329578063e177dc701461033c578063f2fde38b1461034f578063f9c7bba51461036257600080fd5b80638e499bcf14610265578063931074ba146102775780639de312f01461028a578063a0dd0bcf1461029d578063b0b40fce146102c0578063b366a35c146102d357600080fd5b806351f69a6e1161011557806351f69a6e146101f05780636fc74f9e14610203578063715018a6146102265780637bbfc69e1461022e5780638cd473c2146102415780638da5cb5b1461025457600080fd5b8063125d43361461015257806319ee073e1461018257806329b2e0c6146101955780632b017c8b146101aa5780634f64b2be146101dd575b600080fd5b610165610160366004611191565b610375565b6040516001600160a01b0390911681526020015b60405180910390f35b600154610165906001600160a01b031681565b6101a86101a336600461125e565b6104d0565b005b6101cd6101b836600461125e565b60066020526000908152604090205460ff1681565b6040519015158152602001610179565b6101656101eb36600461127b565b6104e0565b6101a86101fe366004611294565b61050a565b6101cd61021136600461125e565b60086020526000908152604090205460ff1681565b6101a8610576565b61016561023c3660046112d2565b61058a565b6101a861024f36600461125e565b6105c2565b6000546001600160a01b0316610165565b6003545b604051908152602001610179565b6101a86102853660046112fe565b61061e565b6101656102983660046112d2565b6109db565b6101cd6102ab36600461125e565b60076020526000908152604090205460ff1681565b6101656102ce366004611333565b6109f0565b6101a86102e13660046112d2565b610a12565b6101cd6102f436600461125e565b60046020526000908152604090205460ff1681565b61026961031736600461125e565b60056020526000908152604090205481565b6101a8610337366004611294565b610a22565b61016561034a36600461125e565b610a86565b6101a861035d36600461125e565b610a91565b61026961037036600461125e565b610b07565b3360009081526008602052604081205460ff166103c85760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b60448201526064015b60405180910390fd5b6001600160a01b038a1660009081526006602052604090205460ff166104305760405162461bcd60e51b815260206004820152601760248201527f6e6f7420616c6c6f776564207661756c74206f776e657200000000000000000060448201526064016103bf565b60015460405163e1c6ba5d60e01b81526000916001600160a01b03169063e1c6ba5d90610471908f908f908f908f908f908f908f908f908f9060040161140b565b6020604051808303816000875af1158015610490573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b49190611472565b90506104c18c8285610b25565b9b9a5050505050505050505050565b6104dd816000600161061e565b50565b600381815481106104f057600080fd5b6000918252602090912001546001600160a01b0316905081565b610512610e5d565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527fc9219e6871f1efb578009a697784e88c6375187771bda2c8899b8ead4bbea82291015b60405180910390a15050565b61057e610e5d565b6105886000610eb7565b565b600260205281600052604060002081815481106105a657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6105ca610e5d565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f65104c4699f20a240a0ce199d616669f9518c0469b60b2a8c904f7cd4eb471fd9060200160405180910390a150565b3360009081526008602052604081205460ff161515900361065257604051632e1027db60e11b815260040160405180910390fd5b60066000846001600160a01b0316635aa6e6756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b89190611472565b6001600160a01b03168152602081019190915260400160009081205460ff16151590036107035760405163d0c41e7960e01b81526001600160a01b03841660048201526024016103bf565b60008260018060009054906101000a90046001600160a01b03166001600160a01b03166356e0a94b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077e919061148f565b61078891906114a8565b61079291906114a8565b60015460405163b6a9f40f60e01b8152600481018390529192506000916001600160a01b039091169063b6a9f40f90602401602060405180830381865afa1580156107e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108059190611472565b6001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261086a9190810190611513565b90508080519060200120856001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108da9190810190611513565b805190602001201461096857846001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610924573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261094c9190810190611513565b81604051639102966160e01b81526004016103bf9291906115ec565b6109d4856001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cd9190611472565b8685610b25565b5050505050565b60006109e78383610f07565b90505b92915050565b6000610a0589338a8a8a8a8a8a8a6001610375565b9998505050505050505050565b610a1e8282600161061e565b5050565b610a2a610e5d565b6001600160a01b038216600081815260086020908152604091829020805460ff19168515159081179091558251938452908301527f0432d20aa3457fdf75aad100b0473a9a5a3f29275b066abbeb243dc7e0db4a48910161056a565b60006109ea82610fc8565b610a99610e5d565b6001600160a01b038116610afe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103bf565b6104dd81610eb7565b6001600160a01b0381166000908152600260205260408120546109ea565b6001600160a01b03821660009081526005602052604090205415610b7f576001600160a01b038216600081815260056020526040908190205490516314e3ee7560e01b8152600481019290925260248201526044016103bf565b80600003610ba05760405163031366db60e01b815260040160405180910390fd5b6000610bac8483610f07565b90506001600160a01b03811615610cc857826001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610bfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c239190810190611513565b80519060200120816001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c68573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c909190810190611513565b8051906020012003610cc8576040516318aec0af60e01b81526001600160a01b038083166004830152841660248201526044016103bf565b6001600160a01b0384811660008181526002602090815260408083208054600181018255908452828420810180546001600160a01b031916968a16968717905594835260058252808320879055928252600490529081205460ff1615159003610d91576001600160a01b0385166000818152600460205260408120805460ff191660019081179091556003805491820181559091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b03191690911790555b6001600160a01b03808516600081815260076020526040808220805460ff191660011790558051630258294160e41b8152905185948a16937f665814fc0711cd098dc48648ad2f63460a3cb758a6aca058c168d7a9067d9f389389938b936325829410926004808401939192918290030181865afa158015610e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e3f9190810190611513565b604051610e4e93929190611611565b60405180910390a35050505050565b6000546001600160a01b031633146105885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bf565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03821660009081526002602052604081205480600003610f325760009150506109ea565b6000610f3f6001836114a8565b90505b6001600160a01b0385166000908152600260205260408120805483908110610f6c57610f6c61163b565b60009182526020808320909101546001600160a01b03168083526005909152604090912054909150859003610fa55792506109ea915050565b81600003610fb35750610fbd565b5060001901610f42565b506000949350505050565b6001600160a01b03811660009081526002602052604081205480600003610ff957610ff283611048565b9392505050565b6001600160a01b038316600090815260026020526040902061101c6001836114a8565b8154811061102c5761102c61163b565b6000918252602090912001546001600160a01b03169392505050565b6040516001600160a01b0382166024820152600090819060440160408051601f198184030181529181526020820180516001600160e01b0316630e177dc760e41b1790525190915060009081906001600160a01b037f0000000000000000000000001ba4eb0f44ab82541e56669e18972b0d6037dfe016906110cb908590611651565b600060405180830381855afa9150503d8060008114611106576040519150601f19603f3d011682016040523d82523d6000602084013e61110b565b606091505b50915091508115610fbd578080602001905181019061112a9190611472565b95945050505050565b6001600160a01b03811681146104dd57600080fd5b60008083601f84011261115a57600080fd5b50813567ffffffffffffffff81111561117257600080fd5b60208301915083602082850101111561118a57600080fd5b9250929050565b6000806000806000806000806000806101008b8d0312156111b157600080fd5b8a356111bc81611133565b995060208b01356111cc81611133565b985060408b01356111dc81611133565b975060608b01356111ec81611133565b965060808b013567ffffffffffffffff8082111561120957600080fd5b6112158e838f01611148565b909850965060a08d013591508082111561122e57600080fd5b5061123b8d828e01611148565b9b9e9a9d50989b979a969995989760c08101359660e09091013595509350505050565b60006020828403121561127057600080fd5b8135610ff281611133565b60006020828403121561128d57600080fd5b5035919050565b600080604083850312156112a757600080fd5b82356112b281611133565b9150602083013580151581146112c757600080fd5b809150509250929050565b600080604083850312156112e557600080fd5b82356112f081611133565b946020939093013593505050565b60008060006060848603121561131357600080fd5b833561131e81611133565b95602085013595506040909401359392505050565b60008060008060008060008060c0898b03121561134f57600080fd5b883561135a81611133565b9750602089013561136a81611133565b9650604089013561137a81611133565b9550606089013567ffffffffffffffff8082111561139757600080fd5b6113a38c838d01611148565b909750955060808b01359150808211156113bc57600080fd5b506113c98b828c01611148565b999c989b50969995989497949560a00135949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038a81168252898116602083015288811660408301528716606082015260e06080820181905260009061144890830187896113e2565b82810360a084015261145b8186886113e2565b9150508260c08301529a9950505050505050505050565b60006020828403121561148457600080fd5b8151610ff281611133565b6000602082840312156114a157600080fd5b5051919050565b6000828210156114c857634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052604160045260246000fd5b60005b838110156114fe5781810151838201526020016114e6565b8381111561150d576000848401525b50505050565b60006020828403121561152557600080fd5b815167ffffffffffffffff8082111561153d57600080fd5b818401915084601f83011261155157600080fd5b815181811115611563576115636114cd565b604051601f8201601f19908116603f0116810190838211818310171561158b5761158b6114cd565b816040528281528760208487010111156115a457600080fd5b6115b58360208301602088016114e3565b979650505050505050565b600081518084526115d88160208601602086016114e3565b601f01601f19169290920160200192915050565b6040815260006115ff60408301856115c0565b828103602084015261112a81856115c0565b8381526001600160a01b038316602082015260606040820181905260009061112a908301846115c0565b634e487b7160e01b600052603260045260246000fd5b600082516116638184602087016114e3565b919091019291505056fea26469706673582212204bbd9b31e5cb45a46b0ec6b42ef775db826e44a3e26253f3600ce3c6ac807aff64736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000081291ceb9bb265185a9d07b91b5b50df94f005bf0000000000000000000000001ba4eb0f44ab82541e56669e18972b0d6037dfe0
-----Decoded View---------------
Arg [0] : _releaseRegistry (address): 0x81291ceb9bB265185A9D07b91B5b50Df94f005BF
Arg [1] : _legacyRegistry (address): 0x1ba4eB0F44AB82541E56669e18972b0d6037dfE0
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000081291ceb9bb265185a9d07b91b5b50df94f005bf
Arg [1] : 0000000000000000000000001ba4eb0f44ab82541e56669e18972b0d6037dfe0
Deployed Bytecode Sourcemap
4652:11145:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13984:745;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2092:32:1;;;2074:51;;2062:2;2047:18;13984:745:0;;;;;;;;4775:30;;;;;-1:-1:-1;;;;;4775:30:0;;;12175:103;;;;;;:::i;:::-;;:::i;:::-;;5018:51;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2553:14:1;;2546:22;2528:41;;2516:2;2501:18;5018:51:0;2388:187:1;4886:23:0;;;;;;:::i;:::-;;:::i;15392:221::-;;;;;;:::i;:::-;;:::i;5130:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3295:103;;;:::i;4836:43::-;;;;;;:::i;:::-;;:::i;15621:173::-;;;;;;:::i;:::-;;:::i;2647:87::-;2693:7;2720:6;-1:-1:-1;;;;;2720:6:0;2647:87;;6098:92;6169:6;:13;6098:92;;;3652:25:1;;;3640:2;3625:18;6098:92:0;3506:177:1;10909:1112:0;;;;;;:::i;:::-;;:::i;8548:181::-;;;;;;:::i;:::-;;:::i;5076:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12286:514;;;;;;:::i;:::-;;:::i;12029:138::-;;;;;;:::i;:::-;;:::i;4916:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4967;;;;;;:::i;:::-;;;;;;;;;;;;;;14976:207;;;;;;:::i;:::-;;:::i;8048:115::-;;;;;;:::i;:::-;;:::i;3553:201::-;;;;;;:::i;:::-;;:::i;6198:111::-;;;;;;:::i;:::-;;:::i;13984:745::-;14300:10;14257:7;14285:26;;;:14;:26;;;;;;;;14277:51;;;;-1:-1:-1;;;14277:51:0;;5492:2:1;14277:51:0;;;5474:21:1;5531:2;5511:18;;;5504:30;-1:-1:-1;;;5550:18:1;;;5543:42;5602:18;;14277:51:0;;;;;;;;;-1:-1:-1;;;;;14347:32:0;;;;;;:19;:32;;;;;;;;14339:68;;;;-1:-1:-1;;;14339:68:0;;5833:2:1;14339:68:0;;;5815:21:1;5872:2;5852:18;;;5845:30;5911:25;5891:18;;;5884:53;5954:18;;14339:68:0;5631:347:1;14339:68:0;14451:15;;14434:217;;-1:-1:-1;;;14434:217:0;;14418:13;;-1:-1:-1;;;;;14451:15:0;;14434:42;;:217;;14491:6;;14512:11;;14538:9;;14562:8;;14585:5;;;;14605:7;;;;14627:13;;14434:217;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14418:233;;14662:36;14677:6;14685:5;14692;14662:14;:36::i;:::-;14716:5;13984:745;-1:-1:-1;;;;;;;;;;;13984:745:0:o;12175:103::-;12233:37;12246:6;12254:1;4725;12233:12;:37::i;:::-;12175:103;:::o;4886:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4886:23:0;;-1:-1:-1;4886:23:0;:::o;15392:221::-;2533:13;:11;:13::i;:::-;-1:-1:-1;;;;;15508:26:0;::::1;;::::0;;;:19:::1;:26;::::0;;;;;;;;:38;;-1:-1:-1;;15508:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15562:43;;7555:51:1;;;7622:18;;;7615:50;15562:43:0::1;::::0;7528:18:1;15562:43:0::1;;;;;;;;15392:221:::0;;:::o;3295:103::-;2533:13;:11;:13::i;:::-;3360:30:::1;3387:1;3360:18;:30::i;:::-;3295:103::o:0;4836:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4836:43:0;;-1:-1:-1;4836:43:0;;-1:-1:-1;4836:43:0:o;15621:173::-;2533:13;:11;:13::i;:::-;15704:15:::1;:30:::0;;-1:-1:-1;;;;;;15704:30:0::1;-1:-1:-1::0;;;;;15704:30:0;::::1;::::0;;::::1;::::0;;;15750:36:::1;::::0;2074:51:1;;;15750:36:0::1;::::0;2062:2:1;2047:18;15750:36:0::1;;;;;;;15621:173:::0;:::o;10909:1112::-;11056:10;11041:26;;;;:14;:26;;;;;;;;:35;;;;11037:96;;11100:21;;-1:-1:-1;;;11100:21:0;;;;;;;;;;;11037:96;11149:19;:48;11176:6;-1:-1:-1;;;;;11169:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11149:48:0;;;;;;;;;;;;-1:-1:-1;11149:48:0;;;;;;:57;;;;11145:123;;11230:26;;-1:-1:-1;;;11230:26:0;;-1:-1:-1;;;;;2092:32:1;;11230:26:0;;;2074:51:1;2047:18;;11230:26:0;1928:203:1;11145:123:0;11374:21;11492:13;11475:1;11415:15;;;;;;;;;-1:-1:-1;;;;;11415:15:0;-1:-1:-1;;;;;11398:59:0;;:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:78;;;;:::i;:::-;:107;;;;:::i;:::-;11601:15;;11584:57;;-1:-1:-1;;;11584:57:0;;;;;3652:25:1;;;11374:131:0;;-1:-1:-1;11536:24:0;;-1:-1:-1;;;;;11601:15:0;;;;11584:42;;3625:18:1;;11584:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11563:100:0;;:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11563:102:0;;;;;;;;;;;;:::i;:::-;11536:129;;11775:10;11758:30;;;;;;11718:6;-1:-1:-1;;;;;11711:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11711:27:0;;;;;;;;;;;;:::i;:::-;11694:47;;;;;;:94;11676:215;;11846:6;-1:-1:-1;;;;;11839:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11839:27:0;;;;;;;;;;;;:::i;:::-;11868:10;11822:57;;-1:-1:-1;;;11822:57:0;;;;;;;;;:::i;11676:215::-;11960:53;11982:6;-1:-1:-1;;;;;11975:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11999:6;12007:5;11960:14;:53::i;:::-;11026:995;;10909:1112;;;:::o;8548:181::-;8656:7;8688:33;8707:6;8715:5;8688:18;:33::i;:::-;8681:40;;8548:181;;;;;:::o;12286:514::-;12507:7;12547:245;12574:6;12599:10;12628:9;12656:8;12683:5;;12707:7;;12733:13;4725:1;12547:8;:245::i;:::-;12527:265;12286:514;-1:-1:-1;;;;;;;;;12286:514:0:o;12029:138::-;12110:49;12123:6;12131:13;4725:1;12110:12;:49::i;:::-;12029:138;;:::o;14976:207::-;2533:13;:11;:13::i;:::-;-1:-1:-1;;;;;15087:21:0;::::1;;::::0;;;:14:::1;:21;::::0;;;;;;;;:33;;-1:-1:-1;;15087:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15136:39;;7555:51:1;;;7622:18;;;7615:50;15136:39:0::1;::::0;7528:18:1;15136:39:0::1;7387:284:1::0;8048:115:0;8108:7;8135:20;8148:6;8135:12;:20::i;3553:201::-;2533:13;:11;:13::i;:::-;-1:-1:-1;;;;;3642:22:0;::::1;3634:73;;;::::0;-1:-1:-1;;;3634:73:0;;10229:2:1;3634:73:0::1;::::0;::::1;10211:21:1::0;10268:2;10248:18;;;10241:30;10307:34;10287:18;;;10280:62;-1:-1:-1;;;10358:18:1;;;10351:36;10404:19;;3634:73:0::1;10027:402:1::0;3634:73:0::1;3718:28;3737:8;3718:18;:28::i;6198:111::-:0;-1:-1:-1;;;;;6403:14:0;;6256:7;6403:14;;;:6;:14;;;;;:21;6283:18;6317:115;8737:1356;-1:-1:-1;;;;;9081:17:0;;;;;;:9;:17;;;;;;:22;9077:109;;-1:-1:-1;;;;;9156:17:0;;;;;;:9;:17;;;;;;;;9127:47;;-1:-1:-1;;;9127:47:0;;;;;10608:51:1;;;;10675:18;;;10668:34;10581:18;;9127:47:0;10434:274:1;9077:109:0;9202:5;9211:1;9202:10;9198:68;;9236:18;;-1:-1:-1;;;9236:18:0;;;;;;;;;;;9198:68;9278:14;9295:33;9314:6;9322:5;9295:18;:33::i;:::-;9278:50;-1:-1:-1;;;;;;9343:20:0;;;9339:286;;9491:6;-1:-1:-1;;;;;9484:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9484:27:0;;;;;;;;;;;;:::i;:::-;9468:45;;;;;;9425:6;-1:-1:-1;;;;;9418:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9418:27:0;;;;;;;;;;;;:::i;:::-;9402:45;;;;;;:111;9380:234;;9555:43;;-1:-1:-1;;;9555:43:0;;-1:-1:-1;;;;;10943:15:1;;;9555:43:0;;;10925:34:1;10995:15;;10975:18;;;10968:43;10860:18;;9555:43:0;10713:304:1;9380:234:0;-1:-1:-1;;;;;6403:14:0;;;9635:10;6403:14;;;:6;:14;;;;;;;;:21;;9718:27;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9718:27:0;;;;;;;;;9756:17;;;:9;:17;;;;;:25;;;9846:20;;;:12;:20;;;;;;;;:29;;;;9842:123;;-1:-1:-1;;;;;9892:20:0;;;;;;:12;:20;;;;;:27;;-1:-1:-1;;9892:27:0;9915:4;9892:27;;;;;;9934:6;:19;;;;;;;;;;;;;;-1:-1:-1;;;;;;9934:19:0;;;;;;9842:123;-1:-1:-1;;;;;9975:23:0;;;;;;;:15;:23;;;;;;:30;;-1:-1:-1;;9975:30:0;10001:4;9975:30;;;10057:27;;-1:-1:-1;;;10057:27:0;;;;10038:2;;10021:64;;;;;10042:5;;9991:6;;10057:25;;:27;;;;;9975:23;;10057:27;;;;;;9975:23;10057:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10057:27:0;;;;;;;;;;;;:::i;:::-;10021:64;;;;;;;;:::i;:::-;;;;;;;;8851:1242;;8737:1356;;;:::o;2812:132::-;2693:7;2720:6;-1:-1:-1;;;;;2720:6:0;1278:10;2876:23;2868:68;;;;-1:-1:-1;;;2868:68:0;;11617:2:1;2868:68:0;;;11599:21:1;;;11636:18;;;11629:30;11695:34;11675:18;;;11668:62;11747:18;;2868:68:0;11415:356:1;3914:191:0;3988:16;4007:6;;-1:-1:-1;;;;;4024:17:0;;;-1:-1:-1;;;;;;4024:17:0;;;;;;4057:40;;4007:6;;;;;;;4057:40;;3988:16;4057:40;3977:128;3914:191;:::o;6701:612::-;-1:-1:-1;;;;;6403:14:0;;6810:7;6403:14;;;:6;:14;;;;;:21;6885:6;6895:1;6885:11;6881:61;;6928:1;6913:17;;;;;6881:61;6952:9;6964:10;6973:1;6964:6;:10;:::i;:::-;6952:22;;6985:293;-1:-1:-1;;;;;7029:14:0;;7013:13;7029:14;;;:6;:14;;;;;:17;;7044:1;;7029:17;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;7029:17:0;7065:16;;;:9;:16;;;;;;;;7029:17;;-1:-1:-1;7065:25:0;;;7061:78;;7118:5;-1:-1:-1;7111:12:0;;-1:-1:-1;;7111:12:0;7061:78;7157:1;7162;7157:6;7153:52;;7184:5;;;7153:52;-1:-1:-1;;;7248:3:0;6985:293;;;-1:-1:-1;7303:1:0;;6701:612;-1:-1:-1;;;;6701:612:0:o;6440:253::-;-1:-1:-1;;;;;6403:14:0;;6501:7;6403:14;;;:6;:14;;;;;:21;6571:6;6581:1;6571:11;6567:75;;6606:24;6623:6;6606:16;:24::i;:::-;6599:31;6440:253;-1:-1:-1;;;6440:253:0:o;6567:75::-;-1:-1:-1;;;;;6659:14:0;;;;;;:6;:14;;;;;6674:10;6683:1;6674:6;:10;:::i;:::-;6659:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6659:26:0;;6440:253;-1:-1:-1;;;6440:253:0:o;7321:433::-;7426:92;;-1:-1:-1;;;;;2092:32:1;;7426:92:0;;;2074:51:1;7386:7:0;;;;2047:18:1;;7426:92:0;;;-1:-1:-1;;7426:92:0;;;;;;;;;;;;;;-1:-1:-1;;;;;7426:92:0;-1:-1:-1;;;7426:92:0;;;7572:55;7426:92;;-1:-1:-1;;;;;;;;;;7580:15:0;7572:49;;:55;;7426:92;;7572:55;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7529:98;;;;7642:7;7638:81;;;7684:11;7673:34;;;;;;;;;;;;:::i;:::-;7666:41;7321:433;-1:-1:-1;;;;;7321:433:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:348;202:8;212:6;266:3;259:4;251:6;247:17;243:27;233:55;;284:1;281;274:12;233:55;-1:-1:-1;307:20:1;;350:18;339:30;;336:50;;;382:1;379;372:12;336:50;419:4;411:6;407:17;395:29;;471:3;464:4;455:6;447;443:19;439:30;436:39;433:59;;;488:1;485;478:12;433:59;150:348;;;;;:::o;503:1420::-;649:6;657;665;673;681;689;697;705;713;721;774:3;762:9;753:7;749:23;745:33;742:53;;;791:1;788;781:12;742:53;830:9;817:23;849:31;874:5;849:31;:::i;:::-;899:5;-1:-1:-1;956:2:1;941:18;;928:32;969:33;928:32;969:33;:::i;:::-;1021:7;-1:-1:-1;1080:2:1;1065:18;;1052:32;1093:33;1052:32;1093:33;:::i;:::-;1145:7;-1:-1:-1;1204:2:1;1189:18;;1176:32;1217:33;1176:32;1217:33;:::i;:::-;1269:7;-1:-1:-1;1327:3:1;1312:19;;1299:33;1351:18;1381:14;;;1378:34;;;1408:1;1405;1398:12;1378:34;1447:59;1498:7;1489:6;1478:9;1474:22;1447:59;:::i;:::-;1525:8;;-1:-1:-1;1421:85:1;-1:-1:-1;1613:3:1;1598:19;;1585:33;;-1:-1:-1;1630:16:1;;;1627:36;;;1659:1;1656;1649:12;1627:36;;1698:61;1751:7;1740:8;1729:9;1725:24;1698:61;:::i;:::-;503:1420;;;;-1:-1:-1;503:1420:1;;;;;;;;1778:8;1860:3;1845:19;;1832:33;;1912:3;1897:19;;;1884:33;;-1:-1:-1;503:1420:1;-1:-1:-1;;;;503:1420:1:o;2136:247::-;2195:6;2248:2;2236:9;2227:7;2223:23;2219:32;2216:52;;;2264:1;2261;2254:12;2216:52;2303:9;2290:23;2322:31;2347:5;2322:31;:::i;2580:180::-;2639:6;2692:2;2680:9;2671:7;2667:23;2663:32;2660:52;;;2708:1;2705;2698:12;2660:52;-1:-1:-1;2731:23:1;;2580:180;-1:-1:-1;2580:180:1:o;2765:416::-;2830:6;2838;2891:2;2879:9;2870:7;2866:23;2862:32;2859:52;;;2907:1;2904;2897:12;2859:52;2946:9;2933:23;2965:31;2990:5;2965:31;:::i;:::-;3015:5;-1:-1:-1;3072:2:1;3057:18;;3044:32;3114:15;;3107:23;3095:36;;3085:64;;3145:1;3142;3135:12;3085:64;3168:7;3158:17;;;2765:416;;;;;:::o;3186:315::-;3254:6;3262;3315:2;3303:9;3294:7;3290:23;3286:32;3283:52;;;3331:1;3328;3321:12;3283:52;3370:9;3357:23;3389:31;3414:5;3389:31;:::i;:::-;3439:5;3491:2;3476:18;;;;3463:32;;-1:-1:-1;;;3186:315:1:o;3688:383::-;3765:6;3773;3781;3834:2;3822:9;3813:7;3809:23;3805:32;3802:52;;;3850:1;3847;3840:12;3802:52;3889:9;3876:23;3908:31;3933:5;3908:31;:::i;:::-;3958:5;4010:2;3995:18;;3982:32;;-1:-1:-1;4061:2:1;4046:18;;;4033:32;;3688:383;-1:-1:-1;;;3688:383:1:o;4076:1209::-;4204:6;4212;4220;4228;4236;4244;4252;4260;4313:3;4301:9;4292:7;4288:23;4284:33;4281:53;;;4330:1;4327;4320:12;4281:53;4369:9;4356:23;4388:31;4413:5;4388:31;:::i;:::-;4438:5;-1:-1:-1;4495:2:1;4480:18;;4467:32;4508:33;4467:32;4508:33;:::i;:::-;4560:7;-1:-1:-1;4619:2:1;4604:18;;4591:32;4632:33;4591:32;4632:33;:::i;:::-;4684:7;-1:-1:-1;4742:2:1;4727:18;;4714:32;4765:18;4795:14;;;4792:34;;;4822:1;4819;4812:12;4792:34;4861:59;4912:7;4903:6;4892:9;4888:22;4861:59;:::i;:::-;4939:8;;-1:-1:-1;4835:85:1;-1:-1:-1;5027:3:1;5012:19;;4999:33;;-1:-1:-1;5044:16:1;;;5041:36;;;5073:1;5070;5063:12;5041:36;;5112:61;5165:7;5154:8;5143:9;5139:24;5112:61;:::i;:::-;4076:1209;;;;-1:-1:-1;4076:1209:1;;;;;;5086:87;;5274:3;5259:19;5246:33;;4076:1209;-1:-1:-1;;;;4076:1209:1:o;5983:267::-;6072:6;6067:3;6060:19;6124:6;6117:5;6110:4;6105:3;6101:14;6088:43;-1:-1:-1;6176:1:1;6151:16;;;6169:4;6147:27;;;6140:38;;;;6232:2;6211:15;;;-1:-1:-1;;6207:29:1;6198:39;;;6194:50;;5983:267::o;6255:871::-;-1:-1:-1;;;;;6650:15:1;;;6632:34;;6702:15;;;6697:2;6682:18;;6675:43;6754:15;;;6749:2;6734:18;;6727:43;6806:15;;6801:2;6786:18;;6779:43;6859:3;6853;6838:19;;6831:32;;;6575:4;;6886:63;;6929:19;;6921:6;6913;6886:63;:::i;:::-;6998:9;6990:6;6986:22;6980:3;6969:9;6965:19;6958:51;7026:50;7069:6;7061;7053;7026:50;:::i;:::-;7018:58;;;7113:6;7107:3;7096:9;7092:19;7085:35;6255:871;;;;;;;;;;;;:::o;7131:251::-;7201:6;7254:2;7242:9;7233:7;7229:23;7225:32;7222:52;;;7270:1;7267;7260:12;7222:52;7302:9;7296:16;7321:31;7346:5;7321:31;:::i;7676:184::-;7746:6;7799:2;7787:9;7778:7;7774:23;7770:32;7767:52;;;7815:1;7812;7805:12;7767:52;-1:-1:-1;7838:16:1;;7676:184;-1:-1:-1;7676:184:1:o;7865:222::-;7905:4;7933:1;7930;7927:8;7924:131;;;7977:10;7972:3;7968:20;7965:1;7958:31;8012:4;8009:1;8002:15;8040:4;8037:1;8030:15;7924:131;-1:-1:-1;8072:9:1;;7865:222::o;8092:127::-;8153:10;8148:3;8144:20;8141:1;8134:31;8184:4;8181:1;8174:15;8208:4;8205:1;8198:15;8224:258;8296:1;8306:113;8320:6;8317:1;8314:13;8306:113;;;8396:11;;;8390:18;8377:11;;;8370:39;8342:2;8335:10;8306:113;;;8437:6;8434:1;8431:13;8428:48;;;8472:1;8463:6;8458:3;8454:16;8447:27;8428:48;;8224:258;;;:::o;8487:884::-;8567:6;8620:2;8608:9;8599:7;8595:23;8591:32;8588:52;;;8636:1;8633;8626:12;8588:52;8669:9;8663:16;8698:18;8739:2;8731:6;8728:14;8725:34;;;8755:1;8752;8745:12;8725:34;8793:6;8782:9;8778:22;8768:32;;8838:7;8831:4;8827:2;8823:13;8819:27;8809:55;;8860:1;8857;8850:12;8809:55;8889:2;8883:9;8911:2;8907;8904:10;8901:36;;;8917:18;;:::i;:::-;8992:2;8986:9;8960:2;9046:13;;-1:-1:-1;;9042:22:1;;;9066:2;9038:31;9034:40;9022:53;;;9090:18;;;9110:22;;;9087:46;9084:72;;;9136:18;;:::i;:::-;9176:10;9172:2;9165:22;9211:2;9203:6;9196:18;9251:7;9246:2;9241;9237;9233:11;9229:20;9226:33;9223:53;;;9272:1;9269;9262:12;9223:53;9285:55;9337:2;9332;9324:6;9320:15;9315:2;9311;9307:11;9285:55;:::i;:::-;9359:6;8487:884;-1:-1:-1;;;;;;;8487:884:1:o;9376:258::-;9418:3;9456:5;9450:12;9483:6;9478:3;9471:19;9499:63;9555:6;9548:4;9543:3;9539:14;9532:4;9525:5;9521:16;9499:63;:::i;:::-;9616:2;9595:15;-1:-1:-1;;9591:29:1;9582:39;;;;9623:4;9578:50;;9376:258;-1:-1:-1;;9376:258:1:o;9639:383::-;9836:2;9825:9;9818:21;9799:4;9862:45;9903:2;9892:9;9888:18;9880:6;9862:45;:::i;:::-;9955:9;9947:6;9943:22;9938:2;9927:9;9923:18;9916:50;9983:33;10009:6;10001;9983:33;:::i;11022:388::-;11209:25;;;-1:-1:-1;;;;;11270:32:1;;11265:2;11250:18;;11243:60;11339:2;11334;11319:18;;11312:30;;;-1:-1:-1;;11359:45:1;;11385:18;;11377:6;11359:45;:::i;11776:127::-;11837:10;11832:3;11828:20;11825:1;11818:31;11868:4;11865:1;11858:15;11892:4;11889:1;11882:15;11908:274;12037:3;12075:6;12069:13;12091:53;12137:6;12132:3;12125:4;12117:6;12113:17;12091:53;:::i;:::-;12160:16;;;;;11908:274;-1:-1:-1;;11908:274:1:o
Swarm Source
ipfs://4bbd9b31e5cb45a46b0ec6b42ef775db826e44a3e26253f3600ce3c6ac807aff
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.