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

ETHRV - ETH REVOLUTION!

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

Баланс

520.608 ETH.

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

51.575%

Ввод

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

Выводы

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

Условия

В день
-
В час
-

Инвесторов

302

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

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

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

8

Контакты

  • Таймлайн:
  • час
  • день
  • неделя
  • месяц
Пополнения (1165)
Выводы (1800)
Аудит
Код
API
Комменторы
Дата Блок TxHash От кого Кому Сумма
Сегодня 12:08 7248227 0x3ddc4609dc5f29312f32cb856b7b67f881192e5d04976afc534bda6ecbd2236f 0xd1d8184569f6ba80507180b80fb743d37feb7cf8 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Сегодня 11:12 7248061 0x2338dfacfee3cc243364f798144f8e37de98cdb53c6fa129bd1b1fd22aadd8db 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.267 Ether
Сегодня 11:10 7248056 0x8713cbdbd777953893b266884bb1ea69ec88698bc721722c78930b4d667d4e03 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Сегодня 00:48 7246195 0x8905dcf7259c3bd0f962895cd29b2f150c2fc4e5acdf1849a227fa9498c55092 0x7d7630b5f614a2eef47346057b7bf2de70fd990a 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 18:59 7245153 0x6c9f5d427627ebb10a5e79c73dce5824a8165936ed8ad92f03eed733d80fa0b0 0x671b1aaf2e610901e0e95e4e862c5202fdbbe339 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 15:48 7244627 0x31d7845aa61039a80fe2e07c5854db53478819471efd38d27dfcae4ac46e15ea 0x2fca93811f6fd46a1b104700ea7638c2a2ff3c33 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 15:45 7244612 0x15595cc58925e7b6d43a89a3ee45cad42a9d72cd21d06b05ab6857bc7ea75feb 0x2de51e4bd9b5a43591c51cf8bb936708cc77047f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 15:43 7244606 0x6b68c58d054fcedf7f8161cac0aea530e0f0f9c3ef6123a5654b4e0c02f83fbf 0xf61487cee0224dab1e99cb7855270c3cf228b14c 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 15:12 7244514 0x71461a8e1590dffc8816d937f1f7c3d02edf2da7fcbf668ddcf03048a085e160 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.4179 Ether
Вчера 15:11 7244507 0x9ce7b186c55dfd9d0af59435f58558f684dcb7029302bc1ee0c900999524e64d 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 12:03 7243971 0xab064f3e8fc054b16955758ed7cd24f44cda9cba0aa54fb3e51f4e8d213780b3 0xa89f535e47ff7f2eeaffc28af3d35370f09c5b2f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 11:19 7243848 0x08998fe827dbd62e00196825e662e93f64be223012278f78eac2be9d66c53625 0xd1d8184569f6ba80507180b80fb743d37feb7cf8 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 10:36 7243710 0x9b596847979dbaddfc40df70fd58813eb2afc2fd37e055e6ef835993d1c13187 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.265 Ether
Вчера 10:34 7243705 0xc581e18b03286fcb2e8c5577d1ba227e4b8788197f1c774272cd0ae9c7e37332 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 22:05 7241491 0x9aafe7e9e41a3dbc93143d7642800da7c3d6796a57b5347fd6143297b244a81c 0xc66dabb4fc7a14f716d09afd349fdb5cc110d1af 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 22:02 7241482 0x56a618b3ed0cb8d655b42424cf667a8ac4984385827c1b7f7acace19b52383a6 0x1f50ac229b4fc9ab226b8d1f151e1c3dfda08866 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 19:17 7241009 0xbbc44bac4808e53fbc606bfff71914162691da6becdf200307ad657b4267db66 0x11768565f3de7edb6034ba69663080aeb48a9274 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 19:05 7240977 0x044de72ba87e6ab434ca2ecdd560bc1e1c1bc2c53a5259beef3881add03e2ea7 0x5923acdb724203c6f08bc63a9e270aae3842df10 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 15:09 7240273 0x33b016d09276c3e8cea169c0c703f287280b5caf9503e46424fae47f62ba653e 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.4136 Ether
19 фев. 15:06 7240266 0x70413233ca7e16bcceb08bb6cde55dc240aba20cfcb3e41937f3a4f88a854ffe 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 10:18 7239396 0xbe6da7164be7f5babd158c0029d58a55fa52fe826d1bd3b8f0f7c230b644c2db 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.261 Ether
19 фев. 10:16 7239391 0x50b87761ea6508bcd211c6d723e4cea1d60c66175e413dddc18dde357cbec4ad 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 07:40 7238902 0xff8a9732d399f4153a7a7d3401de75c652ee1a29d8042fb1499f2450beb83d90 0xd1d8184569f6ba80507180b80fb743d37feb7cf8 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
18 фев. 22:01 7237199 0xf437115ee8b58dde6c171ff73e2000d6eb21d11f292921ba8f2cb047b77e1e0c 0x3c421ed25b2bd3416de092425c2b2855210506ed 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
18 фев. 17:29 7236435 0x0381ebd26a55113257c214ae1f812de75c1651f4fa64a73f3ecc1bde7aa00474 0x2fca93811f6fd46a1b104700ea7638c2a2ff3c33 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.075 Ether
Дата Блок parentTxHash От кого Кому Сумма
11 фев. 00:19 7204067 0xba1076b505ab2aab3d6a57b266dac3cf23a514e007cf8b1e38d649194f49ffec 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6994c08b25ee465bd509818f95a4812ebd369eae 0.034 Ether
10 фев. 17:49 7202971 0xaeed15e33e6d3d090148a8108e3558206288ab067ef0aa00a2f134773c2b917f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd1059e84e36bbc398c934fb59759caa00d5c4033 0.03 Ether
10 фев. 16:51 7202787 0x0fd8b26491d9e8fce407649372805ec55a6bee9df3ad2b4d35c41fd5e3b14df8 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xfbe6e7a5e1505315255ac1985640c8047cf2ea91 3.28755 Ether
10 фев. 16:39 7202742 0x573f2e95755f3031d0647689b98e5870d7416655670b6618ebd9f8b548133f48 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x49866c0422163d580cdd26f4d84847eeea192b7c 0.5109 Ether
10 фев. 14:58 7202453 0xd37b47ff748acd7108184b80fadc34a3a771049212e4098f02edd098c2fa14b6 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x7a9029dbcc4456242bb0880e10f31845d52ef8bd 0.0098 Ether
10 фев. 12:54 7202087 0xf1b2e77bae676e4098bfdbe02186fa36a64280f1ef3484b1f6fa02da89d6ba0f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.026348 Ether
10 фев. 12:54 7202087 0xf1b2e77bae676e4098bfdbe02186fa36a64280f1ef3484b1f6fa02da89d6ba0f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.005646 Ether
10 фев. 12:54 7202087 0xf1b2e77bae676e4098bfdbe02186fa36a64280f1ef3484b1f6fa02da89d6ba0f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.005646 Ether
10 фев. 12:53 7202081 0x004e3a4aea0e4a4de23b96b7d9de21982c461340e446abb90be5d9540b1aa7c0 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0.376495875 Ether
10 фев. 11:55 7201892 0x06fc22e0530cdd1421b73f4bb857d749551d091903ada96e206fcfa21b65c949 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xa89f535e47ff7f2eeaffc28af3d35370f09c5b2f 0.40029 Ether
10 фев. 07:35 7201117 0x3863b77af81cbd7404963aaf1d2c4ce91a5d071319fd76477336833c543f2fe8 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.0168 Ether
10 фев. 07:35 7201117 0x3863b77af81cbd7404963aaf1d2c4ce91a5d071319fd76477336833c543f2fe8 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.0036 Ether
10 фев. 07:35 7201117 0x3863b77af81cbd7404963aaf1d2c4ce91a5d071319fd76477336833c543f2fe8 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.0036 Ether
10 фев. 07:34 7201113 0xfaef46b63b098d47347d6dde123c1abd623f5ffa79b64d03c438b8c89f43dfa1 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xf4396e95230f14f745a8d19a69c0083a53036e84 0.239736 Ether
9 фев. 15:28 7197867 0x41753e2456e6a496587b61f15a489432d925f869991b95bc84ae497c9e84c7cf 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x3c421ed25b2bd3416de092425c2b2855210506ed 0.6 Ether
9 фев. 13:53 7197558 0x1b752510d55c54e7121426b348038607b2e75d9fcc73099b25441088a91cf0f3 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd1ce969c209e63137d6ec9946de49f5c45d630a1 0.02400000517037037 Ether
9 фев. 12:50 7197330 0xc3f00742f7213f30bc54c3d67f9c73473a1c05aca603628c50f3ee7b853cd477 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.026075 Ether
9 фев. 12:50 7197330 0xc3f00742f7213f30bc54c3d67f9c73473a1c05aca603628c50f3ee7b853cd477 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.0055875 Ether
9 фев. 12:50 7197330 0xc3f00742f7213f30bc54c3d67f9c73473a1c05aca603628c50f3ee7b853cd477 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.0055875 Ether
9 фев. 12:48 7197326 0x89d06043e872cf4c8dcb9f5eb29d032307b38b0687bae025f46384a21a74fbc4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0.372584625 Ether
9 фев. 09:43 7196690 0xed2a0dbfee80b14d780866d0cc2c77765bad81654daa920465cceef50d40fb79 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x9de4292542f87bac7f92dc5d7b2dc5aecb18e47d 0.02831104 Ether
9 фев. 07:33 7196260 0x2f001fbd10ac5feb0ea4bcff43bc9c106a9313e24d1490ce73e57ed57b3764c5 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.01645 Ether
9 фев. 07:33 7196260 0x2f001fbd10ac5feb0ea4bcff43bc9c106a9313e24d1490ce73e57ed57b3764c5 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.003525 Ether
9 фев. 07:33 7196260 0x2f001fbd10ac5feb0ea4bcff43bc9c106a9313e24d1490ce73e57ed57b3764c5 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.003525 Ether
9 фев. 07:31 7196256 0x51a2ab7e5a3184454f37e0fa20274f0fd304b9ce3a36151d2205d9f3c0e69f48 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xf4396e95230f14f745a8d19a69c0083a53036e84 0.2372685 Ether
Средняя оценка аудиторов 8
Contract Source Code </>
pragma solidity 0.4.25;


