wwall: Instead of 19.Qxc7, White can play 19.b4 or 19.Rac1 or 19.Rfd1 first for a better position.Instead of 20...f5, perhaps better is 20...Rb8 21.Qxa6 Rxb2 22.Bb5 Nxd5.
Instead of 21...f4, 21...Rb8, threatening 22...Rxb2 looks better.
After 21...f4 22.Nf1 leads to a perpetual check and a draw. Better is 22.Nc4 Nxc4 23.Qb4.
21...f4 22.Nf1 f3! 23.Bxf3 Nxf3+ 24.gxf3 Qxf3 25.Rxe7 Qxf2+ 26.Kh1 Qf3+ Kg1 and draw by perpetual check.
Instead of 23.Bh5, stronger may be 23.Nd2 and 24.Nf3.
After 23.Bh5, 25...Qc2 looks weak. Perhaps best is 23...Ne3, threatening 24...Qxg2#.
After 23.Bh5 Qc2, White does not have to play 24.Bxe8. Instead, White should try 24.Rac1 Qa4 25.b3 Qb5 26.Qxb5 axb5 27.Nxe8 Rxe8 28.Re4 and White is up the exchange and winning.
After 24.Bxe8 Nd3, instead of 25.Qb6, perhaps best is 25.Qa7 Ne3 (threatening 26...Qxf2+) 26.Rxe3 Qxf2+ 27.Kh1 fxe3 28.Nxe3 Rxe8 29.Rf1 Rxe3 30.Qb8+ Kf7 31.Rxf2+ and White wins. 25.Re7? fails to 25...Qxf2+ 26.Kh1 f3 27.Ne3 Nxe7, threatening 28...fxf2.
28.gxf3 looks like the losing move. White should try 28.Rxf3 Qxb6 29.Rxd3 Rxe8 30.Rd2 and White might hold.