ETH Price: $2,053.05 (-3.11%)

Contract

0xD91c7C682870268F52aE2c64b3F772fea2Dfd796
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set User Role223787402025-04-30 1:58:47327 days ago1745978327IN
0xD91c7C68...ea2Dfd796
0 ETH0.000018630.39447809
Set User Role223787232025-04-30 1:55:23327 days ago1745978123IN
0xD91c7C68...ea2Dfd796
0 ETH0.000018550.39285621
Set User Role223786202025-04-30 1:34:35327 days ago1745976875IN
0xD91c7C68...ea2Dfd796
0 ETH0.000025440.39544574
Set User Role223771102025-04-29 20:30:47327 days ago1745958647IN
0xD91c7C68...ea2Dfd796
0 ETH0.000028450.44228178
Set User Role223771092025-04-29 20:30:35327 days ago1745958635IN
0xD91c7C68...ea2Dfd796
0 ETH0.000029560.45957569
Set User Role223771082025-04-29 20:30:23327 days ago1745958623IN
0xD91c7C68...ea2Dfd796
0 ETH0.000028690.44595841
Set User Role223771062025-04-29 20:29:59327 days ago1745958599IN
0xD91c7C68...ea2Dfd796
0 ETH0.000029130.45290521
Set User Role223771042025-04-29 20:29:35327 days ago1745958575IN
0xD91c7C68...ea2Dfd796
0 ETH0.000026650.41444003
Set User Role223771032025-04-29 20:29:23327 days ago1745958563IN
0xD91c7C68...ea2Dfd796
0 ETH0.00002550.39647041
Set User Role223771022025-04-29 20:29:11327 days ago1745958551IN
0xD91c7C68...ea2Dfd796
0 ETH0.000026690.41495242
Set User Role223771012025-04-29 20:28:59327 days ago1745958539IN
0xD91c7C68...ea2Dfd796
0 ETH0.000027960.43472722
Set User Role223771002025-04-29 20:28:47327 days ago1745958527IN
0xD91c7C68...ea2Dfd796
0 ETH0.000028240.43903479
Set User Role223770992025-04-29 20:28:35327 days ago1745958515IN
0xD91c7C68...ea2Dfd796
0 ETH0.000028860.4486415
Set User Role223770982025-04-29 20:28:23327 days ago1745958503IN
0xD91c7C68...ea2Dfd796
0 ETH0.000029660.46110282
Set User Role223770972025-04-29 20:28:11327 days ago1745958491IN
0xD91c7C68...ea2Dfd796
0 ETH0.000030330.47152656
Set User Role223770962025-04-29 20:27:59327 days ago1745958479IN
0xD91c7C68...ea2Dfd796
0 ETH0.000028920.44951706
Set User Role223770952025-04-29 20:27:47327 days ago1745958467IN
0xD91c7C68...ea2Dfd796
0 ETH0.000030340.47164132
Set User Role223770942025-04-29 20:27:35327 days ago1745958455IN
0xD91c7C68...ea2Dfd796
0 ETH0.000029950.46556029
Set User Role223770932025-04-29 20:27:23327 days ago1745958443IN
0xD91c7C68...ea2Dfd796
0 ETH0.000029120.45274115
Set User Role223770922025-04-29 20:27:11327 days ago1745958431IN
0xD91c7C68...ea2Dfd796
0 ETH0.000028470.44260175
Set User Role223770912025-04-29 20:26:59327 days ago1745958419IN
0xD91c7C68...ea2Dfd796
0 ETH0.000026020.40443013
Set User Role223770902025-04-29 20:26:47327 days ago1745958407IN
0xD91c7C68...ea2Dfd796
0 ETH0.000023330.36283318
Set User Role223770892025-04-29 20:26:35327 days ago1745958395IN
0xD91c7C68...ea2Dfd796
0 ETH0.000025020.38900794
Set User Role223770882025-04-29 20:26:23327 days ago1745958383IN
0xD91c7C68...ea2Dfd796
0 ETH0.000026460.41138153
Set User Role223770872025-04-29 20:26:11327 days ago1745958371IN
0xD91c7C68...ea2Dfd796
0 ETH0.000025490.39626249
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x60806040223769602025-04-29 20:00:35327 days ago1745956835  Contract Creation0 ETH
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:
StrictRolesAuthority

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
No with 200 runs

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

import {RolesAuthority} from "@solmate/src/auth/authorities/RolesAuthority.sol";
import {Authority} from "@solmate/src/auth/Auth.sol";

/**
 *                                     .-==+=======+:
 *                                      :---=-::-==:
 *                                      .-:-==-:-==:
 *                    .:::--::::::.     .--:-=--:--.       .:--:::--..
 *                   .=++=++:::::..     .:::---::--.    ....::...:::.
 *                    :::-::..::..      .::::-:::::.     ...::...:::.
 *                    ...::..::::..     .::::--::-:.    ....::...:::..
 *                    ............      ....:::..::.    ------:......
 *    ...........     ........:....     .....::..:..    ======-......      ...........
 *    :------:.:...   ...:+***++*#+     .------:---.    ...::::.:::...   .....:-----::.
 *    .::::::::-:..   .::--..:-::..    .-=+===++=-==:   ...:::..:--:..   .:==+=++++++*:
 *
 * @title StrictRolesAuthority
 * @notice An extension of RolesAuthority that enforces stricter role management rules
 * @dev This contract only allows adding roles through setUserRole() and requires admin multisig
 *      approval for role removal through removeUserRole()
 */
