A faulty component and the crew's inadequate response caused the AirAsia A320 to crash into the Java Sea last year, killing all 162 people on board, according to an Indonesian report.
Flight QZ8501 plunged into the ocean in stormy weather on December 28 while flying from the Indonesian city of Surabaya to Singapore.
"There was a chain of events, starting with a broken [part], how it was handled and then, after it was handled, what the consequences were and how the pilot handled it," National Transportation Safety Committee (NTSC) investigator Nurcahyo Utomo said. "It's difficult for me to say what the main cause was."
The crash triggered a huge international search, with ships and aircraft from several nations involved in a lengthy hunt that was hampered by strong currents and bad weather.
Rescuers faced difficulties in the choppy waters of the Java Sea, but the main body of the plane was eventually located on the seabed by a Singapore navy ship and both black box data recorders were recovered.
Search efforts were finally called off in March after almost three months, with 56 bodies yet to be recovered.
In their final report released on Tuesday, the NTSC said poor maintenance and a fault with the system that helps to control the rudder's movement was a major contributing factor to the crash.
Cracked soldering in the component caused it to malfunction and send repeated warning messages to the pilots, the report said. In response, the pilots tried to reset a computer system but, in the process, turned off the plane's autopilot, sending it into a sharp roll from which they were unable to recover.
Timeline: Major air disasters
"Subsequent flight crew action resulted in inability to control the aircraft," the report added, and the plane went into a "prolonged stall condition that was beyond the capability of the crew to recover".
Investigators said there was miscommunication between the pilots as the plane plunged, with the men at one point pushing their control sticks in opposite directions.
The plane reached an altitude of 38,000 feet before falling at a maximum speed of 20,000 feet per minute. There were "about five minutes" from the time it stalled to the moment of impact.
The report said the faulty component, the Rudder Travel Limiter, had suffered 23 problems in the past 12 months, citing maintenance records.
"The investigation found some inadequacy in the maintenance system, leading to the unresolved, repeated problem" with the rudder system, said Utomo.
Before crashing, the plane climbed fast and went into an aerodynamic stall, losing lift. The French co-pilot, Remi Plesel, was at the controls in the moments before the crash, rather than the more experienced pilot.
"There is much to be learned here for AirAsia, the manufacturer and the aviation industry," AirAsia founder Tony Fernandez tweeted.
In Europe, Airbus declined immediate comment.
"Airbus has just received the final accident report. We are now carefully studying its content," a spokesperson said by email.