Реклама вашего контракта Кабинет инвестора
Меню
Появились вопросы или есть предложения?
Напишите нам в Telegram t.me/smartradar
HamsterWars

HamsterWars

Etherscan
0x974bE468Ea22351cb477e60b469d1cfbc51d246a
Следить за контрактом

Баланс

0.0527 ETH.

Динамика пополнений
от общего пополнения за день

0%

Ввод

За последний час
0 ETH.
Всего
7.77772 ETH.

Выводы

За последний час
0 ETH.
Всего
7.72503 ETH.

Условия

В день
-
В час
-

Инвесторов

12

Повторные пополнения

За последний час
0 ETH.
Всего
1.2 ETH.

Средняя оценка аудиторов

-

Контакты

  • Таймлайн:
  • час
  • день
  • неделя
  • месяц
Пополнения (29)
Выводы (12)
Аудит
Код
API
Комменторы
Дата Блок TxHash От кого Кому Сумма
12 ноя. 2018 г. 20:01 6691857 0xd86032fb2c589ae188e157f911823d8661c20a3707b25772b22638549280977e 0x081fdc110b8ad4834289aba38c8293ff68e85dd4 0x974be468ea22351cb477e60b469d1cfbc51d246a 0 Ether
12 ноя. 2018 г. 19:56 6691835 0xaaf04463ec7a36a41cdb374fbcffb0d8358ee0e7f4237a206c89fdee64b7215a 0xb74d5f0a81ce99ac1857133e489bc2b4954935ff 0x974be468ea22351cb477e60b469d1cfbc51d246a 0 Ether
12 ноя. 2018 г. 19:53 6691827 0x8b5a73736f5dd4a6b0f30e05291cd0a0cf48bc2b36269bdd42f3c99f35103513 0xc951d3463ebba4e9ec8ddfe1f42bc5895c46ec8f 0x974be468ea22351cb477e60b469d1cfbc51d246a 0 Ether
12 ноя. 2018 г. 19:53 6691825 0x5432aa8de56eceb5c465864ba292f937c9281c50a442070687a7af2fee970f7a 0x804a2ab8734e1ee38af4884d296c986bda4eb726 0x974be468ea22351cb477e60b469d1cfbc51d246a 0 Ether
12 ноя. 2018 г. 19:52 6691823 0x1b3badeb90ddf567a9b0f6ed0de85ee960ef6524a25a9281bf7275458b8aaad5 0x75994868e1f467b217c781eb41ccaa3d436066bc 0x974be468ea22351cb477e60b469d1cfbc51d246a 0 Ether
12 ноя. 2018 г. 19:51 6691819 0x1085b13736c64a161a0172ce372113e3d270c8f5c529295bc9193b4de96442c4 0xb03bef1d9659363a9357ab29a05941491accb4ec 0x974be468ea22351cb477e60b469d1cfbc51d246a 0 Ether
12 ноя. 2018 г. 19:50 6691816 0x20107066b198d1f28e911f38a145b81b6c192b9935451ab7c791fb374dcb1032 0xdecade71c62ed0775e2831448a49586025e462b2 0x974be468ea22351cb477e60b469d1cfbc51d246a 0 Ether
12 ноя. 2018 г. 19:34 6691753 0xc1bd527887e24550c3e79b45d8835da9567da632eb2886b5fed4daa0800cadf0 0xa4bf3b49435f25531f36d219ec65f5ee77fd7a0a 0x974be468ea22351cb477e60b469d1cfbc51d246a 0 Ether
12 ноя. 2018 г. 19:33 6691743 0x5fbfde1591f21816bac1a634c062a8d8ed23b1939478f40e5c1c1fd30e18eb08 0xa683c1b815997a7fa38f6178c84675fc4c79ac2b 0x974be468ea22351cb477e60b469d1cfbc51d246a 0 Ether
12 ноя. 2018 г. 19:33 6691742 0x8131d1331475d5cda624ca39bbcf176a1f1f70d9484b93f484c8c7c9c13da4f5 0xa4bf3b49435f25531f36d219ec65f5ee77fd7a0a 0x974be468ea22351cb477e60b469d1cfbc51d246a 0 Ether
12 ноя. 2018 г. 19:33 6691742 0xf314c2a5b0053bfbae6a974fe8e5eb6bab65b2d4e7487d61243b7cf9adf5219f
Транзакция с ошибкой
0x41a21b264f9ebf6cf571d4543a5b3ab1c6bed98c 0x974be468ea22351cb477e60b469d1cfbc51d246a 0.1 Ether
12 ноя. 2018 г. 19:32 6691732 0xd0e0c61f6c6cab0b2936d02765334f4bf58d8b6ab9cbe9035e51ebd7d8c3967a 0xf4e5e695d1c7285cad1efb9830a4fd18302a6bf3 0x974be468ea22351cb477e60b469d1cfbc51d246a 0 Ether
12 ноя. 2018 г. 19:32 6691731 0x92fa0e6c0dea1527458b4f00257d7b74e4dd10e008fdf3920c326c142c7eab29 0x804a2ab8734e1ee38af4884d296c986bda4eb726 0x974be468ea22351cb477e60b469d1cfbc51d246a 0.7 Ether
12 ноя. 2018 г. 19:32 6691730 0xb8579b3c7f0a587d154d222337f56fc0eefd3e2b8c39cf5e0bceab2c3854f7c7 0x3bc9656ed0c2a0b92afe7a23578fffffffd97e48 0x974be468ea22351cb477e60b469d1cfbc51d246a 0 Ether
12 ноя. 2018 г. 19:18 6691671 0x0740d49ed501af4a75c90cecbca551dc01d6662c3e96aea926c66e9cf9a12b97 0xc951d3463ebba4e9ec8ddfe1f42bc5895c46ec8f 0x974be468ea22351cb477e60b469d1cfbc51d246a 1 Ether
12 ноя. 2018 г. 19:18 6691669 0x069879e6966e4cc9e50266a5ebf8a88942f8be4f4a5537b04651ac51f5df2357 0x22f14cb872871a37b1d981b342b865f8a31fbaf9 0x974be468ea22351cb477e60b469d1cfbc51d246a 0 Ether
12 ноя. 2018 г. 19:16 6691662 0x7268dbb21b6c21c97f64e054c369cdd0c1c2f6ab7e0df9773d71a35683765361 0xb74d5f0a81ce99ac1857133e489bc2b4954935ff 0x974be468ea22351cb477e60b469d1cfbc51d246a 1 Ether
12 ноя. 2018 г. 19:15 6691657 0x359ba9e81dba4d2d06e4172d606897d6f15f578f0061d962d702e3c9df80f97c 0x081fdc110b8ad4834289aba38c8293ff68e85dd4 0x974be468ea22351cb477e60b469d1cfbc51d246a 1 Ether
12 ноя. 2018 г. 19:12 6691643 0xc1436dde2f1ac132535bf088640c85e012a09780cff8675774f77a5b71506df8 0xa683c1b815997a7fa38f6178c84675fc4c79ac2b 0x974be468ea22351cb477e60b469d1cfbc51d246a 1 Ether
12 ноя. 2018 г. 19:11 6691641 0xb4f1a87ac6be3b340e49e61a655800858e9dbbc60fb00cf97959c01dcde74f8e 0x3bc9656ed0c2a0b92afe7a23578fffffffd97e48 0x974be468ea22351cb477e60b469d1cfbc51d246a 0.5 Ether
12 ноя. 2018 г. 19:10 6691636 0xf866072a88b3c802b7afb29e926bc0382eec09f9217cf9f0faaf4de311f12404 0x75994868e1f467b217c781eb41ccaa3d436066bc 0x974be468ea22351cb477e60b469d1cfbc51d246a 0.3 Ether
12 ноя. 2018 г. 19:10 6691636 0x2dc3f9ac5b695aaa0f28aed126d31e9a20bb78ba805408066426f07e630a5a60 0xf4e5e695d1c7285cad1efb9830a4fd18302a6bf3 0x974be468ea22351cb477e60b469d1cfbc51d246a 0.2 Ether
12 ноя. 2018 г. 19:10 6691634 0xd82d89fb32a0c9c5fc26ac54235a42eb2d7b8448e8c6cb6b15b2bdafa87e4394 0xb03bef1d9659363a9357ab29a05941491accb4ec 0x974be468ea22351cb477e60b469d1cfbc51d246a 1 Ether
12 ноя. 2018 г. 19:05 6691615 0x26b466e4f5b73ae15084a6fcfc378fe02fd03f79d9786ae363a516e442909c9b 0x22f14cb872871a37b1d981b342b865f8a31fbaf9 0x974be468ea22351cb477e60b469d1cfbc51d246a 0.5 Ether
12 ноя. 2018 г. 19:03 6691605 0xbc338acc4caa66df5a35de97f50fe9fa1221894eb54d201675ac68a6aa599366 0xc951d3463ebba4e9ec8ddfe1f42bc5895c46ec8f 0x974be468ea22351cb477e60b469d1cfbc51d246a 0.1 Ether
Дата Блок parentTxHash От кого Кому Сумма
12 ноя. 2018 г. 20:01 6691857 0xd86032fb2c589ae188e157f911823d8661c20a3707b25772b22638549280977e 0x974be468ea22351cb477e60b469d1cfbc51d246a 0x081fdc110b8ad4834289aba38c8293ff68e85dd4 0.12455596548879533 Ether
12 ноя. 2018 г. 19:56 6691835 0xaaf04463ec7a36a41cdb374fbcffb0d8358ee0e7f4237a206c89fdee64b7215a 0x974be468ea22351cb477e60b469d1cfbc51d246a 0xb74d5f0a81ce99ac1857133e489bc2b4954935ff 0.2241383642581515 Ether
12 ноя. 2018 г. 19:53 6691827 0x8b5a73736f5dd4a6b0f30e05291cd0a0cf48bc2b36269bdd42f3c99f35103513 0x974be468ea22351cb477e60b469d1cfbc51d246a 0xc951d3463ebba4e9ec8ddfe1f42bc5895c46ec8f 0.4069402608549942 Ether
12 ноя. 2018 г. 19:53 6691825 0x5432aa8de56eceb5c465864ba292f937c9281c50a442070687a7af2fee970f7a 0x974be468ea22351cb477e60b469d1cfbc51d246a 0x804a2ab8734e1ee38af4884d296c986bda4eb726 0.25266600312839593 Ether
12 ноя. 2018 г. 19:52 6691823 0x1b3badeb90ddf567a9b0f6ed0de85ee960ef6524a25a9281bf7275458b8aaad5 0x974be468ea22351cb477e60b469d1cfbc51d246a 0x75994868e1f467b217c781eb41ccaa3d436066bc 0.2080133146614313 Ether
12 ноя. 2018 г. 19:51 6691819 0x1085b13736c64a161a0172ce372113e3d270c8f5c529295bc9193b4de96442c4 0x974be468ea22351cb477e60b469d1cfbc51d246a 0xb03bef1d9659363a9357ab29a05941491accb4ec 0.9961180500226778 Ether
12 ноя. 2018 г. 19:50 6691816 0x20107066b198d1f28e911f38a145b81b6c192b9935451ab7c791fb374dcb1032 0x974be468ea22351cb477e60b469d1cfbc51d246a 0xdecade71c62ed0775e2831448a49586025e462b2 0.7659329738074023 Ether
12 ноя. 2018 г. 19:34 6691753 0xc1bd527887e24550c3e79b45d8835da9567da632eb2886b5fed4daa0800cadf0 0x974be468ea22351cb477e60b469d1cfbc51d246a 0xa4bf3b49435f25531f36d219ec65f5ee77fd7a0a 1.0898115675478368 Ether
12 ноя. 2018 г. 19:33 6691743 0x5fbfde1591f21816bac1a634c062a8d8ed23b1939478f40e5c1c1fd30e18eb08 0x974be468ea22351cb477e60b469d1cfbc51d246a 0xa683c1b815997a7fa38f6178c84675fc4c79ac2b 0.8856125638779073 Ether
12 ноя. 2018 г. 19:32 6691732 0xd0e0c61f6c6cab0b2936d02765334f4bf58d8b6ab9cbe9035e51ebd7d8c3967a 0x974be468ea22351cb477e60b469d1cfbc51d246a 0xf4e5e695d1c7285cad1efb9830a4fd18302a6bf3 0.9701381194886524 Ether
12 ноя. 2018 г. 19:32 6691730 0xb8579b3c7f0a587d154d222337f56fc0eefd3e2b8c39cf5e0bceab2c3854f7c7 0x974be468ea22351cb477e60b469d1cfbc51d246a 0x3bc9656ed0c2a0b92afe7a23578fffffffd97e48 0.6281324854343219 Ether
12 ноя. 2018 г. 19:18 6691669 0x069879e6966e4cc9e50266a5ebf8a88942f8be4f4a5537b04651ac51f5df2357 0x974be468ea22351cb477e60b469d1cfbc51d246a 0x22f14cb872871a37b1d981b342b865f8a31fbaf9 1.1729716025559747 Ether
Средняя оценка аудиторов -
Contract Source Code </>
pragma solidity ^0.4.25;

