GLMR Price: $0.021118 (-4.05%)

Contract

0xd50248022D8b254De8923109664918f707e4D074

Overview

GLMR Balance

Moonbeam Chain LogoMoonbeam Chain LogoMoonbeam Chain Logo0 GLMR

GLMR Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Start Mission107661142025-05-07 6:23:00263 days ago1746598980IN
0xd5024802...707e4D074
0 GLMR0.0087489431.3070505
Pay Fee107661092025-05-07 6:22:36263 days ago1746598956IN
0xd5024802...707e4D074
0.3 GLMR0.0730202833
Start Mission101658832025-03-25 6:37:00306 days ago1742884620IN
0xd5024802...707e4D074
0 GLMR0.00873331.25
Pay Fee101658802025-03-25 6:36:42306 days ago1742884602IN
0xd5024802...707e4D074
0.3 GLMR0.0724838732.75
Start Mission99471082025-03-09 19:14:06321 days ago1741547646IN
0xd5024802...707e4D074
0 GLMR0.00872131.25
Pay Fee99471062025-03-09 19:13:54321 days ago1741547634IN
0xd5024802...707e4D074
0.3 GLMR0.06914631.25
Start Mission95874402025-02-12 10:48:18346 days ago1739357298IN
0xd5024802...707e4D074
0 GLMR0.00872131.25
Pay Fee95874372025-02-12 10:48:06346 days ago1739357286IN
0xd5024802...707e4D074
0.3 GLMR0.06914631.25
Pay Fee92221422025-01-17 16:19:54372 days ago1737130794IN
0xd5024802...707e4D074
0.3 GLMR0.276584125
End Mission91374442025-01-11 16:29:54378 days ago1736612994IN
0xd5024802...707e4D074
0 GLMR0.327636125
Start Mission91374362025-01-11 16:29:06378 days ago1736612946IN
0xd5024802...707e4D074
0 GLMR0.034884125
Pay Fee91374292025-01-11 16:28:24378 days ago1736612904IN
0xd5024802...707e4D074
0.3 GLMR0.276584125
Set Uint Attribu...91374122025-01-11 16:26:42378 days ago1736612802IN
0xd5024802...707e4D074
0 GLMR0.143192250
Set Uint Attribu...91374102025-01-11 16:26:12378 days ago1736612772IN
0xd5024802...707e4D074
0 GLMR0.143192250
Set Uint Attribu...91374072025-01-11 16:25:54378 days ago1736612754IN
0xd5024802...707e4D074
0 GLMR0.143192250
Set Uint Attribu...91373972025-01-11 16:24:54378 days ago1736612694IN
0xd5024802...707e4D074
0 GLMR0.143192250
End Mission91373662025-01-11 16:21:48378 days ago1736612508IN
0xd5024802...707e4D074
0 GLMR0.327636125
Start Mission91372852025-01-11 16:13:36378 days ago1736612016IN
0xd5024802...707e4D074
0 GLMR0.034884125
Pay Fee91372772025-01-11 16:12:48378 days ago1736611968IN
0xd5024802...707e4D074
0.3 GLMR0.276584125
Set Uint Attribu...91372572025-01-11 16:10:48378 days ago1736611848IN
0xd5024802...707e4D074
0 GLMR0.143192250
Set Uint Attribu...91372572025-01-11 16:10:48378 days ago1736611848IN
0xd5024802...707e4D074
0 GLMR0.143192250
Set Uint Attribu...91372542025-01-11 16:10:30378 days ago1736611830IN
0xd5024802...707e4D074
0 GLMR0.143192250
Set Uint Attribu...91372512025-01-11 16:10:12378 days ago1736611812IN
0xd5024802...707e4D074
0 GLMR0.143192250
End Mission91371352025-01-11 15:58:24378 days ago1736611104IN
0xd5024802...707e4D074
0 GLMR0.032628125
End Mission91371352025-01-11 15:58:24378 days ago1736611104IN
0xd5024802...707e4D074
0 GLMR0.032628125
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
107661092025-05-07 6:22:36263 days ago1746598956
0xd5024802...707e4D074
0.3 GLMR
101658802025-03-25 6:36:42306 days ago1742884602
0xd5024802...707e4D074
0.3 GLMR
99471062025-03-09 19:13:54321 days ago1741547634
0xd5024802...707e4D074
0.3 GLMR
95874372025-02-12 10:48:06346 days ago1739357286
0xd5024802...707e4D074
0.3 GLMR
92221422025-01-17 16:19:54372 days ago1737130794
0xd5024802...707e4D074
0.3 GLMR
91374292025-01-11 16:28:24378 days ago1736612904
0xd5024802...707e4D074
0.3 GLMR
91372772025-01-11 16:12:48378 days ago1736611968
0xd5024802...707e4D074
0.3 GLMR
91371062025-01-11 15:55:12378 days ago1736610912
0xd5024802...707e4D074
0.3 GLMR
91230812025-01-10 15:54:48379 days ago1736524488
0xd5024802...707e4D074
0.3 GLMR
91227012025-01-10 15:16:00379 days ago1736522160
0xd5024802...707e4D074
0.3 GLMR
91222902025-01-10 14:34:36379 days ago1736519676
0xd5024802...707e4D074
0.3 GLMR
91221462025-01-10 14:20:00379 days ago1736518800
0xd5024802...707e4D074
0.3 GLMR
91220592025-01-10 14:10:54379 days ago1736518254
0xd5024802...707e4D074
0.3 GLMR
91216562025-01-10 13:30:24379 days ago1736515824
0xd5024802...707e4D074
0.3 GLMR
91098322025-01-09 17:25:48380 days ago1736443548
0xd5024802...707e4D074
0.3 GLMR
90806392025-01-07 15:50:42382 days ago1736265042
0xd5024802...707e4D074
0.3 GLMR
88416572024-12-21 18:58:00399 days ago1734807480
0xd5024802...707e4D074
0.3 GLMR
87329642024-12-13 17:53:54407 days ago1734112434
0xd5024802...707e4D074
0.3 GLMR
84279332024-11-21 21:47:06429 days ago1732225626
0xd5024802...707e4D074
0.3 GLMR
79141742024-10-16 13:13:54465 days ago1729084434
0xd5024802...707e4D074
0.3 GLMR
78908392024-10-14 21:55:42467 days ago1728942942
0xd5024802...707e4D074
0.3 GLMR
77545312024-10-05 8:01:24477 days ago1728115284
0xd5024802...707e4D074
0.3 GLMR
76833372024-09-30 7:30:24482 days ago1727681424
0xd5024802...707e4D074
0.3 GLMR
76821572024-09-30 5:31:36482 days ago1727674296
0xd5024802...707e4D074
0.3 GLMR
76810112024-09-30 3:36:24482 days ago1727667384
0xd5024802...707e4D074
0.3 GLMR
View All Internal Transactions
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AgeOfChronosManager

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
london EvmVersion
File 1 of 1 : AgeOfChronosManager.sol
// SPDX-License-Identifier: Apache-2.0

/************************************************
 **        Manager Contract for AgeOfChronos    **
 **        Made by @ercole89 for SFY Labs       **
 **            [email protected]            **
 ************************************************/

pragma solidity ^0.8.21;

interface IParent {
    function setSoulbound(uint256 tokenId, bool state) external;

    function ownerOf(uint256 tokenId) external view returns (address);

    function totalSupply() external view returns (uint256);
}

interface IChild {
    function setSoulbound(uint256 tokenId, bool state) external;

    function ownerOf(uint256 tokenId) external view returns (address);

    function setExternalPermission(address account, bool permission) external;
}

interface IAttributeManager {
    function setUintAttribute(
        address collection,
        uint256 tokenId,
        string memory key,
        uint256 value
    ) external;

    function getUintAttribute(
        address collection,
        uint256 tokenId,
        string memory key
    ) external view returns (uint256);
}

