ETH Price: $3,820.60 (-0.74%)

Contract

0xA83404CAA79989FfF1d84bA883a1b8187397866C
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
161616462022-12-11 13:04:11725 days ago1670763851
0xA83404CA...87397866C
 Contract Creation0 ETH
161615842022-12-11 12:51:47725 days ago1670763107
0xA83404CA...87397866C
 Contract Creation0 ETH
161615482022-12-11 12:44:35725 days ago1670762675
0xA83404CA...87397866C
 Contract Creation0 ETH
161615072022-12-11 12:36:23725 days ago1670762183
0xA83404CA...87397866C
 Contract Creation0 ETH
161613602022-12-11 12:06:59725 days ago1670760419
0xA83404CA...87397866C
 Contract Creation0 ETH
160475232022-11-25 14:12:59741 days ago1669385579
0xA83404CA...87397866C
 Contract Creation0 ETH
160338362022-11-23 16:17:23743 days ago1669220243
0xA83404CA...87397866C
 Contract Creation0 ETH
159266322022-11-08 16:52:47758 days ago1667926367
0xA83404CA...87397866C
 Contract Creation0 ETH
159188442022-11-07 14:48:35759 days ago1667832515
0xA83404CA...87397866C
 Contract Creation0 ETH
158974582022-11-04 15:10:47762 days ago1667574647
0xA83404CA...87397866C
 Contract Creation0 ETH
158485292022-10-28 19:03:47769 days ago1666983827
0xA83404CA...87397866C
 Contract Creation0 ETH
158398472022-10-27 13:55:59770 days ago1666878959
0xA83404CA...87397866C
 Contract Creation0 ETH
158261322022-10-25 15:56:59772 days ago1666713419
0xA83404CA...87397866C
 Contract Creation0 ETH
158215862022-10-25 0:43:35772 days ago1666658615
0xA83404CA...87397866C
 Contract Creation0 ETH
157404002022-10-13 16:31:11784 days ago1665678671
0xA83404CA...87397866C
 Contract Creation0 ETH
157403962022-10-13 16:30:23784 days ago1665678623
0xA83404CA...87397866C
 Contract Creation0 ETH
156948142022-10-07 7:44:23790 days ago1665128663
0xA83404CA...87397866C
 Contract Creation0 ETH
156876302022-10-06 7:39:47791 days ago1665041987
0xA83404CA...87397866C
 Contract Creation0 ETH
156828962022-10-05 15:48:35792 days ago1664984915
0xA83404CA...87397866C
 Contract Creation0 ETH
155971732022-09-23 16:15:23804 days ago1663949723
0xA83404CA...87397866C
 Contract Creation0 ETH
155808502022-09-21 9:22:59806 days ago1663752179
0xA83404CA...87397866C
 Contract Creation0 ETH
155706582022-09-19 22:55:11807 days ago1663628111
0xA83404CA...87397866C
 Contract Creation0 ETH
155474422022-09-16 16:44:11811 days ago1663346651
0xA83404CA...87397866C
 Contract Creation0 ETH
155450942022-09-16 8:48:11811 days ago1663318091
0xA83404CA...87397866C
 Contract Creation0 ETH
155337062022-09-14 15:27:59813 days ago1663169279
0xA83404CA...87397866C
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DebtLockerFactory

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license
File 1 of 1 : DebtLockerFactory.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity =0.8.7;

interface IMapleGlobalsLike {

    function governor() external view returns (address governor_);

}

interface IMapleProxiedLike {

    function implementation() external view returns (address implementation_);

}

interface IProxiedLike {

    function implementation() external view returns (address implementation_);

    function setImplementation(address newImplementation_) external;

    function migrate(address migrator_, bytes calldata arguments_) external;

}

/// @title An beacon that provides a default implementation for proxies, must implement IDefaultImplementationBeacon.
interface IDefaultImplementationBeacon {

    /// @dev The address of an implementation for proxies.
    function defaultImplementation() external view returns (address defaultImplementation_);

}

/// @title A Maple factory for Proxy contracts that proxy MapleProxied implementations.
interface IMapleProxyFactory is IDefaultImplementationBeacon {

    /**************/
    /*** Events ***/
    /**************/

    /**
     *  @dev   A default version was set.
     *  @param version_ The default version.
     */
    event DefaultVersionSet(uint256 indexed version_);

    /**
     *  @dev   A version of an implementation, at some address, was registered, with an optional initializer.
     *  @param version_               The version registered.
     *  @param implementationAddress_ The address of the implementation.
     *  @param initializer_           The address of the initializer, if any.
     */
    event ImplementationRegistered(uint256 indexed version_, address indexed implementationAddress_, address indexed initializer_);

    /**
     *  @dev   A proxy contract was deployed with some initialization arguments.
     *  @param version_                 The version of the implementation being proxied by the deployed proxy contract.
     *  @param instance_                The address of the proxy contract deployed.
     *  @param initializationArguments_ The arguments used to initialize the proxy contract, if any.
     */
    event InstanceDeployed(uint256 indexed version_, address indexed instance_, bytes initializationArguments_);

    /**
     *  @dev   A instance has upgraded by proxying to a new implementation, with some migration arguments.
     *  @param instance_           The address of the proxy contract.
     *  @param fromVersion_        The initial implementation version being proxied.
     *  @param toVersion_          The new implementation version being proxied.
     *  @param migrationArguments_ The arguments used to migrate, if any.
     */
    event InstanceUpgraded(address indexed instance_, uint256 indexed fromVersion_, uint256 indexed toVersion_, bytes migrationArguments_);

    /**
     *  @dev   The MapleGlobals was set.
     *  @param mapleGlobals_ The address of a Maple Globals contract.
     */
    event MapleGlobalsSet(address indexed mapleGlobals_);

    /**
     *  @dev   An upgrade path was disabled, with an optional migrator contract.
     *  @param fromVersion_ The starting version of the upgrade path.
     *  @param toVersion_   The destination version of the upgrade path.
     */
    event UpgradePathDisabled(uint256 indexed fromVersion_, uint256 indexed toVersion_);

    /**
     *  @dev   An upgrade path was enabled, with an optional migrator contract.
     *  @param fromVersion_ The starting version of the upgrade path.
     *  @param toVersion_   The destination version of the upgrade path.
     *  @param migrator_    The address of the migrator, if any.
     */
    event UpgradePathEnabled(uint256 indexed fromVersion_, uint256 indexed toVersion_, address indexed migrator_);

    /***********************/
    /*** State Variables ***/
    /***********************/

    /**
     *  @dev The default version.
     */
    function defaultVersion() external view returns (uint256 defaultVersion_);

    /**
     *  @dev The address of the MapleGlobals contract.
     */
    function mapleGlobals() external view returns (address mapleGlobals_);

    /**
     *  @dev    Whether the upgrade is enabled for a path from a version to another version.
     *  @param  toVersion_   The initial version.
     *  @param  fromVersion_ The destination version.
     *  @return allowed_     Whether the upgrade is enabled.
     */
    function upgradeEnabledForPath(uint256 toVersion_, uint256 fromVersion_) external view returns (bool allowed_);

    /********************************/
    /*** State Changing Functions ***/
    /********************************/

    /**
     *  @dev    Deploys a new instance proxying the default implementation version, with some initialization arguments.
     *          Uses a nonce and `msg.sender` as a salt for the CREATE2 opcode during instantiation to produce deterministic addresses.
     *  @param  arguments_ The initialization arguments to use for the instance deployment, if any.
     *  @param  salt_      The salt to use in the contract creation process.
     *  @return instance_  The address of the deployed proxy contract.
     */
    function createInstance(bytes calldata arguments_, bytes32 salt_) external returns (address instance_);

    /**
     *  @dev   Enables upgrading from a version to a version of an implementation, with an optional migrator.
     *         Only the Governor can call this function.
     *  @param fromVersion_ The starting version of the upgrade path.
     *  @param toVersion_   The destination version of the upgrade path.
     *  @param migrator_    The address of the migrator, if any.
     */
    function enableUpgradePath(uint256 fromVersion_, uint256 toVersion_, address migrator_) external;

    /**
     *  @dev   Disables upgrading from a version to a version of a implementation.
     *         Only the Governor can call this function.
     *  @param fromVersion_ The starting version of the upgrade path.
     *  @param toVersion_   The destination version of the upgrade path.
     */
    function disableUpgradePath(uint256 fromVersion_, uint256 toVersion_) external;

    /**
     *  @dev   Registers the address of an implementation contract as a version, with an optional initializer.
     *         Only the Governor can call this function.
     *  @param version_               The version to register.
     *  @param implementationAddress_ The address of the implementation.
     *  @param initializer_           The address of the initializer, if any.
     */
    function registerImplementation(uint256 version_, address implementationAddress_, address initializer_) external;

    /**
     *  @dev   Sets the default version.
     *         Only the Governor can call this function.
     *  @param version_ The implementation version to set as the default.
     */
    function setDefaultVersion(uint256 version_) external;

    /**
     *  @dev   Sets the Maple Globals contract.
     *         Only the Governor can call this function.
     *  @param mapleGlobals_ The address of a Maple Globals contract.
     */
    function setGlobals(address mapleGlobals_) external;

    /**
     *  @dev   Upgrades the calling proxy contract's implementation, with some migration arguments.
     *  @param toVersion_ The implementation version to upgrade the proxy contract to.
     *  @param arguments_ The migration arguments, if any.
     */
    function upgradeInstance(uint256 toVersion_, bytes calldata arguments_) external;

