getprop("ro.product.device") == "platina" || abort("E3004: This package is for \"platina\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/platina/platina:10/QKQ1.190910.002/V12.0.2.0.QDTCNXM:user/release-keys");
ui_print("Target: Xiaomi/platina/platina:10/QKQ1.190910.002/V12.5.1.0.QDTCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/platina/platina:10/QKQ1.190910.002/V12.0.2.0.QDTCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/platina/platina:10/QKQ1.190910.002/V12.5.1.0.QDTCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/platina/platina:10/QKQ1.190910.002/V12.0.2.0.QDTCNXM:user/release-keys or Xiaomi/platina/platina:10/QKQ1.190910.002/V12.5.1.0.QDTCNXM: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:35366218:f20c0633babc5029876eb8aefdb8b307e4175926",
                      "EMMC:/dev/block/bootdevice/by-name/boot:35366218:70e313506f706e92c9274a28889fa5bfef66c76d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:35366218:f20c0633babc5029876eb8aefdb8b307e4175926\" or \"EMMC:/dev/block/bootdevice/by-name/boot:35366218:70e313506f706e92c9274a28889fa5bfef66c76d\" has unexpected contents.");
apply_patch_space(175992832) || 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/abl:151552:a4d14a2a1151d9fe497e79347dcda5bd518f7dc2",
                      "EMMC:/dev/block/bootdevice/by-name/abl:151552:102a3b070a939c3509182b8ce9acb33fd8771592") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abl:151552:a4d14a2a1151d9fe497e79347dcda5bd518f7dc2\" or \"EMMC:/dev/block/bootdevice/by-name/abl:151552:102a3b070a939c3509182b8ce9acb33fd8771592\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:a4d14a2a1151d9fe497e79347dcda5bd518f7dc2",
                      "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:102a3b070a939c3509182b8ce9acb33fd8771592") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:a4d14a2a1151d9fe497e79347dcda5bd518f7dc2\" or \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:102a3b070a939c3509182b8ce9acb33fd8771592\" has unexpected contents.");
