Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 42 txns
Token Tracker: NATEE (NATEE)
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x10a12b15b879f098132324595db383e5cd178ac5at txn 0x17686b45eba7ad54e0b94331ff81ca1cac720b36f2b10df6589d026ed80641b1
 Latest 25 transactions from a total of 42 transactions

TxHash Age From To Value [TxFee]
0xfb3139d30da0c0154b25e82070498cb3e4ee9b43653670d834713ed0df3bd09b1 day 8 hrs ago0xae3f24cfa379f33a36be0ca15635d0c7abb37c90  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.000099924
0x22b95d2d39338986d8c0ce4d82666eb2cfcbec8358bcff19869636c84611f0db1 day 11 hrs ago0xb2b90b91af69b549c5518b4a3f4ce54131c026d4  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.0001246851
0x1859bbc5190649de04dd61c02057aaa70a96c286bbfbfb9777efd71a7af891371 day 11 hrs ago0xb2b90b91af69b549c5518b4a3f4ce54131c026d4  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.000095240062
0xfc85d50f5db1ad68ba88a6090ba8048256dee65f112912434ed9d25a8e2a3e0d4 days 4 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00235863
0xb44e9efe0e16c38b0cf93e5b542d9b2eb551010870666e4ede454e4b0704362f4 days 4 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00235799
0x6d25f994303b34f3936f3298cefe38a550c613a6a8e88e0b78e77177a8a001ee4 days 4 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00236119
0x88f11208ab3378e0b626f1b739b7b9e536abef442e904d033aa4eb960d06618c5 days 15 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00205863
0xc5e09badc2857aec2a40df73665a96d2825ede1396a852eaeb64b438b07bceda5 days 16 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00235863
0xb369f8f9f2e710e092a9c1fc8edc9b508fb1cafa3720a501dc7d125541c1a86a5 days 16 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00206375
0x4d735557af19d759ffcbb4949a85ad90e00335fc5dd573828453974854f404296 days 4 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00236375
0xc133b27b4a90167d13541e2bab2796f4c42fb568fde84f07e9f73c344effaf736 days 4 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00236247
0xa165990db3265e80359dfa16a9c1d092885d5254847569edbf260df5949550906 days 4 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00236183
0x3a956e1144c01dd2647f15950d6d003adb6e97cad4723cc107842c537cc568c26 days 4 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00206823
0xa57589103618b221accc1d173c5bb423e12b27cdbfedfd1e7dbd52895a44bedd6 days 15 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00236375
0xb3a7ab8837a07ea90bdf44605d6084b9f05ce10c42847cd0c6b5f29bc6a380e86 days 16 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00206823
0x05ed898700a94a2bd9d4d4ad6f33703f7b2c52fa84306f9e2767468581a96a237 days 3 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00236119
0x804ab12856bf8138c186ee5e11a0f0e94fe12dab60807957c169619b41d6d46f7 days 3 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00236823
0x8555c9090664d19db5eef4bac69e1049387ee6f77f75eca3dafc84f248a2e57b7 days 3 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00236311
0xf5941a9dbbf1bb226f1c4fbe1c1a398f877cee1910a72cf7d7263dac285682087 days 6 hrs ago0x523b82ec6a1ddcbc83df85454ed8018c8327420b  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.000881391
0x525d0660e48be775c8193c73d091858f36dfb5c7358dfda2f9257df7d7311be27 days 6 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00250991
0xb74ff64d0eb24f1844f1355dfb07ec4a1190330407f374a17ca8515169b0421412 days 13 hrs ago0x14d768309f02e9770482205fc6ebd3c22df4f1cf  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.000573438
0x43db08424f51655da8aacd0ce60ceff147f228a7c7d1381e0e1a8adb0777c40e13 days 3 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.001133217
0xf8fcd69e54ac7147253c5fa78cdd180a3f223ea6383698c0c49eb98304afc95013 days 4 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.001133217
0x28fa27b5c4803b4ffc86303c5f6e6d91070114992e9b280be4f30f00f6b0678b13 days 4 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.001133217
0x23984f4c112d3d7390ffeebfe694f8ac6c784e44d8d72230858ad5a8428be4d213 days 4 hrs ago0x10a12b15b879f098132324595db383e5cd178ac5  IN   0x8d1f7511c7e7afaf9494dc08f7e9b1104f3187590 Ether0.00050237
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Contract Source Code Verified (Exact Match)
Contract Name: NATEE
Compiler Text: v0.4.25+commit.59dbf8f1
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.25;


// library for basic math operation + - * / to prevent and protect overflow error 
// (Overflow and Underflow) which can be occurred from unit256 (Unsigned int 256)
 library SafeMath256 {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if(a==0 || b==0)
        return 0;  
    uint256 c = a * b;
    require(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b>0);
    uint256 c = a / b;
    return c;
  }

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

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a);

    return c;
  }
  
}


// Mandatory basic functions according to ERC20 standard
contract ERC20 {
	   event Transfer(address indexed from, address indexed to, uint256 tokens);
       event Approval(address indexed tokenOwner, address indexed spender, uint256 tokens);

   	   function totalSupply() public view returns (uint256);
       function balanceOf(address tokenOwner) public view returns (uint256 balance);
       function allowance(address tokenOwner, address spender) public view returns (uint256 remaining);

       function transfer(address to, uint256 tokens) public returns (bool success);
       
       function approve(address spender, uint256 tokens) public returns (bool success);
       function transferFrom(address from, address to, uint256 tokens) public returns (bool success);
  

}


// Contract Ownable is used to specified which person has right/permission to execute/invoke the specific function.
// Different from OnlyOwner which is the only owner of the smart contract who has right/permission to call
// the specific function. Aside from OnlyOwner, 
// OnlyOwners can also be used which any of Owners can call the particular function.

contract Ownable {


// A list of owners which will be saved as a list here, 
// and the values are the owner’s names. 
// This to allow investors / NATEE Token buyers to trace/monitor 
// who executes which functions written in this NATEE smart contract  string [] ownerName;

  string [] ownerName;  
  mapping (address=>bool) owners;
  mapping (address=>uint256) ownerToProfile;
  address owner;

// all events will be saved as log files
  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
  event AddOwner(address newOwner,string name);
  event RemoveOwner(address owner);
  /**
   * @dev Ownable constructor , initializes sender’s account and 
   * set as owner according to default value according to contract
   *
   */

   // this function will be executed during initial load and will keep the smart contract creator (msg.sender) as Owner
   // and also saved in Owners. This smart contract creator/owner is 
   // Mr. Samret Wajanasathian CTO of Seitee Pte Ltd (https://seitee.com.sg , https://natee.io)

   constructor() public {
    owner = msg.sender;
    owners[msg.sender] = true;
    uint256 idx = ownerName.push("SAMRET WAJANASATHIAN");
    ownerToProfile[msg.sender] = idx;

  }

// function to check whether the given address is either Wallet address or Contract Address

  function isContract(address _addr) internal view returns(bool){
     uint256 length;
     assembly{
      length := extcodesize(_addr)
     }
     if(length > 0){
       return true;
    }
    else {
      return false;
    }

  }

// function to check if the executor is the owner? This to ensure that only the person 
// who has right to execute/call the function has the permission to do so.
  modifier onlyOwner(){
    require(msg.sender == owner);
    _;
  }

// This function has only one Owner. The ownership can be transferrable and only
//  the current Owner will only be  able to execute this function.
  
  function transferOwnership(address newOwner,string newOwnerName) public onlyOwner{
    require(isContract(newOwner) == false);
    uint256 idx;
    if(ownerToProfile[newOwner] == 0)
    {
    	idx = ownerName.push(newOwnerName);
    	ownerToProfile[newOwner] = idx;
    }


    emit OwnershipTransferred(owner,newOwner);
    owner = newOwner;

  }

// Function to check if the person is listed in a group of Owners and determine
// if the person has the any permissions in this smart contract such as Exec permission.
  
  modifier onlyOwners(){
    require(owners[msg.sender] == true);
    _;
  }

// Function to add Owner into a list. The person who wanted to add a new owner into this list but be an existing
// member of the Owners list. The log will be saved and can be traced / monitor who’s called this function.
  
  function addOwner(address newOwner,string newOwnerName) public onlyOwners{
    require(owners[newOwner] == false);
    require(newOwner != msg.sender);
    if(ownerToProfile[newOwner] == 0)
    {
    	uint256 idx = ownerName.push(newOwnerName);
    	ownerToProfile[newOwner] = idx;
    }
    owners[newOwner] = true;
    emit AddOwner(newOwner,newOwnerName);
  }

// Function to remove the Owner from the Owners list. The person who wanted to remove any owner from Owners
// List must be an existing member of the Owners List. The owner cannot evict himself from the Owners
// List by his own, this is to ensure that there is at least one Owner of this NATEE Smart Contract.
// This NATEE Smart Contract will become useless if there is no owner at all.

  function removeOwner(address _owner) public onlyOwners{
    require(_owner != msg.sender);  // can't remove your self
    owners[_owner] = false;
    emit RemoveOwner(_owner);
  }
// this function is to check of the given address is allowed to call/execute the particular function
// return true if the given address has right to execute the function.
// for transparency purpose, anyone can use this to trace/monitor the behaviors of this NATEE smart contract.

  function isOwner(address _owner) public view returns(bool){
    return owners[_owner];
  }

// Function to check who’s executed the functions of smart contract. This returns the name of 
// Owner and this give transparency of whose actions on this NATEE Smart Contract. 

  function getOwnerName(address ownerAddr) public view returns(string){
  	require(ownerToProfile[ownerAddr] > 0);

  	return ownerName[ownerToProfile[ownerAddr] - 1];
  }
}

// ContractToken is for managing transactions of wallet address or contract address with its own 
// criterias and conditions such as settlement.

contract ControlToken is Ownable{
	
	mapping (address => bool) lockAddr;
	address[] lockAddrList;
	uint32  unlockDate;

     bool disableBlock;
     bool call2YLock;

	mapping(address => bool) allowControl;
	address[] exchangeAddress;
	uint32    exchangeTimeOut;

	event Call2YLock(address caller);

// Initially the lockin period is set for 100 years starting from the date of Smart Contract Deployment.
// The company will have to adjust it to 2 years for lockin period starting from the first day that 
// NATEE token listed in exchange (in any exchange).

	constructor() public{
		unlockDate = uint32(now) + 36500 days;  // Start Lock 100 Year first
		
	}

// function to set Wallet Address that belong to Exclusive Exchange. 
// The lockin period for this setting has its minimum of 6 months.

	function setExchangeAddr(address _addr) onlyOwners public{
		uint256 numEx = exchangeAddress.push(_addr);
		if(numEx == 1){
			exchangeTimeOut = uint32(now + 180 days);
		}
	}

// Function to adjust lockin period of Exclusive Exchange,
// this could unlock the lockin period and allow freedom trade.

	function setExchangeTimeOut(uint32 timStemp) onlyOwners public{
		exchangeTimeOut = timStemp;
	}

// This function is used to set duration from 100 years to 2 years, start counting from the date that execute this function.
// To prevent early execution and to ensure that only the legitimate Owner can execute this function, 
// Seitee Pte Ltd has logged all activities from this function which open for public for transparency.
// The generated log will be publicly published on ERC20 network, anyone can check/trace from the log
// that this function will never been called if there no confirmed Exchange that accepts NATEE Token.
// Any NATEE token holders who still serving lockin period, can ensure that there will be no repeatedly 
// execution for this function (the repeatedly execution could lead to lockin period extension to more than 2 years). 
// The constraint “call2YLock” is initialized as boolean “False” when the NATEE Smart Contract is created and will only 
// be set to “true” when this function is executed. One the value changed from false > true, it will preserve the value forever.

	function start2YearLock() onlyOwners public{
		if(call2YLock == false){
			unlockDate = uint32(now) + 730 days;
			call2YLock = true;

			emit Call2YLock(msg.sender);
		}
	
	}

	function lockAddress(address _addr) internal{
		if(lockAddr[_addr] == false)
		{
			lockAddr[_addr] = true;
			lockAddrList.push(_addr);
		}
	}

	function isLockAddr(address _addr) public view returns(bool){
		return lockAddr[_addr];
	}

// this internal function is used to add address into the locked address list. 
	
	function addLockAddress(address _addr) onlyOwners public{
		if(lockAddr[_addr] == false)
		{
			lockAddr[_addr] = true;
			lockAddrList.push(_addr);		
		}
	}

// Function to unlock the token for all addresses. This function is open as public modifier
// stated to allow anyone to execute it. This to prevent the doubtful of delay of unlocking
// or any circumstances that prolong the unlocking. This just simply means, anyone can unlock 
// the address for anyone in this Smart Contract.

	function unlockAllAddress() public{
		if(uint32(now) >= unlockDate)
		{
			for(uint256 i=0;i<lockAddrList.length;i++)
			{
				lockAddr[lockAddrList[i]] = false;
			}
		}
	}

// The followings are the controls for Token Transfer, the Controls are managed by Seitee Pte Ltd
//========================= ADDRESS CONTROL =======================
//  This internal function is to indicate that the Wallet Address has been allowed and let Seitee Pte Ltd
//  to do transactions. The initial value is closed which means, Seitee Pte Lte cannot do any transactions.

	function setAllowControl(address _addr) internal{
		if(allowControl[_addr] == false)
			allowControl[_addr] = true;
	}

// this function is to check whether the given Wallet Address can be managed/controlled by Seitee Pte Ltd.
// If return “true” means, Seitee Pte Ltd take controls of this Wallet Address.

	function checkAllowControl(address _addr) public view returns(bool){
		return allowControl[_addr];
	}

// NATEE Token system prevents the transfer of token to non-verified Wallet Address
// (the Wallet Address that hasn’t been verified thru KYC). This can also means that 
// Token wont be transferable to other Wallet Address that not saved in this Smart Contract. 
// This function is created for everyone to unlock the Wallet Address, once the Wallet Address is unlocked,
// the Wallet Address can’t be set to lock again. Our Smart Contract doesn’t have any line that 
// contains “disableBlock = false”. The condition is when there is a new exchange in the system and 
// fulfill the 6 months lockin period or less (depends on the value set).
   
    function setDisableLock() public{
    	if(uint256(now) >= exchangeTimeOut && exchangeAddress.length > 0)
    	{
      	if(disableBlock == false)
      		disableBlock = true;
      	}
    }

}

