ETH Price: $3,300.27 (-1.20%)

Token

 

Overview

Max Total Supply

0

Holders

455

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
morereese.eth
Balance
1
0x26e3a9c84fdb9b7fe33dfd5e8d273d016e4e4fb6
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
Identity

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity Multiple files format)

File 1 of 2: IdentityComplete.sol
// SPDX-License-Identifier: GPL-3.0-only

pragma solidity 0.7.4;

import "./SafeMathLib.sol";


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}



/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}

// ERC 721
contract Identity {
    using SafeMathLib for uint;

    mapping (uint => address) public owners;
    mapping (address => uint) public balances;

    // Mapping from owner to operator approvals
    mapping (address => mapping (address => bool)) public operatorApprovals;
    mapping (uint => address) public tokenApprovals;

    // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`
    bytes4 private constant ERC721_RECEIVED = 0x150b7a02;

    /*
     *     bytes4(keccak256('balanceOf(address)')) == 0x70a08231
     *     bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e
     *     bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3
     *     bytes4(keccak256('getApproved(uint256)')) == 0x081812fc
     *     bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465
     *     bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5
     *     bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde
     *
     *     => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^
     *        0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd
     */
    bytes4 private constant INTERFACE_ID_ERC721 = 0x80ac58cd;

    /*
     * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
     */
    bytes4 private constant INTERFACE_ID_ERC165 = 0x01ffc9a7;

    uint public identityIncreaseFactor = 2;
    uint public identityIncreaseDenominator = 1;
    uint public lastIdentityPrice = 100 * 1 ether; // burn cost of making an identity, in IERC20
    uint public identityDecayFactor = 1 ether / 100;
    uint public identityPriceFloor = 100 * 1 ether;
    uint public numIdentities = 0;
    uint public lastPurchaseBlock;

    address public management;

    IERC20 public token;

    event ManagementUpdated(address oldManagement, address newManagement);
    event TokenSet(address token);
    event IdentityIncreaseFactorUpdated(uint oldIdIncreaseFactor, uint newIdIncreaseFactor);
    event IdentityIncreaseDenominatorUpdated(uint oldIdIncreaseDenominator, uint newIdIncreaseDenominator);
    event IdentityDecayFactorUpdated(uint oldIdDecayFactor, uint newIdDecayFactor);
    event IdentityPriceFloorUpdated(uint oldIdPriceFloor, uint newIdPriceFloor);
    event IdentityCreated(address indexed owner, uint indexed token);


    /// @dev This emits when ownership of any NFT changes by any mechanism.
    ///  This event emits when NFTs are created (`from` == 0) and destroyed
    ///  (`to` == 0). Exception: during contract creation, any number of NFTs
    ///  may be created and assigned without emitting Transfer. At the time of
    ///  any transfer, the approved address for that NFT (if any) is reset to none.
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /// @dev This emits when the approved address for an NFT is changed or
    ///  reaffirmed. The zero address indicates there is no approved address.
    ///  When a Transfer event emits, this also indicates that the approved
    ///  address for that NFT (if any) is reset to none.
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /// @dev This emits when an operator is enabled or disabled for an owner.
    ///  The operator can manage all NFTs of the owner.
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    modifier managementOnly() {
        require (msg.sender == management, 'Identity: Only management may call this');
        _;
    }

    constructor(address mgmt) {
        management = mgmt;
        lastPurchaseBlock = block.number;
    }

    function setToken(address tokenAddr) public managementOnly {
        token = IERC20(tokenAddr);
        emit TokenSet(tokenAddr);
    }

    // this function creates an identity by burning the IERC20. Anyone can call it.
    function createMyIdentity(uint maxPrice) public {
        uint identityPrice = getIdentityPrice();
        require(maxPrice >= identityPrice || maxPrice == 0, "Identity: current price exceeds user maximum");
        token.transferFrom(msg.sender, address(0), identityPrice);
        createIdentity(msg.sender);
        lastIdentityPrice = identityPrice.times(identityIncreaseFactor) / identityIncreaseDenominator;
        lastPurchaseBlock = block.number;
    }

    // this function creates an identity for free. Only management can call it.
    function createIdentityFor(address newId) public managementOnly {
        createIdentity(newId);
    }

    function createIdentity(address owner) internal {
        numIdentities = numIdentities.plus(1);
        owners[numIdentities] = owner;
        balances[owner] = balances[owner].plus(1);
        emit Transfer(address(0), owner, numIdentities);
        emit IdentityCreated(owner, numIdentities);
    }

    function getIdentityPrice() public view returns (uint) {
        uint decay = identityDecayFactor.times(block.number.minus(lastPurchaseBlock));
        if (lastIdentityPrice < decay.plus(identityPriceFloor)) {
            return identityPriceFloor;
        } else {
            return lastIdentityPrice.minus(decay);
        }
    }

    /// ================= SETTERS =======================================

    // change the management key
    function setManagement(address newMgmt) public managementOnly {
        address oldMgmt =  management;
        management = newMgmt;
        emit ManagementUpdated(oldMgmt, newMgmt);
    }

    function setIdentityIncreaseFactor(uint newIncreaseFactor) public managementOnly {
        uint oldIncreaseFactor = identityIncreaseFactor;
        identityIncreaseFactor = newIncreaseFactor;
        emit IdentityIncreaseFactorUpdated(oldIncreaseFactor, newIncreaseFactor);
    }

    function setIdentityIncreaseDenominator(uint newIncreaseDenominator) public managementOnly {
        uint oldIncreaseDenominator = identityIncreaseDenominator;
        identityIncreaseDenominator = newIncreaseDenominator;
        emit IdentityIncreaseDenominatorUpdated(oldIncreaseDenominator, newIncreaseDenominator);
    }

    function setIdentityDecayFactor(uint newDecayFactor) public managementOnly {
        uint oldDecayFactor = identityDecayFactor;
        identityDecayFactor = newDecayFactor;
        emit IdentityDecayFactorUpdated(oldDecayFactor, newDecayFactor);
    }

    function setIdentityPriceFloor(uint newPriceFloor) public managementOnly {
        uint oldFloor = identityPriceFloor;
        identityPriceFloor = newPriceFloor;
        emit IdentityPriceFloorUpdated(oldFloor, newPriceFloor);
    }

    /// ================= ERC 721 FUNCTIONS =============================================

    /// @notice Count all NFTs assigned to an owner
    /// @dev NFTs assigned to the zero address are considered invalid, and this
    ///  function throws for queries about the zero address.
    /// @param owner An address for whom to query the balance
    /// @return The number of NFTs owned by `owner`, possibly zero
    function balanceOf(address owner) external view returns (uint256) {
        return balances[owner];
    }

    /// @notice Find the owner of an NFT
    /// @dev NFTs assigned to zero address are considered invalid, and queries
    ///  about them do throw.
    /// @param tokenId The identifier for an NFT
    /// @return The address of the owner of the NFT
    function ownerOf(uint256 tokenId) external view returns (address)  {
        address owner = owners[tokenId];
        require(owner != address(0), 'No such token');
        return owner;
    }

    /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE
    ///  TO CONFIRM THAT `to` IS CAPABLE OF RECEIVING NFTS OR ELSE
    ///  THEY MAY BE PERMANENTLY LOST
    /// @dev Throws unless `msg.sender` is the current owner, an authorized
    ///  operator, or the approved address for this NFT. Throws if `from` is
    ///  not the current owner. Throws if `to` is the zero address. Throws if
    ///  `tokenId` is not a valid NFT.
    /// @param from The current owner of the NFT
    /// @param to The new owner
    /// @param tokenId The NFT to transfer
    function transferFrom(address from, address to, uint256 tokenId) public {
        require(isApproved(msg.sender, tokenId), 'Identity: Unapproved transfer');
        transfer(from, to, tokenId);
    }

    /// @notice Transfers the ownership of an NFT from one address to another address
    /// @dev Throws unless `msg.sender` is the current owner, an authorized
    ///  operator, or the approved address for this NFT. Throws if `from` is
    ///  not the current owner. Throws if `to` is the zero address. Throws if
    ///  `tokenId` is not a valid NFT. When transfer is complete, this function
    ///  checks if `to` is a smart contract (code size > 0). If so, it calls
    ///  `onERC721Received` on `to` and throws if the return value is not
    ///  `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
    /// @param from The current owner of the NFT
    /// @param to The new owner
    /// @param tokenId The NFT to transfer
    /// @param data Additional data with no specified format, sent in call to `to`
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public {
        transferFrom(from, to, tokenId);
        require(checkOnERC721Received(from, to, tokenId, data), "Identity: transfer to non ERC721Receiver implementer");
    }

    /// @notice Transfers the ownership of an NFT from one address to another address
    /// @dev This works identically to the other function with an extra data parameter,
    ///  except this function just sets data to "".
    /// @param from The current owner of the NFT
    /// @param to The new owner
    /// @param tokenId The NFT to transfer
    function safeTransferFrom(address from, address to, uint256 tokenId) public {
        safeTransferFrom(from, to, tokenId, '');
    }


    /// @notice Change or reaffirm the approved address for an NFT
    /// @dev The zero address indicates there is no approved address.
    ///  Throws unless `msg.sender` is the current NFT owner, or an authorized
    ///  operator of the current owner.
    /// @param approved The new approved NFT controller
    /// @param tokenId The NFT to approve
    function approve(address approved, uint256 tokenId) public {
        address owner = owners[tokenId];
        require(isApproved(msg.sender, tokenId), 'Identity: Not authorized to approve');
        require(owner != approved, 'Identity: Approving self not allowed');
        tokenApprovals[tokenId] = approved;
        emit Approval(owner, approved, tokenId);
    }

    /// @notice Enable or disable approval for a third party ("operator") to manage
    ///  all of `msg.sender`'s assets
    /// @dev Emits the ApprovalForAll event. The contract MUST allow
    ///  multiple operators per owner.
    /// @param operator Address to add to the set of authorized operators
    /// @param approved True if the operator is approved, false to revoke approval
    function setApprovalForAll(address operator, bool approved) external {
        operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /// @notice Get the approved address for a single NFT
    /// @dev Throws if `tokenId` is not a valid NFT.
    /// @param tokenId The NFT to find the approved address for
    /// @return The approved address for this NFT, or the zero address if there is none
    function getApproved(uint256 tokenId) external view returns (address) {
        address owner = owners[tokenId];
        require(owner != address(0), 'Identity: Invalid tokenId');
        return tokenApprovals[tokenId];
    }

    /// @notice Query if an address is an authorized operator for another address
    /// @param owner The address that owns the NFTs
    /// @param operator The address that acts on behalf of the owner
    /// @return True if `operator` is an approved operator for `owner`, false otherwise
    function isApprovedForAll(address owner, address operator) public view returns (bool) {
        return operatorApprovals[owner][operator];
    }

    /// ================ UTILS =========================
    function isApproved(address operator, uint tokenId) public view returns (bool) {
        address owner = owners[tokenId];
        return (
            operator == owner ||
            operatorApprovals[owner][operator] ||
            tokenApprovals[tokenId] == operator
        );
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address from, address to, uint256 tokenId) internal {
        require(owners[tokenId] == from, "Identity: Transfer of token that is not own");
        require(to != address(0), "Identity: transfer to the zero address");

        // Clear approvals from the previous owner
        approve(address(0), tokenId);

        owners[tokenId] = to;
        balances[from] = balances[from].minus(1);
        balances[to] = balances[to].plus(1);

        emit Transfer(from, to, tokenId);
    }

    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for non-contract addresses

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory data)
        private returns (bool)
    {
        if (!isContract(to)) {
            return true;
        }
        IERC721Receiver target = IERC721Receiver(to);
        bytes4 retval = target.onERC721Received(from, to, tokenId, data);
        return ERC721_RECEIVED == retval;
    }

    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
        return (
            interfaceId == INTERFACE_ID_ERC721 ||
            interfaceId == INTERFACE_ID_ERC165
        );
    }

}