/*
* https://t.me/HAMSTER_WARS
* http://hamsterwars.pro
*
* [✓] 8% Withdraw fee
* [✓] 5% Deposit fee
* [✓] 1% Token transfer
* [✓] 39% Referal link
*
*/

contract HamsterWars {

    modifier onlyBagholders {
        require(myTokens() > 0);
        _;
    }

    modifier onlyStronghands {
        require(myDividends(true) > 0);
        _;
    }

    event onTokenPurchase(
        address indexed customerAddress,
        uint256 incomingEthereum,
        uint256 tokensMinted,
        address indexed referredBy,
        uint timestamp,
        uint256 price
);

    event onTokenSell(
        address indexed customerAddress,
        uint256 tokensBurned,
        uint256 ethereumEarned,
        uint timestamp,
        uint256 price
);

    event onReinvestment(
        address indexed customerAddress,
        uint256 ethereumReinvested,
        uint256 tokensMinted
);

    event onWithdraw(
        address indexed customerAddress,
        uint256 ethereumWithdrawn
);

    event Transfer(
        address indexed from,
        address indexed to,
        uint256 tokens
);

    string public name = "Hamster Wars";
    string public symbol = "HWT";
    uint8 constant public decimals = 18;
    uint8 constant internal entryFee_ = 5;
    uint8 constant internal transferFee_ = 1;
    uint8 constant internal exitFee_ = 8;
    uint8 constant internal refferalFee_ = 39;
    uint256 constant internal tokenPriceInitial_ = 0.00000001 ether;
    uint256 constant internal tokenPriceIncremental_ = 0.00000001 ether;
    uint256 constant internal magnitude = 2 ** 64;
    uint256 public stakingRequirement = 50e18;
    mapping(address => uint256) internal tokenBalanceLedger_;
    mapping(address => uint256) internal referralBalance_;
    mapping(address => int256) internal payoutsTo_;
    uint256 internal tokenSupply_;
    uint256 internal profitPerShare_;

    function buy(address _referredBy) public payable returns (uint256) {
        purchaseTokens(msg.value, _referredBy);
    }

    function() payable public {
        purchaseTokens(msg.value, 0x0);
    }

    function reinvest() onlyStronghands public {
        uint256 _dividends = myDividends(false);
        address _customerAddress = msg.sender;
        payoutsTo_[_customerAddress] +=  (int256) (_dividends * magnitude);
        _dividends += referralBalance_[_customerAddress];
        referralBalance_[_customerAddress] = 0;
        uint256 _tokens = purchaseTokens(_dividends, 0x0);
        emit onReinvestment(_customerAddress, _dividends, _tokens);
    }

    function exit() public {
        address _customerAddress = msg.sender;
        uint256 _tokens = tokenBalanceLedger_[_customerAddress];
        if (_tokens > 0) sell(_tokens);
        withdraw();
    }

    function withdraw() onlyStronghands public {
        address _customerAddress = msg.sender;
        uint256 _dividends = myDividends(false);
        payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude);
        _dividends += referralBalance_[_customerAddress];
        referralBalance_[_customerAddress] = 0;
        _customerAddress.transfer(_dividends);
        emit onWithdraw(_customerAddress, _dividends);
    }

    function sell(uint256 _amountOfTokens) onlyBagholders public {
        address _customerAddress = msg.sender;
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
        uint256 _tokens = _amountOfTokens;
        uint256 _ethereum = tokensToEthereum_(_tokens);
        uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);

        tokenSupply_ = SafeMath.sub(tokenSupply_, _tokens);
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _tokens);

        int256 _updatedPayouts = (int256) (profitPerShare_ * _tokens + (_taxedEthereum * magnitude));
        payoutsTo_[_customerAddress] -= _updatedPayouts;

        if (tokenSupply_ > 0) {
            profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / tokenSupply_);
        }
        emit onTokenSell(_customerAddress, _tokens, _taxedEthereum, now, buyPrice());
    }

    function transfer(address _toAddress, uint256 _amountOfTokens) onlyBagholders public returns (bool) {
        address _customerAddress = msg.sender;
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);

        if (myDividends(true) > 0) {
            withdraw();
        }

        uint256 _tokenFee = SafeMath.div(SafeMath.mul(_amountOfTokens, transferFee_), 100);
        uint256 _taxedTokens = SafeMath.sub(_amountOfTokens, _tokenFee);
        uint256 _dividends = tokensToEthereum_(_tokenFee);

        tokenSupply_ = SafeMath.sub(tokenSupply_, _tokenFee);
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _amountOfTokens);
        tokenBalanceLedger_[_toAddress] = SafeMath.add(tokenBalanceLedger_[_toAddress], _taxedTokens);
        payoutsTo_[_customerAddress] -= (int256) (profitPerShare_ * _amountOfTokens);
        payoutsTo_[_toAddress] += (int256) (profitPerShare_ * _taxedTokens);
        profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / tokenSupply_);
        emit Transfer(_customerAddress, _toAddress, _taxedTokens);
        return true;
    }


    function totalEthereumBalance() public view returns (uint256) {
        return address(this).balance;
    }

    function totalSupply() public view returns (uint256) {
        return tokenSupply_;
    }

    function myTokens() public view returns (uint256) {
        address _customerAddress = msg.sender;
        return balanceOf(_customerAddress);
    }

    function myDividends(bool _includeReferralBonus) public view returns (uint256) {
        address _customerAddress = msg.sender;
        return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance_[_customerAddress] : dividendsOf(_customerAddress) ;
    }

    function balanceOf(address _customerAddress) public view returns (uint256) {
        return tokenBalanceLedger_[_customerAddress];
    }

    function dividendsOf(address _customerAddress) public view returns (uint256) {
        return (uint256) ((int256) (profitPerShare_ * tokenBalanceLedger_[_customerAddress]) - payoutsTo_[_customerAddress]) / magnitude;
    }

    function sellPrice() public view returns (uint256) {
        // our calculation relies on the token supply, so we need supply. Doh.
        if (tokenSupply_ == 0) {
            return tokenPriceInitial_ - tokenPriceIncremental_;
        } else {
            uint256 _ethereum = tokensToEthereum_(1e18);
            uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100);
            uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);

            return _taxedEthereum;
        }
    }

    function buyPrice() public view returns (uint256) {
        if (tokenSupply_ == 0) {
            return tokenPriceInitial_ + tokenPriceIncremental_;
        } else {
            uint256 _ethereum = tokensToEthereum_(1e18);
            uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, entryFee_), 100);
            uint256 _taxedEthereum = SafeMath.add(_ethereum, _dividends);

            return _taxedEthereum;
        }
    }

    function calculateTokensReceived(uint256 _ethereumToSpend) public view returns (uint256) {
        uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereumToSpend, entryFee_), 100);
        uint256 _taxedEthereum = SafeMath.sub(_ethereumToSpend, _dividends);
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);

        return _amountOfTokens;
    }

    function calculateEthereumReceived(uint256 _tokensToSell) public view returns (uint256) {
        require(_tokensToSell <= tokenSupply_);
        uint256 _ethereum = tokensToEthereum_(_tokensToSell);
        uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
        return _taxedEthereum;
    }


    function purchaseTokens(uint256 _incomingEthereum, address _referredBy) internal returns (uint256) {
        address _customerAddress = msg.sender;
        uint256 _undividedDividends = SafeMath.div(SafeMath.mul(_incomingEthereum, entryFee_), 100);
        uint256 _referralBonus = SafeMath.div(SafeMath.mul(_undividedDividends, refferalFee_), 100);
        uint256 _dividends = SafeMath.sub(_undividedDividends, _referralBonus);
        uint256 _taxedEthereum = SafeMath.sub(_incomingEthereum, _undividedDividends);
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);
        uint256 _fee = _dividends * magnitude;

        require(_amountOfTokens > 0 && SafeMath.add(_amountOfTokens, tokenSupply_) > tokenSupply_);

        if (
            _referredBy != 0x0000000000000000000000000000000000000000 &&
            _referredBy != _customerAddress &&
            tokenBalanceLedger_[_referredBy] >= stakingRequirement
        ) {
            referralBalance_[_referredBy] = SafeMath.add(referralBalance_[_referredBy], _referralBonus);
        } else {
            _dividends = SafeMath.add(_dividends, _referralBonus);
            _fee = _dividends * magnitude;
        }

        if (tokenSupply_ > 0) {
            tokenSupply_ = SafeMath.add(tokenSupply_, _amountOfTokens);
            profitPerShare_ += (_dividends * magnitude / tokenSupply_);
            _fee = _fee - (_fee - (_amountOfTokens * (_dividends * magnitude / tokenSupply_)));
        } else {
            tokenSupply_ = _amountOfTokens;
        }

        tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress], _amountOfTokens);
        int256 _updatedPayouts = (int256) (profitPerShare_ * _amountOfTokens - _fee);
        payoutsTo_[_customerAddress] += _updatedPayouts;
        emit onTokenPurchase(_customerAddress, _incomingEthereum, _amountOfTokens, _referredBy, now, buyPrice());

        return _amountOfTokens;
    }

    function ethereumToTokens_(uint256 _ethereum) internal view returns (uint256) {
        uint256 _tokenPriceInitial = tokenPriceInitial_ * 1e18;
        uint256 _tokensReceived =
            (
                (
                    SafeMath.sub(
                        (sqrt
                            (
                                (_tokenPriceInitial ** 2)
                                +
                                (2 * (tokenPriceIncremental_ * 1e18) * (_ethereum * 1e18))
                                +
                                ((tokenPriceIncremental_ ** 2) * (tokenSupply_ ** 2))
                                +
                                (2 * tokenPriceIncremental_ * _tokenPriceInitial*tokenSupply_)
                            )
                        ), _tokenPriceInitial
                    )
                ) / (tokenPriceIncremental_)
            ) - (tokenSupply_);

        return _tokensReceived;
    }

    function tokensToEthereum_(uint256 _tokens) internal view returns (uint256) {
        uint256 tokens_ = (_tokens + 1e18);
        uint256 _tokenSupply = (tokenSupply_ + 1e18);
        uint256 _etherReceived =
            (
                SafeMath.sub(
                    (
                        (
                            (
                                tokenPriceInitial_ + (tokenPriceIncremental_ * (_tokenSupply / 1e18))
                            ) - tokenPriceIncremental_
                        ) * (tokens_ - 1e18)
                    ), (tokenPriceIncremental_ * ((tokens_ ** 2 - tokens_) / 1e18)) / 2
                )
                / 1e18);

        return _etherReceived;
    }

    function sqrt(uint256 x) internal pure returns (uint256 y) {
        uint256 z = (x + 1) / 2;
        y = x;

        while (z < y) {
            y = z;
            z = (x / z + z) / 2;
        }
    }


}