contract AgeOfChronosManager {
    address public owner;
    address public externalAccount;
    mapping(address => bool) public contributors;

    address public rykerCollection;
    address public lunaCollection;
    address public ariaCollection;
    address public thaddeusCollection;

    address public ariaBodyCollection;
    address public ariaHeadCollection;
    address public ariaLeftHandCollection;
    address public ariaRightHandCollection;

    address public lunaBodyCollection;
    address public lunaHeadCollection;
    address public lunaLeftHandCollection;
    address public lunaRightHandCollection;

    address public rykerBodyCollection;
    address public rykerHeadCollection;
    address public rykerLeftHandCollection;
    address public rykerRightHandCollection;

    address public thaddeusBodyCollection;
    address public thaddeusHeadCollection;
    address public thaddeusLeftHandCollection;
    address public thaddeusRightHandCollection;

    uint256 public fee; // Variable to store the fee amount in wei
    address public contractAddress7508; // the ERC7508

    string public feeAttributeKey;
    uint256 public feeAttributeValue;

    mapping(address => mapping(uint256 => bool)) private inMission; // Mapping to track if a token is in a mission
    mapping(address => mapping(uint256 => bool)) private hasPaidFee; // Mapping to track who has paid the fee

    string public name;

    modifier onlyOwner() {
        require(msg.sender == owner, "Caller is not the owner");
        _;
    }

    modifier onlyOwnerOrContributor() {
        require(
            msg.sender == owner || contributors[msg.sender],
            "Caller is not the owner or contributor"
        );
        _;
    }

    event MissionStarted(
        uint256 rykerTokenId,
        uint256 lunaTokenId,
        uint256 ariaTokenId,
        uint256 thaddeusTokenId,
        string key,
        address player
    );

    event MissionEnded(
        uint256 rykerTokenId,
        uint256 lunaTokenId,
        uint256 ariaTokenId,
        uint256 thaddeusTokenId,
        uint16 childToken,
        string key,
        address player
    );

    event FeePaid(
        address player,
        uint256 rykerTokenId,
        uint256 lunaTokenId,
        uint256 ariaTokenId,
        uint256 thaddeusTokenId
    );

    event ExternalAccountSet(address account);

    /**
     * @notice Sets the deployer as the owner upon contract creation.
     */
    constructor() {
        owner = msg.sender;
        name = "ManagerAgeOfChronos"; // Adjusted the name
    }

    /**
     * @notice Sets the fee amount. Only callable by the owner.
     * @param _fee The new fee amount.
     */
    function setFee(uint256 _fee) external onlyOwner {
        fee = _fee;
    }

    /**
     * @notice Returns the fee amount.
     * @return The fee amount.
     */
    function getFee() external view returns (uint256) {
        return fee;
    }

    /**
     * @notice Sets the 7508 contract address. Only callable by the owner.
     * @param _contractAddress7508 The new 7508 contract address.
     */
    function set7508Address(address _contractAddress7508) external onlyOwner {
        contractAddress7508 = _contractAddress7508;
    }

    /**
     * @notice Returns the 7508 contract address.
     * @return The 7508 contract address.
     */
    function getContractAddress7508() external view returns (address) {
        return contractAddress7508;
    }

    /**
     * @notice Sets the external account to receive fees. Only callable by the owner.
     * @param _externalAccount The address of the external account.
     */
    function setExternalAccount(address _externalAccount) external onlyOwner {
        externalAccount = _externalAccount;
        emit ExternalAccountSet(_externalAccount);
    }

    /**
     * @notice Returns the external account address.
     * @return The external account address.
     */
    function getExternalAccount() external view returns (address) {
        return externalAccount;
    }

    /**
     * @notice Sets the attribute key and value for fee payment check. Only callable by the owner.
     * @param key The attribute key.
     * @param value The attribute value.
     */
    function setFeeAttribute(
        string memory key,
        uint256 value
    ) external onlyOwner {
        feeAttributeKey = key;
        feeAttributeValue = value;
    }

    /**
     * @notice Allows a user to pay the fee for multiple tokens. The fee must match the preset amount.
     * @param rykerTokenId The token ID for Ryker.
     * @param lunaTokenId The token ID for Luna.
     * @param ariaTokenId The token ID for Aria.
     * @param thaddeusTokenId The token ID for Thaddeus.
     */
    function payFee(
        uint256 rykerTokenId,
        uint256 lunaTokenId,
        uint256 ariaTokenId,
        uint256 thaddeusTokenId
    ) external payable {
        require(msg.value == fee, "Incorrect fee amount");
        require(
            tokenExists(rykerCollection, rykerTokenId) &&
                tokenExists(lunaCollection, lunaTokenId) &&
                tokenExists(ariaCollection, ariaTokenId) &&
                tokenExists(thaddeusCollection, thaddeusTokenId),
            "One or more tokens do not exist"
        );
        require(
            IParent(rykerCollection).ownerOf(rykerTokenId) == msg.sender,
            "Caller does not own the Ryker token"
        );
        require(
            IParent(lunaCollection).ownerOf(lunaTokenId) == msg.sender,
            "Caller does not own the Luna token"
        );
        require(
            IParent(ariaCollection).ownerOf(ariaTokenId) == msg.sender,
            "Caller does not own the Aria token"
        );
        require(
            IParent(thaddeusCollection).ownerOf(thaddeusTokenId) == msg.sender,
            "Caller does not own the Thaddeus token"
        );

        // Check if the attribute is already set to the required value
        require(
            IAttributeManager(contractAddress7508).getUintAttribute(
                rykerCollection,
                rykerTokenId,
                feeAttributeKey
            ) == feeAttributeValue &&
                IAttributeManager(contractAddress7508).getUintAttribute(
                    lunaCollection,
                    lunaTokenId,
                    feeAttributeKey
                ) == feeAttributeValue &&
                IAttributeManager(contractAddress7508).getUintAttribute(
                    ariaCollection,
                    ariaTokenId,
                    feeAttributeKey
                ) == feeAttributeValue &&
                IAttributeManager(contractAddress7508).getUintAttribute(
                    thaddeusCollection,
                    thaddeusTokenId,
                    feeAttributeKey
                ) == feeAttributeValue,
            "Attribute is not set to required value"
        );

        hasPaidFee[rykerCollection][rykerTokenId] = true;
        hasPaidFee[lunaCollection][lunaTokenId] = true;
        hasPaidFee[ariaCollection][ariaTokenId] = true;
        hasPaidFee[thaddeusCollection][thaddeusTokenId] = true;

        payable(externalAccount).transfer(msg.value);

        emit FeePaid(
            msg.sender,
            rykerTokenId,
            lunaTokenId,
            ariaTokenId,
            thaddeusTokenId
        );
    }

    /**
     * @notice Checks if a token has paid the fee.
     * @param collection The collection of the token to check.
     * @param tokenId The ID of the token to check.
     * @return True if the token has paid the fee, false otherwise.
     */
    function hasTokenPaidFee(
        address collection,
        uint256 tokenId
    ) external view returns (bool) {
        return hasPaidFee[collection][tokenId];
    }

    /**
     * @notice Sets the fee payment status of a token. Only callable by the owner or contributor.
     * @param rykerTokenId The token ID for Ryker.
     * @param lunaTokenId The token ID for Luna.
     * @param ariaTokenId The token ID for Aria.
     * @param thaddeusTokenId The token ID for Thaddeus.
     * @param status The new fee payment status (true for paid, false for not paid).
     */
    function setFeePaymentStatus(
        uint256 rykerTokenId,
        uint256 lunaTokenId,
        uint256 ariaTokenId,
        uint256 thaddeusTokenId,
        bool status
    ) external onlyOwnerOrContributor {
        hasPaidFee[rykerCollection][rykerTokenId] = status;
        hasPaidFee[lunaCollection][lunaTokenId] = status;
        hasPaidFee[ariaCollection][ariaTokenId] = status;
        hasPaidFee[thaddeusCollection][thaddeusTokenId] = status;
    }

    /**
     * @notice Sets the Ryker collection address. Only callable by the owner.
     * @param _rykerCollection The new Ryker collection address.
     */
    function setRykerCollection(address _rykerCollection) external onlyOwner {
        rykerCollection = _rykerCollection;
    }

    /**
     * @notice Sets the Luna collection address. Only callable by the owner.
     * @param _lunaCollection The new Luna collection address.
     */
    function setLunaCollection(address _lunaCollection) external onlyOwner {
        lunaCollection = _lunaCollection;
    }

    /**
     * @notice Sets the Aria collection address. Only callable by the owner.
     * @param _ariaCollection The new Aria collection address.
     */
    function setAriaCollection(address _ariaCollection) external onlyOwner {
        ariaCollection = _ariaCollection;
    }

    /**
     * @notice Sets the Thaddeus collection address. Only callable by the owner.
     * @param _thaddeusCollection The new Thaddeus collection address.
     */
    function setThaddeusCollection(
        address _thaddeusCollection
    ) external onlyOwner {
        thaddeusCollection = _thaddeusCollection;
    }

    /**
     * @notice Sets the addresses for all child collections. Only callable by the owner.
     * @param _childCollections An array containing the new addresses for the child collections.
     * The array must contain addresses in the following order:
     * [ariaBody, ariaHead, ariaLeftHand, ariaRightHand, lunaBody, lunaHead, lunaLeftHand, lunaRightHand,
     * rykerBody, rykerHead, rykerLeftHand, rykerRightHand, thaddeusBody, thaddeusHead, thaddeusLeftHand, thaddeusRightHand]
     */
    function setChildCollections(
        address[] calldata _childCollections
    ) external onlyOwner {
        require(_childCollections.length == 16, "Invalid number of addresses");

        ariaBodyCollection = _childCollections[0];
        ariaHeadCollection = _childCollections[1];
        ariaLeftHandCollection = _childCollections[2];
        ariaRightHandCollection = _childCollections[3];
        lunaBodyCollection = _childCollections[4];
        lunaHeadCollection = _childCollections[5];
        lunaLeftHandCollection = _childCollections[6];
        lunaRightHandCollection = _childCollections[7];
        rykerBodyCollection = _childCollections[8];
        rykerHeadCollection = _childCollections[9];
        rykerLeftHandCollection = _childCollections[10];
        rykerRightHandCollection = _childCollections[11];
        thaddeusBodyCollection = _childCollections[12];
        thaddeusHeadCollection = _childCollections[13];
        thaddeusLeftHandCollection = _childCollections[14];
        thaddeusRightHandCollection = _childCollections[15];
    }

    /**
     * @notice Adds a contributor. Only callable by the owner.
     * @param _contributor The address of the new contributor.
     */
    function addContributor(address _contributor) external onlyOwner {
        contributors[_contributor] = true;
    }

    /**
     * @notice Removes a contributor. Only callable by the owner.
     * @param _contributor The address of the contributor to remove.
     */
    function removeContributor(address _contributor) external onlyOwner {
        contributors[_contributor] = false;
    }

    /**
     * @notice Checks if an address is a contributor.
     * @param account The address to check.
     * @return True if the address is a contributor, false otherwise.
     */
    function isContributor(address account) public view returns (bool) {
        return contributors[account];
    }

    /**
     * @notice Starts a mission by setting the soulbound state for a list of tokens. Only callable by the owner or contributor.
     * @param rykerTokenId The token ID for Ryker.
     * @param lunaTokenId The token ID for Luna.
     * @param ariaTokenId The token ID for Aria.
     * @param thaddeusTokenId The token ID for Thaddeus.
     * @param key The attribute key.
     */
    function startMission(
        uint256 rykerTokenId,
        uint256 lunaTokenId,
        uint256 ariaTokenId,
        uint256 thaddeusTokenId,
        string memory key
    ) external onlyOwnerOrContributor {
        require(
            !inMission[rykerCollection][rykerTokenId] ||
                !inMission[lunaCollection][lunaTokenId] ||
                !inMission[ariaCollection][ariaTokenId] ||
                !inMission[thaddeusCollection][thaddeusTokenId],
            "One or more tokens are already in a mission"
        );
        require(
            hasPaidFee[rykerCollection][rykerTokenId] &&
                hasPaidFee[lunaCollection][lunaTokenId] &&
                hasPaidFee[ariaCollection][ariaTokenId] &&
                hasPaidFee[thaddeusCollection][thaddeusTokenId],
            "One or more tokens have not paid the fee"
        );

        inMission[rykerCollection][rykerTokenId] = true;
        inMission[lunaCollection][lunaTokenId] = true;
        inMission[ariaCollection][ariaTokenId] = true;
        inMission[thaddeusCollection][thaddeusTokenId] = true;

        emit MissionStarted(
            rykerTokenId,
            lunaTokenId,
            ariaTokenId,
            thaddeusTokenId,
            key,
            msg.sender
        );
    }

    /**
     * @notice Ends a mission by resetting the soulbound state for a list of tokens and granting external permission. Only callable by the owner or contributor.
     * @param rykerTokenId The token ID for Ryker.
     * @param lunaTokenId The token ID for Luna.
     * @param ariaTokenId The token ID for Aria.
     * @param thaddeusTokenId The token ID for Thaddeus.
     * @param key The attribute key.
     * @param whichChild Specifies which child's permission to set (1-16).
     */
    function endMission(
        uint256 rykerTokenId,
        uint256 lunaTokenId,
        uint256 ariaTokenId,
        uint256 thaddeusTokenId,
        uint16 whichChild,
        string memory key
    ) external onlyOwnerOrContributor {
        require(
            inMission[rykerCollection][rykerTokenId] &&
                inMission[lunaCollection][lunaTokenId] &&
                inMission[ariaCollection][ariaTokenId] &&
                inMission[thaddeusCollection][thaddeusTokenId],
            "One or more tokens are not currently in a mission"
        );

        IParent(rykerCollection).setSoulbound(rykerTokenId, false);
        IParent(lunaCollection).setSoulbound(lunaTokenId, false);
        IParent(ariaCollection).setSoulbound(ariaTokenId, false);
        IParent(thaddeusCollection).setSoulbound(thaddeusTokenId, false);

        // Array of child collections
        address[16] memory childCollections = [
            ariaBodyCollection,
            ariaHeadCollection,
            ariaLeftHandCollection,
            ariaRightHandCollection,
            lunaBodyCollection,
            lunaHeadCollection,
            lunaLeftHandCollection,
            lunaRightHandCollection,
            rykerBodyCollection,
            rykerHeadCollection,
            rykerLeftHandCollection,
            rykerRightHandCollection,
            thaddeusBodyCollection,
            thaddeusHeadCollection,
            thaddeusLeftHandCollection,
            thaddeusRightHandCollection
        ];

        require(whichChild > 0 && whichChild <= 16, "Invalid whichChild value");

        address childCollection = childCollections[whichChild - 1];
        IChild(childCollection).setExternalPermission(
            IParent(rykerCollection).ownerOf(rykerTokenId),
            true
        );

        inMission[rykerCollection][rykerTokenId] = false;
        inMission[lunaCollection][lunaTokenId] = false;
        inMission[ariaCollection][ariaTokenId] = false;
        inMission[thaddeusCollection][thaddeusTokenId] = false;

        hasPaidFee[rykerCollection][rykerTokenId] = false;
        hasPaidFee[lunaCollection][lunaTokenId] = false;
        hasPaidFee[ariaCollection][ariaTokenId] = false;
        hasPaidFee[thaddeusCollection][thaddeusTokenId] = false;

        uint256 rykerValue = IAttributeManager(contractAddress7508)
            .getUintAttribute(rykerCollection, rykerTokenId, key);
        uint256 lunaValue = IAttributeManager(contractAddress7508).getUintAttribute(
            lunaCollection,
            lunaTokenId,
            key
        );
        uint256 ariaValue = IAttributeManager(contractAddress7508).getUintAttribute(
            ariaCollection,
            ariaTokenId,
            key
        );
        uint256 thaddeusValue = IAttributeManager(contractAddress7508)
            .getUintAttribute(thaddeusCollection, thaddeusTokenId, key);

        rykerValue++;
        lunaValue++;
        ariaValue++;
        thaddeusValue++;

        IAttributeManager(contractAddress7508).setUintAttribute(
            rykerCollection,
            rykerTokenId,
            key,
            rykerValue
        );
        IAttributeManager(contractAddress7508).setUintAttribute(
            lunaCollection,
            lunaTokenId,
            key,
            lunaValue
        );
        IAttributeManager(contractAddress7508).setUintAttribute(
            ariaCollection,
            ariaTokenId,
            key,
            ariaValue
        );
        IAttributeManager(contractAddress7508).setUintAttribute(
            thaddeusCollection,
            thaddeusTokenId,
            key,
            thaddeusValue
        );

        emit MissionEnded(
            rykerTokenId,
            lunaTokenId,
            ariaTokenId,
            thaddeusTokenId,
            whichChild,
            key,
            msg.sender
        );
    }

    /**
     * @notice Checks if a given token is currently in a mission.
     * @param collection The collection address.
     * @param tokenId The token ID to check.
     * @return True if the token is in a mission, false otherwise.
     */
    function isTokenInMission(
        address collection,
        uint256 tokenId
    ) external view returns (bool) {
        return inMission[collection][tokenId];
    }

    /**
     * @notice Returns the list of collection addresses.
     * @return An array of collection addresses.
     */
    function getCollectionAddresses() external view returns (address[] memory) {
        address[] memory collections = new address[](4);
        collections[0] = rykerCollection;
        collections[1] = lunaCollection;
        collections[2] = ariaCollection;
        collections[3] = thaddeusCollection;
        return collections;
    }

    /**
     * @notice Returns the list of child collection addresses.
     * @return An array of child collection addresses.
     */
    function getChildCollectionAddresses() external view returns (address[] memory) {
        address[] memory childCollections = new address[](16);
        childCollections[0] = ariaBodyCollection;
        childCollections[1] = ariaHeadCollection;
        childCollections[2] = ariaLeftHandCollection;
        childCollections[3] = ariaRightHandCollection;   
        childCollections[4] = lunaBodyCollection;
        childCollections[5] = lunaHeadCollection;
        childCollections[6] = lunaLeftHandCollection;
        childCollections[7] = lunaRightHandCollection;
        childCollections[8] = rykerBodyCollection;
        childCollections[9] = rykerHeadCollection;
        childCollections[10] = rykerLeftHandCollection;
        childCollections[11] = rykerRightHandCollection;
        childCollections[12] = thaddeusBodyCollection;
        childCollections[13] = thaddeusHeadCollection;
        childCollections[14] = thaddeusLeftHandCollection;
        childCollections[15] = thaddeusRightHandCollection;
        return childCollections;
    }

    /**
     * @dev Internal function to check if a token exists in the collection.
     * @param collection The address of the collection contract.
     * @param tokenId The token ID to check.
     * @return True if the token exists, false otherwise.
     */
    function tokenExists(
        address collection,
        uint256 tokenId
    ) internal view returns (bool) {
        return tokenId <= IParent(collection).totalSupply();
    }

    /**
     * @dev Internal function to check if a token exists in the collection.
     * @param collection The address of the collection contract.
     * @param tokenId The token ID to check.
     * @return True if the token exists, false otherwise.
     */
    function isTokenExists(
        address collection,
        uint256 tokenId
    ) external view returns (bool) {
        return tokenExists(collection, tokenId);
    }

    /**
     * @notice Sets a uint attribute for a token in a specified collection.
     * @param collection The address of the collection contract.
     * @param tokenId The token ID.
     * @param key The attribute key.
     * @param value The attribute value.
     */
    function setUintAttribute(
        address collection,
        uint256 tokenId,
        string memory key,
        uint256 value
    ) external onlyOwnerOrContributor {
        IAttributeManager(contractAddress7508).setUintAttribute(
            collection,
            tokenId,
            key,
            value
        );
    }

    /**
     * @notice Gets a uint attribute for a token in a specified collection.
     * @param collection The address of the collection contract.
     * @param tokenId The token ID.
     * @param key The attribute key.
     * @return The attribute value.
     */
    function getUintAttribute(
        address collection,
        uint256 tokenId,
        string memory key
    ) external view returns (uint256) {
        return
            IAttributeManager(contractAddress7508).getUintAttribute(
                collection,
                tokenId,
                key
            );
    }
}

