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/V12.0.3.0.QCMCNXM:user/release-keys");
ui_print("Target: Xiaomi/pine/pine:10/QKQ1.191014.001/V12.0.4.0.QCMCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/pine/pine:10/QKQ1.191014.001/V12.0.3.0.QCMCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/pine/pine:10/QKQ1.191014.001/V12.0.4.0.QCMCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/pine/pine:10/QKQ1.191014.001/V12.0.3.0.QCMCNXM:user/release-keys or Xiaomi/pine/pine:10/QKQ1.191014.001/V12.0.4.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:90be4245c16d821ca022a4b16f0fa32b1c4b5020",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:5ec01f563e1074b48c0d5a0ad2a6a5fb49a67a21") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:90be4245c16d821ca022a4b16f0fa32b1c4b5020\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:5ec01f563e1074b48c0d5a0ad2a6a5fb49a67a21\" has unexpected contents.");
apply_patch_space(70672384) || 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:a557785d367e67357ac77c312ec310176f647b2b",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:78753b27f410957c36688186312cfc2b523957af") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:a557785d367e67357ac77c312ec310176f647b2b\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:78753b27f410957c36688186312cfc2b523957af\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:a557785d367e67357ac77c312ec310176f647b2b",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:78753b27f410957c36688186312cfc2b523957af") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:a557785d367e67357ac77c312ec310176f647b2b\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:78753b27f410957c36688186312cfc2b523957af\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:4f7adadc7591bbaf95afc4bfa861e3cb9db6b2d6",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ed03b7763fa31d124fd439e8f9b89b5a27735ce5") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:4f7adadc7591bbaf95afc4bfa861e3cb9db6b2d6\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ed03b7763fa31d124fd439e8f9b89b5a27735ce5\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:4f7adadc7591bbaf95afc4bfa861e3cb9db6b2d6",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ed03b7763fa31d124fd439e8f9b89b5a27735ce5") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:4f7adadc7591bbaf95afc4bfa861e3cb9db6b2d6\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ed03b7763fa31d124fd439e8f9b89b5a27735ce5\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:774108:7938f064c98976a59beda8c0e13080d689e94410",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:774108:41287dca364ae9391c66f7a41397fc091823f9c7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:7938f064c98976a59beda8c0e13080d689e94410\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:41287dca364ae9391c66f7a41397fc091823f9c7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:7938f064c98976a59beda8c0e13080d689e94410",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:41287dca364ae9391c66f7a41397fc091823f9c7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:7938f064c98976a59beda8c0e13080d689e94410\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:41287dca364ae9391c66f7a41397fc091823f9c7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:b56dcd811c91d74fd266d352b4b943bc309777d3",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:e764f704b52c03d135cf7a09a7d6d1ec9f7c0fdb") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:b56dcd811c91d74fd266d352b4b943bc309777d3\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:e764f704b52c03d135cf7a09a7d6d1ec9f7c0fdb\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:6cd6bad956bd36cd970645ac42b07fc580fc3e58",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:d6e7a3f69bf7c2abb24258d9963dc0e8ac707a70") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:6cd6bad956bd36cd970645ac42b07fc580fc3e58\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:d6e7a3f69bf7c2abb24258d9963dc0e8ac707a70\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:6cd6bad956bd36cd970645ac42b07fc580fc3e58",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:d6e7a3f69bf7c2abb24258d9963dc0e8ac707a70") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:6cd6bad956bd36cd970645ac42b07fc580fc3e58\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:d6e7a3f69bf7c2abb24258d9963dc0e8ac707a70\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:3866c6025f8be5a2574fcf45b1660e4f5af5b5f7",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:543a8bdce2ccf0c1e36c4746ef5b4df13dfaca03") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:3866c6025f8be5a2574fcf45b1660e4f5af5b5f7\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:543a8bdce2ccf0c1e36c4746ef5b4df13dfaca03\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:48ccb68c6b028ef1a7a34751fda4074386be027c",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:9366bf6cf2bf7e918ec095f7278e9979f054c338") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:48ccb68c6b028ef1a7a34751fda4074386be027c\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:9366bf6cf2bf7e918ec095f7278e9979f054c338\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:1fd02ba3ebd331e8103e0727874166c1e2f1ed42",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:78b47ce56dd09e230c03db5a3fe115ba0dc0a8ee") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:1fd02ba3ebd331e8103e0727874166c1e2f1ed42\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:78b47ce56dd09e230c03db5a3fe115ba0dc0a8ee\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:1fd02ba3ebd331e8103e0727874166c1e2f1ed42",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:78b47ce56dd09e230c03db5a3fe115ba0dc0a8ee") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:1fd02ba3ebd331e8103e0727874166c1e2f1ed42\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:78b47ce56dd09e230c03db5a3fe115ba0dc0a8ee\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dsp:16777216:6787312050920f31699322f694b34d7eb30ecb3c",
                      "EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dsp:16777216:6787312050920f31699322f694b34d7eb30ecb3c\" or \"EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:a2e11cfbc5343aa2b5c4185a51fb08f5e1502fa8",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:060454b47fcbc36a0409558f6c488d4866d4543c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:a2e11cfbc5343aa2b5c4185a51fb08f5e1502fa8\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:060454b47fcbc36a0409558f6c488d4866d4543c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:a2e11cfbc5343aa2b5c4185a51fb08f5e1502fa8",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:060454b47fcbc36a0409558f6c488d4866d4543c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:a2e11cfbc5343aa2b5c4185a51fb08f5e1502fa8\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:060454b47fcbc36a0409558f6c488d4866d4543c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:6c4675550b289821eadfc51860ae5b04424eef17",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:7d38b5451a93909371f5555699ad0ec8cbf00058") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:6c4675550b289821eadfc51860ae5b04424eef17\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:7d38b5451a93909371f5555699ad0ec8cbf00058\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:843d5c52b8f9a6c931aeb4c8ae5ba38b9b67741b",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:45ba578b577b198f3d6f07805fe6a5dea24af7b2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:843d5c52b8f9a6c931aeb4c8ae5ba38b9b67741b\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:45ba578b577b198f3d6f07805fe6a5dea24af7b2\" 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", "112,1,521,696,710,740,747,767,768,955,960,962,963,1069,1070,1550,1551,1553,1555,1556,1557,1572,1573,1710,1711,2538,2539,2541,2542,2545,2546,2554,2555,2556,2557,6978,6979,6981,6982,7266,7267,7269,7270,7833,7835,13774,13775,13908,13909,16678,16680,20541,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,720897,721402,725482,753664,753665,774003,786268,786431,786432") == "2529b2f980e9d6f445ac114531f58c8b0a472ba1" || 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", "112,1,521,696,710,740,747,767,768,955,960,962,963,1069,1070,1550,1551,1553,1555,1556,1557,1572,1573,1710,1711,2538,2539,2541,2542,2545,2546,2554,2555,2556,2557,6978,6979,6981,6982,7266,7267,7269,7270,7833,7835,13774,13775,13908,13909,16678,16680,20541,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,720897,721402,725482,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", "424,1,456,570,578,588,592,597,598,679,683,688,689,952,956,961,962,964,965,1189,1197,1205,1211,1223,1227,1231,1232,1235,1239,1243,1244,1817,1818,1853,1883,3731,3732,3870,3914,4127,4165,4300,4301,4933,4934,5670,5675,8854,8855,30498,30499,31985,31986,32768,32770,32832,32833,40594,40599,50522,50524,50544,50546,50865,50866,51192,51193,51487,51488,51796,51797,52079,52080,52374,52375,52746,52747,52821,52822,56251,56252,56462,56463,56518,56521,56539,56540,56585,56586,56604,56606,56655,56656,56687,56688,57575,57576,57589,57590,57620,57621,57719,57720,57994,57995,58006,58007,58011,58012,58159,58160,58162,58163,58358,58549,58729,58730,58806,58807,58808,58809,58821,58823,60089,60090,61227,61229,61650,61651,61925,61926,62350,62351,62525,62529,63370,63371,64279,64280,64701,64721,65067,65398,65536,65537,73762,73763,74749,74750,84501,84502,85980,85981,87644,87646,89306,89307,91082,91083,92745,92746,94470,94471,96164,96165,97379,97380,98304,98306,98368,98369,99276,99277,100598,100599,101825,101826,103149,103150,104536,104537,105829,105830,107132,107133,108487,108488,109782,109783,111039,111040,112275,112276,113628,113629,114811,114812,116164,116165,117403,117404,118213,118214,118238,118239,118263,118264,118520,118521,118545,118546,118570,118571,118595,118596,118620,118621,118721,118722,118963,118964,118988,118989,119126,119127,119151,119152,119176,119177,119786,119787,119811,119812,119836,119837,120049,120050,120094,120095,120119,120120,120144,120145,120169,120170,120194,120195,120536,120537,120561,120562,120699,120700,120724,120725,120749,120750,121386,121387,122588,122589,123908,123909,124099,124100,124124,124125,124149,124150,125191,125192,126485,126486,127638,127639,128886,128887,130103,130104,131072,131073,131800,131801,133051,133052,134265,134266,135414,135415,136555,136556,137700,137701,138850,138851,139316,139317,139341,139342,139366,139367,139623,139624,139648,139649,139673,139674,139698,139699,139723,139724,140065,140066,140090,140091,140134,140135,140229,140230,140254,140255,140279,140280,140889,140890,140914,140915,140939,140940,141196,141197,141221,141222,141246,141247,141271,141272,141296,141297,141349,141350,141639,141640,141664,141665,141802,141803,141827,141828,141852,141853,142565,142566,142804,142805,142829,142830,142854,142855,143718,143719,145471,145472,147193,147194,148934,148935,149157,149158,149182,149183,149207,149208,149232,149233,149257,149258,149599,149600,149624,149625,150683,150684,152173,152174,153538,153539,154884,154885,156162,156163,157521,157522,158862,158863,160119,160120,161436,161437,163148,163149,163840,163842,163904,163905,165434,165435,178221,178222,183236,183452,183558,183596,183781,196609,197114,222973,229376,229378,229440,229441,257987,262077,262143,262144") == "b5c52dcf8611a081077e49ce6589ecea04823e3b" || 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", "424,1,456,570,578,588,592,597,598,679,683,688,689,952,956,961,962,964,965,1189,1197,1205,1211,1223,1227,1231,1232,1235,1239,1243,1244,1817,1818,1853,1883,3731,3732,3870,3914,4127,4165,4300,4301,4933,4934,5670,5675,8854,8855,30498,30499,31985,31986,32768,32770,32832,32833,40594,40599,50522,50524,50544,50546,50865,50866,51192,51193,51487,51488,51796,51797,52079,52080,52374,52375,52746,52747,52821,52822,56251,56252,56462,56463,56518,56521,56539,56540,56585,56586,56604,56606,56655,56656,56687,56688,57575,57576,57589,57590,57620,57621,57719,57720,57994,57995,58006,58007,58011,58012,58159,58160,58162,58163,58358,58549,58729,58730,58806,58807,58808,58809,58821,58823,60089,60090,61227,61229,61650,61651,61925,61926,62350,62351,62525,62529,63370,63371,64279,64280,64701,64721,65067,65398,65536,65537,73762,73763,74749,74750,84501,84502,85980,85981,87644,87646,89306,89307,91082,91083,92745,92746,94470,94471,96164,96165,97379,97380,98304,98306,98368,98369,99276,99277,100598,100599,101825,101826,103149,103150,104536,104537,105829,105830,107132,107133,108487,108488,109782,109783,111039,111040,112275,112276,113628,113629,114811,114812,116164,116165,117403,117404,118213,118214,118238,118239,118263,118264,118520,118521,118545,118546,118570,118571,118595,118596,118620,118621,118721,118722,118963,118964,118988,118989,119126,119127,119151,119152,119176,119177,119786,119787,119811,119812,119836,119837,120049,120050,120094,120095,120119,120120,120144,120145,120169,120170,120194,120195,120536,120537,120561,120562,120699,120700,120724,120725,120749,120750,121386,121387,122588,122589,123908,123909,124099,124100,124124,124125,124149,124150,125191,125192,126485,126486,127638,127639,128886,128887,130103,130104,131072,131073,131800,131801,133051,133052,134265,134266,135414,135415,136555,136556,137700,137701,138850,138851,139316,139317,139341,139342,139366,139367,139623,139624,139648,139649,139673,139674,139698,139699,139723,139724,140065,140066,140090,140091,140134,140135,140229,140230,140254,140255,140279,140280,140889,140890,140914,140915,140939,140940,141196,141197,141221,141222,141246,141247,141271,141272,141296,141297,141349,141350,141639,141640,141664,141665,141802,141803,141827,141828,141852,141853,142565,142566,142804,142805,142829,142830,142854,142855,143718,143719,145471,145472,147193,147194,148934,148935,149157,149158,149182,149183,149207,149208,149232,149233,149257,149258,149599,149600,149624,149625,150683,150684,152173,152174,153538,153539,154884,154885,156162,156163,157521,157522,158862,158863,160119,160120,161436,161437,163148,163149,163840,163842,163904,163905,165434,165435,178221,178222,183236,183452,183558,183596,183781,196609,197114,222973,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:90be4245c16d821ca022a4b16f0fa32b1c4b5020",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:5ec01f563e1074b48c0d5a0ad2a6a5fb49a67a21",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:5ec01f563e1074b48c0d5a0ad2a6a5fb49a67a21");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:a557785d367e67357ac77c312ec310176f647b2b",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:78753b27f410957c36688186312cfc2b523957af",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:78753b27f410957c36688186312cfc2b523957af");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:4f7adadc7591bbaf95afc4bfa861e3cb9db6b2d6",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ed03b7763fa31d124fd439e8f9b89b5a27735ce5",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ed03b7763fa31d124fd439e8f9b89b5a27735ce5");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:774108:7938f064c98976a59beda8c0e13080d689e94410",
                "EMMC:/dev/block/bootdevice/by-name/aboot:774108:41287dca364ae9391c66f7a41397fc091823f9c7",
                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:41287dca364ae9391c66f7a41397fc091823f9c7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:b56dcd811c91d74fd266d352b4b943bc309777d3",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:e764f704b52c03d135cf7a09a7d6d1ec9f7c0fdb",
                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:e764f704b52c03d135cf7a09a7d6d1ec9f7c0fdb");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:6cd6bad956bd36cd970645ac42b07fc580fc3e58",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:d6e7a3f69bf7c2abb24258d9963dc0e8ac707a70",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:d6e7a3f69bf7c2abb24258d9963dc0e8ac707a70");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:3866c6025f8be5a2574fcf45b1660e4f5af5b5f7",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:543a8bdce2ccf0c1e36c4746ef5b4df13dfaca03",
                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:543a8bdce2ccf0c1e36c4746ef5b4df13dfaca03");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:48ccb68c6b028ef1a7a34751fda4074386be027c",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:9366bf6cf2bf7e918ec095f7278e9979f054c338",
                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:9366bf6cf2bf7e918ec095f7278e9979f054c338");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:1fd02ba3ebd331e8103e0727874166c1e2f1ed42",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:78b47ce56dd09e230c03db5a3fe115ba0dc0a8ee",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:78b47ce56dd09e230c03db5a3fe115ba0dc0a8ee");
