get_device_compatible("falcon") == "OK" || ui_print("This should not happen!!");
getprop("ro.platform.name") == "atlas" || abort("E3004: This package is for \"atlas\" platform devices; this is a \"" + getprop("ro.platform.name") + "\".");
ui_print("Source: Zebra/atlas/atlas:8.1.0/02-52-21.00-ON-U00-STD/532:user/release-keys");
ui_print("Target: Zebra/atlas/atlas:8.1.0/02-52-21.00-ON-U00-STD/532:user/release-keys");
ui_print("Verifying current system...");
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/boot:56880428:cfa586efbdc6ab4518073a49734369a51a4b69b8:56880428:4db7adcc00855b8608f0b1d4dfc685743e434ef5") || abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:56880428:cfa586efbdc6ab4518073a49734369a51a4b69b8:56880428:4db7adcc00855b8608f0b1d4dfc685743e434ef5\" has unexpected contents.");
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1("/dev/block/bootdevice/by-name/system", "444,1,224,225,695,27078,27080,27083,27084,27144,27148,27155,27156,27166,27170,27297,27298,27904,27908,29159,29160,30452,30456,31521,31522,31526,31530,31536,31537,31633,31637,31828,31829,31902,31906,32739,32740,32742,32746,32750,32755,32758,32767,32768,32770,32993,32994,33500,65535,65536,65537,66043,98303,98304,98306,98529,98530,99086,99088,99159,99161,101810,101813,102672,102673,102677,102681,102686,102687,102689,102693,102700,102701,102723,102729,102744,102745,102770,102774,102802,102803,102805,102809,102814,102815,107093,107099,107387,107388,107581,107585,108022,108023,108025,108029,108039,108040,108051,108055,108080,108081,108281,108285,108349,108350,108445,108451,108947,108948,108952,108956,108967,108968,109301,109307,109388,109389,109956,109960,110136,110137,110139,110145,110151,110152,110265,110269,110296,110297,110301,110307,110316,110317,110320,110324,110342,110343,110466,110472,110646,110647,110692,110696,110701,110702,110704,110708,110717,110718,110720,110724,110748,110749,110828,110832,110995,110996,111256,111260,112178,112179,112186,112190,112197,112198,112201,112205,112253,112254,112258,112262,112273,112274,112334,112338,112392,112393,112427,112431,112461,112462,112467,112471,112479,112480,113399,113403,113904,113905,113907,113911,113924,113925,113927,113931,113942,113943,113972,113976,114041,114042,122373,122379,123018,123019,123024,123028,123060,123061,123110,123114,123222,123223,124063,124067,125000,125001,125003,125007,125016,125017,126020,126024,126292,126293,126650,126651,128878,128882,129653,129658,130391,130396,130407,130412,130422,130423,130425,130429,130437,130438,130440,130444,130458,130459,130469,130475,130709,130710,130714,130718,130742,130747,130754,130759,130769,130774,130817,130822,130849,130963,130985,130987,131070,131071,131072,131073,136510,163838,163840,163842,164065,164066,172524,196607,196608,196609,197115,197187,229376,229378,229601,229602,230108,262143,262144,262145,262651,294911,294912,294914,295137,295138,295644,327679,327680,327681,330220,360447,360448,360449,382115,393215,393216,393217,393723,425983,425984,425985,438075,458751,458752,458753,459259,491518,491520,491521,500706,524286,524288,524289,524795,557048,557056,557057,557563,557826,589824,589825,622592,622593,655360,655361,688128,688129,720896,720897,753664,753665,786432,786433,819200,819202,819425,819426,819932,851967,851968,851969,884736,884738,884961,884962,885468,885469,899580,899585,899590,899594,899604,899605,899614,899618,899625,899678,899680,899684,899693,899694,899901,899907,901559,901560,901565,901569,901633,901634,901636,901640,901648,901649,901654,901658,901662,901663,901699,901705,901738,901739,902282,902286,902567,902568,902571,902575,902589,902590,902607,902611,902628,902629,902647,902651,902660,902661,902688,902692,902704,902705,902797,902801,902815,902820,902904,902905,902908,902912,902921,902922,902927,902931,902939,902944,903120,903121,903123,903127,903132,903133,903135,903140,903150,903151,903154,903158,903165,903166,903177,903179,903182,908099,909635,910298,910305,917504") == "a2d832e708a7ae603007f37497da32920648dbc2" || 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", "444,1,224,225,695,27078,27080,27083,27084,27144,27148,27155,27156,27166,27170,27297,27298,27904,27908,29159,29160,30452,30456,31521,31522,31526,31530,31536,31537,31633,31637,31828,31829,31902,31906,32739,32740,32742,32746,32750,32755,32758,32767,32768,32770,32993,32994,33500,65535,65536,65537,66043,98303,98304,98306,98529,98530,99086,99088,99159,99161,101810,101813,102672,102673,102677,102681,102686,102687,102689,102693,102700,102701,102723,102729,102744,102745,102770,102774,102802,102803,102805,102809,102814,102815,107093,107099,107387,107388,107581,107585,108022,108023,108025,108029,108039,108040,108051,108055,108080,108081,108281,108285,108349,108350,108445,108451,108947,108948,108952,108956,108967,108968,109301,109307,109388,109389,109956,109960,110136,110137,110139,110145,110151,110152,110265,110269,110296,110297,110301,110307,110316,110317,110320,110324,110342,110343,110466,110472,110646,110647,110692,110696,110701,110702,110704,110708,110717,110718,110720,110724,110748,110749,110828,110832,110995,110996,111256,111260,112178,112179,112186,112190,112197,112198,112201,112205,112253,112254,112258,112262,112273,112274,112334,112338,112392,112393,112427,112431,112461,112462,112467,112471,112479,112480,113399,113403,113904,113905,113907,113911,113924,113925,113927,113931,113942,113943,113972,113976,114041,114042,122373,122379,123018,123019,123024,123028,123060,123061,123110,123114,123222,123223,124063,124067,125000,125001,125003,125007,125016,125017,126020,126024,126292,126293,126650,126651,128878,128882,129653,129658,130391,130396,130407,130412,130422,130423,130425,130429,130437,130438,130440,130444,130458,130459,130469,130475,130709,130710,130714,130718,130742,130747,130754,130759,130769,130774,130817,130822,130849,130963,130985,130987,131070,131071,131072,131073,136510,163838,163840,163842,164065,164066,172524,196607,196608,196609,197115,197187,229376,229378,229601,229602,230108,262143,262144,262145,262651,294911,294912,294914,295137,295138,295644,327679,327680,327681,330220,360447,360448,360449,382115,393215,393216,393217,393723,425983,425984,425985,438075,458751,458752,458753,459259,491518,491520,491521,500706,524286,524288,524289,524795,557048,557056,557057,557563,557826,589824,589825,622592,622593,655360,655361,688128,688129,720896,720897,753664,753665,786432,786433,819200,819202,819425,819426,819932,851967,851968,851969,884736,884738,884961,884962,885468,885469,899580,899585,899590,899594,899604,899605,899614,899618,899625,899678,899680,899684,899693,899694,899901,899907,901559,901560,901565,901569,901633,901634,901636,901640,901648,901649,901654,901658,901662,901663,901699,901705,901738,901739,902282,902286,902567,902568,902571,902575,902589,902590,902607,902611,902628,902629,902647,902651,902660,902661,902688,902692,902704,902705,902797,902801,902815,902820,902904,902905,902908,902912,902921,902922,902927,902931,902939,902944,903120,903121,903123,903127,903132,903133,903135,903140,903150,903151,903154,903158,903165,903166,903177,903179,903182,908099,909635,910298,910305,917504") && 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;
# Read platform id for APQ 274 and MSM 266
if read_platform_baseband() == "274" then

