fn eval_wire(
    wire: &str,
    gates: &HashMap<String, Gate>,
    cache: &mut HashMap<String, u16>
) -> u16