getprop("ro.product.device") == "nitrogen" || abort("E3004: This package is for \"nitrogen\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V11.0.2.0.QEDMIXM:user/release-keys");
ui_print("Target: Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V11.0.4.0.QEDMIXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V11.0.2.0.QEDMIXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V11.0.4.0.QEDMIXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V11.0.2.0.QEDMIXM:user/release-keys or Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V11.0.4.0.QEDMIXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
show_progress(0.100000, 10);
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/boot:35513674:a598923ac5e23a3fc9f8f37d2d256d9f46c75ac9",
                      "EMMC:/dev/block/bootdevice/by-name/boot:35513674:0189a46334aeb282adc221c6b98c50fdaeaafcbc") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:35513674:a598923ac5e23a3fc9f8f37d2d256d9f46c75ac9\" or \"EMMC:/dev/block/bootdevice/by-name/boot:35513674:0189a46334aeb282adc221c6b98c50fdaeaafcbc\" has unexpected contents.");
apply_patch_space(35513674) || abort("E3006: Not enough free space on /cache to apply patches.");

# ---- radio update verification ----

ui_print("Verifying radio-update...");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:dba7714273c42765af3dee9c6a3e942e8e64742e",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:7cd6f07433c77176a2c9553e85f1f1fe93a6ddc0") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:dba7714273c42765af3dee9c6a3e942e8e64742e\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:7cd6f07433c77176a2c9553e85f1f1fe93a6ddc0\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:dba7714273c42765af3dee9c6a3e942e8e64742e",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:7cd6f07433c77176a2c9553e85f1f1fe93a6ddc0") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:dba7714273c42765af3dee9c6a3e942e8e64742e\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:7cd6f07433c77176a2c9553e85f1f1fe93a6ddc0\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpm:224808:02b286647f4f58451a8f86426819cac0c6af0818",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:224808:02cf70808cd3a6a5b7a3cd48131311cbfc4625e7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:224808:02b286647f4f58451a8f86426819cac0c6af0818\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:224808:02cf70808cd3a6a5b7a3cd48131311cbfc4625e7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:02b286647f4f58451a8f86426819cac0c6af0818",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:02cf70808cd3a6a5b7a3cd48131311cbfc4625e7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:02b286647f4f58451a8f86426819cac0c6af0818\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:02cf70808cd3a6a5b7a3cd48131311cbfc4625e7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:dde4ed1dda750fbf460a4f76bb73e4c7e9fb2d69",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:c876477e12c12d5343fd45116c5b6992fa9ddc7a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:49068:dde4ed1dda750fbf460a4f76bb73e4c7e9fb2d69\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:49068:c876477e12c12d5343fd45116c5b6992fa9ddc7a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:dde4ed1dda750fbf460a4f76bb73e4c7e9fb2d69",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:c876477e12c12d5343fd45116c5b6992fa9ddc7a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:dde4ed1dda750fbf460a4f76bb73e4c7e9fb2d69\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:c876477e12c12d5343fd45116c5b6992fa9ddc7a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:117720576:08be1c4e81ef7651f961b6640380bdd9cd40e604",
                      "EMMC:/dev/block/bootdevice/by-name/modem:117736960:310ab49b0c2cc8371cccf8a6c176dac46f8ffeda") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:117720576:08be1c4e81ef7651f961b6640380bdd9cd40e604\" or \"EMMC:/dev/block/bootdevice/by-name/modem:117736960:310ab49b0c2cc8371cccf8a6c176dac46f8ffeda\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:16604638d1a41c10d9375e47a3d400703089cd15",
                      "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:4fb5f7533a77989cbb73d9a4031d8a04827ac489") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:16604638d1a41c10d9375e47a3d400703089cd15\" or \"EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:4fb5f7533a77989cbb73d9a4031d8a04827ac489\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xbl:2744928:249884c6ae3c8436cc9f01b84ddd0e96aa977570",
                      "EMMC:/dev/block/bootdevice/by-name/xbl:2744928:83dfd780dc7c53759cb4265ae2c419ec04d3ad23") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xbl:2744928:249884c6ae3c8436cc9f01b84ddd0e96aa977570\" or \"EMMC:/dev/block/bootdevice/by-name/xbl:2744928:83dfd780dc7c53759cb4265ae2c419ec04d3ad23\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:249884c6ae3c8436cc9f01b84ddd0e96aa977570",
                      "EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:83dfd780dc7c53759cb4265ae2c419ec04d3ad23") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:249884c6ae3c8436cc9f01b84ddd0e96aa977570\" or \"EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:83dfd780dc7c53759cb4265ae2c419ec04d3ad23\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/pmic:39896:c07ac82390cbee994227f6e0b0df034d6105949b",
                      "EMMC:/dev/block/bootdevice/by-name/pmic:39896:d68e75a2a4255fd5c140b68dd956fb76f125f25a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/pmic:39896:c07ac82390cbee994227f6e0b0df034d6105949b\" or \"EMMC:/dev/block/bootdevice/by-name/pmic:39896:d68e75a2a4255fd5c140b68dd956fb76f125f25a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:c07ac82390cbee994227f6e0b0df034d6105949b",
                      "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:d68e75a2a4255fd5c140b68dd956fb76f125f25a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:c07ac82390cbee994227f6e0b0df034d6105949b\" or \"EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:d68e75a2a4255fd5c140b68dd956fb76f125f25a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1974272:41a612b3d8f24509378f73e46da446ab73570235",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1970176:a8085e01a9601f67a0d4dc185030b89fc5be79aa") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1974272:41a612b3d8f24509378f73e46da446ab73570235\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1970176:a8085e01a9601f67a0d4dc185030b89fc5be79aa\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:41a612b3d8f24509378f73e46da446ab73570235",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:a8085e01a9601f67a0d4dc185030b89fc5be79aa") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:41a612b3d8f24509378f73e46da446ab73570235\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:a8085e01a9601f67a0d4dc185030b89fc5be79aa\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:240eeac6ec8e603d10b6271e5ea90824084a5f52",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:3be4a46468d29025500c59f70acf28852f351d9a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:240eeac6ec8e603d10b6271e5ea90824084a5f52\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:3be4a46468d29025500c59f70acf28852f351d9a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:240eeac6ec8e603d10b6271e5ea90824084a5f52",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:3be4a46468d29025500c59f70acf28852f351d9a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:240eeac6ec8e603d10b6271e5ea90824084a5f52\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:3be4a46468d29025500c59f70acf28852f351d9a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hyp:278528:a9f3aae7148693136d198a0e421ac99d42d56f3e",
                      "EMMC:/dev/block/bootdevice/by-name/hyp:278528:66bbb5a89f940b8ef9d0c448b647355ddf43793b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hyp:278528:a9f3aae7148693136d198a0e421ac99d42d56f3e\" or \"EMMC:/dev/block/bootdevice/by-name/hyp:278528:66bbb5a89f940b8ef9d0c448b647355ddf43793b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:a9f3aae7148693136d198a0e421ac99d42d56f3e",
                      "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:66bbb5a89f940b8ef9d0c448b647355ddf43793b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hypbak:278528:a9f3aae7148693136d198a0e421ac99d42d56f3e\" or \"EMMC:/dev/block/bootdevice/by-name/hypbak:278528:66bbb5a89f940b8ef9d0c448b647355ddf43793b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:20ae2972e37f2c7be9d129f3fa1c1ed4d2b720b1",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:7e85db03094d354ca46fba0cc7ef42bf14dc258e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:316072:20ae2972e37f2c7be9d129f3fa1c1ed4d2b720b1\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:316072:7e85db03094d354ca46fba0cc7ef42bf14dc258e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:20ae2972e37f2c7be9d129f3fa1c1ed4d2b720b1",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:7e85db03094d354ca46fba0cc7ef42bf14dc258e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:20ae2972e37f2c7be9d129f3fa1c1ed4d2b720b1\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:7e85db03094d354ca46fba0cc7ef42bf14dc258e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/storsec:49168:7a1f635002c5a164b6de4bf685fb05711b3a3c8b",
                      "EMMC:/dev/block/bootdevice/by-name/storsec:49168:1a5e65a97e0840d857c90142f49bb9828c4a4380") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/storsec:49168:7a1f635002c5a164b6de4bf685fb05711b3a3c8b\" or \"EMMC:/dev/block/bootdevice/by-name/storsec:49168:1a5e65a97e0840d857c90142f49bb9828c4a4380\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:7a1f635002c5a164b6de4bf685fb05711b3a3c8b",
                      "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:1a5e65a97e0840d857c90142f49bb9828c4a4380") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:7a1f635002c5a164b6de4bf685fb05711b3a3c8b\" or \"EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:1a5e65a97e0840d857c90142f49bb9828c4a4380\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abl:151552:8f1a6c6c6e9cab58c5c4f676704a574cfd9c83c5",
                      "EMMC:/dev/block/bootdevice/by-name/abl:151552:faa0480c0a9373a761e072a16fec86b635fc8a0c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abl:151552:8f1a6c6c6e9cab58c5c4f676704a574cfd9c83c5\" or \"EMMC:/dev/block/bootdevice/by-name/abl:151552:faa0480c0a9373a761e072a16fec86b635fc8a0c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8f1a6c6c6e9cab58c5c4f676704a574cfd9c83c5",
                      "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:faa0480c0a9373a761e072a16fec86b635fc8a0c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8f1a6c6c6e9cab58c5c4f676704a574cfd9c83c5\" or \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:faa0480c0a9373a761e072a16fec86b635fc8a0c\" has unexpected contents.");
