Hoodi Testnet

Token

Testnet Staked ETH (testKilnETH)
ERC-20

Overview

Max Total Supply

224.514937502742663104 testKilnETH

Holders

15

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1.391743800198357985 testKilnETH
0xa19693104a453ecb75cdee592a159e1457f28eb3
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TUPProxy

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
london EvmVersion, BSL 1.1 license
// SPDX-License-Identifier: BUSL-1.1
// SPDX-FileCopyrightText: 2023 Kiln <[email protected]>
//
// ██╗  ██╗██╗██╗     ███╗   ██╗
// ██║ ██╔╝██║██║     ████╗  ██║
// █████╔╝ ██║██║     ██╔██╗ ██║
// ██╔═██╗ ██║██║     ██║╚██╗██║
// ██║  ██╗██║███████╗██║ ╚████║
// ╚═╝  ╚═╝╚═╝╚══════╝╚═╝  ╚═══╝
//
pragma solidity >=0.8.17;

import "openzeppelin-contracts/proxy/ERC1967/ERC1967Proxy.sol";
import "./Freezable.sol";

/// @title Openzeppelin Transparent Upgradeable Proxy (with virtual external upgrade methods)
contract TransparentUpgradeableProxy is ERC1967Proxy {
    /**
     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and
     * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.
     */
    constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data) {
        _changeAdmin(admin_);
    }

    /**
     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.
     */
    // slither-disable-next-line incorrect-modifier
    modifier ifAdmin() {
        if (msg.sender == _getAdmin()) {
            _;
        } else {
            _fallback();
        }
    }

    /**
     * @dev Returns the current admin.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.
     *
     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`
     */
    function admin() external ifAdmin returns (address admin_) {
        admin_ = _getAdmin();
    }

    /**
     * @dev Returns the current implementation.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.
     *
     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`
     */
    function implementation() external ifAdmin returns (address implementation_) {
        implementation_ = _implementation();
    }

    /**
     * @dev Changes the admin of the proxy.
     *
     * Emits an {AdminChanged} event.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.
     */
    function changeAdmin(address newAdmin) external virtual ifAdmin {
        _changeAdmin(newAdmin);
    }

    /**
     * @dev Upgrade the implementation of the proxy.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.
     */
    function upgradeTo(address newImplementation) external virtual ifAdmin {
        _upgradeToAndCall(newImplementation, bytes(""), false);
    }

    /**
     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified
     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the
     * proxied contract.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.
     */
    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {
        _upgradeToAndCall(newImplementation, data, true);
    }

    /**
     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.
     */
    function _beforeFallback() internal virtual override {
        require(msg.sender != _getAdmin(), "TransparentUpgradeableProxy: admin cannot fallback to proxy target");
        super._beforeFallback();
    }
}

