public override int Encode(Span <byte> buffer) { if (ProtocolString is null || InfoHash is null || PeerId is null) { throw new InvalidOperationException(); } int written = buffer.Length; Write(ref buffer, (byte)ProtocolString.Length); WriteAscii(ref buffer, ProtocolString); Span <byte> supports = stackalloc byte[8]; supports.Clear(); if (SupportsExtendedMessaging) { supports[5] |= ExtendedMessagingFlag; } if (SupportsFastPeer) { supports[7] |= FastPeersFlag; } supports.CopyTo(buffer); buffer = buffer.Slice(supports.Length); Write(ref buffer, InfoHash.Truncate().Span); Write(ref buffer, PeerId.Span); return(written - buffer.Length); }