More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 8,264 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 4745295 | 2628 days ago | IN | 10 ETH | 0.0007113 | ||||
Transfer | 4742687 | 2628 days ago | IN | 1 ETH | 0.00170034 | ||||
Transfer | 4742682 | 2628 days ago | IN | 0.985 ETH | 0.0000231 | ||||
Transfer | 4741755 | 2628 days ago | IN | 1.487 ETH | 0.00059511 | ||||
Transfer | 4741748 | 2628 days ago | IN | 1.1 ETH | 0.00059511 | ||||
Transfer | 4741601 | 2628 days ago | IN | 0.625 ETH | 0.00065179 | ||||
Transfer | 4741282 | 2628 days ago | IN | 1.75 ETH | 0.00113356 | ||||
Transfer | 4741224 | 2628 days ago | IN | 50 ETH | 0.00059511 | ||||
Transfer | 4741224 | 2628 days ago | IN | 50 ETH | 0.00062345 | ||||
Transfer | 4741187 | 2628 days ago | IN | 9.5 ETH | 0.00084 | ||||
Transfer | 4741095 | 2628 days ago | IN | 9.5 ETH | 0.00084 | ||||
Transfer | 4741087 | 2628 days ago | IN | 11.2 ETH | 0.00126 | ||||
Transfer | 4741069 | 2628 days ago | IN | 9.5 ETH | 0.00063 | ||||
Transfer | 4741001 | 2628 days ago | IN | 5 ETH | 0.00141695 | ||||
Transfer | 4740981 | 2628 days ago | IN | 1.4 ETH | 0.00059511 | ||||
Transfer | 4740979 | 2628 days ago | IN | 1.254 ETH | 0.000441 | ||||
Transfer | 4740966 | 2628 days ago | IN | 1 ETH | 0.0003684 | ||||
Transfer | 4740951 | 2628 days ago | IN | 9.6 ETH | 0.001218 | ||||
Transfer | 4740946 | 2628 days ago | IN | 1 ETH | 0.00253634 | ||||
Transfer | 4740944 | 2628 days ago | IN | 0.5 ETH | 0.00059511 | ||||
Transfer | 4740940 | 2628 days ago | IN | 1 ETH | 0.00170034 | ||||
Transfer | 4740937 | 2628 days ago | IN | 1.06921458 ETH | 0.00113356 | ||||
Transfer | 4740937 | 2628 days ago | IN | 10 ETH | 0.00170034 | ||||
Transfer | 4740918 | 2628 days ago | IN | 1 ETH | 0.00253634 | ||||
Transfer | 4740910 | 2628 days ago | IN | 1.07034814 ETH | 0.00113356 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
4740311 | 2628 days ago | 2.67 ETH | ||||
4740311 | 2628 days ago | 0.98 ETH | ||||
4740311 | 2628 days ago | 1.3 ETH | ||||
4740311 | 2628 days ago | 1.7 ETH | ||||
4740311 | 2628 days ago | 1.4 ETH | ||||
4740311 | 2628 days ago | 3.5 ETH | ||||
4740310 | 2628 days ago | 1.8 ETH | ||||
4740309 | 2628 days ago | 9 ETH | ||||
4740308 | 2628 days ago | 2 ETH | ||||
4740308 | 2628 days ago | 0.5 ETH | ||||
4740308 | 2628 days ago | 1.75 ETH | ||||
4740308 | 2628 days ago | 25 ETH | ||||
4740308 | 2628 days ago | 3.37 ETH | ||||
4740308 | 2628 days ago | 2.2 ETH | ||||
4740307 | 2628 days ago | 1 ETH | ||||
4740307 | 2628 days ago | 1.4 ETH | ||||
4740307 | 2628 days ago | 1 ETH | ||||
4740307 | 2628 days ago | 1.1 ETH | ||||
4740307 | 2628 days ago | 1.5 ETH | ||||
4740307 | 2628 days ago | 0.86520902 ETH | ||||
4740307 | 2628 days ago | 1.4 ETH | ||||
4740307 | 2628 days ago | 1.5 ETH | ||||
4740307 | 2628 days ago | 1 ETH | ||||
4740307 | 2628 days ago | 14.9 ETH | ||||
4740307 | 2628 days ago | 1.8 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
BRDCrowdsale
Compiler Version
v0.4.18+commit.9cf6e910
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2017-12-15 */ pragma solidity ^0.4.18; // File: contracts/zeppelin-solidity-1.4/Ownable.sol /** * @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; 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; } } // File: contracts/BRDCrowdsaleAuthorizer.sol /** * Contract BRDCrowdsaleAuthorizer is used by the crowdsale website * to autorize wallets to participate in the crowdsale. Because all * participants must go through the KYC/AML phase, only accounts * listed in this contract may contribute to the crowdsale */ contract BRDCrowdsaleAuthorizer is Ownable { // these accounts are authorized to participate in the crowdsale mapping (address => bool) internal authorizedAccounts; // these accounts are authorized to authorize accounts mapping (address => bool) internal authorizers; // emitted when a new account is authorized event Authorized(address indexed _to); // add an authorizer to the authorizers mapping. the _newAuthorizer will // be able to add other authorizers and authorize crowdsale participants function addAuthorizer(address _newAuthorizer) onlyOwnerOrAuthorizer public { // allow the provided address to authorize accounts authorizers[_newAuthorizer] = true; } // remove an authorizer from the authorizers mapping. the _bannedAuthorizer will // no longer have permission to do anything on this contract function removeAuthorizer(address _bannedAuthorizer) onlyOwnerOrAuthorizer public { // only attempt to remove the authorizer if they are currently authorized require(authorizers[_bannedAuthorizer]); // remove the authorizer delete authorizers[_bannedAuthorizer]; } // allow an account to participate in the crowdsale function authorizeAccount(address _newAccount) onlyOwnerOrAuthorizer public { if (!authorizedAccounts[_newAccount]) { // allow the provided account to participate in the crowdsale authorizedAccounts[_newAccount] = true; // emit the Authorized event Authorized(_newAccount); } } // returns whether or not the provided _account is an authorizer function isAuthorizer(address _account) constant public returns (bool _isAuthorizer) { return msg.sender == owner || authorizers[_account] == true; } // returns whether or not the provided _account is authorized to participate in the crowdsale function isAuthorized(address _account) constant public returns (bool _authorized) { return authorizedAccounts[_account] == true; } // allow only the contract creator or one of the authorizers to do this modifier onlyOwnerOrAuthorizer() { require(msg.sender == owner || authorizers[msg.sender]); _; } } // File: contracts/zeppelin-solidity-1.4/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { 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; } 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; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } // File: contracts/BRDLockup.sol /** * Contract BRDLockup keeps track of a vesting schedule for pre-sold tokens. * Pre-sold tokens are rewarded up to `numIntervals` times separated by an * `interval` of time. An equal amount of tokens (`allocation` divided by `numIntervals`) * is marked for reward each `interval`. * * The owner of the contract will call processInterval() which will * update the allocation state. The owner of the contract should then * read the allocation data and reward the beneficiaries. */ contract BRDLockup is Ownable { using SafeMath for uint256; // Allocation stores info about how many tokens to reward a beneficiary account struct Allocation { address beneficiary; // account to receive rewards uint256 allocation; // total allocated tokens uint256 remainingBalance; // remaining balance after the current interval uint256 currentInterval; // the current interval for the given reward uint256 currentReward; // amount to be rewarded during the current interval } // the allocation state Allocation[] public allocations; // the date at which allocations begin unlocking uint256 public unlockDate; // the current unlock interval uint256 public currentInterval; // the interval at which allocations will be rewarded uint256 public intervalDuration; // the number of total reward intervals, zero indexed uint256 public numIntervals; event Lock(address indexed _to, uint256 _amount); event Unlock(address indexed _to, uint256 _amount); // constructor // @param _crowdsaleEndDate - the date the crowdsale ends function BRDLockup(uint256 _crowdsaleEndDate, uint256 _numIntervals, uint256 _intervalDuration) public { unlockDate = _crowdsaleEndDate; numIntervals = _numIntervals; intervalDuration = _intervalDuration; currentInterval = 0; } // update the allocation storage remaining balances function processInterval() onlyOwner public returns (bool _shouldProcessRewards) { // ensure the time interval is correct bool _correctInterval = now >= unlockDate && now.sub(unlockDate) > currentInterval.mul(intervalDuration); bool _validInterval = currentInterval < numIntervals; if (!_correctInterval || !_validInterval) return false; // advance the current interval currentInterval = currentInterval.add(1); // number of iterations to read all allocations uint _allocationsIndex = allocations.length; // loop through every allocation for (uint _i = 0; _i < _allocationsIndex; _i++) { // the current reward for the allocation at index `i` uint256 _amountToReward; // if we are at the last interval, the reward amount is the entire remaining balance if (currentInterval == numIntervals) { _amountToReward = allocations[_i].remainingBalance; } else { // otherwise the reward amount is the total allocation divided by the number of intervals _amountToReward = allocations[_i].allocation.div(numIntervals); } // update the allocation storage allocations[_i].currentReward = _amountToReward; } return true; } // the total number of allocations function numAllocations() constant public returns (uint) { return allocations.length; } // the amount allocated for beneficiary at `_index` function allocationAmount(uint _index) constant public returns (uint256) { return allocations[_index].allocation; } // reward the beneficiary at `_index` function unlock(uint _index) onlyOwner public returns (bool _shouldReward, address _beneficiary, uint256 _rewardAmount) { // ensure the beneficiary is not rewarded twice during the same interval if (allocations[_index].currentInterval < currentInterval) { // record the currentInterval so the above check is useful allocations[_index].currentInterval = currentInterval; // subtract the reward from their remaining balance allocations[_index].remainingBalance = allocations[_index].remainingBalance.sub(allocations[_index].currentReward); // emit event Unlock(allocations[_index].beneficiary, allocations[_index].currentReward); // return value _shouldReward = true; } else { // return value _shouldReward = false; } // return values _rewardAmount = allocations[_index].currentReward; _beneficiary = allocations[_index].beneficiary; } // add a new allocation to the lockup function pushAllocation(address _beneficiary, uint256 _numTokens) onlyOwner public { require(now < unlockDate); allocations.push( Allocation( _beneficiary, _numTokens, _numTokens, 0, 0 ) ); Lock(_beneficiary, _numTokens); } } // File: contracts/zeppelin-solidity-1.4/ERC20Basic.sol /** * @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) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: contracts/zeppelin-solidity-1.4/BasicToken.sol /** * @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) 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]; } } // File: contracts/zeppelin-solidity-1.4/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ 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); } // File: contracts/zeppelin-solidity-1.4/StandardToken.sol /** * @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)) 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]; } /** * 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 */ 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; } 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; } } // File: contracts/zeppelin-solidity-1.4/MintableToken.sol /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ 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; } } // File: contracts/BRDToken.sol contract BRDToken is MintableToken { using SafeMath for uint256; string public name = "Bread Token"; string public symbol = "BRD"; uint256 public decimals = 18; // override StandardToken#transferFrom // ensures that minting has finished or the message sender is the token owner function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(mintingFinished || msg.sender == owner); return super.transferFrom(_from, _to, _value); } // override StandardToken#transfer // ensures the minting has finished or the message sender is the token owner function transfer(address _to, uint256 _value) public returns (bool) { require(mintingFinished || msg.sender == owner); return super.transfer(_to, _value); } } // File: contracts/zeppelin-solidity-1.4/Crowdsale.sol /** * @title Crowdsale * @dev Crowdsale is a base contract for managing a token crowdsale. * 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. */ contract Crowdsale { using SafeMath for uint256; // The token being sold MintableToken public token; // start and end timestamps where investments are allowed (both inclusive) uint256 public startTime; uint256 public endTime; // address where funds are collected address public wallet; // how many token units a buyer gets per wei uint256 public rate; // amount of raised money in wei uint256 public weiRaised; /** * event for token purchase logging * @param purchaser who paid for the tokens * @param beneficiary who got the tokens * @param value weis paid for purchase * @param amount amount of tokens purchased */ event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); function Crowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, address _wallet) public { require(_startTime >= now); require(_endTime >= _startTime); require(_rate > 0); require(_wallet != address(0)); token = createTokenContract(); startTime = _startTime; endTime = _endTime; rate = _rate; wallet = _wallet; } // creates the token to be sold. // override this method to have crowdsale of a specific mintable token. function createTokenContract() internal returns (MintableToken) { return new MintableToken(); } // fallback function can be used to buy tokens function () external payable { buyTokens(msg.sender); } // low level token purchase function function buyTokens(address beneficiary) public payable { require(beneficiary != address(0)); require(validPurchase()); uint256 weiAmount = msg.value; // calculate token amount to be created uint256 tokens = weiAmount.mul(rate); // update state weiRaised = weiRaised.add(weiAmount); token.mint(beneficiary, tokens); TokenPurchase(msg.sender, beneficiary, weiAmount, tokens); forwardFunds(); } // send ether to the fund collection wallet // override to create custom fund forwarding mechanisms function forwardFunds() internal { wallet.transfer(msg.value); } // @return true if the transaction can buy tokens function validPurchase() internal view returns (bool) { bool withinPeriod = now >= startTime && now <= endTime; bool nonZeroPurchase = msg.value != 0; return withinPeriod && nonZeroPurchase; } // @return true if crowdsale event has ended function hasEnded() public view returns (bool) { return now > endTime; } } // File: contracts/zeppelin-solidity-1.4/FinalizableCrowdsale.sol /** * @title FinalizableCrowdsale * @dev Extension of Crowdsale where an owner can do extra work * after finishing. */ contract FinalizableCrowdsale is Crowdsale, Ownable { using SafeMath for uint256; bool public isFinalized = false; event Finalized(); /** * @dev Must be called after crowdsale ends, to do some extra finalization * work. Calls the contract's finalization function. */ function finalize() onlyOwner public { require(!isFinalized); require(hasEnded()); finalization(); Finalized(); isFinalized = true; } /** * @dev Can be overridden to add finalization logic. The overriding function * should call super.finalization() to ensure the chain of finalization is * executed entirely. */ function finalization() internal { } } // File: contracts/BRDCrowdsale.sol contract BRDCrowdsale is FinalizableCrowdsale { using SafeMath for uint256; // maximum amount of wei raised during this crowdsale uint256 public cap; // minimum per-participant wei contribution uint256 public minContribution; // maximum per-participant wei contribution uint256 public maxContribution; // how many token unites the owner gets per buyer wei uint256 public ownerRate; // number of tokens per 100 to lock up in lockupTokens() uint256 public bonusRate; // the address to which the owner share of tokens are sent address public tokenWallet; // crowdsale authorizer contract determines who can participate BRDCrowdsaleAuthorizer public authorizer; // the lockup contract holds presale authorization amounts BRDLockup public lockup; // constructor function BRDCrowdsale( uint256 _cap, // maximum wei raised uint256 _minWei, // minimum per-contributor wei uint256 _maxWei, // maximum per-contributor wei uint256 _startTime, // crowdsale start time uint256 _endTime, // crowdsale end time uint256 _rate, // tokens per wei uint256 _ownerRate, // owner tokens per buyer wei uint256 _bonusRate, // percentage of tokens to lockup address _wallet, // target eth wallet address _tokenWallet) // target token wallet Crowdsale(_startTime, _endTime, _rate, _wallet) public { require(_cap > 0); require(_tokenWallet != 0x0); cap = _cap; minContribution = _minWei; maxContribution = _maxWei; ownerRate = _ownerRate; bonusRate = _bonusRate; tokenWallet = _tokenWallet; } // overriding Crowdsale#hasEnded to add cap logic // @return true if crowdsale event has ended function hasEnded() public constant returns (bool) { bool _capReached = weiRaised >= cap; return super.hasEnded() || _capReached; } // @return true if the crowdsale has started function hasStarted() public constant returns (bool) { return now > startTime; } // overriding Crowdsale#buyTokens // mints the ownerRate of tokens in addition to calling the super method function buyTokens(address _beneficiary) public payable { // call the parent method to mint tokens to the beneficiary super.buyTokens(_beneficiary); // calculate the owner share of tokens uint256 _ownerTokens = msg.value.mul(ownerRate); // mint the owner share and send to the owner toke wallet token.mint(tokenWallet, _ownerTokens); } // immediately mint _amount tokens to the _beneficiary. this is used for OOB token purchases. function allocateTokens(address _beneficiary, uint256 _amount) onlyOwner public { require(!isFinalized); // update state uint256 _weiAmount = _amount.div(rate); weiRaised = weiRaised.add(_weiAmount); // mint the tokens to the beneficiary token.mint(_beneficiary, _amount); // mint the owner share tokens uint256 _ownerTokens = _weiAmount.mul(ownerRate); token.mint(tokenWallet, _ownerTokens); TokenPurchase(msg.sender, _beneficiary, _weiAmount, _amount); } // mints _amount tokens to the _beneficiary minus the bonusRate // tokens to be locked up via the lockup contract. locked up tokens // are sent to the contract and may be unlocked according to // the lockup configuration after the sale ends function lockupTokens(address _beneficiary, uint256 _amount) onlyOwner public { require(!isFinalized); // calculate the owner share of tokens uint256 _ownerTokens = ownerRate.mul(_amount).div(rate); // mint the owner share and send to the owner wallet token.mint(tokenWallet, _ownerTokens); // calculate the amount of tokens to be locked up uint256 _lockupTokens = bonusRate.mul(_amount).div(100); // create the locked allocation in the lockup contract lockup.pushAllocation(_beneficiary, _lockupTokens); // mint locked tokens to the crowdsale contract to later be unlocked token.mint(this, _lockupTokens); // the non-bonus tokens are immediately rewarded uint256 _remainder = _amount.sub(_lockupTokens); token.mint(_beneficiary, _remainder); } // unlocks tokens from the token lockup contract. no tokens are held by // the lockup contract, just the amounts and times that tokens should be rewarded. // the tokens are held by the crowdsale contract function unlockTokens() onlyOwner public returns (bool _didIssueRewards) { // attempt to process the interval. it update the allocation bookkeeping // and will only return true when the interval should be processed if (!lockup.processInterval()) return false; // the total number of allocations uint _numAllocations = lockup.numAllocations(); // for every allocation, attempt to unlock the reward for (uint _i = 0; _i < _numAllocations; _i++) { // attempt to unlock the reward var (_shouldReward, _to, _amount) = lockup.unlock(_i); // if the beneficiary should be rewarded, send them tokens if (_shouldReward) { token.transfer(_to, _amount); } } return true; } // sets the authorizer contract if the crowdsale hasn't started function setAuthorizer(BRDCrowdsaleAuthorizer _authorizer) onlyOwner public { require(!hasStarted()); authorizer = _authorizer; } // sets the lockup contract if the crowdsale hasn't started function setLockup(BRDLockup _lockup) onlyOwner public { require(!hasStarted()); lockup = _lockup; } // sets the token contract if the crowdsale hasn't started function setToken(BRDToken _token) onlyOwner public { require(!hasStarted()); token = _token; } // set the cap on the contract if the crowdsale hasn't started function setCap(uint256 _newCap) onlyOwner public { require(_newCap > 0); require(!hasStarted()); cap = _newCap; } // allows maxContribution to be modified function setMaxContribution(uint256 _newMaxContribution) onlyOwner public { maxContribution = _newMaxContribution; } // allows endTime to be modified function setEndTime(uint256 _newEndTime) onlyOwner public { endTime = _newEndTime; } // overriding Crowdsale#createTokenContract function createTokenContract() internal returns (MintableToken) { // set the token to null initially // call setToken() above to set the actual token address return BRDToken(address(0)); } // overriding FinalizableCrowdsale#finalization // finalizes minting for the token contract, disabling further minting function finalization() internal { // end minting token.finishMinting(); // issue the first lockup reward unlockTokens(); super.finalization(); } // overriding Crowdsale#validPurchase to add extra cap logic // @return true if crowdsale participants can buy at the moment // checks whether the cap has not been reached, the purchaser has // been authorized, and their contribution is within the min/max // thresholds function validPurchase() internal constant returns (bool) { bool _withinCap = weiRaised.add(msg.value) <= cap; bool _isAuthorized = authorizer.isAuthorized(msg.sender); bool _isMin = msg.value >= minContribution; uint256 _alreadyContributed = token.balanceOf(msg.sender).div(rate); bool _withinMax = msg.value.add(_alreadyContributed) <= maxContribution; return super.validPurchase() && _withinCap && _isAuthorized && _isMin && _withinMax; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_newMaxContribution","type":"uint256"}],"name":"setMaxContribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_authorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lockup","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_lockup","type":"address"}],"name":"setLockup","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"setToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rate","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":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hasStarted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCap","type":"uint256"}],"name":"setCap","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"bonusRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ownerRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_amount","type":"uint256"}],"name":"allocateTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxContribution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":"minContribution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newEndTime","type":"uint256"}],"name":"setEndTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"authorizer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_amount","type":"uint256"}],"name":"lockupTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","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":false,"inputs":[],"name":"unlockTokens","outputs":[{"name":"_didIssueRewards","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_cap","type":"uint256"},{"name":"_minWei","type":"uint256"},{"name":"_maxWei","type":"uint256"},{"name":"_startTime","type":"uint256"},{"name":"_endTime","type":"uint256"},{"name":"_rate","type":"uint256"},{"name":"_ownerRate","type":"uint256"},{"name":"_bonusRate","type":"uint256"},{"name":"_wallet","type":"address"},{"name":"_tokenWallet","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"}]
Contract Creation Code
60606040526000600660146101000a81548160ff02191690831515021790555034156200002b57600080fd5b60405161014080620024838339810160405280805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190505086868684428410151515620000ae57600080fd5b838310151515620000be57600080fd5b600082111515620000ce57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200010b57600080fd5b62000129620002ae6401000000000262002189176401000000009004565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600181905550826002819055508160048190555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008a1115156200021357600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff16141515156200023a57600080fd5b89600781905550886008819055508760098190555083600a8190555082600b8190555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050505050620002b6565b600080905090565b6121bd80620002c66000396000f300606060405260043610610180576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303ed9d211461018b578063058a628f146101ae57806306490f47146101e75780630b745a011461023c578063144fa6d7146102755780632c4e722e146102ae5780633197cbb6146102d7578063355274ea146103005780634042b66f1461032957806344691f7e1461035257806347786d371461037f5780634bb278f3146103a2578063521eb273146103b75780635af123f41461040c578063688cdba81461043557806378e979251461045e57806386ce0285146104875780638d3d6576146104c95780638d4e4083146104f25780638da5cb5b1461051f578063aaffadf314610574578063bff99c6c1461059d578063ccb98ffc146105f2578063d09edf3114610615578063eb3a88dc1461066a578063ec8ac4d8146106ac578063ecb70fb7146106da578063f2fde38b14610707578063f968f49314610740578063fc0c546a1461076d575b610189336107c2565b005b341561019657600080fd5b6101ac60048080359060200190919050506108f2565b005b34156101b957600080fd5b6101e5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610958565b005b34156101f257600080fd5b6101fa610a0c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561024757600080fd5b610273600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a32565b005b341561028057600080fd5b6102ac600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610ae6565b005b34156102b957600080fd5b6102c1610b99565b6040518082815260200191505060405180910390f35b34156102e257600080fd5b6102ea610b9f565b6040518082815260200191505060405180910390f35b341561030b57600080fd5b610313610ba5565b6040518082815260200191505060405180910390f35b341561033457600080fd5b61033c610bab565b6040518082815260200191505060405180910390f35b341561035d57600080fd5b610365610bb1565b604051808215151515815260200191505060405180910390f35b341561038a57600080fd5b6103a06004808035906020019091905050610bbd565b005b34156103ad57600080fd5b6103b5610c46565b005b34156103c257600080fd5b6103ca610d22565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561041757600080fd5b61041f610d48565b6040518082815260200191505060405180910390f35b341561044057600080fd5b610448610d4e565b6040518082815260200191505060405180910390f35b341561046957600080fd5b610471610d54565b6040518082815260200191505060405180910390f35b341561049257600080fd5b6104c7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610d5a565b005b34156104d457600080fd5b6104dc611083565b6040518082815260200191505060405180910390f35b34156104fd57600080fd5b610505611089565b604051808215151515815260200191505060405180910390f35b341561052a57600080fd5b61053261109c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561057f57600080fd5b6105876110c2565b6040518082815260200191505060405180910390f35b34156105a857600080fd5b6105b06110c8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105fd57600080fd5b61061360048080359060200190919050506110ee565b005b341561062057600080fd5b610628611154565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561067557600080fd5b6106aa600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061117a565b005b6106d8600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506107c2565b005b34156106e557600080fd5b6106ed61161a565b604051808215151515815260200191505060405180910390f35b341561071257600080fd5b61073e600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061163d565b005b341561074b57600080fd5b610753611795565b604051808215151515815260200191505060405180910390f35b341561077857600080fd5b610780611b39565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006107cd82611b5e565b6107e2600a5434611d4790919063ffffffff16565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156108d257600080fd5b6102c65a03f115156108e357600080fd5b50505060405180519050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561094e57600080fd5b8060098190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109b457600080fd5b6109bc610bb1565b1515156109c857600080fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a8e57600080fd5b610a96610bb1565b151515610aa257600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b4257600080fd5b610b4a610bb1565b151515610b5657600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b60025481565b60075481565b60055481565b60006001544211905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c1957600080fd5b600081111515610c2857600080fd5b610c30610bb1565b151515610c3c57600080fd5b8060078190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ca257600080fd5b600660149054906101000a900460ff16151515610cbe57600080fd5b610cc661161a565b1515610cd157600080fd5b610cd9611d82565b7f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a16001600660146101000a81548160ff021916908315150217905550565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600a5481565b60015481565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610db957600080fd5b600660149054906101000a900460ff16151515610dd557600080fd5b610dea60045484611e3e90919063ffffffff16565b9150610e0182600554611e5990919063ffffffff16565b6005819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1985856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610ed357600080fd5b6102c65a03f11515610ee457600080fd5b5050506040518051905050610f04600a5483611d4790919063ffffffff16565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610ff457600080fd5b6102c65a03f1151561100557600080fd5b50505060405180519050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188486604051808381526020018281526020019250505060405180910390a350505050565b60095481565b600660149054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561114a57600080fd5b8060028190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111db57600080fd5b600660149054906101000a900460ff161515156111f757600080fd5b61122060045461121286600a54611d4790919063ffffffff16565b611e3e90919063ffffffff16565b92506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561131057600080fd5b6102c65a03f1151561132157600080fd5b5050506040518051905050611354606461134686600b54611d4790919063ffffffff16565b611e3e90919063ffffffff16565b9150600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636dc0a99786846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b151561141a57600080fd5b6102c65a03f1151561142b57600080fd5b5050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156114fa57600080fd5b6102c65a03f1151561150b57600080fd5b50505060405180519050506115298285611e7790919063ffffffff16565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1986836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156115f757600080fd5b6102c65a03f1151561160857600080fd5b50505060405180519050505050505050565b6000806007546005541015905061162f611e90565b806116375750805b91505090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561169957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116d557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117fa57600080fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f95e63066000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561188857600080fd5b6102c65a03f1151561189957600080fd5b5050506040518051905015156118b25760009550611b31565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a2960e16000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561194057600080fd5b6102c65a03f1151561195157600080fd5b505050604051805190509450600093505b84841015611b2c57600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636198e339856000604051606001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b1515611a0357600080fd5b6102c65a03f11515611a1457600080fd5b505050604051805190602001805190602001805190509250925092508215611b1f576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515611b0257600080fd5b6102c65a03f11515611b1357600080fd5b50505060405180519050505b8380600101945050611962565b600195505b505050505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b9d57600080fd5b611ba5611e9c565b1515611bb057600080fd5b349150611bc860045483611d4790919063ffffffff16565b9050611bdf82600554611e5990919063ffffffff16565b6005819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515611cb157600080fd5b6102c65a03f11515611cc257600080fd5b50505060405180519050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188484604051808381526020018281526020019250505060405180910390a3611d426120f0565b505050565b6000806000841415611d5c5760009150611d7b565b8284029050828482811515611d6d57fe5b04141515611d7757fe5b8091505b5092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d64bcb46000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515611e0f57600080fd5b6102c65a03f11515611e2057600080fd5b5050506040518051905050611e33611795565b50611e3c612154565b565b6000808284811515611e4c57fe5b0490508091505092915050565b6000808284019050838110151515611e6d57fe5b8091505092915050565b6000828211151515611e8557fe5b818303905092915050565b60006002544211905090565b600080600080600080600754611ebd34600554611e5990919063ffffffff16565b11159450600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe9fbb80336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611f8657600080fd5b6102c65a03f11515611f9757600080fd5b505050604051805190509350600854341015925061209e6004546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561207557600080fd5b6102c65a03f1151561208657600080fd5b50505060405180519050611e3e90919063ffffffff16565b91506009546120b68334611e5990919063ffffffff16565b111590506120c2612156565b80156120cb5750845b80156120d45750835b80156120dd5750825b80156120e65750805b9550505050505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050151561215257600080fd5b565b565b6000806000600154421015801561216f57506002544211155b9150600034141590508180156121825750805b9250505090565b6000809050905600a165627a7a72305820d1b20d47b80de0cd5b19020caba637c7515fe0352914068d88727a1646d0af01002900000000000000000000000000000000000000000000070f00ed2cc7f757400000000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000000000000005a347e20000000000000000000000000000000000000000000000000000000005a3f0a200000000000000000000000000000000000000000000000000000000000000384000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000000000140000000000000000000000009d66d75b46816d306572446f62305f72c4f6d2fd000000000000000000000000081edbef6106ab1253557451b261c1c99bade726
Deployed Bytecode
0x606060405260043610610180576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303ed9d211461018b578063058a628f146101ae57806306490f47146101e75780630b745a011461023c578063144fa6d7146102755780632c4e722e146102ae5780633197cbb6146102d7578063355274ea146103005780634042b66f1461032957806344691f7e1461035257806347786d371461037f5780634bb278f3146103a2578063521eb273146103b75780635af123f41461040c578063688cdba81461043557806378e979251461045e57806386ce0285146104875780638d3d6576146104c95780638d4e4083146104f25780638da5cb5b1461051f578063aaffadf314610574578063bff99c6c1461059d578063ccb98ffc146105f2578063d09edf3114610615578063eb3a88dc1461066a578063ec8ac4d8146106ac578063ecb70fb7146106da578063f2fde38b14610707578063f968f49314610740578063fc0c546a1461076d575b610189336107c2565b005b341561019657600080fd5b6101ac60048080359060200190919050506108f2565b005b34156101b957600080fd5b6101e5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610958565b005b34156101f257600080fd5b6101fa610a0c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561024757600080fd5b610273600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a32565b005b341561028057600080fd5b6102ac600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610ae6565b005b34156102b957600080fd5b6102c1610b99565b6040518082815260200191505060405180910390f35b34156102e257600080fd5b6102ea610b9f565b6040518082815260200191505060405180910390f35b341561030b57600080fd5b610313610ba5565b6040518082815260200191505060405180910390f35b341561033457600080fd5b61033c610bab565b6040518082815260200191505060405180910390f35b341561035d57600080fd5b610365610bb1565b604051808215151515815260200191505060405180910390f35b341561038a57600080fd5b6103a06004808035906020019091905050610bbd565b005b34156103ad57600080fd5b6103b5610c46565b005b34156103c257600080fd5b6103ca610d22565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561041757600080fd5b61041f610d48565b6040518082815260200191505060405180910390f35b341561044057600080fd5b610448610d4e565b6040518082815260200191505060405180910390f35b341561046957600080fd5b610471610d54565b6040518082815260200191505060405180910390f35b341561049257600080fd5b6104c7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610d5a565b005b34156104d457600080fd5b6104dc611083565b6040518082815260200191505060405180910390f35b34156104fd57600080fd5b610505611089565b604051808215151515815260200191505060405180910390f35b341561052a57600080fd5b61053261109c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561057f57600080fd5b6105876110c2565b6040518082815260200191505060405180910390f35b34156105a857600080fd5b6105b06110c8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105fd57600080fd5b61061360048080359060200190919050506110ee565b005b341561062057600080fd5b610628611154565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561067557600080fd5b6106aa600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061117a565b005b6106d8600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506107c2565b005b34156106e557600080fd5b6106ed61161a565b604051808215151515815260200191505060405180910390f35b341561071257600080fd5b61073e600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061163d565b005b341561074b57600080fd5b610753611795565b604051808215151515815260200191505060405180910390f35b341561077857600080fd5b610780611b39565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006107cd82611b5e565b6107e2600a5434611d4790919063ffffffff16565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156108d257600080fd5b6102c65a03f115156108e357600080fd5b50505060405180519050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561094e57600080fd5b8060098190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109b457600080fd5b6109bc610bb1565b1515156109c857600080fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a8e57600080fd5b610a96610bb1565b151515610aa257600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b4257600080fd5b610b4a610bb1565b151515610b5657600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b60025481565b60075481565b60055481565b60006001544211905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c1957600080fd5b600081111515610c2857600080fd5b610c30610bb1565b151515610c3c57600080fd5b8060078190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ca257600080fd5b600660149054906101000a900460ff16151515610cbe57600080fd5b610cc661161a565b1515610cd157600080fd5b610cd9611d82565b7f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a16001600660146101000a81548160ff021916908315150217905550565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600a5481565b60015481565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610db957600080fd5b600660149054906101000a900460ff16151515610dd557600080fd5b610dea60045484611e3e90919063ffffffff16565b9150610e0182600554611e5990919063ffffffff16565b6005819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1985856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610ed357600080fd5b6102c65a03f11515610ee457600080fd5b5050506040518051905050610f04600a5483611d4790919063ffffffff16565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610ff457600080fd5b6102c65a03f1151561100557600080fd5b50505060405180519050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188486604051808381526020018281526020019250505060405180910390a350505050565b60095481565b600660149054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561114a57600080fd5b8060028190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111db57600080fd5b600660149054906101000a900460ff161515156111f757600080fd5b61122060045461121286600a54611d4790919063ffffffff16565b611e3e90919063ffffffff16565b92506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561131057600080fd5b6102c65a03f1151561132157600080fd5b5050506040518051905050611354606461134686600b54611d4790919063ffffffff16565b611e3e90919063ffffffff16565b9150600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636dc0a99786846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b151561141a57600080fd5b6102c65a03f1151561142b57600080fd5b5050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930846000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156114fa57600080fd5b6102c65a03f1151561150b57600080fd5b50505060405180519050506115298285611e7790919063ffffffff16565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1986836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156115f757600080fd5b6102c65a03f1151561160857600080fd5b50505060405180519050505050505050565b6000806007546005541015905061162f611e90565b806116375750805b91505090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561169957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116d557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117fa57600080fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f95e63066000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561188857600080fd5b6102c65a03f1151561189957600080fd5b5050506040518051905015156118b25760009550611b31565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a2960e16000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561194057600080fd5b6102c65a03f1151561195157600080fd5b505050604051805190509450600093505b84841015611b2c57600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636198e339856000604051606001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b1515611a0357600080fd5b6102c65a03f11515611a1457600080fd5b505050604051805190602001805190602001805190509250925092508215611b1f576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515611b0257600080fd5b6102c65a03f11515611b1357600080fd5b50505060405180519050505b8380600101945050611962565b600195505b505050505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b9d57600080fd5b611ba5611e9c565b1515611bb057600080fd5b349150611bc860045483611d4790919063ffffffff16565b9050611bdf82600554611e5990919063ffffffff16565b6005819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515611cb157600080fd5b6102c65a03f11515611cc257600080fd5b50505060405180519050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188484604051808381526020018281526020019250505060405180910390a3611d426120f0565b505050565b6000806000841415611d5c5760009150611d7b565b8284029050828482811515611d6d57fe5b04141515611d7757fe5b8091505b5092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d64bcb46000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515611e0f57600080fd5b6102c65a03f11515611e2057600080fd5b5050506040518051905050611e33611795565b50611e3c612154565b565b6000808284811515611e4c57fe5b0490508091505092915050565b6000808284019050838110151515611e6d57fe5b8091505092915050565b6000828211151515611e8557fe5b818303905092915050565b60006002544211905090565b600080600080600080600754611ebd34600554611e5990919063ffffffff16565b11159450600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe9fbb80336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611f8657600080fd5b6102c65a03f11515611f9757600080fd5b505050604051805190509350600854341015925061209e6004546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561207557600080fd5b6102c65a03f1151561208657600080fd5b50505060405180519050611e3e90919063ffffffff16565b91506009546120b68334611e5990919063ffffffff16565b111590506120c2612156565b80156120cb5750845b80156120d45750835b80156120dd5750825b80156120e65750805b9550505050505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050151561215257600080fd5b565b565b6000806000600154421015801561216f57506002544211155b9150600034141590508180156121825750805b9250505090565b6000809050905600a165627a7a72305820d1b20d47b80de0cd5b19020caba637c7515fe0352914068d88727a1646d0af010029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000070f00ed2cc7f757400000000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000000000000005a347e20000000000000000000000000000000000000000000000000000000005a3f0a200000000000000000000000000000000000000000000000000000000000000384000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000000000140000000000000000000000009d66d75b46816d306572446f62305f72c4f6d2fd000000000000000000000000081edbef6106ab1253557451b261c1c99bade726
-----Decoded View---------------
Arg [0] : _cap (uint256): 33333333300000000000000
Arg [1] : _minWei (uint256): 500000000000000000
Arg [2] : _maxWei (uint256): 100000000000000000000
Arg [3] : _startTime (uint256): 1513389600
Arg [4] : _endTime (uint256): 1514080800
Arg [5] : _rate (uint256): 900
Arg [6] : _ownerRate (uint256): 300
Arg [7] : _bonusRate (uint256): 20
Arg [8] : _wallet (address): 0x9d66d75b46816d306572446f62305F72c4F6D2fD
Arg [9] : _tokenWallet (address): 0x081eDBeF6106Ab1253557451b261C1c99badE726
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000070f00ed2cc7f7574000
Arg [1] : 00000000000000000000000000000000000000000000000006f05b59d3b20000
Arg [2] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [3] : 000000000000000000000000000000000000000000000000000000005a347e20
Arg [4] : 000000000000000000000000000000000000000000000000000000005a3f0a20
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000384
Arg [6] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [8] : 0000000000000000000000009d66d75b46816d306572446f62305f72c4f6d2fd
Arg [9] : 000000000000000000000000081edbef6106ab1253557451b261c1c99bade726
Swarm Source
bzzr://d1b20d47b80de0cd5b19020caba637c7515fe0352914068d88727a1646d0af01
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.