ETH Price: $3,404.64 (+5.71%)

Contract

0x4A089C689894Bde6a67625488C64a5E16e1CbEBa
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer121496822021-03-31 21:50:211682 days ago1617227421IN
PolySwarm: Token Sale
0.05173 ETH0.004683223
Transfer121496532021-03-31 21:42:521682 days ago1617226972IN
PolySwarm: Token Sale
0.07118 ETH0.004452212
Transfer121487392021-03-31 18:24:281682 days ago1617215068IN
PolySwarm: Token Sale
0.07763502 ETH0.005502262
Transfer121007562021-03-24 9:22:461690 days ago1616577766IN
PolySwarm: Token Sale
0.03759585 ETH0.00334631159
Transfer120992422021-03-24 3:39:371690 days ago1616557177IN
PolySwarm: Token Sale
0.03759585 ETH0.0033884161
Transfer78875082019-06-03 16:35:032349 days ago1559579703IN
PolySwarm: Token Sale
0 ETH0.0002110
Enable Transfers53445822018-03-29 18:59:582780 days ago1522349998IN
PolySwarm: Token Sale
0 ETH0.000128094
Transfer53034182018-03-22 21:34:572787 days ago1521754497IN
PolySwarm: Token Sale
1 ETH0.0004419621
Buy Tokens53032762018-03-22 21:01:582787 days ago1521752518IN
PolySwarm: Token Sale
1 ETH0.0008167921
Finalize53032132018-03-22 20:46:272787 days ago1521751587IN
PolySwarm: Token Sale
0 ETH0.00015762
Buy Tokens53028042018-03-22 19:08:082787 days ago1521745688IN
PolySwarm: Token Sale
0.107079 ETH0.000040991.05
Transfer53027442018-03-22 18:52:362787 days ago1521744756IN
PolySwarm: Token Sale
0.107079 ETH0.001052350
Buy Tokens53027322018-03-22 18:49:082787 days ago1521744548IN
PolySwarm: Token Sale
1.5 ETH0.0016010515
Buy Tokens53027262018-03-22 18:47:332787 days ago1521744453IN
PolySwarm: Token Sale
0.5 ETH0.00036724
Transfer53027172018-03-22 18:44:112787 days ago1521744251IN
PolySwarm: Token Sale
0.107079 ETH0.001052350
Buy Tokens53027052018-03-22 18:40:262787 days ago1521744026IN
PolySwarm: Token Sale
1 ETH0.004598843
Buy Tokens53026522018-03-22 18:28:322787 days ago1521743312IN
PolySwarm: Token Sale
2 ETH0.0043788441
Buy Tokens53026392018-03-22 18:26:572787 days ago1521743217IN
PolySwarm: Token Sale
0.3 ETH0.000106941
Buy Tokens53026322018-03-22 18:25:432787 days ago1521743143IN
PolySwarm: Token Sale
1.6135 ETH0.000183852
Buy Tokens53026212018-03-22 18:23:302787 days ago1521743010IN
PolySwarm: Token Sale
0.15 ETH0.0016029715
Buy Tokens53026102018-03-22 18:21:222787 days ago1521742882IN
PolySwarm: Token Sale
0.11 ETH0.0043814641
Transfer53026022018-03-22 18:19:282787 days ago1521742768IN
PolySwarm: Token Sale
0.107079 ETH0.001052350
Buy Tokens53025912018-03-22 18:17:142787 days ago1521742634IN
PolySwarm: Token Sale
1 ETH0.0055613452
Transfer53025882018-03-22 18:16:332787 days ago1521742593IN
PolySwarm: Token Sale
0.107079 ETH0.0010550
Transfer53025792018-03-22 18:14:052787 days ago1521742445IN
PolySwarm: Token Sale
0.107079 ETH0.000084184
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer53027322018-03-22 18:49:082787 days ago1521744548
PolySwarm: Token Sale
1.5 ETH
Transfer53027262018-03-22 18:47:332787 days ago1521744453
PolySwarm: Token Sale
0.5 ETH
Transfer53027052018-03-22 18:40:262787 days ago1521744026
PolySwarm: Token Sale
1 ETH
Transfer53026522018-03-22 18:28:322787 days ago1521743312
PolySwarm: Token Sale
2 ETH
Transfer53026392018-03-22 18:26:572787 days ago1521743217
PolySwarm: Token Sale
0.3 ETH
Transfer53026322018-03-22 18:25:432787 days ago1521743143
PolySwarm: Token Sale
1.6135 ETH
Transfer53026212018-03-22 18:23:302787 days ago1521743010
PolySwarm: Token Sale
0.15 ETH
Transfer53026102018-03-22 18:21:222787 days ago1521742882
PolySwarm: Token Sale
0.11 ETH
Transfer53025912018-03-22 18:17:142787 days ago1521742634
PolySwarm: Token Sale
1 ETH
Transfer53025472018-03-22 18:06:422787 days ago1521742002
PolySwarm: Token Sale
0.4992 ETH
Transfer53024762018-03-22 17:50:392787 days ago1521741039
PolySwarm: Token Sale
0.1388 ETH
Transfer53024482018-03-22 17:43:512787 days ago1521740631
PolySwarm: Token Sale
0.29 ETH
Transfer53024182018-03-22 17:37:352787 days ago1521740255
PolySwarm: Token Sale
1.1 ETH
Transfer53024102018-03-22 17:36:352787 days ago1521740195
PolySwarm: Token Sale
0.11 ETH
Transfer53023582018-03-22 17:23:522787 days ago1521739432
PolySwarm: Token Sale
0.107079 ETH
Transfer53023492018-03-22 17:22:052787 days ago1521739325
PolySwarm: Token Sale
0.2007063 ETH
Transfer53023442018-03-22 17:21:192787 days ago1521739279
PolySwarm: Token Sale
1.151 ETH
Transfer53023332018-03-22 17:18:162787 days ago1521739096
PolySwarm: Token Sale
0.2 ETH
Transfer53022002018-03-22 16:48:172787 days ago1521737297
PolySwarm: Token Sale
0.30659 ETH
Transfer53021972018-03-22 16:47:302787 days ago1521737250
PolySwarm: Token Sale
2 ETH
Transfer53021852018-03-22 16:43:392787 days ago1521737019
PolySwarm: Token Sale
0.10708 ETH
Transfer53021812018-03-22 16:42:322787 days ago1521736952
PolySwarm: Token Sale
3 ETH
Transfer53021792018-03-22 16:42:122787 days ago1521736932
PolySwarm: Token Sale
0.3 ETH
Transfer53021202018-03-22 16:25:262787 days ago1521735926
PolySwarm: Token Sale
0.15 ETH
Transfer53020962018-03-22 16:20:172787 days ago1521735617
PolySwarm: Token Sale
1 ETH
View All Internal Transactions
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
NectarCrowdsale

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
No with 0 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-02-26
*/

pragma solidity ^0.4.13;

contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  uint256 totalSupply_;

  /**
  * @dev total number of tokens in existence
  */
  function totalSupply() public view returns (uint256) {
    return totalSupply_;
  }

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
  }

}

contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) internal allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public view returns (uint256) {
    return allowed[_owner][_spender];
  }

  /**
   * @dev Increase the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _addedValue The amount of tokens to increase the allowance by.
   */
  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  /**
   * @dev Decrease the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To decrement
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _subtractedValue The amount of tokens to decrease the allowance by.
   */
  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}

library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

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

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

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

contract Ownable {
  address public owner;


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


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

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

  /**
   * @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 {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

contract MintableToken is StandardToken, Ownable {
  event Mint(address indexed to, uint256 amount);
  event MintFinished();

  bool public mintingFinished = false;


  modifier canMint() {
    require(!mintingFinished);
    _;
  }

  /**
   * @dev Function to mint tokens
   * @param _to The address that will receive the minted tokens.
   * @param _amount The amount of tokens to mint.
   * @return A boolean that indicates if the operation was successful.
   */
  function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) {
    totalSupply_ = totalSupply_.add(_amount);
    balances[_to] = balances[_to].add(_amount);
    Mint(_to, _amount);
    Transfer(address(0), _to, _amount);
    return true;
  }

  /**
   * @dev Function to stop minting new tokens.
   * @return True if the operation was successful.
   */
  function finishMinting() onlyOwner canMint public returns (bool) {
    mintingFinished = true;
    MintFinished();
    return true;
  }
}