File 2 of 2: SafeMathLib.sol
// SPDX-License-Identifier: GPL-3.0-only

pragma solidity 0.7.4;

library SafeMathLib {
  function times(uint a, uint b) public pure returns (uint) {
    uint c = a * b;
    require(a == 0 || c / a == b, 'Overflow detected');
    return c;
  }

  function minus(uint a, uint b) public pure returns (uint) {
    require(b <= a, 'Underflow detected');
    return a - b;
  }

  function plus(uint a, uint b) public pure returns (uint) {
    uint c = a + b;
    require(c>=a && c>=b, 'Overflow detected');
    return c;
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"mgmt","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"token","type":"uint256"}],"name":"IdentityCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldIdDecayFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newIdDecayFactor","type":"uint256"}],"name":"IdentityDecayFactorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldIdIncreaseDenominator","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newIdIncreaseDenominator","type":"uint256"}],"name":"IdentityIncreaseDenominatorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldIdIncreaseFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newIdIncreaseFactor","type":"uint256"}],"name":"IdentityIncreaseFactorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldIdPriceFloor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newIdPriceFloor","type":"uint256"}],"name":"IdentityPriceFloorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldManagement","type":"address"},{"indexed":false,"internalType":"address","name":"newManagement","type":"address"}],"name":"ManagementUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"TokenSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"approved","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newId","type":"address"}],"name":"createIdentityFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPrice","type":"uint256"}],"name":"createMyIdentity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIdentityPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"identityDecayFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"identityIncreaseDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"identityIncreaseFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"identityPriceFloor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastIdentityPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPurchaseBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"management","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numIdentities","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"operatorApprovals","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDecayFactor","type":"uint256"}],"name":"setIdentityDecayFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newIncreaseDenominator","type":"uint256"}],"name":"setIdentityIncreaseDenominator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newIncreaseFactor","type":"uint256"}],"name":"setIdentityIncreaseFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPriceFloor","type":"uint256"}],"name":"setIdentityPriceFloor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMgmt","type":"address"}],"name":"setManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddr","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenApprovals","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526002600455600160055568056bc75e2d63100000600655662386f26fc1000060075568056bc75e2d63100000600855600060095534801561004457600080fd5b50604051612bce380380612bce8339818101604052602081101561006757600080fd5b810190808051906020019092919050505080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555043600a8190555050612afe806100d06000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c806342842e0e1161011a578063a480f9f7116100ad578063bc0819551161007c578063bc08195514610a16578063d4a22bde14610a44578063e985e9c514610a88578063eb1ec84614610b02578063fc0c546a14610b20576101fb565b8063a480f9f714610847578063acdeb5b91461088b578063b88d4fde146108e3578063b99f7918146109e8576101fb565b80636352211e116100e95780636352211e1461071357806370a082311461076b57806388a8d602146107c3578063a22cb465146107f7576101fb565b806342842e0e1461063b578063462416fb146106a95780635136e9f0146106c7578063524d5614146106f5576101fb565b8063144fa6d71161019257806327e235e31161016157806327e235e3146105235780632a16cca41461057b5780632b48e14f146105df578063366313cd1461060d576101fb565b8063144fa6d71461043557806319bb8b2b146104795780631cc83cc81461049757806323b872dd146104b5576101fb565b8063095ea7b3116101ce578063095ea7b3146103315780630d95e0541461037f5780630e35892a146103f95780631125b36914610417576101fb565b806301ffc9a714610200578063025e7c271461026357806305c8c51f146102bb578063081812fc146102d9575b600080fd5b61024b6004803603602081101561021657600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610b54565b60405180821515815260200191505060405180910390f35b61028f6004803603602081101561027957600080fd5b8101908080359060200190929190505050610bf4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102c3610c27565b6040518082815260200191505060405180910390f35b610305600480360360208110156102ef57600080fd5b8101908080359060200190929190505050610c2d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61037d6004803603604081101561034757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d44565b005b6103e16004803603604081101561039557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f11565b60405180821515815260200191505060405180910390f35b610401610f40565b6040518082815260200191505060405180910390f35b61041f610f46565b6040518082815260200191505060405180910390f35b6104776004803603602081101561044b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f4c565b005b610481611083565b6040518082815260200191505060405180910390f35b61049f611089565b6040518082815260200191505060405180910390f35b610521600480360360608110156104cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061108f565b005b6105656004803603602081101561053957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061111b565b6040518082815260200191505060405180910390f35b6105c76004803603604081101561059157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611133565b60405180821515815260200191505060405180910390f35b61060b600480360360208110156105f557600080fd5b810190808035906020019092919050505061129d565b005b6106396004803603602081101561062357600080fd5b8101908080359060200190929190505050611394565b005b6106a76004803603606081101561065157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061148b565b005b6106b16114ab565b6040518082815260200191505060405180910390f35b6106f3600480360360208110156106dd57600080fd5b81019080803590602001909291905050506114b1565b005b6106fd6115a8565b6040518082815260200191505060405180910390f35b61073f6004803603602081101561072957600080fd5b81019080803590602001909291905050506115ae565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107ad6004803603602081101561078157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611692565b6040518082815260200191505060405180910390f35b6107cb6116db565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108456004803603604081101561080d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611701565b005b6108896004803603602081101561085d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611800565b005b6108b7600480360360208110156108a157600080fd5b81019080803590602001909291905050506118b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109e6600480360360808110156108f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561096057600080fd5b82018360208201111561097257600080fd5b8035906020019184600183028401116401000000008311171561099457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506118e5565b005b610a14600480360360208110156109fe57600080fd5b8101908080359060200190929190505050611957565b005b610a4260048036036020811015610a2c57600080fd5b8101908080359060200190929190505050611a4e565b005b610a8660048036036020811015610a5a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c67565b005b610aea60048036036040811015610a9e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611de4565b60405180821515815260200191505060405180910390f35b610b0a611e78565b6040518082815260200191505060405180910390f35b610b286120ef565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bed57506301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60006020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4964656e746974793a20496e76616c696420746f6b656e49640000000000000081525060200191505060405180910390fd5b6003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b600080600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610d853383611133565b610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612aa66023913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612a056024913960400191505060405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60026020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60045481565b60065481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ff2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806129de6027913960400191505060405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa07c91c183e42229e705a9795a1c06d76528b673788b849597364528c96eefb781604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60095481565b60085481565b6110993382611133565b61110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4964656e746974793a20556e617070726f766564207472616e7366657200000081525060200191505060405180910390fd5b611116838383612115565b505050565b60016020528060005260406000206000915090505481565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061122b5750600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061129457508373ffffffffffffffffffffffffffffffffffffffff166003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806129de6027913960400191505060405180910390fd5b60006008549050816008819055507f83852ab2053e9c6d7580771afc4718e13285bcc5626cf6ec71da035b97ced87a8183604051808381526020018281526020019250505060405180910390a15050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461143a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806129de6027913960400191505060405180910390fd5b60006005549050816005819055507fcb14f34c15d91ce3c9acc6d7dc9c81ae7e2f88e086edec371e7bb6d431837c9e8183604051808381526020018281526020019250505060405180910390a15050565b6114a6838383604051806020016040528060008152506118e5565b505050565b60075481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611557576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806129de6027913960400191505060405180910390fd5b60006007549050816007819055507f16b5f9f8c3e931dde9aa9d846d1c253d5ce95b8ab4d3be55c7c62fd27ca8a2758183604051808381526020018281526020019250505060405180910390a15050565b60055481565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4e6f207375636820746f6b656e0000000000000000000000000000000000000081525060200191505060405180910390fd5b80915050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806129de6027913960400191505060405180910390fd5b6118af8161253b565b50565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118f084848461108f565b6118fc848484846127e9565b611951576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806129aa6034913960400191505060405180910390fd5b50505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806129de6027913960400191505060405180910390fd5b60006004549050816004819055507f8b434fc6caa376028492810d5776564ed5066aed838b7f5dc02a78c88bd04cc98183604051808381526020018281526020019250505060405180910390a15050565b6000611a58611e78565b90508082101580611a695750600082145b611abe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612a7a602c913960400191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd336000846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611b7057600080fd5b505af1158015611b84573d6000803e3d6000fd5b505050506040513d6020811015611b9a57600080fd5b810190808051906020019092919050505050611bb53361253b565b600554817382d7630c5eb722557de6d76575c9a7b8de718500631d3b9edf90916004546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611c1357600080fd5b505af4158015611c27573d6000803e3d6000fd5b505050506040513d6020811015611c3d57600080fd5b810190808051906020019092919050505081611c5557fe5b0460068190555043600a819055505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806129de6027913960400191505060405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f8caf0a9df2e1da9becb3ebfb8a56e83121a5b3f6c5622f715a939ec29c54dfdf8183604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806007547382d7630c5eb722557de6d76575c9a7b8de718500631d3b9edf9091437382d7630c5eb722557de6d76575c9a7b8de71850063f4f3bdc19091600a546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611ef557600080fd5b505af4158015611f09573d6000803e3d6000fd5b505050506040513d6020811015611f1f57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611f6b57600080fd5b505af4158015611f7f573d6000803e3d6000fd5b505050506040513d6020811015611f9557600080fd5b81019080805190602001909291905050509050807382d7630c5eb722557de6d76575c9a7b8de7185006366098d4f90916008546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561200357600080fd5b505af4158015612017573d6000803e3d6000fd5b505050506040513d602081101561202d57600080fd5b81019080805190602001909291905050506006541015612052576008549150506120ec565b6006547382d7630c5eb722557de6d76575c9a7b8de71850063f4f3bdc19091836040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156120ad57600080fd5b505af41580156120c1573d6000803e3d6000fd5b505050506040513d60208110156120d757600080fd5b81019080805190602001909291905050509150505b90565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b8273ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612a4f602b913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612251576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612a296026913960400191505060405180910390fd5b61225c600082610d44565b8160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020547382d7630c5eb722557de6d76575c9a7b8de71850063f4f3bdc1909160016040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561234657600080fd5b505af415801561235a573d6000803e3d6000fd5b505050506040513d602081101561237057600080fd5b8101908080519060200190929190505050600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020547382d7630c5eb722557de6d76575c9a7b8de7185006366098d4f909160016040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561245d57600080fd5b505af4158015612471573d6000803e3d6000fd5b505050506040513d602081101561248757600080fd5b8101908080519060200190929190505050600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6009547382d7630c5eb722557de6d76575c9a7b8de7185006366098d4f909160016040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561259757600080fd5b505af41580156125ab573d6000803e3d6000fd5b505050506040513d60208110156125c157600080fd5b810190808051906020019092919050505060098190555080600080600954815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020547382d7630c5eb722557de6d76575c9a7b8de7185006366098d4f909160016040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156126c457600080fd5b505af41580156126d8573d6000803e3d6000fd5b505050506040513d60208110156126ee57600080fd5b8101908080519060200190929190505050600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506009548173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46009548173ffffffffffffffffffffffffffffffffffffffff167fe8d47b56e8cdfa95f871b19d4f50a857217c44a95502b0811a350fec1500dd6760405160405180910390a350565b60006127f484612996565b612801576001905061298e565b600084905060008173ffffffffffffffffffffffffffffffffffffffff1663150b7a02888888886040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156128b557808201518184015260208101905061289a565b50505050905090810190601f1680156128e25780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b505050506040513d602081101561292e57600080fd5b81019080805190602001909291905050509050807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191663150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050505b949350505050565b600080823b90506000811191505091905056fe4964656e746974793a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724964656e746974793a204f6e6c79206d616e6167656d656e74206d61792063616c6c20746869734964656e746974793a20417070726f76696e672073656c66206e6f7420616c6c6f7765644964656e746974793a207472616e7366657220746f20746865207a65726f20616464726573734964656e746974793a205472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4964656e746974793a2063757272656e7420707269636520657863656564732075736572206d6178696d756d4964656e746974793a204e6f7420617574686f72697a656420746f20617070726f7665a26469706673582212206733bb9ceb3b8e55ed006e5c85c3c2f5992025c64a3d50616832e57061796a7664736f6c63430007040033000000000000000000000000288fe43139741f91a8cbb6f4add83811c794851b

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c806342842e0e1161011a578063a480f9f7116100ad578063bc0819551161007c578063bc08195514610a16578063d4a22bde14610a44578063e985e9c514610a88578063eb1ec84614610b02578063fc0c546a14610b20576101fb565b8063a480f9f714610847578063acdeb5b91461088b578063b88d4fde146108e3578063b99f7918146109e8576101fb565b80636352211e116100e95780636352211e1461071357806370a082311461076b57806388a8d602146107c3578063a22cb465146107f7576101fb565b806342842e0e1461063b578063462416fb146106a95780635136e9f0146106c7578063524d5614146106f5576101fb565b8063144fa6d71161019257806327e235e31161016157806327e235e3146105235780632a16cca41461057b5780632b48e14f146105df578063366313cd1461060d576101fb565b8063144fa6d71461043557806319bb8b2b146104795780631cc83cc81461049757806323b872dd146104b5576101fb565b8063095ea7b3116101ce578063095ea7b3146103315780630d95e0541461037f5780630e35892a146103f95780631125b36914610417576101fb565b806301ffc9a714610200578063025e7c271461026357806305c8c51f146102bb578063081812fc146102d9575b600080fd5b61024b6004803603602081101561021657600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610b54565b60405180821515815260200191505060405180910390f35b61028f6004803603602081101561027957600080fd5b8101908080359060200190929190505050610bf4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102c3610c27565b6040518082815260200191505060405180910390f35b610305600480360360208110156102ef57600080fd5b8101908080359060200190929190505050610c2d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61037d6004803603604081101561034757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d44565b005b6103e16004803603604081101561039557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f11565b60405180821515815260200191505060405180910390f35b610401610f40565b6040518082815260200191505060405180910390f35b61041f610f46565b6040518082815260200191505060405180910390f35b6104776004803603602081101561044b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f4c565b005b610481611083565b6040518082815260200191505060405180910390f35b61049f611089565b6040518082815260200191505060405180910390f35b610521600480360360608110156104cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061108f565b005b6105656004803603602081101561053957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061111b565b6040518082815260200191505060405180910390f35b6105c76004803603604081101561059157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611133565b60405180821515815260200191505060405180910390f35b61060b600480360360208110156105f557600080fd5b810190808035906020019092919050505061129d565b005b6106396004803603602081101561062357600080fd5b8101908080359060200190929190505050611394565b005b6106a76004803603606081101561065157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061148b565b005b6106b16114ab565b6040518082815260200191505060405180910390f35b6106f3600480360360208110156106dd57600080fd5b81019080803590602001909291905050506114b1565b005b6106fd6115a8565b6040518082815260200191505060405180910390f35b61073f6004803603602081101561072957600080fd5b81019080803590602001909291905050506115ae565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107ad6004803603602081101561078157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611692565b6040518082815260200191505060405180910390f35b6107cb6116db565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108456004803603604081101561080d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611701565b005b6108896004803603602081101561085d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611800565b005b6108b7600480360360208110156108a157600080fd5b81019080803590602001909291905050506118b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109e6600480360360808110156108f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561096057600080fd5b82018360208201111561097257600080fd5b8035906020019184600183028401116401000000008311171561099457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506118e5565b005b610a14600480360360208110156109fe57600080fd5b8101908080359060200190929190505050611957565b005b610a4260048036036020811015610a2c57600080fd5b8101908080359060200190929190505050611a4e565b005b610a8660048036036020811015610a5a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c67565b005b610aea60048036036040811015610a9e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611de4565b60405180821515815260200191505060405180910390f35b610b0a611e78565b6040518082815260200191505060405180910390f35b610b286120ef565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bed57506301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60006020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4964656e746974793a20496e76616c696420746f6b656e49640000000000000081525060200191505060405180910390fd5b6003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b600080600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610d853383611133565b610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612aa66023913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612a056024913960400191505060405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60026020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60045481565b60065481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ff2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806129de6027913960400191505060405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa07c91c183e42229e705a9795a1c06d76528b673788b849597364528c96eefb781604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60095481565b60085481565b6110993382611133565b61110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4964656e746974793a20556e617070726f766564207472616e7366657200000081525060200191505060405180910390fd5b611116838383612115565b505050565b60016020528060005260406000206000915090505481565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061122b5750600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061129457508373ffffffffffffffffffffffffffffffffffffffff166003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806129de6027913960400191505060405180910390fd5b60006008549050816008819055507f83852ab2053e9c6d7580771afc4718e13285bcc5626cf6ec71da035b97ced87a8183604051808381526020018281526020019250505060405180910390a15050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461143a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806129de6027913960400191505060405180910390fd5b60006005549050816005819055507fcb14f34c15d91ce3c9acc6d7dc9c81ae7e2f88e086edec371e7bb6d431837c9e8183604051808381526020018281526020019250505060405180910390a15050565b6114a6838383604051806020016040528060008152506118e5565b505050565b60075481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611557576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806129de6027913960400191505060405180910390fd5b60006007549050816007819055507f16b5f9f8c3e931dde9aa9d846d1c253d5ce95b8ab4d3be55c7c62fd27ca8a2758183604051808381526020018281526020019250505060405180910390a15050565b60055481565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4e6f207375636820746f6b656e0000000000000000000000000000000000000081525060200191505060405180910390fd5b80915050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806129de6027913960400191505060405180910390fd5b6118af8161253b565b50565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118f084848461108f565b6118fc848484846127e9565b611951576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806129aa6034913960400191505060405180910390fd5b50505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806129de6027913960400191505060405180910390fd5b60006004549050816004819055507f8b434fc6caa376028492810d5776564ed5066aed838b7f5dc02a78c88bd04cc98183604051808381526020018281526020019250505060405180910390a15050565b6000611a58611e78565b90508082101580611a695750600082145b611abe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612a7a602c913960400191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd336000846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611b7057600080fd5b505af1158015611b84573d6000803e3d6000fd5b505050506040513d6020811015611b9a57600080fd5b810190808051906020019092919050505050611bb53361253b565b600554817382d7630c5eb722557de6d76575c9a7b8de718500631d3b9edf90916004546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611c1357600080fd5b505af4158015611c27573d6000803e3d6000fd5b505050506040513d6020811015611c3d57600080fd5b810190808051906020019092919050505081611c5557fe5b0460068190555043600a819055505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806129de6027913960400191505060405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f8caf0a9df2e1da9becb3ebfb8a56e83121a5b3f6c5622f715a939ec29c54dfdf8183604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806007547382d7630c5eb722557de6d76575c9a7b8de718500631d3b9edf9091437382d7630c5eb722557de6d76575c9a7b8de71850063f4f3bdc19091600a546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611ef557600080fd5b505af4158015611f09573d6000803e3d6000fd5b505050506040513d6020811015611f1f57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611f6b57600080fd5b505af4158015611f7f573d6000803e3d6000fd5b505050506040513d6020811015611f9557600080fd5b81019080805190602001909291905050509050807382d7630c5eb722557de6d76575c9a7b8de7185006366098d4f90916008546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561200357600080fd5b505af4158015612017573d6000803e3d6000fd5b505050506040513d602081101561202d57600080fd5b81019080805190602001909291905050506006541015612052576008549150506120ec565b6006547382d7630c5eb722557de6d76575c9a7b8de71850063f4f3bdc19091836040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156120ad57600080fd5b505af41580156120c1573d6000803e3d6000fd5b505050506040513d60208110156120d757600080fd5b81019080805190602001909291905050509150505b90565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b8273ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612a4f602b913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612251576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612a296026913960400191505060405180910390fd5b61225c600082610d44565b8160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020547382d7630c5eb722557de6d76575c9a7b8de71850063f4f3bdc1909160016040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561234657600080fd5b505af415801561235a573d6000803e3d6000fd5b505050506040513d602081101561237057600080fd5b8101908080519060200190929190505050600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020547382d7630c5eb722557de6d76575c9a7b8de7185006366098d4f909160016040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561245d57600080fd5b505af4158015612471573d6000803e3d6000fd5b505050506040513d602081101561248757600080fd5b8101908080519060200190929190505050600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6009547382d7630c5eb722557de6d76575c9a7b8de7185006366098d4f909160016040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561259757600080fd5b505af41580156125ab573d6000803e3d6000fd5b505050506040513d60208110156125c157600080fd5b810190808051906020019092919050505060098190555080600080600954815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020547382d7630c5eb722557de6d76575c9a7b8de7185006366098d4f909160016040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156126c457600080fd5b505af41580156126d8573d6000803e3d6000fd5b505050506040513d60208110156126ee57600080fd5b8101908080519060200190929190505050600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506009548173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46009548173ffffffffffffffffffffffffffffffffffffffff167fe8d47b56e8cdfa95f871b19d4f50a857217c44a95502b0811a350fec1500dd6760405160405180910390a350565b60006127f484612996565b612801576001905061298e565b600084905060008173ffffffffffffffffffffffffffffffffffffffff1663150b7a02888888886040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156128b557808201518184015260208101905061289a565b50505050905090810190601f1680156128e25780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b505050506040513d602081101561292e57600080fd5b81019080805190602001909291905050509050807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191663150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050505b949350505050565b600080823b90506000811191505091905056fe4964656e746974793a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724964656e746974793a204f6e6c79206d616e6167656d656e74206d61792063616c6c20746869734964656e746974793a20417070726f76696e672073656c66206e6f7420616c6c6f7765644964656e746974793a207472616e7366657220746f20746865207a65726f20616464726573734964656e746974793a205472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4964656e746974793a2063757272656e7420707269636520657863656564732075736572206d6178696d756d4964656e746974793a204e6f7420617574686f72697a656420746f20617070726f7665a26469706673582212206733bb9ceb3b8e55ed006e5c85c3c2f5992025c64a3d50616832e57061796a7664736f6c63430007040033

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

000000000000000000000000288fe43139741f91a8cbb6f4add83811c794851b

-----Decoded View---------------
Arg [0] : mgmt (address): 0x288fE43139741F91a8Cbb6F4adD83811c794851b

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000288fe43139741f91a8cbb6f4add83811c794851b


Libraries Used


Deployed Bytecode Sourcemap

3549:15371:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18709:208;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3606:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5517:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15354:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14130:365;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3747:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5187:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5280:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7491:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5482:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5430:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11976:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3651:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16083:286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10191:233;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9603:324;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13637:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5377:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9933:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5231:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11205:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10843:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5553:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14888:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8263:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3824:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13017:264;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9318:279;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7716:461;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9124:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15876:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8678:332;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5585:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18709:208;18779:4;5024:10;18831:19;;18816:34;;;:11;:34;;;;:84;;;;5170:10;18881:19;;18866:34;;;:11;:34;;;;18816:84;18795:115;;18709:208;;;:::o;3606:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;5517:29::-;;;;:::o;15354:225::-;15415:7;15434:13;15450:6;:15;15457:7;15450:15;;;;;;;;;;;;;;;;;;;;;15434:31;;15500:1;15483:19;;:5;:19;;;;15475:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15549:14;:23;15564:7;15549:23;;;;;;;;;;;;;;;;;;;;;15542:30;;;15354:225;;;:::o;14130:365::-;14199:13;14215:6;:15;14222:7;14215:15;;;;;;;;;;;;;;;;;;;;;14199:31;;14248;14259:10;14271:7;14248:10;:31::i;:::-;14240:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14346:8;14337:17;;:5;:17;;;;14329:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14431:8;14405:14;:23;14420:7;14405:23;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;14480:7;14470:8;14454:34;;14463:5;14454:34;;;;;;;;;;;;14130:365;;;:::o;3747:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5187:38::-;;;;:::o;5280:45::-;;;;:::o;7491:135::-;7305:10;;;;;;;;;;;7291:24;;:10;:24;;;7282:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7575:9:::1;7560:5;;:25;;;;;;;;;;;;;;;;;;7600:19;7609:9;7600:19;;;;;;;;;;;;;;;;;;;;7491:135:::0;:::o;5482:29::-;;;;:::o;5430:46::-;;;;:::o;11976:199::-;12066:31;12077:10;12089:7;12066:10;:31::i;:::-;12058:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12141:27;12150:4;12156:2;12160:7;12141:8;:27::i;:::-;11976:199;;;:::o;3651:41::-;;;;;;;;;;;;;;;;;:::o;16083:286::-;16156:4;16172:13;16188:6;:15;16195:7;16188:15;;;;;;;;;;;;;;;;;;;;;16172:31;;16246:5;16234:17;;:8;:17;;;:67;;;;16267:17;:24;16285:5;16267:24;;;;;;;;;;;;;;;:34;16292:8;16267:34;;;;;;;;;;;;;;;;;;;;;;;;;16234:67;:118;;;;16344:8;16317:35;;:14;:23;16332:7;16317:23;;;;;;;;;;;;;;;;;;;;;:35;;;16234:118;16213:149;;;16083:286;;;;:::o;10191:233::-;7305:10;;;;;;;;;;;7291:24;;:10;:24;;;7282:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10274:13:::1;10290:18;;10274:34;;10339:13;10318:18;:34;;;;10367:50;10393:8;10403:13;10367:50;;;;;;;;;;;;;;;;;;;;;;;;7369:1;10191:233:::0;:::o;9603:324::-;7305:10;;;;;;;;;;;7291:24;;:10;:24;;;7282:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9704:27:::1;9734;;9704:57;;9801:22;9771:27;:52;;;;9838:82;9873:22;9897;9838:82;;;;;;;;;;;;;;;;;;;;;;;;7369:1;9603:324:::0;:::o;13637:132::-;13723:39;13740:4;13746:2;13750:7;13723:39;;;;;;;;;;;;:16;:39::i;:::-;13637:132;;;:::o;5377:47::-;;;;:::o;9933:252::-;7305:10;;;;;;;;;;;7291:24;;:10;:24;;;7282:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10018:19:::1;10040;;10018:41;;10091:14;10069:19;:36;;;;10120:58;10147:14;10163;10120:58;;;;;;;;;;;;;;;;;;;;;;;;7369:1;9933:252:::0;:::o;5231:43::-;;;;:::o;11205:192::-;11262:7;11282:13;11298:6;:15;11305:7;11298:15;;;;;;;;;;;;;;;;;;;;;11282:31;;11348:1;11331:19;;:5;:19;;;;11323:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11385:5;11378:12;;;11205:192;;;:::o;10843:105::-;10900:7;10926:8;:15;10935:5;10926:15;;;;;;;;;;;;;;;;10919:22;;10843:105;;;:::o;5553:25::-;;;;;;;;;;;;;:::o;14888:197::-;15009:8;14967:17;:29;14985:10;14967:29;;;;;;;;;;;;;;;:39;14997:8;14967:39;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;15059:8;15032:46;;15047:10;15032:46;;;15069:8;15032:46;;;;;;;;;;;;;;;;;;;;14888:197;;:::o;8263:102::-;7305:10;;;;;;;;;;;7291:24;;:10;:24;;;7282:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8337:21:::1;8352:5;8337:14;:21::i;:::-;8263:102:::0;:::o;3824:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;13017:264::-;13122:31;13135:4;13141:2;13145:7;13122:12;:31::i;:::-;13171:46;13193:4;13199:2;13203:7;13212:4;13171:21;:46::i;:::-;13163:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13017:264;;;;:::o;9318:279::-;7305:10;;;;;;;;;;;7291:24;;:10;:24;;;7282:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9409:22:::1;9434;;9409:47;;9491:17;9466:22;:42;;;;9523:67;9553:17;9572;9523:67;;;;;;;;;;;;;;;;;;;;;;;;7369:1;9318:279:::0;:::o;7716:461::-;7774:18;7795;:16;:18::i;:::-;7774:39;;7843:13;7831:8;:25;;:42;;;;7872:1;7860:8;:13;7831:42;7823:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7932:5;;;;;;;;;;;:18;;;7951:10;7971:1;7975:13;7932:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7999:26;8014:10;7999:14;:26::i;:::-;8101:27;;8055:13;:19;;;;8075:22;;8055:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:73;;;;;;8035:17;:93;;;;8158:12;8138:17;:32;;;;7716:461;;:::o;9124:188::-;7305:10;;;;;;;;;;;7291:24;;:10;:24;;;7282:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9196:15:::1;9215:10;;;;;;;;;;;9196:29;;9248:7;9235:10;;:20;;;;;;;;;;;;;;;;;;9270:35;9288:7;9297;9270:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;7369:1;9124:188:::0;:::o;15876:144::-;15956:4;15979:17;:24;15997:5;15979:24;;;;;;;;;;;;;;;:34;16004:8;15979:34;;;;;;;;;;;;;;;;;;;;;;;;;15972:41;;15876:144;;;;:::o;8678:332::-;8727:4;8743:10;8756:19;;:25;;;;8782:12;:18;;;;8801:17;;8782:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8756:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8743:77;;8854:5;:10;;;;8865:18;;8854:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8834:17;;:50;8830:174;;;8907:18;;8900:25;;;;;8830:174;8963:17;;:23;;;;8987:5;8963:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8956:37;;;8678:332;;:::o;5585:19::-;;;;;;;;;;;;;:::o;16611:502::-;16718:4;16699:23;;:6;:15;16706:7;16699:15;;;;;;;;;;;;;;;;;;;;;:23;;;16691:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16802:1;16788:16;;:2;:16;;;;16780:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16909:28;16925:1;16929:7;16909;:28::i;:::-;16966:2;16948:6;:15;16955:7;16948:15;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;16995:8;:14;17004:4;16995:14;;;;;;;;;;;;;;;;:20;;;;17016:1;16995:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16978:8;:14;16987:4;16978:14;;;;;;;;;;;;;;;:40;;;;17043:8;:12;17052:2;17043:12;;;;;;;;;;;;;;;;:17;;;;17061:1;17043:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17028:8;:12;17037:2;17028:12;;;;;;;;;;;;;;;:35;;;;17098:7;17094:2;17079:27;;17088:4;17079:27;;;;;;;;;;;;16611:502;;;:::o;8371:301::-;8445:13;;:18;;;;8464:1;8445:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8429:13;:37;;;;8500:5;8476:6;:21;8483:13;;8476:21;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;8533:8;:15;8542:5;8533:15;;;;;;;;;;;;;;;;:20;;;;8554:1;8533:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8515:8;:15;8524:5;8515:15;;;;;;;;;;;;;;;:41;;;;8599:13;;8592:5;8571:42;;8588:1;8571:42;;;;;;;;;;;;8651:13;;8644:5;8628:37;;;;;;;;;;;;8371:301;:::o;17987:371::-;18105:4;18130:14;18141:2;18130:10;:14::i;:::-;18125:57;;18167:4;18160:11;;;;18125:57;18191:22;18232:2;18191:44;;18245:13;18261:6;:23;;;18285:4;18291:2;18295:7;18304:4;18261:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18245:64;;18345:6;18326:25;;;4092:10;18326:15;;:25;;;;18319:32;;;;17987:371;;;;;;;:::o;17119:316::-;17179:4;17285:12;17394:7;17382:20;17374:28;;17427:1;17420:4;:8;17413:15;;;17119:316;;;:::o

Swarm Source

ipfs://6733bb9ceb3b8e55ed006e5c85c3c2f5992025c64a3d50616832e57061796a76
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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