private async Task <byte[]> createMultiDeviceGroupsContent(TextSecureAttachmentStream groups)
        {
            Content.Builder     container = Content.CreateBuilder();
            SyncMessage.Builder builder   = SyncMessage.CreateBuilder();
            builder.SetGroups(SyncMessage.Types.Groups.CreateBuilder()
                              .SetBlob(await createAttachmentPointer(groups)));

            return(container.SetSyncMessage(builder).Build().ToByteArray());
        }
        private async Task <AttachmentPointer> createAttachmentPointer(TextSecureAttachmentStream attachment)
        {
            byte[]             attachmentKey  = Util.getSecretBytes(64);
            PushAttachmentData attachmentData = new PushAttachmentData(attachment.getContentType(),
                                                                       attachment.getInputStream(),
                                                                       attachment.getLength(),
                                                                       attachmentKey);

            ulong attachmentId = await socket.sendAttachment(attachmentData);

            var builder = AttachmentPointer.CreateBuilder()
                          .SetContentType(attachment.getContentType())
                          .SetId(attachmentId)
                          .SetKey(ByteString.CopyFrom(attachmentKey))
                          .SetSize((uint)attachment.getLength());

            if (attachment.getPreview().HasValue)
            {
                builder.SetThumbnail(ByteString.CopyFrom(attachment.getPreview().ForceGetValue()));
            }

            return(builder.Build());
        }
        private AttachmentPointer createAttachmentPointer(TextSecureAttachmentStream attachment)
        {
            byte[] attachmentKey = Util.getSecretBytes(64);
            PushAttachmentData attachmentData = new PushAttachmentData(attachment.getContentType(),
                                                                       attachment.getInputStream(),
                                                                       attachment.getLength(),
                                                                       attachmentKey);

            ulong attachmentId = socket.sendAttachment(attachmentData).Result;

            var builder = AttachmentPointer.CreateBuilder()
                                    .SetContentType(attachment.getContentType())
                                    .SetId(attachmentId)
                                    .SetKey(ByteString.CopyFrom(attachmentKey))
                                    .SetSize((uint)attachment.getLength());

            if (attachment.getPreview().HasValue)
            {
                builder.SetThumbnail(ByteString.CopyFrom(attachment.getPreview().ForceGetValue()));
            }

            return builder.Build();
        }
        private byte[] createMultiDeviceGroupsContent(TextSecureAttachmentStream groups)
        {
            Content.Builder container = Content.CreateBuilder();
            SyncMessage.Builder builder = SyncMessage.CreateBuilder();
            builder.SetGroups(SyncMessage.Types.Groups.CreateBuilder()
                                        .SetBlob(createAttachmentPointer(groups)));

            return container.SetSyncMessage(builder).Build().ToByteArray();
        }