Chris Froome is set to become the first Briton to win the Tour de France twice after surviving a thrilling attack by Nairo Quintana on Alpe d’Huez.
Team Sky’s Froome, 30, led Quintana by two minutes 38 seconds before the penultimate stage but the Colombian rode clear with 9km remaining.
Froome, champion in 2013, responded to limit his losses to just 80 seconds as France’s Thibaut Pinot won the stage.
His 72-second lead will not be challenged on Sunday’s finale in Paris.
The short 21st stage, which culminates in several laps around the centre of Paris, is largely ceremonial for the yellow jersey, however the stage is expected to end in a bunch sprint with Mark Cavendish chasing a fifth victory on the Champs-Elysees.
That meant Saturday’s 110.5km route from Modane was billed as the decider between Froome and his rival Quintana, who had cut the gap by 32 seconds on the previous day’s racing.
Quintana is regarded as an expert climber in the mountains, and while Froome clung on to his rival on the first ascent up Col de la Croix de Fer, the Movistar rider proved to have the edge when it came to the arduous 13.9km trek to the top of Alpe d’Huez.
But Quintana will once again finish runner-up to Froome, as he did two years ago, although this is set to be the smallest winning margin since Carlos Sastre beat Cadel Evans by 58 seconds in 2008.
“It’s hard to say if this was harder than 2013, but every day was flat out,” said Froome, who is one of only two Britons to have won the Tour, along with Sir Bradley Wiggins.
“Next year I’ll come back and renew the rivalry with Nairo. He’s a great prospect, has a bright future, a great talent who races correctly, making his race at the right moment.”
Froome’s rival attacks
Quintana had been expected to attack on the iconic 13.9km ascent of Alpe d’Huez, which features 21 hairpin turns, and the diminutive Movistar rider did not disappoint.
“I gave it everything,” said the 25-year-old, who will win the white jersey as best young rider.
when my team struggled with crashes. I lost a minute-and-a-half and that’s what cost me the Tour.”
He made his move around 9km from the summit to set up an exciting finish to the decisive stage.
Froome did not initially respond, instead keeping pace with his team-mates Richie Porte and Wouter Poels to ride at a more even pace.
Quintana caught and passed Ryder Hesjedal, who finished third, on the ascent and crossed the finish line just 18 seconds behind Pinot to earn six bonus seconds.
However, Froome, who rode the final couple of kilometres on his own after Porte and Poels dropped away, powered over the line to ensure he would regain the title he first won in 2013.
He finished a fraction behind Quintana’s Movistar team-mate Alejandro Valverde, who will take third overall, five minutes 25 seconds behind Froome.
Pinot, who finished third overall in 2014, pulled clear for his first stage win of this year’s race.
Froome spat at again
Froome appeared to be spat at for the second time in as many days, after a similar incident on Friday.
This time it occurred on the narrowing roads towards the summit of Alpe d’Huez and, as opposed to Friday, Froome seemed to be aware he was spat at as he immediately turned around to look at the crowd.
Froome also claims he had urine thrown over him on stage 14 and team-mate Porte says he was punched during stage 10.
King of the mountains
But it was a day of double celebration for Froome, who collected the jersey for finishing with the highest number of points in the king of the mountains classification.
Romain Bardet went into the stage wearing the polka dot jersey, but the Frenchman had to settle for third after Froome collected 32 points across the two climbs to finish top, with Quintana second.
Robert Millar was the last Briton to be crowned king of the mountains in 1984.
Stage 20 result:
1. Thibaut Pinot (Fra/FDJ) 3hrs 17mins 21secs
2. Nairo Quintana (Col/Movistar) +18secs
3. Ryder Hesjedal (Can/Cannondale) +41secs
4. Alejandro Valverde (Spa/Movistar) +1min 38secs
5. Chris Froome (GB/Team Sky) Same time
15. Vincenzo Nibali (Ita/Astana) +3mins 30secs
16. Alberto Contador (Spa/Tinkoff – Saxo) Same time
General classification after stage 20:
1. Chris Froome (GB/Team Sky) 81hrs 56mins 33secs
2. Nairo Quintana (Col/Movistar) +1min 12secs
3. Alejandro Valverde (Spa/Movistar) +5mins 25secs
4. Vincenzo Nibali (Ita/Astana) +8mins 36secs
5. Alberto Contador (Spa/Tinkoff – Saxo) +9mins 48secs