apply_patch_space(117736960) || abort("E3006: Not enough free space on /cache to apply patches.");
show_progress(0.100000, 70);
if (range_sha1("/dev/block/bootdevice/by-name/system", "938,1,548,698,712,743,750,752,753,1013,1018,1020,1021,1127,1128,1612,1613,2301,2302,2304,2306,2307,2308,2323,2324,2505,2506,3675,3676,3678,3679,3683,3684,3692,3693,3694,3695,9052,9053,9055,9056,9460,9461,9463,9464,10459,10461,16400,16401,16534,16535,19304,19306,25567,25569,32768,32770,32959,32960,34725,34726,34728,34730,34789,34790,34923,34925,34978,34979,34991,34992,35606,35609,35615,35616,35621,35622,35739,35742,36865,36866,36896,36897,37043,37044,37141,38556,40014,40015,40028,40029,40034,40035,40037,40038,42185,42186,42556,42557,42623,42626,42713,42714,42905,42906,45488,45489,45492,45493,45498,45499,45807,45808,49499,49500,49661,49662,49684,49685,49789,49790,50205,50206,51108,51109,51113,51114,51136,51137,52728,52729,52785,52786,52822,52823,57466,57468,62071,62072,62273,62274,63860,63861,63998,63999,64031,64032,64714,64715,65536,65537,66451,66452,66627,66628,69719,69720,72077,72078,72563,72564,77263,77264,79216,79217,79243,79244,79316,79317,82368,82371,85010,85011,86406,86407,86780,86781,86929,86930,87282,87283,98304,98306,98495,98496,99003,99004,102172,102173,102183,102184,104461,104462,104880,104881,104932,104933,104936,104939,104944,104945,106801,106802,106885,106886,106888,106889,106910,106911,107347,107350,107715,107718,108020,108023,108060,108061,109504,109505,109525,109526,109576,109577,109598,109599,109670,109671,110285,110286,113862,113863,113868,113869,113971,113972,115438,115439,116426,116429,116877,116878,116882,116883,116895,116896,116900,116901,116912,116913,116936,116937,118701,118702,118837,118838,119112,119115,120040,120041,120307,120310,122590,122591,122915,122916,125544,125545,125557,125558,125893,125894,127319,127328,127644,127645,128078,128079,128942,129053,129862,129863,130217,130226,130254,130318,131072,131073,132608,132613,132614,132615,132616,132617,132618,132619,132620,132621,132622,132623,132624,132625,132626,132627,132628,132629,132630,132631,132632,132633,132634,132635,132636,132637,132638,132639,132640,132641,132642,132643,132644,132645,132646,132647,132648,132649,132650,132651,132652,132653,132654,132655,132656,132657,132658,132659,132660,132661,132662,132663,132664,132665,132666,132667,132668,132669,132670,132671,132672,132673,132674,132675,132676,132677,132678,132679,132680,132681,132682,132683,132684,132685,132686,132687,132688,132689,132690,132691,132692,132693,132694,132695,132696,132697,132698,132699,132700,132701,132702,132703,132704,132705,132706,132707,132708,132709,132710,132711,132712,132713,132714,132715,132716,132717,132718,132719,132720,132721,132722,132723,132724,132725,132726,132727,132728,132729,132730,132731,132732,132733,132734,132735,132736,132737,132738,132739,132740,132741,132742,132743,132744,132745,132746,132747,132748,132749,132750,132751,132752,132753,132754,132755,132756,132757,132758,132759,132760,132761,132762,132763,132764,132765,132766,132767,132768,132769,132770,132771,132772,132773,132774,132775,132776,132777,132778,132779,132780,132781,132782,132783,132784,132785,132786,132787,132788,132789,132790,132791,132792,132793,132794,132795,132796,132797,132798,132799,132800,132801,132802,132803,132804,132805,132806,132807,132808,132809,132810,132811,132812,132813,132814,132815,132816,132817,132818,132819,132820,132821,132822,132823,132824,132825,132826,132827,132828,132829,132830,132831,132832,132833,132834,132835,132836,132837,132838,132839,132840,132841,132842,132843,132844,132845,132846,132847,132848,132849,132850,132851,132852,132853,132854,132855,132856,132857,132858,132859,132860,132861,132862,132863,132864,132865,132866,132867,132868,132869,132870,132871,132872,132873,132874,132875,132876,132877,132878,132879,132880,132881,132882,132883,132884,132885,132886,132887,132888,132889,132890,132891,132892,132893,132894,132895,132896,132897,132898,132899,132900,132901,132902,132903,132904,132905,132906,132907,132908,132909,132910,132911,132912,132913,132914,132915,132916,132917,132918,132919,132920,132921,132922,132923,132924,132925,132926,132927,132928,132929,132930,132931,132932,132933,132934,132935,132936,132937,132938,132939,132940,132941,132942,132943,132944,132945,132946,132947,132948,132949,132950,132951,132952,132953,132954,132955,132956,132957,132958,132959,132960,132961,132962,132963,132964,132965,132966,132967,132968,132969,132970,132971,132972,132973,132974,132975,132976,132977,132978,132979,132980,132981,132982,132983,132984,132985,132986,132987,132988,132989,132990,132991,132992,132993,132994,132995,132996,132997,132998,132999,133000,133001,133002,133003,133004,133005,133006,133007,133008,133009,133010,133011,133012,133013,133014,133015,133016,133017,133018,133019,133020,133021,133022,133023,133024,133025,133026,133027,133028,133029,133030,133031,133032,133033,133034,133035,133036,133037,133038,133039,133040,133041,133042,133043,133044,133045,133046,133047,133048,133049,133050,133051,133052,133053,133054,133055,133056,133058,133064,133065,133375,133376,133389,133390,133399,133402,133403,133404,133405,133406,133408,133409,133410,133411,133443,133444,133450,133451,133558,133561,133563,133564,134671,134672,134912,134913,134915,134916,134939,134940,135010,135011,135014,135019,135020,135021,135022,135023,135024,135025,135804,135805,135811,135812,136275,136277,136740,136742,136743,136744,136745,136746,136747,136748,136749,136750,136751,136752,136753,136754,136756,136757,136758,136761,137428,137430,137431,137432,137515,139525,139528,139530,139788,139789,139796,139798,140301,140302,140313,140314,140580,140581,140694,140695,140718,140720,140722,140723,149645,149646,157609,157610,159513,159514,159790,159880,161066,161348,162668,163842,164031,164032,164538,177223,177448,177489,177496,179598,182194,182294,182356,182357,183696,184043,185610,196609,197115,229378,229567,229568,230074,262145,262651,294914,295103,295104,295610,327681,328187,360449,360955,393217,393723,425985,426491,458753,459259,491521,492027,524289,524795,557057,557563,589825,590331,622593,623099,655361,655867,688129,688635,689767,690256,690257,691643,691644,693034,693035,694916,694917,695342,695343,720896,720897,721877,721878,733372,733373,733403,733404,735966,735967,735970,735971,736249,736252,736273,736274,736289,736292,746074,747721,748097,748098,748103,748104,748123,748124,748183,748185,748194,748195,748320,748321,748425,748426,748427,748430,753664,753665,774155,780254,780261,780464") == "d9c27bf7387a60da4087b7abffc2ebf3890cf4a8" || block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block("/dev/block/bootdevice/by-name/system");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/system", "938,1,548,698,712,743,750,752,753,1013,1018,1020,1021,1127,1128,1612,1613,2301,2302,2304,2306,2307,2308,2323,2324,2505,2506,3675,3676,3678,3679,3683,3684,3692,3693,3694,3695,9052,9053,9055,9056,9460,9461,9463,9464,10459,10461,16400,16401,16534,16535,19304,19306,25567,25569,32768,32770,32959,32960,34725,34726,34728,34730,34789,34790,34923,34925,34978,34979,34991,34992,35606,35609,35615,35616,35621,35622,35739,35742,36865,36866,36896,36897,37043,37044,37141,38556,40014,40015,40028,40029,40034,40035,40037,40038,42185,42186,42556,42557,42623,42626,42713,42714,42905,42906,45488,45489,45492,45493,45498,45499,45807,45808,49499,49500,49661,49662,49684,49685,49789,49790,50205,50206,51108,51109,51113,51114,51136,51137,52728,52729,52785,52786,52822,52823,57466,57468,62071,62072,62273,62274,63860,63861,63998,63999,64031,64032,64714,64715,65536,65537,66451,66452,66627,66628,69719,69720,72077,72078,72563,72564,77263,77264,79216,79217,79243,79244,79316,79317,82368,82371,85010,85011,86406,86407,86780,86781,86929,86930,87282,87283,98304,98306,98495,98496,99003,99004,102172,102173,102183,102184,104461,104462,104880,104881,104932,104933,104936,104939,104944,104945,106801,106802,106885,106886,106888,106889,106910,106911,107347,107350,107715,107718,108020,108023,108060,108061,109504,109505,109525,109526,109576,109577,109598,109599,109670,109671,110285,110286,113862,113863,113868,113869,113971,113972,115438,115439,116426,116429,116877,116878,116882,116883,116895,116896,116900,116901,116912,116913,116936,116937,118701,118702,118837,118838,119112,119115,120040,120041,120307,120310,122590,122591,122915,122916,125544,125545,125557,125558,125893,125894,127319,127328,127644,127645,128078,128079,128942,129053,129862,129863,130217,130226,130254,130318,131072,131073,132608,132613,132614,132615,132616,132617,132618,132619,132620,132621,132622,132623,132624,132625,132626,132627,132628,132629,132630,132631,132632,132633,132634,132635,132636,132637,132638,132639,132640,132641,132642,132643,132644,132645,132646,132647,132648,132649,132650,132651,132652,132653,132654,132655,132656,132657,132658,132659,132660,132661,132662,132663,132664,132665,132666,132667,132668,132669,132670,132671,132672,132673,132674,132675,132676,132677,132678,132679,132680,132681,132682,132683,132684,132685,132686,132687,132688,132689,132690,132691,132692,132693,132694,132695,132696,132697,132698,132699,132700,132701,132702,132703,132704,132705,132706,132707,132708,132709,132710,132711,132712,132713,132714,132715,132716,132717,132718,132719,132720,132721,132722,132723,132724,132725,132726,132727,132728,132729,132730,132731,132732,132733,132734,132735,132736,132737,132738,132739,132740,132741,132742,132743,132744,132745,132746,132747,132748,132749,132750,132751,132752,132753,132754,132755,132756,132757,132758,132759,132760,132761,132762,132763,132764,132765,132766,132767,132768,132769,132770,132771,132772,132773,132774,132775,132776,132777,132778,132779,132780,132781,132782,132783,132784,132785,132786,132787,132788,132789,132790,132791,132792,132793,132794,132795,132796,132797,132798,132799,132800,132801,132802,132803,132804,132805,132806,132807,132808,132809,132810,132811,132812,132813,132814,132815,132816,132817,132818,132819,132820,132821,132822,132823,132824,132825,132826,132827,132828,132829,132830,132831,132832,132833,132834,132835,132836,132837,132838,132839,132840,132841,132842,132843,132844,132845,132846,132847,132848,132849,132850,132851,132852,132853,132854,132855,132856,132857,132858,132859,132860,132861,132862,132863,132864,132865,132866,132867,132868,132869,132870,132871,132872,132873,132874,132875,132876,132877,132878,132879,132880,132881,132882,132883,132884,132885,132886,132887,132888,132889,132890,132891,132892,132893,132894,132895,132896,132897,132898,132899,132900,132901,132902,132903,132904,132905,132906,132907,132908,132909,132910,132911,132912,132913,132914,132915,132916,132917,132918,132919,132920,132921,132922,132923,132924,132925,132926,132927,132928,132929,132930,132931,132932,132933,132934,132935,132936,132937,132938,132939,132940,132941,132942,132943,132944,132945,132946,132947,132948,132949,132950,132951,132952,132953,132954,132955,132956,132957,132958,132959,132960,132961,132962,132963,132964,132965,132966,132967,132968,132969,132970,132971,132972,132973,132974,132975,132976,132977,132978,132979,132980,132981,132982,132983,132984,132985,132986,132987,132988,132989,132990,132991,132992,132993,132994,132995,132996,132997,132998,132999,133000,133001,133002,133003,133004,133005,133006,133007,133008,133009,133010,133011,133012,133013,133014,133015,133016,133017,133018,133019,133020,133021,133022,133023,133024,133025,133026,133027,133028,133029,133030,133031,133032,133033,133034,133035,133036,133037,133038,133039,133040,133041,133042,133043,133044,133045,133046,133047,133048,133049,133050,133051,133052,133053,133054,133055,133056,133058,133064,133065,133375,133376,133389,133390,133399,133402,133403,133404,133405,133406,133408,133409,133410,133411,133443,133444,133450,133451,133558,133561,133563,133564,134671,134672,134912,134913,134915,134916,134939,134940,135010,135011,135014,135019,135020,135021,135022,135023,135024,135025,135804,135805,135811,135812,136275,136277,136740,136742,136743,136744,136745,136746,136747,136748,136749,136750,136751,136752,136753,136754,136756,136757,136758,136761,137428,137430,137431,137432,137515,139525,139528,139530,139788,139789,139796,139798,140301,140302,140313,140314,140580,140581,140694,140695,140718,140720,140722,140723,149645,149646,157609,157610,159513,159514,159790,159880,161066,161348,162668,163842,164031,164032,164538,177223,177448,177489,177496,179598,182194,182294,182356,182357,183696,184043,185610,196609,197115,229378,229567,229568,230074,262145,262651,294914,295103,295104,295610,327681,328187,360449,360955,393217,393723,425985,426491,458753,459259,491521,492027,524289,524795,557057,557563,589825,590331,622593,623099,655361,655867,688129,688635,689767,690256,690257,691643,691644,693034,693035,694916,694917,695342,695343,720896,720897,721877,721878,733372,733373,733403,733404,735966,735967,735970,735971,736249,736252,736273,736274,736289,736292,746074,747721,748097,748098,748103,748104,748123,748124,748183,748185,748194,748195,748320,748321,748425,748426,748427,748430,753664,753665,774155,780254,780261,780464") && block_image_verify("/dev/block/bootdevice/by-name/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("/dev/block/bootdevice/by-name/vendor", "214,1,438,698,706,716,717,798,799,863,874,879,880,882,883,1349,1399,1491,1492,2061,2067,4077,4078,4203,4266,4972,4973,5650,5651,6579,6584,14192,14193,18865,18866,21718,21719,25693,25694,32768,32770,32959,32960,39061,39062,43818,43819,44824,44826,44842,44844,45139,45140,45241,45242,55213,55216,55234,55235,55280,55281,55299,55301,55350,55351,55371,55372,56171,56172,56185,56186,56220,56221,56584,56586,56587,56588,56589,56591,56592,56593,56594,56596,56597,56598,56599,56601,56872,56873,56896,56899,58755,58756,58760,58762,59033,59034,59057,59060,60916,60917,60922,60923,60935,60936,61432,61434,65536,65537,68076,68077,68080,68081,68643,68644,74366,74367,74368,74369,74382,74383,74807,74808,75008,75012,75857,75859,76734,76735,77977,78035,88647,88648,98062,98063,98304,98306,98495,98496,100858,100859,102304,102305,103997,103999,105639,105640,107450,107451,109076,109077,110919,110920,112451,112452,113748,113749,115062,115063,116413,116414,118093,118094,119911,119912,121300,121301,121325,121326,121350,121351,121375,121376,121400,121401,121628,121629,121743,121744,121768,121769,123380,123381,125110,125111,126833,126834,128335,128484,131072,131073,132155,132156,149814,150020,150126,150164,150348,163842,164031,164032,164538,196609,197115,219978,229376,229378,294912,294914,753664,753665,774155,780254,780261,780623") == "10a3d94661c41d1ccf0acf64088e14f01479395d" || block_image_verify("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block("/dev/block/bootdevice/by-name/vendor");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/vendor", "214,1,438,698,706,716,717,798,799,863,874,879,880,882,883,1349,1399,1491,1492,2061,2067,4077,4078,4203,4266,4972,4973,5650,5651,6579,6584,14192,14193,18865,18866,21718,21719,25693,25694,32768,32770,32959,32960,39061,39062,43818,43819,44824,44826,44842,44844,45139,45140,45241,45242,55213,55216,55234,55235,55280,55281,55299,55301,55350,55351,55371,55372,56171,56172,56185,56186,56220,56221,56584,56586,56587,56588,56589,56591,56592,56593,56594,56596,56597,56598,56599,56601,56872,56873,56896,56899,58755,58756,58760,58762,59033,59034,59057,59060,60916,60917,60922,60923,60935,60936,61432,61434,65536,65537,68076,68077,68080,68081,68643,68644,74366,74367,74368,74369,74382,74383,74807,74808,75008,75012,75857,75859,76734,76735,77977,78035,88647,88648,98062,98063,98304,98306,98495,98496,100858,100859,102304,102305,103997,103999,105639,105640,107450,107451,109076,109077,110919,110920,112451,112452,113748,113749,115062,115063,116413,116414,118093,118094,119911,119912,121300,121301,121325,121326,121350,121351,121375,121376,121400,121401,121628,121629,121743,121744,121768,121769,123380,123381,125110,125111,126833,126834,128335,128484,131072,131073,132155,132156,149814,150020,150126,150164,150348,163842,164031,164032,164538,196609,197115,219978,229376,229378,294912,294914,753664,753665,774155,780254,780261,780623") && block_image_verify("/dev/block/bootdevice/by-name/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;

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


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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:dba7714273c42765af3dee9c6a3e942e8e64742e",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:7cd6f07433c77176a2c9553e85f1f1fe93a6ddc0",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:7cd6f07433c77176a2c9553e85f1f1fe93a6ddc0");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:224808:02b286647f4f58451a8f86426819cac0c6af0818",
                "EMMC:/dev/block/bootdevice/by-name/rpm:224808:02cf70808cd3a6a5b7a3cd48131311cbfc4625e7",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:224808:02cf70808cd3a6a5b7a3cd48131311cbfc4625e7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:dde4ed1dda750fbf460a4f76bb73e4c7e9fb2d69",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:c876477e12c12d5343fd45116c5b6992fa9ddc7a",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:49068:c876477e12c12d5343fd45116c5b6992fa9ddc7a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:117720576:08be1c4e81ef7651f961b6640380bdd9cd40e604",
                "EMMC:/dev/block/bootdevice/by-name/modem:117736960:310ab49b0c2cc8371cccf8a6c176dac46f8ffeda",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:117736960:310ab49b0c2cc8371cccf8a6c176dac46f8ffeda");
patch_partition("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:16604638d1a41c10d9375e47a3d400703089cd15",
                "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:4fb5f7533a77989cbb73d9a4031d8a04827ac489",
                package_extract_file("patch/firmware-update/BTFM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:4fb5f7533a77989cbb73d9a4031d8a04827ac489");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:2744928:249884c6ae3c8436cc9f01b84ddd0e96aa977570",
                "EMMC:/dev/block/bootdevice/by-name/xbl:2744928:83dfd780dc7c53759cb4265ae2c419ec04d3ad23",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:2744928:83dfd780dc7c53759cb4265ae2c419ec04d3ad23");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmic:39896:c07ac82390cbee994227f6e0b0df034d6105949b",
                "EMMC:/dev/block/bootdevice/by-name/pmic:39896:d68e75a2a4255fd5c140b68dd956fb76f125f25a",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmic:39896:d68e75a2a4255fd5c140b68dd956fb76f125f25a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1974272:41a612b3d8f24509378f73e46da446ab73570235",
                "EMMC:/dev/block/bootdevice/by-name/tz:1970176:a8085e01a9601f67a0d4dc185030b89fc5be79aa",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1970176:a8085e01a9601f67a0d4dc185030b89fc5be79aa");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:240eeac6ec8e603d10b6271e5ea90824084a5f52",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:3be4a46468d29025500c59f70acf28852f351d9a",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:3be4a46468d29025500c59f70acf28852f351d9a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:278528:a9f3aae7148693136d198a0e421ac99d42d56f3e",
                "EMMC:/dev/block/bootdevice/by-name/hyp:278528:66bbb5a89f940b8ef9d0c448b647355ddf43793b",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:278528:66bbb5a89f940b8ef9d0c448b647355ddf43793b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:20ae2972e37f2c7be9d129f3fa1c1ed4d2b720b1",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:7e85db03094d354ca46fba0cc7ef42bf14dc258e",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:316072:7e85db03094d354ca46fba0cc7ef42bf14dc258e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:49168:7a1f635002c5a164b6de4bf685fb05711b3a3c8b",
                "EMMC:/dev/block/bootdevice/by-name/storsec:49168:1a5e65a97e0840d857c90142f49bb9828c4a4380",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:49168:1a5e65a97e0840d857c90142f49bb9828c4a4380");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:8f1a6c6c6e9cab58c5c4f676704a574cfd9c83c5",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:faa0480c0a9373a761e072a16fec86b635fc8a0c",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:faa0480c0a9373a761e072a16fec86b635fc8a0c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:dba7714273c42765af3dee9c6a3e942e8e64742e",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:7cd6f07433c77176a2c9553e85f1f1fe93a6ddc0",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:7cd6f07433c77176a2c9553e85f1f1fe93a6ddc0");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:02b286647f4f58451a8f86426819cac0c6af0818",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:02cf70808cd3a6a5b7a3cd48131311cbfc4625e7",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:02cf70808cd3a6a5b7a3cd48131311cbfc4625e7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:dde4ed1dda750fbf460a4f76bb73e4c7e9fb2d69",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:c876477e12c12d5343fd45116c5b6992fa9ddc7a",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:c876477e12c12d5343fd45116c5b6992fa9ddc7a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:249884c6ae3c8436cc9f01b84ddd0e96aa977570",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:83dfd780dc7c53759cb4265ae2c419ec04d3ad23",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:83dfd780dc7c53759cb4265ae2c419ec04d3ad23");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:c07ac82390cbee994227f6e0b0df034d6105949b",
                "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:d68e75a2a4255fd5c140b68dd956fb76f125f25a",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:d68e75a2a4255fd5c140b68dd956fb76f125f25a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:41a612b3d8f24509378f73e46da446ab73570235",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:a8085e01a9601f67a0d4dc185030b89fc5be79aa",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:a8085e01a9601f67a0d4dc185030b89fc5be79aa");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:240eeac6ec8e603d10b6271e5ea90824084a5f52",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:3be4a46468d29025500c59f70acf28852f351d9a",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:3be4a46468d29025500c59f70acf28852f351d9a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:a9f3aae7148693136d198a0e421ac99d42d56f3e",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:66bbb5a89f940b8ef9d0c448b647355ddf43793b",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:278528:66bbb5a89f940b8ef9d0c448b647355ddf43793b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:20ae2972e37f2c7be9d129f3fa1c1ed4d2b720b1",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:7e85db03094d354ca46fba0cc7ef42bf14dc258e",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:7e85db03094d354ca46fba0cc7ef42bf14dc258e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:7a1f635002c5a164b6de4bf685fb05711b3a3c8b",
                "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:1a5e65a97e0840d857c90142f49bb9828c4a4380",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:1a5e65a97e0840d857c90142f49bb9828c4a4380");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8f1a6c6c6e9cab58c5c4f676704a574cfd9c83c5",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:faa0480c0a9373a761e072a16fec86b635fc8a0c",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:faa0480c0a9373a761e072a16fec86b635fc8a0c");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:35513674:a598923ac5e23a3fc9f8f37d2d256d9f46c75ac9",
                "EMMC:/dev/block/bootdevice/by-name/boot:35513674:0189a46334aeb282adc221c6b98c50fdaeaafcbc",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:35513674:0189a46334aeb282adc221c6b98c50fdaeaafcbc");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:dba7714273c42765af3dee9c6a3e942e8e64742e",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:7cd6f07433c77176a2c9553e85f1f1fe93a6ddc0",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:7cd6f07433c77176a2c9553e85f1f1fe93a6ddc0");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:224808:02b286647f4f58451a8f86426819cac0c6af0818",
                "EMMC:/dev/block/bootdevice/by-name/rpm:224808:02cf70808cd3a6a5b7a3cd48131311cbfc4625e7",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:224808:02cf70808cd3a6a5b7a3cd48131311cbfc4625e7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:dde4ed1dda750fbf460a4f76bb73e4c7e9fb2d69",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:c876477e12c12d5343fd45116c5b6992fa9ddc7a",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:49068:c876477e12c12d5343fd45116c5b6992fa9ddc7a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:117720576:08be1c4e81ef7651f961b6640380bdd9cd40e604",
                "EMMC:/dev/block/bootdevice/by-name/modem:117736960:310ab49b0c2cc8371cccf8a6c176dac46f8ffeda",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:117736960:310ab49b0c2cc8371cccf8a6c176dac46f8ffeda");