contract StrictRolesAuthority is RolesAuthority {
    /// @notice The error emitted when a user attempts to remove a role
    error RoleRemovalNotAllowed();

    /// @notice Emitted when a role is configured as removable
    event RemovableRoleConfigured(uint8 indexed role, bool allowed);

    /// @notice Which roles are allowed to be removed
    mapping(uint8 => bool) public isRoleRemovable;

    /**
     * @notice Creates a new StrictRolesAuthority instance
     * @param _owner The address that will be the owner of this authority
     * @param _authority The authority contract to use for authentication
     */
    constructor(address _owner, Authority _authority) RolesAuthority(_owner, _authority) {}

    /**
     * @notice Sets a role for a user, but only allows adding roles
     * @dev This function can only be called by authorized addresses
     * @param user The address of the user to set the role for
     * @param role The role to set
     * @param enabled Must be true, as this function only allows adding roles
     * @custom:reverts If enabled is false or caller is not authorized
     */
    function setUserRole(address user, uint8 role, bool enabled) public virtual override requiresAuth {
        if (!enabled) {
            revert RoleRemovalNotAllowed();
        }

        getUserRoles[user] |= bytes32(1 << role);

        emit UserRoleUpdated(user, role, true);
    }

    /**
     * @notice Removes a role from a user
     * @dev This function can only be called by called by the ADMIN_MULTISIG_ROLE
     * @param user The address of the user to remove the role from
     * @param role The role to remove
     * @custom:reverts If caller is not the admin multisig
     */
    function removeUserRole(address user, uint8 role) external virtual requiresAuth {
        if (!isRoleRemovable[role]) {
            revert RoleRemovalNotAllowed();
        }

        getUserRoles[user] &= ~bytes32(1 << role);

        emit UserRoleUpdated(user, role, false);
    }

    /**
     * @notice Returns all roles for a user
     * @param user The address of the user to get the roles for
     * @return A bitmask of all roles for the user
     */
    function getAllRoles(address user) public view returns (uint256) {
        return uint256(getUserRoles[user]);
    }

    /**
     * @notice Sets a role as removable or not
     * @dev This function can only be called by the owner (timelock)
     * @param role The role to set as removable
     * @param allowed Whether the role should be removable
     * @custom:reverts If caller is not the owner
     */
    function setRoleRemovable(uint8 role, bool allowed) external requiresAuth {
        isRoleRemovable[role] = allowed;
        emit RemovableRoleConfigured(role, allowed);
    }
}

// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

import {Auth, Authority} from "../Auth.sol";

/// @notice Role based Authority that supports up to 256 roles.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/authorities/RolesAuthority.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-roles/blob/master/src/roles.sol)
contract RolesAuthority is Auth, Authority {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event UserRoleUpdated(address indexed user, uint8 indexed role, bool enabled);

    event PublicCapabilityUpdated(address indexed target, bytes4 indexed functionSig, bool enabled);

    event RoleCapabilityUpdated(uint8 indexed role, address indexed target, bytes4 indexed functionSig, bool enabled);

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(address _owner, Authority _authority) Auth(_owner, _authority) {}

    /*//////////////////////////////////////////////////////////////
                            ROLE/USER STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(address => bytes32) public getUserRoles;

    mapping(address => mapping(bytes4 => bool)) public isCapabilityPublic;

    mapping(address => mapping(bytes4 => bytes32)) public getRolesWithCapability;

    function doesUserHaveRole(address user, uint8 role) public view virtual returns (bool) {
        return (uint256(getUserRoles[user]) >> role) & 1 != 0;
    }

    function doesRoleHaveCapability(
        uint8 role,
        address target,
        bytes4 functionSig
    ) public view virtual returns (bool) {
        return (uint256(getRolesWithCapability[target][functionSig]) >> role) & 1 != 0;
    }

    /*//////////////////////////////////////////////////////////////
                           AUTHORIZATION LOGIC
    //////////////////////////////////////////////////////////////*/

    function canCall(
        address user,
        address target,
        bytes4 functionSig
    ) public view virtual override returns (bool) {
        return
            isCapabilityPublic[target][functionSig] ||
            bytes32(0) != getUserRoles[user] & getRolesWithCapability[target][functionSig];
    }

    /*//////////////////////////////////////////////////////////////
                   ROLE CAPABILITY CONFIGURATION LOGIC
    //////////////////////////////////////////////////////////////*/

    function setPublicCapability(
        address target,
        bytes4 functionSig,
        bool enabled
    ) public virtual requiresAuth {
        isCapabilityPublic[target][functionSig] = enabled;

        emit PublicCapabilityUpdated(target, functionSig, enabled);
    }

    function setRoleCapability(
        uint8 role,
        address target,
        bytes4 functionSig,
        bool enabled
    ) public virtual requiresAuth {
        if (enabled) {
            getRolesWithCapability[target][functionSig] |= bytes32(1 << role);
        } else {
            getRolesWithCapability[target][functionSig] &= ~bytes32(1 << role);
        }

        emit RoleCapabilityUpdated(role, target, functionSig, enabled);
    }

    /*//////////////////////////////////////////////////////////////
                       USER ROLE ASSIGNMENT LOGIC
    //////////////////////////////////////////////////////////////*/

    function setUserRole(
        address user,
        uint8 role,
        bool enabled
    ) public virtual requiresAuth {
        if (enabled) {
            getUserRoles[user] |= bytes32(1 << role);
        } else {
            getUserRoles[user] &= ~bytes32(1 << role);
        }

        emit UserRoleUpdated(user, role, enabled);
    }
}

// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Provides a flexible and updatable auth pattern which is completely separate from application logic.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Auth.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
abstract contract Auth {
    event OwnershipTransferred(address indexed user, address indexed newOwner);

    event AuthorityUpdated(address indexed user, Authority indexed newAuthority);

    address public owner;

    Authority public authority;

    constructor(address _owner, Authority _authority) {
        owner = _owner;
        authority = _authority;

        emit OwnershipTransferred(msg.sender, _owner);
        emit AuthorityUpdated(msg.sender, _authority);
    }

    modifier requiresAuth() virtual {
        require(isAuthorized(msg.sender, msg.sig), "UNAUTHORIZED");

        _;
    }

    function isAuthorized(address user, bytes4 functionSig) internal view virtual returns (bool) {
        Authority auth = authority; // Memoizing authority saves us a warm SLOAD, around 100 gas.

        // Checking if the caller is the owner only after calling the authority saves gas in most cases, but be
        // aware that this makes protected functions uncallable even to the owner if the authority is out of order.
        return (address(auth) != address(0) && auth.canCall(user, address(this), functionSig)) || user == owner;
    }

    function setAuthority(Authority newAuthority) public virtual {
        // We check if the caller is the owner first because we want to ensure they can
        // always swap out the authority even if it's reverting or using up a lot of gas.
        require(msg.sender == owner || authority.canCall(msg.sender, address(this), msg.sig));

        authority = newAuthority;

        emit AuthorityUpdated(msg.sender, newAuthority);
    }

    function transferOwnership(address newOwner) public virtual requiresAuth {
        owner = newOwner;

        emit OwnershipTransferred(msg.sender, newOwner);
    }
}

/// @notice A generic interface for a contract which provides authorization data to an Auth instance.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Auth.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
interface Authority {
    function canCall(
        address user,
        address target,
        bytes4 functionSig
    ) external view returns (bool);
}