/// @title TUPProxy (Transparent Upgradeable Pausable Proxy)
/// @author mortimr @ Kiln
/// @notice This contract extends the Transparent Upgradeable proxy and adds a system wide pause feature.
///         When the system is paused, the fallback will fail no matter what calls are made.
contract TUPProxy is TransparentUpgradeableProxy, Freezable {
    /// @dev EIP1967 slot to store the pause status value.
    bytes32 private constant _PAUSE_SLOT = bytes32(uint256(keccak256("eip1967.proxy.pause")) - 1);
    /// @dev EIP1967 slot to store the pauser address value.
    bytes32 private constant _PAUSER_SLOT = bytes32(uint256(keccak256("eip1967.proxy.pauser")) - 1);

    /// @notice Emitted when the proxy dedicated pauser is changed.
    /// @param previousPauser The address of the previous pauser
    /// @param newPauser The address of the new pauser
    event PauserChanged(address previousPauser, address newPauser);

    /// @notice Thrown when a call was attempted and the proxy is paused.
    error CallWhenPaused();

    // slither-disable-next-line incorrect-modifier
    modifier ifAdminOrPauser() {
        if (msg.sender == _getAdmin() || msg.sender == _getPauser()) {
            _;
        } else {
            _fallback();
        }
    }

    /// @param _logic The address of the implementation contract
    /// @param admin_ The address of the admin account able to pause and upgrade the implementation
    /// @param _data Extra data use to perform atomic initializations
    constructor(address _logic, address admin_, bytes memory _data)
        payable
        TransparentUpgradeableProxy(_logic, admin_, _data)
    {}

    /// @notice Retrieves Paused state.
    /// @return Paused state
    function paused() external ifAdminOrPauser returns (bool) {
        return StorageSlot.getBooleanSlot(_PAUSE_SLOT).value;
    }

    /// @notice Pauses system.
    function pause() external ifAdminOrPauser notFrozen {
        StorageSlot.getBooleanSlot(_PAUSE_SLOT).value = true;
    }

    /// @notice Unpauses system.
    function unpause() external ifAdmin notFrozen {
        StorageSlot.getBooleanSlot(_PAUSE_SLOT).value = false;
    }

    /// @notice Sets the freeze timeout.
    function freeze(uint256 freezeTimeout) external ifAdmin {
        _freeze(freezeTimeout);
    }

    /// @notice Cancels the freeze process.
    function cancelFreeze() external ifAdmin {
        _cancelFreeze();
    }

    /// @notice Retrieve the freeze status.
    /// @return True if frozen
    function frozen() external ifAdmin returns (bool) {
        return _isFrozen();
    }

    /// @notice Retrieve the freeze timestamp.
    /// @return The freeze timestamp
    function freezeTime() external ifAdmin returns (uint256) {
        return _freezeTime();
    }

    /// @notice Retrieve the dedicated pauser address.
    /// @return The pauser address
    function pauser() external ifAdminOrPauser returns (address) {
        return _getPauser();
    }

    /// @notice Changes the dedicated pauser address.
    /// @dev Not callable when frozen
    /// @param newPauser The new pauser address
    function changePauser(address newPauser) external ifAdmin notFrozen {
        emit PauserChanged(_getPauser(), newPauser);
        _changePauser(newPauser);
    }

    /// @notice Changed the proxy admin.
    /// @dev Not callable when frozen
    function changeAdmin(address newAdmin) external override ifAdmin notFrozen {
        _changeAdmin(newAdmin);
    }

    /// @notice Performs an upgrade without reinitialization.
    /// @param newImplementation The new implementation address
    function upgradeTo(address newImplementation) external override ifAdmin notFrozen {
        _upgradeToAndCall(newImplementation, bytes(""), false);
    }

    /// @notice Performs an upgrade with reinitialization.
    /// @param newImplementation The new implementation address
    /// @param data The calldata to use atomically after the implementation upgrade
    function upgradeToAndCall(address newImplementation, bytes calldata data)
        external
        payable
        override
        ifAdmin
        notFrozen
    {
        _upgradeToAndCall(newImplementation, data, true);
    }

    /// @dev Internal utility to retrieve the dedicated pauser from storage,
    /// @return The pauser address
    function _getPauser() internal view returns (address) {
        return StorageSlot.getAddressSlot(_PAUSER_SLOT).value;
    }

    /// @dev Internal utility to change the dedicated pauser.
    /// @param newPauser The new pauser address
    function _changePauser(address newPauser) internal {
        StorageSlot.getAddressSlot(_PAUSER_SLOT).value = newPauser;
    }

    /// @dev Overrides the fallback method to check if system is not paused before.
    /// @dev Address Zero is allowed to perform calls even if system is paused. This allows
    ///      view functions to be called when the system is paused as rpc providers can easily
    ///      set the sender address to zero.
    // slither-disable-next-line timestamp
    function _beforeFallback() internal override {
        if ((!StorageSlot.getBooleanSlot(_PAUSE_SLOT).value || _isFrozen()) || msg.sender == address(0)) {
            super._beforeFallback();
        } else {
            revert CallWhenPaused();
        }
    }

    /// @dev Internal utility to retrieve the account allowed to freeze the contract.
    /// @return The freezer account
    function _getFreezer() internal view override returns (address) {
        return _getAdmin();
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)

pragma solidity ^0.8.0;

import "../Proxy.sol";
import "./ERC1967Upgrade.sol";

/**
 * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an
 * implementation address that can be changed. This address is stored in storage in the location specified by
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the
 * implementation behind the proxy.
 */
contract ERC1967Proxy is Proxy, ERC1967Upgrade {
    /**
     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.
     *
     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded
     * function call, and allows initializing the storage of the proxy like a Solidity constructor.
     */
    constructor(address _logic, bytes memory _data) payable {
        _upgradeToAndCall(_logic, _data, false);
    }

    /**
     * @dev Returns the current implementation address.
     */
    function _implementation() internal view virtual override returns (address impl) {
        return ERC1967Upgrade._getImplementation();
    }
}

// SPDX-License-Identifier: BUSL-1.1
// SPDX-FileCopyrightText: 2023 Kiln <[email protected]>
//
// ██╗  ██╗██╗██╗     ███╗   ██╗
// ██║ ██╔╝██║██║     ████╗  ██║
// █████╔╝ ██║██║     ██╔██╗ ██║
// ██╔═██╗ ██║██║     ██║╚██╗██║
// ██║  ██╗██║███████╗██║ ╚████║
// ╚═╝  ╚═╝╚═╝╚══════╝╚═╝  ╚═══╝
//
pragma solidity >=0.8.17;

// For some unexplainable and mysterious reason, adding this line would make slither crash
// This is the reason why we are not using our own unstructured storage libs in this contract
// (while the libs work properly in a lot of contracts without slither having any issue with it)
// import "./types/uint256.sol";

import "./libs/LibErrors.sol";
import "./libs/LibConstant.sol";
import "openzeppelin-contracts/utils/StorageSlot.sol";

/// @title Freezable
/// @author mortimr @ Kiln
/// @dev Unstructured Storage Friendly
/// @notice The Freezable contract is used to add a freezing capability to admin related actions.
///         The goal would be to ossify an implementation after a certain amount of time.
// slither-disable-next-line unimplemented-functions
abstract contract Freezable {
    /// @notice Thrown when a call happened while it was forbidden when frozen.
    error Frozen();

    /// @notice Thrown when the provided timeout value is lower than 100 days.
    /// @param providedValue The user provided value
    /// @param minimumValue The minimum allowed value
    error FreezeTimeoutTooLow(uint256 providedValue, uint256 minimumValue);

    /// @notice Emitted when the freeze timeout is changed.
    /// @param freezeTime The timestamp after which the contract will be frozen
    event SetFreezeTime(uint256 freezeTime);

    /// @dev This is the keccak-256 hash of "freezable.freeze_timestamp" subtracted by 1.
    bytes32 private constant _FREEZE_TIMESTAMP_SLOT = 0x04b06dd5becaad633b58f99e01f1e05103eff5a573d10d18c9baf1bc4e6bfd3a;

    /// @dev Only callable by the freezer account.
    modifier onlyFreezer() {
        _onlyFreezer();
        _;
    }

    /// @dev Only callable when not frozen.
    modifier notFrozen() {
        _notFrozen();
        _;
    }

    /// @dev Override and set it to return the address to consider as the freezer.
    /// @return The freezer address
    // slither-disable-next-line dead-code
    function _getFreezer() internal view virtual returns (address);

    /// @dev Retrieve the freeze status.
    /// @return True if contract is frozen
    // slither-disable-next-line dead-code,timestamp
    function _isFrozen() internal view returns (bool) {
        uint256 freezeTime_ = _freezeTime();
        return (freezeTime_ > 0 && block.timestamp >= freezeTime_);
    }

    /// @dev Retrieve the freeze timestamp.
    /// @return The freeze timestamp
    // slither-disable-next-line dead-code
    function _freezeTime() internal view returns (uint256) {
        return StorageSlot.getUint256Slot(_FREEZE_TIMESTAMP_SLOT).value;
    }

    /// @dev Internal utility to set the freeze timestamp.
    /// @param freezeTime The new freeze timestamp
    // slither-disable-next-line dead-code
    function _setFreezeTime(uint256 freezeTime) internal {
        StorageSlot.getUint256Slot(_FREEZE_TIMESTAMP_SLOT).value = freezeTime;
        emit SetFreezeTime(freezeTime);
    }

    /// @dev Internal utility to revert if caller is not freezer.
    // slither-disable-next-line dead-code
    function _onlyFreezer() internal view {
        if (msg.sender != _getFreezer()) {
            revert LibErrors.Unauthorized(msg.sender, _getFreezer());
        }
    }

    /// @dev Internal utility to revert if contract is frozen.
    // slither-disable-next-line dead-code
    function _notFrozen() internal view {
        if (_isFrozen()) {
            revert Frozen();
        }
    }

    /// @dev Internal utility to start the freezing procedure.
    /// @param freezeTimeout Timeout to add to current timestamp to define freeze timestamp
    // slither-disable-next-line dead-code
    function _freeze(uint256 freezeTimeout) internal {
        _notFrozen();
        _onlyFreezer();
        if (freezeTimeout < LibConstant.MINIMUM_FREEZE_TIMEOUT) {
            revert FreezeTimeoutTooLow(freezeTimeout, LibConstant.MINIMUM_FREEZE_TIMEOUT);
        }

        // overflow would revert
        uint256 now_ = block.timestamp;
        uint256 freezeTime_ = now_ + freezeTimeout;

        _setFreezeTime(freezeTime_);
    }

    /// @dev Internal utility to cancel the freezing procedure.
    // slither-disable-next-line dead-code
    function _cancelFreeze() internal {
        _notFrozen();
        _onlyFreezer();
        _setFreezeTime(0);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)

pragma solidity ^0.8.0;

/**
 * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
 * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
 * be specified by overriding the virtual {_implementation} function.
 *
 * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
 * different contract through the {_delegate} function.
 *
 * The success and return data of the delegated call will be returned back to the caller of the proxy.
 */
abstract contract Proxy {
    /**
     * @dev Delegates the current call to `implementation`.
     *
     * This function does not return to its internal call site, it will return directly to the external caller.
     */
    function _delegate(address implementation) internal virtual {
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function
     * and {_fallback} should delegate.
     */
    function _implementation() internal view virtual returns (address);

    /**
     * @dev Delegates the current call to the address returned by `_implementation()`.
     *
     * This function does not return to its internal call site, it will return directly to the external caller.
     */
    function _fallback() internal virtual {
        _beforeFallback();
        _delegate(_implementation());
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
     * function in the contract matches the call data.
     */
    fallback() external payable virtual {
        _fallback();
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
     * is empty.
     */
    receive() external payable virtual {
        _fallback();
    }

    /**
     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
     * call, or as part of the Solidity `fallback` or `receive` functions.
     *
     * If overridden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal virtual {}
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)

pragma solidity ^0.8.2;

import "../beacon/IBeacon.sol";
import "../../interfaces/draft-IERC1822.sol";
import "../../utils/Address.sol";
import "../../utils/StorageSlot.sol";

/**
 * @dev This abstract contract provides getters and event emitting update functions for
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.
 *
 * _Available since v4.1._
 */
abstract contract ERC1967Upgrade {
    // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1
    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;

    /**
     * @dev Storage slot with the address of the current implementation.
     * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    /**
     * @dev Emitted when the implementation is upgraded.
     */
    event Upgraded(address indexed implementation);

    /**
     * @dev Returns the current implementation address.
     */
    function _getImplementation() internal view returns (address) {
        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
    }

    /**
     * @dev Stores a new address in the EIP1967 implementation slot.
     */
    function _setImplementation(address newImplementation) private {
        require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
    }

    /**
     * @dev Perform implementation upgrade
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeTo(address newImplementation) internal {
        _setImplementation(newImplementation);
        emit Upgraded(newImplementation);
    }

    /**
     * @dev Perform implementation upgrade with additional setup call.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {
        _upgradeTo(newImplementation);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(newImplementation, data);
        }
    }

    /**
     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {
        // Upgrades from old implementations will perform a rollback test. This test requires the new
        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing
        // this special case will break upgrade paths from old UUPS implementation to new ones.
        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {
            _setImplementation(newImplementation);
        } else {
            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {
                require(slot == _IMPLEMENTATION_SLOT, "ERC1967Upgrade: unsupported proxiableUUID");
            } catch {
                revert("ERC1967Upgrade: new implementation is not UUPS");
            }
            _upgradeToAndCall(newImplementation, data, forceCall);
        }
    }

    /**
     * @dev Storage slot with the admin of the contract.
     * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

    /**
     * @dev Emitted when the admin account has changed.
     */
    event AdminChanged(address previousAdmin, address newAdmin);

    /**
     * @dev Returns the current admin.
     */
    function _getAdmin() internal view returns (address) {
        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;
    }

    /**
     * @dev Stores a new address in the EIP1967 admin slot.
     */
    function _setAdmin(address newAdmin) private {
        require(newAdmin != address(0), "ERC1967: new admin is the zero address");
        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;
    }

    /**
     * @dev Changes the admin of the proxy.
     *
     * Emits an {AdminChanged} event.
     */
    function _changeAdmin(address newAdmin) internal {
        emit AdminChanged(_getAdmin(), newAdmin);
        _setAdmin(newAdmin);
    }

    /**
     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.
     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.
     */
    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;

    /**
     * @dev Emitted when the beacon is upgraded.
     */
    event BeaconUpgraded(address indexed beacon);

    /**
     * @dev Returns the current beacon.
     */
    function _getBeacon() internal view returns (address) {
        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;
    }

    /**
     * @dev Stores a new beacon in the EIP1967 beacon slot.
     */
    function _setBeacon(address newBeacon) private {
        require(Address.isContract(newBeacon), "ERC1967: new beacon is not a contract");
        require(
            Address.isContract(IBeacon(newBeacon).implementation()),
            "ERC1967: beacon implementation is not a contract"
        );
        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;
    }

    /**
     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does
     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).
     *
     * Emits a {BeaconUpgraded} event.
     */
    function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {
        _setBeacon(newBeacon);
        emit BeaconUpgraded(newBeacon);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);
        }
    }
}

File 6 of 11 : LibErrors.sol
// SPDX-License-Identifier: BUSL-1.1
// SPDX-FileCopyrightText: 2023 Kiln <[email protected]>
//
// ██╗  ██╗██╗██╗     ███╗   ██╗
// ██║ ██╔╝██║██║     ████╗  ██║
// █████╔╝ ██║██║     ██╔██╗ ██║
// ██╔═██╗ ██║██║     ██║╚██╗██║
// ██║  ██╗██║███████╗██║ ╚████║
// ╚═╝  ╚═╝╚═╝╚══════╝╚═╝  ╚═══╝
//
pragma solidity >=0.8.17;

library LibErrors {
    error Unauthorized(address account, address expected);
    error InvalidZeroAddress();
    error InvalidNullValue();
    error InvalidBPSValue();
    error InvalidEmptyString();
}

File 7 of 11 : LibConstant.sol
// SPDX-License-Identifier: BUSL-1.1
// SPDX-FileCopyrightText: 2023 Kiln <[email protected]>
//
// ██╗  ██╗██╗██╗     ███╗   ██╗
// ██║ ██╔╝██║██║     ████╗  ██║
// █████╔╝ ██║██║     ██╔██╗ ██║
// ██╔═██╗ ██║██║     ██║╚██╗██║
// ██║  ██╗██║███████╗██║ ╚████║
// ╚═╝  ╚═╝╚═╝╚══════╝╚═╝  ╚═══╝
//
pragma solidity >=0.8.17;

library LibConstant {
    /// @dev The basis points value representing 100%.
    uint256 internal constant BASIS_POINTS_MAX = 10_000;
    /// @dev The size of a deposit to activate a validator.
    uint256 internal constant DEPOSIT_SIZE = 32 ether;
    /// @dev The minimum freeze timeout before freeze is active.
    uint256 internal constant MINIMUM_FREEZE_TIMEOUT = 100 days;
    /// @dev Address used to represent ETH when an address is required to identify an asset.
    address internal constant ETHER = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)

pragma solidity ^0.8.0;

/**
 * @dev Library for reading and writing primitive types to specific storage slots.
 *
 * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
 * This library helps with reading and writing to such slots without the need for inline assembly.
 *
 * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
 *
 * Example usage to set ERC1967 implementation slot:
 * ```solidity
 * contract ERC1967 {
 *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
 *
 *     function _getImplementation() internal view returns (address) {
 *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
 *     }
 *
 *     function _setImplementation(address newImplementation) internal {
 *         require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
 *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
 *     }
 * }
 * ```
 *
 * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._
 */
library StorageSlot {
    struct AddressSlot {
        address value;
    }

    struct BooleanSlot {
        bool value;
    }

    struct Bytes32Slot {
        bytes32 value;
    }

    struct Uint256Slot {
        uint256 value;
    }

    /**
     * @dev Returns an `AddressSlot` with member `value` located at `slot`.
     */
    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.
     */
    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
     */
    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.
     */
    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)

pragma solidity ^0.8.0;

/**
 * @dev This is the interface that {BeaconProxy} expects of its beacon.
 */
interface IBeacon {
    /**
     * @dev Must return an address that can be used as a delegate call target.
     *
     * {BeaconProxy} will check that this address is a contract.
     */
    function implementation() external view returns (address);
}

File 10 of 11 : draft-IERC1822.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)

pragma solidity ^0.8.0;

/**
 * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified
 * proxy whose upgrades are fully controlled by the current implementation.
 */
interface IERC1822Proxiable {
    /**
     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation
     * address.
     *
     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks
     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this
     * function revert if invoked through a proxy.
     */
    function proxiableUUID() external view returns (bytes32);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     *
     * Furthermore, `isContract` will also return true if the target contract within
     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
     * which only has an effect at the end of a transaction.
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

Settings
{
  "remappings": [
    "deploy.sol/=lib/deploy.sol/src/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-gas-snapshot/=lib/forge-gas-snapshot/src/",
    "forge-std/=lib/forge-std/src/",
    "murky/=lib/murky/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
    "solmate/=lib/deploy.sol/lib/solmate/src/",
    "vsuite/=lib/vsuite/src/",
    "vsuite.test/=lib/vsuite/test/",
    "prb-math/=lib/vsuite/lib/utils.sol/lib/prb-math/contracts/",
    "utils.sol.test/=lib/vsuite/lib/utils.sol/test/",
    "utils.sol/=lib/vsuite/lib/utils.sol/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/"
  ],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "viaIR": false
}

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"CallWhenPaused","type":"error"},{"inputs":[{"internalType":"uint256","name":"providedValue","type":"uint256"},{"internalType":"uint256","name":"minimumValue","type":"uint256"}],"name":"FreezeTimeoutTooLow","type":"error"},{"inputs":[],"name":"Frozen","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"expected","type":"address"}],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousPauser","type":"address"},{"indexed":false,"internalType":"address","name":"newPauser","type":"address"}],"name":"PauserChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"freezeTime","type":"uint256"}],"name":"SetFreezeTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelFreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPauser","type":"address"}],"name":"changePauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"freezeTimeout","type":"uint256"}],"name":"freeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"frozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052604051620025443803806200254483398181016040528101906200002991906200074e565b828282828162000042828260006200006160201b60201c565b50506200005582620000a460201b60201c565b50505050505062000a90565b62000072836200010260201b60201c565b600082511180620000805750805b156200009f576200009d83836200015960201b62000a261760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000d56200018f60201b60201c565b82604051620000e6929190620007da565b60405180910390a1620000ff81620001f360201b60201c565b50565b6200011381620002e360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200018783836040518060600160405280602781526020016200251d60279139620003b960201b60201c565b905092915050565b6000620001ca7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b6200044b60201b62000a531760201c565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000265576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025c906200088e565b60405180910390fd5b806200029f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b6200044b60201b62000a531760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620002f9816200045560201b62000a5d1760201c565b6200033b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003329062000926565b60405180910390fd5b80620003757f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200044b60201b62000a531760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620003e5919062000995565b600060405180830381855af49150503d806000811462000422576040519150601f19603f3d011682016040523d82523d6000602084013e62000427565b606091505b509150915062000440868383876200047860201b60201c565b925050509392505050565b6000819050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315620004e8576000835103620004df576200049c856200045560201b60201c565b620004de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004d590620009fe565b60405180910390fd5b5b829050620004fb565b620004fa83836200050360201b60201c565b5b949350505050565b600082511115620005175781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054d919062000a6c565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000597826200056a565b9050919050565b620005a9816200058a565b8114620005b557600080fd5b50565b600081519050620005c9816200059e565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200062482620005d9565b810181811067ffffffffffffffff82111715620006465762000645620005ea565b5b80604052505050565b60006200065b62000556565b905062000669828262000619565b919050565b600067ffffffffffffffff8211156200068c576200068b620005ea565b5b6200069782620005d9565b9050602081019050919050565b60005b83811015620006c4578082015181840152602081019050620006a7565b60008484015250505050565b6000620006e7620006e1846200066e565b6200064f565b905082815260208101848484011115620007065762000705620005d4565b5b62000713848285620006a4565b509392505050565b600082601f830112620007335762000732620005cf565b5b815162000745848260208601620006d0565b91505092915050565b6000806000606084860312156200076a576200076962000560565b5b60006200077a86828701620005b8565b93505060206200078d86828701620005b8565b925050604084015167ffffffffffffffff811115620007b157620007b062000565565b5b620007bf868287016200071b565b9150509250925092565b620007d4816200058a565b82525050565b6000604082019050620007f16000830185620007c9565b620008006020830184620007c9565b9392505050565b600082825260208201905092915050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200087660268362000807565b9150620008838262000818565b604082019050919050565b60006020820190508181036000830152620008a98162000867565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006200090e602d8362000807565b91506200091b82620008b0565b604082019050919050565b600060208201905081810360008301526200094181620008ff565b9050919050565b600081519050919050565b600081905092915050565b60006200096b8262000948565b62000977818562000953565b935062000989818560208601620006a4565b80840191505092915050565b6000620009a382846200095e565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000620009e6601d8362000807565b9150620009f382620009ae565b602082019050919050565b6000602082019050818103600083015262000a1981620009d7565b9050919050565b600081519050919050565b600062000a388262000a20565b62000a44818562000807565b935062000a56818560208601620006a4565b62000a6181620005d9565b840191505092915050565b6000602082019050818103600083015262000a88818462000a2b565b905092915050565b611a7d8062000aa06000396000f3fe6080604052600436106100e15760003560e01c80638456cb591161007f578063bad490dc11610059578063bad490dc1461026b578063d7a78db814610282578063f851a440146102ab578063fd7e1bee146102d6576100f0565b80638456cb59146102005780638f283970146102175780639fd0506d14610240576100f0565b80633f4ba83a116100bb5780633f4ba83a146101775780634f1ef2861461018e5780635c60da1b146101aa5780635c975abb146101d5576100f0565b8063054f7d9c146100fa5780632cd271e7146101255780633659cfe61461014e576100f0565b366100f0576100ee610301565b005b6100f8610301565b005b34801561010657600080fd5b5061010f61031b565b60405161011c91906113b3565b60405180910390f35b34801561013157600080fd5b5061014c60048036038101906101479190611436565b610372565b005b34801561015a57600080fd5b5061017560048036038101906101709190611436565b61040e565b005b34801561018357600080fd5b5061018c61047c565b005b6101a860048036038101906101a391906114c8565b610525565b005b3480156101b657600080fd5b506101bf6105ca565b6040516101cc9190611537565b60405180910390f35b3480156101e157600080fd5b506101ea610621565b6040516101f791906113b3565b60405180910390f35b34801561020c57600080fd5b506102156106fa565b005b34801561022357600080fd5b5061023e60048036038101906102399190611436565b6107e1565b005b34801561024c57600080fd5b5061025561083d565b6040516102629190611537565b60405180910390f35b34801561027757600080fd5b506102806108d2565b005b34801561028e57600080fd5b506102a960048036038101906102a49190611588565b610924565b005b3480156102b757600080fd5b506102c0610978565b6040516102cd9190611537565b60405180910390f35b3480156102e257600080fd5b506102eb6109cf565b6040516102f891906115c4565b60405180910390f35b610309610a80565b610319610314610b59565b610b68565b565b6000610325610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036103665761035f610be5565b905061036f565b61036e610301565b5b90565b61037a610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610402576103b4610c08565b7f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a8116103dd610c49565b826040516103ec9291906115df565b60405180910390a16103fd81610caf565b61040b565b61040a610301565b5b50565b610416610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361047057610450610c08565b61046b81604051806020016040528060008152506000610d2f565b610479565b610478610301565b5b50565b610484610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361051a576104be610c08565b60006104fb60017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c6104f39190611637565b60001b610d5b565b60000160006101000a81548160ff021916908315150217905550610523565b610522610301565b5b565b61052d610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036105bc57610567610c08565b6105b78383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506001610d2f565b6105c5565b6105c4610301565b5b505050565b60006105d4610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036106155761060e610b59565b905061061e565b61061d610301565b5b90565b600061062b610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806106965750610667610c49565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156106ee576106d660017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c6106ce9190611637565b60001b610d5b565b60000160009054906101000a900460ff1690506106f7565b6106f6610301565b5b90565b610702610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061076d575061073e610c49565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156107d65761077a610c08565b60016107b760017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c6107af9190611637565b60001b610d5b565b60000160006101000a81548160ff0219169083151502179055506107df565b6107de610301565b5b565b6107e9610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361083157610823610c08565b61082c81610d65565b61083a565b610839610301565b5b50565b6000610847610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108b25750610883610c49565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156108c6576108bf610c49565b90506108cf565b6108ce610301565b5b90565b6108da610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361091957610914610db1565b610922565b610921610301565b5b565b61092c610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361096c5761096781610dcd565b610975565b610974610301565b5b50565b6000610982610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036109c3576109bc610b8e565b90506109cc565b6109cb610301565b5b90565b60006109d9610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610a1a57610a13610e4d565b9050610a23565b610a22610301565b5b90565b6060610a4b8383604051806060016040528060278152602001611a2160279139610e84565b905092915050565b6000819050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b610abb60017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c610ab39190611637565b60001b610d5b565b60000160009054906101000a900460ff161580610adc5750610adb610be5565b5b80610b135750600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15610b2557610b20610f0a565b610b57565b6040517f2514f7d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610b63610f89565b905090565b3660008037600080366000845af43d6000803e8060008114610b89573d6000f35b3d6000fd5b6000610bbc7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b610a53565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080610bf0610e4d565b9050600081118015610c025750804210155b91505090565b610c10610be5565b15610c47576040517fa8cab3d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610c8660017f41a07f15d150fca84be71d927adb8e4a8a0de6ebcadef3119141487ff482f0f260001c610c7e9190611637565b60001b610a53565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80610ceb60017f41a07f15d150fca84be71d927adb8e4a8a0de6ebcadef3119141487ff482f0f260001c610ce39190611637565b60001b610a53565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d3883610fe0565b600082511180610d455750805b15610d5657610d548383610a26565b505b505050565b6000819050919050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610d8e610b8e565b82604051610d9d9291906115df565b60405180910390a1610dae8161102f565b50565b610db9610c08565b610dc161110f565b610dcb6000611191565b565b610dd5610c08565b610ddd61110f565b6283d600811015610e2a57806283d6006040517fd96242ca000000000000000000000000000000000000000000000000000000008152600401610e2192919061166b565b60405180910390fd5b600042905060008282610e3d9190611694565b9050610e4881611191565b505050565b6000610e7b7f04b06dd5becaad633b58f99e01f1e05103eff5a573d10d18c9baf1bc4e6bfd3a60001b6111ff565b60000154905090565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051610eae9190611739565b600060405180830381855af49150503d8060008114610ee9576040519150601f19603f3d011682016040523d82523d6000602084013e610eee565b606091505b5091509150610eff86838387611209565b925050509392505050565b610f12610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f76906117f9565b60405180910390fd5b610f8761127e565b565b6000610fb77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610a53565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fe981611280565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361109e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110959061188b565b60405180910390fd5b806110cb7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b610a53565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611117611339565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461118f5733611152611339565b6040517f295a81c10000000000000000000000000000000000000000000000000000000081526004016111869291906115df565b60405180910390fd5b565b806111be7f04b06dd5becaad633b58f99e01f1e05103eff5a573d10d18c9baf1bc4e6bfd3a60001b6111ff565b600001819055507f7413b2ccac0d914f9764525af0b89a12aaf913cb0de2b18adb85e22b80c86ca0816040516111f491906115c4565b60405180910390a150565b6000819050919050565b6060831561126b5760008351036112635761122385610a5d565b611262576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611259906118f7565b60405180910390fd5b5b829050611276565b6112758383611348565b5b949350505050565b565b61128981610a5d565b6112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90611989565b60405180910390fd5b806112f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610a53565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611343610b8e565b905090565b60008251111561135b5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f91906119fe565b60405180910390fd5b60008115159050919050565b6113ad81611398565b82525050565b60006020820190506113c860008301846113a4565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611403826113d8565b9050919050565b611413816113f8565b811461141e57600080fd5b50565b6000813590506114308161140a565b92915050565b60006020828403121561144c5761144b6113ce565b5b600061145a84828501611421565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261148857611487611463565b5b8235905067ffffffffffffffff8111156114a5576114a4611468565b5b6020830191508360018202830111156114c1576114c061146d565b5b9250929050565b6000806000604084860312156114e1576114e06113ce565b5b60006114ef86828701611421565b935050602084013567ffffffffffffffff8111156115105761150f6113d3565b5b61151c86828701611472565b92509250509250925092565b611531816113f8565b82525050565b600060208201905061154c6000830184611528565b92915050565b6000819050919050565b61156581611552565b811461157057600080fd5b50565b6000813590506115828161155c565b92915050565b60006020828403121561159e5761159d6113ce565b5b60006115ac84828501611573565b91505092915050565b6115be81611552565b82525050565b60006020820190506115d960008301846115b5565b92915050565b60006040820190506115f46000830185611528565b6116016020830184611528565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061164282611552565b915061164d83611552565b925082820390508181111561166557611664611608565b5b92915050565b600060408201905061168060008301856115b5565b61168d60208301846115b5565b9392505050565b600061169f82611552565b91506116aa83611552565b92508282019050808211156116c2576116c1611608565b5b92915050565b600081519050919050565b600081905092915050565b60005b838110156116fc5780820151818401526020810190506116e1565b60008484015250505050565b6000611713826116c8565b61171d81856116d3565b935061172d8185602086016116de565b80840191505092915050565b60006117458284611708565b915081905092915050565b600082825260208201905092915050565b7f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60008201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760208201527f6574000000000000000000000000000000000000000000000000000000000000604082015250565b60006117e3604283611750565b91506117ee82611761565b606082019050919050565b60006020820190508181036000830152611812816117d6565b9050919050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611875602683611750565b915061188082611819565b604082019050919050565b600060208201905081810360008301526118a481611868565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006118e1601d83611750565b91506118ec826118ab565b602082019050919050565b60006020820190508181036000830152611910816118d4565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000611973602d83611750565b915061197e82611917565b604082019050919050565b600060208201905081810360008301526119a281611966565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006119d0826119a9565b6119da8185611750565b93506119ea8185602086016116de565b6119f3816119b4565b840191505092915050565b60006020820190508181036000830152611a1881846119c5565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220530b2b5f962ad5bc7b115a2ccce61f89851984a2451e481ea65a0b3afb17dd3464736f6c63430008110033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000c7533a09ce5f8bf57a84d4fdbd576dd310949268000000000000000000000000fffff2a646d204fb4ad6fcc4c3c53121491ebf3c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003244538e009000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000aaaaa6288ad901050051f282c48527628219bf5900000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000012546573746e6574205374616b6564204554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b746573744b696c6e45544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000002bb938c0e2073b085c76c410a8371657167b3e1e000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000012368c1dce73224b936271d44f1dd7b8ea0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106100e15760003560e01c80638456cb591161007f578063bad490dc11610059578063bad490dc1461026b578063d7a78db814610282578063f851a440146102ab578063fd7e1bee146102d6576100f0565b80638456cb59146102005780638f283970146102175780639fd0506d14610240576100f0565b80633f4ba83a116100bb5780633f4ba83a146101775780634f1ef2861461018e5780635c60da1b146101aa5780635c975abb146101d5576100f0565b8063054f7d9c146100fa5780632cd271e7146101255780633659cfe61461014e576100f0565b366100f0576100ee610301565b005b6100f8610301565b005b34801561010657600080fd5b5061010f61031b565b60405161011c91906113b3565b60405180910390f35b34801561013157600080fd5b5061014c60048036038101906101479190611436565b610372565b005b34801561015a57600080fd5b5061017560048036038101906101709190611436565b61040e565b005b34801561018357600080fd5b5061018c61047c565b005b6101a860048036038101906101a391906114c8565b610525565b005b3480156101b657600080fd5b506101bf6105ca565b6040516101cc9190611537565b60405180910390f35b3480156101e157600080fd5b506101ea610621565b6040516101f791906113b3565b60405180910390f35b34801561020c57600080fd5b506102156106fa565b005b34801561022357600080fd5b5061023e60048036038101906102399190611436565b6107e1565b005b34801561024c57600080fd5b5061025561083d565b6040516102629190611537565b60405180910390f35b34801561027757600080fd5b506102806108d2565b005b34801561028e57600080fd5b506102a960048036038101906102a49190611588565b610924565b005b3480156102b757600080fd5b506102c0610978565b6040516102cd9190611537565b60405180910390f35b3480156102e257600080fd5b506102eb6109cf565b6040516102f891906115c4565b60405180910390f35b610309610a80565b610319610314610b59565b610b68565b565b6000610325610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036103665761035f610be5565b905061036f565b61036e610301565b5b90565b61037a610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610402576103b4610c08565b7f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a8116103dd610c49565b826040516103ec9291906115df565b60405180910390a16103fd81610caf565b61040b565b61040a610301565b5b50565b610416610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361047057610450610c08565b61046b81604051806020016040528060008152506000610d2f565b610479565b610478610301565b5b50565b610484610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361051a576104be610c08565b60006104fb60017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c6104f39190611637565b60001b610d5b565b60000160006101000a81548160ff021916908315150217905550610523565b610522610301565b5b565b61052d610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036105bc57610567610c08565b6105b78383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506001610d2f565b6105c5565b6105c4610301565b5b505050565b60006105d4610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036106155761060e610b59565b905061061e565b61061d610301565b5b90565b600061062b610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806106965750610667610c49565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156106ee576106d660017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c6106ce9190611637565b60001b610d5b565b60000160009054906101000a900460ff1690506106f7565b6106f6610301565b5b90565b610702610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061076d575061073e610c49565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156107d65761077a610c08565b60016107b760017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c6107af9190611637565b60001b610d5b565b60000160006101000a81548160ff0219169083151502179055506107df565b6107de610301565b5b565b6107e9610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361083157610823610c08565b61082c81610d65565b61083a565b610839610301565b5b50565b6000610847610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108b25750610883610c49565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156108c6576108bf610c49565b90506108cf565b6108ce610301565b5b90565b6108da610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361091957610914610db1565b610922565b610921610301565b5b565b61092c610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361096c5761096781610dcd565b610975565b610974610301565b5b50565b6000610982610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036109c3576109bc610b8e565b90506109cc565b6109cb610301565b5b90565b60006109d9610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610a1a57610a13610e4d565b9050610a23565b610a22610301565b5b90565b6060610a4b8383604051806060016040528060278152602001611a2160279139610e84565b905092915050565b6000819050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b610abb60017fa1c51e2db0fd509c88c4d1d064260a12d10b4b2370d6c629050bf501458f88c060001c610ab39190611637565b60001b610d5b565b60000160009054906101000a900460ff161580610adc5750610adb610be5565b5b80610b135750600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15610b2557610b20610f0a565b610b57565b6040517f2514f7d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610b63610f89565b905090565b3660008037600080366000845af43d6000803e8060008114610b89573d6000f35b3d6000fd5b6000610bbc7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b610a53565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080610bf0610e4d565b9050600081118015610c025750804210155b91505090565b610c10610be5565b15610c47576040517fa8cab3d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610c8660017f41a07f15d150fca84be71d927adb8e4a8a0de6ebcadef3119141487ff482f0f260001c610c7e9190611637565b60001b610a53565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80610ceb60017f41a07f15d150fca84be71d927adb8e4a8a0de6ebcadef3119141487ff482f0f260001c610ce39190611637565b60001b610a53565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d3883610fe0565b600082511180610d455750805b15610d5657610d548383610a26565b505b505050565b6000819050919050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610d8e610b8e565b82604051610d9d9291906115df565b60405180910390a1610dae8161102f565b50565b610db9610c08565b610dc161110f565b610dcb6000611191565b565b610dd5610c08565b610ddd61110f565b6283d600811015610e2a57806283d6006040517fd96242ca000000000000000000000000000000000000000000000000000000008152600401610e2192919061166b565b60405180910390fd5b600042905060008282610e3d9190611694565b9050610e4881611191565b505050565b6000610e7b7f04b06dd5becaad633b58f99e01f1e05103eff5a573d10d18c9baf1bc4e6bfd3a60001b6111ff565b60000154905090565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051610eae9190611739565b600060405180830381855af49150503d8060008114610ee9576040519150601f19603f3d011682016040523d82523d6000602084013e610eee565b606091505b5091509150610eff86838387611209565b925050509392505050565b610f12610b8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f76906117f9565b60405180910390fd5b610f8761127e565b565b6000610fb77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610a53565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fe981611280565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361109e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110959061188b565b60405180910390fd5b806110cb7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b610a53565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611117611339565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461118f5733611152611339565b6040517f295a81c10000000000000000000000000000000000000000000000000000000081526004016111869291906115df565b60405180910390fd5b565b806111be7f04b06dd5becaad633b58f99e01f1e05103eff5a573d10d18c9baf1bc4e6bfd3a60001b6111ff565b600001819055507f7413b2ccac0d914f9764525af0b89a12aaf913cb0de2b18adb85e22b80c86ca0816040516111f491906115c4565b60405180910390a150565b6000819050919050565b6060831561126b5760008351036112635761122385610a5d565b611262576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611259906118f7565b60405180910390fd5b5b829050611276565b6112758383611348565b5b949350505050565b565b61128981610a5d565b6112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90611989565b60405180910390fd5b806112f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610a53565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611343610b8e565b905090565b60008251111561135b5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f91906119fe565b60405180910390fd5b60008115159050919050565b6113ad81611398565b82525050565b60006020820190506113c860008301846113a4565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611403826113d8565b9050919050565b611413816113f8565b811461141e57600080fd5b50565b6000813590506114308161140a565b92915050565b60006020828403121561144c5761144b6113ce565b5b600061145a84828501611421565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261148857611487611463565b5b8235905067ffffffffffffffff8111156114a5576114a4611468565b5b6020830191508360018202830111156114c1576114c061146d565b5b9250929050565b6000806000604084860312156114e1576114e06113ce565b5b60006114ef86828701611421565b935050602084013567ffffffffffffffff8111156115105761150f6113d3565b5b61151c86828701611472565b92509250509250925092565b611531816113f8565b82525050565b600060208201905061154c6000830184611528565b92915050565b6000819050919050565b61156581611552565b811461157057600080fd5b50565b6000813590506115828161155c565b92915050565b60006020828403121561159e5761159d6113ce565b5b60006115ac84828501611573565b91505092915050565b6115be81611552565b82525050565b60006020820190506115d960008301846115b5565b92915050565b60006040820190506115f46000830185611528565b6116016020830184611528565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061164282611552565b915061164d83611552565b925082820390508181111561166557611664611608565b5b92915050565b600060408201905061168060008301856115b5565b61168d60208301846115b5565b9392505050565b600061169f82611552565b91506116aa83611552565b92508282019050808211156116c2576116c1611608565b5b92915050565b600081519050919050565b600081905092915050565b60005b838110156116fc5780820151818401526020810190506116e1565b60008484015250505050565b6000611713826116c8565b61171d81856116d3565b935061172d8185602086016116de565b80840191505092915050565b60006117458284611708565b915081905092915050565b600082825260208201905092915050565b7f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60008201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760208201527f6574000000000000000000000000000000000000000000000000000000000000604082015250565b60006117e3604283611750565b91506117ee82611761565b606082019050919050565b60006020820190508181036000830152611812816117d6565b9050919050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611875602683611750565b915061188082611819565b604082019050919050565b600060208201905081810360008301526118a481611868565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006118e1601d83611750565b91506118ec826118ab565b602082019050919050565b60006020820190508181036000830152611910816118d4565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000611973602d83611750565b915061197e82611917565b604082019050919050565b600060208201905081810360008301526119a281611966565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006119d0826119a9565b6119da8185611750565b93506119ea8185602086016116de565b6119f3816119b4565b840191505092915050565b60006020820190508181036000830152611a1881846119c5565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220530b2b5f962ad5bc7b115a2ccce61f89851984a2451e481ea65a0b3afb17dd3464736f6c63430008110033

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