contract NectarToken is MintableToken {
    string public name = "Nectar";
    string public symbol = "NCT";
    uint8 public decimals = 18;

    bool public transfersEnabled = false;
    event TransfersEnabled();

    // Disable transfers until after the sale
    modifier whenTransfersEnabled() {
        require(transfersEnabled);
        _;
    }

    modifier whenTransfersNotEnabled() {
        require(!transfersEnabled);
        _;
    }

    function enableTransfers() onlyOwner whenTransfersNotEnabled public {
        transfersEnabled = true;
        TransfersEnabled();
    }

    function transfer(address to, uint256 value) public whenTransfersEnabled returns (bool) {
        return super.transfer(to, value);
    }

    function transferFrom(address from, address to, uint256 value) public whenTransfersEnabled returns (bool) {
        return super.transferFrom(from, to, value);
    }

    // Approves and then calls the receiving contract
    function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);

        // call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this.
        // receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData)
        // it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead.

        // solium-disable-next-line security/no-low-level-calls
        require(_spender.call(bytes4(bytes32(keccak256("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData));
        return true;
    }
}

contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    Unpause();
  }
}

contract NectarCrowdsale is Ownable, Pausable {
    using SafeMath for uint256;

    /** Maximum amount to raise in USD based on initial exchange rate */
    uint256 constant maxCapUsd = 50000000;
    /** Minumum amount per purchase in USD based on initial exchange rate*/
    uint256 constant minimumPurchaseUsd = 100;

    /** Tranche parameters */
    uint256 constant tranche1ThresholdUsd = 5000000;
    uint256 constant tranche1Rate = 37604;
    uint256 constant tranche2ThresholdUsd = 10000000;
    uint256 constant tranche2Rate = 36038;
    uint256 constant tranche3ThresholdUsd = 15000000;
    uint256 constant tranche3Rate = 34471;
    uint256 constant tranche4ThresholdUsd = 20000000;
    uint256 constant tranche4Rate = 32904;
    uint256 constant standardTrancheRate= 31337;

    /** The token being sold */
    NectarToken public token;

    /** Start timestamp when token purchases are allowed, inclusive */
    uint256 public startTime;

    /** End timestamp when token purchases are allowed, inclusive */
    uint256 public endTime;

    /** Set value of wei/usd used in cap and minimum purchase calculation */
    uint256 public weiUsdExchangeRate;

    /** Address where funds are collected */
    address public wallet;

    /** Address used to sign purchase authorizations */
    address public purchaseAuthorizer;

    /** Total amount of raised money in wei */
    uint256 public weiRaised;

    /** Cap in USD */
    uint256 public capUsd;

    /** Maximum amount of raised money in wei */
    uint256 public cap;

    /** Minumum amount of wei per purchase */
    uint256 public minimumPurchase;

    /** Have we canceled the sale? */
    bool public isCanceled;

    /** have we finalized the sale? */
    bool public isFinalized;

    /** Record of nonces -> purchases */
    mapping (uint256 => bool) public purchases;

    /**
     * Event triggered on presale minting
     * @param purchaser who paid for the tokens
     * @param amount amount of tokens minted
     */
    event PreSaleMinting(address indexed purchaser, uint256 amount);

    /**
     * Event triggered on token purchase
     * @param purchaser who paid for the tokens
     * @param value wei paid for purchase
     * @param amount amount of tokens purchased
     */
    event TokenPurchase(address indexed purchaser, uint256 value, uint256 amount);

    /** Event triggered on sale cancelation */
    event Canceled();

    /** Event triggered on sale finalization */
    event Finalized();

    /**
     * NectarCrowdsale constructor
     * @param _startTime start timestamp when purchases are allowed, inclusive
     * @param _endTime end timestamp when purchases are allowed, inclusive
     * @param _initialWeiUsdExchangeRate initial rate of wei/usd used in cap and minimum purchase calculation
     * @param _wallet wallet in which to collect the funds
     * @param _purchaseAuthorizer address to verify purchase authorizations from
     */
    function NectarCrowdsale(
        uint256 _startTime,
        uint256 _endTime,
        uint256 _initialWeiUsdExchangeRate,
        address _wallet,
        address _purchaseAuthorizer
    )
        public
    {
        require(_startTime >= now);
        require(_endTime >= _startTime);
        require(_initialWeiUsdExchangeRate > 0);
        require(_wallet != address(0));
        require(_purchaseAuthorizer != address(0));

        token = createTokenContract();
        startTime = _startTime;
        endTime = _endTime;
        weiUsdExchangeRate = _initialWeiUsdExchangeRate;
        wallet = _wallet;
        purchaseAuthorizer = _purchaseAuthorizer;

        capUsd = maxCapUsd;

        // Updates cap and minimumPurchase based on capUsd and weiUsdExchangeRate
        updateCapAndExchangeRate();

        isCanceled = false;
        isFinalized = false;
    }

    /** Disable usage of the fallback function, only accept eth from buyTokens */
    function () external payable {
        revert();
    }

    /** Only allow before the sale period */
    modifier onlyPreSale() {
        require(now < startTime);
        _;
    }

    /**
     * Directly mint tokens and assign to presale buyers
     * @param purchaser Address to assign to
     * @param tokenAmount amount of tokens to mint
     */
    function mintPreSale(address purchaser, uint256 tokenAmount) public onlyOwner onlyPreSale {
        require(purchaser != address(0));
        require(tokenAmount > 0);

        token.mint(purchaser, tokenAmount);
        PreSaleMinting(purchaser, tokenAmount);
    }

    /**
     * Buy tokens once authorized by the frontend
     * @param nonce nonce parameter generated by the frontend
     * @param authorizedAmount maximum purchase amount authorized for this transaction
     * @param sig the signature generated by the frontned
     */
    function buyTokens(uint256 authorizedAmount, uint256 nonce, bytes sig) public payable whenNotPaused {
        require(msg.sender != address(0));
        require(validPurchase(authorizedAmount, nonce, sig));

        uint256 weiAmount = msg.value;

        // calculate token amount to be created
        uint256 rate = currentTranche();
        uint256 tokens = weiAmount.mul(rate);

        // update state
        weiRaised = weiRaised.add(weiAmount);
        purchases[nonce] = true;

        token.mint(msg.sender, tokens);
        TokenPurchase(msg.sender, weiAmount, tokens);

        forwardFunds();
    }

    /** Cancel the sale */
    function cancel() public onlyOwner {
        require(!isCanceled);
        require(!hasEnded());

        Canceled();
        isCanceled = true;
    }

    /** Finalize the sale */
    function finalize() public onlyOwner {
        require(!isFinalized);
        require(hasEnded());

        finalization();
        Finalized();

        isFinalized = true;
    }

    /**
     * Set exchange rate before sale
     * @param _weiUsdExchangeRate rate of wei/usd used in cap and minimum purchase calculation
     */
    function setExchangeRate(uint256 _weiUsdExchangeRate) public onlyOwner onlyPreSale {
        require(_weiUsdExchangeRate > 0);

        weiUsdExchangeRate = _weiUsdExchangeRate;
        updateCapAndExchangeRate();
    }

    /**
     * Set exchange rate before sale
     * @param _capUsd new cap in USD
     */
    function setCapUsd(uint256 _capUsd) public onlyOwner onlyPreSale {
        require(_capUsd <= maxCapUsd);

        capUsd = _capUsd;
        updateCapAndExchangeRate();
    }

    /** Enable token sales once sale is completed */
    function enableTransfers() public onlyOwner {
        require(isFinalized);
        require(hasEnded());

        token.enableTransfers();
    }

    /**
     * Get the rate of tokens/wei in the current tranche
     * @return the current tokens/wei rate
     */
    function currentTranche() public view returns (uint256) {
        uint256 currentFundingUsd = weiRaised.div(weiUsdExchangeRate);
        if (currentFundingUsd <= tranche1ThresholdUsd) {
            return tranche1Rate;
        } else if (currentFundingUsd <= tranche2ThresholdUsd) {
            return tranche2Rate;
        } else if (currentFundingUsd <= tranche3ThresholdUsd) {
            return tranche3Rate;
        } else if (currentFundingUsd <= tranche4ThresholdUsd) {
            return tranche4Rate;
        } else {
            return standardTrancheRate;
        }
    }

    /** @return true if crowdsale event has ended */
    function hasEnded() public view returns (bool) {
        bool afterEnd = now > endTime;
        bool capMet = weiRaised >= cap;
        return afterEnd || capMet || isCanceled;
    }

    /** Get the amount collected in USD, needed for WINGS calculation. */
    function totalCollected() public view returns (uint256) {
        uint256 presale = maxCapUsd.sub(capUsd);
        uint256 crowdsale = weiRaised.div(weiUsdExchangeRate);
        return presale.add(crowdsale);
    }

    /** Creates the token to be sold. */
    function createTokenContract() internal returns (NectarToken) {
        return new NectarToken();
    }

    /** Create the 30% extra token supply at the end of the sale */
    function finalization() internal {
        // Create 30% NCT for company use
        uint256 tokens = token.totalSupply().mul(3).div(10);
        token.mint(wallet, tokens);
    }

    /** Forward ether to the fund collection wallet */
    function forwardFunds() internal {
        wallet.transfer(msg.value);
    }

    /** Update parameters dependant on capUsd and eiUsdEchangeRate */
    function updateCapAndExchangeRate() internal {
        cap = capUsd.mul(weiUsdExchangeRate);
        minimumPurchase = minimumPurchaseUsd.mul(weiUsdExchangeRate);
    }

    /**
     * Is a purchase transaction valid?
     * @return true if the transaction can buy tokens
     */
    function validPurchase(uint256 authorizedAmount, uint256 nonce, bytes sig) internal view returns (bool) {
        // 84 = 20 byte address + 32 byte authorized amount + 32 byte nonce
        bytes memory prefix = "\x19Ethereum Signed Message:\n84";
        bytes32 hash = keccak256(prefix, msg.sender, authorizedAmount, nonce);
        bool validAuthorization = ECRecovery.recover(hash, sig) == purchaseAuthorizer;

        bool validNonce = !purchases[nonce];
        bool withinPeriod = now >= startTime && now <= endTime;
        bool aboveMinimum = msg.value >= minimumPurchase;
        bool belowAuthorized = msg.value <= authorizedAmount;
        bool belowCap = weiRaised.add(msg.value) <= cap;
        return validAuthorization && validNonce && withinPeriod && aboveMinimum && belowAuthorized && belowCap;
    }
}

library ECRecovery {

  /**
   * @dev Recover signer address from a message by using his signature
   * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
   * @param sig bytes signature, the signature is generated using web3.eth.sign()
   */
  function recover(bytes32 hash, bytes sig) public pure returns (address) {
    bytes32 r;
    bytes32 s;
    uint8 v;

    //Check the signature length
    if (sig.length != 65) {
      return (address(0));
    }

    // Divide the signature in r, s and v variables
    assembly {
      r := mload(add(sig, 32))
      s := mload(add(sig, 64))
      v := byte(0, mload(add(sig, 96)))
    }

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

    // If the version is correct return the signer address
    if (v != 27 && v != 28) {
      return (address(0));
    } else {
      return ecrecover(hash, v, r, s);
    }
  }

}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"capUsd","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isCanceled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiUsdExchangeRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"authorizedAmount","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"sig","type":"bytes"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"purchaseAuthorizer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_capUsd","type":"uint256"}],"name":"setCapUsd","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"purchases","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"purchaser","type":"address"},{"name":"tokenAmount","type":"uint256"}],"name":"mintPreSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isFinalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minimumPurchase","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableTransfers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentTranche","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_weiUsdExchangeRate","type":"uint256"}],"name":"setExchangeRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalCollected","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"cancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hasEnded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_startTime","type":"uint256"},{"name":"_endTime","type":"uint256"},{"name":"_initialWeiUsdExchangeRate","type":"uint256"},{"name":"_wallet","type":"address"},{"name":"_purchaseAuthorizer","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"PreSaleMinting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[],"name":"Canceled","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