// NATEE token smart contract stored KYC Data on Blockchain for transparency. 
// Only Seitee Pte Ltd has the access to this KYC data. The authorities/Government 
// Agencies can be given the access to view this KYC data, too (subject to approval).
// Please note, this is not open publicly.

contract KYC is ControlToken{


	struct KYCData{
		bytes8    birthday; // yymmdd  
		bytes16   phoneNumber; 

		uint16    documentType; // 2 byte;
		uint32    createTime; // 4 byte;
		// --- 32 byte
		bytes32   peronalID;  // Passport หรือ idcard
		// --- 32 byte 
		bytes32    name;
		bytes32    surName;
		bytes32    email;
		bytes8	  password;
	}

	KYCData[] internal kycDatas;

	mapping (uint256=>address) kycDataForOwners;
	mapping (address=>uint256) OwnerToKycData;

	mapping (uint256=>address) internal kycSOSToOwner; //keccak256 for SOS function 


	event ChangePassword(address indexed owner_,uint256 kycIdx_);
	event CreateKYCData(address indexed owner_, uint256 kycIdx_);

	// Individual KYC data the parameter is index of the KYC data. Only Seitee Pte Ltd can view this data.

	function getKYCData(uint256 _idx) onlyOwners view public returns(bytes16 phoneNumber_,
										 							  bytes8  birthday_,
										 							  uint16 documentType_,
										 							  bytes32 peronalID_,
										 							  bytes32 name_,
										 							  bytes32 surname_,
										 							  bytes32 email_){
		require(_idx <= kycDatas.length && _idx > 0,"ERROR GetKYCData 01");
		KYCData memory _kyc;
		uint256  kycKey = _idx - 1; 
		_kyc = kycDatas[kycKey];

		phoneNumber_ = _kyc.phoneNumber;
		birthday_ = _kyc.birthday;
		documentType_ = _kyc.documentType;
		peronalID_ = _kyc.peronalID;
		name_ = _kyc.name;
		surname_ = _kyc.surName;
		email_ = _kyc.email;

		} 

	// function to view KYC data from registered Wallet Address. Only Seitee Pte Ltd has right to view this data.
	function getKYCDataByAddr(address _addr) onlyOwners view public returns(bytes16 phoneNumber_,
										 							  bytes8  birthday_,
										 							  uint16 documentType_,
										 							  bytes32 peronalID_,
										 							  bytes32 name_,
										 							  bytes32 surname_,
										 							  bytes32 email_){
		require(OwnerToKycData[_addr] > 0,"ERROR GetKYCData 02");
		KYCData memory _kyc;
		uint256  kycKey = OwnerToKycData[_addr] - 1; 
		_kyc = kycDatas[kycKey];

		phoneNumber_ = _kyc.phoneNumber;
		birthday_ = _kyc.birthday;
		documentType_ = _kyc.documentType;
		peronalID_ = _kyc.peronalID;
		name_ = _kyc.name;
		surname_ = _kyc.surName;
		email_ = _kyc.email;

		} 

	// The Owner can view the history records from KYC processes.
	function getKYCData() view public returns(bytes16 phoneNumber_,
										 					 bytes8  birthday_,
										 					 uint16 documentType_,
										 					 bytes32 peronalID_,
										 					 bytes32 name_,
										 					 bytes32 surname_,
										 					 bytes32 email_){
		require(OwnerToKycData[msg.sender] > 0,"ERROR GetKYCData 03"); // if == 0 not have data;
		uint256 id = OwnerToKycData[msg.sender] - 1;

		KYCData memory _kyc;
		_kyc = kycDatas[id];

		phoneNumber_ = _kyc.phoneNumber;
		birthday_ = _kyc.birthday;
		documentType_ = _kyc.documentType;
		peronalID_ = _kyc.peronalID;
		name_ = _kyc.name;
		surname_ = _kyc.surName;
		email_ = _kyc.email;
	}

// 6 chars password which the Owner can update the password by himself/herself. Only the Owner can execute this function.
	function changePassword(bytes8 oldPass_, bytes8 newPass_) public returns(bool){
		require(OwnerToKycData[msg.sender] > 0,"ERROR changePassword"); 
		uint256 id = OwnerToKycData[msg.sender] - 1;
		if(kycDatas[id].password == oldPass_)
		{
			kycDatas[id].password = newPass_;
			emit ChangePassword(msg.sender, id);
		}
		else
		{
			assert(kycDatas[id].password == oldPass_);
		}

		return true;


	}

	// function to create record of KYC data
	function createKYCData(bytes32 _name, bytes32 _surname, bytes32 _email,bytes8 _password, bytes8 _birthday,bytes16 _phone,uint16 _docType,bytes32 _peronalID,address  _wallet) onlyOwners public returns(uint256){
		uint256 id = kycDatas.push(KYCData(_birthday, _phone, _docType, uint32(now) ,_peronalID, _name, _surname, _email, _password));
		uint256 sosHash = uint256(keccak256(abi.encodePacked(_name, _surname , _email, _password)));

		OwnerToKycData[_wallet] = id;
		kycDataForOwners[id] = _wallet; 
		kycSOSToOwner[sosHash] = _wallet; 
		emit CreateKYCData(_wallet,id);

		return id;
	}

	function maxKYCData() public view returns(uint256){
		return kycDatas.length;
	}

	function haveKYCData(address _addr) public view returns(bool){
		if(OwnerToKycData[_addr] > 0) return true;
		else return false;
	}

}

// Standard ERC20 function, no overriding at the moment.

contract StandarERC20 is ERC20{
	using SafeMath256 for uint256;  
     
     mapping (address => uint256) balance;
     mapping (address => mapping (address=>uint256)) allowed;


     uint256 public totalSupply_;  
     

     address[] public  holders;
     mapping (address => uint256) holderToId;


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


// Total number of Tokens 
    function totalSupply() public view returns (uint256){
     	return totalSupply_;
    }

     function balanceOf(address _walletAddress) public view returns (uint256){
        return balance[_walletAddress]; 
     }

// function to check on how many tokens set to be transfer between _owner and _spender. This is to check prior to confirm the transaction. 
     function allowance(address _owner, address _spender) public view returns (uint256){
          return allowed[_owner][_spender];
        }

// Standard function used to transfer the token according to ERC20 standard
     function transfer(address _to, uint256 _value) public returns (bool){
        require(_value <= balance[msg.sender]);
        require(_to != address(0));
        
        balance[msg.sender] = balance[msg.sender].sub(_value);
        balance[_to] = balance[_to].add(_value);

        emit Transfer(msg.sender,_to,_value); 
        return true;

     }
// standard function to approve transfer of token
     function approve(address _spender, uint256 _value)
            public returns (bool){
            allowed[msg.sender][_spender] = _value;

            emit Approval(msg.sender, _spender, _value);
            return true;
            }


// standard function to request the money used after the sender has initialize the 
// transition of money transfer. Only the beneficiary able to execute this function 
// and the amount of money has been set as transferable by the sender.  
      function transferFrom(address _from, address _to, uint256 _value)
            public returns (bool){
               require(_value <= balance[_from]);
               require(_value <= allowed[_from][msg.sender]); 
               require(_to != address(0));

              balance[_from] = balance[_from].sub(_value);
              balance[_to] = balance[_to].add(_value);
              allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);

              emit Transfer(_from, _to, _value);
              return true;
      }

// additional function to store all NATEE Token holders as a list in blockchain.
// This could be use for bounty program in the future.
     function addHolder(address _addr) internal{
     	if(holderToId[_addr] == 0)
     	{
     		uint256 idx = holders.push(_addr);
     		holderToId[_addr] = idx;
     	}
     }

// function to request the top NATEE Token holders.
     function getMaxHolders() external view returns(uint256){
     	return holders.length;
     }

// function to read all indexes of NATEE Token holders. 
     function getHolder(uint256 idx) external view returns(address){
     	return holders[idx];
     }
     
}


// Contract for co-founders and advisors which is total of 5,000,000 Tokens for co-founders
// and 4,000,000 tokens for advisors. Maximum NATEE token for advisor is 200,000 Tokens and 
// the deficit from 4,000,000 tokens allocated to advisors, will be transferred to co-founders.

contract FounderAdvisor is StandarERC20,Ownable,KYC {

	uint256 FOUNDER_SUPPLY = 5000000 ether;
	uint256 ADVISOR_SUPPLY = 4000000 ether;

	address[] advisors;
	address[] founders;

	mapping (address => uint256) advisorToID;
	mapping (address => uint256) founderToID;
	// will have true if already redeem.
	// Advisor and founder can't be same people

	bool  public closeICO;

	// Will have this value after close ICO

	uint256 public TOKEN_PER_FOUNDER = 0 ether; 
	uint256 public TOKEN_PER_ADVISOR = 0 ether;

	event AddFounder(address indexed newFounder,string nane,uint256  curFoounder);
	event AddAdvisor(address indexed newAdvisor,string name,uint256  curAdvisor);
	event CloseICO();

	event RedeemAdvisor(address indexed addr_, uint256 value);
	event RedeemFounder(address indexed addr_, uint256 value);

	event ChangeAdvisorAddr(address indexed oldAddr_, address indexed newAddr_);
	event ChangeFounderAddr(address indexed oldAddr_, address indexed newAddr_);


// function to add founders, name and surname will be logged. This 
// function will be disabled after ICO closed.
	function addFounder(address newAddr, string _name) onlyOwners external returns (bool){
		require(closeICO == false);
		require(founderToID[newAddr] == 0);

		uint256 idx = founders.push(newAddr);
		founderToID[newAddr] = idx;
		emit AddFounder(newAddr, _name, idx);
		return true;
	}

// function to add advisors. This function will be disabled after ICO closed.

	function addAdvisor(address newAdvis, string _name) onlyOwners external returns (bool){
		require(closeICO == false);
		require(advisorToID[newAdvis] == 0);

		uint256 idx = advisors.push(newAdvis);
		advisorToID[newAdvis] = idx;
		emit AddAdvisor(newAdvis, _name, idx);
		return true;
	}

// function to update Advisor’s Wallet Address. If there is a need to remove the advisor,
// just input address = 0. This function will be disabled after ICO closed.

	function changeAdvisorAddr(address oldAddr, address newAddr) onlyOwners external returns(bool){
		require(closeICO == false);
		require(advisorToID[oldAddr] > 0); // it should be true if already have advisor

		uint256 idx = advisorToID[oldAddr];

		advisorToID[newAddr] = idx;
		advisorToID[oldAddr] = 0;

		advisors[idx - 1] = newAddr;

		emit ChangeAdvisorAddr(oldAddr,newAddr);
		return true;
	}

// function to update founder’s Wallet Address. To remove the founder, 
// pass the value of address = 0. This function will be disabled after ICO closed.
	function changeFounderAddr(address oldAddr, address newAddr) onlyOwners external returns(bool){
		require(closeICO == false);
		require(founderToID[oldAddr] > 0);

		uint256 idx = founderToID[oldAddr];

		founderToID[newAddr] = idx;
		founderToID[oldAddr] = 0;
		founders[idx - 1] = newAddr;

		emit ChangeFounderAddr(oldAddr, newAddr);
		return true;
	}

	function isAdvisor(address addr) public view returns(bool){
		if(advisorToID[addr] > 0) return true;
		else return false;
	}

	function isFounder(address addr) public view returns(bool){
		if(founderToID[addr] > 0) return true;
		else return false;
	}
}

// Contract MyToken is created for extra permission to make a transfer of token. Typically,
// NATEE Token will be held and will only be able to transferred to those who has successfully 
// done the KYC. For those who holds NATEE PRIVATE TOKEN at least 8,000,000 tokens is able to 
// transfer the token to anyone with no limit.