apply_patch_space(151552) || 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", "272,1,518,698,712,722,725,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,23267,32770,32959,32960,33466,51320,52392,52651,52800,53042,53372,65537,66043,98306,98495,98496,99002,131073,131579,155903,160393,163842,164031,164032,164538,196609,197115,205830,216414,216415,229376,229378,229567,229568,234324,234325,245881,245882,260001,260002,260290,260291,262144,262145,265643,294914,295103,295104,295610,327681,328187,360449,360955,393217,393723,425985,426491,429193,429303,458753,459259,491521,492027,500365,500418,500420,500577,500637,500746,500867,500920,500926,501187,501262,501374,510953,510957,511069,511073,511092,511102,511115,511122,511137,511147,511155,511159,511209,511211,511247,511258,511270,511275,511285,511297,511303,511311,511324,511328,511341,511345,511348,511351,514413,514774,514813,514814,516230,517491,517493,518991,524289,524795,557057,557563,589825,590331,601929,602285,603350,603355,603356,603368,603369,603378,603380,603383,607731,607739,607753,607754,607763,607764,607807,607808,607835,607838,607842,607854,607857,607862,607868,607877,607882,607886,607899,607903,607913,607914,607917,607918,607928,607929,607939,607941,607955,607957,607970,607979,607988,607990,607995,608009,608019,608058,608061,608073,608076,608079,608471,608474,608496,608497,608509,608511,608512,608519,608597,608598,608603,608606,608624,608625,608634,608639,608641,608642,608651,608653,608966,608968,609611,609614,609981,610012,610041,610042,610063,610064,610136,610165,610276,610278,622593,623099,655361,655867,688129,688635,720897,721403,753665,754171,759367,774155,780254,780261,780713") == "39123a44ea1b37a42aed15d038b9181febbcd5d9" || 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", "272,1,518,698,712,722,725,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,23267,32770,32959,32960,33466,51320,52392,52651,52800,53042,53372,65537,66043,98306,98495,98496,99002,131073,131579,155903,160393,163842,164031,164032,164538,196609,197115,205830,216414,216415,229376,229378,229567,229568,234324,234325,245881,245882,260001,260002,260290,260291,262144,262145,265643,294914,295103,295104,295610,327681,328187,360449,360955,393217,393723,425985,426491,429193,429303,458753,459259,491521,492027,500365,500418,500420,500577,500637,500746,500867,500920,500926,501187,501262,501374,510953,510957,511069,511073,511092,511102,511115,511122,511137,511147,511155,511159,511209,511211,511247,511258,511270,511275,511285,511297,511303,511311,511324,511328,511341,511345,511348,511351,514413,514774,514813,514814,516230,517491,517493,518991,524289,524795,557057,557563,589825,590331,601929,602285,603350,603355,603356,603368,603369,603378,603380,603383,607731,607739,607753,607754,607763,607764,607807,607808,607835,607838,607842,607854,607857,607862,607868,607877,607882,607886,607899,607903,607913,607914,607917,607918,607928,607929,607939,607941,607955,607957,607970,607979,607988,607990,607995,608009,608019,608058,608061,608073,608076,608079,608471,608474,608496,608497,608509,608511,608512,608519,608597,608598,608603,608606,608624,608625,608634,608639,608641,608642,608651,608653,608966,608968,609611,609614,609981,610012,610041,610042,610063,610064,610136,610165,610276,610278,622593,623099,655361,655867,688129,688635,720897,721403,753665,754171,759367,774155,780254,780261,780713") && 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", "70,1,440,698,706,716,717,798,799,863,864,866,32770,32959,32960,33466,65537,66043,98306,98495,98496,99002,131073,131579,163842,164031,164032,164538,196609,197115,200890,201211,201212,203024,203042,205032,205033,205057,205058,205933,206048,206139,206140,208914,208915,211781,211785,211807,211808,211832,211838,214293,214294,214296,214298,214322,214323,214333,214364,214370,214381,229376,229378,294912,294914,753664,753665,774155,780254,780261,780624") == "2092109f7ed5b331a4022ce4c463e41c3a7f6e36" || 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", "70,1,440,698,706,716,717,798,799,863,864,866,32770,32959,32960,33466,65537,66043,98306,98495,98496,99002,131073,131579,163842,164031,164032,164538,196609,197115,200890,201211,201212,203024,203042,205032,205033,205057,205058,205933,206048,206139,206140,208914,208915,211781,211785,211807,211808,211832,211838,214293,214294,214296,214298,214322,214323,214333,214364,214370,214381,229376,229378,294912,294914,753664,753665,774155,780254,780261,780624") && 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/abl:151552:a4d14a2a1151d9fe497e79347dcda5bd518f7dc2",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:102a3b070a939c3509182b8ce9acb33fd8771592",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:102a3b070a939c3509182b8ce9acb33fd8771592");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:a4d14a2a1151d9fe497e79347dcda5bd518f7dc2",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:102a3b070a939c3509182b8ce9acb33fd8771592",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:102a3b070a939c3509182b8ce9acb33fd8771592");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:35366218:f20c0633babc5029876eb8aefdb8b307e4175926",
                "EMMC:/dev/block/bootdevice/by-name/boot:35366218:70e313506f706e92c9274a28889fa5bfef66c76d",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:35366218:70e313506f706e92c9274a28889fa5bfef66c76d");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:a4d14a2a1151d9fe497e79347dcda5bd518f7dc2",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:102a3b070a939c3509182b8ce9acb33fd8771592",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:102a3b070a939c3509182b8ce9acb33fd8771592");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:a4d14a2a1151d9fe497e79347dcda5bd518f7dc2",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:102a3b070a939c3509182b8ce9acb33fd8771592",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:102a3b070a939c3509182b8ce9acb33fd8771592");
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...");