contract EthRV {
  using SafeMath for uint;

  struct Investor {
    uint deposit;
    uint paymentTime;
    uint withdrawal;
    uint boostStartup;
    bool isParticipant;
  }

  mapping (address => Investor) public investors;
  address public admin1Address;
  address public admin2Address;
  address public admin3Address;
  address public owner;
  uint public investmentsNumber;
  uint public investorsNumber;

  modifier onlyOwner() {
    require(msg.sender == owner, "access denied");
    _;
  }

  event OnRefLink(address indexed referral, uint referrarBonus, address indexed referrer,  uint referrerBonus, uint time);
  event OnNewInvestor(address indexed addr, uint time);
  event OnInvesment(address indexed addr, uint deposit, uint time);
  event OnBoostChanged(address indexed addr, bool isActive, uint time);
  event OnEarlyWithdrawal(address indexed addr, uint withdrawal, uint time);
  event OnDeleteInvestor(address indexed addr, uint time);
  event OnWithdraw(address indexed addr, uint withdrawal, uint time);
  event OnBoostBonus(address indexed addr, uint bonus, uint time);
  event OnNotEnoughBalance(uint time);

  constructor() public {
    owner = msg.sender;
    admin1Address = msg.sender;
    admin2Address = msg.sender;
    admin3Address = msg.sender;
  }

  function() external payable {
    if (msg.value == 0) {
      withdraw();
    } else if (msg.value == 0.0077777 ether) {
      boost();
    } else if (msg.value == 0.0088888 ether) {
      earlyWithdrawal();
    } else {
      deposit(bytes2address(msg.data));
    }
  }

  function disown() public onlyOwner {
    owner = address(0x0);
  }

  function setAdminsAddress(uint n, address addr) public onlyOwner {
    require(n >= 1 && n <= 3, "invalid number of admin`s address");
    if (n == 1) {
      admin1Address = addr;
    } else if (n == 2) {
      admin2Address = addr;
    } else {
      admin3Address = addr;
    }
  }

  function investorDividends(address investorAddr) public view returns(uint dividends, uint boostBonus) {
    return getDividends(investorAddr);
  }

  function withdraw() public {
    address investorAddr = msg.sender;
    (uint dividends, uint boostBonus) = getDividends(investorAddr);
    require(dividends > 0, "cannot to pay zero dividends");
    require(address(this).balance > 0, "fund is empty");
    uint withdrawal = dividends + boostBonus;

    // fund limit
    if (address(this).balance <= withdrawal) {
      emit OnNotEnoughBalance(now);
      withdrawal = address(this).balance;
    }

    Investor storage investor = investors[investorAddr];
    uint withdrawalLimit = investor.deposit * 200 / 100; // 200%
    uint totalWithdrawal = withdrawal + investor.withdrawal;

    // withdrawal limit - 200%
    if (totalWithdrawal >= withdrawalLimit) {
      withdrawal = withdrawalLimit.sub(investor.withdrawal);
      if (boostBonus > 0 ) {
        emit OnBoostBonus(investorAddr, boostBonus, now);
      }
      deleteInvestor(investorAddr);
    } else {
      // normal withdraw - dont use boostBonus
      if (withdrawal > dividends) {
        withdrawal = dividends;
      }
      investor.withdrawal += withdrawal;
      investor.paymentTime = now;
      if (investor.boostStartup > 0) {
        investor.boostStartup = 0;
        emit OnBoostChanged(investorAddr, false, now);
      }
    }

    investorAddr.transfer(withdrawal);
    emit OnWithdraw(investorAddr, withdrawal, now);
  }

  function earlyWithdrawal() public {
    address investorAddr = msg.sender;
    Investor storage investor = investors[investorAddr];
    require(investor.deposit > 0, "sender must be an investor");

    uint earlyWithdrawalLimit = investor.deposit * 70 / 100; // 70%
    require(earlyWithdrawalLimit > investor.withdrawal, "early withdraw only before 70% deposit`s withdrawal");

    uint withdrawal = earlyWithdrawalLimit.sub(investor.withdrawal); 
    investorAddr.transfer(withdrawal);
    emit OnEarlyWithdrawal(investorAddr, withdrawal, now);

    deleteInvestor(investorAddr);
  }

  function boost() public {
    Investor storage investor = investors[msg.sender];
    require(investor.deposit > 0, "sender must be an investor");
    require(investor.boostStartup == 0, "boost is already activated");
    investor.boostStartup = now;
    emit OnBoostChanged(msg.sender, true, now);
  }

  function deposit(address referrerAddr) public payable {
    uint depositAmount = msg.value;
    address investorAddr = msg.sender;
    require(isNotContract(investorAddr), "invest from contracts is not supported");
    require(depositAmount > 0, "deposit amount cannot be zero");

    admin1Address.send(depositAmount * 70 / 1000); //   7%
    admin2Address.send(depositAmount * 15 / 1000); // 1.5%
    admin3Address.send(depositAmount * 15 / 1000); // 1.5%

    Investor storage investor = investors[investorAddr];
    bool senderIsNotPaticipant = !investor.isParticipant;
    bool referrerIsParticipant = investors[referrerAddr].isParticipant;

    // ref link
    if (senderIsNotPaticipant && referrerIsParticipant && referrerAddr != investorAddr) {
      uint referrerBonus = depositAmount * 3 / 100; // 3%
      uint referralBonus = depositAmount * 1 / 100; // 1%
      referrerAddr.transfer(referrerBonus);
      investorAddr.transfer(referralBonus);
      emit OnRefLink(investorAddr, referralBonus, referrerAddr, referrerBonus, now);
    }

    if (investor.deposit == 0) {
      investorsNumber++;
      investor.isParticipant = true;
      emit OnNewInvestor(investorAddr, now);
    }

    investor.deposit += depositAmount;
    investor.paymentTime = now;

    investmentsNumber++;
    emit OnInvesment(investorAddr, depositAmount, now);
  }

  function getDividends(address investorAddr) internal view returns(uint dividends, uint boostBonus) {
    Investor storage investor = investors[investorAddr];
    if (investor.deposit == 0) {
      return (0, 0);
    }

    if (investor.boostStartup > 0) {
      uint boostDays = now.sub(investor.boostStartup).div(24 hours);
      boostBonus = boostDays * investor.deposit * 5 / 100000; // 0.005%
    }

    uint depositDays = now.sub(investor.paymentTime).div(24 hours);
    dividends = depositDays * investor.deposit * 1 / 100; // 1%

    uint depositAmountBonus;
    if (10 ether <= investor.deposit && investor.deposit <= 50 ether) {
      depositAmountBonus = depositDays * investor.deposit * 5 / 10000; // 0.05%
    } else if (50 ether < investor.deposit) {
      depositAmountBonus = depositDays * investor.deposit * 11 / 10000; // 0.11%
    }

    dividends += depositAmountBonus;
  }

  function isNotContract(address addr) internal view returns (bool) {
    uint length;
    assembly { length := extcodesize(addr) }
    return length == 0;
  }

  function bytes2address(bytes memory source) internal pure returns(address addr) {
    assembly { addr := mload(add(source, 0x14)) }
    return addr;
  }

  function deleteInvestor(address investorAddr) private {
    delete investors[investorAddr].deposit;
    delete investors[investorAddr].paymentTime;
    delete investors[investorAddr].withdrawal;
    delete investors[investorAddr].boostStartup;
    emit OnDeleteInvestor(investorAddr, now);
    investorsNumber--;
  }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, reverts on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (_a == 0) {
      return 0;
    }

    uint256 c = _a * _b;
    require(c / _a == _b);

    return c;
  }

  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 _a, uint256 _b) internal pure returns (uint256) {
    require(_b > 0); // Solidity only automatically asserts when dividing by 0
    uint256 c = _a / _b;
    // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold

    return c;
  }

  /**
  * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
    require(_b <= _a);
    uint256 c = _a - _b;

    return c;
  }

  /**
  * @dev Adds two numbers, reverts on overflow.
  */
  function add(uint256 _a, uint256 _b) internal pure returns (uint256) {
    uint256 c = _a + _b;
    require(c >= _a);

    return c;
  }

  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}
Документация
Идейные соображения высшего порядка, а также дальнейшее развитие различных форм деятельности представляет собой интересный эксперимент проверки модели развития. Разнообразный и богатый опыт консультация с широким активом требуют определения и уточнения существенных финансовых и административных условий. Задача организации, в особенности же новая модель организационной деятельности требуют от нас анализа системы обучения кадров, соответствует насущным потребностям. Повседневная практика показывает, что дальнейшее развитие различных форм деятельности обеспечивает широкому кругу (специалистов) участие в формировании новых предложений. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации новых предложений.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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