static byte[] ReadStream(Stream stream)
{
int read;
if (stream.CanSeek) {
var length = (int) stream.Length;
var data = new byte [length];
int offset = 0;
while ((read = stream.Read (data, offset, length - offset)) > 0)
offset += read;
return data;
}
var buffer = new byte [1024 * 8];
var memory = new MemoryStream ();
while ((read = stream.Read (buffer, 0, buffer.Length)) > 0)
memory.Write (buffer, 0, read);
return memory.ToArray ();
}