getprop("ro.product.device") == "spes" || getprop("ro.product.device") == "spesn" || abort("E3004: This package is for \"spes\" and \"spesn\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print(" ");
ui_print("Prepare installer...");
ui_print("=====================================================");
package_extract_file("META-INF/com/mobx/busybox", "/tmp/busybox");
run_program("/system/bin/chmod", "777", "/tmp/busybox");
package_extract_file("META-INF/com/mobx/installer.sh", "/tmp/installer.sh");
run_program("/system/bin/sh", "/tmp/installer.sh");
ui_print("=====================================================");
ui_print(" ");
# ---- radio update tasks ----

ui_print("Flashing firmware images...");
ui_print("=====================================================");
package_extract_file("images/dsp.img", "/dev/block/bootdevice/by-name/dsp_a");
package_extract_file("images/dsp.img", "/dev/block/bootdevice/by-name/dsp_b");
package_extract_file("images/xbl_config.img", "/dev/block/bootdevice/by-name/xbl_config_a");
package_extract_file("images/xbl_config.img", "/dev/block/bootdevice/by-name/xbl_config_b");
package_extract_file("images/modem.img", "/dev/block/bootdevice/by-name/modem_a");
package_extract_file("images/modem.img", "/dev/block/bootdevice/by-name/modem_b");
package_extract_file("images/rpm.img", "/dev/block/bootdevice/by-name/rpm_a");
package_extract_file("images/rpm.img", "/dev/block/bootdevice/by-name/rpm_b");
package_extract_file("images/tz.img", "/dev/block/bootdevice/by-name/tz_a");
package_extract_file("images/tz.img", "/dev/block/bootdevice/by-name/tz_b");
package_extract_file("images/bluetooth.img", "/dev/block/bootdevice/by-name/bluetooth_a");
package_extract_file("images/bluetooth.img", "/dev/block/bootdevice/by-name/bluetooth_b");
package_extract_file("images/abl.img", "/dev/block/bootdevice/by-name/abl_a");
package_extract_file("images/abl.img", "/dev/block/bootdevice/by-name/abl_b");
package_extract_file("images/featenabler.img", "/dev/block/bootdevice/by-name/featenabler_a");
package_extract_file("images/featenabler.img", "/dev/block/bootdevice/by-name/featenabler_b");
package_extract_file("images/keymaster.img", "/dev/block/bootdevice/by-name/keymaster_a");
package_extract_file("images/keymaster.img", "/dev/block/bootdevice/by-name/keymaster_b");
package_extract_file("images/uefisecapp.img", "/dev/block/bootdevice/by-name/uefisecapp_a");
package_extract_file("images/uefisecapp.img", "/dev/block/bootdevice/by-name/uefisecapp_b");
package_extract_file("images/qupfw.img", "/dev/block/bootdevice/by-name/qupfw_a");
package_extract_file("images/qupfw.img", "/dev/block/bootdevice/by-name/qupfw_b");
package_extract_file("images/xbl.img", "/dev/block/bootdevice/by-name/xbl_a");
package_extract_file("images/xbl.img", "/dev/block/bootdevice/by-name/xbl_b");
package_extract_file("images/devcfg.img", "/dev/block/bootdevice/by-name/devcfg_a");
package_extract_file("images/devcfg.img", "/dev/block/bootdevice/by-name/devcfg_b");
package_extract_file("images/hyp.img", "/dev/block/bootdevice/by-name/hyp_a");
package_extract_file("images/hyp.img", "/dev/block/bootdevice/by-name/hyp_b");
package_extract_file("images/imagefv.img", "/dev/block/bootdevice/by-name/imagefv_a");
package_extract_file("images/imagefv.img", "/dev/block/bootdevice/by-name/imagefv_b");
ui_print("=====================================================");
ui_print(" ");
# --- Start patching dynamic partitions ---

# Update dynamic partition metadata
ui_print("Flashing partition to slot a :");
assert(update_dynamic_partitions(package_extract_file("dynamic_partitions_op_list")));
ui_print(" ");
ui_print(" ");
ui_print("Maintainer: mobx(@mobxprjkt)");
# Patch partition system
ui_print("=====================================================");
ui_print("- Flashing system partition...");
show_progress(0.500000, 0);
block_image_update(map_partition("system_a"), package_extract_file("path/system.transfer.list"), "path/system.new.dat.br", "path/system.patch.dat") ||
  abort("E1001: Failed to flash system_a partition.");

# Patch partition system_ext

ui_print("- Flashing system_ext partition...");
show_progress(0.100000, 0);
block_image_update(map_partition("system_ext_a"), package_extract_file("path/system_ext.transfer.list"), "path/system_ext.new.dat.br", "path/system_ext.patch.dat") ||
  abort("E2001: Failed to flash system_ext_a partition.");

# Patch partition product

ui_print("- Flashing product partition...");
show_progress(0.100000, 0);
block_image_update(map_partition("product_a"), package_extract_file("path/product.transfer.list"), "path/product.new.dat.br", "path/product.patch.dat") ||
  abort("E2001: Failed to flash product_a partition.");

# Patch partition vendor

ui_print("- Flashing vendor partition...");
show_progress(0.100000, 0);
block_image_update(map_partition("vendor_a"), package_extract_file("path/vendor.transfer.list"), "path/vendor.new.dat.br", "path/vendor.patch.dat") ||
  abort("E2001: Failed to flash vendor_a partition.");
ui_print("=====================================================");
ui_print(" ");
# --- End patching dynamic partitions ---
ui_print("Flashing boot vbmeta dtbo logo binimages...");
ui_print("=====================================================");
package_extract_file("images/boot.img", "/dev/block/bootdevice/by-name/boot_a");
package_extract_file("images/boot.img", "/dev/block/bootdevice/by-name/boot_b");
package_extract_file("images/vendor_boot.img", "/dev/block/bootdevice/by-name/vendor_boot_a");
package_extract_file("images/vendor_boot.img", "/dev/block/bootdevice/by-name/vendor_boot_b");
package_extract_file("images/dtbo.img", "/dev/block/bootdevice/by-name/dtbo_a");
package_extract_file("images/dtbo.img", "/dev/block/bootdevice/by-name/dtbo_b");
package_extract_file("images/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta_a");
package_extract_file("images/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta_b");
package_extract_file("images/vbmeta_system.img", "/dev/block/bootdevice/by-name/vbmeta_system_a");
package_extract_file("images/vbmeta_system.img", "/dev/block/bootdevice/by-name/vbmeta_system_b");
ui_print("=====================================================");
run_program("/system/bin/bootctl", "set-active-boot-slot", "0");
set_progress(1.000000);

run_program("/sbin/sh", "-c", "rm -f /data/cache/command");
run_program("/sbin/sh", "-c", "rm -rf /data/system/package_cache");
run_program("/sbin/sh", "-c", "rm -rf /data/data/com.google.android.gms/app_dg_cache");
run_program("/sbin/sh", "-c", "rm -f /data/data/com.google.android.gms/databases/dg.db");
run_program("/tmp/busybox", "rm", "-rf", "/tmp/*");

set_progress(1.000000);
