ETH Price: $1,958.99 (-4.87%)
 

Overview

ETH Balance

0.001 ETH

Eth Value

$1.96 (@ $1,958.99/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deposit243355302026-01-28 19:47:5918 days ago1769629679IN
0x7d4248E2...9E45d6c19
0.001 ETH0.000005360.11876475

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AdvancedVault

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
No with 200 runs

Other Settings:
prague EvmVersion
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.28;

import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {PredicateClient} from "../../mixins/PredicateClient.sol";
import {Attestation} from "../../interfaces/IPredicateRegistry.sol";

/**
 * @title AdvancedVault
 * @author Predicate Labs, Inc (https://predicate.io)
 * @notice Minimal example using PredicateClient for function and value-based authorization
 * @dev Demonstrates PredicateClient when your policy needs to validate:
 *      - WHICH function is called (withdraw vs transfer)
 *      - HOW MUCH value (amount limits)
 *      - WHAT parameters (recipient addresses)
 *
 *      The key difference: policies can enforce different rules per function
 */
contract AdvancedVault is PredicateClient, Ownable {
    mapping(address => uint256) public balances;

    event Deposit(address indexed user, uint256 amount);
    event Withdrawal(address indexed user, address indexed to, uint256 amount);
    event Transfer(address indexed from, address indexed to, uint256 amount);

    constructor(
        address _owner,
        address _registry,
        string memory _policyID
    ) Ownable(_owner) {
        _initPredicateClient(_registry, _policyID);
    }

    /**
     * @notice Deposit ETH - no attestation required
     */
    function deposit() external payable {
        balances[msg.sender] += msg.value;
        emit Deposit(msg.sender, msg.value);
    }

    /**
     * @notice Withdraw with amount validation
     * @dev Policy can enforce max withdrawal limits
     * @param _amount Amount to withdraw (validated by policy)
     * @param _attestation Must include encoded function data
     */
    function withdraw(
        uint256 _amount,
        Attestation calldata _attestation
    ) external {
        require(balances[msg.sender] >= _amount, "Insufficient balance");

        // Encode function signature and parameters for policy validation
        bytes memory encoded = abi.encodeWithSignature("_executeWithdraw(address,uint256)", msg.sender, _amount);

        // Advanced authorization with function details
        require(_authorizeTransaction(_attestation, encoded, msg.sender, 0), "Unauthorized");

        _executeWithdraw(msg.sender, _amount);
    }

    /**
     * @notice Withdraw to specific address with full parameter validation
     * @dev Policy validates BOTH recipient AND amount
     * @param _to Recipient address (validated by policy)
     * @param _amount Amount (validated by policy)
     * @param _attestation Must include encoded function data
     */
    function withdrawTo(
        address _to,
        uint256 _amount,
        Attestation calldata _attestation
    ) external {
        require(balances[msg.sender] >= _amount, "Insufficient balance");

        // Policy sees different function signature and parameters
        bytes memory encoded = abi.encodeWithSignature("_executeWithdraw(address,uint256)", _to, _amount);

        require(_authorizeTransaction(_attestation, encoded, msg.sender, 0), "Unauthorized");

        _executeWithdraw(_to, _amount);
    }

    /**
     * @notice Transfer between users - different policy rules than withdraw
     * @dev Shows how policies can have function-specific rules
     * @param _to Recipient
     * @param _amount Amount to transfer
     * @param _attestation Must include encoded transfer data
     */
    function transfer(
        address _to,
        uint256 _amount,
        Attestation calldata _attestation
    ) external {
        require(balances[msg.sender] >= _amount, "Insufficient balance");

        // Different function = different policy rules possible
        bytes memory encoded =
            abi.encodeWithSignature("_executeTransfer(address,address,uint256)", msg.sender, _to, _amount);

        require(_authorizeTransaction(_attestation, encoded, msg.sender, 0), "Unauthorized");

        _executeTransfer(msg.sender, _to, _amount);
    }

    /**
     * @notice Payable function example - policy validates msg.value
     * @dev Shows value-based authorization for payable functions
     * @param _lockPeriod Lock period parameter
     * @param _attestation Must include msg.value in validation
     */
    function depositAndLock(
        uint256 _lockPeriod,
        Attestation calldata _attestation
    ) external payable {
        require(msg.value > 0, "Must send ETH");

        bytes memory encoded =
            abi.encodeWithSignature("_executeLock(address,uint256,uint256)", msg.sender, msg.value, _lockPeriod);

        // Note: msg.value passed for validation
        require(_authorizeTransaction(_attestation, encoded, msg.sender, msg.value), "Unauthorized");

        balances[msg.sender] += msg.value;
        emit Deposit(msg.sender, msg.value);
        // Lock logic would go here
    }

    // Internal execution functions
    function _executeWithdraw(
        address _to,
        uint256 _amount
    ) internal {
        balances[msg.sender] -= _amount;
        payable(_to).transfer(_amount);
        emit Withdrawal(msg.sender, _to, _amount);
    }

    function _executeTransfer(
        address _from,
        address _to,
        uint256 _amount
    ) internal {
        balances[_from] -= _amount;
        balances[_to] += _amount;
        emit Transfer(_from, _to, _amount);
    }

    function _executeLock(
        address _user,
        uint256 _amount,
        uint256 _period
    ) internal {
        // Lock implementation would go here
    }

    /**
     * @notice Required: Set policy ID with access control
     * @dev Business logic contracts MUST implement this with proper access control
     */
    function setPolicyID(
        string memory _policyID
    ) external onlyOwner {
        _setPolicyID(_policyID);
    }

    /**
     * @notice Required: Set registry with access control
     * @dev Business logic contracts MUST implement this with proper access control
     */
    function setRegistry(
        address _registry
    ) external onlyOwner {
        _setRegistry(_registry);
    }

    /**
     * @notice Required: Expose policy ID getter
     * @dev Inherited from PredicateClient - no implementation needed
     */
    // function getPolicyID() external view returns (string memory) - inherited

    /**
     * @notice Required: Expose registry getter
     * @dev Inherited from PredicateClient - no implementation needed
     */
    // function getRegistry() external view returns (address) - inherited
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.4;

import {IPredicateRegistry, Attestation, Statement} from "../interfaces/IPredicateRegistry.sol";
import {IPredicateClient, PredicateClient__Unauthorized} from "../interfaces/IPredicateClient.sol";

/**
 * @title PredicateClient
 * @author Predicate Labs, Inc (https://predicate.io)
 * @notice Abstract contract for integrating Predicate attestation validation
 * @dev Provides core functionality for contracts to validate attestations before executing transactions.
 *      Implements ERC-7201 namespaced storage to prevent collisions in upgradeable contracts.
 *
 * Usage:
 * 1. Inherit this contract
 * 2. Call _initPredicateClient() in your constructor
 * 3. Use _authorizeTransaction() to validate attestations before business logic
 *
 * Example:
 * ```solidity
 * contract MyContract is PredicateClient {
 *     constructor(address _registry, string memory _policy) {
 *         _initPredicateClient(_registry, _policy);
 *     }
 *
 *     function protectedFunction(Attestation calldata _attestation) external {
 *         bytes memory encoded = abi.encodeWithSignature("_internal()");
 *         require(_authorizeTransaction(_attestation, encoded, msg.sender, msg.value));
 *         _internal();
 *     }
 * }
 * ```
 * @custom:security-contact [email protected]
 */
abstract contract PredicateClient is IPredicateClient {
    /// @notice Struct to contain stateful values for PredicateClient-type contracts
    /// @custom:storage-location erc7201:predicate.storage.PredicateClient
    struct PredicateClientStorage {
        IPredicateRegistry registry;
        string policy;
    }

    /// @notice the storage slot for the PredicateClientStorage struct
    /// @dev keccak256(abi.encode(uint256(keccak256("predicate.storage.PredicateClient")) - 1)) & ~bytes32(uint256(0xff))
    bytes32 private constant _PREDICATE_CLIENT_STORAGE_SLOT =
        0x804776a84f3d03ad8442127b1451e2fbbb6a715c681d6a83c9e9fca787b99300;

    /// @notice Emitted when the PredicateRegistry address is updated
    /// @param oldRegistry The previous PredicateRegistry contract address
    /// @param newRegistry The new PredicateRegistry contract address
    event PredicateRegistryUpdated(address indexed oldRegistry, address indexed newRegistry);

    /// @notice Emitted when the policy ID is updated
    /// @param oldPolicyID The previous policy identifier
    /// @param newPolicyID The new policy identifier
    event PredicatePolicyIDUpdated(string oldPolicyID, string newPolicyID);

    function _getPredicateClientStorage() private pure returns (PredicateClientStorage storage $) {
        assembly {
            $.slot := _PREDICATE_CLIENT_STORAGE_SLOT
        }
    }

    /**
     * @notice Initializes the Predicate client with registry and policy ID
     * @dev Must be called in the constructor of the inheriting contract.
     *      Sets both the registry address and initial policy ID.
     * @param _registryAddress The address of the PredicateRegistry contract
     * @param _policyID The initial policy identifier for this contract (typically "x-{hash[:16]}")
     */
    function _initPredicateClient(
        address _registryAddress,
        string memory _policyID
    ) internal {
        PredicateClientStorage storage $ = _getPredicateClientStorage();
        $.registry = IPredicateRegistry(_registryAddress);
        _setPolicyID(_policyID);
    }

    /**
     * @notice Updates the policy ID for this contract
     * @dev Updates local storage and registers with PredicateRegistry.
     *      Should typically be restricted to owner/admin.
     *      Emits PredicatePolicyIDUpdated event only when the policy actually changes.
     * @param _policyID The new policy identifier to set
     */
    function _setPolicyID(
        string memory _policyID
    ) internal {
        PredicateClientStorage storage $ = _getPredicateClientStorage();
        string memory oldPolicyID = $.policy;

        // Only update if policy has changed
        if (keccak256(bytes(oldPolicyID)) != keccak256(bytes(_policyID))) {
            $.policy = _policyID;
            $.registry.setPolicyID(_policyID);
            emit PredicatePolicyIDUpdated(oldPolicyID, _policyID);
        }
    }

    /**
     * @notice Returns the current policy ID for this contract
     * @dev Returns the policy identifier stored in ERC-7201 namespaced storage
     * @return policyID The policy identifier associated with this contract
     */
    function getPolicyID() external view returns (string memory policyID) {
        return _getPolicyID();
    }

    function _getPolicyID() internal view returns (string memory policyID) {
        return _getPredicateClientStorage().policy;
    }

    /**
     * @notice Updates the PredicateRegistry address
     * @dev Should typically be restricted to owner/admin for security.
     *      Automatically re-registers the cached policy with the new registry to prevent desynchronization.
     *      Emits PredicateRegistryUpdated event only when the registry actually changes.
     * @param _registryAddress The new PredicateRegistry contract address
     * @custom:security Changing registry is sensitive - ensure proper access control
     */
    function _setRegistry(
        address _registryAddress
    ) internal {
        PredicateClientStorage storage $ = _getPredicateClientStorage();
        address oldRegistry = address($.registry);

        // Only update if registry has changed
        if (oldRegistry != _registryAddress) {
            $.registry = IPredicateRegistry(_registryAddress);

            // Re-register cached policy with new registry to prevent desynchronization
            // This ensures off-chain attesters can query the new registry and get the correct policy
            string memory cachedPolicy = $.policy;
            if (bytes(cachedPolicy).length > 0) {
                $.registry.setPolicyID(cachedPolicy);
            }

            emit PredicateRegistryUpdated(oldRegistry, _registryAddress);
        }
    }

    /**
     * @notice Returns the current PredicateRegistry contract address
     * @dev Returns the registry address stored in ERC-7201 namespaced storage
     * @return The address of the PredicateRegistry contract used for attestation validation
     */
    function getRegistry() external view returns (address) {
        return _getRegistry();
    }

    function _getRegistry() internal view returns (address) {
        return address(_getPredicateClientStorage().registry);
    }

    modifier onlyPredicateRegistry() {
        if (msg.sender != address(_getPredicateClientStorage().registry)) {
            revert PredicateClient__Unauthorized();
        }
        _;
    }

    /**
     * @notice Validates a transaction by verifying the attestation
     * @dev Constructs a Statement from parameters and validates it against the attestation.
     *      This is the core authorization function that should be called before executing
     *      any protected business logic.
     *
     * Process:
     * 1. Builds Statement struct with transaction parameters
     * 2. Calls PredicateRegistry.validateAttestation()
     * 3. Registry verifies signature and checks attestation validity
     * 4. Returns true if valid (reverts if invalid)
     *
     * @param _attestation The attestation containing UUID, expiration, attester, and signature
     * @param _encodedSigAndArgs The encoded function signature and arguments (use abi.encodeWithSignature)
     * @param _msgSender The original transaction sender (typically msg.sender)
     * @param _msgValue The ETH value sent with the transaction (typically msg.value)
     * @return success Always returns true (reverts on validation failure)
     *
     * @custom:security Always use this before executing protected functions
     * @custom:security Encode the internal function call, not the public one
     */
    function _authorizeTransaction(
        Attestation memory _attestation,
        bytes memory _encodedSigAndArgs,
        address _msgSender,
        uint256 _msgValue
    ) internal returns (bool success) {
        PredicateClientStorage storage $ = _getPredicateClientStorage();
        Statement memory statement = Statement({
            msgSender: _msgSender,
            target: address(this),
            msgValue: _msgValue,
            encodedSigAndArgs: _encodedSigAndArgs,
            policy: $.policy,
            expiration: _attestation.expiration,
            uuid: _attestation.uuid
        });
        return $.registry.validateAttestation(statement, _attestation);
    }
}

// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.4;

/**
 * @notice Struct that bundles together a statement's parameters for validation
 * @dev A statement represents a claim or assertion about a transaction to be executed.
 *      It contains all the necessary information to validate that a transaction
 *      is authorized by an attester according to a specific policy.
 * @custom:security UUID must be unique per statement to prevent replay attacks
 */
struct Statement {
    // the unique identifier for the statement
    string uuid;
    // the address of the sender of the statement
    address msgSender;
    // the address of the target contract for the statement
    address target;
    // the value to send with the statement
    uint256 msgValue;
    // the encoded signature and arguments for the statement
    bytes encodedSigAndArgs;
    // the policy associated with the statement
    string policy;
    // the timestamp by which the statement must be executed
    uint256 expiration;
}

/**
 * @notice Struct that bundles together an attestation's parameters for validation
 * @dev An attestation is a signed approval from an authorized attester.
 *      The signature is created by signing the hash of the corresponding Statement.
 *      The hash includes chain ID for domain separation to prevent cross-chain replay.
 * @custom:security signature must be generated using hashStatementWithExpiry()
 */
struct Attestation {
    // the unique identifier for the attestation
    string uuid;
    // the timestamp by which the attestation must be executed
    uint256 expiration;
    // the address of the attester
    address attester;
    // the signature from the attestation
    bytes signature;
}

/**
 * @title IPredicateRegistry
 * @author Predicate Labs, Inc (https://predicate.io)
 * @notice Interface for the core registry managing attesters, policies, and statement validation
 * @dev Defines the contract interface for PredicateRegistry implementation
 */
interface IPredicateRegistry {
    /**
     * @notice Sets a policy ID for the sender, defining execution rules for statements
     * @dev Associates a policy identifier with msg.sender. Policy ID format:
     *      - Typically: "x-{hash(policy)[:16]}" (e.g., "x-a1b2c3d4e5f6g7h8")
     *      - Can be any string: IPFS CID, URL, or custom identifier
     *      - No format validation - any string accepted
     * @param policyID The unique identifier for the policy
     */
    function setPolicyID(
        string memory policyID
    ) external;

    /**
     * @notice Retrieves the policy ID associated with a client address
     * @param client The address to query
     * @return policyID The policy identifier, empty string if none set
     */
    function getPolicyID(
        address client
    ) external view returns (string memory policyID);

    /**
     * @notice Validates an attestation to authorize a statement execution
     * @dev Verifies:
     *      - Attestation not expired
     *      - Statement UUID not previously used (replay protection)
     *      - UUIDs match between statement and attestation
     *      - Expirations match
     *      - Signature is valid (ECDSA recovery)
     *      - Attester is registered
     * @param _statement The statement to validate
     * @param _attestation The signed attestation authorizing the statement
     * @return isVerified True if valid, reverts otherwise
     * @custom:security Marks UUID as spent to prevent replay attacks
     */
    function validateAttestation(
        Statement memory _statement,
        Attestation memory _attestation
    ) external returns (bool isVerified);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.4;

/**
 * @notice error type for unauthorized access
 */
error PredicateClient__Unauthorized();

/**
 * @notice Interface for a PredicateClient-type contract to set policy, registry and validate tasks
 */
interface IPredicateClient {
    /**
     * @notice Sets a policy ID for the calling address
     * @param _policyID The policy identifier. Typically "x-{hash(policy)[:16]}" but can be any string
     * @dev This function enables clients to define execution rules or parameters for statements they submit.
     *      The policy ID governs how statements are validated, ensuring compliance with predefined rules.
     */
    function setPolicyID(
        string memory _policyID
    ) external;

    /**
     * @notice Sets the Predicate Registry for the calling address
     * @param _registry address of the registry
     * @dev This function enables clients to set the Predicate Registry for the calling address
     * @dev Authorized only by the owner of the contract
     */
    function setRegistry(
        address _registry
    ) external;

    /**
     * @notice Retrieves the policy ID for the calling address
     * @return policyID The policy identifier associated with the calling address
     */
    function getPolicyID() external view returns (string memory policyID);

    /**
     * @notice Function for getting the Predicate Registry
     * @return address of the registry
     */
    function getRegistry() external view returns (address);
}

Settings
{
  "remappings": [
    "forge-std/=lib/forge-std/src/",
    "solmate/=lib/solmate/src/",
    "openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "utils/=lib/utils/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
    "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/"
  ],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "prague",
  "viaIR": false
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_registry","type":"address"},{"internalType":"string","name":"_policyID","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"oldPolicyID","type":"string"},{"indexed":false,"internalType":"string","name":"newPolicyID","type":"string"}],"name":"PredicatePolicyIDUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldRegistry","type":"address"},{"indexed":true,"internalType":"address","name":"newRegistry","type":"address"}],"name":"PredicateRegistryUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockPeriod","type":"uint256"},{"components":[{"internalType":"string","name":"uuid","type":"string"},{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"address","name":"attester","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Attestation","name":"_attestation","type":"tuple"}],"name":"depositAndLock","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getPolicyID","outputs":[{"internalType":"string","name":"policyID","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_policyID","type":"string"}],"name":"setPolicyID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_registry","type":"address"}],"name":"setRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"components":[{"internalType":"string","name":"uuid","type":"string"},{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"address","name":"attester","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Attestation","name":"_attestation","type":"tuple"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"components":[{"internalType":"string","name":"uuid","type":"string"},{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"address","name":"attester","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Attestation","name":"_attestation","type":"tuple"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"components":[{"internalType":"string","name":"uuid","type":"string"},{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"address","name":"attester","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Attestation","name":"_attestation","type":"tuple"}],"name":"withdrawTo","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561000f575f5ffd5b50604051612b02380380612b028339818101604052810190610031919061054c565b825f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a2575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161009991906105c7565b60405180910390fd5b6100b1816100ca60201b60201c565b506100c2828261018b60201b60201c565b50505061095c565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f61019a6101f160201b60201c565b905082815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101ec8261021860201b60201c565b505050565b5f7f804776a84f3d03ad8442127b1451e2fbbb6a715c681d6a83c9e9fca787b99300905090565b5f6102276101f160201b60201c565b90505f8160010180546102399061060d565b80601f01602080910402602001604051908101604052809291908181526020018280546102659061060d565b80156102b05780601f10610287576101008083540402835291602001916102b0565b820191905f5260205f20905b81548152906001019060200180831161029357829003601f168201915b5050505050905082805190602001208180519060200120146103a057828260010190816102dd91906107f0565b50815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f33fd2f846040518263ffffffff1660e01b81526004016103399190610907565b5f604051808303815f87803b158015610350575f5ffd5b505af1158015610362573d5f5f3e3d5ffd5b505050507f22c658286008a7684f36a2ca38b26e9292d39f14d062e215667f5f92552c69a98184604051610397929190610927565b60405180910390a15b505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103df826103b6565b9050919050565b6103ef816103d5565b81146103f9575f5ffd5b50565b5f8151905061040a816103e6565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61045e82610418565b810181811067ffffffffffffffff8211171561047d5761047c610428565b5b80604052505050565b5f61048f6103a5565b905061049b8282610455565b919050565b5f67ffffffffffffffff8211156104ba576104b9610428565b5b6104c382610418565b9050602081019050919050565b8281835e5f83830152505050565b5f6104f06104eb846104a0565b610486565b90508281526020810184848401111561050c5761050b610414565b5b6105178482856104d0565b509392505050565b5f82601f83011261053357610532610410565b5b81516105438482602086016104de565b91505092915050565b5f5f5f60608486031215610563576105626103ae565b5b5f610570868287016103fc565b9350506020610581868287016103fc565b925050604084015167ffffffffffffffff8111156105a2576105a16103b2565b5b6105ae8682870161051f565b9150509250925092565b6105c1816103d5565b82525050565b5f6020820190506105da5f8301846105b8565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061062457607f821691505b602082108103610637576106366105e0565b5b50919050565b5f81519050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026106a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610668565b6106ad8683610668565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6106f16106ec6106e7846106c5565b6106ce565b6106c5565b9050919050565b5f819050919050565b61070a836106d7565b61071e610716826106f8565b848454610674565b825550505050565b5f5f905090565b610735610726565b610740818484610701565b505050565b5b81811015610763576107585f8261072d565b600181019050610746565b5050565b601f8211156107a85761077981610647565b61078284610659565b81016020851015610791578190505b6107a561079d85610659565b830182610745565b50505b505050565b5f82821c905092915050565b5f6107c85f19846008026107ad565b1980831691505092915050565b5f6107e083836107b9565b9150826002028217905092915050565b6107f98261063d565b67ffffffffffffffff81111561081257610811610428565b5b61081c825461060d565b610827828285610767565b5f60209050601f831160018114610858575f8415610846578287015190505b61085085826107d5565b8655506108b7565b601f19841661086686610647565b5f5b8281101561088d57848901518255600182019150602085019450602081019050610868565b868310156108aa57848901516108a6601f8916826107b9565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b5f6108d98261063d565b6108e381856108bf565b93506108f38185602086016104d0565b6108fc81610418565b840191505092915050565b5f6020820190508181035f83015261091f81846108cf565b905092915050565b5f6040820190508181035f83015261093f81856108cf565b9050818103602083015261095381846108cf565b90509392505050565b612199806109695f395ff3fe6080604052600436106100c1575f3560e01c8063715018a61161007e578063a91ee0dc11610058578063a91ee0dc14610229578063d0e30db014610251578063ed83c89d1461025b578063f2fde38b14610283576100c1565b8063715018a6146101cd5780638da5cb5b146101e3578063a7123a0d1461020d576100c1565b80630f33fd2f146100c557806327e235e3146100ed5780632c8116ed1461012957806349e22757146101515780635ab1bd531461017b5780636392e027146101a5575b5f5ffd5b3480156100d0575f5ffd5b506100eb60048036038101906100e6919061158f565b6102ab565b005b3480156100f8575f5ffd5b50610113600480360381019061010e9190611630565b6102bf565b6040516101209190611673565b60405180910390f35b348015610134575f5ffd5b5061014f600480360381019061014a91906116d8565b6102d4565b005b34801561015c575f5ffd5b5061016561044a565b6040516101729190611792565b60405180910390f35b348015610186575f5ffd5b5061018f610459565b60405161019c91906117c1565b60405180910390f35b3480156101b0575f5ffd5b506101cb60048036038101906101c691906117da565b610467565b005b3480156101d8575f5ffd5b506101e16105de565b005b3480156101ee575f5ffd5b506101f76105f1565b60405161020491906117c1565b60405180910390f35b610227600480360381019061022291906116d8565b610618565b005b348015610234575f5ffd5b5061024f600480360381019061024a9190611630565b6107e9565b005b6102596107fd565b005b348015610266575f5ffd5b50610281600480360381019061027c91906117da565b6108a0565b005b34801561028e575f5ffd5b506102a960048036038101906102a49190611630565b610a1a565b005b6102b3610a9e565b6102bc81610b25565b50565b6001602052805f5260405f205f915090505481565b8160015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161034b90611890565b60405180910390fd5b5f33836040516024016103689291906118ae565b6040516020818303038152906040527fc04b310b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506103fc826103f490611a28565b82335f610cac565b61043b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043290611a84565b60405180910390fd5b6104453384610e54565b505050565b6060610454610f54565b905090565b5f610462610fed565b905090565b8160015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156104e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104de90611890565b60405180910390fd5b5f83836040516024016104fb9291906118ae565b6040516020818303038152906040527fc04b310b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905061058f8261058790611a28565b82335f610cac565b6105ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c590611a84565b60405180910390fd5b6105d88484610e54565b50505050565b6105e6610a9e565b6105ef5f61101d565b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f341161065a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065190611aec565b60405180910390fd5b5f33348460405160240161067093929190611b0a565b6040516020818303038152906040527f3aa279b8000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050610704826106fc90611a28565b823334610cac565b610743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073a90611a84565b60405180910390fd5b3460015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461078f9190611b6c565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040516107dc9190611673565b60405180910390a2505050565b6107f1610a9e565b6107fa816110de565b50565b3460015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108499190611b6c565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040516108969190611673565b60405180910390a2565b8160015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091790611890565b60405180910390fd5b5f33848460405160240161093693929190611b9f565b6040516020818303038152906040527f33a738c9000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506109ca826109c290611a28565b82335f610cac565b610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0090611a84565b60405180910390fd5b610a14338585611304565b50505050565b610a22610a9e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a92575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610a8991906117c1565b60405180910390fd5b610a9b8161101d565b50565b610aa6611414565b73ffffffffffffffffffffffffffffffffffffffff16610ac46105f1565b73ffffffffffffffffffffffffffffffffffffffff1614610b2357610ae7611414565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b1a91906117c1565b60405180910390fd5b565b5f610b2e61141b565b90505f816001018054610b4090611c01565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6c90611c01565b8015610bb75780601f10610b8e57610100808354040283529160200191610bb7565b820191905f5260205f20905b815481529060010190602001808311610b9a57829003601f168201915b505050505090508280519060200120818051906020012014610ca75782826001019081610be49190611dd1565b50815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f33fd2f846040518263ffffffff1660e01b8152600401610c409190611792565b5f604051808303815f87803b158015610c57575f5ffd5b505af1158015610c69573d5f5f3e3d5ffd5b505050507f22c658286008a7684f36a2ca38b26e9292d39f14d062e215667f5f92552c69a98184604051610c9e929190611ea0565b60405180910390a15b505050565b5f5f610cb661141b565b90505f6040518060e00160405280885f015181526020018673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff168152602001858152602001878152602001836001018054610d2090611c01565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4c90611c01565b8015610d975780601f10610d6e57610100808354040283529160200191610d97565b820191905f5260205f20905b815481529060010190602001808311610d7a57829003601f168201915b5050505050815260200188602001518152509050815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663244ddbb382896040518363ffffffff1660e01b8152600401610e0892919061209b565b6020604051808303815f875af1158015610e24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e489190612105565b92505050949350505050565b8060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610ea09190612130565b925050819055508173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610eea573d5f5f3e3d5ffd5b508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b639883604051610f489190611673565b60405180910390a35050565b6060610f5e61141b565b6001018054610f6c90611c01565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9890611c01565b8015610fe35780601f10610fba57610100808354040283529160200191610fe3565b820191905f5260205f20905b815481529060010190602001808311610fc657829003601f168201915b5050505050905090565b5f610ff661141b565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6110e761141b565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112ff5782825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f82600101805461119390611c01565b80601f01602080910402602001604051908101604052809291908181526020018280546111bf90611c01565b801561120a5780601f106111e15761010080835404028352916020019161120a565b820191905f5260205f20905b8154815290600101906020018083116111ed57829003601f168201915b505050505090505f815111156112a357825f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f33fd2f826040518263ffffffff1660e01b81526004016112759190611792565b5f604051808303815f87803b15801561128c575f5ffd5b505af115801561129e573d5f5f3e3d5ffd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f5a9113e22196a56f3ce3c77271fa4f29435f72c4cca0128acdc79e45112a1c1060405160405180910390a3505b505050565b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546113509190612130565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546113a39190611b6c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114079190611673565b60405180910390a3505050565b5f33905090565b5f7f804776a84f3d03ad8442127b1451e2fbbb6a715c681d6a83c9e9fca787b99300905090565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114a18261145b565b810181811067ffffffffffffffff821117156114c0576114bf61146b565b5b80604052505050565b5f6114d2611442565b90506114de8282611498565b919050565b5f67ffffffffffffffff8211156114fd576114fc61146b565b5b6115068261145b565b9050602081019050919050565b828183375f83830152505050565b5f61153361152e846114e3565b6114c9565b90508281526020810184848401111561154f5761154e611457565b5b61155a848285611513565b509392505050565b5f82601f83011261157657611575611453565b5b8135611586848260208601611521565b91505092915050565b5f602082840312156115a4576115a361144b565b5b5f82013567ffffffffffffffff8111156115c1576115c061144f565b5b6115cd84828501611562565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6115ff826115d6565b9050919050565b61160f816115f5565b8114611619575f5ffd5b50565b5f8135905061162a81611606565b92915050565b5f602082840312156116455761164461144b565b5b5f6116528482850161161c565b91505092915050565b5f819050919050565b61166d8161165b565b82525050565b5f6020820190506116865f830184611664565b92915050565b6116958161165b565b811461169f575f5ffd5b50565b5f813590506116b08161168c565b92915050565b5f5ffd5b5f608082840312156116cf576116ce6116b6565b5b81905092915050565b5f5f604083850312156116ee576116ed61144b565b5b5f6116fb858286016116a2565b925050602083013567ffffffffffffffff81111561171c5761171b61144f565b5b611728858286016116ba565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61176482611732565b61176e818561173c565b935061177e81856020860161174c565b6117878161145b565b840191505092915050565b5f6020820190508181035f8301526117aa818461175a565b905092915050565b6117bb816115f5565b82525050565b5f6020820190506117d45f8301846117b2565b92915050565b5f5f5f606084860312156117f1576117f061144b565b5b5f6117fe8682870161161c565b935050602061180f868287016116a2565b925050604084013567ffffffffffffffff8111156118305761182f61144f565b5b61183c868287016116ba565b9150509250925092565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61187a60148361173c565b915061188582611846565b602082019050919050565b5f6020820190508181035f8301526118a78161186e565b9050919050565b5f6040820190506118c15f8301856117b2565b6118ce6020830184611664565b9392505050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156118f7576118f661146b565b5b6119008261145b565b9050602081019050919050565b5f61191f61191a846118dd565b6114c9565b90508281526020810184848401111561193b5761193a611457565b5b611946848285611513565b509392505050565b5f82601f83011261196257611961611453565b5b813561197284826020860161190d565b91505092915050565b5f608082840312156119905761198f6118d5565b5b61199a60806114c9565b90505f82013567ffffffffffffffff8111156119b9576119b86118d9565b5b6119c584828501611562565b5f8301525060206119d8848285016116a2565b60208301525060406119ec8482850161161c565b604083015250606082013567ffffffffffffffff811115611a1057611a0f6118d9565b5b611a1c8482850161194e565b60608301525092915050565b5f611a33368361197b565b9050919050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f611a6e600c8361173c565b9150611a7982611a3a565b602082019050919050565b5f6020820190508181035f830152611a9b81611a62565b9050919050565b7f4d7573742073656e6420455448000000000000000000000000000000000000005f82015250565b5f611ad6600d8361173c565b9150611ae182611aa2565b602082019050919050565b5f6020820190508181035f830152611b0381611aca565b9050919050565b5f606082019050611b1d5f8301866117b2565b611b2a6020830185611664565b611b376040830184611664565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611b768261165b565b9150611b818361165b565b9250828201905080821115611b9957611b98611b3f565b5b92915050565b5f606082019050611bb25f8301866117b2565b611bbf60208301856117b2565b611bcc6040830184611664565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611c1857607f821691505b602082108103611c2b57611c2a611bd4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611c8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c52565b611c978683611c52565b95508019841693508086168417925050509392505050565b5f819050919050565b5f611cd2611ccd611cc88461165b565b611caf565b61165b565b9050919050565b5f819050919050565b611ceb83611cb8565b611cff611cf782611cd9565b848454611c5e565b825550505050565b5f5f905090565b611d16611d07565b611d21818484611ce2565b505050565b5b81811015611d4457611d395f82611d0e565b600181019050611d27565b5050565b601f821115611d8957611d5a81611c31565b611d6384611c43565b81016020851015611d72578190505b611d86611d7e85611c43565b830182611d26565b50505b505050565b5f82821c905092915050565b5f611da95f1984600802611d8e565b1980831691505092915050565b5f611dc18383611d9a565b9150826002028217905092915050565b611dda82611732565b67ffffffffffffffff811115611df357611df261146b565b5b611dfd8254611c01565b611e08828285611d48565b5f60209050601f831160018114611e39575f8415611e27578287015190505b611e318582611db6565b865550611e98565b601f198416611e4786611c31565b5f5b82811015611e6e57848901518255600182019150602085019450602081019050611e49565b86831015611e8b5784890151611e87601f891682611d9a565b8355505b6001600288020188555050505b505050505050565b5f6040820190508181035f830152611eb8818561175a565b90508181036020830152611ecc818461175a565b90509392505050565b5f82825260208201905092915050565b5f611eef82611732565b611ef98185611ed5565b9350611f0981856020860161174c565b611f128161145b565b840191505092915050565b611f26816115f5565b82525050565b611f358161165b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f611f5f82611f3b565b611f698185611f45565b9350611f7981856020860161174c565b611f828161145b565b840191505092915050565b5f60e083015f8301518482035f860152611fa78282611ee5565b9150506020830151611fbc6020860182611f1d565b506040830151611fcf6040860182611f1d565b506060830151611fe26060860182611f2c565b5060808301518482036080860152611ffa8282611f55565b91505060a083015184820360a08601526120148282611ee5565b91505060c083015161202960c0860182611f2c565b508091505092915050565b5f608083015f8301518482035f86015261204e8282611ee5565b91505060208301516120636020860182611f2c565b5060408301516120766040860182611f1d565b506060830151848203606086015261208e8282611f55565b9150508091505092915050565b5f6040820190508181035f8301526120b38185611f8d565b905081810360208301526120c78184612034565b90509392505050565b5f8115159050919050565b6120e4816120d0565b81146120ee575f5ffd5b50565b5f815190506120ff816120db565b92915050565b5f6020828403121561211a5761211961144b565b5b5f612127848285016120f1565b91505092915050565b5f61213a8261165b565b91506121458361165b565b925082820390508181111561215d5761215c611b3f565b5b9291505056fea26469706673582212202828376ce665abbd6924bd5a714828ad89d6b8fb810a2a217dd9ac7b51fd738c64736f6c634300081c0033000000000000000000000000380ad2e410688e0153125d01a6af9c4c27f7f0ec000000000000000000000000e15a8ca5bd8464283818088c1760d8f23b6a216e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000031782d6d616e616765642d706f6c6963792d3531643435303239653862646531616262666431343063303331643434336336000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106100c1575f3560e01c8063715018a61161007e578063a91ee0dc11610058578063a91ee0dc14610229578063d0e30db014610251578063ed83c89d1461025b578063f2fde38b14610283576100c1565b8063715018a6146101cd5780638da5cb5b146101e3578063a7123a0d1461020d576100c1565b80630f33fd2f146100c557806327e235e3146100ed5780632c8116ed1461012957806349e22757146101515780635ab1bd531461017b5780636392e027146101a5575b5f5ffd5b3480156100d0575f5ffd5b506100eb60048036038101906100e6919061158f565b6102ab565b005b3480156100f8575f5ffd5b50610113600480360381019061010e9190611630565b6102bf565b6040516101209190611673565b60405180910390f35b348015610134575f5ffd5b5061014f600480360381019061014a91906116d8565b6102d4565b005b34801561015c575f5ffd5b5061016561044a565b6040516101729190611792565b60405180910390f35b348015610186575f5ffd5b5061018f610459565b60405161019c91906117c1565b60405180910390f35b3480156101b0575f5ffd5b506101cb60048036038101906101c691906117da565b610467565b005b3480156101d8575f5ffd5b506101e16105de565b005b3480156101ee575f5ffd5b506101f76105f1565b60405161020491906117c1565b60405180910390f35b610227600480360381019061022291906116d8565b610618565b005b348015610234575f5ffd5b5061024f600480360381019061024a9190611630565b6107e9565b005b6102596107fd565b005b348015610266575f5ffd5b50610281600480360381019061027c91906117da565b6108a0565b005b34801561028e575f5ffd5b506102a960048036038101906102a49190611630565b610a1a565b005b6102b3610a9e565b6102bc81610b25565b50565b6001602052805f5260405f205f915090505481565b8160015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161034b90611890565b60405180910390fd5b5f33836040516024016103689291906118ae565b6040516020818303038152906040527fc04b310b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506103fc826103f490611a28565b82335f610cac565b61043b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043290611a84565b60405180910390fd5b6104453384610e54565b505050565b6060610454610f54565b905090565b5f610462610fed565b905090565b8160015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156104e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104de90611890565b60405180910390fd5b5f83836040516024016104fb9291906118ae565b6040516020818303038152906040527fc04b310b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905061058f8261058790611a28565b82335f610cac565b6105ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c590611a84565b60405180910390fd5b6105d88484610e54565b50505050565b6105e6610a9e565b6105ef5f61101d565b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f341161065a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065190611aec565b60405180910390fd5b5f33348460405160240161067093929190611b0a565b6040516020818303038152906040527f3aa279b8000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050610704826106fc90611a28565b823334610cac565b610743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073a90611a84565b60405180910390fd5b3460015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461078f9190611b6c565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040516107dc9190611673565b60405180910390a2505050565b6107f1610a9e565b6107fa816110de565b50565b3460015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108499190611b6c565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040516108969190611673565b60405180910390a2565b8160015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091790611890565b60405180910390fd5b5f33848460405160240161093693929190611b9f565b6040516020818303038152906040527f33a738c9000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506109ca826109c290611a28565b82335f610cac565b610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0090611a84565b60405180910390fd5b610a14338585611304565b50505050565b610a22610a9e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a92575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610a8991906117c1565b60405180910390fd5b610a9b8161101d565b50565b610aa6611414565b73ffffffffffffffffffffffffffffffffffffffff16610ac46105f1565b73ffffffffffffffffffffffffffffffffffffffff1614610b2357610ae7611414565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b1a91906117c1565b60405180910390fd5b565b5f610b2e61141b565b90505f816001018054610b4090611c01565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6c90611c01565b8015610bb75780601f10610b8e57610100808354040283529160200191610bb7565b820191905f5260205f20905b815481529060010190602001808311610b9a57829003601f168201915b505050505090508280519060200120818051906020012014610ca75782826001019081610be49190611dd1565b50815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f33fd2f846040518263ffffffff1660e01b8152600401610c409190611792565b5f604051808303815f87803b158015610c57575f5ffd5b505af1158015610c69573d5f5f3e3d5ffd5b505050507f22c658286008a7684f36a2ca38b26e9292d39f14d062e215667f5f92552c69a98184604051610c9e929190611ea0565b60405180910390a15b505050565b5f5f610cb661141b565b90505f6040518060e00160405280885f015181526020018673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff168152602001858152602001878152602001836001018054610d2090611c01565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4c90611c01565b8015610d975780601f10610d6e57610100808354040283529160200191610d97565b820191905f5260205f20905b815481529060010190602001808311610d7a57829003601f168201915b5050505050815260200188602001518152509050815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663244ddbb382896040518363ffffffff1660e01b8152600401610e0892919061209b565b6020604051808303815f875af1158015610e24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e489190612105565b92505050949350505050565b8060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610ea09190612130565b925050819055508173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610eea573d5f5f3e3d5ffd5b508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b639883604051610f489190611673565b60405180910390a35050565b6060610f5e61141b565b6001018054610f6c90611c01565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9890611c01565b8015610fe35780601f10610fba57610100808354040283529160200191610fe3565b820191905f5260205f20905b815481529060010190602001808311610fc657829003601f168201915b5050505050905090565b5f610ff661141b565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6110e761141b565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112ff5782825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f82600101805461119390611c01565b80601f01602080910402602001604051908101604052809291908181526020018280546111bf90611c01565b801561120a5780601f106111e15761010080835404028352916020019161120a565b820191905f5260205f20905b8154815290600101906020018083116111ed57829003601f168201915b505050505090505f815111156112a357825f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f33fd2f826040518263ffffffff1660e01b81526004016112759190611792565b5f604051808303815f87803b15801561128c575f5ffd5b505af115801561129e573d5f5f3e3d5ffd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f5a9113e22196a56f3ce3c77271fa4f29435f72c4cca0128acdc79e45112a1c1060405160405180910390a3505b505050565b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546113509190612130565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546113a39190611b6c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114079190611673565b60405180910390a3505050565b5f33905090565b5f7f804776a84f3d03ad8442127b1451e2fbbb6a715c681d6a83c9e9fca787b99300905090565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114a18261145b565b810181811067ffffffffffffffff821117156114c0576114bf61146b565b5b80604052505050565b5f6114d2611442565b90506114de8282611498565b919050565b5f67ffffffffffffffff8211156114fd576114fc61146b565b5b6115068261145b565b9050602081019050919050565b828183375f83830152505050565b5f61153361152e846114e3565b6114c9565b90508281526020810184848401111561154f5761154e611457565b5b61155a848285611513565b509392505050565b5f82601f83011261157657611575611453565b5b8135611586848260208601611521565b91505092915050565b5f602082840312156115a4576115a361144b565b5b5f82013567ffffffffffffffff8111156115c1576115c061144f565b5b6115cd84828501611562565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6115ff826115d6565b9050919050565b61160f816115f5565b8114611619575f5ffd5b50565b5f8135905061162a81611606565b92915050565b5f602082840312156116455761164461144b565b5b5f6116528482850161161c565b91505092915050565b5f819050919050565b61166d8161165b565b82525050565b5f6020820190506116865f830184611664565b92915050565b6116958161165b565b811461169f575f5ffd5b50565b5f813590506116b08161168c565b92915050565b5f5ffd5b5f608082840312156116cf576116ce6116b6565b5b81905092915050565b5f5f604083850312156116ee576116ed61144b565b5b5f6116fb858286016116a2565b925050602083013567ffffffffffffffff81111561171c5761171b61144f565b5b611728858286016116ba565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61176482611732565b61176e818561173c565b935061177e81856020860161174c565b6117878161145b565b840191505092915050565b5f6020820190508181035f8301526117aa818461175a565b905092915050565b6117bb816115f5565b82525050565b5f6020820190506117d45f8301846117b2565b92915050565b5f5f5f606084860312156117f1576117f061144b565b5b5f6117fe8682870161161c565b935050602061180f868287016116a2565b925050604084013567ffffffffffffffff8111156118305761182f61144f565b5b61183c868287016116ba565b9150509250925092565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61187a60148361173c565b915061188582611846565b602082019050919050565b5f6020820190508181035f8301526118a78161186e565b9050919050565b5f6040820190506118c15f8301856117b2565b6118ce6020830184611664565b9392505050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156118f7576118f661146b565b5b6119008261145b565b9050602081019050919050565b5f61191f61191a846118dd565b6114c9565b90508281526020810184848401111561193b5761193a611457565b5b611946848285611513565b509392505050565b5f82601f83011261196257611961611453565b5b813561197284826020860161190d565b91505092915050565b5f608082840312156119905761198f6118d5565b5b61199a60806114c9565b90505f82013567ffffffffffffffff8111156119b9576119b86118d9565b5b6119c584828501611562565b5f8301525060206119d8848285016116a2565b60208301525060406119ec8482850161161c565b604083015250606082013567ffffffffffffffff811115611a1057611a0f6118d9565b5b611a1c8482850161194e565b60608301525092915050565b5f611a33368361197b565b9050919050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f611a6e600c8361173c565b9150611a7982611a3a565b602082019050919050565b5f6020820190508181035f830152611a9b81611a62565b9050919050565b7f4d7573742073656e6420455448000000000000000000000000000000000000005f82015250565b5f611ad6600d8361173c565b9150611ae182611aa2565b602082019050919050565b5f6020820190508181035f830152611b0381611aca565b9050919050565b5f606082019050611b1d5f8301866117b2565b611b2a6020830185611664565b611b376040830184611664565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611b768261165b565b9150611b818361165b565b9250828201905080821115611b9957611b98611b3f565b5b92915050565b5f606082019050611bb25f8301866117b2565b611bbf60208301856117b2565b611bcc6040830184611664565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611c1857607f821691505b602082108103611c2b57611c2a611bd4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611c8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c52565b611c978683611c52565b95508019841693508086168417925050509392505050565b5f819050919050565b5f611cd2611ccd611cc88461165b565b611caf565b61165b565b9050919050565b5f819050919050565b611ceb83611cb8565b611cff611cf782611cd9565b848454611c5e565b825550505050565b5f5f905090565b611d16611d07565b611d21818484611ce2565b505050565b5b81811015611d4457611d395f82611d0e565b600181019050611d27565b5050565b601f821115611d8957611d5a81611c31565b611d6384611c43565b81016020851015611d72578190505b611d86611d7e85611c43565b830182611d26565b50505b505050565b5f82821c905092915050565b5f611da95f1984600802611d8e565b1980831691505092915050565b5f611dc18383611d9a565b9150826002028217905092915050565b611dda82611732565b67ffffffffffffffff811115611df357611df261146b565b5b611dfd8254611c01565b611e08828285611d48565b5f60209050601f831160018114611e39575f8415611e27578287015190505b611e318582611db6565b865550611e98565b601f198416611e4786611c31565b5f5b82811015611e6e57848901518255600182019150602085019450602081019050611e49565b86831015611e8b5784890151611e87601f891682611d9a565b8355505b6001600288020188555050505b505050505050565b5f6040820190508181035f830152611eb8818561175a565b90508181036020830152611ecc818461175a565b90509392505050565b5f82825260208201905092915050565b5f611eef82611732565b611ef98185611ed5565b9350611f0981856020860161174c565b611f128161145b565b840191505092915050565b611f26816115f5565b82525050565b611f358161165b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f611f5f82611f3b565b611f698185611f45565b9350611f7981856020860161174c565b611f828161145b565b840191505092915050565b5f60e083015f8301518482035f860152611fa78282611ee5565b9150506020830151611fbc6020860182611f1d565b506040830151611fcf6040860182611f1d565b506060830151611fe26060860182611f2c565b5060808301518482036080860152611ffa8282611f55565b91505060a083015184820360a08601526120148282611ee5565b91505060c083015161202960c0860182611f2c565b508091505092915050565b5f608083015f8301518482035f86015261204e8282611ee5565b91505060208301516120636020860182611f2c565b5060408301516120766040860182611f1d565b506060830151848203606086015261208e8282611f55565b9150508091505092915050565b5f6040820190508181035f8301526120b38185611f8d565b905081810360208301526120c78184612034565b90509392505050565b5f8115159050919050565b6120e4816120d0565b81146120ee575f5ffd5b50565b5f815190506120ff816120db565b92915050565b5f6020828403121561211a5761211961144b565b5b5f612127848285016120f1565b91505092915050565b5f61213a8261165b565b91506121458361165b565b925082820390508181111561215d5761215c611b3f565b5b9291505056fea26469706673582212202828376ce665abbd6924bd5a714828ad89d6b8fb810a2a217dd9ac7b51fd738c64736f6c634300081c0033

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

000000000000000000000000380ad2e410688e0153125d01a6af9c4c27f7f0ec000000000000000000000000e15a8ca5bd8464283818088c1760d8f23b6a216e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000031782d6d616e616765642d706f6c6963792d3531643435303239653862646531616262666431343063303331643434336336000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _owner (address): 0x380ad2e410688e0153125d01a6af9c4C27F7F0eC
Arg [1] : _registry (address): 0xe15a8Ca5BD8464283818088c1760d8f23B6a216E
Arg [2] : _policyID (string): x-managed-policy-51d45029e8bde1abbfd140c031d443c6

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000380ad2e410688e0153125d01a6af9c4c27f7f0ec
Arg [1] : 000000000000000000000000e15a8ca5bd8464283818088c1760d8f23b6a216e
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000031
Arg [4] : 782d6d616e616765642d706f6c6963792d353164343530323965386264653161
Arg [5] : 6262666431343063303331643434336336000000000000000000000000000000


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.