De-randomizing Shannon: The design and analysis of a capacity-achieving rateless code