Contract

0x7cE2be03588A3443dF67475Ae5B189d1B48a3465

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

-

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Call Finalize Fa...22162962025-01-02 1:59:255 hrs ago1735783165IN
0x7cE2be03...1B48a3465
0 S0.00659231.1
Create Presale F...22150342025-01-02 1:35:095 hrs ago1735781709IN
0x7cE2be03...1B48a3465
0 S0.006299511.1
Transfer Ownersh...20641952024-12-31 7:43:3447 hrs ago1735631014IN
0x7cE2be03...1B48a3465
0 S0.000033041.1
Change Voter Add...20641682024-12-31 7:43:0247 hrs ago1735630982IN
0x7cE2be03...1B48a3465
0 S0.000030431.1
Add Router20635302024-12-31 7:29:0747 hrs ago1735630147IN
0x7cE2be03...1B48a3465
0 S0.000102531.1
Change Voter Add...13026002024-12-23 5:38:2110 days ago1734932301IN
0x7cE2be03...1B48a3465
0 S0.000052081.1

Latest 1 internal transaction

Parent Transaction Hash Block From To
22150342025-01-02 1:35:095 hrs ago1735781709
0x7cE2be03...1B48a3465
0 S
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MainDeployerFair

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 1 runs

Other Settings:
london EvmVersion, MIT license
File 1 of 1 : MainDappFairLaunch.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
//pragma experimental ABIEncoderV2;
//import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";
//import "https://github.com/pancakeswap/pancake-swap-core/blob/master/contracts/interfaces/UniswapFactory.sol";
//import "https://github.com/pancakeswap/pancake-swap-core/blob/master/contracts/interfaces/UniswapPair.sol";
//import "https://github.com/pancakeswap/pancake-swap-periphery/blob/master/contracts/interfaces/UniswapRouter02.sol";

interface ERC20 {
    function transfer(address to, uint256 value) external returns(bool);

    function approve(address spender, uint256 value) external returns(bool);

    function transferFrom(address from, address to, uint256 value) external returns(bool);

    function totalSupply() external view returns(uint256);

    function balanceOf(address who) external view returns(uint256);

    function allowance(address owner, address spender) external view returns(uint256);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}


interface UniswapRouter02 {

    function WETH() external pure returns(address);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns(uint amountToken, uint amountETH, uint liquidity);


    function factory() external pure returns(address);
}