contract MyToken is FounderAdvisor {
	 using SafeMath256 for uint256;  
     mapping(address => uint256) privateBalance;


     event SOSTranfer(address indexed oldAddr_, address indexed newAddr_);

// standard function according to ERC20, modified by adding the condition of lockin period (2 years)
// for founders and advisors. Including the check whether the address has been KYC verified and is 
// NATEE PRIVATE TOKEN holder will be able to freedomly trade the token.

     function transfer(address _to, uint256 _value) public returns (bool){
     	if(lockAddr[msg.sender] == true) // 2 Year lock can Transfer only Lock Address
     	{
     		require(lockAddr[_to] == true);
     	}

     	// if total number of NATEE PRIVATE TOKEN is less than amount that wish to transfer
     	if(privateBalance[msg.sender] < _value){
     		if(disableBlock == false)
     		{
        		require(OwnerToKycData[msg.sender] > 0,"You Not have permission to Send");
        		require(OwnerToKycData[_to] > 0,"You not have permission to Recieve");
        	}
   		 }
        
         addHolder(_to);

        if(super.transfer(_to, _value) == true)
        {
        	// check if the total balance of token is less than transferred amount
        	if(privateBalance[msg.sender] <= _value)
        	{
        		privateBalance[_to] += privateBalance[msg.sender];
        		privateBalance[msg.sender] = 0;
        	}
        	else
        	{
        		privateBalance[msg.sender] = privateBalance[msg.sender].sub(_value);
        		privateBalance[_to] = privateBalance[_to].add(_value);
        	}

        	return true;
        }


        return false;

     }

// standard function ERC20, with additional criteria for 2 years lockin period for Founders and Advisors.
// Check if the owner of that Address has done the KYC successfully, if yes and having NATEE Private Token
// then, will be allowed to make the transfer.

      function transferFrom(address _from, address _to, uint256 _value) public returns (bool){
            require(lockAddr[_from] == false); //2 Year Lock Can't Transfer

            if(privateBalance[_from] < _value)
            {
            	if(disableBlock == false)
            	{	
         	    	require(OwnerToKycData[msg.sender] > 0, "You Not Have permission to Send");
            		require(OwnerToKycData[_to] > 0,"You not have permission to recieve");
        		}
        	}
           
            addHolder(_to);

            if(super.transferFrom(_from, _to, _value) == true)
            {
            	 if(privateBalance[msg.sender] <= _value)
        		{
        			privateBalance[_to] += privateBalance[msg.sender];
        			privateBalance[msg.sender] = 0;
        		}
        		else
        		{
        			privateBalance[msg.sender] = privateBalance[msg.sender].sub(_value);
        			privateBalance[_to] = privateBalance[_to].add(_value);
        		}

        		return true;
            }
            return false;

      }

      // function to transfer all asset from the old wallet to new wallet. This is used, just in case, the owner forget the private key.
      // The owner who which to update the wallet by calling this function must have successfully done KYC and the 6 alpha numeric password
      // must be used and submit to Seitee Pte Ltd. The company will recover the old wallet address and transfer the assets to the new wallet
      // address on behave of the owner of the wallet address.  
      function sosTransfer(bytes32 _name, bytes32 _surname, bytes32 _email,bytes8 _password,address _newAddr) onlyOwners public returns(bool){

      	uint256 sosHash = uint256(keccak256(abi.encodePacked(_name, _surname , _email, _password)));
      	address oldAddr = kycSOSToOwner[sosHash];
      	uint256 idx = OwnerToKycData[oldAddr];

      	require(allowControl[oldAddr] == false);
      	if(idx > 0)
      	{
      		idx = idx - 1;
      		if(kycDatas[idx].name == _name &&
      		   kycDatas[idx].surName == _surname &&
      		   kycDatas[idx].email == _email &&
      		   kycDatas[idx].password == _password)
      		{

      			kycSOSToOwner[sosHash] = _newAddr;
      			OwnerToKycData[oldAddr] = 0; // reset it
      			OwnerToKycData[_newAddr] = idx;
      			kycDataForOwners[idx] = _newAddr;

      			emit SOSTranfer(oldAddr, _newAddr);

      			lockAddr[_newAddr] = lockAddr[oldAddr];

      			//Transfer All Token to new address
      			balance[_newAddr] = balance[oldAddr];
      			balance[oldAddr] = 0;

      			privateBalance[_newAddr] = privateBalance[oldAddr];
      			privateBalance[oldAddr] = 0;

      			emit Transfer(oldAddr, _newAddr, balance[_newAddr]);
      		}
      	}


      	return true;
      }
     
// function for internal transfer between wallets that the controls have been given to
// the company (The owner can revoke these controls after ICO closed). Only the founders
// of Seitee Pte Ltd can execute this function. All activities will be publicly logged. 
// The user can trace/view the log to check transparency if any founders of the company 
// make the transfer of assets from your wallets. Again, Transparency is the key here.

      function inTransfer(address _from, address _to,uint256 value) onlyOwners public{
      	require(allowControl[_from] == true); //default = false
      	require(balance[_from] >= value);

      	balance[_from] -= value;
        balance[_to] = balance[_to].add(value);

        if(privateBalance[_from] <= value)
        {
        	privateBalance[_to] += privateBalance[_from];
        	privateBalance[_from] = 0;
        }
        else
        {
        	privateBalance[_from] = privateBalance[_from].sub(value);
        	privateBalance[_to] = privateBalance[_to].add(value);
        }

        emit Transfer(_from,_to,value); 
      }


     function balanceOfPrivate(address _walletAddress) public view returns (uint256){
        return privateBalance[_walletAddress]; 
     }

}





// Contract for NATEE PRIVATE TOKEN (1 NATEE PRIVATE TOKEN equivalent to 8 NATEE TOKEN)
contract NateePrivate {
	
    function redeemToken(address _redeem, uint256 _value) external;
	function getMaxHolder() view external returns(uint256);
	function getAddressByID(uint256 _id) view external returns(address);
	function balancePrivate(address _walletAddress)  public view returns (uint256);
	
}

// The interface of SGDS (Singapore Dollar Stable)
contract SGDSInterface{
  function balanceOf(address tokenOwner) public view returns (uint256 balance);
  function intTransfer(address _from, address _to, uint256 _value) external;
  function transferWallet(address _from,address _to) external;
  function getUserControl(address _addr) external view returns(bool); // if true mean user can control by him. false mean Company can control
  function useSGDS(address useAddr,uint256 value) external returns(bool);
  function transfer(address _to, uint256 _value) public returns (bool);

}

// Interface of NATEE Warrant
contract NateeWarrantInterface {

	function balanceOf(address tokenOwner) public view returns (uint256 balance);
	function redeemWarrant(address _from, uint256 _value) external;
	function getWarrantInfo() external view returns(string name_,string symbol_,uint256 supply_ );
	function getUserControl(address _addr) external view returns(bool);
	function sendWarrant(address _to,uint256 _value) external;
	function expireDate() public pure returns (uint32);
}



// HAVE 5 Type of REFERRAL
// 1 Buy 8,000 NATEE Then can get referral code REDEEM AFTER REACH SOFTCAP
// 2 FIX RATE REDEEM AFTER REARCH SOFTCAP NO Buy
// 3 adjust RATE REDEEM AFTER REARCH SOFTCAP NO Buy
// 4 adjust RATE REDEEM IMMEDIATLY NO Buy
// 5 FIX RATE REDEEM IMMEDIATLY NO Buy

// Contract for marketing by using referral code from above 5 scenarios.
contract Marketing is MyToken{
	struct REFERAL{
		uint8   refType;
		uint8   fixRate; // user for type 2 and 5
		uint256 redeemCom; // summary commision that redeem
		uint256 allCommission;
		uint256 summaryInvest;
	}

	REFERAL[] referals;
	mapping (address => uint256) referToID;

// Add address for referrer
	function addReferal(address _address,uint8 referType,uint8 rate) onlyOwners public{
		require(referToID[_address] == 0);
		uint256 idx = referals.push(REFERAL(referType,rate,0,0,0));
		referToID[_address] = idx;
	}


// increase bounty/commission rate for those who has successfully registered the address with this smart contract
	function addCommission(address _address,uint256 buyToken) internal{
		uint256 idx;
		if(referToID[_address] > 0)
		{
			idx = referToID[_address] - 1;
			uint256 refType = uint256(referals[idx].refType);
			uint256 fixRate = uint256(referals[idx].fixRate);

			if(refType == 1 || refType == 3 || refType == 4){
				referals[idx].summaryInvest += buyToken;
				if(referals[idx].summaryInvest <= 80000){
					referals[idx].allCommission =  referals[idx].summaryInvest / 20 / 2; // 5%
				}else if(referals[idx].summaryInvest >80000 && referals[idx].summaryInvest <=320000){
					referals[idx].allCommission = 2000 + (referals[idx].summaryInvest / 10 / 2); // 10%
				}else if(referals[idx].summaryInvest > 320000){
					referals[idx].allCommission = 2000 + 12000 + (referals[idx].summaryInvest * 15 / 100 / 2); // 10%					
				}
			}
			else if(refType == 2 || refType == 5){
				referals[idx].summaryInvest += buyToken;
				referals[idx].allCommission = (referals[idx].summaryInvest * 100) * fixRate / 100 / 2;
			}
		}
	}

	function getReferByAddr(address _address) onlyOwners view public returns(uint8 refType,
																			 uint8 fixRate,
																			 uint256 commision,
																			 uint256 allCommission,
																			 uint256 summaryInvest){
		REFERAL memory refer = referals[referToID[_address]-1];

		refType = refer.refType;
		fixRate = refer.fixRate;
		commision = refer.redeemCom;
		allCommission = refer.allCommission;
		summaryInvest = refer.summaryInvest;

	}
// check if the given address is listed in referral list
	function checkHaveRefer(address _address) public view returns(bool){
		return (referToID[_address] > 0);
	}

// check the total commission on what you have earned so far, the unit is SGDS (Singapore Dollar Stable)
	function getCommission(address addr) public view returns(uint256){
		require(referToID[addr] > 0);

		return referals[referToID[addr] - 1].allCommission;
	}
}

// ICO Contract
//	1. Set allocated tokens for sales during pre-sales, prices the duration for pre-sales is 270 days
//	2. Set allocated tokens for sales during public-sales, prices and the duration for public-sales is 90 days.
//	3. The entire duration pre-sales / public sales is no more than 270 days (9 months).
//	4. If the ICO fails to reach Soft Cap, the investors can request for refund by using SGDS and the company will give back into ETH (the exchange rate and ETH price depends on the market)
//	5. There are 2 addresses which will get 1% of fund raised and 5% but not more then 200,000 SGDS . These two addresses helped us in shaping up Business Model and Smart Contract. 

