code: func (s *UDPSession) packetInput(data []byte) {
  	dataValid := false
  	if s.block != nil {
  		s.block.Decrypt(data, data)
  		data = data[nonceSize:]
  		checksum := crc32.ChecksumIEEE(data[crcSize:])
  		if checksum == binary.LittleEndian.Uint32(data) {
  			data = data[crcSize:]
  			dataValid = true
  		} else {
  			atomic.AddUint64(&DefaultSnmp.InCsumErrors, 1)
  		}
  	} else if s.block == nil {
  		dataValid = true
  	}
  
  	if dataValid {
  		s.kcpInput(data)
  	}
  }
docs: // packet input stage