ETH Price: $3,305.36 (-2.30%)

Contract

0xe372ED8d188517eF4d4bC464C0c068d2002E2903
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Buy Land With ET...106706372020-08-16 10:44:141908 days ago1597574654IN
0xe372ED8d...2002E2903
0.26314438 ETH0.0067653192
Buy Land With ET...106154262020-08-07 22:30:391917 days ago1596839439IN
0xe372ED8d...2002E2903
0.2627583 ETH0.0028266466
Buy Land With ET...106154262020-08-07 22:30:391917 days ago1596839439IN
0xe372ED8d...2002E2903
0.26314438 ETH0.0028701467
Buy Land With ET...106154262020-08-07 22:30:391917 days ago1596839439IN
0xe372ED8d...2002E2903
0.26343638 ETH0.0028693467
Buy Land With ET...106154262020-08-07 22:30:391917 days ago1596839439IN
0xe372ED8d...2002E2903
0.26343638 ETH0.0028693467
Buy Land With ET...106154262020-08-07 22:30:391917 days ago1596839439IN
0xe372ED8d...2002E2903
0.26314438 ETH0.0031262973
Buy Land With ET...106019422020-08-05 20:35:441919 days ago1596659744IN
0xe372ED8d...2002E2903
0.11342084 ETH0.0030066942
Buy Land With ET...106019422020-08-05 20:35:441919 days ago1596659744IN
0xe372ED8d...2002E2903
0.11342084 ETH0.0008590512
Buy Land With ET...105983212020-08-05 7:06:471920 days ago1596611207IN
0xe372ED8d...2002E2903
0.11324304 ETH0.0027519641
Buy Land With ET...105983202020-08-05 7:06:391920 days ago1596611199IN
0xe372ED8d...2002E2903
0.11265531 ETH0.0059668455
Buy Land With ET...105983182020-08-05 7:06:081920 days ago1596611168IN
0xe372ED8d...2002E2903
0.11265531 ETH0.0067896455
Buy Land With ET...105983182020-08-05 7:06:081920 days ago1596611168IN
0xe372ED8d...2002E2903
0.11265531 ETH0.0060724156
Buy Land With ET...105983172020-08-05 7:05:581920 days ago1596611158IN
0xe372ED8d...2002E2903
0.11265531 ETH0.0059628855
Buy Land With ET...105983152020-08-05 7:05:321920 days ago1596611132IN
0xe372ED8d...2002E2903
0.11265531 ETH0.0060717456
Buy Land With ET...105983152020-08-05 7:05:321920 days ago1596611132IN
0xe372ED8d...2002E2903
0.11265531 ETH0.006073256
Buy Land With ET...105983132020-08-05 7:05:041920 days ago1596611104IN
0xe372ED8d...2002E2903
0.11265531 ETH0.006072356
Buy Land With ET...105983112020-08-05 7:04:341920 days ago1596611074IN
0xe372ED8d...2002E2903
0.11265531 ETH0.0060730856
Buy Land With ET...105983102020-08-05 7:04:201920 days ago1596611060IN
0xe372ED8d...2002E2903
0.11265531 ETH0.0059651955
Buy Land With ET...105983072020-08-05 7:04:091920 days ago1596611049IN
0xe372ED8d...2002E2903
0.11265531 ETH0.0060711856
Buy Land With ET...105983052020-08-05 7:03:391920 days ago1596611019IN
0xe372ED8d...2002E2903
0.11265531 ETH0.0059645355
Buy Land With ET...105983042020-08-05 7:03:231920 days ago1596611003IN
0xe372ED8d...2002E2903
0.11265531 ETH0.0060737656
Buy Land With ET...105983032020-08-05 7:02:381920 days ago1596610958IN
0xe372ED8d...2002E2903
0.11265531 ETH0.0059651955
Buy Land With ET...105983032020-08-05 7:02:381920 days ago1596610958IN
0xe372ED8d...2002E2903
0.11265531 ETH0.0059661855
Buy Land With ET...105983002020-08-05 7:02:251920 days ago1596610945IN
0xe372ED8d...2002E2903
0.11265531 ETH0.0059640955
Buy Land With ET...105982982020-08-05 7:02:141920 days ago1596610934IN
0xe372ED8d...2002E2903
0.11265531 ETH0.005965355
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-106706372020-08-16 10:44:141908 days ago1597574654
0xe372ED8d...2002E2903
0.23432725 ETH
-106706372020-08-16 10:44:141908 days ago1597574654
0xe372ED8d...2002E2903
0.02881712 ETH
-106019422020-08-05 20:35:441919 days ago1596659744
0xe372ED8d...2002E2903
0.10879145 ETH
-106019422020-08-05 20:35:441919 days ago1596659744
0xe372ED8d...2002E2903
0.00462939 ETH
-106019422020-08-05 20:35:441919 days ago1596659744
0xe372ED8d...2002E2903
0.10879145 ETH
-106019422020-08-05 20:35:441919 days ago1596659744
0xe372ED8d...2002E2903
0.00462939 ETH
-105983212020-08-05 7:06:471920 days ago1596611207
0xe372ED8d...2002E2903
0.11044638 ETH
-105983212020-08-05 7:06:471920 days ago1596611207
0xe372ED8d...2002E2903
0.00279665 ETH
-105983202020-08-05 7:06:391920 days ago1596611199
0xe372ED8d...2002E2903
0.11044638 ETH
-105983202020-08-05 7:06:391920 days ago1596611199
0xe372ED8d...2002E2903
0.00220892 ETH
-105983182020-08-05 7:06:081920 days ago1596611168
0xe372ED8d...2002E2903
0.11044638 ETH
-105983182020-08-05 7:06:081920 days ago1596611168
0xe372ED8d...2002E2903
0.00220892 ETH
-105983182020-08-05 7:06:081920 days ago1596611168
0xe372ED8d...2002E2903
0.11044638 ETH
-105983182020-08-05 7:06:081920 days ago1596611168
0xe372ED8d...2002E2903
0.00220892 ETH
-105983172020-08-05 7:05:581920 days ago1596611158
0xe372ED8d...2002E2903
0.11044638 ETH
-105983172020-08-05 7:05:581920 days ago1596611158
0xe372ED8d...2002E2903
0.00220892 ETH
-105983152020-08-05 7:05:321920 days ago1596611132
0xe372ED8d...2002E2903
0.11044638 ETH
-105983152020-08-05 7:05:321920 days ago1596611132
0xe372ED8d...2002E2903
0.00220892 ETH
-105983152020-08-05 7:05:321920 days ago1596611132
0xe372ED8d...2002E2903
0.11044638 ETH
-105983152020-08-05 7:05:321920 days ago1596611132
0xe372ED8d...2002E2903
0.00220892 ETH
-105983132020-08-05 7:05:041920 days ago1596611104
0xe372ED8d...2002E2903
0.11044638 ETH
-105983132020-08-05 7:05:041920 days ago1596611104
0xe372ED8d...2002E2903
0.00220892 ETH
-105983112020-08-05 7:04:341920 days ago1596611074
0xe372ED8d...2002E2903
0.11044638 ETH
-105983112020-08-05 7:04:341920 days ago1596611074
0xe372ED8d...2002E2903
0.00220892 ETH
-105983102020-08-05 7:04:201920 days ago1596611060
0xe372ED8d...2002E2903
0.11044638 ETH
View All Internal Transactions
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
EstateSale

Compiler Version
v0.6.5+commit.f956cc89

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion, Unlicense license
/* solhint-disable not-rely-on-time, func-order */
pragma solidity 0.6.5;

import "../contracts_common/src/Libraries/SafeMathWithRequire.sol";
import "./LandToken.sol";
import "../contracts_common/src/Interfaces/ERC1155.sol";
import "../contracts_common/src/Interfaces/ERC20.sol";
import "../contracts_common/src/BaseWithStorage/MetaTransactionReceiver.sol";
import "../contracts_common/src/Interfaces/Medianizer.sol";
import "../ReferralValidator/ReferralValidator.sol";


/**
 * @title Estate Sale contract with referral that supports also DAI and ETH as payment
 * @notice This contract mananges the sale of our lands as Estates
 */
