ETH Price: $3,542.33 (-0.88%)
Gas: 28 Gwei

Contract

0x9Fa8fA61A10Ff892E4EBCeB7f4e0FC684C2ce0a9
 

Overview

ETH Balance

1,003.624048369852000001 ETH

Eth Value

$3,555,162.74 (@ $3,542.33/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Refund My Ico In...180891972023-09-08 4:03:47203 days ago1694145827IN
hongcoin
0 ETH0.270375739.48686792
Refund My Ico In...58248222018-06-20 21:58:372108 days ago1529531917IN
hongcoin
0 ETH0.0035312621.59224465
Refund My Ico In...58248162018-06-20 21:56:512108 days ago1529531811IN
hongcoin
0 ETH0.000109065
0x51fa7efd55148012018-04-27 12:28:312163 days ago1524832111IN
hongcoin
0 ETH0.000062
Transfer55148012018-04-27 12:28:312163 days ago1524832111IN
hongcoin
0 ETH0.000534371.78125
Refund My Ico In...47541272017-12-18 11:31:552293 days ago1513596715IN
hongcoin
0 ETH0.001240
0xfb52d71e45232922017-11-10 1:41:302331 days ago1510278090IN
hongcoin
0 ETH0.000003550.1
0x2417d7b844646882017-10-31 15:11:482340 days ago1509462708IN
hongcoin
0 ETH0.00084
0xa09e746f43624802017-10-13 15:17:242358 days ago1507907844IN
hongcoin
0.0001 ETH0.00048321
Refund43624702017-10-13 15:12:032358 days ago1507907523IN
hongcoin
0.0001 ETH0.00048321
Transfer43624682017-10-13 15:11:402358 days ago1507907500IN
hongcoin
0.0001 ETH0.00048321
0x4c2d71b343474422017-10-08 10:46:022364 days ago1507459562IN
hongcoin
0 ETH0.0005325812
Add Admin43474352017-10-08 10:43:222364 days ago1507459402IN
hongcoin
0 ETH0.0005325812
Add Admin43474322017-10-08 10:42:022364 days ago1507459322IN
hongcoin
0 ETH0.0002925812
0x2417d7b843457092017-10-07 20:12:252364 days ago1507407145IN
hongcoin
0 ETH0.0015513712
0x68fda46a43456972017-10-07 20:04:432364 days ago1507406683IN
hongcoin
0 ETH0.0015513712
0x2417d7b843456912017-10-07 20:00:422364 days ago1507406442IN
hongcoin
0 ETH0.0015513712
0x2417d7b843456842017-10-07 19:58:002364 days ago1507406280IN
hongcoin
0 ETH0.0003513712
0x1254328d43359482017-10-04 11:05:462368 days ago1507115146IN
hongcoin
0 ETH0.000525358
0x2417d7b843359282017-10-04 10:57:102368 days ago1507114630IN
hongcoin
0 ETH0.000525358
Refund My Ico In...39461812017-06-29 5:14:212465 days ago1498713261IN
hongcoin
0 ETH0.002121
Transfer38694212017-06-14 3:12:492480 days ago1497409969IN
hongcoin
0.01 ETH0.003888885
Transfer38693422017-06-14 2:54:592480 days ago1497408899IN
hongcoin
1 wei0.000478585
Transfer37586972017-05-24 7:52:122501 days ago1495612332IN
hongcoin
0 ETH0.002121
Refund My Ico In...37507852017-05-22 20:45:552502 days ago1495485955IN
hongcoin
0 ETH0.0006890121
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Txn Hash Block From To Value
54303722018-04-13 1:18:492177 days ago1523582329
hongcoin
0 ETH
26686222016-11-21 14:49:232684 days ago1479739763
hongcoin
3 ETH
24405302016-10-14 19:49:422722 days ago1476474582
hongcoin
0 ETH
24405272016-10-14 19:49:162722 days ago1476474556
hongcoin
0 ETH
24396002016-10-14 16:14:242722 days ago1476461664
hongcoin
0 ETH
24395942016-10-14 16:13:532722 days ago1476461633
hongcoin
0 ETH
24395922016-10-14 16:13:122722 days ago1476461592
hongcoin
0 ETH
24391492016-10-14 14:29:042722 days ago1476455344
hongcoin
0 ETH
24390742016-10-14 14:07:272722 days ago1476454047
hongcoin
0 ETH
24389482016-10-14 13:30:492722 days ago1476451849
hongcoin
0 ETH
24389362016-10-14 13:27:502722 days ago1476451670
hongcoin
0 ETH
24388632016-10-14 13:10:532722 days ago1476450653
hongcoin
0 ETH
24387242016-10-14 12:32:192723 days ago1476448339
hongcoin
0 ETH
24385172016-10-14 11:39:212723 days ago1476445161
hongcoin
0 ETH
24385072016-10-14 11:35:482723 days ago1476444948
hongcoin
0 ETH
24384652016-10-14 11:24:342723 days ago1476444274
hongcoin
0 ETH
24384592016-10-14 11:22:492723 days ago1476444169
hongcoin
0 ETH
24384382016-10-14 11:18:022723 days ago1476443882
hongcoin
0 ETH
24384352016-10-14 11:17:302723 days ago1476443850
hongcoin
0 ETH
24384332016-10-14 11:17:032723 days ago1476443823
hongcoin
0 ETH
24383882016-10-14 11:07:592723 days ago1476443279
hongcoin
0 ETH
24383832016-10-14 11:06:362723 days ago1476443196
hongcoin
0 ETH
24383322016-10-14 10:55:592723 days ago1476442559
hongcoin
0 ETH
24383212016-10-14 10:53:392723 days ago1476442419
hongcoin
0 ETH
24382872016-10-14 10:44:332723 days ago1476441873
hongcoin
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HONG

Compiler Version
v0.3.5+commit.5f97274

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-06-13
*/

/* Verified by 3esmit
 
- Bytecode Verification performed was compared on second iteration -

This file is part of the HONG.

The HONG is free software: you can redistribute it and/or modify
it under the terms of the GNU lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

The HONG is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU lesser General Public License for more details.

You should have received a copy of the GNU lesser General Public License
along with the HONG.  If not, see <http://www.gnu.org/licenses/>.
*/

/*
 * Parent contract that contains all of the configurable parameters of the main contract.
 */
contract HongConfiguration {
    uint public closingTime;
    uint public weiPerInitialHONG = 10**16;
    string public name = "HONG";
    string public symbol = "Ħ";
    uint8 public decimals = 0;
    uint public maxBountyTokens = 2 * (10**6);
    uint public closingTimeExtensionPeriod = 30 days;
    uint public minTokensToCreate = 100 * (10**6);
    uint public maxTokensToCreate = 250 * (10**6);
    uint public tokensPerTier = 50 * (10**6);
    uint public lastKickoffDateBuffer = 304 days;

    uint public mgmtRewardPercentage = 20;
    uint public mgmtFeePercentage = 8;

    uint public harvestQuorumPercent = 20;
    uint public freezeQuorumPercent = 50;
    uint public kickoffQuorumPercent = 20;
}

contract ErrorHandler {
    bool public isInTestMode = false;
    event evRecord(address msg_sender, uint msg_value, string message);
    function doThrow(string message) internal {
        evRecord(msg.sender, msg.value, message);
        if(!isInTestMode){
            throw;
        }
    }
}

contract TokenInterface is ErrorHandler {
    mapping (address => uint256) balances;
    mapping (address => mapping (address => uint256)) allowed;
    uint256 public tokensCreated;

    function balanceOf(address _owner) constant returns (uint256 balance);
    function transfer(address _to, uint256 _amount) returns (bool success);

    event evTransfer(address msg_sender, uint msg_value, address indexed _from, address indexed _to, uint256 _amount);

    // Modifier that allows only token holders to trigger
    modifier onlyTokenHolders {
        if (balanceOf(msg.sender) == 0) doThrow("onlyTokenHolders"); else {_}
    }
}

contract Token is TokenInterface {
    // Protects users by preventing the execution of method calls that
    // inadvertently also transferred ether
    modifier noEther() {if (msg.value > 0) doThrow("noEther"); else{_}}
    modifier hasEther() {if (msg.value <= 0) doThrow("hasEther"); else{_}}

    function balanceOf(address _owner) constant returns (uint256 balance) {
        return balances[_owner];
    }

    function transfer(address _to, uint256 _amount) noEther returns (bool success) {
        if (_amount <= 0) return false;
        if (balances[msg.sender] < _amount) return false;
        if (balances[_to] + _amount < balances[_to]) return false;

        balances[msg.sender] -= _amount;
        balances[_to] += _amount;

        evTransfer(msg.sender, msg.value, msg.sender, _to, _amount);

        return true;
    }
}


contract OwnedAccount is ErrorHandler {
    address public owner;
    bool acceptDeposits = true;

    event evPayOut(address msg_sender, uint msg_value, address indexed _recipient, uint _amount);

    modifier onlyOwner() {
        if (msg.sender != owner) doThrow("onlyOwner");
        else {_}
    }

    modifier noEther() {
        if (msg.value > 0) doThrow("noEther");
        else {_}
    }

    function OwnedAccount(address _owner) {
        owner = _owner;
    }

    function payOutPercentage(address _recipient, uint _percent) internal onlyOwner noEther {
        payOutAmount(_recipient, (this.balance * _percent) / 100);
    }

    function payOutAmount(address _recipient, uint _amount) internal onlyOwner noEther {
        // send does not forward enough gas to see that this is a managed account call
        if (!_recipient.call.value(_amount)())
            doThrow("payOut:sendFailed");
        else
            evPayOut(msg.sender, msg.value, _recipient, _amount);
    }

    function () returns (bool success) {
        if (!acceptDeposits) throw;
        return true;
    }
}

contract ReturnWallet is OwnedAccount {
    address public mgmtBodyWalletAddress;

    bool public inDistributionMode;
    uint public amountToDistribute;
    uint public totalTokens;
    uint public weiPerToken;

    function ReturnWallet(address _mgmtBodyWalletAddress) OwnedAccount(msg.sender) {
        mgmtBodyWalletAddress = _mgmtBodyWalletAddress;
    }

    function payManagementBodyPercent(uint _percent) {
        payOutPercentage(mgmtBodyWalletAddress, _percent);
    }

    function switchToDistributionMode(uint _totalTokens) onlyOwner {
        inDistributionMode = true;
        acceptDeposits = false;
        totalTokens = _totalTokens;
        amountToDistribute = this.balance;
        weiPerToken = amountToDistribute / totalTokens;
    }

    function payTokenHolderBasedOnTokenCount(address _tokenHolderAddress, uint _tokens) onlyOwner {
        payOutAmount(_tokenHolderAddress, weiPerToken * _tokens);
    }
}

contract ExtraBalanceWallet is OwnedAccount {
    address returnWalletAddress;
    function ExtraBalanceWallet(address _returnWalletAddress) OwnedAccount(msg.sender) {
        returnWalletAddress = _returnWalletAddress;
    }

    function returnBalanceToMainAccount() {
        acceptDeposits = false;
        payOutAmount(owner, this.balance);
    }

    function returnAmountToMainAccount(uint _amount) {
        payOutAmount(owner, _amount);
    }

    function payBalanceToReturnWallet() {
        acceptDeposits = false;
        payOutAmount(returnWalletAddress, this.balance);
    }

}

contract RewardWallet is OwnedAccount {
    address public returnWalletAddress;
    function RewardWallet(address _returnWalletAddress) OwnedAccount(msg.sender) {
        returnWalletAddress = _returnWalletAddress;
    }

    function payBalanceToReturnWallet() {
        acceptDeposits = false;
        payOutAmount(returnWalletAddress, this.balance);
    }
}

contract ManagementFeeWallet is OwnedAccount {
    address public mgmtBodyAddress;
    address public returnWalletAddress;
    function ManagementFeeWallet(address _mgmtBodyAddress, address _returnWalletAddress) OwnedAccount(msg.sender) {
        mgmtBodyAddress = _mgmtBodyAddress;
        returnWalletAddress  = _returnWalletAddress;
    }

    function payManagementBodyAmount(uint _amount) {
        payOutAmount(mgmtBodyAddress, _amount);
    }

    function payBalanceToReturnWallet() {
        acceptDeposits = false;
        payOutAmount(returnWalletAddress, this.balance);
    }
}

/*
 * Token Creation contract, similar to other organization,for issuing tokens and initialize
 * its ether fund.
*/
contract TokenCreationInterface is HongConfiguration {

    address public managementBodyAddress;

    ExtraBalanceWallet public extraBalanceWallet;
    mapping (address => uint256) weiGiven;
    mapping (address => uint256) public taxPaid;

    function createTokenProxy(address _tokenHolder) internal returns (bool success);
    function refundMyIcoInvestment();
    function divisor() constant returns (uint divisor);

    event evMinTokensReached(address msg_sender, uint msg_value, uint value);
    event evCreatedToken(address msg_sender, uint msg_value, address indexed to, uint amount);
    event evRefund(address msg_sender, uint msg_value, address indexed to, uint value, bool result);
}

contract GovernanceInterface is ErrorHandler, HongConfiguration {

    // The variable indicating whether the fund has achieved the inital goal or not.
    // This value is automatically set, and CANNOT be reversed.
    bool public isFundLocked;
    bool public isFundReleased;

    modifier notLocked() {if (isFundLocked) doThrow("notLocked"); else {_}}
    modifier onlyLocked() {if (!isFundLocked) doThrow("onlyLocked"); else {_}}
    modifier notReleased() {if (isFundReleased) doThrow("notReleased"); else {_}}
    modifier onlyHarvestEnabled() {if (!isHarvestEnabled) doThrow("onlyHarvestEnabled"); else {_}}
    modifier onlyDistributionNotInProgress() {if (isDistributionInProgress) doThrow("onlyDistributionNotInProgress"); else {_}}
    modifier onlyDistributionNotReady() {if (isDistributionReady) doThrow("onlyDistributionNotReady"); else {_}}
    modifier onlyDistributionReady() {if (!isDistributionReady) doThrow("onlyDistributionReady"); else {_}}
    modifier onlyCanIssueBountyToken(uint _amount) {
        if (bountyTokensCreated + _amount > maxBountyTokens){
            doThrow("hitMaxBounty");
        }
        else {_}
    }
    modifier onlyFinalFiscalYear() {
        // Only call harvest() in the final fiscal year
        if (currentFiscalYear < 4) doThrow("currentFiscalYear<4"); else {_}
    }
    modifier notFinalFiscalYear() {
        // Token holders cannot freeze fund at the 4th Fiscal Year after passing `kickoff(4)` voting
        if (currentFiscalYear >= 4) doThrow("currentFiscalYear>=4"); else {_}
    }
    modifier onlyNotFrozen() {
        if (isFreezeEnabled) doThrow("onlyNotFrozen"); else {_}
    }

    bool public isDayThirtyChecked;
    bool public isDaySixtyChecked;

    uint256 public bountyTokensCreated;
    uint public currentFiscalYear;
    uint public lastKickoffDate;
    mapping (uint => bool) public isKickoffEnabled;
    bool public isFreezeEnabled;
    bool public isHarvestEnabled;
    bool public isDistributionInProgress;
    bool public isDistributionReady;

    ReturnWallet public returnWallet;
    RewardWallet public rewardWallet;
    ManagementFeeWallet public managementFeeWallet;

    // define the governance of this organization and critical functions
    function mgmtIssueBountyToken(address _recipientAddress, uint _amount) returns (bool);
    function mgmtDistribute();

    function mgmtInvestProject(
        address _projectWallet,
        uint _amount
    ) returns (bool);

    event evIssueManagementFee(address msg_sender, uint msg_value, uint _amount, bool _success);
    event evMgmtIssueBountyToken(address msg_sender, uint msg_value, address _recipientAddress, uint _amount, bool _success);
    event evMgmtDistributed(address msg_sender, uint msg_value, uint256 _amount, bool _success);
    event evMgmtInvestProject(address msg_sender, uint msg_value, address _projectWallet, uint _amount, bool result);
    event evLockFund(address msg_sender, uint msg_value);
    event evReleaseFund(address msg_sender, uint msg_value);
}


contract TokenCreation is TokenCreationInterface, Token, GovernanceInterface {
    modifier onlyManagementBody {
        if(msg.sender != address(managementBodyAddress)) {doThrow("onlyManagementBody");} else {_}
    }

    function TokenCreation(
        address _managementBodyAddress,
        uint _closingTime) {

        managementBodyAddress = _managementBodyAddress;
        closingTime = _closingTime;
    }

    function createTokenProxy(address _tokenHolder) internal notLocked notReleased hasEther returns (bool success) {

        // Business logic (but no state changes)
        // setup transaction details
        uint tokensSupplied = 0;
        uint weiAccepted = 0;
        bool wasMinTokensReached = isMinTokensReached();

        var weiPerLatestHONG = weiPerInitialHONG * divisor() / 100;
        uint remainingWei = msg.value;
        uint tokensAvailable = tokensAvailableAtCurrentTier();
        if (tokensAvailable == 0) {
            doThrow("noTokensToSell");
            return false;
        }

        // Sell tokens in batches based on the current price.
        while (remainingWei >= weiPerLatestHONG) {
            uint tokensRequested = remainingWei / weiPerLatestHONG;
            uint tokensToSellInBatch = min(tokensAvailable, tokensRequested);

            // special case.  Allow the last purchase to go over the max
            if (tokensAvailable == 0 && tokensCreated == maxTokensToCreate) {
                tokensToSellInBatch = tokensRequested;
            }

            uint priceForBatch = tokensToSellInBatch * weiPerLatestHONG;

            // track to total wei accepted and total tokens supplied
            weiAccepted += priceForBatch;
            tokensSupplied += tokensToSellInBatch;

            // update state
            balances[_tokenHolder] += tokensToSellInBatch;
            tokensCreated += tokensToSellInBatch;
            weiGiven[_tokenHolder] += priceForBatch;

            // update dependent values (state has changed)
            weiPerLatestHONG = weiPerInitialHONG * divisor() / 100;
            remainingWei = msg.value - weiAccepted;
            tokensAvailable = tokensAvailableAtCurrentTier();
        }

        // the caller will still pay this amount, even though it didn't buy any tokens.
        weiGiven[_tokenHolder] += remainingWei;

        // when the caller is paying more than 10**16 wei (0.01 Ether) per token, the extra is basically a tax.
        uint256 totalTaxLevied = weiAccepted - tokensSupplied * weiPerInitialHONG;
        taxPaid[_tokenHolder] += totalTaxLevied;

        // State Changes (no external calls)
        tryToLockFund();

        // External calls
        if (totalTaxLevied > 0) {
            if (!extraBalanceWallet.send(totalTaxLevied)){
                doThrow("extraBalance:sendFail");
                return;
            }
        }

        // Events.  Safe to publish these now that we know it all worked
        evCreatedToken(msg.sender, msg.value, _tokenHolder, tokensSupplied);
        if (!wasMinTokensReached && isMinTokensReached()) evMinTokensReached(msg.sender, msg.value, tokensCreated);
        if (isFundLocked) evLockFund(msg.sender, msg.value);
        if (isFundReleased) evReleaseFund(msg.sender, msg.value);
        return true;
    }

    function refundMyIcoInvestment() noEther notLocked onlyTokenHolders {
        // 1: Preconditions
        if (weiGiven[msg.sender] == 0) {
            doThrow("noWeiGiven");
            return;
        }
        if (balances[msg.sender] > tokensCreated) {
            doThrow("invalidTokenCount");
            return;
         }

        // 2: Business logic
        bool wasMinTokensReached = isMinTokensReached();
        var tmpWeiGiven = weiGiven[msg.sender];
        var tmpTaxPaidBySender = taxPaid[msg.sender];
        var tmpSenderBalance = balances[msg.sender];

        var amountToRefund = tmpWeiGiven;

        // 3: state changes.
        balances[msg.sender] = 0;
        weiGiven[msg.sender] = 0;
        taxPaid[msg.sender] = 0;
        tokensCreated -= tmpSenderBalance;

        // 4: external calls
        // Pull taxes paid back into this contract (they would have been paid into the extraBalance account)
        extraBalanceWallet.returnAmountToMainAccount(tmpTaxPaidBySender);

        // If that works, then do a refund
        if (!msg.sender.send(amountToRefund)) {
            evRefund(msg.sender, msg.value, msg.sender, amountToRefund, false);
            doThrow("refund:SendFailed");
            return;
        }

        evRefund(msg.sender, msg.value, msg.sender, amountToRefund, true);
        if (!wasMinTokensReached && isMinTokensReached()) evMinTokensReached(msg.sender, msg.value, tokensCreated);
    }

    // Using a function rather than a state variable, as it reduces the risk of inconsistent state
    function isMinTokensReached() constant returns (bool) {
        return tokensCreated >= minTokensToCreate;
    }

    function isMaxTokensReached() constant returns (bool) {
        return tokensCreated >= maxTokensToCreate;
    }

    function mgmtIssueBountyToken(
        address _recipientAddress,
        uint _amount
    ) noEther onlyManagementBody onlyCanIssueBountyToken(_amount) returns (bool){
        // send token to the specified address
        balances[_recipientAddress] += _amount;
        bountyTokensCreated += _amount;

        // event
        evMgmtIssueBountyToken(msg.sender, msg.value, _recipientAddress, _amount, true);

    }

    function mgmtDistribute() onlyManagementBody hasEther onlyHarvestEnabled onlyDistributionNotReady {
        distributeDownstream(mgmtRewardPercentage);
    }

    function distributeDownstream(uint _mgmtPercentage) internal onlyDistributionNotInProgress {

        // transfer all balance from the following accounts
        // (1) HONG main account,
        // (2) managementFeeWallet,
        // (3) rewardWallet
        // (4) extraBalanceWallet
        // to returnWallet

        // And allocate _mgmtPercentage of the fund to ManagementBody

        // State changes first (even though it feels backwards)
        isDistributionInProgress = true;
        isDistributionReady = true;

        payBalanceToReturnWallet();
        managementFeeWallet.payBalanceToReturnWallet();
        rewardWallet.payBalanceToReturnWallet();
        extraBalanceWallet.payBalanceToReturnWallet();

        // transfer _mgmtPercentage of returns to mgmt Wallet
        if (_mgmtPercentage > 0) returnWallet.payManagementBodyPercent(_mgmtPercentage);
        returnWallet.switchToDistributionMode(tokensCreated + bountyTokensCreated);

        // Token holder can claim the remaining fund (the total amount harvested/ to be distributed) starting from here
        evMgmtDistributed(msg.sender, msg.value, returnWallet.balance, true);
        isDistributionInProgress = false;
    }

    function payBalanceToReturnWallet() internal {
        if (!returnWallet.send(this.balance))
            doThrow("payBalanceToReturnWallet:sendFailed");
            return;
    }

    function min(uint a, uint b) constant internal returns (uint) {
        return (a < b) ? a : b;
    }

    function tryToLockFund() internal {
        // ICO Diagram: https://github.com/hongcoin/DO/wiki/ICO-Period-and-Target

        if (isFundReleased) {
            // Do not change the state anymore
            return;
        }

        // Case A
        isFundLocked = isMaxTokensReached();

        // if we've reached the 30 day mark, try to lock the fund
        if (!isFundLocked && !isDayThirtyChecked && (now >= closingTime)) {
            if (isMinTokensReached()) {
                // Case B
                isFundLocked = true;
            }
            isDayThirtyChecked = true;
        }

        // if we've reached the 60 day mark, try to lock the fund
        if (!isFundLocked && !isDaySixtyChecked && (now >= (closingTime + closingTimeExtensionPeriod))) {
            if (isMinTokensReached()) {
                // Case C
                isFundLocked = true;
            }
            isDaySixtyChecked = true;
        }

        if (isDaySixtyChecked && !isMinTokensReached()) {
            // Case D
            // Mark the release state. No fund should be accepted anymore
            isFundReleased = true;
        }
    }

    function tokensAvailableAtTierInternal(uint8 _currentTier, uint _tokensPerTier, uint _tokensCreated) constant returns (uint) {
        uint tierThreshold = (_currentTier+1) * _tokensPerTier;

        // never go above maxTokensToCreate, which could happen if the max is not a multiple of _tokensPerTier
        if (tierThreshold > maxTokensToCreate) {
            tierThreshold = maxTokensToCreate;
        }

        // this can happen on the final purchase in the last tier
        if (_tokensCreated > tierThreshold) {
            return 0;
        }

        return tierThreshold - _tokensCreated;
    }

    function tokensAvailableAtCurrentTier() constant returns (uint) {
        return tokensAvailableAtTierInternal(getCurrentTier(), tokensPerTier, tokensCreated);
    }

    function getCurrentTier() constant returns (uint8) {
        uint8 tier = (uint8) (tokensCreated / tokensPerTier);
        return (tier > 4) ? 4 : tier;
    }

    function pricePerTokenAtCurrentTier() constant returns (uint) {
        return weiPerInitialHONG * divisor() / 100;
    }

    function divisor() constant returns (uint divisor) {

        // Quantity divisor model: based on total quantity of coins issued
        // Price ranged from 1.0 to 1.20 Ether for all HONG Tokens with a 0.05 ETH increase for each tier

        // The number of (base unit) tokens per wei is calculated
        // as `msg.value` * 100 / `divisor`

        return 100 + getCurrentTier() * 5;
    }
}


contract HONGInterface is ErrorHandler, HongConfiguration {

    // we do not have grace period. Once the goal is reached, the fund is secured

    address public managementBodyAddress;

    // 3 most important votings in blockchain
    mapping (uint => mapping (address => uint)) public votedKickoff;
    mapping (address => uint) public votedFreeze;
    mapping (address => uint) public votedHarvest;
    mapping (uint => uint256) public supportKickoffQuorum;
    uint256 public supportFreezeQuorum;
    uint256 public supportHarvestQuorum;
    uint public totalInitialBalance;
    uint public annualManagementFee;

    function voteToKickoffNewFiscalYear();
    function voteToFreezeFund();
    function recallVoteToFreezeFund();
    function voteToHarvestFund();

    function collectMyReturn();

    // Trigger the following events when the voting result is available
    event evKickoff(address msg_sender, uint msg_value, uint _fiscal);
    event evFreeze(address msg_sender, uint msg_value);
    event evHarvest(address msg_sender, uint msg_value);
}



// The HONG contract itself
contract HONG is HONGInterface, Token, TokenCreation {

    function HONG(
        address _managementBodyAddress,
        uint _closingTime,
        uint _closingTimeExtensionPeriod,
        uint _lastKickoffDateBuffer,
        uint _minTokensToCreate,
        uint _maxTokensToCreate,
        uint _tokensPerTier,
        bool _isInTestMode
    ) TokenCreation(_managementBodyAddress, _closingTime) {

        managementBodyAddress = _managementBodyAddress;
        closingTimeExtensionPeriod = _closingTimeExtensionPeriod;
        lastKickoffDateBuffer = _lastKickoffDateBuffer;

        minTokensToCreate = _minTokensToCreate;
        maxTokensToCreate = _maxTokensToCreate;
        tokensPerTier = _tokensPerTier;
        isInTestMode = _isInTestMode;

        returnWallet = new ReturnWallet(managementBodyAddress);
        rewardWallet = new RewardWallet(address(returnWallet));
        managementFeeWallet = new ManagementFeeWallet(managementBodyAddress, address(returnWallet));
        extraBalanceWallet = new ExtraBalanceWallet(address(returnWallet));

        if (address(extraBalanceWallet) == 0)
            doThrow("extraBalanceWallet:0");
        if (address(returnWallet) == 0)
            doThrow("returnWallet:0");
        if (address(rewardWallet) == 0)
            doThrow("rewardWallet:0");
        if (address(managementFeeWallet) == 0)
            doThrow("managementFeeWallet:0");
    }

    function () returns (bool success) {
        if (!isFromManagedAccount()) {
            // We do not accept donation here. Any extra amount sent to us after fund locking process, will be refunded
            return createTokenProxy(msg.sender);
        }
        else {
            evRecord(msg.sender, msg.value, "Recevied ether from ManagedAccount");
            return true;
        }
    }

    function isFromManagedAccount() internal returns (bool) {
        return msg.sender == address(extraBalanceWallet)
            || msg.sender == address(returnWallet)
            || msg.sender == address(rewardWallet)
            || msg.sender == address(managementFeeWallet);
    }

    /*
     * Voting for some critical steps, on blockchain
     */
    function voteToKickoffNewFiscalYear() onlyTokenHolders noEther onlyLocked {
        // this is the only valid fiscal year parameter, so there's no point in letting the caller pass it in.
        // Best case is they get it wrong and we throw, worst case is the get it wrong and there's some exploit
        uint _fiscal = currentFiscalYear + 1;

        if(!isKickoffEnabled[1]){  // if the first fiscal year is not kicked off yet
            // accept voting

        }else if(currentFiscalYear <= 3){  // if there was any kickoff() enabled before already

            if(lastKickoffDate + lastKickoffDateBuffer < now){ // 2 months from the end of the fiscal year
                // accept voting
            }else{
                // we do not accept early kickoff
                doThrow("kickOff:tooEarly");
                return;
            }
        }else{
            // do not accept kickoff anymore after the 4th year
            doThrow("kickOff:4thYear");
            return;
        }


        supportKickoffQuorum[_fiscal] -= votedKickoff[_fiscal][msg.sender];
        supportKickoffQuorum[_fiscal] += balances[msg.sender];
        votedKickoff[_fiscal][msg.sender] = balances[msg.sender];


        uint threshold = (kickoffQuorumPercent*(tokensCreated + bountyTokensCreated)) / 100;
        if(supportKickoffQuorum[_fiscal] > threshold) {
            if(_fiscal == 1){
                // transfer fund in extraBalance to main account
                extraBalanceWallet.returnBalanceToMainAccount();

                // reserve mgmtFeePercentage of whole fund to ManagementFeePoolWallet
                totalInitialBalance = this.balance;
                uint fundToReserve = (totalInitialBalance * mgmtFeePercentage) / 100;
                annualManagementFee = fundToReserve / 4;
                if(!managementFeeWallet.send(fundToReserve)){
                    doThrow("kickoff:ManagementFeePoolWalletFail");
                    return;
                }

            }
            isKickoffEnabled[_fiscal] = true;
            currentFiscalYear = _fiscal;
            lastKickoffDate = now;

            // transfer annual management fee from reservedWallet to mgmtWallet (external)
            managementFeeWallet.payManagementBodyAmount(annualManagementFee);

            evKickoff(msg.sender, msg.value, _fiscal);
            evIssueManagementFee(msg.sender, msg.value, annualManagementFee, true);
        }
    }

    function voteToFreezeFund() onlyTokenHolders noEther onlyLocked notFinalFiscalYear onlyDistributionNotInProgress {

        supportFreezeQuorum -= votedFreeze[msg.sender];
        supportFreezeQuorum += balances[msg.sender];
        votedFreeze[msg.sender] = balances[msg.sender];

        uint threshold = ((tokensCreated + bountyTokensCreated) * freezeQuorumPercent) / 100;
        if(supportFreezeQuorum > threshold){
            isFreezeEnabled = true;
            distributeDownstream(0);
            evFreeze(msg.sender, msg.value);
        }
    }

    function recallVoteToFreezeFund() onlyTokenHolders onlyNotFrozen noEther {
        supportFreezeQuorum -= votedFreeze[msg.sender];
        votedFreeze[msg.sender] = 0;
    }

    function voteToHarvestFund() onlyTokenHolders noEther onlyLocked onlyFinalFiscalYear {

        supportHarvestQuorum -= votedHarvest[msg.sender];
        supportHarvestQuorum += balances[msg.sender];
        votedHarvest[msg.sender] = balances[msg.sender];

        uint threshold = ((tokensCreated + bountyTokensCreated) * harvestQuorumPercent) / 100;
        if(supportHarvestQuorum > threshold) {
            isHarvestEnabled = true;
            evHarvest(msg.sender, msg.value);
        }
    }

    function collectMyReturn() onlyTokenHolders noEther onlyDistributionReady {
        uint tokens = balances[msg.sender];
        balances[msg.sender] = 0;
        returnWallet.payTokenHolderBasedOnTokenCount(msg.sender, tokens);
    }

    function mgmtInvestProject(
        address _projectWallet,
        uint _amount
    ) onlyManagementBody hasEther returns (bool _success) {

        if(!isKickoffEnabled[currentFiscalYear] || isFreezeEnabled || isHarvestEnabled){
            evMgmtInvestProject(msg.sender, msg.value, _projectWallet, _amount, false);
            return;
        }

        if(_amount >= this.balance){
            doThrow("failed:mgmtInvestProject: amount >= actualBalance");
            return;
        }

        // send the balance (_amount) to _projectWallet
        if (!_projectWallet.call.value(_amount)()) {
            doThrow("failed:mgmtInvestProject: cannot send to _projectWallet");
            return;
        }

        evMgmtInvestProject(msg.sender, msg.value, _projectWallet, _amount, true);
    }

    function transfer(address _to, uint256 _value) returns (bool success) {

        // Update kickoff voting record for the next fiscal year for an address, and the total quorum
        if(currentFiscalYear < 4){
            if(votedKickoff[currentFiscalYear+1][msg.sender] > _value){
                votedKickoff[currentFiscalYear+1][msg.sender] -= _value;
                supportKickoffQuorum[currentFiscalYear+1] -= _value;
            }else{
                supportKickoffQuorum[currentFiscalYear+1] -= votedKickoff[currentFiscalYear+1][msg.sender];
                votedKickoff[currentFiscalYear+1][msg.sender] = 0;
            }
        }

        // Update Freeze and Harvest voting records for an address, and the total quorum
        if(votedFreeze[msg.sender] > _value){
            votedFreeze[msg.sender] -= _value;
            supportFreezeQuorum -= _value;
        }else{
            supportFreezeQuorum -= votedFreeze[msg.sender];
            votedFreeze[msg.sender] = 0;
        }

        if(votedHarvest[msg.sender] > _value){
            votedHarvest[msg.sender] -= _value;
            supportHarvestQuorum -= _value;
        }else{
            supportHarvestQuorum -= votedHarvest[msg.sender];
            votedHarvest[msg.sender] = 0;
        }

        if (isFundLocked && super.transfer(_to, _value)) {
            return true;
        } else {
            if(!isFundLocked){
                doThrow("failed:transfer: isFundLocked is false");
            }else{
                doThrow("failed:transfer: cannot send send to _projectWallet");
            }
            return;
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"isFundReleased","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"mgmtDistribute","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":true,"inputs":[],"name":"weiPerInitialHONG","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"votedHarvest","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"minTokensToCreate","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"supportHarvestQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"extraBalanceWallet","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"totalInitialBalance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"divisor","outputs":[{"name":"divisor","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"voteToHarvestFund","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[],"name":"pricePerTokenAtCurrentTier","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"mgmtFeePercentage","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokensCreated","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isDistributionReady","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"closingTimeExtensionPeriod","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"address"}],"name":"votedKickoff","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"closingTime","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"lastKickoffDateBuffer","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isDayThirtyChecked","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"isFreezeEnabled","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"collectMyReturn","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"isMinTokensReached","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"isDistributionInProgress","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"lastKickoffDate","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"managementFeeWallet","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"supportFreezeQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokensAvailableAtCurrentTier","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTier","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[],"name":"isFundLocked","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"votedFreeze","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"returnWallet","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"kickoffQuorumPercent","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isMaxTokensReached","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"freezeQuorumPercent","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":true,"inputs":[],"name":"maxTokensToCreate","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_projectWallet","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mgmtInvestProject","outputs":[{"name":"_success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"isHarvestEnabled","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokensPerTier","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"taxPaid","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"maxBountyTokens","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"voteToKickoffNewFiscalYear","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"supportKickoffQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isInTestMode","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"managementBodyAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"harvestQuorumPercent","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"isKickoffEnabled","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"mgmtRewardPercentage","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"recallVoteToFreezeFund","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"bountyTokensCreated","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"annualManagementFee","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"_currentTier","type":"uint8"},{"name":"_tokensPerTier","type":"uint256"},{"name":"_tokensCreated","type":"uint256"}],"name":"tokensAvailableAtTierInternal","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isDaySixtyChecked","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"voteToFreezeFund","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"refundMyIcoInvestment","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"rewardWallet","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_recipientAddress","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mgmtIssueBountyToken","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"currentFiscalYear","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"_managementBodyAddress","type":"address"},{"name":"_closingTime","type":"uint256"},{"name":"_closingTimeExtensionPeriod","type":"uint256"},{"name":"_lastKickoffDateBuffer","type":"uint256"},{"name":"_minTokensToCreate","type":"uint256"},{"name":"_maxTokensToCreate","type":"uint256"},{"name":"_tokensPerTier","type":"uint256"},{"name":"_isInTestMode","type":"bool"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_success","type":"bool"}],"name":"evIssueManagementFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_recipientAddress","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_success","type":"bool"}],"name":"evMgmtIssueBountyToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_success","type":"bool"}],"name":"evMgmtDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_projectWallet","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"result","type":"bool"}],"name":"evMgmtInvestProject","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"}],"name":"evLockFund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"}],"name":"evReleaseFund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"evTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"evMinTokensReached","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"evCreatedToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"result","type":"bool"}],"name":"evRefund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_fiscal","type":"uint256"}],"name":"evKickoff","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"}],"name":"evFreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"}],"name":"evHarvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"message","type":"string"}],"name":"evRecord","type":"event"}]