606060405260008060146101000a81548160ff02191690831515021790555034156200002a57600080fd5b60405160a08062005d0483398101604052808051906020019091908051906020019091908051906020019091908051906020019091908051906020019091905050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428510151515620000bb57600080fd5b848410151515620000cb57600080fd5b600083111515620000db57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156200011857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200015557600080fd5b62000173620002b46401000000000262001ab4176401000000009004565b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600281905550836003819055508260048190555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506302faf08060088190555062000273620002dc6401000000000262001a2b176401000000009004565b6000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff021916908315150217905550505050505062000387565b6000620002c062000376565b604051809103906000f0801515620002d757600080fd5b905090565b6200030360045460085462000337640100000000026200177f179091906401000000009004565b6009819055506200032f600454606462000337640100000000026200177f179091906401000000009004565b600a81905550565b60008060008414156200034e57600091506200036f565b82840290508284828115156200036057fe5b041415156200036b57fe5b8091505b5092915050565b604051611f2a8062003dda83390190565b613a4380620003976000396000f30060606040526004361062000187576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806304659819146200018c5780630ed5a93314620001b857806311fa3f4f14620001e85780633197cbb61462000214578063355274ea14620002405780633d00b8e3146200026c5780633f4ba83a14620002d25780634042b66f14620002ea57806344c9e83d14620003165780634bb278f3146200036e578063521eb27314620003865780635c975abb14620003de5780636e0dd984146200040e57806378e9792514620004345780638392fe3114620004605780638456cb59146200049e5780638c25466a14620004b65780638d4e408314620004fb5780638da5cb5b146200052b578063aa2de6c31462000583578063af35c6c714620005af578063c404b3f614620005c7578063db068e0e14620005f3578063e29eb8361462000619578063ea8a1af01462000645578063ecb70fb7146200065d578063f2fde38b146200068d578063fc0c546a14620006c9575b600080fd5b34156200019857600080fd5b620001a262000721565b6040518082815260200191505060405180910390f35b3415620001c457600080fd5b620001ce62000727565b604051808215151515815260200191505060405180910390f35b3415620001f457600080fd5b620001fe6200073a565b6040518082815260200191505060405180910390f35b34156200022057600080fd5b6200022a62000740565b6040518082815260200191505060405180910390f35b34156200024c57600080fd5b6200025662000746565b6040518082815260200191505060405180910390f35b620002d0600480803590602001909190803590602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506200074c565b005b3415620002de57600080fd5b620002e862000985565b005b3415620002f657600080fd5b6200030062000a45565b6040518082815260200191505060405180910390f35b34156200032257600080fd5b6200032c62000a4b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156200037a57600080fd5b6200038462000a71565b005b34156200039257600080fd5b6200039c62000b53565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415620003ea57600080fd5b620003f462000b79565b604051808215151515815260200191505060405180910390f35b34156200041a57600080fd5b62000432600480803590602001909190505062000b8c565b005b34156200044057600080fd5b6200044a62000c21565b6040518082815260200191505060405180910390f35b34156200046c57600080fd5b62000484600480803590602001909190505062000c27565b604051808215151515815260200191505060405180910390f35b3415620004aa57600080fd5b620004b462000c47565b005b3415620004c257600080fd5b620004f9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505062000d09565b005b34156200050757600080fd5b6200051162000f00565b604051808215151515815260200191505060405180910390f35b34156200053757600080fd5b6200054162000f13565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156200058f57600080fd5b6200059962000f38565b6040518082815260200191505060405180910390f35b3415620005bb57600080fd5b620005c562000f3e565b005b3415620005d357600080fd5b620005dd62001069565b6040518082815260200191505060405180910390f35b3415620005ff57600080fd5b620006176004808035906020019091905050620010f2565b005b34156200062557600080fd5b6200062f62001183565b6040518082815260200191505060405180910390f35b34156200065157600080fd5b6200065b620011dc565b005b34156200066957600080fd5b62000673620012b5565b604051808215151515815260200191505060405180910390f35b34156200069957600080fd5b620006c7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050620012f4565b005b3415620006d557600080fd5b620006df6200144b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60085481565b600b60009054906101000a900460ff1681565b60045481565b60035481565b60095481565b60008060008060149054906101000a900460ff161515156200076d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515620007aa57600080fd5b620007b786868662001471565b1515620007c357600080fd5b349250620007d062001069565b9150620007e782846200177f90919063ffffffff16565b90506200080083600754620017be90919063ffffffff16565b6007819055506001600c600087815260200190815260200160002060006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156200090057600080fd5b6102c65a03f115156200091257600080fd5b50505060405180519050503373ffffffffffffffffffffffffffffffffffffffff167fcd60aa75dea3072fbc07ae6d7d856b5dc5f4eee88854f5b4abf7b680ef8bc50f8483604051808381526020018281526020019250505060405180910390a26200097d620017dd565b505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515620009e157600080fd5b600060149054906101000a900460ff161515620009fd57600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60075481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562000acd57600080fd5b600b60019054906101000a900460ff1615151562000aea57600080fd5b62000af4620012b5565b151562000b0057600080fd5b62000b0a62001842565b7f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a16001600b60016101000a81548160ff021916908315150217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562000be857600080fd5b6002544210151562000bf957600080fd5b6302faf080811115151562000c0d57600080fd5b8060088190555062000c1e62001a2b565b50565b60025481565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562000ca357600080fd5b600060149054906101000a900460ff1615151562000cc057600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562000d6557600080fd5b6002544210151562000d7657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151562000db357600080fd5b60008111151562000dc357600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151562000e9157600080fd5b6102c65a03f1151562000ea357600080fd5b50505060405180519050508173ffffffffffffffffffffffffffffffffffffffff167f28a9aadb9d294b12744252591cec8238837beaa79898f4b9d64f9e0eca60a3aa826040518082815260200191505060405180910390a25050565b600b60019054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562000f9a57600080fd5b600b60019054906101000a900460ff16151562000fb657600080fd5b62000fc0620012b5565b151562000fcc57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af35c6c76040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15156200105257600080fd5b6102c65a03f115156200106457600080fd5b505050565b6000806200108560045460075462001a6a90919063ffffffff16565b9050624c4b40811115156200109f576192e49150620010ee565b6298968081111515620010b757618cc69150620010ee565b62e4e1c081111515620010cf576186a79150620010ee565b6301312d0081111515620010e8576180889150620010ee565b617a6991505b5090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200114e57600080fd5b600254421015156200115f57600080fd5b6000811115156200116f57600080fd5b806004819055506200118062001a2b565b50565b6000806000620011a36008546302faf08062001a8690919063ffffffff16565b9150620011be60045460075462001a6a90919063ffffffff16565b9050620011d58183620017be90919063ffffffff16565b9250505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200123857600080fd5b600b60009054906101000a900460ff161515156200125557600080fd5b6200125f620012b5565b1515156200126c57600080fd5b7f1afb0ae590df277bcb3a37f88612725bf1f7df4755792b1548a7efe77985ff7760405160405180910390a16001600b60006101000a81548160ff021916908315150217905550565b600080600060035442119150600954600754101590508180620012d55750805b80620012ed5750600b60009054906101000a900460ff165b9250505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200135057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200138d57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006200147d62001aa0565b60008060008060008060006040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a383400000000815250975087338d8d6040518085805190602001908083835b602083101515620014fb5780518252602082019150602081019050602083039250620014d4565b6001836020036101000a0380198251168184511680821785525050505050509050018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183815260200182815260200194505050505060405180910390209650600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673c104e1b762e0e01bfcdee5a040573a9d36688c636319045a25898d6000604051602001526040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b838110156200165357808201518184015260208101905062001636565b50505050905090810190601f168015620016815780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15156200169f57600080fd5b6102c65a03f41515620016b157600080fd5b5050506040518051905073ffffffffffffffffffffffffffffffffffffffff16149550600c60008c815260200190815260200160002060009054906101000a900460ff1615945060025442101580156200170d57506003544211155b9350600a5434101592508b34111591506009546200173734600754620017be90919063ffffffff16565b11159050858015620017465750845b8015620017505750835b80156200175a5750825b8015620017645750815b80156200176e5750805b985050505050505050509392505050565b6000806000841415620017965760009150620017b7565b8284029050828482811515620017a857fe5b04141515620017b357fe5b8091505b5092915050565b6000808284019050838110151515620017d357fe5b8091505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156200184057600080fd5b565b600062001919600a6200190a6003600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515620018df57600080fd5b6102c65a03f11515620018f157600080fd5b505050604051805190506200177f90919063ffffffff16565b62001a6a90919063ffffffff16565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151562001a0b57600080fd5b6102c65a03f1151562001a1d57600080fd5b505050604051805190505050565b62001a446004546008546200177f90919063ffffffff16565b60098190555062001a6260045460646200177f90919063ffffffff16565b600a81905550565b600080828481151562001a7957fe5b0490508091505092915050565b600082821115151562001a9557fe5b818303905092915050565b602060405190810160405280600081525090565b600062001ac062001adc565b604051809103906000f080151562001ad757600080fd5b905090565b604051611f2a8062001aee83390190560060606040526000600360146101000a81548160ff0219169083151502179055506040805190810160405280600681526020017f4e65637461720000000000000000000000000000000000000000000000000000815250600490805190602001906200006c92919062000139565b506040805190810160405280600381526020017f4e4354000000000000000000000000000000000000000000000000000000000081525060059080519060200190620000ba92919062000139565b506012600660006101000a81548160ff021916908360ff1602179055506000600660016101000a81548160ff02191690831515021790555033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001e8565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200017c57805160ff1916838001178555620001ad565b82800160010185558215620001ad579182015b82811115620001ac5782518255916020019190600101906200018f565b5b509050620001bc9190620001c0565b5090565b620001e591905b80821115620001e1576000816000905550600101620001c7565b5090565b90565b611d3280620001f86000396000f300606060405260043610610107576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305d2035b1461010c57806306fdde0314610139578063095ea7b3146101c757806318160ddd1461022157806323b872dd1461024a578063313ce567146102c357806340c10f19146102f2578063661884631461034c57806370a08231146103a65780637d64bcb4146103f35780638da5cb5b1461042057806395d89b4114610475578063a9059cbb14610503578063af35c6c71461055d578063bef97c8714610572578063cae9ca511461059f578063d73dd6231461063c578063dd62ed3e14610696578063f2fde38b14610702575b600080fd5b341561011757600080fd5b61011f61073b565b604051808215151515815260200191505060405180910390f35b341561014457600080fd5b61014c61074e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561018c578082015181840152602081019050610171565b50505050905090810190601f1680156101b95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101d257600080fd5b610207600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506107ec565b604051808215151515815260200191505060405180910390f35b341561022c57600080fd5b6102346108de565b6040518082815260200191505060405180910390f35b341561025557600080fd5b6102a9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506108e8565b604051808215151515815260200191505060405180910390f35b34156102ce57600080fd5b6102d6610919565b604051808260ff1660ff16815260200191505060405180910390f35b34156102fd57600080fd5b610332600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061092c565b604051808215151515815260200191505060405180910390f35b341561035757600080fd5b61038c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610b12565b604051808215151515815260200191505060405180910390f35b34156103b157600080fd5b6103dd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610da3565b6040518082815260200191505060405180910390f35b34156103fe57600080fd5b610406610deb565b604051808215151515815260200191505060405180910390f35b341561042b57600080fd5b610433610eb3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561048057600080fd5b610488610ed9565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104c85780820151818401526020810190506104ad565b50505050905090810190601f1680156104f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561050e57600080fd5b610543600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610f77565b604051808215151515815260200191505060405180910390f35b341561056857600080fd5b610570610fa6565b005b341561057d57600080fd5b610585611067565b604051808215151515815260200191505060405180910390f35b34156105aa57600080fd5b610622600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061107a565b604051808215151515815260200191505060405180910390f35b341561064757600080fd5b61067c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061131b565b604051808215151515815260200191505060405180910390f35b34156106a157600080fd5b6106ec600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611517565b6040518082815260200191505060405180910390f35b341561070d57600080fd5b610739600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061159e565b005b600360149054906101000a900460ff1681565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107e45780601f106107b9576101008083540402835291602001916107e4565b820191906000526020600020905b8154815290600101906020018083116107c757829003601f168201915b505050505081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b6000600660019054906101000a900460ff16151561090557600080fd5b6109108484846116f6565b90509392505050565b600660009054906101000a900460ff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561098a57600080fd5b600360149054906101000a900460ff161515156109a657600080fd5b6109bb82600154611ab090919063ffffffff16565b600181905550610a12826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ab090919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115610c23576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cb7565b610c368382611ace90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e4957600080fd5b600360149054906101000a900460ff16151515610e6557600080fd5b6001600360146101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a16001905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f6f5780601f10610f4457610100808354040283529160200191610f6f565b820191906000526020600020905b815481529060010190602001808311610f5257829003601f168201915b505050505081565b6000600660019054906101000a900460ff161515610f9457600080fd5b610f9e8383611ae7565b905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561100257600080fd5b600660019054906101000a900460ff1615151561101e57600080fd5b6001600660016101000a81548160ff0219169083151502179055507feadb24812ab3c9a55c774958184293ebdb6c7f6a2dbab11f397d80c86feb65d360405160405180910390a1565b600660019054906101000a900460ff1681565b600082600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff1660405180807f72656365697665417070726f76616c28616464726573732c75696e743235362c81526020017f616464726573732c627974657329000000000000000000000000000000000000815250602e01905060405180910390207c01000000000000000000000000000000000000000000000000000000009004338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828051906020019080838360005b838110156112bb5780820151818401526020810190506112a0565b50505050905090810190601f1680156112e85780820380516001836020036101000a031916815260200191505b5094505050505060006040518083038160008761646e5a03f192505050151561131057600080fd5b600190509392505050565b60006113ac82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ab090919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115fa57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561163657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561173357600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561178057600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561180b57600080fd5b61185c826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ace90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118ef826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ab090919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119c082600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ace90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000808284019050838110151515611ac457fe5b8091505092915050565b6000828211151515611adc57fe5b818303905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b2457600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515611b7157600080fd5b611bc2826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ace90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c55826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ab090919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fe54c2a9c594ff01b9af5425b8f2dc854e61440a959c8e59f10636f311c5f52c0029a165627a7a72305820d21685f51a43e53038e82421389c49eb52391a12d48c7ac97bfb66db550d679a002960606040526000600360146101000a81548160ff0219169083151502179055506040805190810160405280600681526020017f4e65637461720000000000000000000000000000000000000000000000000000815250600490805190602001906200006c92919062000139565b506040805190810160405280600381526020017f4e4354000000000000000000000000000000000000000000000000000000000081525060059080519060200190620000ba92919062000139565b506012600660006101000a81548160ff021916908360ff1602179055506000600660016101000a81548160ff02191690831515021790555033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001e8565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200017c57805160ff1916838001178555620001ad565b82800160010185558215620001ad579182015b82811115620001ac5782518255916020019190600101906200018f565b5b509050620001bc9190620001c0565b5090565b620001e591905b80821115620001e1576000816000905550600101620001c7565b5090565b90565b611d3280620001f86000396000f300606060405260043610610107576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305d2035b1461010c57806306fdde0314610139578063095ea7b3146101c757806318160ddd1461022157806323b872dd1461024a578063313ce567146102c357806340c10f19146102f2578063661884631461034c57806370a08231146103a65780637d64bcb4146103f35780638da5cb5b1461042057806395d89b4114610475578063a9059cbb14610503578063af35c6c71461055d578063bef97c8714610572578063cae9ca511461059f578063d73dd6231461063c578063dd62ed3e14610696578063f2fde38b14610702575b600080fd5b341561011757600080fd5b61011f61073b565b604051808215151515815260200191505060405180910390f35b341561014457600080fd5b61014c61074e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561018c578082015181840152602081019050610171565b50505050905090810190601f1680156101b95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101d257600080fd5b610207600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506107ec565b604051808215151515815260200191505060405180910390f35b341561022c57600080fd5b6102346108de565b6040518082815260200191505060405180910390f35b341561025557600080fd5b6102a9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506108e8565b604051808215151515815260200191505060405180910390f35b34156102ce57600080fd5b6102d6610919565b604051808260ff1660ff16815260200191505060405180910390f35b34156102fd57600080fd5b610332600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061092c565b604051808215151515815260200191505060405180910390f35b341561035757600080fd5b61038c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610b12565b604051808215151515815260200191505060405180910390f35b34156103b157600080fd5b6103dd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610da3565b6040518082815260200191505060405180910390f35b34156103fe57600080fd5b610406610deb565b604051808215151515815260200191505060405180910390f35b341561042b57600080fd5b610433610eb3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561048057600080fd5b610488610ed9565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104c85780820151818401526020810190506104ad565b50505050905090810190601f1680156104f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561050e57600080fd5b610543600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610f77565b604051808215151515815260200191505060405180910390f35b341561056857600080fd5b610570610fa6565b005b341561057d57600080fd5b610585611067565b604051808215151515815260200191505060405180910390f35b34156105aa57600080fd5b610622600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061107a565b604051808215151515815260200191505060405180910390f35b341561064757600080fd5b61067c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061131b565b604051808215151515815260200191505060405180910390f35b34156106a157600080fd5b6106ec600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611517565b6040518082815260200191505060405180910390f35b341561070d57600080fd5b610739600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061159e565b005b600360149054906101000a900460ff1681565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107e45780601f106107b9576101008083540402835291602001916107e4565b820191906000526020600020905b8154815290600101906020018083116107c757829003601f168201915b505050505081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b6000600660019054906101000a900460ff16151561090557600080fd5b6109108484846116f6565b90509392505050565b600660009054906101000a900460ff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561098a57600080fd5b600360149054906101000a900460ff161515156109a657600080fd5b6109bb82600154611ab090919063ffffffff16565b600181905550610a12826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ab090919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115610c23576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cb7565b610c368382611ace90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e4957600080fd5b600360149054906101000a900460ff16151515610e6557600080fd5b6001600360146101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a16001905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f6f5780601f10610f4457610100808354040283529160200191610f6f565b820191906000526020600020905b815481529060010190602001808311610f5257829003601f168201915b505050505081565b6000600660019054906101000a900460ff161515610f9457600080fd5b610f9e8383611ae7565b905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561100257600080fd5b600660019054906101000a900460ff1615151561101e57600080fd5b6001600660016101000a81548160ff0219169083151502179055507feadb24812ab3c9a55c774958184293ebdb6c7f6a2dbab11f397d80c86feb65d360405160405180910390a1565b600660019054906101000a900460ff1681565b600082600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff1660405180807f72656365697665417070726f76616c28616464726573732c75696e743235362c81526020017f616464726573732c627974657329000000000000000000000000000000000000815250602e01905060405180910390207c01000000000000000000000000000000000000000000000000000000009004338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828051906020019080838360005b838110156112bb5780820151818401526020810190506112a0565b50505050905090810190601f1680156112e85780820380516001836020036101000a031916815260200191505b5094505050505060006040518083038160008761646e5a03f192505050151561131057600080fd5b600190509392505050565b60006113ac82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ab090919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115fa57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561163657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561173357600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561178057600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561180b57600080fd5b61185c826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ace90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118ef826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ab090919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119c082600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ace90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000808284019050838110151515611ac457fe5b8091505092915050565b6000828211151515611adc57fe5b818303905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b2457600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515611b7157600080fd5b611bc2826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ace90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c55826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ab090919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fe54c2a9c594ff01b9af5425b8f2dc854e61440a959c8e59f10636f311c5f52c0029000000000000000000000000000000000000000000000000000000005a8c7030000000000000000000000000000000000000000000000000000000005ab3fd3000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000afa1c92a27215d1d1dad4fa89972e7c8d91218f9000000000000000000000000471f62713fc13c554467abae55913415501e20c2

