getprop("ro.product.device") == "pine" || abort("E3004: This package is for \"pine\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/pine/pine:10/QKQ1.191014.001/V11.0.2.0.QCMCNXM:user/release-keys");
ui_print("Target: Xiaomi/pine/pine:10/QKQ1.191014.001/V12.0.2.0.QCMCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/pine/pine:10/QKQ1.191014.001/V11.0.2.0.QCMCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/pine/pine:10/QKQ1.191014.001/V12.0.2.0.QCMCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/pine/pine:10/QKQ1.191014.001/V11.0.2.0.QCMCNXM:user/release-keys or Xiaomi/pine/pine:10/QKQ1.191014.001/V12.0.2.0.QCMCNXM: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:33554432:a4df46ffe15642d7cb4f94cf27f0e0638c44e7bf",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:218d7ea49c500dbc45e48bb6067a8ac6073b8204") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:a4df46ffe15642d7cb4f94cf27f0e0638c44e7bf\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:218d7ea49c500dbc45e48bb6067a8ac6073b8204\" has unexpected contents.");
apply_patch_space(143626240) || 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/rpm:169092:d6c6d1815715dcd8acbf3562c7dda6becbda3d99",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:fc8f85f577f57dea0444924c642fd48610e94ee3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:d6c6d1815715dcd8acbf3562c7dda6becbda3d99\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:fc8f85f577f57dea0444924c642fd48610e94ee3\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:d6c6d1815715dcd8acbf3562c7dda6becbda3d99",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:fc8f85f577f57dea0444924c642fd48610e94ee3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:d6c6d1815715dcd8acbf3562c7dda6becbda3d99\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:fc8f85f577f57dea0444924c642fd48610e94ee3\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:5ad1c067a09341b38736380f1a580c8d60640936",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:8484aafb4c5cabe14070a1189b2240badb12351c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:5ad1c067a09341b38736380f1a580c8d60640936\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:8484aafb4c5cabe14070a1189b2240badb12351c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:5ad1c067a09341b38736380f1a580c8d60640936",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:8484aafb4c5cabe14070a1189b2240badb12351c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:5ad1c067a09341b38736380f1a580c8d60640936\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:8484aafb4c5cabe14070a1189b2240badb12351c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:774108:7d9066015c8c0517bc37ee7823170215d48e9a45",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:774108:1f0f4a238ecfb9f2f40fe70a2d7124d1e9f54086") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:7d9066015c8c0517bc37ee7823170215d48e9a45\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:1f0f4a238ecfb9f2f40fe70a2d7124d1e9f54086\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:7d9066015c8c0517bc37ee7823170215d48e9a45",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:1f0f4a238ecfb9f2f40fe70a2d7124d1e9f54086") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:7d9066015c8c0517bc37ee7823170215d48e9a45\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:1f0f4a238ecfb9f2f40fe70a2d7124d1e9f54086\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:80d134d527a1e0ffbdfc43dab816999be99d4738",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:3b8a50e24db617bf99a055a5118e2eec128009c7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:80d134d527a1e0ffbdfc43dab816999be99d4738\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:3b8a50e24db617bf99a055a5118e2eec128009c7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4209b311db737dd7f6935e78c585d5c8936a39b3",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:246f25d3e61d3a109208b3317c86d1e23a2ec2a6") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4209b311db737dd7f6935e78c585d5c8936a39b3\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:246f25d3e61d3a109208b3317c86d1e23a2ec2a6\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4209b311db737dd7f6935e78c585d5c8936a39b3",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:246f25d3e61d3a109208b3317c86d1e23a2ec2a6") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4209b311db737dd7f6935e78c585d5c8936a39b3\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:246f25d3e61d3a109208b3317c86d1e23a2ec2a6\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:75972b524b32f0d3b8c41f37f358746326bc6752",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:15fcf5c82ae36c69e8ec254168f04507f73b4384") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:75972b524b32f0d3b8c41f37f358746326bc6752\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:15fcf5c82ae36c69e8ec254168f04507f73b4384\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:eb57e11bc412574a58e7754abccdab2385ecd8ee",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:cd846f643680f4d62040794a273a599f1ad8f862") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:eb57e11bc412574a58e7754abccdab2385ecd8ee\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:cd846f643680f4d62040794a273a599f1ad8f862\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:e0d03eca0b2218d15098976e2223fdad12adfd5d",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:76bea479f46024ed1e2d2e6c2253e37cd98f8481") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:e0d03eca0b2218d15098976e2223fdad12adfd5d\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:76bea479f46024ed1e2d2e6c2253e37cd98f8481\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:e0d03eca0b2218d15098976e2223fdad12adfd5d",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:76bea479f46024ed1e2d2e6c2253e37cd98f8481") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:e0d03eca0b2218d15098976e2223fdad12adfd5d\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:76bea479f46024ed1e2d2e6c2253e37cd98f8481\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:c43318a0e637bbf41beecfb513b82e8822a544c9",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:26bd26994e57a4bcb1b26a6c5fec1cf767ce31fd") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:c43318a0e637bbf41beecfb513b82e8822a544c9\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:26bd26994e57a4bcb1b26a6c5fec1cf767ce31fd\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:c43318a0e637bbf41beecfb513b82e8822a544c9",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:26bd26994e57a4bcb1b26a6c5fec1cf767ce31fd") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:c43318a0e637bbf41beecfb513b82e8822a544c9\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:26bd26994e57a4bcb1b26a6c5fec1cf767ce31fd\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:881208604a8a5183fd59a49753700ffe979d29e2",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:3083ed87538e2d29aa68cb672f0d0d3d0c2889a3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:881208604a8a5183fd59a49753700ffe979d29e2\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:3083ed87538e2d29aa68cb672f0d0d3d0c2889a3\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:54b3b103df1c0c98d84abd3792f746741499cb5e",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:a3c077b0e8bd6ee09ae1563b29ef13fec1d5a3e9") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:54b3b103df1c0c98d84abd3792f746741499cb5e\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:a3c077b0e8bd6ee09ae1563b29ef13fec1d5a3e9\" has unexpected contents.");
apply_patch_space(134217728) || 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", "304,1,520,696,710,720,723,740,747,767,768,955,960,962,963,1069,1070,1550,1551,1553,1555,1556,1557,1572,1573,1710,1711,2062,2168,2538,2539,2541,2542,2545,2546,2554,2555,2556,2557,3022,3107,3447,3615,3869,4153,6225,6319,6978,6979,6981,7267,7269,7270,7833,7835,13774,13775,13908,13909,16678,16680,22610,22611,22613,22615,22674,22675,22808,22810,23152,23156,23168,23169,23329,23333,23341,23342,23350,23354,23359,23360,23382,23386,23390,23391,28265,28266,28275,28279,28283,32770,32958,32959,33464,45777,46437,46439,46463,65537,66042,98306,98494,98495,99000,131073,131578,144531,144804,144806,144820,144821,144871,144873,144882,163842,164030,164031,164536,196609,197114,229378,229566,229567,230072,258205,259023,262145,262650,287678,294912,294914,295102,295103,297429,302038,302039,327681,328186,360449,360954,393217,393722,399397,399602,401754,401758,401769,401806,403257,403261,406571,406575,406611,406613,408332,408340,422327,422349,425985,426490,445354,452652,452912,452913,452990,456180,456498,456629,456762,456895,457739,457869,458002,458135,458753,459258,463771,464664,464665,465442,491521,492026,521431,521444,524289,524794,525644,525691,525705,525712,525733,525744,525745,525747,525754,525755,525759,525760,525764,525765,525772,525775,525801,525802,525809,525810,525813,525815,525824,525826,525839,525840,525855,525856,525913,525915,525918,525919,525960,525962,525985,525988,525997,525998,526012,526015,526048,526050,526061,526062,526083,526085,526091,526093,526430,526432,529139,530109,530427,530593,535143,535145,535165,535178,535193,535196,535205,535212,535257,535259,535261,535262,535268,535269,535318,535328,535330,535337,535339,535372,535383,535409,535434,535435,535469,535471,535473,535474,535506,535526,535537,535538,535547,535550,535553,535554,535566,535576,535691,535692,535694,535695,535717,535744,536560,536562,557057,557562,589825,590330,622593,623098,627682,627712,655361,655866,656737,656747,656753,753664,753665,774003,786268,786431,786432") == "29eff3e2c1169b9f5cfc630e86d8cf65a467a369" || 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", "304,1,520,696,710,720,723,740,747,767,768,955,960,962,963,1069,1070,1550,1551,1553,1555,1556,1557,1572,1573,1710,1711,2062,2168,2538,2539,2541,2542,2545,2546,2554,2555,2556,2557,3022,3107,3447,3615,3869,4153,6225,6319,6978,6979,6981,7267,7269,7270,7833,7835,13774,13775,13908,13909,16678,16680,22610,22611,22613,22615,22674,22675,22808,22810,23152,23156,23168,23169,23329,23333,23341,23342,23350,23354,23359,23360,23382,23386,23390,23391,28265,28266,28275,28279,28283,32770,32958,32959,33464,45777,46437,46439,46463,65537,66042,98306,98494,98495,99000,131073,131578,144531,144804,144806,144820,144821,144871,144873,144882,163842,164030,164031,164536,196609,197114,229378,229566,229567,230072,258205,259023,262145,262650,287678,294912,294914,295102,295103,297429,302038,302039,327681,328186,360449,360954,393217,393722,399397,399602,401754,401758,401769,401806,403257,403261,406571,406575,406611,406613,408332,408340,422327,422349,425985,426490,445354,452652,452912,452913,452990,456180,456498,456629,456762,456895,457739,457869,458002,458135,458753,459258,463771,464664,464665,465442,491521,492026,521431,521444,524289,524794,525644,525691,525705,525712,525733,525744,525745,525747,525754,525755,525759,525760,525764,525765,525772,525775,525801,525802,525809,525810,525813,525815,525824,525826,525839,525840,525855,525856,525913,525915,525918,525919,525960,525962,525985,525988,525997,525998,526012,526015,526048,526050,526061,526062,526083,526085,526091,526093,526430,526432,529139,530109,530427,530593,535143,535145,535165,535178,535193,535196,535205,535212,535257,535259,535261,535262,535268,535269,535318,535328,535330,535337,535339,535372,535383,535409,535434,535435,535469,535471,535473,535474,535506,535526,535537,535538,535547,535550,535553,535554,535566,535576,535691,535692,535694,535695,535717,535744,536560,536562,557057,557562,589825,590330,622593,623098,627682,627712,655361,655866,656737,656747,656753,753664,753665,774003,786268,786431,786432") && 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", "48,1,456,570,578,588,592,597,598,679,683,688,689,952,956,961,32770,32832,32833,33338,40561,43058,65537,66042,70649,71258,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,218824,219089,226097,229376,229378,229440,229441,257987,262077,262143,262144") == "18cb2035aa297c1a52b4b61e0db12d2092751dea" || 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", "48,1,456,570,578,588,592,597,598,679,683,688,689,952,956,961,32770,32832,32833,33338,40561,43058,65537,66042,70649,71258,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,218824,219089,226097,229376,229378,229440,229441,257987,262077,262143,262144") && 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 ----

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:33554432:a4df46ffe15642d7cb4f94cf27f0e0638c44e7bf",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:218d7ea49c500dbc45e48bb6067a8ac6073b8204",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:218d7ea49c500dbc45e48bb6067a8ac6073b8204");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:d6c6d1815715dcd8acbf3562c7dda6becbda3d99",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:fc8f85f577f57dea0444924c642fd48610e94ee3",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:fc8f85f577f57dea0444924c642fd48610e94ee3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:5ad1c067a09341b38736380f1a580c8d60640936",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:8484aafb4c5cabe14070a1189b2240badb12351c",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:8484aafb4c5cabe14070a1189b2240badb12351c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:774108:7d9066015c8c0517bc37ee7823170215d48e9a45",
                "EMMC:/dev/block/bootdevice/by-name/aboot:774108:1f0f4a238ecfb9f2f40fe70a2d7124d1e9f54086",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/aboot:774108:1f0f4a238ecfb9f2f40fe70a2d7124d1e9f54086");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:80d134d527a1e0ffbdfc43dab816999be99d4738",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:3b8a50e24db617bf99a055a5118e2eec128009c7",
                package_extract_file("patch/firmware-update/cmnlib64_30.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:3b8a50e24db617bf99a055a5118e2eec128009c7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4209b311db737dd7f6935e78c585d5c8936a39b3",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:246f25d3e61d3a109208b3317c86d1e23a2ec2a6",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:246f25d3e61d3a109208b3317c86d1e23a2ec2a6");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:75972b524b32f0d3b8c41f37f358746326bc6752",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:15fcf5c82ae36c69e8ec254168f04507f73b4384",
                package_extract_file("patch/firmware-update/cmnlib_30.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:15fcf5c82ae36c69e8ec254168f04507f73b4384");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:eb57e11bc412574a58e7754abccdab2385ecd8ee",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:cd846f643680f4d62040794a273a599f1ad8f862",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:134217728:cd846f643680f4d62040794a273a599f1ad8f862");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:e0d03eca0b2218d15098976e2223fdad12adfd5d",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:76bea479f46024ed1e2d2e6c2253e37cd98f8481",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:76bea479f46024ed1e2d2e6c2253e37cd98f8481");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:c43318a0e637bbf41beecfb513b82e8822a544c9",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:26bd26994e57a4bcb1b26a6c5fec1cf767ce31fd",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:409044:26bd26994e57a4bcb1b26a6c5fec1cf767ce31fd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:d6c6d1815715dcd8acbf3562c7dda6becbda3d99",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:fc8f85f577f57dea0444924c642fd48610e94ee3",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:fc8f85f577f57dea0444924c642fd48610e94ee3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:5ad1c067a09341b38736380f1a580c8d60640936",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:8484aafb4c5cabe14070a1189b2240badb12351c",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:8484aafb4c5cabe14070a1189b2240badb12351c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:7d9066015c8c0517bc37ee7823170215d48e9a45",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:1f0f4a238ecfb9f2f40fe70a2d7124d1e9f54086",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abootbak:774108:1f0f4a238ecfb9f2f40fe70a2d7124d1e9f54086");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4209b311db737dd7f6935e78c585d5c8936a39b3",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:246f25d3e61d3a109208b3317c86d1e23a2ec2a6",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:246f25d3e61d3a109208b3317c86d1e23a2ec2a6");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:e0d03eca0b2218d15098976e2223fdad12adfd5d",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:76bea479f46024ed1e2d2e6c2253e37cd98f8481",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:76bea479f46024ed1e2d2e6c2253e37cd98f8481");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:c43318a0e637bbf41beecfb513b82e8822a544c9",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:26bd26994e57a4bcb1b26a6c5fec1cf767ce31fd",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:26bd26994e57a4bcb1b26a6c5fec1cf767ce31fd");
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...");
package_extract_file("firmware-update/splash.img", "/dev/block/bootdevice/by-name/splash");
patch_partition("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:881208604a8a5183fd59a49753700ffe979d29e2",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:3083ed87538e2d29aa68cb672f0d0d3d0c2889a3",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:3083ed87538e2d29aa68cb672f0d0d3d0c2889a3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:54b3b103df1c0c98d84abd3792f746741499cb5e",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:a3c077b0e8bd6ee09ae1563b29ef13fec1d5a3e9",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:a3c077b0e8bd6ee09ae1563b29ef13fec1d5a3e9");
