Solution by Richard Hainsworth, aka finanalyst