ETH Price: $3,334.75 (-1.18%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Refund59241512018-07-07 23:02:502369 days ago1531004570IN
0xB4f10530...84057AFB4
0 ETH0.0005293421
Claim Refund56369532018-05-18 21:18:352419 days ago1526678315IN
0xB4f10530...84057AFB4
0 ETH0.0006920719
Claim Refund56369212018-05-18 21:08:562419 days ago1526677736IN
0xB4f10530...84057AFB4
0 ETH0.0018212550
Claim Refund56368122018-05-18 20:38:412419 days ago1526675921IN
0xB4f10530...84057AFB4
0 ETH0.0018212550
Claim Refund56367932018-05-18 20:34:042419 days ago1526675644IN
0xB4f10530...84057AFB4
0 ETH0.0009470526
Claim Refund56367782018-05-18 20:28:472419 days ago1526675327IN
0xB4f10530...84057AFB4
0 ETH0.0009470526
Claim Refund50671112018-02-10 21:11:242516 days ago1518297084IN
0xB4f10530...84057AFB4
0 ETH0.0005293421
Claim Refund50651162018-02-10 13:25:162516 days ago1518269116IN
0xB4f10530...84057AFB4
0 ETH0.0009106225
Claim Refund50551032018-02-08 21:07:062518 days ago1518124026IN
0xB4f10530...84057AFB4
0 ETH0.0005293421
Claim Refund50549592018-02-08 20:31:162518 days ago1518121876IN
0xB4f10530...84057AFB4
0 ETH0.0015066241
Claim Refund50549362018-02-08 20:25:372518 days ago1518121537IN
0xB4f10530...84057AFB4
0 ETH0.0015066241
Claim Refund50458362018-02-07 7:40:012520 days ago1517989201IN
0xB4f10530...84057AFB4
0 ETH0.0010082840
Claim Refund50385632018-02-06 2:16:102521 days ago1517883370IN
0xB4f10530...84057AFB4
0 ETH0.0014970330
Claim Refund50355232018-02-05 13:55:352521 days ago1517838935IN
0xB4f10530...84057AFB4
0 ETH0.0007562130
Claim Refund50296572018-02-04 14:26:052522 days ago1517754365IN
0xB4f10530...84057AFB4
0 ETH0.0014934241
Claim Refund49433682018-01-21 0:03:052537 days ago1516492985IN
0xB4f10530...84057AFB4
0 ETH0.0007649221
Claim Refund48954152018-01-12 9:38:002545 days ago1515749880IN
0xB4f10530...84057AFB4
0 ETH0.0010334841
Claim Refund47392492017-12-15 22:08:232573 days ago1513375703IN
0xB4f10530...84057AFB4
0 ETH0.0007814131
Claim Refund47272792017-12-13 20:08:512575 days ago1513195731IN
0xB4f10530...84057AFB4
0 ETH0.00145740
Claim Refund47264322017-12-13 16:26:262575 days ago1513182386IN
0xB4f10530...84057AFB4
0 ETH0.00145740
Claim Refund47254072017-12-13 12:02:322575 days ago1513166552IN
0xB4f10530...84057AFB4
0 ETH0.00145740
Claim Refund47250132017-12-13 10:26:442575 days ago1513160804IN
0xB4f10530...84057AFB4
0 ETH0.000126035
Transfer46949472017-12-08 5:23:252581 days ago1512710605IN
0xB4f10530...84057AFB4
0.02 ETH0.001138850
Claim Refund46448102017-11-29 16:02:342589 days ago1511971354IN
0xB4f10530...84057AFB4
0.2 ETH0.0005048523
Claim Refund46447992017-11-29 16:01:012589 days ago1511971261IN
0xB4f10530...84057AFB4
0.2 ETH0.0004170519
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
45445122017-11-13 10:59:272605 days ago1510570767
0xB4f10530...84057AFB4
3 ETH
45444882017-11-13 10:54:522605 days ago1510570492
0xB4f10530...84057AFB4
750 ETH
45444202017-11-13 10:39:482605 days ago1510569588
0xB4f10530...84057AFB4
3 ETH
45443412017-11-13 10:21:172605 days ago1510568477
0xB4f10530...84057AFB4
0.8 ETH
45441392017-11-13 9:38:272605 days ago1510565907
0xB4f10530...84057AFB4
7 ETH
45441042017-11-13 9:29:522605 days ago1510565392
0xB4f10530...84057AFB4
0.1 ETH
45414902017-11-12 23:28:402606 days ago1510529320
0xB4f10530...84057AFB4
11.89748612 ETH
45401832017-11-12 18:29:282606 days ago1510511368
0xB4f10530...84057AFB4
0.5 ETH
45393132017-11-12 14:51:352606 days ago1510498295
0xB4f10530...84057AFB4
0.14222143 ETH
45388502017-11-12 12:59:372606 days ago1510491577
0xB4f10530...84057AFB4
2.00506222 ETH
45305272017-11-11 5:28:312608 days ago1510378111
0xB4f10530...84057AFB4
2 ETH
45303922017-11-11 4:59:132608 days ago1510376353
0xB4f10530...84057AFB4
0.1 ETH
45217452017-11-09 19:42:412609 days ago1510256561
0xB4f10530...84057AFB4
0.1 ETH
45127932017-11-08 9:10:332610 days ago1510132233
0xB4f10530...84057AFB4
0.1 ETH
45112522017-11-08 3:12:082611 days ago1510110728
0xB4f10530...84057AFB4
0.1 ETH
45097552017-11-07 21:34:112611 days ago1510090451
0xB4f10530...84057AFB4
1.03 ETH
45092262017-11-07 19:36:082611 days ago1510083368
0xB4f10530...84057AFB4
1.43368559 ETH
45035522017-11-06 21:32:522612 days ago1510003972
0xB4f10530...84057AFB4
0.8 ETH
45006852017-11-06 10:28:462612 days ago1509964126
0xB4f10530...84057AFB4
0.1 ETH
45004232017-11-06 9:24:392612 days ago1509960279
0xB4f10530...84057AFB4
7.305 ETH
44980032017-11-06 0:02:082613 days ago1509926528
0xB4f10530...84057AFB4
0.1 ETH
44958122017-11-05 15:31:592613 days ago1509895919
0xB4f10530...84057AFB4
0.17835678 ETH
44727102017-11-01 22:17:062617 days ago1509574626
0xB4f10530...84057AFB4
0.1 ETH
44630112017-10-31 8:43:462618 days ago1509439426
0xB4f10530...84057AFB4
0.2 ETH
44610702017-10-31 1:14:422619 days ago1509412482
0xB4f10530...84057AFB4
150 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Crowdsale

Compiler Version
v0.4.15+commit.bbb8e64f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-10-14
*/

pragma solidity 0.4.15;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal constant 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;
  }

  function sub(uint256 a, uint256 b) internal constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}


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


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() {
    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) onlyOwner {
   require(newOwner != address(0));
   owner = newOwner;
  }

}


