Contract 0x9134C9975244b46692Ad9A7Da36DBa8734Ec6DA3

 
Txn Hash
Method
Block
From
To
Value
0x2ee528bc196e55c7082a7163132232eafebcf44ebcf7bb1555dbae915feb5a82Create New Fund(pending)2022-08-07 1:58:454 days 13 hrs ago0x1458c46cdbab579daece0d14d83ea7fa7fe72afe IN 0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether(Pending)(Pending)
0xfae7cc844e78b168fc2202084869b0ab2f02355eb240a36471f1f2c2057d2e68Create New Fund127317042021-06-29 22:50:55407 days 16 hrs ago0x2e9a529662c099222d657e3f64476568d5c4f3d7 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0009924410
0xb20048e5c70bdf08cbb78cf474449acfa793f50e6561a1c3a442053dd4a5290aCreate New Fund123862622021-05-07 9:07:00461 days 5 hrs ago0x0363433b505d401e3203f75ffce3fcef4a006789 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0481241446
0x2c38c87778804b9ffae391d2db2124a5eec972c2e10d05f026e5e79a847725d2Create New Fund123770362021-05-05 22:44:13462 days 16 hrs ago0x03a7b637d8545cb96ff93c6b415ecee90699a4c8 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0640918575
0xe76ffe6a60f04f2b84a1888e00a2382f031d564ceb50bded925b3c0098d9a594Create New Fund123765902021-05-05 21:08:31462 days 17 hrs agoENS Name digitalventures.eth IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0815756676
0x72df0150b51b1b21ac982e8ef90ab5fc84018882a5dd086c0d6473d62ae26b41Create New Fund123761962021-05-05 19:42:04462 days 19 hrs ago0xd402a55d981c6d279bb735621b7a4c237a4fdaf2 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0647013965
0x7e3276364282a657039a60f27a7df0feef5722195422fa3a11726c41fa59b1bcCreate New Fund123726262021-05-05 6:31:30463 days 8 hrs ago0xf138a5ad15459a79274e162bcbeeaf09f4d07bcf IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍022354727
0x69daeb72f941a55d76dfac44e0c1db2664140b44f08c8f0ce01dc1d3a16603ecCreate New Fund123717112021-05-05 3:09:52463 days 11 hrs ago0x2937da97bcd51bb1d18dab3460c3920c48d7a472 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0416468734
0x6e2d17ffb07311b4816943fc169ff91d95add9ad04433a9e1cf2a5e0760a3169Create New Fund123702532021-05-04 21:39:14463 days 17 hrs agoENS Name mvalente.eth IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0395321746
0x2035fe599ccfe1f5fd1abddc4a0e840bebb1e44d2a5d43f555f2547d93eeebb7Create New Fund123663552021-05-04 7:07:49464 days 7 hrs ago0x38a816027a111fec7db81f567f1550d98507a4ad IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0194663929
0x044849cc7590d91a37e8440f6cab674ab30b90f27955d94509ba37c3a93b8c30Create New Fund123632732021-05-03 19:57:51464 days 19 hrs ago0x4764af094c6db4033ae7dc42ebd3d3e958391f96 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0464780
0x43a11daa569e10daf0d9d566014d3d6cd9f0e07c1e470e73ec2a839089686dd1Create New Fund123596542021-05-03 6:41:57465 days 8 hrs ago0xb280b5d7044da098d6d6587e35b55db363d07a8d IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0196597123
0xa04223b58b9d6f8db8f9fcb19f131d96b7497e92ff2b08cdb8118c9c025a7b12Create New Fund123579062021-05-03 0:12:32465 days 14 hrs ago0x7f37f50cf86e2dfb84fe7c6a2a5c6f34f0a41001 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0336828832
0x4bf98945effbcbaa20c49d63450ac2b4dcfeb8ffa8a04f935401efa34e53d9a6Create New Fund123555762021-05-02 15:33:24465 days 23 hrs ago0x1aceff73c5c3afc630c1fc8b484527a23f4eb134 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍16918347198
0xe63bc53b288f07874a7235cb3a0a2173987ee038564d54495eb08b458cdd3128Create New Fund123553192021-05-02 14:33:41466 days 25 mins ago0x86ab2aed55fa3215c5ce99b2ce99afa513fef7c2 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0422496840
0xc9104b20ac9fa70ef1e19328b1323ae6569b7e83d17c9022f24744aba8f4eb5bCreate New Fund123548402021-05-02 12:39:46466 days 2 hrs ago0x8ee1eb153d613bafb0ef2b205c43bc3280a956da IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0214875725
0xb23f4294d0b057fc3fe0e2b0e89ee9d6e40de2e2d67364ad176d5ea93b4fdd2eCreate New Fund123548162021-05-02 12:34:19466 days 2 hrs ago0x6e2b4109568d9761d69d3a4f6282fa0ca2c39e9b IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0316418232
0x5f2a10f94a5b57e8a8394ed1ef6a085bf9269abb28e6e708824ad1acfda0b40dCreate New Fund123546622021-05-02 12:04:31466 days 2 hrs ago0xfdc68b3c8f7d66f0e1745d5a31a1c6e925ed4e3b IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0218419523
0x8d35bf5c3061b19013b0768e48387a0e24c40382c751e0e84132b58e1c656575Create New Fund123539522021-05-02 9:27:30466 days 5 hrs agoENS Name shenwilly.eth IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0224878926
0x4b9515d0469d0317b5599e28af4913e397988fe62d7ee69ca4ab439f81d07cd5Create New Fund123536112021-05-02 8:07:42466 days 6 hrs agoENS Name uoregon.eth IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0139964824
0x81d8e526d5d3cbd00246c193fe0d6962b552a813946dc5218b9d799edc45af75Create New Fund123523902021-05-02 3:32:52466 days 11 hrs ago0xa48f561d44ee5360aa844df99936e27a2d97a5bf IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0220988323.‍5
0xd52de7a0c5bfa775b5e948d969a4b47d66b632d787c691b25669b6aae66358a7Create New Fund123497072021-05-01 17:36:20466 days 21 hrs ago0x24b332fc359299529b450c6eb554812c42a001a1 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0438315951
0xc8e67108415365dcd841c2ba77d35fbb883fdf9e82fa65b79686e04d2a1b9fe6Create New Fund123486382021-05-01 13:41:33467 days 1 hr ago0xc384f1cf910cf8c1353af598784040986be7044d IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0285490533
0x3c1021d450d5ffa32b35a4cb683b648470994fb2f48038198de208536348e42fCreate New Fund123484372021-05-01 12:59:52467 days 1 hr ago0x45eba3748895c2e562a30c2c543c9039f3b36336 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍0307671136
0x5f97eec4e27523962560a8468182be641019c524b9d95947fc41e743b7f46a57Create New Fund123484122021-05-01 12:53:11467 days 2 hrs ago0x275b058d34d7c9e64524194bfa28cc7da80ae136 IN  0x9134c9975244b46692ad9a7da36dba8734ec6da30 Ether0.‍036327642
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xfae7cc844e78b168fc2202084869b0ab2f02355eb240a36471f1f2c2057d2e68127317042021-06-29 22:50:55407 days 16 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xb20048e5c70bdf08cbb78cf474449acfa793f50e6561a1c3a442053dd4a5290a123862622021-05-07 9:07:00461 days 5 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x2c38c87778804b9ffae391d2db2124a5eec972c2e10d05f026e5e79a847725d2123770362021-05-05 22:44:13462 days 16 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xe76ffe6a60f04f2b84a1888e00a2382f031d564ceb50bded925b3c0098d9a594123765902021-05-05 21:08:31462 days 17 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x72df0150b51b1b21ac982e8ef90ab5fc84018882a5dd086c0d6473d62ae26b41123761962021-05-05 19:42:04462 days 19 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x7e3276364282a657039a60f27a7df0feef5722195422fa3a11726c41fa59b1bc123726262021-05-05 6:31:30463 days 8 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x69daeb72f941a55d76dfac44e0c1db2664140b44f08c8f0ce01dc1d3a16603ec123717112021-05-05 3:09:52463 days 11 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x6e2d17ffb07311b4816943fc169ff91d95add9ad04433a9e1cf2a5e0760a3169123702532021-05-04 21:39:14463 days 17 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x2035fe599ccfe1f5fd1abddc4a0e840bebb1e44d2a5d43f555f2547d93eeebb7123663552021-05-04 7:07:49464 days 7 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x044849cc7590d91a37e8440f6cab674ab30b90f27955d94509ba37c3a93b8c30123632732021-05-03 19:57:51464 days 19 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x43a11daa569e10daf0d9d566014d3d6cd9f0e07c1e470e73ec2a839089686dd1123596542021-05-03 6:41:57465 days 8 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xa04223b58b9d6f8db8f9fcb19f131d96b7497e92ff2b08cdb8118c9c025a7b12123579062021-05-03 0:12:32465 days 14 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x4bf98945effbcbaa20c49d63450ac2b4dcfeb8ffa8a04f935401efa34e53d9a6123555762021-05-02 15:33:24465 days 23 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xe63bc53b288f07874a7235cb3a0a2173987ee038564d54495eb08b458cdd3128123553192021-05-02 14:33:41466 days 25 mins ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xc9104b20ac9fa70ef1e19328b1323ae6569b7e83d17c9022f24744aba8f4eb5b123548402021-05-02 12:39:46466 days 2 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xb23f4294d0b057fc3fe0e2b0e89ee9d6e40de2e2d67364ad176d5ea93b4fdd2e123548162021-05-02 12:34:19466 days 2 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x5f2a10f94a5b57e8a8394ed1ef6a085bf9269abb28e6e708824ad1acfda0b40d123546622021-05-02 12:04:31466 days 2 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x8d35bf5c3061b19013b0768e48387a0e24c40382c751e0e84132b58e1c656575123539522021-05-02 9:27:30466 days 5 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x4b9515d0469d0317b5599e28af4913e397988fe62d7ee69ca4ab439f81d07cd5123536112021-05-02 8:07:42466 days 6 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x23b31fc2764a29341f16890ca64fd731868bfa4ac8de329d5439641248fce3f9123533872021-05-02 7:19:30466 days 7 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x81d8e526d5d3cbd00246c193fe0d6962b552a813946dc5218b9d799edc45af75123523902021-05-02 3:32:52466 days 11 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xd52de7a0c5bfa775b5e948d969a4b47d66b632d787c691b25669b6aae66358a7123497072021-05-01 17:36:20466 days 21 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0xc8e67108415365dcd841c2ba77d35fbb883fdf9e82fa65b79686e04d2a1b9fe6123486382021-05-01 13:41:33467 days 1 hr ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x3c1021d450d5ffa32b35a4cb683b648470994fb2f48038198de208536348e42f123484372021-05-01 12:59:52467 days 1 hr ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
0x5f97eec4e27523962560a8468182be641019c524b9d95947fc41e743b7f46a57123484122021-05-01 12:53:11467 days 2 hrs ago 0x9134c9975244b46692ad9a7da36dba8734ec6da3  Contract Creation0 Ether
[ Download CSV Export 
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
FundDeployer

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license
File 1 of 9 : IDispatcher.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

/// @title IDispatcher Interface
/// @author Enzyme Council <[email protected]>
interface IDispatcher {
    function cancelMigration(address _vaultProxy, bool _bypassFailure) external;

    function claimOwnership() external;

    function deployVaultProxy(
        address _vaultLib,
        address _owner,
        address _vaultAccessor,
        string calldata _fundName
    ) external returns (address vaultProxy_);

    function executeMigration(address _vaultProxy, bool _bypassFailure) external;

    function getCurrentFundDeployer() external view returns (address currentFundDeployer_);

    function getFundDeployerForVaultProxy(address _vaultProxy)
        external
        view
        returns (address fundDeployer_);

    function getMigrationRequestDetailsForVaultProxy(address _vaultProxy)
        external
        view
        returns (
            address nextFundDeployer_,
            address nextVaultAccessor_,
            address nextVaultLib_,
            uint256 executableTimestamp_
        );

    function getMigrationTimelock() external view returns (uint256 migrationTimelock_);

    function getNominatedOwner() external view returns (address nominatedOwner_);

    function getOwner() external view returns (address owner_);

    function getSharesTokenSymbol() external view returns (string memory sharesTokenSymbol_);

    function getTimelockRemainingForMigrationRequest(address _vaultProxy)
        external
        view
        returns (uint256 secondsRemaining_);

    function hasExecutableMigrationRequest(address _vaultProxy)
        external
        view
        returns (bool hasExecutableRequest_);

    function hasMigrationRequest(address _vaultProxy)
        external
        view
        returns (bool hasMigrationRequest_);

    function removeNominatedOwner() external;

    function setCurrentFundDeployer(address _nextFundDeployer) external;

    function setMigrationTimelock(uint256 _nextTimelock) external;

    function setNominatedOwner(address _nextNominatedOwner) external;

    function setSharesTokenSymbol(string calldata _nextSymbol) external;

    function signalMigration(
        address _vaultProxy,
        address _nextVaultAccessor,
        address _nextVaultLib,
        bool _bypassFailure
    ) external;
}

File 2 of 9 : IMigratableVault.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

/// @title IMigratableVault Interface
/// @author Enzyme Council <[email protected]>
/// @dev DO NOT EDIT CONTRACT
interface IMigratableVault {
    function canMigrate(address _who) external view returns (bool canMigrate_);

    function init(
        address _owner,
        address _accessor,
        string calldata _fundName
    ) external;

    function setAccessor(address _nextAccessor) external;

    function setVaultLib(address _nextVaultLib) external;
}

File 3 of 9 : IMigrationHookHandler.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

/// @title IMigrationHookHandler Interface
/// @author Enzyme Council <[email protected]>
interface IMigrationHookHandler {
    enum MigrationOutHook {PreSignal, PostSignal, PreMigrate, PostMigrate, PostCancel}

    function invokeMigrationInCancelHook(
        address _vaultProxy,
        address _prevFundDeployer,
        address _nextVaultAccessor,
        address _nextVaultLib
    ) external;

    function invokeMigrationOutHook(
        MigrationOutHook _hook,
        address _vaultProxy,
        address _nextFundDeployer,
        address _nextVaultAccessor,
        address _nextVaultLib
    ) external;
}

File 4 of 9 : FundDeployer.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;

import "../../../persistent/dispatcher/IDispatcher.sol";
import "../../../persistent/utils/IMigrationHookHandler.sol";
import "../fund/comptroller/IComptroller.sol";
import "../fund/comptroller/ComptrollerProxy.sol";
import "../fund/vault/IVault.sol";
import "./IFundDeployer.sol";

/// @title FundDeployer Contract
/// @author Enzyme Council <[email protected]>
/// @notice The top-level contract of the release.
/// It primarily coordinates fund deployment and fund migration, but
/// it is also deferred to for contract access control and for allowed calls
/// that can be made with a fund's VaultProxy as the msg.sender.
contract FundDeployer is IFundDeployer, IMigrationHookHandler {
    event ComptrollerLibSet(address comptrollerLib);

    event ComptrollerProxyDeployed(
        address indexed creator,
        address comptrollerProxy,
        address indexed denominationAsset,
        uint256 sharesActionTimelock,
        bytes feeManagerConfigData,
        bytes policyManagerConfigData,
        bool indexed forMigration
    );

    event NewFundCreated(
        address indexed creator,
        address comptrollerProxy,
        address vaultProxy,
        address indexed fundOwner,
        string fundName,
        address indexed denominationAsset,
        uint256 sharesActionTimelock,
        bytes feeManagerConfigData,
        bytes policyManagerConfigData
    );

    event ReleaseStatusSet(ReleaseStatus indexed prevStatus, ReleaseStatus indexed nextStatus);

    event VaultCallDeregistered(address indexed contractAddress, bytes4 selector);

    event VaultCallRegistered(address indexed contractAddress, bytes4 selector);

    // Constants
    address private immutable CREATOR;
    address private immutable DISPATCHER;
    address private immutable VAULT_LIB;

    // Pseudo-constants (can only be set once)
    address private comptrollerLib;

    // Storage
    ReleaseStatus private releaseStatus;
    mapping(address => mapping(bytes4 => bool)) private contractToSelectorToIsRegisteredVaultCall;
    mapping(address => address) private pendingComptrollerProxyToCreator;

    modifier onlyLiveRelease() {
        require(releaseStatus == ReleaseStatus.Live, "Release is not Live");
        _;
    }

    modifier onlyMigrator(address _vaultProxy) {
        require(
            IVault(_vaultProxy).canMigrate(msg.sender),
            "Only a permissioned migrator can call this function"
        );
        _;
    }

    modifier onlyOwner() {
        require(msg.sender == getOwner(), "Only the contract owner can call this function");
        _;
    }

    modifier onlyPendingComptrollerProxyCreator(address _comptrollerProxy) {
        require(
            msg.sender == pendingComptrollerProxyToCreator[_comptrollerProxy],
            "Only the ComptrollerProxy creator can call this function"
        );
        _;
    }

    constructor(
        address _dispatcher,
        address _vaultLib,
        address[] memory _vaultCallContracts,
        bytes4[] memory _vaultCallSelectors
    ) public {
        if (_vaultCallContracts.length > 0) {
            __registerVaultCalls(_vaultCallContracts, _vaultCallSelectors);
        }
        CREATOR = msg.sender;
        DISPATCHER = _dispatcher;
        VAULT_LIB = _vaultLib;
    }

    /////////////
    // GENERAL //
    /////////////

    /// @notice Sets the comptrollerLib
    /// @param _comptrollerLib The ComptrollerLib contract address
    /// @dev Can only be set once
    function setComptrollerLib(address _comptrollerLib) external onlyOwner {
        require(
            comptrollerLib == address(0),
            "setComptrollerLib: This value can only be set once"
        );

        comptrollerLib = _comptrollerLib;

        emit ComptrollerLibSet(_comptrollerLib);
    }

    /// @notice Sets the status of the protocol to a new state
    /// @param _nextStatus The next status state to set
    function setReleaseStatus(ReleaseStatus _nextStatus) external {
        require(
            msg.sender == IDispatcher(DISPATCHER).getOwner(),
            "setReleaseStatus: Only the Dispatcher owner can call this function"
        );
        require(
            _nextStatus != ReleaseStatus.PreLaunch,
            "setReleaseStatus: Cannot return to PreLaunch status"
        );
        require(
            comptrollerLib != address(0),
            "setReleaseStatus: Can only set the release status when comptrollerLib is set"
        );

        ReleaseStatus prevStatus = releaseStatus;
        require(_nextStatus != prevStatus, "setReleaseStatus: _nextStatus is the current status");

        releaseStatus = _nextStatus;

        emit ReleaseStatusSet(prevStatus, _nextStatus);
    }

    /// @notice Gets the current owner of the contract
    /// @return owner_ The contract owner address
    /// @dev Dynamically gets the owner based on the Protocol status. The owner is initially the
    /// contract's deployer, for convenience in setting up configuration.
    /// Ownership is claimed when the owner of the Dispatcher contract (the Enzyme Council)
    /// sets the releaseStatus to `Live`.
    function getOwner() public view override returns (address owner_) {
        if (releaseStatus == ReleaseStatus.PreLaunch) {
            return CREATOR;
        }

        return IDispatcher(DISPATCHER).getOwner();
    }

    ///////////////////
    // FUND CREATION //
    ///////////////////

    /// @notice Creates a fully-configured ComptrollerProxy, to which a fund from a previous
    /// release can migrate in a subsequent step
    /// @param _denominationAsset The contract address of the denomination asset for the fund
    /// @param _sharesActionTimelock The minimum number of seconds between any two "shares actions"
    /// (buying or selling shares) by the same user
    /// @param _feeManagerConfigData Bytes data for the fees to be enabled for the fund
    /// @param _policyManagerConfigData Bytes data for the policies to be enabled for the fund
    /// @return comptrollerProxy_ The address of the ComptrollerProxy deployed during this action
    function createMigratedFundConfig(
        address _denominationAsset,
        uint256 _sharesActionTimelock,
        bytes calldata _feeManagerConfigData,
        bytes calldata _policyManagerConfigData
    ) external onlyLiveRelease returns (address comptrollerProxy_) {
        comptrollerProxy_ = __deployComptrollerProxy(
            _denominationAsset,
            _sharesActionTimelock,
            _feeManagerConfigData,
            _policyManagerConfigData,
            true
        );

        pendingComptrollerProxyToCreator[comptrollerProxy_] = msg.sender;

        return comptrollerProxy_;
    }

    /// @notice Creates a new fund
    /// @param _fundOwner The address of the owner for the fund
    /// @param _fundName The name of the fund
    /// @param _denominationAsset The contract address of the denomination asset for the fund
    /// @param _sharesActionTimelock The minimum number of seconds between any two "shares actions"
    /// (buying or selling shares) by the same user
    /// @param _feeManagerConfigData Bytes data for the fees to be enabled for the fund
    /// @param _policyManagerConfigData Bytes data for the policies to be enabled for the fund
    /// @return comptrollerProxy_ The address of the ComptrollerProxy deployed during this action
    function createNewFund(
        address _fundOwner,
        string calldata _fundName,
        address _denominationAsset,
        uint256 _sharesActionTimelock,
        bytes calldata _feeManagerConfigData,
        bytes calldata _policyManagerConfigData
    ) external onlyLiveRelease returns (address comptrollerProxy_, address vaultProxy_) {
        return
            __createNewFund(
                _fundOwner,
                _fundName,
                _denominationAsset,
                _sharesActionTimelock,
                _feeManagerConfigData,
                _policyManagerConfigData
            );
    }

    /// @dev Helper to avoid the stack-too-deep error during createNewFund
    function __createNewFund(
        address _fundOwner,
        string memory _fundName,
        address _denominationAsset,
        uint256 _sharesActionTimelock,
        bytes memory _feeManagerConfigData,
        bytes memory _policyManagerConfigData
    ) private returns (address comptrollerProxy_, address vaultProxy_) {
        require(_fundOwner != address(0), "__createNewFund: _owner cannot be empty");

        comptrollerProxy_ = __deployComptrollerProxy(
            _denominationAsset,
            _sharesActionTimelock,
            _feeManagerConfigData,
            _policyManagerConfigData,
            false
        );

        vaultProxy_ = IDispatcher(DISPATCHER).deployVaultProxy(
            VAULT_LIB,
            _fundOwner,
            comptrollerProxy_,
            _fundName
        );

        IComptroller(comptrollerProxy_).activate(vaultProxy_, false);

        emit NewFundCreated(
            msg.sender,
            comptrollerProxy_,
            vaultProxy_,
            _fundOwner,
            _fundName,
            _denominationAsset,
            _sharesActionTimelock,
            _feeManagerConfigData,
            _policyManagerConfigData
        );

        return (comptrollerProxy_, vaultProxy_);
    }

    /// @dev Helper function to deploy a configured ComptrollerProxy
    function __deployComptrollerProxy(
        address _denominationAsset,
        uint256 _sharesActionTimelock,
        bytes memory _feeManagerConfigData,
        bytes memory _policyManagerConfigData,
        bool _forMigration
    ) private returns (address comptrollerProxy_) {
        require(
            _denominationAsset != address(0),
            "__deployComptrollerProxy: _denominationAsset cannot be empty"
        );

        bytes memory constructData = abi.encodeWithSelector(
            IComptroller.init.selector,
            _denominationAsset,
            _sharesActionTimelock
        );
        comptrollerProxy_ = address(new ComptrollerProxy(constructData, comptrollerLib));

        if (_feeManagerConfigData.length > 0 || _policyManagerConfigData.length > 0) {
            IComptroller(comptrollerProxy_).configureExtensions(
                _feeManagerConfigData,
                _policyManagerConfigData
            );
        }

        emit ComptrollerProxyDeployed(
            msg.sender,
            comptrollerProxy_,
            _denominationAsset,
            _sharesActionTimelock,
            _feeManagerConfigData,
            _policyManagerConfigData,
            _forMigration
        );

        return comptrollerProxy_;
    }

    //////////////////
    // MIGRATION IN //
    //////////////////

    /// @notice Cancels fund migration
    /// @param _vaultProxy The VaultProxy for which to cancel migration
    function cancelMigration(address _vaultProxy) external {
        __cancelMigration(_vaultProxy, false);
    }

    /// @notice Cancels fund migration, bypassing any failures.
    /// Should be used in an emergency only.
    /// @param _vaultProxy The VaultProxy for which to cancel migration
    function cancelMigrationEmergency(address _vaultProxy) external {
        __cancelMigration(_vaultProxy, true);
    }

    /// @notice Executes fund migration
    /// @param _vaultProxy The VaultProxy for which to execute the migration
    function executeMigration(address _vaultProxy) external {
        __executeMigration(_vaultProxy, false);
    }

    /// @notice Executes fund migration, bypassing any failures.
    /// Should be used in an emergency only.
    /// @param _vaultProxy The VaultProxy for which to execute the migration
    function executeMigrationEmergency(address _vaultProxy) external {
        __executeMigration(_vaultProxy, true);
    }

    /// @dev Unimplemented
    function invokeMigrationInCancelHook(
        address,
        address,
        address,
        address
    ) external virtual override {
        return;
    }

    /// @notice Signal a fund migration
    /// @param _vaultProxy The VaultProxy for which to signal the migration
    /// @param _comptrollerProxy The ComptrollerProxy for which to signal the migration
    function signalMigration(address _vaultProxy, address _comptrollerProxy) external {
        __signalMigration(_vaultProxy, _comptrollerProxy, false);
    }

    /// @notice Signal a fund migration, bypassing any failures.
    /// Should be used in an emergency only.
    /// @param _vaultProxy The VaultProxy for which to signal the migration
    /// @param _comptrollerProxy The ComptrollerProxy for which to signal the migration
    function signalMigrationEmergency(address _vaultProxy, address _comptrollerProxy) external {
        __signalMigration(_vaultProxy, _comptrollerProxy, true);
    }

    /// @dev Helper to cancel a migration
    function __cancelMigration(address _vaultProxy, bool _bypassFailure)
        private
        onlyLiveRelease
        onlyMigrator(_vaultProxy)
    {
        IDispatcher(DISPATCHER).cancelMigration(_vaultProxy, _bypassFailure);
    }

    /// @dev Helper to execute a migration
    function __executeMigration(address _vaultProxy, bool _bypassFailure)
        private
        onlyLiveRelease
        onlyMigrator(_vaultProxy)
    {
        IDispatcher dispatcherContract = IDispatcher(DISPATCHER);

        (, address comptrollerProxy, , ) = dispatcherContract
            .getMigrationRequestDetailsForVaultProxy(_vaultProxy);

        dispatcherContract.executeMigration(_vaultProxy, _bypassFailure);

        IComptroller(comptrollerProxy).activate(_vaultProxy, true);

        delete pendingComptrollerProxyToCreator[comptrollerProxy];
    }

    /// @dev Helper to signal a migration
    function __signalMigration(
        address _vaultProxy,
        address _comptrollerProxy,
        bool _bypassFailure
    )
        private
        onlyLiveRelease
        onlyPendingComptrollerProxyCreator(_comptrollerProxy)
        onlyMigrator(_vaultProxy)
    {
        IDispatcher(DISPATCHER).signalMigration(
            _vaultProxy,
            _comptrollerProxy,
            VAULT_LIB,
            _bypassFailure
        );
    }

    ///////////////////
    // MIGRATION OUT //
    ///////////////////

    /// @notice Allows "hooking into" specific moments in the migration pipeline
    /// to execute arbitrary logic during a migration out of this release
    /// @param _vaultProxy The VaultProxy being migrated
    function invokeMigrationOutHook(
        MigrationOutHook _hook,
        address _vaultProxy,
        address,
        address,
        address
    ) external override {
        if (_hook != MigrationOutHook.PreMigrate) {
            return;
        }

        require(
            msg.sender == DISPATCHER,
            "postMigrateOriginHook: Only Dispatcher can call this function"
        );

        // Must use PreMigrate hook to get the ComptrollerProxy from the VaultProxy
        address comptrollerProxy = IVault(_vaultProxy).getAccessor();

        // Wind down fund and destroy its config
        IComptroller(comptrollerProxy).destruct();
    }

    //////////////
    // REGISTRY //
    //////////////

    /// @notice De-registers allowed arbitrary contract calls that can be sent from the VaultProxy
    /// @param _contracts The contracts of the calls to de-register
    /// @param _selectors The selectors of the calls to de-register
    function deregisterVaultCalls(address[] calldata _contracts, bytes4[] calldata _selectors)
        external
        onlyOwner
    {
        require(_contracts.length > 0, "deregisterVaultCalls: Empty _contracts");
        require(
            _contracts.length == _selectors.length,
            "deregisterVaultCalls: Uneven input arrays"
        );

        for (uint256 i; i < _contracts.length; i++) {
            require(
                isRegisteredVaultCall(_contracts[i], _selectors[i]),
                "deregisterVaultCalls: Call not registered"
            );

            contractToSelectorToIsRegisteredVaultCall[_contracts[i]][_selectors[i]] = false;

            emit VaultCallDeregistered(_contracts[i], _selectors[i]);
        }
    }

    /// @notice Registers allowed arbitrary contract calls that can be sent from the VaultProxy
    /// @param _contracts The contracts of the calls to register
    /// @param _selectors The selectors of the calls to register
    function registerVaultCalls(address[] calldata _contracts, bytes4[] calldata _selectors)
        external
        onlyOwner
    {
        require(_contracts.length > 0, "registerVaultCalls: Empty _contracts");

        __registerVaultCalls(_contracts, _selectors);
    }

    /// @dev Helper to register allowed vault calls
    function __registerVaultCalls(address[] memory _contracts, bytes4[] memory _selectors)
        private
    {
        require(
            _contracts.length == _selectors.length,
            "__registerVaultCalls: Uneven input arrays"
        );

        for (uint256 i; i < _contracts.length; i++) {
            require(
                !isRegisteredVaultCall(_contracts[i], _selectors[i]),
                "__registerVaultCalls: Call already registered"
            );

            contractToSelectorToIsRegisteredVaultCall[_contracts[i]][_selectors[i]] = true;

            emit VaultCallRegistered(_contracts[i], _selectors[i]);
        }
    }

    ///////////////////
    // STATE GETTERS //
    ///////////////////

    /// @notice Gets the `comptrollerLib` variable value
    /// @return comptrollerLib_ The `comptrollerLib` variable value
    function getComptrollerLib() external view returns (address comptrollerLib_) {
        return comptrollerLib;
    }

    /// @notice Gets the `CREATOR` variable value
    /// @return creator_ The `CREATOR` variable value
    function getCreator() external view returns (address creator_) {
        return CREATOR;
    }

    /// @notice Gets the `DISPATCHER` variable value
    /// @return dispatcher_ The `DISPATCHER` variable value
    function getDispatcher() external view returns (address dispatcher_) {
        return DISPATCHER;
    }

    /// @notice Gets the creator of a pending ComptrollerProxy
    /// @return pendingComptrollerProxyCreator_ The pending ComptrollerProxy creator
    function getPendingComptrollerProxyCreator(address _comptrollerProxy)
        external
        view
        returns (address pendingComptrollerProxyCreator_)
    {
        return pendingComptrollerProxyToCreator[_comptrollerProxy];
    }

    /// @notice Gets the `releaseStatus` variable value
    /// @return status_ The `releaseStatus` variable value
    function getReleaseStatus() external view override returns (ReleaseStatus status_) {
        return releaseStatus;
    }

    /// @notice Gets the `VAULT_LIB` variable value
    /// @return vaultLib_ The `VAULT_LIB` variable value
    function getVaultLib() external view returns (address vaultLib_) {
        return VAULT_LIB;
    }

    /// @notice Checks if a contract call is registered
    /// @param _contract The contract of the call to check
    /// @param _selector The selector of the call to check
    /// @return isRegistered_ True if the call is registered
    function isRegisteredVaultCall(address _contract, bytes4 _selector)
        public
        view
        override
        returns (bool isRegistered_)
    {
        return contractToSelectorToIsRegisteredVaultCall[_contract][_selector];
    }
}

File 5 of 9 : IFundDeployer.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

/// @title IFundDeployer Interface
/// @author Enzyme Council <[email protected]>
interface IFundDeployer {
    enum ReleaseStatus {PreLaunch, Live, Paused}

    function getOwner() external view returns (address);

    function getReleaseStatus() external view returns (ReleaseStatus);

    function isRegisteredVaultCall(address, bytes4) external view returns (bool);
}

File 6 of 9 : ComptrollerProxy.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

import "../../../utils/Proxy.sol";

/// @title ComptrollerProxy Contract
/// @author Enzyme Council <[email protected]>
/// @notice A proxy contract for all ComptrollerProxy instances
contract ComptrollerProxy is Proxy {
    constructor(bytes memory _constructData, address _comptrollerLib)
        public
        Proxy(_constructData, _comptrollerLib)
    {}
}

File 7 of 9 : IComptroller.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

/// @title IComptroller Interface
/// @author Enzyme Council <[email protected]>
interface IComptroller {
    enum VaultAction {
        None,
        BurnShares,
        MintShares,
        TransferShares,
        ApproveAssetSpender,
        WithdrawAssetTo,
        AddTrackedAsset,
        RemoveTrackedAsset
    }

    function activate(address, bool) external;

    function calcGav(bool) external returns (uint256, bool);

    function calcGrossShareValue(bool) external returns (uint256, bool);

    function callOnExtension(
        address,
        uint256,
        bytes calldata
    ) external;

    function configureExtensions(bytes calldata, bytes calldata) external;

    function destruct() external;

    function getDenominationAsset() external view returns (address);

    function getVaultProxy() external view returns (address);

    function init(address, uint256) external;

    function permissionedVaultAction(VaultAction, bytes calldata) external;
}

File 8 of 9 : IVault.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

import "../../../../persistent/utils/IMigratableVault.sol";

/// @title IVault Interface
/// @author Enzyme Council <[email protected]>
interface IVault is IMigratableVault {
    function addTrackedAsset(address) external;

    function approveAssetSpender(
        address,
        address,
        uint256
    ) external;

    function burnShares(address, uint256) external;

    function callOnContract(address, bytes calldata) external;

    function getAccessor() external view returns (address);

    function getOwner() external view returns (address);

    function getTrackedAssets() external view returns (address[] memory);

    function isTrackedAsset(address) external view returns (bool);

    function mintShares(address, uint256) external;

    function removeTrackedAsset(address) external;

    function transferShares(
        address,
        address,
        uint256
    ) external;

    function withdrawAssetTo(
        address,
        address,
        uint256
    ) external;
}

File 9 of 9 : Proxy.sol
// SPDX-License-Identifier: GPL-3.0

/*
    This file is part of the Enzyme Protocol.

    (c) Enzyme Council <[email protected]>

    For the full license information, please view the LICENSE
    file that was distributed with this source code.
*/

pragma solidity 0.6.12;

/// @title Proxy Contract
/// @author Enzyme Council <[email protected]>
/// @notice A proxy contract for all Proxy instances
/// @dev The recommended implementation of a Proxy in EIP-1822, updated for solc 0.6.12,
/// and using the EIP-1967 storage slot for the proxiable implementation.
/// i.e., `bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)`, which is
/// "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"
/// See: https://eips.ethereum.org/EIPS/eip-1822
contract Proxy {
    constructor(bytes memory _constructData, address _contractLogic) public {
        assembly {
            sstore(
                0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc,
                _contractLogic
            )
        }
        (bool success, bytes memory returnData) = _contractLogic.delegatecall(_constructData);
        require(success, string(returnData));
    }

    fallback() external payable {
        assembly {
            let contractLogic := sload(
                0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
            )
            calldatacopy(0x0, 0x0, calldatasize())
            let success := delegatecall(
                sub(gas(), 10000),
                contractLogic,
                0x0,
                calldatasize(),
                0,
                0
            )
            let retSz := returndatasize()
            returndatacopy(0, 0, retSz)
            switch success
                case 0 {
                    revert(0, retSz)
                }
                default {
                    return(0, retSz)
                }
        }
    }
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "details": {
      "constantOptimizer": true,
      "cse": true,
      "deduplicate": true,
      "jumpdestRemover": true,
      "orderLiterals": true,
      "peephole": true,
      "yul": false
    },
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dispatcher","type":"address"},{"internalType":"address","name":"_vaultLib","type":"address"},{"internalType":"address[]","name":"_vaultCallContracts","type":"address[]"},{"internalType":"bytes4[]","name":"_vaultCallSelectors","type":"bytes4[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"comptrollerLib","type":"address"}],"name":"ComptrollerLibSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"address","name":"comptrollerProxy","type":"address"},{"indexed":true,"internalType":"address","name":"denominationAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesActionTimelock","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"feeManagerConfigData","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"policyManagerConfigData","type":"bytes"},{"indexed":true,"internalType":"bool","name":"forMigration","type":"bool"}],"name":"ComptrollerProxyDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"address","name":"comptrollerProxy","type":"address"},{"indexed":false,"internalType":"address","name":"vaultProxy","type":"address"},{"indexed":true,"internalType":"address","name":"fundOwner","type":"address"},{"indexed":false,"internalType":"string","name":"fundName","type":"string"},{"indexed":true,"internalType":"address","name":"denominationAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesActionTimelock","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"feeManagerConfigData","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"policyManagerConfigData","type":"bytes"}],"name":"NewFundCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum IFundDeployer.ReleaseStatus","name":"prevStatus","type":"uint8"},{"indexed":true,"internalType":"enum IFundDeployer.ReleaseStatus","name":"nextStatus","type":"uint8"}],"name":"ReleaseStatusSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"VaultCallDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"VaultCallRegistered","type":"event"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"}],"name":"cancelMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"}],"name":"cancelMigrationEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_denominationAsset","type":"address"},{"internalType":"uint256","name":"_sharesActionTimelock","type":"uint256"},{"internalType":"bytes","name":"_feeManagerConfigData","type":"bytes"},{"internalType":"bytes","name":"_policyManagerConfigData","type":"bytes"}],"name":"createMigratedFundConfig","outputs":[{"internalType":"address","name":"comptrollerProxy_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fundOwner","type":"address"},{"internalType":"string","name":"_fundName","type":"string"},{"internalType":"address","name":"_denominationAsset","type":"address"},{"internalType":"uint256","name":"_sharesActionTimelock","type":"uint256"},{"internalType":"bytes","name":"_feeManagerConfigData","type":"bytes"},{"internalType":"bytes","name":"_policyManagerConfigData","type":"bytes"}],"name":"createNewFund","outputs":[{"internalType":"address","name":"comptrollerProxy_","type":"address"},{"internalType":"address","name":"vaultProxy_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_contracts","type":"address[]"},{"internalType":"bytes4[]","name":"_selectors","type":"bytes4[]"}],"name":"deregisterVaultCalls","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"}],"name":"executeMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"}],"name":"executeMigrationEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getComptrollerLib","outputs":[{"internalType":"address","name":"comptrollerLib_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCreator","outputs":[{"internalType":"address","name":"creator_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDispatcher","outputs":[{"internalType":"address","name":"dispatcher_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_comptrollerProxy","type":"address"}],"name":"getPendingComptrollerProxyCreator","outputs":[{"internalType":"address","name":"pendingComptrollerProxyCreator_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReleaseStatus","outputs":[{"internalType":"enum IFundDeployer.ReleaseStatus","name":"status_","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultLib","outputs":[{"internalType":"address","name":"vaultLib_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"invokeMigrationInCancelHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum IMigrationHookHandler.MigrationOutHook","name":"_hook","type":"uint8"},{"internalType":"address","name":"_vaultProxy","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"invokeMigrationOutHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"isRegisteredVaultCall","outputs":[{"internalType":"bool","name":"isRegistered_","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_contracts","type":"address[]"},{"internalType":"bytes4[]","name":"_selectors","type":"bytes4[]"}],"name":"registerVaultCalls","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_comptrollerLib","type":"address"}],"name":"setComptrollerLib","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum IFundDeployer.ReleaseStatus","name":"_nextStatus","type":"uint8"}],"name":"setReleaseStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"},{"internalType":"address","name":"_comptrollerProxy","type":"address"}],"name":"signalMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"},{"internalType":"address","name":"_comptrollerProxy","type":"address"}],"name":"signalMigrationEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e06040523480156200001157600080fd5b50604051620032743803806200327483398101604081905262000034916200035a565b81511562000048576200004882826200006f565b505033606090811b6080526001600160601b031992811b831660a0521b1660c05262000573565b80518251146200009c5760405162461bcd60e51b81526004016200009390620004c5565b60405180910390fd5b60005b82518110156200020157620000e3838281518110620000ba57fe5b6020026020010151838381518110620000cf57fe5b60200260200101516200020660201b60201c565b15620001035760405162461bcd60e51b81526004016200009390620004b3565b60018060008584815181106200011557fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008484815181106200014c57fe5b60200260200101516001600160e01b0319166001600160e01b031916815260200190815260200160002060006101000a81548160ff0219169083151502179055508281815181106200019a57fe5b60200260200101516001600160a01b03167f355d4742de92efa1dcd9085b88ede27d7cfda96747ea062a59010a992c8af150838381518110620001d957fe5b6020026020010151604051620001f09190620004a3565b60405180910390a26001016200009f565b505050565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b805162000238816200054e565b600082601f8301126200025d57600080fd5b8151620002746200026e82620004fe565b620004d7565b915081818352602084019350602081019050838560208402820111156200029a57600080fd5b60005b83811015620002ca5781620002b388826200023e565b84525060209283019291909101906001016200029d565b5050505092915050565b600082601f830112620002e657600080fd5b8151620002f76200026e82620004fe565b915081818352602084019350602081019050838560208402820111156200031d57600080fd5b60005b83811015620002ca57816200033688826200034d565b845250602092830192919091019060010162000320565b8051620002388162000568565b600080600080608085870312156200037157600080fd5b60006200037f87876200023e565b945050602062000392878288016200023e565b93505060408501516001600160401b03811115620003af57600080fd5b620003bd878288016200024b565b92505060608501516001600160401b03811115620003da57600080fd5b620003e887828801620002d4565b91505092959194509250565b620003ff8162000535565b82525050565b600062000414602d836200051f565b7f5f5f72656769737465725661756c7443616c6c733a2043616c6c20616c72656181526c191e481c9959da5cdd195c9959609a1b602082015260400192915050565b6000620004656029836200051f565b7f5f5f72656769737465725661756c7443616c6c733a20556e6576656e20696e7081526875742061727261797360b81b602082015260400192915050565b60208101620002388284620003f4565b60208082528101620002388162000405565b60208082528101620002388162000456565b6040518181016001600160401b0381118282101715620004f657600080fd5b604052919050565b60006001600160401b038211156200051557600080fd5b5060209081020190565b90815260200190565b6000620002388262000542565b6001600160e01b03191690565b6001600160a01b031690565b620005598162000528565b81146200056557600080fd5b50565b620005598162000535565b60805160601c60a05160601c60c05160601c612c99620005db60003980610995528061152b528061179d525080610672528061086d5280610a1e5280610d1a5280610f2752806111ae52806114f9528061176f52508061042552806109f75250612c996000f3fe60806040523480156200001157600080fd5b5060043610620001605760003560e01c80639eb2c7b211620000c9578063d2456de11162000087578063d2456de114620002bd578063da29fcfe14620002d4578063dc77205314620002eb578063df369ba71462000311578063ebb3d5891462000328578063f0bb66ac14620003325762000160565b80639eb2c7b21462000248578063a08d967d146200025f578063a5fede1d1462000276578063c108b47d146200028f578063c166f9ea14620002a65762000160565b806351dfdb48116200012357806351dfdb4814620001e5578063682cea1914620001fc5780636f022ac4146200020657806378ed2293146200021d578063893d20e8146200023457806393a2ecd9146200023e5762000160565b80630d2fcd7614620001655780630ee2cb10146200017e5780630fe6972b14620001a057806328eb9ca514620001b75780633f84c12c14620001ce575b600080fd5b6200017c62000176366004620019fd565b62000359565b005b6200018862000423565b604051620001979190620024ee565b60405180910390f35b6200017c620001b136600462001d14565b62000448565b6200017c620001c836600462001e4d565b62000670565b6200017c620001df36600462001dcd565b62000847565b6200017c620001f6366004620019fd565b62000983565b6200018862000993565b6200017c62000217366004620019fd565b620009b7565b6200017c6200022e366004620019fd565b620009c4565b62000188620009d1565b6200018862000ab6565b6200017c62000259366004620019fd565b62000ac5565b6200018862000270366004620019fd565b62000ad2565b6200028062000af3565b6040516200019791906200272b565b62000188620002a036600462001c70565b62000b03565b6200017c620002b736600462001a47565b62000bee565b6200017c620002ce36600462001a47565b62000c00565b6200017c620002e536600462001d14565b62000c0e565b62000302620002fc36600462001b4e565b62000ce0565b604051620001979190620026be565b6200017c6200032236600462001a86565b62000cda565b6200018862000d18565b620003496200034336600462001b83565b62000d3c565b604051620001979291906200250e565b62000363620009d1565b6001600160a01b0316336001600160a01b0316146200039f5760405162461bcd60e51b81526004016200039690620027a7565b60405180910390fd5b6000546001600160a01b031615620003cb5760405162461bcd60e51b815260040162000396906200273b565b600080546001600160a01b0319166001600160a01b0383161790556040517f38e37d5fdf60e4358769c3b616594ad451626b1e023c65eaa1062116feadacf89062000418908390620024ee565b60405180910390a150565b7f00000000000000000000000000000000000000000000000000000000000000005b90565b62000452620009d1565b6001600160a01b0316336001600160a01b031614620004855760405162461bcd60e51b81526004016200039690620027a7565b82620004a55760405162461bcd60e51b8152600401620003969062002825565b828114620004c75760405162461bcd60e51b815260040162000396906200285b565b60005b8381101562000669576200051f858583818110620004e457fe5b9050602002016020810190620004fb9190620019fd565b8484848181106200050857fe5b9050602002016020810190620002fc919062001dac565b6200053e5760405162461bcd60e51b81526004016200039690620027b9565b6000600160008787858181106200055157fe5b9050602002016020810190620005689190620019fd565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008585858181106200059757fe5b9050602002016020810190620005ae919062001dac565b6001600160e01b03191681526020810191909152604001600020805460ff1916911515919091179055848482818110620005e457fe5b9050602002016020810190620005fb9190620019fd565b6001600160a01b03167f04a77425d9eba3b1260e976806c0cdefae7f41bb1106222790dd45e863ceaf978484848181106200063257fe5b905060200201602081019062000649919062001dac565b604051620006589190620026ce565b60405180910390a2600101620004ca565b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b158015620006ca57600080fd5b505afa158015620006df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000705919062001a26565b6001600160a01b0316336001600160a01b031614620007385760405162461bcd60e51b8152600401620003969062002837565b60008160028111156200074757fe5b1415620007685760405162461bcd60e51b815260040162000396906200286d565b6000546001600160a01b0316620007935760405162461bcd60e51b8152600401620003969062002795565b600054600160a01b900460ff16806002811115620007ad57fe5b826002811115620007ba57fe5b1415620007db5760405162461bcd60e51b8152600401620003969062002849565b6000805483919060ff60a01b1916600160a01b836002811115620007fb57fe5b02179055508160028111156200080d57fe5b8160028111156200081a57fe5b6040517ffaab041807e925180f5d7036a295923ff66f30f9d7957c96b898d16b0e90b7d890600090a35050565b60028560048111156200085657fe5b14620008625762000669565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614620008ad5760405162461bcd60e51b81526004016200039690620027dd565b6000846001600160a01b0316635a53e3486040518163ffffffff1660e01b815260040160206040518083038186803b158015620008e957600080fd5b505afa158015620008fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000924919062001a26565b9050806001600160a01b0316632b68b9c66040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200096257600080fd5b505af115801562000977573d6000803e3d6000fd5b50505050505050505050565b6200099081600062000e3a565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b62000990816000620010b9565b6200099081600162000e3a565b600080600054600160a01b900460ff166002811115620009ed57fe5b141562000a1c57507f000000000000000000000000000000000000000000000000000000000000000062000445565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663893d20e86040518163ffffffff1660e01b815260040160206040518083038186803b15801562000a7657600080fd5b505afa15801562000a8b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ab1919062001a26565b905090565b6000546001600160a01b031690565b62000990816001620010b9565b6001600160a01b03808216600090815260026020526040902054165b919050565b600054600160a01b900460ff1690565b60006001600054600160a01b900460ff16600281111562000b2057fe5b1462000b405760405162461bcd60e51b815260040162000396906200275f565b62000bba878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284376000920191909152506001925062001220915050565b6001600160a01b038116600090815260026020526040902080546001600160a01b0319163317905590509695505050505050565b62000bfc82826001620013c6565b5050565b62000bfc82826000620013c6565b62000c18620009d1565b6001600160a01b0316336001600160a01b03161462000c4b5760405162461bcd60e51b81526004016200039690620027a7565b8262000c6b5760405162461bcd60e51b8152600401620003969062002813565b62000cda848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208088028281018201909352878252909350879250869182918501908490808284376000920191909152506200159192505050565b50505050565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000806001600054600160a01b900460ff16600281111562000d5a57fe5b1462000d7a5760405162461bcd60e51b815260040162000396906200275f565b62000e288b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b81528e93508d9250908c908c908190840183828082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506200171992505050565b91509150995099975050505050505050565b6001600054600160a01b900460ff16600281111562000e5557fe5b1462000e755760405162461bcd60e51b815260040162000396906200275f565b604051633ef03e7560e11b815282906001600160a01b03821690637de07cea9062000ea5903390600401620024fe565b60206040518083038186803b15801562000ebe57600080fd5b505afa15801562000ed3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ef9919062001d8b565b62000f185760405162461bcd60e51b81526004016200039690620027cb565b604051630fb5b3f960e31b81527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b03831690637dad9fc89062000f6b908890600401620024ee565b60806040518083038186803b15801562000f8457600080fd5b505afa15801562000f99573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fbf919062001af0565b50506040516338b3eb1b60e01b81529092506001600160a01b03841691506338b3eb1b9062000ff5908890889060040162002637565b600060405180830381600087803b1580156200101057600080fd5b505af115801562001025573d6000803e3d6000fd5b50506040516382d3a1dd60e01b81526001600160a01b03841692506382d3a1dd91506200105a90889060019060040162002637565b600060405180830381600087803b1580156200107557600080fd5b505af11580156200108a573d6000803e3d6000fd5b505050506001600160a01b0316600090815260026020526040902080546001600160a01b031916905550505050565b6001600054600160a01b900460ff166002811115620010d457fe5b14620010f45760405162461bcd60e51b815260040162000396906200275f565b604051633ef03e7560e11b815282906001600160a01b03821690637de07cea9062001124903390600401620024fe565b60206040518083038186803b1580156200113d57600080fd5b505afa15801562001152573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001178919062001d8b565b620011975760405162461bcd60e51b81526004016200039690620027cb565b604051634e4ea46d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639c9d48da90620011e7908690869060040162002637565b600060405180830381600087803b1580156200120257600080fd5b505af115801562001217573d6000803e3d6000fd5b50505050505050565b60006001600160a01b0386166200124b5760405162461bcd60e51b81526004016200039690620027ef565b606063399ae72460e01b87876040516024016200126a92919062002656565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600054915190925082916001600160a01b031690620012bb90620018f6565b620012c8929190620026de565b604051809103906000f080158015620012e5573d6000803e3d6000fd5b509150600085511180620012fa575060008451115b1562001365576040516396aed58760e01b81526001600160a01b038316906396aed5879062001330908890889060040162002702565b600060405180830381600087803b1580156200134b57600080fd5b505af115801562001360573d6000803e3d6000fd5b505050505b821515876001600160a01b0316336001600160a01b03167f0e6310be2c106224ea5db41e7f599982b85c8524b0e7cd0c4fb88e2ac46554b5858a8a8a604051620013b3949392919062002675565b60405180910390a4505b95945050505050565b6001600054600160a01b900460ff166002811115620013e157fe5b14620014015760405162461bcd60e51b815260040162000396906200275f565b6001600160a01b0382811660009081526002602052604090205483911633146200143f5760405162461bcd60e51b8152600401620003969062002783565b604051633ef03e7560e11b815284906001600160a01b03821690637de07cea906200146f903390600401620024fe565b60206040518083038186803b1580156200148857600080fd5b505afa1580156200149d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014c3919062001d8b565b620014e25760405162461bcd60e51b81526004016200039690620027cb565b604051633457e6e760e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d15f9b9c906200155690889088907f000000000000000000000000000000000000000000000000000000000000000090899060040162002534565b600060405180830381600087803b1580156200157157600080fd5b505af115801562001586573d6000803e3d6000fd5b505050505050505050565b8051825114620015b55760405162461bcd60e51b8152600401620003969062002801565b60005b82518110156200171457620015f6838281518110620015d357fe5b6020026020010151838381518110620015e857fe5b602002602001015162000ce0565b15620016165760405162461bcd60e51b8152600401620003969062002771565b60018060008584815181106200162857fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008484815181106200165f57fe5b60200260200101516001600160e01b0319166001600160e01b031916815260200190815260200160002060006101000a81548160ff021916908315150217905550828181518110620016ad57fe5b60200260200101516001600160a01b03167f355d4742de92efa1dcd9085b88ede27d7cfda96747ea062a59010a992c8af150838381518110620016ec57fe5b6020026020010151604051620017039190620026ce565b60405180910390a2600101620015b8565b505050565b6000806001600160a01b038816620017455760405162461bcd60e51b815260040162000396906200274d565b6200175586868686600062001220565b6040516322a0c08b60e01b81529092506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906322a0c08b90620017cc907f0000000000000000000000000000000000000000000000000000000000000000908c9087908d9060040162002571565b602060405180830381600087803b158015620017e757600080fd5b505af1158015620017fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001822919062001a26565b6040516382d3a1dd60e01b81529091506001600160a01b038316906382d3a1dd906200185690849060009060040162002637565b600060405180830381600087803b1580156200187157600080fd5b505af115801562001886573d6000803e3d6000fd5b50505050856001600160a01b0316886001600160a01b0316336001600160a01b03167f38d3196918721ec4627522d424d47f608e3f0f7e7a8f8abe5369150f7fc4b2a585858c8b8b8b604051620018e396959493929190620025bd565b60405180910390a4965096945050505050565b6102e1806200298383390190565b803562000d12816200292e565b805162000d12816200292e565b60008083601f8401126200193157600080fd5b50813567ffffffffffffffff8111156200194a57600080fd5b6020830191508360208202830111156200196357600080fd5b9250929050565b805162000d128162002945565b803562000d128162002950565b60008083601f8401126200199757600080fd5b50813567ffffffffffffffff811115620019b057600080fd5b6020830191508360018202830111156200196357600080fd5b803562000d12816200295b565b803562000d128162002969565b803562000d128162002977565b805162000d128162002977565b60006020828403121562001a1057600080fd5b600062001a1e848462001904565b949350505050565b60006020828403121562001a3957600080fd5b600062001a1e848462001911565b6000806040838503121562001a5b57600080fd5b600062001a69858562001904565b925050602062001a7c8582860162001904565b9150509250929050565b6000806000806080858703121562001a9d57600080fd5b600062001aab878762001904565b945050602062001abe8782880162001904565b935050604062001ad18782880162001904565b925050606062001ae48782880162001904565b91505092959194509250565b6000806000806080858703121562001b0757600080fd5b600062001b15878762001911565b945050602062001b288782880162001911565b935050604062001b3b8782880162001911565b925050606062001ae487828801620019f0565b6000806040838503121562001b6257600080fd5b600062001b70858562001904565b925050602062001a7c8582860162001977565b600080600080600080600080600060c08a8c03121562001ba257600080fd5b600062001bb08c8c62001904565b99505060208a013567ffffffffffffffff81111562001bce57600080fd5b62001bdc8c828d0162001984565b9850985050604062001bf18c828d0162001904565b965050606062001c048c828d01620019e3565b95505060808a013567ffffffffffffffff81111562001c2257600080fd5b62001c308c828d0162001984565b945094505060a08a013567ffffffffffffffff81111562001c5057600080fd5b62001c5e8c828d0162001984565b92509250509295985092959850929598565b6000806000806000806080878903121562001c8a57600080fd5b600062001c98898962001904565b965050602062001cab89828a01620019e3565b955050604087013567ffffffffffffffff81111562001cc957600080fd5b62001cd789828a0162001984565b9450945050606087013567ffffffffffffffff81111562001cf757600080fd5b62001d0589828a0162001984565b92509250509295509295509295565b6000806000806040858703121562001d2b57600080fd5b843567ffffffffffffffff81111562001d4357600080fd5b62001d51878288016200191e565b9450945050602085013567ffffffffffffffff81111562001d7157600080fd5b62001d7f878288016200191e565b95989497509550505050565b60006020828403121562001d9e57600080fd5b600062001a1e84846200196a565b60006020828403121562001dbf57600080fd5b600062001a1e848462001977565b600080600080600060a0868803121562001de657600080fd5b600062001df48888620019c9565b955050602062001e078882890162001904565b945050604062001e1a8882890162001904565b935050606062001e2d8882890162001904565b925050608062001e408882890162001904565b9150509295509295909350565b60006020828403121562001e6057600080fd5b600062001a1e8484620019d6565b62001e7981620028c3565b82525050565b62001e79816200288c565b62001e798162002899565b62001e79816200289e565b600062001ead826200287f565b62001eb9818562002883565b935062001ecb818560208601620028ea565b62001ed68162002919565b9093019392505050565b62001e7981620028d0565b600062001efa60328362002883565b7f736574436f6d7074726f6c6c65724c69623a20546869732076616c75652063618152716e206f6e6c7920626520736574206f6e636560701b602082015260400192915050565b600062001f5060278362002883565b7f5f5f6372656174654e657746756e643a205f6f776e65722063616e6e6f7420628152666520656d70747960c81b602082015260400192915050565b600062001f9b60138362002883565b7252656c65617365206973206e6f74204c69766560681b815260200192915050565b600062001fcc602d8362002883565b7f5f5f72656769737465725661756c7443616c6c733a2043616c6c20616c72656181526c191e481c9959da5cdd195c9959609a1b602082015260400192915050565b60006200201d60388362002883565b7f4f6e6c792074686520436f6d7074726f6c6c657250726f78792063726561746f81527f722063616e2063616c6c20746869732066756e6374696f6e0000000000000000602082015260400192915050565b60006200207e604c8362002883565b7f73657452656c656173655374617475733a2043616e206f6e6c7920736574207481527f68652072656c6561736520737461747573207768656e20636f6d7074726f6c6c60208201526b195c931a58881a5cc81cd95d60a21b604082015260600192915050565b6000620020f4602e8362002883565b7f4f6e6c792074686520636f6e7472616374206f776e65722063616e2063616c6c81526d103a3434b990333ab731ba34b7b760911b602082015260400192915050565b60006200214660298362002883565b7f646572656769737465725661756c7443616c6c733a2043616c6c206e6f7420728152681959da5cdd195c995960ba1b602082015260400192915050565b60006200219360338362002883565b7f4f6e6c792061207065726d697373696f6e6564206d69677261746f722063616e8152721031b0b636103a3434b990333ab731ba34b7b760691b602082015260400192915050565b6000620021ea603d8362002883565b7f706f73744d6967726174654f726967696e486f6f6b3a204f6e6c79204469737081527f6174636865722063616e2063616c6c20746869732066756e6374696f6e000000602082015260400192915050565b60006200224b603c8362002883565b7f5f5f6465706c6f79436f6d7074726f6c6c657250726f78793a205f64656e6f6d81527f696e6174696f6e41737365742063616e6e6f7420626520656d70747900000000602082015260400192915050565b6000620022ac60298362002883565b7f5f5f72656769737465725661756c7443616c6c733a20556e6576656e20696e7081526875742061727261797360b81b602082015260400192915050565b6000620022f960248362002883565b7f72656769737465725661756c7443616c6c733a20456d707479205f636f6e74728152636163747360e01b602082015260400192915050565b60006200234160268362002883565b7f646572656769737465725661756c7443616c6c733a20456d707479205f636f6e81526574726163747360d01b602082015260400192915050565b60006200238b60428362002883565b7f73657452656c656173655374617475733a204f6e6c792074686520446973706181527f7463686572206f776e65722063616e2063616c6c20746869732066756e63746960208201526137b760f11b604082015260600192915050565b6000620023f760338362002883565b7f73657452656c656173655374617475733a205f6e657874537461747573206973815272207468652063757272656e742073746174757360681b602082015260400192915050565b60006200244e60298362002883565b7f646572656769737465725661756c7443616c6c733a20556e6576656e20696e7081526875742061727261797360b81b602082015260400192915050565b60006200249b60338362002883565b7f73657452656c656173655374617475733a2043616e6e6f742072657475726e20815272746f205072654c61756e63682073746174757360681b602082015260400192915050565b62001e798162000445565b6020810162000d12828462001e7f565b6020810162000d12828462001e6e565b604081016200251e828562001e7f565b6200252d602083018462001e7f565b9392505050565b6080810162002544828762001e7f565b62002553602083018662001e7f565b62002562604083018562001e7f565b620013bd606083018462001e8a565b6080810162002581828762001e7f565b62002590602083018662001e7f565b6200259f604083018562001e7f565b8181036060830152620025b3818462001ea0565b9695505050505050565b60c08101620025cd828962001e7f565b620025dc602083018862001e7f565b8181036040830152620025f0818762001ea0565b9050620026016060830186620024e3565b818103608083015262002615818562001ea0565b905081810360a08301526200262b818462001ea0565b98975050505050505050565b6040810162002647828562001e7f565b6200252d602083018462001e8a565b6040810162002666828562001e7f565b6200252d6020830184620024e3565b6080810162002685828762001e7f565b620026946020830186620024e3565b8181036040830152620026a8818562001ea0565b90508181036060830152620025b3818462001ea0565b6020810162000d12828462001e8a565b6020810162000d12828462001e95565b60408082528101620026f1818562001ea0565b90506200252d602083018462001e7f565b6040808252810162002715818562001ea0565b9050818103602083015262001a1e818462001ea0565b6020810162000d12828462001ee0565b6020808252810162000d128162001eeb565b6020808252810162000d128162001f41565b6020808252810162000d128162001f8c565b6020808252810162000d128162001fbd565b6020808252810162000d12816200200e565b6020808252810162000d12816200206f565b6020808252810162000d1281620020e5565b6020808252810162000d128162002137565b6020808252810162000d128162002184565b6020808252810162000d1281620021db565b6020808252810162000d12816200223c565b6020808252810162000d12816200229d565b6020808252810162000d1281620022ea565b6020808252810162000d128162002332565b6020808252810162000d12816200237c565b6020808252810162000d1281620023e8565b6020808252810162000d12816200243f565b6020808252810162000d12816200248c565b5190565b90815260200190565b600062000d1282620028b7565b151590565b6001600160e01b03191690565b8062000aee8162002923565b6001600160a01b031690565b600062000d1282620028dd565b600062000d1282620028ab565b600062000d12826200288c565b60005b8381101562002907578181015183820152602001620028ed565b8381111562000cda5750506000910152565b601f01601f191690565b600381106200099057fe5b62002939816200288c565b81146200099057600080fd5b620029398162002899565b62002939816200289e565b600581106200099057600080fd5b600381106200099057600080fd5b62002939816200044556fe608060405234801561001057600080fd5b506040516102e13803806102e18339818101604052604081101561003357600080fd5b810190808051604051939291908464010000000082111561005357600080fd5b90830190602082018581111561006857600080fd5b825164010000000081118282018810171561008257600080fd5b82525081516020918201929091019080838360005b838110156100af578181015183820152602001610097565b50505050905090810190601f1680156100dc5780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291905050508181807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5560006060826001600160a01b0316846040518082805190602001908083835b602083106101535780518252601f199092019160209182019101610134565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146101b3576040519150601f19603f3d011682016040523d82523d6000602084013e6101b8565b606091505b50915091508181906102485760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561020d5781810151838201526020016101f5565b50505050905090810190601f16801561023a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5050505050505060848061025d6000396000f3fe60806040527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc543660008037600080366000846127105a03f43d806000803e818015604957816000f35b816000fdfea2646970667358221220479fe1a45f639b2b28264f0664c5040a754e68dd3840b29a2a20405474a7d2b164736f6c634300060c0033a26469706673582212201fc017016bd33cb57d8f2a34d07045a85f3ad8cc8d28daafac75d8a06cf7e6b764736f6c634300060c0033000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab32000000000000000000000000ac3fe07f51c51153e181be892e4e37326eea13da000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

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

000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab32000000000000000000000000ac3fe07f51c51153e181be892e4e37326eea13da000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _dispatcher (address): 0xc3dc853dd716bd5754f421ef94fdcbac3902ab32
Arg [1] : _vaultLib (address): 0xac3fe07f51c51153e181be892e4e37326eea13da

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000c3dc853dd716bd5754f421ef94fdcbac3902ab32
Arg [1] : 000000000000000000000000ac3fe07f51c51153e181be892e4e37326eea13da
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.