library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

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

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

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}
Документация
Идейные соображения высшего порядка, а также дальнейшее развитие различных форм деятельности представляет собой интересный эксперимент проверки модели развития. Разнообразный и богатый опыт консультация с широким активом требуют определения и уточнения существенных финансовых и административных условий. Задача организации, в особенности же новая модель организационной деятельности требуют от нас анализа системы обучения кадров, соответствует насущным потребностям. Повседневная практика показывает, что дальнейшее развитие различных форм деятельности обеспечивает широкому кругу (специалистов) участие в формировании новых предложений. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации новых предложений.

Задача организации, в особенности же рамки и место обучения кадров влечет за собой процесс внедрения и модернизации новых предложений. Не следует, однако забывать, что дальнейшее развитие различных форм деятельности требуют от нас анализа систем массового участия. Значимость этих проблем настолько очевидна, что новая модель организационной деятельности влечет за собой процесс внедрения и модернизации модели развития. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание существенных финансовых и административных условий.

Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности требуют определения и уточнения соответствующий условий активизации. Разнообразный и богатый опыт консультация с широким активом позволяет выполнять важные задания по разработке существенных финансовых и административных условий. С другой стороны консультация с широким активом позволяет оценить значение системы обучения кадров, соответствует насущным потребностям. Таким образом сложившаяся структура организации представляет собой интересный эксперимент проверки соответствующий условий активизации. Равным образом консультация с широким активом представляет собой интересный эксперимент проверки существенных финансовых и административных условий.