# ---- radio update verification ----

ui_print("Verifying radio-update...");
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/modem:88080384:0e1c1d671251514359d05fe0f053c7f2858e7706:88080384:9d0b5189a2d6928cdd0d9a978d99b8106cccb855") || abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:88080384:0e1c1d671251514359d05fe0f053c7f2858e7706:88080384:9d0b5189a2d6928cdd0d9a978d99b8106cccb855\" has unexpected contents.");
apply_patch_space(88080384) || abort("E3006: Not enough free space on /cache to apply patches.");
else

# ---- radio update verification ----

ui_print("Verifying radio-update...");
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/modem:88080384:89b9af050db90dac4c00090cc7b65b7838a0cc17:88080384:bf9bae756e3d161d8b9ba4efcabcae1db42309f2") || abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:88080384:89b9af050db90dac4c00090cc7b65b7838a0cc17:88080384:bf9bae756e3d161d8b9ba4efcabcae1db42309f2\" has unexpected contents.");
apply_patch_space(88080384) || abort("E3006: Not enough free space on /cache to apply patches.");
endif;

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

ui_print("Patching system image after verification.");
show_progress(0.900000, 0);
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 boot image...");
show_progress(0.100000, 10);
apply_patch("EMMC:/dev/block/bootdevice/by-name/boot:56880428:cfa586efbdc6ab4518073a49734369a51a4b69b8:56880428:4db7adcc00855b8608f0b1d4dfc685743e434ef5",
            "-", 4db7adcc00855b8608f0b1d4dfc685743e434ef5, 56880428,
            cfa586efbdc6ab4518073a49734369a51a4b69b8,
            package_extract_file("patch/boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:56880428:cfa586efbdc6ab4518073a49734369a51a4b69b8:56880428:4db7adcc00855b8608f0b1d4dfc685743e434ef5");
package_extract_file("adspso.bin", "/dev/block/bootdevice/by-name/dsp");
# Read platform id for APQ 274 and MSM 266
if read_platform_baseband() == "274" then
package_extract_file("tz-APQ.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("devcfg-APQ.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("keymaster-APQ.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("sbl1-APQ.mbn", "/dev/block/bootdevice/by-name/sbl1");
package_extract_file("rpm-APQ.mbn", "/dev/block/bootdevice/by-name/rpm");
package_extract_file("emmc_appsboot-APQ.mbn", "/dev/block/bootdevice/by-name/aboot");

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

ui_print("Patching firmware images...");
apply_patch("EMMC:/dev/block/bootdevice/by-name/modem:88080384:0e1c1d671251514359d05fe0f053c7f2858e7706:88080384:9d0b5189a2d6928cdd0d9a978d99b8106cccb855",
            "-", 9d0b5189a2d6928cdd0d9a978d99b8106cccb855, 88080384,
            0e1c1d671251514359d05fe0f053c7f2858e7706,
            package_extract_file("patch/firmware-update/NON-HLOS-APQ.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:88080384:0e1c1d671251514359d05fe0f053c7f2858e7706:88080384:9d0b5189a2d6928cdd0d9a978d99b8106cccb855");
else
package_extract_file("tz-MSM.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("devcfg-MSM.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("keymaster-MSM.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("sbl1-MSM.mbn", "/dev/block/bootdevice/by-name/sbl1");
package_extract_file("rpm-MSM.mbn", "/dev/block/bootdevice/by-name/rpm");
package_extract_file("emmc_appsboot-MSM.mbn", "/dev/block/bootdevice/by-name/aboot");

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

ui_print("Patching firmware images...");
apply_patch("EMMC:/dev/block/bootdevice/by-name/modem:88080384:89b9af050db90dac4c00090cc7b65b7838a0cc17:88080384:bf9bae756e3d161d8b9ba4efcabcae1db42309f2",
            "-", bf9bae756e3d161d8b9ba4efcabcae1db42309f2, 88080384,
            89b9af050db90dac4c00090cc7b65b7838a0cc17,
            package_extract_file("patch/firmware-update/NON-HLOS-MSM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:88080384:89b9af050db90dac4c00090cc7b65b7838a0cc17:88080384:bf9bae756e3d161d8b9ba4efcabcae1db42309f2");
endif;
set_progress(1.000000);