contract ICO_Token is  Marketing{

	uint256 PRE_ICO_ROUND = 20000000 ;
	uint256 ICO_ROUND = 40000000 ;
	uint256 TOKEN_PRICE = 50; // 0.5 SGDS PER TOKEN

	bool    startICO;  //default = false;
	bool    icoPass;
	bool    hardCap;
	bool    public pauseICO;
	uint32  public icoEndTime;
	uint32  icoPauseTime;
	uint32  icoStartTime;
	uint256 totalSell;
	uint256 MIN_PRE_ICO_ROUND = 400 ;
	uint256 MIN_ICO_ROUND = 400 ;
	uint256 MAX_ICO_ROUND = 1000000 ;
	uint256 SOFT_CAP = 10000000 ;

	uint256 _1Token = 1 ether;

	SGDSInterface public sgds;
	NateeWarrantInterface public warrant;

	mapping (address => uint256) totalBuyICO;
	mapping (address => uint256) redeemed;
	mapping (address => uint256) redeemPercent;
	mapping (address => uint256) redeemMax;


	event StartICO(address indexed admin, uint32 startTime,uint32 endTime);
	event PassSoftCap(uint32 passTime);
	event BuyICO(address indexed addr_,uint256 value);
	event BonusWarrant(address indexed,uint256 startRank,uint256 stopRank,uint256 warrantGot);

	event RedeemCommision(address indexed, uint256 sgdsValue,uint256 curCom);
	event Refund(address indexed,uint256 sgds,uint256 totalBuy);

	constructor() public {
		//sgds = 
		//warrant = 
		pauseICO = false;
		icoEndTime = uint32(now + 365 days); 
	}

	function pauseSellICO() onlyOwners external{
		require(startICO == true);
		require(pauseICO == false);
		icoPauseTime = uint32(now);
		pauseICO = true;

	}
// NEW FUNCTION 
	function resumeSellICO() onlyOwners external{
		require(pauseICO == true);
		pauseICO = false;
		// Add Time That PAUSE BUT NOT MORE THEN 2 YEAR
		uint32   pauseTime = uint32(now) - icoPauseTime;
		uint32   maxSellTime = icoStartTime + 730 days;
		icoEndTime += pauseTime;
		if(icoEndTime > maxSellTime) icoEndTime = maxSellTime;
		pauseICO = false;
	}

// Function to kicks start the ICO, Auto triggered as soon as the first 
// NATEE TOKEN transfer committed.

	function startSellICO() internal returns(bool){
		require(startICO == false); //  IF Start Already it can't call again
		icoStartTime = uint32(now);
		icoEndTime = uint32(now + 270 days); // ICO 9 month
		startICO = true;

		emit StartICO(msg.sender,icoStartTime,icoEndTime);

		return true;
	}

// this function will be executed automatically as soon as Soft Cap reached. By limited additional 90 days 
// for public-sales in the total remain days is more than 90 days (the entire ICO takes no more than 270 days).
// For example, if the pre-sales takes 200 days, the public sales duration will be 70 days (270-200). 
// Starting from the date that // Soft Cap reached
// if the pre-sales takes 150 days, the public sales duration will be 90 days starting from the date that 
// Soft Cap reached
	function passSoftCap() internal returns(bool){
		icoPass = true;
		// after pass softcap will continue sell 90 days
		if(icoEndTime - uint32(now) > 90 days)
		{
			icoEndTime = uint32(now) + 90 days;
		}


		emit PassSoftCap(uint32(now));
	}

// function to refund, this is used when fails to reach Soft CAP and the ICO takes more than 270 days.
// if Soft Cap reached, no refund

	function refund() public{
		require(icoPass == false);
		uint32   maxSellTime = icoStartTime + 730 days;
		if(pauseICO == true)
		{
			if(uint32(now) <= maxSellTime)
			{
				return;
			}
		}
		if(uint32(now) >= icoEndTime)
		{
			if(totalBuyICO[msg.sender] > 0) 
			{
				uint256  totalSGDS = totalBuyICO[msg.sender] * TOKEN_PRICE;
				uint256  totalNatee = totalBuyICO[msg.sender] * _1Token;
				require(totalNatee == balance[msg.sender]);

				emit Refund(msg.sender,totalSGDS,totalBuyICO[msg.sender]);
				totalBuyICO[msg.sender] = 0;
				sgds.transfer(msg.sender,totalSGDS);
			}	
		}
	}

// This function is to allow the owner of Wallet Address to set the value (Boolean) to grant/not grant the permission to himself/herself.
// This clearly shows that no one else could set the value to the anyone’s Wallet Address, only msg.sender or the executor of this 
// function can set the value in this function.

	function userSetAllowControl(bool allow) public{
		require(closeICO == true);
		allowControl[msg.sender] = allow;
	}
	
// function to calculate the bonus. The bonus will be paid in Warrant according to listed in Bounty section in NATEE Whitepaper

	function bonusWarrant(address _addr,uint256 buyToken) internal{
	// 1-4M GOT 50%
	// 4,000,0001 - 12M GOT 40% 	
	// 12,000,0001 - 20M GOT 30%
	// 20,000,0001 - 30M GOT 20%
	// 30,000,0001 - 40M GOT 10%
		uint256  gotWarrant;

//======= PRE ICO ROUND =============
		if(totalSell <= 4000000)
			gotWarrant = buyToken / 2;  // Got 50%
		else if(totalSell >= 4000001 && totalSell <= 12000000)
		{
			if(totalSell - buyToken < 4000000) // It mean between pre bonus and this bonus
			{
				gotWarrant = (4000000 - (totalSell - buyToken)) / 2;
				gotWarrant += (totalSell - 4000000) * 40 / 100;
			}
			else
			{
				gotWarrant = buyToken * 40 / 100; 
			}
		}
		else if(totalSell >= 12000001 && totalSell <= 20000000)
		{
			if(totalSell - buyToken < 4000000)
			{
				gotWarrant = (4000000 - (totalSell - buyToken)) / 2;
				gotWarrant += 2400000; //8000000 * 40 / 100; fix got 2.4 M Token 
				gotWarrant += (totalSell - 12000000) * 30 / 100; 
			}
			else if(totalSell - buyToken < 12000000 )
			{
				gotWarrant = (12000000 - (totalSell - buyToken)) * 40 / 100;
				gotWarrant += (totalSell - 12000000) * 30 / 100; 				
			}
			else
			{
				gotWarrant = buyToken * 30 / 100; 
			}
		}
		else if(totalSell >= 20000001 && totalSell <= 30000000) // public ROUND
		{
			gotWarrant = buyToken / 5; // 20%
		}
		else if(totalSell >= 30000001 && totalSell <= 40000000)
		{
			if(totalSell - buyToken < 30000000)
			{
				gotWarrant = (30000000 - (totalSell - buyToken)) / 5;
				gotWarrant += (totalSell - 30000000) / 10;
			}
			else
			{
				gotWarrant = buyToken / 10;  // 10%
			}
		}
		else if(totalSell >= 40000001)
		{
			if(totalSell - buyToken < 40000000)
			{
				gotWarrant = (40000000 - (totalSell - buyToken)) / 10;
			}
			else
				gotWarrant = 0;
		}

//====================================

		if(gotWarrant > 0)
		{
			gotWarrant = gotWarrant * _1Token;
			warrant.sendWarrant(_addr,gotWarrant);
			emit BonusWarrant(_addr,totalSell - buyToken,totalSell,gotWarrant);
		}

	}

// NATEE Token can only be purchased by using SGDS
// function to purchase NATEE token, if the purchase transaction committed, the address will be controlled. 
// The address wont be able to make any transfer 

	function buyNateeToken(address _addr, uint256 value,bool refer) onlyOwners external returns(bool){
		
		require(closeICO == false);
		require(pauseICO == false);
		require(uint32(now) <= icoEndTime);
		require(value % 2 == 0); // 

		if(startICO == false) startSellICO();
		uint256  sgdWant;
		uint256  buyToken = value;

		if(totalSell < PRE_ICO_ROUND)   // Still in PRE ICO ROUND
		{
			require(buyToken >= MIN_PRE_ICO_ROUND);

			if(buyToken > PRE_ICO_ROUND - totalSell)
			   buyToken = uint256(PRE_ICO_ROUND - totalSell);
		}
		else if(totalSell < PRE_ICO_ROUND + ICO_ROUND)
		{
			require(buyToken >= MIN_ICO_ROUND);

			if(buyToken > MAX_ICO_ROUND) buyToken = MAX_ICO_ROUND;
			if(buyToken > (PRE_ICO_ROUND + ICO_ROUND) - totalSell)
				buyToken = (PRE_ICO_ROUND + ICO_ROUND) - totalSell;
		}
		
		sgdWant = buyToken * TOKEN_PRICE;

		require(sgds.balanceOf(_addr) >= sgdWant);
		sgds.intTransfer(_addr,address(this),sgdWant); // All SGSD Will Transfer to this account
		emit BuyICO(_addr, buyToken * _1Token);

		balance[_addr] += buyToken * _1Token;
		totalBuyICO[_addr] += buyToken;
		//-------------------------------------
		// Add TotalSupply HERE
		totalSupply_ += buyToken * _1Token;
		//-------------------------------------  
		totalSell += buyToken;
		if(totalBuyICO[_addr] >= 8000 && referToID[_addr] == 0)
			addReferal(_addr,1,0);

		bonusWarrant(_addr,buyToken);
		if(totalSell >= SOFT_CAP && icoPass == false) passSoftCap(); // mean just pass softcap

		if(totalSell >= PRE_ICO_ROUND + ICO_ROUND && hardCap == false)
		{
			hardCap = true;
			setCloseICO();
		}
		
		setAllowControl(_addr);
		addHolder(_addr);

		if(refer == true)
			addCommission(_addr,buyToken);

		emit Transfer(address(this),_addr, buyToken * _1Token);


		return true;
	}


// function to withdraw the earned commission. This depends on type of referral code you holding. 
// If Soft Cap pass is required, you will earn SGDS and withdraw the commission to be paid in ETH
	
	function redeemCommision(address addr,uint256 value) public{
		require(referToID[addr] > 0);
		uint256 idx = referToID[addr] - 1;
		uint256 refType = uint256(referals[idx].refType);

		if(refType == 1 || refType == 2 || refType == 3)
			require(icoPass == true);

		require(value > 0);
		require(value <= referals[idx].allCommission - referals[idx].redeemCom);

		// TRANSFER SGDS TO address
		referals[idx].redeemCom += value; 
		sgds.transfer(addr,value);

		emit RedeemCommision(addr,value,referals[idx].allCommission - referals[idx].redeemCom);

	}


// check how many tokens sold. This to display on official natee.io website.
	function getTotalSell() external view returns(uint256){
		return totalSell;
	}
// check how many token purchased from the given address.
	function getTotalBuyICO(address _addr) external view returns(uint256){
		return totalBuyICO[_addr];
	}


// VALUE IN SGDS 
// Function for AGC and ICZ REDEEM SHARING  // 100 % = 10000
	function addCOPartner(address addr,uint256 percent,uint256 maxFund) onlyOwners public {
			require(redeemPercent[addr] == 0);
			redeemPercent[addr] = percent;
			redeemMax[addr] = maxFund;

	}

	function redeemFund(address addr,uint256 value) public {
		require(icoPass == true);
		require(redeemPercent[addr] > 0);
		uint256 maxRedeem;

		maxRedeem = (totalSell * TOKEN_PRICE) * redeemPercent[addr] / 10000;  
		if(maxRedeem > redeemMax[addr]) maxRedeem = redeemMax[addr];

		require(redeemed[addr] + value <= maxRedeem);

		sgds.transfer(addr,value);
		redeemed[addr] += value;

	}

	function checkRedeemFund(address addr) public view returns (uint256) {
		uint256 maxRedeem;

		maxRedeem = (totalSell * TOKEN_PRICE) * redeemPercent[addr] / 10000;  
		if(maxRedeem > redeemMax[addr]) maxRedeem = redeemMax[addr];
		
		return maxRedeem - redeemed[addr];

	}

// Function to close the ICO, this function will transfer the token to founders and advisors

	function setCloseICO() public {
		require(closeICO == false);
		require(startICO == true);
		require(icoPass == true);

		if(hardCap == false){
			require(uint32(now) >= icoEndTime);
		}



		uint256 lessAdvisor;
		uint256 maxAdvisor;
		uint256 maxFounder;
		uint256 i;
		closeICO = true;

		// Count Max Advisor
		maxAdvisor = 0;
		for(i=0;i<advisors.length;i++)
		{
			if(advisors[i] != address(0)) 
				maxAdvisor++;
		}

		maxFounder = 0;
		for(i=0;i<founders.length;i++)
		{
			if(founders[i] != address(0))
				maxFounder++;
		}

		TOKEN_PER_ADVISOR = ADVISOR_SUPPLY / maxAdvisor;

		// Maximum 200,000 Per Advisor or less
		if(TOKEN_PER_ADVISOR > 200000 ether) { 
			TOKEN_PER_ADVISOR = 200000 ether;
		}

		lessAdvisor = ADVISOR_SUPPLY - (TOKEN_PER_ADVISOR * maxAdvisor);
		// less from Advisor will pay to Founder

		TOKEN_PER_FOUNDER = (FOUNDER_SUPPLY + lessAdvisor) / maxFounder;
		emit CloseICO();

		// Start Send Token to Found and Advisor 
		for(i=0;i<advisors.length;i++)
		{
			if(advisors[i] != address(0))
			{
				balance[advisors[i]] += TOKEN_PER_ADVISOR;
				totalSupply_ += TOKEN_PER_ADVISOR;

				lockAddress(advisors[i]); // THIS ADDRESS WILL LOCK FOR 2 YEAR CAN'T TRANSFER
				addHolder(advisors[i]);
				setAllowControl(advisors[i]);
				emit Transfer(address(this), advisors[i], TOKEN_PER_ADVISOR);
				emit RedeemAdvisor(advisors[i],TOKEN_PER_ADVISOR);

			}
		}

		for(i=0;i<founders.length;i++)
		{
			if(founders[i] != address(0))
			{
				balance[founders[i]] += TOKEN_PER_FOUNDER;
				totalSupply_ += TOKEN_PER_FOUNDER;

				lockAddress(founders[i]);
				addHolder(founders[i]);
				setAllowControl(founders[i]);
				emit Transfer(address(this),founders[i],TOKEN_PER_FOUNDER);
				emit RedeemFounder(founders[i],TOKEN_PER_FOUNDER);

			}
		}

	}

} 


// main Conttract of NATEE Token, total token is 100 millions and there is no burn token function.
// The token will be auto generated from this function every time after the payment is confirmed 
// from the buyer. In short, NATEE token will only be issued, based on the payment. 
// There will be no NATEE Token issued in advance. There is no NATEE Token inventory, no stocking,hence, 
// there is no need to have the burning function to burn the token/coin in this Smart Contract unlike others ICOs.


