static ISharedObjectMessage DecodeSharedObject(ByteBuffer stream)
        {
            RtmpReader reader = new RtmpReader(stream);
            string     name   = reader.ReadString();
            // Read version of SO to modify
            int version = reader.ReadInt32();
            // Read persistence informations
            bool persistent = reader.ReadInt32() == 2;

            // Skip unknown bytes
            //skip(4);
            reader.ReadInt32();

            SharedObjectMessage so = new SharedObjectMessage(null, name, version, persistent);

            DecodeSharedObject(so, stream, reader);
            return(so);
        }
		static ISharedObjectMessage DecodeFlexSharedObject(ByteBuffer stream)
		{
			// Unknown byte, always 0?
			stream.Skip(1);
			RtmpReader reader = new RtmpReader(stream);
			string name = reader.ReadString();
			// Read version of SO to modify
			int version = reader.ReadInt32();
			// Read persistence informations
			bool persistent = reader.ReadInt32() == 2;
			// Skip unknown bytes
			reader.ReadInt32();

			SharedObjectMessage so = new FlexSharedObjectMessage(null, name, version, persistent);
			DecodeSharedObject(so, stream, reader);
			return so;
		}