6000805460ff19168155662386f26fc10000600290815560a060405260046060527f484f4e470000000000000000000000000000000000000000000000000000000060805260038054928190527f484f4e47000000000000000000000000000000000000000000000000000000088155916100ca917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b60206101006001851615026000190190931691909104601f01919091048101905b8082111561015a57600081556001016100b6565b50506040805180820190915260028082527fc4a60000000000000000000000000000000000000000000000000000000000006020928301908152600480546000829052915160ff1916811781559261015e927f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b6001841615610100026000190190931604601f01048101906100b6565b5090565b50506005805460ff19169055621e848060065562278d006007556305f5e1006008908155630ee6b2806009556302faf080600a55630190c800600b556014600c819055600d91909155600e8190556032600f5560105560405161010080614023833981016040528080519060200190919080519060200190919080519060200190919080519060200190919080519060200190919080519060200190919080519060200190919080519060200190919050508787601a8054600160a060020a0319168317905560018190555050601a8054600160a060020a0319168917908190556007879055600b86905560088590556009849055600a8390556000805460ff191683179055604051600160a060020a0391909116906105938061060a8339018082600160a060020a03168152602001915050604051809103906000f0602660046101000a815481600160a060020a0302191690830217905550602660049054906101000a9004600160a060020a031660405161038680610b9d8339018082600160a060020a03168152602001915050604051809103906000f0602760006101000a815481600160a060020a0302191690830217905550601a60009054906101000a9004600160a060020a0316602660049054906101000a9004600160a060020a031660405161041a80610f238339018083600160a060020a0316815260200182600160a060020a0316815260200192505050604051809103906000f0602860006101000a815481600160a060020a0302191690830217905550602660049054906101000a9004600160a060020a03166040516104138061133d8339018082600160a060020a03168152602001915050604051809103906000f0601b8054600160a060020a0319169190911790819055600160a060020a0316600014156104f6576104f6604060405190810160405280601481526020017f657874726142616c616e636557616c6c65743a300000000000000000000000008152602001505b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156104d65780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff16151561060757610002565b6026546401000000009004600160a060020a03166000141561054f5760408051808201909152600e81527f72657475726e57616c6c65743a30000000000000000000000000000000000000602082015261054f9061043d565b602754600160a060020a0316600014156105a05760408051808201909152600e81527f72657761726457616c6c65743a3000000000000000000000000000000000000060208201526105a09061043d565b602854600160a060020a0316600014156105f15760408051808201909152601581527f6d616e6167656d656e7446656557616c6c65743a30000000000000000000000060208201526105f19061043d565b50505050505050506128d3806117506000396000f35b5056606060408190526000805460ff60a860020a60ff0201191675010000000000000000000000000000000000000000001790556020806105938339506080604052513380600060016101000a815481600160a060020a03021916908302179055505080600160006101000a815481600160a060020a0302191690830217905550506105068061008d6000396000f3606060405236156100825760e060020a60003504632033d9ae81146100b1578063283a6e88146101b4578063345591ec146101c65780637e1c0c09146101d95780638da5cb5b146101e25780639f3ef430146101f9578063b656e9f41461024a578063b8b2776514610256578063dab8263a146102b4578063ed4460ef146102bd575b6102c66000805460ff75010000000000000000000000000000000000000000009091041615156102da57610002565b6102e06004356000546101009004600160a060020a03908116339091161461031157604080518082019091526009815260b960020a6837b7363ca7bbb732b9026020820152610373905b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101945780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff16151561037057610002565b6102e2600154600160a060020a031681565b6102c660015460a060020a900460ff1681565b6102ff60035481565b6102e26000546101009004600160a060020a031681565b6102e06004356024356000546101009004600160a060020a03908116339091161461037857604080518082019091526009815260b960020a6837b7363ca7bbb732b90260208201526103cd906100fb565b6102c660005460ff1681565b6102e060043560015461037090600160a060020a03168260005433600160a060020a0390811661010090920416146104ba57604080518082019091526009815260b960020a6837b7363ca7bbb732b90260208201526103cd906100fb565b6102ff60045481565b6102ff60025481565b604080519115158252519081900360200190f35b50600190565b005b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b6001805474ff0000000000000000000000000000000000000000191660a060020a1790556000805475ff00000000000000000000000000000000000000000019169055600381905530600160a060020a03163160028190558190046004555b50565b610370565b6103cd8282600460005054025b6000546101009004600160a060020a0390811633909116146103d157604080518082019091526009815260b960020a6837b7363ca7bbb732b90260208201526103cd906100fb565b5050565b600034111561040457604080518082019091526007815260c960020a663737a2ba3432b90260208201526103cd906100fb565b604051600160a060020a038316908290600081818185876185025a03f19250505015156104685760408051808201909152601181527f7061794f75743a73656e644661696c656400000000000000000000000000000060208201526103cd906100fb565b6040805133600160a060020a0390811682523460208301528183018490529151918416917f660c325e06928b5007bda0b9f8b5ce13ff32f2ccabf94c004b1b1994cb7186059181900360600190a25050565b60003411156104ed57604080518082019091526007815260c960020a663737a2ba3432b90260208201526103cd906100fb565b6103cd8260648330600160a060020a031631020461038556606060408190526000805460ff60a860020a60ff0201191675010000000000000000000000000000000000000000001790556020806103868339506080604052513380600060016101000a815481600160a060020a03021916908302179055505080600160006101000a815481600160a060020a0302191690830217905550506102f98061008d6000396000f3606060405236156100405760e060020a60003504635b2cdda3811461006f5780638da5cb5b14610081578063b656e9f414610098578063fc44fd28146100a4575b6101de6000805460ff75010000000000000000000000000000000000000000009091041615156101ea57610002565b6101f0600154600160a060020a031681565b6101f06000546101009004600160a060020a031681565b6101de60005460ff1681565b6000805475ff0000000000000000000000000000000000000000001916908190556001546102039161020591600160a060020a0390811691308216319133811661010090920416146102075760a0604052600960609081527f6f6e6c794f776e65720000000000000000000000000000000000000000000000608052610249905b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101be5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff1615156102f657610002565b15156060908152602090f35b50600190565b600160a060020a03166060908152602090f35b005b565b600034111561024e5760a0604052600760609081527f6e6f45746865720000000000000000000000000000000000000000000000000060805261024990610125565b6102f2565b81816060600081818185876185025a03f19250505015156102a65760408051808201909152601181527f7061794f75743a73656e644661696c6564000000000000000000000000000000602082015261024990610125565b6040805133600160a060020a03168152346020820152808201839052905183917f660c325e06928b5007bda0b9f8b5ce13ff32f2ccabf94c004b1b1994cb718605919081900360600190a25b5050565b5056606060408181526000805460ff60a860020a60ff0201191675010000000000000000000000000000000000000000001790558061041a833960a09052516080513380600060016101000a815481600160a060020a03021916908302179055505081600160006101000a815481600160a060020a030219169083021790555080600260006101000a815481600160a060020a0302191690830217905550505061036f806100ab6000396000f3606060405236156100565760e060020a60003504635b2cdda381146100855780638da5cb5b14610097578063a8bcbf3c146100ae578063b656e9f4146101d4578063bb582db6146101e0578063fc44fd28146101f2575b61022f6000805460ff750100000000000000000000000000000000000000000090910416151561024357610002565b610249600254600160a060020a031681565b6102496000546101009004600160a060020a031681565b61026660043560015461026890600160a060020a0316825b6000546101009004600160a060020a0390811633909116146102c05760408051808201909152600981527f6f6e6c794f776e657200000000000000000000000000000000000000000000006020820152610306905b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101b45780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff16151561026857610002565b61022f60005460ff1681565b610249600154600160a060020a031681565b6102666000805475ff0000000000000000000000000000000000000000001916905560025461026b90600160a060020a03908116903016316100c6565b604080519115158252519081900360200190f35b50600190565b60408051600160a060020a03929092168252519081900360200190f35b005b50565b565b6040805133600160a060020a0390811682523460208301528183018490529151918416917f660c325e06928b5007bda0b9f8b5ce13ff32f2ccabf94c004b1b1994cb7186059181900360600190a25b5050565b600034111561030b5760408051808201909152600781527f6e6f45746865720000000000000000000000000000000000000000000000000060208201526103069061011b565b6102bc565b604051600160a060020a038316908290600081818185876185025a03f192505050151561026d5760408051808201909152601181527f7061794f75743a73656e644661696c656400000000000000000000000000000060208201526103069061011b56606060408190526000805460ff60a860020a60ff0201191675010000000000000000000000000000000000000000001790556020806104138339506080604052513380600060016101000a815481600160a060020a03021916908302179055505080600160006101000a815481600160a060020a0302191690830217905550506103868061008d6000396000f36060604052361561004b5760e060020a600035046351fa7efd811461007a5780638da5cb5b146101a5578063b1a8b25a146101bc578063b656e9f4146101fd578063fc44fd2814610209575b6102466000805460ff750100000000000000000000000000000000000000000090910416151561025a57610002565b61026060043560005461027f906101009004600160a060020a0316825b6000546101009004600160a060020a0390811633909116146102d75760408051808201909152600981527f6f6e6c794f776e65720000000000000000000000000000000000000000000000602082015261031d905b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101855780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff16151561027f57610002565b6102626000546101009004600160a060020a031681565b6102606000805475ff000000000000000000000000000000000000000000191690819055610282906101009004600160a060020a0390811690301631610097565b61024660005460ff1681565b6102606000805475ff0000000000000000000000000000000000000000001916905560015461028290600160a060020a0390811690301631610097565b604080519115158252519081900360200190f35b50600190565b005b60408051600160a060020a03929092168252519081900360200190f35b50565b565b6040805133600160a060020a0390811682523460208301528183018490529151918416917f660c325e06928b5007bda0b9f8b5ce13ff32f2ccabf94c004b1b1994cb7186059181900360600190a25b5050565b60003411156103225760408051808201909152600781527f6e6f457468657200000000000000000000000000000000000000000000000000602082015261031d906100ec565b6102d3565b604051600160a060020a038316908290600081818185876185025a03f19250505015156102845760408051808201909152601181527f7061794f75743a73656e644661696c6564000000000000000000000000000000602082015261031d906100ec56606060405236156102be5760e060020a600035046302410cf68114610337578063044a5f971461034857806306fdde031461039f578063089aa819146103fd5780630c103837146104065780630c3b7b961461041e5780630d40e8d61461042757806314841164146104305780631d107603146104425780631f2dc5ef1461044b57806321d3523c14610459578063313ce56714610467578063342d91851461047357806335d37dbb14610482578063427500201461048b57806344440a59146104945780634845d3f8146104a7578063490fc399146104b05780634b6753bc146104d557806353bc147e146104de5780635474fbd3146104e7578063558305f9146104f957806356a3f4ef146105055780635b6aa3c21461051357806360d3e4c51461052457806367cf91c9146105365780636b9c1d221461053f57806370606cda1461055157806370a082311461055a57806373f5f8ee1461057c5780637412c2231461058d5780637895f853146105ad5780637c2b8d0a146105b95780637e4a1731146105d157806381dd70db146105eb5780638c32e774146105f45780639496df3f1461060657806395d89b411461060f5780639bd90aae1461066d5780639cb74ab6146106765780639e47214a146106d6578063a8d5652e146106e7578063a9059cbb146106f0578063a988e3711461075e578063ab71b8ac14610776578063adbda5a81461077f578063aea3ad8c14610791578063b656e9f4146107a9578063ba0bface146107b5578063bf53e3ba146107c7578063c86a9dea146107d0578063cdd8d4e8146107eb578063cfebb88b146107f4578063da228f9c14610800578063dc7049bf14610809578063df23481514610812578063e0e325041461084c578063e2649caf1461085f578063e84f70541461086d578063fb75b2c7146108ad578063fea5d7b1146108bf578063ffa309e4146108fd575b610906600061091a601b5460009033600160a060020a03908116911614806102fd57506026546401000000009004600160a060020a0390811633909116145b806103175750602754600160a060020a0390811633909116145b80610a1e5750602854600160a060020a0390811633909116149050610a1b565b610906602154610100900460ff1681565b610a25601a54600160a060020a039081163390911614610fc05760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f647900000000000000000000000000006020820152610d7290610ba0565b6040805160038054602060026001831615610100026000190190921691909104601f8101829004820284018201909452838352610a2793908301828280156111115780601f106110e657610100808354040283529160200191611111565b610a9560025481565b610a9560043560146020526000908152604090205481565b610a9560085481565b610a9560175481565b610aa7601b54600160a060020a031681565b610a9560185481565b610a955b6000611119610591565b610a25600061112933610561565b610ac460055460ff1681565b610a95600060646112cf61044f565b610a95600d5481565b610a9560205481565b6109066026546301000000900460ff1681565b610a9560075481565b601260209081526004356000908152604080822090925260243581522054610a959081565b610a9560015481565b610a95600b5481565b61090660215462010000900460ff1681565b61090660265460ff1681565b610a2560006112db33610561565b6109065b6008546020541015610a1b565b61090660265462010000900460ff1681565b610a9560245481565b610aa7602854600160a060020a031681565b610a9560165481565b610a956004355b600160a060020a03166000908152601e602052604090205490565b610a955b6000610a1e611420610591565b610ac45b600a546020546000919004600460ff82161161142c578061142f565b61090660215460ff1681565b610a9560043560136020526000908152604090205481565b610aa76026546401000000009004600160a060020a031681565b610a9560105481565b6109065b602054600954901015610a1b565b610a95600f5481565b6040805160048054602060026001831615610100026000190190921691909104601f8101829004820284018201909452838352610a2793908301828280156111115780601f106110e657610100808354040283529160200191611111565b610a9560095481565b610906600435602435601a54600090600160a060020a0390811633909116146114355760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f64790000000000000000000000000000602082015261146890610ba0565b610906602654610100900460ff1681565b610a95600a5481565b6109066004356024356000600460236000505410156116c057602354600101815260126020908152604080832033600160a060020a031684529091528120548290111561166957604080822080548490039055602354600101825260156020528120805483900390556116c0565b610a95600435601d6020526000908152604090205481565b610a9560065481565b610a2560006000600061184a33610561565b610a9560043560156020526000908152604090205481565b61090660005460ff1681565b610aa7601a54600160a060020a031681565b610a95600e5481565b61090660043560256020526000908152604090205460ff1681565b610a95600c5481565b610a25611c6f33610561565b610a9560225481565b610a9560195481565b610a956004356024356044355b6009546000906001850160ff1684029081111561083b57506009545b80831115611d445760009150611d4a565b6109066021546301000000900460ff1681565b610a256000611d5233610561565b610a25600060006000600060006000341115611f4457604080518082019091526007815260c960020a663737a2ba3432b9026020820152611f7b90610ba0565b610aa7602754600160a060020a031681565b610906600435602435600060003411156122b257604080518082019091526007815260c960020a663737a2ba3432b902602082015261146890610ba0565b610a9560235481565b604080519115158252519081900360200190f35b151561097b57610a1e3360006000600060006000600060006000600060006000602160009054906101000a900460ff1615610adb57604080518082019091526009815260ba60020a681b9bdd131bd8dad959026020820152610b2d90610ba0565b6040805133600160a060020a0316815234602082015260608183018190526022908201527f52656365766965642065746865722066726f6d204d616e616765644163636f7560808201527f6e7400000000000000000000000000000000000000000000000000000000000060a082015290517fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9109181900360c00190a15060015b90565b9050610a1b565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610a875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b6040805160ff929092168252519081900360200190f35b602154610100900460ff1615610c595760408051808201909152600b81527f6e6f7452656c65617365640000000000000000000000000000000000000000006020820152610b2d90610ba0565b60009a505b50505050505050505050919050565b611468606060405190810160405280603381526020017f6661696c65643a7472616e736665723a2063616e6e6f742073656e642073656e81526020017f6420746f205f70726f6a65637457616c6c6574000000000000000000000000008152602001505b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610c395780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff1615156112cc57610002565b60003411610c8c57604080518082019091526008815260c160020a673430b9a2ba3432b9026020820152610b2d90610ba0565b6000995060009850610c9c610517565b97506064610ca861044f565b60025402049650349550610cba610580565b94508460001415610d055760408051808201909152600e81527f6e6f546f6b656e73546f53656c6c0000000000000000000000000000000000006020820152610b2890610ba0565b94505b868610610d25578686049350610d74858560008183106123d857816123da565b50600160a060020a038b166000908152601c60209081526040808320805489019055600254601d9092529091208054918b028a039182019055610df4602154610100900460ff16156123e1575b565b9250846000148015610d895750602054600954145b15610d92578392505b600160a060020a038c166000908152601e60209081526040808320805487019055815486018255601c90915290208054888502908101909155998301999889019891506064610ddf61044f565b60025402049650348990039550610d02610580565b6000811115610e6257604051601b54600160a060020a031690600090839082818181858883f193505050501515610e625760408051808201909152601581527f657874726142616c616e63653a73656e644661696c00000000000000000000006020820152610b2d90610ba0565b60408051600160a060020a0333811682523460208301528183018d90529151918e16917fe2cbb9b7dba3b339b259c4f199464ccf9c277a3ff556b2c0db2b0abacdbeedde9181900360600190a287158015610ec05750610ec0610517565b15610f1457602080546040805133600160a060020a03168152349381019390935282810191909152517f6bb4d57357a9a55fe03d55925e248fcb44bf65dfe36af0c16c22910ae3bb8fb29181900360600190a15b60215460ff1615610f63576040805133600160a060020a0316815234602082015281517fbb9b02a8573d9d68d38e541b0e14a32a2dfe031aade3a25dd3de928fbc3b309d929181900390910190a15b602154610100900460ff1615610fb7576040805133600160a060020a0316815234602082015281517f32f04209c78f4db9d444b9dc3182c73fc63bb6fdd517c19f36798ad870fb1cfe929181900390910190a15b60019a50610b2d565b60003411610ff357604080518082019091526008815260c160020a673430b9a2ba3432b9026020820152610d7290610ba0565b602654610100900460ff1615156110415760408051808201909152601281527f6f6e6c7948617276657374456e61626c656400000000000000000000000000006020820152610d7290610ba0565b6026546301000000900460ff16156110905760408051808201909152601881527f6f6e6c79446973747269627574696f6e4e6f74526561647900000000000000006020820152610d7290610ba0565b600c54610d72905b60265462010000900460ff16156124ec5760408051808201909152601d81527f6f6e6c79446973747269627574696f6e4e6f74496e50726f6772657373000000602082015261118f90610ba0565b820191906000526020600020905b8154815290600101906020018083116110f457829003601f168201915b505050505081565b60050260640160ff169050610a1b565b6000141561115c5760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b600034111561119457604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b6112cc565b60215460ff1615156111cd5760408051808201909152600a815260b260020a691bdb9b1e531bd8dad95902602082015261118f90610ba0565b60235460049010156112165760408051808201909152601381527f63757272656e7446697363616c596561723c3400000000000000000000000000602082015261118f90610ba0565b5033600160a060020a0316600090815260146020818152604080842080546017805491909103808255601e85529290952080549290920185559054928252919091556022549054600e549254606491909201929092029190910490819011156112cc576026805461ff0019166101001790556040805133600160a060020a0316815234602082015281517fe6a8fe04d793748334015ee5de6eb69ddb7c3b29df2251bc5b376305ae5cd800929181900390910190a15b50565b60025402049050610a1b565b6000141561130e5760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b600034111561134157604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b6026546301000000900460ff1615156113915760408051808201909152601581527f6f6e6c79446973747269627574696f6e52656164790000000000000000000000602082015261118f90610ba0565b50600160a060020a033381166000818152601e602052604080822080549083905560265482517f9f3ef4300000000000000000000000000000000000000000000000000000000081526004810195909552602485018290529151909464010000000090920490911692639f3ef430926044808301939192829003018183876161da5a03f1156100025750505050565b602054600a549061081f565b60045b91505090565b6000341161146d57604080518082019091526008815260c160020a673430b9a2ba3432b902602082015261146890610ba0565b61155b565b60235460009081526025602052604090205460ff161580611490575060265460ff165b806114a25750602654610100900460ff165b156115615760408051600160a060020a033381168252346020830152851681830152606081018490526000608082015290517fd5de30e0bdd3cd6bfbc9d6142e5ded72ce738d3d230051400271eaa0c63b3be39181900360a00190a161155b565b60408051600160a060020a033381168252346020830152851681830152606081018490526001608082015290517fd5de30e0bdd3cd6bfbc9d6142e5ded72ce738d3d230051400271eaa0c63b3be39181900360a00190a15b92915050565b30600160a060020a03163182106115da57611468606060405190810160405280603181526020017f6661696c65643a6d676d74496e7665737450726f6a6563743a20616d6f756e7481526020017f203e3d2061637475616c42616c616e6365000000000000000000000000000000815260200150610ba0565b604051600160a060020a038416908390600081818185876185025a03f192505050151561150357611468606060405190810160405280603781526020017f6661696c65643a6d676d74496e7665737450726f6a6563743a2063616e6e6f7481526020017f2073656e6420746f205f70726f6a65637457616c6c6574000000000000000000815260200150610ba0565b602380546001908101600081815260126020818152604080842033600160a060020a031680865290835281852054958552601583528185208054969096039095559554909401825283528381209181529152908120555b33600160a060020a0316600090815260136020526040902054829011156116fb57604060002080548390039055601680548390039055611721565b33600160a060020a03166000908152601360205260408120805460168054919091039055555b33600160a060020a03166000908152601460205260409020548290111561175c57604060002080548390039055601780548390039055611782565b33600160a060020a03166000908152601460205260408120805460178054919091039055555b60215460ff1680156117c957506117c98383600060003411156127d357604080518082019091526007815260c960020a663737a2ba3432b902602082015261146890610ba0565b156117d65750600161155b565b60215460ff161515610b3c57611468606060405190810160405280602681526020017f6661696c65643a7472616e736665723a20697346756e644c6f636b656420697381526020017f2066616c73650000000000000000000000000000000000000000000000000000815260200150610ba0565b6000141561187d5760408051808201909152601081526000805160206128b383398151915260208201526118b090610ba0565b60003411156118b557604080518082019091526007815260c960020a663737a2ba3432b90260208201526118b090610ba0565b611c6a565b60215460ff1615156118ee5760408051808201909152600a815260b260020a691bdb9b1e531bd8dad9590260208201526118b090610ba0565b6023546001600081905260256020527f20a3e2dd35f58e582c5288344c035e137cace924bb9daf3762b8ef5a58327e26549101935060ff1615156119315761194c565b60235460039011611ace57600b546024544291011015611b0b575b6000838152601260209081526040808320600160a060020a03331680855290835281842080548886526015808652848720805492909203808355938752601e86529386208054909301815591549055602254835460105495899052929093525460649190920190920291909104925082901115611c6a578260011415611b4857601b60009054906101000a9004600160a060020a0316600160a060020a031663b1a8b25a6040518160e060020a0281526004018090506000604051808303816000876161da5a03f115610002575050505030600160a060020a03908116316018819055600d5460046064929091029190910490810460195560285460405191921690600090839082818181858883f193505050501515611b48576118b0606060405190810160405280602381526020017f6b69636b6f66663a4d616e6167656d656e74466565506f6f6c57616c6c65744681526020017f61696c0000000000000000000000000000000000000000000000000000000000815260200150610ba0565b60408051808201909152600f81527f6b69636b4f66663a34746859656172000000000000000000000000000000000060208201526118b090610ba0565b60408051808201909152601081527f6b69636b4f66663a746f6f4561726c790000000000000000000000000000000060208201526118b090610ba0565b600083815260256020526040808220805460ff19166001179055602385905542602490815581516028546019547fa8bcbf3c00000000000000000000000000000000000000000000000000000000835260048301529251600160a060020a03939093169363a8bcbf3c93838301939192909190829003018183876161da5a03f1156100025750506040805133600160a060020a0316815234602082015280820186905290517f43b50d8e46a4af80642a7d3903d182b8f5ab87b17e5bef9fd8ba4c3ba6ef9f0f92509081900360600190a16040805160195433600160a060020a03168252346020830152818301526001606082015290517f47fa1cbddad7488af88763b839f5f5436be7541a8bbfd7fa14d9c6c7581e8c1d9181900360800190a15b505050565b60001415611ca25760408051808201909152601081526000805160206128b38339815191526020820152610d7290610ba0565b60265460ff1615611cea5760408051808201909152600d81527f6f6e6c794e6f7446726f7a656e000000000000000000000000000000000000006020820152610d7290610ba0565b6000341115611d1d57604080518082019091526007815260c960020a663737a2ba3432b9026020820152610d7290610ba0565b33600160a060020a0316600090815260136020526040812080546016805491909103905555565b82810391505b509392505050565b60001415611d855760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b6000341115611db857604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b60215460ff161515611df15760408051808201909152600a815260b260020a691bdb9b1e531bd8dad95902602082015261118f90610ba0565b60235460049010611e395760408051808201909152601481527f63757272656e7446697363616c596561723e3d34000000000000000000000000602082015261118f90610ba0565b60265462010000900460ff1615611e875760408051808201909152601d81527f6f6e6c79446973747269627574696f6e4e6f74496e50726f6772657373000000602082015261118f90610ba0565b5033600160a060020a0316600090815260136020818152604080842080546016805491909103808255601e8552929095208054929092018555905492825291909155600f5460225491549254606493909201029190910490819011156112cc576026805460ff19166001179055611efe6000611098565b6040805133600160a060020a0316815234602082015281517fa3a0ee24545ff02dd0d20d670461167188c7adc4c2973fd0d1b294e1e576fc79929181900390910190a150565b60215460ff1615611f8057604080518082019091526009815260ba60020a681b9bdd131bd8dad959026020820152611f7b90610ba0565b6122ab565b611f8933610561565b60001415611fbc5760408051808201909152601081526000805160206128b38339815191526020820152611f7b90610ba0565b33600160a060020a03166000908152601c602052604081205414156120185760408051808201909152600a81527f6e6f576569476976656e000000000000000000000000000000000000000000006020820152611f7b90610ba0565b6020805433600160a060020a03166000908152601e90925260409091205411156120795760408051808201909152601181527f696e76616c6964546f6b656e436f756e740000000000000000000000000000006020820152611f7b90610ba0565b612081610517565b600160a060020a033381166000908152601c602090815260408083208054601d8085528386208054601e87528588208054908990559488905591865286905584548390039094558251601b547f51fa7efd000000000000000000000000000000000000000000000000000000008252600482018690529351979c50909a509298509650889550909216926351fa7efd926024818101939291829003018183876161da5a03f11561000257505060405133600160a060020a03169150600090839082818181858883f1935050505015156121f65733600160a060020a03167fba1c02018a9ab9c5ecec972230d1c4444bd911f121639f33da13896099655b3533348460006040518085600160a060020a03168152602001848152602001838152602001821515815260200194505050505060405180910390a260408051808201909152601181527f726566756e643a53656e644661696c65640000000000000000000000000000006020820152611f7b90610ba0565b6040805133600160a060020a03168082523460208301528183018490526001606083015291517fba1c02018a9ab9c5ecec972230d1c4444bd911f121639f33da13896099655b359181900360800190a2841580156122575750612257610517565b156122ab57602080546040805133600160a060020a03168152349381019390935282810191909152517f6bb4d57357a9a55fe03d55925e248fcb44bf65dfe36af0c16c22910ae3bb8fb29181900360600190a15b5050505050565b601a54600160a060020a0390811633909116146123065760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f64790000000000000000000000000000602082015261146890610ba0565b6022546006548391820111156123535760408051808201909152600c81527f6869744d6178426f756e7479000000000000000000000000000000000000000060208201526123d390610ba0565b600160a060020a038481166000818152601e6020908152604091829020805488019055602280548801905581513390941684523490840152828101919091526060820185905260016080830152517fd169a02076bf076f24fa9c265d5ed41dc57e6553208e7a8e7190cd90c365f1849181900360a00190a15b5092915050565b6123cc565b825b905061155b565b6123e96105f8565b6021805460ff19169091179081905560ff161580156124155750602160029054906101000a900460ff16155b801561242357506001544210155b1561245557612430610517565b15612443576021805460ff191660011790555b6021805462ff00001916620100001790555b60215460ff1615801561247257506021546301000000900460ff16155b80156124845750600754600154014210155b156124b857612491610517565b156124a4576021805460ff191660011790555b6021805463ff000000191663010000001790555b6021546301000000900460ff1680156124d657506124d4610517565b155b15610d72576021805461ff001916610100179055565b6026805463ff0000001962ff00001990911662010000171663010000001790556125ac602654604051640100000000909104600160a060020a03908116916000913016319082818181858883f193505050501515610d7257610d72606060405190810160405280602381526020017f70617942616c616e6365546f52657475726e57616c6c65743a73656e6446616981526020017f6c65640000000000000000000000000000000000000000000000000000000000815260200150610ba0565b602860009054906101000a9004600160a060020a0316600160a060020a031663fc44fd286040518160e060020a0281526004018090506000604051808303816000876161da5a03f11561000257506040805160275460e360020a631f889fa50282529151600160a060020a03929092169350600481810192600092909190829003018183876161da5a03f1156100025750601b546040805160e360020a631f889fa50281529051600160a060020a03929092169350600481810192600092909190829003018183876161da5a03f1156100025750505060008111156126e457602660049054906101000a9004600160a060020a0316600160a060020a031663b8b27765826040518260e060020a028152600401808281526020019150506000604051808303816000876161da5a03f115610002575050505b602654602254602054604080517f2033d9ae0000000000000000000000000000000000000000000000000000000081529190920160048201529051640100000000909204600160a060020a031691632033d9ae91602480820192600092909190829003018183876161da5a03f11561000257505060265460408051600160a060020a033381168252346020830152640100000000909304909216318282015260016060830152517f6816fcd617af2edc3ccc34b8a63bab368d79f315e065779259bb6a13541eaea292509081900360800190a16000602660026101000a81548160ff0219169083021790555050565b600082116127e35750600061155b565b33600160a060020a03166000908152601e60205260409020548290101561280c5750600061155b565b600160a060020a0383166000908152601e602052604090205480830110156128365750600061155b565b600160a060020a033381166000818152601e60209081526040808320805488900390559387168083529184902080548701905583518381523491810191909152808401869052925190927fe921528ef8652e1a832f8063bcbca0186d6c5a28413c90acecaf074846c412db919081900360600190a350600161155b566f6e6c79546f6b656e486f6c6465727300000000000000000000000000000000000000000000000000000000b79ab5993cef2e0b714a66f3eda73b55de812d310000000000000000000000000000000000000000000000000000000057ebbed00000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000190c8000000000000000000000000000000000000000000000000000000000008f0d180000000000000000000000000000000000000000000000000000000000ee6b2800000000000000000000000000000000000000000000000000000000002faf0800000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x606060405236156102be5760e060020a600035046302410cf68114610337578063044a5f971461034857806306fdde031461039f578063089aa819146103fd5780630c103837146104065780630c3b7b961461041e5780630d40e8d61461042757806314841164146104305780631d107603146104425780631f2dc5ef1461044b57806321d3523c14610459578063313ce56714610467578063342d91851461047357806335d37dbb14610482578063427500201461048b57806344440a59146104945780634845d3f8146104a7578063490fc399146104b05780634b6753bc146104d557806353bc147e146104de5780635474fbd3146104e7578063558305f9146104f957806356a3f4ef146105055780635b6aa3c21461051357806360d3e4c51461052457806367cf91c9146105365780636b9c1d221461053f57806370606cda1461055157806370a082311461055a57806373f5f8ee1461057c5780637412c2231461058d5780637895f853146105ad5780637c2b8d0a146105b95780637e4a1731146105d157806381dd70db146105eb5780638c32e774146105f45780639496df3f1461060657806395d89b411461060f5780639bd90aae1461066d5780639cb74ab6146106765780639e47214a146106d6578063a8d5652e146106e7578063a9059cbb146106f0578063a988e3711461075e578063ab71b8ac14610776578063adbda5a81461077f578063aea3ad8c14610791578063b656e9f4146107a9578063ba0bface146107b5578063bf53e3ba146107c7578063c86a9dea146107d0578063cdd8d4e8146107eb578063cfebb88b146107f4578063da228f9c14610800578063dc7049bf14610809578063df23481514610812578063e0e325041461084c578063e2649caf1461085f578063e84f70541461086d578063fb75b2c7146108ad578063fea5d7b1146108bf578063ffa309e4146108fd575b610906600061091a601b5460009033600160a060020a03908116911614806102fd57506026546401000000009004600160a060020a0390811633909116145b806103175750602754600160a060020a0390811633909116145b80610a1e5750602854600160a060020a0390811633909116149050610a1b565b610906602154610100900460ff1681565b610a25601a54600160a060020a039081163390911614610fc05760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f647900000000000000000000000000006020820152610d7290610ba0565b6040805160038054602060026001831615610100026000190190921691909104601f8101829004820284018201909452838352610a2793908301828280156111115780601f106110e657610100808354040283529160200191611111565b610a9560025481565b610a9560043560146020526000908152604090205481565b610a9560085481565b610a9560175481565b610aa7601b54600160a060020a031681565b610a9560185481565b610a955b6000611119610591565b610a25600061112933610561565b610ac460055460ff1681565b610a95600060646112cf61044f565b610a95600d5481565b610a9560205481565b6109066026546301000000900460ff1681565b610a9560075481565b601260209081526004356000908152604080822090925260243581522054610a959081565b610a9560015481565b610a95600b5481565b61090660215462010000900460ff1681565b61090660265460ff1681565b610a2560006112db33610561565b6109065b6008546020541015610a1b565b61090660265462010000900460ff1681565b610a9560245481565b610aa7602854600160a060020a031681565b610a9560165481565b610a956004355b600160a060020a03166000908152601e602052604090205490565b610a955b6000610a1e611420610591565b610ac45b600a546020546000919004600460ff82161161142c578061142f565b61090660215460ff1681565b610a9560043560136020526000908152604090205481565b610aa76026546401000000009004600160a060020a031681565b610a9560105481565b6109065b602054600954901015610a1b565b610a95600f5481565b6040805160048054602060026001831615610100026000190190921691909104601f8101829004820284018201909452838352610a2793908301828280156111115780601f106110e657610100808354040283529160200191611111565b610a9560095481565b610906600435602435601a54600090600160a060020a0390811633909116146114355760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f64790000000000000000000000000000602082015261146890610ba0565b610906602654610100900460ff1681565b610a95600a5481565b6109066004356024356000600460236000505410156116c057602354600101815260126020908152604080832033600160a060020a031684529091528120548290111561166957604080822080548490039055602354600101825260156020528120805483900390556116c0565b610a95600435601d6020526000908152604090205481565b610a9560065481565b610a2560006000600061184a33610561565b610a9560043560156020526000908152604090205481565b61090660005460ff1681565b610aa7601a54600160a060020a031681565b610a95600e5481565b61090660043560256020526000908152604090205460ff1681565b610a95600c5481565b610a25611c6f33610561565b610a9560225481565b610a9560195481565b610a956004356024356044355b6009546000906001850160ff1684029081111561083b57506009545b80831115611d445760009150611d4a565b6109066021546301000000900460ff1681565b610a256000611d5233610561565b610a25600060006000600060006000341115611f4457604080518082019091526007815260c960020a663737a2ba3432b9026020820152611f7b90610ba0565b610aa7602754600160a060020a031681565b610906600435602435600060003411156122b257604080518082019091526007815260c960020a663737a2ba3432b902602082015261146890610ba0565b610a9560235481565b604080519115158252519081900360200190f35b151561097b57610a1e3360006000600060006000600060006000600060006000602160009054906101000a900460ff1615610adb57604080518082019091526009815260ba60020a681b9bdd131bd8dad959026020820152610b2d90610ba0565b6040805133600160a060020a0316815234602082015260608183018190526022908201527f52656365766965642065746865722066726f6d204d616e616765644163636f7560808201527f6e7400000000000000000000000000000000000000000000000000000000000060a082015290517fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9109181900360c00190a15060015b90565b9050610a1b565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610a875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b6040805160ff929092168252519081900360200190f35b602154610100900460ff1615610c595760408051808201909152600b81527f6e6f7452656c65617365640000000000000000000000000000000000000000006020820152610b2d90610ba0565b60009a505b50505050505050505050919050565b611468606060405190810160405280603381526020017f6661696c65643a7472616e736665723a2063616e6e6f742073656e642073656e81526020017f6420746f205f70726f6a65637457616c6c6574000000000000000000000000008152602001505b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610c395780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff1615156112cc57610002565b60003411610c8c57604080518082019091526008815260c160020a673430b9a2ba3432b9026020820152610b2d90610ba0565b6000995060009850610c9c610517565b97506064610ca861044f565b60025402049650349550610cba610580565b94508460001415610d055760408051808201909152600e81527f6e6f546f6b656e73546f53656c6c0000000000000000000000000000000000006020820152610b2890610ba0565b94505b868610610d25578686049350610d74858560008183106123d857816123da565b50600160a060020a038b166000908152601c60209081526040808320805489019055600254601d9092529091208054918b028a039182019055610df4602154610100900460ff16156123e1575b565b9250846000148015610d895750602054600954145b15610d92578392505b600160a060020a038c166000908152601e60209081526040808320805487019055815486018255601c90915290208054888502908101909155998301999889019891506064610ddf61044f565b60025402049650348990039550610d02610580565b6000811115610e6257604051601b54600160a060020a031690600090839082818181858883f193505050501515610e625760408051808201909152601581527f657874726142616c616e63653a73656e644661696c00000000000000000000006020820152610b2d90610ba0565b60408051600160a060020a0333811682523460208301528183018d90529151918e16917fe2cbb9b7dba3b339b259c4f199464ccf9c277a3ff556b2c0db2b0abacdbeedde9181900360600190a287158015610ec05750610ec0610517565b15610f1457602080546040805133600160a060020a03168152349381019390935282810191909152517f6bb4d57357a9a55fe03d55925e248fcb44bf65dfe36af0c16c22910ae3bb8fb29181900360600190a15b60215460ff1615610f63576040805133600160a060020a0316815234602082015281517fbb9b02a8573d9d68d38e541b0e14a32a2dfe031aade3a25dd3de928fbc3b309d929181900390910190a15b602154610100900460ff1615610fb7576040805133600160a060020a0316815234602082015281517f32f04209c78f4db9d444b9dc3182c73fc63bb6fdd517c19f36798ad870fb1cfe929181900390910190a15b60019a50610b2d565b60003411610ff357604080518082019091526008815260c160020a673430b9a2ba3432b9026020820152610d7290610ba0565b602654610100900460ff1615156110415760408051808201909152601281527f6f6e6c7948617276657374456e61626c656400000000000000000000000000006020820152610d7290610ba0565b6026546301000000900460ff16156110905760408051808201909152601881527f6f6e6c79446973747269627574696f6e4e6f74526561647900000000000000006020820152610d7290610ba0565b600c54610d72905b60265462010000900460ff16156124ec5760408051808201909152601d81527f6f6e6c79446973747269627574696f6e4e6f74496e50726f6772657373000000602082015261118f90610ba0565b820191906000526020600020905b8154815290600101906020018083116110f457829003601f168201915b505050505081565b60050260640160ff169050610a1b565b6000141561115c5760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b600034111561119457604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b6112cc565b60215460ff1615156111cd5760408051808201909152600a815260b260020a691bdb9b1e531bd8dad95902602082015261118f90610ba0565b60235460049010156112165760408051808201909152601381527f63757272656e7446697363616c596561723c3400000000000000000000000000602082015261118f90610ba0565b5033600160a060020a0316600090815260146020818152604080842080546017805491909103808255601e85529290952080549290920185559054928252919091556022549054600e549254606491909201929092029190910490819011156112cc576026805461ff0019166101001790556040805133600160a060020a0316815234602082015281517fe6a8fe04d793748334015ee5de6eb69ddb7c3b29df2251bc5b376305ae5cd800929181900390910190a15b50565b60025402049050610a1b565b6000141561130e5760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b600034111561134157604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b6026546301000000900460ff1615156113915760408051808201909152601581527f6f6e6c79446973747269627574696f6e52656164790000000000000000000000602082015261118f90610ba0565b50600160a060020a033381166000818152601e602052604080822080549083905560265482517f9f3ef4300000000000000000000000000000000000000000000000000000000081526004810195909552602485018290529151909464010000000090920490911692639f3ef430926044808301939192829003018183876161da5a03f1156100025750505050565b602054600a549061081f565b60045b91505090565b6000341161146d57604080518082019091526008815260c160020a673430b9a2ba3432b902602082015261146890610ba0565b61155b565b60235460009081526025602052604090205460ff161580611490575060265460ff165b806114a25750602654610100900460ff165b156115615760408051600160a060020a033381168252346020830152851681830152606081018490526000608082015290517fd5de30e0bdd3cd6bfbc9d6142e5ded72ce738d3d230051400271eaa0c63b3be39181900360a00190a161155b565b60408051600160a060020a033381168252346020830152851681830152606081018490526001608082015290517fd5de30e0bdd3cd6bfbc9d6142e5ded72ce738d3d230051400271eaa0c63b3be39181900360a00190a15b92915050565b30600160a060020a03163182106115da57611468606060405190810160405280603181526020017f6661696c65643a6d676d74496e7665737450726f6a6563743a20616d6f756e7481526020017f203e3d2061637475616c42616c616e6365000000000000000000000000000000815260200150610ba0565b604051600160a060020a038416908390600081818185876185025a03f192505050151561150357611468606060405190810160405280603781526020017f6661696c65643a6d676d74496e7665737450726f6a6563743a2063616e6e6f7481526020017f2073656e6420746f205f70726f6a65637457616c6c6574000000000000000000815260200150610ba0565b602380546001908101600081815260126020818152604080842033600160a060020a031680865290835281852054958552601583528185208054969096039095559554909401825283528381209181529152908120555b33600160a060020a0316600090815260136020526040902054829011156116fb57604060002080548390039055601680548390039055611721565b33600160a060020a03166000908152601360205260408120805460168054919091039055555b33600160a060020a03166000908152601460205260409020548290111561175c57604060002080548390039055601780548390039055611782565b33600160a060020a03166000908152601460205260408120805460178054919091039055555b60215460ff1680156117c957506117c98383600060003411156127d357604080518082019091526007815260c960020a663737a2ba3432b902602082015261146890610ba0565b156117d65750600161155b565b60215460ff161515610b3c57611468606060405190810160405280602681526020017f6661696c65643a7472616e736665723a20697346756e644c6f636b656420697381526020017f2066616c73650000000000000000000000000000000000000000000000000000815260200150610ba0565b6000141561187d5760408051808201909152601081526000805160206128b383398151915260208201526118b090610ba0565b60003411156118b557604080518082019091526007815260c960020a663737a2ba3432b90260208201526118b090610ba0565b611c6a565b60215460ff1615156118ee5760408051808201909152600a815260b260020a691bdb9b1e531bd8dad9590260208201526118b090610ba0565b6023546001600081905260256020527f20a3e2dd35f58e582c5288344c035e137cace924bb9daf3762b8ef5a58327e26549101935060ff1615156119315761194c565b60235460039011611ace57600b546024544291011015611b0b575b6000838152601260209081526040808320600160a060020a03331680855290835281842080548886526015808652848720805492909203808355938752601e86529386208054909301815591549055602254835460105495899052929093525460649190920190920291909104925082901115611c6a578260011415611b4857601b60009054906101000a9004600160a060020a0316600160a060020a031663b1a8b25a6040518160e060020a0281526004018090506000604051808303816000876161da5a03f115610002575050505030600160a060020a03908116316018819055600d5460046064929091029190910490810460195560285460405191921690600090839082818181858883f193505050501515611b48576118b0606060405190810160405280602381526020017f6b69636b6f66663a4d616e6167656d656e74466565506f6f6c57616c6c65744681526020017f61696c0000000000000000000000000000000000000000000000000000000000815260200150610ba0565b60408051808201909152600f81527f6b69636b4f66663a34746859656172000000000000000000000000000000000060208201526118b090610ba0565b60408051808201909152601081527f6b69636b4f66663a746f6f4561726c790000000000000000000000000000000060208201526118b090610ba0565b600083815260256020526040808220805460ff19166001179055602385905542602490815581516028546019547fa8bcbf3c00000000000000000000000000000000000000000000000000000000835260048301529251600160a060020a03939093169363a8bcbf3c93838301939192909190829003018183876161da5a03f1156100025750506040805133600160a060020a0316815234602082015280820186905290517f43b50d8e46a4af80642a7d3903d182b8f5ab87b17e5bef9fd8ba4c3ba6ef9f0f92509081900360600190a16040805160195433600160a060020a03168252346020830152818301526001606082015290517f47fa1cbddad7488af88763b839f5f5436be7541a8bbfd7fa14d9c6c7581e8c1d9181900360800190a15b505050565b60001415611ca25760408051808201909152601081526000805160206128b38339815191526020820152610d7290610ba0565b60265460ff1615611cea5760408051808201909152600d81527f6f6e6c794e6f7446726f7a656e000000000000000000000000000000000000006020820152610d7290610ba0565b6000341115611d1d57604080518082019091526007815260c960020a663737a2ba3432b9026020820152610d7290610ba0565b33600160a060020a0316600090815260136020526040812080546016805491909103905555565b82810391505b509392505050565b60001415611d855760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b6000341115611db857604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b60215460ff161515611df15760408051808201909152600a815260b260020a691bdb9b1e531bd8dad95902602082015261118f90610ba0565b60235460049010611e395760408051808201909152601481527f63757272656e7446697363616c596561723e3d34000000000000000000000000602082015261118f90610ba0565b60265462010000900460ff1615611e875760408051808201909152601d81527f6f6e6c79446973747269627574696f6e4e6f74496e50726f6772657373000000602082015261118f90610ba0565b5033600160a060020a0316600090815260136020818152604080842080546016805491909103808255601e8552929095208054929092018555905492825291909155600f5460225491549254606493909201029190910490819011156112cc576026805460ff19166001179055611efe6000611098565b6040805133600160a060020a0316815234602082015281517fa3a0ee24545ff02dd0d20d670461167188c7adc4c2973fd0d1b294e1e576fc79929181900390910190a150565b60215460ff1615611f8057604080518082019091526009815260ba60020a681b9bdd131bd8dad959026020820152611f7b90610ba0565b6122ab565b611f8933610561565b60001415611fbc5760408051808201909152601081526000805160206128b38339815191526020820152611f7b90610ba0565b33600160a060020a03166000908152601c602052604081205414156120185760408051808201909152600a81527f6e6f576569476976656e000000000000000000000000000000000000000000006020820152611f7b90610ba0565b6020805433600160a060020a03166000908152601e90925260409091205411156120795760408051808201909152601181527f696e76616c6964546f6b656e436f756e740000000000000000000000000000006020820152611f7b90610ba0565b612081610517565b600160a060020a033381166000908152601c602090815260408083208054601d8085528386208054601e87528588208054908990559488905591865286905584548390039094558251601b547f51fa7efd000000000000000000000000000000000000000000000000000000008252600482018690529351979c50909a509298509650889550909216926351fa7efd926024818101939291829003018183876161da5a03f11561000257505060405133600160a060020a03169150600090839082818181858883f1935050505015156121f65733600160a060020a03167fba1c02018a9ab9c5ecec972230d1c4444bd911f121639f33da13896099655b3533348460006040518085600160a060020a03168152602001848152602001838152602001821515815260200194505050505060405180910390a260408051808201909152601181527f726566756e643a53656e644661696c65640000000000000000000000000000006020820152611f7b90610ba0565b6040805133600160a060020a03168082523460208301528183018490526001606083015291517fba1c02018a9ab9c5ecec972230d1c4444bd911f121639f33da13896099655b359181900360800190a2841580156122575750612257610517565b156122ab57602080546040805133600160a060020a03168152349381019390935282810191909152517f6bb4d57357a9a55fe03d55925e248fcb44bf65dfe36af0c16c22910ae3bb8fb29181900360600190a15b5050505050565b601a54600160a060020a0390811633909116146123065760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f64790000000000000000000000000000602082015261146890610ba0565b6022546006548391820111156123535760408051808201909152600c81527f6869744d6178426f756e7479000000000000000000000000000000000000000060208201526123d390610ba0565b600160a060020a038481166000818152601e6020908152604091829020805488019055602280548801905581513390941684523490840152828101919091526060820185905260016080830152517fd169a02076bf076f24fa9c265d5ed41dc57e6553208e7a8e7190cd90c365f1849181900360a00190a15b5092915050565b6123cc565b825b905061155b565b6123e96105f8565b6021805460ff19169091179081905560ff161580156124155750602160029054906101000a900460ff16155b801561242357506001544210155b1561245557612430610517565b15612443576021805460ff191660011790555b6021805462ff00001916620100001790555b60215460ff1615801561247257506021546301000000900460ff16155b80156124845750600754600154014210155b156124b857612491610517565b156124a4576021805460ff191660011790555b6021805463ff000000191663010000001790555b6021546301000000900460ff1680156124d657506124d4610517565b155b15610d72576021805461ff001916610100179055565b6026805463ff0000001962ff00001990911662010000171663010000001790556125ac602654604051640100000000909104600160a060020a03908116916000913016319082818181858883f193505050501515610d7257610d72606060405190810160405280602381526020017f70617942616c616e6365546f52657475726e57616c6c65743a73656e6446616981526020017f6c65640000000000000000000000000000000000000000000000000000000000815260200150610ba0565b602860009054906101000a9004600160a060020a0316600160a060020a031663fc44fd286040518160e060020a0281526004018090506000604051808303816000876161da5a03f11561000257506040805160275460e360020a631f889fa50282529151600160a060020a03929092169350600481810192600092909190829003018183876161da5a03f1156100025750601b546040805160e360020a631f889fa50281529051600160a060020a03929092169350600481810192600092909190829003018183876161da5a03f1156100025750505060008111156126e457602660049054906101000a9004600160a060020a0316600160a060020a031663b8b27765826040518260e060020a028152600401808281526020019150506000604051808303816000876161da5a03f115610002575050505b602654602254602054604080517f2033d9ae0000000000000000000000000000000000000000000000000000000081529190920160048201529051640100000000909204600160a060020a031691632033d9ae91602480820192600092909190829003018183876161da5a03f11561000257505060265460408051600160a060020a033381168252346020830152640100000000909304909216318282015260016060830152517f6816fcd617af2edc3ccc34b8a63bab368d79f315e065779259bb6a13541eaea292509081900360800190a16000602660026101000a81548160ff0219169083021790555050565b600082116127e35750600061155b565b33600160a060020a03166000908152601e60205260409020548290101561280c5750600061155b565b600160a060020a0383166000908152601e602052604090205480830110156128365750600061155b565b600160a060020a033381166000818152601e60209081526040808320805488900390559387168083529184902080548701905583518381523491810191909152808401869052925190927fe921528ef8652e1a832f8063bcbca0186d6c5a28413c90acecaf074846c412db919081900360600190a350600161155b566f6e6c79546f6b656e486f6c6465727300000000000000000000000000000000

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