patch_partition("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:16604638d1a41c10d9375e47a3d400703089cd15",
                "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:4fb5f7533a77989cbb73d9a4031d8a04827ac489",
                package_extract_file("patch/firmware-update/BTFM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:4fb5f7533a77989cbb73d9a4031d8a04827ac489");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:2744928:249884c6ae3c8436cc9f01b84ddd0e96aa977570",
                "EMMC:/dev/block/bootdevice/by-name/xbl:2744928:83dfd780dc7c53759cb4265ae2c419ec04d3ad23",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:2744928:83dfd780dc7c53759cb4265ae2c419ec04d3ad23");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmic:39896:c07ac82390cbee994227f6e0b0df034d6105949b",
                "EMMC:/dev/block/bootdevice/by-name/pmic:39896:d68e75a2a4255fd5c140b68dd956fb76f125f25a",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmic:39896:d68e75a2a4255fd5c140b68dd956fb76f125f25a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1974272:41a612b3d8f24509378f73e46da446ab73570235",
                "EMMC:/dev/block/bootdevice/by-name/tz:1970176:a8085e01a9601f67a0d4dc185030b89fc5be79aa",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1970176:a8085e01a9601f67a0d4dc185030b89fc5be79aa");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:240eeac6ec8e603d10b6271e5ea90824084a5f52",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:3be4a46468d29025500c59f70acf28852f351d9a",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:3be4a46468d29025500c59f70acf28852f351d9a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:278528:a9f3aae7148693136d198a0e421ac99d42d56f3e",
                "EMMC:/dev/block/bootdevice/by-name/hyp:278528:66bbb5a89f940b8ef9d0c448b647355ddf43793b",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:278528:66bbb5a89f940b8ef9d0c448b647355ddf43793b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:20ae2972e37f2c7be9d129f3fa1c1ed4d2b720b1",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:7e85db03094d354ca46fba0cc7ef42bf14dc258e",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:316072:7e85db03094d354ca46fba0cc7ef42bf14dc258e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:49168:7a1f635002c5a164b6de4bf685fb05711b3a3c8b",
                "EMMC:/dev/block/bootdevice/by-name/storsec:49168:1a5e65a97e0840d857c90142f49bb9828c4a4380",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:49168:1a5e65a97e0840d857c90142f49bb9828c4a4380");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:8f1a6c6c6e9cab58c5c4f676704a574cfd9c83c5",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:faa0480c0a9373a761e072a16fec86b635fc8a0c",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:faa0480c0a9373a761e072a16fec86b635fc8a0c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:dba7714273c42765af3dee9c6a3e942e8e64742e",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:7cd6f07433c77176a2c9553e85f1f1fe93a6ddc0",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:7cd6f07433c77176a2c9553e85f1f1fe93a6ddc0");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:02b286647f4f58451a8f86426819cac0c6af0818",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:02cf70808cd3a6a5b7a3cd48131311cbfc4625e7",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:02cf70808cd3a6a5b7a3cd48131311cbfc4625e7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:dde4ed1dda750fbf460a4f76bb73e4c7e9fb2d69",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:c876477e12c12d5343fd45116c5b6992fa9ddc7a",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:c876477e12c12d5343fd45116c5b6992fa9ddc7a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:249884c6ae3c8436cc9f01b84ddd0e96aa977570",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:83dfd780dc7c53759cb4265ae2c419ec04d3ad23",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:83dfd780dc7c53759cb4265ae2c419ec04d3ad23");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:c07ac82390cbee994227f6e0b0df034d6105949b",
                "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:d68e75a2a4255fd5c140b68dd956fb76f125f25a",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:d68e75a2a4255fd5c140b68dd956fb76f125f25a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:41a612b3d8f24509378f73e46da446ab73570235",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:a8085e01a9601f67a0d4dc185030b89fc5be79aa",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:a8085e01a9601f67a0d4dc185030b89fc5be79aa");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:240eeac6ec8e603d10b6271e5ea90824084a5f52",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:3be4a46468d29025500c59f70acf28852f351d9a",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:3be4a46468d29025500c59f70acf28852f351d9a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:a9f3aae7148693136d198a0e421ac99d42d56f3e",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:66bbb5a89f940b8ef9d0c448b647355ddf43793b",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:278528:66bbb5a89f940b8ef9d0c448b647355ddf43793b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:20ae2972e37f2c7be9d129f3fa1c1ed4d2b720b1",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:7e85db03094d354ca46fba0cc7ef42bf14dc258e",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:7e85db03094d354ca46fba0cc7ef42bf14dc258e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:7a1f635002c5a164b6de4bf685fb05711b3a3c8b",
                "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:1a5e65a97e0840d857c90142f49bb9828c4a4380",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:1a5e65a97e0840d857c90142f49bb9828c4a4380");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:8f1a6c6c6e9cab58c5c4f676704a574cfd9c83c5",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:faa0480c0a9373a761e072a16fec86b635fc8a0c",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:faa0480c0a9373a761e072a16fec86b635fc8a0c");
show_progress(0.600000, 600);
ui_print("Patching system image after verification.");
block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");
ui_print("Patching vendor image after verification.");
block_image_update("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
show_progress(0.100000, 2);

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

ui_print("Patching vbmeta dtbo logo binimages...");