Deployed Bytecode

0x60606040526004361062000187576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806304659819146200018c5780630ed5a93314620001b857806311fa3f4f14620001e85780633197cbb61462000214578063355274ea14620002405780633d00b8e3146200026c5780633f4ba83a14620002d25780634042b66f14620002ea57806344c9e83d14620003165780634bb278f3146200036e578063521eb27314620003865780635c975abb14620003de5780636e0dd984146200040e57806378e9792514620004345780638392fe3114620004605780638456cb59146200049e5780638c25466a14620004b65780638d4e408314620004fb5780638da5cb5b146200052b578063aa2de6c31462000583578063af35c6c714620005af578063c404b3f614620005c7578063db068e0e14620005f3578063e29eb8361462000619578063ea8a1af01462000645578063ecb70fb7146200065d578063f2fde38b146200068d578063fc0c546a14620006c9575b600080fd5b34156200019857600080fd5b620001a262000721565b6040518082815260200191505060405180910390f35b3415620001c457600080fd5b620001ce62000727565b604051808215151515815260200191505060405180910390f35b3415620001f457600080fd5b620001fe6200073a565b6040518082815260200191505060405180910390f35b34156200022057600080fd5b6200022a62000740565b6040518082815260200191505060405180910390f35b34156200024c57600080fd5b6200025662000746565b6040518082815260200191505060405180910390f35b620002d0600480803590602001909190803590602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506200074c565b005b3415620002de57600080fd5b620002e862000985565b005b3415620002f657600080fd5b6200030062000a45565b6040518082815260200191505060405180910390f35b34156200032257600080fd5b6200032c62000a4b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156200037a57600080fd5b6200038462000a71565b005b34156200039257600080fd5b6200039c62000b53565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415620003ea57600080fd5b620003f462000b79565b604051808215151515815260200191505060405180910390f35b34156200041a57600080fd5b62000432600480803590602001909190505062000b8c565b005b34156200044057600080fd5b6200044a62000c21565b6040518082815260200191505060405180910390f35b34156200046c57600080fd5b62000484600480803590602001909190505062000c27565b604051808215151515815260200191505060405180910390f35b3415620004aa57600080fd5b620004b462000c47565b005b3415620004c257600080fd5b620004f9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505062000d09565b005b34156200050757600080fd5b6200051162000f00565b604051808215151515815260200191505060405180910390f35b34156200053757600080fd5b6200054162000f13565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156200058f57600080fd5b6200059962000f38565b6040518082815260200191505060405180910390f35b3415620005bb57600080fd5b620005c562000f3e565b005b3415620005d357600080fd5b620005dd62001069565b6040518082815260200191505060405180910390f35b3415620005ff57600080fd5b620006176004808035906020019091905050620010f2565b005b34156200062557600080fd5b6200062f62001183565b6040518082815260200191505060405180910390f35b34156200065157600080fd5b6200065b620011dc565b005b34156200066957600080fd5b62000673620012b5565b604051808215151515815260200191505060405180910390f35b34156200069957600080fd5b620006c7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050620012f4565b005b3415620006d557600080fd5b620006df6200144b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60085481565b600b60009054906101000a900460ff1681565b60045481565b60035481565b60095481565b60008060008060149054906101000a900460ff161515156200076d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515620007aa57600080fd5b620007b786868662001471565b1515620007c357600080fd5b349250620007d062001069565b9150620007e782846200177f90919063ffffffff16565b90506200080083600754620017be90919063ffffffff16565b6007819055506001600c600087815260200190815260200160002060006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156200090057600080fd5b6102c65a03f115156200091257600080fd5b50505060405180519050503373ffffffffffffffffffffffffffffffffffffffff167fcd60aa75dea3072fbc07ae6d7d856b5dc5f4eee88854f5b4abf7b680ef8bc50f8483604051808381526020018281526020019250505060405180910390a26200097d620017dd565b505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515620009e157600080fd5b600060149054906101000a900460ff161515620009fd57600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60075481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562000acd57600080fd5b600b60019054906101000a900460ff1615151562000aea57600080fd5b62000af4620012b5565b151562000b0057600080fd5b62000b0a62001842565b7f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a16001600b60016101000a81548160ff021916908315150217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562000be857600080fd5b6002544210151562000bf957600080fd5b6302faf080811115151562000c0d57600080fd5b8060088190555062000c1e62001a2b565b50565b60025481565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562000ca357600080fd5b600060149054906101000a900460ff1615151562000cc057600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562000d6557600080fd5b6002544210151562000d7657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151562000db357600080fd5b60008111151562000dc357600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151562000e9157600080fd5b6102c65a03f1151562000ea357600080fd5b50505060405180519050508173ffffffffffffffffffffffffffffffffffffffff167f28a9aadb9d294b12744252591cec8238837beaa79898f4b9d64f9e0eca60a3aa826040518082815260200191505060405180910390a25050565b600b60019054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562000f9a57600080fd5b600b60019054906101000a900460ff16151562000fb657600080fd5b62000fc0620012b5565b151562000fcc57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af35c6c76040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15156200105257600080fd5b6102c65a03f115156200106457600080fd5b505050565b6000806200108560045460075462001a6a90919063ffffffff16565b9050624c4b40811115156200109f576192e49150620010ee565b6298968081111515620010b757618cc69150620010ee565b62e4e1c081111515620010cf576186a79150620010ee565b6301312d0081111515620010e8576180889150620010ee565b617a6991505b5090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200114e57600080fd5b600254421015156200115f57600080fd5b6000811115156200116f57600080fd5b806004819055506200118062001a2b565b50565b6000806000620011a36008546302faf08062001a8690919063ffffffff16565b9150620011be60045460075462001a6a90919063ffffffff16565b9050620011d58183620017be90919063ffffffff16565b9250505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200123857600080fd5b600b60009054906101000a900460ff161515156200125557600080fd5b6200125f620012b5565b1515156200126c57600080fd5b7f1afb0ae590df277bcb3a37f88612725bf1f7df4755792b1548a7efe77985ff7760405160405180910390a16001600b60006101000a81548160ff021916908315150217905550565b600080600060035442119150600954600754101590508180620012d55750805b80620012ed5750600b60009054906101000a900460ff165b9250505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200135057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200138d57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006200147d62001aa0565b60008060008060008060006040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a383400000000815250975087338d8d6040518085805190602001908083835b602083101515620014fb5780518252602082019150602081019050602083039250620014d4565b6001836020036101000a0380198251168184511680821785525050505050509050018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183815260200182815260200194505050505060405180910390209650600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673c104e1b762e0e01bfcdee5a040573a9d36688c636319045a25898d6000604051602001526040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b838110156200165357808201518184015260208101905062001636565b50505050905090810190601f168015620016815780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15156200169f57600080fd5b6102c65a03f41515620016b157600080fd5b5050506040518051905073ffffffffffffffffffffffffffffffffffffffff16149550600c60008c815260200190815260200160002060009054906101000a900460ff1615945060025442101580156200170d57506003544211155b9350600a5434101592508b34111591506009546200173734600754620017be90919063ffffffff16565b11159050858015620017465750845b8015620017505750835b80156200175a5750825b8015620017645750815b80156200176e5750805b985050505050505050509392505050565b6000806000841415620017965760009150620017b7565b8284029050828482811515620017a857fe5b04141515620017b357fe5b8091505b5092915050565b6000808284019050838110151515620017d357fe5b8091505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156200184057600080fd5b565b600062001919600a6200190a6003600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515620018df57600080fd5b6102c65a03f11515620018f157600080fd5b505050604051805190506200177f90919063ffffffff16565b62001a6a90919063ffffffff16565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151562001a0b57600080fd5b6102c65a03f1151562001a1d57600080fd5b505050604051805190505050565b62001a446004546008546200177f90919063ffffffff16565b60098190555062001a6260045460646200177f90919063ffffffff16565b600a81905550565b600080828481151562001a7957fe5b0490508091505092915050565b600082821115151562001a9557fe5b818303905092915050565b602060405190810160405280600081525090565b600062001ac062001adc565b604051809103906000f080151562001ad757600080fd5b905090565b604051611f2a8062001aee83390190560060606040526000600360146101000a81548160ff0219169083151502179055506040805190810160405280600681526020017f4e65637461720000000000000000000000000000000000000000000000000000815250600490805190602001906200006c92919062000139565b506040805190810160405280600381526020017f4e4354000000000000000000000000000000000000000000000000000000000081525060059080519060200190620000ba92919062000139565b506012600660006101000a81548160ff021916908360ff1602179055506000600660016101000a81548160ff02191690831515021790555033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001e8565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200017c57805160ff1916838001178555620001ad565b82800160010185558215620001ad579182015b82811115620001ac5782518255916020019190600101906200018f565b5b509050620001bc9190620001c0565b5090565b620001e591905b80821115620001e1576000816000905550600101620001c7565b5090565b90565b611d3280620001f86000396000f300606060405260043610610107576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305d2035b1461010c57806306fdde0314610139578063095ea7b3146101c757806318160ddd1461022157806323b872dd1461024a578063313ce567146102c357806340c10f19146102f2578063661884631461034c57806370a08231146103a65780637d64bcb4146103f35780638da5cb5b1461042057806395d89b4114610475578063a9059cbb14610503578063af35c6c71461055d578063bef97c8714610572578063cae9ca511461059f578063d73dd6231461063c578063dd62ed3e14610696578063f2fde38b14610702575b600080fd5b341561011757600080fd5b61011f61073b565b604051808215151515815260200191505060405180910390f35b341561014457600080fd5b61014c61074e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561018c578082015181840152602081019050610171565b50505050905090810190601f1680156101b95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101d257600080fd5b610207600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506107ec565b604051808215151515815260200191505060405180910390f35b341561022c57600080fd5b6102346108de565b6040518082815260200191505060405180910390f35b341561025557600080fd5b6102a9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506108e8565b604051808215151515815260200191505060405180910390f35b34156102ce57600080fd5b6102d6610919565b604051808260ff1660ff16815260200191505060405180910390f35b34156102fd57600080fd5b610332600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061092c565b604051808215151515815260200191505060405180910390f35b341561035757600080fd5b61038c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610b12565b604051808215151515815260200191505060405180910390f35b34156103b157600080fd5b6103dd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610da3565b6040518082815260200191505060405180910390f35b34156103fe57600080fd5b610406610deb565b604051808215151515815260200191505060405180910390f35b341561042b57600080fd5b610433610eb3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561048057600080fd5b610488610ed9565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104c85780820151818401526020810190506104ad565b50505050905090810190601f1680156104f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561050e57600080fd5b610543600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610f77565b604051808215151515815260200191505060405180910390f35b341561056857600080fd5b610570610fa6565b005b341561057d57600080fd5b610585611067565b604051808215151515815260200191505060405180910390f35b34156105aa57600080fd5b610622600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061107a565b604051808215151515815260200191505060405180910390f35b341561064757600080fd5b61067c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061131b565b604051808215151515815260200191505060405180910390f35b34156106a157600080fd5b6106ec600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611517565b6040518082815260200191505060405180910390f35b341561070d57600080fd5b610739600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061159e565b005b600360149054906101000a900460ff1681565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107e45780601f106107b9576101008083540402835291602001916107e4565b820191906000526020600020905b8154815290600101906020018083116107c757829003601f168201915b505050505081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b6000600660019054906101000a900460ff16151561090557600080fd5b6109108484846116f6565b90509392505050565b600660009054906101000a900460ff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561098a57600080fd5b600360149054906101000a900460ff161515156109a657600080fd5b6109bb82600154611ab090919063ffffffff16565b600181905550610a12826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ab090919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115610c23576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cb7565b610c368382611ace90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e4957600080fd5b600360149054906101000a900460ff16151515610e6557600080fd5b6001600360146101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a16001905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f6f5780601f10610f4457610100808354040283529160200191610f6f565b820191906000526020600020905b815481529060010190602001808311610f5257829003601f168201915b505050505081565b6000600660019054906101000a900460ff161515610f9457600080fd5b610f9e8383611ae7565b905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561100257600080fd5b600660019054906101000a900460ff1615151561101e57600080fd5b6001600660016101000a81548160ff0219169083151502179055507feadb24812ab3c9a55c774958184293ebdb6c7f6a2dbab11f397d80c86feb65d360405160405180910390a1565b600660019054906101000a900460ff1681565b600082600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff1660405180807f72656365697665417070726f76616c28616464726573732c75696e743235362c81526020017f616464726573732c627974657329000000000000000000000000000000000000815250602e01905060405180910390207c01000000000000000000000000000000000000000000000000000000009004338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828051906020019080838360005b838110156112bb5780820151818401526020810190506112a0565b50505050905090810190601f1680156112e85780820380516001836020036101000a031916815260200191505b5094505050505060006040518083038160008761646e5a03f192505050151561131057600080fd5b600190509392505050565b60006113ac82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ab090919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115fa57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561163657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561173357600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561178057600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561180b57600080fd5b61185c826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ace90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118ef826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ab090919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119c082600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ace90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000808284019050838110151515611ac457fe5b8091505092915050565b6000828211151515611adc57fe5b818303905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b2457600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515611b7157600080fd5b611bc2826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ace90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c55826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ab090919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050929150505600a165627a7a72305820fe54c2a9c594ff01b9af5425b8f2dc854e61440a959c8e59f10636f311c5f52c0029a165627a7a72305820d21685f51a43e53038e82421389c49eb52391a12d48c7ac97bfb66db550d679a0029

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