Settings
{
  "evmVersion": "london",
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"ExternalAccountSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"rykerTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lunaTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ariaTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"thaddeusTokenId","type":"uint256"}],"name":"FeePaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rykerTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lunaTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ariaTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"thaddeusTokenId","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"childToken","type":"uint16"},{"indexed":false,"internalType":"string","name":"key","type":"string"},{"indexed":false,"internalType":"address","name":"player","type":"address"}],"name":"MissionEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rykerTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lunaTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ariaTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"thaddeusTokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"key","type":"string"},{"indexed":false,"internalType":"address","name":"player","type":"address"}],"name":"MissionStarted","type":"event"},{"inputs":[{"internalType":"address","name":"_contributor","type":"address"}],"name":"addContributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ariaBodyCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ariaCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ariaHeadCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ariaLeftHandCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ariaRightHandCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractAddress7508","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"contributors","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rykerTokenId","type":"uint256"},{"internalType":"uint256","name":"lunaTokenId","type":"uint256"},{"internalType":"uint256","name":"ariaTokenId","type":"uint256"},{"internalType":"uint256","name":"thaddeusTokenId","type":"uint256"},{"internalType":"uint16","name":"whichChild","type":"uint16"},{"internalType":"string","name":"key","type":"string"}],"name":"endMission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"externalAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAttributeKey","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAttributeValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChildCollectionAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCollectionAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractAddress7508","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExternalAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"key","type":"string"}],"name":"getUintAttribute","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"hasTokenPaidFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isContributor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isTokenExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isTokenInMission","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lunaBodyCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lunaCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lunaHeadCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lunaLeftHandCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lunaRightHandCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rykerTokenId","type":"uint256"},{"internalType":"uint256","name":"lunaTokenId","type":"uint256"},{"internalType":"uint256","name":"ariaTokenId","type":"uint256"},{"internalType":"uint256","name":"thaddeusTokenId","type":"uint256"}],"name":"payFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_contributor","type":"address"}],"name":"removeContributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rykerBodyCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rykerCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rykerHeadCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rykerLeftHandCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rykerRightHandCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress7508","type":"address"}],"name":"set7508Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ariaCollection","type":"address"}],"name":"setAriaCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_childCollections","type":"address[]"}],"name":"setChildCollections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_externalAccount","type":"address"}],"name":"setExternalAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setFeeAttribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rykerTokenId","type":"uint256"},{"internalType":"uint256","name":"lunaTokenId","type":"uint256"},{"internalType":"uint256","name":"ariaTokenId","type":"uint256"},{"internalType":"uint256","name":"thaddeusTokenId","type":"uint256"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setFeePaymentStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lunaCollection","type":"address"}],"name":"setLunaCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rykerCollection","type":"address"}],"name":"setRykerCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_thaddeusCollection","type":"address"}],"name":"setThaddeusCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"key","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setUintAttribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rykerTokenId","type":"uint256"},{"internalType":"uint256","name":"lunaTokenId","type":"uint256"},{"internalType":"uint256","name":"ariaTokenId","type":"uint256"},{"internalType":"uint256","name":"thaddeusTokenId","type":"uint256"},{"internalType":"string","name":"key","type":"string"}],"name":"startMission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thaddeusBodyCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thaddeusCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thaddeusHeadCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thaddeusLeftHandCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thaddeusRightHandCollection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50600080546001600160a01b0319163317905560408051808201909152601381527f4d616e616765724167654f664368726f6e6f73000000000000000000000000006020820152601d9062000067908262000113565b50620001df565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200009957607f821691505b602082108103620000ba57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200010e57600081815260208120601f850160051c81016020861015620000e95750805b601f850160051c820191505b818110156200010a57828155600101620000f5565b5050505b505050565b81516001600160401b038111156200012f576200012f6200006e565b620001478162000140845462000084565b84620000c0565b602080601f8311600181146200017f5760008415620001665750858301515b600019600386901b1c1916600185901b1785556200010a565b600085815260208120601f198616915b82811015620001b0578886015182559484019460019091019084016200018f565b5085821015620001cf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b613a7680620001ef6000396000f3fe6080604052600436106103355760003560e01c806369fe0e2d116101ab578063c8e9db02116100f7578063eacc04bb11610095578063f75451f81161006f578063f75451f8146109f0578063f811ceb814610a10578063fabdc66a14610a30578063fd16f08c14610a5057600080fd5b8063eacc04bb1461099b578063ed208672146109bb578063f0f16c98146109db57600080fd5b8063d8770863116100d1578063d877086314610925578063d93f3d7314610945578063d94837fb14610965578063ddca3f431461098557600080fd5b8063c8e9db02146108d0578063ced72f87146108f0578063d155e8e01461090557600080fd5b8063ac9c973111610164578063b579184f1161013e578063b579184f1461085f578063bdc8ef371461087f578063c40047981461089f578063c8b22c0f146108bd57600080fd5b8063ac9c9731146107ff578063affdd3a11461081f578063b3f3ab5c1461083f57600080fd5b806369fe0e2d1461073f5780636ceaa0151461075f5780636d08557a1461077f57806376cb75091461079f578063850a1281146107bf5780638da5cb5b146107df57600080fd5b80634ed6446611610285578063584b86d2116102235780635c695015116101fd5780635c695015146106995780635d2d02f7146106b957806363d7adfd146106d95780636533ad2a146106f957600080fd5b8063584b86d2146106395780635944db6e146106595780635ac020531461067957600080fd5b806353a4b7c41161025f57806353a4b7c4146105b957806356e6db59146105d957806357302794146105f957806357ad4c7c1461061957600080fd5b80634ed64466146105635780634f40efdb14610583578063519cb17b146105a357600080fd5b80632bb7e019116102f2578063398d8c5d116102cc578063398d8c5d146104ee5780633b919928146105035780633cd9dad0146105235780633e6e02561461054357600080fd5b80632bb7e0191461048a5780633245e47a146104ac578063328ac965146104cc57600080fd5b806306fdde031461033a5780630f9285ef146103655780631b8bfea3146103bb5780631d0d35f5146103e95780631f6d4942146104225780632b03eb3614610452575b600080fd5b34801561034657600080fd5b5061034f610a6e565b60405161035c91906131e7565b60405180910390f35b34801561037157600080fd5b506103ab610380366004613212565b6001600160a01b03919091166000908152601c60209081526040808320938352929052205460ff1690565b604051901515815260200161035c565b3480156103c757600080fd5b506103db6103d63660046132e1565b610afc565b60405190815260200161035c565b3480156103f557600080fd5b506103ab61040436600461333a565b6001600160a01b031660009081526002602052604090205460ff1690565b34801561042e57600080fd5b506103ab61043d36600461333a565b60026020526000908152604090205460ff1681565b34801561045e57600080fd5b50600554610472906001600160a01b031681565b6040516001600160a01b03909116815260200161035c565b34801561049657600080fd5b506104aa6104a5366004613357565b610b7a565b005b3480156104b857600080fd5b50601854610472906001600160a01b031681565b3480156104d857600080fd5b506104e1610bc0565b60405161035c919061339c565b3480156104fa57600080fd5b506104e1610cb7565b34801561050f57600080fd5b50600954610472906001600160a01b031681565b34801561052f57600080fd5b50600d54610472906001600160a01b031681565b34801561054f57600080fd5b506104aa61055e36600461333a565b610fdf565b34801561056f57600080fd5b50600354610472906001600160a01b031681565b34801561058f57600080fd5b506104aa61059e36600461333a565b61102b565b3480156105af57600080fd5b506103db601a5481565b3480156105c557600080fd5b506104aa6105d43660046133e9565b611077565b3480156105e557600080fd5b506104aa6105f436600461343b565b611152565b34801561060557600080fd5b50601154610472906001600160a01b031681565b34801561062557600080fd5b506104aa61063436600461333a565b611650565b34801561064557600080fd5b506104aa6106543660046134b0565b61169c565b34801561066557600080fd5b50600f54610472906001600160a01b031681565b34801561068557600080fd5b50600754610472906001600160a01b031681565b3480156106a557600080fd5b50601654610472906001600160a01b031681565b3480156106c557600080fd5b506104aa6106d436600461333a565b6119ee565b3480156106e557600080fd5b50600454610472906001600160a01b031681565b34801561070557600080fd5b506103ab610714366004613212565b6001600160a01b03919091166000908152601b60209081526040808320938352929052205460ff1690565b34801561074b57600080fd5b506104aa61075a366004613514565b611a3a565b34801561076b57600080fd5b506104aa61077a36600461352d565b611a69565b34801561078b57600080fd5b50600154610472906001600160a01b031681565b3480156107ab57600080fd5b50600c54610472906001600160a01b031681565b3480156107cb57600080fd5b50601454610472906001600160a01b031681565b3480156107eb57600080fd5b50600054610472906001600160a01b031681565b34801561080b57600080fd5b50600654610472906001600160a01b031681565b34801561082b57600080fd5b50600a54610472906001600160a01b031681565b34801561084b57600080fd5b506104aa61085a36600461333a565b61273e565b34801561086b57600080fd5b506104aa61087a36600461333a565b612789565b34801561088b57600080fd5b506103ab61089a366004613212565b6127d7565b3480156108ab57600080fd5b506001546001600160a01b0316610472565b6104aa6108cb3660046135a9565b6127ea565b3480156108dc57600080fd5b50601054610472906001600160a01b031681565b3480156108fc57600080fd5b506017546103db565b34801561091157600080fd5b50601254610472906001600160a01b031681565b34801561093157600080fd5b50600e54610472906001600160a01b031681565b34801561095157600080fd5b50601554610472906001600160a01b031681565b34801561097157600080fd5b50600854610472906001600160a01b031681565b34801561099157600080fd5b506103db60175481565b3480156109a757600080fd5b50600b54610472906001600160a01b031681565b3480156109c757600080fd5b506104aa6109d63660046135db565b612faa565b3480156109e757600080fd5b5061034f61305c565b3480156109fc57600080fd5b506104aa610a0b36600461333a565b613069565b348015610a1c57600080fd5b50601354610472906001600160a01b031681565b348015610a3c57600080fd5b506104aa610a4b36600461333a565b6130e7565b348015610a5c57600080fd5b506018546001600160a01b0316610472565b601d8054610a7b9061363c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa79061363c565b8015610af45780601f10610ac957610100808354040283529160200191610af4565b820191906000526020600020905b815481529060010190602001808311610ad757829003601f168201915b505050505081565b601854604051631b8bfea360e01b81526000916001600160a01b031690631b8bfea390610b3190879087908790600401613676565b602060405180830381865afa158015610b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7291906136a6565b949350505050565b6000546001600160a01b03163314610bad5760405162461bcd60e51b8152600401610ba4906136bf565b60405180910390fd5b6019610bb98382613745565b50601a5550565b60408051600480825260a082019092526060916000919060208201608080368337505060035482519293506001600160a01b031691839150600090610c0757610c07613805565b6001600160a01b039283166020918202929092010152600454825191169082906001908110610c3857610c38613805565b6001600160a01b039283166020918202929092010152600554825191169082906002908110610c6957610c69613805565b6001600160a01b039283166020918202929092010152600654825191169082906003908110610c9a57610c9a613805565b6001600160a01b0390921660209283029190910190910152919050565b6040805160108082526102208201909252606091600091906020820161020080368337505060075482519293506001600160a01b031691839150600090610d0057610d00613805565b6001600160a01b039283166020918202929092010152600854825191169082906001908110610d3157610d31613805565b6001600160a01b039283166020918202929092010152600954825191169082906002908110610d6257610d62613805565b6001600160a01b039283166020918202929092010152600a54825191169082906003908110610d9357610d93613805565b6001600160a01b039283166020918202929092010152600b54825191169082906004908110610dc457610dc4613805565b6001600160a01b039283166020918202929092010152600c54825191169082906005908110610df557610df5613805565b6001600160a01b039283166020918202929092010152600d54825191169082906006908110610e2657610e26613805565b6001600160a01b039283166020918202929092010152600e54825191169082906007908110610e5757610e57613805565b6001600160a01b039283166020918202929092010152600f54825191169082906008908110610e8857610e88613805565b6001600160a01b039283166020918202929092010152601054825191169082906009908110610eb957610eb9613805565b6001600160a01b03928316602091820292909201015260115482519116908290600a908110610eea57610eea613805565b6001600160a01b03928316602091820292909201015260125482519116908290600b908110610f1b57610f1b613805565b6001600160a01b03928316602091820292909201015260135482519116908290600c908110610f4c57610f4c613805565b6001600160a01b03928316602091820292909201015260145482519116908290600d908110610f7d57610f7d613805565b6001600160a01b03928316602091820292909201015260155482519116908290600e908110610fae57610fae613805565b6001600160a01b03928316602091820292909201015260165482519116908290600f908110610c9a57610c9a613805565b6000546001600160a01b031633146110095760405162461bcd60e51b8152600401610ba4906136bf565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110555760405162461bcd60e51b8152600401610ba4906136bf565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148061109f57503360009081526002602052604090205460ff165b6110bb5760405162461bcd60e51b8152600401610ba49061381b565b6003546001600160a01b039081166000908152601c60208181526040808420998452988152888320805495151560ff199687168117909155600454851684528282528984209884529781528883208054861689179055600554841683528181528883209683529586528782208054851688179055600654909216815290845285812092815291909252929092208054909216179055565b6000546001600160a01b0316331461117c5760405162461bcd60e51b8152600401610ba4906136bf565b601081146111cc5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206e756d626572206f662061646472657373657300000000006044820152606401610ba4565b818160008181106111df576111df613805565b90506020020160208101906111f4919061333a565b600780546001600160a01b0319166001600160a01b03929092169190911790558181600181811061122757611227613805565b905060200201602081019061123c919061333a565b600880546001600160a01b0319166001600160a01b03929092169190911790558181600281811061126f5761126f613805565b9050602002016020810190611284919061333a565b600980546001600160a01b0319166001600160a01b0392909216919091179055818160038181106112b7576112b7613805565b90506020020160208101906112cc919061333a565b600a80546001600160a01b0319166001600160a01b0392909216919091179055818160048181106112ff576112ff613805565b9050602002016020810190611314919061333a565b600b80546001600160a01b0319166001600160a01b03929092169190911790558181600581811061134757611347613805565b905060200201602081019061135c919061333a565b600c80546001600160a01b0319166001600160a01b03929092169190911790558181600681811061138f5761138f613805565b90506020020160208101906113a4919061333a565b600d80546001600160a01b0319166001600160a01b0392909216919091179055818160078181106113d7576113d7613805565b90506020020160208101906113ec919061333a565b600e80546001600160a01b0319166001600160a01b03929092169190911790558181600881811061141f5761141f613805565b9050602002016020810190611434919061333a565b600f80546001600160a01b0319166001600160a01b03929092169190911790558181600981811061146757611467613805565b905060200201602081019061147c919061333a565b601080546001600160a01b0319166001600160a01b03929092169190911790558181600a8181106114af576114af613805565b90506020020160208101906114c4919061333a565b601180546001600160a01b0319166001600160a01b03929092169190911790558181600b8181106114f7576114f7613805565b905060200201602081019061150c919061333a565b601280546001600160a01b0319166001600160a01b03929092169190911790558181600c81811061153f5761153f613805565b9050602002016020810190611554919061333a565b601380546001600160a01b0319166001600160a01b03929092169190911790558181600d81811061158757611587613805565b905060200201602081019061159c919061333a565b601480546001600160a01b0319166001600160a01b03929092169190911790558181600e8181106115cf576115cf613805565b90506020020160208101906115e4919061333a565b601580546001600160a01b0319166001600160a01b03929092169190911790558181600f81811061161757611617613805565b905060200201602081019061162c919061333a565b601680546001600160a01b0319166001600160a01b03929092169190911790555050565b6000546001600160a01b0316331461167a5760405162461bcd60e51b8152600401610ba4906136bf565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314806116c457503360009081526002602052604090205460ff165b6116e05760405162461bcd60e51b8152600401610ba49061381b565b6003546001600160a01b03166000908152601b6020908152604080832088845290915290205460ff16158061173b57506004546001600160a01b03166000908152601b6020908152604080832087845290915290205460ff16155b8061176c57506005546001600160a01b03166000908152601b6020908152604080832086845290915290205460ff16155b8061179d57506006546001600160a01b03166000908152601b6020908152604080832085845290915290205460ff16155b6117fd5760405162461bcd60e51b815260206004820152602b60248201527f4f6e65206f72206d6f726520746f6b656e732061726520616c7265616479206960448201526a3710309036b4b9b9b4b7b760a91b6064820152608401610ba4565b6003546001600160a01b03166000908152601c6020908152604080832088845290915290205460ff16801561185757506004546001600160a01b03166000908152601c6020908152604080832087845290915290205460ff165b801561188857506005546001600160a01b03166000908152601c6020908152604080832086845290915290205460ff165b80156118b957506006546001600160a01b03166000908152601c6020908152604080832085845290915290205460ff165b6119165760405162461bcd60e51b815260206004820152602860248201527f4f6e65206f72206d6f726520746f6b656e732068617665206e6f742070616964604482015267207468652066656560c01b6064820152608401610ba4565b6003546001600160a01b039081166000908152601b602081815260408084208a855282528084208054600160ff199182168117909255600454871686528484528286208b875284528286208054821683179055600554871686528484528286208a875284528286208054821683179055600654909616855292825280842087855290915291829020805490931617909155517fcc6d4030c8fb2a413e63b90ca72bbb103a627967a25155efb8a3eee2545c38b6906119df90879087908790879087903390613861565b60405180910390a15050505050565b6000546001600160a01b03163314611a185760405162461bcd60e51b8152600401610ba4906136bf565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a645760405162461bcd60e51b8152600401610ba4906136bf565b601755565b6000546001600160a01b0316331480611a9157503360009081526002602052604090205460ff165b611aad5760405162461bcd60e51b8152600401610ba49061381b565b6003546001600160a01b03166000908152601b6020908152604080832089845290915290205460ff168015611b0757506004546001600160a01b03166000908152601b6020908152604080832088845290915290205460ff165b8015611b3857506005546001600160a01b03166000908152601b6020908152604080832087845290915290205460ff165b8015611b6957506006546001600160a01b03166000908152601b6020908152604080832086845290915290205460ff165b611bcf5760405162461bcd60e51b815260206004820152603160248201527f4f6e65206f72206d6f726520746f6b656e7320617265206e6f74206375727265604482015270373a363c9034b710309036b4b9b9b4b7b760791b6064820152608401610ba4565b60035460405163966d964b60e01b815260048101889052600060248201526001600160a01b039091169063966d964b90604401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b50506004805460405163966d964b60e01b8152918201899052600060248301526001600160a01b0316925063966d964b9150604401600060405180830381600087803b158015611c7f57600080fd5b505af1158015611c93573d6000803e3d6000fd5b505060055460405163966d964b60e01b815260048101889052600060248201526001600160a01b03909116925063966d964b9150604401600060405180830381600087803b158015611ce457600080fd5b505af1158015611cf8573d6000803e3d6000fd5b505060065460405163966d964b60e01b815260048101879052600060248201526001600160a01b03909116925063966d964b9150604401600060405180830381600087803b158015611d4957600080fd5b505af1158015611d5d573d6000803e3d6000fd5b505060408051610200810182526007546001600160a01b03908116825260085481166020830152600954811692820192909252600a5482166060820152600b5482166080820152600c54821660a0820152600d54821660c0820152600e54821660e0820152600f548216610100820152601054821661012082015260115482166101408201526012548216610160820152601354821661018082015260145482166101a082015260155482166101c08201526016549091166101e082015291505061ffff831615801590611e36575060108361ffff1611155b611e825760405162461bcd60e51b815260206004820152601860248201527f496e76616c69642077686963684368696c642076616c756500000000000000006044820152606401610ba4565b600081611e906001866138bd565b61ffff1660108110611ea457611ea4613805565b60200201516003546040516331a9108f60e11b8152600481018b90529192506001600160a01b0380841692634cc482c1929190911690636352211e90602401602060405180830381865afa158015611f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2491906138df565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b158015611f6c57600080fd5b505af1158015611f80573d6000803e3d6000fd5b505050506000601b6000600360009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060008a815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601b6000600460009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600089815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601b6000600560009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600088815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601b6000600660009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600087815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601c6000600360009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060008a815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601c6000600460009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600089815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601c6000600560009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600088815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601c6000600660009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600087815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601860009054906101000a90046001600160a01b03166001600160a01b0316631b8bfea3600360009054906101000a90046001600160a01b03168b876040518463ffffffff1660e01b815260040161230093929190613676565b602060405180830381865afa15801561231d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234191906136a6565b60185460048054604051631b8bfea360e01b81529394506000936001600160a01b0393841693631b8bfea39361237f93909116918e918b9101613676565b602060405180830381865afa15801561239c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c091906136a6565b601854600554604051631b8bfea360e01b81529293506000926001600160a01b0392831692631b8bfea3926123fe929116908d908b90600401613676565b602060405180830381865afa15801561241b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243f91906136a6565b601854600654604051631b8bfea360e01b81529293506000926001600160a01b0392831692631b8bfea39261247d929116908d908c90600401613676565b602060405180830381865afa15801561249a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124be91906136a6565b9050836124ca816138fc565b94505082806124d8906138fc565b93505081806124e6906138fc565b92505080806124f4906138fc565b915050601860009054906101000a90046001600160a01b03166001600160a01b031663ed208672600360009054906101000a90046001600160a01b03168e8a886040518563ffffffff1660e01b81526004016125539493929190613915565b600060405180830381600087803b15801561256d57600080fd5b505af1158015612581573d6000803e3d6000fd5b50505050601860009054906101000a90046001600160a01b03166001600160a01b031663ed208672600460009054906101000a90046001600160a01b03168d8a876040518563ffffffff1660e01b81526004016125e19493929190613915565b600060405180830381600087803b1580156125fb57600080fd5b505af115801561260f573d6000803e3d6000fd5b5050601854600554604051637690433960e11b81526001600160a01b03928316945063ed208672935061264e92909116908e908c908890600401613915565b600060405180830381600087803b15801561266857600080fd5b505af115801561267c573d6000803e3d6000fd5b5050601854600654604051637690433960e11b81526001600160a01b03928316945063ed20867293506126bb92909116908d908c908790600401613915565b600060405180830381600087803b1580156126d557600080fd5b505af11580156126e9573d6000803e3d6000fd5b505050507f8da2cbc0e8d30ee9589f91476da9a790be9a8b2ff2282ffa176ee56da4f3c0288c8c8c8c8c8c33604051612728979695949392919061394d565b60405180910390a1505050505050505050505050565b6000546001600160a01b031633146127685760405162461bcd60e51b8152600401610ba4906136bf565b6001600160a01b03166000908152600260205260409020805460ff19169055565b6000546001600160a01b031633146127b35760405162461bcd60e51b8152600401610ba4906136bf565b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b60006127e38383613133565b9392505050565b60175434146128325760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0819995948185b5bdd5b9d60621b6044820152606401610ba4565b600354612848906001600160a01b031685613133565b80156128655750600454612865906001600160a01b031684613133565b80156128825750600554612882906001600160a01b031683613133565b801561289f575060065461289f906001600160a01b031682613133565b6128eb5760405162461bcd60e51b815260206004820152601f60248201527f4f6e65206f72206d6f726520746f6b656e7320646f206e6f74206578697374006044820152606401610ba4565b6003546040516331a9108f60e11b81526004810186905233916001600160a01b031690636352211e90602401602060405180830381865afa158015612934573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295891906138df565b6001600160a01b0316146129ba5760405162461bcd60e51b815260206004820152602360248201527f43616c6c657220646f6573206e6f74206f776e207468652052796b657220746f60448201526235b2b760e91b6064820152608401610ba4565b600480546040516331a9108f60e11b815291820185905233916001600160a01b0390911690636352211e90602401602060405180830381865afa158015612a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2991906138df565b6001600160a01b031614612a8a5760405162461bcd60e51b815260206004820152602260248201527f43616c6c657220646f6573206e6f74206f776e20746865204c756e6120746f6b60448201526132b760f11b6064820152608401610ba4565b6005546040516331a9108f60e11b81526004810184905233916001600160a01b031690636352211e90602401602060405180830381865afa158015612ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af791906138df565b6001600160a01b031614612b585760405162461bcd60e51b815260206004820152602260248201527f43616c6c657220646f6573206e6f74206f776e20746865204172696120746f6b60448201526132b760f11b6064820152608401610ba4565b6006546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906138df565b6001600160a01b031614612c2a5760405162461bcd60e51b815260206004820152602660248201527f43616c6c657220646f6573206e6f74206f776e20746865205468616464657573604482015265103a37b5b2b760d11b6064820152608401610ba4565b601a54601854600354604051631b8bfea360e01b81526001600160a01b0392831692631b8bfea392612c6692911690899060199060040161399e565b602060405180830381865afa158015612c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca791906136a6565b148015612d2e5750601a5460185460048054604051631b8bfea360e01b81526001600160a01b0393841693631b8bfea393612ceb939091169189916019910161399e565b602060405180830381865afa158015612d08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2c91906136a6565b145b8015612db45750601a54601854600554604051631b8bfea360e01b81526001600160a01b0392831692631b8bfea392612d7192911690879060199060040161399e565b602060405180830381865afa158015612d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db291906136a6565b145b8015612e3a5750601a54601854600654604051631b8bfea360e01b81526001600160a01b0392831692631b8bfea392612df792911690869060199060040161399e565b602060405180830381865afa158015612e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3891906136a6565b145b612e955760405162461bcd60e51b815260206004820152602660248201527f417474726962757465206973206e6f742073657420746f2072657175697265646044820152652076616c756560d01b6064820152608401610ba4565b6003546001600160a01b039081166000908152601c602081815260408084208985528252808420805460ff199081166001908117909255600454871686528484528286208a875284528286208054821683179055600554871686528484528286208987528452828620805482168317905560065487168652938352818520878652909252808420805490931682179092555490519216913480156108fc0292909190818181858888f19350505050158015612f54573d6000803e3d6000fd5b50604080513381526020810186905290810184905260608101839052608081018290527f502c4af0afde8aea2e7efd8ea4933fb7349ee09129a2f83cf3aa25b7d03136979060a00160405180910390a150505050565b6000546001600160a01b0316331480612fd257503360009081526002602052604090205460ff165b612fee5760405162461bcd60e51b8152600401610ba49061381b565b601854604051637690433960e11b81526001600160a01b039091169063ed20867290613024908790879087908790600401613915565b600060405180830381600087803b15801561303e57600080fd5b505af1158015613052573d6000803e3d6000fd5b5050505050505050565b60198054610a7b9061363c565b6000546001600160a01b031633146130935760405162461bcd60e51b8152600401610ba4906136bf565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527fe2cdf20f5c4ba7d71a1d649374dab6285996328cd5771c70d426b799638a43d39060200160405180910390a150565b6000546001600160a01b031633146131115760405162461bcd60e51b8152600401610ba4906136bf565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319791906136a6565b9091111592915050565b6000815180845260005b818110156131c7576020818501810151868301820152016131ab565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006127e360208301846131a1565b6001600160a01b038116811461320f57600080fd5b50565b6000806040838503121561322557600080fd5b8235613230816131fa565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261326557600080fd5b813567ffffffffffffffff808211156132805761328061323e565b604051601f8301601f19908116603f011681019082821181831017156132a8576132a861323e565b816040528381528660208588010111156132c157600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156132f657600080fd5b8335613301816131fa565b925060208401359150604084013567ffffffffffffffff81111561332457600080fd5b61333086828701613254565b9150509250925092565b60006020828403121561334c57600080fd5b81356127e3816131fa565b6000806040838503121561336a57600080fd5b823567ffffffffffffffff81111561338157600080fd5b61338d85828601613254565b95602094909401359450505050565b6020808252825182820181905260009190848201906040850190845b818110156133dd5783516001600160a01b0316835292840192918401916001016133b8565b50909695505050505050565b600080600080600060a0868803121561340157600080fd5b853594506020860135935060408601359250606086013591506080860135801515811461342d57600080fd5b809150509295509295909350565b6000806020838503121561344e57600080fd5b823567ffffffffffffffff8082111561346657600080fd5b818501915085601f83011261347a57600080fd5b81358181111561348957600080fd5b8660208260051b850101111561349e57600080fd5b60209290920196919550909350505050565b600080600080600060a086880312156134c857600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff8111156134fb57600080fd5b61350788828901613254565b9150509295509295909350565b60006020828403121561352657600080fd5b5035919050565b60008060008060008060c0878903121561354657600080fd5b86359550602087013594506040870135935060608701359250608087013561ffff8116811461357457600080fd5b915060a087013567ffffffffffffffff81111561359057600080fd5b61359c89828a01613254565b9150509295509295509295565b600080600080608085870312156135bf57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080608085870312156135f157600080fd5b84356135fc816131fa565b935060208501359250604085013567ffffffffffffffff81111561361f57600080fd5b61362b87828801613254565b949793965093946060013593505050565b600181811c9082168061365057607f821691505b60208210810361367057634e487b7160e01b600052602260045260246000fd5b50919050565b60018060a01b038416815282602082015260606040820152600061369d60608301846131a1565b95945050505050565b6000602082840312156136b857600080fd5b5051919050565b60208082526017908201527f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b601f82111561374057600081815260208120601f850160051c8101602086101561371d5750805b601f850160051c820191505b8181101561373c57828155600101613729565b5050505b505050565b815167ffffffffffffffff81111561375f5761375f61323e565b6137738161376d845461363c565b846136f6565b602080601f8311600181146137a857600084156137905750858301515b600019600386901b1c1916600185901b17855561373c565b600085815260208120601f198616915b828110156137d7578886015182559484019460019091019084016137b8565b50858210156137f55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b60208082526026908201527f43616c6c6572206973206e6f7420746865206f776e6572206f7220636f6e747260408201526534b13aba37b960d11b606082015260800190565b86815285602082015284604082015283606082015260c06080820152600061388c60c08301856131a1565b905060018060a01b03831660a0830152979650505050505050565b634e487b7160e01b600052601160045260246000fd5b61ffff8281168282160390808211156138d8576138d86138a7565b5092915050565b6000602082840312156138f157600080fd5b81516127e3816131fa565b60006001820161390e5761390e6138a7565b5060010190565b60018060a01b038516815283602082015260806040820152600061393c60808301856131a1565b905082606083015295945050505050565b87815286602082015285604082015284606082015261ffff8416608082015260e060a0820152600061398260e08301856131a1565b905060018060a01b03831660c083015298975050505050505050565b60018060a01b038416815260006020848184015260606040840152600084546139c68161363c565b80606087015260806001808416600081146139e85760018114613a0257613a30565b60ff1985168984015283151560051b890183019550613a30565b896000528660002060005b85811015613a285781548b8201860152908301908801613a0d565b8a0184019650505b50939a995050505050505050505056fea2646970667358221220dae20bc5e0c5919a5fe50744a1f6d859e7dfa928646a9ad427c487b7b81c257b64736f6c63430008150033