contract EstateSale is MetaTransactionReceiver, ReferralValidator {
    using SafeMathWithRequire for uint256;

    uint256 internal constant GRID_SIZE = 408; // 408 is the size of the Land
    uint256 internal constant daiPrice = 14400000000000000;

    ERC1155 internal immutable _asset;
    LandToken internal immutable _land;
    ERC20 internal immutable _sand;
    Medianizer private immutable _medianizer;
    ERC20 private immutable _dai;
    address internal immutable _estate;

    address payable internal _wallet;
    uint256 internal immutable _expiryTime;
    bytes32 internal immutable _merkleRoot;

    bool _sandEnabled = false;
    bool _etherEnabled = true;
    bool _daiEnabled = false;

    event LandQuadPurchased(
        address indexed buyer,
        address indexed to,
        uint256 indexed topCornerId,
        uint256 size,
        uint256 price,
        address token,
        uint256 amountPaid
    );

    constructor(
        address landAddress,
        address sandContractAddress,
        address initialMetaTx,
        address admin,
        address payable initialWalletAddress,
        bytes32 merkleRoot,
        uint256 expiryTime,
        address medianizerContractAddress,
        address daiTokenContractAddress,
        address initialSigningWallet,
        uint256 initialMaxCommissionRate,
        address estate,
        address asset
    ) public ReferralValidator(initialSigningWallet, initialMaxCommissionRate) {
        _land = LandToken(landAddress);
        _sand = ERC20(sandContractAddress);
        _setMetaTransactionProcessor(initialMetaTx, true);
        _wallet = initialWalletAddress;
        _merkleRoot = merkleRoot;
        _expiryTime = expiryTime;
        _medianizer = Medianizer(medianizerContractAddress);
        _dai = ERC20(daiTokenContractAddress);
        _admin = admin;
        _estate = estate;
        _asset = ERC1155(asset);
    }

    /// @dev set the wallet receiving the proceeds
    /// @param newWallet address of the new receiving wallet
    function setReceivingWallet(address payable newWallet) external {
        require(newWallet != address(0), "receiving wallet cannot be zero address");
        require(msg.sender == _admin, "only admin can change the receiving wallet");
        _wallet = newWallet;
    }

    /// @dev enable/disable DAI payment for Lands
    /// @param enabled whether to enable or disable
    function setDAIEnabled(bool enabled) external {
        require(msg.sender == _admin, "only admin can enable/disable DAI");
        _daiEnabled = enabled;
    }

    /// @notice return whether DAI payments are enabled
    /// @return whether DAI payments are enabled
    function isDAIEnabled() external view returns (bool) {
        return _daiEnabled;
    }

    /// @notice enable/disable ETH payment for Lands
    /// @param enabled whether to enable or disable
    function setETHEnabled(bool enabled) external {
        require(msg.sender == _admin, "only admin can enable/disable ETH");
        _etherEnabled = enabled;
    }

    /// @notice return whether ETH payments are enabled
    /// @return whether ETH payments are enabled
    function isETHEnabled() external view returns (bool) {
        return _etherEnabled;
    }

    /// @dev enable/disable the specific SAND payment for Lands
    /// @param enabled whether to enable or disable
    function setSANDEnabled(bool enabled) external {
        require(msg.sender == _admin, "only admin can enable/disable SAND");
        _sandEnabled = enabled;
    }

    /// @notice return whether the specific SAND payments are enabled
    /// @return whether the specific SAND payments are enabled
    function isSANDEnabled() external view returns (bool) {
        return _sandEnabled;
    }

    function _checkValidity(
        address buyer,
        address reserved,
        uint256 x,
        uint256 y,
        uint256 size,
        uint256 price,
        bytes32 salt,
        uint256[] memory assetIds,
        bytes32[] memory proof
    ) internal view {
        /* solium-disable-next-line security/no-block-members */
        require(block.timestamp < _expiryTime, "sale is over");
        require(buyer == msg.sender || _metaTransactionContracts[msg.sender], "not authorized");
        require(reserved == address(0) || reserved == buyer, "cannot buy reserved Land");
        bytes32 leaf = _generateLandHash(x, y, size, price, reserved, salt, assetIds);

        require(_verify(proof, leaf), "Invalid land provided");
    }

    function _mint(
        address buyer,
        address to,
        uint256 x,
        uint256 y,
        uint256 size,
        uint256 price,
        address token,
        uint256 tokenAmount
    ) internal {
        if (size == 1 || _estate == address(0)) {
            _land.mintQuad(to, size, x, y, "");
        } else {
            _land.mintQuad(_estate, size, x, y, abi.encode(to));
        }
        emit LandQuadPurchased(buyer, to, x + (y * GRID_SIZE), size, price, token, tokenAmount);
    }

    /**
     * @notice buy Land with SAND using the merkle proof associated with it
     * @param buyer address that perform the payment
     * @param to address that will own the purchased Land
     * @param reserved the reserved address (if any)
     * @param x x coordinate of the Land
     * @param y y coordinate of the Land
     * @param size size of the pack of Land to purchase
     * @param priceInSand price in SAND to purchase that Land
     * @param proof merkleProof for that particular Land
     */
    function buyLandWithSand(
        address buyer,
        address to,
        address reserved,
        uint256 x,
        uint256 y,
        uint256 size,
        uint256 priceInSand,
        bytes32 salt,
        uint256[] calldata assetIds,
        bytes32[] calldata proof,
        bytes calldata referral
    ) external {
        require(_sandEnabled, "sand payments not enabled");
        _checkValidity(buyer, reserved, x, y, size, priceInSand, salt, assetIds, proof);

        handleReferralWithERC20(buyer, priceInSand, referral, _wallet, address(_sand));

        _mint(buyer, to, x, y, size, priceInSand, address(_sand), priceInSand);
        _sendAssets(to, assetIds);
    }

    /**
     * @notice buy Land with ETH using the merkle proof associated with it
     * @param buyer address that perform the payment
     * @param to address that will own the purchased Land
     * @param reserved the reserved address (if any)
     * @param x x coordinate of the Land
     * @param y y coordinate of the Land
     * @param size size of the pack of Land to purchase
     * @param priceInSand price in SAND to purchase that Land
     * @param proof merkleProof for that particular Land
     * @param referral the referral used by the buyer
     */
    function buyLandWithETH(
        address buyer,
        address to,
        address reserved,
        uint256 x,
        uint256 y,
        uint256 size,
        uint256 priceInSand,
        bytes32 salt,
        uint256[] calldata assetIds,
        bytes32[] calldata proof,
        bytes calldata referral
    ) external payable {
        require(_etherEnabled, "ether payments not enabled");
        _checkValidity(buyer, reserved, x, y, size, priceInSand, salt, assetIds, proof);

        uint256 ETHRequired = getEtherAmountWithSAND(priceInSand);
        require(msg.value >= ETHRequired, "not enough ether sent");

        if (msg.value - ETHRequired > 0) {
            msg.sender.transfer(msg.value - ETHRequired); // refund extra
        }

        handleReferralWithETH(ETHRequired, referral, _wallet);

        _mint(buyer, to, x, y, size, priceInSand, address(0), ETHRequired);
        _sendAssets(to, assetIds);
    }

    /**
     * @notice buy Land with DAI using the merkle proof associated with it
     * @param buyer address that perform the payment
     * @param to address that will own the purchased Land
     * @param reserved the reserved address (if any)
     * @param x x coordinate of the Land
     * @param y y coordinate of the Land
     * @param size size of the pack of Land to purchase
     * @param priceInSand price in SAND to purchase that Land
     * @param proof merkleProof for that particular Land
     */
    function buyLandWithDAI(
        address buyer,
        address to,
        address reserved,
        uint256 x,
        uint256 y,
        uint256 size,
        uint256 priceInSand,
        bytes32 salt,
        uint256[] calldata assetIds,
        bytes32[] calldata proof,
        bytes calldata referral
    ) external {
        require(_daiEnabled, "dai payments not enabled");
        _checkValidity(buyer, reserved, x, y, size, priceInSand, salt, assetIds, proof);

        uint256 DAIRequired = priceInSand.mul(daiPrice).div(1000000000000000000);

        handleReferralWithERC20(buyer, DAIRequired, referral, _wallet, address(_dai));

        _mint(buyer, to, x, y, size, priceInSand, address(_dai), DAIRequired);
        _sendAssets(to, assetIds);
    }

    /**
     * @notice Gets the expiry time for the current sale
     * @return The expiry time, as a unix epoch
     */
    function getExpiryTime() external view returns (uint256) {
        return _expiryTime;
    }

    /**
     * @notice Gets the Merkle root associated with the current sale
     * @return The Merkle root, as a bytes32 hash
     */
    function merkleRoot() external view returns (bytes32) {
        return _merkleRoot;
    }

    function _sendAssets(address to, uint256[] memory assetIds) internal {
        uint256[] memory values = new uint256[](assetIds.length);
        for (uint256 i = 0; i < assetIds.length; i++) {
            values[i] = 1;
        }
        _asset.safeBatchTransferFrom(address(this), to, assetIds, values, "");
    }

    function _generateLandHash(
        uint256 x,
        uint256 y,
        uint256 size,
        uint256 price,
        address reserved,
        bytes32 salt,
        uint256[] memory assetIds
    ) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked(x, y, size, price, reserved, salt, assetIds));
    }

    function _verify(bytes32[] memory proof, bytes32 leaf) internal view returns (bool) {
        bytes32 computedHash = leaf;

        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];

            if (computedHash < proofElement) {
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }

        return computedHash == _merkleRoot;
    }

    /**
     * @notice Returns the amount of ETH for a specific amount of SAND
     * @param sandAmount An amount of SAND
     * @return The amount of ETH
     */
    function getEtherAmountWithSAND(uint256 sandAmount) public view returns (uint256) {
        uint256 ethUsdPair = getEthUsdPair();
        return sandAmount.mul(daiPrice).div(ethUsdPair);
    }

    /**
     * @notice Gets the ETHUSD pair from the Medianizer contract
     * @return The pair as an uint256
     */
    function getEthUsdPair() internal view returns (uint256) {
        bytes32 pair = _medianizer.read();
        return uint256(pair);
    }

    function onERC1155Received(
        address, /*operator*/
        address, /*from*/
        uint256, /*id*/
        uint256, /*value*/
        bytes calldata /*data*/
    ) external pure returns (bytes4) {
        return 0xf23a6e61;
    }

    function onERC1155BatchReceived(
        address, /*operator*/
        address, /*from*/
        uint256[] calldata, /*ids*/
        uint256[] calldata, /*values*/
        bytes calldata /*data*/
    ) external pure returns (bytes4) {
        return 0xbc197c81;
    }

    function withdrawAssets(
        address to,
        uint256[] calldata assetIds,
        uint256[] calldata values
    ) external {
        require(msg.sender == _admin, "NOT_AUTHORIZED");
        require(block.timestamp > _expiryTime, "SALE_NOT_OVER");
        _asset.safeBatchTransferFrom(address(this), to, assetIds, values, "");
    }
}

File 2 of 10 : LandToken.sol
pragma solidity 0.6.5;


interface LandToken {
    function mintQuad(
        address to,
        uint256 size,
        uint256 x,
        uint256 y,
        bytes calldata data
    ) external;
}

/* solhint-disable not-rely-on-time, func-order */
pragma solidity 0.6.5;

import "../contracts_common/src/Libraries/SigUtil.sol";
import "../contracts_common/src/Libraries/SafeMathWithRequire.sol";
import "../contracts_common/src/Interfaces/ERC20.sol";
import "../contracts_common/src/BaseWithStorage/Admin.sol";