000000000000000000000000c7533a09ce5f8bf57a84d4fdbd576dd310949268000000000000000000000000fffff2a646d204fb4ad6fcc4c3c53121491ebf3c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003244538e009000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000aaaaa6288ad901050051f282c48527628219bf5900000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000012546573746e6574205374616b6564204554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b746573744b696c6e45544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000002bb938c0e2073b085c76c410a8371657167b3e1e000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000012368c1dce73224b936271d44f1dd7b8ea0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _logic (address): 0xC7533A09cE5F8bf57a84d4fDbD576Dd310949268
Arg [1] : admin_ (address): 0xFfFff2A646d204FB4aD6FCC4c3c53121491eBF3c
Arg [2] : _data (bytes): 0x4538e009000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000aaaaa6288ad901050051f282c48527628219bf5900000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000012546573746e6574205374616b6564204554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b746573744b696c6e45544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000002bb938c0e2073b085c76c410a8371657167b3e1e000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000012368c1dce73224b936271d44f1dd7b8ea00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000002710

-----Encoded View---------------
30 Constructor Arguments found :
Arg [0] : 000000000000000000000000c7533a09ce5f8bf57a84d4fdbd576dd310949268
Arg [1] : 000000000000000000000000fffff2a646d204fb4ad6fcc4c3c53121491ebf3c
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000324
Arg [4] : 4538e00900000000000000000000000000000000000000000000000000000000
Arg [5] : 0000002000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000014000000000000000000000000000000000000000000000000000000000
Arg [7] : 00000180000000000000000000000000aaaaa6288ad901050051f282c4852762
Arg [8] : 8219bf5900000000000000000000000000000000000000000000000000000000
Arg [9] : 000001c000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000020000000000000000000000000000000000000000000000000000000000
Arg [11] : 0000024000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000028000000000000000000000000000000000000000000000000000000000
Arg [13] : 000002c000000000000000000000000000000000000000000000000000000000
Arg [14] : 000013880000000000000000000000000000000000000000000000000de0b6b3
Arg [15] : a764000000000000000000000000000000000000000000000000000000000000
Arg [16] : 00000012546573746e6574205374616b65642045544800000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [18] : 0000000b746573744b696c6e4554480000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [20] : 000000010000000000000000000000002bb938c0e2073b085c76c410a8371657
Arg [21] : 167b3e1e00000000000000000000000000000000000000000000000000000000
Arg [22] : 0000000100000000000000000000000000000000000000000000000000000000
Arg [23] : 000003e800000000000000000000000000000000000000000000000000000000
Arg [24] : 000000010000000000000000000000000000012368c1dce73224b936271d44f1
Arg [25] : dd7b8ea000000000000000000000000000000000000000000000000000000000
Arg [26] : 0000000100000000000000000000000000000000000000000000000000000000
Arg [27] : 0000271000000000000000000000000000000000000000000000000000000000
Arg [28] : 0000000100000000000000000000000000000000000000000000000000000000
Arg [29] : 0000271000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