/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev modifier to allow actions only when the contract IS paused
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev modifier to allow actions only when the contract IS NOT paused
   */
  modifier whenPaused {
    require(paused);
    _;
  }

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

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


/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) constant returns (uint256);
  function transfer(address to, uint256 value) returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}


/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @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) returns (bool) {
    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) constant returns (uint256 balance) {
    return balances[_owner];
  }

}


/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) constant returns (uint256);
  function transferFrom(address from, address to, uint256 value) returns (bool);
  function approve(address spender, uint256 value) returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}


/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) 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 amout of tokens to be transfered
   */
  function transferFrom(address _from, address _to, uint256 _value) returns (bool) {
    uint256 _allowance = allowed[_from][msg.sender];

    // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
    // require (_value <= _allowance);

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

  /**
   * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender.
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) returns (bool) {

    // To change the approve amount you first have to reduce the addresses`
    //  allowance to zero by calling `approve(_spender, 0)` if it is not
    //  already 0 to mitigate the race condition described here:
    //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    require((_value == 0) || (allowed[msg.sender][_spender] == 0));

    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 specifing the amount of tokens still avaible for the spender.
   */
  function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }

}


/**
 * Pausable token
 *
 * Simple ERC20 Token example, with pausable token creation
 **/
contract PausableToken is StandardToken, Pausable {

  function transfer(address _to, uint _value) whenNotPaused returns (bool) {
    return super.transfer(_to, _value);
  }

  function transferFrom(address _from, address _to, uint _value) whenNotPaused returns (bool) {
    return super.transferFrom(_from, _to, _value);
  }
}


/**
 * @title RefundVault
 * @dev This contract is used for storing funds while a crowdsale
 * is in progress. Supports refunding the money if crowdsale fails,
 * and forwarding it if crowdsale is successful.
 */
contract RefundVault is Ownable {
  using SafeMath for uint256;

  enum State { Active, Refunding, Closed }

  mapping (address => uint256) public deposited;
  address public wallet;
  State public state;

  event Closed();
  event RefundsEnabled();
  event Refunded(address indexed beneficiary, uint256 weiAmount);

  function RefundVault(address _wallet) {
    require(_wallet != 0x0);
    wallet = _wallet;
    state = State.Active;
  }

  function deposit(address investor) onlyOwner payable {
    require(state == State.Active);
    deposited[investor] = deposited[investor].add(msg.value);
  }

  function close() onlyOwner {
    require(state == State.Active);
    state = State.Closed;
    Closed();
    wallet.transfer(this.balance);
  }

  function enableRefunds() onlyOwner {
    require(state == State.Active);
    state = State.Refunding;
    RefundsEnabled();
  }

  function refund(address investor) {
    require(state == State.Refunding);
    uint256 depositedValue = deposited[investor];
    deposited[investor] = 0;
    investor.transfer(depositedValue);
    Refunded(investor, depositedValue);
  }
}


/// @author Merunas Grincalaitis
contract PallyCoin is PausableToken {
   using SafeMath for uint256;

   string public constant name = 'PallyCoin';

   string public constant symbol = 'PAL';

   uint8 public constant decimals = 18;

   uint256 public constant totalSupply = 100e24; // 100M tokens with 18 decimals

   // The tokens already used for the presale buyers
   uint256 public tokensDistributedPresale = 0;

   // The tokens already used for the ICO buyers
   uint256 public tokensDistributedCrowdsale = 0;

   address public crowdsale;

   /// @notice Only allows the execution of the function if it's comming from crowdsale
   modifier onlyCrowdsale() {
      require(msg.sender == crowdsale);
      _;
   }

   // When someone refunds tokens
   event RefundedTokens(address indexed user, uint256 tokens);

   /// @notice Constructor used to set the platform & development tokens. This is
   /// The 20% + 20% of the 100 M tokens used for platform and development team.
   /// The owner, msg.sender, is able to do allowance for other contracts. Remember
   /// to use `transferFrom()` if you're allowed
   function PallyCoin() {
      balances[msg.sender] = 40e24; // 40M tokens wei
   }

   /// @notice Function to set the crowdsale smart contract's address only by the owner of this token
   /// @param _crowdsale The address that will be used
   function setCrowdsaleAddress(address _crowdsale) external onlyOwner whenNotPaused {
      require(_crowdsale != address(0));

      crowdsale = _crowdsale;
   }

   /// @notice Distributes the presale tokens. Only the owner can do this
   /// @param _buyer The address of the buyer
   /// @param tokens The amount of tokens corresponding to that buyer
   function distributePresaleTokens(address _buyer, uint tokens) external onlyOwner whenNotPaused {
      require(_buyer != address(0));
      require(tokens > 0 && tokens <= 10e24);

      // Check that the limit of 10M presale tokens hasn't been met yet
      require(tokensDistributedPresale < 10e24);

      tokensDistributedPresale = tokensDistributedPresale.add(tokens);
      balances[_buyer] = balances[_buyer].add(tokens);
   }

   /// @notice Distributes the ICO tokens. Only the crowdsale address can execute this
   /// @param _buyer The buyer address
   /// @param tokens The amount of tokens to send to that address
   function distributeICOTokens(address _buyer, uint tokens) external onlyCrowdsale whenNotPaused {
      require(_buyer != address(0));
      require(tokens > 0);

      // Check that the limit of 50M ICO tokens hasn't been met yet
      require(tokensDistributedCrowdsale < 50e24);

      tokensDistributedCrowdsale = tokensDistributedCrowdsale.add(tokens);
      balances[_buyer] = balances[_buyer].add(tokens);
   }

   /// @notice Deletes the amount of tokens refunded from that buyer balance
   /// @param _buyer The buyer that wants the refund
   /// @param tokens The tokens to return
   function refundTokens(address _buyer, uint256 tokens) external onlyCrowdsale whenNotPaused {
      require(_buyer != address(0));
      require(tokens > 0);
      require(balances[_buyer] >= tokens);

      balances[_buyer] = balances[_buyer].sub(tokens);
      RefundedTokens(_buyer, tokens);
   }
}