/// @dev This contract verifies if a referral is valid
contract ReferralValidator is Admin {
    address private _signingWallet;
    uint256 private _maxCommissionRate;

    mapping(address => uint256) private _previousSigningWallets;
    uint256 private _previousSigningDelay = 60 * 60 * 24 * 10;

    event ReferralUsed(
        address indexed referrer,
        address indexed referee,
        address indexed token,
        uint256 amount,
        uint256 commission,
        uint256 commissionRate
    );

    constructor(address initialSigningWallet, uint256 initialMaxCommissionRate) public {
        _signingWallet = initialSigningWallet;
        _maxCommissionRate = initialMaxCommissionRate;
    }

    /**
     * @dev Update the signing wallet
     * @param newSigningWallet The new address of the signing wallet
     */
    function updateSigningWallet(address newSigningWallet) external {
        require(_admin == msg.sender, "Sender not admin");
        _previousSigningWallets[_signingWallet] = now + _previousSigningDelay;
        _signingWallet = newSigningWallet;
    }

    /**
     * @dev signing wallet authorized for referral
     * @return the address of the signing wallet
     */
    function getSigningWallet() external view returns (address) {
        return _signingWallet;
    }

    /**
     * @notice the max commision rate
     * @return the maximum commision rate that a referral can give
     */
    function getMaxCommisionRate() external view returns (uint256) {
        return _maxCommissionRate;
    }

    /**
     * @dev Update the maximum commission rate
     * @param newMaxCommissionRate The new maximum commission rate
     */
    function updateMaxCommissionRate(uint256 newMaxCommissionRate) external {
        require(_admin == msg.sender, "Sender not admin");
        _maxCommissionRate = newMaxCommissionRate;
    }

    function handleReferralWithETH(
        uint256 amount,
        bytes memory referral,
        address payable destination
    ) internal {
        uint256 amountForDestination = amount;

        if (referral.length > 0) {
            (bytes memory signature, address referrer, address referee, uint256 expiryTime, uint256 commissionRate) = decodeReferral(referral);

            uint256 commission = 0;

            if (isReferralValid(signature, referrer, referee, expiryTime, commissionRate)) {
                commission = SafeMathWithRequire.div(SafeMathWithRequire.mul(amount, commissionRate), 10000);

                emit ReferralUsed(referrer, referee, address(0), amount, commission, commissionRate);
                amountForDestination = SafeMathWithRequire.sub(amountForDestination, commission);
            }

            if (commission > 0) {
                address(uint160(referrer)).transfer(commission);
            }
        }

        destination.transfer(amountForDestination);
    }

    function handleReferralWithERC20(
        address buyer,
        uint256 amount,
        bytes memory referral,
        address payable destination,
        address tokenAddress
    ) internal {
        ERC20 token = ERC20(tokenAddress);
        uint256 amountForDestination = amount;

        if (referral.length > 0) {
            (bytes memory signature, address referrer, address referee, uint256 expiryTime, uint256 commissionRate) = decodeReferral(referral);

            uint256 commission = 0;

            if (isReferralValid(signature, referrer, referee, expiryTime, commissionRate)) {
                commission = SafeMathWithRequire.div(SafeMathWithRequire.mul(amount, commissionRate), 10000);

                emit ReferralUsed(referrer, referee, tokenAddress, amount, commission, commissionRate);
                amountForDestination = SafeMathWithRequire.sub(amountForDestination, commission);
            }

            if (commission > 0) {
                require(token.transferFrom(buyer, referrer, commission), "commision transfer failed");
            }
        }

        require(token.transferFrom(buyer, destination, amountForDestination), "payment transfer failed");
    }

    /**
     * @notice Check if a referral is valid
     * @param signature The signature to check (signed referral)
     * @param referrer The address of the referrer
     * @param referee The address of the referee
     * @param expiryTime The expiry time of the referral
     * @param commissionRate The commissionRate of the referral
     * @return True if the referral is valid
     */
    function isReferralValid(
        bytes memory signature,
        address referrer,
        address referee,
        uint256 expiryTime,
        uint256 commissionRate
    ) public view returns (bool) {
        if (commissionRate > _maxCommissionRate || referrer == referee || now > expiryTime) {
            return false;
        }

        bytes32 hashedData = keccak256(abi.encodePacked(referrer, referee, expiryTime, commissionRate));

        address signer = SigUtil.recover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hashedData)), signature);

        if (_previousSigningWallets[signer] >= now) {
            return true;
        }

        return _signingWallet == signer;
    }

    function decodeReferral(bytes memory referral)
        public
        pure
        returns (
            bytes memory,
            address,
            address,
            uint256,
            uint256
        )
    {
        (bytes memory signature, address referrer, address referee, uint256 expiryTime, uint256 commissionRate) = abi.decode(
            referral,
            (bytes, address, address, uint256, uint256)
        );

        return (signature, referrer, referee, expiryTime, commissionRate);
    }
}

pragma solidity ^0.6.0;


contract Admin {
    address internal _admin;

    /// @dev emitted when the contract administrator is changed.
    /// @param oldAdmin address of the previous administrator.
    /// @param newAdmin address of the new administrator.
    event AdminChanged(address oldAdmin, address newAdmin);

    /// @dev gives the current administrator of this contract.
    /// @return the current administrator of this contract.
    function getAdmin() external view returns (address) {
        return _admin;
    }

    /// @dev change the administrator to be `newAdmin`.
    /// @param newAdmin address of the new administrator.
    function changeAdmin(address newAdmin) external {
        require(msg.sender == _admin, "only admin can change admin");
        emit AdminChanged(_admin, newAdmin);
        _admin = newAdmin;
    }

    modifier onlyAdmin() {
        require(msg.sender == _admin, "only admin allowed");
        _;
    }
}

pragma solidity ^0.6.0;

import "./Admin.sol";


contract MetaTransactionReceiver is Admin {
    mapping(address => bool) internal _metaTransactionContracts;

    /// @dev emiited when a meta transaction processor is enabled/disabled
    /// @param metaTransactionProcessor address that will be given/removed metaTransactionProcessor rights.
    /// @param enabled set whether the metaTransactionProcessor is enabled or disabled.
    event MetaTransactionProcessor(address metaTransactionProcessor, bool enabled);

    /// @dev Enable or disable the ability of `metaTransactionProcessor` to perform meta-tx (metaTransactionProcessor rights).
    /// @param metaTransactionProcessor address that will be given/removed metaTransactionProcessor rights.
    /// @param enabled set whether the metaTransactionProcessor is enabled or disabled.
    function setMetaTransactionProcessor(address metaTransactionProcessor, bool enabled) public {
        require(msg.sender == _admin, "only admin can setup metaTransactionProcessors");
        _setMetaTransactionProcessor(metaTransactionProcessor, enabled);
    }

    function _setMetaTransactionProcessor(address metaTransactionProcessor, bool enabled) internal {
        _metaTransactionContracts[metaTransactionProcessor] = enabled;
        emit MetaTransactionProcessor(metaTransactionProcessor, enabled);
    }

    /// @dev check whether address `who` is given meta-transaction execution rights.
    /// @param who The address to query.
    /// @return whether the address has meta-transaction execution rights.
    function isMetaTransactionProcessor(address who) external view returns (bool) {
        return _metaTransactionContracts[who];
    }
}

pragma solidity ^0.6.0;


/**
    @title ERC-1155 Multi Token Standard
    @dev See https://eips.ethereum.org/EIPS/eip-1155
    Note: The ERC-165 identifier for this interface is 0xd9b67a26.
 */
interface ERC1155 {
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    event URI(string value, uint256 indexed id);

    /**
        @notice Transfers `value` amount of an `id` from  `from` to `to`  (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `from` account (see "Approval" section of the standard).
        MUST revert if `to` is the zero address.
        MUST revert if balance of holder for token `id` is lower than the `value` sent.
        MUST revert on any other error.
        MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
        After the above conditions are met, this function MUST check if `to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param from    Source address
        @param to      Target address
        @param id      ID of the token type
        @param value   Transfer amount
        @param data    Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `to`
    */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external;

    /**
        @notice Transfers `values` amount(s) of `ids` from the `from` address to the `to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `from` account (see "Approval" section of the standard).
        MUST revert if `to` is the zero address.
        MUST revert if length of `ids` is not the same as length of `values`.
        MUST revert if any of the balance(s) of the holder(s) for token(s) in `ids` is lower than the respective amount(s) in `values` sent to the recipient.
        MUST revert on any other error.
        MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard).
        Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc).
        After the above conditions for the transfer(s) in the batch are met, this function MUST check if `to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param from    Source address
        @param to      Target address
        @param ids     IDs of each token type (order and length must match _values array)
        @param values  Transfer amounts per token type (order and length must match _ids array)
        @param data    Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `to`
    */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external;

    /**
        @notice Get the balance of an account's tokens.
        @param owner  The address of the token holder
        @param id     ID of the token
        @return        The _owner's balance of the token type requested
     */
    function balanceOf(address owner, uint256 id) external view returns (uint256);

    /**
        @notice Get the balance of multiple account/token pairs
        @param owners The addresses of the token holders
        @param ids    ID of the tokens
        @return        The _owner's balance of the token types requested (i.e. balance for each (owner, id) pair)
     */
    function balanceOfBatch(address[] calldata owners, uint256[] calldata ids) external view returns (uint256[] memory);

    /**
        @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.
        @dev MUST emit the ApprovalForAll event on success.
        @param operator  Address to add to the set of authorized operators
        @param approved  True if the operator is approved, false to revoke approval
    */
    function setApprovalForAll(address operator, bool approved) external;

