code: func (mt *MT19937) Uint64() uint64 {
  	x := mt.state
  	if mt.index >= n {
  		if mt.index == notSeeded {
  			mt.Seed(5489) // default seed, as in mt19937-64.c
  		}
  		for i := 0; i < n-m; i++ {
  			y := (x[i] & hiMask) | (x[i+1] & loMask)
  			x[i] = x[i+m] ^ (y >> 1) ^ ((y & 1) * matrixA)
  		}
  		for i := n - m; i < n-1; i++ {
  			y := (x[i] & hiMask) | (x[i+1] & loMask)
  			x[i] = x[i+(m-n)] ^ (y >> 1) ^ ((y & 1) * matrixA)
  		}
  		y := (x[n-1] & hiMask) | (x[0] & loMask)
  		x[n-1] = x[m-1] ^ (y >> 1) ^ ((y & 1) * matrixA)
  		mt.index = 0
  	}
  	y := x[mt.index]
  	y ^= (y >> 29) & 0x5555555555555555
  	y ^= (y << 17) & 0x71D67FFFEDA60000
  	y ^= (y << 37) & 0xFFF7EEE000000000
  	y ^= (y >> 43)
  	mt.index++
  	return y
  }
docs: // Uint64 generates a (pseudo-)random 64bit value.  The output can be
  // used as a replacement for a sequence of independent, uniformly
  // distributed samples in the range 0, 1, ..., 2^64-1.  This method is
  // part of the rand.Source64 interface.