getprop("ro.product.device") == "vangogh" || abort("E3004: This package is for \"vangogh\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/vangogh/vangogh:11/RKQ1.200826.002/V12.1.5.0.RJVCNXM:user/release-keys");
ui_print("Target: Xiaomi/vangogh/vangogh:11/RKQ1.200826.002/V12.1.7.0.RJVCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/vangogh/vangogh:11/RKQ1.200826.002/V12.1.5.0.RJVCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/vangogh/vangogh:11/RKQ1.200826.002/V12.1.7.0.RJVCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/vangogh/vangogh:11/RKQ1.200826.002/V12.1.5.0.RJVCNXM:user/release-keys or Xiaomi/vangogh/vangogh:11/RKQ1.200826.002/V12.1.7.0.RJVCNXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:65c0eb98366c2911801407d735dfcd6645db95e6"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:77aa9a5a85a4bfa655bf5816f4189a120c50693e")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:65c0eb98366c2911801407d735dfcd6645db95e6"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:77aa9a5a85a4bfa655bf5816f4189a120c50693e"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "18,1,30,40,50,52,56,1989,1990,2035,2036,2052,917509,917518,923048,925832,940503,940696,940697") == "60821cf4cdd7a97ffbede741d2b0f0788dd440f6" || 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"), "18,1,30,40,50,52,56,1989,1990,2035,2036,2052,917509,917518,923048,925832,940503,940696,940697") && 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"), "636,1,27,37,41,46,47,126,134,140,141,1815,1819,2296,2297,2303,2307,2311,2312,2317,2323,2324,2325,2569,2573,2578,2579,2581,2585,7680,7681,8356,8357,12133,12134,12136,12137,12226,12227,20247,20249,20252,20253,20263,20264,20266,20267,20290,20291,20327,20331,20381,20382,20393,20399,20400,20401,20404,20410,20411,20412,20415,20416,21872,21923,22018,22019,22060,22101,24543,24544,32768,32788,33922,33923,33991,33992,34493,34554,34940,34942,34943,34944,34946,34949,34950,34951,34953,34955,34956,34957,34959,34961,34962,34963,34965,34967,34968,34969,34971,34973,34974,34975,34977,34979,34984,34986,34989,34991,34994,34996,35004,35006,35009,35011,35012,35013,35015,35017,35018,35019,35022,35024,35025,35026,35028,35030,35031,35032,35034,35036,35037,35038,35040,35042,35043,35044,35046,35048,35049,35050,35059,35060,35079,35080,35081,35082,35086,35087,35088,35089,35092,35093,35094,35095,35098,35099,35100,35101,35104,35105,35106,35107,35111,35112,35113,35114,35117,35118,35119,35120,35124,35125,35129,35130,35134,35135,35139,35140,35144,35145,35146,35147,35156,35157,35158,35159,35162,35163,35164,35165,35168,35169,35170,35171,35174,35175,35176,35177,35179,35181,35473,35474,35589,35590,36606,36611,65536,65558,78045,78046,78674,78676,84470,84471,86071,86072,87372,87373,87375,87376,87428,87429,98304,98324,114647,114648,121716,121717,121818,121820,122620,122625,122718,122719,127837,127838,131072,131090,131102,131104,131152,131153,135772,135773,136407,136409,137021,137023,137577,137579,138156,138157,139063,139064,139072,139073,139160,139161,143492,143493,144109,144110,145837,145838,161243,161244,161248,161250,161267,161268,161303,161304,161313,161314,161457,161458,161508,161509,161515,161516,162221,162222,162276,162277,162302,162303,162336,162337,162443,162444,162484,162485,162490,162491,162566,162582,162983,162984,163840,163860,167026,167027,167044,167045,167095,167096,167108,167109,167171,167172,167174,167176,167240,167241,167311,167312,167379,167380,167382,167383,167385,167386,167445,167447,167449,167450,167514,167515,167585,167586,167653,167654,167656,167657,167659,167665,167667,167668,167670,167672,167674,167685,167745,167746,167748,167749,167826,167827,167904,167905,167915,167916,167982,167983,168059,168060,168139,168140,168216,168217,168293,168294,168370,168371,168381,168382,168385,168386,168449,168450,168525,168526,168603,168604,168680,168681,168753,168754,168756,168757,168769,168775,168835,168836,168838,168839,168848,168849,168914,168915,168992,168993,169069,169070,169144,169145,169221,169222,169297,169298,169372,169373,169450,169451,169458,169459,169529,169530,169607,169608,169685,169686,169759,169760,169762,169763,169768,169769,169832,169833,169835,169836,169901,169902,169904,169905,169971,169972,169974,169975,170043,170044,170046,170047,170112,170113,170116,170117,170122,170123,170188,170189,170263,170264,170336,170337,170338,170339,170415,170416,170490,170491,170493,170494,170561,170562,170564,170565,170630,170631,170633,170634,170703,170704,170706,170707,170775,170776,170777,170778,170851,170852,170853,170854,170927,170928,170930,170931,170999,171000,171002,171003,171072,171073,171075,171077,171142,171143,171145,171146,171214,171215,171217,171218,171283,171284,171286,171287,171354,171355,171357,171358,171426,171427,171429,171430,171495,171496,171560,171561,171630,171631,171699,171700,171767,171768,171837,171838,171904,171905,171972,171973,171978,171980,172042,172043,172045,172046,172111,172112,172114,172115,172293,172294,172306,172307,172767,172769,172820,172821,172934,172935,172936,172937,179359,179360,182419,182420,182421,182422,182471,182472,182895,182896,182923,182924,183091,183092,183450,183451,183512,183513,183662,183663,183742,183743,183775,183776,183859,183860,183927,183928,183994,183995,184087,184088,184160,184161,184206,184207,184311,184312,184355,184356,184358,184359,184391,184392,184553,184554,184625,184626,184678,184679,184817,184818,184820,184821,184915,184916,185040,185041,185115,185116,185149,185150,185213,185214,185285,185286,185351,185353,185354,185356,185470,185472,185478,185480,185566,185567,185644,185645,185647,185651,185789,185790,185867,185868,186211,425990,426002,447939,449287,456408,456510,456511") == "51e17b91bc41615ee866b1a5dae7780089c68d6f" || 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"), "636,1,27,37,41,46,47,126,134,140,141,1815,1819,2296,2297,2303,2307,2311,2312,2317,2323,2324,2325,2569,2573,2578,2579,2581,2585,7680,7681,8356,8357,12133,12134,12136,12137,12226,12227,20247,20249,20252,20253,20263,20264,20266,20267,20290,20291,20327,20331,20381,20382,20393,20399,20400,20401,20404,20410,20411,20412,20415,20416,21872,21923,22018,22019,22060,22101,24543,24544,32768,32788,33922,33923,33991,33992,34493,34554,34940,34942,34943,34944,34946,34949,34950,34951,34953,34955,34956,34957,34959,34961,34962,34963,34965,34967,34968,34969,34971,34973,34974,34975,34977,34979,34984,34986,34989,34991,34994,34996,35004,35006,35009,35011,35012,35013,35015,35017,35018,35019,35022,35024,35025,35026,35028,35030,35031,35032,35034,35036,35037,35038,35040,35042,35043,35044,35046,35048,35049,35050,35059,35060,35079,35080,35081,35082,35086,35087,35088,35089,35092,35093,35094,35095,35098,35099,35100,35101,35104,35105,35106,35107,35111,35112,35113,35114,35117,35118,35119,35120,35124,35125,35129,35130,35134,35135,35139,35140,35144,35145,35146,35147,35156,35157,35158,35159,35162,35163,35164,35165,35168,35169,35170,35171,35174,35175,35176,35177,35179,35181,35473,35474,35589,35590,36606,36611,65536,65558,78045,78046,78674,78676,84470,84471,86071,86072,87372,87373,87375,87376,87428,87429,98304,98324,114647,114648,121716,121717,121818,121820,122620,122625,122718,122719,127837,127838,131072,131090,131102,131104,131152,131153,135772,135773,136407,136409,137021,137023,137577,137579,138156,138157,139063,139064,139072,139073,139160,139161,143492,143493,144109,144110,145837,145838,161243,161244,161248,161250,161267,161268,161303,161304,161313,161314,161457,161458,161508,161509,161515,161516,162221,162222,162276,162277,162302,162303,162336,162337,162443,162444,162484,162485,162490,162491,162566,162582,162983,162984,163840,163860,167026,167027,167044,167045,167095,167096,167108,167109,167171,167172,167174,167176,167240,167241,167311,167312,167379,167380,167382,167383,167385,167386,167445,167447,167449,167450,167514,167515,167585,167586,167653,167654,167656,167657,167659,167665,167667,167668,167670,167672,167674,167685,167745,167746,167748,167749,167826,167827,167904,167905,167915,167916,167982,167983,168059,168060,168139,168140,168216,168217,168293,168294,168370,168371,168381,168382,168385,168386,168449,168450,168525,168526,168603,168604,168680,168681,168753,168754,168756,168757,168769,168775,168835,168836,168838,168839,168848,168849,168914,168915,168992,168993,169069,169070,169144,169145,169221,169222,169297,169298,169372,169373,169450,169451,169458,169459,169529,169530,169607,169608,169685,169686,169759,169760,169762,169763,169768,169769,169832,169833,169835,169836,169901,169902,169904,169905,169971,169972,169974,169975,170043,170044,170046,170047,170112,170113,170116,170117,170122,170123,170188,170189,170263,170264,170336,170337,170338,170339,170415,170416,170490,170491,170493,170494,170561,170562,170564,170565,170630,170631,170633,170634,170703,170704,170706,170707,170775,170776,170777,170778,170851,170852,170853,170854,170927,170928,170930,170931,170999,171000,171002,171003,171072,171073,171075,171077,171142,171143,171145,171146,171214,171215,171217,171218,171283,171284,171286,171287,171354,171355,171357,171358,171426,171427,171429,171430,171495,171496,171560,171561,171630,171631,171699,171700,171767,171768,171837,171838,171904,171905,171972,171973,171978,171980,172042,172043,172045,172046,172111,172112,172114,172115,172293,172294,172306,172307,172767,172769,172820,172821,172934,172935,172936,172937,179359,179360,182419,182420,182421,182422,182471,182472,182895,182896,182923,182924,183091,183092,183450,183451,183512,183513,183662,183663,183742,183743,183775,183776,183859,183860,183927,183928,183994,183995,184087,184088,184160,184161,184206,184207,184311,184312,184355,184356,184358,184359,184391,184392,184553,184554,184625,184626,184678,184679,184817,184818,184820,184821,184915,184916,185040,185041,185115,185116,185149,185150,185213,185214,185285,185286,185351,185353,185354,185356,185470,185472,185478,185480,185566,185567,185644,185645,185647,185651,185789,185790,185867,185868,186211,425990,426002,447939,449287,456408,456510,456511") && 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"), "144,1,25,30,31,33,34,150,154,158,159,171,177,178,179,3119,3120,15396,15397,15452,15453,31999,32000,32768,32785,34480,34481,37972,37973,41830,41831,41838,41840,42003,42004,42007,42008,42014,42016,42034,42035,42037,42038,42076,42080,42084,42088,42089,42101,42516,42517,42888,42889,44374,44375,44464,44466,44468,44469,44471,44472,44474,44475,44477,44478,44480,44481,44483,44484,44494,44495,44497,44498,44500,44501,44503,44504,44506,44507,44509,44510,44520,44521,44541,44542,44548,44549,44569,44570,44586,44587,44591,44592,44609,44610,44615,44616,44635,44636,44650,44651,44655,44656,44675,44676,44682,44683,44703,44704,44719,44720,44724,44725,44727,44728,44730,44731,44733,44734,44736,44737,44739,44740,44742,44743,44745,44746,44748,44749,44751,44752,44754,44755,44765,44767,44771,44777,44778,44779,45416,45420,45573,46299,46324,46325") == "4c9c8eb7f3bc3f711b17e59ac762e6421f8b06bf" || 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"), "144,1,25,30,31,33,34,150,154,158,159,171,177,178,179,3119,3120,15396,15397,15452,15453,31999,32000,32768,32785,34480,34481,37972,37973,41830,41831,41838,41840,42003,42004,42007,42008,42014,42016,42034,42035,42037,42038,42076,42080,42084,42088,42089,42101,42516,42517,42888,42889,44374,44375,44464,44466,44468,44469,44471,44472,44474,44475,44477,44478,44480,44481,44483,44484,44494,44495,44497,44498,44500,44501,44503,44504,44506,44507,44509,44510,44520,44521,44541,44542,44548,44549,44569,44570,44586,44587,44591,44592,44609,44610,44615,44616,44635,44636,44650,44651,44655,44656,44675,44676,44682,44683,44703,44704,44719,44720,44724,44725,44727,44728,44730,44731,44733,44734,44736,44737,44739,44740,44742,44743,44745,44746,44748,44749,44751,44752,44754,44755,44765,44767,44771,44777,44778,44779,45416,45420,45573,46299,46324,46325") && 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,12,13,14,22,23,242,243,245,251,270,271") == "661045fac8cf1ee270f838ae3e0fe604eb577fbb" || 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,12,13,14,22,23,242,243,245,251,270,271") && 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"), "290,1,35,42,46,50,51,57,63,64,65,79,85,86,87,145,149,154,155,228,234,238,239,245,251,252,253,447,451,455,456,459,463,468,469,472,473,479,485,486,487,509,515,516,517,1228,1232,1250,1251,1255,1261,1262,1263,1265,1266,1277,1283,1284,1285,1295,1296,1301,1305,1309,1310,1314,1320,1324,1325,1332,1338,1339,1340,1352,1358,1359,1360,1362,1369,1375,1382,1387,1394,1424,1431,1450,1457,1475,1480,1497,1504,1520,1521,1612,1614,1617,1618,1630,1631,1632,1633,1634,1635,1642,1643,1666,1667,1709,1714,1717,1720,1723,1726,1729,1731,1735,1736,1740,1743,1748,1749,1752,1754,1831,1832,1833,1834,1842,1843,2227,2233,2238,2240,2245,2247,2251,2255,2256,2260,2261,2265,2266,2270,2271,2275,2276,2280,2281,2283,2290,2294,2295,2299,2300,2304,2305,2309,2310,2314,2315,2319,2320,2324,2325,2327,2328,2332,2333,2337,2338,2342,2343,2347,2348,2352,2353,2357,2358,2362,2363,2365,2369,2373,2374,2378,2379,2381,2382,2384,2385,2389,2390,2394,2395,2397,2398,2402,2403,2407,2408,2412,2413,2417,2418,2420,2421,2425,2426,2428,2432,2441,2446,2476,2479,2591,5051,5052,5186,5862,6115,6116,7723,7724,7782,7783,7921,7922,8231,8232,13413,13414,13486,13487,13495,13496,13631,13632,13636,13637,13690,13691,13701,13702,13735,13736,13755,13756,13808,13809,13954,13955,14030,14031,14177,14178,18928,18930,19069,19070,19095,19096,19192,19193,19244,19245,19256,19257,19307,19308,19383,19384,19447,19448,19710,19711,20215,20216,24090,24091,24147,24148,24572,24573,30647,65560,65562,69826,70036,71151,71180,71181") == "eaf5720f4e4d025ff3f40599b786c4862ab509d9" || 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"), "290,1,35,42,46,50,51,57,63,64,65,79,85,86,87,145,149,154,155,228,234,238,239,245,251,252,253,447,451,455,456,459,463,468,469,472,473,479,485,486,487,509,515,516,517,1228,1232,1250,1251,1255,1261,1262,1263,1265,1266,1277,1283,1284,1285,1295,1296,1301,1305,1309,1310,1314,1320,1324,1325,1332,1338,1339,1340,1352,1358,1359,1360,1362,1369,1375,1382,1387,1394,1424,1431,1450,1457,1475,1480,1497,1504,1520,1521,1612,1614,1617,1618,1630,1631,1632,1633,1634,1635,1642,1643,1666,1667,1709,1714,1717,1720,1723,1726,1729,1731,1735,1736,1740,1743,1748,1749,1752,1754,1831,1832,1833,1834,1842,1843,2227,2233,2238,2240,2245,2247,2251,2255,2256,2260,2261,2265,2266,2270,2271,2275,2276,2280,2281,2283,2290,2294,2295,2299,2300,2304,2305,2309,2310,2314,2315,2319,2320,2324,2325,2327,2328,2332,2333,2337,2338,2342,2343,2347,2348,2352,2353,2357,2358,2362,2363,2365,2369,2373,2374,2378,2379,2381,2382,2384,2385,2389,2390,2394,2395,2397,2398,2402,2403,2407,2408,2412,2413,2417,2418,2420,2421,2425,2426,2428,2432,2441,2446,2476,2479,2591,5051,5052,5186,5862,6115,6116,7723,7724,7782,7783,7921,7922,8231,8232,13413,13414,13486,13487,13495,13496,13631,13632,13636,13637,13690,13691,13701,13702,13735,13736,13755,13756,13808,13809,13954,13955,14030,14031,14177,14178,18928,18930,19069,19070,19095,19096,19192,19193,19244,19245,19256,19257,19307,19308,19383,19384,19447,19448,19710,19711,20215,20216,24090,24091,24147,24148,24572,24573,30647,65560,65562,69826,70036,71151,71180,71181") && 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/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
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/aop.mbn", "/dev/block/bootdevice/by-name/aop");
package_extract_file("firmware-update/featenabler.mbn", "/dev/block/bootdevice/by-name/featenabler");
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/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/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
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/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aopbak");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_configbak");
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");

# --- 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.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 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:65c0eb98366c2911801407d735dfcd6645db95e6"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:77aa9a5a85a4bfa655bf5816f4189a120c50693e"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:77aa9a5a85a4bfa655bf5816f4189a120c50693e")));

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