Settings
{
  "remappings": [
    "@level/src/=src/",
    "@level/config/=config/",
    "@level/script/=script/",
    "@level/test/=test/",
    "ds-test/=lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "@openzeppelin-4.9.0/contracts/=lib/openzeppelin-contracts-4.9.0/contracts/",
    "@openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "@solmate/=lib/solmate/",
    "@openzeppelin-upgrades/=lib/openzeppelin-foundry-upgrades/"
  ],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "none",
    "appendCBOR": false
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": true,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"contract Authority","name":"_authority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"RoleRemovalNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"AuthorityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"bytes4","name":"functionSig","type":"bytes4"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"PublicCapabilityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"role","type":"uint8"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"RemovableRoleConfigured","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"role","type":"uint8"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"bytes4","name":"functionSig","type":"bytes4"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"RoleCapabilityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint8","name":"role","type":"uint8"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"UserRoleUpdated","type":"event"},{"inputs":[],"name":"authority","outputs":[{"internalType":"contract Authority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"functionSig","type":"bytes4"}],"name":"canCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"role","type":"uint8"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"functionSig","type":"bytes4"}],"name":"doesRoleHaveCapability","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint8","name":"role","type":"uint8"}],"name":"doesUserHaveRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAllRoles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"getRolesWithCapability","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"getUserRoles","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"isCapabilityPublic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"isRoleRemovable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint8","name":"role","type":"uint8"}],"name":"removeUserRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"functionSig","type":"bytes4"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPublicCapability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"role","type":"uint8"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"functionSig","type":"bytes4"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setRoleCapability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"role","type":"uint8"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setRoleRemovable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint8","name":"role","type":"uint8"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setUserRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052346100305761001a610014610133565b90610155565b610022610035565b6117686102e1823961176890f35b61003b565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906100679061003f565b810190811060018060401b0382111761007f57604052565b610049565b90610097610090610035565b928361005d565b565b5f80fd5b60018060a01b031690565b6100b19061009d565b90565b6100bd816100a8565b036100c457565b5f80fd5b905051906100d5826100b4565b565b6100e0906100a8565b90565b6100ec816100d7565b036100f357565b5f80fd5b90505190610104826100e3565b565b919060408382031261012e578061012261012b925f86016100c8565b936020016100f7565b90565b610099565b610151611a498038038061014681610084565b928339810190610106565b9091565b9061015f91610161565b565b9061016b9161016d565b565b9061017791610233565b565b5f1b90565b9061018f60018060a01b0391610179565b9181191691161790565b90565b6101b06101ab6101b59261009d565b610199565b61009d565b90565b6101c19061019c565b90565b6101cd906101b8565b90565b90565b906101e86101e36101ef926101c4565b6101d0565b825461017e565b9055565b6101fc9061019c565b90565b610208906101f3565b90565b90565b9061022361021e61022a926101ff565b61020b565b825461017e565b9055565b5f0190565b61023d815f6101d3565b61024882600161020e565b339061027d6102777f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101c4565b916101c4565b91610286610035565b806102908161022e565b0390a333906102c86102c27fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198936101c4565b916101ff565b916102d1610035565b806102db8161022e565b0390a356fe60806040526004361015610013575b610abb565b61001d5f3561012c565b806301d7b0221461012757806306a36aee146101225780632f47571f1461011d5780633e762e001461011857806367aff484146101135780637917b7941461010e5780637a9e5e4b146101095780637d40583d146101045780638da5cb5b146100ff578063b27fb668146100fa578063b44f794f146100f5578063b4bad06a146100f0578063b7009613146100eb578063bf7e214f146100e6578063c6b0263e146100e1578063ea7ca276146100dc5763f2fde38b0361000e57610a88565b610a52565b610a1e565b6109af565b61090b565b61089b565b61082d565b6107cb565b610771565b6106ca565b610651565b6105ce565b61054d565b6104de565b61043f565b610307565b6101c3565b60e01c90565b60405190565b5f80fd5b5f80fd5b60ff1690565b61014f81610140565b0361015657565b5f80fd5b9050359061016782610146565b565b151590565b61017781610169565b0361017e57565b5f80fd5b9050359061018f8261016e565b565b91906040838203126101b957806101ad6101b6925f860161015a565b93602001610182565b90565b61013c565b5f0190565b346101f2576101dc6101d6366004610191565b90610c16565b6101e4610132565b806101ee816101be565b0390f35b610138565b60018060a01b031690565b61020b906101f7565b90565b61021781610202565b0361021e57565b5f80fd5b9050359061022f8261020e565b565b9060208282031261024a57610247915f01610222565b90565b61013c565b90565b61026661026161026b926101f7565b61024f565b6101f7565b90565b61027790610252565b90565b6102839061026e565b90565b906102909061027a565b5f5260205260405f2090565b1c90565b90565b6102b39060086102b8930261029c565b6102a0565b90565b906102c691546102a3565b90565b6102df906102da6002915f92610286565b6102bb565b90565b90565b6102ee906102e2565b9052565b9190610305905f602085019401906102e5565b565b346103375761033361032261031d366004610231565b6102c9565b61032a610132565b918291826102f2565b0390f35b610138565b63ffffffff60e01b1690565b6103518161033c565b0361035857565b5f80fd5b9050359061036982610348565b565b91906040838203126103935780610387610390925f8601610222565b9360200161035c565b90565b61013c565b906103a29061027a565b5f5260205260405f2090565b6103b79061033c565b90565b906103c4906103ae565b5f5260205260405f2090565b60ff1690565b6103e69060086103eb930261029c565b6103d0565b90565b906103f991546103d6565b90565b61041561041a926104106003935f94610398565b6103ba565b6103ee565b90565b61042690610169565b9052565b919061043d905f6020850194019061041d565b565b346104705761046c61045b61045536600461036b565b906103fc565b610463610132565b9182918261042a565b0390f35b610138565b9060208282031261048e5761048b915f0161015a565b90565b61013c565b6104a76104a26104ac92610140565b61024f565b610140565b90565b906104b990610493565b5f5260205260405f2090565b6104db906104d66005915f926104af565b6103ee565b90565b3461050e5761050a6104f96104f4366004610475565b6104c5565b610501610132565b9182918261042a565b0390f35b610138565b90916060828403126105485761054561052e845f8501610222565b9361053c816020860161015a565b93604001610182565b90565b61013c565b3461057c57610566610560366004610513565b91610ddf565b61056e610132565b80610578816101be565b0390f35b610138565b9061058b9061027a565b5f5260205260405f2090565b906105a1906103ae565b5f5260205260405f2090565b6105c66105cb926105c16004935f94610581565b610597565b6102bb565b90565b346105ff576105fb6105ea6105e436600461036b565b906105ad565b6105f2610132565b918291826102f2565b0390f35b610138565b61060d90610202565b90565b61061981610604565b0361062057565b5f80fd5b9050359061063182610610565b565b9060208282031261064c57610649915f01610624565b90565b61013c565b3461067f57610669610664366004610633565b610f64565b610671610132565b8061067b816101be565b0390f35b610138565b6080818303126106c55761069a825f830161015a565b926106c26106ab8460208501610222565b936106b9816040860161035c565b93606001610182565b90565b61013c565b346106fc576106e66106dd366004610684565b929190916111ba565b6106ee610132565b806106f8816101be565b0390f35b610138565b5f91031261070b57565b61013c565b60018060a01b031690565b61072b906008610730930261029c565b610710565b90565b9061073e915461071b565b90565b61074c5f5f90610733565b90565b61075890610202565b9052565b919061076f905f6020850194019061074f565b565b346107a157610781366004610701565b61079d61078c610741565b610794610132565b9182918261075c565b0390f35b610138565b90565b6107b2906107a6565b9052565b91906107c9905f602085019401906107a9565b565b346107fb576107f76107e66107e1366004610231565b6111fc565b6107ee610132565b918291826107b6565b0390f35b610138565b9190604083820312610828578061081c610825925f8601610222565b9360200161015a565b90565b61013c565b3461085c57610846610840366004610800565b9061133f565b61084e610132565b80610858816101be565b0390f35b610138565b90916060828403126108965761089361087c845f850161015a565b9361088a8160208601610222565b9360400161035c565b90565b61013c565b346108cc576108c86108b76108b1366004610861565b91611395565b6108bf610132565b9182918261042a565b0390f35b610138565b9091606082840312610906576109036108ec845f8501610222565b936108fa8160208601610222565b9360400161035c565b90565b61013c565b3461093c576109386109276109213660046108d1565b91611409565b61092f610132565b9182918261042a565b0390f35b610138565b60018060a01b031690565b61095c906008610961930261029c565b610941565b90565b9061096f915461094c565b90565b61097e60015f90610964565b90565b61098a9061026e565b90565b61099690610981565b9052565b91906109ad905f6020850194019061098d565b565b346109df576109bf366004610701565b6109db6109ca610972565b6109d2610132565b9182918261099a565b0390f35b610138565b9091606082840312610a1957610a166109ff845f8501610222565b93610a0d816020860161035c565b93604001610182565b90565b61013c565b34610a4d57610a37610a313660046109e4565b91611533565b610a3f610132565b80610a49816101be565b0390f35b610138565b34610a8357610a7f610a6e610a68366004610800565b90611540565b610a76610132565b9182918261042a565b0390f35b610138565b34610ab657610aa0610a9b366004610231565b611631565b610aa8610132565b80610ab2816101be565b0390f35b610138565b5f80fd5b60209181520190565b5f7f554e415554484f52495a45440000000000000000000000000000000000000000910152565b610afc600c602092610abf565b610b0581610ac8565b0190565b610b1e9060208101905f818303910152610aef565b90565b15610b2857565b610b30610132565b62461bcd60e51b815280610b4660048201610b09565b0390fd5b90610b7191610b6c610b673363ffffffff60e01b5f351690611664565b610b21565b610bbd565b565b5f1b90565b90610b8460ff91610b73565b9181191691161790565b610b9790610169565b90565b90565b90610bb2610bad610bb992610b8e565b610b9a565b8254610b78565b9055565b610bd282610bcd600584906104af565b610b9d565b610c11610bff7ffe18b93b9d673d5fa9d47a90eecc041e521d2fc672cbc2c800ea5ebf269c06f092610493565b92610c08610132565b9182918261042a565b0390a2565b90610c2091610b4a565b565b90610c4a9291610c45610c403363ffffffff60e01b5f351690611664565b610b21565b610d26565b565b90565b610c63610c5e610c6892610c4c565b61024f565b6107a6565b90565b1b90565b610c8e90610c88610c82610c9394610140565b916107a6565b90610c6b565b6107a6565b90565b610caa610ca5610caf926107a6565b610b73565b6102e2565b90565b5f1c90565b610cc3610cc891610cb2565b6102a0565b90565b610cd59054610cb7565b90565b90610ce45f1991610b73565b9181191691161790565b610cf7906102e2565b90565b610d0390610cb2565b90565b90610d1b610d16610d2292610cee565b610cfa565b8254610cd8565b9055565b9091610d329015610169565b610dc357610d72610d55610d506001610d4b8691610c4f565b610c6f565b610c96565b610d6160028490610286565b90610d6b82610ccb565b1790610d06565b90600191610dbe610dac610da67f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf29361027a565b93610493565b93610db5610132565b9182918261042a565b0390a3565b5f632e6ec23560e21b815280610ddb600482016101be565b0390fd5b90610dea9291610c22565b565b610df8610dfd91610cb2565b610710565b90565b610e0a9054610dec565b90565b610e19610e1e91610cb2565b610941565b90565b610e2b9054610e0d565b90565b610e379061026e565b90565b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90610e6290610e3a565b810190811067ffffffffffffffff821117610e7c57604052565b610e44565b60e01b90565b90505190610e948261016e565b565b90602082820312610eaf57610eac915f01610e87565b90565b61013c565b610ebd9061033c565b9052565b604090610eea610ef19496959396610ee060608401985f85019061074f565b602083019061074f565b0190610eb4565b565b610efb610132565b3d5f823e3d90fd5b15610f0a57565b5f80fd5b90610f1f60018060a01b0391610b73565b9181191691161790565b610f3290610252565b90565b610f3e90610f29565b90565b90565b90610f59610f54610f6092610f35565b610f41565b8254610f0e565b9055565b33610f7f610f79610f745f610e00565b610202565b91610202565b148015610fe8575b610f9090610f03565b610f9b816001610f44565b3390610fd0610fca7fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b763899801989361027a565b91610f35565b91610fd9610132565b80610fe3816101be565b0390a3565b50610ffb610ff66001610e21565b610981565b602063b700961391339061103461101130610e2e565b9461103f63ffffffff60e01b5f3516611028610132565b97889687958695610e81565b855260048501610ec1565b03915afa801561108a57610f90915f9161105c575b509050610f87565b61107d915060203d8111611083575b6110758183610e58565b810190610e96565b5f611054565b503d61106b565b610ef3565b906110b89392916110b36110ae3363ffffffff60e01b5f351690611664565b610b21565b6110ba565b565b92919092825f146111665761110b6110e46110df60016110da8591610c4f565b610c6f565b610c96565b6110fa6110f360048890610581565b8590610597565b9061110482610ccb565b1790610d06565b5b9290919261116161114f6111496111437fa52ea92e6e955aa8ac66420b86350f7139959adfcc7e6a14eee1bd116d09860e94610493565b9461027a565b946103ae565b94611158610132565b9182918261042a565b0390a4565b6111b561118e611188611183600161117e8691610c4f565b610c6f565b610c96565b196102e2565b6111a461119d60048890610581565b8590610597565b906111ae82610ccb565b1690610d06565b61110c565b906111c693929161108f565b565b5f90565b6111e06111db6111e5926107a6565b61024f565b6107a6565b90565b6111f46111f991610cb2565b6111cc565b90565b61121b6112166112209261120e6111c8565b506002610286565b610ccb565b6111e8565b90565b9061124a916112456112403363ffffffff60e01b5f351690611664565b610b21565b61126d565b565b61125861125d91610cb2565b6103d0565b90565b61126a905461124c565b90565b61128a61128461127f600585906104af565b611260565b15610169565b611323576112d36112b66112b06112ab60016112a68791610c4f565b610c6f565b610c96565b196102e2565b6112c260028490610286565b906112cc82610ccb565b1690610d06565b905f9161131e61130c6113067f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf29361027a565b93610493565b93611315610132565b9182918261042a565b0390a3565b5f632e6ec23560e21b81528061133b600482016101be565b0390fd5b9061134991611223565b565b5f90565b61136e9061136861136261137394610140565b916107a6565b9061029c565b6107a6565b90565b90565b61138d61138861139292611376565b61024f565b6107a6565b90565b906113c16113bc6113cb946113b76113c6946113af61134b565b506004610581565b610597565b610ccb565b6111e8565b61134f565b6113d56001610c4f565b166113e86113e25f611379565b916107a6565b141590565b6114016113fc61140692611376565b610b73565b6102e2565b90565b9061141261134b565b5061143161142c61142560038490610398565b85906103ba565b611260565b92831561143f575b50505090565b61148d9293509061148161147c6114879361147761146f61146a6114625f6113ed565b996002610286565b610ccb565b946004610581565b610597565b610ccb565b166102e2565b916102e2565b14155f8080611439565b906114bf92916114ba6114b53363ffffffff60e01b5f351690611664565b610b21565b6114c1565b565b9190916114e3826114de6114d760038590610398565b86906103ba565b610b9d565b91909161152e61151c6115167f950a343f5d10445e82a71036d3f4fb3016180a25805141932543b83e2078a93e9361027a565b936103ae565b93611525610132565b9182918261042a565b0390a3565b9061153e9291611497565b565b9061156861156361155e61156d9461155661134b565b506002610286565b610ccb565b6111e8565b61134f565b6115776001610c4f565b1661158a6115845f611379565b916107a6565b141590565b6115b5906115b06115ab3363ffffffff60e01b5f351690611664565b610b21565b6115da565b565b90565b906115cf6115ca6115d69261027a565b6115b7565b8254610f0e565b9055565b6115e4815f6115ba565b33906116196116137f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361027a565b9161027a565b91611622610132565b8061162c816101be565b0390a3565b61163a9061158f565b565b61165061164b61165592611376565b61024f565b6101f7565b90565b6116619061163c565b90565b9061166d61134b565b506116786001610e21565b9061168282610981565b61169c6116966116915f611658565b610202565b91610202565b141591826116d6575b50509081156116b3575b5090565b90506116cf6116c96116c45f610e00565b610202565b91610202565b145f6116af565b60209192506116e490610981565b63b700961390611710859261171b6116fb30610e2e565b96611704610132565b97889687958695610e81565b855260048501610ec1565b03915afa908115611763575f91611735575b505f806116a5565b611756915060203d811161175c575b61174e8183610e58565b810190610e96565b5f61172d565b503d611744565b610ef356000000000000000000000000b39cd45a870ccb5f3fcd7211f0c1853e5bf4d5f30000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361015610013575b610abb565b61001d5f3561012c565b806301d7b0221461012757806306a36aee146101225780632f47571f1461011d5780633e762e001461011857806367aff484146101135780637917b7941461010e5780637a9e5e4b146101095780637d40583d146101045780638da5cb5b146100ff578063b27fb668146100fa578063b44f794f146100f5578063b4bad06a146100f0578063b7009613146100eb578063bf7e214f146100e6578063c6b0263e146100e1578063ea7ca276146100dc5763f2fde38b0361000e57610a88565b610a52565b610a1e565b6109af565b61090b565b61089b565b61082d565b6107cb565b610771565b6106ca565b610651565b6105ce565b61054d565b6104de565b61043f565b610307565b6101c3565b60e01c90565b60405190565b5f80fd5b5f80fd5b60ff1690565b61014f81610140565b0361015657565b5f80fd5b9050359061016782610146565b565b151590565b61017781610169565b0361017e57565b5f80fd5b9050359061018f8261016e565b565b91906040838203126101b957806101ad6101b6925f860161015a565b93602001610182565b90565b61013c565b5f0190565b346101f2576101dc6101d6366004610191565b90610c16565b6101e4610132565b806101ee816101be565b0390f35b610138565b60018060a01b031690565b61020b906101f7565b90565b61021781610202565b0361021e57565b5f80fd5b9050359061022f8261020e565b565b9060208282031261024a57610247915f01610222565b90565b61013c565b90565b61026661026161026b926101f7565b61024f565b6101f7565b90565b61027790610252565b90565b6102839061026e565b90565b906102909061027a565b5f5260205260405f2090565b1c90565b90565b6102b39060086102b8930261029c565b6102a0565b90565b906102c691546102a3565b90565b6102df906102da6002915f92610286565b6102bb565b90565b90565b6102ee906102e2565b9052565b9190610305905f602085019401906102e5565b565b346103375761033361032261031d366004610231565b6102c9565b61032a610132565b918291826102f2565b0390f35b610138565b63ffffffff60e01b1690565b6103518161033c565b0361035857565b5f80fd5b9050359061036982610348565b565b91906040838203126103935780610387610390925f8601610222565b9360200161035c565b90565b61013c565b906103a29061027a565b5f5260205260405f2090565b6103b79061033c565b90565b906103c4906103ae565b5f5260205260405f2090565b60ff1690565b6103e69060086103eb930261029c565b6103d0565b90565b906103f991546103d6565b90565b61041561041a926104106003935f94610398565b6103ba565b6103ee565b90565b61042690610169565b9052565b919061043d905f6020850194019061041d565b565b346104705761046c61045b61045536600461036b565b906103fc565b610463610132565b9182918261042a565b0390f35b610138565b9060208282031261048e5761048b915f0161015a565b90565b61013c565b6104a76104a26104ac92610140565b61024f565b610140565b90565b906104b990610493565b5f5260205260405f2090565b6104db906104d66005915f926104af565b6103ee565b90565b3461050e5761050a6104f96104f4366004610475565b6104c5565b610501610132565b9182918261042a565b0390f35b610138565b90916060828403126105485761054561052e845f8501610222565b9361053c816020860161015a565b93604001610182565b90565b61013c565b3461057c57610566610560366004610513565b91610ddf565b61056e610132565b80610578816101be565b0390f35b610138565b9061058b9061027a565b5f5260205260405f2090565b906105a1906103ae565b5f5260205260405f2090565b6105c66105cb926105c16004935f94610581565b610597565b6102bb565b90565b346105ff576105fb6105ea6105e436600461036b565b906105ad565b6105f2610132565b918291826102f2565b0390f35b610138565b61060d90610202565b90565b61061981610604565b0361062057565b5f80fd5b9050359061063182610610565b565b9060208282031261064c57610649915f01610624565b90565b61013c565b3461067f57610669610664366004610633565b610f64565b610671610132565b8061067b816101be565b0390f35b610138565b6080818303126106c55761069a825f830161015a565b926106c26106ab8460208501610222565b936106b9816040860161035c565b93606001610182565b90565b61013c565b346106fc576106e66106dd366004610684565b929190916111ba565b6106ee610132565b806106f8816101be565b0390f35b610138565b5f91031261070b57565b61013c565b60018060a01b031690565b61072b906008610730930261029c565b610710565b90565b9061073e915461071b565b90565b61074c5f5f90610733565b90565b61075890610202565b9052565b919061076f905f6020850194019061074f565b565b346107a157610781366004610701565b61079d61078c610741565b610794610132565b9182918261075c565b0390f35b610138565b90565b6107b2906107a6565b9052565b91906107c9905f602085019401906107a9565b565b346107fb576107f76107e66107e1366004610231565b6111fc565b6107ee610132565b918291826107b6565b0390f35b610138565b9190604083820312610828578061081c610825925f8601610222565b9360200161015a565b90565b61013c565b3461085c57610846610840366004610800565b9061133f565b61084e610132565b80610858816101be565b0390f35b610138565b90916060828403126108965761089361087c845f850161015a565b9361088a8160208601610222565b9360400161035c565b90565b61013c565b346108cc576108c86108b76108b1366004610861565b91611395565b6108bf610132565b9182918261042a565b0390f35b610138565b9091606082840312610906576109036108ec845f8501610222565b936108fa8160208601610222565b9360400161035c565b90565b61013c565b3461093c576109386109276109213660046108d1565b91611409565b61092f610132565b9182918261042a565b0390f35b610138565b60018060a01b031690565b61095c906008610961930261029c565b610941565b90565b9061096f915461094c565b90565b61097e60015f90610964565b90565b61098a9061026e565b90565b61099690610981565b9052565b91906109ad905f6020850194019061098d565b565b346109df576109bf366004610701565b6109db6109ca610972565b6109d2610132565b9182918261099a565b0390f35b610138565b9091606082840312610a1957610a166109ff845f8501610222565b93610a0d816020860161035c565b93604001610182565b90565b61013c565b34610a4d57610a37610a313660046109e4565b91611533565b610a3f610132565b80610a49816101be565b0390f35b610138565b34610a8357610a7f610a6e610a68366004610800565b90611540565b610a76610132565b9182918261042a565b0390f35b610138565b34610ab657610aa0610a9b366004610231565b611631565b610aa8610132565b80610ab2816101be565b0390f35b610138565b5f80fd5b60209181520190565b5f7f554e415554484f52495a45440000000000000000000000000000000000000000910152565b610afc600c602092610abf565b610b0581610ac8565b0190565b610b1e9060208101905f818303910152610aef565b90565b15610b2857565b610b30610132565b62461bcd60e51b815280610b4660048201610b09565b0390fd5b90610b7191610b6c610b673363ffffffff60e01b5f351690611664565b610b21565b610bbd565b565b5f1b90565b90610b8460ff91610b73565b9181191691161790565b610b9790610169565b90565b90565b90610bb2610bad610bb992610b8e565b610b9a565b8254610b78565b9055565b610bd282610bcd600584906104af565b610b9d565b610c11610bff7ffe18b93b9d673d5fa9d47a90eecc041e521d2fc672cbc2c800ea5ebf269c06f092610493565b92610c08610132565b9182918261042a565b0390a2565b90610c2091610b4a565b565b90610c4a9291610c45610c403363ffffffff60e01b5f351690611664565b610b21565b610d26565b565b90565b610c63610c5e610c6892610c4c565b61024f565b6107a6565b90565b1b90565b610c8e90610c88610c82610c9394610140565b916107a6565b90610c6b565b6107a6565b90565b610caa610ca5610caf926107a6565b610b73565b6102e2565b90565b5f1c90565b610cc3610cc891610cb2565b6102a0565b90565b610cd59054610cb7565b90565b90610ce45f1991610b73565b9181191691161790565b610cf7906102e2565b90565b610d0390610cb2565b90565b90610d1b610d16610d2292610cee565b610cfa565b8254610cd8565b9055565b9091610d329015610169565b610dc357610d72610d55610d506001610d4b8691610c4f565b610c6f565b610c96565b610d6160028490610286565b90610d6b82610ccb565b1790610d06565b90600191610dbe610dac610da67f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf29361027a565b93610493565b93610db5610132565b9182918261042a565b0390a3565b5f632e6ec23560e21b815280610ddb600482016101be565b0390fd5b90610dea9291610c22565b565b610df8610dfd91610cb2565b610710565b90565b610e0a9054610dec565b90565b610e19610e1e91610cb2565b610941565b90565b610e2b9054610e0d565b90565b610e379061026e565b90565b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90610e6290610e3a565b810190811067ffffffffffffffff821117610e7c57604052565b610e44565b60e01b90565b90505190610e948261016e565b565b90602082820312610eaf57610eac915f01610e87565b90565b61013c565b610ebd9061033c565b9052565b604090610eea610ef19496959396610ee060608401985f85019061074f565b602083019061074f565b0190610eb4565b565b610efb610132565b3d5f823e3d90fd5b15610f0a57565b5f80fd5b90610f1f60018060a01b0391610b73565b9181191691161790565b610f3290610252565b90565b610f3e90610f29565b90565b90565b90610f59610f54610f6092610f35565b610f41565b8254610f0e565b9055565b33610f7f610f79610f745f610e00565b610202565b91610202565b148015610fe8575b610f9090610f03565b610f9b816001610f44565b3390610fd0610fca7fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b763899801989361027a565b91610f35565b91610fd9610132565b80610fe3816101be565b0390a3565b50610ffb610ff66001610e21565b610981565b602063b700961391339061103461101130610e2e565b9461103f63ffffffff60e01b5f3516611028610132565b97889687958695610e81565b855260048501610ec1565b03915afa801561108a57610f90915f9161105c575b509050610f87565b61107d915060203d8111611083575b6110758183610e58565b810190610e96565b5f611054565b503d61106b565b610ef3565b906110b89392916110b36110ae3363ffffffff60e01b5f351690611664565b610b21565b6110ba565b565b92919092825f146111665761110b6110e46110df60016110da8591610c4f565b610c6f565b610c96565b6110fa6110f360048890610581565b8590610597565b9061110482610ccb565b1790610d06565b5b9290919261116161114f6111496111437fa52ea92e6e955aa8ac66420b86350f7139959adfcc7e6a14eee1bd116d09860e94610493565b9461027a565b946103ae565b94611158610132565b9182918261042a565b0390a4565b6111b561118e611188611183600161117e8691610c4f565b610c6f565b610c96565b196102e2565b6111a461119d60048890610581565b8590610597565b906111ae82610ccb565b1690610d06565b61110c565b906111c693929161108f565b565b5f90565b6111e06111db6111e5926107a6565b61024f565b6107a6565b90565b6111f46111f991610cb2565b6111cc565b90565b61121b6112166112209261120e6111c8565b506002610286565b610ccb565b6111e8565b90565b9061124a916112456112403363ffffffff60e01b5f351690611664565b610b21565b61126d565b565b61125861125d91610cb2565b6103d0565b90565b61126a905461124c565b90565b61128a61128461127f600585906104af565b611260565b15610169565b611323576112d36112b66112b06112ab60016112a68791610c4f565b610c6f565b610c96565b196102e2565b6112c260028490610286565b906112cc82610ccb565b1690610d06565b905f9161131e61130c6113067f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf29361027a565b93610493565b93611315610132565b9182918261042a565b0390a3565b5f632e6ec23560e21b81528061133b600482016101be565b0390fd5b9061134991611223565b565b5f90565b61136e9061136861136261137394610140565b916107a6565b9061029c565b6107a6565b90565b90565b61138d61138861139292611376565b61024f565b6107a6565b90565b906113c16113bc6113cb946113b76113c6946113af61134b565b506004610581565b610597565b610ccb565b6111e8565b61134f565b6113d56001610c4f565b166113e86113e25f611379565b916107a6565b141590565b6114016113fc61140692611376565b610b73565b6102e2565b90565b9061141261134b565b5061143161142c61142560038490610398565b85906103ba565b611260565b92831561143f575b50505090565b61148d9293509061148161147c6114879361147761146f61146a6114625f6113ed565b996002610286565b610ccb565b946004610581565b610597565b610ccb565b166102e2565b916102e2565b14155f8080611439565b906114bf92916114ba6114b53363ffffffff60e01b5f351690611664565b610b21565b6114c1565b565b9190916114e3826114de6114d760038590610398565b86906103ba565b610b9d565b91909161152e61151c6115167f950a343f5d10445e82a71036d3f4fb3016180a25805141932543b83e2078a93e9361027a565b936103ae565b93611525610132565b9182918261042a565b0390a3565b9061153e9291611497565b565b9061156861156361155e61156d9461155661134b565b506002610286565b610ccb565b6111e8565b61134f565b6115776001610c4f565b1661158a6115845f611379565b916107a6565b141590565b6115b5906115b06115ab3363ffffffff60e01b5f351690611664565b610b21565b6115da565b565b90565b906115cf6115ca6115d69261027a565b6115b7565b8254610f0e565b9055565b6115e4815f6115ba565b33906116196116137f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361027a565b9161027a565b91611622610132565b8061162c816101be565b0390a3565b61163a9061158f565b565b61165061164b61165592611376565b61024f565b6101f7565b90565b6116619061163c565b90565b9061166d61134b565b506116786001610e21565b9061168282610981565b61169c6116966116915f611658565b610202565b91610202565b141591826116d6575b50509081156116b3575b5090565b90506116cf6116c96116c45f610e00565b610202565b91610202565b145f6116af565b60209192506116e490610981565b63b700961390611710859261171b6116fb30610e2e565b96611704610132565b97889687958695610e81565b855260048501610ec1565b03915afa908115611763575f91611735575b505f806116a5565b611756915060203d811161175c575b61174e8183610e58565b810190610e96565b5f61172d565b503d611744565b610ef356

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

000000000000000000000000b39cd45a870ccb5f3fcd7211f0c1853e5bf4d5f30000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _owner (address): 0xb39Cd45a870cCb5f3fcd7211f0c1853E5BF4D5f3
Arg [1] : _authority (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000b39cd45a870ccb5f3fcd7211f0c1853e5bf4d5f3
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


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

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