    /**
        @notice Queries the approval status of an operator for a given owner.
        @param owner     The owner of the tokens
        @param operator  Address of authorized operator
        @return           True if the operator is approved, false if not
    */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

pragma solidity ^0.6.0;


/// @dev see https://eips.ethereum.org/EIPS/eip-20
interface ERC20 {
    /// @notice emitted when tokens are transfered from one address to another.
    /// @param from address from which the token are transfered from (zero means tokens are minted).
    /// @param to destination address which the token are transfered to (zero means tokens are burnt).
    /// @param value amount of tokens transferred.
    event Transfer(address indexed from, address indexed to, uint256 value);

    /// @notice emitted when owner grant transfer rights to another address
    /// @param owner address allowing its token to be transferred.
    /// @param spender address allowed to spend on behalf of `owner`
    /// @param value amount of tokens allowed.
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /// @notice return the current total amount of tokens owned by all holders.
    /// @return supply total number of tokens held.
    function totalSupply() external view returns (uint256 supply);

    /// @notice return the number of tokens held by a particular address.
    /// @param who address being queried.
    /// @return balance number of token held by that address.
    function balanceOf(address who) external view returns (uint256 balance);

    /// @notice transfer tokens to a specific address.
    /// @param to destination address receiving the tokens.
    /// @param value number of tokens to transfer.
    /// @return success whether the transfer succeeded.
    function transfer(address to, uint256 value) external returns (bool success);

    /// @notice transfer tokens from one address to another.
    /// @param from address tokens will be sent from.
    /// @param to destination address receiving the tokens.
    /// @param value number of tokens to transfer.
    /// @return success whether the transfer succeeded.
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool success);

    /// @notice approve an address to spend on your behalf.
    /// @param spender address entitled to transfer on your behalf.
    /// @param value amount allowed to be transfered.
    /// @param success whether the approval succeeded.
    function approve(address spender, uint256 value) external returns (bool success);

    /// @notice return the current allowance for a particular owner/spender pair.
    /// @param owner address allowing spender.
    /// @param spender address allowed to spend.
    /// @return amount number of tokens `spender` can spend on behalf of `owner`.
    function allowance(address owner, address spender) external view returns (uint256 amount);
}

File 8 of 10 : Medianizer.sol
pragma solidity ^0.6.0;


/**
 * @title Medianizer contract
 * @dev From MakerDAO (https://etherscan.io/address/0x729D19f657BD0614b4985Cf1D82531c67569197B#code)
 */
interface Medianizer {
    function read() external view returns (bytes32);
}

pragma solidity ^0.6.0;


/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert
 */