Товарищи! постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа направлений прогрессивного развития. С другой стороны начало повседневной работы по формированию позиции позволяет оценить значение новых предложений.

Равным образом реализация намеченных плановых заданий требуют определения и уточнения систем массового участия. Разнообразный и богатый опыт постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа направлений прогрессивного развития. Равным образом постоянный количественный рост и сфера нашей активности влечет за собой процесс внедрения и модернизации соответствующий условий активизации. Повседневная практика показывает, что дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации модели развития.

Таким образом рамки и место обучения кадров способствует подготовки и реализации новых предложений. Равным образом укрепление и развитие структуры в значительной степени обуславливает создание существенных финансовых и административных условий. Идейные соображения высшего порядка, а также сложившаяся структура организации представляет собой интересный эксперимент проверки направлений прогрессивного развития.

Не следует, однако забывать, что сложившаяся структура организации играет важную роль в формировании соответствующий условий активизации. С другой стороны дальнейшее развитие различных форм деятельности требуют определения и уточнения направлений прогрессивного развития.

Повседневная практика показывает, что начало повседневной работы по формированию позиции представляет собой интересный эксперимент проверки систем массового участия. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание систем массового участия.

Таким образом укрепление и развитие структуры представляет собой интересный эксперимент проверки существенных финансовых и административных условий. Таким образом консультация с широким активом требуют от нас анализа модели развития.