contract NATEE is ICO_Token {
	using SafeMath256 for uint256;
	string public name = "NATEE";
	string public symbol = "NATEE"; // Real Name NATEE
	uint256 public decimals = 18;
	
	uint256 public INITIAL_SUPPLY = 100000000 ether;
	
	NateePrivate   public nateePrivate;
	bool privateRedeem;
	uint256 public nateeWExcRate = 100; // SGDS Price
	uint256 public nateeWExcRateExp = 100; //SGDS Price
    address public AGC_ADDR;
    address public RM_PRIVATE_INVESTOR_ADDR;
    address public ICZ_ADDR;
    address public SEITEE_INTERNAL_USE;

	event RedeemNatee(address indexed _addr, uint256 _private,uint256 _gotNatee);
	event RedeemWarrat(address indexed _addr,address _warrant,string symbole,uint256 value);

	constructor() public {

		AGC_ADDR = 0xdd25648927291130CBE3f3716A7408182F28b80a; // 1% payment to strategic partne
		addCOPartner(AGC_ADDR,100,30000000);
		RM_PRIVATE_INVESTOR_ADDR = 0x32F359dE611CFe8f8974606633d8bDCBb33D91CB;
	//ICZ is the ICO portal who provides ERC20 solutions and audit NATEE IC
		ICZ_ADDR = 0x1F10C47A07BAc12eDe10270bCe1471bcfCEd4Baf; // 5% payment to ICZ capped at 200k SGD
		addCOPartner(ICZ_ADDR,500,20000000);
		// 20M Internal use to send to NATEE SDK USER 
		SEITEE_INTERNAL_USE = 0x1219058023bE74FA30C663c4aE135E75019464b4;

		balance[RM_PRIVATE_INVESTOR_ADDR] = 3000000 ether;
		totalSupply_ += 3000000 ether;
		lockAddress(RM_PRIVATE_INVESTOR_ADDR);
		setAllowControl(RM_PRIVATE_INVESTOR_ADDR);
		addHolder(RM_PRIVATE_INVESTOR_ADDR);
		emit Transfer(address(this),RM_PRIVATE_INVESTOR_ADDR,3000000 ether);


		balance[SEITEE_INTERNAL_USE] = 20000000 ether;
		totalSupply_ += 20000000 ether;
		setAllowControl(SEITEE_INTERNAL_USE);
		addHolder(SEITEE_INTERNAL_USE);
		emit Transfer(address(this),SEITEE_INTERNAL_USE,20000000 ether);


		sgds = SGDSInterface(0xf7EfaF88B380469084f3018271A49fF743899C89);
		warrant = NateeWarrantInterface(0x7F28D94D8dc94809a3f13e6a6e9d56ad0B6708fe);
		nateePrivate = NateePrivate(0x67A9d6d1521E02eCfb4a4C110C673e2c027ec102);

	}

// SET SGDS Contract Address
	function setSGDSContractAddress(address _addr) onlyOwners external {
		sgds = SGDSInterface(_addr);
	}

    function setNateePrivate(address _addr)	onlyOwners external {
        nateePrivate = NateePrivate(_addr);
    }

    function setNateeWarrant(address _addr) onlyOwners external {
    	warrant = NateeWarrantInterface(_addr);
    }

    function changeWarrantPrice(uint256 normalPrice,uint256 expPrice) onlyOwners external{
    	if(uint32(now) < warrant.expireDate())
    	{
    		nateeWExcRate = normalPrice;
    		nateeWExcRateExp = expPrice;
    	}
    }
    

// function to convert Warrant to NATEE Token, the Warrant holders must have SGDS paid for the conversion fee.

	function redeemWarrant(address addr,uint256 value) public returns(bool){
		require(owners[msg.sender] == true || addr == msg.sender);
		require(closeICO == true);
		require(sgds.getUserControl(addr) == false);

		uint256 sgdsPerToken; 
		uint256 totalSGDSUse;
		uint256 wRedeem;
		uint256 nateeGot;

		require(warrant.getUserControl(addr) == false);

		if( uint32(now) <= warrant.expireDate())
			sgdsPerToken = nateeWExcRate;
		else
			sgdsPerToken = nateeWExcRateExp;

		wRedeem = value / _1Token; 
		require(wRedeem > 0); 
		totalSGDSUse = wRedeem * sgdsPerToken;

		//check enought SGDS to redeem warrant;
		require(sgds.balanceOf(addr) >= totalSGDSUse);
		// Start Redeem Warrant;
		if(sgds.useSGDS(addr,totalSGDSUse) == true) 
		{
			nateeGot = wRedeem * _1Token;
			warrant.redeemWarrant(addr,nateeGot); // duduct Warrant;

			balance[addr] += nateeGot;
			// =================================
			// TOTAL SUPPLY INCREATE
			//==================================
			totalSupply_ += nateeGot;
			//==================================

			addHolder(addr);
			emit Transfer(address(this),addr,nateeGot);
			emit RedeemWarrat(addr,address(warrant),"NATEE-W1",nateeGot);
		}

		return true;

	}


// function to distribute NATEE PRIVATE TOKEN to early investors (from private-sales) 
	function reddemAllPrivate() onlyOwners public returns(bool){

		require(privateRedeem == false);

        uint256 maxHolder = nateePrivate.getMaxHolder();
        address tempAddr;
        uint256 priToken;
        uint256  nateeGot;
        uint256 i;
        for(i=0;i<maxHolder;i++)
        {
            tempAddr = nateePrivate.getAddressByID(i);
            priToken = nateePrivate.balancePrivate(tempAddr);
            if(priToken > 0)
            {
            nateeGot = priToken * 8;
            nateePrivate.redeemToken(tempAddr,priToken);
            balance[tempAddr] += nateeGot;
            totalSupply_ += nateeGot;
            privateBalance[tempAddr] += nateeGot;
            allowControl[tempAddr] = true;

            addHolder(tempAddr);
            emit Transfer( address(this), tempAddr, nateeGot);
            emit RedeemNatee(tempAddr,priToken,nateeGot);
            }
        }

        privateRedeem = true;
    }

}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxKYCData","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMaxHolders","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setNateeWarrant","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"removeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"oldAddr","type":"address"},{"name":"newAddr","type":"address"}],"name":"changeAdvisorAddr","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_PER_ADVISOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_PER_FOUNDER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"RM_PRIVATE_INVESTOR_ADDR","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"referType","type":"uint8"},{"name":"rate","type":"uint8"}],"name":"addReferal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"holders","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_walletAddress","type":"address"}],"name":"balanceOfPrivate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setSGDSContractAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pauseICO","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"},{"name":"newOwnerName","type":"string"}],"name":"addOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ICZ_ADDR","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"oldPass_","type":"bytes8"},{"name":"newPass_","type":"bytes8"}],"name":"changePassword","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAdvis","type":"address"},{"name":"_name","type":"string"}],"name":"addAdvisor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SEITEE_INTERNAL_USE","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"warrant","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"closeICO","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_idx","type":"uint256"}],"name":"getKYCData","outputs":[{"name":"phoneNumber_","type":"bytes16"},{"name":"birthday_","type":"bytes8"},{"name":"documentType_","type":"uint16"},{"name":"peronalID_","type":"bytes32"},{"name":"name_","type":"bytes32"},{"name":"surname_","type":"bytes32"},{"name":"email_","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"value","type":"uint256"},{"name":"refer","type":"bool"}],"name":"buyNateeToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalSell","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"value","type":"uint256"}],"name":"redeemWarrant","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"checkRedeemFund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"start2YearLock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_walletAddress","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"oldAddr","type":"address"},{"name":"newAddr","type":"address"}],"name":"changeFounderAddr","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"percent","type":"uint256"},{"name":"maxFund","type":"uint256"}],"name":"addCOPartner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"icoEndTime","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nateeWExcRateExp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"value","type":"uint256"}],"name":"redeemCommision","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getReferByAddr","outputs":[{"name":"refType","type":"uint8"},{"name":"fixRate","type":"uint8"},{"name":"commision","type":"uint256"},{"name":"allCommission","type":"uint256"},{"name":"summaryInvest","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setExchangeAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unlockAllAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AGC_ADDR","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_surname","type":"bytes32"},{"name":"_email","type":"bytes32"},{"name":"_password","type":"bytes8"},{"name":"_newAddr","type":"address"}],"name":"sosTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isLockAddr","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"checkAllowControl","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getTotalBuyICO","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"setCloseICO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pauseSellICO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getKYCData","outputs":[{"name":"phoneNumber_","type":"bytes16"},{"name":"birthday_","type":"bytes8"},{"name":"documentType_","type":"uint16"},{"name":"peronalID_","type":"bytes32"},{"name":"name_","type":"bytes32"},{"name":"surname_","type":"bytes32"},{"name":"email_","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nateePrivate","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"ownerAddr","type":"address"}],"name":"getOwnerName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reddemAllPrivate","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getKYCDataByAddr","outputs":[{"name":"phoneNumber_","type":"bytes16"},{"name":"birthday_","type":"bytes8"},{"name":"documentType_","type":"uint16"},{"name":"peronalID_","type":"bytes32"},{"name":"name_","type":"bytes32"},{"name":"surname_","type":"bytes32"},{"name":"email_","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"value","type":"uint256"}],"name":"redeemFund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setDisableLock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"isAdvisor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"timStemp","type":"uint32"}],"name":"setExchangeTimeOut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"isFounder","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setNateePrivate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"resumeSellICO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sgds","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nateeWExcRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"idx","type":"uint256"}],"name":"getHolder","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"haveKYCData","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"},{"name":"newOwnerName","type":"string"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"addLockAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_surname","type":"bytes32"},{"name":"_email","type":"bytes32"},{"name":"_password","type":"bytes8"},{"name":"_birthday","type":"bytes8"},{"name":"_phone","type":"bytes16"},{"name":"_docType","type":"uint16"},{"name":"_peronalID","type":"bytes32"},{"name":"_wallet","type":"address"}],"name":"createKYCData","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"getCommission","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"checkHaveRefer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"allow","type":"bool"}],"name":"userSetAllowControl","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"value","type":"uint256"}],"name":"inTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"normalPrice","type":"uint256"},{"name":"expPrice","type":"uint256"}],"name":"changeWarrantPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAddr","type":"address"},{"name":"_name","type":"string"}],"name":"addFounder","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_addr","type":"address"},{"indexed":false,"name":"_private","type":"uint256"},{"indexed":false,"name":"_gotNatee","type":"uint256"}],"name":"RedeemNatee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_addr","type":"address"},{"indexed":false,"name":"_warrant","type":"address"},{"indexed":false,"name":"symbole","type":"string"},{"indexed":false,"name":"value","type":"uint256"}],"name":"RedeemWarrat","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"admin","type":"address"},{"indexed":false,"name":"startTime","type":"uint32"},{"indexed":false,"name":"endTime","type":"uint32"}],"name":"StartICO","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"passTime","type":"uint32"}],"name":"PassSoftCap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr_","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"BuyICO","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"","type":"address"},{"indexed":false,"name":"startRank","type":"uint256"},{"indexed":false,"name":"stopRank","type":"uint256"},{"indexed":false,"name":"warrantGot","type":"uint256"}],"name":"BonusWarrant","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"","type":"address"},{"indexed":false,"name":"sgdsValue","type":"uint256"},{"indexed":false,"name":"curCom","type":"uint256"}],"name":"RedeemCommision","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"","type":"address"},{"indexed":false,"name":"sgds","type":"uint256"},{"indexed":false,"name":"totalBuy","type":"uint256"}],"name":"Refund","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAddr_","type":"address"},{"indexed":true,"name":"newAddr_","type":"address"}],"name":"SOSTranfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newFounder","type":"address"},{"indexed":false,"name":"nane","type":"string"},{"indexed":false,"name":"curFoounder","type":"uint256"}],"name":"AddFounder","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newAdvisor","type":"address"},{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"curAdvisor","type":"uint256"}],"name":"AddAdvisor","type":"event"},{"anonymous":false,"inputs":[],"name":"CloseICO","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr_","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"RedeemAdvisor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr_","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"RedeemFounder","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAddr_","type":"address"},{"indexed":true,"name":"newAddr_","type":"address"}],"name":"ChangeAdvisorAddr","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAddr_","type":"address"},{"indexed":true,"name":"newAddr_","type":"address"}],"name":"ChangeFounderAddr","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner_","type":"address"},{"indexed":false,"name":"kycIdx_","type":"uint256"}],"name":"ChangePassword","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner_","type":"address"},{"indexed":false,"name":"kycIdx_","type":"uint256"}],"name":"CreateKYCData","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caller","type":"address"}],"name":"Call2YLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"},{"indexed":false,"name":"name","type":"string"}],"name":"AddOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"}],"name":"RemoveOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6a0422ca8b0a00a4250000006013556a034f086f3b33b6840000006014556000601a819055601b556301312d00601f556302625a0060205560326021556101906024819055602555620f424060265562989680602755670de0b6b3a764000060285560c0604052600560808190527f4e4154454500000000000000000000000000000000000000000000000000000060a0908152620000a291602f9190620006a4565b506040805180820190915260058082527f4e415445450000000000000000000000000000000000000000000000000000006020909201918252620000e991603091620006a4565b5060126031556a52b7d2dcc80cd2e4000000603255606460345560646035553480156200011557600080fd5b5060088054600160a060020a031916339081179091556000908152600660209081526040808320805460ff1916600190811790915560058054918201808255908552825180840190935260148084527f53414d5245542057414a414e415341544849414e0000000000000000000000009390940192835292620001be927f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db09092019190620006a4565b503360009081526007602052604090205550600b805463ffffffff19164263bbf81e00810163ffffffff908116929092179092556022805467ffffffffff00000019166401000000006301e1338090940190921683029190911790556036805473dd25648927291130cbe3f3716a7408182f28b80a600160a060020a031990911617908190556200026791600160a060020a03909116906064906301c9c38090620004e0810204565b60378054600160a060020a03199081167332f359de611cfe8f8974606633d8bdcbb33d91cb1790915560388054909116731f10c47a07bac12ede10270bce1471bcfced4baf1790819055620002d690600160a060020a03166101f46301312d00640100000000620004e0810204565b60398054600160a060020a031916731219058023be74fa30c663c4ae135e75019464b417905560378054600160a060020a0390811660009081526020819052604090206a027b46536c66c8e30000009081905560028054909101905590546200034991166401000000006200054e810204565b6037546200036990600160a060020a0316640100000000620005da810204565b6037546200038990600160a060020a031664010000000062000623810204565b603754604080516a027b46536c66c8e300000081529051600160a060020a03909216913091600080516020620061b2833981519152919081900360200190a360398054600160a060020a0390811660009081526020819052604090206a108b2a2c28029094000000908190556002805490910190559054620004159116640100000000620005da810204565b6039546200043590600160a060020a031664010000000062000623810204565b603954604080516a108b2a2c2802909400000081529051600160a060020a03909216913091600080516020620061b2833981519152919081900360200190a360298054600160a060020a031990811673f7efaf88b380469084f3018271a49ff743899c8917909155602a80548216737f28d94d8dc94809a3f13e6a6e9d56ad0b6708fe179055603380549091167367a9d6d1521e02ecfb4a4c110c673e2c027ec10217905562000749565b3360009081526006602052604090205460ff1615156001146200050257600080fd5b600160a060020a0383166000908152602d6020526040902054156200052657600080fd5b600160a060020a039092166000908152602d6020908152604080832093909355602e90522055565b600160a060020a03811660009081526009602052604090205460ff161515620005d757600160a060020a0381166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8018054600160a060020a03191690911790555b50565b600160a060020a0381166000908152600c602052604090205460ff161515620005d757600160a060020a0381166000908152600c60205260409020805460ff1916600117905550565b600160a060020a0381166000908152600460205260408120541515620006a057506003805460018101918290557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b018054600160a060020a031916600160a060020a03841690811790915560009081526004602052604090208190555b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006e757805160ff191683800117855562000717565b8280016001018555821562000717579182015b8281111562000717578251825591602001919060010190620006fa565b506200072592915062000729565b5090565b6200074691905b8082111562000725576000815560010162000730565b90565b615a5980620007596000396000f3006080604052600436106103815763ffffffff60e060020a60003504166306fdde038114610386578063095ea7b314610410578063104319991461044857806312df644a1461046f57806314fdd98314610484578063173825d9146104a757806318160ddd146104c85780631b34586e146104dd57806321e8560b1461050457806323b872dd14610519578063280902ee1461054357806329a71ea2146105585780632a01c909146105895780632a11ced0146105b65780632cc5d3e6146105ce5780632f54bf6e146105ef5780632ff2e9dc1461061057806330f25ce914610625578063313ce56714610646578063324536eb1461065b57806333c77a6d146106705780633542758f1461068557806335f54787146106ec5780633d41bd171461070157806345d217ac146107295780635228703b1461075657806353e3d8591461076b5780635423864514610780578063590e1ae314610795578063599d364c146107aa5780635f653d731461081a578063646a3af91461084357806369fefc51146108585780636d70210c1461087c5780636e24202a1461089d57806370a08231146108b257806371891b1b146108d35780637c8fe532146108fa5780637e1055b61461092157806380526f801461094f57806385846e131461096457806387b6dab2146109885780638ae91695146109da5780638d199f36146109fb57806395d89b4114610a10578063a4aa6f6414610a25578063a9059cbb14610a3a578063a9e477b614610a5e578063add523e614610a95578063af4cc57114610ab6578063b0dd245014610ad7578063b5479a8814610af8578063b6e71cee14610b0d578063b77cbb6314610b22578063bd97e6f514610b37578063bedefffe14610b4c578063bf5b143014610b6d578063bf8dcc0514610b82578063c3f6f6b814610ba3578063c585673614610bc7578063c661fed314610bdc578063c7941d2414610bfd578063c7b5784114610c1b578063cc23f82f14610c3c578063d4ebd2fd14610c5d578063dd62ed3e14610c72578063dfa0853214610c99578063e6fc7ac314610cae578063e8a96b4614610cc3578063ebb6ae7614610cdb578063edf5a5be14610cfc578063ef57f8ee14610d63578063f008e0fb14610d84578063f334dcb214610de2578063f89f031714610e03578063f9f0c32d14610e24578063f9ffbc3914610e3e578063fc05cc5d14610e68578063fdcccd2c14610e83575b600080fd5b34801561039257600080fd5b5061039b610eb0565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d55781810151838201526020016103bd565b50505050905090810190601f1680156104025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041c57600080fd5b50610434600160a060020a0360043516602435610f3e565b604080519115158252519081900360200190f35b34801561045457600080fd5b5061045d610fa5565b60408051918252519081900360200190f35b34801561047b57600080fd5b5061045d610fac565b34801561049057600080fd5b506104a5600160a060020a0360043516610fb2565b005b3480156104b357600080fd5b506104a5600160a060020a0360043516610ff5565b3480156104d457600080fd5b5061045d611084565b3480156104e957600080fd5b50610434600160a060020a036004358116906024351661108a565b34801561051057600080fd5b5061045d61117d565b34801561052557600080fd5b50610434600160a060020a0360043581169060243516604435611183565b34801561054f57600080fd5b5061045d6113bc565b34801561056457600080fd5b5061056d6113c2565b60408051600160a060020a039092168252519081900360200190f35b34801561059557600080fd5b506104a5600160a060020a036004351660ff602435811690604435166113d1565b3480156105c257600080fd5b5061056d600435611534565b3480156105da57600080fd5b5061045d600160a060020a036004351661155c565b3480156105fb57600080fd5b50610434600160a060020a036004351661157b565b34801561061c57600080fd5b5061045d611599565b34801561063157600080fd5b506104a5600160a060020a036004351661159f565b34801561065257600080fd5b5061045d6115e2565b34801561066757600080fd5b5061045d6115e8565b34801561067c57600080fd5b506104346115ee565b34801561069157600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526104a5958335600160a060020a03169536956044949193909101919081908401838280828437509497506115fe9650505050505050565b3480156106f857600080fd5b5061056d6117a9565b34801561070d57600080fd5b50610434600160c060020a0319600435811690602435166117b8565b34801561073557600080fd5b5061043460048035600160a060020a03169060248035908101910135611945565b34801561076257600080fd5b5061056d611a5c565b34801561077757600080fd5b5061056d611a6b565b34801561078c57600080fd5b50610434611a7a565b3480156107a157600080fd5b506104a5611a83565b3480156107b657600080fd5b506107c2600435611c4e565b604080516fffffffffffffffffffffffffffffffff199098168852600160c060020a0319909616602088015261ffff909416868601526060860192909252608085015260a084015260c0830152519081900360e00190f35b34801561082657600080fd5b50610434600160a060020a03600435166024356044351515611e91565b34801561084f57600080fd5b5061045d61227e565b34801561086457600080fd5b50610434600160a060020a0360043516602435612284565b34801561088857600080fd5b5061045d600160a060020a0360043516612793565b3480156108a957600080fd5b506104a5612811565b3480156108be57600080fd5b5061045d600160a060020a03600435166128ac565b3480156108df57600080fd5b50610434600160a060020a03600435811690602435166128c7565b34801561090657600080fd5b506104a5600160a060020a03600435166024356044356129ba565b34801561092d57600080fd5b50610936612a26565b6040805163ffffffff9092168252519081900360200190f35b34801561095b57600080fd5b5061045d612a3a565b34801561097057600080fd5b506104a5600160a060020a0360043516602435612a40565b34801561099457600080fd5b506109a9600160a060020a0360043516612c9c565b6040805160ff9687168152949095166020850152838501929092526060830152608082015290519081900360a00190f35b3480156109e657600080fd5b506104a5600160a060020a0360043516612d63565b348015610a0757600080fd5b506104a5612dfa565b348015610a1c57600080fd5b5061039b612e73565b348015610a3157600080fd5b5061056d612ece565b348015610a4657600080fd5b50610434600160a060020a0360043516602435612edd565b348015610a6a57600080fd5b50610434600435602435604435600160c060020a031960643516600160a060020a036084351661312b565b348015610aa157600080fd5b50610434600160a060020a0360043516613429565b348015610ac257600080fd5b50610434600160a060020a0360043516613447565b348015610ae357600080fd5b5061045d600160a060020a0360043516613465565b348015610b0457600080fd5b506104a5613480565b348015610b1957600080fd5b506104a5613948565b348015610b2e57600080fd5b506107c26139cd565b348015610b4357600080fd5b5061056d613b73565b348015610b5857600080fd5b5061039b600160a060020a0360043516613b82565b348015610b7957600080fd5b50610434613c6e565b348015610b8e57600080fd5b506107c2600160a060020a0360043516614017565b348015610baf57600080fd5b506104a5600160a060020a03600435166024356140e8565b348015610bd357600080fd5b506104a5614268565b348015610be857600080fd5b50610434600160a060020a03600435166142b2565b348015610c0957600080fd5b506104a563ffffffff600435166142e2565b348015610c2757600080fd5b50610434600160a060020a036004351661431f565b348015610c4857600080fd5b506104a5600160a060020a0360043516614347565b348015610c6957600080fd5b506104a561438a565b348015610c7e57600080fd5b5061045d600160a060020a036004358116906024351661446d565b348015610ca557600080fd5b5061056d614498565b348015610cba57600080fd5b5061045d6144a7565b348015610ccf57600080fd5b5061056d6004356144ad565b348015610ce757600080fd5b50610434600160a060020a03600435166144d9565b348015610d0857600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526104a5958335600160a060020a03169536956044949193909101919081908401838280828437509497506145019650505050505050565b348015610d6f57600080fd5b506104a5600160a060020a036004351661460e565b348015610d9057600080fd5b5061045d600435602435604435600160c060020a0319606435811690608435166fffffffffffffffffffffffffffffffff1960a4351661ffff60c4351660e435600160a060020a0361010435166146b7565b348015610dee57600080fd5b5061045d600160a060020a03600435166149fd565b348015610e0f57600080fd5b50610434600160a060020a0360043516614a66565b348015610e3057600080fd5b506104a56004351515614a82565b348015610e4a57600080fd5b506104a5600160a060020a0360043581169060243516604435614ab6565b348015610e7457600080fd5b506104a5600435602435614c7a565b348015610e8f57600080fd5b5061043460048035600160a060020a03169060248035908101910135614d37565b602f805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610f365780601f10610f0b57610100808354040283529160200191610f36565b820191906000526020600020905b815481529060010190602001808311610f1957829003601f168201915b505050505081565b336000818152600160209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b600f545b90565b60035490565b3360009081526006602052604090205460ff161515600114610fd357600080fd5b602a8054600160a060020a031916600160a060020a0392909216919091179055565b3360009081526006602052604090205460ff16151560011461101657600080fd5b600160a060020a03811633141561102c57600080fd5b600160a060020a038116600081815260066020908152604091829020805460ff19169055815192835290517fac6e8398676cf37429d530b81144d7079e99f4fe9d28b0d88c4a749ceccbe8cd9281900390910190a150565b60025490565b33600090815260066020526040812054819060ff1615156001146110ad57600080fd5b60195460ff16156110bd57600080fd5b600160a060020a038416600090815260176020526040812054116110e057600080fd5b50600160a060020a0380841660008181526017602052604080822080549487168352908220849055918152905560158054849190600019840190811061112257fe5b600091825260208220018054600160a060020a031916600160a060020a03938416179055604051858316928716917f6991a8a8ea4730a65f030010c047035c7acd4ca18358b6ce5631a07c6c3716d391a35060019392505050565b601b5481565b600160a060020a03831660009081526009602052604081205460ff16156111a957600080fd5b600160a060020a0384166000908152601c60205260409020548211156112d657600b54640100000000900460ff1615156112d6573360009081526011602052604081205411611242576040805160e560020a62461bcd02815260206004820152601f60248201527f596f75204e6f742048617665207065726d697373696f6e20746f2053656e6400604482015290519081900360640190fd5b600160a060020a038316600090815260116020526040812054116112d6576040805160e560020a62461bcd02815260206004820152602260248201527f596f75206e6f742068617665207065726d697373696f6e20746f20726563696560448201527f7665000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6112df83614e4e565b6112ea848484614ecb565b1515600114156113b157336000908152601c6020526040902054821061133d57336000818152601c60205260408082208054600160a060020a0388168452918320805490920190915591815290556113a9565b336000908152601c602052604090205461135d908363ffffffff61502e16565b336000908152601c602052604080822092909255600160a060020a0385168152205461138f908363ffffffff61504316565b600160a060020a0384166000908152601c60205260409020555b5060016113b5565b5060005b9392505050565b601a5481565b603754600160a060020a031681565b3360009081526006602052604081205460ff1615156001146113f257600080fd5b600160a060020a0384166000908152601e60205260409020541561141557600080fd5b506040805160a08101825260ff9384168152918316602080840191825260008484018181526060860182815260808701838152601d805460018101808355918652985160049099027f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f8101805498518c166101000261ff00199b909c1660ff1990991698909817999099169990991790955590517f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc1461350870155517f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146135186015591517f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146135290940193909355600160a060020a039094168452601e90915290912055565b600380548290811061154257fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a0381166000908152601c60205260409020545b919050565b600160a060020a031660009081526006602052604090205460ff1690565b60325481565b3360009081526006602052604090205460ff1615156001146115c057600080fd5b60298054600160a060020a031916600160a060020a0392909216919091179055565b60315481565b60025481565b6022546301000000900460ff1681565b3360009081526006602052604081205460ff16151560011461161f57600080fd5b600160a060020a03831660009081526006602052604090205460ff161561164557600080fd5b600160a060020a03831633141561165b57600080fd5b600160a060020a03831660009081526007602052604090205415156116dd57600580546001810180835560009290925283516116be917f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0019060208601906158f3565b50600160a060020a038416600090815260076020526040902081905590505b600160a060020a0383166000818152600660209081526040808320805460ff19166001179055805193845283820181815286519185019190915285517fd14b276e98cd1ce7984008242312b6fc7a2f0978463a9a027785f88906b4771d948894889491939260608501928601918190849084905b83811015611769578181015183820152602001611751565b50505050905090810190601f1680156117965780820380516001836020036101000a031916815260200191505b50935050505060405180910390a1505050565b603854600160a060020a031681565b3360009081526011602052604081205481908110611820576040805160e560020a62461bcd02815260206004820152601460248201527f4552524f52206368616e676550617373776f7264000000000000000000000000604482015290519081900360640190fd5b5033600090815260116020526040902054600f805460001990920191600160c060020a0319861691908390811061185357fe5b600091825260209091206006909102016005015460c060020a02600160c060020a03191614156118f65782600f8281548110151561188d57fe5b600091825260209182902060069190910201600501805467ffffffffffffffff191660c060020a9093049290921790915560408051838152905133927f8fe8cfc0d525383b1ab53d403866678f921ac922ca03b1978f76916e59b9c73c928290030190a261193b565b83600160c060020a031916600f8281548110151561191057fe5b600091825260209091206006909102016005015460c060020a02600160c060020a0319161461193b57fe5b5060019392505050565b33600090815260066020526040812054819060ff16151560011461196857600080fd5b60195460ff161561197857600080fd5b600160a060020a0385166000908152601760205260409020541561199b57600080fd5b506015805460018101918290557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475018054600160a060020a031916600160a060020a03871690811790915560008181526017602090815260409182902084905581519081018490528181529081018590527fc1788175ece52a6fdb1b3e98d2c6a3ab9ec1e2a1cb5efabafa0a91f42af4f8fe9086908690859080606081018585808284376040519201829003965090945050505050a2506001949350505050565b603954600160a060020a031681565b602a54600160a060020a031681565b60195460ff1681565b60225460009081908190610100900460ff1615611a9f57600080fd5b6022546c01000000000000000000000000810463ffffffff166303c267000193506301000000900460ff16151560011415611aee578263ffffffff164263ffffffff16111515611aee57611c49565b60225463ffffffff64010000000090910481164290911610611c4957336000908152602b60205260408120541115611c49575050602154336000908152602b602090815260408083205460285492849052922054928202929102908114611b5457600080fd5b336000818152602b60209081526040918290205482518681529182015281517f73f04af9dcc582a923ec15d3eea990fe34adabfff2879e28d44572e01a54abb6929181900390910190a2336000818152602b6020908152604080832083905560295481517fa9059cbb0000000000000000000000000000000000000000000000000000000081526004810195909552602485018790529051600160a060020a039091169363a9059cbb9360448083019493928390030190829087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050506040513d6020811015611c4657600080fd5b50505b505050565b6000806000806000806000611c61615971565b3360009081526006602052604081205460ff161515600114611c8257600080fd5b600f548a11801590611c94575060008a115b1515611cea576040805160e560020a62461bcd02815260206004820152601360248201527f4552524f52204765744b59434461746120303100000000000000000000000000604482015290519081900360640190fd5b60018a039050600f81815481101515611cff57fe5b906000526020600020906006020161012060405190810160405290816000820160009054906101000a900460c060020a02600160c060020a031916600160c060020a03191681526020016000820160089054906101000a9004700100000000000000000000000000000000026fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526020016000820160189054906101000a900461ffff1661ffff1661ffff16815260200160008201601a9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820154600019166000191681526020016002820154600019166000191681526020016003820154600019166000191681526020016004820154600019166000191681526020016005820160009054906101000a900460c060020a02600160c060020a031916600160c060020a031916815250509150816020015198508160000151975081604001519650816080015195508160a0015194508160c0015193508160e0015192505050919395979092949650565b336000908152600660205260408120548190819060ff161515600114611eb657600080fd5b60195460ff1615611ec657600080fd5b6022546301000000900460ff1615611edd57600080fd5b60225463ffffffff6401000000009091048116429091161115611eff57600080fd5b6002850615611f0d57600080fd5b60225460ff161515611f2357611f21615055565b505b849050601f546023541015611f5d57602454811015611f4157600080fd5b602354601f5403811115611f585750602354601f54035b611faa565b602054601f54016023541015611faa57602554811015611f7c57600080fd5b602654811115611f8b57506026545b602354602054601f540103811115611faa5750602354602054601f5401035b602154602954604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038a8116600483015291519385029550859391909216916370a082319160248083019260209291908290030181600087803b15801561201c57600080fd5b505af1158015612030573d6000803e3d6000fd5b505050506040513d602081101561204657600080fd5b5051101561205357600080fd5b602954604080517fd24fe623000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152306024830152604482018690529151919092169163d24fe62391606480830192600092919082900301818387803b1580156120c757600080fd5b505af11580156120db573d6000803e3d6000fd5b505060285460408051918502825251600160a060020a038a1693507f336e583dd9aafc71dca92dae102e6ca2fff24e7b09dad71d3901e5aac107c8b992509081900360200190a260288054600160a060020a0388166000908152602081815260408083208054948702909401909355602b9052208054830181559054600280549184029091019055602380548301905554611f40118015906121935750600160a060020a0386166000908152601e6020526040902054155b156121a5576121a586600160006113d1565b6121af8682615115565b602754602354101580156121cb5750602254610100900460ff16155b156121da576121d86153d7565b505b602054601f5401602354101580156121fb575060225462010000900460ff16155b15612219576022805462ff0000191662010000179055612219613480565b6122228661546c565b61222b86614e4e565b600184151514156122405761224086826154b4565b60285460408051918302825251600160a060020a038816913091600080516020615a0e8339815191529181900360200190a350600195945050505050565b60235490565b33600090815260066020526040812054819081908190819060ff161515600114806122b75750600160a060020a03871633145b15156122c257600080fd5b60195460ff1615156001146122d657600080fd5b602954604080517f0f77281a000000000000000000000000000000000000000000000000000000008152600160a060020a038a8116600483015291519190921691630f77281a9160248083019260209291908290030181600087803b15801561233e57600080fd5b505af1158015612352573d6000803e3d6000fd5b505050506040513d602081101561236857600080fd5b50511561237457600080fd5b602a54604080517f0f77281a000000000000000000000000000000000000000000000000000000008152600160a060020a038a8116600483015291519190921691630f77281a9160248083019260209291908290030181600087803b1580156123dc57600080fd5b505af11580156123f0573d6000803e3d6000fd5b505050506040513d602081101561240657600080fd5b50511561241257600080fd5b602a60009054906101000a9004600160a060020a0316600160a060020a031663b8a67c3c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561246557600080fd5b505af1158015612479573d6000803e3d6000fd5b505050506040513d602081101561248f57600080fd5b505163ffffffff90811642909116116124ac5760345493506124b2565b60355493505b602854868115156124bf57fe5b049150600082116124cf57600080fd5b602954604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038a8116600483015291518588029650869392909216916370a08231916024808201926020929091908290030181600087803b15801561253f57600080fd5b505af1158015612553573d6000803e3d6000fd5b505050506040513d602081101561256957600080fd5b5051101561257657600080fd5b602954604080517f4f271392000000000000000000000000000000000000000000000000000000008152600160a060020a038a811660048301526024820187905291519190921691634f2713929160448083019260209291908290030181600087803b1580156125e557600080fd5b505af11580156125f9573d6000803e3d6000fd5b505050506040513d602081101561260f57600080fd5b50511515600114156127865750602854602a54604080517f69fefc51000000000000000000000000000000000000000000000000000000008152600160a060020a038a811660048301529385026024820181905291519193909216916369fefc5191604480830192600092919082900301818387803b15801561269157600080fd5b505af11580156126a5573d6000803e3d6000fd5b505050600160a060020a03881660009081526020819052604090208054830190555060028054820190556126d887614e4e565b604080518281529051600160a060020a038916913091600080516020615a0e8339815191529181900360200190a3602a5460408051600160a060020a0392831681528082018490526060602082018190526008908201527f4e415445452d573100000000000000000000000000000000000000000000000060808201529051918916917ffe74344023d5c9baa62bd70eeb3665f6f3d97e8b69293e6586750267165f52619181900360a00190a25b5060019695505050505050565b600160a060020a0381166000908152602d6020908152604080832054602154602354602e90945291842054612710939092020291909104908111156127ed5750600160a060020a0382166000908152602e60205260409020545b600160a060020a0383166000908152602c6020526040902054810391505b50919050565b3360009081526006602052604090205460ff16151560011461283257600080fd5b600b5465010000000000900460ff1615156128aa57600b80546501000000000063ffffffff19909116426303c267000163ffffffff161765ff000000000019161790556040805133815290517f830f886d70bb3bdd859adce4ef9b3c96ab4d759091a8e27d31154f317ee646a8916020908290030190a15b565b600160a060020a031660009081526020819052604090205490565b33600090815260066020526040812054819060ff1615156001146128ea57600080fd5b60195460ff16156128fa57600080fd5b600160a060020a0384166000908152601860205260408120541161291d57600080fd5b50600160a060020a0380841660008181526018602052604080822080549487168352908220849055918152905560168054849190600019840190811061295f57fe5b600091825260208220018054600160a060020a031916600160a060020a03938416179055604051858316928716917fc43e8b5af346d72837cd95ce6472a35a0d723c5082bb54eca804e57b19ff2b4291a35060019392505050565b3360009081526006602052604090205460ff1615156001146129db57600080fd5b600160a060020a0383166000908152602d6020526040902054156129fe57600080fd5b600160a060020a039092166000908152602d6020908152604080832093909355602e90522055565b602254640100000000900463ffffffff1681565b60355481565b600160a060020a0382166000908152601e602052604081205481908110612a6657600080fd5b600160a060020a0384166000908152601e6020526040902054601d805460001990920193509083908110612a9657fe5b600091825260209091206004909102015460ff1690506001811480612abb5750806002145b80612ac65750806003145b15612ae55760225460ff610100909104161515600114612ae557600080fd5b60008311612af257600080fd5b601d805483908110612b0057fe5b906000526020600020906004020160010154601d83815481101515612b2157fe5b906000526020600020906004020160020154038311151515612b4257600080fd5b82601d83815481101515612b5257fe5b60009182526020808320600492830201600101805494909401909355602954604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038a811694820194909452602481018990529051929091169363a9059cbb9360448084019492938390030190829087803b158015612bdc57600080fd5b505af1158015612bf0573d6000803e3d6000fd5b505050506040513d6020811015612c0657600080fd5b5050601d8054600160a060020a038616917fb578784bfc32a49025de60d38de6d4bdf294e1456f4238d5e40b9c5bbace1f869186919086908110612c4657fe5b906000526020600020906004020160010154601d86815481101515612c6757fe5b90600052602060002090600402016002015403604051808381526020018281526020019250505060405180910390a250505050565b6000806000806000612cac6159bd565b3360009081526006602052604090205460ff161515600114612ccd57600080fd5b600160a060020a0387166000908152601e6020526040902054601d8054909160001901908110612cf957fe5b60009182526020918290206040805160a0810182526004909302909101805460ff80821680865261010090920416948401859052600182015492840183905260028201546060850181905260039092015460809094018490529b939a509098509650945092505050565b3360009081526006602052604081205460ff161515600114612d8457600080fd5b50600d805460018082018084556000939093527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb59091018054600160a060020a031916600160a060020a038516179055811415612df657600e805463ffffffff19164262ed4e000163ffffffff161790555b5050565b600b5460009063ffffffff9081164290911610612e70575060005b600a54811015612e7057600060096000600a84815481101515612e3457fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff1916911515919091179055600101612e15565b50565b6030805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610f365780601f10610f0b57610100808354040283529160200191610f36565b603654600160a060020a031681565b3360009081526009602052604081205460ff16151560011415612f2457600160a060020a03831660009081526009602052604090205460ff161515600114612f2457600080fd5b336000908152601c602052604090205482111561304857600b54640100000000900460ff161515613048573360009081526011602052604081205411612fb4576040805160e560020a62461bcd02815260206004820152601f60248201527f596f75204e6f742068617665207065726d697373696f6e20746f2053656e6400604482015290519081900360640190fd5b600160a060020a03831660009081526011602052604081205411613048576040805160e560020a62461bcd02815260206004820152602260248201527f596f75206e6f742068617665207065726d697373696f6e20746f20526563696560448201527f7665000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61305183614e4e565b61305b8383615808565b15156001141561312257336000908152601c602052604090205482106130ae57336000818152601c60205260408082208054600160a060020a03881684529183208054909201909155918152905561311a565b336000908152601c60205260409020546130ce908363ffffffff61502e16565b336000908152601c602052604080822092909255600160a060020a03851681522054613100908363ffffffff61504316565b600160a060020a0384166000908152601c60205260409020555b506001610f9f565b50600092915050565b3360009081526006602052604081205481908190819060ff16151560011461315257600080fd5b6040805160208082018c90528183018b9052606082018a9052600160c060020a03198916608083015282516068818403018152608890920192839052815191929182918401908083835b602083106131bb5780518252601f19909201916020918201910161319c565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912060008181526012835284812054600160a060020a03168082526011845285822054600c9094529490205490985092965094505060ff16159150613227905057600080fd5b600081111561341a57600f8054600019909201918a91908390811061324857fe5b9060005260206000209060060201600201546000191614801561328f5750600f80548991908390811061327757fe5b90600052602060002090600602016003015460001916145b80156132bf5750600f8054889190839081106132a757fe5b90600052602060002090600602016004015460001916145b8015613306575085600160c060020a031916600f828154811015156132e057fe5b600091825260209091206006909102016005015460c060020a02600160c060020a031916145b1561341a5760008381526012602090815260408083208054600160a060020a03808b16600160a060020a031992831681179093558716808652601185528386208690558286528386208790558686526010909452828520805490911682179055905190927fa284bc90b3f7d3f4bc70de86cafdbd8ec2eb2b12536b63117f99026fc234d9d391a3600160a060020a03828116600081815260096020908152604080832054948a16808452818420805460ff191660ff909716151596909617909555838352828252808320805486855282852090815585855290849055601c8352818420805487865283862055849055928252915482519081529151600080516020615a0e8339815191529281900390910190a35b50600198975050505050505050565b600160a060020a031660009081526009602052604090205460ff1690565b600160a060020a03166000908152600c602052604090205460ff1690565b600160a060020a03166000908152602b602052604090205490565b60195460009081908190819060ff161561349957600080fd5b60225460ff1615156001146134ad57600080fd5b60225460ff6101009091041615156001146134c757600080fd5b60225462010000900460ff1615156134fb5760225463ffffffff64010000000090910481164290911610156134fb57600080fd5b506019805460ff1916600117905560009150815b6015548110156135545760158054600091908390811061352b57fe5b600091825260209091200154600160a060020a03161461354c576001909201915b60010161350f565b5060009050805b6016548110156135a05760168054600091908390811061357757fe5b600091825260209091200154600160a060020a031614613598576001909101905b60010161355b565b826014548115156135ad57fe5b04601b819055692a5a058fc295ed00000010156135d357692a5a058fc295ed000000601b555b82601b54026014540393508184601354018115156135ed57fe5b04601a556040517faba8fe79bfaa728722dc2fcb879fdf248b0655cda7362c730d6f737d6585e4e790600090a15060005b6015548110156137d55760158054600091908390811061363a57fe5b600091825260209091200154600160a060020a0316146137cd57601b5460008060158481548110151561366957fe5b6000918252602080832090910154600160a060020a03168352820192909252604001902080549091019055601b54600280549091019055601580546136cd9190839081106136b357fe5b600091825260209091200154600160a060020a031661462f565b6136f96015828154811015156136df57fe5b600091825260209091200154600160a060020a0316614e4e565b61372560158281548110151561370b57fe5b600091825260209091200154600160a060020a031661546c565b601580548290811061373357fe5b60009182526020918290200154601b546040805191825251600160a060020a03909216923092600080516020615a0e8339815191529281900390910190a3601580548290811061377f57fe5b60009182526020918290200154601b546040805191825251600160a060020a03909216927f29c1bccff7fdecf165e2abff432a74751336935b03ffa20a6219022f34c4ae2292918290030190a25b60010161361e565b5060005b601654811015613942576016805460009190839081106137f557fe5b600091825260209091200154600160a060020a03161461393a57601a5460008060168481548110151561382457fe5b6000918252602080832090910154600160a060020a03168352820192909252604001902080549091019055601a546002805490910190556016805461386e9190839081106136b357fe5b6138806016828154811015156136df57fe5b61389260168281548110151561370b57fe5b60168054829081106138a057fe5b60009182526020918290200154601a546040805191825251600160a060020a03909216923092600080516020615a0e8339815191529281900390910190a360168054829081106138ec57fe5b60009182526020918290200154601a546040805191825251600160a060020a03909216927f56e747c38c978146d8f3427ee46bff7332fe4a8966ff3ea524e91f7ed31a7c6292918290030190a25b6001016137d9565b50505050565b3360009081526006602052604090205460ff16151560011461396957600080fd5b60225460ff16151560011461397d57600080fd5b6022546301000000900460ff161561399457600080fd5b6022805463010000006bffffffff000000000000000019909116680100000000000000004263ffffffff16021763ff0000001916179055565b6000806000806000806000806139e1615971565b3360009081526011602052604081205411613a46576040805160e560020a62461bcd02815260206004820152601360248201527f4552524f52204765744b59434461746120303300000000000000000000000000604482015290519081900360640190fd5b33600090815260116020526040902054600f805460001990920193509083908110613a6d57fe5b60009182526020918290206040805161012081018252600693909302909101805460c060020a808202600160c060020a0319908116808752680100000000000000008404700100000000000000000000000000000000026fffffffffffffffffffffffffffffffff191697870188905282840461ffff169587018690527a01000000000000000000000000000000000000000000000000000090930463ffffffff166060870152600184015460808701819052600285015460a08801819052600386015460c08901819052600487015460e08a0181905260059097015490940290921661010090970196909652959f919e50929c50929a50929850965090945092505050565b603354600160a060020a031681565b600160a060020a03811660009081526007602052604081205460609110613ba857600080fd5b600160a060020a03821660009081526007602052604090205460058054909160001901908110613bd457fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015613c625780601f10613c3757610100808354040283529160200191613c62565b820191906000526020600020905b815481529060010190602001808311613c4557829003601f168201915b50505050509050919050565b336000908152600660205260408120548190819081908190819060ff161515600114613c9957600080fd5b60335474010000000000000000000000000000000000000000900460ff1615613cc157600080fd5b603360009054906101000a9004600160a060020a0316600160a060020a031663b0ed439e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015613d1457600080fd5b505af1158015613d28573d6000803e3d6000fd5b505050506040513d6020811015613d3e57600080fd5b50519450600090505b84811015613fd857603354604080517ffc23f5b1000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163fc23f5b1916024808201926020929091908290030181600087803b158015613db657600080fd5b505af1158015613dca573d6000803e3d6000fd5b505050506040513d6020811015613de057600080fd5b5051603354604080517fde934416000000000000000000000000000000000000000000000000000000008152600160a060020a038085166004830152915193975091169163de934416916024808201926020929091908290030181600087803b158015613e4c57600080fd5b505af1158015613e60573d6000803e3d6000fd5b505050506040513d6020811015613e7657600080fd5b505192506000831115613fd057603354604080517f830cbbbd000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152602482018790529151600887029550919092169163830cbbbd91604480830192600092919082900301818387803b158015613ef757600080fd5b505af1158015613f0b573d6000803e3d6000fd5b505050600160a060020a0385166000908152602081815260408083208054870190556002805487019055601c8252808320805487019055600c9091529020805460ff1916600117905550613f5e84614e4e565b604080518381529051600160a060020a038616913091600080516020615a0e8339815191529181900360200190a360408051848152602081018490528151600160a060020a038716927f2818fe550efc2abf2bfaedc523850e447c728894bc7a76b330c29645196e6ec6928290030190a25b600101613d47565b50506033805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055509192915050565b600080600080600080600061402a615971565b3360009081526006602052604081205460ff16151560011461404b57600080fd5b600160a060020a038a16600090815260116020526040812054116140b9576040805160e560020a62461bcd02815260206004820152601360248201527f4552524f52204765744b59434461746120303200000000000000000000000000604482015290519081900360640190fd5b50600160a060020a038916600090815260116020526040902054600f80546000199092019182908110611cff57fe5b60225460009060ff61010090910416151560011461410557600080fd5b600160a060020a0383166000908152602d60205260408120541161412857600080fd5b50600160a060020a0382166000908152602d6020908152604080832054602154602354602e90945291909320546127109290910290920204908111156141835750600160a060020a0382166000908152602e60205260409020545b600160a060020a0383166000908152602c602052604090205482018110156141aa57600080fd5b602954604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561421957600080fd5b505af115801561422d573d6000803e3d6000fd5b505050506040513d602081101561424357600080fd5b505050600160a060020a039091166000908152602c6020526040902080549091019055565b600e5463ffffffff1642108015906142825750600d546000105b156128aa57600b54640100000000900460ff1615156128aa57600b805464ff000000001916640100000000179055565b600160a060020a0381166000908152601760205260408120548110156142da57506001611576565b506000611576565b3360009081526006602052604090205460ff16151560011461430357600080fd5b600e805463ffffffff191663ffffffff92909216919091179055565b600160a060020a0381166000908152601860205260408120548110156142da57506001611576565b3360009081526006602052604090205460ff16151560011461436857600080fd5b60338054600160a060020a031916600160a060020a0392909216919091179055565b33600090815260066020526040812054819060ff1615156001146143ad57600080fd5b6022546301000000900460ff1615156001146143c857600080fd5b50506022805467ffffffffff0000001981166801000000000000000063ff0000001990921691820463ffffffff908116420364010000000080850483168201831681029390931794859055936c0100000000000000000000000090930481166303c26700019283821692900416111561445c576022805467ffffffff00000000191664010000000063ffffffff8416021790555b50506022805463ff00000019169055565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b602954600160a060020a031681565b60345481565b60006003828154811015156144be57fe5b600091825260209091200154600160a060020a031692915050565b600160a060020a0381166000908152601160205260408120548110156142da57506001611576565b600854600090600160a060020a0316331461451b57600080fd5b614524836158d5565b1561452e57600080fd5b600160a060020a03831660009081526007602052604090205415156145b05760058054600181018083556000929092528351614591917f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0019060208601906158f3565b50600160a060020a038416600090815260076020526040902081905590505b600854604051600160a060020a038086169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505060088054600160a060020a031916600160a060020a0392909216919091179055565b3360009081526006602052604090205460ff16151560011461462f57600080fd5b600160a060020a03811660009081526009602052604090205460ff161515612e7057600160a060020a03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8018054600160a060020a0319169091179055565b336000908152600660205260408120548190819060ff1615156001146146dc57600080fd5b600f610120604051908101604052808a600160c060020a0319168152602001896fffffffffffffffffffffffffffffffff191681526020018861ffff1681526020014263ffffffff168152602001876000191681526020018e6000191681526020018d6000191681526020018c6000191681526020018b600160c060020a0319168152509080600181540180825580915050906001820390600052602060002090600602016000909192909190915060008201518160000160006101000a81548167ffffffffffffffff021916908360c060020a9004021790555060208201518160000160086101000a8154816fffffffffffffffffffffffffffffffff02191690837001000000000000000000000000000000009004021790555060408201518160000160186101000a81548161ffff021916908361ffff160217905550606082015181600001601a6101000a81548163ffffffff021916908363ffffffff1602179055506080820151816001019060001916905560a0820151816002019060001916905560c0820151816003019060001916905560e082015181600401906000191690556101008201518160050160006101000a81548167ffffffffffffffff021916908360c060020a90040217905550505091508b8b8b8b6040516020018085600019166000191681526020018460001916600019168152602001836000191660001916815260200182600160c060020a031916600160c060020a03191681526008019450505050506040516020818303038152906040526040518082805190602001908083835b602083106149465780518252601f199092019160209182019101614927565b51815160209384036101000a600019018019909216911617905260408051929094018290038220600160a060020a038b166000818152601184528681208b90558a8152601084528681208054600160a060020a03199081168417909155838252601285529087902080549091168217905589845294519097509395507ffd1a53733b8407b1c0a380e51e609e338920c5825aa0a2830f12ee6fa4e2f44c94509083900301919050a2509a9950505050505050505050565b600160a060020a0381166000908152601e60205260408120548110614a2157600080fd5b600160a060020a0382166000908152601e6020526040902054601d8054909160001901908110614a4d57fe5b9060005260206000209060040201600201549050919050565b600160a060020a03166000908152601e60205260408120541190565b60195460ff161515600114614a9657600080fd5b336000908152600c60205260409020805460ff1916911515919091179055565b3360009081526006602052604090205460ff161515600114614ad757600080fd5b600160a060020a0383166000908152600c602052604090205460ff161515600114614b0157600080fd5b600160a060020a038316600090815260208190526040902054811115614b2657600080fd5b600160a060020a038084166000908152602081905260408082208054859003905591841681522054614b5e908263ffffffff61504316565b600160a060020a03808416600090815260208181526040808320949094559186168152601c90915220548110614bc457600160a060020a038084166000818152601c60205260408082208054948716835290822080549094019093559081529055614c3c565b600160a060020a0383166000908152601c6020526040902054614bed908263ffffffff61502e16565b600160a060020a038085166000908152601c60205260408082209390935590841681522054614c22908263ffffffff61504316565b600160a060020a0383166000908152601c60205260409020555b81600160a060020a031683600160a060020a0316600080516020615a0e833981519152836040518082815260200191505060405180910390a3505050565b3360009081526006602052604090205460ff161515600114614c9b57600080fd5b602a60009054906101000a9004600160a060020a0316600160a060020a031663b8a67c3c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015614cee57600080fd5b505af1158015614d02573d6000803e3d6000fd5b505050506040513d6020811015614d1857600080fd5b505163ffffffff908116429091161015612df657603491909155603555565b33600090815260066020526040812054819060ff161515600114614d5a57600080fd5b60195460ff1615614d6a57600080fd5b600160a060020a03851660009081526018602052604090205415614d8d57600080fd5b506016805460018101918290557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289018054600160a060020a031916600160a060020a03871690811790915560008181526018602090815260409182902084905581519081018490528181529081018590527f7a93fe36039f8765dbe43536a7d65cfd623748263faaa053adfe783c85cfe9899086908690859080606081018585808284376040519201829003965090945050505050a2506001949350505050565b600160a060020a0381166000908152600460205260408120541515612df657506003805460018101918290557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b018054600160a060020a031916600160a060020a0393909316928317905560009182526004602052604090912055565b600160a060020a038316600090815260208190526040812054821115614ef057600080fd5b600160a060020a0384166000908152600160209081526040808320338452909152902054821115614f2057600080fd5b600160a060020a0383161515614f3557600080fd5b600160a060020a038416600090815260208190526040902054614f5e908363ffffffff61502e16565b600160a060020a038086166000908152602081905260408082209390935590851681522054614f93908363ffffffff61504316565b600160a060020a03808516600090815260208181526040808320949094559187168152600182528281203382529091522054614fd5908363ffffffff61502e16565b600160a060020a0380861660008181526001602090815260408083203384528252918290209490945580518681529051928716939192600080516020615a0e833981519152929181900390910190a35060019392505050565b60008282111561503d57600080fd5b50900390565b6000828201838110156113b557600080fd5b60225460009060ff161561506857600080fd5b6022805460016fffffffff000000000000000000000000199091166c0100000000000000000000000063ffffffff4281811683029390931767ffffffff000000001916640100000000630163f50094909401821684021760ff191693909317938490556040805191850484168252919093049091166020830152805133927f77fdde3290bec9f3c61c8f264e41fb116b1b47138b3719946831519d6c2910b792908290030190a250600190565b6000623d0900602354111515615131576002825b0490506152ea565b623d09016023541015801561514b575062b71b0060235411155b1561519357623d09008260235403101561518357506023546002828203623d0900030490606490623d08ff19016028025b040161518e565b606460288302615129565b6152ea565b62b71b01602354101580156151ae57506301312d0060235411155b1561523357623d0900826023540310156151e857506023546002828203623d0900030462249f00019060649062b71aff1901601e0261517c565b62b71b0082602354031015615228576064826023540362b71b000360280281151561520f57fe5b049050606462b71b0060235403601e0281151561517c57fe5b6064601e8302615129565b6301312d016023541015801561524f57506301c9c38060235411155b1561525c57600582615129565b6301c9c3816023541015801561527857506302625a0060235411155b156152b5576301c9c380826023540310156152ad575060235460058282036301c9c380030490600a906301c9c37f190161517c565b600a82615129565b6023546302625a01116152ea576302625a00826023540310156152e657602354600a908390036302625a0003615129565b5060005b6000811115611c4957602854602a54604080517f62ddab04000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152949093026024840181905290519093909116916362ddab0491604480830192600092919082900301818387803b15801561536957600080fd5b505af115801561537d573d6000803e3d6000fd5b5050602354604080518683038152602081019290925281810185905251600160a060020a03871693507f3c85f37ebd31df24f5be78a8c0acab350197f0f2fb8f8f325ab70a4aec6a41f892509081900360600190a2505050565b6022805461ff00191661010017908190556000906276a7004263ffffffff6401000000009093048316039091161115615430576022805467ffffffff000000001916640100000000426276a7000163ffffffff16021790555b6040805163ffffffff4216815290517fe107dea2e32cd9b64712442adde3150ebd7f032aa815a84ae20d5de67c5f0a869181900360200190a190565b600160a060020a0381166000908152600c602052604090205460ff161515612e7057600160a060020a0381166000908152600c60205260409020805460ff1916600117905550565b600160a060020a0382166000908152601e602052604081205481908190811015611c4657600160a060020a0385166000908152601e6020526040902054601d80546000199092019450908490811061550857fe5b6000918252602090912060049091020154601d805460ff9092169350908490811061552f57fe5b6000918252602090912060049091020154610100900460ff16905060018214806155595750816003145b806155645750816004145b1561575d5783601d8481548110151561557957fe5b6000918252602090912060036004909202010180549091019055601d8054620138809190859081106155a757fe5b9060005260206000209060040201600301541115156156225760026014601d858154811015156155d357fe5b9060005260206000209060040201600301548115156155ee57fe5b048115156155f857fe5b04601d8481548110151561560857fe5b906000526020600020906004020160020181905550615758565b62013880601d8481548110151561563557fe5b90600052602060002090600402016003015411801561567757506204e200601d8481548110151561566257fe5b90600052602060002090600402016003015411155b156156c8576002600a601d8581548110151561568f57fe5b9060005260206000209060040201600301548115156156aa57fe5b048115156156b457fe5b046107d001601d8481548110151561560857fe5b6204e200601d848154811015156156db57fe5b90600052602060002090600402016003015411156157585760026064601d8581548110151561570657fe5b906000526020600020906004020160030154600f0281151561572457fe5b0481151561572e57fe5b046136b001601d8481548110151561574257fe5b9060005260206000209060040201600201819055505b611c46565b816002148061576c5750816005145b15611c465783601d8481548110151561578157fe5b9060005260206000209060040201600301600082825401925050819055506002606482601d868154811015156157b357fe5b906000526020600020906004020160030154606402028115156157d257fe5b048115156157dc57fe5b04601d848154811015156157ec57fe5b9060005260206000209060040201600201819055505050505050565b3360009081526020819052604081205482111561582457600080fd5b600160a060020a038316151561583957600080fd5b33600090815260208190526040902054615859908363ffffffff61502e16565b3360009081526020819052604080822092909255600160a060020a0385168152205461588b908363ffffffff61504316565b600160a060020a03841660008181526020818152604091829020939093558051858152905191923392600080516020615a0e8339815191529281900390910190a350600192915050565b6000813b818111156158ea576001915061280b565b6000915061280b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061593457805160ff1916838001178555615961565b82800160010185558215615961579182015b82811115615961578251825591602001919060010190615946565b5061596d9291506159f3565b5090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b60a060405190810160405280600060ff168152602001600060ff1681526020016000815260200160008152602001600081525090565b610fa991905b8082111561596d57600081556001016159f95600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820dd42cf00fe107e7ef8f7b4f0c1b3de4466084d531dd05bfa9df36e615b05c35f0029ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

   Swarm Source:
bzzr://dd42cf00fe107e7ef8f7b4f0c1b3de4466084d531dd05bfa9df36e615b05c35f

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.