000000000000000000000000000000000000000000000000000000005a8c7030000000000000000000000000000000000000000000000000000000005ab3fd3000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000afa1c92a27215d1d1dad4fa89972e7c8d91218f9000000000000000000000000471f62713fc13c554467abae55913415501e20c2

-----Decoded View---------------
Arg [0] : _startTime (uint256): 1519153200
Arg [1] : _endTime (uint256): 1521745200
Arg [2] : _initialWeiUsdExchangeRate (uint256): 1000000000000000
Arg [3] : _wallet (address): 0xAFa1C92a27215D1D1dad4Fa89972e7c8d91218f9
Arg [4] : _purchaseAuthorizer (address): 0x471F62713Fc13C554467AbAE55913415501e20c2

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000005a8c7030
Arg [1] : 000000000000000000000000000000000000000000000000000000005ab3fd30
Arg [2] : 00000000000000000000000000000000000000000000000000038d7ea4c68000
Arg [3] : 000000000000000000000000afa1c92a27215d1d1dad4fa89972e7c8d91218f9
Arg [4] : 000000000000000000000000471f62713fc13c554467abae55913415501e20c2


Libraries Used


Swarm Source

bzzr://fe54c2a9c594ff01b9af5425b8f2dc854e61440a959c8e59f10636f311c5f52c

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

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