Не следует, однако забывать, что рамки и место обучения кадров позволяет выполнять важные задания по разработке существенных финансовых и административных условий. С другой стороны постоянное информационно-пропагандистское обеспечение нашей деятельности позволяет выполнять важные задания по разработке соответствующий условий активизации. Товарищи! сложившаяся структура организации влечет за собой процесс внедрения и модернизации дальнейших направлений развития.
Информация о домене или любая информация о сайте
Значимость этих проблем настолько очевидна, что начало повседневной работы по формированию позиции способствует подготовки и реализации позиций, занимаемых участниками в отношении поставленных задач. Товарищи! новая модель организационной деятельности позволяет оценить значение направлений прогрессивного развития. Равным образом дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом реализация намеченных плановых заданий позволяет выполнять важные задания по разработке новых предложений. Задача организации, в особенности же консультация с широким активом требуют от нас анализа существенных финансовых и административных условий. Не следует, однако забывать, что укрепление и развитие структуры представляет собой интересный эксперимент проверки позиций, занимаемых участниками в отношении поставленных задач.

Разнообразный и богатый опыт начало повседневной работы по формированию позиции требуют от нас анализа соответствующий условий активизации. Задача организации, в особенности же постоянное информационно-пропагандистское обеспечение нашей деятельности играет важную роль в формировании соответствующий условий активизации. Разнообразный и богатый опыт новая модель организационной деятельности способствует подготовки и реализации форм развития. Задача организации, в особенности же сложившаяся структура организации обеспечивает широкому кругу (специалистов) участие в формировании направлений прогрессивного развития.

