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_ru/pine:10/QKQ1.191014.001/V11.0.1.0.QCMRUXM:user/release-keys");
ui_print("Target: Xiaomi/pine_ru/pine:10/QKQ1.191014.001/V11.0.2.0.QCMRUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/pine_ru/pine:10/QKQ1.191014.001/V11.0.1.0.QCMRUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/pine_ru/pine:10/QKQ1.191014.001/V11.0.2.0.QCMRUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/pine_ru/pine:10/QKQ1.191014.001/V11.0.1.0.QCMRUXM:user/release-keys or Xiaomi/pine_ru/pine:10/QKQ1.191014.001/V11.0.2.0.QCMRUXM: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:bc5918a85780a901ef0ece9bbf25da2e08ca2d9d",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:936ecedbc9e5a42445cda791051189a11bf406ba") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:bc5918a85780a901ef0ece9bbf25da2e08ca2d9d\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:936ecedbc9e5a42445cda791051189a11bf406ba\" has unexpected contents.");
apply_patch_space(39563264) || 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:e7d11dff0697ebc4db4efebb235f34b12806a338",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:1dc8874b86000c0194bd8f70565cd560497e1431") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:e7d11dff0697ebc4db4efebb235f34b12806a338\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:1dc8874b86000c0194bd8f70565cd560497e1431\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:e7d11dff0697ebc4db4efebb235f34b12806a338",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:1dc8874b86000c0194bd8f70565cd560497e1431") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:e7d11dff0697ebc4db4efebb235f34b12806a338\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:1dc8874b86000c0194bd8f70565cd560497e1431\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cd50e4979431a0c21ed9cdee7a1cd3d54c396fc2",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:894f1c5b1859aa78f4529210d6b375991c4479dd") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cd50e4979431a0c21ed9cdee7a1cd3d54c396fc2\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:894f1c5b1859aa78f4529210d6b375991c4479dd\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cd50e4979431a0c21ed9cdee7a1cd3d54c396fc2",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:894f1c5b1859aa78f4529210d6b375991c4479dd") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cd50e4979431a0c21ed9cdee7a1cd3d54c396fc2\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:894f1c5b1859aa78f4529210d6b375991c4479dd\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:774108:7f932281cf83d4cf8451418fdfdcba5d91ff64db",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:774108:af89020ec574530601d7806eb9c78e4395b165d7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:7f932281cf83d4cf8451418fdfdcba5d91ff64db\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:af89020ec574530601d7806eb9c78e4395b165d7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:7f932281cf83d4cf8451418fdfdcba5d91ff64db",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:af89020ec574530601d7806eb9c78e4395b165d7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:7f932281cf83d4cf8451418fdfdcba5d91ff64db\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:af89020ec574530601d7806eb9c78e4395b165d7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:cbf1b0e62339599e81ca06109ebdc6fa9893d93c",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:2270226b0870d27de9253f4a1df95a75a9e64294") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:cbf1b0e62339599e81ca06109ebdc6fa9893d93c\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:2270226b0870d27de9253f4a1df95a75a9e64294\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:34e5784ec433b490dfb0b7fc63f61b87696ff726",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:920602e214efbfa08f7e2a597564d8ff3750b6de") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:34e5784ec433b490dfb0b7fc63f61b87696ff726\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:920602e214efbfa08f7e2a597564d8ff3750b6de\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:34e5784ec433b490dfb0b7fc63f61b87696ff726",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:920602e214efbfa08f7e2a597564d8ff3750b6de") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:34e5784ec433b490dfb0b7fc63f61b87696ff726\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:920602e214efbfa08f7e2a597564d8ff3750b6de\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:6bc5587e2cc48b4e86fef99a0688633bda248d0f",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:f4259c06780d1e89dff0138609613c5389c5a819") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:6bc5587e2cc48b4e86fef99a0688633bda248d0f\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:f4259c06780d1e89dff0138609613c5389c5a819\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:bb4e7c32960f558754b2b79bb72989c405bd89bd",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:36f060b70c4997ff95d02d09f538e500c2e926d5") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:bb4e7c32960f558754b2b79bb72989c405bd89bd\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:36f060b70c4997ff95d02d09f538e500c2e926d5\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:aef574cbcd28865bd4257b3a6cf3b0826575da77",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:0c4b983d9fa2bd84e1023e8fc3fffa1501279252") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:aef574cbcd28865bd4257b3a6cf3b0826575da77\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:0c4b983d9fa2bd84e1023e8fc3fffa1501279252\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:aef574cbcd28865bd4257b3a6cf3b0826575da77",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:0c4b983d9fa2bd84e1023e8fc3fffa1501279252") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:aef574cbcd28865bd4257b3a6cf3b0826575da77\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:0c4b983d9fa2bd84e1023e8fc3fffa1501279252\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:408956:1d3f8d9cf7af78a75d58cd1778850ef65c2f338d",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:2113fc25c9be9a2018872ca28f21043d7f360afc") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:408956:1d3f8d9cf7af78a75d58cd1778850ef65c2f338d\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:408956:2113fc25c9be9a2018872ca28f21043d7f360afc\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:1d3f8d9cf7af78a75d58cd1778850ef65c2f338d",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:2113fc25c9be9a2018872ca28f21043d7f360afc") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:1d3f8d9cf7af78a75d58cd1778850ef65c2f338d\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:2113fc25c9be9a2018872ca28f21043d7f360afc\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:d3724b4cedb1742326c066ffb3af06fc645fbb2d",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:06ac9026a6a297044e594538f46a9ad9da3f252c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:d3724b4cedb1742326c066ffb3af06fc645fbb2d\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:06ac9026a6a297044e594538f46a9ad9da3f252c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:217f535f08375ce62f6d181d69f7263226f29333",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:856fbce175e0fd110a790dd4cd5e7159038cb674") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:217f535f08375ce62f6d181d69f7263226f29333\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:856fbce175e0fd110a790dd4cd5e7159038cb674\" 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", "64,1,554,696,710,716,32770,32958,32959,33464,65537,66042,98306,98494,98495,99000,131073,131578,163842,164030,164031,164536,196609,197114,229378,229566,229567,230072,262145,262650,294914,295102,295103,295608,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,699313,753664,753665,774003,786268,786431,786432") == "c31d8272b5d3636519a3bd9680d0edba538d65de" || 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", "64,1,554,696,710,716,32770,32958,32959,33464,65537,66042,98306,98494,98495,99000,131073,131578,163842,164030,164031,164536,196609,197114,229378,229566,229567,230072,262145,262650,294914,295102,295103,295608,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,699313,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", "72,1,456,570,578,588,592,597,598,679,683,688,689,952,956,961,962,1186,1194,1202,1203,1246,1254,1259,1260,1263,1267,1271,1272,1529,1560,1845,1846,2293,2760,3216,3264,3759,3760,3898,3942,4328,4329,4961,4962,5431,32770,32832,32833,33338,65537,66042,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,215789,229376,229378,229440,229441,257987,262077,262143,262144") == "0459666305771654fc0ac6f53312f1f3926c68f9" || 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", "72,1,456,570,578,588,592,597,598,679,683,688,689,952,956,961,962,1186,1194,1202,1203,1246,1254,1259,1260,1263,1267,1271,1272,1529,1560,1845,1846,2293,2760,3216,3264,3759,3760,3898,3942,4328,4329,4961,4962,5431,32770,32832,32833,33338,65537,66042,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,215789,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 ----


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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:e7d11dff0697ebc4db4efebb235f34b12806a338",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:1dc8874b86000c0194bd8f70565cd560497e1431",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:1dc8874b86000c0194bd8f70565cd560497e1431");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cd50e4979431a0c21ed9cdee7a1cd3d54c396fc2",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:894f1c5b1859aa78f4529210d6b375991c4479dd",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:894f1c5b1859aa78f4529210d6b375991c4479dd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:774108:7f932281cf83d4cf8451418fdfdcba5d91ff64db",
                "EMMC:/dev/block/bootdevice/by-name/aboot:774108:af89020ec574530601d7806eb9c78e4395b165d7",
                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:af89020ec574530601d7806eb9c78e4395b165d7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:cbf1b0e62339599e81ca06109ebdc6fa9893d93c",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:2270226b0870d27de9253f4a1df95a75a9e64294",
                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:2270226b0870d27de9253f4a1df95a75a9e64294");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:34e5784ec433b490dfb0b7fc63f61b87696ff726",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:920602e214efbfa08f7e2a597564d8ff3750b6de",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:920602e214efbfa08f7e2a597564d8ff3750b6de");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:6bc5587e2cc48b4e86fef99a0688633bda248d0f",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:f4259c06780d1e89dff0138609613c5389c5a819",
                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:f4259c06780d1e89dff0138609613c5389c5a819");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:bb4e7c32960f558754b2b79bb72989c405bd89bd",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:36f060b70c4997ff95d02d09f538e500c2e926d5",
                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:36f060b70c4997ff95d02d09f538e500c2e926d5");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:aef574cbcd28865bd4257b3a6cf3b0826575da77",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:0c4b983d9fa2bd84e1023e8fc3fffa1501279252",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:0c4b983d9fa2bd84e1023e8fc3fffa1501279252");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:408956:1d3f8d9cf7af78a75d58cd1778850ef65c2f338d",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:2113fc25c9be9a2018872ca28f21043d7f360afc",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:408956:2113fc25c9be9a2018872ca28f21043d7f360afc");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:e7d11dff0697ebc4db4efebb235f34b12806a338",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:1dc8874b86000c0194bd8f70565cd560497e1431",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:1dc8874b86000c0194bd8f70565cd560497e1431");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cd50e4979431a0c21ed9cdee7a1cd3d54c396fc2",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:894f1c5b1859aa78f4529210d6b375991c4479dd",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:894f1c5b1859aa78f4529210d6b375991c4479dd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:7f932281cf83d4cf8451418fdfdcba5d91ff64db",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:af89020ec574530601d7806eb9c78e4395b165d7",
                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:af89020ec574530601d7806eb9c78e4395b165d7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:34e5784ec433b490dfb0b7fc63f61b87696ff726",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:920602e214efbfa08f7e2a597564d8ff3750b6de",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:920602e214efbfa08f7e2a597564d8ff3750b6de");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:aef574cbcd28865bd4257b3a6cf3b0826575da77",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:0c4b983d9fa2bd84e1023e8fc3fffa1501279252",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:0c4b983d9fa2bd84e1023e8fc3fffa1501279252");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:1d3f8d9cf7af78a75d58cd1778850ef65c2f338d",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:2113fc25c9be9a2018872ca28f21043d7f360afc",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:2113fc25c9be9a2018872ca28f21043d7f360afc");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:33554432:bc5918a85780a901ef0ece9bbf25da2e08ca2d9d",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:936ecedbc9e5a42445cda791051189a11bf406ba",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:936ecedbc9e5a42445cda791051189a11bf406ba");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:e7d11dff0697ebc4db4efebb235f34b12806a338",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:1dc8874b86000c0194bd8f70565cd560497e1431",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:1dc8874b86000c0194bd8f70565cd560497e1431");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cd50e4979431a0c21ed9cdee7a1cd3d54c396fc2",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:894f1c5b1859aa78f4529210d6b375991c4479dd",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:894f1c5b1859aa78f4529210d6b375991c4479dd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:774108:7f932281cf83d4cf8451418fdfdcba5d91ff64db",
                "EMMC:/dev/block/bootdevice/by-name/aboot:774108:af89020ec574530601d7806eb9c78e4395b165d7",
                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:af89020ec574530601d7806eb9c78e4395b165d7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:cbf1b0e62339599e81ca06109ebdc6fa9893d93c",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:2270226b0870d27de9253f4a1df95a75a9e64294",
                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:2270226b0870d27de9253f4a1df95a75a9e64294");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:34e5784ec433b490dfb0b7fc63f61b87696ff726",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:920602e214efbfa08f7e2a597564d8ff3750b6de",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:920602e214efbfa08f7e2a597564d8ff3750b6de");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:6bc5587e2cc48b4e86fef99a0688633bda248d0f",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:f4259c06780d1e89dff0138609613c5389c5a819",
                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:f4259c06780d1e89dff0138609613c5389c5a819");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:bb4e7c32960f558754b2b79bb72989c405bd89bd",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:36f060b70c4997ff95d02d09f538e500c2e926d5",
                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:36f060b70c4997ff95d02d09f538e500c2e926d5");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:aef574cbcd28865bd4257b3a6cf3b0826575da77",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:0c4b983d9fa2bd84e1023e8fc3fffa1501279252",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:0c4b983d9fa2bd84e1023e8fc3fffa1501279252");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:408956:1d3f8d9cf7af78a75d58cd1778850ef65c2f338d",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:2113fc25c9be9a2018872ca28f21043d7f360afc",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:408956:2113fc25c9be9a2018872ca28f21043d7f360afc");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:e7d11dff0697ebc4db4efebb235f34b12806a338",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:1dc8874b86000c0194bd8f70565cd560497e1431",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:1dc8874b86000c0194bd8f70565cd560497e1431");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cd50e4979431a0c21ed9cdee7a1cd3d54c396fc2",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:894f1c5b1859aa78f4529210d6b375991c4479dd",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:894f1c5b1859aa78f4529210d6b375991c4479dd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:7f932281cf83d4cf8451418fdfdcba5d91ff64db",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:af89020ec574530601d7806eb9c78e4395b165d7",
                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:af89020ec574530601d7806eb9c78e4395b165d7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:34e5784ec433b490dfb0b7fc63f61b87696ff726",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:920602e214efbfa08f7e2a597564d8ff3750b6de",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:920602e214efbfa08f7e2a597564d8ff3750b6de");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:aef574cbcd28865bd4257b3a6cf3b0826575da77",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:0c4b983d9fa2bd84e1023e8fc3fffa1501279252",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:0c4b983d9fa2bd84e1023e8fc3fffa1501279252");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:1d3f8d9cf7af78a75d58cd1778850ef65c2f338d",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:2113fc25c9be9a2018872ca28f21043d7f360afc",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:2113fc25c9be9a2018872ca28f21043d7f360afc");
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:d3724b4cedb1742326c066ffb3af06fc645fbb2d",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:06ac9026a6a297044e594538f46a9ad9da3f252c",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:06ac9026a6a297044e594538f46a9ad9da3f252c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:217f535f08375ce62f6d181d69f7263226f29333",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:856fbce175e0fd110a790dd4cd5e7159038cb674",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:856fbce175e0fd110a790dd4cd5e7159038cb674");
