getprop("ro.product.device") == "chiron" || abort("E3004: This package is for \"chiron\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/chiron/chiron:8.0.0/OPR1.170623.027/9.4.11:user/release-keys");
ui_print("Target: Xiaomi/chiron/chiron:8.0.0/OPR1.170623.027/9.4.18:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/chiron/chiron:8.0.0/OPR1.170623.027/9.4.11:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/chiron/chiron:8.0.0/OPR1.170623.027/9.4.18:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/chiron/chiron:8.0.0/OPR1.170623.027/9.4.11:user/release-keys or Xiaomi/chiron/chiron:8.0.0/OPR1.170623.027/9.4.18:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
show_progress(0.100000, 5);
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/boot:19174730:d7d9027852adfd80687e00a7579202be59eb5ee6:19174730:473f827cbcc811e824b4f2b8faeaddb3e2cc6b01") || abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:19174730:d7d9027852adfd80687e00a7579202be59eb5ee6:19174730:473f827cbcc811e824b4f2b8faeaddb3e2cc6b01\" has unexpected contents.");
apply_patch_space(110039040) || 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", "180,1,320,321,826,828,829,20988,32767,32768,32770,33089,33090,40794,65535,65536,65537,66043,98302,98304,98306,98625,98626,99132,131071,131072,131073,131579,132363,163840,163842,164161,164162,164668,196607,196608,196609,197115,229375,229376,229378,229697,229698,230204,262143,262144,262145,262651,294911,294912,294914,295233,295234,323695,323699,324335,324338,324992,324993,324995,324999,325032,325033,325388,325392,325459,327679,327680,327681,328187,360447,360448,360449,360955,360961,393216,393217,393723,393729,425984,425985,426491,426494,458752,458753,459259,491519,491520,491521,492027,524287,524288,524289,524795,557055,557056,557057,557563,589823,589824,589825,590331,622591,622592,622593,623099,655359,655360,655361,655867,688126,688128,688129,688635,720894,720896,720897,721403,753662,753664,753665,754171,786430,786432,786433,786939,819198,819200,819202,819521,819522,820028,851966,851968,851969,852475,884734,884736,884738,885057,885058,903412,917316,917317,917502,917504,917505,918011,950270,950272,950273,950779,951613,983040,983041,1015808,1015809,1048576,1048577,1081344,1081345,1114112,1114113,1146880,1146881,1179648,1179649,1212416,1212417,1245184,1245185,1277952,1277953,1278459,1280493,1284380,1285751,1285876,1300430,1300437,1310720") == "03502ac0680fb6b93be5e77cffa26cb51e440e7e" || 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", "180,1,320,321,826,828,829,20988,32767,32768,32770,33089,33090,40794,65535,65536,65537,66043,98302,98304,98306,98625,98626,99132,131071,131072,131073,131579,132363,163840,163842,164161,164162,164668,196607,196608,196609,197115,229375,229376,229378,229697,229698,230204,262143,262144,262145,262651,294911,294912,294914,295233,295234,323695,323699,324335,324338,324992,324993,324995,324999,325032,325033,325388,325392,325459,327679,327680,327681,328187,360447,360448,360449,360955,360961,393216,393217,393723,393729,425984,425985,426491,426494,458752,458753,459259,491519,491520,491521,492027,524287,524288,524289,524795,557055,557056,557057,557563,589823,589824,589825,590331,622591,622592,622593,623099,655359,655360,655361,655867,688126,688128,688129,688635,720894,720896,720897,721403,753662,753664,753665,754171,786430,786432,786433,786939,819198,819200,819202,819521,819522,820028,851966,851968,851969,852475,884734,884736,884738,885057,885058,903412,917316,917317,917502,917504,917505,918011,950270,950272,950273,950779,951613,983040,983041,1015808,1015809,1048576,1048577,1081344,1081345,1114112,1114113,1146880,1146881,1179648,1179649,1212416,1212417,1245184,1245185,1277952,1277953,1278459,1280493,1284380,1285751,1285876,1300430,1300437,1310720") && 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;

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

ui_print("Patching boot image...");
show_progress(0.100000, 10);
apply_patch("EMMC:/dev/block/bootdevice/by-name/boot:19174730:d7d9027852adfd80687e00a7579202be59eb5ee6:19174730:473f827cbcc811e824b4f2b8faeaddb3e2cc6b01",
            "-", 473f827cbcc811e824b4f2b8faeaddb3e2cc6b01, 19174730,
            d7d9027852adfd80687e00a7579202be59eb5ee6, package_extract_file("patch/boot.img.p")) || abort("Failed to apply patch \"patch/boot.img.p \".");

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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hyp");
package_extract_file("firmware-update/pmic.elf", "/dev/block/bootdevice/by-name/pmic");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsec");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/keymaster.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xbl");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpm");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak");
package_extract_file("firmware-update/pmic.elf", "/dev/block/bootdevice/by-name/pmicbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
package_extract_file("firmware-update/keymaster.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xblbak");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpmbak");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
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.");
show_progress(0.100000, 2);