000000000000000000000000b79ab5993cef2e0b714a66f3eda73b55de812d310000000000000000000000000000000000000000000000000000000057ebbed00000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000190c8000000000000000000000000000000000000000000000000000000000008f0d180000000000000000000000000000000000000000000000000000000000ee6b2800000000000000000000000000000000000000000000000000000000002faf0800000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _managementBodyAddress (address): 0xb79Ab5993Cef2E0B714A66F3edA73b55DE812D31
Arg [1] : _closingTime (uint256): 1475067600
Arg [2] : _closingTimeExtensionPeriod (uint256): 2592000
Arg [3] : _lastKickoffDateBuffer (uint256): 26265600
Arg [4] : _minTokensToCreate (uint256): 150000000
Arg [5] : _maxTokensToCreate (uint256): 250000000
Arg [6] : _tokensPerTier (uint256): 50000000
Arg [7] : _isInTestMode (bool): False

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000b79ab5993cef2e0b714a66f3eda73b55de812d31
Arg [1] : 0000000000000000000000000000000000000000000000000000000057ebbed0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000278d00
Arg [3] : 000000000000000000000000000000000000000000000000000000000190c800
Arg [4] : 0000000000000000000000000000000000000000000000000000000008f0d180
Arg [5] : 000000000000000000000000000000000000000000000000000000000ee6b280
Arg [6] : 0000000000000000000000000000000000000000000000000000000002faf080
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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