getprop("ro.product.device") == "lime" || abort("E3004: This package is for \"lime\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/lime/lime:11/RKQ1.201004.002/V12.5.10.0.RJQINXM:user/release-keys");
ui_print("Target: Redmi/lime/lime:11/RKQ1.201004.002/V12.5.11.0.RJQINXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/lime/lime:11/RKQ1.201004.002/V12.5.10.0.RJQINXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/lime/lime:11/RKQ1.201004.002/V12.5.11.0.RJQINXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/lime/lime:11/RKQ1.201004.002/V12.5.10.0.RJQINXM:user/release-keys or Redmi/lime/lime:11/RKQ1.201004.002/V12.5.11.0.RJQINXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:e5a11090cef278d742a3fd1681a4c5ea26466745"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:e15f249d6b3dff811efd5dfdf3df9540714c13c4")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:e5a11090cef278d742a3fd1681a4c5ea26466745"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:e15f249d6b3dff811efd5dfdf3df9540714c13c4"),"\" has unexpected contents."));
apply_patch_space(100663296) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "74,1,33,45,55,75,79,107,108,124,21387,21394,21395,27560,27561,28976,43328,50494,56690,56697,56698,58043,58044,60201,60202,63025,63026,63770,63771,65331,65332,65524,65525,65536,65553,66762,66763,71132,71133,72250,72251,74269,74270,74751,74752,77915,77916,78512,78513,78700,78701,79403,79404,79620,79622,79784,79788,79796,79797,79858,79860,79868,247925,248908,248910,250660,655375,655377,666262,666343,667109,669128,679731,679876,679877") == "925575613e25c400ff94a7d8de7d4a08f2b23be6" || 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"), "74,1,33,45,55,75,79,107,108,124,21387,21394,21395,27560,27561,28976,43328,50494,56690,56697,56698,58043,58044,60201,60202,63025,63026,63770,63771,65331,65332,65524,65525,65536,65553,66762,66763,71132,71133,72250,72251,74269,74270,74751,74752,77915,77916,78512,78513,78700,78701,79403,79404,79620,79622,79784,79788,79796,79797,79858,79860,79868,247925,248908,248910,250660,655375,655377,666262,666343,667109,669128,679731,679876,679877") && 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"), "394,1,31,42,46,51,52,132,140,146,147,1824,1828,2307,2308,2553,2557,2562,2563,2566,2570,2573,2574,2597,2601,2605,2606,2629,2630,2666,2670,2720,2721,2882,2883,2888,2894,2895,2902,2916,2917,4921,4970,4976,5315,5403,5404,7949,7950,9317,9318,9487,9534,10020,10022,10023,10024,10026,10029,10030,10031,10033,10035,10036,10037,10039,10041,10042,10043,10045,10047,10048,10049,10052,10054,10055,10056,10059,10061,10064,10066,10074,10076,10079,10081,10084,10086,10087,10088,10093,10094,10096,10098,10099,10100,10102,10104,10105,10106,10108,10110,10111,10112,10114,10116,10117,10118,10143,10144,10148,10149,10155,10156,10159,10160,10161,10162,10165,10166,10167,10168,10171,10172,10173,10174,10179,10180,10183,10184,10185,10186,10189,10190,10191,10192,10196,10197,10201,10202,10205,10207,10210,10212,10216,10217,10222,10223,10224,10225,10228,10229,10230,10231,10234,10235,10236,10237,10240,10241,10242,10243,10246,10247,10248,10249,10252,10253,10254,10255,10259,10260,10550,10551,11578,11586,18762,18763,18895,18896,18906,18907,27837,27838,28127,28129,28202,28203,30017,30018,32768,32800,34669,34670,35304,35306,35947,35948,36480,36481,37013,37014,37017,37018,37460,37461,38367,38368,38376,38377,38472,38473,40399,40401,51378,51379,51679,51680,51684,51686,51703,51704,51739,51740,51749,51750,51807,51808,53239,53240,57315,57316,57318,57320,57384,57385,57455,57456,57523,57524,57526,57527,57529,57530,57589,57591,57593,57594,57658,57659,57729,57730,57797,57798,57800,57801,57803,57806,57807,57809,57811,57812,57818,57819,57821,57822,57825,57826,57837,57839,57841,57842,57848,57849,57851,57852,57855,57856,57858,57859,57862,57865,57867,57868,57870,57872,57875,57877,57879,57880,57888,57889,57891,57892,57902,57903,57905,57906,57908,57909,57912,57913,57924,57926,57928,57929,57935,57936,57938,57939,57941,57942,57944,57945,57947,57958,58018,58019,58021,58022,58032,58033,58099,58100,58177,58178,58188,58189,58255,58256,58332,58333,58412,58413,58489,58490,58566,58567,58643,58644,58654,58655,58658,58659,58722,58723,58798,58799,58809,58810,58876,58877,58953,58954,59026,59027,59029,59030,59042,59047,59048,59049,59053,59054,59056,59057,59060,59061,60602,60603,60638,60640,60645,60647,60773,60774,60823,60826,61279,61280,61480,61481,61487,61488,61508,61509,61516,61517,61747,294934,294936,325057,326053,331221,331301,331302") == "b4160b213fe02df089054f6e2d3e8c4f8576ebbf" || 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"), "394,1,31,42,46,51,52,132,140,146,147,1824,1828,2307,2308,2553,2557,2562,2563,2566,2570,2573,2574,2597,2601,2605,2606,2629,2630,2666,2670,2720,2721,2882,2883,2888,2894,2895,2902,2916,2917,4921,4970,4976,5315,5403,5404,7949,7950,9317,9318,9487,9534,10020,10022,10023,10024,10026,10029,10030,10031,10033,10035,10036,10037,10039,10041,10042,10043,10045,10047,10048,10049,10052,10054,10055,10056,10059,10061,10064,10066,10074,10076,10079,10081,10084,10086,10087,10088,10093,10094,10096,10098,10099,10100,10102,10104,10105,10106,10108,10110,10111,10112,10114,10116,10117,10118,10143,10144,10148,10149,10155,10156,10159,10160,10161,10162,10165,10166,10167,10168,10171,10172,10173,10174,10179,10180,10183,10184,10185,10186,10189,10190,10191,10192,10196,10197,10201,10202,10205,10207,10210,10212,10216,10217,10222,10223,10224,10225,10228,10229,10230,10231,10234,10235,10236,10237,10240,10241,10242,10243,10246,10247,10248,10249,10252,10253,10254,10255,10259,10260,10550,10551,11578,11586,18762,18763,18895,18896,18906,18907,27837,27838,28127,28129,28202,28203,30017,30018,32768,32800,34669,34670,35304,35306,35947,35948,36480,36481,37013,37014,37017,37018,37460,37461,38367,38368,38376,38377,38472,38473,40399,40401,51378,51379,51679,51680,51684,51686,51703,51704,51739,51740,51749,51750,51807,51808,53239,53240,57315,57316,57318,57320,57384,57385,57455,57456,57523,57524,57526,57527,57529,57530,57589,57591,57593,57594,57658,57659,57729,57730,57797,57798,57800,57801,57803,57806,57807,57809,57811,57812,57818,57819,57821,57822,57825,57826,57837,57839,57841,57842,57848,57849,57851,57852,57855,57856,57858,57859,57862,57865,57867,57868,57870,57872,57875,57877,57879,57880,57888,57889,57891,57892,57902,57903,57905,57906,57908,57909,57912,57913,57924,57926,57928,57929,57935,57936,57938,57939,57941,57942,57944,57945,57947,57958,58018,58019,58021,58022,58032,58033,58099,58100,58177,58178,58188,58189,58255,58256,58332,58333,58412,58413,58489,58490,58566,58567,58643,58644,58654,58655,58658,58659,58722,58723,58798,58799,58809,58810,58876,58877,58953,58954,59026,59027,59029,59030,59042,59047,59048,59049,59053,59054,59056,59057,59060,59061,60602,60603,60638,60640,60645,60647,60773,60774,60823,60826,61279,61280,61480,61481,61487,61488,61508,61509,61516,61517,61747,294934,294936,325057,326053,331221,331301,331302") && 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"), "366,1,16,33,37,41,42,4814,4815,5238,5240,7277,7281,7374,7375,8377,8378,10075,10078,10084,10085,10126,10127,10928,10929,14299,14303,14418,14419,18772,18773,27186,27187,32768,32777,37003,37004,37679,37683,38649,38650,39992,39993,40127,40128,40183,40184,41798,41799,42161,42165,42684,42685,42697,42703,42704,42705,44545,44549,44591,44592,45982,45983,55734,55735,59606,59607,59857,59862,59874,59875,59939,59942,60135,60140,60397,60399,63881,63882,65536,65543,73730,73731,83275,83282,84758,84759,90134,90135,93284,93285,98304,98313,102845,102846,102853,102854,102983,102989,102990,102991,103004,103010,103011,103012,110533,110534,111773,111777,112790,112791,116639,116641,130124,130125,130194,130195,131072,131079,132423,132425,152923,152924,154932,154933,162234,162235,163840,163849,168615,168616,172605,172606,172907,172908,172960,172962,172971,172972,173066,173068,173857,173858,173865,173866,173872,173873,178210,178211,178436,178438,178448,178450,178496,178498,178508,178510,178519,178520,180338,180339,180340,180342,180506,180507,180508,180509,180511,180512,180529,180530,180533,180535,180536,180538,180554,180555,180567,180568,180607,180611,180615,180619,180620,180624,180625,180641,181056,181057,181428,181429,182914,182915,183004,183006,183009,183010,183013,183014,183017,183018,183021,183022,183025,183026,183029,183030,183044,183045,183051,183052,183058,183059,183065,183066,183072,183073,183079,183080,183122,183123,183144,183145,183152,183153,183174,183175,183192,183193,183199,183200,183218,183219,183226,183227,183246,183247,183262,183263,183268,183269,183289,183290,183297,183298,183319,183320,183337,183338,183344,183345,183947,183949,186395,186396,196608,196632,196633,196634,203758,203760,204901,204902,213101,213103,214153,214155,216395,216396,216570,216574,216622,216623,216638,216639,216879,216883,217134,217135,225695,225696,229231,229232,229281,229282,229376,229385,230860,230864,230932,230933,230963,230964,231100,231104,231112,231113,232501,232505,232540,232541,232682,232688,232689,232690,232694,232695,232812,232816,232817,232818,234218,234222,236988,236989,237721,237722,244160,244161,248382,248383,249910,249911,250575,250579,250595,250596,252169,252173,252198,252199,262144,262147,263034,263035,288180,288181,288206,288207,288410,288411,288888,288889,289128,289129,289868,289869,290448,290449,290626,290627,291602,291604,292718,292719,294912,294915,295650,295651,296588,296591,299925,299926,307279,312151,312227,312228") == "c7c28e2d9aced3d519e3ee069ba46c545e030e49" || 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"), "366,1,16,33,37,41,42,4814,4815,5238,5240,7277,7281,7374,7375,8377,8378,10075,10078,10084,10085,10126,10127,10928,10929,14299,14303,14418,14419,18772,18773,27186,27187,32768,32777,37003,37004,37679,37683,38649,38650,39992,39993,40127,40128,40183,40184,41798,41799,42161,42165,42684,42685,42697,42703,42704,42705,44545,44549,44591,44592,45982,45983,55734,55735,59606,59607,59857,59862,59874,59875,59939,59942,60135,60140,60397,60399,63881,63882,65536,65543,73730,73731,83275,83282,84758,84759,90134,90135,93284,93285,98304,98313,102845,102846,102853,102854,102983,102989,102990,102991,103004,103010,103011,103012,110533,110534,111773,111777,112790,112791,116639,116641,130124,130125,130194,130195,131072,131079,132423,132425,152923,152924,154932,154933,162234,162235,163840,163849,168615,168616,172605,172606,172907,172908,172960,172962,172971,172972,173066,173068,173857,173858,173865,173866,173872,173873,178210,178211,178436,178438,178448,178450,178496,178498,178508,178510,178519,178520,180338,180339,180340,180342,180506,180507,180508,180509,180511,180512,180529,180530,180533,180535,180536,180538,180554,180555,180567,180568,180607,180611,180615,180619,180620,180624,180625,180641,181056,181057,181428,181429,182914,182915,183004,183006,183009,183010,183013,183014,183017,183018,183021,183022,183025,183026,183029,183030,183044,183045,183051,183052,183058,183059,183065,183066,183072,183073,183079,183080,183122,183123,183144,183145,183152,183153,183174,183175,183192,183193,183199,183200,183218,183219,183226,183227,183246,183247,183262,183263,183268,183269,183289,183290,183297,183298,183319,183320,183337,183338,183344,183345,183947,183949,186395,186396,196608,196632,196633,196634,203758,203760,204901,204902,213101,213103,214153,214155,216395,216396,216570,216574,216622,216623,216638,216639,216879,216883,217134,217135,225695,225696,229231,229232,229281,229282,229376,229385,230860,230864,230932,230933,230963,230964,231100,231104,231112,231113,232501,232505,232540,232541,232682,232688,232689,232690,232694,232695,232812,232816,232817,232818,234218,234222,236988,236989,237721,237722,244160,244161,248382,248383,249910,249911,250575,250579,250595,250596,252169,252173,252198,252199,262144,262147,263034,263035,288180,288181,288206,288207,288410,288411,288888,288889,289128,289129,289868,289869,290448,290449,290626,290627,291602,291604,292718,292719,294912,294915,295650,295651,296588,296591,299925,299926,307279,312151,312227,312228") && 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("system_ext"), "310,1,31,40,44,48,49,57,63,64,65,81,87,88,89,148,152,157,158,719,721,778,782,797,798,827,833,834,835,1724,1730,1753,1754,1761,1767,1768,1769,1997,2001,2010,2011,2042,2048,2049,2050,2246,2250,2254,2255,2259,2263,2268,2269,2274,2275,2299,2305,2306,2307,2313,2319,2320,2321,2324,2325,2337,2343,2344,2345,2356,2357,2363,2367,2371,2372,2377,2383,2387,2388,2397,2403,2404,2405,2418,2424,2425,2426,2438,2444,2445,2446,2449,2456,2464,2471,2539,2546,2552,2559,2595,2600,2620,2627,2646,2653,2671,2672,2882,2884,2893,2894,2906,2907,2908,2909,2910,2911,2920,2921,2944,2945,2993,2998,3001,3004,3007,3010,3013,3015,3019,3020,3024,3027,3031,3032,3555,3557,3561,3565,3566,3570,3575,3577,3582,3586,3587,3591,3592,3596,3597,3601,3602,3606,3607,3611,3612,3616,3617,3621,3622,3624,3631,3635,3636,3640,3641,3645,3646,3650,3651,3655,3656,3660,3661,3665,3666,3668,3669,3673,3674,3678,3679,3681,3682,3686,3687,3691,3692,3696,3697,3701,3702,3706,3707,3709,3713,3717,3718,3722,3723,3725,3726,3728,3729,3733,3734,3738,3739,3741,3742,3746,3747,3751,3752,3756,3757,3761,3762,3764,3765,3769,3770,3772,3776,3793,3798,3832,3835,3948,6360,6361,6644,7314,7596,7597,8786,8787,8839,9063,9210,9376,9934,9935,10025,10185,11114,11115,11165,11166,11475,11476,16801,16802,16832,16833,17022,17023,17083,17084,17263,17264,17384,17385,17593,17594,22486,22487,22489,22490,22519,22520,22713,22714,22887,22888,22913,22914,22931,22932,23008,23009,23032,23033,23089,23090,23195,23196,28169,28170,28189,28190,28468,28469,28555,28556,28594,28595,28672,28673,28928,28929,32768,32807,35221,98326,98328,119102,119464,121360,121399,121400") == "2bc0031b826bedfeefada28d9c8230ebf430967e" || 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"), "310,1,31,40,44,48,49,57,63,64,65,81,87,88,89,148,152,157,158,719,721,778,782,797,798,827,833,834,835,1724,1730,1753,1754,1761,1767,1768,1769,1997,2001,2010,2011,2042,2048,2049,2050,2246,2250,2254,2255,2259,2263,2268,2269,2274,2275,2299,2305,2306,2307,2313,2319,2320,2321,2324,2325,2337,2343,2344,2345,2356,2357,2363,2367,2371,2372,2377,2383,2387,2388,2397,2403,2404,2405,2418,2424,2425,2426,2438,2444,2445,2446,2449,2456,2464,2471,2539,2546,2552,2559,2595,2600,2620,2627,2646,2653,2671,2672,2882,2884,2893,2894,2906,2907,2908,2909,2910,2911,2920,2921,2944,2945,2993,2998,3001,3004,3007,3010,3013,3015,3019,3020,3024,3027,3031,3032,3555,3557,3561,3565,3566,3570,3575,3577,3582,3586,3587,3591,3592,3596,3597,3601,3602,3606,3607,3611,3612,3616,3617,3621,3622,3624,3631,3635,3636,3640,3641,3645,3646,3650,3651,3655,3656,3660,3661,3665,3666,3668,3669,3673,3674,3678,3679,3681,3682,3686,3687,3691,3692,3696,3697,3701,3702,3706,3707,3709,3713,3717,3718,3722,3723,3725,3726,3728,3729,3733,3734,3738,3739,3741,3742,3746,3747,3751,3752,3756,3757,3761,3762,3764,3765,3769,3770,3772,3776,3793,3798,3832,3835,3948,6360,6361,6644,7314,7596,7597,8786,8787,8839,9063,9210,9376,9934,9935,10025,10185,11114,11115,11165,11166,11475,11476,16801,16802,16832,16833,17022,17023,17083,17084,17263,17264,17384,17385,17593,17594,22486,22487,22489,22490,22519,22520,22713,22714,22887,22888,22913,22914,22931,22932,23008,23009,23032,23033,23089,23090,23195,23196,28169,28170,28189,28190,28468,28469,28555,28556,28594,28595,28672,28673,28928,28929,32768,32807,35221,98326,98328,119102,119464,121360,121399,121400") && 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/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/ImageFv");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hyp");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_config");
package_extract_file("firmware-update/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecapp");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfw");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsec");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xbl");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpm");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/ImageFvbak");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_configbak");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecappbak");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfwbak");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsecbak");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xblbak");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpmbak");

# --- Start patching dynamic partitions ---


# 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.");

# 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.600000, 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 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 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",":100663296:e5a11090cef278d742a3fd1681a4c5ea26466745"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:e15f249d6b3dff811efd5dfdf3df9540714c13c4"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":100663296:e15f249d6b3dff811efd5dfdf3df9540714c13c4")));

# ---- 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");
set_progress(1.000000);