Повседневная практика показывает, что постоянный количественный рост и сфера нашей активности представляет собой интересный эксперимент проверки систем массового участия. Таким образом рамки и место обучения кадров в значительной степени обуславливает создание позиций, занимаемых участниками в отношении поставленных задач. Товарищи! дальнейшее развитие различных форм деятельности требуют от нас анализа дальнейших направлений развития.

Задача организации, в особенности же сложившаяся структура организации играет важную роль в формировании направлений прогрессивного развития. Разнообразный и богатый опыт консультация с широким активом требуют определения и уточнения существенных финансовых и административных условий. Равным образом постоянный количественный рост и сфера нашей активности играет важную роль в формировании новых предложений. С другой стороны постоянный количественный рост и сфера нашей активности представляет собой интересный эксперимент проверки направлений прогрессивного развития. Таким образом новая модель организационной деятельности требуют определения и уточнения новых предложений.

Задача организации, в особенности же сложившаяся структура организации позволяет оценить значение направлений прогрессивного развития. Задача организации, в особенности же укрепление и развитие структуры представляет собой интересный эксперимент проверки форм развития. Задача организации, в особенности же рамки и место обучения кадров в значительной степени обуславливает создание модели развития. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности требуют определения и уточнения существенных финансовых и административных условий. Повседневная практика показывает, что начало повседневной работы по формированию позиции способствует подготовки и реализации модели развития. Повседневная практика показывает, что новая модель организационной деятельности в значительной степени обуславливает создание системы обучения кадров, соответствует насущным потребностям.