Deployed Bytecode

0x6080604052600436106103355760003560e01c806369fe0e2d116101ab578063c8e9db02116100f7578063eacc04bb11610095578063f75451f81161006f578063f75451f8146109f0578063f811ceb814610a10578063fabdc66a14610a30578063fd16f08c14610a5057600080fd5b8063eacc04bb1461099b578063ed208672146109bb578063f0f16c98146109db57600080fd5b8063d8770863116100d1578063d877086314610925578063d93f3d7314610945578063d94837fb14610965578063ddca3f431461098557600080fd5b8063c8e9db02146108d0578063ced72f87146108f0578063d155e8e01461090557600080fd5b8063ac9c973111610164578063b579184f1161013e578063b579184f1461085f578063bdc8ef371461087f578063c40047981461089f578063c8b22c0f146108bd57600080fd5b8063ac9c9731146107ff578063affdd3a11461081f578063b3f3ab5c1461083f57600080fd5b806369fe0e2d1461073f5780636ceaa0151461075f5780636d08557a1461077f57806376cb75091461079f578063850a1281146107bf5780638da5cb5b146107df57600080fd5b80634ed6446611610285578063584b86d2116102235780635c695015116101fd5780635c695015146106995780635d2d02f7146106b957806363d7adfd146106d95780636533ad2a146106f957600080fd5b8063584b86d2146106395780635944db6e146106595780635ac020531461067957600080fd5b806353a4b7c41161025f57806353a4b7c4146105b957806356e6db59146105d957806357302794146105f957806357ad4c7c1461061957600080fd5b80634ed64466146105635780634f40efdb14610583578063519cb17b146105a357600080fd5b80632bb7e019116102f2578063398d8c5d116102cc578063398d8c5d146104ee5780633b919928146105035780633cd9dad0146105235780633e6e02561461054357600080fd5b80632bb7e0191461048a5780633245e47a146104ac578063328ac965146104cc57600080fd5b806306fdde031461033a5780630f9285ef146103655780631b8bfea3146103bb5780631d0d35f5146103e95780631f6d4942146104225780632b03eb3614610452575b600080fd5b34801561034657600080fd5b5061034f610a6e565b60405161035c91906131e7565b60405180910390f35b34801561037157600080fd5b506103ab610380366004613212565b6001600160a01b03919091166000908152601c60209081526040808320938352929052205460ff1690565b604051901515815260200161035c565b3480156103c757600080fd5b506103db6103d63660046132e1565b610afc565b60405190815260200161035c565b3480156103f557600080fd5b506103ab61040436600461333a565b6001600160a01b031660009081526002602052604090205460ff1690565b34801561042e57600080fd5b506103ab61043d36600461333a565b60026020526000908152604090205460ff1681565b34801561045e57600080fd5b50600554610472906001600160a01b031681565b6040516001600160a01b03909116815260200161035c565b34801561049657600080fd5b506104aa6104a5366004613357565b610b7a565b005b3480156104b857600080fd5b50601854610472906001600160a01b031681565b3480156104d857600080fd5b506104e1610bc0565b60405161035c919061339c565b3480156104fa57600080fd5b506104e1610cb7565b34801561050f57600080fd5b50600954610472906001600160a01b031681565b34801561052f57600080fd5b50600d54610472906001600160a01b031681565b34801561054f57600080fd5b506104aa61055e36600461333a565b610fdf565b34801561056f57600080fd5b50600354610472906001600160a01b031681565b34801561058f57600080fd5b506104aa61059e36600461333a565b61102b565b3480156105af57600080fd5b506103db601a5481565b3480156105c557600080fd5b506104aa6105d43660046133e9565b611077565b3480156105e557600080fd5b506104aa6105f436600461343b565b611152565b34801561060557600080fd5b50601154610472906001600160a01b031681565b34801561062557600080fd5b506104aa61063436600461333a565b611650565b34801561064557600080fd5b506104aa6106543660046134b0565b61169c565b34801561066557600080fd5b50600f54610472906001600160a01b031681565b34801561068557600080fd5b50600754610472906001600160a01b031681565b3480156106a557600080fd5b50601654610472906001600160a01b031681565b3480156106c557600080fd5b506104aa6106d436600461333a565b6119ee565b3480156106e557600080fd5b50600454610472906001600160a01b031681565b34801561070557600080fd5b506103ab610714366004613212565b6001600160a01b03919091166000908152601b60209081526040808320938352929052205460ff1690565b34801561074b57600080fd5b506104aa61075a366004613514565b611a3a565b34801561076b57600080fd5b506104aa61077a36600461352d565b611a69565b34801561078b57600080fd5b50600154610472906001600160a01b031681565b3480156107ab57600080fd5b50600c54610472906001600160a01b031681565b3480156107cb57600080fd5b50601454610472906001600160a01b031681565b3480156107eb57600080fd5b50600054610472906001600160a01b031681565b34801561080b57600080fd5b50600654610472906001600160a01b031681565b34801561082b57600080fd5b50600a54610472906001600160a01b031681565b34801561084b57600080fd5b506104aa61085a36600461333a565b61273e565b34801561086b57600080fd5b506104aa61087a36600461333a565b612789565b34801561088b57600080fd5b506103ab61089a366004613212565b6127d7565b3480156108ab57600080fd5b506001546001600160a01b0316610472565b6104aa6108cb3660046135a9565b6127ea565b3480156108dc57600080fd5b50601054610472906001600160a01b031681565b3480156108fc57600080fd5b506017546103db565b34801561091157600080fd5b50601254610472906001600160a01b031681565b34801561093157600080fd5b50600e54610472906001600160a01b031681565b34801561095157600080fd5b50601554610472906001600160a01b031681565b34801561097157600080fd5b50600854610472906001600160a01b031681565b34801561099157600080fd5b506103db60175481565b3480156109a757600080fd5b50600b54610472906001600160a01b031681565b3480156109c757600080fd5b506104aa6109d63660046135db565b612faa565b3480156109e757600080fd5b5061034f61305c565b3480156109fc57600080fd5b506104aa610a0b36600461333a565b613069565b348015610a1c57600080fd5b50601354610472906001600160a01b031681565b348015610a3c57600080fd5b506104aa610a4b36600461333a565b6130e7565b348015610a5c57600080fd5b506018546001600160a01b0316610472565b601d8054610a7b9061363c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa79061363c565b8015610af45780601f10610ac957610100808354040283529160200191610af4565b820191906000526020600020905b815481529060010190602001808311610ad757829003601f168201915b505050505081565b601854604051631b8bfea360e01b81526000916001600160a01b031690631b8bfea390610b3190879087908790600401613676565b602060405180830381865afa158015610b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7291906136a6565b949350505050565b6000546001600160a01b03163314610bad5760405162461bcd60e51b8152600401610ba4906136bf565b60405180910390fd5b6019610bb98382613745565b50601a5550565b60408051600480825260a082019092526060916000919060208201608080368337505060035482519293506001600160a01b031691839150600090610c0757610c07613805565b6001600160a01b039283166020918202929092010152600454825191169082906001908110610c3857610c38613805565b6001600160a01b039283166020918202929092010152600554825191169082906002908110610c6957610c69613805565b6001600160a01b039283166020918202929092010152600654825191169082906003908110610c9a57610c9a613805565b6001600160a01b0390921660209283029190910190910152919050565b6040805160108082526102208201909252606091600091906020820161020080368337505060075482519293506001600160a01b031691839150600090610d0057610d00613805565b6001600160a01b039283166020918202929092010152600854825191169082906001908110610d3157610d31613805565b6001600160a01b039283166020918202929092010152600954825191169082906002908110610d6257610d62613805565b6001600160a01b039283166020918202929092010152600a54825191169082906003908110610d9357610d93613805565b6001600160a01b039283166020918202929092010152600b54825191169082906004908110610dc457610dc4613805565b6001600160a01b039283166020918202929092010152600c54825191169082906005908110610df557610df5613805565b6001600160a01b039283166020918202929092010152600d54825191169082906006908110610e2657610e26613805565b6001600160a01b039283166020918202929092010152600e54825191169082906007908110610e5757610e57613805565b6001600160a01b039283166020918202929092010152600f54825191169082906008908110610e8857610e88613805565b6001600160a01b039283166020918202929092010152601054825191169082906009908110610eb957610eb9613805565b6001600160a01b03928316602091820292909201015260115482519116908290600a908110610eea57610eea613805565b6001600160a01b03928316602091820292909201015260125482519116908290600b908110610f1b57610f1b613805565b6001600160a01b03928316602091820292909201015260135482519116908290600c908110610f4c57610f4c613805565b6001600160a01b03928316602091820292909201015260145482519116908290600d908110610f7d57610f7d613805565b6001600160a01b03928316602091820292909201015260155482519116908290600e908110610fae57610fae613805565b6001600160a01b03928316602091820292909201015260165482519116908290600f908110610c9a57610c9a613805565b6000546001600160a01b031633146110095760405162461bcd60e51b8152600401610ba4906136bf565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110555760405162461bcd60e51b8152600401610ba4906136bf565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148061109f57503360009081526002602052604090205460ff165b6110bb5760405162461bcd60e51b8152600401610ba49061381b565b6003546001600160a01b039081166000908152601c60208181526040808420998452988152888320805495151560ff199687168117909155600454851684528282528984209884529781528883208054861689179055600554841683528181528883209683529586528782208054851688179055600654909216815290845285812092815291909252929092208054909216179055565b6000546001600160a01b0316331461117c5760405162461bcd60e51b8152600401610ba4906136bf565b601081146111cc5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206e756d626572206f662061646472657373657300000000006044820152606401610ba4565b818160008181106111df576111df613805565b90506020020160208101906111f4919061333a565b600780546001600160a01b0319166001600160a01b03929092169190911790558181600181811061122757611227613805565b905060200201602081019061123c919061333a565b600880546001600160a01b0319166001600160a01b03929092169190911790558181600281811061126f5761126f613805565b9050602002016020810190611284919061333a565b600980546001600160a01b0319166001600160a01b0392909216919091179055818160038181106112b7576112b7613805565b90506020020160208101906112cc919061333a565b600a80546001600160a01b0319166001600160a01b0392909216919091179055818160048181106112ff576112ff613805565b9050602002016020810190611314919061333a565b600b80546001600160a01b0319166001600160a01b03929092169190911790558181600581811061134757611347613805565b905060200201602081019061135c919061333a565b600c80546001600160a01b0319166001600160a01b03929092169190911790558181600681811061138f5761138f613805565b90506020020160208101906113a4919061333a565b600d80546001600160a01b0319166001600160a01b0392909216919091179055818160078181106113d7576113d7613805565b90506020020160208101906113ec919061333a565b600e80546001600160a01b0319166001600160a01b03929092169190911790558181600881811061141f5761141f613805565b9050602002016020810190611434919061333a565b600f80546001600160a01b0319166001600160a01b03929092169190911790558181600981811061146757611467613805565b905060200201602081019061147c919061333a565b601080546001600160a01b0319166001600160a01b03929092169190911790558181600a8181106114af576114af613805565b90506020020160208101906114c4919061333a565b601180546001600160a01b0319166001600160a01b03929092169190911790558181600b8181106114f7576114f7613805565b905060200201602081019061150c919061333a565b601280546001600160a01b0319166001600160a01b03929092169190911790558181600c81811061153f5761153f613805565b9050602002016020810190611554919061333a565b601380546001600160a01b0319166001600160a01b03929092169190911790558181600d81811061158757611587613805565b905060200201602081019061159c919061333a565b601480546001600160a01b0319166001600160a01b03929092169190911790558181600e8181106115cf576115cf613805565b90506020020160208101906115e4919061333a565b601580546001600160a01b0319166001600160a01b03929092169190911790558181600f81811061161757611617613805565b905060200201602081019061162c919061333a565b601680546001600160a01b0319166001600160a01b03929092169190911790555050565b6000546001600160a01b0316331461167a5760405162461bcd60e51b8152600401610ba4906136bf565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314806116c457503360009081526002602052604090205460ff165b6116e05760405162461bcd60e51b8152600401610ba49061381b565b6003546001600160a01b03166000908152601b6020908152604080832088845290915290205460ff16158061173b57506004546001600160a01b03166000908152601b6020908152604080832087845290915290205460ff16155b8061176c57506005546001600160a01b03166000908152601b6020908152604080832086845290915290205460ff16155b8061179d57506006546001600160a01b03166000908152601b6020908152604080832085845290915290205460ff16155b6117fd5760405162461bcd60e51b815260206004820152602b60248201527f4f6e65206f72206d6f726520746f6b656e732061726520616c7265616479206960448201526a3710309036b4b9b9b4b7b760a91b6064820152608401610ba4565b6003546001600160a01b03166000908152601c6020908152604080832088845290915290205460ff16801561185757506004546001600160a01b03166000908152601c6020908152604080832087845290915290205460ff165b801561188857506005546001600160a01b03166000908152601c6020908152604080832086845290915290205460ff165b80156118b957506006546001600160a01b03166000908152601c6020908152604080832085845290915290205460ff165b6119165760405162461bcd60e51b815260206004820152602860248201527f4f6e65206f72206d6f726520746f6b656e732068617665206e6f742070616964604482015267207468652066656560c01b6064820152608401610ba4565b6003546001600160a01b039081166000908152601b602081815260408084208a855282528084208054600160ff199182168117909255600454871686528484528286208b875284528286208054821683179055600554871686528484528286208a875284528286208054821683179055600654909616855292825280842087855290915291829020805490931617909155517fcc6d4030c8fb2a413e63b90ca72bbb103a627967a25155efb8a3eee2545c38b6906119df90879087908790879087903390613861565b60405180910390a15050505050565b6000546001600160a01b03163314611a185760405162461bcd60e51b8152600401610ba4906136bf565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a645760405162461bcd60e51b8152600401610ba4906136bf565b601755565b6000546001600160a01b0316331480611a9157503360009081526002602052604090205460ff165b611aad5760405162461bcd60e51b8152600401610ba49061381b565b6003546001600160a01b03166000908152601b6020908152604080832089845290915290205460ff168015611b0757506004546001600160a01b03166000908152601b6020908152604080832088845290915290205460ff165b8015611b3857506005546001600160a01b03166000908152601b6020908152604080832087845290915290205460ff165b8015611b6957506006546001600160a01b03166000908152601b6020908152604080832086845290915290205460ff165b611bcf5760405162461bcd60e51b815260206004820152603160248201527f4f6e65206f72206d6f726520746f6b656e7320617265206e6f74206375727265604482015270373a363c9034b710309036b4b9b9b4b7b760791b6064820152608401610ba4565b60035460405163966d964b60e01b815260048101889052600060248201526001600160a01b039091169063966d964b90604401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b50506004805460405163966d964b60e01b8152918201899052600060248301526001600160a01b0316925063966d964b9150604401600060405180830381600087803b158015611c7f57600080fd5b505af1158015611c93573d6000803e3d6000fd5b505060055460405163966d964b60e01b815260048101889052600060248201526001600160a01b03909116925063966d964b9150604401600060405180830381600087803b158015611ce457600080fd5b505af1158015611cf8573d6000803e3d6000fd5b505060065460405163966d964b60e01b815260048101879052600060248201526001600160a01b03909116925063966d964b9150604401600060405180830381600087803b158015611d4957600080fd5b505af1158015611d5d573d6000803e3d6000fd5b505060408051610200810182526007546001600160a01b03908116825260085481166020830152600954811692820192909252600a5482166060820152600b5482166080820152600c54821660a0820152600d54821660c0820152600e54821660e0820152600f548216610100820152601054821661012082015260115482166101408201526012548216610160820152601354821661018082015260145482166101a082015260155482166101c08201526016549091166101e082015291505061ffff831615801590611e36575060108361ffff1611155b611e825760405162461bcd60e51b815260206004820152601860248201527f496e76616c69642077686963684368696c642076616c756500000000000000006044820152606401610ba4565b600081611e906001866138bd565b61ffff1660108110611ea457611ea4613805565b60200201516003546040516331a9108f60e11b8152600481018b90529192506001600160a01b0380841692634cc482c1929190911690636352211e90602401602060405180830381865afa158015611f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2491906138df565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b158015611f6c57600080fd5b505af1158015611f80573d6000803e3d6000fd5b505050506000601b6000600360009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060008a815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601b6000600460009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600089815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601b6000600560009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600088815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601b6000600660009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600087815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601c6000600360009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060008a815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601c6000600460009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600089815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601c6000600560009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600088815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601c6000600660009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600087815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601860009054906101000a90046001600160a01b03166001600160a01b0316631b8bfea3600360009054906101000a90046001600160a01b03168b876040518463ffffffff1660e01b815260040161230093929190613676565b602060405180830381865afa15801561231d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234191906136a6565b60185460048054604051631b8bfea360e01b81529394506000936001600160a01b0393841693631b8bfea39361237f93909116918e918b9101613676565b602060405180830381865afa15801561239c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c091906136a6565b601854600554604051631b8bfea360e01b81529293506000926001600160a01b0392831692631b8bfea3926123fe929116908d908b90600401613676565b602060405180830381865afa15801561241b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243f91906136a6565b601854600654604051631b8bfea360e01b81529293506000926001600160a01b0392831692631b8bfea39261247d929116908d908c90600401613676565b602060405180830381865afa15801561249a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124be91906136a6565b9050836124ca816138fc565b94505082806124d8906138fc565b93505081806124e6906138fc565b92505080806124f4906138fc565b915050601860009054906101000a90046001600160a01b03166001600160a01b031663ed208672600360009054906101000a90046001600160a01b03168e8a886040518563ffffffff1660e01b81526004016125539493929190613915565b600060405180830381600087803b15801561256d57600080fd5b505af1158015612581573d6000803e3d6000fd5b50505050601860009054906101000a90046001600160a01b03166001600160a01b031663ed208672600460009054906101000a90046001600160a01b03168d8a876040518563ffffffff1660e01b81526004016125e19493929190613915565b600060405180830381600087803b1580156125fb57600080fd5b505af115801561260f573d6000803e3d6000fd5b5050601854600554604051637690433960e11b81526001600160a01b03928316945063ed208672935061264e92909116908e908c908890600401613915565b600060405180830381600087803b15801561266857600080fd5b505af115801561267c573d6000803e3d6000fd5b5050601854600654604051637690433960e11b81526001600160a01b03928316945063ed20867293506126bb92909116908d908c908790600401613915565b600060405180830381600087803b1580156126d557600080fd5b505af11580156126e9573d6000803e3d6000fd5b505050507f8da2cbc0e8d30ee9589f91476da9a790be9a8b2ff2282ffa176ee56da4f3c0288c8c8c8c8c8c33604051612728979695949392919061394d565b60405180910390a1505050505050505050505050565b6000546001600160a01b031633146127685760405162461bcd60e51b8152600401610ba4906136bf565b6001600160a01b03166000908152600260205260409020805460ff19169055565b6000546001600160a01b031633146127b35760405162461bcd60e51b8152600401610ba4906136bf565b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b60006127e38383613133565b9392505050565b60175434146128325760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0819995948185b5bdd5b9d60621b6044820152606401610ba4565b600354612848906001600160a01b031685613133565b80156128655750600454612865906001600160a01b031684613133565b80156128825750600554612882906001600160a01b031683613133565b801561289f575060065461289f906001600160a01b031682613133565b6128eb5760405162461bcd60e51b815260206004820152601f60248201527f4f6e65206f72206d6f726520746f6b656e7320646f206e6f74206578697374006044820152606401610ba4565b6003546040516331a9108f60e11b81526004810186905233916001600160a01b031690636352211e90602401602060405180830381865afa158015612934573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295891906138df565b6001600160a01b0316146129ba5760405162461bcd60e51b815260206004820152602360248201527f43616c6c657220646f6573206e6f74206f776e207468652052796b657220746f60448201526235b2b760e91b6064820152608401610ba4565b600480546040516331a9108f60e11b815291820185905233916001600160a01b0390911690636352211e90602401602060405180830381865afa158015612a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2991906138df565b6001600160a01b031614612a8a5760405162461bcd60e51b815260206004820152602260248201527f43616c6c657220646f6573206e6f74206f776e20746865204c756e6120746f6b60448201526132b760f11b6064820152608401610ba4565b6005546040516331a9108f60e11b81526004810184905233916001600160a01b031690636352211e90602401602060405180830381865afa158015612ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af791906138df565b6001600160a01b031614612b585760405162461bcd60e51b815260206004820152602260248201527f43616c6c657220646f6573206e6f74206f776e20746865204172696120746f6b60448201526132b760f11b6064820152608401610ba4565b6006546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906138df565b6001600160a01b031614612c2a5760405162461bcd60e51b815260206004820152602660248201527f43616c6c657220646f6573206e6f74206f776e20746865205468616464657573604482015265103a37b5b2b760d11b6064820152608401610ba4565b601a54601854600354604051631b8bfea360e01b81526001600160a01b0392831692631b8bfea392612c6692911690899060199060040161399e565b602060405180830381865afa158015612c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca791906136a6565b148015612d2e5750601a5460185460048054604051631b8bfea360e01b81526001600160a01b0393841693631b8bfea393612ceb939091169189916019910161399e565b602060405180830381865afa158015612d08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2c91906136a6565b145b8015612db45750601a54601854600554604051631b8bfea360e01b81526001600160a01b0392831692631b8bfea392612d7192911690879060199060040161399e565b602060405180830381865afa158015612d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db291906136a6565b145b8015612e3a5750601a54601854600654604051631b8bfea360e01b81526001600160a01b0392831692631b8bfea392612df792911690869060199060040161399e565b602060405180830381865afa158015612e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3891906136a6565b145b612e955760405162461bcd60e51b815260206004820152602660248201527f417474726962757465206973206e6f742073657420746f2072657175697265646044820152652076616c756560d01b6064820152608401610ba4565b6003546001600160a01b039081166000908152601c602081815260408084208985528252808420805460ff199081166001908117909255600454871686528484528286208a875284528286208054821683179055600554871686528484528286208987528452828620805482168317905560065487168652938352818520878652909252808420805490931682179092555490519216913480156108fc0292909190818181858888f19350505050158015612f54573d6000803e3d6000fd5b50604080513381526020810186905290810184905260608101839052608081018290527f502c4af0afde8aea2e7efd8ea4933fb7349ee09129a2f83cf3aa25b7d03136979060a00160405180910390a150505050565b6000546001600160a01b0316331480612fd257503360009081526002602052604090205460ff165b612fee5760405162461bcd60e51b8152600401610ba49061381b565b601854604051637690433960e11b81526001600160a01b039091169063ed20867290613024908790879087908790600401613915565b600060405180830381600087803b15801561303e57600080fd5b505af1158015613052573d6000803e3d6000fd5b5050505050505050565b60198054610a7b9061363c565b6000546001600160a01b031633146130935760405162461bcd60e51b8152600401610ba4906136bf565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527fe2cdf20f5c4ba7d71a1d649374dab6285996328cd5771c70d426b799638a43d39060200160405180910390a150565b6000546001600160a01b031633146131115760405162461bcd60e51b8152600401610ba4906136bf565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319791906136a6565b9091111592915050565b6000815180845260005b818110156131c7576020818501810151868301820152016131ab565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006127e360208301846131a1565b6001600160a01b038116811461320f57600080fd5b50565b6000806040838503121561322557600080fd5b8235613230816131fa565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261326557600080fd5b813567ffffffffffffffff808211156132805761328061323e565b604051601f8301601f19908116603f011681019082821181831017156132a8576132a861323e565b816040528381528660208588010111156132c157600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156132f657600080fd5b8335613301816131fa565b925060208401359150604084013567ffffffffffffffff81111561332457600080fd5b61333086828701613254565b9150509250925092565b60006020828403121561334c57600080fd5b81356127e3816131fa565b6000806040838503121561336a57600080fd5b823567ffffffffffffffff81111561338157600080fd5b61338d85828601613254565b95602094909401359450505050565b6020808252825182820181905260009190848201906040850190845b818110156133dd5783516001600160a01b0316835292840192918401916001016133b8565b50909695505050505050565b600080600080600060a0868803121561340157600080fd5b853594506020860135935060408601359250606086013591506080860135801515811461342d57600080fd5b809150509295509295909350565b6000806020838503121561344e57600080fd5b823567ffffffffffffffff8082111561346657600080fd5b818501915085601f83011261347a57600080fd5b81358181111561348957600080fd5b8660208260051b850101111561349e57600080fd5b60209290920196919550909350505050565b600080600080600060a086880312156134c857600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff8111156134fb57600080fd5b61350788828901613254565b9150509295509295909350565b60006020828403121561352657600080fd5b5035919050565b60008060008060008060c0878903121561354657600080fd5b86359550602087013594506040870135935060608701359250608087013561ffff8116811461357457600080fd5b915060a087013567ffffffffffffffff81111561359057600080fd5b61359c89828a01613254565b9150509295509295509295565b600080600080608085870312156135bf57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080608085870312156135f157600080fd5b84356135fc816131fa565b935060208501359250604085013567ffffffffffffffff81111561361f57600080fd5b61362b87828801613254565b949793965093946060013593505050565b600181811c9082168061365057607f821691505b60208210810361367057634e487b7160e01b600052602260045260246000fd5b50919050565b60018060a01b038416815282602082015260606040820152600061369d60608301846131a1565b95945050505050565b6000602082840312156136b857600080fd5b5051919050565b60208082526017908201527f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b601f82111561374057600081815260208120601f850160051c8101602086101561371d5750805b601f850160051c820191505b8181101561373c57828155600101613729565b5050505b505050565b815167ffffffffffffffff81111561375f5761375f61323e565b6137738161376d845461363c565b846136f6565b602080601f8311600181146137a857600084156137905750858301515b600019600386901b1c1916600185901b17855561373c565b600085815260208120601f198616915b828110156137d7578886015182559484019460019091019084016137b8565b50858210156137f55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b60208082526026908201527f43616c6c6572206973206e6f7420746865206f776e6572206f7220636f6e747260408201526534b13aba37b960d11b606082015260800190565b86815285602082015284604082015283606082015260c06080820152600061388c60c08301856131a1565b905060018060a01b03831660a0830152979650505050505050565b634e487b7160e01b600052601160045260246000fd5b61ffff8281168282160390808211156138d8576138d86138a7565b5092915050565b6000602082840312156138f157600080fd5b81516127e3816131fa565b60006001820161390e5761390e6138a7565b5060010190565b60018060a01b038516815283602082015260806040820152600061393c60808301856131a1565b905082606083015295945050505050565b87815286602082015285604082015284606082015261ffff8416608082015260e060a0820152600061398260e08301856131a1565b905060018060a01b03831660c083015298975050505050505050565b60018060a01b038416815260006020848184015260606040840152600084546139c68161363c565b80606087015260806001808416600081146139e85760018114613a0257613a30565b60ff1985168984015283151560051b890183019550613a30565b896000528660002060005b85811015613a285781548b8201860152908301908801613a0d565b8a0184019650505b50939a995050505050505050505056fea2646970667358221220dae20bc5e0c5919a5fe50744a1f6d859e7dfa928646a9ad427c487b7b81c257b64736f6c63430008150033

Block Transaction Gas Used Reward
view all blocks collator

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.