More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 43 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Refund Po... | 8982802 | 1897 days ago | IN | 0 ETH | 0.00012758 | ||||
Create Refund Po... | 8982792 | 1897 days ago | IN | 0 ETH | 0.00010206 | ||||
Create Refund Po... | 8982716 | 1897 days ago | IN | 0 ETH | 0.00002551 | ||||
Create Refund Po... | 8982551 | 1897 days ago | IN | 0 ETH | 0.00002127 | ||||
Withdraw | 7178563 | 2188 days ago | IN | 0 ETH | 0.00005316 | ||||
Withdraw | 6532649 | 2299 days ago | IN | 0 ETH | 0.00028353 | ||||
Vote | 6494545 | 2305 days ago | IN | 0 ETH | 0.00011522 | ||||
Revoke Vote | 6494518 | 2305 days ago | IN | 0 ETH | 0.00011426 | ||||
Create Tap Poll | 6485666 | 2306 days ago | IN | 0 ETH | 0.00281404 | ||||
Create Refund Po... | 6431851 | 2315 days ago | IN | 0 ETH | 0.0288159 | ||||
Create Tap Poll | 6302978 | 2336 days ago | IN | 0 ETH | 0.0000905 | ||||
Create Tap Poll | 6302976 | 2336 days ago | IN | 0 ETH | 0.0028178 | ||||
Withdraw | 6141585 | 2364 days ago | IN | 0 ETH | 0.00035803 | ||||
Create Tap Poll | 6119239 | 2367 days ago | IN | 0 ETH | 0.01053613 | ||||
Withdraw | 5980769 | 2391 days ago | IN | 0 ETH | 0.00031825 | ||||
Vote | 5936306 | 2398 days ago | IN | 0 ETH | 0.00045962 | ||||
Create Tap Poll | 5935939 | 2398 days ago | IN | 0 ETH | 0.01052785 | ||||
Create Refund Po... | 5930202 | 2399 days ago | IN | 0 ETH | 0.00016433 | ||||
Withdraw | 5851508 | 2413 days ago | IN | 0 ETH | 0.00079564 | ||||
Can Withdraw | 5824498 | 2417 days ago | IN | 0 ETH | 0.00011582 | ||||
Vote | 5778808 | 2425 days ago | IN | 0 ETH | 0.00002304 | ||||
Create Refund Po... | 5778084 | 2425 days ago | IN | 0 ETH | 0.00003228 | ||||
Vote | 5765384 | 2428 days ago | IN | 0 ETH | 0.00023045 | ||||
Create Tap Poll | 5761667 | 2428 days ago | IN | 0 ETH | 0.002812 | ||||
Withdraw | 5715539 | 2436 days ago | IN | 0 ETH | 0.00059673 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
7178563 | 2188 days ago | 6,658.8560207 ETH | ||||
6532649 | 2299 days ago | 3,647.66080729 ETH | ||||
6485666 | 2306 days ago | Contract Creation | 0 ETH | |||
6431851 | 2315 days ago | Contract Creation | 0 ETH | |||
6302976 | 2336 days ago | Contract Creation | 0 ETH | |||
6141585 | 2364 days ago | 1,021.49175347 ETH | ||||
6119239 | 2367 days ago | Contract Creation | 0 ETH | |||
5980769 | 2391 days ago | 552.06452546 ETH | ||||
5935939 | 2398 days ago | Contract Creation | 0 ETH | |||
5851508 | 2413 days ago | 591.34924768 ETH | ||||
5761667 | 2428 days ago | Contract Creation | 0 ETH | |||
5715539 | 2436 days ago | 270.60050154 ETH | ||||
5715526 | 2436 days ago | 5,769 ETH | ||||
5623925 | 2453 days ago | 2 ETH | ||||
5623922 | 2453 days ago | 2.8983354 ETH | ||||
5623920 | 2453 days ago | 5 ETH | ||||
5623912 | 2453 days ago | 17 ETH | ||||
5623912 | 2453 days ago | 10 ETH | ||||
5623912 | 2453 days ago | 0.35384615 ETH | ||||
5623910 | 2453 days ago | 0.65 ETH | ||||
5623908 | 2453 days ago | 1 ETH | ||||
5623907 | 2453 days ago | 1.5 ETH | ||||
5623906 | 2453 days ago | 0.2 ETH | ||||
5623904 | 2453 days ago | 0.32 ETH | ||||
5623902 | 2453 days ago | 0.3 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
PollManagedFund
Compiler Version
v0.4.21+commit.dfe3193c
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-04-18 */ pragma solidity ^0.4.21; // File: contracts/DateTime.sol contract DateTime { /* * Date and Time utilities for ethereum contracts * */ struct _DateTime { uint16 year; uint8 month; uint8 day; uint8 hour; uint8 minute; uint8 second; uint8 weekday; } uint constant DAY_IN_SECONDS = 86400; uint constant YEAR_IN_SECONDS = 31536000; uint constant LEAP_YEAR_IN_SECONDS = 31622400; uint constant HOUR_IN_SECONDS = 3600; uint constant MINUTE_IN_SECONDS = 60; uint16 constant ORIGIN_YEAR = 1970; function isLeapYear(uint16 year) public pure returns (bool) { if (year % 4 != 0) { return false; } if (year % 100 != 0) { return true; } if (year % 400 != 0) { return false; } return true; } function leapYearsBefore(uint year) public pure returns (uint) { year -= 1; return year / 4 - year / 100 + year / 400; } function getDaysInMonth(uint8 month, uint16 year) public pure returns (uint8) { if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { return 31; } else if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } else if (isLeapYear(year)) { return 29; } else { return 28; } } function parseTimestamp(uint timestamp) internal pure returns (_DateTime dt) { uint secondsAccountedFor = 0; uint buf; uint8 i; // Year dt.year = getYear(timestamp); buf = leapYearsBefore(dt.year) - leapYearsBefore(ORIGIN_YEAR); secondsAccountedFor += LEAP_YEAR_IN_SECONDS * buf; secondsAccountedFor += YEAR_IN_SECONDS * (dt.year - ORIGIN_YEAR - buf); // Month uint secondsInMonth; for (i = 1; i <= 12; i++) { secondsInMonth = DAY_IN_SECONDS * getDaysInMonth(i, dt.year); if (secondsInMonth + secondsAccountedFor > timestamp) { dt.month = i; break; } secondsAccountedFor += secondsInMonth; } // Day for (i = 1; i <= getDaysInMonth(dt.month, dt.year); i++) { if (DAY_IN_SECONDS + secondsAccountedFor > timestamp) { dt.day = i; break; } secondsAccountedFor += DAY_IN_SECONDS; } // Hour dt.hour = getHour(timestamp); // Minute dt.minute = getMinute(timestamp); // Second dt.second = getSecond(timestamp); // Day of week. dt.weekday = getWeekday(timestamp); } function getYear(uint timestamp) public pure returns (uint16) { uint secondsAccountedFor = 0; uint16 year; uint numLeapYears; // Year year = uint16(ORIGIN_YEAR + timestamp / YEAR_IN_SECONDS); numLeapYears = leapYearsBefore(year) - leapYearsBefore(ORIGIN_YEAR); secondsAccountedFor += LEAP_YEAR_IN_SECONDS * numLeapYears; secondsAccountedFor += YEAR_IN_SECONDS * (year - ORIGIN_YEAR - numLeapYears); while (secondsAccountedFor > timestamp) { if (isLeapYear(uint16(year - 1))) { secondsAccountedFor -= LEAP_YEAR_IN_SECONDS; } else { secondsAccountedFor -= YEAR_IN_SECONDS; } year -= 1; } return year; } function getMonth(uint timestamp) public pure returns (uint8) { return parseTimestamp(timestamp).month; } function getDay(uint timestamp) public pure returns (uint8) { return parseTimestamp(timestamp).day; } function getHour(uint timestamp) public pure returns (uint8) { return uint8((timestamp / 60 / 60) % 24); } function getMinute(uint timestamp) public pure returns (uint8) { return uint8((timestamp / 60) % 60); } function getSecond(uint timestamp) public pure returns (uint8) { return uint8(timestamp % 60); } function getWeekday(uint timestamp) public pure returns (uint8) { return uint8((timestamp / DAY_IN_SECONDS + 4) % 7); } function toTimestamp(uint16 year, uint8 month, uint8 day) public pure returns (uint timestamp) { return toTimestamp(year, month, day, 0, 0, 0); } function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour) public pure returns (uint timestamp) { return toTimestamp(year, month, day, hour, 0, 0); } function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute) public pure returns (uint timestamp) { return toTimestamp(year, month, day, hour, minute, 0); } function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute, uint8 second) public pure returns (uint timestamp) { uint16 i; // Year for (i = ORIGIN_YEAR; i < year; i++) { if (isLeapYear(i)) { timestamp += LEAP_YEAR_IN_SECONDS; } else { timestamp += YEAR_IN_SECONDS; } } // Month uint8[12] memory monthDayCounts; monthDayCounts[0] = 31; if (isLeapYear(year)) { monthDayCounts[1] = 29; } else { monthDayCounts[1] = 28; } monthDayCounts[2] = 31; monthDayCounts[3] = 30; monthDayCounts[4] = 31; monthDayCounts[5] = 30; monthDayCounts[6] = 31; monthDayCounts[7] = 31; monthDayCounts[8] = 30; monthDayCounts[9] = 31; monthDayCounts[10] = 30; monthDayCounts[11] = 31; for (i = 1; i < month; i++) { timestamp += DAY_IN_SECONDS * monthDayCounts[i - 1]; } // Day timestamp += DAY_IN_SECONDS * (day - 1); // Hour timestamp += HOUR_IN_SECONDS * (hour); // Minute timestamp += MINUTE_IN_SECONDS * (minute); // Second timestamp += second; return timestamp; } } // File: contracts/ISimpleCrowdsale.sol interface ISimpleCrowdsale { function getSoftCap() external view returns(uint256); function isContributorInLists(address contributorAddress) external view returns(bool); function processReservationFundContribution( address contributor, uint256 tokenAmount, uint256 tokenBonusAmount ) external payable; } // File: contracts/fund/ICrowdsaleFund.sol /** * @title ICrowdsaleFund * @dev Fund methods used by crowdsale contract */ interface ICrowdsaleFund { /** * @dev Function accepts user`s contributed ether and logs contribution * @param contributor Contributor wallet address. */ function processContribution(address contributor) external payable; /** * @dev Function is called on the end of successful crowdsale */ function onCrowdsaleEnd() external; /** * @dev Function is called if crowdsale failed to reach soft cap */ function enableCrowdsaleRefund() external; } // File: contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ contract SafeMath { /** * @dev constructor */ function SafeMath() public { } function safeMul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { assert(a >= b); return a - b; } function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } // File: contracts/ownership/MultiOwnable.sol /** * @title MultiOwnable * @dev The MultiOwnable contract has owners addresses and provides basic authorization control * functions, this simplifies the implementation of "users permissions". */ contract MultiOwnable { address public manager; // address used to set owners address[] public owners; mapping(address => bool) public ownerByAddress; event SetOwners(address[] owners); modifier onlyOwner() { require(ownerByAddress[msg.sender] == true); _; } /** * @dev MultiOwnable constructor sets the manager */ function MultiOwnable() public { manager = msg.sender; } /** * @dev Function to set owners addresses */ function setOwners(address[] _owners) public { require(msg.sender == manager); _setOwners(_owners); } function _setOwners(address[] _owners) internal { for(uint256 i = 0; i < owners.length; i++) { ownerByAddress[owners[i]] = false; } for(uint256 j = 0; j < _owners.length; j++) { ownerByAddress[_owners[j]] = true; } owners = _owners; SetOwners(_owners); } function getOwners() public constant returns (address[]) { return owners; } } // File: contracts/token/IERC20Token.sol /** * @title IERC20Token - ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract IERC20Token { string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } // File: contracts/token/ERC20Token.sol /** * @title ERC20Token - ERC20 base implementation * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20Token is IERC20Token, SafeMath { mapping (address => uint256) public balances; mapping (address => mapping (address => uint256)) public allowed; function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(balances[msg.sender] >= _value); balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) public constant returns (uint256) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256) { return allowed[_owner][_spender]; } } // File: contracts/token/ITokenEventListener.sol /** * @title ITokenEventListener * @dev Interface which should be implemented by token listener */ interface ITokenEventListener { /** * @dev Function is called after token transfer/transferFrom * @param _from Sender address * @param _to Receiver address * @param _value Amount of tokens */ function onTokenTransfer(address _from, address _to, uint256 _value) external; } // File: contracts/token/ManagedToken.sol /** * @title ManagedToken * @dev ERC20 compatible token with issue and destroy facilities * @dev All transfers can be monitored by token event listener */ contract ManagedToken is ERC20Token, MultiOwnable { bool public allowTransfers = false; bool public issuanceFinished = false; ITokenEventListener public eventListener; event AllowTransfersChanged(bool _newState); event Issue(address indexed _to, uint256 _value); event Destroy(address indexed _from, uint256 _value); event IssuanceFinished(); modifier transfersAllowed() { require(allowTransfers); _; } modifier canIssue() { require(!issuanceFinished); _; } /** * @dev ManagedToken constructor * @param _listener Token listener(address can be 0x0) * @param _owners Owners list */ function ManagedToken(address _listener, address[] _owners) public { if(_listener != address(0)) { eventListener = ITokenEventListener(_listener); } _setOwners(_owners); } /** * @dev Enable/disable token transfers. Can be called only by owners * @param _allowTransfers True - allow False - disable */ function setAllowTransfers(bool _allowTransfers) external onlyOwner { allowTransfers = _allowTransfers; AllowTransfersChanged(_allowTransfers); } /** * @dev Set/remove token event listener * @param _listener Listener address (Contract must implement ITokenEventListener interface) */ function setListener(address _listener) public onlyOwner { if(_listener != address(0)) { eventListener = ITokenEventListener(_listener); } else { delete eventListener; } } function transfer(address _to, uint256 _value) public transfersAllowed returns (bool) { bool success = super.transfer(_to, _value); if(hasListener() && success) { eventListener.onTokenTransfer(msg.sender, _to, _value); } return success; } function transferFrom(address _from, address _to, uint256 _value) public transfersAllowed returns (bool) { bool success = super.transferFrom(_from, _to, _value); if(hasListener() && success) { eventListener.onTokenTransfer(_from, _to, _value); } return success; } function hasListener() internal view returns(bool) { if(eventListener == address(0)) { return false; } return true; } /** * @dev Issue tokens to specified wallet * @param _to Wallet address * @param _value Amount of tokens */ function issue(address _to, uint256 _value) external onlyOwner canIssue { totalSupply = safeAdd(totalSupply, _value); balances[_to] = safeAdd(balances[_to], _value); Issue(_to, _value); Transfer(address(0), _to, _value); } /** * @dev Destroy tokens on specified address (Called by owner or token holder) * @dev Fund contract address must be in the list of owners to burn token during refund * @param _from Wallet address * @param _value Amount of tokens to destroy */ function destroy(address _from, uint256 _value) external { require(ownerByAddress[msg.sender] || msg.sender == _from); require(balances[_from] >= _value); totalSupply = safeSub(totalSupply, _value); balances[_from] = safeSub(balances[_from], _value); Transfer(_from, address(0), _value); Destroy(_from, _value); } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From OpenZeppelin StandardToken.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = safeAdd(allowed[msg.sender][_spender], _addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From OpenZeppelin StandardToken.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = safeSub(oldValue, _subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Finish token issuance * @return True if success */ function finishIssuance() public onlyOwner returns (bool) { issuanceFinished = true; IssuanceFinished(); return true; } } // File: contracts/Fund.sol contract Fund is ICrowdsaleFund, SafeMath, MultiOwnable { enum FundState { Crowdsale, CrowdsaleRefund, TeamWithdraw, Refund } FundState public state = FundState.Crowdsale; ManagedToken public token; uint256 public constant INITIAL_TAP = 192901234567901; // (wei/sec) == 500 ether/month address public teamWallet; uint256 public crowdsaleEndDate; address public referralTokenWallet; address public foundationTokenWallet; address public reserveTokenWallet; address public bountyTokenWallet; address public companyTokenWallet; address public advisorTokenWallet; address public lockedTokenAddress; address public refundManager; uint256 public tap; uint256 public lastWithdrawTime = 0; uint256 public firstWithdrawAmount = 0; address public crowdsaleAddress; mapping(address => uint256) public contributions; event RefundContributor(address tokenHolder, uint256 amountWei, uint256 timestamp); event RefundHolder(address tokenHolder, uint256 amountWei, uint256 tokenAmount, uint256 timestamp); event Withdraw(uint256 amountWei, uint256 timestamp); event RefundEnabled(address initiatorAddress); /** * @dev Fund constructor * @param _teamWallet Withdraw functions transfers ether to this address * @param _referralTokenWallet Referral wallet address * @param _companyTokenWallet Company wallet address * @param _reserveTokenWallet Reserve wallet address * @param _bountyTokenWallet Bounty wallet address * @param _advisorTokenWallet Advisor wallet address * @param _owners Contract owners */ function Fund( address _teamWallet, address _referralTokenWallet, address _foundationTokenWallet, address _companyTokenWallet, address _reserveTokenWallet, address _bountyTokenWallet, address _advisorTokenWallet, address _refundManager, address[] _owners ) public { teamWallet = _teamWallet; referralTokenWallet = _referralTokenWallet; foundationTokenWallet = _foundationTokenWallet; companyTokenWallet = _companyTokenWallet; reserveTokenWallet = _reserveTokenWallet; bountyTokenWallet = _bountyTokenWallet; advisorTokenWallet = _advisorTokenWallet; refundManager = _refundManager; _setOwners(_owners); } modifier withdrawEnabled() { require(canWithdraw()); _; } modifier onlyCrowdsale() { require(msg.sender == crowdsaleAddress); _; } function canWithdraw() public returns(bool); function setCrowdsaleAddress(address _crowdsaleAddress) public onlyOwner { require(crowdsaleAddress == address(0)); crowdsaleAddress = _crowdsaleAddress; } function setTokenAddress(address _tokenAddress) public onlyOwner { require(address(token) == address(0)); token = ManagedToken(_tokenAddress); } function setLockedTokenAddress(address _lockedTokenAddress) public onlyOwner { require(address(lockedTokenAddress) == address(0)); lockedTokenAddress = _lockedTokenAddress; } /** * @dev Process crowdsale contribution */ function processContribution(address contributor) external payable onlyCrowdsale { require(state == FundState.Crowdsale); uint256 totalContribution = safeAdd(contributions[contributor], msg.value); contributions[contributor] = totalContribution; } /** * @dev Callback is called after crowdsale finalization if soft cap is reached */ function onCrowdsaleEnd() external onlyCrowdsale { state = FundState.TeamWithdraw; ISimpleCrowdsale crowdsale = ISimpleCrowdsale(crowdsaleAddress); firstWithdrawAmount = safeDiv(crowdsale.getSoftCap(), 2); lastWithdrawTime = now; tap = INITIAL_TAP; crowdsaleEndDate = now; } /** * @dev Callback is called after crowdsale finalization if soft cap is not reached */ function enableCrowdsaleRefund() external onlyCrowdsale { require(state == FundState.Crowdsale); state = FundState.CrowdsaleRefund; } /** * @dev Function is called by contributor to refund payments if crowdsale failed to reach soft cap */ function refundCrowdsaleContributor() external { require(state == FundState.CrowdsaleRefund); require(contributions[msg.sender] > 0); uint256 refundAmount = contributions[msg.sender]; contributions[msg.sender] = 0; token.destroy(msg.sender, token.balanceOf(msg.sender)); msg.sender.transfer(refundAmount); RefundContributor(msg.sender, refundAmount, now); } /** * @dev Function is called by owner to refund payments if crowdsale failed to reach soft cap */ function autoRefundCrowdsaleContributor(address contributorAddress) external { require(ownerByAddress[msg.sender] == true || msg.sender == refundManager); require(state == FundState.CrowdsaleRefund); require(contributions[contributorAddress] > 0); uint256 refundAmount = contributions[contributorAddress]; contributions[contributorAddress] = 0; token.destroy(contributorAddress, token.balanceOf(contributorAddress)); contributorAddress.transfer(refundAmount); RefundContributor(contributorAddress, refundAmount, now); } /** * @dev Decrease tap amount * @param _tap New tap value */ function decTap(uint256 _tap) external onlyOwner { require(state == FundState.TeamWithdraw); require(_tap < tap); tap = _tap; } function getCurrentTapAmount() public constant returns(uint256) { if(state != FundState.TeamWithdraw) { return 0; } return calcTapAmount(); } function calcTapAmount() internal view returns(uint256) { uint256 amount = safeMul(safeSub(now, lastWithdrawTime), tap); if(address(this).balance < amount) { amount = address(this).balance; } return amount; } function firstWithdraw() public onlyOwner withdrawEnabled { require(firstWithdrawAmount > 0); uint256 amount = firstWithdrawAmount; firstWithdrawAmount = 0; teamWallet.transfer(amount); Withdraw(amount, now); } /** * @dev Withdraw tap amount */ function withdraw() public onlyOwner withdrawEnabled { require(state == FundState.TeamWithdraw); uint256 amount = calcTapAmount(); lastWithdrawTime = now; teamWallet.transfer(amount); Withdraw(amount, now); } // Refund /** * @dev Called to start refunding */ function enableRefund() internal { require(state == FundState.TeamWithdraw); state = FundState.Refund; token.destroy(lockedTokenAddress, token.balanceOf(lockedTokenAddress)); token.destroy(companyTokenWallet, token.balanceOf(companyTokenWallet)); token.destroy(reserveTokenWallet, token.balanceOf(reserveTokenWallet)); token.destroy(foundationTokenWallet, token.balanceOf(foundationTokenWallet)); token.destroy(bountyTokenWallet, token.balanceOf(bountyTokenWallet)); token.destroy(referralTokenWallet, token.balanceOf(referralTokenWallet)); token.destroy(advisorTokenWallet, token.balanceOf(advisorTokenWallet)); RefundEnabled(msg.sender); } /** * @dev Function is called by contributor to refund * Buy user tokens for refundTokenPrice and destroy them */ function refundTokenHolder() public { require(state == FundState.Refund); uint256 tokenBalance = token.balanceOf(msg.sender); require(tokenBalance > 0); uint256 refundAmount = safeDiv(safeMul(tokenBalance, address(this).balance), token.totalSupply()); require(refundAmount > 0); token.destroy(msg.sender, tokenBalance); msg.sender.transfer(refundAmount); RefundHolder(msg.sender, refundAmount, tokenBalance, now); } } // File: contracts/fund/IPollManagedFund.sol /** * @title IPollManagedFund * @dev Fund callbacks used by polling contracts */ interface IPollManagedFund { /** * @dev TapPoll callback * @param agree True if new tap value is accepted by majority of contributors * @param _tap New tap value */ function onTapPollFinish(bool agree, uint256 _tap) external; /** * @dev RefundPoll callback * @param agree True if contributors decided to allow refunding */ function onRefundPollFinish(bool agree) external; } // File: contracts/poll/BasePoll.sol /** * @title BasePoll * @dev Abstract base class for polling contracts */ contract BasePoll is SafeMath { struct Vote { uint256 time; uint256 weight; bool agree; } uint256 public constant MAX_TOKENS_WEIGHT_DENOM = 1000; IERC20Token public token; address public fundAddress; uint256 public startTime; uint256 public endTime; bool checkTransfersAfterEnd; uint256 public yesCounter = 0; uint256 public noCounter = 0; uint256 public totalVoted = 0; bool public finalized; mapping(address => Vote) public votesByAddress; modifier checkTime() { require(now >= startTime && now <= endTime); _; } modifier notFinalized() { require(!finalized); _; } /** * @dev BasePoll constructor * @param _tokenAddress ERC20 compatible token contract address * @param _fundAddress Fund contract address * @param _startTime Poll start time * @param _endTime Poll end time */ function BasePoll(address _tokenAddress, address _fundAddress, uint256 _startTime, uint256 _endTime, bool _checkTransfersAfterEnd) public { require(_tokenAddress != address(0)); require(_startTime >= now && _endTime > _startTime); token = IERC20Token(_tokenAddress); fundAddress = _fundAddress; startTime = _startTime; endTime = _endTime; finalized = false; checkTransfersAfterEnd = _checkTransfersAfterEnd; } /** * @dev Process user`s vote * @param agree True if user endorses the proposal else False */ function vote(bool agree) public checkTime { require(votesByAddress[msg.sender].time == 0); uint256 voiceWeight = token.balanceOf(msg.sender); uint256 maxVoiceWeight = safeDiv(token.totalSupply(), MAX_TOKENS_WEIGHT_DENOM); voiceWeight = voiceWeight <= maxVoiceWeight ? voiceWeight : maxVoiceWeight; if(agree) { yesCounter = safeAdd(yesCounter, voiceWeight); } else { noCounter = safeAdd(noCounter, voiceWeight); } votesByAddress[msg.sender].time = now; votesByAddress[msg.sender].weight = voiceWeight; votesByAddress[msg.sender].agree = agree; totalVoted = safeAdd(totalVoted, 1); } /** * @dev Revoke user`s vote */ function revokeVote() public checkTime { require(votesByAddress[msg.sender].time > 0); uint256 voiceWeight = votesByAddress[msg.sender].weight; bool agree = votesByAddress[msg.sender].agree; votesByAddress[msg.sender].time = 0; votesByAddress[msg.sender].weight = 0; votesByAddress[msg.sender].agree = false; totalVoted = safeSub(totalVoted, 1); if(agree) { yesCounter = safeSub(yesCounter, voiceWeight); } else { noCounter = safeSub(noCounter, voiceWeight); } } /** * @dev Function is called after token transfer from user`s wallet to check and correct user`s vote * */ function onTokenTransfer(address tokenHolder, uint256 amount) public { require(msg.sender == fundAddress); if(votesByAddress[tokenHolder].time == 0) { return; } if(!checkTransfersAfterEnd) { if(finalized || (now < startTime || now > endTime)) { return; } } if(token.balanceOf(tokenHolder) >= votesByAddress[tokenHolder].weight) { return; } uint256 voiceWeight = amount; if(amount > votesByAddress[tokenHolder].weight) { voiceWeight = votesByAddress[tokenHolder].weight; } if(votesByAddress[tokenHolder].agree) { yesCounter = safeSub(yesCounter, voiceWeight); } else { noCounter = safeSub(noCounter, voiceWeight); } votesByAddress[tokenHolder].weight = safeSub(votesByAddress[tokenHolder].weight, voiceWeight); } /** * Finalize poll and call onPollFinish callback with result */ function tryToFinalize() public notFinalized returns(bool) { if(now < endTime) { return false; } finalized = true; onPollFinish(isSubjectApproved()); return true; } function isNowApproved() public view returns(bool) { return isSubjectApproved(); } function isSubjectApproved() internal view returns(bool) { return yesCounter > noCounter; } /** * @dev callback called after poll finalization */ function onPollFinish(bool agree) internal; } // File: contracts/RefundPoll.sol /** * @title RefundPoll * @dev Enables fund refund mode */ contract RefundPoll is BasePoll { uint256 public holdEndTime = 0; /** * RefundPoll constructor * @param _tokenAddress ERC20 compatible token contract address * @param _fundAddress Fund contract address * @param _startTime Poll start time * @param _endTime Poll end time */ function RefundPoll( address _tokenAddress, address _fundAddress, uint256 _startTime, uint256 _endTime, uint256 _holdEndTime, bool _checkTransfersAfterEnd ) public BasePoll(_tokenAddress, _fundAddress, _startTime, _endTime, _checkTransfersAfterEnd) { holdEndTime = _holdEndTime; } function tryToFinalize() public returns(bool) { if(holdEndTime > 0 && holdEndTime > endTime) { require(now >= holdEndTime); } else { require(now >= endTime); } finalized = true; onPollFinish(isSubjectApproved()); return true; } function isSubjectApproved() internal view returns(bool) { return yesCounter > noCounter && yesCounter >= safeDiv(token.totalSupply(), 3); } function onPollFinish(bool agree) internal { IPollManagedFund fund = IPollManagedFund(fundAddress); fund.onRefundPollFinish(agree); } } // File: contracts/TapPoll.sol /** * @title TapPoll * @dev Poll to increase tap amount */ contract TapPoll is BasePoll { uint256 public tap; uint256 public minTokensPerc = 0; /** * TapPoll constructor * @param _tap New tap value * @param _tokenAddress ERC20 compatible token contract address * @param _fundAddress Fund contract address * @param _startTime Poll start time * @param _endTime Poll end time * @param _minTokensPerc - Min percent of tokens from totalSupply where poll is considered to be fulfilled */ function TapPoll( uint256 _tap, address _tokenAddress, address _fundAddress, uint256 _startTime, uint256 _endTime, uint256 _minTokensPerc ) public BasePoll(_tokenAddress, _fundAddress, _startTime, _endTime, false) { tap = _tap; minTokensPerc = _minTokensPerc; } function onPollFinish(bool agree) internal { IPollManagedFund fund = IPollManagedFund(fundAddress); fund.onTapPollFinish(agree, tap); } function getVotedTokensPerc() public view returns(uint256) { return safeDiv(safeMul(safeAdd(yesCounter, noCounter), 100), token.totalSupply()); } function isSubjectApproved() internal view returns(bool) { return yesCounter > noCounter && getVotedTokensPerc() >= minTokensPerc; } } // File: contracts/PollManagedFund.sol /** * @title PollManagedFund * @dev Fund controlled by users */ contract PollManagedFund is Fund, DateTime, ITokenEventListener { uint256 public constant TAP_POLL_DURATION = 3 days; uint256 public constant REFUND_POLL_DURATION = 7 days; uint256 public constant MAX_VOTED_TOKEN_PERC = 10; TapPoll public tapPoll; RefundPoll public refundPoll; uint256 public minVotedTokensPerc = 0; uint256 public secondRefundPollDate = 0; bool public isWithdrawEnabled = true; uint256[] public refundPollDates = [ 1530403200, // 01.07.2018 1538352000, // 01.10.2018 1546300800, // 01.01.2019 1554076800, // 01.04.2019 1561939200, // 01.07.2019 1569888000, // 01.10.2019 1577836800, // 01.01.2020 1585699200 // 01.04.2020 ]; modifier onlyTokenHolder() { require(token.balanceOf(msg.sender) > 0); _; } event TapPollCreated(); event TapPollFinished(bool approved, uint256 _tap); event RefundPollCreated(); event RefundPollFinished(bool approved); /** * @dev PollManagedFund constructor * params - see Fund constructor */ function PollManagedFund( address _teamWallet, address _referralTokenWallet, address _foundationTokenWallet, address _companyTokenWallet, address _reserveTokenWallet, address _bountyTokenWallet, address _advisorTokenWallet, address _refundManager, address[] _owners ) public Fund(_teamWallet, _referralTokenWallet, _foundationTokenWallet, _companyTokenWallet, _reserveTokenWallet, _bountyTokenWallet, _advisorTokenWallet, _refundManager, _owners) { } function canWithdraw() public returns(bool) { if( address(refundPoll) != address(0) && !refundPoll.finalized() && refundPoll.holdEndTime() > 0 && now >= refundPoll.holdEndTime() && refundPoll.isNowApproved() ) { return false; } return isWithdrawEnabled; } /** * @dev ITokenEventListener implementation. Notify active poll contracts about token transfers */ function onTokenTransfer(address _from, address /*_to*/, uint256 _value) external { require(msg.sender == address(token)); if(address(tapPoll) != address(0) && !tapPoll.finalized()) { tapPoll.onTokenTransfer(_from, _value); } if(address(refundPoll) != address(0) && !refundPoll.finalized()) { refundPoll.onTokenTransfer(_from, _value); } } /** * @dev Update minVotedTokensPerc value after tap poll. * Set new value == 50% from current voted tokens amount */ function updateMinVotedTokens(uint256 _minVotedTokensPerc) internal { uint256 newPerc = safeDiv(_minVotedTokensPerc, 2); if(newPerc > MAX_VOTED_TOKEN_PERC) { minVotedTokensPerc = MAX_VOTED_TOKEN_PERC; return; } minVotedTokensPerc = newPerc; } // Tap poll function createTapPoll(uint8 tapIncPerc) public onlyOwner { require(state == FundState.TeamWithdraw); require(tapPoll == address(0)); require(getDay(now) == 10); require(tapIncPerc <= 50); uint256 _tap = safeAdd(tap, safeDiv(safeMul(tap, tapIncPerc), 100)); uint256 startTime = now; uint256 endTime = startTime + TAP_POLL_DURATION; tapPoll = new TapPoll(_tap, token, this, startTime, endTime, minVotedTokensPerc); TapPollCreated(); } function onTapPollFinish(bool agree, uint256 _tap) external { require(msg.sender == address(tapPoll) && tapPoll.finalized()); if(agree) { tap = _tap; } updateMinVotedTokens(tapPoll.getVotedTokensPerc()); TapPollFinished(agree, _tap); delete tapPoll; } // Refund poll function checkRefundPollDate() internal view returns(bool) { if(secondRefundPollDate > 0 && now >= secondRefundPollDate && now <= safeAdd(secondRefundPollDate, 1 days)) { return true; } for(uint i; i < refundPollDates.length; i++) { if(now >= refundPollDates[i] && now <= safeAdd(refundPollDates[i], 1 days)) { return true; } } return false; } function createRefundPoll() public onlyTokenHolder { require(state == FundState.TeamWithdraw); require(address(refundPoll) == address(0)); require(checkRefundPollDate()); if(secondRefundPollDate > 0 && now > safeAdd(secondRefundPollDate, 1 days)) { secondRefundPollDate = 0; } uint256 startTime = now; uint256 endTime = startTime + REFUND_POLL_DURATION; bool isFirstRefund = secondRefundPollDate == 0; uint256 holdEndTime = 0; if(isFirstRefund) { holdEndTime = toTimestamp( getYear(startTime), getMonth(startTime) + 1, 1 ); } refundPoll = new RefundPoll(token, this, startTime, endTime, holdEndTime, isFirstRefund); RefundPollCreated(); } function onRefundPollFinish(bool agree) external { require(msg.sender == address(refundPoll) && refundPoll.finalized()); if(agree) { if(secondRefundPollDate > 0) { enableRefund(); } else { uint256 startTime = refundPoll.startTime(); secondRefundPollDate = toTimestamp( getYear(startTime), getMonth(startTime) + 2, 1 ); isWithdrawEnabled = false; } } else { secondRefundPollDate = 0; isWithdrawEnabled = true; } RefundPollFinished(agree); delete refundPoll; } function forceRefund() public { require(msg.sender == refundManager); enableRefund(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"owners","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tapIncPerc","type":"uint8"}],"name":"createTapPoll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TAP_POLL_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"REFUND_POLL_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleEndDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_crowdsaleAddress","type":"address"}],"name":"setCrowdsaleAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"}],"name":"setTokenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"firstWithdrawAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agree","type":"bool"},{"name":"_tap","type":"uint256"}],"name":"onTapPollFinish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tap","type":"uint256"}],"name":"decTap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enableCrowdsaleRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getHour","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"createRefundPoll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"contributions","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"manager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getWeekday","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"teamWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"refundPollDates","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"onCrowdsaleEnd","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"},{"name":"minute","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getDay","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"","type":"address"},{"name":"_value","type":"uint256"}],"name":"onTokenTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTapAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_lockedTokenAddress","type":"address"}],"name":"setLockedTokenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"minVotedTokensPerc","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refundManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isWithdrawEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agree","type":"bool"}],"name":"onRefundPollFinish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getSecond","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"foundationTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_TAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"},{"name":"minute","type":"uint8"},{"name":"second","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"reserveTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getYear","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"MAX_VOTED_TOKEN_PERC","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getMonth","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"lockedTokenAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"}],"name":"isLeapYear","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"contributor","type":"address"}],"name":"processContribution","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"lastWithdrawTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint256"}],"name":"leapYearsBefore","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"month","type":"uint8"},{"name":"year","type":"uint16"}],"name":"getDaysInMonth","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"secondRefundPollDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"canWithdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"forceRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advisorTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tapPoll","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bountyTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refundPoll","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"contributorAddress","type":"address"}],"name":"autoRefundCrowdsaleContributor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"firstWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"ownerByAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"companyTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owners","type":"address[]"}],"name":"setOwners","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getMinute","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"refundTokenHolder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refundCrowdsaleContributor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_teamWallet","type":"address"},{"name":"_referralTokenWallet","type":"address"},{"name":"_foundationTokenWallet","type":"address"},{"name":"_companyTokenWallet","type":"address"},{"name":"_reserveTokenWallet","type":"address"},{"name":"_bountyTokenWallet","type":"address"},{"name":"_advisorTokenWallet","type":"address"},{"name":"_refundManager","type":"address"},{"name":"_owners","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"TapPollCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"approved","type":"bool"},{"indexed":false,"name":"_tap","type":"uint256"}],"name":"TapPollFinished","type":"event"},{"anonymous":false,"inputs":[],"name":"RefundPollCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"approved","type":"bool"}],"name":"RefundPollFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenHolder","type":"address"},{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"RefundContributor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenHolder","type":"address"},{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"RefundHolder","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"initiatorAddress","type":"address"}],"name":"RefundEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owners","type":"address[]"}],"name":"SetOwners","type":"event"}]
Contract Creation Code
606060409081526003805460ff199081169091556000600f8190556010819055601581905560165560178054909116600117905561010090519081016040908152635b3819808252635bb163806020830152635c2aad8090820152635ca154806060820152635d194d006080820152635d92970060a0820152635e0be10060c0820152635e83d98060e08201526200009c90601890600862000313565b503415620000a957600080fd5b60405162004a7038038062004a7083398101604052808051919060200180519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805160008054600160a060020a031990811633600160a060020a03908116919091179092556004805482168e84161790556006805482168d84161790556007805482168c8416179055600a805482168b84161790556008805482168a8416179055600980548216898416179055600b80548216888416179055600d8054909116918616919091179055919091019050888888888888888888620001a881640100000000620001c0810262002f521704565b5050505050505050505050505050505050506200041a565b6000805b6001548210156200022657600060026000600185815481101515620001e557fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff191691151591909117905560019190910190620001c4565b5060005b825181101562000282576001600260008584815181106200024757fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790556001016200022a565b6001838051620002979291602001906200036b565b507f9465cd279c2de393c5568ae444599e3644e3d1864ca2c05ced8a654df2aea3cb8360405160208082528190810183818151815260200191508051906020019060200280838360005b83811015620002fb578082015183820152602001620002e1565b505050509050019250505060405180910390a1505050565b82805482825590600052602060002090810192821562000359579160200282015b8281111562000359578251829063ffffffff1690559160200191906001019062000334565b5062000367929150620003d3565b5090565b828054828255906000526020600020908101928215620003c5579160200282015b82811115620003c55782518254600160a060020a031916600160a060020a0391909116178255602092909201916001909101906200038c565b5062000367929150620003f3565b620003f091905b80821115620003675760008155600101620003da565b90565b620003f091905b8082111562000367578054600160a060020a0319168155600101620003fa565b614646806200042a6000396000f300606060405260043610620003355763ffffffff60e060020a600035041663025e7c2781146200033a578063026eca12146200036f57806302fc28c4146200038d57806308867fc214620003b5578063192f107614620003cb5780631f35bc4014620003e157806326a4e8d2146200040357806326b52faf146200042557806329c90b63146200043b57806331d2f891146200045957806336e61cf7146200046f5780633b64e77e14620004885780633ccfd60b146200049e5780633e239e1a14620004b457806340e6b00a14620004e357806342e94c9014620004f9578063481c6a75146200051b5780634ac1ad78146200053157806359927044146200054a5780635f58384614620005605780636252c127146200057957806362ba9687146200058f57806365c7284014620005c4578063677ba3d314620005dd578063774a97cf14620006085780637ddbf0ed146200061e5780637f791833146200064057806384219204146200066f57806387174c3e1462000685578063880dc4e6146200069b57806389ea2cb714620006c55780638aa001fc14620006e05780638c8d98a014620006f9578063903171ae14620007225780639054bbb614620007385780639054bdec146200074e57806392a0fd64146200078957806392d66313146200079f578063962c9c8d14620007cf578063a0e67e2b14620007e5578063a324ad241462000850578063a666ff3c1462000869578063a6f0e577146200087f578063a78a651a146200089c578063ab23151114620008b2578063b199993714620008c8578063b238ad0e14620008e1578063b465e52f1462000904578063b51459fe146200091a578063bd7427f81462000930578063c19d93fb1462000946578063c5f5ce211462000981578063cae6b9c51462000997578063cc96019f14620009ad578063d0e6cfec14620009c3578063d66f146d14620009d9578063e2d2a86814620009ef578063e9b5a2f71462000a11578063eb6b192f1462000a27578063f190a7931462000a49578063fa4d36981462000a5f578063fa93f8831462000ab1578063fbbfe8301462000aca578063fc0c546a1462000ae0578063fd2210311462000af6578063ff01ffa81462000b0c575b600080fd5b34156200034657600080fd5b6200035360043562000b22565b604051600160a060020a03909116815260200160405180910390f35b34156200037b57600080fd5b6200038b60ff6004351662000b4b565b005b34156200039957600080fd5b620003a362000cdf565b60405190815260200160405180910390f35b3415620003c157600080fd5b620003a362000ce6565b3415620003d757600080fd5b620003a362000ced565b3415620003ed57600080fd5b6200038b600160a060020a036004351662000cf3565b34156200040f57600080fd5b6200038b600160a060020a036004351662000d57565b34156200043157600080fd5b620003a362000dd3565b34156200044757600080fd5b6200038b600435151560243562000dd9565b34156200046557600080fd5b6200035362000f18565b34156200047b57600080fd5b6200038b60043562000f27565b34156200049457600080fd5b6200038b62000f85565b3415620004aa57600080fd5b6200038b62000fcf565b3415620004c057600080fd5b620004cd600435620010b1565b60405160ff909116815260200160405180910390f35b3415620004ef57600080fd5b6200038b620010cf565b34156200050557600080fd5b620003a3600160a060020a0360043516620012db565b34156200052757600080fd5b62000353620012ed565b34156200053d57600080fd5b620004cd600435620012fc565b34156200055657600080fd5b620003536200130f565b34156200056c57600080fd5b620003a36004356200131e565b34156200058557600080fd5b6200038b6200133e565b34156200059b57600080fd5b620003a361ffff6004351660ff60243581169060443581169060643581169060843516620013e9565b3415620005d057600080fd5b620004cd60043562001406565b3415620005e957600080fd5b6200038b600160a060020a03600435811690602435166044356200141d565b34156200061457600080fd5b620003a362001601565b34156200062a57600080fd5b6200038b600160a060020a036004351662001636565b34156200064c57600080fd5b620003a361ffff6004351660ff602435811690604435811690606435166200169a565b34156200067b57600080fd5b620003a3620016b6565b34156200069157600080fd5b62000353620016bc565b3415620006a757600080fd5b620006b1620016cb565b604051901515815260200160405180910390f35b3415620006d157600080fd5b6200038b6004351515620016d4565b3415620006ec57600080fd5b620004cd60043562001868565b34156200070557600080fd5b620003a361ffff6004351660ff6024358116906044351662001873565b34156200072e57600080fd5b620003536200188f565b34156200074457600080fd5b620003a36200189e565b34156200075a57600080fd5b620003a361ffff6004351660ff60243581169060443581169060643581169060843581169060a43516620018a8565b34156200079557600080fd5b62000353620019fd565b3415620007ab57600080fd5b620007b860043562001a0c565b60405161ffff909116815260200160405180910390f35b3415620007db57600080fd5b620003a362001aa6565b3415620007f157600080fd5b620007fb62001aab565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156200083c57808201518382015260200162000822565b505050509050019250505060405180910390f35b34156200085c57600080fd5b620004cd60043562001b17565b34156200087557600080fd5b6200035362001b2e565b34156200088b57600080fd5b620006b161ffff6004351662001b3d565b6200038b600160a060020a036004351662001b91565b3415620008be57600080fd5b620003a362001c14565b3415620008d457600080fd5b620003a360043562001c1a565b3415620008ed57600080fd5b620004cd60ff6004351661ffff6024351662001c35565b34156200091057600080fd5b620003a362001d0e565b34156200092657600080fd5b620006b162001d14565b34156200093c57600080fd5b6200038b62001eca565b34156200095257600080fd5b6200095c62001ef2565b604051808260038111156200096d57fe5b60ff16815260200191505060405180910390f35b34156200098d57600080fd5b6200035362001efb565b3415620009a357600080fd5b6200035362001f0a565b3415620009b957600080fd5b6200035362001f19565b3415620009cf57600080fd5b6200035362001f28565b3415620009e557600080fd5b6200035362001f37565b3415620009fb57600080fd5b6200038b600160a060020a036004351662001f46565b341562000a1d57600080fd5b6200038b6200214a565b341562000a3357600080fd5b620006b1600160a060020a0360043516620021da565b341562000a5557600080fd5b62000353620021ef565b341562000a6b57600080fd5b6200038b6004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650620021fe95505050505050565b341562000abd57600080fd5b620004cd60043562002228565b341562000ad657600080fd5b6200038b62002234565b341562000aec57600080fd5b6200035362002464565b341562000b0257600080fd5b620003a362002478565b341562000b1857600080fd5b6200038b6200247e565b600180548290811062000b3157fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a0333166000908152600260205260408120548190819060ff16151560011462000b7a57600080fd5b60026003805460ff169081111562000b8e57fe5b1462000b9957600080fd5b601354600160a060020a03161562000bb057600080fd5b62000bbb4262001406565b60ff16600a14151562000bcd57600080fd5b603260ff8516111562000bdf57600080fd5b62000c09600e5462000c0362000bfb600e548860ff166200263c565b60646200266a565b62002682565b92504291506203f4808201905082600360019054906101000a9004600160a060020a031630848460155462000c3d620030b8565b958652600160a060020a039485166020870152929093166040808601919091526060850191909152608084019290925260a083015260c09091019051809103906000f080151562000c8d57600080fd5b60138054600160a060020a031916600160a060020a03929092169190911790557f330d2f37998c8839fca77205925adc69e2c4aa616175f8b357f42f84d06c454960405160405180910390a150505050565b6203f48081565b62093a8081565b60055481565b600160a060020a03331660009081526002602052604090205460ff16151560011462000d1e57600080fd5b601154600160a060020a03161562000d3557600080fd5b60118054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a03331660009081526002602052604090205460ff16151560011462000d8257600080fd5b6003546101009004600160a060020a03161562000d9e57600080fd5b60038054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60105481565b60135433600160a060020a03908116911614801562000e4c5750601354600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000e3357600080fd5b5af1151562000e4157600080fd5b505050604051805190505b151562000e5857600080fd5b811562000e6557600e8190555b60135462000ec890600160a060020a0316632c24909c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000eaa57600080fd5b5af1151562000eb857600080fd5b5050506040518051905062002692565b7fecb94f7dd81b39de2b8d95fa8a4d9f0a8723d7a974187fef4fa5305ca5d162488282604051911515825260208201526040908101905180910390a1505060138054600160a060020a0319169055565b601154600160a060020a031681565b600160a060020a03331660009081526002602052604090205460ff16151560011462000f5257600080fd5b60026003805460ff169081111562000f6657fe5b1462000f7157600080fd5b600e54811062000f8057600080fd5b600e55565b60115433600160a060020a0390811691161462000fa157600080fd5b60006003805460ff169081111562000fb557fe5b1462000fc057600080fd5b6003805460ff19166001179055565b600160a060020a03331660009081526002602052604081205460ff16151560011462000ffa57600080fd5b6200100462001d14565b15156200101057600080fd5b60026003805460ff16908111156200102457fe5b146200102f57600080fd5b62001039620026c2565b42600f55600454909150600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156200107457600080fd5b7f56ca301a9219608c91e7bcee90e083c19671d2cdcc96752c7af291cee5f9c8c8814260405191825260208201526040908101905180910390a150565b60006018603c8084045b04811515620010c657fe5b0690505b919050565b6000806000806000600360019054906101000a9004600160a060020a0316600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200113b57600080fd5b5af115156200114957600080fd5b505050604051805190501115156200116057600080fd5b60026003805460ff16908111156200117457fe5b146200117f57600080fd5b601454600160a060020a0316156200119657600080fd5b620011a06200270a565b1515620011ac57600080fd5b6000601654118015620011ce5750620011cb6016546201518062002682565b42115b15620011da5760006016555b505060165442925062093a808301915015600081156200121c5762001219620012038562001a0c565b6200120e8662001b17565b600101600162001873565b90505b6003546101009004600160a060020a031630858584866200123c620030c9565b600160a060020a0396871681529490951660208501526040808501939093526060840191909152608083015291151560a082015260c0019051809103906000f08015156200128957600080fd5b60148054600160a060020a031916600160a060020a03929092169190911790557fd1a79c97f023d07d5c5533b0887300f81e113759deeb9531a541b93341ceab7f60405160405180910390a150505050565b60126020526000908152604090205481565b600054600160a060020a031681565b60006007600462015180840401620010c6565b600454600160a060020a031681565b60188054829081106200132d57fe5b600091825260209091200154905081565b60115460009033600160a060020a039081169116146200135d57600080fd5b506003805460ff19166002179055601154600160a060020a0316620013d081634d52a5126040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620013b057600080fd5b5af11515620013be57600080fd5b5050506040518051905060026200266a565b6010555042600f81905565af7151902add600e55600555565b6000620013fc86868686866000620018a8565b9695505050505050565b60006200141382620027cf565b6040015192915050565b60035433600160a060020a0390811661010090920416146200143e57600080fd5b601354600160a060020a031615801590620014ae5750601354600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200149457600080fd5b5af11515620014a257600080fd5b50505060405180519050155b156200151d57601354600160a060020a031663c734f917848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200150b57600080fd5b5af115156200151957600080fd5b5050505b601454600160a060020a0316158015906200158d5750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200157357600080fd5b5af115156200158157600080fd5b50505060405180519050155b15620015fc57601454600160a060020a031663c734f917848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620015ea57600080fd5b5af11515620015f857600080fd5b5050505b505050565b600060026003805460ff16908111156200161757fe5b14620016265750600062001633565b62001630620026c2565b90505b90565b600160a060020a03331660009081526002602052604090205460ff1615156001146200166157600080fd5b600c54600160a060020a0316156200167857600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b6000620016ad85858585600080620018a8565b95945050505050565b60155481565b600d54600160a060020a031681565b60175460ff1681565b60145460009033600160a060020a0390811691161480156200174a5750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200173157600080fd5b5af115156200173f57600080fd5b505050604051805190505b15156200175657600080fd5b81156200180c576000601654111562001779576200177362002932565b62001806565b601454600160a060020a03166378e979256040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620017b957600080fd5b5af11515620017c757600080fd5b505050604051805190509050620017f8620017e28262001a0c565b620017ed8362001b17565b600201600162001873565b6016556017805460ff191690555b6200181f565b60006016556017805460ff191660011790555b7f9ab7d9b3f53fbde0442a57f23d2eca52d14cd437e392cf8896a96f3647dff6db82604051901515815260200160405180910390a1505060148054600160a060020a0319169055565b6000603c82620010c6565b6000620018878484846000806000620018a8565b949350505050565b600754600160a060020a031681565b65af7151902add81565b600080620018b5620030da565b6107b291505b8861ffff168261ffff1610156200190257620018d78262001b3d565b15620018ec576301e2850083019250620018f6565b6301e13380830192505b600190910190620018bb565b601f8152620019118962001b3d565b156200192457601d60208201526200192c565b601c60208201525b601f60408201819052601e606083018190526080830182905260a0830181905260c0830182905260e0830182905261010083018190526101208301829052610140830152610160820152600191505b8760ff168261ffff161015620019bf578061ffff600019840116600c8110620019a057fe5b602002015160ff1662015180028301925081806001019250506200197b565b6001870360ff166201518002830192508560ff16610e1002830192508460ff16603c02830192508360ff168301925082925050509695505050505050565b600854600160a060020a031681565b6000806107b26301e133808404810190829062001a299062001c1a565b62001a388361ffff1662001c1a565b039050806301e285000283019250806107b2830361ffff16036301e1338002830192505b8483111562001a9e5762001a736001830362001b3d565b1562001a88576301e285008303925062001a92565b6301e13380830392505b60018203915062001a5c565b509392505050565b600a81565b62001ab562003104565b600180548060200260200160405190810160405280929190818152602001828054801562001b0d57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831162001aee575b5050505050905090565b600062001b2482620027cf565b6020015192915050565b600c54600160a060020a031681565b6000600382161562001b5257506000620010ca565b606461ffff83160661ffff161562001b6d57506001620010ca565b61019061ffff83160661ffff161562001b8957506000620010ca565b506001919050565b60115460009033600160a060020a0390811691161462001bb057600080fd5b60006003805460ff169081111562001bc457fe5b1462001bcf57600080fd5b600160a060020a03821660009081526012602052604090205462001bf4903462002682565b600160a060020a0390921660009081526012602052604090209190915550565b600f5481565b60001901600061019082046064830460048404030192915050565b60008260ff166001148062001c4d57508260ff166003145b8062001c5c57508260ff166005145b8062001c6b57508260ff166007145b8062001c7a57508260ff166008145b8062001c8957508260ff16600a145b8062001c9857508260ff16600c145b1562001ca75750601f62001d08565b8260ff166004148062001cbd57508260ff166006145b8062001ccc57508260ff166009145b8062001cdb57508260ff16600b145b1562001cea5750601e62001d08565b62001cf58262001b3d565b1562001d045750601d62001d08565b50601c5b92915050565b60165481565b601454600090600160a060020a03161580159062001d875750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001d6d57600080fd5b5af1151562001d7b57600080fd5b50505060405180519050155b801562001dec5750601454600090600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001dd257600080fd5b5af1151562001de057600080fd5b50505060405180519050115b801562001e505750601454600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001e3457600080fd5b5af1151562001e4257600080fd5b505050604051805190504210155b801562001eb15750601454600160a060020a03166380322cbd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001e9857600080fd5b5af1151562001ea657600080fd5b505050604051805190505b1562001ec05750600062001633565b5060175460ff1690565b600d5433600160a060020a0390811691161462001ee657600080fd5b62001ef062002932565b565b60035460ff1681565b600b54600160a060020a031681565b601354600160a060020a031681565b600654600160a060020a031681565b600954600160a060020a031681565b601454600160a060020a031681565b600160a060020a03331660009081526002602052604081205460ff1615156001148062001f815750600d5433600160a060020a039081169116145b151562001f8d57600080fd5b60016003805460ff169081111562001fa157fe5b1462001fac57600080fd5b600160a060020a0382166000908152601260205260408120541162001fd057600080fd5b50600160a060020a03808216600090815260126020526040808220805492905560035491926101009092049091169063a24835d190849083906370a082319083905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200204e57600080fd5b5af115156200205c57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620020aa57600080fd5b5af11515620020b857600080fd5b505050600160a060020a0382166108fc82150282604051600060405180830381858888f193505050501515620020ed57600080fd5b7fec44c8b7c9108bd9d48e9a929c78d5a448562d61b1113d016ba7fd99d7dc3c7c8282426040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15050565b600160a060020a03331660009081526002602052604081205460ff1615156001146200217557600080fd5b6200217f62001d14565b15156200218b57600080fd5b601054600090116200219c57600080fd5b50601080546000909155600454600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156200107457600080fd5b60026020526000908152604090205460ff1681565b600a54600160a060020a031681565b60005433600160a060020a039081169116146200221a57600080fd5b620022258162002f52565b50565b6000603c8083620010bb565b600080600380805460ff16908111156200224a57fe5b146200225557600080fd5b6003546101009004600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620022ab57600080fd5b5af11515620022b957600080fd5b505050604051805192505060008211620022d257600080fd5b6200234f620022ec8330600160a060020a0316316200263c565b6003546101009004600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200233157600080fd5b5af115156200233f57600080fd5b505050604051805190506200266a565b9050600081116200235f57600080fd5b6003546101009004600160a060020a031663a24835d1338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620023bb57600080fd5b5af11515620023c957600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f193505050501515620023ff57600080fd5b7f2fe53133356d775fd6784d23de274186e0721e0d93074ae2392acb8968bb2e51338284426040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390a15050565b6003546101009004600160a060020a031681565b600e5481565b600060016003805460ff16908111156200249457fe5b146200249f57600080fd5b600160a060020a03331660009081526012602052604081205411620024c357600080fd5b50600160a060020a0333818116600090815260126020526040808220805492905560035491936101009092049091169163a24835d19183906370a082319083905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200254057600080fd5b5af115156200254e57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200259c57600080fd5b5af11515620025aa57600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f193505050501515620025e057600080fd5b7fec44c8b7c9108bd9d48e9a929c78d5a448562d61b1113d016ba7fd99d7dc3c7c3382426040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150565b60008282028315806200265a57508284828115156200265757fe5b04145b15156200266357fe5b9392505050565b60008082848115156200267957fe5b04949350505050565b6000828201838110156200266357fe5b6000620026a18260026200266a565b9050600a811115620026b857600a601555620026be565b60158190555b5050565b600080620026e0620026d742600f54620030a5565b600e546200263c565b90508030600160a060020a0316311015620027025750600160a060020a033016315b8091505b5090565b60008060006016541180156200272257506016544210155b80156200273f57506200273b6016546201518062002682565b4211155b156200274f576001915062002706565b601854811015620027c75760188054829081106200276957fe5b9060005260206000209001544210158015620027ae5750620027aa6018828154811015156200279457fe5b9060005260206000209001546201518062002682565b4211155b15620027be576001915062002706565b6001016200274f565b600091505090565b620027d962003116565b6000808080620027e98662001a0c565b61ffff168552620027fc6107b262001c1a565b6200280c865161ffff1662001c1a565b039250826301e285000284019350826107b286600001510361ffff16036301e133800284019350600191505b600c60ff83161162002885576200285182865162001c35565b60ff1662015180029050858482011115620028755760ff8216602086015262002885565b9283019260019091019062002838565b600191505b6200289b8560200151865162001c35565b60ff168260ff16111515620028dc57858462015180011115620028c75760ff82166040860152620028dc565b6201518093909301926001909101906200288a565b620028e786620010b1565b60ff166060860152620028fa8662002228565b60ff1660808601526200290d8662001868565b60ff1660a08601526200292086620012fc565b60ff1660c08601525092949350505050565b60026003805460ff16908111156200294657fe5b146200295157600080fd5b6003805460ff1916811790819055600c54600160a060020a0361010090920482169163a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620029c057600080fd5b5af11515620029ce57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002a1c57600080fd5b5af1151562002a2a57600080fd5b5050600354600a54600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002a9157600080fd5b5af1151562002a9f57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002aed57600080fd5b5af1151562002afb57600080fd5b5050600354600854600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002b6257600080fd5b5af1151562002b7057600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002bbe57600080fd5b5af1151562002bcc57600080fd5b5050600354600754600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002c3357600080fd5b5af1151562002c4157600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002c8f57600080fd5b5af1151562002c9d57600080fd5b5050600354600954600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002d0457600080fd5b5af1151562002d1257600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002d6057600080fd5b5af1151562002d6e57600080fd5b5050600354600654600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002dd557600080fd5b5af1151562002de357600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002e3157600080fd5b5af1151562002e3f57600080fd5b5050600354600b54600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002ea657600080fd5b5af1151562002eb457600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002f0257600080fd5b5af1151562002f1057600080fd5b5050507f32a9af620b9010e46c598870c64620a9c1b65816b3140fbd73ea13f2e50cdb2333604051600160a060020a03909116815260200160405180910390a1565b6000805b60015482101562002fb85760006002600060018581548110151562002f7757fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff19169115159190911790556001919091019062002f56565b5060005b8251811015620030145760016002600085848151811062002fd957fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560010162002fbc565b60018380516200302992916020019062003152565b507f9465cd279c2de393c5568ae444599e3644e3d1864ca2c05ced8a654df2aea3cb8360405160208082528190810183818151815260200191508051906020019060200280838360005b838110156200308d57808201518382015260200162003073565b505050509050019250505060405180910390a1505050565b600081831015620030b257fe5b50900390565b604051610a6280620031db83390190565b6040516109de8062003c3d83390190565b610180604051908101604052600c815b600081526000199091019060200181620030ea5790505090565b60206040519081016040526000815290565b60e06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c082015290565b828054828255906000526020600020908101928215620031ac579160200282015b82811115620031ac5782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019062003173565b506200270692620016339250905b8082111562002706578054600160a060020a0319168155600101620031ba560060606040526000600555600060065560006007556000600b55341561002357600080fd5b60405160c080610a6283398101604052808051919060200180519190602001805191906020018051919060200180519190602001805191508590508484846000600160a060020a038516151561007857600080fd5b42831015801561008757508282115b151561009257600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff199081169091556004805492151592909116919091179055600a95909555505050600b919091555061095a806101086000396000f3006060604052600436106100e25763ffffffff60e060020a6000350416632c24909c81146100e75780633197cbb61461010c578063361810261461011f57806341fdade61461014657806343c14b22146101595780634b9f5c981461016e57806364a90292146101865780636f6a97621461019957806378e97925146101ac57806380322cbd146101bf578063a7491b48146101d2578063b3a2273f14610217578063b3f05b971461022a578063c734f9171461023d578063d74689e41461025f578063e82bef2914610272578063fc0c546a146102a1578063fd221031146102b4575b600080fd5b34156100f257600080fd5b6100fa6102c7565b60405190815260200160405180910390f35b341561011757600080fd5b6100fa610345565b341561012a57600080fd5b61013261034b565b604051901515815260200160405180910390f35b341561015157600080fd5b6100fa610393565b341561016457600080fd5b61016c610399565b005b341561017957600080fd5b61016c6004351515610458565b341561019157600080fd5b6100fa6105ee565b34156101a457600080fd5b6100fa6105f4565b34156101b757600080fd5b6100fa6105fa565b34156101ca57600080fd5b610132610600565b34156101dd57600080fd5b6101f1600160a060020a036004351661060a565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561022257600080fd5b6100fa61062e565b341561023557600080fd5b610132610634565b341561024857600080fd5b61016c600160a060020a036004351660243561063d565b341561026a57600080fd5b6100fa610814565b341561027d57600080fd5b61028561081a565b604051600160a060020a03909116815260200160405180910390f35b34156102ac57600080fd5b610285610829565b34156102bf57600080fd5b6100fa610838565b600061033f6102e46102dd60055460065461083e565b6064610854565b600054600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561032357600080fd5b5af1151561033057600080fd5b50505060405180519050610878565b90505b90565b60035481565b60085460009060ff161561035e57600080fd5b60035442101561037057506000610342565b6008805460ff1916600117905561038d61038861088f565b6108b1565b50600190565b6103e881565b60008060025442101580156103b057506003544211155b15156103bb57600080fd5b600160a060020a033316600090815260096020526040812054116103de57600080fd5b5050600160a060020a033316600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff909216916104279161091c565b60075580156104445761043c6005548361091c565b600555610454565b6104506006548361091c565b6006555b5050565b600080600254421015801561046f57506003544211155b151561047a57600080fd5b600160a060020a0333166000908152600960205260409020541561049d57600080fd5b600054600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156104ed57600080fd5b5af115156104fa57600080fd5b50505060405180516000549093506105689150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561054957600080fd5b5af1151561055657600080fd5b505050604051805190506103e8610878565b905080821115610578578061057a565b815b915082156105965761058e6005548361083e565b6005556105a6565b6105a26006548361083e565b6006555b33600160a060020a0316600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105e69161083e565b600755505050565b60065481565b600b5481565b60025481565b600061033f61088f565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60075481565b60085460ff1681565b60015460009033600160a060020a0390811691161461065b57600080fd5b600160a060020a038316600090815260096020526040902054151561067f5761080f565b60045460ff1615156106b25760085460ff16806106a857506002544210806106a8575060035442115b156106b25761080f565b600160a060020a03808416600090815260096020526040808220600101549154919291909116906370a082319086905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561071d57600080fd5b5af1151561072a57600080fd5b505050604051805190501015156107405761080f565b50600160a060020a03821660009081526009602052604090206001015481908111156107845750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107bc576107b46005548261091c565b6005556107cc565b6107c86006548261091c565b6006555b600160a060020a0383166000908152600960205260409020600101546107f2908261091c565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b600a5481565b60008282018381101561084d57fe5b9392505050565b6000828202831580610870575082848281151561086d57fe5b04145b151561084d57fe5b600080828481151561088657fe5b04949350505050565b600060065460055411801561033f5750600b546108aa6102c7565b1015905090565b600154600a54600160a060020a039091169081906329c90b6390849060405160e060020a63ffffffff851602815291151560048301526024820152604401600060405180830381600087803b151561090857600080fd5b5af1151561091557600080fd5b5050505050565b60008183101561092857fe5b509003905600a165627a7a7230582059b9e61e8cd64d75d9fd9707882faf208afa8c2a4a99bc7f4ed6dd90ad40be26002960606040526000600555600060065560006007556000600a55341561002357600080fd5b60405160c0806109de833981016040528080519190602001805191906020018051919060200180519190602001805191906020018051915086905085858584600160a060020a038516151561007757600080fd5b42831015801561008657508282115b151561009157600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff19908116909155600480549215159290911691909117905550600a55505050506108df806100ff6000396000f3006060604052600436106100cc5763ffffffff60e060020a6000350416633197cbb681146100d157806336181026146100f657806341fdade61461011d57806343c14b22146101305780634b9f5c981461014557806364a902921461015d578063728b482b1461017057806378e979251461018357806380322cbd14610196578063a7491b48146101a9578063b3a2273f146101ee578063b3f05b9714610201578063c734f91714610214578063d74689e414610236578063e82bef2914610249578063fc0c546a14610278575b600080fd5b34156100dc57600080fd5b6100e461028b565b60405190815260200160405180910390f35b341561010157600080fd5b610109610291565b604051901515815260200160405180910390f35b341561012857600080fd5b6100e46102f2565b341561013b57600080fd5b6101436102f8565b005b341561015057600080fd5b61014360043515156103b7565b341561016857600080fd5b6100e461054d565b341561017b57600080fd5b6100e4610553565b341561018e57600080fd5b6100e4610559565b34156101a157600080fd5b61010961055f565b34156101b457600080fd5b6101c8600160a060020a036004351661056e565b604051928352602083019190915215156040808301919091526060909101905180910390f35b34156101f957600080fd5b6100e4610592565b341561020c57600080fd5b610109610598565b341561021f57600080fd5b610143600160a060020a03600435166024356105a1565b341561024157600080fd5b6100e4610778565b341561025457600080fd5b61025c61077e565b604051600160a060020a03909116815260200160405180910390f35b341561028357600080fd5b61025c61078d565b60035481565b600080600a541180156102a75750600354600a54115b156102c057600a544210156102bb57600080fd5b6102cf565b6003544210156102cf57600080fd5b6008805460ff191660011790556102ec6102e761079c565b610817565b50600190565b6103e881565b600080600254421015801561030f57506003544211155b151561031a57600080fd5b600160a060020a0333166000908152600960205260408120541161033d57600080fd5b5050600160a060020a033316600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff9092169161038691610874565b60075580156103a35761039b60055483610874565b6005556103b3565b6103af60065483610874565b6006555b5050565b60008060025442101580156103ce57506003544211155b15156103d957600080fd5b600160a060020a033316600090815260096020526040902054156103fc57600080fd5b600054600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561044c57600080fd5b5af1151561045957600080fd5b50505060405180516000549093506104c79150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104a857600080fd5b5af115156104b557600080fd5b505050604051805190506103e8610886565b9050808211156104d757806104d9565b815b915082156104f5576104ed6005548361089d565b600555610505565b6105016006548361089d565b6006555b33600160a060020a0316600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105459161089d565b600755505050565b60065481565b600a5481565b60025481565b600061056961079c565b905090565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60075481565b60085460ff1681565b60015460009033600160a060020a039081169116146105bf57600080fd5b600160a060020a03831660009081526009602052604090205415156105e357610773565b60045460ff1615156106165760085460ff168061060c575060025442108061060c575060035442115b1561061657610773565b600160a060020a03808416600090815260096020526040808220600101549154919291909116906370a082319086905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561068157600080fd5b5af1151561068e57600080fd5b505050604051805190501015156106a457610773565b50600160a060020a03821660009081526009602052604090206001015481908111156106e85750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107205761071860055482610874565b600555610730565b61072c60065482610874565b6006555b600160a060020a0383166000908152600960205260409020600101546107569082610874565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b6000600654600554118015610569575060005461080d90600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156107ef57600080fd5b5af115156107fc57600080fd5b505050604051805190506003610886565b6005541015905090565b600154600160a060020a0316806389ea2cb78360405160e060020a63ffffffff84160281529015156004820152602401600060405180830381600087803b151561086057600080fd5b5af1151561086d57600080fd5b5050505050565b60008183101561088057fe5b50900390565b600080828481151561089457fe5b04949350505050565b6000828201838110156108ac57fe5b93925050505600a165627a7a7230582008913de14f0f24c71050379b6997cb6e8d4ff163e3e8f3e73edbd6069a08d95f0029a165627a7a72305820933a469c477da45183c7ccef2cc51e8cce1c9f6715277e653a22eb77386679c70029000000000000000000000000e45f9c10f3e4647ac922b0128e688e8e1f220f5f000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c30000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f30000000000000000000000005686508abbff20db6a582643280601ef53b58ddf000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b8760400000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b90000000000000000000000002d2edbfa6c22c276263dacf1252eb0611bde751d000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005eaf0a37346ff992199fbc4480c9ccc4137d9c1f
Deployed Bytecode
0x606060405260043610620003355763ffffffff60e060020a600035041663025e7c2781146200033a578063026eca12146200036f57806302fc28c4146200038d57806308867fc214620003b5578063192f107614620003cb5780631f35bc4014620003e157806326a4e8d2146200040357806326b52faf146200042557806329c90b63146200043b57806331d2f891146200045957806336e61cf7146200046f5780633b64e77e14620004885780633ccfd60b146200049e5780633e239e1a14620004b457806340e6b00a14620004e357806342e94c9014620004f9578063481c6a75146200051b5780634ac1ad78146200053157806359927044146200054a5780635f58384614620005605780636252c127146200057957806362ba9687146200058f57806365c7284014620005c4578063677ba3d314620005dd578063774a97cf14620006085780637ddbf0ed146200061e5780637f791833146200064057806384219204146200066f57806387174c3e1462000685578063880dc4e6146200069b57806389ea2cb714620006c55780638aa001fc14620006e05780638c8d98a014620006f9578063903171ae14620007225780639054bbb614620007385780639054bdec146200074e57806392a0fd64146200078957806392d66313146200079f578063962c9c8d14620007cf578063a0e67e2b14620007e5578063a324ad241462000850578063a666ff3c1462000869578063a6f0e577146200087f578063a78a651a146200089c578063ab23151114620008b2578063b199993714620008c8578063b238ad0e14620008e1578063b465e52f1462000904578063b51459fe146200091a578063bd7427f81462000930578063c19d93fb1462000946578063c5f5ce211462000981578063cae6b9c51462000997578063cc96019f14620009ad578063d0e6cfec14620009c3578063d66f146d14620009d9578063e2d2a86814620009ef578063e9b5a2f71462000a11578063eb6b192f1462000a27578063f190a7931462000a49578063fa4d36981462000a5f578063fa93f8831462000ab1578063fbbfe8301462000aca578063fc0c546a1462000ae0578063fd2210311462000af6578063ff01ffa81462000b0c575b600080fd5b34156200034657600080fd5b6200035360043562000b22565b604051600160a060020a03909116815260200160405180910390f35b34156200037b57600080fd5b6200038b60ff6004351662000b4b565b005b34156200039957600080fd5b620003a362000cdf565b60405190815260200160405180910390f35b3415620003c157600080fd5b620003a362000ce6565b3415620003d757600080fd5b620003a362000ced565b3415620003ed57600080fd5b6200038b600160a060020a036004351662000cf3565b34156200040f57600080fd5b6200038b600160a060020a036004351662000d57565b34156200043157600080fd5b620003a362000dd3565b34156200044757600080fd5b6200038b600435151560243562000dd9565b34156200046557600080fd5b6200035362000f18565b34156200047b57600080fd5b6200038b60043562000f27565b34156200049457600080fd5b6200038b62000f85565b3415620004aa57600080fd5b6200038b62000fcf565b3415620004c057600080fd5b620004cd600435620010b1565b60405160ff909116815260200160405180910390f35b3415620004ef57600080fd5b6200038b620010cf565b34156200050557600080fd5b620003a3600160a060020a0360043516620012db565b34156200052757600080fd5b62000353620012ed565b34156200053d57600080fd5b620004cd600435620012fc565b34156200055657600080fd5b620003536200130f565b34156200056c57600080fd5b620003a36004356200131e565b34156200058557600080fd5b6200038b6200133e565b34156200059b57600080fd5b620003a361ffff6004351660ff60243581169060443581169060643581169060843516620013e9565b3415620005d057600080fd5b620004cd60043562001406565b3415620005e957600080fd5b6200038b600160a060020a03600435811690602435166044356200141d565b34156200061457600080fd5b620003a362001601565b34156200062a57600080fd5b6200038b600160a060020a036004351662001636565b34156200064c57600080fd5b620003a361ffff6004351660ff602435811690604435811690606435166200169a565b34156200067b57600080fd5b620003a3620016b6565b34156200069157600080fd5b62000353620016bc565b3415620006a757600080fd5b620006b1620016cb565b604051901515815260200160405180910390f35b3415620006d157600080fd5b6200038b6004351515620016d4565b3415620006ec57600080fd5b620004cd60043562001868565b34156200070557600080fd5b620003a361ffff6004351660ff6024358116906044351662001873565b34156200072e57600080fd5b620003536200188f565b34156200074457600080fd5b620003a36200189e565b34156200075a57600080fd5b620003a361ffff6004351660ff60243581169060443581169060643581169060843581169060a43516620018a8565b34156200079557600080fd5b62000353620019fd565b3415620007ab57600080fd5b620007b860043562001a0c565b60405161ffff909116815260200160405180910390f35b3415620007db57600080fd5b620003a362001aa6565b3415620007f157600080fd5b620007fb62001aab565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156200083c57808201518382015260200162000822565b505050509050019250505060405180910390f35b34156200085c57600080fd5b620004cd60043562001b17565b34156200087557600080fd5b6200035362001b2e565b34156200088b57600080fd5b620006b161ffff6004351662001b3d565b6200038b600160a060020a036004351662001b91565b3415620008be57600080fd5b620003a362001c14565b3415620008d457600080fd5b620003a360043562001c1a565b3415620008ed57600080fd5b620004cd60ff6004351661ffff6024351662001c35565b34156200091057600080fd5b620003a362001d0e565b34156200092657600080fd5b620006b162001d14565b34156200093c57600080fd5b6200038b62001eca565b34156200095257600080fd5b6200095c62001ef2565b604051808260038111156200096d57fe5b60ff16815260200191505060405180910390f35b34156200098d57600080fd5b6200035362001efb565b3415620009a357600080fd5b6200035362001f0a565b3415620009b957600080fd5b6200035362001f19565b3415620009cf57600080fd5b6200035362001f28565b3415620009e557600080fd5b6200035362001f37565b3415620009fb57600080fd5b6200038b600160a060020a036004351662001f46565b341562000a1d57600080fd5b6200038b6200214a565b341562000a3357600080fd5b620006b1600160a060020a0360043516620021da565b341562000a5557600080fd5b62000353620021ef565b341562000a6b57600080fd5b6200038b6004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650620021fe95505050505050565b341562000abd57600080fd5b620004cd60043562002228565b341562000ad657600080fd5b6200038b62002234565b341562000aec57600080fd5b6200035362002464565b341562000b0257600080fd5b620003a362002478565b341562000b1857600080fd5b6200038b6200247e565b600180548290811062000b3157fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a0333166000908152600260205260408120548190819060ff16151560011462000b7a57600080fd5b60026003805460ff169081111562000b8e57fe5b1462000b9957600080fd5b601354600160a060020a03161562000bb057600080fd5b62000bbb4262001406565b60ff16600a14151562000bcd57600080fd5b603260ff8516111562000bdf57600080fd5b62000c09600e5462000c0362000bfb600e548860ff166200263c565b60646200266a565b62002682565b92504291506203f4808201905082600360019054906101000a9004600160a060020a031630848460155462000c3d620030b8565b958652600160a060020a039485166020870152929093166040808601919091526060850191909152608084019290925260a083015260c09091019051809103906000f080151562000c8d57600080fd5b60138054600160a060020a031916600160a060020a03929092169190911790557f330d2f37998c8839fca77205925adc69e2c4aa616175f8b357f42f84d06c454960405160405180910390a150505050565b6203f48081565b62093a8081565b60055481565b600160a060020a03331660009081526002602052604090205460ff16151560011462000d1e57600080fd5b601154600160a060020a03161562000d3557600080fd5b60118054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a03331660009081526002602052604090205460ff16151560011462000d8257600080fd5b6003546101009004600160a060020a03161562000d9e57600080fd5b60038054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60105481565b60135433600160a060020a03908116911614801562000e4c5750601354600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000e3357600080fd5b5af1151562000e4157600080fd5b505050604051805190505b151562000e5857600080fd5b811562000e6557600e8190555b60135462000ec890600160a060020a0316632c24909c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000eaa57600080fd5b5af1151562000eb857600080fd5b5050506040518051905062002692565b7fecb94f7dd81b39de2b8d95fa8a4d9f0a8723d7a974187fef4fa5305ca5d162488282604051911515825260208201526040908101905180910390a1505060138054600160a060020a0319169055565b601154600160a060020a031681565b600160a060020a03331660009081526002602052604090205460ff16151560011462000f5257600080fd5b60026003805460ff169081111562000f6657fe5b1462000f7157600080fd5b600e54811062000f8057600080fd5b600e55565b60115433600160a060020a0390811691161462000fa157600080fd5b60006003805460ff169081111562000fb557fe5b1462000fc057600080fd5b6003805460ff19166001179055565b600160a060020a03331660009081526002602052604081205460ff16151560011462000ffa57600080fd5b6200100462001d14565b15156200101057600080fd5b60026003805460ff16908111156200102457fe5b146200102f57600080fd5b62001039620026c2565b42600f55600454909150600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156200107457600080fd5b7f56ca301a9219608c91e7bcee90e083c19671d2cdcc96752c7af291cee5f9c8c8814260405191825260208201526040908101905180910390a150565b60006018603c8084045b04811515620010c657fe5b0690505b919050565b6000806000806000600360019054906101000a9004600160a060020a0316600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200113b57600080fd5b5af115156200114957600080fd5b505050604051805190501115156200116057600080fd5b60026003805460ff16908111156200117457fe5b146200117f57600080fd5b601454600160a060020a0316156200119657600080fd5b620011a06200270a565b1515620011ac57600080fd5b6000601654118015620011ce5750620011cb6016546201518062002682565b42115b15620011da5760006016555b505060165442925062093a808301915015600081156200121c5762001219620012038562001a0c565b6200120e8662001b17565b600101600162001873565b90505b6003546101009004600160a060020a031630858584866200123c620030c9565b600160a060020a0396871681529490951660208501526040808501939093526060840191909152608083015291151560a082015260c0019051809103906000f08015156200128957600080fd5b60148054600160a060020a031916600160a060020a03929092169190911790557fd1a79c97f023d07d5c5533b0887300f81e113759deeb9531a541b93341ceab7f60405160405180910390a150505050565b60126020526000908152604090205481565b600054600160a060020a031681565b60006007600462015180840401620010c6565b600454600160a060020a031681565b60188054829081106200132d57fe5b600091825260209091200154905081565b60115460009033600160a060020a039081169116146200135d57600080fd5b506003805460ff19166002179055601154600160a060020a0316620013d081634d52a5126040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620013b057600080fd5b5af11515620013be57600080fd5b5050506040518051905060026200266a565b6010555042600f81905565af7151902add600e55600555565b6000620013fc86868686866000620018a8565b9695505050505050565b60006200141382620027cf565b6040015192915050565b60035433600160a060020a0390811661010090920416146200143e57600080fd5b601354600160a060020a031615801590620014ae5750601354600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200149457600080fd5b5af11515620014a257600080fd5b50505060405180519050155b156200151d57601354600160a060020a031663c734f917848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200150b57600080fd5b5af115156200151957600080fd5b5050505b601454600160a060020a0316158015906200158d5750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200157357600080fd5b5af115156200158157600080fd5b50505060405180519050155b15620015fc57601454600160a060020a031663c734f917848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620015ea57600080fd5b5af11515620015f857600080fd5b5050505b505050565b600060026003805460ff16908111156200161757fe5b14620016265750600062001633565b62001630620026c2565b90505b90565b600160a060020a03331660009081526002602052604090205460ff1615156001146200166157600080fd5b600c54600160a060020a0316156200167857600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b6000620016ad85858585600080620018a8565b95945050505050565b60155481565b600d54600160a060020a031681565b60175460ff1681565b60145460009033600160a060020a0390811691161480156200174a5750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200173157600080fd5b5af115156200173f57600080fd5b505050604051805190505b15156200175657600080fd5b81156200180c576000601654111562001779576200177362002932565b62001806565b601454600160a060020a03166378e979256040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620017b957600080fd5b5af11515620017c757600080fd5b505050604051805190509050620017f8620017e28262001a0c565b620017ed8362001b17565b600201600162001873565b6016556017805460ff191690555b6200181f565b60006016556017805460ff191660011790555b7f9ab7d9b3f53fbde0442a57f23d2eca52d14cd437e392cf8896a96f3647dff6db82604051901515815260200160405180910390a1505060148054600160a060020a0319169055565b6000603c82620010c6565b6000620018878484846000806000620018a8565b949350505050565b600754600160a060020a031681565b65af7151902add81565b600080620018b5620030da565b6107b291505b8861ffff168261ffff1610156200190257620018d78262001b3d565b15620018ec576301e2850083019250620018f6565b6301e13380830192505b600190910190620018bb565b601f8152620019118962001b3d565b156200192457601d60208201526200192c565b601c60208201525b601f60408201819052601e606083018190526080830182905260a0830181905260c0830182905260e0830182905261010083018190526101208301829052610140830152610160820152600191505b8760ff168261ffff161015620019bf578061ffff600019840116600c8110620019a057fe5b602002015160ff1662015180028301925081806001019250506200197b565b6001870360ff166201518002830192508560ff16610e1002830192508460ff16603c02830192508360ff168301925082925050509695505050505050565b600854600160a060020a031681565b6000806107b26301e133808404810190829062001a299062001c1a565b62001a388361ffff1662001c1a565b039050806301e285000283019250806107b2830361ffff16036301e1338002830192505b8483111562001a9e5762001a736001830362001b3d565b1562001a88576301e285008303925062001a92565b6301e13380830392505b60018203915062001a5c565b509392505050565b600a81565b62001ab562003104565b600180548060200260200160405190810160405280929190818152602001828054801562001b0d57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831162001aee575b5050505050905090565b600062001b2482620027cf565b6020015192915050565b600c54600160a060020a031681565b6000600382161562001b5257506000620010ca565b606461ffff83160661ffff161562001b6d57506001620010ca565b61019061ffff83160661ffff161562001b8957506000620010ca565b506001919050565b60115460009033600160a060020a0390811691161462001bb057600080fd5b60006003805460ff169081111562001bc457fe5b1462001bcf57600080fd5b600160a060020a03821660009081526012602052604090205462001bf4903462002682565b600160a060020a0390921660009081526012602052604090209190915550565b600f5481565b60001901600061019082046064830460048404030192915050565b60008260ff166001148062001c4d57508260ff166003145b8062001c5c57508260ff166005145b8062001c6b57508260ff166007145b8062001c7a57508260ff166008145b8062001c8957508260ff16600a145b8062001c9857508260ff16600c145b1562001ca75750601f62001d08565b8260ff166004148062001cbd57508260ff166006145b8062001ccc57508260ff166009145b8062001cdb57508260ff16600b145b1562001cea5750601e62001d08565b62001cf58262001b3d565b1562001d045750601d62001d08565b50601c5b92915050565b60165481565b601454600090600160a060020a03161580159062001d875750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001d6d57600080fd5b5af1151562001d7b57600080fd5b50505060405180519050155b801562001dec5750601454600090600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001dd257600080fd5b5af1151562001de057600080fd5b50505060405180519050115b801562001e505750601454600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001e3457600080fd5b5af1151562001e4257600080fd5b505050604051805190504210155b801562001eb15750601454600160a060020a03166380322cbd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001e9857600080fd5b5af1151562001ea657600080fd5b505050604051805190505b1562001ec05750600062001633565b5060175460ff1690565b600d5433600160a060020a0390811691161462001ee657600080fd5b62001ef062002932565b565b60035460ff1681565b600b54600160a060020a031681565b601354600160a060020a031681565b600654600160a060020a031681565b600954600160a060020a031681565b601454600160a060020a031681565b600160a060020a03331660009081526002602052604081205460ff1615156001148062001f815750600d5433600160a060020a039081169116145b151562001f8d57600080fd5b60016003805460ff169081111562001fa157fe5b1462001fac57600080fd5b600160a060020a0382166000908152601260205260408120541162001fd057600080fd5b50600160a060020a03808216600090815260126020526040808220805492905560035491926101009092049091169063a24835d190849083906370a082319083905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200204e57600080fd5b5af115156200205c57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620020aa57600080fd5b5af11515620020b857600080fd5b505050600160a060020a0382166108fc82150282604051600060405180830381858888f193505050501515620020ed57600080fd5b7fec44c8b7c9108bd9d48e9a929c78d5a448562d61b1113d016ba7fd99d7dc3c7c8282426040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15050565b600160a060020a03331660009081526002602052604081205460ff1615156001146200217557600080fd5b6200217f62001d14565b15156200218b57600080fd5b601054600090116200219c57600080fd5b50601080546000909155600454600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156200107457600080fd5b60026020526000908152604090205460ff1681565b600a54600160a060020a031681565b60005433600160a060020a039081169116146200221a57600080fd5b620022258162002f52565b50565b6000603c8083620010bb565b600080600380805460ff16908111156200224a57fe5b146200225557600080fd5b6003546101009004600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620022ab57600080fd5b5af11515620022b957600080fd5b505050604051805192505060008211620022d257600080fd5b6200234f620022ec8330600160a060020a0316316200263c565b6003546101009004600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200233157600080fd5b5af115156200233f57600080fd5b505050604051805190506200266a565b9050600081116200235f57600080fd5b6003546101009004600160a060020a031663a24835d1338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620023bb57600080fd5b5af11515620023c957600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f193505050501515620023ff57600080fd5b7f2fe53133356d775fd6784d23de274186e0721e0d93074ae2392acb8968bb2e51338284426040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390a15050565b6003546101009004600160a060020a031681565b600e5481565b600060016003805460ff16908111156200249457fe5b146200249f57600080fd5b600160a060020a03331660009081526012602052604081205411620024c357600080fd5b50600160a060020a0333818116600090815260126020526040808220805492905560035491936101009092049091169163a24835d19183906370a082319083905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200254057600080fd5b5af115156200254e57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200259c57600080fd5b5af11515620025aa57600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f193505050501515620025e057600080fd5b7fec44c8b7c9108bd9d48e9a929c78d5a448562d61b1113d016ba7fd99d7dc3c7c3382426040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150565b60008282028315806200265a57508284828115156200265757fe5b04145b15156200266357fe5b9392505050565b60008082848115156200267957fe5b04949350505050565b6000828201838110156200266357fe5b6000620026a18260026200266a565b9050600a811115620026b857600a601555620026be565b60158190555b5050565b600080620026e0620026d742600f54620030a5565b600e546200263c565b90508030600160a060020a0316311015620027025750600160a060020a033016315b8091505b5090565b60008060006016541180156200272257506016544210155b80156200273f57506200273b6016546201518062002682565b4211155b156200274f576001915062002706565b601854811015620027c75760188054829081106200276957fe5b9060005260206000209001544210158015620027ae5750620027aa6018828154811015156200279457fe5b9060005260206000209001546201518062002682565b4211155b15620027be576001915062002706565b6001016200274f565b600091505090565b620027d962003116565b6000808080620027e98662001a0c565b61ffff168552620027fc6107b262001c1a565b6200280c865161ffff1662001c1a565b039250826301e285000284019350826107b286600001510361ffff16036301e133800284019350600191505b600c60ff83161162002885576200285182865162001c35565b60ff1662015180029050858482011115620028755760ff8216602086015262002885565b9283019260019091019062002838565b600191505b6200289b8560200151865162001c35565b60ff168260ff16111515620028dc57858462015180011115620028c75760ff82166040860152620028dc565b6201518093909301926001909101906200288a565b620028e786620010b1565b60ff166060860152620028fa8662002228565b60ff1660808601526200290d8662001868565b60ff1660a08601526200292086620012fc565b60ff1660c08601525092949350505050565b60026003805460ff16908111156200294657fe5b146200295157600080fd5b6003805460ff1916811790819055600c54600160a060020a0361010090920482169163a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620029c057600080fd5b5af11515620029ce57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002a1c57600080fd5b5af1151562002a2a57600080fd5b5050600354600a54600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002a9157600080fd5b5af1151562002a9f57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002aed57600080fd5b5af1151562002afb57600080fd5b5050600354600854600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002b6257600080fd5b5af1151562002b7057600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002bbe57600080fd5b5af1151562002bcc57600080fd5b5050600354600754600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002c3357600080fd5b5af1151562002c4157600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002c8f57600080fd5b5af1151562002c9d57600080fd5b5050600354600954600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002d0457600080fd5b5af1151562002d1257600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002d6057600080fd5b5af1151562002d6e57600080fd5b5050600354600654600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002dd557600080fd5b5af1151562002de357600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002e3157600080fd5b5af1151562002e3f57600080fd5b5050600354600b54600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002ea657600080fd5b5af1151562002eb457600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002f0257600080fd5b5af1151562002f1057600080fd5b5050507f32a9af620b9010e46c598870c64620a9c1b65816b3140fbd73ea13f2e50cdb2333604051600160a060020a03909116815260200160405180910390a1565b6000805b60015482101562002fb85760006002600060018581548110151562002f7757fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff19169115159190911790556001919091019062002f56565b5060005b8251811015620030145760016002600085848151811062002fd957fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560010162002fbc565b60018380516200302992916020019062003152565b507f9465cd279c2de393c5568ae444599e3644e3d1864ca2c05ced8a654df2aea3cb8360405160208082528190810183818151815260200191508051906020019060200280838360005b838110156200308d57808201518382015260200162003073565b505050509050019250505060405180910390a1505050565b600081831015620030b257fe5b50900390565b604051610a6280620031db83390190565b6040516109de8062003c3d83390190565b610180604051908101604052600c815b600081526000199091019060200181620030ea5790505090565b60206040519081016040526000815290565b60e06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c082015290565b828054828255906000526020600020908101928215620031ac579160200282015b82811115620031ac5782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019062003173565b506200270692620016339250905b8082111562002706578054600160a060020a0319168155600101620031ba560060606040526000600555600060065560006007556000600b55341561002357600080fd5b60405160c080610a6283398101604052808051919060200180519190602001805191906020018051919060200180519190602001805191508590508484846000600160a060020a038516151561007857600080fd5b42831015801561008757508282115b151561009257600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff199081169091556004805492151592909116919091179055600a95909555505050600b919091555061095a806101086000396000f3006060604052600436106100e25763ffffffff60e060020a6000350416632c24909c81146100e75780633197cbb61461010c578063361810261461011f57806341fdade61461014657806343c14b22146101595780634b9f5c981461016e57806364a90292146101865780636f6a97621461019957806378e97925146101ac57806380322cbd146101bf578063a7491b48146101d2578063b3a2273f14610217578063b3f05b971461022a578063c734f9171461023d578063d74689e41461025f578063e82bef2914610272578063fc0c546a146102a1578063fd221031146102b4575b600080fd5b34156100f257600080fd5b6100fa6102c7565b60405190815260200160405180910390f35b341561011757600080fd5b6100fa610345565b341561012a57600080fd5b61013261034b565b604051901515815260200160405180910390f35b341561015157600080fd5b6100fa610393565b341561016457600080fd5b61016c610399565b005b341561017957600080fd5b61016c6004351515610458565b341561019157600080fd5b6100fa6105ee565b34156101a457600080fd5b6100fa6105f4565b34156101b757600080fd5b6100fa6105fa565b34156101ca57600080fd5b610132610600565b34156101dd57600080fd5b6101f1600160a060020a036004351661060a565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561022257600080fd5b6100fa61062e565b341561023557600080fd5b610132610634565b341561024857600080fd5b61016c600160a060020a036004351660243561063d565b341561026a57600080fd5b6100fa610814565b341561027d57600080fd5b61028561081a565b604051600160a060020a03909116815260200160405180910390f35b34156102ac57600080fd5b610285610829565b34156102bf57600080fd5b6100fa610838565b600061033f6102e46102dd60055460065461083e565b6064610854565b600054600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561032357600080fd5b5af1151561033057600080fd5b50505060405180519050610878565b90505b90565b60035481565b60085460009060ff161561035e57600080fd5b60035442101561037057506000610342565b6008805460ff1916600117905561038d61038861088f565b6108b1565b50600190565b6103e881565b60008060025442101580156103b057506003544211155b15156103bb57600080fd5b600160a060020a033316600090815260096020526040812054116103de57600080fd5b5050600160a060020a033316600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff909216916104279161091c565b60075580156104445761043c6005548361091c565b600555610454565b6104506006548361091c565b6006555b5050565b600080600254421015801561046f57506003544211155b151561047a57600080fd5b600160a060020a0333166000908152600960205260409020541561049d57600080fd5b600054600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156104ed57600080fd5b5af115156104fa57600080fd5b50505060405180516000549093506105689150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561054957600080fd5b5af1151561055657600080fd5b505050604051805190506103e8610878565b905080821115610578578061057a565b815b915082156105965761058e6005548361083e565b6005556105a6565b6105a26006548361083e565b6006555b33600160a060020a0316600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105e69161083e565b600755505050565b60065481565b600b5481565b60025481565b600061033f61088f565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60075481565b60085460ff1681565b60015460009033600160a060020a0390811691161461065b57600080fd5b600160a060020a038316600090815260096020526040902054151561067f5761080f565b60045460ff1615156106b25760085460ff16806106a857506002544210806106a8575060035442115b156106b25761080f565b600160a060020a03808416600090815260096020526040808220600101549154919291909116906370a082319086905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561071d57600080fd5b5af1151561072a57600080fd5b505050604051805190501015156107405761080f565b50600160a060020a03821660009081526009602052604090206001015481908111156107845750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107bc576107b46005548261091c565b6005556107cc565b6107c86006548261091c565b6006555b600160a060020a0383166000908152600960205260409020600101546107f2908261091c565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b600a5481565b60008282018381101561084d57fe5b9392505050565b6000828202831580610870575082848281151561086d57fe5b04145b151561084d57fe5b600080828481151561088657fe5b04949350505050565b600060065460055411801561033f5750600b546108aa6102c7565b1015905090565b600154600a54600160a060020a039091169081906329c90b6390849060405160e060020a63ffffffff851602815291151560048301526024820152604401600060405180830381600087803b151561090857600080fd5b5af1151561091557600080fd5b5050505050565b60008183101561092857fe5b509003905600a165627a7a7230582059b9e61e8cd64d75d9fd9707882faf208afa8c2a4a99bc7f4ed6dd90ad40be26002960606040526000600555600060065560006007556000600a55341561002357600080fd5b60405160c0806109de833981016040528080519190602001805191906020018051919060200180519190602001805191906020018051915086905085858584600160a060020a038516151561007757600080fd5b42831015801561008657508282115b151561009157600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff19908116909155600480549215159290911691909117905550600a55505050506108df806100ff6000396000f3006060604052600436106100cc5763ffffffff60e060020a6000350416633197cbb681146100d157806336181026146100f657806341fdade61461011d57806343c14b22146101305780634b9f5c981461014557806364a902921461015d578063728b482b1461017057806378e979251461018357806380322cbd14610196578063a7491b48146101a9578063b3a2273f146101ee578063b3f05b9714610201578063c734f91714610214578063d74689e414610236578063e82bef2914610249578063fc0c546a14610278575b600080fd5b34156100dc57600080fd5b6100e461028b565b60405190815260200160405180910390f35b341561010157600080fd5b610109610291565b604051901515815260200160405180910390f35b341561012857600080fd5b6100e46102f2565b341561013b57600080fd5b6101436102f8565b005b341561015057600080fd5b61014360043515156103b7565b341561016857600080fd5b6100e461054d565b341561017b57600080fd5b6100e4610553565b341561018e57600080fd5b6100e4610559565b34156101a157600080fd5b61010961055f565b34156101b457600080fd5b6101c8600160a060020a036004351661056e565b604051928352602083019190915215156040808301919091526060909101905180910390f35b34156101f957600080fd5b6100e4610592565b341561020c57600080fd5b610109610598565b341561021f57600080fd5b610143600160a060020a03600435166024356105a1565b341561024157600080fd5b6100e4610778565b341561025457600080fd5b61025c61077e565b604051600160a060020a03909116815260200160405180910390f35b341561028357600080fd5b61025c61078d565b60035481565b600080600a541180156102a75750600354600a54115b156102c057600a544210156102bb57600080fd5b6102cf565b6003544210156102cf57600080fd5b6008805460ff191660011790556102ec6102e761079c565b610817565b50600190565b6103e881565b600080600254421015801561030f57506003544211155b151561031a57600080fd5b600160a060020a0333166000908152600960205260408120541161033d57600080fd5b5050600160a060020a033316600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff9092169161038691610874565b60075580156103a35761039b60055483610874565b6005556103b3565b6103af60065483610874565b6006555b5050565b60008060025442101580156103ce57506003544211155b15156103d957600080fd5b600160a060020a033316600090815260096020526040902054156103fc57600080fd5b600054600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561044c57600080fd5b5af1151561045957600080fd5b50505060405180516000549093506104c79150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104a857600080fd5b5af115156104b557600080fd5b505050604051805190506103e8610886565b9050808211156104d757806104d9565b815b915082156104f5576104ed6005548361089d565b600555610505565b6105016006548361089d565b6006555b33600160a060020a0316600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105459161089d565b600755505050565b60065481565b600a5481565b60025481565b600061056961079c565b905090565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60075481565b60085460ff1681565b60015460009033600160a060020a039081169116146105bf57600080fd5b600160a060020a03831660009081526009602052604090205415156105e357610773565b60045460ff1615156106165760085460ff168061060c575060025442108061060c575060035442115b1561061657610773565b600160a060020a03808416600090815260096020526040808220600101549154919291909116906370a082319086905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561068157600080fd5b5af1151561068e57600080fd5b505050604051805190501015156106a457610773565b50600160a060020a03821660009081526009602052604090206001015481908111156106e85750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107205761071860055482610874565b600555610730565b61072c60065482610874565b6006555b600160a060020a0383166000908152600960205260409020600101546107569082610874565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b6000600654600554118015610569575060005461080d90600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156107ef57600080fd5b5af115156107fc57600080fd5b505050604051805190506003610886565b6005541015905090565b600154600160a060020a0316806389ea2cb78360405160e060020a63ffffffff84160281529015156004820152602401600060405180830381600087803b151561086057600080fd5b5af1151561086d57600080fd5b5050505050565b60008183101561088057fe5b50900390565b600080828481151561089457fe5b04949350505050565b6000828201838110156108ac57fe5b93925050505600a165627a7a7230582008913de14f0f24c71050379b6997cb6e8d4ff163e3e8f3e73edbd6069a08d95f0029a165627a7a72305820933a469c477da45183c7ccef2cc51e8cce1c9f6715277e653a22eb77386679c70029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e45f9c10f3e4647ac922b0128e688e8e1f220f5f000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c30000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f30000000000000000000000005686508abbff20db6a582643280601ef53b58ddf000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b8760400000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b90000000000000000000000002d2edbfa6c22c276263dacf1252eb0611bde751d000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005eaf0a37346ff992199fbc4480c9ccc4137d9c1f
-----Decoded View---------------
Arg [0] : _teamWallet (address): 0xE45f9c10F3E4647AC922b0128e688e8E1F220f5F
Arg [1] : _referralTokenWallet (address): 0xF759CaE90459C72bB3668fcd8e674f9E1eb9C2C3
Arg [2] : _foundationTokenWallet (address): 0x9496DbBB9bC9fd78D4735b954569A54Fe2A0D9F3
Arg [3] : _companyTokenWallet (address): 0x5686508AbBFF20Db6A582643280601ef53B58DdF
Arg [4] : _reserveTokenWallet (address): 0xa1568c501E650c83337f8119b6276c0de4aABb0f
Arg [5] : _bountyTokenWallet (address): 0x73c2D67e4181aD1926B4B47b56D3d2C198b87604
Arg [6] : _advisorTokenWallet (address): 0x11F21536f888dEF8c7d2C4785F3F70b3DDBCa1B9
Arg [7] : _refundManager (address): 0x2D2EdbfA6C22c276263DacF1252Eb0611BdE751D
Arg [8] : _owners (address[]): 0x5EaF0a37346Ff992199fbc4480c9ccc4137d9c1f
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 000000000000000000000000e45f9c10f3e4647ac922b0128e688e8e1f220f5f
Arg [1] : 000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c3
Arg [2] : 0000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f3
Arg [3] : 0000000000000000000000005686508abbff20db6a582643280601ef53b58ddf
Arg [4] : 000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f
Arg [5] : 00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b87604
Arg [6] : 00000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b9
Arg [7] : 0000000000000000000000002d2edbfa6c22c276263dacf1252eb0611bde751d
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [10] : 0000000000000000000000005eaf0a37346ff992199fbc4480c9ccc4137d9c1f
Swarm Source
bzzr://933a469c477da45183c7ccef2cc51e8cce1c9f6715277e653a22eb77386679c7
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.