library SafeMathWithRequire {
    /**
     * @dev Multiplies two numbers, throws on overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        c = a * b;
        require(c / a == b, "overflow");
        return c;
    }

    /**
     * @dev Integer division of two numbers, truncating the quotient.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "divbyzero");
        // uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return a / b;
    }

    /**
     * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "undeflow");
        return a - b;
    }

    /**
     * @dev Adds two numbers, throws on overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        require(c >= a, "overflow");
        return c;
    }
}

pragma solidity ^0.6.0;


library SigUtil {
    function recover(bytes32 hash, bytes memory sig) internal pure returns (address recovered) {
        require(sig.length == 65);

        bytes32 r;
        bytes32 s;
        uint8 v;
        assembly {
            r := mload(add(sig, 32))
            s := mload(add(sig, 64))
            v := byte(0, mload(add(sig, 96)))
        }

        // Version of signature should be 27 or 28, but 0 and 1 are also possible versions
        if (v < 27) {
            v += 27;
        }
        require(v == 27 || v == 28);

        recovered = ecrecover(hash, v, r, s);
        require(recovered != address(0));
    }

    function recoverWithZeroOnFailure(bytes32 hash, bytes memory sig) internal pure returns (address) {
        if (sig.length != 65) {
            return (address(0));
        }

        bytes32 r;
        bytes32 s;
        uint8 v;
        assembly {
            r := mload(add(sig, 32))
            s := mload(add(sig, 64))
            v := byte(0, mload(add(sig, 96)))
        }

        // Version of signature should be 27 or 28, but 0 and 1 are also possible versions
        if (v < 27) {
            v += 27;
        }

        if (v != 27 && v != 28) {
            return (address(0));
        } else {
            return ecrecover(hash, v, r, s);
        }
    }

    // Builds a prefixed hash to mimic the behavior of eth_sign.
    function prefixed(bytes32 hash) internal pure returns (bytes memory) {
        return abi.encodePacked("\x19Ethereum Signed Message:\n32", hash);
    }
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 2000
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"landAddress","type":"address"},{"internalType":"address","name":"sandContractAddress","type":"address"},{"internalType":"address","name":"initialMetaTx","type":"address"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"address payable","name":"initialWalletAddress","type":"address"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"expiryTime","type":"uint256"},{"internalType":"address","name":"medianizerContractAddress","type":"address"},{"internalType":"address","name":"daiTokenContractAddress","type":"address"},{"internalType":"address","name":"initialSigningWallet","type":"address"},{"internalType":"uint256","name":"initialMaxCommissionRate","type":"uint256"},{"internalType":"address","name":"estate","type":"address"},{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"topCornerId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"size","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"}],"name":"LandQuadPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"metaTransactionProcessor","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"MetaTransactionProcessor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":true,"internalType":"address","name":"referee","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"commission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"commissionRate","type":"uint256"}],"name":"ReferralUsed","type":"event"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reserved","type":"address"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"uint256","name":"priceInSand","type":"uint256"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"assetIds","type":"uint256[]"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bytes","name":"referral","type":"bytes"}],"name":"buyLandWithDAI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reserved","type":"address"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"uint256","name":"priceInSand","type":"uint256"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"assetIds","type":"uint256[]"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bytes","name":"referral","type":"bytes"}],"name":"buyLandWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reserved","type":"address"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"uint256","name":"priceInSand","type":"uint256"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"assetIds","type":"uint256[]"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bytes","name":"referral","type":"bytes"}],"name":"buyLandWithSand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"referral","type":"bytes"}],"name":"decodeReferral","outputs":[{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sandAmount","type":"uint256"}],"name":"getEtherAmountWithSAND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExpiryTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxCommisionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSigningWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDAIEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isETHEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"isMetaTransactionProcessor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"address","name":"referee","type":"address"},{"internalType":"uint256","name":"expiryTime","type":"uint256"},{"internalType":"uint256","name":"commissionRate","type":"uint256"}],"name":"isReferralValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSANDEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setDAIEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setETHEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"metaTransactionProcessor","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setMetaTransactionProcessor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setReceivingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSANDEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxCommissionRate","type":"uint256"}],"name":"updateMaxCommissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSigningWallet","type":"address"}],"name":"updateSigningWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"assetIds","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"withdrawAssets","outputs":[],"stateMutability":"nonpayable","type":"function"}]

610180604052620d2f006005556006805460ff60b01b1961ffff60a01b19909116600160a81b171690553480156200003657600080fd5b50604051620030693803806200306983398181016040526101a08110156200005d57600080fd5b50805160208201516040830151606080850151608086015160a08088015160c0808a015160e08b01516101008c01516101208d01516101408e01516101608f0151610180909f0151600280546001600160a01b0319166001600160a01b03851617905560038290558e8c1b6001600160601b03199081169099529a8d901b9097169094529a9b999a9899969895979396919590949093909190620001038b600162000179565b600680546001600160a01b039a8b166001600160a01b03199182161790915561016098909852610140969096526001600160601b0319606095861b811660e05293851b8416610100526000805499909816989096169790971790955592811b8316610120521b1660805250620001dd9350505050565b6001600160a01b038216600081815260016020908152604091829020805460ff191685151590811790915582519384529083015280517fb21eb88b4e33b3f1281830a7178d74d8aa73220416215726b68ae23d539515cb9281900390910190a15050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405161016051612df462000275600039806113c65280612c575250806113a252806118d75280611e0e525080612129528061224b52508061134a528061137b52508061293852508061113552806111665250806121b8528061221c52508061194b528061245f5250612df46000f3fe6080604052600436106101a15760003560e01c80637c53ec4c116100e1578063bc197c811161008a578063dc5074af11610064578063dc5074af14610c90578063e56f8a9e14610cc3578063e97eb0a214610ced578063f23a6e6114610d19576101a1565b8063bc197c8114610a3c578063c10a420814610bab578063caed350014610c7b576101a1565b8063984d6252116100bb578063984d625214610915578063a7e30684146109f4578063b522ecff14610a09576101a1565b80637c53ec4c1461087b5780638a04af6a146108a75780638f283970146108e2576101a1565b8063427b8d341161014e5780635d8e3021116101285780635d8e3021146106a057806365194ce7146106ca5780636e9960c31461083557806377f1c3ac14610866576101a1565b8063427b8d341461062f5780634a2537781461065857806358bc29441461066d576101a1565b806325cb5bc01161017f57806325cb5bc0146105c75780632eb4a7ab146105ee5780633b7c4c1514610603576101a1565b8063096bb3c6146101a65780630a474add146102ff57806318dff51014610463575b600080fd5b6102fd60048036036101608110156101bd57600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359160a08201359160c08101359160e08201359190810190610120810161010082013564010000000081111561021a57600080fd5b82018360208201111561022c57600080fd5b8035906020019184602083028401116401000000008311171561024e57600080fd5b91939092909160208101903564010000000081111561026c57600080fd5b82018360208201111561027e57600080fd5b803590602001918460208302840111640100000000831117156102a057600080fd5b9193909290916020810190356401000000008111156102be57600080fd5b8201836020820111156102d057600080fd5b803590602001918460018302840111640100000000831117156102f257600080fd5b509092509050610dbb565b005b34801561030b57600080fd5b506102fd600480360361016081101561032357600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359160a08201359160c08101359160e08201359190810190610120810161010082013564010000000081111561038057600080fd5b82018360208201111561039257600080fd5b803590602001918460208302840111640100000000831117156103b457600080fd5b9193909290916020810190356401000000008111156103d257600080fd5b8201836020820111156103e457600080fd5b8035906020019184602083028401116401000000008311171561040657600080fd5b91939092909160208101903564010000000081111561042457600080fd5b82018360208201111561043657600080fd5b8035906020019184600183028401116401000000008311171561045857600080fd5b509092509050610ff8565b34801561046f57600080fd5b506102fd600480360361016081101561048757600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359160a08201359160c08101359160e0820135919081019061012081016101008201356401000000008111156104e457600080fd5b8201836020820111156104f657600080fd5b8035906020019184602083028401116401000000008311171561051857600080fd5b91939092909160208101903564010000000081111561053657600080fd5b82018360208201111561054857600080fd5b8035906020019184602083028401116401000000008311171561056a57600080fd5b91939092909160208101903564010000000081111561058857600080fd5b82018360208201111561059a57600080fd5b803590602001918460018302840111640100000000831117156105bc57600080fd5b5090925090506111d8565b3480156105d357600080fd5b506105dc6113a0565b60408051918252519081900360200190f35b3480156105fa57600080fd5b506105dc6113c4565b34801561060f57600080fd5b506102fd6004803603602081101561062657600080fd5b503515156113e8565b34801561063b57600080fd5b5061064461147d565b604080519115158252519081900360200190f35b34801561066457600080fd5b506106446114a0565b34801561067957600080fd5b506102fd6004803603602081101561069057600080fd5b50356001600160a01b03166114c2565b3480156106ac57600080fd5b506105dc600480360360208110156106c357600080fd5b503561156d565b3480156106d657600080fd5b5061077d600480360360208110156106ed57600080fd5b81019060208101813564010000000081111561070857600080fd5b82018360208201111561071a57600080fd5b8035906020019184600183028401116401000000008311171561073c57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061159c945050505050565b6040518080602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156107f65781810151838201526020016107de565b50505050905090810190601f1680156108235780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34801561084157600080fd5b5061084a6116a1565b604080516001600160a01b039092168252519081900360200190f35b34801561087257600080fd5b506105dc6116b0565b34801561088757600080fd5b506102fd6004803603602081101561089e57600080fd5b503515156116b6565b3480156108b357600080fd5b506102fd600480360360408110156108ca57600080fd5b506001600160a01b0381351690602001351515611749565b3480156108ee57600080fd5b506102fd6004803603602081101561090557600080fd5b50356001600160a01b03166117a0565b34801561092157600080fd5b506102fd6004803603606081101561093857600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561096357600080fd5b82018360208201111561097557600080fd5b8035906020019184602083028401116401000000008311171561099757600080fd5b9193909290916020810190356401000000008111156109b557600080fd5b8201836020820111156109c757600080fd5b803590602001918460208302840111640100000000831117156109e957600080fd5b509092509050611876565b348015610a0057600080fd5b50610644611a75565b348015610a1557600080fd5b506102fd60048036036020811015610a2c57600080fd5b50356001600160a01b0316611a96565b348015610a4857600080fd5b50610b76600480360360a0811015610a5f57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135640100000000811115610a9357600080fd5b820183602082011115610aa557600080fd5b80359060200191846020830284011164010000000083111715610ac757600080fd5b919390929091602081019035640100000000811115610ae557600080fd5b820183602082011115610af757600080fd5b80359060200191846020830284011164010000000083111715610b1957600080fd5b919390929091602081019035640100000000811115610b3757600080fd5b820183602082011115610b4957600080fd5b80359060200191846001830284011164010000000083111715610b6b57600080fd5b509092509050611b53565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b348015610bb757600080fd5b50610644600480360360a0811015610bce57600080fd5b810190602081018135640100000000811115610be957600080fd5b820183602082011115610bfb57600080fd5b80359060200191846001830284011164010000000083111715610c1d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135169260408101359250606001359050611b80565b348015610c8757600080fd5b5061084a611cbc565b348015610c9c57600080fd5b5061064460048036036020811015610cb357600080fd5b50356001600160a01b0316611ccb565b348015610ccf57600080fd5b506102fd60048036036020811015610ce657600080fd5b5035611ce9565b348015610cf957600080fd5b506102fd60048036036020811015610d1057600080fd5b50351515611d4d565b348015610d2557600080fd5b50610b76600480360360a0811015610d3c57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610d7c57600080fd5b820183602082011115610d8e57600080fd5b80359060200191846001830284011164010000000083111715610db057600080fd5b509092509050611de1565b6006547501000000000000000000000000000000000000000000900460ff16610e2b576040805162461bcd60e51b815260206004820152601a60248201527f6574686572207061796d656e7473206e6f7420656e61626c6564000000000000604482015290519081900360640190fd5b610eb08e8d8d8d8d8d8d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e0c92505050565b6000610ebb8961156d565b905080341015610f12576040805162461bcd60e51b815260206004820152601560248201527f6e6f7420656e6f7567682065746865722073656e740000000000000000000000604482015290519081900360640190fd5b3481900315610f4c5760405133903483900380156108fc02916000818181858888f19350505050158015610f4a573d6000803e3d6000fd5b505b610f998184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506006546001600160a01b03169150611fe99050565b610faa8f8f8e8e8e8e60008861211d565b610fe78e8888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506123e892505050565b505050505050505050505050505050565b60065474010000000000000000000000000000000000000000900460ff16611067576040805162461bcd60e51b815260206004820152601960248201527f73616e64207061796d656e7473206e6f7420656e61626c656400000000000000604482015290519081900360640190fd5b6110ec8e8d8d8d8d8d8d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e0c92505050565b61115b8e8984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506006546001600160a01b031691507f000000000000000000000000000000000000000000000000000000000000000090506125ac565b61118b8e8e8d8d8d8d7f00000000000000000000000000000000000000000000000000000000000000008f61211d565b6111c88d8787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506123e892505050565b5050505050505050505050505050565b600654760100000000000000000000000000000000000000000000900460ff16611249576040805162461bcd60e51b815260206004820152601860248201527f646169207061796d656e7473206e6f7420656e61626c65640000000000000000604482015290519081900360640190fd5b6112ce8e8d8d8d8d8d8d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e0c92505050565b60006112ff670de0b6b3a76400006112f38b663328b944c4000063ffffffff61285816565b9063ffffffff6128ce16565b90506113708f8285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506006546001600160a01b031691507f000000000000000000000000000000000000000000000000000000000000000090506125ac565b610faa8f8f8e8e8e8e7f00000000000000000000000000000000000000000000000000000000000000008861211d565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000546001600160a01b031633146114315760405162461bcd60e51b8152600401808060200182810382526021815260200180612d9e6021913960400191505060405180910390fd5b60068054911515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b600654760100000000000000000000000000000000000000000000900460ff1690565b6006547501000000000000000000000000000000000000000000900460ff1690565b6000546001600160a01b03163314611521576040805162461bcd60e51b815260206004820152601060248201527f53656e646572206e6f742061646d696e00000000000000000000000000000000604482015290519081900360640190fd5b600554600280546001600160a01b03908116600090815260046020526040902042909301909255805473ffffffffffffffffffffffffffffffffffffffff191692909116919091179055565b600080611578612933565b9050611595816112f385663328b944c4000063ffffffff61285816565b9392505050565b606060008060008060606000806000808a80602001905160a08110156115c157600080fd5b81019080805160405193929190846401000000008211156115e157600080fd5b9083019060208201858111156115f657600080fd5b825164010000000081118282018810171561161057600080fd5b82525081516020918201929091019080838360005b8381101561163d578181015183820152602001611625565b50505050905090810190601f16801561166a5780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608090930151959f50909d509b5099509197505050505050505091939590929450565b6000546001600160a01b031690565b60035490565b6000546001600160a01b031633146116ff5760405162461bcd60e51b8152600401808060200182810382526022815260200180612d4e6022913960400191505060405180910390fd5b6006805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b031633146117925760405162461bcd60e51b815260040180806020018281038252602e815260200180612d70602e913960400191505060405180910390fd5b61179c82826129c1565b5050565b6000546001600160a01b031633146117ff576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c792061646d696e2063616e206368616e67652061646d696e0000000000604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f9281900390910190a16000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118d5576040805162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000004211611949576040805162461bcd60e51b815260206004820152600d60248201527f53414c455f4e4f545f4f56455200000000000000000000000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632eb2c2d63087878787876040518763ffffffff1660e01b815260040180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b031681526020018060200180602001806020018481038452888882818152602001925060200280828437600083820152601f01601f19169091018581038452868152602090810191508790870280828437600081840152601f19601f8201169050808301925050508481038252600081526020016020019950505050505050505050600060405180830381600087803b158015611a5657600080fd5b505af1158015611a6a573d6000803e3d6000fd5b505050505050505050565b60065474010000000000000000000000000000000000000000900460ff1690565b6001600160a01b038116611adb5760405162461bcd60e51b8152600401808060200182810382526027815260200180612cfd6027913960400191505060405180910390fd5b6000546001600160a01b03163314611b245760405162461bcd60e51b815260040180806020018281038252602a815260200180612d24602a913960400191505060405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b6000600354821180611ba35750836001600160a01b0316856001600160a01b0316145b80611bad57508242115b15611bba57506000611cb3565b60408051606087811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166020808501919091529188901b166034830152604882018690526068808301869052835180840390910181526088830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000060a884015260c48084018290528451808503909101815260e49093019093528151910120600090611c719089612a43565b6001600160a01b0381166000908152600460205260409020549091504211611c9e57600192505050611cb3565b6002546001600160a01b039081169116149150505b95945050505050565b6002546001600160a01b031690565b6001600160a01b031660009081526001602052604090205460ff1690565b6000546001600160a01b03163314611d48576040805162461bcd60e51b815260206004820152601060248201527f53656e646572206e6f742061646d696e00000000000000000000000000000000604482015290519081900360640190fd5b600355565b6000546001600160a01b03163314611d965760405162461bcd60e51b8152600401808060200182810382526021815260200180612cdc6021913960400191505060405180910390fd5b600680549115157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b7f00000000000000000000000000000000000000000000000000000000000000004210611e80576040805162461bcd60e51b815260206004820152600c60248201527f73616c65206973206f7665720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038916331480611ea657503360009081526001602052604090205460ff165b611ef7576040805162461bcd60e51b815260206004820152600e60248201527f6e6f7420617574686f72697a6564000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0388161580611f1e5750886001600160a01b0316886001600160a01b0316145b611f6f576040805162461bcd60e51b815260206004820152601860248201527f63616e6e6f7420627579207265736572766564204c616e640000000000000000604482015290519081900360640190fd5b6000611f80888888888d8989612b10565b9050611f8c8282612bb5565b611fdd576040805162461bcd60e51b815260206004820152601560248201527f496e76616c6964206c616e642070726f76696465640000000000000000000000604482015290519081900360640190fd5b50505050505050505050565b81518390156120e05760606000806000806120038861159c565b939850919650945092509050600061201e8686868686611b80565b1561209b576120386120308b84612858565b6127106128ce565b604080518c81526020810183905280820185905290519192506000916001600160a01b0387811692908916917fac7a699eb95c3c6d390ec4626de17ef9a67b35891efdb197beba7c7fdd45fac49181900360600190a46120988782612c7e565b96505b80156120d9576040516001600160a01b0386169082156108fc029083906000818181858888f193505050501580156120d7573d6000803e3d6000fd5b505b5050505050505b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612116573d6000803e3d6000fd5b5050505050565b836001148061215357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b1561221a57604080517f6e1e3bbf0000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015260248201879052604482018990526064820188905260a06084830152600060a4830181905292517f000000000000000000000000000000000000000000000000000000000000000090911692636e1e3bbf9260e4808201939182900301818387803b1580156121fd57600080fd5b505af1158015612211573d6000803e3d6000fd5b5050505061237e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e1e3bbf7f00000000000000000000000000000000000000000000000000000000000000008689898c60405160200180826001600160a01b03166001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156123155781810151838201526020016122fd565b50505050905090810190601f1680156123425780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15801561236557600080fd5b505af1158015612379573d6000803e3d6000fd5b505050505b60408051858152602081018590526001600160a01b03848116828401526060820184905291516101988802890192808b1692908c16917fe4dfa6ac11314892f3029b34a25b1a887da3b1cab2bbf8506d87128ba6e3ac029181900360800190a45050505050505050565b6060815167ffffffffffffffff8111801561240257600080fd5b5060405190808252806020026020018201604052801561242c578160200160208202803683370190505b50905060005b825181101561245c57600182828151811061244957fe5b6020908102919091010152600101612432565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632eb2c2d6308585856040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001806020018060200180602001848103845286818151815260200191508051906020019060200280838360005b838110156125175781810151838201526020016124ff565b50505050905001848103835285818151815260200191508051906020019060200280838360005b8381101561255657818101518382015260200161253e565b50505050905001848103825260008152602001602001975050505050505050600060405180830381600087803b15801561258f57600080fd5b505af11580156125a3573d6000803e3d6000fd5b50505050505050565b825181908590156127675760606000806000806125c88a61159c565b93985091965094509250905060006125e38686868686611b80565b15612669576125f56120308d84612858565b9050886001600160a01b0316846001600160a01b0316866001600160a01b03167fac7a699eb95c3c6d390ec4626de17ef9a67b35891efdb197beba7c7fdd45fac48f858760405180848152602001838152602001828152602001935050505060405180910390a46126668782612c7e565b96505b801561276057604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b038f811660048301528781166024830152604482018490529151918a16916323b872dd916064808201926020929091908290030181600087803b1580156126e357600080fd5b505af11580156126f7573d6000803e3d6000fd5b505050506040513d602081101561270d57600080fd5b5051612760576040805162461bcd60e51b815260206004820152601960248201527f636f6d6d6973696f6e207472616e73666572206661696c656400000000000000604482015290519081900360640190fd5b5050505050505b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301528681166024830152604482018490529151918416916323b872dd916064808201926020929091908290030181600087803b1580156127db57600080fd5b505af11580156127ef573d6000803e3d6000fd5b505050506040513d602081101561280557600080fd5b50516125a3576040805162461bcd60e51b815260206004820152601760248201527f7061796d656e74207472616e73666572206661696c6564000000000000000000604482015290519081900360640190fd5b600082612867575060006128c8565b508181028183828161287557fe5b04146128c8576040805162461bcd60e51b815260206004820152600860248201527f6f766572666c6f77000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b92915050565b600081612922576040805162461bcd60e51b815260206004820152600960248201527f64697662797a65726f0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b81838161292b57fe5b049392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b15801561298f57600080fd5b505afa1580156129a3573d6000803e3d6000fd5b505050506040513d60208110156129b957600080fd5b505191505090565b6001600160a01b03821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915582519384529083015280517fb21eb88b4e33b3f1281830a7178d74d8aa73220416215726b68ae23d539515cb9281900390910190a15050565b60008151604114612a5357600080fd5b60208201516040830151606084015160001a601b811015612a7257601b015b8060ff16601b1480612a8757508060ff16601c145b612a9057600080fd5b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015612ae7573d6000803e3d6000fd5b5050604051601f1901519450506001600160a01b038416612b0757600080fd5b50505092915050565b60008787878787878760405160200180888152602001878152602001868152602001858152602001846001600160a01b03166001600160a01b031660601b8152601401838152602001828051906020019060200280838360005b83811015612b82578181015183820152602001612b6a565b50505050905001975050505050505050604051602081830303815290604052805190602001209050979650505050505050565b600081815b8451811015612c54576000858281518110612bd157fe5b6020026020010151905080831015612c195782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612c4b565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b50600101612bba565b507f0000000000000000000000000000000000000000000000000000000000000000149392505050565b600082821115612cd5576040805162461bcd60e51b815260206004820152600860248201527f756e6465666c6f77000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5090039056fe6f6e6c792061646d696e2063616e20656e61626c652f64697361626c6520455448726563656976696e672077616c6c65742063616e6e6f74206265207a65726f20616464726573736f6e6c792061646d696e2063616e206368616e67652074686520726563656976696e672077616c6c65746f6e6c792061646d696e2063616e20656e61626c652f64697361626c652053414e446f6e6c792061646d696e2063616e207365747570206d6574615472616e73616374696f6e50726f636573736f72736f6e6c792061646d696e2063616e20656e61626c652f64697361626c6520444149a2646970667358221220017c86843cd55aab5f48daa4112028f7c7f4b8849a084b581d3f67acfd58b6f864736f6c6343000605003300000000000000000000000050f5474724e0ee42d9a4e711ccfb275809fd6d4a0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d00000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d000000000000000000000000018dd4e0eb8699ea4fee238de41ecfb95e32272f80000000000000000000000009695ed5020bb47880738db356678fe8cbc8ff60b6f6536c4fdc4c494f7a39b929b94603f5a60cc61f5a2862fb67fe66a49118ee0000000000000000000000000000000000000000000000000000000005f3bd0d0000000000000000000000000729d19f657bd0614b4985cf1d82531c67569197b0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000003044719d139f866a44c988823513ecb93060bf1b00000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067a1eb5e383ed24b66d72aaf80d8d7db3d299a8

Deployed Bytecode

0x6080604052600436106101a15760003560e01c80637c53ec4c116100e1578063bc197c811161008a578063dc5074af11610064578063dc5074af14610c90578063e56f8a9e14610cc3578063e97eb0a214610ced578063f23a6e6114610d19576101a1565b8063bc197c8114610a3c578063c10a420814610bab578063caed350014610c7b576101a1565b8063984d6252116100bb578063984d625214610915578063a7e30684146109f4578063b522ecff14610a09576101a1565b80637c53ec4c1461087b5780638a04af6a146108a75780638f283970146108e2576101a1565b8063427b8d341161014e5780635d8e3021116101285780635d8e3021146106a057806365194ce7146106ca5780636e9960c31461083557806377f1c3ac14610866576101a1565b8063427b8d341461062f5780634a2537781461065857806358bc29441461066d576101a1565b806325cb5bc01161017f57806325cb5bc0146105c75780632eb4a7ab146105ee5780633b7c4c1514610603576101a1565b8063096bb3c6146101a65780630a474add146102ff57806318dff51014610463575b600080fd5b6102fd60048036036101608110156101bd57600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359160a08201359160c08101359160e08201359190810190610120810161010082013564010000000081111561021a57600080fd5b82018360208201111561022c57600080fd5b8035906020019184602083028401116401000000008311171561024e57600080fd5b91939092909160208101903564010000000081111561026c57600080fd5b82018360208201111561027e57600080fd5b803590602001918460208302840111640100000000831117156102a057600080fd5b9193909290916020810190356401000000008111156102be57600080fd5b8201836020820111156102d057600080fd5b803590602001918460018302840111640100000000831117156102f257600080fd5b509092509050610dbb565b005b34801561030b57600080fd5b506102fd600480360361016081101561032357600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359160a08201359160c08101359160e08201359190810190610120810161010082013564010000000081111561038057600080fd5b82018360208201111561039257600080fd5b803590602001918460208302840111640100000000831117156103b457600080fd5b9193909290916020810190356401000000008111156103d257600080fd5b8201836020820111156103e457600080fd5b8035906020019184602083028401116401000000008311171561040657600080fd5b91939092909160208101903564010000000081111561042457600080fd5b82018360208201111561043657600080fd5b8035906020019184600183028401116401000000008311171561045857600080fd5b509092509050610ff8565b34801561046f57600080fd5b506102fd600480360361016081101561048757600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359160a08201359160c08101359160e0820135919081019061012081016101008201356401000000008111156104e457600080fd5b8201836020820111156104f657600080fd5b8035906020019184602083028401116401000000008311171561051857600080fd5b91939092909160208101903564010000000081111561053657600080fd5b82018360208201111561054857600080fd5b8035906020019184602083028401116401000000008311171561056a57600080fd5b91939092909160208101903564010000000081111561058857600080fd5b82018360208201111561059a57600080fd5b803590602001918460018302840111640100000000831117156105bc57600080fd5b5090925090506111d8565b3480156105d357600080fd5b506105dc6113a0565b60408051918252519081900360200190f35b3480156105fa57600080fd5b506105dc6113c4565b34801561060f57600080fd5b506102fd6004803603602081101561062657600080fd5b503515156113e8565b34801561063b57600080fd5b5061064461147d565b604080519115158252519081900360200190f35b34801561066457600080fd5b506106446114a0565b34801561067957600080fd5b506102fd6004803603602081101561069057600080fd5b50356001600160a01b03166114c2565b3480156106ac57600080fd5b506105dc600480360360208110156106c357600080fd5b503561156d565b3480156106d657600080fd5b5061077d600480360360208110156106ed57600080fd5b81019060208101813564010000000081111561070857600080fd5b82018360208201111561071a57600080fd5b8035906020019184600183028401116401000000008311171561073c57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061159c945050505050565b6040518080602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156107f65781810151838201526020016107de565b50505050905090810190601f1680156108235780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34801561084157600080fd5b5061084a6116a1565b604080516001600160a01b039092168252519081900360200190f35b34801561087257600080fd5b506105dc6116b0565b34801561088757600080fd5b506102fd6004803603602081101561089e57600080fd5b503515156116b6565b3480156108b357600080fd5b506102fd600480360360408110156108ca57600080fd5b506001600160a01b0381351690602001351515611749565b3480156108ee57600080fd5b506102fd6004803603602081101561090557600080fd5b50356001600160a01b03166117a0565b34801561092157600080fd5b506102fd6004803603606081101561093857600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561096357600080fd5b82018360208201111561097557600080fd5b8035906020019184602083028401116401000000008311171561099757600080fd5b9193909290916020810190356401000000008111156109b557600080fd5b8201836020820111156109c757600080fd5b803590602001918460208302840111640100000000831117156109e957600080fd5b509092509050611876565b348015610a0057600080fd5b50610644611a75565b348015610a1557600080fd5b506102fd60048036036020811015610a2c57600080fd5b50356001600160a01b0316611a96565b348015610a4857600080fd5b50610b76600480360360a0811015610a5f57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135640100000000811115610a9357600080fd5b820183602082011115610aa557600080fd5b80359060200191846020830284011164010000000083111715610ac757600080fd5b919390929091602081019035640100000000811115610ae557600080fd5b820183602082011115610af757600080fd5b80359060200191846020830284011164010000000083111715610b1957600080fd5b919390929091602081019035640100000000811115610b3757600080fd5b820183602082011115610b4957600080fd5b80359060200191846001830284011164010000000083111715610b6b57600080fd5b509092509050611b53565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b348015610bb757600080fd5b50610644600480360360a0811015610bce57600080fd5b810190602081018135640100000000811115610be957600080fd5b820183602082011115610bfb57600080fd5b80359060200191846001830284011164010000000083111715610c1d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135169260408101359250606001359050611b80565b348015610c8757600080fd5b5061084a611cbc565b348015610c9c57600080fd5b5061064460048036036020811015610cb357600080fd5b50356001600160a01b0316611ccb565b348015610ccf57600080fd5b506102fd60048036036020811015610ce657600080fd5b5035611ce9565b348015610cf957600080fd5b506102fd60048036036020811015610d1057600080fd5b50351515611d4d565b348015610d2557600080fd5b50610b76600480360360a0811015610d3c57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610d7c57600080fd5b820183602082011115610d8e57600080fd5b80359060200191846001830284011164010000000083111715610db057600080fd5b509092509050611de1565b6006547501000000000000000000000000000000000000000000900460ff16610e2b576040805162461bcd60e51b815260206004820152601a60248201527f6574686572207061796d656e7473206e6f7420656e61626c6564000000000000604482015290519081900360640190fd5b610eb08e8d8d8d8d8d8d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e0c92505050565b6000610ebb8961156d565b905080341015610f12576040805162461bcd60e51b815260206004820152601560248201527f6e6f7420656e6f7567682065746865722073656e740000000000000000000000604482015290519081900360640190fd5b3481900315610f4c5760405133903483900380156108fc02916000818181858888f19350505050158015610f4a573d6000803e3d6000fd5b505b610f998184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506006546001600160a01b03169150611fe99050565b610faa8f8f8e8e8e8e60008861211d565b610fe78e8888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506123e892505050565b505050505050505050505050505050565b60065474010000000000000000000000000000000000000000900460ff16611067576040805162461bcd60e51b815260206004820152601960248201527f73616e64207061796d656e7473206e6f7420656e61626c656400000000000000604482015290519081900360640190fd5b6110ec8e8d8d8d8d8d8d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e0c92505050565b61115b8e8984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506006546001600160a01b031691507f0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d090506125ac565b61118b8e8e8d8d8d8d7f0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d08f61211d565b6111c88d8787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506123e892505050565b5050505050505050505050505050565b600654760100000000000000000000000000000000000000000000900460ff16611249576040805162461bcd60e51b815260206004820152601860248201527f646169207061796d656e7473206e6f7420656e61626c65640000000000000000604482015290519081900360640190fd5b6112ce8e8d8d8d8d8d8d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e0c92505050565b60006112ff670de0b6b3a76400006112f38b663328b944c4000063ffffffff61285816565b9063ffffffff6128ce16565b90506113708f8285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506006546001600160a01b031691507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f90506125ac565b610faa8f8f8e8e8e8e7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f8861211d565b7f000000000000000000000000000000000000000000000000000000005f3bd0d090565b7f6f6536c4fdc4c494f7a39b929b94603f5a60cc61f5a2862fb67fe66a49118ee090565b6000546001600160a01b031633146114315760405162461bcd60e51b8152600401808060200182810382526021815260200180612d9e6021913960400191505060405180910390fd5b60068054911515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b600654760100000000000000000000000000000000000000000000900460ff1690565b6006547501000000000000000000000000000000000000000000900460ff1690565b6000546001600160a01b03163314611521576040805162461bcd60e51b815260206004820152601060248201527f53656e646572206e6f742061646d696e00000000000000000000000000000000604482015290519081900360640190fd5b600554600280546001600160a01b03908116600090815260046020526040902042909301909255805473ffffffffffffffffffffffffffffffffffffffff191692909116919091179055565b600080611578612933565b9050611595816112f385663328b944c4000063ffffffff61285816565b9392505050565b606060008060008060606000806000808a80602001905160a08110156115c157600080fd5b81019080805160405193929190846401000000008211156115e157600080fd5b9083019060208201858111156115f657600080fd5b825164010000000081118282018810171561161057600080fd5b82525081516020918201929091019080838360005b8381101561163d578181015183820152602001611625565b50505050905090810190601f16801561166a5780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608090930151959f50909d509b5099509197505050505050505091939590929450565b6000546001600160a01b031690565b60035490565b6000546001600160a01b031633146116ff5760405162461bcd60e51b8152600401808060200182810382526022815260200180612d4e6022913960400191505060405180910390fd5b6006805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b031633146117925760405162461bcd60e51b815260040180806020018281038252602e815260200180612d70602e913960400191505060405180910390fd5b61179c82826129c1565b5050565b6000546001600160a01b031633146117ff576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c792061646d696e2063616e206368616e67652061646d696e0000000000604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f9281900390910190a16000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118d5576040805162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000005f3bd0d04211611949576040805162461bcd60e51b815260206004820152600d60248201527f53414c455f4e4f545f4f56455200000000000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000067a1eb5e383ed24b66d72aaf80d8d7db3d299a86001600160a01b0316632eb2c2d63087878787876040518763ffffffff1660e01b815260040180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b031681526020018060200180602001806020018481038452888882818152602001925060200280828437600083820152601f01601f19169091018581038452868152602090810191508790870280828437600081840152601f19601f8201169050808301925050508481038252600081526020016020019950505050505050505050600060405180830381600087803b158015611a5657600080fd5b505af1158015611a6a573d6000803e3d6000fd5b505050505050505050565b60065474010000000000000000000000000000000000000000900460ff1690565b6001600160a01b038116611adb5760405162461bcd60e51b8152600401808060200182810382526027815260200180612cfd6027913960400191505060405180910390fd5b6000546001600160a01b03163314611b245760405162461bcd60e51b815260040180806020018281038252602a815260200180612d24602a913960400191505060405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b6000600354821180611ba35750836001600160a01b0316856001600160a01b0316145b80611bad57508242115b15611bba57506000611cb3565b60408051606087811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166020808501919091529188901b166034830152604882018690526068808301869052835180840390910181526088830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000060a884015260c48084018290528451808503909101815260e49093019093528151910120600090611c719089612a43565b6001600160a01b0381166000908152600460205260409020549091504211611c9e57600192505050611cb3565b6002546001600160a01b039081169116149150505b95945050505050565b6002546001600160a01b031690565b6001600160a01b031660009081526001602052604090205460ff1690565b6000546001600160a01b03163314611d48576040805162461bcd60e51b815260206004820152601060248201527f53656e646572206e6f742061646d696e00000000000000000000000000000000604482015290519081900360640190fd5b600355565b6000546001600160a01b03163314611d965760405162461bcd60e51b8152600401808060200182810382526021815260200180612cdc6021913960400191505060405180910390fd5b600680549115157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b7f000000000000000000000000000000000000000000000000000000005f3bd0d04210611e80576040805162461bcd60e51b815260206004820152600c60248201527f73616c65206973206f7665720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038916331480611ea657503360009081526001602052604090205460ff165b611ef7576040805162461bcd60e51b815260206004820152600e60248201527f6e6f7420617574686f72697a6564000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0388161580611f1e5750886001600160a01b0316886001600160a01b0316145b611f6f576040805162461bcd60e51b815260206004820152601860248201527f63616e6e6f7420627579207265736572766564204c616e640000000000000000604482015290519081900360640190fd5b6000611f80888888888d8989612b10565b9050611f8c8282612bb5565b611fdd576040805162461bcd60e51b815260206004820152601560248201527f496e76616c6964206c616e642070726f76696465640000000000000000000000604482015290519081900360640190fd5b50505050505050505050565b81518390156120e05760606000806000806120038861159c565b939850919650945092509050600061201e8686868686611b80565b1561209b576120386120308b84612858565b6127106128ce565b604080518c81526020810183905280820185905290519192506000916001600160a01b0387811692908916917fac7a699eb95c3c6d390ec4626de17ef9a67b35891efdb197beba7c7fdd45fac49181900360600190a46120988782612c7e565b96505b80156120d9576040516001600160a01b0386169082156108fc029083906000818181858888f193505050501580156120d7573d6000803e3d6000fd5b505b5050505050505b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612116573d6000803e3d6000fd5b5050505050565b836001148061215357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b1561221a57604080517f6e1e3bbf0000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015260248201879052604482018990526064820188905260a06084830152600060a4830181905292517f00000000000000000000000050f5474724e0ee42d9a4e711ccfb275809fd6d4a90911692636e1e3bbf9260e4808201939182900301818387803b1580156121fd57600080fd5b505af1158015612211573d6000803e3d6000fd5b5050505061237e565b7f00000000000000000000000050f5474724e0ee42d9a4e711ccfb275809fd6d4a6001600160a01b0316636e1e3bbf7f00000000000000000000000000000000000000000000000000000000000000008689898c60405160200180826001600160a01b03166001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156123155781810151838201526020016122fd565b50505050905090810190601f1680156123425780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15801561236557600080fd5b505af1158015612379573d6000803e3d6000fd5b505050505b60408051858152602081018590526001600160a01b03848116828401526060820184905291516101988802890192808b1692908c16917fe4dfa6ac11314892f3029b34a25b1a887da3b1cab2bbf8506d87128ba6e3ac029181900360800190a45050505050505050565b6060815167ffffffffffffffff8111801561240257600080fd5b5060405190808252806020026020018201604052801561242c578160200160208202803683370190505b50905060005b825181101561245c57600182828151811061244957fe5b6020908102919091010152600101612432565b507f000000000000000000000000067a1eb5e383ed24b66d72aaf80d8d7db3d299a86001600160a01b0316632eb2c2d6308585856040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001806020018060200180602001848103845286818151815260200191508051906020019060200280838360005b838110156125175781810151838201526020016124ff565b50505050905001848103835285818151815260200191508051906020019060200280838360005b8381101561255657818101518382015260200161253e565b50505050905001848103825260008152602001602001975050505050505050600060405180830381600087803b15801561258f57600080fd5b505af11580156125a3573d6000803e3d6000fd5b50505050505050565b825181908590156127675760606000806000806125c88a61159c565b93985091965094509250905060006125e38686868686611b80565b15612669576125f56120308d84612858565b9050886001600160a01b0316846001600160a01b0316866001600160a01b03167fac7a699eb95c3c6d390ec4626de17ef9a67b35891efdb197beba7c7fdd45fac48f858760405180848152602001838152602001828152602001935050505060405180910390a46126668782612c7e565b96505b801561276057604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b038f811660048301528781166024830152604482018490529151918a16916323b872dd916064808201926020929091908290030181600087803b1580156126e357600080fd5b505af11580156126f7573d6000803e3d6000fd5b505050506040513d602081101561270d57600080fd5b5051612760576040805162461bcd60e51b815260206004820152601960248201527f636f6d6d6973696f6e207472616e73666572206661696c656400000000000000604482015290519081900360640190fd5b5050505050505b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301528681166024830152604482018490529151918416916323b872dd916064808201926020929091908290030181600087803b1580156127db57600080fd5b505af11580156127ef573d6000803e3d6000fd5b505050506040513d602081101561280557600080fd5b50516125a3576040805162461bcd60e51b815260206004820152601760248201527f7061796d656e74207472616e73666572206661696c6564000000000000000000604482015290519081900360640190fd5b600082612867575060006128c8565b508181028183828161287557fe5b04146128c8576040805162461bcd60e51b815260206004820152600860248201527f6f766572666c6f77000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b92915050565b600081612922576040805162461bcd60e51b815260206004820152600960248201527f64697662797a65726f0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b81838161292b57fe5b049392505050565b6000807f000000000000000000000000729d19f657bd0614b4985cf1d82531c67569197b6001600160a01b03166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b15801561298f57600080fd5b505afa1580156129a3573d6000803e3d6000fd5b505050506040513d60208110156129b957600080fd5b505191505090565b6001600160a01b03821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915582519384529083015280517fb21eb88b4e33b3f1281830a7178d74d8aa73220416215726b68ae23d539515cb9281900390910190a15050565b60008151604114612a5357600080fd5b60208201516040830151606084015160001a601b811015612a7257601b015b8060ff16601b1480612a8757508060ff16601c145b612a9057600080fd5b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015612ae7573d6000803e3d6000fd5b5050604051601f1901519450506001600160a01b038416612b0757600080fd5b50505092915050565b60008787878787878760405160200180888152602001878152602001868152602001858152602001846001600160a01b03166001600160a01b031660601b8152601401838152602001828051906020019060200280838360005b83811015612b82578181015183820152602001612b6a565b50505050905001975050505050505050604051602081830303815290604052805190602001209050979650505050505050565b600081815b8451811015612c54576000858281518110612bd157fe5b6020026020010151905080831015612c195782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612c4b565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b50600101612bba565b507f6f6536c4fdc4c494f7a39b929b94603f5a60cc61f5a2862fb67fe66a49118ee0149392505050565b600082821115612cd5576040805162461bcd60e51b815260206004820152600860248201527f756e6465666c6f77000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5090039056fe6f6e6c792061646d696e2063616e20656e61626c652f64697361626c6520455448726563656976696e672077616c6c65742063616e6e6f74206265207a65726f20616464726573736f6e6c792061646d696e2063616e206368616e67652074686520726563656976696e672077616c6c65746f6e6c792061646d696e2063616e20656e61626c652f64697361626c652053414e446f6e6c792061646d696e2063616e207365747570206d6574615472616e73616374696f6e50726f636573736f72736f6e6c792061646d696e2063616e20656e61626c652f64697361626c6520444149a2646970667358221220017c86843cd55aab5f48daa4112028f7c7f4b8849a084b581d3f67acfd58b6f864736f6c63430006050033

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

00000000000000000000000050f5474724e0ee42d9a4e711ccfb275809fd6d4a0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d00000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d000000000000000000000000018dd4e0eb8699ea4fee238de41ecfb95e32272f80000000000000000000000009695ed5020bb47880738db356678fe8cbc8ff60b6f6536c4fdc4c494f7a39b929b94603f5a60cc61f5a2862fb67fe66a49118ee0000000000000000000000000000000000000000000000000000000005f3bd0d0000000000000000000000000729d19f657bd0614b4985cf1d82531c67569197b0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000003044719d139f866a44c988823513ecb93060bf1b00000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067a1eb5e383ed24b66d72aaf80d8d7db3d299a8

-----Decoded View---------------
Arg [0] : landAddress (address): 0x50f5474724e0Ee42D9a4e711ccFB275809Fd6d4a
Arg [1] : sandContractAddress (address): 0x3845badAde8e6dFF049820680d1F14bD3903a5d0
Arg [2] : initialMetaTx (address): 0x3845badAde8e6dFF049820680d1F14bD3903a5d0
Arg [3] : admin (address): 0x18dd4e0eb8699eA4FeE238dE41ECfb95e32272f8
Arg [4] : initialWalletAddress (address): 0x9695ed5020BB47880738Db356678fe8cBc8FF60b
Arg [5] : merkleRoot (bytes32): 0x6f6536c4fdc4c494f7a39b929b94603f5a60cc61f5a2862fb67fe66a49118ee0
Arg [6] : expiryTime (uint256): 1597755600
Arg [7] : medianizerContractAddress (address): 0x729D19f657BD0614b4985Cf1D82531c67569197B
Arg [8] : daiTokenContractAddress (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [9] : initialSigningWallet (address): 0x3044719d139F866a44c988823513eCB93060bF1b
Arg [10] : initialMaxCommissionRate (uint256): 2000
Arg [11] : estate (address): 0x0000000000000000000000000000000000000000
Arg [12] : asset (address): 0x067a1Eb5E383eD24b66D72aAf80d8D7dB3d299A8

-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 00000000000000000000000050f5474724e0ee42d9a4e711ccfb275809fd6d4a
Arg [1] : 0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d0
Arg [2] : 0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d0
Arg [3] : 00000000000000000000000018dd4e0eb8699ea4fee238de41ecfb95e32272f8
Arg [4] : 0000000000000000000000009695ed5020bb47880738db356678fe8cbc8ff60b
Arg [5] : 6f6536c4fdc4c494f7a39b929b94603f5a60cc61f5a2862fb67fe66a49118ee0
Arg [6] : 000000000000000000000000000000000000000000000000000000005f3bd0d0
Arg [7] : 000000000000000000000000729d19f657bd0614b4985cf1d82531c67569197b
Arg [8] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [9] : 0000000000000000000000003044719d139f866a44c988823513ecb93060bf1b
Arg [10] : 00000000000000000000000000000000000000000000000000000000000007d0
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [12] : 000000000000000000000000067a1eb5e383ed24b66d72aaf80d8d7db3d299a8


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

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