    /**********************/
    /*** View Functions ***/
    /**********************/

    /**
     *  @dev    Returns the deterministic address of a potential proxy, given some arguments and salt.
     *  @param  arguments_       The initialization arguments to be used when deploying the proxy.
     *  @param  salt_            The salt to be used when deploying the proxy.
     *  @return instanceAddress_ The deterministic address of a potential proxy.
     */
    function getInstanceAddress(bytes calldata arguments_, bytes32 salt_) external view returns (address instanceAddress_);

    /**
     *  @dev    Returns the address of an implementation version.
     *  @param  version_        The implementation version.
     *  @return implementation_ The address of the implementation.
     */
    function implementationOf(uint256 version_) external view returns (address implementation_);

    /**
     *  @dev    Returns the address of a migrator contract for a migration path (from version, to version).
     *          If oldVersion_ == newVersion_, the migrator is an initializer.
     *  @param  oldVersion_ The old version.
     *  @param  newVersion_ The new version.
     *  @return migrator_   The address of a migrator contract.
     */
    function migratorForPath(uint256 oldVersion_, uint256 newVersion_) external view returns (address migrator_);

    /**
     *  @dev    Returns the version of an implementation contract.
     *  @param  implementation_ The address of an implementation contract.
     *  @return version_        The version of the implementation contract.
     */
    function versionOf(address implementation_) external view returns (uint256 version_);

}

/// @title Deploys DebtLocker proxy instances.
interface IDebtLockerFactory is IMapleProxyFactory {

    /**
     * @dev The Maple factory type (to be deprecated).
     */
    function factoryType() external view returns (uint8 factoryType_);

    /**
     * @dev    Deploys a new DebtLocker proxy instance.
     * @param  loan_       Loan contract that corresponds to DebtLocker.
     * @return debtLocker_ The address of the deployed DebtLocker proxy.
     */
    function newLocker(address loan_) external returns (address debtLocker_);

}

abstract contract SlotManipulatable {

    function _getReferenceTypeSlot(bytes32 slot_, bytes32 key_) internal pure returns (bytes32 value_) {
        return keccak256(abi.encodePacked(key_, slot_));
    }

    function _getSlotValue(bytes32 slot_) internal view returns (bytes32 value_) {
        assembly {
            value_ := sload(slot_)
        }
    }

    function _setSlotValue(bytes32 slot_, bytes32 value_) internal {
        assembly {
            sstore(slot_, value_)
        }
    }

}

