code: func validateSUBACKBytes(fixedHeader FixedHeader, remaining []byte) error {
  	// Extract the MQTT Control Packet type.
  	ptype, err := fixedHeader.ptype()
  	if err != nil {
  		return err
  	}
  
  	// Check the length of the fixed header.
  	if len(fixedHeader) < minLenSUBACKFixedHeader {
  		return ErrInvalidFixedHeaderLen
  	}
  
  	// Check the MQTT Control Packet type.
  	if ptype != TypeSUBACK {
  		return ErrInvalidPacketType
  	}
  
  	// Check the reserved bits of the fixed header.
  	if fixedHeader[0]<<4 != 0x00 {
  		return ErrInvalidFixedHeader
  	}
  
  	// Check the length of the remaining.
  	if len(remaining) < lenSUBACKVariableHeader+1 {
  		return ErrInvalidRemainingLen
  	}
  
  	// Extract the Packet Identifier.
  	packetID, _ := decodeUint16(remaining[0:lenSUBACKVariableHeader])
  
  	// Check the Packet Identifier.
  	if packetID == 0 {
  		return ErrInvalidPacketID
  	}
  
  	// Check each Return Code.
  	for _, b := range remaining[lenSUBACKVariableHeader:] {
  		if !mqtt.ValidQoS(b) && b != SUBACKRetFailure {
  			return ErrInvalidSUBACKReturnCode
  		}
  	}
  
  	return nil
  }
docs: // validateSUBACKBytes validates the fixed header and the remaining.