protected static function uuid1(?string $node = null, ?int $clockSeq = null, ?string $timestamp = null): Uuid
    {
        if ($timestamp === null) {
            $timestamp = static::timestamp();
        }
        $timestamp = strtolower($timestamp);
        static::guardTimestamp($timestamp);

        // format time fields with version
        $timeLow = substr($timestamp, 8, 8);
        $timeMid = substr($timestamp, 4, 4);
        $timeHi = substr($timestamp, 0, 4);
        $timeHiAndVersion = hexdec($timeHi);
        $timeHiAndVersion |= (static::VERSION_TIME << 12);
        $timeHiAndVersion = sprintf('%04x', $timeHiAndVersion);

        if ($clockSeq === null) {
            $clockSeq = random_int(0b0, 0b11111111111111);
        }
        static::guardClockSeq($clockSeq);

        // format clock sequence with variant
        $clockSeqLow = sprintf('%02x', $clockSeq & 0xff);
        $clockSeqHiAndReserved = ($clockSeq & 0x3f00) >> 8;
        $clockSeqHiAndReserved |= 0x80;
        $clockSeqHiAndReserved = sprintf('%02x', $clockSeqHiAndReserved);

        if ($node === null) {
            $node = bin2hex(random_bytes(6));
        } else {
            // remove formatting from MAC address if present
            $node = str_replace([':', '-', '.'], '', $node);
        }
        $node = strtolower($node);
        static::guardNode($node);

        return new static($timeLow, $timeMid, $timeHiAndVersion, $clockSeqHiAndReserved, $clockSeqLow, $node);
    }