/// @title A completely transparent, and thus interface-less, proxy contract.
contract Proxy is SlotManipulatable {

    /// @dev Storage slot with the address of the current factory. `keccak256('eip1967.proxy.factory') - 1`.
    bytes32 private constant FACTORY_SLOT = bytes32(0x7a45a402e4cb6e08ebc196f20f66d5d30e67285a2a8aa80503fa409e727a4af1);

    /// @dev Storage slot with the address of the current factory. `keccak256('eip1967.proxy.implementation') - 1`.
    bytes32 private constant IMPLEMENTATION_SLOT = bytes32(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc);

    /**
     *  @dev   The constructor requires at least one of `factory_` or `implementation_`.
     *         If an implementation is not provided, the factory is treated as an IDefaultImplementationBeacon to fetch the default implementation.
     *  @param factory_        The address of a proxy factory, if any.
     *  @param implementation_ The address of the implementation contract being proxied, if any.
     */
    constructor(address factory_, address implementation_) {
        _setSlotValue(FACTORY_SLOT, bytes32(uint256(uint160(factory_))));

        // If the implementation is empty, fetch it from the factory, which can act as a beacon.
        address implementation = implementation_ == address(0) ? IDefaultImplementationBeacon(factory_).defaultImplementation() : implementation_;

        require(implementation != address(0));

        _setSlotValue(IMPLEMENTATION_SLOT, bytes32(uint256(uint160(implementation))));
    }

    fallback() payable external virtual {
        bytes32 implementation = _getSlotValue(IMPLEMENTATION_SLOT);

        require(address(uint160(uint256(implementation))).code.length != uint256(0));

        assembly {
            calldatacopy(0, 0, calldatasize())

            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

            returndatacopy(0, 0, returndatasize())

            switch result
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

}

/// @title A factory for Proxy contracts that proxy Proxied implementations.
abstract contract ProxyFactory {

    mapping(uint256 => address) internal _implementationOf;

    mapping(address => uint256) internal _versionOf;

    mapping(uint256 => mapping(uint256 => address)) internal _migratorForPath;

    /// @dev Returns the implementation of `proxy_`.
    function _getImplementationOfProxy(address proxy_) private view returns (bool success_, address implementation_) {
        bytes memory returnData;
        // Since `_getImplementationOfProxy` is a private function, no need to check `proxy_` is a contract.
        ( success_, returnData ) = proxy_.staticcall(abi.encodeWithSelector(IProxiedLike.implementation.selector));
        implementation_ = abi.decode(returnData, (address));
    }

    /// @dev Initializes `proxy_` using the initializer for `version_`, given some initialization arguments.
    function _initializeInstance(address proxy_, uint256 version_, bytes memory arguments_) private returns (bool success_) {
        // The migrator, where fromVersion == toVersion, is an initializer.
        address initializer = _migratorForPath[version_][version_];

        // If there is no initializer, then no initialization is necessary, so long as no initialization arguments were provided.
        if (initializer == address(0)) return arguments_.length == uint256(0);

        // Call the migrate function on the proxy, passing any initialization arguments.
        // Since `_initializeInstance` is a private function, no need to check `proxy_` is a contract.
        ( success_, ) = proxy_.call(abi.encodeWithSelector(IProxiedLike.migrate.selector, initializer, arguments_));
    }

    /// @dev Deploys a new proxy for some version, with some initialization arguments, using `create` (i.e. factory's nonce determines the address).
    function _newInstance(uint256 version_, bytes memory arguments_) internal virtual returns (bool success_, address proxy_) {
        address implementation = _implementationOf[version_];

        if (implementation == address(0)) return (false, address(0));

        proxy_   = address(new Proxy(address(this), implementation));
        success_ = _initializeInstance(proxy_, version_, arguments_);
    }

    /// @dev Deploys a new proxy, with some initialization arguments, using `create2` (i.e. salt determines the address).
    ///      This factory needs to be IDefaultImplementationBeacon, since the proxy will pull its implementation from it.
    function _newInstance(bytes memory arguments_, bytes32 salt_) internal virtual returns (bool success_, address proxy_) {
        proxy_ = address(new Proxy{ salt: salt_ }(address(this), address(0)));

        // Fetch the implementation from the proxy. Don't care about success, since the version of the implementation will be checked in the next step.
        ( , address implementation ) = _getImplementationOfProxy(proxy_);

        // Get the version of the implementation.
        uint256 version = _versionOf[implementation];

        // Successful if version is nonzero (i.e. implementation fetched successfully from proxy) and initializing the instance succeeds.
        success_ = (version != uint256(0)) && _initializeInstance(proxy_, version, arguments_);
    }

    /// @dev Registers an implementation for some version.
    function _registerImplementation(uint256 version_, address implementation_) internal virtual returns (bool success_) {
        // Version 0 is not allowed since its the default value of all _versionOf[implementation_].
        // Implementation cannot already be registered and cannot be empty account (and thus also not address(0)).
        if (
            version_ == uint256(0) ||
            _implementationOf[version_] != address(0) ||
            _versionOf[implementation_] != uint256(0) ||
            !_isContract(implementation_)
        ) return false;

        // Store in two-way mappings.
        _implementationOf[version_] = implementation_;
        _versionOf[implementation_] = version_;

        return true;
    }

    /// @dev Registers a migrator for between two versions. If `fromVersion_ == toVersion_`, migrator is an initializer.
    function _registerMigrator(uint256 fromVersion_, uint256 toVersion_, address migrator_) internal virtual returns (bool success_) {
        // Version 0 is invalid.
        if (fromVersion_ == uint256(0) || toVersion_ == uint256(0)) return false;

        // Migrator must either be zero (clearing) or a contract (setting).
        if (migrator_ != address(0) && !_isContract(migrator_)) return false;

        _migratorForPath[fromVersion_][toVersion_] = migrator_;

        return true;
    }

    /// @dev Upgrades a proxy to a new version of an implementation, with some migration arguments.
    ///      Inheritor should revert on `success_ = false`, since proxy can be set to new implementation, but failed to migrate.
    function _upgradeInstance(address proxy_, uint256 toVersion_, bytes memory arguments_) internal virtual returns (bool success_) {
        // Check that the proxy is currently a contract, just once, ahead of the 3 times it will be low-level-called.
        if (!_isContract(proxy_)) return false;

        address toImplementation = _implementationOf[toVersion_];

        // The implementation being migrated must have been registered (which also implies that `toVersion_` was not 0).
        if (toImplementation == address(0)) return false;

        // Fetch the implementation from the proxy.
        address fromImplementation;
        ( success_, fromImplementation ) = _getImplementationOfProxy(proxy_);

        if (!success_) return false;

        // Set the proxy's implementation.
        ( success_, ) = proxy_.call(abi.encodeWithSelector(IProxiedLike.setImplementation.selector, toImplementation));

        if (!success_) return false;

        // Get the version of the `fromImplementation`, then get the `migrator` of the upgrade path to `toVersion_`.
        address migrator = _migratorForPath[_versionOf[fromImplementation]][toVersion_];

        // If there is no migrator, then no migration is necessary, so long as no migration arguments were provided.
        if (migrator == address(0)) return arguments_.length == uint256(0);

        // Call the migrate function on the proxy, passing any migration arguments.
        ( success_, ) = proxy_.call(abi.encodeWithSelector(IProxiedLike.migrate.selector, migrator, arguments_));
    }

    /// @dev Returns the deterministic address of a proxy given some salt.
    function _getDeterministicProxyAddress(bytes32 salt_) internal virtual view returns (address deterministicProxyAddress_) {
        // See https://docs.soliditylang.org/en/v0.8.7/control-structures.html#salted-contract-creations-create2
        return address(
            uint160(
                uint256(
                    keccak256(
                        abi.encodePacked(
                            bytes1(0xff),
                            address(this),
                            salt_,
                            keccak256(abi.encodePacked(type(Proxy).creationCode, abi.encode(address(this), address(0))))
                        )
                    )
                )
            )
        );
    }

    /// @dev Returns whether the account is currently a contract.
    function _isContract(address account_) internal view returns (bool isContract_) {
        return account_.code.length != uint256(0);
    }

}

/// @title A Maple factory for Proxy contracts that proxy MapleProxied implementations.
contract MapleProxyFactory is IMapleProxyFactory, ProxyFactory {

    address public override mapleGlobals;

    uint256 public override defaultVersion;

    mapping(uint256 => mapping(uint256 => bool)) public override upgradeEnabledForPath;

    /// @param mapleGlobals_ The address of a Maple Globals contract.
    constructor(address mapleGlobals_) {
        require(IMapleGlobalsLike(mapleGlobals = mapleGlobals_).governor() != address(0), "MPF:C:INVALID_GLOBALS");
    }

    modifier onlyGovernor() {
        require(msg.sender == IMapleGlobalsLike(mapleGlobals).governor(), "MPF:NOT_GOVERNOR");
        _;
    }

    /********************************/
    /*** Administrative Functions ***/
    /********************************/

    function disableUpgradePath(uint256 fromVersion_, uint256 toVersion_) public override virtual onlyGovernor {
        require(fromVersion_ != toVersion_,                              "MPF:DUP:OVERWRITING_INITIALIZER");
        require(_registerMigrator(fromVersion_, toVersion_, address(0)), "MPF:DUP:FAILED");

        emit UpgradePathDisabled(fromVersion_, toVersion_);

        upgradeEnabledForPath[fromVersion_][toVersion_] = false;
    }

    function enableUpgradePath(uint256 fromVersion_, uint256 toVersion_, address migrator_) public override virtual onlyGovernor {
        require(fromVersion_ != toVersion_,                             "MPF:EUP:OVERWRITING_INITIALIZER");
        require(_registerMigrator(fromVersion_, toVersion_, migrator_), "MPF:EUP:FAILED");

        emit UpgradePathEnabled(fromVersion_, toVersion_, migrator_);

        upgradeEnabledForPath[fromVersion_][toVersion_] = true;
    }

    function registerImplementation(uint256 version_, address implementationAddress_, address initializer_) public override virtual onlyGovernor {
        // Version 0 reserved as "no version" since default `defaultVersion` is 0.
        require(version_ != uint256(0), "MPF:RI:INVALID_VERSION");

        emit ImplementationRegistered(version_, implementationAddress_, initializer_);

        require(_registerImplementation(version_, implementationAddress_), "MPF:RI:FAIL_FOR_IMPLEMENTATION");

        // Set migrator for initialization, which understood as fromVersion == toVersion.
        require(_registerMigrator(version_, version_, initializer_), "MPF:RI:FAIL_FOR_MIGRATOR");
    }

    function setDefaultVersion(uint256 version_) public override virtual onlyGovernor {
        // Version must be 0 (to disable creating new instances) or be registered.
        require(version_ == 0 || _implementationOf[version_] != address(0), "MPF:SDV:INVALID_VERSION");

        emit DefaultVersionSet(defaultVersion = version_);
    }

    function setGlobals(address mapleGlobals_) public override virtual onlyGovernor {
        require(IMapleGlobalsLike(mapleGlobals_).governor() != address(0), "MPF:SG:INVALID_GLOBALS");

        emit MapleGlobalsSet(mapleGlobals = mapleGlobals_);
    }

    /**************************/
    /*** Instance Functions ***/
    /**************************/

    function createInstance(bytes calldata arguments_, bytes32 salt_) public override virtual returns (address instance_) {
        bool success;
        ( success, instance_ ) = _newInstance(arguments_, keccak256(abi.encodePacked(arguments_, salt_)));
        require(success, "MPF:CI:FAILED");

        emit InstanceDeployed(defaultVersion, instance_, arguments_);
    }

    // NOTE: The implementation proxied by the instance defines the access control logic for its own upgrade.
    function upgradeInstance(uint256 toVersion_, bytes calldata arguments_) public override virtual {
        uint256 fromVersion = _versionOf[IMapleProxiedLike(msg.sender).implementation()];

        require(upgradeEnabledForPath[fromVersion][toVersion_], "MPF:UI:NOT_ALLOWED");

        emit InstanceUpgraded(msg.sender, fromVersion, toVersion_, arguments_);

        require(_upgradeInstance(msg.sender, toVersion_, arguments_), "MPF:UI:FAILED");
    }

    /**********************/
    /*** View Functions ***/
    /**********************/

    function getInstanceAddress(bytes calldata arguments_, bytes32 salt_) public view override virtual returns (address instanceAddress_) {
        return _getDeterministicProxyAddress(keccak256(abi.encodePacked(arguments_, salt_)));
    }

    function implementationOf(uint256 version_) public view override virtual returns (address implementation_) {
        return _implementationOf[version_];
    }

    function defaultImplementation() external view override returns (address defaultImplementation_) {
        return _implementationOf[defaultVersion];
    }

    function migratorForPath(uint256 oldVersion_, uint256 newVersion_) public view override virtual returns (address migrator_) {
        return _migratorForPath[oldVersion_][newVersion_];
    }

    function versionOf(address implementation_) public view override virtual returns (uint256 version_) {
        return _versionOf[implementation_];
    }

}

/// @title Deploys DebtLocker proxy instances.
contract DebtLockerFactory is IDebtLockerFactory, MapleProxyFactory {

    uint8 public constant override factoryType = uint8(1);

    /// @param mapleGlobals_ The address of a Maple Globals contract.
    constructor(address mapleGlobals_) MapleProxyFactory(mapleGlobals_) {}

    function newLocker(address loan_) external override returns (address debtLocker_) {
        bytes memory arguments = abi.encode(loan_, msg.sender);

        bool success;
        ( success, debtLocker_ ) = _newInstance(defaultVersion, arguments);
        require(success, "DLF:NL:FAILED");

        emit InstanceDeployed(defaultVersion, debtLocker_, arguments);
    }

    /// @dev This function is disabled in favour of a PoolV1-compatible `newLocker` function.
    function createInstance(bytes calldata arguments_, bytes32 salt_)
        public override(IMapleProxyFactory, MapleProxyFactory) virtual returns (address instance_)
    {}

    /// @dev This function is disabled in since the PoolV1-compatible `newLocker` function is used instead of `createInstance`.
    function getInstanceAddress(bytes calldata arguments_, bytes32 salt_)
        public view override(IMapleProxyFactory, MapleProxyFactory) virtual returns (address instanceAddress_)
    {}

}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "metadata": {
    "bytecodeHash": "none"
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"mapleGlobals_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"version_","type":"uint256"}],"name":"DefaultVersionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"version_","type":"uint256"},{"indexed":true,"internalType":"address","name":"implementationAddress_","type":"address"},{"indexed":true,"internalType":"address","name":"initializer_","type":"address"}],"name":"ImplementationRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"version_","type":"uint256"},{"indexed":true,"internalType":"address","name":"instance_","type":"address"},{"indexed":false,"internalType":"bytes","name":"initializationArguments_","type":"bytes"}],"name":"InstanceDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"instance_","type":"address"},{"indexed":true,"internalType":"uint256","name":"fromVersion_","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"toVersion_","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"migrationArguments_","type":"bytes"}],"name":"InstanceUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"mapleGlobals_","type":"address"}],"name":"MapleGlobalsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromVersion_","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"toVersion_","type":"uint256"}],"name":"UpgradePathDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromVersion_","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"toVersion_","type":"uint256"},{"indexed":true,"internalType":"address","name":"migrator_","type":"address"}],"name":"UpgradePathEnabled","type":"event"},{"inputs":[{"internalType":"bytes","name":"arguments_","type":"bytes"},{"internalType":"bytes32","name":"salt_","type":"bytes32"}],"name":"createInstance","outputs":[{"internalType":"address","name":"instance_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultImplementation","outputs":[{"internalType":"address","name":"defaultImplementation_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromVersion_","type":"uint256"},{"internalType":"uint256","name":"toVersion_","type":"uint256"}],"name":"disableUpgradePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromVersion_","type":"uint256"},{"internalType":"uint256","name":"toVersion_","type":"uint256"},{"internalType":"address","name":"migrator_","type":"address"}],"name":"enableUpgradePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factoryType","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"arguments_","type":"bytes"},{"internalType":"bytes32","name":"salt_","type":"bytes32"}],"name":"getInstanceAddress","outputs":[{"internalType":"address","name":"instanceAddress_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"version_","type":"uint256"}],"name":"implementationOf","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mapleGlobals","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"oldVersion_","type":"uint256"},{"internalType":"uint256","name":"newVersion_","type":"uint256"}],"name":"migratorForPath","outputs":[{"internalType":"address","name":"migrator_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"loan_","type":"address"}],"name":"newLocker","outputs":[{"internalType":"address","name":"debtLocker_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"version_","type":"uint256"},{"internalType":"address","name":"implementationAddress_","type":"address"},{"internalType":"address","name":"initializer_","type":"address"}],"name":"registerImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"version_","type":"uint256"}],"name":"setDefaultVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mapleGlobals_","type":"address"}],"name":"setGlobals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"upgradeEnabledForPath","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"toVersion_","type":"uint256"},{"internalType":"bytes","name":"arguments_","type":"bytes"}],"name":"upgradeInstance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"implementation_","type":"address"}],"name":"versionOf","outputs":[{"internalType":"uint256","name":"version_","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162001ab438038062001ab483398101604081905262000034916200013e565b8060006001600160a01b031681600360006101000a8154816001600160a01b0302191690836001600160a01b0316021790556001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156200009f57600080fd5b505afa158015620000b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000da91906200013e565b6001600160a01b03161415620001365760405162461bcd60e51b815260206004820152601560248201527f4d50463a433a494e56414c49445f474c4f42414c530000000000000000000000604482015260640160405180910390fd5b505062000170565b6000602082840312156200015157600080fd5b81516001600160a01b03811681146200016957600080fd5b9392505050565b61193480620001806000396000f3fe60806040523480156200001157600080fd5b5060043610620001215760003560e01c806385b8a52f11620000af578063b39c4593116200007a578063b39c45931462000273578063b4e6747f1462000294578063cc2e0a2614620002ab578063d867e0de14620002c2578063fe69f708146200030457600080fd5b806385b8a52f14620002025780638636f07e1462000219578063881829121462000245578063b28317bf146200025c57600080fd5b806319eb783a11620000f057806319eb783a14620001bb5780633a60339a14620001d2578063517b657f146200016557806364e1fd5514620001e657600080fd5b80630db3ff4514620001265780630e6e4b25146200016557806312700bae14620001985780631798d48214620001b1575b600080fd5b620001526200013736600462001446565b6001600160a01b031660009081526001602052604090205490565b6040519081526020015b60405180910390f35b6200017f6200017636600462001486565b60009392505050565b6040516001600160a01b0390911681526020016200015c565b620001af620001a9366004620014f0565b6200031b565b005b6200015260045481565b6200017f620001cc36600462001446565b62000524565b6003546200017f906001600160a01b031681565b620001ef600181565b60405160ff90911681526020016200015c565b6200017f6200021336600462001587565b620005f2565b6200017f6200022a366004620014d6565b6000908152602081905260409020546001600160a01b031690565b620001af6200025636600462001587565b6200061c565b620001af6200026d366004620015aa565b620007c8565b6004546000908152602081905260409020546001600160a01b03166200017f565b620001af620002a5366004620014d6565b62000982565b620001af620002bc36600462001446565b62000ae4565b620002f3620002d336600462001587565b600560209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016200015c565b620001af6200031536600462001537565b62000cbd565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036a57600080fd5b505afa1580156200037f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a5919062001466565b6001600160a01b0316336001600160a01b031614620003e15760405162461bcd60e51b8152600401620003d89062001699565b60405180910390fd5b82620004295760405162461bcd60e51b815260206004820152601660248201527526a8231d29249d24a72b20a624a22fab22a929a4a7a760511b6044820152606401620003d8565b806001600160a01b0316826001600160a01b0316847fe69962526b7f07862bf85663f861564361295f9601236fbbe056591eb1b63f3b60405160405180910390a462000476838362000e80565b620004c45760405162461bcd60e51b815260206004820152601e60248201527f4d50463a52493a4641494c5f464f525f494d504c454d454e544154494f4e00006044820152606401620003d8565b620004d183848362000f2c565b6200051f5760405162461bcd60e51b815260206004820152601860248201527f4d50463a52493a4641494c5f464f525f4d49475241544f5200000000000000006044820152606401620003d8565b505050565b604080516001600160a01b03831660208201523381830152815180820383018152606090910190915260045460009190829062000562908362000fb6565b9350905080620005a55760405162461bcd60e51b815260206004820152600d60248201526c1113118e93930e919052531151609a1b6044820152606401620003d8565b826001600160a01b03166004547f8919387fe006fdc29a3dfcc183071d7974bc03747fedb0019630f1e13f85cc6484604051620005e3919062001684565b60405180910390a35050919050565b60008281526002602090815260408083208484529091529020546001600160a01b03165b92915050565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156200066b57600080fd5b505afa15801562000680573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006a6919062001466565b6001600160a01b0316336001600160a01b031614620006d95760405162461bcd60e51b8152600401620003d89062001699565b808214156200072b5760405162461bcd60e51b815260206004820152601f60248201527f4d50463a4455503a4f56455257524954494e475f494e495449414c495a4552006044820152606401620003d8565b620007398282600062000f2c565b620007785760405162461bcd60e51b815260206004820152600e60248201526d1354118e9115540e91905253115160921b6044820152606401620003d8565b604051819083907fa46f1addc2236b7d93ed2a8a507f1c47cc92656d2b6f82bf0876da9e964b9e5e90600090a360009182526005602090815260408084209284529190529020805460ff19169055565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156200081757600080fd5b505afa1580156200082c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000852919062001466565b6001600160a01b0316336001600160a01b031614620008855760405162461bcd60e51b8152600401620003d89062001699565b81831415620008d75760405162461bcd60e51b815260206004820152601f60248201527f4d50463a4555503a4f56455257524954494e475f494e495449414c495a4552006044820152606401620003d8565b620008e483838362000f2c565b620009235760405162461bcd60e51b815260206004820152600e60248201526d1354118e9155540e91905253115160921b6044820152606401620003d8565b806001600160a01b031682847f549a41e54b51dcc3f29b51bb02a8adcc4ec5ae26604608e41bde60311dcef10660405160405180910390a45060009182526005602090815260408084209284529190529020805460ff19166001179055565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015620009d157600080fd5b505afa158015620009e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a0c919062001466565b6001600160a01b0316336001600160a01b03161462000a3f5760405162461bcd60e51b8152600401620003d89062001699565b80158062000a6357506000818152602081905260409020546001600160a01b031615155b62000ab15760405162461bcd60e51b815260206004820152601760248201527f4d50463a5344563a494e56414c49445f56455253494f4e0000000000000000006044820152606401620003d8565b600481905560405181907fddb2013cf7f102d15447c4c1e94cf56823455f02eb244d0c3b2ef6516338934690600090a250565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801562000b3357600080fd5b505afa15801562000b48573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b6e919062001466565b6001600160a01b0316336001600160a01b03161462000ba15760405162461bcd60e51b8152600401620003d89062001699565b60006001600160a01b0316816001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801562000be657600080fd5b505afa15801562000bfb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c21919062001466565b6001600160a01b0316141562000c735760405162461bcd60e51b81526020600482015260166024820152754d50463a53473a494e56414c49445f474c4f42414c5360501b6044820152606401620003d8565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f9074839b84a74138be159cb7813a72c2a44c35fe8c53da66a16da385d348c5f190600090a250565b600060016000336001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801562000cfd57600080fd5b505afa15801562000d12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d38919062001466565b6001600160a01b03168152602080820192909252604090810160009081205480825260058452828220888352909352205490915060ff1662000db25760405162461bcd60e51b81526020600482015260126024820152711354118e95524e9393d517d0531313d5d15160721b6044820152606401620003d8565b8381336001600160a01b03167ffbb4f36b70dba8ecedc8b38361f44f1b0c61e04ec4e0ccf620649dc558573f5f868660405162000df192919062001655565b60405180910390a462000e3c338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200104392505050565b62000e7a5760405162461bcd60e51b815260206004820152600d60248201526c1354118e95524e919052531151609a1b6044820152606401620003d8565b50505050565b600082158062000ea657506000838152602081905260409020546001600160a01b031615155b8062000ec957506001600160a01b03821660009081526001602052604090205415155b8062000edd57506001600160a01b0382163b155b1562000eec5750600062000616565b5060008281526020818152604080832080546001600160a01b0319166001600160a01b039590951694851790559282526001908190529190209190915590565b600083158062000f3a575082155b1562000f495750600062000faf565b6001600160a01b0382161580159062000f6a57506001600160a01b0382163b155b1562000f795750600062000faf565b506000838152600260209081526040808320858452909152902080546001600160a01b0319166001600160a01b03831617905560015b9392505050565b60008281526020819052604081205481906001600160a01b03168062000fe45760008092509250506200103c565b308160405162000ff490620013f3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562001028573d6000803e3d6000fd5b509150620010388286866200125b565b9250505b9250929050565b60006001600160a01b0384163b6200105e5750600062000faf565b6000838152602081905260409020546001600160a01b0316806200108757600091505062000faf565b6000620010948662001343565b909350905082620010ab5760009250505062000faf565b604080516001600160a01b0384811660248084019190915283518084039091018152604490920183526020820180516001600160e01b0316636bc26a1360e11b17905291519188169162001100919062001609565b6000604051808303816000865af19150503d80600081146200113f576040519150601f19603f3d011682016040523d82523d6000602084013e62001144565b606091505b505080935050826200115c5760009250505062000faf565b6001600160a01b038082166000908152600160209081526040808320548352600282528083208984529091529020541680620011a2576000855114935050505062000faf565b866001600160a01b031663c3fbb6fd60e01b8287604051602401620011c992919062001627565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905162001209919062001609565b6000604051808303816000865af19150503d806000811462001248576040519150601f19603f3d011682016040523d82523d6000602084013e6200124d565b606091505b509098975050505050505050565b60008281526002602090815260408083209091528120546001600160a01b0316806200128c57505080511562000faf565b846001600160a01b031663c3fbb6fd60e01b8285604051602401620012b392919062001627565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051620012f3919062001609565b6000604051808303816000865af19150503d806000811462001332576040519150601f19603f3d011682016040523d82523d6000602084013e62001337565b606091505b50909695505050505050565b60408051600481526024810182526020810180516001600160e01b0316635c60da1b60e01b179052905160009182916060916001600160a01b038616916200138c919062001609565b600060405180830381855afa9150503d8060008114620013c9576040519150601f19603f3d011682016040523d82523d6000602084013e620013ce565b606091505b5080519194509150620013eb908201602090810190830162001466565b915050915091565b61021c806200170c83390190565b60008083601f8401126200141457600080fd5b50813567ffffffffffffffff8111156200142d57600080fd5b6020830191508360208285010111156200103c57600080fd5b6000602082840312156200145957600080fd5b813562000faf81620016f2565b6000602082840312156200147957600080fd5b815162000faf81620016f2565b6000806000604084860312156200149c57600080fd5b833567ffffffffffffffff811115620014b457600080fd5b620014c28682870162001401565b909790965060209590950135949350505050565b600060208284031215620014e957600080fd5b5035919050565b6000806000606084860312156200150657600080fd5b8335925060208401356200151a81620016f2565b915060408401356200152c81620016f2565b809150509250925092565b6000806000604084860312156200154d57600080fd5b83359250602084013567ffffffffffffffff8111156200156c57600080fd5b6200157a8682870162001401565b9497909650939450505050565b600080604083850312156200159b57600080fd5b50508035926020909101359150565b600080600060608486031215620015c057600080fd5b833592506020840135915060408401356200152c81620016f2565b60008151808452620015f5816020860160208601620016c3565b601f01601f19169290920160200192915050565b600082516200161d818460208701620016c3565b9190910192915050565b6001600160a01b03831681526040602082018190526000906200164d90830184620015db565b949350505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60208152600062000faf6020830184620015db565b60208082526010908201526f26a8231d2727aa2fa3a7ab22a92727a960811b604082015260600190565b60005b83811015620016e0578181015183820152602001620016c6565b8381111562000e7a5750506000910152565b6001600160a01b03811681146200170857600080fd5b5056fe608060405234801561001057600080fd5b5060405161021c38038061021c83398101604081905261002f91610169565b6001600160a01b0382167f7a45a402e4cb6e08ebc196f20f66d5d30e67285a2a8aa80503fa409e727a4af15560006001600160a01b0382161561007257816100e3565b826001600160a01b031663b39c45936040518163ffffffff1660e01b815260040160206040518083038186803b1580156100ab57600080fd5b505afa1580156100bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e39190610147565b90506001600160a01b0381166100f857600080fd5b6001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc555061019c9050565b80516001600160a01b038116811461014257600080fd5b919050565b60006020828403121561015957600080fd5b6101628261012b565b9392505050565b6000806040838503121561017c57600080fd5b6101858361012b565b91506101936020840161012b565b90509250929050565b6072806101aa6000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90506001600160a01b0381163b604257600080fd5b3660008037600080366000845af43d6000803e8080156060573d6000f35b3d6000fdfea164736f6c6343000807000aa164736f6c6343000807000a000000000000000000000000c234c62c8c09687dff0d9047e40042cd166f3600

Deployed Bytecode

0x60806040523480156200001157600080fd5b5060043610620001215760003560e01c806385b8a52f11620000af578063b39c4593116200007a578063b39c45931462000273578063b4e6747f1462000294578063cc2e0a2614620002ab578063d867e0de14620002c2578063fe69f708146200030457600080fd5b806385b8a52f14620002025780638636f07e1462000219578063881829121462000245578063b28317bf146200025c57600080fd5b806319eb783a11620000f057806319eb783a14620001bb5780633a60339a14620001d2578063517b657f146200016557806364e1fd5514620001e657600080fd5b80630db3ff4514620001265780630e6e4b25146200016557806312700bae14620001985780631798d48214620001b1575b600080fd5b620001526200013736600462001446565b6001600160a01b031660009081526001602052604090205490565b6040519081526020015b60405180910390f35b6200017f6200017636600462001486565b60009392505050565b6040516001600160a01b0390911681526020016200015c565b620001af620001a9366004620014f0565b6200031b565b005b6200015260045481565b6200017f620001cc36600462001446565b62000524565b6003546200017f906001600160a01b031681565b620001ef600181565b60405160ff90911681526020016200015c565b6200017f6200021336600462001587565b620005f2565b6200017f6200022a366004620014d6565b6000908152602081905260409020546001600160a01b031690565b620001af6200025636600462001587565b6200061c565b620001af6200026d366004620015aa565b620007c8565b6004546000908152602081905260409020546001600160a01b03166200017f565b620001af620002a5366004620014d6565b62000982565b620001af620002bc36600462001446565b62000ae4565b620002f3620002d336600462001587565b600560209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016200015c565b620001af6200031536600462001537565b62000cbd565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036a57600080fd5b505afa1580156200037f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a5919062001466565b6001600160a01b0316336001600160a01b031614620003e15760405162461bcd60e51b8152600401620003d89062001699565b60405180910390fd5b82620004295760405162461bcd60e51b815260206004820152601660248201527526a8231d29249d24a72b20a624a22fab22a929a4a7a760511b6044820152606401620003d8565b806001600160a01b0316826001600160a01b0316847fe69962526b7f07862bf85663f861564361295f9601236fbbe056591eb1b63f3b60405160405180910390a462000476838362000e80565b620004c45760405162461bcd60e51b815260206004820152601e60248201527f4d50463a52493a4641494c5f464f525f494d504c454d454e544154494f4e00006044820152606401620003d8565b620004d183848362000f2c565b6200051f5760405162461bcd60e51b815260206004820152601860248201527f4d50463a52493a4641494c5f464f525f4d49475241544f5200000000000000006044820152606401620003d8565b505050565b604080516001600160a01b03831660208201523381830152815180820383018152606090910190915260045460009190829062000562908362000fb6565b9350905080620005a55760405162461bcd60e51b815260206004820152600d60248201526c1113118e93930e919052531151609a1b6044820152606401620003d8565b826001600160a01b03166004547f8919387fe006fdc29a3dfcc183071d7974bc03747fedb0019630f1e13f85cc6484604051620005e3919062001684565b60405180910390a35050919050565b60008281526002602090815260408083208484529091529020546001600160a01b03165b92915050565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156200066b57600080fd5b505afa15801562000680573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006a6919062001466565b6001600160a01b0316336001600160a01b031614620006d95760405162461bcd60e51b8152600401620003d89062001699565b808214156200072b5760405162461bcd60e51b815260206004820152601f60248201527f4d50463a4455503a4f56455257524954494e475f494e495449414c495a4552006044820152606401620003d8565b620007398282600062000f2c565b620007785760405162461bcd60e51b815260206004820152600e60248201526d1354118e9115540e91905253115160921b6044820152606401620003d8565b604051819083907fa46f1addc2236b7d93ed2a8a507f1c47cc92656d2b6f82bf0876da9e964b9e5e90600090a360009182526005602090815260408084209284529190529020805460ff19169055565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156200081757600080fd5b505afa1580156200082c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000852919062001466565b6001600160a01b0316336001600160a01b031614620008855760405162461bcd60e51b8152600401620003d89062001699565b81831415620008d75760405162461bcd60e51b815260206004820152601f60248201527f4d50463a4555503a4f56455257524954494e475f494e495449414c495a4552006044820152606401620003d8565b620008e483838362000f2c565b620009235760405162461bcd60e51b815260206004820152600e60248201526d1354118e9155540e91905253115160921b6044820152606401620003d8565b806001600160a01b031682847f549a41e54b51dcc3f29b51bb02a8adcc4ec5ae26604608e41bde60311dcef10660405160405180910390a45060009182526005602090815260408084209284529190529020805460ff19166001179055565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015620009d157600080fd5b505afa158015620009e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a0c919062001466565b6001600160a01b0316336001600160a01b03161462000a3f5760405162461bcd60e51b8152600401620003d89062001699565b80158062000a6357506000818152602081905260409020546001600160a01b031615155b62000ab15760405162461bcd60e51b815260206004820152601760248201527f4d50463a5344563a494e56414c49445f56455253494f4e0000000000000000006044820152606401620003d8565b600481905560405181907fddb2013cf7f102d15447c4c1e94cf56823455f02eb244d0c3b2ef6516338934690600090a250565b600360009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801562000b3357600080fd5b505afa15801562000b48573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b6e919062001466565b6001600160a01b0316336001600160a01b03161462000ba15760405162461bcd60e51b8152600401620003d89062001699565b60006001600160a01b0316816001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801562000be657600080fd5b505afa15801562000bfb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c21919062001466565b6001600160a01b0316141562000c735760405162461bcd60e51b81526020600482015260166024820152754d50463a53473a494e56414c49445f474c4f42414c5360501b6044820152606401620003d8565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f9074839b84a74138be159cb7813a72c2a44c35fe8c53da66a16da385d348c5f190600090a250565b600060016000336001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801562000cfd57600080fd5b505afa15801562000d12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d38919062001466565b6001600160a01b03168152602080820192909252604090810160009081205480825260058452828220888352909352205490915060ff1662000db25760405162461bcd60e51b81526020600482015260126024820152711354118e95524e9393d517d0531313d5d15160721b6044820152606401620003d8565b8381336001600160a01b03167ffbb4f36b70dba8ecedc8b38361f44f1b0c61e04ec4e0ccf620649dc558573f5f868660405162000df192919062001655565b60405180910390a462000e3c338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200104392505050565b62000e7a5760405162461bcd60e51b815260206004820152600d60248201526c1354118e95524e919052531151609a1b6044820152606401620003d8565b50505050565b600082158062000ea657506000838152602081905260409020546001600160a01b031615155b8062000ec957506001600160a01b03821660009081526001602052604090205415155b8062000edd57506001600160a01b0382163b155b1562000eec5750600062000616565b5060008281526020818152604080832080546001600160a01b0319166001600160a01b039590951694851790559282526001908190529190209190915590565b600083158062000f3a575082155b1562000f495750600062000faf565b6001600160a01b0382161580159062000f6a57506001600160a01b0382163b155b1562000f795750600062000faf565b506000838152600260209081526040808320858452909152902080546001600160a01b0319166001600160a01b03831617905560015b9392505050565b60008281526020819052604081205481906001600160a01b03168062000fe45760008092509250506200103c565b308160405162000ff490620013f3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562001028573d6000803e3d6000fd5b509150620010388286866200125b565b9250505b9250929050565b60006001600160a01b0384163b6200105e5750600062000faf565b6000838152602081905260409020546001600160a01b0316806200108757600091505062000faf565b6000620010948662001343565b909350905082620010ab5760009250505062000faf565b604080516001600160a01b0384811660248084019190915283518084039091018152604490920183526020820180516001600160e01b0316636bc26a1360e11b17905291519188169162001100919062001609565b6000604051808303816000865af19150503d80600081146200113f576040519150601f19603f3d011682016040523d82523d6000602084013e62001144565b606091505b505080935050826200115c5760009250505062000faf565b6001600160a01b038082166000908152600160209081526040808320548352600282528083208984529091529020541680620011a2576000855114935050505062000faf565b866001600160a01b031663c3fbb6fd60e01b8287604051602401620011c992919062001627565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905162001209919062001609565b6000604051808303816000865af19150503d806000811462001248576040519150601f19603f3d011682016040523d82523d6000602084013e6200124d565b606091505b509098975050505050505050565b60008281526002602090815260408083209091528120546001600160a01b0316806200128c57505080511562000faf565b846001600160a01b031663c3fbb6fd60e01b8285604051602401620012b392919062001627565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051620012f3919062001609565b6000604051808303816000865af19150503d806000811462001332576040519150601f19603f3d011682016040523d82523d6000602084013e62001337565b606091505b50909695505050505050565b60408051600481526024810182526020810180516001600160e01b0316635c60da1b60e01b179052905160009182916060916001600160a01b038616916200138c919062001609565b600060405180830381855afa9150503d8060008114620013c9576040519150601f19603f3d011682016040523d82523d6000602084013e620013ce565b606091505b5080519194509150620013eb908201602090810190830162001466565b915050915091565b61021c806200170c83390190565b60008083601f8401126200141457600080fd5b50813567ffffffffffffffff8111156200142d57600080fd5b6020830191508360208285010111156200103c57600080fd5b6000602082840312156200145957600080fd5b813562000faf81620016f2565b6000602082840312156200147957600080fd5b815162000faf81620016f2565b6000806000604084860312156200149c57600080fd5b833567ffffffffffffffff811115620014b457600080fd5b620014c28682870162001401565b909790965060209590950135949350505050565b600060208284031215620014e957600080fd5b5035919050565b6000806000606084860312156200150657600080fd5b8335925060208401356200151a81620016f2565b915060408401356200152c81620016f2565b809150509250925092565b6000806000604084860312156200154d57600080fd5b83359250602084013567ffffffffffffffff8111156200156c57600080fd5b6200157a8682870162001401565b9497909650939450505050565b600080604083850312156200159b57600080fd5b50508035926020909101359150565b600080600060608486031215620015c057600080fd5b833592506020840135915060408401356200152c81620016f2565b60008151808452620015f5816020860160208601620016c3565b601f01601f19169290920160200192915050565b600082516200161d818460208701620016c3565b9190910192915050565b6001600160a01b03831681526040602082018190526000906200164d90830184620015db565b949350505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60208152600062000faf6020830184620015db565b60208082526010908201526f26a8231d2727aa2fa3a7ab22a92727a960811b604082015260600190565b60005b83811015620016e0578181015183820152602001620016c6565b8381111562000e7a5750506000910152565b6001600160a01b03811681146200170857600080fd5b5056fe608060405234801561001057600080fd5b5060405161021c38038061021c83398101604081905261002f91610169565b6001600160a01b0382167f7a45a402e4cb6e08ebc196f20f66d5d30e67285a2a8aa80503fa409e727a4af15560006001600160a01b0382161561007257816100e3565b826001600160a01b031663b39c45936040518163ffffffff1660e01b815260040160206040518083038186803b1580156100ab57600080fd5b505afa1580156100bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e39190610147565b90506001600160a01b0381166100f857600080fd5b6001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc555061019c9050565b80516001600160a01b038116811461014257600080fd5b919050565b60006020828403121561015957600080fd5b6101628261012b565b9392505050565b6000806040838503121561017c57600080fd5b6101858361012b565b91506101936020840161012b565b90509250929050565b6072806101aa6000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90506001600160a01b0381163b604257600080fd5b3660008037600080366000845af43d6000803e8080156060573d6000f35b3d6000fdfea164736f6c6343000807000aa164736f6c6343000807000a

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000c234c62c8c09687dff0d9047e40042cd166f3600

-----Decoded View---------------
Arg [0] : mapleGlobals_ (address): 0xC234c62c8C09687DFf0d9047e40042cd166F3600

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c234c62c8c09687dff0d9047e40042cd166f3600


Deployed Bytecode Sourcemap

25018:1243:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24815:151;;;;;;:::i;:::-;-1:-1:-1;;;;;24932:27:0;24897:16;24932:27;;;:10;:27;;;;;;;24815:151;;;;10267:25:1;;;10255:2;10240:18;24815:151:0;;;;;;;;26071:187;;;;;;:::i;:::-;26226:24;26071:187;;;;;;;;;-1:-1:-1;;;;;4094:32:1;;;4076:51;;4064:2;4049:18;26071:187:0;3930:203:1;21635:686:0;;;;;;:::i;:::-;;:::i;:::-;;20085:38;;;;;;25299:367;;;;;;:::i;:::-;;:::i;20042:36::-;;;;;-1:-1:-1;;;;;20042:36:0;;;25093:53;;25144:1;25093:53;;;;;10475:4:1;10463:17;;;10445:36;;10433:2;10418:18;25093:53:0;10303:184:1;24619:190:0;;;;;;:::i;:::-;;:::i;24295:158::-;;;;;;:::i;:::-;24377:23;24419:27;;;;;;;;;;;-1:-1:-1;;;;;24419:27:0;;24295:158;20714:442;;;;;;:::i;:::-;;:::i;21162:467::-;;;;;;:::i;:::-;;:::i;24459:154::-;24591:14;;24524:30;24573:33;;;;;;;;;;;-1:-1:-1;;;;;24573:33:0;24459:154;;22327:336;;;;;;:::i;:::-;;:::i;22669:250::-;;;;;;:::i;:::-;;:::i;20130:82::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4931:14:1;;4924:22;4906:41;;4894:2;4879:18;20130:82:0;4766:187:1;23509:451:0;;;;;;:::i;:::-;;:::i;21635:686::-;20527:12;;;;;;;;;-1:-1:-1;;;;;20527:12:0;-1:-1:-1;;;;;20509:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20495:56:0;:10;-1:-1:-1;;;;;20495:56:0;;20487:85;;;;-1:-1:-1;;;20487:85:0;;;;;;;:::i;:::-;;;;;;;;;21877:22;21869:57:::1;;;::::0;-1:-1:-1;;;21869:57:0;;8237:2:1;21869:57:0::1;::::0;::::1;8219:21:1::0;8276:2;8256:18;;;8249:30;-1:-1:-1;;;8295:18:1;;;8288:52;8357:18;;21869:57:0::1;8035:346:1::0;21869:57:0::1;22001:12;-1:-1:-1::0;;;;;21942:72:0::1;21977:22;-1:-1:-1::0;;;;;21942:72:0::1;21967:8;21942:72;;;;;;;;;;22033:57;22057:8;22067:22;22033:23;:57::i;:::-;22025:100;;;::::0;-1:-1:-1;;;22025:100:0;;6837:2:1;22025:100:0::1;::::0;::::1;6819:21:1::0;6876:2;6856:18;;;6849:30;6915:32;6895:18;;;6888:60;6965:18;;22025:100:0::1;6635:354:1::0;22025:100:0::1;22234:51;22252:8;22262;22272:12;22234:17;:51::i;:::-;22226:88;;;::::0;-1:-1:-1;;;22226:88:0;;7884:2:1;22226:88:0::1;::::0;::::1;7866:21:1::0;7923:2;7903:18;;;7896:30;7962:26;7942:18;;;7935:54;8006:18;;22226:88:0::1;7682:348:1::0;22226:88:0::1;21635:686:::0;;;:::o;25299:367::-;25416:29;;;-1:-1:-1;;;;;4368:15:1;;25416:29:0;;;4350:34:1;25434:10:0;4400:18:1;;;4393:43;25416:29:0;;;;;;;;;4285:18:1;;;;25416:29:0;;;25518:14;;-1:-1:-1;;25416:29:0;-1:-1:-1;;25505:39:0;;25416:29;25505:12;:39::i;:::-;25478:66;-1:-1:-1;25478:66:0;-1:-1:-1;25478:66:0;25554:33;;;;-1:-1:-1;;;25554:33:0;;8588:2:1;25554:33:0;;;8570:21:1;8627:2;8607:18;;;8600:30;-1:-1:-1;;;8646:18:1;;;8639:43;8699:18;;25554:33:0;8386:337:1;25554:33:0;25636:11;-1:-1:-1;;;;;25603:56:0;25620:14;;25603:56;25649:9;25603:56;;;;;;:::i;:::-;;;;;;;;25381:285;;25299:367;;;:::o;24619:190::-;24724:17;24760:29;;;:16;:29;;;;;;;;:42;;;;;;;;;-1:-1:-1;;;;;24760:42:0;24619:190;;;;;:::o;20714:442::-;20527:12;;;;;;;;;-1:-1:-1;;;;;20527:12:0;-1:-1:-1;;;;;20509:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20495:56:0;:10;-1:-1:-1;;;;;20495:56:0;;20487:85;;;;-1:-1:-1;;;20487:85:0;;;;;;;:::i;:::-;20855:10:::1;20839:12;:26;;20831:99;;;::::0;-1:-1:-1;;;20831:99:0;;6477:2:1;20831:99:0::1;::::0;::::1;6459:21:1::0;6516:2;6496:18;;;6489:30;6555:33;6535:18;;;6528:61;6606:18;;20831:99:0::1;6275:355:1::0;20831:99:0::1;20948:55;20966:12;20980:10;21000:1;20948:17;:55::i;:::-;20940:82;;;::::0;-1:-1:-1;;;20940:82:0;;7541:2:1;20940:82:0::1;::::0;::::1;7523:21:1::0;7580:2;7560:18;;;7553:30;-1:-1:-1;;;7599:18:1;;;7592:44;7653:18;;20940:82:0::1;7339:338:1::0;20940:82:0::1;21038:45;::::0;21072:10;;21058:12;;21038:45:::1;::::0;;;::::1;21144:5;21094:35:::0;;;:21:::1;:35;::::0;;;;;;;:47;;;;;;;;:55;;-1:-1:-1;;21094:55:0::1;::::0;;20714:442::o;21162:467::-;20527:12;;;;;;;;;-1:-1:-1;;;;;20527:12:0;-1:-1:-1;;;;;20509:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20495:56:0;:10;-1:-1:-1;;;;;20495:56:0;;20487:85;;;;-1:-1:-1;;;20487:85:0;;;;;;;:::i;:::-;21321:10:::1;21305:12;:26;;21297:98;;;::::0;-1:-1:-1;;;21297:98:0;;6117:2:1;21297:98:0::1;::::0;::::1;6099:21:1::0;6156:2;6136:18;;;6129:30;6195:33;6175:18;;;6168:61;6246:18;;21297:98:0::1;5915:355:1::0;21297:98:0::1;21413:54;21431:12;21445:10;21457:9;21413:17;:54::i;:::-;21405:81;;;::::0;-1:-1:-1;;;21405:81:0;;9980:2:1;21405:81:0::1;::::0;::::1;9962:21:1::0;10019:2;9999:18;;;9992:30;-1:-1:-1;;;10038:18:1;;;10031:44;10092:18;;21405:81:0::1;9778:338:1::0;21405:81:0::1;21547:9;-1:-1:-1::0;;;;;21502:55:0::1;21535:10;21521:12;21502:55;;;;;;;;;;-1:-1:-1::0;21568:35:0::1;::::0;;;:21:::1;:35;::::0;;;;;;;:47;;;;;;;;:54;;-1:-1:-1;;21568:54:0::1;21618:4;21568:54;::::0;;21162:467::o;22327:336::-;20527:12;;;;;;;;;-1:-1:-1;;;;;20527:12:0;-1:-1:-1;;;;;20509:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20495:56:0;:10;-1:-1:-1;;;;;20495:56:0;;20487:85;;;;-1:-1:-1;;;20487:85:0;;;;;;;:::i;:::-;22510:13;;;:58:::1;;-1:-1:-1::0;22566:1:0::1;22527:27:::0;;;::::1;::::0;;;;;;;-1:-1:-1;;;;;22527:27:0::1;:41:::0;::::1;22510:58;22502:94;;;::::0;-1:-1:-1;;;22502:94:0;;9277:2:1;22502:94:0::1;::::0;::::1;9259:21:1::0;9316:2;9296:18;;;9289:30;9355:25;9335:18;;;9328:53;9398:18;;22502:94:0::1;9075:347:1::0;22502:94:0::1;22630:14;:25:::0;;;22612:44:::1;::::0;22647:8;;22612:44:::1;::::0;;;::::1;22327:336:::0;:::o;22669:250::-;20527:12;;;;;;;;;-1:-1:-1;;;;;20527:12:0;-1:-1:-1;;;;;20509:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20495:56:0;:10;-1:-1:-1;;;;;20495:56:0;;20487:85;;;;-1:-1:-1;;;20487:85:0;;;;;;;:::i;:::-;22822:1:::1;-1:-1:-1::0;;;;;22767:57:0::1;22785:13;-1:-1:-1::0;;;;;22767:41:0::1;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22767:57:0::1;;;22759:92;;;::::0;-1:-1:-1;;;22759:92:0;;9629:2:1;22759:92:0::1;::::0;::::1;9611:21:1::0;9668:2;9648:18;;;9641:30;-1:-1:-1;;;9687:18:1;;;9680:52;9749:18;;22759:92:0::1;9427:346:1::0;22759:92:0::1;22883:12;:28:::0;;-1:-1:-1;;;;;;22883:28:0::1;-1:-1:-1::0;;;;;22883:28:0;::::1;::::0;;::::1;::::0;;;22867:45:::1;::::0;::::1;::::0;-1:-1:-1;;22867:45:0::1;22669:250:::0;:::o;23509:451::-;23615:19;23637:10;:58;23666:10;-1:-1:-1;;;;;23648:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23637:58:0;;;;;;;;;;;;;;;-1:-1:-1;23637:58:0;;;;23714:34;;;:21;:34;;;;;:46;;;;;;;;23637:58;;-1:-1:-1;23714:46:0;;23706:77;;;;-1:-1:-1;;;23706:77:0;;8930:2:1;23706:77:0;;;8912:21:1;8969:2;8949:18;;;8942:30;-1:-1:-1;;;8988:18:1;;;8981:48;9046:18;;23706:77:0;8728:342:1;23706:77:0;23841:10;23828:11;23816:10;-1:-1:-1;;;;;23799:65:0;;23853:10;;23799:65;;;;;;;:::i;:::-;;;;;;;;23883:52;23900:10;23912;23924;;23883:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23883:16:0;;-1:-1:-1;;;23883:52:0:i;:::-;23875:78;;;;-1:-1:-1;;;23875:78:0;;5775:2:1;23875:78:0;;;5757:21:1;5814:2;5794:18;;;5787:30;-1:-1:-1;;;5833:18:1;;;5826:43;5886:18;;23875:78:0;5573:337:1;23875:78:0;23605:355;23509:451;;;:::o;15728:734::-;15830:13;16087:22;;;:79;;-1:-1:-1;16164:1:0;16125:27;;;;;;;;;;;-1:-1:-1;;;;;16125:27:0;:41;;16087:79;:136;;;-1:-1:-1;;;;;;16182:27:0;;16221:1;16182:27;;;:10;:27;;;;;;:41;;16087:136;:181;;;-1:-1:-1;;;;;;19838:20:0;;;:34;16087:181;16070:221;;;-1:-1:-1;16286:5:0;16279:12;;16070:221;-1:-1:-1;16340:17:0;:27;;;;;;;;;;;:45;;-1:-1:-1;;;;;;16340:45:0;-1:-1:-1;;;;;16340:45:0;;;;;;;;;16395:27;;;-1:-1:-1;16395:27:0;;;;;;;:38;;;;-1:-1:-1;15728:734:0:o;16589:493::-;16703:13;16765:26;;;:54;;-1:-1:-1;16795:24:0;;16765:54;16761:72;;;-1:-1:-1;16828:5:0;16821:12;;16761:72;-1:-1:-1;;;;;16924:23:0;;;;;;:50;;-1:-1:-1;;;;;;19838:20:0;;;:34;16924:50;16920:68;;;-1:-1:-1;16983:5:0;16976:12;;16920:68;-1:-1:-1;16999:30:0;;;;:16;:30;;;;;;;;:42;;;;;;;;:54;;-1:-1:-1;;;;;;16999:54:0;-1:-1:-1;;;;;16999:54:0;;;;;-1:-1:-1;16589:493:0;;;;;;:::o;14238:403::-;14329:13;14395:27;;;;;;;;;;;14329:13;;-1:-1:-1;;;;;14395:27:0;14437:28;14433:60;;14475:5;14490:1;14467:26;;;;;;;14433:60;14541:4;14548:14;14523:40;;;;;:::i;:::-;-1:-1:-1;;;;;4368:15:1;;;4350:34;;4420:15;;4415:2;4400:18;;4393:43;4300:2;4285:18;14523:40:0;;;;;;;;;;;;;;;;;;;;;;;14504:60;;14585:49;14605:6;14613:8;14623:10;14585:19;:49::i;:::-;14574:60;;14360:281;14238:403;;;;;;:::o;17317:1555::-;17430:13;-1:-1:-1;;;;;19838:20:0;;;17573:38;;-1:-1:-1;17606:5:0;17599:12;;17573:38;17622:24;17649:29;;;;;;;;;;;-1:-1:-1;;;;;17649:29:0;17814:30;17810:48;;17853:5;17846:12;;;;;17810:48;17921:26;17992:33;18018:6;17992:25;:33::i;:::-;17957:68;;-1:-1:-1;17957:68:0;-1:-1:-1;17957:68:0;18036:27;;18058:5;18051:12;;;;;;18036:27;18145:81;;;-1:-1:-1;;;;;4094:32:1;;;18145:81:0;;;;4076:51:1;;;;18145:81:0;;;;;;;;;;4049:18:1;;;;18145:81:0;;;;;;;-1:-1:-1;;;;;18145:81:0;-1:-1:-1;;;18145:81:0;;;18133:94;;:11;;;;:94;;18145:81;18133:94;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18117:110;;;;;18243:8;18238:27;;18260:5;18253:12;;;;;;18238:27;-1:-1:-1;;;;;18429:30:0;;;18393:16;18429:30;;;:10;:30;;;;;;;;;18412:48;;:16;:48;;;;;:60;;;;;;;;;;18604:22;18600:66;;18664:1;18635:10;:17;:31;18628:38;;;;;;;18600:66;18777:6;-1:-1:-1;;;;;18777:11:0;18812:29;;;18843:8;18853:10;18789:75;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;18789:75:0;;;;;;;;;;;;;;-1:-1:-1;;;;;18789:75:0;-1:-1:-1;;;;;;18789:75:0;;;;;;;;;;18777:88;;;;18789:75;18777:88;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18761:104:0;;17317:1555;-1:-1:-1;;;;;;;;17317:1555:0:o;13292:791::-;13397:13;13520:26;;;:16;:26;;;;;;;;:36;;;;;;-1:-1:-1;;;;;13520:36:0;13701:25;13697:69;;-1:-1:-1;;13735:17:0;;:31;13728:38;;13697:69;13985:6;-1:-1:-1;;;;;13985:11:0;14020:29;;;14051:11;14064:10;13997:78;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;13997:78:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13997:78:0;-1:-1:-1;;;;;;13997:78:0;;;;;;;;;;13985:91;;;;13997:78;13985:91;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13969:107:0;;13292:791;-1:-1:-1;;;;;;13292:791:0:o;12738:439::-;13048:60;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13048:60:0;-1:-1:-1;;;13048:60:0;;;13030:79;;12811:13;;;;12861:23;;-1:-1:-1;;;;;13030:17:0;;;:79;;13048:60;13030:79;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13137:33:0;;13003:106;;-1:-1:-1;13003:106:0;-1:-1:-1;13137:33:0;;;;;;;;;;;;:::i;:::-;13119:51;;12851:326;12738:439;;;:::o;-1:-1:-1:-;;;;;;;;:::o;14:347:1:-;65:8;75:6;129:3;122:4;114:6;110:17;106:27;96:55;;147:1;144;137:12;96:55;-1:-1:-1;170:20:1;;213:18;202:30;;199:50;;;245:1;242;235:12;199:50;282:4;274:6;270:17;258:29;;334:3;327:4;318:6;310;306:19;302:30;299:39;296:59;;;351:1;348;341:12;366:247;425:6;478:2;466:9;457:7;453:23;449:32;446:52;;;494:1;491;484:12;446:52;533:9;520:23;552:31;577:5;552:31;:::i;618:251::-;688:6;741:2;729:9;720:7;716:23;712:32;709:52;;;757:1;754;747:12;709:52;789:9;783:16;808:31;833:5;808:31;:::i;1138:477::-;1217:6;1225;1233;1286:2;1274:9;1265:7;1261:23;1257:32;1254:52;;;1302:1;1299;1292:12;1254:52;1342:9;1329:23;1375:18;1367:6;1364:30;1361:50;;;1407:1;1404;1397:12;1361:50;1446:58;1496:7;1487:6;1476:9;1472:22;1446:58;:::i;:::-;1523:8;;1420:84;;-1:-1:-1;1605:2:1;1590:18;;;;1577:32;;1138:477;-1:-1:-1;;;;1138:477:1:o;1620:180::-;1679:6;1732:2;1720:9;1711:7;1707:23;1703:32;1700:52;;;1748:1;1745;1738:12;1700:52;-1:-1:-1;1771:23:1;;1620:180;-1:-1:-1;1620:180:1:o;1805:456::-;1882:6;1890;1898;1951:2;1939:9;1930:7;1926:23;1922:32;1919:52;;;1967:1;1964;1957:12;1919:52;2003:9;1990:23;1980:33;;2063:2;2052:9;2048:18;2035:32;2076:31;2101:5;2076:31;:::i;:::-;2126:5;-1:-1:-1;2183:2:1;2168:18;;2155:32;2196:33;2155:32;2196:33;:::i;:::-;2248:7;2238:17;;;1805:456;;;;;:::o;2266:477::-;2345:6;2353;2361;2414:2;2402:9;2393:7;2389:23;2385:32;2382:52;;;2430:1;2427;2420:12;2382:52;2466:9;2453:23;2443:33;;2527:2;2516:9;2512:18;2499:32;2554:18;2546:6;2543:30;2540:50;;;2586:1;2583;2576:12;2540:50;2625:58;2675:7;2666:6;2655:9;2651:22;2625:58;:::i;:::-;2266:477;;2702:8;;-1:-1:-1;2599:84:1;;-1:-1:-1;;;;2266:477:1:o;2748:248::-;2816:6;2824;2877:2;2865:9;2856:7;2852:23;2848:32;2845:52;;;2893:1;2890;2883:12;2845:52;-1:-1:-1;;2916:23:1;;;2986:2;2971:18;;;2958:32;;-1:-1:-1;2748:248:1:o;3001:383::-;3078:6;3086;3094;3147:2;3135:9;3126:7;3122:23;3118:32;3115:52;;;3163:1;3160;3153:12;3115:52;3199:9;3186:23;3176:33;;3256:2;3245:9;3241:18;3228:32;3218:42;;3310:2;3299:9;3295:18;3282:32;3323:31;3348:5;3323:31;:::i;3389:257::-;3430:3;3468:5;3462:12;3495:6;3490:3;3483:19;3511:63;3567:6;3560:4;3555:3;3551:14;3544:4;3537:5;3533:16;3511:63;:::i;:::-;3628:2;3607:15;-1:-1:-1;;3603:29:1;3594:39;;;;3635:4;3590:50;;3389:257;-1:-1:-1;;3389:257:1:o;3651:274::-;3780:3;3818:6;3812:13;3834:53;3880:6;3875:3;3868:4;3860:6;3856:17;3834:53;:::i;:::-;3903:16;;;;;3651:274;-1:-1:-1;;3651:274:1:o;4447:314::-;-1:-1:-1;;;;;4622:32:1;;4604:51;;4691:2;4686;4671:18;;4664:30;;;-1:-1:-1;;4711:44:1;;4736:18;;4728:6;4711:44;:::i;:::-;4703:52;4447:314;-1:-1:-1;;;;4447:314:1:o;4958:388::-;5115:2;5104:9;5097:21;5154:6;5149:2;5138:9;5134:18;5127:34;5211:6;5203;5198:2;5187:9;5183:18;5170:48;5267:1;5238:22;;;5262:2;5234:31;;;5227:42;;;;5330:2;5309:15;;;-1:-1:-1;;5305:29:1;5290:45;5286:54;;4958:388;-1:-1:-1;4958:388:1:o;5351:217::-;5498:2;5487:9;5480:21;5461:4;5518:44;5558:2;5547:9;5543:18;5535:6;5518:44;:::i;6994:340::-;7196:2;7178:21;;;7235:2;7215:18;;;7208:30;-1:-1:-1;;;7269:2:1;7254:18;;7247:46;7325:2;7310:18;;6994:340::o;10492:258::-;10564:1;10574:113;10588:6;10585:1;10582:13;10574:113;;;10664:11;;;10658:18;10645:11;;;10638:39;10610:2;10603:10;10574:113;;;10705:6;10702:1;10699:13;10696:48;;;-1:-1:-1;;10740:1:1;10722:16;;10715:27;10492:258::o;10755:131::-;-1:-1:-1;;;;;10830:31:1;;10820:42;;10810:70;;10876:1;10873;10866:12;10810:70;10755:131;:::o

Swarm Source

none

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.