function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, Z5Ddatasets.EventReturns memory _eventData_)
    private
    {
        if (plyrRnds_[_pID][_rID].keys == 0)
            _eventData_ = managePlayer(_pID, _eventData_);

        if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000)
        {
            uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth);
            uint256 _refund = _eth.sub(_availableLimit);
            plyr_[_pID].gen = plyr_[_pID].gen.add(_refund);
            _eth = _availableLimit;
        }
		
        if (_eth > 1000000000) 
        {

            uint256 _keys = (round_[_rID].eth).keysRec(_eth);
			
            if (_keys >= 1000000000000000000)
            {
				updateTimer(_keys, _rID);
				if (round_[_rID].plyr != _pID)
				{	
					round_[_rID].plyr_3rd = round_[_rID].plyr_2nd;
					round_[_rID].plyr_2nd = round_[_rID].plyr;
					round_[_rID].plyr = _pID; 
				}	
          
        }

            plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys);
            plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth);
            
            round_[_rID].keys = _keys.add(round_[_rID].keys);
            round_[_rID].eth = _eth.add(round_[_rID].eth);
            rndEth_[_rID] = _eth.add(rndEth_[_rID]);

            _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _eventData_);
			
            _eventData_ = distributeInternal(_rID, _pID, _eth, _keys, _eventData_);

		    endTx(_pID, _eth, _keys, _eventData_);
        }
    }