getprop("ro.product.device") == "lmi" || abort("E3004: This package is for \"lmi\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/lmi/lmi:11/RKQ1.200826.002/V12.2.3.0.RJKMIXM:user/release-keys");
ui_print("Target: Redmi/lmi/lmi:11/RKQ1.200826.002/V12.2.4.0.RJKMIXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/lmi/lmi:11/RKQ1.200826.002/V12.2.3.0.RJKMIXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/lmi/lmi:11/RKQ1.200826.002/V12.2.4.0.RJKMIXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/lmi/lmi:11/RKQ1.200826.002/V12.2.3.0.RJKMIXM:user/release-keys or Redmi/lmi/lmi:11/RKQ1.200826.002/V12.2.4.0.RJKMIXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:37acae9a2a87566d2b266c865355eadfe25ad93b"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:79e707bbb0ce120e87ee573fd663e77292d36fa7")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:37acae9a2a87566d2b266c865355eadfe25ad93b"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:79e707bbb0ce120e87ee573fd663e77292d36fa7"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "1208,1,35,45,55,57,61,89,90,114,115,20478,20479,26643,26644,28072,28073,32768,32789,55777,55778,57076,57077,58197,58198,59860,59861,60462,60463,61480,61481,61632,61633,62547,62548,65536,65555,66511,66512,67500,67501,68866,68867,69309,69310,71358,71359,71611,71612,71704,71705,71952,71953,72169,72171,72334,72336,72346,72347,72376,72378,72384,72385,72397,72399,72404,72405,73834,73838,73874,73875,73881,73883,73888,73889,73894,73896,73901,73902,75738,75739,75839,75840,75940,75941,76008,76009,76393,76395,76435,76436,76868,76885,76902,76903,76917,76918,77003,77005,77010,77012,77094,77095,77138,77139,77199,77204,77281,77285,77286,77290,77345,77348,77349,77352,77378,77380,77393,77394,77400,77401,77402,77405,77536,77537,78005,78006,79934,79935,79944,79945,79967,79968,79972,79973,80406,80407,80536,80537,80568,80570,80575,80576,80884,80886,80896,80897,81017,81019,81024,82384,85176,85178,85208,85209,85223,85225,85230,85231,85237,85239,85244,85245,88493,88495,88542,88543,89631,89633,89656,89657,89786,89788,89796,89797,90275,90277,90295,90296,94940,94942,95010,95011,95036,95037,95285,95286,96040,96042,96059,96060,96531,96533,96538,96539,98292,98294,98304,98325,98360,98361,98365,98367,98372,98373,98404,98406,98411,98412,100102,100104,100130,100131,100975,100977,101002,101003,101086,101088,101095,101096,104403,104405,108191,108192,109761,109763,111926,111927,112259,112261,112262,112263,112296,112298,112323,112324,112774,112776,113180,113181,113871,113873,113890,113891,116276,116278,116327,116328,116736,116738,116753,116754,118820,118821,124356,124358,124442,124443,125864,125866,125895,125896,131072,131091,138504,138506,138532,138533,140282,140284,140320,140321,140359,140363,140370,140371,144471,144473,144513,144514,147167,147168,148372,148374,148399,148400,149531,149535,149560,149561,149741,149742,150855,150857,150885,150886,151935,151937,151960,151961,163840,163861,172603,172604,173076,173077,173949,173951,174100,174101,174179,174180,175606,175607,193057,193058,193268,193270,193279,193280,194163,194167,194191,194192,194202,194204,194212,194213,196608,196627,199015,199016,201903,201905,201990,201991,204556,204558,204598,204599,204602,204606,204612,204613,208486,208488,208526,208527,208555,208556,208558,208560,208563,208564,208608,208610,208615,210463,210864,210868,210880,210881,210912,210914,210919,210920,210963,210965,210970,210971,214039,214041,214066,214067,214081,214082,214164,214166,214173,214174,216994,216996,217001,217002,217568,217570,217587,217588,218804,218806,218834,218835,224394,224470,224492,224493,226428,226430,226515,226516,226562,226563,226571,226573,226578,226579,227205,227207,227224,227225,228895,228897,228916,228917,229376,229397,231265,231267,231295,231296,232186,232188,232216,232217,232286,232288,232295,232296,232301,232303,232315,232316,232340,232342,232347,232348,235412,235414,235463,235464,235467,235471,235477,235478,235781,235783,235797,235798,236155,236159,236170,236171,237647,237649,237679,237680,238657,238659,239595,239596,242208,242209,243370,243371,244572,244573,245030,245032,245085,245088,245112,245113,245115,245116,245117,245118,245119,245120,245150,245151,247605,247607,247623,247624,248147,248149,248158,248159,250700,250703,250741,250742,251099,251100,251619,251620,251801,251819,251890,251891,253586,253587,256864,256865,259491,259496,259497,259498,259499,259500,259501,259502,259503,259504,259505,259506,259507,259508,259509,259510,259511,259512,259513,259514,259515,259516,259517,259518,259519,259520,259521,259522,259523,259524,259525,259526,259527,259528,259529,259530,259531,259532,259533,259534,259535,259536,259537,259538,259539,259540,259541,259542,259543,259544,259545,259546,259547,259548,259549,259550,259551,259552,259553,259554,259555,259556,259557,259558,259559,259560,259561,259562,259563,259564,259565,259566,259567,259568,259569,259570,259571,259572,259573,259574,259575,259576,259577,259578,259579,259580,259581,259582,259583,259584,259585,259586,259587,259588,259589,259590,259591,259592,259593,259594,259595,259596,259597,259598,259599,259600,259601,259602,259603,259604,259605,259606,259607,259608,259609,259610,259611,259612,259613,259614,259615,259616,259617,259618,259619,259620,259621,259622,259623,259624,259625,259626,259627,259628,259629,259630,259631,259632,259633,259634,259635,259636,259637,259638,259639,259640,259641,259642,259643,259644,259645,259646,259647,259648,259649,259650,259651,259652,259653,259654,259655,259656,259657,259658,259659,259660,259661,259662,259663,259664,259665,259666,259667,259668,259669,259670,259671,259672,259673,259674,259675,259676,259677,259678,259679,259680,259681,259682,259683,259684,259685,259686,259687,259688,259689,259690,259691,259692,259693,259694,259695,259696,259697,259698,259699,259700,259701,259702,259703,259704,259705,259706,259707,259708,259709,259710,259711,259712,259713,259714,259715,259716,259717,259718,259719,259720,259721,259722,259723,259724,259725,259726,259727,259728,259729,259730,259731,259732,259733,259734,259735,259736,259737,259738,259739,259740,259741,259742,259743,259744,259745,259746,259747,259748,259749,259750,259751,259752,259753,259754,259755,259756,259757,259758,259759,259760,259761,259762,259763,259764,259765,259766,259767,259768,259769,259770,259771,259772,259773,259774,259775,259776,259777,259778,259779,259780,259781,259782,259783,259784,259785,259786,259787,259788,259789,259790,259791,259792,259793,259794,259795,259796,259797,259798,259799,259800,259801,259802,259803,259804,259805,259806,259807,259808,259809,259810,259811,259812,259813,259814,259815,259816,259817,259818,259819,259820,259821,259822,259823,259824,259825,259826,259827,259828,259829,259830,259831,259832,259833,259834,259835,259836,259837,259838,259839,259840,259841,259842,259843,259844,259845,259846,259847,259848,259849,259850,259851,259852,259853,259854,259855,259856,259857,259858,259859,259860,259861,259862,259863,259864,259865,259866,259867,259868,259869,259870,259871,259872,259873,259874,259875,259876,259877,259878,259879,259880,259881,259882,259883,259884,259885,259886,259887,259888,259889,259890,259891,259892,259893,259894,259895,259896,259897,259898,259899,259900,259901,259902,259903,259904,259905,259906,259907,259908,259909,259910,259911,259912,259913,259914,259915,259916,259917,259918,259919,259920,259921,259922,259923,259924,259925,259926,259927,259928,259929,259930,259931,259932,259933,259934,259935,259936,259937,259938,259939,259940,260258,260259,260282,260283,260295,260296,260303,260304,260338,260339,260345,260346,260368,260369,260435,260436,260440,260441,260442,260444,260511,260512,260515,260520,260521,260522,260523,260524,260525,260526,261456,261457,261464,261465,262018,262022,262023,262024,262025,262026,262027,262028,262029,262030,262031,262032,262033,262034,262036,262037,262038,262041,262144,262163,262827,262829,262968,262969,262972,262974,263232,263233,263235,263237,263781,263782,263797,263798,263813,263814,264132,264133,264279,264280,264289,264291,264293,264294,273317,273318,281252,281253,283237,283238,283854,283855,287499,287500,292698,292699,294912,294933,297291,297292,297326,297327,297361,297362,297373,297374,297419,297420,297421,297422,297488,297489,297490,297491,297500,297501,297502,297503,297512,297513,297514,297515,297523,297525,297526,297527,297535,297537,297629,297631,297639,297640,297682,297683,297691,297692,297796,297797,297946,297947,297957,297958,297984,297985,298026,298027,298064,298065,298066,298067,298175,298176,298239,298240,298245,298246,298304,298305,298317,298318,298324,298325,298356,298357,298360,298361,298362,298363,298460,298461,299088,299089,299946,299947,310675,311177,311249,311529,395197,395621,397767,397768,398102,398113,398127,398138,398175,398176,398188,398189,403379,403381,403753,403754,407301,407302,407307,407308,407315,407316,416339,416340,416345,416346,416353,416354,418138,418139,424126,424127,425424,425426,425430,425431,425749,425750,425795,425796,425984,426003,426935,426936,427323,427324,427898,427899,430886,430887,431426,431427,431791,431792,433365,433366,433425,433426,433430,433431,436612,436613,436635,436636,443945,443946,449531,449532,449673,449674,454206,454209,456077,456078,456292,456293,458752,458771,460097,655374,655379,663256,665265,675808,675950,675951") == "042056fece2a2491ea708d4d410f586c47fba614" || block_image_verify(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block(map_partition("system"));
ifelse (block_image_recover(map_partition("system"), "1208,1,35,45,55,57,61,89,90,114,115,20478,20479,26643,26644,28072,28073,32768,32789,55777,55778,57076,57077,58197,58198,59860,59861,60462,60463,61480,61481,61632,61633,62547,62548,65536,65555,66511,66512,67500,67501,68866,68867,69309,69310,71358,71359,71611,71612,71704,71705,71952,71953,72169,72171,72334,72336,72346,72347,72376,72378,72384,72385,72397,72399,72404,72405,73834,73838,73874,73875,73881,73883,73888,73889,73894,73896,73901,73902,75738,75739,75839,75840,75940,75941,76008,76009,76393,76395,76435,76436,76868,76885,76902,76903,76917,76918,77003,77005,77010,77012,77094,77095,77138,77139,77199,77204,77281,77285,77286,77290,77345,77348,77349,77352,77378,77380,77393,77394,77400,77401,77402,77405,77536,77537,78005,78006,79934,79935,79944,79945,79967,79968,79972,79973,80406,80407,80536,80537,80568,80570,80575,80576,80884,80886,80896,80897,81017,81019,81024,82384,85176,85178,85208,85209,85223,85225,85230,85231,85237,85239,85244,85245,88493,88495,88542,88543,89631,89633,89656,89657,89786,89788,89796,89797,90275,90277,90295,90296,94940,94942,95010,95011,95036,95037,95285,95286,96040,96042,96059,96060,96531,96533,96538,96539,98292,98294,98304,98325,98360,98361,98365,98367,98372,98373,98404,98406,98411,98412,100102,100104,100130,100131,100975,100977,101002,101003,101086,101088,101095,101096,104403,104405,108191,108192,109761,109763,111926,111927,112259,112261,112262,112263,112296,112298,112323,112324,112774,112776,113180,113181,113871,113873,113890,113891,116276,116278,116327,116328,116736,116738,116753,116754,118820,118821,124356,124358,124442,124443,125864,125866,125895,125896,131072,131091,138504,138506,138532,138533,140282,140284,140320,140321,140359,140363,140370,140371,144471,144473,144513,144514,147167,147168,148372,148374,148399,148400,149531,149535,149560,149561,149741,149742,150855,150857,150885,150886,151935,151937,151960,151961,163840,163861,172603,172604,173076,173077,173949,173951,174100,174101,174179,174180,175606,175607,193057,193058,193268,193270,193279,193280,194163,194167,194191,194192,194202,194204,194212,194213,196608,196627,199015,199016,201903,201905,201990,201991,204556,204558,204598,204599,204602,204606,204612,204613,208486,208488,208526,208527,208555,208556,208558,208560,208563,208564,208608,208610,208615,210463,210864,210868,210880,210881,210912,210914,210919,210920,210963,210965,210970,210971,214039,214041,214066,214067,214081,214082,214164,214166,214173,214174,216994,216996,217001,217002,217568,217570,217587,217588,218804,218806,218834,218835,224394,224470,224492,224493,226428,226430,226515,226516,226562,226563,226571,226573,226578,226579,227205,227207,227224,227225,228895,228897,228916,228917,229376,229397,231265,231267,231295,231296,232186,232188,232216,232217,232286,232288,232295,232296,232301,232303,232315,232316,232340,232342,232347,232348,235412,235414,235463,235464,235467,235471,235477,235478,235781,235783,235797,235798,236155,236159,236170,236171,237647,237649,237679,237680,238657,238659,239595,239596,242208,242209,243370,243371,244572,244573,245030,245032,245085,245088,245112,245113,245115,245116,245117,245118,245119,245120,245150,245151,247605,247607,247623,247624,248147,248149,248158,248159,250700,250703,250741,250742,251099,251100,251619,251620,251801,251819,251890,251891,253586,253587,256864,256865,259491,259496,259497,259498,259499,259500,259501,259502,259503,259504,259505,259506,259507,259508,259509,259510,259511,259512,259513,259514,259515,259516,259517,259518,259519,259520,259521,259522,259523,259524,259525,259526,259527,259528,259529,259530,259531,259532,259533,259534,259535,259536,259537,259538,259539,259540,259541,259542,259543,259544,259545,259546,259547,259548,259549,259550,259551,259552,259553,259554,259555,259556,259557,259558,259559,259560,259561,259562,259563,259564,259565,259566,259567,259568,259569,259570,259571,259572,259573,259574,259575,259576,259577,259578,259579,259580,259581,259582,259583,259584,259585,259586,259587,259588,259589,259590,259591,259592,259593,259594,259595,259596,259597,259598,259599,259600,259601,259602,259603,259604,259605,259606,259607,259608,259609,259610,259611,259612,259613,259614,259615,259616,259617,259618,259619,259620,259621,259622,259623,259624,259625,259626,259627,259628,259629,259630,259631,259632,259633,259634,259635,259636,259637,259638,259639,259640,259641,259642,259643,259644,259645,259646,259647,259648,259649,259650,259651,259652,259653,259654,259655,259656,259657,259658,259659,259660,259661,259662,259663,259664,259665,259666,259667,259668,259669,259670,259671,259672,259673,259674,259675,259676,259677,259678,259679,259680,259681,259682,259683,259684,259685,259686,259687,259688,259689,259690,259691,259692,259693,259694,259695,259696,259697,259698,259699,259700,259701,259702,259703,259704,259705,259706,259707,259708,259709,259710,259711,259712,259713,259714,259715,259716,259717,259718,259719,259720,259721,259722,259723,259724,259725,259726,259727,259728,259729,259730,259731,259732,259733,259734,259735,259736,259737,259738,259739,259740,259741,259742,259743,259744,259745,259746,259747,259748,259749,259750,259751,259752,259753,259754,259755,259756,259757,259758,259759,259760,259761,259762,259763,259764,259765,259766,259767,259768,259769,259770,259771,259772,259773,259774,259775,259776,259777,259778,259779,259780,259781,259782,259783,259784,259785,259786,259787,259788,259789,259790,259791,259792,259793,259794,259795,259796,259797,259798,259799,259800,259801,259802,259803,259804,259805,259806,259807,259808,259809,259810,259811,259812,259813,259814,259815,259816,259817,259818,259819,259820,259821,259822,259823,259824,259825,259826,259827,259828,259829,259830,259831,259832,259833,259834,259835,259836,259837,259838,259839,259840,259841,259842,259843,259844,259845,259846,259847,259848,259849,259850,259851,259852,259853,259854,259855,259856,259857,259858,259859,259860,259861,259862,259863,259864,259865,259866,259867,259868,259869,259870,259871,259872,259873,259874,259875,259876,259877,259878,259879,259880,259881,259882,259883,259884,259885,259886,259887,259888,259889,259890,259891,259892,259893,259894,259895,259896,259897,259898,259899,259900,259901,259902,259903,259904,259905,259906,259907,259908,259909,259910,259911,259912,259913,259914,259915,259916,259917,259918,259919,259920,259921,259922,259923,259924,259925,259926,259927,259928,259929,259930,259931,259932,259933,259934,259935,259936,259937,259938,259939,259940,260258,260259,260282,260283,260295,260296,260303,260304,260338,260339,260345,260346,260368,260369,260435,260436,260440,260441,260442,260444,260511,260512,260515,260520,260521,260522,260523,260524,260525,260526,261456,261457,261464,261465,262018,262022,262023,262024,262025,262026,262027,262028,262029,262030,262031,262032,262033,262034,262036,262037,262038,262041,262144,262163,262827,262829,262968,262969,262972,262974,263232,263233,263235,263237,263781,263782,263797,263798,263813,263814,264132,264133,264279,264280,264289,264291,264293,264294,273317,273318,281252,281253,283237,283238,283854,283855,287499,287500,292698,292699,294912,294933,297291,297292,297326,297327,297361,297362,297373,297374,297419,297420,297421,297422,297488,297489,297490,297491,297500,297501,297502,297503,297512,297513,297514,297515,297523,297525,297526,297527,297535,297537,297629,297631,297639,297640,297682,297683,297691,297692,297796,297797,297946,297947,297957,297958,297984,297985,298026,298027,298064,298065,298066,298067,298175,298176,298239,298240,298245,298246,298304,298305,298317,298318,298324,298325,298356,298357,298360,298361,298362,298363,298460,298461,299088,299089,299946,299947,310675,311177,311249,311529,395197,395621,397767,397768,398102,398113,398127,398138,398175,398176,398188,398189,403379,403381,403753,403754,407301,407302,407307,407308,407315,407316,416339,416340,416345,416346,416353,416354,418138,418139,424126,424127,425424,425426,425430,425431,425749,425750,425795,425796,425984,426003,426935,426936,427323,427324,427898,427899,430886,430887,431426,431427,431791,431792,433365,433366,433425,433426,433430,433431,436612,436613,436635,436636,443945,443946,449531,449532,449673,449674,454206,454209,456077,456078,456292,456293,458752,458771,460097,655374,655379,663256,665265,675808,675950,675951") && block_image_verify(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat"), ui_print("system recovered successfully."), abort("E1004: system partition fails to recover"));
endif;
if (range_sha1(map_partition("vendor"), "952,1,28,38,40,47,48,126,132,140,141,1815,1817,2296,2297,2302,2304,2310,2311,2316,2318,2323,2324,2568,2570,2577,2578,2580,2584,2607,2608,2644,2646,2698,2699,2710,2712,2717,2718,2721,2723,2728,2729,2732,2733,2738,2739,4341,4342,7514,7515,7957,7958,16834,16835,17911,17913,17914,17915,17917,17920,17921,17922,17924,17926,17927,17928,17930,17932,17933,17934,17936,17938,17939,17940,17942,17944,17945,17946,17948,17950,17955,17957,17960,17962,17965,17967,17975,17977,17980,17982,17983,17984,17986,17988,17989,17990,17993,17995,17996,17997,17999,18001,18002,18003,18005,18007,18008,18009,18011,18013,18014,18015,18017,18019,18020,18021,18030,18031,18050,18051,18052,18053,18057,18058,18059,18060,18063,18064,18065,18066,18069,18070,18071,18072,18075,18076,18077,18078,18082,18083,18084,18085,18088,18089,18090,18091,18095,18096,18100,18101,18105,18106,18110,18111,18115,18116,18117,18118,18127,18128,18129,18130,18133,18134,18135,18136,18139,18140,18141,18142,18145,18146,18147,18148,18150,18152,18444,18445,18560,18561,19596,19604,32768,32794,61042,61043,61671,61673,65536,65555,66749,66750,73821,73822,73921,73923,74723,74724,75746,75748,75796,75797,80416,80417,81051,81053,81721,81722,81811,81812,85330,85331,85947,85948,87675,87676,90357,90358,98304,98325,103256,103257,103261,103263,103280,103281,103316,103317,103326,103327,103329,103330,103380,103381,104093,104094,104110,104111,106450,106451,106476,106477,106512,106513,106624,106625,106666,106667,107144,107145,111074,111075,111089,111090,111145,111146,111213,111214,111216,111218,111282,111283,111353,111354,111421,111422,111424,111425,111427,111428,111487,111489,111491,111492,111556,111557,111627,111628,111695,111696,111698,111699,111701,111707,111709,111710,111712,111714,111716,111727,111787,111788,111790,111791,111868,111869,111946,111947,111957,111958,112024,112025,112101,112102,112181,112182,112258,112259,112335,112336,112412,112413,112423,112424,112427,112428,112491,112492,112567,112568,112578,112579,112645,112646,112722,112723,112795,112796,112798,112799,112811,112817,112877,112878,112879,112881,112956,112957,113033,113034,113110,113111,113185,113186,113198,113199,113336,113337,113414,113415,113428,113429,113493,113494,113572,113573,113649,113650,113657,113658,113728,113729,113803,113804,113806,113807,113810,113811,113874,113875,113877,113878,113943,113944,113946,113947,114016,114017,114019,114020,114085,114086,114088,114089,114157,114158,114160,114161,114228,114229,114305,114306,114380,114381,114390,114391,114455,114456,114458,114459,114527,114528,114530,114531,114541,114542,114601,114602,114604,114605,114675,114676,114678,114679,114750,114751,114753,114754,114826,114827,114828,114829,114901,114902,114903,114904,114977,114978,114980,114981,115050,115051,115054,115055,115123,115124,115198,115199,115274,115275,115349,115350,115424,115425,115497,115498,115500,115501,115575,115576,115640,115641,115708,115709,115777,115778,115913,115914,115982,115983,116048,116049,116114,116115,116117,116118,116185,116186,116188,116189,116281,116282,116294,116295,116759,116761,116815,116816,126879,126880,126982,126983,127096,127097,127499,127500,127562,127563,127704,127705,127784,127785,127818,127819,127899,127900,127976,127977,127981,127982,128064,128065,128181,128182,128210,128211,128438,128439,128469,128470,128517,128518,128695,128696,128825,128826,128986,128987,129109,129110,129111,129112,129322,129323,129379,129380,129433,129434,129461,129462,129529,129530,129604,129605,129713,129714,129715,129716,129749,129751,129758,129760,129761,129762,129769,129770,130853,130854,130994,130995,131072,131101,131422,131423,131838,131843,132024,132026,132167,132168,132200,132205,132211,132216,132343,132344,132347,132349,132351,132352,132372,132373,132375,132376,132683,132688,132815,132816,133228,133229,133618,133619,135381,135382,135384,135386,136054,136056,136062,136067,136068,136070,136263,136264,136274,136275,136288,136293,136358,136359,136367,136368,136740,136741,139061,139062,139551,139552,139672,139683,139684,139695,139696,139708,139709,139720,139721,139744,139745,139768,139769,139792,139793,139816,139819,139820,140649,140650,142418,142419,142420,142421,142423,142424,142426,142427,142435,142436,142437,142440,142447,142448,142449,142452,142573,142574,143409,143417,143469,143470,146035,146036,147410,147411,148469,148471,148906,148907,149066,149067,149069,149070,149415,149416,149723,149725,149731,149734,149735,149736,151105,151106,151227,151228,151774,151775,152323,152324,152655,152656,152669,152670,152842,152843,152845,152846,152848,152849,152950,152951,152953,152954,153116,153121,153122,153127,153358,153359,153361,153362,153364,153365,153376,153377,153379,153380,153388,153389,153988,153989,155580,155581,156590,156591,161712,164177,167481,167482,168020,168035,168336,168337,169693,169694,173985,173987,177584,177585,181528,181529,181531,181532,187208,187209,188542,188543,189456,189457,192323,192324,193431,193432,196608,196627,197682,199805,199811,205348,207021,207022,209491,209492,211482,211484,214227,214228,215025,215026,215824,215833,216457,216458,224537,224538,224596,224597,225491,227729,229376,229403,231434,231436,232293,232294,237189,237190,238633,238634,239039,239101,247471,247472,251934,251935,251937,251938,252073,252074,252084,252085,252095,252096,253842,253905,257396,257397,259790,259791,259793,259794,259930,259931,259941,259942,259952,259953,261695,261735,270458,270588,272733,272734,273068,273079,273093,273104,273141,273142,273154,273155,282657,282658,283903,283904,284029,284091,294912,294935,295506,295507,295973,295974,298220,298221,298827,298828,301851,301852,301854,301855,301862,301863,302188,302189,303356,303357,305490,305491,307306,307307,312237,312238,321361,321362,325923,325924,325930,325932,325939,325940,327680,327699,334072,334073,334077,334078,334080,334081,337181,337182,337186,337191,337347,337348,338591,338592,338793,338855,340048,340049,340267,340268,341823,341824,343298,343299,344624,344625,345409,345410,353088,353089,360448,360467,363792,363793,367197,367213,371789,371790,371792,371793,371800,371801,375083,375084,380090,380091,386367,386368,386373,386374,386376,386377,387194,387195,387217,387218,388040,388042,388243,388244,389761,389767,389768,389769,390853,390855,393216,393229,394764,394765,398126,398127,398153,398154,398753,398754,398853,398854,401347,401349,401369,401370,401401,405939,405946,405957,407183,413638,413732,413733") == "6914ddb6f768299f64d67265c7429f0444b24919" || block_image_verify(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block(map_partition("vendor"));
ifelse (block_image_recover(map_partition("vendor"), "952,1,28,38,40,47,48,126,132,140,141,1815,1817,2296,2297,2302,2304,2310,2311,2316,2318,2323,2324,2568,2570,2577,2578,2580,2584,2607,2608,2644,2646,2698,2699,2710,2712,2717,2718,2721,2723,2728,2729,2732,2733,2738,2739,4341,4342,7514,7515,7957,7958,16834,16835,17911,17913,17914,17915,17917,17920,17921,17922,17924,17926,17927,17928,17930,17932,17933,17934,17936,17938,17939,17940,17942,17944,17945,17946,17948,17950,17955,17957,17960,17962,17965,17967,17975,17977,17980,17982,17983,17984,17986,17988,17989,17990,17993,17995,17996,17997,17999,18001,18002,18003,18005,18007,18008,18009,18011,18013,18014,18015,18017,18019,18020,18021,18030,18031,18050,18051,18052,18053,18057,18058,18059,18060,18063,18064,18065,18066,18069,18070,18071,18072,18075,18076,18077,18078,18082,18083,18084,18085,18088,18089,18090,18091,18095,18096,18100,18101,18105,18106,18110,18111,18115,18116,18117,18118,18127,18128,18129,18130,18133,18134,18135,18136,18139,18140,18141,18142,18145,18146,18147,18148,18150,18152,18444,18445,18560,18561,19596,19604,32768,32794,61042,61043,61671,61673,65536,65555,66749,66750,73821,73822,73921,73923,74723,74724,75746,75748,75796,75797,80416,80417,81051,81053,81721,81722,81811,81812,85330,85331,85947,85948,87675,87676,90357,90358,98304,98325,103256,103257,103261,103263,103280,103281,103316,103317,103326,103327,103329,103330,103380,103381,104093,104094,104110,104111,106450,106451,106476,106477,106512,106513,106624,106625,106666,106667,107144,107145,111074,111075,111089,111090,111145,111146,111213,111214,111216,111218,111282,111283,111353,111354,111421,111422,111424,111425,111427,111428,111487,111489,111491,111492,111556,111557,111627,111628,111695,111696,111698,111699,111701,111707,111709,111710,111712,111714,111716,111727,111787,111788,111790,111791,111868,111869,111946,111947,111957,111958,112024,112025,112101,112102,112181,112182,112258,112259,112335,112336,112412,112413,112423,112424,112427,112428,112491,112492,112567,112568,112578,112579,112645,112646,112722,112723,112795,112796,112798,112799,112811,112817,112877,112878,112879,112881,112956,112957,113033,113034,113110,113111,113185,113186,113198,113199,113336,113337,113414,113415,113428,113429,113493,113494,113572,113573,113649,113650,113657,113658,113728,113729,113803,113804,113806,113807,113810,113811,113874,113875,113877,113878,113943,113944,113946,113947,114016,114017,114019,114020,114085,114086,114088,114089,114157,114158,114160,114161,114228,114229,114305,114306,114380,114381,114390,114391,114455,114456,114458,114459,114527,114528,114530,114531,114541,114542,114601,114602,114604,114605,114675,114676,114678,114679,114750,114751,114753,114754,114826,114827,114828,114829,114901,114902,114903,114904,114977,114978,114980,114981,115050,115051,115054,115055,115123,115124,115198,115199,115274,115275,115349,115350,115424,115425,115497,115498,115500,115501,115575,115576,115640,115641,115708,115709,115777,115778,115913,115914,115982,115983,116048,116049,116114,116115,116117,116118,116185,116186,116188,116189,116281,116282,116294,116295,116759,116761,116815,116816,126879,126880,126982,126983,127096,127097,127499,127500,127562,127563,127704,127705,127784,127785,127818,127819,127899,127900,127976,127977,127981,127982,128064,128065,128181,128182,128210,128211,128438,128439,128469,128470,128517,128518,128695,128696,128825,128826,128986,128987,129109,129110,129111,129112,129322,129323,129379,129380,129433,129434,129461,129462,129529,129530,129604,129605,129713,129714,129715,129716,129749,129751,129758,129760,129761,129762,129769,129770,130853,130854,130994,130995,131072,131101,131422,131423,131838,131843,132024,132026,132167,132168,132200,132205,132211,132216,132343,132344,132347,132349,132351,132352,132372,132373,132375,132376,132683,132688,132815,132816,133228,133229,133618,133619,135381,135382,135384,135386,136054,136056,136062,136067,136068,136070,136263,136264,136274,136275,136288,136293,136358,136359,136367,136368,136740,136741,139061,139062,139551,139552,139672,139683,139684,139695,139696,139708,139709,139720,139721,139744,139745,139768,139769,139792,139793,139816,139819,139820,140649,140650,142418,142419,142420,142421,142423,142424,142426,142427,142435,142436,142437,142440,142447,142448,142449,142452,142573,142574,143409,143417,143469,143470,146035,146036,147410,147411,148469,148471,148906,148907,149066,149067,149069,149070,149415,149416,149723,149725,149731,149734,149735,149736,151105,151106,151227,151228,151774,151775,152323,152324,152655,152656,152669,152670,152842,152843,152845,152846,152848,152849,152950,152951,152953,152954,153116,153121,153122,153127,153358,153359,153361,153362,153364,153365,153376,153377,153379,153380,153388,153389,153988,153989,155580,155581,156590,156591,161712,164177,167481,167482,168020,168035,168336,168337,169693,169694,173985,173987,177584,177585,181528,181529,181531,181532,187208,187209,188542,188543,189456,189457,192323,192324,193431,193432,196608,196627,197682,199805,199811,205348,207021,207022,209491,209492,211482,211484,214227,214228,215025,215026,215824,215833,216457,216458,224537,224538,224596,224597,225491,227729,229376,229403,231434,231436,232293,232294,237189,237190,238633,238634,239039,239101,247471,247472,251934,251935,251937,251938,252073,252074,252084,252085,252095,252096,253842,253905,257396,257397,259790,259791,259793,259794,259930,259931,259941,259942,259952,259953,261695,261735,270458,270588,272733,272734,273068,273079,273093,273104,273141,273142,273154,273155,282657,282658,283903,283904,284029,284091,294912,294935,295506,295507,295973,295974,298220,298221,298827,298828,301851,301852,301854,301855,301862,301863,302188,302189,303356,303357,305490,305491,307306,307307,312237,312238,321361,321362,325923,325924,325930,325932,325939,325940,327680,327699,334072,334073,334077,334078,334080,334081,337181,337182,337186,337191,337347,337348,338591,338592,338793,338855,340048,340049,340267,340268,341823,341824,343298,343299,344624,344625,345409,345410,353088,353089,360448,360467,363792,363793,367197,367213,371789,371790,371792,371793,371800,371801,375083,375084,380090,380091,386367,386368,386373,386374,386376,386377,387194,387195,387217,387218,388040,388042,388243,388244,389761,389767,389768,389769,390853,390855,393216,393229,394764,394765,398126,398127,398153,398154,398753,398754,398853,398854,401347,401349,401369,401370,401401,405939,405946,405957,407183,413638,413732,413733") && block_image_verify(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat"), ui_print("vendor recovered successfully."), abort("E2004: vendor partition fails to recover"));
endif;
if (range_sha1(map_partition("product"), "290,1,16,2804,2805,5712,5713,5729,5731,5737,5738,10481,10483,10547,10548,12842,12843,12849,12850,12890,12891,19544,19545,27441,27442,30254,30255,30617,30619,31140,31141,31153,31155,31160,31161,32768,32777,33010,33012,33056,33057,34447,34448,36133,36134,36141,36142,36187,36188,36478,36479,36485,36486,36572,36573,36574,36575,38507,38509,38582,38583,42702,42703,50698,50699,51094,51095,59904,59905,64248,64249,64333,64335,64349,64352,64412,64417,64430,64432,64577,64580,65536,65543,68289,68290,77805,77806,85969,85976,86073,86077,86107,86113,86211,86215,86482,86489,86517,86523,87050,87056,87326,87333,88099,88105,88622,88623,93500,93501,97262,97263,98304,98313,103436,103438,104372,104373,104378,104379,104507,104509,104514,104515,104527,104529,104534,104535,105374,105375,107377,107379,119644,119645,119697,119698,121507,121509,131072,131079,136458,136459,136473,136474,136919,136920,138351,138352,144978,144979,145581,145582,146822,146823,150873,150874,155023,155025,155868,155869,155876,155877,155883,155884,159741,159742,159749,159751,159914,159915,159916,159917,159920,159921,159936,159937,159940,159942,159943,159945,159963,159964,159974,159975,160014,160016,160032,160033,160045,160048,160463,160464,160835,160836,162321,162322,162411,162412,163840,163883,167388,167389,174535,174537,180332,180333,182321,182322,183849,183852,184065,184067,193587,193588,193591,193592,196608,196635,196822,196823,196825,196826,203945,203946,204040,204041,204220,204221,204231,204232,205342,205344,205402,205403,205428,205429,205565,205567,205577,205578,206966,206968,207005,207006,207146,207148,207153,207154,207158,207159,207275,207277,207280,207281,207561,207562,210049,210052,211938,211939,213573,213576,214504,214505,216346,216347,217010,217012,229376,229389,229948,229949,230178,230179,230967,230974,230999,231006,251367,251370,262144,262145,267738,267739,271086,271089,274423,274424,281700,286167,286237,286238") == "8c6669a451507f13fca7d7d700e59e82a0a85740" || block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat")) then
ui_print("Verified product image...");
else
ifelse (block_image_recover(map_partition("product"), "290,1,16,2804,2805,5712,5713,5729,5731,5737,5738,10481,10483,10547,10548,12842,12843,12849,12850,12890,12891,19544,19545,27441,27442,30254,30255,30617,30619,31140,31141,31153,31155,31160,31161,32768,32777,33010,33012,33056,33057,34447,34448,36133,36134,36141,36142,36187,36188,36478,36479,36485,36486,36572,36573,36574,36575,38507,38509,38582,38583,42702,42703,50698,50699,51094,51095,59904,59905,64248,64249,64333,64335,64349,64352,64412,64417,64430,64432,64577,64580,65536,65543,68289,68290,77805,77806,85969,85976,86073,86077,86107,86113,86211,86215,86482,86489,86517,86523,87050,87056,87326,87333,88099,88105,88622,88623,93500,93501,97262,97263,98304,98313,103436,103438,104372,104373,104378,104379,104507,104509,104514,104515,104527,104529,104534,104535,105374,105375,107377,107379,119644,119645,119697,119698,121507,121509,131072,131079,136458,136459,136473,136474,136919,136920,138351,138352,144978,144979,145581,145582,146822,146823,150873,150874,155023,155025,155868,155869,155876,155877,155883,155884,159741,159742,159749,159751,159914,159915,159916,159917,159920,159921,159936,159937,159940,159942,159943,159945,159963,159964,159974,159975,160014,160016,160032,160033,160045,160048,160463,160464,160835,160836,162321,162322,162411,162412,163840,163883,167388,167389,174535,174537,180332,180333,182321,182322,183849,183852,184065,184067,193587,193588,193591,193592,196608,196635,196822,196823,196825,196826,203945,203946,204040,204041,204220,204221,204231,204232,205342,205344,205402,205403,205428,205429,205565,205567,205577,205578,206966,206968,207005,207006,207146,207148,207153,207154,207158,207159,207275,207277,207280,207281,207561,207562,210049,210052,211938,211939,213573,213576,214504,214505,216346,216347,217010,217012,229376,229389,229948,229949,230178,230179,230967,230974,230999,231006,251367,251370,262144,262145,267738,267739,271086,271089,274423,274424,281700,286167,286237,286238") && block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat"), ui_print("product recovered successfully."), abort("E2004: product partition fails to recover"));
endif;
if (range_sha1(map_partition("odm"), "12,1,6,2019,2025,2026,2029,2037,2038,32231,32745,32767,32768") == "177a7936196eb5b2960bb9af278fe366e7c40fcc" || block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat")) then
ui_print("Verified odm image...");
else
ifelse (block_image_recover(map_partition("odm"), "12,1,6,2019,2025,2026,2029,2037,2038,32231,32745,32767,32768") && block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat"), ui_print("odm recovered successfully."), abort("E2004: odm partition fails to recover"));
endif;
if (range_sha1(map_partition("system_ext"), "272,1,29,36,38,44,45,51,53,58,59,73,75,80,81,139,141,148,149,155,157,162,163,357,359,365,366,369,371,378,379,382,383,389,391,396,397,419,421,426,427,1162,1164,1184,1185,1189,1191,1196,1197,1199,1200,1211,1213,1218,1219,1229,1230,1235,1237,1243,1244,1248,1252,1258,1259,1266,1268,1273,1274,1286,1288,1293,1294,1296,1299,1309,1312,1321,1324,1358,1361,1384,1387,1409,1412,1431,1434,1454,1455,1546,1548,1558,1559,1571,1572,1573,1574,1575,1576,1583,1584,1607,1608,1652,1657,1660,1663,1666,1669,1672,1674,1678,1679,1683,1686,1691,1692,1695,1697,2383,2384,2486,2487,2531,2532,4977,4978,6035,6036,7637,7638,7696,7697,7835,7836,8145,8146,13327,13328,13400,13401,13409,13410,13545,13546,13550,13551,13604,13605,13615,13616,13649,13650,13669,13670,13722,13723,13868,13869,13944,13945,14091,14092,18842,18844,18983,18984,19009,19010,19106,19107,19158,19159,19170,19171,19221,19222,19297,19298,19361,19362,19624,19625,20129,20130,24004,24005,24061,24062,24486,24487,32314,32315,32768,32801,33258,33259,38285,38286,38476,38477,38795,38796,40856,40857,50853,50854,51046,51047,51055,51056,51870,51877,54875,54876,54879,54880,54900,54902,55932,55933,59379,59404,65340,65341,65536,65563,85118,85119,85307,85308,85336,85337,85449,85450,85520,85521,85633,85634,85833,85834,86148,86155,87356,87357,87373,87374,87438,87440,95724,95725,98304,98324,98326,98361,98751,98753,98778,98779,98786,98788,98793,98794,99072,99076,99087,99090,99118,99121,99433,101013,101048,101049") == "93824da762da1d466e944206a4bb7a980ecdbe02" || block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat")) then
ui_print("Verified system_ext image...");
else
check_first_block(map_partition("system_ext"));
ifelse (block_image_recover(map_partition("system_ext"), "272,1,29,36,38,44,45,51,53,58,59,73,75,80,81,139,141,148,149,155,157,162,163,357,359,365,366,369,371,378,379,382,383,389,391,396,397,419,421,426,427,1162,1164,1184,1185,1189,1191,1196,1197,1199,1200,1211,1213,1218,1219,1229,1230,1235,1237,1243,1244,1248,1252,1258,1259,1266,1268,1273,1274,1286,1288,1293,1294,1296,1299,1309,1312,1321,1324,1358,1361,1384,1387,1409,1412,1431,1434,1454,1455,1546,1548,1558,1559,1571,1572,1573,1574,1575,1576,1583,1584,1607,1608,1652,1657,1660,1663,1666,1669,1672,1674,1678,1679,1683,1686,1691,1692,1695,1697,2383,2384,2486,2487,2531,2532,4977,4978,6035,6036,7637,7638,7696,7697,7835,7836,8145,8146,13327,13328,13400,13401,13409,13410,13545,13546,13550,13551,13604,13605,13615,13616,13649,13650,13669,13670,13722,13723,13868,13869,13944,13945,14091,14092,18842,18844,18983,18984,19009,19010,19106,19107,19158,19159,19170,19171,19221,19222,19297,19298,19361,19362,19624,19625,20129,20130,24004,24005,24061,24062,24486,24487,32314,32315,32768,32801,33258,33259,38285,38286,38476,38477,38795,38796,40856,40857,50853,50854,51046,51047,51055,51056,51870,51877,54875,54876,54879,54880,54900,54902,55932,55933,59379,59404,65340,65341,65536,65563,85118,85119,85307,85308,85336,85337,85449,85450,85520,85521,85633,85634,85833,85834,86148,86155,87356,87357,87373,87374,87438,87440,95724,95725,98304,98324,98326,98361,98751,98753,98778,98779,98786,98788,98793,98794,99072,99076,99087,99090,99118,99121,99433,101013,101048,101049") && block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat"), ui_print("system_ext recovered successfully."), abort("E2004: system_ext partition fails to recover"));
endif;

# ---- start making changes here ----


# ---- radio update tasks ----

ui_print("Patching firmware images...");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");

# --- Start patching dynamic partitions ---


# Update dynamic partition metadata

assert(update_dynamic_partitions(package_extract_file("dynamic_partitions_op_list")));

# Patch partition system

ui_print("Patching system image after verification.");
show_progress(0.500000, 0);
block_image_update(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");

# Patch partition vendor

ui_print("Patching vendor image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");

# Patch partition product

ui_print("Patching product image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat") ||
  abort("E2001: Failed to update product image.");

# Patch partition odm

ui_print("Patching odm image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat") ||
  abort("E2001: Failed to update odm image.");

# Patch partition system_ext

ui_print("Patching system_ext image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat") ||
  abort("E2001: Failed to update system_ext image.");

# --- End patching dynamic partitions ---

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:37acae9a2a87566d2b266c865355eadfe25ad93b"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:79e707bbb0ce120e87ee573fd663e77292d36fa7"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:79e707bbb0ce120e87ee573fd663e77292d36fa7")));

# ---- radio update tasks 2 ----

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/dtbo.img", "/dev/block/bootdevice/by-name/dtbo");
package_extract_file("firmware-update/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta");
package_extract_file("firmware-update/vbmeta_system.img", "/dev/block/bootdevice/by-name/vbmeta_system");

# ---- update tasks: exaid part 2----


package_extract_file("exaid.img", "/dev/block/bootdevice/by-name/exaid");
    
set_progress(1.000000);