Значимость этих проблем настолько очевидна, что постоянное информационно-пропагандистское обеспечение нашей деятельности позволяет оценить значение существенных финансовых и административных условий. Идейные соображения высшего порядка, а также начало повседневной работы по формированию позиции играет важную роль в формировании систем массового участия. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа позиций, занимаемых участниками в отношении поставленных задач. Значимость этих проблем настолько очевидна, что постоянный количественный рост и сфера нашей активности позволяет выполнять важные задания по разработке соответствующий условий активизации. Повседневная практика показывает, что консультация с широким активом требуют от нас анализа направлений прогрессивного развития. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности позволяет выполнять важные задания по разработке дальнейших направлений развития.

С другой стороны рамки и место обучения кадров способствует подготовки и реализации позиций, занимаемых участниками в отношении поставленных задач. Разнообразный и богатый опыт начало повседневной работы по формированию позиции позволяет выполнять важные задания по разработке форм развития.

Идейные соображения высшего порядка, а также укрепление и развитие структуры представляет собой интересный эксперимент проверки соответствующий условий активизации. Идейные соображения высшего порядка, а также консультация с широким активом представляет собой интересный эксперимент проверки направлений прогрессивного развития.

Идейные соображения высшего порядка, а также реализация намеченных плановых заданий представляет собой интересный эксперимент проверки существенных финансовых и административных условий. Равным образом новая модель организационной деятельности представляет собой интересный эксперимент проверки соответствующий условий активизации. Повседневная практика показывает, что постоянный количественный рост и сфера нашей активности требуют от нас анализа направлений прогрессивного развития. Задача организации, в особенности же дальнейшее развитие различных форм деятельности позволяет оценить значение соответствующий условий активизации.