4422:5250:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2898:11:3;:9;:11::i;:::-;4422:5250:8;;2675:11:3;:9;:11::i;:::-;4422:5250:8;6640:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7248:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7741:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6178:116;;;;;;;;;;;;;:::i;:::-;;8107:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2516:129;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5854:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6018:121;;;;;;;;;;;;;:::i;:::-;;7495:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7005:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6486:73;;;;;;;;;;;;;:::i;:::-;;6341:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1960:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6815:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2322:110:3;2370:17;:15;:17::i;:::-;2397:28;2407:17;:15;:17::i;:::-;2397:9;:28::i;:::-;2322:110::o;6640:85:8:-;6684:4;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;6707:11:::1;:9;:11::i;:::-;6700:18;;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;6640:85;:::o;7248:162::-;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;2353:12:7::1;:10;:12::i;:::-;7331:38:8::2;7345:12;:10;:12::i;:::-;7359:9;7331:38;;;;;;;:::i;:::-;;;;;;;;7379:24;7393:9;7379:13;:24::i;:::-;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;7248:162;:::o;7741:153::-;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;2353:12:7::1;:10;:12::i;:::-;7833:54:8::2;7851:17;7870:9;;;;;;;;;;;::::0;7881:5:::2;7833:17;:54::i;:::-;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;7741:153;:::o;6178:116::-;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;2353:12:7::1;:10;:12::i;:::-;6282:5:8::2;6234:39;4638:1;4602:32;4594:41;;:45;;;;:::i;:::-;4586:54;;6234:26;:39::i;:::-;:45;;;:53;;;;;;;;;;;;;;;;;;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;6178:116::o;8107:227::-;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;2353:12:7::1;:10;:12::i;:::-;8279:48:8::2;8297:17;8316:4;;8279:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8322:4;8279:17;:48::i;:::-;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;8107:227;;;:::o;2516:129::-;2568:23;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;2621:17:::1;:15;:17::i;:::-;2603:35;;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;2516:129;:::o;5854:127::-;5906:4;5276:11;:9;:11::i;:::-;5262:25;;:10;:25;;;:55;;;;5305:12;:10;:12::i;:::-;5291:26;;:10;:26;;;5262:55;5258:129;;;5929:39:::1;4638:1;4602:32;4594:41;;:45;;;;:::i;:::-;4586:54;;5929:26;:39::i;:::-;:45;;;;;;;;;;;;5922:52;;5258:129:::0;;;5365:11;:9;:11::i;:::-;5258:129;5854:127;:::o;6018:121::-;5276:11;:9;:11::i;:::-;5262:25;;:10;:25;;;:55;;;;5305:12;:10;:12::i;:::-;5291:26;;:10;:26;;;5262:55;5258:129;;;2353:12:7::1;:10;:12::i;:::-;6128:4:8::2;6080:39;4638:1;4602:32;4594:41;;:45;;;;:::i;:::-;4586:54;;6080:26;:39::i;:::-;:45;;;:52;;;;;;;;;;;;;;;;;;5258:129:::0;;;5365:11;:9;:11::i;:::-;5258:129;6018:121::o;7495:114::-;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;2353:12:7::1;:10;:12::i;:::-;7580:22:8::2;7593:8;7580:12;:22::i;:::-;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;7495:114;:::o;7005:97::-;7057:7;5276:11;:9;:11::i;:::-;5262:25;;:10;:25;;;:55;;;;5305:12;:10;:12::i;:::-;5291:26;;:10;:26;;;5262:55;5258:129;;;7083:12:::1;:10;:12::i;:::-;7076:19;;5258:129:::0;;;5365:11;:9;:11::i;:::-;5258:129;7005:97;:::o;6486:73::-;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;6537:15:::1;:13;:15::i;:::-;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;6486:73::o;6341:95::-;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;6407:22:::1;6415:13;6407:7;:22::i;:::-;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;6341:95;:::o;1960:96::-;2003:14;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;2038:11:::1;:9;:11::i;:::-;2029:20;;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;1960:96;:::o;6815:94::-;6863:7;1431:11;:9;:11::i;:::-;1417:25;;:10;:25;;;1413:99;;6889:13:::1;:11;:13::i;:::-;6882:20;;1413:99:::0;;;1490:11;:9;:11::i;:::-;1413:99;6815:94;:::o;6675:198:5:-;6758:12;6789:77;6810:6;6818:4;6789:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6782:84;;6675:198;;;;:::o;1622:190:6:-;1683:21;1792:4;1782:14;;1622:190;;;:::o;1412:320:5:-;1472:4;1724:1;1702:7;:19;;;:23;1695:30;;1412:320;;;:::o;9183:260:8:-;9244:39;4638:1;4602:32;4594:41;;:45;;;;:::i;:::-;4586:54;;9244:26;:39::i;:::-;:45;;;;;;;;;;;;9243:46;:61;;;;9293:11;:9;:11::i;:::-;9243:61;9242:91;;;;9331:1;9309:24;;:10;:24;;;9242:91;9238:199;;;9349:23;:21;:23::i;:::-;9238:199;;;9410:16;;;;;;;;;;;;;;9238:199;9183:260::o;1148:140:1:-;1215:12;1246:35;:33;:35::i;:::-;1239:42;;1148:140;:::o;948:895:3:-;1286:14;1283:1;1280;1267:34;1500:1;1497;1481:14;1478:1;1462:14;1455:5;1442:60;1576:16;1573:1;1570;1555:38;1614:6;1686:1;1681:66;;;;1796:16;1793:1;1786:27;1681:66;1716:16;1713:1;1706:27;3996:122:2;4040:7;4066:39;3730:66;4093:11;;4066:26;:39::i;:::-;:45;;;;;;;;;;;;4059:52;;3996:122;:::o;2757:170:7:-;2801:4;2817:19;2839:13;:11;:13::i;:::-;2817:35;;2884:1;2870:11;:15;:49;;;;;2908:11;2889:15;:30;;2870:49;2862:58;;;2757:170;:::o;3925:109::-;3975:11;:9;:11::i;:::-;3971:57;;;4009:8;;;;;;;;;;;;;;3971:57;3925:109::o;8452:124:8:-;8497:7;8523:40;4800:1;4763:33;4755:42;;:46;;;;:::i;:::-;4747:55;;8523:26;:40::i;:::-;:46;;;;;;;;;;;;8516:53;;8452:124;:::o;8692:126::-;8802:9;8753:40;4800:1;4763:33;4755:42;;:46;;;;:::i;:::-;4747:55;;8753:26;:40::i;:::-;:46;;;:58;;;;;;;;;;;;;;;;;;8692:126;:::o;2131:265:2:-;2239:29;2250:17;2239:10;:29::i;:::-;2296:1;2282:4;:11;:15;:28;;;;2301:9;2282:28;2278:112;;;2326:53;2355:17;2374:4;2326:28;:53::i;:::-;;2278:112;2131:265;;;:::o;1910:190:6:-;1971:21;2080:4;2070:14;;1910:190;;;:::o;4512:135:2:-;4576:35;4589:11;:9;:11::i;:::-;4602:8;4576:35;;;;;;;:::i;:::-;;;;;;;;4621:19;4631:8;4621:9;:19::i;:::-;4512:135;:::o;4784:114:7:-;4828:12;:10;:12::i;:::-;4850:14;:12;:14::i;:::-;4874:17;4889:1;4874:14;:17::i;:::-;4784:114::o;4238:433::-;4297:12;:10;:12::i;:::-;4319:14;:12;:14::i;:::-;964:8:9;4347:13:7;:50;4343:158;;;4440:13;964:8:9;4420:70:7;;;;;;;;;;;;:::i;:::-;;;;;;;;4343:158;4544:12;4559:15;4544:30;;4584:19;4613:13;4606:4;:20;;;;:::i;:::-;4584:42;;4637:27;4652:11;4637:14;:27::i;:::-;4287:384;;4238:433;:::o;3057:135::-;3103:7;3129:50;2083:66;3156:22;;3129:26;:50::i;:::-;:56;;;3122:63;;3057:135;:::o;7059:325:5:-;7200:12;7225;7239:23;7266:6;:19;;7286:4;7266:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7224:67;;;;7308:69;7335:6;7343:7;7352:10;7364:12;7308:26;:69::i;:::-;7301:76;;;;7059:325;;;;;:::o;3924:207:8:-;4009:11;:9;:11::i;:::-;3995:25;;:10;:25;;;3987:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;4101:23;:21;:23::i;:::-;3924:207::o;1249:140:2:-;1302:7;1328:48;978:66;1355:20;;1328:26;:48::i;:::-;:54;;;;;;;;;;;;1321:61;;1249:140;:::o;1845:152::-;1911:37;1930:17;1911:18;:37::i;:::-;1972:17;1963:27;;;;;;;;;;;;1845:152;:::o;4200:201::-;4283:1;4263:22;;:8;:22;;;4255:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4386:8;4338:39;3730:66;4365:11;;4338:26;:39::i;:::-;:45;;;:56;;;;;;;;;;;;;;;;;;4200:201;:::o;3645:168:7:-;3711:13;:11;:13::i;:::-;3697:27;;:10;:27;;;3693:114;;3770:10;3782:13;:11;:13::i;:::-;3747:49;;;;;;;;;;;;:::i;:::-;;;;;;;;3693:114;3645:168::o;3351:179::-;3473:10;3414:50;2083:66;3441:22;;3414:26;:50::i;:::-;:56;;:69;;;;3498:25;3512:10;3498:25;;;;;;:::i;:::-;;;;;;;;3351:179;:::o;2486:190:6:-;2547:21;2656:4;2646:14;;2486:190;;;:::o;7672:628:5:-;7852:12;7880:7;7876:418;;;7928:1;7907:10;:17;:22;7903:286;;8122:18;8133:6;8122:10;:18::i;:::-;8114:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;7903:286;8209:10;8202:17;;;;7876:418;8250:33;8258:10;8270:12;8250:7;:33::i;:::-;7672:628;;;;;;;:::o;3198:46:3:-;:::o;1480:259:2:-;1561:37;1580:17;1561:18;:37::i;:::-;1553:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1715:17;1658:48;978:66;1685:20;;1658:26;:48::i;:::-;:54;;;:74;;;;;;;;;;;;;;;;;;1480:259;:::o;9571:99:8:-;9626:7;9652:11;:9;:11::i;:::-;9645:18;;9571:99;:::o;8822:540:5:-;9001:1;8981:10;:17;:21;8977:379;;;9209:10;9203:17;9265:15;9252:10;9248:2;9244:19;9237:44;8977:379;9332:12;9325:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:90:11;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;515:117::-;624:1;621;614:12;638:117;747:1;744;737:12;761:126;798:7;838:42;831:5;827:54;816:65;;761:126;;;:::o;893:96::-;930:7;959:24;977:5;959:24;:::i;:::-;948:35;;893:96;;;:::o;995:122::-;1068:24;1086:5;1068:24;:::i;:::-;1061:5;1058:35;1048:63;;1107:1;1104;1097:12;1048:63;995:122;:::o;1123:139::-;1169:5;1207:6;1194:20;1185:29;;1223:33;1250:5;1223:33;:::i;:::-;1123:139;;;;:::o;1268:329::-;1327:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:119;;;1382:79;;:::i;:::-;1344:119;1502:1;1527:53;1572:7;1563:6;1552:9;1548:22;1527:53;:::i;:::-;1517:63;;1473:117;1268:329;;;;:::o;1603:117::-;1712:1;1709;1702:12;1726:117;1835:1;1832;1825:12;1849:117;1958:1;1955;1948:12;1985:552;2042:8;2052:6;2102:3;2095:4;2087:6;2083:17;2079:27;2069:122;;2110:79;;:::i;:::-;2069:122;2223:6;2210:20;2200:30;;2253:18;2245:6;2242:30;2239:117;;;2275:79;;:::i;:::-;2239:117;2389:4;2381:6;2377:17;2365:29;;2443:3;2435:4;2427:6;2423:17;2413:8;2409:32;2406:41;2403:128;;;2450:79;;:::i;:::-;2403:128;1985:552;;;;;:::o;2543:672::-;2622:6;2630;2638;2687:2;2675:9;2666:7;2662:23;2658:32;2655:119;;;2693:79;;:::i;:::-;2655:119;2813:1;2838:53;2883:7;2874:6;2863:9;2859:22;2838:53;:::i;:::-;2828:63;;2784:117;2968:2;2957:9;2953:18;2940:32;2999:18;2991:6;2988:30;2985:117;;;3021:79;;:::i;:::-;2985:117;3134:64;3190:7;3181:6;3170:9;3166:22;3134:64;:::i;:::-;3116:82;;;;2911:297;2543:672;;;;;:::o;3221:118::-;3308:24;3326:5;3308:24;:::i;:::-;3303:3;3296:37;3221:118;;:::o;3345:222::-;3438:4;3476:2;3465:9;3461:18;3453:26;;3489:71;3557:1;3546:9;3542:17;3533:6;3489:71;:::i;:::-;3345:222;;;;:::o;3573:77::-;3610:7;3639:5;3628:16;;3573:77;;;:::o;3656:122::-;3729:24;3747:5;3729:24;:::i;:::-;3722:5;3719:35;3709:63;;3768:1;3765;3758:12;3709:63;3656:122;:::o;3784:139::-;3830:5;3868:6;3855:20;3846:29;;3884:33;3911:5;3884:33;:::i;:::-;3784:139;;;;:::o;3929:329::-;3988:6;4037:2;4025:9;4016:7;4012:23;4008:32;4005:119;;;4043:79;;:::i;:::-;4005:119;4163:1;4188:53;4233:7;4224:6;4213:9;4209:22;4188:53;:::i;:::-;4178:63;;4134:117;3929:329;;;;:::o;4264:118::-;4351:24;4369:5;4351:24;:::i;:::-;4346:3;4339:37;4264:118;;:::o;4388:222::-;4481:4;4519:2;4508:9;4504:18;4496:26;;4532:71;4600:1;4589:9;4585:17;4576:6;4532:71;:::i;:::-;4388:222;;;;:::o;4616:332::-;4737:4;4775:2;4764:9;4760:18;4752:26;;4788:71;4856:1;4845:9;4841:17;4832:6;4788:71;:::i;:::-;4869:72;4937:2;4926:9;4922:18;4913:6;4869:72;:::i;:::-;4616:332;;;;;:::o;4954:180::-;5002:77;4999:1;4992:88;5099:4;5096:1;5089:15;5123:4;5120:1;5113:15;5140:194;5180:4;5200:20;5218:1;5200:20;:::i;:::-;5195:25;;5234:20;5252:1;5234:20;:::i;:::-;5229:25;;5278:1;5275;5271:9;5263:17;;5302:1;5296:4;5293:11;5290:37;;;5307:18;;:::i;:::-;5290:37;5140:194;;;;:::o;5340:332::-;5461:4;5499:2;5488:9;5484:18;5476:26;;5512:71;5580:1;5569:9;5565:17;5556:6;5512:71;:::i;:::-;5593:72;5661:2;5650:9;5646:18;5637:6;5593:72;:::i;:::-;5340:332;;;;;:::o;5678:191::-;5718:3;5737:20;5755:1;5737:20;:::i;:::-;5732:25;;5771:20;5789:1;5771:20;:::i;:::-;5766:25;;5814:1;5811;5807:9;5800:16;;5835:3;5832:1;5829:10;5826:36;;;5842:18;;:::i;:::-;5826:36;5678:191;;;;:::o;5875:98::-;5926:6;5960:5;5954:12;5944:22;;5875:98;;;:::o;5979:147::-;6080:11;6117:3;6102:18;;5979:147;;;;:::o;6132:246::-;6213:1;6223:113;6237:6;6234:1;6231:13;6223:113;;;6322:1;6317:3;6313:11;6307:18;6303:1;6298:3;6294:11;6287:39;6259:2;6256:1;6252:10;6247:15;;6223:113;;;6370:1;6361:6;6356:3;6352:16;6345:27;6194:184;6132:246;;;:::o;6384:386::-;6488:3;6516:38;6548:5;6516:38;:::i;:::-;6570:88;6651:6;6646:3;6570:88;:::i;:::-;6563:95;;6667:65;6725:6;6720:3;6713:4;6706:5;6702:16;6667:65;:::i;:::-;6757:6;6752:3;6748:16;6741:23;;6492:278;6384:386;;;;:::o;6776:271::-;6906:3;6928:93;7017:3;7008:6;6928:93;:::i;:::-;6921:100;;7038:3;7031:10;;6776:271;;;;:::o;7053:169::-;7137:11;7171:6;7166:3;7159:19;7211:4;7206:3;7202:14;7187:29;;7053:169;;;;:::o;7228:290::-;7368:34;7364:1;7356:6;7352:14;7345:58;7437:34;7432:2;7424:6;7420:15;7413:59;7506:4;7501:2;7493:6;7489:15;7482:29;7228:290;:::o;7524:366::-;7666:3;7687:67;7751:2;7746:3;7687:67;:::i;:::-;7680:74;;7763:93;7852:3;7763:93;:::i;:::-;7881:2;7876:3;7872:12;7865:19;;7524:366;;;:::o;7896:419::-;8062:4;8100:2;8089:9;8085:18;8077:26;;8149:9;8143:4;8139:20;8135:1;8124:9;8120:17;8113:47;8177:131;8303:4;8177:131;:::i;:::-;8169:139;;7896:419;;;:::o;8321:225::-;8461:34;8457:1;8449:6;8445:14;8438:58;8530:8;8525:2;8517:6;8513:15;8506:33;8321:225;:::o;8552:366::-;8694:3;8715:67;8779:2;8774:3;8715:67;:::i;:::-;8708:74;;8791:93;8880:3;8791:93;:::i;:::-;8909:2;8904:3;8900:12;8893:19;;8552:366;;;:::o;8924:419::-;9090:4;9128:2;9117:9;9113:18;9105:26;;9177:9;9171:4;9167:20;9163:1;9152:9;9148:17;9141:47;9205:131;9331:4;9205:131;:::i;:::-;9197:139;;8924:419;;;:::o;9349:179::-;9489:31;9485:1;9477:6;9473:14;9466:55;9349:179;:::o;9534:366::-;9676:3;9697:67;9761:2;9756:3;9697:67;:::i;:::-;9690:74;;9773:93;9862:3;9773:93;:::i;:::-;9891:2;9886:3;9882:12;9875:19;;9534:366;;;:::o;9906:419::-;10072:4;10110:2;10099:9;10095:18;10087:26;;10159:9;10153:4;10149:20;10145:1;10134:9;10130:17;10123:47;10187:131;10313:4;10187:131;:::i;:::-;10179:139;;9906:419;;;:::o;10331:232::-;10471:34;10467:1;10459:6;10455:14;10448:58;10540:15;10535:2;10527:6;10523:15;10516:40;10331:232;:::o;10569:366::-;10711:3;10732:67;10796:2;10791:3;10732:67;:::i;:::-;10725:74;;10808:93;10897:3;10808:93;:::i;:::-;10926:2;10921:3;10917:12;10910:19;;10569:366;;;:::o;10941:419::-;11107:4;11145:2;11134:9;11130:18;11122:26;;11194:9;11188:4;11184:20;11180:1;11169:9;11165:17;11158:47;11222:131;11348:4;11222:131;:::i;:::-;11214:139;;10941:419;;;:::o;11366:99::-;11418:6;11452:5;11446:12;11436:22;;11366:99;;;:::o;11471:102::-;11512:6;11563:2;11559:7;11554:2;11547:5;11543:14;11539:28;11529:38;;11471:102;;;:::o;11579:377::-;11667:3;11695:39;11728:5;11695:39;:::i;:::-;11750:71;11814:6;11809:3;11750:71;:::i;:::-;11743:78;;11830:65;11888:6;11883:3;11876:4;11869:5;11865:16;11830:65;:::i;:::-;11920:29;11942:6;11920:29;:::i;:::-;11915:3;11911:39;11904:46;;11671:285;11579:377;;;;:::o;11962:313::-;12075:4;12113:2;12102:9;12098:18;12090:26;;12162:9;12156:4;12152:20;12148:1;12137:9;12133:17;12126:47;12190:78;12263:4;12254:6;12190:78;:::i;:::-;12182:86;;11962:313;;;;:::o

Swarm Source

ipfs://530b2b5f962ad5bc7b115a2ccce61f89851984a2451e481ea65a0b3afb17dd34
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.