def self.decode(data)
offset = 0
length = data[offset, 1].unpack(PACK_CHAR).first
offset += 1
consumer_tag = data[offset, length]
offset += length
delivery_tag = AMQ::Hacks.unpack_64_big_endian(data[offset, 8]).first
offset += 8
bit_buffer = data[offset, 1].unpack(PACK_CHAR).first
offset += 1
redelivered = (bit_buffer & (1 << 0)) != 0
length = data[offset, 1].unpack(PACK_CHAR).first
offset += 1
exchange = data[offset, length]
offset += length
length = data[offset, 1].unpack(PACK_CHAR).first
offset += 1
routing_key = data[offset, length]
offset += length
self.new(consumer_tag, delivery_tag, redelivered, exchange, routing_key)
end