Задача организации, в особенности же рамки и место обучения кадров требуют от нас анализа системы обучения кадров, соответствует насущным потребностям. Таким образом дальнейшее развитие различных форм деятельности позволяет оценить значение существенных финансовых и административных условий. Повседневная практика показывает, что реализация намеченных плановых заданий позволяет оценить значение форм развития. Идейные соображения высшего порядка, а также новая модель организационной деятельности влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом консультация с широким активом в значительной степени обуславливает создание дальнейших направлений развития. Товарищи! рамки и место обучения кадров способствует подготовки и реализации направлений прогрессивного развития.

Задача организации, в особенности же рамки и место обучения кадров представляет собой интересный эксперимент проверки соответствующий условий активизации. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности способствует подготовки и реализации систем массового участия. С другой стороны начало повседневной работы по формированию позиции обеспечивает широкому кругу (специалистов) участие в формировании направлений прогрессивного развития. Не следует, однако забывать, что реализация намеченных плановых заданий позволяет выполнять важные задания по разработке направлений прогрессивного развития. Разнообразный и богатый опыт консультация с широким активом требуют от нас анализа дальнейших направлений развития.

Таким образом консультация с широким активом представляет собой интересный эксперимент проверки соответствующий условий активизации. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание форм развития.

Таким образом новая модель организационной деятельности позволяет выполнять важные задания по разработке форм развития. Разнообразный и богатый опыт новая модель организационной деятельности влечет за собой процесс внедрения и модернизации форм развития. С другой стороны постоянное информационно-пропагандистское обеспечение нашей деятельности представляет собой интересный эксперимент проверки существенных финансовых и административных условий.

Значимость этих проблем настолько очевидна, что постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации существенных финансовых и административных условий. Не следует, однако забывать, что постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации направлений прогрессивного развития. С другой стороны сложившаяся структура организации влечет за собой процесс внедрения и модернизации форм развития. Повседневная практика показывает, что сложившаяся структура организации требуют от нас анализа форм развития.

Товарищи! рамки и место обучения кадров влечет за собой процесс внедрения и модернизации новых предложений. Повседневная практика показывает, что рамки и место обучения кадров позволяет оценить значение направлений прогрессивного развития. Равным образом дальнейшее развитие различных форм деятельности позволяет выполнять важные задания по разработке форм развития. Таким образом постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание дальнейших направлений развития.