library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns(uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns(uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address public owner;
    address public voter;

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


    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor() public {
        owner = msg.sender;
    }

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

    modifier onlyVoter() {
        require(msg.sender == voter);
        _;
    }
    /**
     * @dev Allows the current owner to relinquish control of the contract.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(owner);
        owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param _newOwner The address to transfer ownership to.
     */
    function transferOwnership(address _newOwner) public onlyOwner {
        _transferOwnership(_newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param _newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address _newOwner) internal {
        require(_newOwner != address(0));
        emit OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
    }
}




contract Consts {
    uint constant TOKEN_DECIMALS = 18;
    uint8 constant TOKEN_DECIMALS_UINT8 = 18;
    uint constant TOKEN_DECIMAL_MULTIPLIER = 10 ** TOKEN_DECIMALS;
    address public feeContract;

    uint256 airdrop_fees_Percentage = 2;

    uint256 constant minLockTime = 600; // 10 mins for degen

}

interface RouterContractInterface {

    function Approve() external returns(bool);

    function getpair(address token) external view returns(address);

    function AddLiquidity(uint256 amountTokenDesired) external payable;

    //function AddLiquidity() external payable;

    function refundUniLP(address _routerAddress) external payable;

    function refundUniLPbyPlatform(address _routerAddress) external payable;

    function uniBalance(address token) external view returns(uint256);


}
interface RouterDappInterface {


    function createRouter(address _tokenAddress, address _creatorAdress, uint256 _locktime, address routerAddressInput, uint256 _extraAmount) external returns (address);

}
interface StorageContractInterface {

    //function CreatePresaleStorage(string[10] memory _tokenInfo, address tokenAddr, uint256 _lp_locked, address _creator, bool[3] memory _nftIdoFair) external returns(bool);
    function CreatePresaleStorage(address tokenAddr,uint256 _lp_locked, address _creator, bool[3] memory _nftIdoFair) external returns(bool);
    function addPresaleAddr(string[10] memory _tokenInfo, address _presale, address _creator, uint256 _presaleNum) external returns(bool);
    function fetchPresaleNumByOwner(address _creator) external returns(uint256);
    function fetchTokenAddrLiqLockTime(address _creator, uint256 _presaleNum) external view returns(address,uint256);
    function addRouterAddr(address _router, address _creator, uint256 _presaleNum) external returns(bool);
    function fetchPresaleStruct(address _creator, uint256 _presaleNum) external view returns(address,address,address);
    function setPresaleActiveFalse(address _creator, uint256 _presaleNum) external returns(bool);
    function setPresaleFilter(address _creator, uint256 _presaleNum) external returns(bool);
    function fetchPresaleAddress(address _creator, uint256 _presaleNum) external view returns(address);
    function fetchVoterCallData(address _creator, uint256 _presaleNum) external view returns(address,address);
    function addFailFilter(address _creator, uint256 _presaleNum) external;
    
}
interface PresaleDappInterface {

 function CreatePresaleFair(address[4] memory presaleAddressInput_Router, uint256[2] memory start_end_time, uint256[5] memory softcap_preAmnt_uniAmnt_min_max_eth, uint256 uniPercentage, uint256[2] memory extraAmountPer_lockTime) external returns(address);
}

interface PresaleContractInterface {

    function uniswapPercentage() external returns(uint256);
    function uniAmount() external returns(uint256);
    function CheckTotalEthRaised() external view returns(uint256);
    function CheckSoftCap() external view returns(uint256);
    function mintForPlatform(address _platform, address _referrer, uint256 _refPer, bool tokenFeeToRef) external returns(bool);
    function mintForUniswap(address _routerAddr) external;
    function finalize(address[2] memory __finalizeInfo, uint256 refPer, bool validFinalize) external returns(uint256);
    function finalizeAnytime(address[3] memory __finalizeInfo, bool validFinalize) external returns(uint256);
    function enableWhitelist() external;
    function disableWhitelist() external;
    function addToWhitelist(address WhitelistAddress) external;
    function removeFromWhitelist(address WhitelistAddress) external;

}
interface ReferralContract {

    function getDiscountedPrice(string memory _code) external returns(uint256);
    function validateCode(string memory _code) external returns(bool);
    function fetchCodeOwner(string memory _code) external returns(address);
    function fetchCodeOwnerPercentage(string memory _code) external returns(uint256);
    function updateReferrerAmounts(address _referrer, uint256 _updateAmount)  external returns(bool);  
    function updateCodeUseNumber(string memory _code, address _presaleAddress) external returns(bool);
}

interface FeeCheckContractInterface {

    function getFees(string memory _dappName) external view returns(uint256);
    function getWhitelistFees(string memory _dappWhitelistName) external view returns(uint256);

}

interface FeeDepositContractInterface {

    function payment(uint256 _dappNum) external payable;

}

contract MainDeployerFair is Consts, Ownable {
   // uint256 public presaleFees = 1 * (10**18); // 1 ETH
   // uint256 public whitelistFees = 0.9 * (10**18); // 0.9 ETH
    uint public minUniPercentage = 50; //minimum 50% has to go for uniswap lock
    address public presaleDappAddr;
    address public referralDappAddr;
    //address public FilterAddress;
    address public storageContract;
    address public feeCheckContract;
    uint256 public totalRaisedOnPlatform;
    uint256 public totalRefundedFromPlatform;
    uint256 public deltaStartEndTime = 2592000;
    string public dappName = "fairDeployer";
    string public dappFeeName = "fairPresaleFees";
    string public dappWhitelistFeeName = "fairWhitelistFees";

    uint256 public tokenFee;
    bool public referralDisabled;
    bool public tokenFeeToReferrer;
    bool public activeFalse = true;
    bool public filter = true;
    // address public UNISWAP_ADDRESS = 0xc0fFee0000C824D24E0F280f1e4D21152625742b;  //Koffeeswap Address
    //  address public factoryAddress = 0xC0fFeE00000e1439651C6aD025ea2A71ED7F3Eab;     //Koffeeswap factory Address
    constructor(address _presaleDappAddr, address _feeContract, address _storageContract, address _referralContract, address _feeCheckContract) {

        presaleDappAddr = _presaleDappAddr;
        feeContract = _feeContract;
        storageContract = _storageContract;
        referralDappAddr = _referralContract;
        feeCheckContract = _feeCheckContract;
    }

    using SafeMath
    for uint256;

   
    mapping(address => bool) public presales;
    //mapping(address => finalizeData) public finalizeDataStruct;
    mapping(address => mapping(uint256 => bool)) public presaleFinalized;
    mapping(address => address) public presaleToReferrer;
    mapping(address => uint256) public presaleToRefPer;
    mapping(uint256 => address) public presaleOwners;

    mapping(address => bool) public RouterValid;
    mapping(uint256 => address) public routerRecord;
    mapping(address => uint256) public routerNumber;
    uint256 public totalRouters;

    uint256 public extraAmountPer = 2;
    uint256 public extraAmountPerVal;
    uint256 public hundred = 100;
    uint256 public minSoftCap = 1000000000000000000;

    bool public creationPresaleEnabled = true;
    bool public creationNFTPresaleEnabled = true;
    
    function CreatePresaleFair(string[10] memory _tokenInfo, address tokenAddr, uint256[2] memory start_end_time, uint256[5] memory softcap_preAmnt_uniAmnt_min_max_eth, uint256[3] memory uniswap_info_arr, address _routerAddress, string memory _referralCode) public payable {
        require(creationPresaleEnabled, "creation Presale disabled");
        

        require(start_end_time[0] > block.timestamp, "start time not in future");
        require(start_end_time[1] <= (start_end_time[0].add(deltaStartEndTime)), "presale duration exceeds limit");
        require(softcap_preAmnt_uniAmnt_min_max_eth[0] >= minSoftCap, "scap must be atleast min required");
        require(softcap_preAmnt_uniAmnt_min_max_eth[1] > 0 && softcap_preAmnt_uniAmnt_min_max_eth[2] > 0 && softcap_preAmnt_uniAmnt_min_max_eth[3] > 0, "values cant be zero");
        require(softcap_preAmnt_uniAmnt_min_max_eth[4] >= softcap_preAmnt_uniAmnt_min_max_eth[3], "max cont must be >= min cont");
    
        require(RouterValid[_routerAddress], "invalid router address");
        if(referralDisabled){

            require(keccak256(abi.encodePacked(_referralCode)) == keccak256(abi.encodePacked("default")),"only default code allowed");
        }
        if(keccak256(abi.encodePacked(_referralCode)) != keccak256(abi.encodePacked("default")) && !referralDisabled){
            require(ReferralContract(referralDappAddr).validateCode(_referralCode),"invalid discount code");
            require(msg.value >= (FeeCheckContractInterface(feeCheckContract).getFees(dappFeeName)).mul(hundred.sub(ReferralContract(referralDappAddr).getDiscountedPrice(_referralCode))).div(hundred), "msg.value must be equal to referral fee!");

            uint256 referrerAmount = (msg.value).mul(ReferralContract(referralDappAddr).fetchCodeOwnerPercentage(_referralCode)).div(100);
            payable(ReferralContract(referralDappAddr).fetchCodeOwner(_referralCode)).transfer(referrerAmount);
            FeeDepositContractInterface(feeContract).payment{value: (msg.value).mul(hundred.sub(ReferralContract(referralDappAddr).fetchCodeOwnerPercentage(_referralCode))).div(100)}(3); // 3 at the end means it will be registerred in the fee deposit contract as a referral Fair presale
            require(ReferralContract(referralDappAddr).updateReferrerAmounts(ReferralContract(referralDappAddr).fetchCodeOwner(_referralCode), referrerAmount),"referrerAmountUpdate failed");
        }
        else{

            require(msg.value >= FeeCheckContractInterface(feeCheckContract).getFees(dappFeeName), "msg.value must be equal to presale fee!");
            FeeDepositContractInterface(feeContract).payment{value: msg.value}(4); // 4 at the end means it will be registerred in the fee deposit contract as a NO referral Fair presale 

        }
        

        require((start_end_time[0].add(minLockTime)) <= start_end_time[1], "presale period less than minimum");
        require(uniswap_info_arr[0] > (start_end_time[1].add(minLockTime)), "Lock time must be higher than presale end time");



        require((uniswap_info_arr[2] > minUniPercentage), "Uniswap percentage is lower than min threshold");

  
        require(StorageContractInterface(storageContract).CreatePresaleStorage(tokenAddr,uniswap_info_arr[0],msg.sender,[false,false,true]),"storage addition failed");





        address presaleAddrReturn;



            // Calling regular fair launch presale dapp below
            presaleAddrReturn = PresaleDappInterface(presaleDappAddr).CreatePresaleFair([address(this), msg.sender, tokenAddr,_routerAddress], start_end_time, softcap_preAmnt_uniAmnt_min_max_eth, uniswap_info_arr[2],[extraAmountPer,uniswap_info_arr[0]]);
        
        presaleToReferrer[presaleAddrReturn] = ReferralContract(referralDappAddr).fetchCodeOwner(_referralCode);
        presaleToRefPer[presaleAddrReturn] = ReferralContract(referralDappAddr).fetchCodeOwnerPercentage(_referralCode);



        uint256 presaleNumCorrect = (StorageContractInterface(storageContract).fetchPresaleNumByOwner(msg.sender)).sub(1); // subtraction is needed to get to correct presaleNum for the creator



        require(StorageContractInterface(storageContract).addPresaleAddr(_tokenInfo,presaleAddrReturn,msg.sender,presaleNumCorrect),"presale addr add failed");



        require(ReferralContract(referralDappAddr).updateCodeUseNumber(_referralCode,presaleAddrReturn),"code use update failed");

    }



    function changeDeltaStartEndTime(uint256 _newDelta) public onlyOwner {

        require(_newDelta >= 0, "invalid delta number");
        deltaStartEndTime = _newDelta;



    }



    function changeUniPercentage(uint uniPer) public onlyOwner {

        require((uniPer >= 0) && (uniPer <= 100), "uniPer value outside range");

        minUniPercentage = uniPer;



    }



    function ChangeVoterAddr(address _newVoterAddress) public onlyOwner {

        // require(_newVoterAddress != voter, "New addr is same as Old Addr");
        require(_newVoterAddress != address(0), "New Addr cant be zero addr");
        voter = _newVoterAddress;

    }




    function ChangeAirdropFee(uint _newAirdropFee) public onlyOwner {
        require(_newAirdropFee >= 0 && _newAirdropFee <= 100, "out of range fee value");
        require(_newAirdropFee != airdrop_fees_Percentage, "New fee is same as Old fee");
        airdrop_fees_Percentage = _newAirdropFee;

    }


    function disableReferral() public onlyOwner {

        referralDisabled = true;

    }
    function enableReferral() public onlyOwner {

        referralDisabled = false;

    }

    function callFinalizeFair(uint256 _presaleNum) public {

        (address _tokenAddr,address _presaleAddr, address _uniswapDep) = StorageContractInterface(storageContract).fetchPresaleStruct(msg.sender,_presaleNum);
        



        if(filter){
            StorageContractInterface(storageContract).setPresaleFilter(msg.sender,_presaleNum);
        }
        if(activeFalse){
            StorageContractInterface(storageContract).setPresaleActiveFalse(msg.sender,_presaleNum);
        }
        extraAmountPerVal = extraAmountPer.add(hundred);



        
        uint256 totalEthRaised = PresaleContractInterface(_presaleAddr).CheckTotalEthRaised();



        uint256 SoftCap = PresaleContractInterface(_presaleAddr).CheckSoftCap();



        if (!(totalEthRaised < (SoftCap)) && !(totalEthRaised == 0)) {
            // CREATE UNISWAP CONTRACT START
            totalRaisedOnPlatform = totalRaisedOnPlatform.add(totalEthRaised);





            uint256 tokenFeeCalc = totalEthRaised.mul(airdrop_fees_Percentage).div(100);


            PresaleContractInterface(_presaleAddr).mintForPlatform(feeContract,presaleToReferrer[_presaleAddr],presaleToRefPer[_presaleAddr],tokenFeeToReferrer);



            require(PresaleContractInterface(_presaleAddr).finalize([presaleToReferrer[_presaleAddr], msg.sender],presaleToRefPer[_presaleAddr],true) ==  1,"finalize failed at success");

  


 
            ReferralContract(referralDappAddr).updateReferrerAmounts(presaleToReferrer[_presaleAddr],tokenFeeCalc.mul(presaleToRefPer[_presaleAddr]).div(100));
            
        } else if ((totalEthRaised < SoftCap) || (totalEthRaised == 0)) {
            totalRefundedFromPlatform = totalRefundedFromPlatform.add(totalEthRaised);

            require(PresaleContractInterface(_presaleAddr).finalize([address(0), address(msg.sender)],presaleToRefPer[_presaleAddr],false) ==  1,"finalize failed at refund");




        }




    }


    function checkTotalEthraisedOfPresale(address presaleToRefundFromOwnerAddress, uint256 _presaleNum) public view returns(uint256) {


        address presaleAddressFetched = StorageContractInterface(storageContract).fetchPresaleAddress(presaleToRefundFromOwnerAddress,_presaleNum);



        uint256 totalEthRaised = PresaleContractInterface(presaleAddressFetched).CheckTotalEthRaised();
        return totalEthRaised;

    }



    function voterCallsFinalizeRefund(address presaleToRefundFromOwnerAddress,uint256 _presaleNum) onlyVoter public {


        (address presaleAddressFetched,address uniAddressFetched) = StorageContractInterface(storageContract).fetchVoterCallData(presaleToRefundFromOwnerAddress,_presaleNum);
        

        totalRefundedFromPlatform = totalRefundedFromPlatform.add(checkTotalEthraisedOfPresale(presaleToRefundFromOwnerAddress,_presaleNum));


        require(PresaleContractInterface(presaleAddressFetched).finalize([address(0), presaleToRefundFromOwnerAddress],presaleToRefPer[presaleAddressFetched],false) == 1,"finalize failed at voter call refund");

  

        StorageContractInterface(storageContract).addFailFilter(presaleToRefundFromOwnerAddress, _presaleNum);

    } 

    function voterCallsFinalizeRefundAnytime(address presaleToRefundFromOwnerAddress,uint256 _presaleNum) onlyVoter public {



        (address presaleAddressFetched,address uniAddressFetched) = StorageContractInterface(storageContract).fetchVoterCallData(presaleToRefundFromOwnerAddress,_presaleNum);

        totalRefundedFromPlatform = totalRefundedFromPlatform.add(checkTotalEthraisedOfPresale(presaleToRefundFromOwnerAddress,_presaleNum));


        PresaleContractInterface(presaleAddressFetched).finalizeAnytime([address(0), presaleToRefundFromOwnerAddress, uniAddressFetched],false);



        StorageContractInterface(storageContract).addFailFilter(presaleToRefundFromOwnerAddress, _presaleNum);

    }



    function enableWhitelist(uint256 _presaleNum) public payable {
    

        address presaleAddressFetched = StorageContractInterface(storageContract).fetchPresaleAddress(msg.sender,_presaleNum);

        require(msg.value >= FeeCheckContractInterface(feeCheckContract).getWhitelistFees(dappWhitelistFeeName), "msg.value must be >= whitelist fees!");
        //payable(feeContract).transfer(msg.value);
        FeeDepositContractInterface(feeContract).payment{value: msg.value}(5); // 5 at the end means it will be registerred in the fee deposit contract as a whitelist fee for Fair presale 


        PresaleContractInterface(presaleAddressFetched).enableWhitelist();

    }

    function disableWhitelist(uint256 _presaleNum) public {


        address presaleAddressFetched = StorageContractInterface(storageContract).fetchPresaleAddress(msg.sender,_presaleNum);
        //require(msg.value >= whitelistFees, "msg.value must be >= whitelist fees!");
        //payable(feeContract).transfer(whitelistFees);


        PresaleContractInterface(presaleAddressFetched).disableWhitelist();

    }

    function AddToWhitelist(address[] memory _whitelistAddress, uint256 _presaleNum) public {


        address presaleAddressFetched = StorageContractInterface(storageContract).fetchPresaleAddress(msg.sender,_presaleNum);

        for (uint256 i = 0; i < _whitelistAddress.length; i++) {


            PresaleContractInterface(presaleAddressFetched).addToWhitelist(_whitelistAddress[i]);
        }

    }

    function RemoveFromWhitelist(address[] memory _whitelistAddress, uint256 _presaleNum) public {


        address presaleAddressFetched = StorageContractInterface(storageContract).fetchPresaleAddress(msg.sender,_presaleNum);


        for (uint256 i = 0; i < _whitelistAddress.length; i++) {

            PresaleContractInterface(presaleAddressFetched).removeFromWhitelist(_whitelistAddress[i]);
        }
    }


    function updateFairPresaleDapp(address _newFairPresaleDapp) onlyOwner public {
        require(_newFairPresaleDapp != address(0x0), "fair presale dapp cant be 0x0");
        presaleDappAddr = _newFairPresaleDapp;


    }


    function creationPresaleStateChange(bool _input) public onlyOwner {

        // require(creationEnabled,"already disabled");
        creationPresaleEnabled = _input;


    }
    function creationNFTPresaleStateChange(bool _input) public onlyOwner {

        // require(creationEnabled,"already disabled");
        creationNFTPresaleEnabled = _input;


    }
    function addRouter(address _newRouter) onlyOwner public {

        require(!RouterValid[_newRouter], "already added!");
        RouterValid[_newRouter] = true;
        routerNumber[_newRouter] = totalRouters;
        routerRecord[totalRouters] = _newRouter;
        totalRouters++;


    }
    
    function getStuckBNB() public onlyOwner {

        payable(owner).transfer(address(this).balance);

    }

    function removeRouter(address _newRouter) onlyOwner public {

        require(RouterValid[_newRouter], "not in added list");
        RouterValid[_newRouter] = false;

    }

    function changeExtraTokenPer(uint256 _newPer) onlyOwner public {
        require(_newPer > 0, "Invalid percentage value");
        extraAmountPer = _newPer;

    }

    function changeFeeContract(address _newContract) onlyOwner public {
        require(_newContract != address(0x0),"addr cannot be zero");
        feeContract = _newContract;
        
        
    }
    function changeStorageContract(address _newStorageContract) onlyOwner public {
        require(_newStorageContract != address(0x0),"addr cannot be zero");
        storageContract = _newStorageContract;
        
        
    }

    function changeFeeCheckContract(address _newFeeCheckContract) onlyOwner public {
        require(_newFeeCheckContract != address(0x0),"addr cannot be zero");
        feeCheckContract = _newFeeCheckContract;
        
        
    }
    
    function changeReferralContract(address _newReferralContract) onlyOwner public {
        require(_newReferralContract != address(0x0),"addr cannot be zero");
        referralDappAddr = _newReferralContract;
        
        
    }

    function enableRefTOkenFee() onlyOwner public {
       
       require(!tokenFeeToReferrer,"already enabled");
       tokenFeeToReferrer = true;
        
        
    }
    function disableRefTOkenFee() onlyOwner public {
       
       require(tokenFeeToReferrer,"already disabled");
       tokenFeeToReferrer = false;
        
        
    }
    function changeMinSoftCap(uint256 _newSoftCap) public onlyOwner {

        minSoftCap = _newSoftCap;

    }       

    function transferPresaleOwner(address _presale,address _newOwner) onlyOwner public {

        Ownable(_presale).transferOwnership(_newOwner);

    }

    function setActiveFalseFilter(bool _activeFalse,bool _filter) onlyOwner public {

        activeFalse = _activeFalse;
        filter = _filter;

    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_presaleDappAddr","type":"address"},{"internalType":"address","name":"_feeContract","type":"address"},{"internalType":"address","name":"_storageContract","type":"address"},{"internalType":"address","name":"_referralContract","type":"address"},{"internalType":"address","name":"_feeCheckContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address[]","name":"_whitelistAddress","type":"address[]"},{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"AddToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAirdropFee","type":"uint256"}],"name":"ChangeAirdropFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newVoterAddress","type":"address"}],"name":"ChangeVoterAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[10]","name":"_tokenInfo","type":"string[10]"},{"internalType":"address","name":"tokenAddr","type":"address"},{"internalType":"uint256[2]","name":"start_end_time","type":"uint256[2]"},{"internalType":"uint256[5]","name":"softcap_preAmnt_uniAmnt_min_max_eth","type":"uint256[5]"},{"internalType":"uint256[3]","name":"uniswap_info_arr","type":"uint256[3]"},{"internalType":"address","name":"_routerAddress","type":"address"},{"internalType":"string","name":"_referralCode","type":"string"}],"name":"CreatePresaleFair","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whitelistAddress","type":"address[]"},{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"RemoveFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"RouterValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activeFalse","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newRouter","type":"address"}],"name":"addRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"callFinalizeFair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDelta","type":"uint256"}],"name":"changeDeltaStartEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPer","type":"uint256"}],"name":"changeExtraTokenPer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newFeeCheckContract","type":"address"}],"name":"changeFeeCheckContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContract","type":"address"}],"name":"changeFeeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSoftCap","type":"uint256"}],"name":"changeMinSoftCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newReferralContract","type":"address"}],"name":"changeReferralContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newStorageContract","type":"address"}],"name":"changeStorageContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"uniPer","type":"uint256"}],"name":"changeUniPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"presaleToRefundFromOwnerAddress","type":"address"},{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"checkTotalEthraisedOfPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creationNFTPresaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_input","type":"bool"}],"name":"creationNFTPresaleStateChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creationPresaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_input","type":"bool"}],"name":"creationPresaleStateChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dappFeeName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dappName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dappWhitelistFeeName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deltaStartEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableRefTOkenFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"disableWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableRefTOkenFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"enableWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"extraAmountPer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extraAmountPerVal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeCheckContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"filter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStuckBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hundred","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSoftCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minUniPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleDappAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"presaleFinalized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"presaleOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleToRefPer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleToReferrer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralDappAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newRouter","type":"address"}],"name":"removeRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"routerNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"routerRecord","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_activeFalse","type":"bool"},{"internalType":"bool","name":"_filter","type":"bool"}],"name":"setActiveFalseFilter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"storageContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenFeeToReferrer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRaisedOnPlatform","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRefundedFromPlatform","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRouters","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_presale","type":"address"},{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferPresaleOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newFairPresaleDapp","type":"address"}],"name":"updateFairPresaleDapp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"presaleToRefundFromOwnerAddress","type":"address"},{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"voterCallsFinalizeRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"presaleToRefundFromOwnerAddress","type":"address"},{"internalType":"uint256","name":"_presaleNum","type":"uint256"}],"name":"voterCallsFinalizeRefundAnytime","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6002600155603260045562278d00600b5560c0604052600c60808181526b3330b4b92232b83637bcb2b960a11b60a0526200003b908262000224565b5060408051808201909152600f81526e6661697250726573616c654665657360881b6020820152600d9062000071908262000224565b506040805180820190915260118152706661697257686974656c6973744665657360781b6020820152600e90620000a9908262000224565b506010805463ffff0000191663010100001790556002601a556064601c55670de0b6b3a7640000601d55601e805461ffff1916610101179055348015620000ef57600080fd5b50604051620043d5380380620043d583398101604081905262000112916200030d565b60028054336001600160a01b0319918216179091556005805482166001600160a01b0397881617905560008054821695871695909517909455600780548516938616939093179092556006805484169185169190911790556008805490921692169190911790556200037d565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001aa57607f821691505b602082108103620001cb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021f57600081815260208120601f850160051c81016020861015620001fa5750805b601f850160051c820191505b818110156200021b5782815560010162000206565b5050505b505050565b81516001600160401b038111156200024057620002406200017f565b620002588162000251845462000195565b84620001d1565b602080601f831160018114620002905760008415620002775750858301515b600019600386901b1c1916600185901b1785556200021b565b600085815260208120601f198616915b82811015620002c157888601518255948401946001909101908401620002a0565b5085821015620002e05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b03811681146200030857600080fd5b919050565b600080600080600060a086880312156200032657600080fd5b6200033186620002f0565b94506200034160208701620002f0565b93506200035160408701620002f0565b92506200036160608701620002f0565b91506200037160808701620002f0565b90509295509295909350565b614048806200038d6000396000f3fe6080604052600436106102f45760003560e01c8063041f78cc146102f9578063042d97821461031b57806306e297121461034f5780630c52662e1461037c5780630d77c7df1461039c578063108d9447146103af57806311ce0267146103e55780631f4ba8041461040557806324ca984e14610429578063280db44014610449578063284def1514610469578063297054fb1461047f578063344eaa2714610495578063363d9efc146104b75780634055f612146104cd578063411028d8146104ed578063426b487f146105035780634503a6d314610522578063455991361461053757806346c96aac1461054d57806348e5b7d41461056d5780634f81c1ff146105a85780635787b142146105bd57806359f962f6146105dd5780635bc39e0f146105f35780635bff9a27146106135780635fadcc1e1461062957806360b2aff31461064a5780636608fd2f14610680578063662b3522146106a057806369f5ef4a146106b55780636ae0b154146106cf5780636e62d42f146106ef578063715018a61461070f5780637a594b79146107245780637b2b3073146107445780637d06b7fd146107645780637f928c82146107795780638da5cb5b1461078e57806390f6c065146107ae578063922b5aeb146107ce578063a42b45bf146107e1578063a614fec1146107f7578063ab4304df1461082d578063ae2750841461084d578063b02fa76c1461086d578063b08cdb7c1461088d578063b517da2d146108ad578063b56a038a146108cd578063bc599775146108e3578063c31c018714610903578063c946731714610930578063d0b3286314610950578063d0f0d7361461097d578063d276aded1461099d578063d3949254146109bd578063d50494cf146109dd578063d97f558e146109fd578063dd13b0dd14610a1d578063dec379ff14610a4d578063e11f2d1314610a6d578063e3613cd914610a8d578063ea354fcb14610aa2578063efcd708f14610ac2578063f2fde38b14610af2578063f5415c1f14610b12578063f625fd3e14610b27575b600080fd5b34801561030557600080fd5b506103196103143660046135e4565b610b41565b005b34801561032757600080fd5b5060105461033a90610100900460ff1681565b60405190151581526020015b60405180910390f35b34801561035b57600080fd5b5060005461036f906001600160a01b031681565b60405161034691906135fd565b34801561038857600080fd5b506103196103973660046136a5565b610c0e565b6103196103aa3660046135e4565b610d20565b3480156103bb57600080fd5b5061036f6103ca36600461375c565b6013602052600090815260409020546001600160a01b031681565b3480156103f157600080fd5b5060075461036f906001600160a01b031681565b34801561041157600080fd5b5061041b601b5481565b604051908152602001610346565b34801561043557600080fd5b5061031961044436600461375c565b610f02565b34801561045557600080fd5b5061031961046436600461375c565b610fd7565b34801561047557600080fd5b5061041b60045481565b34801561048b57600080fd5b5061041b600b5481565b3480156104a157600080fd5b506104aa611036565b60405161034691906137c9565b3480156104c357600080fd5b5061041b60195481565b3480156104d957600080fd5b5060065461036f906001600160a01b031681565b3480156104f957600080fd5b5061041b601d5481565b34801561050f57600080fd5b50601e5461033a90610100900460ff1681565b34801561052e57600080fd5b506103196110c4565b34801561054357600080fd5b5061041b600f5481565b34801561055957600080fd5b5060035461036f906001600160a01b031681565b34801561057957600080fd5b5061033a6105883660046137dc565b601260209081526000928352604080842090915290825290205460ff1681565b3480156105b457600080fd5b506104aa6110e7565b3480156105c957600080fd5b506103196105d836600461375c565b6110f4565b3480156105e957600080fd5b5061041b601a5481565b3480156105ff57600080fd5b5061031961060e366004613816565b611153565b34801561061f57600080fd5b5061041b601c5481565b34801561063557600080fd5b5060105461033a906301000000900460ff1681565b34801561065657600080fd5b5061036f6106653660046135e4565b6015602052600090815260409020546001600160a01b031681565b34801561068c57600080fd5b5061031961069b3660046135e4565b611184565b3480156106ac57600080fd5b506103196111a0565b3480156106c157600080fd5b5060105461033a9060ff1681565b3480156106db57600080fd5b506103196106ea36600461375c565b61120e565b3480156106fb57600080fd5b5060055461036f906001600160a01b031681565b34801561071b57600080fd5b506103196112a2565b34801561073057600080fd5b5061031961073f3660046135e4565b611303565b34801561075057600080fd5b5061031961075f3660046135e4565b61136a565b34801561077057600080fd5b5061031961196e565b34801561078557600080fd5b50610319611994565b34801561079a57600080fd5b5060025461036f906001600160a01b031681565b3480156107ba57600080fd5b506103196107c93660046135e4565b6119e7565b6103196107dc3660046139a1565b611a03565b3480156107ed57600080fd5b5061041b60095481565b34801561080357600080fd5b5061036f6108123660046135e4565b6017602052600090815260409020546001600160a01b031681565b34801561083957600080fd5b50610319610848366004613816565b6129e3565b34801561085957600080fd5b50610319610868366004613ab6565b612a0d565b34801561087957600080fd5b5060105461033a9062010000900460ff1681565b34801561089957600080fd5b506103196108a836600461375c565b612a56565b3480156108b957600080fd5b506103196108c836600461375c565b612ae5565b3480156108d957600080fd5b5061041b600a5481565b3480156108ef57600080fd5b506103196108fe3660046135e4565b612b44565b34801561090f57600080fd5b5061041b61091e36600461375c565b60186020526000908152604090205481565b34801561093c57600080fd5b5061031961094b36600461375c565b612bf8565b34801561095c57600080fd5b5061041b61096b36600461375c565b60146020526000908152604090205481565b34801561098957600080fd5b5060085461036f906001600160a01b031681565b3480156109a957600080fd5b506103196109b83660046137dc565b612c57565b3480156109c957600080fd5b5061041b6109d83660046137dc565b612dfa565b3480156109e957600080fd5b506103196109f83660046136a5565b612ee3565b348015610a0957600080fd5b50610319610a183660046137dc565b612fef565b348015610a2957600080fd5b5061033a610a3836600461375c565b60166020526000908152604090205460ff1681565b348015610a5957600080fd5b50610319610a6836600461375c565b6131b4565b348015610a7957600080fd5b50610319610a883660046135e4565b613240565b348015610a9957600080fd5b506104aa6132aa565b348015610aae57600080fd5b50610319610abd366004613aef565b6132b7565b348015610ace57600080fd5b5061033a610add36600461375c565b60116020526000908152604090205460ff1681565b348015610afe57600080fd5b50610319610b0d36600461375c565b613314565b348015610b1e57600080fd5b50610319613334565b348015610b3357600080fd5b50601e5461033a9060ff1681565b600754604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610b749033908690600401613b1d565b602060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190613b36565b9050806001600160a01b031663d6b0f4846040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bf257600080fd5b505af1158015610c06573d6000803e3d6000fd5b505050505050565b600754604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610c419033908690600401613b1d565b602060405180830381865afa158015610c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c829190613b36565b905060005b8351811015610d1a57816001600160a01b0316638ab1d681858381518110610cb157610cb1613b53565b60200260200101516040518263ffffffff1660e01b8152600401610cd591906135fd565b600060405180830381600087803b158015610cef57600080fd5b505af1158015610d03573d6000803e3d6000fd5b505050508080610d1290613b7f565b915050610c87565b50505050565b600754604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610d539033908690600401613b1d565b602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190613b36565b600854604051631a51134960e01b81529192506001600160a01b031690631a51134990610dc690600e90600401613bd2565b602060405180830381865afa158015610de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e079190613c7e565b341015610e675760405162461bcd60e51b8152602060048201526024808201527f6d73672e76616c7565206d757374206265203e3d2077686974656c69737420666044820152636565732160e01b60648201526084015b60405180910390fd5b600054604051638b3c99e360e01b8152600560048201526001600160a01b0390911690638b3c99e39034906024016000604051808303818588803b158015610eae57600080fd5b505af1158015610ec2573d6000803e3d6000fd5b5050505050806001600160a01b031663cdfb2b4e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bf257600080fd5b6002546001600160a01b03163314610f1957600080fd5b6001600160a01b03811660009081526016602052604090205460ff1615610f735760405162461bcd60e51b815260206004820152600e60248201526d616c72656164792061646465642160901b6044820152606401610e5e565b6001600160a01b0381166000818152601660209081526040808320805460ff19166001179055601980546018845282852081905584526017909252822080546001600160a01b03191690931790925581549190610fcf83613b7f565b919050555050565b6002546001600160a01b03163314610fee57600080fd5b6001600160a01b0381166110145760405162461bcd60e51b8152600401610e5e90613c97565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600e805461104390613b98565b80601f016020809104026020016040519081016040528092919081815260200182805461106f90613b98565b80156110bc5780601f10611091576101008083540402835291602001916110bc565b820191906000526020600020905b81548152906001019060200180831161109f57829003601f168201915b505050505081565b6002546001600160a01b031633146110db57600080fd5b6010805460ff19169055565b600c805461104390613b98565b6002546001600160a01b0316331461110b57600080fd5b6001600160a01b0381166111315760405162461bcd60e51b8152600401610e5e90613c97565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b0316331461116a57600080fd5b601e80549115156101000261ff0019909216919091179055565b6002546001600160a01b0316331461119b57600080fd5b601d55565b6002546001600160a01b031633146111b757600080fd5b601054610100900460ff166112015760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b6044820152606401610e5e565b6010805461ff0019169055565b6002546001600160a01b0316331461122557600080fd5b6001600160a01b03811660009081526016602052604090205460ff166112815760405162461bcd60e51b81526020600482015260116024820152701b9bdd081a5b881859191959081b1a5cdd607a1b6044820152606401610e5e565b6001600160a01b03166000908152601660205260409020805460ff19169055565b6002546001600160a01b031633146112b957600080fd5b6002546040516001600160a01b03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a2600280546001600160a01b0319169055565b6002546001600160a01b0316331461131a57600080fd5b600081116113655760405162461bcd60e51b8152602060048201526018602482015277496e76616c69642070657263656e746167652076616c756560401b6044820152606401610e5e565b601a55565b600754604051637e2439b360e11b8152600091829182916001600160a01b03169063fc487366906113a19033908890600401613b1d565b606060405180830381865afa1580156113be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e29190613cc4565b60105492955090935091506301000000900460ff16156114735760075460405163cf25127360e01b81526001600160a01b039091169063cf2512739061142e9033908890600401613b1d565b6020604051808303816000875af115801561144d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114719190613d11565b505b60105462010000900460ff16156114fb5760075460405163f3d7443b60e01b81526001600160a01b039091169063f3d7443b906114b69033908890600401613b1d565b6020604051808303816000875af11580156114d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f99190613d11565b505b601c54601a5461150a916133a6565b601b819055506000826001600160a01b0316632698d7076040518163ffffffff1660e01b8152600401602060405180830381865afa158015611550573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115749190613c7e565b90506000836001600160a01b031663e4c21cf26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115da9190613c7e565b90508082101580156115eb57508115155b1561186f576009546115fd90836133a6565b60095560015460009061161e9060649061161890869061340a565b9061348c565b600080546001600160a01b038881168084526013602090815260408086205460149092529485902054601054955163f6e99c0d60e01b8152948416600486015292166024840152604483019190915261010090920460ff16151560648201529192509063f6e99c0d906084016020604051808303816000875af11580156116a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cd9190613d11565b506040805180820182526001600160a01b038088166000818152601360209081528582205490931684523383850152818152601490925290839020549251634d2a907360e01b81529092634d2a90739261172f92909190600190600401613d2e565b6020604051808303816000875af115801561174e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117729190613c7e565b6001146117be5760405162461bcd60e51b815260206004820152601a60248201527966696e616c697a65206661696c6564206174207375636365737360301b6044820152606401610e5e565b6006546001600160a01b0386811660009081526013602090815260408083205460149092529091205492821692631d592a4d9291909116906118089060649061161890879061340a565b6040518363ffffffff1660e01b8152600401611825929190613b1d565b6020604051808303816000875af1158015611844573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118689190613d11565b5050610c06565b8082108061187b575081155b15610c0657600a5461188d90836133a6565b600a556040805180820182526000808252336020808401919091526001600160a01b0388168083526014909152838220549351634d2a907360e01b81529093634d2a9073936118e0939092600401613d2e565b6020604051808303816000875af11580156118ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119239190613c7e565b600114610c065760405162461bcd60e51b8152602060048201526019602482015278199a5b985b1a5e994819985a5b195908185d081c99599d5b99603a1b6044820152606401610e5e565b6002546001600160a01b0316331461198557600080fd5b6010805460ff19166001179055565b6002546001600160a01b031633146119ab57600080fd5b6002546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156119e4573d6000803e3d6000fd5b50565b6002546001600160a01b031633146119fe57600080fd5b600b55565b601e5460ff16611a515760405162461bcd60e51b815260206004820152601960248201527818dc99585d1a5bdb88141c995cd85b1948191a5cd8589b1959603a1b6044820152606401610e5e565b84514210611a9c5760405162461bcd60e51b815260206004820152601860248201527773746172742074696d65206e6f7420696e2066757475726560401b6044820152606401610e5e565b600b54611ab2908660005b6020020151906133a6565b60208601511115611b055760405162461bcd60e51b815260206004820152601e60248201527f70726573616c65206475726174696f6e2065786365656473206c696d697400006044820152606401610e5e565b601d5484511015611b625760405162461bcd60e51b815260206004820152602160248201527f73636170206d7573742062652061746c65617374206d696e20726571756972656044820152601960fa1b6064820152608401610e5e565b602084015115801590611b785750604084015115155b8015611b875750606084015115155b611bc95760405162461bcd60e51b815260206004820152601360248201527276616c7565732063616e74206265207a65726f60681b6044820152606401610e5e565b606084015160808501511015611c205760405162461bcd60e51b815260206004820152601c60248201527b1b585e0818dbdb9d081b5d5cdd081899480f8f481b5a5b8818dbdb9d60221b6044820152606401610e5e565b6001600160a01b03821660009081526016602052604090205460ff16611c815760405162461bcd60e51b8152602060048201526016602482015275696e76616c696420726f75746572206164647265737360501b6044820152606401610e5e565b60105460ff1615611d2157604051602001611c9b90613d78565b6040516020818303038152906040528051906020012081604051602001611cc29190613d8b565b6040516020818303038152906040528051906020012014611d215760405162461bcd60e51b81526020600482015260196024820152781bdb9b1e48191959985d5b1d0818dbd91948185b1b1bddd959603a1b6044820152606401610e5e565b604051602001611d3090613d78565b6040516020818303038152906040528051906020012081604051602001611d579190613d8b565b6040516020818303038152906040528051906020012014158015611d7e575060105460ff16155b15612298576006546040516349e96fdd60e01b81526001600160a01b03909116906349e96fdd90611db39084906004016137c9565b6020604051808303816000875af1158015611dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df69190613d11565b611e3a5760405162461bcd60e51b8152602060048201526015602482015274696e76616c696420646973636f756e7420636f646560581b6044820152606401610e5e565b601c54600654604051635f51485160e11b8152611f3c929161161891611ec4916001600160a01b03169063bea290a290611e789088906004016137c9565b6020604051808303816000875af1158015611e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebb9190613c7e565b601c54906134cb565b600854604051633ae42caf60e21b81526001600160a01b039091169063eb90b2bc90611ef590600d90600401613bd2565b602060405180830381865afa158015611f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f369190613c7e565b9061340a565b341015611f9c5760405162461bcd60e51b815260206004820152602860248201527f6d73672e76616c7565206d75737420626520657175616c20746f20726566657260448201526772616c206665652160c01b6064820152608401610e5e565b600654604051630fc0b3fd60e01b815260009161202491606491611618916001600160a01b0390911690630fc0b3fd90611fda9088906004016137c9565b6020604051808303816000875af1158015611ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201d9190613c7e565b349061340a565b600654604051630f22420560e11b81529192506001600160a01b031690631e44840a906120559085906004016137c9565b6020604051808303816000875af1158015612074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120989190613b36565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156120d0573d6000803e3d6000fd5b50600054600654604051630fc0b3fd60e01b81526001600160a01b0392831692638b3c99e39261211c926064926116189261201d92911690630fc0b3fd90611e78908b906004016137c9565b6040516001600160e01b031960e084901b168152600360048201526024016000604051808303818588803b15801561215357600080fd5b505af1158015612167573d6000803e3d6000fd5b5050600654604051630f22420560e11b81526001600160a01b039091169350631d592a4d9250839150631e44840a906121a49087906004016137c9565b6020604051808303816000875af11580156121c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e79190613b36565b836040518363ffffffff1660e01b8152600401612205929190613b1d565b6020604051808303816000875af1158015612224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122489190613d11565b6122925760405162461bcd60e51b815260206004820152601b60248201527a1c9959995c9c995c905b5bdd5b9d155c19185d194819985a5b1959602a1b6044820152606401610e5e565b506123c9565b600854604051633ae42caf60e21b81526001600160a01b039091169063eb90b2bc906122c990600d90600401613bd2565b602060405180830381865afa1580156122e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230a9190613c7e565b3410156123695760405162461bcd60e51b815260206004820152602760248201527f6d73672e76616c7565206d75737420626520657175616c20746f2070726573616044820152666c65206665652160c81b6064820152608401610e5e565b600054604051638b3c99e360e01b81526004808201526001600160a01b0390911690638b3c99e39034906024016000604051808303818588803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b50505050505b60208501516123dc610258876000611aa7565b111561242a5760405162461bcd60e51b815260206004820181905260248201527f70726573616c6520706572696f64206c657373207468616e206d696e696d756d6044820152606401610e5e565b612438610258866001611aa7565b83511161249e5760405162461bcd60e51b815260206004820152602e60248201527f4c6f636b2074696d65206d75737420626520686967686572207468616e20707260448201526d6573616c6520656e642074696d6560901b6064820152608401610e5e565b60045460408401511161250a5760405162461bcd60e51b815260206004820152602e60248201527f556e69737761702070657263656e74616765206973206c6f776572207468616e60448201526d081b5a5b881d1a1c995cda1bdb1960921b6064820152608401610e5e565b600754835160408051606081018252600080825260208201526001818301529051630282544d60e21b81526001600160a01b0390931692630a09513492612558928b92339190600401613da7565b6020604051808303816000875af1158015612577573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259b9190613d11565b6125e15760405162461bcd60e51b81526020600482015260176024820152761cdd1bdc9859d9481859191a5d1a5bdb8819985a5b1959604a1b6044820152606401610e5e565b600554604080516080810182523081523360208201526001600160a01b03898116928201929092528482166060820152600092919091169063d48f502990888888600260200201516040518060400160405280601a5481526020018b60006003811061264f5761264f613b53565b60200201518152506040518663ffffffff1660e01b8152600401612677959493929190613e21565b6020604051808303816000875af1158015612696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ba9190613b36565b600654604051630f22420560e11b81529192506001600160a01b031690631e44840a906126eb9085906004016137c9565b6020604051808303816000875af115801561270a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272e9190613b36565b6001600160a01b038281166000908152601360205260409081902080546001600160a01b031916938316939093179092556006549151630fc0b3fd60e01b8152911690630fc0b3fd906127859085906004016137c9565b6020604051808303816000875af11580156127a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c89190613c7e565b6001600160a01b03808316600090815260146020526040808220939093556007549251631996f55960e11b8152909261285e9260019291169063332deab2906128159033906004016135fd565b6020604051808303816000875af1158015612834573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128589190613c7e565b906134cb565b600754604051638252401760e01b81529192506001600160a01b031690638252401790612895908c90869033908790600401613eac565b6020604051808303816000875af11580156128b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d89190613d11565b61291e5760405162461bcd60e51b81526020600482015260176024820152761c1c995cd85b19481859191c881859190819985a5b1959604a1b6044820152606401610e5e565b600654604051635ac066d560e01b81526001600160a01b0390911690635ac066d5906129509086908690600401613f17565b6020604051808303816000875af115801561296f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129939190613d11565b6129d85760405162461bcd60e51b815260206004820152601660248201527518dbd919481d5cd9481d5c19185d194819985a5b195960521b6044820152606401610e5e565b505050505050505050565b6002546001600160a01b031633146129fa57600080fd5b601e805460ff1916911515919091179055565b6002546001600160a01b03163314612a2457600080fd5b6010805463ffff00001916620100009315159390930263ff000000191692909217630100000091151591909102179055565b6002546001600160a01b03163314612a6d57600080fd5b6001600160a01b038116612ac35760405162461bcd60e51b815260206004820152601d60248201527f666169722070726573616c6520646170702063616e74206265203078300000006044820152606401610e5e565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314612afc57600080fd5b6001600160a01b038116612b225760405162461bcd60e51b8152600401610e5e90613c97565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314612b5b57600080fd5b6064811115612ba55760405162461bcd60e51b81526020600482015260166024820152756f7574206f662072616e6765206665652076616c756560501b6044820152606401610e5e565b6001548103612bf35760405162461bcd60e51b815260206004820152601a6024820152794e6577206665652069732073616d65206173204f6c642066656560301b6044820152606401610e5e565b600155565b6002546001600160a01b03163314612c0f57600080fd5b6001600160a01b038116612c355760405162461bcd60e51b8152600401610e5e90613c97565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b03163314612c6e57600080fd5b60075460405163d6b4441160e01b815260009182916001600160a01b039091169063d6b4441190612ca59087908790600401613b1d565b6040805180830381865afa158015612cc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce59190613f41565b91509150612cff612cf68585612dfa565b600a54906133a6565b600a556040805160608101825260008082526001600160a01b0387811660208401528481168385015292516397993fd960e01b8152928516926397993fd992612d4c929091600401613f70565b6020604051808303816000875af1158015612d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8f9190613c7e565b50600754604051634f647a1b60e11b81526001600160a01b0390911690639ec8f43690612dc29087908790600401613b1d565b600060405180830381600087803b158015612ddc57600080fd5b505af1158015612df0573d6000803e3d6000fd5b5050505050505050565b600754604051632b6419d360e11b815260009182916001600160a01b03909116906356c833a690612e319087908790600401613b1d565b602060405180830381865afa158015612e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e729190613b36565b90506000816001600160a01b0316632698d7076040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed89190613c7e565b925050505b92915050565b600754604051632b6419d360e11b81526000916001600160a01b0316906356c833a690612f169033908690600401613b1d565b602060405180830381865afa158015612f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f579190613b36565b905060005b8351811015610d1a57816001600160a01b031663e43252d7858381518110612f8657612f86613b53565b60200260200101516040518263ffffffff1660e01b8152600401612faa91906135fd565b600060405180830381600087803b158015612fc457600080fd5b505af1158015612fd8573d6000803e3d6000fd5b505050508080612fe790613b7f565b915050612f5c565b6003546001600160a01b0316331461300657600080fd5b60075460405163d6b4441160e01b815260009182916001600160a01b039091169063d6b444119061303d9087908790600401613b1d565b6040805180830381865afa158015613059573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307d9190613f41565b9150915061308e612cf68585612dfa565b600a5560408051808201825260008082526001600160a01b038781166020808501919091529086168083526014909152838220549351634d2a907360e01b81529093634d2a9073936130e4939092600401613d2e565b6020604051808303816000875af1158015613103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131279190613c7e565b6001146131825760405162461bcd60e51b8152602060048201526024808201527f66696e616c697a65206661696c656420617420766f7465722063616c6c207265604482015263199d5b9960e21b6064820152608401610e5e565b600754604051634f647a1b60e11b81526001600160a01b0390911690639ec8f43690612dc29087908790600401613b1d565b6002546001600160a01b031633146131cb57600080fd5b6001600160a01b03811661321e5760405162461bcd60e51b815260206004820152601a6024820152792732bb9020b232391031b0b73a103132903d32b9379030b2323960311b6044820152606401610e5e565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b0316331461325757600080fd5b60648111156132a55760405162461bcd60e51b815260206004820152601a602482015279756e695065722076616c7565206f7574736964652072616e676560301b6044820152606401610e5e565b600455565b600d805461104390613b98565b6002546001600160a01b031633146132ce57600080fd5b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b906132fa9084906004016135fd565b600060405180830381600087803b158015610bf257600080fd5b6002546001600160a01b0316331461332b57600080fd5b6119e48161350d565b6002546001600160a01b0316331461334b57600080fd5b601054610100900460ff16156133955760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610e5e565b6010805461ff001916610100179055565b6000806133b38385613fb3565b9050838110156134035760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b6044820152606401610e5e565b9392505050565b60008260000361341c57506000612edd565b60006134288385613fc6565b9050826134358583613fdd565b146134035760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e5e565b600061340383836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b81525061357c565b600061340383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135b3565b6001600160a01b03811661352057600080fd5b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000818361359d5760405162461bcd60e51b8152600401610e5e91906137c9565b5060006135aa8486613fdd565b95945050505050565b600081848411156135d75760405162461bcd60e51b8152600401610e5e91906137c9565b5060006135aa8486613fff565b6000602082840312156135f657600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b038111828210171561364a5761364a613611565b60405290565b604051601f8201601f191681016001600160401b038111828210171561367857613678613611565b604052919050565b6001600160a01b03811681146119e457600080fd5b80356136a081613680565b919050565b600080604083850312156136b857600080fd5b82356001600160401b03808211156136cf57600080fd5b818501915085601f8301126136e357600080fd5b81356020828211156136f7576136f7613611565b8160051b9250613708818401613650565b828152928401810192818101908985111561372257600080fd5b948201945b8486101561374c578535935061373c84613680565b8382529482019490820190613727565b9997909101359750505050505050565b60006020828403121561376e57600080fd5b813561340381613680565b60005b8381101561379457818101518382015260200161377c565b50506000910152565b600081518084526137b5816020860160208601613779565b601f01601f19169290920160200192915050565b602081526000613403602083018461379d565b600080604083850312156137ef57600080fd5b82356137fa81613680565b946020939093013593505050565b80151581146119e457600080fd5b60006020828403121561382857600080fd5b813561340381613808565b600082601f83011261384457600080fd5b81356001600160401b0381111561385d5761385d613611565b613870601f8201601f1916602001613650565b81815284602083860101111561388557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126138b357600080fd5b604080519081016001600160401b03811182821017156138d5576138d5613611565b80604052508060408401858111156138ec57600080fd5b845b818110156139065780358352602092830192016138ee565b509195945050505050565b600082601f83011261392257600080fd5b60405160a081016001600160401b038111828210171561394457613944613611565b6040528060a08401858111156138ec57600080fd5b600082601f83011261396a57600080fd5b604051606081016001600160401b038111828210171561398c5761398c613611565b6040528060608401858111156138ec57600080fd5b60008060008060008060006101c0888a0312156139bd57600080fd5b6001600160401b0388358110156139d357600080fd5b883589018a601f8201126139e657600080fd5b6139ee613627565b8061014083018d811115613a0157600080fd5b835b81811015613a34578581351115613a1957600080fd5b613a268f82358701613833565b845260209384019301613a03565b5050809a50505050613a4860208a01613695565b9650613a578a60408b016138a2565b9550613a668a60808b01613911565b9450613a768a6101208b01613959565b9350613a856101808a01613695565b92506101a089013581811115613a9a57600080fd5b613aa68b828c01613833565b9250505092959891949750929550565b60008060408385031215613ac957600080fd5b8235613ad481613808565b91506020830135613ae481613808565b809150509250929050565b60008060408385031215613b0257600080fd5b8235613b0d81613680565b91506020830135613ae481613680565b6001600160a01b03929092168252602082015260400190565b600060208284031215613b4857600080fd5b815161340381613680565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613b9157613b91613b69565b5060010190565b600181811c90821680613bac57607f821691505b602082108103613bcc57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845481600182811c915080831680613bf457607f831692505b8583108103613c1157634e487b7160e01b85526022600452602485fd5b878601838152602001818015613c2e5760018114613c4457613c6f565b60ff198616825284151560051b82019650613c6f565b60008b81526020902060005b86811015613c6957815484820152908501908901613c50565b83019750505b50949998505050505050505050565b600060208284031215613c9057600080fd5b5051919050565b602080825260139082015272616464722063616e6e6f74206265207a65726f60681b604082015260600190565b600080600060608486031215613cd957600080fd5b8351613ce481613680565b6020850151909350613cf581613680565b6040850151909250613d0681613680565b809150509250925092565b600060208284031215613d2357600080fd5b815161340381613808565b60808101818560005b6002811015613d5f5781516001600160a01b0316835260209283019290910190600101613d37565b5050508360408301528215156060830152949350505050565b66191959985d5b1d60ca1b815260070190565b60008251613d9d818460208701613779565b9190910192915050565b6001600160a01b0385811682526020808301869052908416604083015260c082019060608301908460005b6003811015613df1578151151584529282019290820190600101613dd2565b5050505095945050505050565b8060005b6002811015610d1a578151845260209384019390910190600101613e02565b6101c08101818760005b6004811015613e535781516001600160a01b0316835260209283019290910190600101613e2b565b505050613e636080830187613dfe565b60c082018560005b6005811015613e8a578151835260209283019290910190600101613e6b565b50505083610160830152613ea2610180830184613dfe565b9695505050505050565b60808082526000906101c0830190830187835b600a811015613ef157607f19868503018352613edc84835161379d565b93506020928301929190910190600101613ebf565b5050506001600160a01b0395861660208401529390941660408201526060015292915050565b604081526000613f2a604083018561379d565b905060018060a01b03831660208301529392505050565b60008060408385031215613f5457600080fd5b8251613f5f81613680565b6020840151909250613ae481613680565b60808101818460005b6003811015613fa15781516001600160a01b0316835260209283019290910190600101613f79565b50505082151560608301529392505050565b80820180821115612edd57612edd613b69565b8082028115828204841417612edd57612edd613b69565b600082613ffa57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115612edd57612edd613b6956fea26469706673582212207c499dab51f6cac6632c9d71a0d92a6ce781677f800acc4d975abdb52439ef6a64736f6c634300081100330000000000000000000000009b2710f85ed4338e26a69481761f5fb8715a87150000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef00000000000000000000000037d79eea1f3d5475a7e0f0cd8f8130df8500ca29000000000000000000000000344129238deb523c02e8be4c0e7e630780711bc5000000000000000000000000c1b4c3862d252e4146ca7776faf4460b5bc2ffd9

Deployed Bytecode

0x6080604052600436106102f45760003560e01c8063041f78cc146102f9578063042d97821461031b57806306e297121461034f5780630c52662e1461037c5780630d77c7df1461039c578063108d9447146103af57806311ce0267146103e55780631f4ba8041461040557806324ca984e14610429578063280db44014610449578063284def1514610469578063297054fb1461047f578063344eaa2714610495578063363d9efc146104b75780634055f612146104cd578063411028d8146104ed578063426b487f146105035780634503a6d314610522578063455991361461053757806346c96aac1461054d57806348e5b7d41461056d5780634f81c1ff146105a85780635787b142146105bd57806359f962f6146105dd5780635bc39e0f146105f35780635bff9a27146106135780635fadcc1e1461062957806360b2aff31461064a5780636608fd2f14610680578063662b3522146106a057806369f5ef4a146106b55780636ae0b154146106cf5780636e62d42f146106ef578063715018a61461070f5780637a594b79146107245780637b2b3073146107445780637d06b7fd146107645780637f928c82146107795780638da5cb5b1461078e57806390f6c065146107ae578063922b5aeb146107ce578063a42b45bf146107e1578063a614fec1146107f7578063ab4304df1461082d578063ae2750841461084d578063b02fa76c1461086d578063b08cdb7c1461088d578063b517da2d146108ad578063b56a038a146108cd578063bc599775146108e3578063c31c018714610903578063c946731714610930578063d0b3286314610950578063d0f0d7361461097d578063d276aded1461099d578063d3949254146109bd578063d50494cf146109dd578063d97f558e146109fd578063dd13b0dd14610a1d578063dec379ff14610a4d578063e11f2d1314610a6d578063e3613cd914610a8d578063ea354fcb14610aa2578063efcd708f14610ac2578063f2fde38b14610af2578063f5415c1f14610b12578063f625fd3e14610b27575b600080fd5b34801561030557600080fd5b506103196103143660046135e4565b610b41565b005b34801561032757600080fd5b5060105461033a90610100900460ff1681565b60405190151581526020015b60405180910390f35b34801561035b57600080fd5b5060005461036f906001600160a01b031681565b60405161034691906135fd565b34801561038857600080fd5b506103196103973660046136a5565b610c0e565b6103196103aa3660046135e4565b610d20565b3480156103bb57600080fd5b5061036f6103ca36600461375c565b6013602052600090815260409020546001600160a01b031681565b3480156103f157600080fd5b5060075461036f906001600160a01b031681565b34801561041157600080fd5b5061041b601b5481565b604051908152602001610346565b34801561043557600080fd5b5061031961044436600461375c565b610f02565b34801561045557600080fd5b5061031961046436600461375c565b610fd7565b34801561047557600080fd5b5061041b60045481565b34801561048b57600080fd5b5061041b600b5481565b3480156104a157600080fd5b506104aa611036565b60405161034691906137c9565b3480156104c357600080fd5b5061041b60195481565b3480156104d957600080fd5b5060065461036f906001600160a01b031681565b3480156104f957600080fd5b5061041b601d5481565b34801561050f57600080fd5b50601e5461033a90610100900460ff1681565b34801561052e57600080fd5b506103196110c4565b34801561054357600080fd5b5061041b600f5481565b34801561055957600080fd5b5060035461036f906001600160a01b031681565b34801561057957600080fd5b5061033a6105883660046137dc565b601260209081526000928352604080842090915290825290205460ff1681565b3480156105b457600080fd5b506104aa6110e7565b3480156105c957600080fd5b506103196105d836600461375c565b6110f4565b3480156105e957600080fd5b5061041b601a5481565b3480156105ff57600080fd5b5061031961060e366004613816565b611153565b34801561061f57600080fd5b5061041b601c5481565b34801561063557600080fd5b5060105461033a906301000000900460ff1681565b34801561065657600080fd5b5061036f6106653660046135e4565b6015602052600090815260409020546001600160a01b031681565b34801561068c57600080fd5b5061031961069b3660046135e4565b611184565b3480156106ac57600080fd5b506103196111a0565b3480156106c157600080fd5b5060105461033a9060ff1681565b3480156106db57600080fd5b506103196106ea36600461375c565b61120e565b3480156106fb57600080fd5b5060055461036f906001600160a01b031681565b34801561071b57600080fd5b506103196112a2565b34801561073057600080fd5b5061031961073f3660046135e4565b611303565b34801561075057600080fd5b5061031961075f3660046135e4565b61136a565b34801561077057600080fd5b5061031961196e565b34801561078557600080fd5b50610319611994565b34801561079a57600080fd5b5060025461036f906001600160a01b031681565b3480156107ba57600080fd5b506103196107c93660046135e4565b6119e7565b6103196107dc3660046139a1565b611a03565b3480156107ed57600080fd5b5061041b60095481565b34801561080357600080fd5b5061036f6108123660046135e4565b6017602052600090815260409020546001600160a01b031681565b34801561083957600080fd5b50610319610848366004613816565b6129e3565b34801561085957600080fd5b50610319610868366004613ab6565b612a0d565b34801561087957600080fd5b5060105461033a9062010000900460ff1681565b34801561089957600080fd5b506103196108a836600461375c565b612a56565b3480156108b957600080fd5b506103196108c836600461375c565b612ae5565b3480156108d957600080fd5b5061041b600a5481565b3480156108ef57600080fd5b506103196108fe3660046135e4565b612b44565b34801561090f57600080fd5b5061041b61091e36600461375c565b60186020526000908152604090205481565b34801561093c57600080fd5b5061031961094b36600461375c565b612bf8565b34801561095c57600080fd5b5061041b61096b36600461375c565b60146020526000908152604090205481565b34801561098957600080fd5b5060085461036f906001600160a01b031681565b3480156109a957600080fd5b506103196109b83660046137dc565b612c57565b3480156109c957600080fd5b5061041b6109d83660046137dc565b612dfa565b3480156109e957600080fd5b506103196109f83660046136a5565b612ee3565b348015610a0957600080fd5b50610319610a183660046137dc565b612fef565b348015610a2957600080fd5b5061033a610a3836600461375c565b60166020526000908152604090205460ff1681565b348015610a5957600080fd5b50610319610a6836600461375c565b6131b4565b348015610a7957600080fd5b50610319610a883660046135e4565b613240565b348015610a9957600080fd5b506104aa6132aa565b348015610aae57600080fd5b50610319610abd366004613aef565b6132b7565b348015610ace57600080fd5b5061033a610add36600461375c565b60116020526000908152604090205460ff1681565b348015610afe57600080fd5b50610319610b0d36600461375c565b613314565b348015610b1e57600080fd5b50610319613334565b348015610b3357600080fd5b50601e5461033a9060ff1681565b600754604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610b749033908690600401613b1d565b602060405180830381865afa158015610b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb59190613b36565b9050806001600160a01b031663d6b0f4846040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bf257600080fd5b505af1158015610c06573d6000803e3d6000fd5b505050505050565b600754604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610c419033908690600401613b1d565b602060405180830381865afa158015610c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c829190613b36565b905060005b8351811015610d1a57816001600160a01b0316638ab1d681858381518110610cb157610cb1613b53565b60200260200101516040518263ffffffff1660e01b8152600401610cd591906135fd565b600060405180830381600087803b158015610cef57600080fd5b505af1158015610d03573d6000803e3d6000fd5b505050508080610d1290613b7f565b915050610c87565b50505050565b600754604051632b6419d360e11b81526000916001600160a01b0316906356c833a690610d539033908690600401613b1d565b602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190613b36565b600854604051631a51134960e01b81529192506001600160a01b031690631a51134990610dc690600e90600401613bd2565b602060405180830381865afa158015610de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e079190613c7e565b341015610e675760405162461bcd60e51b8152602060048201526024808201527f6d73672e76616c7565206d757374206265203e3d2077686974656c69737420666044820152636565732160e01b60648201526084015b60405180910390fd5b600054604051638b3c99e360e01b8152600560048201526001600160a01b0390911690638b3c99e39034906024016000604051808303818588803b158015610eae57600080fd5b505af1158015610ec2573d6000803e3d6000fd5b5050505050806001600160a01b031663cdfb2b4e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bf257600080fd5b6002546001600160a01b03163314610f1957600080fd5b6001600160a01b03811660009081526016602052604090205460ff1615610f735760405162461bcd60e51b815260206004820152600e60248201526d616c72656164792061646465642160901b6044820152606401610e5e565b6001600160a01b0381166000818152601660209081526040808320805460ff19166001179055601980546018845282852081905584526017909252822080546001600160a01b03191690931790925581549190610fcf83613b7f565b919050555050565b6002546001600160a01b03163314610fee57600080fd5b6001600160a01b0381166110145760405162461bcd60e51b8152600401610e5e90613c97565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600e805461104390613b98565b80601f016020809104026020016040519081016040528092919081815260200182805461106f90613b98565b80156110bc5780601f10611091576101008083540402835291602001916110bc565b820191906000526020600020905b81548152906001019060200180831161109f57829003601f168201915b505050505081565b6002546001600160a01b031633146110db57600080fd5b6010805460ff19169055565b600c805461104390613b98565b6002546001600160a01b0316331461110b57600080fd5b6001600160a01b0381166111315760405162461bcd60e51b8152600401610e5e90613c97565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b0316331461116a57600080fd5b601e80549115156101000261ff0019909216919091179055565b6002546001600160a01b0316331461119b57600080fd5b601d55565b6002546001600160a01b031633146111b757600080fd5b601054610100900460ff166112015760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b6044820152606401610e5e565b6010805461ff0019169055565b6002546001600160a01b0316331461122557600080fd5b6001600160a01b03811660009081526016602052604090205460ff166112815760405162461bcd60e51b81526020600482015260116024820152701b9bdd081a5b881859191959081b1a5cdd607a1b6044820152606401610e5e565b6001600160a01b03166000908152601660205260409020805460ff19169055565b6002546001600160a01b031633146112b957600080fd5b6002546040516001600160a01b03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a2600280546001600160a01b0319169055565b6002546001600160a01b0316331461131a57600080fd5b600081116113655760405162461bcd60e51b8152602060048201526018602482015277496e76616c69642070657263656e746167652076616c756560401b6044820152606401610e5e565b601a55565b600754604051637e2439b360e11b8152600091829182916001600160a01b03169063fc487366906113a19033908890600401613b1d565b606060405180830381865afa1580156113be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e29190613cc4565b60105492955090935091506301000000900460ff16156114735760075460405163cf25127360e01b81526001600160a01b039091169063cf2512739061142e9033908890600401613b1d565b6020604051808303816000875af115801561144d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114719190613d11565b505b60105462010000900460ff16156114fb5760075460405163f3d7443b60e01b81526001600160a01b039091169063f3d7443b906114b69033908890600401613b1d565b6020604051808303816000875af11580156114d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f99190613d11565b505b601c54601a5461150a916133a6565b601b819055506000826001600160a01b0316632698d7076040518163ffffffff1660e01b8152600401602060405180830381865afa158015611550573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115749190613c7e565b90506000836001600160a01b031663e4c21cf26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115da9190613c7e565b90508082101580156115eb57508115155b1561186f576009546115fd90836133a6565b60095560015460009061161e9060649061161890869061340a565b9061348c565b600080546001600160a01b038881168084526013602090815260408086205460149092529485902054601054955163f6e99c0d60e01b8152948416600486015292166024840152604483019190915261010090920460ff16151560648201529192509063f6e99c0d906084016020604051808303816000875af11580156116a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cd9190613d11565b506040805180820182526001600160a01b038088166000818152601360209081528582205490931684523383850152818152601490925290839020549251634d2a907360e01b81529092634d2a90739261172f92909190600190600401613d2e565b6020604051808303816000875af115801561174e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117729190613c7e565b6001146117be5760405162461bcd60e51b815260206004820152601a60248201527966696e616c697a65206661696c6564206174207375636365737360301b6044820152606401610e5e565b6006546001600160a01b0386811660009081526013602090815260408083205460149092529091205492821692631d592a4d9291909116906118089060649061161890879061340a565b6040518363ffffffff1660e01b8152600401611825929190613b1d565b6020604051808303816000875af1158015611844573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118689190613d11565b5050610c06565b8082108061187b575081155b15610c0657600a5461188d90836133a6565b600a556040805180820182526000808252336020808401919091526001600160a01b0388168083526014909152838220549351634d2a907360e01b81529093634d2a9073936118e0939092600401613d2e565b6020604051808303816000875af11580156118ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119239190613c7e565b600114610c065760405162461bcd60e51b8152602060048201526019602482015278199a5b985b1a5e994819985a5b195908185d081c99599d5b99603a1b6044820152606401610e5e565b6002546001600160a01b0316331461198557600080fd5b6010805460ff19166001179055565b6002546001600160a01b031633146119ab57600080fd5b6002546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156119e4573d6000803e3d6000fd5b50565b6002546001600160a01b031633146119fe57600080fd5b600b55565b601e5460ff16611a515760405162461bcd60e51b815260206004820152601960248201527818dc99585d1a5bdb88141c995cd85b1948191a5cd8589b1959603a1b6044820152606401610e5e565b84514210611a9c5760405162461bcd60e51b815260206004820152601860248201527773746172742074696d65206e6f7420696e2066757475726560401b6044820152606401610e5e565b600b54611ab2908660005b6020020151906133a6565b60208601511115611b055760405162461bcd60e51b815260206004820152601e60248201527f70726573616c65206475726174696f6e2065786365656473206c696d697400006044820152606401610e5e565b601d5484511015611b625760405162461bcd60e51b815260206004820152602160248201527f73636170206d7573742062652061746c65617374206d696e20726571756972656044820152601960fa1b6064820152608401610e5e565b602084015115801590611b785750604084015115155b8015611b875750606084015115155b611bc95760405162461bcd60e51b815260206004820152601360248201527276616c7565732063616e74206265207a65726f60681b6044820152606401610e5e565b606084015160808501511015611c205760405162461bcd60e51b815260206004820152601c60248201527b1b585e0818dbdb9d081b5d5cdd081899480f8f481b5a5b8818dbdb9d60221b6044820152606401610e5e565b6001600160a01b03821660009081526016602052604090205460ff16611c815760405162461bcd60e51b8152602060048201526016602482015275696e76616c696420726f75746572206164647265737360501b6044820152606401610e5e565b60105460ff1615611d2157604051602001611c9b90613d78565b6040516020818303038152906040528051906020012081604051602001611cc29190613d8b565b6040516020818303038152906040528051906020012014611d215760405162461bcd60e51b81526020600482015260196024820152781bdb9b1e48191959985d5b1d0818dbd91948185b1b1bddd959603a1b6044820152606401610e5e565b604051602001611d3090613d78565b6040516020818303038152906040528051906020012081604051602001611d579190613d8b565b6040516020818303038152906040528051906020012014158015611d7e575060105460ff16155b15612298576006546040516349e96fdd60e01b81526001600160a01b03909116906349e96fdd90611db39084906004016137c9565b6020604051808303816000875af1158015611dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df69190613d11565b611e3a5760405162461bcd60e51b8152602060048201526015602482015274696e76616c696420646973636f756e7420636f646560581b6044820152606401610e5e565b601c54600654604051635f51485160e11b8152611f3c929161161891611ec4916001600160a01b03169063bea290a290611e789088906004016137c9565b6020604051808303816000875af1158015611e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebb9190613c7e565b601c54906134cb565b600854604051633ae42caf60e21b81526001600160a01b039091169063eb90b2bc90611ef590600d90600401613bd2565b602060405180830381865afa158015611f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f369190613c7e565b9061340a565b341015611f9c5760405162461bcd60e51b815260206004820152602860248201527f6d73672e76616c7565206d75737420626520657175616c20746f20726566657260448201526772616c206665652160c01b6064820152608401610e5e565b600654604051630fc0b3fd60e01b815260009161202491606491611618916001600160a01b0390911690630fc0b3fd90611fda9088906004016137c9565b6020604051808303816000875af1158015611ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201d9190613c7e565b349061340a565b600654604051630f22420560e11b81529192506001600160a01b031690631e44840a906120559085906004016137c9565b6020604051808303816000875af1158015612074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120989190613b36565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156120d0573d6000803e3d6000fd5b50600054600654604051630fc0b3fd60e01b81526001600160a01b0392831692638b3c99e39261211c926064926116189261201d92911690630fc0b3fd90611e78908b906004016137c9565b6040516001600160e01b031960e084901b168152600360048201526024016000604051808303818588803b15801561215357600080fd5b505af1158015612167573d6000803e3d6000fd5b5050600654604051630f22420560e11b81526001600160a01b039091169350631d592a4d9250839150631e44840a906121a49087906004016137c9565b6020604051808303816000875af11580156121c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e79190613b36565b836040518363ffffffff1660e01b8152600401612205929190613b1d565b6020604051808303816000875af1158015612224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122489190613d11565b6122925760405162461bcd60e51b815260206004820152601b60248201527a1c9959995c9c995c905b5bdd5b9d155c19185d194819985a5b1959602a1b6044820152606401610e5e565b506123c9565b600854604051633ae42caf60e21b81526001600160a01b039091169063eb90b2bc906122c990600d90600401613bd2565b602060405180830381865afa1580156122e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230a9190613c7e565b3410156123695760405162461bcd60e51b815260206004820152602760248201527f6d73672e76616c7565206d75737420626520657175616c20746f2070726573616044820152666c65206665652160c81b6064820152608401610e5e565b600054604051638b3c99e360e01b81526004808201526001600160a01b0390911690638b3c99e39034906024016000604051808303818588803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b50505050505b60208501516123dc610258876000611aa7565b111561242a5760405162461bcd60e51b815260206004820181905260248201527f70726573616c6520706572696f64206c657373207468616e206d696e696d756d6044820152606401610e5e565b612438610258866001611aa7565b83511161249e5760405162461bcd60e51b815260206004820152602e60248201527f4c6f636b2074696d65206d75737420626520686967686572207468616e20707260448201526d6573616c6520656e642074696d6560901b6064820152608401610e5e565b60045460408401511161250a5760405162461bcd60e51b815260206004820152602e60248201527f556e69737761702070657263656e74616765206973206c6f776572207468616e60448201526d081b5a5b881d1a1c995cda1bdb1960921b6064820152608401610e5e565b600754835160408051606081018252600080825260208201526001818301529051630282544d60e21b81526001600160a01b0390931692630a09513492612558928b92339190600401613da7565b6020604051808303816000875af1158015612577573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259b9190613d11565b6125e15760405162461bcd60e51b81526020600482015260176024820152761cdd1bdc9859d9481859191a5d1a5bdb8819985a5b1959604a1b6044820152606401610e5e565b600554604080516080810182523081523360208201526001600160a01b03898116928201929092528482166060820152600092919091169063d48f502990888888600260200201516040518060400160405280601a5481526020018b60006003811061264f5761264f613b53565b60200201518152506040518663ffffffff1660e01b8152600401612677959493929190613e21565b6020604051808303816000875af1158015612696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ba9190613b36565b600654604051630f22420560e11b81529192506001600160a01b031690631e44840a906126eb9085906004016137c9565b6020604051808303816000875af115801561270a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272e9190613b36565b6001600160a01b038281166000908152601360205260409081902080546001600160a01b031916938316939093179092556006549151630fc0b3fd60e01b8152911690630fc0b3fd906127859085906004016137c9565b6020604051808303816000875af11580156127a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c89190613c7e565b6001600160a01b03808316600090815260146020526040808220939093556007549251631996f55960e11b8152909261285e9260019291169063332deab2906128159033906004016135fd565b6020604051808303816000875af1158015612834573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128589190613c7e565b906134cb565b600754604051638252401760e01b81529192506001600160a01b031690638252401790612895908c90869033908790600401613eac565b6020604051808303816000875af11580156128b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d89190613d11565b61291e5760405162461bcd60e51b81526020600482015260176024820152761c1c995cd85b19481859191c881859190819985a5b1959604a1b6044820152606401610e5e565b600654604051635ac066d560e01b81526001600160a01b0390911690635ac066d5906129509086908690600401613f17565b6020604051808303816000875af115801561296f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129939190613d11565b6129d85760405162461bcd60e51b815260206004820152601660248201527518dbd919481d5cd9481d5c19185d194819985a5b195960521b6044820152606401610e5e565b505050505050505050565b6002546001600160a01b031633146129fa57600080fd5b601e805460ff1916911515919091179055565b6002546001600160a01b03163314612a2457600080fd5b6010805463ffff00001916620100009315159390930263ff000000191692909217630100000091151591909102179055565b6002546001600160a01b03163314612a6d57600080fd5b6001600160a01b038116612ac35760405162461bcd60e51b815260206004820152601d60248201527f666169722070726573616c6520646170702063616e74206265203078300000006044820152606401610e5e565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314612afc57600080fd5b6001600160a01b038116612b225760405162461bcd60e51b8152600401610e5e90613c97565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314612b5b57600080fd5b6064811115612ba55760405162461bcd60e51b81526020600482015260166024820152756f7574206f662072616e6765206665652076616c756560501b6044820152606401610e5e565b6001548103612bf35760405162461bcd60e51b815260206004820152601a6024820152794e6577206665652069732073616d65206173204f6c642066656560301b6044820152606401610e5e565b600155565b6002546001600160a01b03163314612c0f57600080fd5b6001600160a01b038116612c355760405162461bcd60e51b8152600401610e5e90613c97565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b03163314612c6e57600080fd5b60075460405163d6b4441160e01b815260009182916001600160a01b039091169063d6b4441190612ca59087908790600401613b1d565b6040805180830381865afa158015612cc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce59190613f41565b91509150612cff612cf68585612dfa565b600a54906133a6565b600a556040805160608101825260008082526001600160a01b0387811660208401528481168385015292516397993fd960e01b8152928516926397993fd992612d4c929091600401613f70565b6020604051808303816000875af1158015612d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8f9190613c7e565b50600754604051634f647a1b60e11b81526001600160a01b0390911690639ec8f43690612dc29087908790600401613b1d565b600060405180830381600087803b158015612ddc57600080fd5b505af1158015612df0573d6000803e3d6000fd5b5050505050505050565b600754604051632b6419d360e11b815260009182916001600160a01b03909116906356c833a690612e319087908790600401613b1d565b602060405180830381865afa158015612e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e729190613b36565b90506000816001600160a01b0316632698d7076040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed89190613c7e565b925050505b92915050565b600754604051632b6419d360e11b81526000916001600160a01b0316906356c833a690612f169033908690600401613b1d565b602060405180830381865afa158015612f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f579190613b36565b905060005b8351811015610d1a57816001600160a01b031663e43252d7858381518110612f8657612f86613b53565b60200260200101516040518263ffffffff1660e01b8152600401612faa91906135fd565b600060405180830381600087803b158015612fc457600080fd5b505af1158015612fd8573d6000803e3d6000fd5b505050508080612fe790613b7f565b915050612f5c565b6003546001600160a01b0316331461300657600080fd5b60075460405163d6b4441160e01b815260009182916001600160a01b039091169063d6b444119061303d9087908790600401613b1d565b6040805180830381865afa158015613059573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307d9190613f41565b9150915061308e612cf68585612dfa565b600a5560408051808201825260008082526001600160a01b038781166020808501919091529086168083526014909152838220549351634d2a907360e01b81529093634d2a9073936130e4939092600401613d2e565b6020604051808303816000875af1158015613103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131279190613c7e565b6001146131825760405162461bcd60e51b8152602060048201526024808201527f66696e616c697a65206661696c656420617420766f7465722063616c6c207265604482015263199d5b9960e21b6064820152608401610e5e565b600754604051634f647a1b60e11b81526001600160a01b0390911690639ec8f43690612dc29087908790600401613b1d565b6002546001600160a01b031633146131cb57600080fd5b6001600160a01b03811661321e5760405162461bcd60e51b815260206004820152601a6024820152792732bb9020b232391031b0b73a103132903d32b9379030b2323960311b6044820152606401610e5e565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b0316331461325757600080fd5b60648111156132a55760405162461bcd60e51b815260206004820152601a602482015279756e695065722076616c7565206f7574736964652072616e676560301b6044820152606401610e5e565b600455565b600d805461104390613b98565b6002546001600160a01b031633146132ce57600080fd5b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b906132fa9084906004016135fd565b600060405180830381600087803b158015610bf257600080fd5b6002546001600160a01b0316331461332b57600080fd5b6119e48161350d565b6002546001600160a01b0316331461334b57600080fd5b601054610100900460ff16156133955760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610e5e565b6010805461ff001916610100179055565b6000806133b38385613fb3565b9050838110156134035760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b6044820152606401610e5e565b9392505050565b60008260000361341c57506000612edd565b60006134288385613fc6565b9050826134358583613fdd565b146134035760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e5e565b600061340383836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b81525061357c565b600061340383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135b3565b6001600160a01b03811661352057600080fd5b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000818361359d5760405162461bcd60e51b8152600401610e5e91906137c9565b5060006135aa8486613fdd565b95945050505050565b600081848411156135d75760405162461bcd60e51b8152600401610e5e91906137c9565b5060006135aa8486613fff565b6000602082840312156135f657600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b038111828210171561364a5761364a613611565b60405290565b604051601f8201601f191681016001600160401b038111828210171561367857613678613611565b604052919050565b6001600160a01b03811681146119e457600080fd5b80356136a081613680565b919050565b600080604083850312156136b857600080fd5b82356001600160401b03808211156136cf57600080fd5b818501915085601f8301126136e357600080fd5b81356020828211156136f7576136f7613611565b8160051b9250613708818401613650565b828152928401810192818101908985111561372257600080fd5b948201945b8486101561374c578535935061373c84613680565b8382529482019490820190613727565b9997909101359750505050505050565b60006020828403121561376e57600080fd5b813561340381613680565b60005b8381101561379457818101518382015260200161377c565b50506000910152565b600081518084526137b5816020860160208601613779565b601f01601f19169290920160200192915050565b602081526000613403602083018461379d565b600080604083850312156137ef57600080fd5b82356137fa81613680565b946020939093013593505050565b80151581146119e457600080fd5b60006020828403121561382857600080fd5b813561340381613808565b600082601f83011261384457600080fd5b81356001600160401b0381111561385d5761385d613611565b613870601f8201601f1916602001613650565b81815284602083860101111561388557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126138b357600080fd5b604080519081016001600160401b03811182821017156138d5576138d5613611565b80604052508060408401858111156138ec57600080fd5b845b818110156139065780358352602092830192016138ee565b509195945050505050565b600082601f83011261392257600080fd5b60405160a081016001600160401b038111828210171561394457613944613611565b6040528060a08401858111156138ec57600080fd5b600082601f83011261396a57600080fd5b604051606081016001600160401b038111828210171561398c5761398c613611565b6040528060608401858111156138ec57600080fd5b60008060008060008060006101c0888a0312156139bd57600080fd5b6001600160401b0388358110156139d357600080fd5b883589018a601f8201126139e657600080fd5b6139ee613627565b8061014083018d811115613a0157600080fd5b835b81811015613a34578581351115613a1957600080fd5b613a268f82358701613833565b845260209384019301613a03565b5050809a50505050613a4860208a01613695565b9650613a578a60408b016138a2565b9550613a668a60808b01613911565b9450613a768a6101208b01613959565b9350613a856101808a01613695565b92506101a089013581811115613a9a57600080fd5b613aa68b828c01613833565b9250505092959891949750929550565b60008060408385031215613ac957600080fd5b8235613ad481613808565b91506020830135613ae481613808565b809150509250929050565b60008060408385031215613b0257600080fd5b8235613b0d81613680565b91506020830135613ae481613680565b6001600160a01b03929092168252602082015260400190565b600060208284031215613b4857600080fd5b815161340381613680565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613b9157613b91613b69565b5060010190565b600181811c90821680613bac57607f821691505b602082108103613bcc57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845481600182811c915080831680613bf457607f831692505b8583108103613c1157634e487b7160e01b85526022600452602485fd5b878601838152602001818015613c2e5760018114613c4457613c6f565b60ff198616825284151560051b82019650613c6f565b60008b81526020902060005b86811015613c6957815484820152908501908901613c50565b83019750505b50949998505050505050505050565b600060208284031215613c9057600080fd5b5051919050565b602080825260139082015272616464722063616e6e6f74206265207a65726f60681b604082015260600190565b600080600060608486031215613cd957600080fd5b8351613ce481613680565b6020850151909350613cf581613680565b6040850151909250613d0681613680565b809150509250925092565b600060208284031215613d2357600080fd5b815161340381613808565b60808101818560005b6002811015613d5f5781516001600160a01b0316835260209283019290910190600101613d37565b5050508360408301528215156060830152949350505050565b66191959985d5b1d60ca1b815260070190565b60008251613d9d818460208701613779565b9190910192915050565b6001600160a01b0385811682526020808301869052908416604083015260c082019060608301908460005b6003811015613df1578151151584529282019290820190600101613dd2565b5050505095945050505050565b8060005b6002811015610d1a578151845260209384019390910190600101613e02565b6101c08101818760005b6004811015613e535781516001600160a01b0316835260209283019290910190600101613e2b565b505050613e636080830187613dfe565b60c082018560005b6005811015613e8a578151835260209283019290910190600101613e6b565b50505083610160830152613ea2610180830184613dfe565b9695505050505050565b60808082526000906101c0830190830187835b600a811015613ef157607f19868503018352613edc84835161379d565b93506020928301929190910190600101613ebf565b5050506001600160a01b0395861660208401529390941660408201526060015292915050565b604081526000613f2a604083018561379d565b905060018060a01b03831660208301529392505050565b60008060408385031215613f5457600080fd5b8251613f5f81613680565b6020840151909250613ae481613680565b60808101818460005b6003811015613fa15781516001600160a01b0316835260209283019290910190600101613f79565b50505082151560608301529392505050565b80820180821115612edd57612edd613b69565b8082028115828204841417612edd57612edd613b69565b600082613ffa57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115612edd57612edd613b6956fea26469706673582212207c499dab51f6cac6632c9d71a0d92a6ce781677f800acc4d975abdb52439ef6a64736f6c63430008110033

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

0000000000000000000000009b2710f85ed4338e26a69481761f5fb8715a87150000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef00000000000000000000000037d79eea1f3d5475a7e0f0cd8f8130df8500ca29000000000000000000000000344129238deb523c02e8be4c0e7e630780711bc5000000000000000000000000c1b4c3862d252e4146ca7776faf4460b5bc2ffd9

-----Decoded View---------------
Arg [0] : _presaleDappAddr (address): 0x9B2710F85ED4338E26A69481761F5fb8715A8715
Arg [1] : _feeContract (address): 0x0FEbB541Ef3632925cD67DAf9e82CdC8Ec7a71ef
Arg [2] : _storageContract (address): 0x37d79eea1f3D5475a7e0F0CD8f8130dF8500CA29
Arg [3] : _referralContract (address): 0x344129238deB523C02e8be4C0e7E630780711BC5
Arg [4] : _feeCheckContract (address): 0xC1b4c3862d252e4146CA7776FaF4460B5bc2FFd9

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000009b2710f85ed4338e26a69481761f5fb8715a8715
Arg [1] : 0000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef
Arg [2] : 00000000000000000000000037d79eea1f3d5475a7e0f0cd8f8130df8500ca29
Arg [3] : 000000000000000000000000344129238deb523c02e8be4c0e7e630780711bc5
Arg [4] : 000000000000000000000000c1b4c3862d252e4146ca7776faf4460b5bc2ffd9


Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

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