patch_partition("EMMC:/dev/block/bootdevice/by-name/dsp:16777216:6787312050920f31699322f694b34d7eb30ecb3c",
                "EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900",
                package_extract_file("patch/firmware-update/adspso.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:a2e11cfbc5343aa2b5c4185a51fb08f5e1502fa8",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:060454b47fcbc36a0409558f6c488d4866d4543c",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:409044:060454b47fcbc36a0409558f6c488d4866d4543c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:a557785d367e67357ac77c312ec310176f647b2b",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:78753b27f410957c36688186312cfc2b523957af",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:78753b27f410957c36688186312cfc2b523957af");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:4f7adadc7591bbaf95afc4bfa861e3cb9db6b2d6",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ed03b7763fa31d124fd439e8f9b89b5a27735ce5",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ed03b7763fa31d124fd439e8f9b89b5a27735ce5");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:7938f064c98976a59beda8c0e13080d689e94410",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:41287dca364ae9391c66f7a41397fc091823f9c7",
                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:41287dca364ae9391c66f7a41397fc091823f9c7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:6cd6bad956bd36cd970645ac42b07fc580fc3e58",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:d6e7a3f69bf7c2abb24258d9963dc0e8ac707a70",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:d6e7a3f69bf7c2abb24258d9963dc0e8ac707a70");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:1fd02ba3ebd331e8103e0727874166c1e2f1ed42",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:78b47ce56dd09e230c03db5a3fe115ba0dc0a8ee",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:78b47ce56dd09e230c03db5a3fe115ba0dc0a8ee");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:a2e11cfbc5343aa2b5c4185a51fb08f5e1502fa8",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:060454b47fcbc36a0409558f6c488d4866d4543c",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:060454b47fcbc36a0409558f6c488d4866d4543c");
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:6c4675550b289821eadfc51860ae5b04424eef17",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:7d38b5451a93909371f5555699ad0ec8cbf00058",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:7d38b5451a93909371f5555699ad0ec8cbf00058");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:843d5c52b8f9a6c931aeb4c8ae5ba38b9b67741b",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:45ba578b577b198f3d6f07805fe6a5dea24af7b2",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:45ba578b577b198f3d6f07805fe6a5dea24af7b2");