/// @title Crowdsale contract to carry out an ICO with the PallyCoin
/// Crowdsales have a start and end timestamps, where investors can make
/// token purchases and the crowdsale will assign them tokens based
/// on a token per ETH rate. Funds collected are forwarded to a wallet
/// as they arrive.
/// @author Merunas Grincalaitis <[email protected]>
contract Crowdsale is Pausable {
   using SafeMath for uint256;

   // The token being sold
   PallyCoin public token;

   // The vault that will store the ether until the goal is reached
   RefundVault public vault;

   // The block number of when the crowdsale starts
   // 10/15/2017 @ 11:00am (UTC)
   // 10/15/2017 @ 12:00pm (GMT + 1)
   uint256 public startTime = 1508065200;

   // The block number of when the crowdsale ends
   // 11/13/2017 @ 11:00am (UTC)
   // 11/13/2017 @ 12:00pm (GMT + 1)
   uint256 public endTime = 1510570800;

   // The wallet that holds the Wei raised on the crowdsale
   address public wallet;

   // The rate of tokens per ether. Only applied for the first tier, the first
   // 12.5 million tokens sold
   uint256 public rate;

   // The rate of tokens per ether. Only applied for the second tier, at between
   // 12.5 million tokens sold and 25 million tokens sold
   uint256 public rateTier2;

   // The rate of tokens per ether. Only applied for the third tier, at between
   // 25 million tokens sold and 37.5 million tokens sold
   uint256 public rateTier3;

   // The rate of tokens per ether. Only applied for the fourth tier, at between
   // 37.5 million tokens sold and 50 million tokens sold
   uint256 public rateTier4;

   // The maximum amount of wei for each tier
   uint256 public limitTier1 = 12.5e24;
   uint256 public limitTier2 = 25e24;
   uint256 public limitTier3 = 37.5e24;

   // The amount of wei raised
   uint256 public weiRaised = 0;

   // The amount of tokens raised
   uint256 public tokensRaised = 0;

   // You can only buy up to 50 M tokens during the ICO
   uint256 public constant maxTokensRaised = 50e24;

   // The minimum amount of Wei you must pay to participate in the crowdsale
   uint256 public constant minPurchase = 100 finney; // 0.1 ether

   // The max amount of Wei that you can pay to participate in the crowdsale
   uint256 public constant maxPurchase = 1000 ether;

   // Minimum amount of tokens to be raised. 7.5 million tokens which is the 15%
   // of the total of 50 million tokens sold in the crowdsale
   // 7.5e6 + 1e18
   uint256 public constant minimumGoal = 7.5e24;

   // If the crowdsale wasn't successful, this will be true and users will be able
   // to claim the refund of their ether
   bool public isRefunding = false;

   // If the crowdsale has ended or not
   bool public isEnded = false;

   // The number of transactions
   uint256 public numberOfTransactions;

   // The gas price to buy tokens must be 50 gwei or below
   uint256 public limitGasPrice = 50000000000 wei;

   // How much each user paid for the crowdsale
   mapping(address => uint256) public crowdsaleBalances;

   // How many tokens each user got for the crowdsale
   mapping(address => uint256) public tokensBought;

   // To indicate who purchased what amount of tokens and who received what amount of wei
   event TokenPurchase(address indexed buyer, uint256 value, uint256 amountOfTokens);

   // Indicates if the crowdsale has ended
   event Finalized();

   // Only allow the execution of the function before the crowdsale starts
   modifier beforeStarting() {
      require(now < startTime);
      _;
   }

   /// @notice Constructor of the crowsale to set up the main variables and create a token
   /// @param _wallet The wallet address that stores the Wei raised
   /// @param _tokenAddress The token used for the ICO
   function Crowdsale(
      address _wallet,
      address _tokenAddress,
      uint256 _startTime,
      uint256 _endTime
   ) public {
      require(_wallet != address(0));
      require(_tokenAddress != address(0));

      // If you send the start and end time on the constructor, the end must be larger
      if(_startTime > 0 && _endTime > 0)
         require(_startTime < _endTime);

      wallet = _wallet;
      token = PallyCoin(_tokenAddress);
      vault = new RefundVault(_wallet);

      if(_startTime > 0)
         startTime = _startTime;

      if(_endTime > 0)
         endTime = _endTime;
   }

   /// @notice Fallback function to buy tokens
   function () payable {
      buyTokens();
   }

   /// @notice To buy tokens given an address
   function buyTokens() public payable whenNotPaused {
      require(validPurchase());

      uint256 tokens = 0;
      uint256 amountPaid = calculateExcessBalance();

      if(tokensRaised < limitTier1) {

         // Tier 1
         tokens = amountPaid.mul(rate);

         // If the amount of tokens that you want to buy gets out of this tier
         if(tokensRaised.add(tokens) > limitTier1)
            tokens = calculateExcessTokens(amountPaid, limitTier1, 1, rate);
      } else if(tokensRaised >= limitTier1 && tokensRaised < limitTier2) {

         // Tier 2
         tokens = amountPaid.mul(rateTier2);

         // If the amount of tokens that you want to buy gets out of this tier
         if(tokensRaised.add(tokens) > limitTier2)
            tokens = calculateExcessTokens(amountPaid, limitTier2, 2, rateTier2);
      } else if(tokensRaised >= limitTier2 && tokensRaised < limitTier3) {

         // Tier 3
         tokens = amountPaid.mul(rateTier3);

         // If the amount of tokens that you want to buy gets out of this tier
         if(tokensRaised.add(tokens) > limitTier3)
            tokens = calculateExcessTokens(amountPaid, limitTier3, 3, rateTier3);
      } else if(tokensRaised >= limitTier3) {

         // Tier 4
         tokens = amountPaid.mul(rateTier4);
      }

      weiRaised = weiRaised.add(amountPaid);
      tokensRaised = tokensRaised.add(tokens);
      token.distributeICOTokens(msg.sender, tokens);

      // Keep a record of how many tokens everybody gets in case we need to do refunds
      tokensBought[msg.sender] = tokensBought[msg.sender].add(tokens);
      TokenPurchase(msg.sender, amountPaid, tokens);
      numberOfTransactions = numberOfTransactions.add(1);

      forwardFunds(amountPaid);
   }

   /// @notice Sends the funds to the wallet or to the refund vault smart contract
   /// if the minimum goal of tokens hasn't been reached yet
   /// @param amountPaid The amount of ether paid
   function forwardFunds(uint256 amountPaid) internal whenNotPaused {
      if(goalReached()) {
         wallet.transfer(amountPaid);
      } else {
         vault.deposit.value(amountPaid)(msg.sender);
      }

      // If the minimum goal of the ICO has been reach, close the vault to send
      // the ether to the wallet of the crowdsale
      checkCompletedCrowdsale();
   }

   /// @notice Calculates how many ether will be used to generate the tokens in
   /// case the buyer sends more than the maximum balance but has some balance left
   /// and updates the balance of that buyer.
   /// For instance if he's 500 balance and he sends 1000, it will return 500
   /// and refund the other 500 ether
   function calculateExcessBalance() internal whenNotPaused returns(uint256) {
      uint256 amountPaid = msg.value;
      uint256 differenceWei = 0;
      uint256 exceedingBalance = 0;

      // If we're in the last tier, check that the limit hasn't been reached
      // and if so, refund the difference and return what will be used to
      // buy the remaining tokens
      if(tokensRaised >= limitTier3) {
         uint256 addedTokens = tokensRaised.add(amountPaid.mul(rateTier4));

         // If tokensRaised + what you paid converted to tokens is bigger than the max
         if(addedTokens > maxTokensRaised) {

            // Refund the difference
            uint256 difference = addedTokens.sub(maxTokensRaised);
            differenceWei = difference.div(rateTier4);
            amountPaid = amountPaid.sub(differenceWei);
         }
      }

      uint256 addedBalance = crowdsaleBalances[msg.sender].add(amountPaid);

      // Checking that the individual limit of 1000 ETH per user is not reached
      if(addedBalance <= maxPurchase) {
         crowdsaleBalances[msg.sender] = crowdsaleBalances[msg.sender].add(amountPaid);
      } else {

         // Substracting 1000 ether in wei
         exceedingBalance = addedBalance.sub(maxPurchase);
         amountPaid = amountPaid.sub(exceedingBalance);

         // Add that balance to the balances
         crowdsaleBalances[msg.sender] = crowdsaleBalances[msg.sender].add(amountPaid);
      }

      // Make the transfers at the end of the function for security purposes
      if(differenceWei > 0)
         msg.sender.transfer(differenceWei);

      if(exceedingBalance > 0) {

         // Return the exceeding balance to the buyer
         msg.sender.transfer(exceedingBalance);
      }

      return amountPaid;
   }

   /// @notice Set's the rate of tokens per ether for each tier. Use it after the
   /// smart contract is deployed to set the price according to the ether price
   /// at the start of the ICO
   /// @param tier1 The amount of tokens you get in the tier one
   /// @param tier2 The amount of tokens you get in the tier two
   /// @param tier3 The amount of tokens you get in the tier three
   /// @param tier4 The amount of tokens you get in the tier four
   function setTierRates(uint256 tier1, uint256 tier2, uint256 tier3, uint256 tier4)
      external onlyOwner whenNotPaused beforeStarting
   {
      require(tier1 > 0 && tier2 > 0 && tier3 > 0 && tier4 > 0);
      require(tier1 > tier2 && tier2 > tier3 && tier3 > tier4);

      rate = tier1;
      rateTier2 = tier2;
      rateTier3 = tier3;
      rateTier4 = tier4;
   }

   /// @notice Check if the crowdsale has ended and enables refunds only in case the
   /// goal hasn't been reached
   function checkCompletedCrowdsale() public whenNotPaused {
      if(!isEnded) {
         if(hasEnded() && !goalReached()){
            vault.enableRefunds();

            isRefunding = true;
            isEnded = true;
            Finalized();
         } else if(hasEnded() && goalReached()) {
            vault.close();

            isEnded = true;
            Finalized();
         }
      }
   }

   /// @notice If crowdsale is unsuccessful, investors can claim refunds here
   function claimRefund() public whenNotPaused {
     require(hasEnded() && !goalReached() && isRefunding);

     vault.refund(msg.sender);
     token.refundTokens(msg.sender, tokensBought[msg.sender]);
   }

   /// @notice Buys the tokens for the specified tier and for the next one
   /// @param amount The amount of ether paid to buy the tokens
   /// @param tokensThisTier The limit of tokens of that tier
   /// @param tierSelected The tier selected
   /// @param _rate The rate used for that `tierSelected`
   /// @return uint The total amount of tokens bought combining the tier prices
   function calculateExcessTokens(
      uint256 amount,
      uint256 tokensThisTier,
      uint256 tierSelected,
      uint256 _rate
   ) public returns(uint256 totalTokens) {
      require(amount > 0 && tokensThisTier > 0 && _rate > 0);
      require(tierSelected >= 1 && tierSelected <= 4);

      uint weiThisTier = tokensThisTier.sub(tokensRaised).div(_rate);
      uint weiNextTier = amount.sub(weiThisTier);
      uint tokensNextTier = 0;
      bool returnTokens = false;

      // If there's excessive wei for the last tier, refund those
      if(tierSelected != 4)
         tokensNextTier = calculateTokensTier(weiNextTier, tierSelected.add(1));
      else
         returnTokens = true;

      totalTokens = tokensThisTier.sub(tokensRaised).add(tokensNextTier);

      // Do the transfer at the end
      if(returnTokens) msg.sender.transfer(weiNextTier);
   }

   /// @notice Buys the tokens given the price of the tier one and the wei paid
   /// @param weiPaid The amount of wei paid that will be used to buy tokens
   /// @param tierSelected The tier that you'll use for thir purchase
   /// @return calculatedTokens Returns how many tokens you've bought for that wei paid
   function calculateTokensTier(uint256 weiPaid, uint256 tierSelected)
        internal constant returns(uint256 calculatedTokens)
   {
      require(weiPaid > 0);
      require(tierSelected >= 1 && tierSelected <= 4);

      if(tierSelected == 1)
         calculatedTokens = weiPaid.mul(rate);
      else if(tierSelected == 2)
         calculatedTokens = weiPaid.mul(rateTier2);
      else if(tierSelected == 3)
         calculatedTokens = weiPaid.mul(rateTier3);
      else
         calculatedTokens = weiPaid.mul(rateTier4);
   }


   /// @notice Checks if a purchase is considered valid
   /// @return bool If the purchase is valid or not
   function validPurchase() internal constant returns(bool) {
      bool withinPeriod = now >= startTime && now <= endTime;
      bool nonZeroPurchase = msg.value > 0;
      bool withinTokenLimit = tokensRaised < maxTokensRaised;
      bool minimumPurchase = msg.value >= minPurchase;
      bool hasBalanceAvailable = crowdsaleBalances[msg.sender] < maxPurchase;

      // We want to limit the gas to avoid giving priority to the biggest paying contributors
      bool limitGas = tx.gasprice <= limitGasPrice;

      return withinPeriod && nonZeroPurchase && withinTokenLimit && minimumPurchase && hasBalanceAvailable && limitGas;
   }

   /// @notice To see if the minimum goal of tokens of the ICO has been reached
   /// @return bool True if the tokens raised are bigger than the goal or false otherwise
   function goalReached() public constant returns(bool) {
      return tokensRaised >= minimumGoal;
   }

   /// @notice Public function to check if the crowdsale has ended or not
   function hasEnded() public constant returns(bool) {
      return now > endTime || tokensRaised >= maxTokensRaised;
   }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"limitGasPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maxTokensRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"crowdsaleBalances","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokensBought","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"rateTier4","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"limitTier2","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"minPurchase","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"rateTier2","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"checkCompletedCrowdsale","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokensRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"tokensThisTier","type":"uint256"},{"name":"tierSelected","type":"uint256"},{"name":"_rate","type":"uint256"}],"name":"calculateExcessTokens","outputs":[{"name":"totalTokens","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"goalReached","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"tier1","type":"uint256"},{"name":"tier2","type":"uint256"},{"name":"tier3","type":"uint256"},{"name":"tier4","type":"uint256"}],"name":"setTierRates","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maxPurchase","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"isRefunding","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"isEnded","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"limitTier3","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"claimRefund","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"rateTier3","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"minimumGoal","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"buyTokens","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"limitTier1","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"hasEnded","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberOfTransactions","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[{"name":"_wallet","type":"address"},{"name":"_tokenAddress","type":"address"},{"name":"_startTime","type":"uint256"},{"name":"_endTime","type":"uint256"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amountOfTokens","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}]

606060405260008060146101000a81548160ff0219169083151502179055506359e33fb0600355635a097b306004556a0a56fa5b99019a5c800000600a556a14adf4b7320334b9000000600b556a1f04ef12cb04cf15800000600c556000600d556000600e556000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff021916908315150217905550640ba43b74006011553415620000b057600080fd5b60405160808062002b87833981016040528080519060200190919080519060200190919080519060200190919080519060200190919050505b5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156200016857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515620001a557600080fd5b600082118015620001b65750600081115b15620001cc578082101515620001cb57600080fd5b5b83600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836200025962000315565b808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f0801515620002a657600080fd5b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000821115620002f857816003819055505b60008111156200030a57806004819055505b5b5050505062000326565b6040516109f3806200219483390190565b611e5e80620003366000396000f300606060405236156101c0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806307259d06146101cc57806309838bd9146101f55780630e11624b1461021e578063264d77971461026b57806326b45b09146102b85780632c4e722e146102e15780633197cbb61461030a578063338f4dd91461033357806333b5b62e1461035c5780633f4ba83a146103855780634042b66f146103b2578063521eb273146103db57806357902a751461043057806357a27a76146104595780635c975abb1461046e5780636ea6b71b1461049b57806375b3ea8e146104c457806378e97925146105165780637d3d65221461053f5780638456cb591461056c5780638da5cb5b1461059957806395c93f8b146105ee578063977b055b1461062c5780639d6fb02014610655578063a4fd6f5614610682578063aef08617146106af578063b5545a3c146106d8578063b950f0a0146106ed578063bc69731914610716578063d0febe4c1461073f578063e1db206c14610749578063ecb70fb714610772578063f2fde38b1461079f578063f8d3afa4146107d8578063fbfa77cf14610801578063fc0c546a14610856575b5b6101c96108ab565b5b005b34156101d757600080fd5b6101df610c65565b6040518082815260200191505060405180910390f35b341561020057600080fd5b610208610c6b565b6040518082815260200191505060405180910390f35b341561022957600080fd5b610255600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c7a565b6040518082815260200191505060405180910390f35b341561027657600080fd5b6102a2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c92565b6040518082815260200191505060405180910390f35b34156102c357600080fd5b6102cb610caa565b6040518082815260200191505060405180910390f35b34156102ec57600080fd5b6102f4610cb0565b6040518082815260200191505060405180910390f35b341561031557600080fd5b61031d610cb6565b6040518082815260200191505060405180910390f35b341561033e57600080fd5b610346610cbc565b6040518082815260200191505060405180910390f35b341561036757600080fd5b61036f610cc2565b6040518082815260200191505060405180910390f35b341561039057600080fd5b610398610cce565b604051808215151515815260200191505060405180910390f35b34156103bd57600080fd5b6103c5610d96565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610d9c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561043b57600080fd5b610443610dc2565b6040518082815260200191505060405180910390f35b341561046457600080fd5b61046c610dc8565b005b341561047957600080fd5b61048161101c565b604051808215151515815260200191505060405180910390f35b34156104a657600080fd5b6104ae61102f565b6040518082815260200191505060405180910390f35b34156104cf57600080fd5b6105006004808035906020019091908035906020019091908035906020019091908035906020019091905050611035565b6040518082815260200191505060405180910390f35b341561052157600080fd5b610529611176565b6040518082815260200191505060405180910390f35b341561054a57600080fd5b61055261117c565b604051808215151515815260200191505060405180910390f35b341561057757600080fd5b61057f611195565b604051808215151515815260200191505060405180910390f35b34156105a457600080fd5b6105ac61125f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105f957600080fd5b61062a6004808035906020019091908035906020019091908035906020019091908035906020019091905050611284565b005b341561063757600080fd5b61063f611388565b6040518082815260200191505060405180910390f35b341561066057600080fd5b610668611395565b604051808215151515815260200191505060405180910390f35b341561068d57600080fd5b6106956113a8565b604051808215151515815260200191505060405180910390f35b34156106ba57600080fd5b6106c26113bb565b6040518082815260200191505060405180910390f35b34156106e357600080fd5b6106eb6113c1565b005b34156106f857600080fd5b610700611604565b6040518082815260200191505060405180910390f35b341561072157600080fd5b61072961160a565b6040518082815260200191505060405180910390f35b6107476108ab565b005b341561075457600080fd5b61075c611619565b6040518082815260200191505060405180910390f35b341561077d57600080fd5b61078561161f565b604051808215151515815260200191505060405180910390f35b34156107aa57600080fd5b6107d6600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611644565b005b34156107e357600080fd5b6107eb611720565b6040518082815260200191505060405180910390f35b341561080c57600080fd5b610814611726565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561086157600080fd5b61086961174c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600080600060149054906101000a900460ff161515156108ca57600080fd5b6108d2611772565b15156108dd57600080fd5b600091506108e9611848565b9050600a54600e5410156109455761090c60065482611b7d90919063ffffffff16565b9150600a5461092683600e54611bb190919063ffffffff16565b11156109405761093d81600a546001600654611035565b91505b610a41565b600a54600e541015801561095c5750600b54600e54105b156109af5761097660075482611b7d90919063ffffffff16565b9150600b5461099083600e54611bb190919063ffffffff16565b11156109aa576109a781600b546002600754611035565b91505b610a40565b600b54600e54101580156109c65750600c54600e54105b15610a19576109e060085482611b7d90919063ffffffff16565b9150600c546109fa83600e54611bb190919063ffffffff16565b1115610a1457610a1181600c546003600854611035565b91505b610a3f565b600c54600e54101515610a3e57610a3b60095482611b7d90919063ffffffff16565b91505b5b5b5b610a5681600d54611bb190919063ffffffff16565b600d81905550610a7182600e54611bb190919063ffffffff16565b600e81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663135859c033846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1515610b3b57600080fd5b6102c65a03f11515610b4c57600080fd5b505050610ba182601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fcd60aa75dea3072fbc07ae6d7d856b5dc5f4eee88854f5b4abf7b680ef8bc50f8284604051808381526020018281526020019250505060405180910390a2610c506001601054611bb190919063ffffffff16565b601081905550610c5f81611bd0565b5b5b5050565b60115481565b6a295be96e6406697200000081565b60126020528060005260406000206000915090505481565b60136020528060005260406000206000915090505481565b60095481565b60065481565b60045481565b600b5481565b67016345785d8a000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d2b57600080fd5b600060149054906101000a900460ff161515610d4657600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1600190505b5b5b90565b600d5481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b600060149054906101000a900460ff16151515610de457600080fd5b600f60019054906101000a900460ff16151561101857610e0261161f565b8015610e135750610e1161117c565b155b15610f1857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638c52dc416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1515610e9d57600080fd5b6102c65a03f11515610eae57600080fd5b5050506001600f60006101000a81548160ff0219169083151502179055506001600f60016101000a81548160ff0219169083151502179055507f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a1611017565b610f2061161f565b8015610f305750610f2f61117c565b5b1561101657600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166343d726d66040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1515610fba57600080fd5b6102c65a03f11515610fcb57600080fd5b5050506001600f60016101000a81548160ff0219169083151502179055507f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a15b5b5b5b5b565b600060149054906101000a900460ff1681565b600e5481565b6000806000806000808911801561104c5750600088115b80156110585750600086115b151561106357600080fd5b60018710158015611075575060048711155b151561108057600080fd5b6110a786611099600e548b611d3f90919063ffffffff16565b611d5990919063ffffffff16565b93506110bc848a611d3f90919063ffffffff16565b925060009150600090506004871415156110f4576110ed836110e860018a611bb190919063ffffffff16565b611d75565b91506110f9565b600190505b61112082611112600e548b611d3f90919063ffffffff16565b611bb190919063ffffffff16565b94508015611169573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561116857600080fd5b5b5b50505050949350505050565b60035481565b60006a06342fd08f00f637800000600e54101590505b90565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111f257600080fd5b600060149054906101000a900460ff1615151561120e57600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1600190505b5b5b90565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112df57600080fd5b600060149054906101000a900460ff161515156112fb57600080fd5b6003544210151561130b57600080fd5b60008411801561131b5750600083115b80156113275750600082115b80156113335750600081115b151561133e57600080fd5b828411801561134c57508183115b801561135757508082115b151561136257600080fd5b836006819055508260078190555081600881905550806009819055505b5b5b5b50505050565b683635c9adc5dea0000081565b600f60009054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b600c5481565b600060149054906101000a900460ff161515156113dd57600080fd5b6113e561161f565b80156113f657506113f461117c565b155b801561140e5750600f60009054906101000a900460ff165b151561141957600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15156114d557600080fd5b6102c65a03f115156114e657600080fd5b505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663549c6bbb33601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15156115ec57600080fd5b6102c65a03f115156115fd57600080fd5b5050505b5b565b60085481565b6a06342fd08f00f63780000081565b600a5481565b600060045442118061163e57506a295be96e64066972000000600e5410155b90505b90565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561169f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116db57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b50565b60105481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000806000600354421015801561179157506004544211155b95506000341194506a295be96e64066972000000600e5410935067016345785d8a00003410159250683635c9adc5dea00000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541091506011543a111590508580156118185750845b80156118215750835b801561182a5750825b80156118335750815b801561183c5750805b96505b50505050505090565b60008060008060008060008060149054906101000a900460ff1615151561186e57600080fd5b3495506000945060009350600c54600e54101515611912576118af61189e60095488611b7d90919063ffffffff16565b600e54611bb190919063ffffffff16565b92506a295be96e64066972000000831115611911576118e26a295be96e6406697200000084611d3f90919063ffffffff16565b91506118f960095483611d5990919063ffffffff16565b945061190e8587611d3f90919063ffffffff16565b95505b5b61196486601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b9050683635c9adc5dea0000081111515611a12576119ca86601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611adb565b611a2e683635c9adc5dea0000082611d3f90919063ffffffff16565b9350611a438487611d3f90919063ffffffff16565b9550611a9786601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000851115611b25573373ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501515611b2457600080fd5b5b6000841115611b6f573373ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501515611b6e57600080fd5b5b8596505b5b50505050505090565b60008082840290506000841480611b9e5750828482811515611b9b57fe5b04145b1515611ba657fe5b8091505b5092915050565b6000808284019050838110151515611bc557fe5b8091505b5092915050565b600060149054906101000a900460ff16151515611bec57600080fd5b611bf461117c565b15611c6057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515611c5b57600080fd5b611d32565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f340fa0182336040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b1515611d1c57600080fd5b6125ee5a03f11515611d2d57600080fd5b505050505b611d3a610dc8565b5b5b50565b6000828211151515611d4d57fe5b81830390505b92915050565b6000808284811515611d6757fe5b0490508091505b5092915050565b60008083111515611d8557600080fd5b60018210158015611d97575060048211155b1515611da257600080fd5b6001821415611dc757611dc060065484611b7d90919063ffffffff16565b9050611e2b565b6002821415611dec57611de560075484611b7d90919063ffffffff16565b9050611e2a565b6003821415611e1157611e0a60085484611b7d90919063ffffffff16565b9050611e29565b611e2660095484611b7d90919063ffffffff16565b90505b5b5b5b929150505600a165627a7a7230582084f9fb6d0017651233e18f91197c67b9b954c04d864d344a23e5428a4d990abe00296060604052341561000f57600080fd5b6040516020806109f3833981016040528080519060200190919050505b5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60008173ffffffffffffffffffffffffffffffffffffffff161415151561009457600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260146101000a81548160ff021916908360028111156100f457fe5b02179055505b505b6108e88061010b6000396000f30060606040523615610097576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806343d726d61461009c578063521eb273146100b15780638c52dc41146101065780638da5cb5b1461011b578063c19d93fb14610170578063cb13cddb146101a7578063f2fde38b146101f4578063f340fa011461022d578063fa89401a1461025b575b600080fd5b34156100a757600080fd5b6100af610294565b005b34156100bc57600080fd5b6100c46103ef565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561011157600080fd5b610119610415565b005b341561012657600080fd5b61012e6104f8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561017b57600080fd5b61018361051d565b6040518082600281111561019357fe5b60ff16815260200191505060405180910390f35b34156101b257600080fd5b6101de600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610530565b6040518082815260200191505060405180910390f35b34156101ff57600080fd5b61022b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610548565b005b610259600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610624565b005b341561026657600080fd5b610292600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061074d565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156102ef57600080fd5b600060028111156102fc57fe5b600260149054906101000a900460ff16600281111561031757fe5b14151561032357600080fd5b60028060146101000a81548160ff0219169083600281111561034157fe5b02179055507f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a60405160405180910390a1600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015156103eb57600080fd5b5b5b565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561047057600080fd5b6000600281111561047d57fe5b600260149054906101000a900460ff16600281111561049857fe5b1415156104a457600080fd5b6001600260146101000a81548160ff021916908360028111156104c357fe5b02179055507f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8960405160405180910390a15b5b565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff1681565b60016020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156105df57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561067f57600080fd5b6000600281111561068c57fe5b600260149054906101000a900460ff1660028111156106a757fe5b1415156106b357600080fd5b61070534600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461089d90919063ffffffff16565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b50565b60006001600281111561075c57fe5b600260149054906101000a900460ff16600281111561077757fe5b14151561078357600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561084a57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff167fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d0651826040518082815260200191505060405180910390a25b5050565b60008082840190508381101515156108b157fe5b8091505b50929150505600a165627a7a72305820a45086f3cebd0cbafddbe523ed3ba70358b2e71bed0d43f9ad1395afc6b22db200290000000000000000000000000900d7ecfacdec21aca271b0133b9e387ece1321000000000000000000000000f923ba61b43161a83afe2cab7d77ea1e41f2791800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x606060405236156101c0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806307259d06146101cc57806309838bd9146101f55780630e11624b1461021e578063264d77971461026b57806326b45b09146102b85780632c4e722e146102e15780633197cbb61461030a578063338f4dd91461033357806333b5b62e1461035c5780633f4ba83a146103855780634042b66f146103b2578063521eb273146103db57806357902a751461043057806357a27a76146104595780635c975abb1461046e5780636ea6b71b1461049b57806375b3ea8e146104c457806378e97925146105165780637d3d65221461053f5780638456cb591461056c5780638da5cb5b1461059957806395c93f8b146105ee578063977b055b1461062c5780639d6fb02014610655578063a4fd6f5614610682578063aef08617146106af578063b5545a3c146106d8578063b950f0a0146106ed578063bc69731914610716578063d0febe4c1461073f578063e1db206c14610749578063ecb70fb714610772578063f2fde38b1461079f578063f8d3afa4146107d8578063fbfa77cf14610801578063fc0c546a14610856575b5b6101c96108ab565b5b005b34156101d757600080fd5b6101df610c65565b6040518082815260200191505060405180910390f35b341561020057600080fd5b610208610c6b565b6040518082815260200191505060405180910390f35b341561022957600080fd5b610255600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c7a565b6040518082815260200191505060405180910390f35b341561027657600080fd5b6102a2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c92565b6040518082815260200191505060405180910390f35b34156102c357600080fd5b6102cb610caa565b6040518082815260200191505060405180910390f35b34156102ec57600080fd5b6102f4610cb0565b6040518082815260200191505060405180910390f35b341561031557600080fd5b61031d610cb6565b6040518082815260200191505060405180910390f35b341561033e57600080fd5b610346610cbc565b6040518082815260200191505060405180910390f35b341561036757600080fd5b61036f610cc2565b6040518082815260200191505060405180910390f35b341561039057600080fd5b610398610cce565b604051808215151515815260200191505060405180910390f35b34156103bd57600080fd5b6103c5610d96565b6040518082815260200191505060405180910390f35b34156103e657600080fd5b6103ee610d9c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561043b57600080fd5b610443610dc2565b6040518082815260200191505060405180910390f35b341561046457600080fd5b61046c610dc8565b005b341561047957600080fd5b61048161101c565b604051808215151515815260200191505060405180910390f35b34156104a657600080fd5b6104ae61102f565b6040518082815260200191505060405180910390f35b34156104cf57600080fd5b6105006004808035906020019091908035906020019091908035906020019091908035906020019091905050611035565b6040518082815260200191505060405180910390f35b341561052157600080fd5b610529611176565b6040518082815260200191505060405180910390f35b341561054a57600080fd5b61055261117c565b604051808215151515815260200191505060405180910390f35b341561057757600080fd5b61057f611195565b604051808215151515815260200191505060405180910390f35b34156105a457600080fd5b6105ac61125f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105f957600080fd5b61062a6004808035906020019091908035906020019091908035906020019091908035906020019091905050611284565b005b341561063757600080fd5b61063f611388565b6040518082815260200191505060405180910390f35b341561066057600080fd5b610668611395565b604051808215151515815260200191505060405180910390f35b341561068d57600080fd5b6106956113a8565b604051808215151515815260200191505060405180910390f35b34156106ba57600080fd5b6106c26113bb565b6040518082815260200191505060405180910390f35b34156106e357600080fd5b6106eb6113c1565b005b34156106f857600080fd5b610700611604565b6040518082815260200191505060405180910390f35b341561072157600080fd5b61072961160a565b6040518082815260200191505060405180910390f35b6107476108ab565b005b341561075457600080fd5b61075c611619565b6040518082815260200191505060405180910390f35b341561077d57600080fd5b61078561161f565b604051808215151515815260200191505060405180910390f35b34156107aa57600080fd5b6107d6600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611644565b005b34156107e357600080fd5b6107eb611720565b6040518082815260200191505060405180910390f35b341561080c57600080fd5b610814611726565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561086157600080fd5b61086961174c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600080600060149054906101000a900460ff161515156108ca57600080fd5b6108d2611772565b15156108dd57600080fd5b600091506108e9611848565b9050600a54600e5410156109455761090c60065482611b7d90919063ffffffff16565b9150600a5461092683600e54611bb190919063ffffffff16565b11156109405761093d81600a546001600654611035565b91505b610a41565b600a54600e541015801561095c5750600b54600e54105b156109af5761097660075482611b7d90919063ffffffff16565b9150600b5461099083600e54611bb190919063ffffffff16565b11156109aa576109a781600b546002600754611035565b91505b610a40565b600b54600e54101580156109c65750600c54600e54105b15610a19576109e060085482611b7d90919063ffffffff16565b9150600c546109fa83600e54611bb190919063ffffffff16565b1115610a1457610a1181600c546003600854611035565b91505b610a3f565b600c54600e54101515610a3e57610a3b60095482611b7d90919063ffffffff16565b91505b5b5b5b610a5681600d54611bb190919063ffffffff16565b600d81905550610a7182600e54611bb190919063ffffffff16565b600e81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663135859c033846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1515610b3b57600080fd5b6102c65a03f11515610b4c57600080fd5b505050610ba182601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fcd60aa75dea3072fbc07ae6d7d856b5dc5f4eee88854f5b4abf7b680ef8bc50f8284604051808381526020018281526020019250505060405180910390a2610c506001601054611bb190919063ffffffff16565b601081905550610c5f81611bd0565b5b5b5050565b60115481565b6a295be96e6406697200000081565b60126020528060005260406000206000915090505481565b60136020528060005260406000206000915090505481565b60095481565b60065481565b60045481565b600b5481565b67016345785d8a000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d2b57600080fd5b600060149054906101000a900460ff161515610d4657600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1600190505b5b5b90565b600d5481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b600060149054906101000a900460ff16151515610de457600080fd5b600f60019054906101000a900460ff16151561101857610e0261161f565b8015610e135750610e1161117c565b155b15610f1857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638c52dc416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1515610e9d57600080fd5b6102c65a03f11515610eae57600080fd5b5050506001600f60006101000a81548160ff0219169083151502179055506001600f60016101000a81548160ff0219169083151502179055507f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a1611017565b610f2061161f565b8015610f305750610f2f61117c565b5b1561101657600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166343d726d66040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1515610fba57600080fd5b6102c65a03f11515610fcb57600080fd5b5050506001600f60016101000a81548160ff0219169083151502179055507f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a15b5b5b5b5b565b600060149054906101000a900460ff1681565b600e5481565b6000806000806000808911801561104c5750600088115b80156110585750600086115b151561106357600080fd5b60018710158015611075575060048711155b151561108057600080fd5b6110a786611099600e548b611d3f90919063ffffffff16565b611d5990919063ffffffff16565b93506110bc848a611d3f90919063ffffffff16565b925060009150600090506004871415156110f4576110ed836110e860018a611bb190919063ffffffff16565b611d75565b91506110f9565b600190505b61112082611112600e548b611d3f90919063ffffffff16565b611bb190919063ffffffff16565b94508015611169573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561116857600080fd5b5b5b50505050949350505050565b60035481565b60006a06342fd08f00f637800000600e54101590505b90565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111f257600080fd5b600060149054906101000a900460ff1615151561120e57600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1600190505b5b5b90565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112df57600080fd5b600060149054906101000a900460ff161515156112fb57600080fd5b6003544210151561130b57600080fd5b60008411801561131b5750600083115b80156113275750600082115b80156113335750600081115b151561133e57600080fd5b828411801561134c57508183115b801561135757508082115b151561136257600080fd5b836006819055508260078190555081600881905550806009819055505b5b5b5b50505050565b683635c9adc5dea0000081565b600f60009054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b600c5481565b600060149054906101000a900460ff161515156113dd57600080fd5b6113e561161f565b80156113f657506113f461117c565b155b801561140e5750600f60009054906101000a900460ff165b151561141957600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa89401a336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15156114d557600080fd5b6102c65a03f115156114e657600080fd5b505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663549c6bbb33601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15156115ec57600080fd5b6102c65a03f115156115fd57600080fd5b5050505b5b565b60085481565b6a06342fd08f00f63780000081565b600a5481565b600060045442118061163e57506a295be96e64066972000000600e5410155b90505b90565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561169f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116db57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b50565b60105481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000806000600354421015801561179157506004544211155b95506000341194506a295be96e64066972000000600e5410935067016345785d8a00003410159250683635c9adc5dea00000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541091506011543a111590508580156118185750845b80156118215750835b801561182a5750825b80156118335750815b801561183c5750805b96505b50505050505090565b60008060008060008060008060149054906101000a900460ff1615151561186e57600080fd5b3495506000945060009350600c54600e54101515611912576118af61189e60095488611b7d90919063ffffffff16565b600e54611bb190919063ffffffff16565b92506a295be96e64066972000000831115611911576118e26a295be96e6406697200000084611d3f90919063ffffffff16565b91506118f960095483611d5990919063ffffffff16565b945061190e8587611d3f90919063ffffffff16565b95505b5b61196486601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b9050683635c9adc5dea0000081111515611a12576119ca86601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611adb565b611a2e683635c9adc5dea0000082611d3f90919063ffffffff16565b9350611a438487611d3f90919063ffffffff16565b9550611a9786601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bb190919063ffffffff16565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000851115611b25573373ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501515611b2457600080fd5b5b6000841115611b6f573373ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501515611b6e57600080fd5b5b8596505b5b50505050505090565b60008082840290506000841480611b9e5750828482811515611b9b57fe5b04145b1515611ba657fe5b8091505b5092915050565b6000808284019050838110151515611bc557fe5b8091505b5092915050565b600060149054906101000a900460ff16151515611bec57600080fd5b611bf461117c565b15611c6057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515611c5b57600080fd5b611d32565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f340fa0182336040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b1515611d1c57600080fd5b6125ee5a03f11515611d2d57600080fd5b505050505b611d3a610dc8565b5b5b50565b6000828211151515611d4d57fe5b81830390505b92915050565b6000808284811515611d6757fe5b0490508091505b5092915050565b60008083111515611d8557600080fd5b60018210158015611d97575060048211155b1515611da257600080fd5b6001821415611dc757611dc060065484611b7d90919063ffffffff16565b9050611e2b565b6002821415611dec57611de560075484611b7d90919063ffffffff16565b9050611e2a565b6003821415611e1157611e0a60085484611b7d90919063ffffffff16565b9050611e29565b611e2660095484611b7d90919063ffffffff16565b90505b5b5b5b929150505600a165627a7a7230582084f9fb6d0017651233e18f91197c67b9b954c04d864d344a23e5428a4d990abe0029

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

0000000000000000000000000900d7ecfacdec21aca271b0133b9e387ece1321000000000000000000000000f923ba61b43161a83afe2cab7d77ea1e41f2791800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _wallet (address): 0x0900D7ECFacdec21ACA271b0133b9E387ecE1321
Arg [1] : _tokenAddress (address): 0xf923Ba61B43161A83afe2cAb7d77Ea1e41F27918
Arg [2] : _startTime (uint256): 0
Arg [3] : _endTime (uint256): 0

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000900d7ecfacdec21aca271b0133b9e387ece1321
Arg [1] : 000000000000000000000000f923ba61b43161a83afe2cab7d77ea1e41f27918
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000


Swarm Source

bzzr://a45086f3cebd0cbafddbe523ed3ba70358b2e71bed0d43f9ad1395afc6b22db2

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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