func: function init(
          uint256 _startTime,
          uint256 _endTime,
          address _whitelist,
          address _starToken,
          address _companyToken,
          address _tokenOwnerAfterSale,
          uint256 _rate,
          uint256 _starRate,
          address _wallet,
          uint256 _softCap,
          uint256 _crowdsaleCap,
          bool    _isWeiAccepted,
          bool    _isMinting
      )
          external
      {
          require(
              whitelist == address(0) &&
              starToken == address(0) &&
              tokenOwnerAfterSale == address(0) &&
              rate == 0 &&
              starRate == 0 &&
              tokenOnSale == address(0) &&
              softCap == 0 &&
              crowdsaleCap == 0 &&
              wallet == address(0),
              "Global variables should not have been set before!"
          );
  
          require(
              _whitelist != address(0) &&
              _starToken != address(0) &&
              !(_rate == 0 && _starRate == 0) &&
              _companyToken != address(0) &&
              _softCap != 0 &&
              _crowdsaleCap != 0 &&
              _wallet != 0,
              "Parameter variables cannot be empty!"
          );
  
          require(_softCap < _crowdsaleCap, "SoftCap should be smaller than crowdsaleCap!");
  
          if (_isWeiAccepted) {
              require(_rate > 0, "Set a rate for Wei, when it is accepted for purchases!");
          } else {
              require(_rate == 0, "Only set a rate for Wei, when it is accepted for purchases!");
          }
  
          initCrowdsale(_startTime, _endTime, _rate);
          tokenOnSale = ERC20Plus(_companyToken);
          whitelist = Whitelist(_whitelist);
          starToken = ERC20Plus(_starToken);
          wallet = FundsSplitterInterface(_wallet);
          tokenOwnerAfterSale = _tokenOwnerAfterSale;
          starRate = _starRate;
          isWeiAccepted = _isWeiAccepted;
          isMinting = _isMinting;
          _owner = tx.origin;
  
          softCap = _softCap.mul(10 ** 18);
          crowdsaleCap = _crowdsaleCap.mul(10 ** 18);
  
          if (isMinting) {
              require(tokenOwnerAfterSale != address(0), "TokenOwnerAftersale cannot be empty when minting tokens!");
              require(ERC20Plus(tokenOnSale).paused(), "Company token must be paused upon initialization!");
          } else {
              require(tokenOwnerAfterSale == address(0), "TokenOwnerAftersale must be empty when minting tokens!");
          }
  
          require(ERC20Plus(tokenOnSale).decimals() == 18, "Only sales for tokens with 18 decimals are supported!");
      }