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/V11.0.2.0.QDTMIXM:user/release-keys");
ui_print("Target: Xiaomi/platina/platina:10/QKQ1.190910.002/V11.0.3.0.QDTMIXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/platina/platina:10/QKQ1.190910.002/V11.0.2.0.QDTMIXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/platina/platina:10/QKQ1.190910.002/V11.0.3.0.QDTMIXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/platina/platina:10/QKQ1.190910.002/V11.0.2.0.QDTMIXM:user/release-keys or Xiaomi/platina/platina:10/QKQ1.190910.002/V11.0.3.0.QDTMIXM: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:a81ec6e99cab8a3d9b5b0147e60b0db39557db96",
                      "EMMC:/dev/block/bootdevice/by-name/boot:35366218:29f49c43a28b0fdebd0259ad0ce3f4843fdf5f87") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:35366218:a81ec6e99cab8a3d9b5b0147e60b0db39557db96\" or \"EMMC:/dev/block/bootdevice/by-name/boot:35366218:29f49c43a28b0fdebd0259ad0ce3f4843fdf5f87\" has unexpected contents.");
apply_patch_space(35366218) || 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/cmnlib:222192:56bf86853c72040fb19f8cdc5981d27d7eb8bbcd",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:1d8c7abeb212adeeb1ec1ba94188be2daa6ba0d3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:56bf86853c72040fb19f8cdc5981d27d7eb8bbcd\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:1d8c7abeb212adeeb1ec1ba94188be2daa6ba0d3\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:56bf86853c72040fb19f8cdc5981d27d7eb8bbcd",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:1d8c7abeb212adeeb1ec1ba94188be2daa6ba0d3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:56bf86853c72040fb19f8cdc5981d27d7eb8bbcd\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:1d8c7abeb212adeeb1ec1ba94188be2daa6ba0d3\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpm:224808:92b232971a7f825aaaef2b585f0751bbedcdc416",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:224808:a8eac8e62a0c89400f8d616110399a1ef0a701c7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:224808:92b232971a7f825aaaef2b585f0751bbedcdc416\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:224808:a8eac8e62a0c89400f8d616110399a1ef0a701c7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:92b232971a7f825aaaef2b585f0751bbedcdc416",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:a8eac8e62a0c89400f8d616110399a1ef0a701c7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:92b232971a7f825aaaef2b585f0751bbedcdc416\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:a8eac8e62a0c89400f8d616110399a1ef0a701c7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:fc0e22587c0c8aff95f69fb7fa6db66e1ba8cfe1",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:194a3aab4c286fdfe7c3e349a9fdfab565b7434d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:49068:fc0e22587c0c8aff95f69fb7fa6db66e1ba8cfe1\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:49068:194a3aab4c286fdfe7c3e349a9fdfab565b7434d\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:fc0e22587c0c8aff95f69fb7fa6db66e1ba8cfe1",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:194a3aab4c286fdfe7c3e349a9fdfab565b7434d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:fc0e22587c0c8aff95f69fb7fa6db66e1ba8cfe1\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:194a3aab4c286fdfe7c3e349a9fdfab565b7434d\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:117720576:f7980b0b86c72b4636efe4a7ae4cb10f7b4e4ef3",
                      "EMMC:/dev/block/bootdevice/by-name/modem:117720576:18872937eca543e689a64228d4a1a3f4a7ef0028") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:117720576:f7980b0b86c72b4636efe4a7ae4cb10f7b4e4ef3\" or \"EMMC:/dev/block/bootdevice/by-name/modem:117720576:18872937eca543e689a64228d4a1a3f4a7ef0028\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:21ce08ce51fc5a1396a0c090f4c68c875f40982a",
                      "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:adeffde141d2285061b1866ba9a1a6b4957b0f78") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:21ce08ce51fc5a1396a0c090f4c68c875f40982a\" or \"EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:adeffde141d2285061b1866ba9a1a6b4957b0f78\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xbl:2744848:d682eb9bc7b58330dcf1821d76477bf7afa46719",
                      "EMMC:/dev/block/bootdevice/by-name/xbl:2744848:7b56068cc7ad440003242f637b4aaecfc8bf015c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xbl:2744848:d682eb9bc7b58330dcf1821d76477bf7afa46719\" or \"EMMC:/dev/block/bootdevice/by-name/xbl:2744848:7b56068cc7ad440003242f637b4aaecfc8bf015c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:d682eb9bc7b58330dcf1821d76477bf7afa46719",
                      "EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:7b56068cc7ad440003242f637b4aaecfc8bf015c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:d682eb9bc7b58330dcf1821d76477bf7afa46719\" or \"EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:7b56068cc7ad440003242f637b4aaecfc8bf015c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/pmic:39896:58ff932418139582ddbb4a793ed965e860f5c986",
                      "EMMC:/dev/block/bootdevice/by-name/pmic:39896:1c3ed5a6d19e0f76f8c2f0509a39abb69f9ebbc3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/pmic:39896:58ff932418139582ddbb4a793ed965e860f5c986\" or \"EMMC:/dev/block/bootdevice/by-name/pmic:39896:1c3ed5a6d19e0f76f8c2f0509a39abb69f9ebbc3\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:58ff932418139582ddbb4a793ed965e860f5c986",
                      "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:1c3ed5a6d19e0f76f8c2f0509a39abb69f9ebbc3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:58ff932418139582ddbb4a793ed965e860f5c986\" or \"EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:1c3ed5a6d19e0f76f8c2f0509a39abb69f9ebbc3\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1974272:4df5bbc9639b7bfab66523a4590567604babf57d",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1970176:e3ec01bb329e1969543420661d7decfd2d69d318") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1974272:4df5bbc9639b7bfab66523a4590567604babf57d\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1970176:e3ec01bb329e1969543420661d7decfd2d69d318\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:4df5bbc9639b7bfab66523a4590567604babf57d",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:e3ec01bb329e1969543420661d7decfd2d69d318") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:4df5bbc9639b7bfab66523a4590567604babf57d\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:e3ec01bb329e1969543420661d7decfd2d69d318\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:764f87753ab86d37e1a8a78b84cbd7ee162674ad",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:616465898413e18be5b1837c39fe645abc7ab6d4") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:764f87753ab86d37e1a8a78b84cbd7ee162674ad\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:616465898413e18be5b1837c39fe645abc7ab6d4\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:764f87753ab86d37e1a8a78b84cbd7ee162674ad",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:616465898413e18be5b1837c39fe645abc7ab6d4") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:764f87753ab86d37e1a8a78b84cbd7ee162674ad\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:616465898413e18be5b1837c39fe645abc7ab6d4\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hyp:278528:e0dd8c82568efce0846aca47375f34b43d9060b4",
                      "EMMC:/dev/block/bootdevice/by-name/hyp:278528:66855b94585719b3a48508b54a260e7ff2a966ee") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hyp:278528:e0dd8c82568efce0846aca47375f34b43d9060b4\" or \"EMMC:/dev/block/bootdevice/by-name/hyp:278528:66855b94585719b3a48508b54a260e7ff2a966ee\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:e0dd8c82568efce0846aca47375f34b43d9060b4",
                      "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:66855b94585719b3a48508b54a260e7ff2a966ee") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hypbak:278528:e0dd8c82568efce0846aca47375f34b43d9060b4\" or \"EMMC:/dev/block/bootdevice/by-name/hypbak:278528:66855b94585719b3a48508b54a260e7ff2a966ee\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:18f1e65c362cf5599891ade11fd657abfc01f709",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:35844b12e9873f7414c2d51c9f93a83ea03d8bfd") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:316072:18f1e65c362cf5599891ade11fd657abfc01f709\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:316072:35844b12e9873f7414c2d51c9f93a83ea03d8bfd\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:18f1e65c362cf5599891ade11fd657abfc01f709",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:35844b12e9873f7414c2d51c9f93a83ea03d8bfd") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:18f1e65c362cf5599891ade11fd657abfc01f709\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:35844b12e9873f7414c2d51c9f93a83ea03d8bfd\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/storsec:49168:07a43f95f1ddc2c55a4941161e0a3dd0811da077",
                      "EMMC:/dev/block/bootdevice/by-name/storsec:49168:5de86366b338fcfb0ab573c184aced5af0240ebe") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/storsec:49168:07a43f95f1ddc2c55a4941161e0a3dd0811da077\" or \"EMMC:/dev/block/bootdevice/by-name/storsec:49168:5de86366b338fcfb0ab573c184aced5af0240ebe\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:07a43f95f1ddc2c55a4941161e0a3dd0811da077",
                      "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:5de86366b338fcfb0ab573c184aced5af0240ebe") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:07a43f95f1ddc2c55a4941161e0a3dd0811da077\" or \"EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:5de86366b338fcfb0ab573c184aced5af0240ebe\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abl:151552:b70001628a82f9042a7c8f5c980f12b3c400c98e",
                      "EMMC:/dev/block/bootdevice/by-name/abl:151552:512fdd69143434fb91993c302e7cc1fbafb9c52e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abl:151552:b70001628a82f9042a7c8f5c980f12b3c400c98e\" or \"EMMC:/dev/block/bootdevice/by-name/abl:151552:512fdd69143434fb91993c302e7cc1fbafb9c52e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:b70001628a82f9042a7c8f5c980f12b3c400c98e",
                      "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:512fdd69143434fb91993c302e7cc1fbafb9c52e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:b70001628a82f9042a7c8f5c980f12b3c400c98e\" or \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:512fdd69143434fb91993c302e7cc1fbafb9c52e\" has unexpected contents.");
apply_patch_space(117720576) || 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", "890,1,549,698,712,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,25567,25569,32768,32770,32959,32960,34725,34726,34728,34730,34789,34790,34923,34925,34978,34979,34993,34994,35006,35007,35621,35624,35630,35631,35636,35637,35754,35757,36880,36881,36911,36912,37058,37059,37156,38571,40029,40030,40043,40044,40049,40050,40052,40053,42200,42201,42571,42572,42659,42660,42851,42852,45434,45435,45438,45439,45444,45445,45753,45754,49445,49446,49607,49608,49630,49631,49735,49736,50151,50152,51054,51055,51059,51060,51082,51083,52674,52675,52731,52732,52768,52769,57412,57414,62017,62018,62219,62220,63806,63807,63944,63945,63977,63978,64660,64661,65536,65537,66397,66398,66573,66574,69665,69666,72023,72024,72509,72510,74462,74463,74489,74490,74562,74563,77614,77617,80256,80257,81652,81653,82026,82027,82175,82176,82528,82529,96719,96720,96730,96731,98304,98306,98495,98496,99706,99707,100125,100126,100177,100178,100181,100184,100189,100190,102046,102047,102130,102131,102133,102134,102155,102156,102592,102595,102960,102963,103265,103268,103305,103306,104749,104750,104770,104771,104821,104822,104843,104844,104915,104916,105530,105531,109107,109108,109113,109114,109216,109217,110683,110684,111671,111674,112122,112123,112127,112128,112140,112141,112145,112146,112157,112158,112181,112182,113946,113947,114082,114083,114357,114360,115285,115286,115552,115555,117835,117836,118160,118161,120789,120790,120802,120803,121138,121139,123049,123050,123483,123484,124347,124458,125251,125252,125622,125631,125659,125723,127502,127507,127508,127509,127510,127511,127512,127513,127514,127515,127516,127517,127518,127519,127520,127521,127522,127523,127524,127525,127526,127527,127528,127529,127530,127531,127532,127533,127534,127535,127536,127537,127538,127539,127540,127541,127542,127543,127544,127545,127546,127547,127548,127549,127550,127551,127552,127553,127554,127555,127556,127557,127558,127559,127560,127561,127562,127563,127564,127565,127566,127567,127568,127569,127570,127571,127572,127573,127574,127575,127576,127577,127578,127579,127580,127581,127582,127583,127584,127585,127586,127587,127588,127589,127590,127591,127592,127593,127594,127595,127596,127597,127598,127599,127600,127601,127602,127603,127604,127605,127606,127607,127608,127609,127610,127611,127612,127613,127614,127615,127616,127617,127618,127619,127620,127621,127622,127623,127624,127625,127626,127627,127628,127629,127630,127631,127632,127633,127634,127635,127636,127637,127638,127639,127640,127641,127642,127643,127644,127645,127646,127647,127648,127649,127650,127651,127652,127653,127654,127655,127656,127657,127658,127659,127660,127661,127662,127663,127664,127665,127666,127667,127668,127669,127670,127671,127672,127673,127674,127675,127676,127677,127678,127679,127680,127681,127682,127683,127684,127685,127686,127687,127688,127689,127690,127691,127692,127693,127694,127695,127696,127697,127698,127699,127700,127701,127702,127703,127704,127705,127706,127707,127708,127709,127710,127711,127712,127713,127714,127715,127716,127717,127718,127719,127720,127721,127722,127723,127724,127725,127726,127727,127728,127729,127730,127731,127732,127733,127734,127735,127736,127737,127738,127739,127740,127741,127742,127743,127744,127745,127746,127747,127748,127749,127750,127751,127752,127753,127754,127755,127756,127757,127758,127759,127760,127761,127762,127763,127764,127765,127766,127767,127768,127769,127770,127771,127772,127773,127774,127775,127776,127777,127778,127779,127780,127781,127782,127783,127784,127785,127786,127787,127788,127789,127790,127791,127792,127793,127794,127795,127796,127797,127798,127799,127800,127801,127802,127803,127804,127805,127806,127807,127808,127809,127810,127811,127812,127813,127814,127815,127816,127817,127818,127819,127820,127821,127822,127823,127824,127825,127826,127827,127828,127829,127830,127831,127832,127833,127834,127835,127836,127837,127838,127839,127840,127841,127842,127843,127844,127845,127846,127847,127848,127849,127850,127851,127852,127853,127854,127855,127856,127857,127858,127859,127860,127861,127862,127863,127864,127865,127866,127867,127868,127869,127870,127871,127872,127873,127874,127875,127876,127877,127878,127879,127880,127881,127882,127883,127884,127885,127886,127887,127888,127889,127890,127891,127892,127893,127894,127895,127896,127897,127898,127899,127900,127901,127902,127903,127904,127905,127906,127907,127908,127909,127910,127911,127912,127913,127914,127915,127916,127917,127918,127919,127920,127921,127922,127923,127924,127925,127926,127927,127928,127929,127930,127931,127932,127933,127934,127935,127936,127937,127938,127939,127940,127941,127942,127943,127944,127945,127946,127947,127948,127949,127950,127952,127958,127959,128268,128269,128282,128283,128292,128295,128296,128297,128298,128299,128301,128302,128303,128304,128322,128323,128345,128346,128352,128353,128460,128461,128465,128466,129573,129574,129814,129815,129817,129818,129841,129842,129912,129913,129916,129921,129922,129923,129924,129925,129926,129927,130706,130707,130713,130714,131072,131073,131684,131686,132149,132151,132152,132153,132154,132155,132156,132157,132158,132159,132160,132161,132162,132163,132165,132166,132167,132170,132837,132839,132840,132841,132924,134935,134938,134940,135198,135199,135206,135208,135711,135712,135723,135724,135990,135991,136104,136105,136128,136130,136132,136133,145055,145056,153019,153020,154923,154924,155200,155290,156476,156758,158078,163842,164031,164032,164538,172633,172858,172899,172906,175008,177604,177704,177766,177767,179106,179453,181020,196609,197115,229378,229567,229568,230074,262145,262651,294914,295103,295104,295610,327681,328187,360449,360955,393217,393723,425985,426491,458753,459259,491521,492027,524289,524795,557057,557563,589825,590331,622593,623099,655361,655867,688129,688635,720897,721403,753665,754171,755193,774155,780254,780261,780463") == "358e6bb64b4bcce87c3d745f7cbe0a63b5fde616" || 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", "890,1,549,698,712,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,25567,25569,32768,32770,32959,32960,34725,34726,34728,34730,34789,34790,34923,34925,34978,34979,34993,34994,35006,35007,35621,35624,35630,35631,35636,35637,35754,35757,36880,36881,36911,36912,37058,37059,37156,38571,40029,40030,40043,40044,40049,40050,40052,40053,42200,42201,42571,42572,42659,42660,42851,42852,45434,45435,45438,45439,45444,45445,45753,45754,49445,49446,49607,49608,49630,49631,49735,49736,50151,50152,51054,51055,51059,51060,51082,51083,52674,52675,52731,52732,52768,52769,57412,57414,62017,62018,62219,62220,63806,63807,63944,63945,63977,63978,64660,64661,65536,65537,66397,66398,66573,66574,69665,69666,72023,72024,72509,72510,74462,74463,74489,74490,74562,74563,77614,77617,80256,80257,81652,81653,82026,82027,82175,82176,82528,82529,96719,96720,96730,96731,98304,98306,98495,98496,99706,99707,100125,100126,100177,100178,100181,100184,100189,100190,102046,102047,102130,102131,102133,102134,102155,102156,102592,102595,102960,102963,103265,103268,103305,103306,104749,104750,104770,104771,104821,104822,104843,104844,104915,104916,105530,105531,109107,109108,109113,109114,109216,109217,110683,110684,111671,111674,112122,112123,112127,112128,112140,112141,112145,112146,112157,112158,112181,112182,113946,113947,114082,114083,114357,114360,115285,115286,115552,115555,117835,117836,118160,118161,120789,120790,120802,120803,121138,121139,123049,123050,123483,123484,124347,124458,125251,125252,125622,125631,125659,125723,127502,127507,127508,127509,127510,127511,127512,127513,127514,127515,127516,127517,127518,127519,127520,127521,127522,127523,127524,127525,127526,127527,127528,127529,127530,127531,127532,127533,127534,127535,127536,127537,127538,127539,127540,127541,127542,127543,127544,127545,127546,127547,127548,127549,127550,127551,127552,127553,127554,127555,127556,127557,127558,127559,127560,127561,127562,127563,127564,127565,127566,127567,127568,127569,127570,127571,127572,127573,127574,127575,127576,127577,127578,127579,127580,127581,127582,127583,127584,127585,127586,127587,127588,127589,127590,127591,127592,127593,127594,127595,127596,127597,127598,127599,127600,127601,127602,127603,127604,127605,127606,127607,127608,127609,127610,127611,127612,127613,127614,127615,127616,127617,127618,127619,127620,127621,127622,127623,127624,127625,127626,127627,127628,127629,127630,127631,127632,127633,127634,127635,127636,127637,127638,127639,127640,127641,127642,127643,127644,127645,127646,127647,127648,127649,127650,127651,127652,127653,127654,127655,127656,127657,127658,127659,127660,127661,127662,127663,127664,127665,127666,127667,127668,127669,127670,127671,127672,127673,127674,127675,127676,127677,127678,127679,127680,127681,127682,127683,127684,127685,127686,127687,127688,127689,127690,127691,127692,127693,127694,127695,127696,127697,127698,127699,127700,127701,127702,127703,127704,127705,127706,127707,127708,127709,127710,127711,127712,127713,127714,127715,127716,127717,127718,127719,127720,127721,127722,127723,127724,127725,127726,127727,127728,127729,127730,127731,127732,127733,127734,127735,127736,127737,127738,127739,127740,127741,127742,127743,127744,127745,127746,127747,127748,127749,127750,127751,127752,127753,127754,127755,127756,127757,127758,127759,127760,127761,127762,127763,127764,127765,127766,127767,127768,127769,127770,127771,127772,127773,127774,127775,127776,127777,127778,127779,127780,127781,127782,127783,127784,127785,127786,127787,127788,127789,127790,127791,127792,127793,127794,127795,127796,127797,127798,127799,127800,127801,127802,127803,127804,127805,127806,127807,127808,127809,127810,127811,127812,127813,127814,127815,127816,127817,127818,127819,127820,127821,127822,127823,127824,127825,127826,127827,127828,127829,127830,127831,127832,127833,127834,127835,127836,127837,127838,127839,127840,127841,127842,127843,127844,127845,127846,127847,127848,127849,127850,127851,127852,127853,127854,127855,127856,127857,127858,127859,127860,127861,127862,127863,127864,127865,127866,127867,127868,127869,127870,127871,127872,127873,127874,127875,127876,127877,127878,127879,127880,127881,127882,127883,127884,127885,127886,127887,127888,127889,127890,127891,127892,127893,127894,127895,127896,127897,127898,127899,127900,127901,127902,127903,127904,127905,127906,127907,127908,127909,127910,127911,127912,127913,127914,127915,127916,127917,127918,127919,127920,127921,127922,127923,127924,127925,127926,127927,127928,127929,127930,127931,127932,127933,127934,127935,127936,127937,127938,127939,127940,127941,127942,127943,127944,127945,127946,127947,127948,127949,127950,127952,127958,127959,128268,128269,128282,128283,128292,128295,128296,128297,128298,128299,128301,128302,128303,128304,128322,128323,128345,128346,128352,128353,128460,128461,128465,128466,129573,129574,129814,129815,129817,129818,129841,129842,129912,129913,129916,129921,129922,129923,129924,129925,129926,129927,130706,130707,130713,130714,131072,131073,131684,131686,132149,132151,132152,132153,132154,132155,132156,132157,132158,132159,132160,132161,132162,132163,132165,132166,132167,132170,132837,132839,132840,132841,132924,134935,134938,134940,135198,135199,135206,135208,135711,135712,135723,135724,135990,135991,136104,136105,136128,136130,136132,136133,145055,145056,153019,153020,154923,154924,155200,155290,156476,156758,158078,163842,164031,164032,164538,172633,172858,172899,172906,175008,177604,177704,177766,177767,179106,179453,181020,196609,197115,229378,229567,229568,230074,262145,262651,294914,295103,295104,295610,327681,328187,360449,360955,393217,393723,425985,426491,458753,459259,491521,492027,524289,524795,557057,557563,589825,590331,622593,623099,655361,655867,688129,688635,720897,721403,753665,754171,755193,774155,780254,780261,780463") && 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", "386,1,441,698,706,716,717,798,799,863,864,866,877,882,883,885,886,1358,1408,1500,1501,2067,2073,4084,4085,4210,4211,4979,4980,5657,5658,6586,6591,14199,14200,18872,18873,21725,21726,25700,25701,32768,32770,32959,32960,39068,39069,43825,43826,44831,44833,44849,44851,45146,45147,45250,45251,55240,55243,55261,55262,55307,55308,55326,55327,55329,55330,55379,55380,55400,55401,56200,56201,56214,56215,56248,56249,56613,56615,56616,56617,56618,56620,56621,56622,56623,56625,56626,56627,56628,56630,56901,56902,56925,56928,58784,58785,58789,58791,59062,59063,59086,59089,60945,60946,60951,60952,60964,60965,62506,62508,65536,65537,69150,69151,69154,69155,69717,69718,75452,75453,75454,75455,75467,75468,75892,75893,76063,76067,76912,76914,77789,77790,79025,79083,89686,89687,98304,98306,98495,98496,99843,99844,101922,101923,103343,103344,105036,105038,106703,106704,108489,108490,110115,110116,111958,111959,113814,113815,115479,115480,117244,117245,117937,117938,117962,117963,117987,117988,118012,118013,118037,118038,118379,118380,118404,118405,119053,119054,120629,120630,121994,121995,123316,123317,124610,124611,126011,126012,127667,127668,129463,129464,130423,130572,131072,131073,152056,152057,152386,152387,152720,152721,153655,153656,153682,153683,153717,153718,153764,153765,153798,153799,153827,153828,153860,153861,153897,153898,153934,153935,153954,153955,153987,153988,154058,154059,154651,154652,154678,154679,154704,154705,154728,154729,154755,154756,154785,154786,154803,154804,154820,154821,154847,154848,154857,154858,154871,154872,154899,154900,154919,154920,154941,154942,154963,154964,154981,154982,155003,155004,155026,155027,155048,155049,155071,155072,155167,155168,155206,155207,155261,155262,155282,155283,155302,155303,155332,155333,155418,155419,155456,155457,155492,155493,155517,155518,155540,155541,155565,155566,155591,155592,155614,155615,155631,155632,155649,155650,156928,156929,156946,156947,157655,157656,157660,157666,160392,160422,162477,162478,162501,162502,163283,163732,163734,163842,164031,164032,164538,166783,166800,166802,167068,167069,167274,167275,168177,168178,168558,168559,171674,171675,171762,171763,172974,172975,174218,174219,175330,175406,181584,181585,186640,186641,194217,194218,196608,196609,197307,197315,204754,204755,205549,205550,209370,209371,209395,209396,210477,210478,213225,213226,216168,216172,216185,216186,221640,221641,221643,221645,221669,221670,221680,221711,221717,221728,229376,229378,294912,294914,753664,753665,774155,780254,780261,780621") == "95b2bb264d3f2b9e3f47b8af09760eab7a323601" || 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", "386,1,441,698,706,716,717,798,799,863,864,866,877,882,883,885,886,1358,1408,1500,1501,2067,2073,4084,4085,4210,4211,4979,4980,5657,5658,6586,6591,14199,14200,18872,18873,21725,21726,25700,25701,32768,32770,32959,32960,39068,39069,43825,43826,44831,44833,44849,44851,45146,45147,45250,45251,55240,55243,55261,55262,55307,55308,55326,55327,55329,55330,55379,55380,55400,55401,56200,56201,56214,56215,56248,56249,56613,56615,56616,56617,56618,56620,56621,56622,56623,56625,56626,56627,56628,56630,56901,56902,56925,56928,58784,58785,58789,58791,59062,59063,59086,59089,60945,60946,60951,60952,60964,60965,62506,62508,65536,65537,69150,69151,69154,69155,69717,69718,75452,75453,75454,75455,75467,75468,75892,75893,76063,76067,76912,76914,77789,77790,79025,79083,89686,89687,98304,98306,98495,98496,99843,99844,101922,101923,103343,103344,105036,105038,106703,106704,108489,108490,110115,110116,111958,111959,113814,113815,115479,115480,117244,117245,117937,117938,117962,117963,117987,117988,118012,118013,118037,118038,118379,118380,118404,118405,119053,119054,120629,120630,121994,121995,123316,123317,124610,124611,126011,126012,127667,127668,129463,129464,130423,130572,131072,131073,152056,152057,152386,152387,152720,152721,153655,153656,153682,153683,153717,153718,153764,153765,153798,153799,153827,153828,153860,153861,153897,153898,153934,153935,153954,153955,153987,153988,154058,154059,154651,154652,154678,154679,154704,154705,154728,154729,154755,154756,154785,154786,154803,154804,154820,154821,154847,154848,154857,154858,154871,154872,154899,154900,154919,154920,154941,154942,154963,154964,154981,154982,155003,155004,155026,155027,155048,155049,155071,155072,155167,155168,155206,155207,155261,155262,155282,155283,155302,155303,155332,155333,155418,155419,155456,155457,155492,155493,155517,155518,155540,155541,155565,155566,155591,155592,155614,155615,155631,155632,155649,155650,156928,156929,156946,156947,157655,157656,157660,157666,160392,160422,162477,162478,162501,162502,163283,163732,163734,163842,164031,164032,164538,166783,166800,166802,167068,167069,167274,167275,168177,168178,168558,168559,171674,171675,171762,171763,172974,172975,174218,174219,175330,175406,181584,181585,186640,186641,194217,194218,196608,196609,197307,197315,204754,204755,205549,205550,209370,209371,209395,209396,210477,210478,213225,213226,216168,216172,216185,216186,221640,221641,221643,221645,221669,221670,221680,221711,221717,221728,229376,229378,294912,294914,753664,753665,774155,780254,780261,780621") && 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/cmnlib:222192:56bf86853c72040fb19f8cdc5981d27d7eb8bbcd",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:1d8c7abeb212adeeb1ec1ba94188be2daa6ba0d3",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:1d8c7abeb212adeeb1ec1ba94188be2daa6ba0d3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:224808:92b232971a7f825aaaef2b585f0751bbedcdc416",
                "EMMC:/dev/block/bootdevice/by-name/rpm:224808:a8eac8e62a0c89400f8d616110399a1ef0a701c7",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:224808:a8eac8e62a0c89400f8d616110399a1ef0a701c7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:fc0e22587c0c8aff95f69fb7fa6db66e1ba8cfe1",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:194a3aab4c286fdfe7c3e349a9fdfab565b7434d",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:49068:194a3aab4c286fdfe7c3e349a9fdfab565b7434d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:117720576:f7980b0b86c72b4636efe4a7ae4cb10f7b4e4ef3",
                "EMMC:/dev/block/bootdevice/by-name/modem:117720576:18872937eca543e689a64228d4a1a3f4a7ef0028",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:117720576:18872937eca543e689a64228d4a1a3f4a7ef0028");
patch_partition("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:21ce08ce51fc5a1396a0c090f4c68c875f40982a",
                "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:adeffde141d2285061b1866ba9a1a6b4957b0f78",
                package_extract_file("patch/firmware-update/BTFM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:adeffde141d2285061b1866ba9a1a6b4957b0f78");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:2744848:d682eb9bc7b58330dcf1821d76477bf7afa46719",
                "EMMC:/dev/block/bootdevice/by-name/xbl:2744848:7b56068cc7ad440003242f637b4aaecfc8bf015c",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:2744848:7b56068cc7ad440003242f637b4aaecfc8bf015c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmic:39896:58ff932418139582ddbb4a793ed965e860f5c986",
                "EMMC:/dev/block/bootdevice/by-name/pmic:39896:1c3ed5a6d19e0f76f8c2f0509a39abb69f9ebbc3",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmic:39896:1c3ed5a6d19e0f76f8c2f0509a39abb69f9ebbc3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1974272:4df5bbc9639b7bfab66523a4590567604babf57d",
                "EMMC:/dev/block/bootdevice/by-name/tz:1970176:e3ec01bb329e1969543420661d7decfd2d69d318",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1970176:e3ec01bb329e1969543420661d7decfd2d69d318");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:764f87753ab86d37e1a8a78b84cbd7ee162674ad",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:616465898413e18be5b1837c39fe645abc7ab6d4",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:616465898413e18be5b1837c39fe645abc7ab6d4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:278528:e0dd8c82568efce0846aca47375f34b43d9060b4",
                "EMMC:/dev/block/bootdevice/by-name/hyp:278528:66855b94585719b3a48508b54a260e7ff2a966ee",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:278528:66855b94585719b3a48508b54a260e7ff2a966ee");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:18f1e65c362cf5599891ade11fd657abfc01f709",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:35844b12e9873f7414c2d51c9f93a83ea03d8bfd",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:316072:35844b12e9873f7414c2d51c9f93a83ea03d8bfd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:49168:07a43f95f1ddc2c55a4941161e0a3dd0811da077",
                "EMMC:/dev/block/bootdevice/by-name/storsec:49168:5de86366b338fcfb0ab573c184aced5af0240ebe",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:49168:5de86366b338fcfb0ab573c184aced5af0240ebe");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:b70001628a82f9042a7c8f5c980f12b3c400c98e",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:512fdd69143434fb91993c302e7cc1fbafb9c52e",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:512fdd69143434fb91993c302e7cc1fbafb9c52e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:56bf86853c72040fb19f8cdc5981d27d7eb8bbcd",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:1d8c7abeb212adeeb1ec1ba94188be2daa6ba0d3",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:1d8c7abeb212adeeb1ec1ba94188be2daa6ba0d3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:92b232971a7f825aaaef2b585f0751bbedcdc416",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:a8eac8e62a0c89400f8d616110399a1ef0a701c7",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:a8eac8e62a0c89400f8d616110399a1ef0a701c7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:fc0e22587c0c8aff95f69fb7fa6db66e1ba8cfe1",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:194a3aab4c286fdfe7c3e349a9fdfab565b7434d",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:194a3aab4c286fdfe7c3e349a9fdfab565b7434d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:d682eb9bc7b58330dcf1821d76477bf7afa46719",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:7b56068cc7ad440003242f637b4aaecfc8bf015c",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:7b56068cc7ad440003242f637b4aaecfc8bf015c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:58ff932418139582ddbb4a793ed965e860f5c986",
                "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:1c3ed5a6d19e0f76f8c2f0509a39abb69f9ebbc3",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:1c3ed5a6d19e0f76f8c2f0509a39abb69f9ebbc3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:4df5bbc9639b7bfab66523a4590567604babf57d",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:e3ec01bb329e1969543420661d7decfd2d69d318",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:e3ec01bb329e1969543420661d7decfd2d69d318");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:764f87753ab86d37e1a8a78b84cbd7ee162674ad",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:616465898413e18be5b1837c39fe645abc7ab6d4",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:616465898413e18be5b1837c39fe645abc7ab6d4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:e0dd8c82568efce0846aca47375f34b43d9060b4",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:66855b94585719b3a48508b54a260e7ff2a966ee",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:278528:66855b94585719b3a48508b54a260e7ff2a966ee");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:18f1e65c362cf5599891ade11fd657abfc01f709",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:35844b12e9873f7414c2d51c9f93a83ea03d8bfd",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:35844b12e9873f7414c2d51c9f93a83ea03d8bfd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:07a43f95f1ddc2c55a4941161e0a3dd0811da077",
                "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:5de86366b338fcfb0ab573c184aced5af0240ebe",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:5de86366b338fcfb0ab573c184aced5af0240ebe");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:b70001628a82f9042a7c8f5c980f12b3c400c98e",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:512fdd69143434fb91993c302e7cc1fbafb9c52e",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:512fdd69143434fb91993c302e7cc1fbafb9c52e");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:35366218:a81ec6e99cab8a3d9b5b0147e60b0db39557db96",
                "EMMC:/dev/block/bootdevice/by-name/boot:35366218:29f49c43a28b0fdebd0259ad0ce3f4843fdf5f87",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:35366218:29f49c43a28b0fdebd0259ad0ce3f4843fdf5f87");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:56bf86853c72040fb19f8cdc5981d27d7eb8bbcd",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:1d8c7abeb212adeeb1ec1ba94188be2daa6ba0d3",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:1d8c7abeb212adeeb1ec1ba94188be2daa6ba0d3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:224808:92b232971a7f825aaaef2b585f0751bbedcdc416",
                "EMMC:/dev/block/bootdevice/by-name/rpm:224808:a8eac8e62a0c89400f8d616110399a1ef0a701c7",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:224808:a8eac8e62a0c89400f8d616110399a1ef0a701c7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:fc0e22587c0c8aff95f69fb7fa6db66e1ba8cfe1",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:194a3aab4c286fdfe7c3e349a9fdfab565b7434d",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:49068:194a3aab4c286fdfe7c3e349a9fdfab565b7434d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:117720576:f7980b0b86c72b4636efe4a7ae4cb10f7b4e4ef3",
                "EMMC:/dev/block/bootdevice/by-name/modem:117720576:18872937eca543e689a64228d4a1a3f4a7ef0028",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:117720576:18872937eca543e689a64228d4a1a3f4a7ef0028");
patch_partition("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:21ce08ce51fc5a1396a0c090f4c68c875f40982a",
                "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:adeffde141d2285061b1866ba9a1a6b4957b0f78",
                package_extract_file("patch/firmware-update/BTFM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:adeffde141d2285061b1866ba9a1a6b4957b0f78");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:2744848:d682eb9bc7b58330dcf1821d76477bf7afa46719",
                "EMMC:/dev/block/bootdevice/by-name/xbl:2744848:7b56068cc7ad440003242f637b4aaecfc8bf015c",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:2744848:7b56068cc7ad440003242f637b4aaecfc8bf015c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmic:39896:58ff932418139582ddbb4a793ed965e860f5c986",
                "EMMC:/dev/block/bootdevice/by-name/pmic:39896:1c3ed5a6d19e0f76f8c2f0509a39abb69f9ebbc3",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmic:39896:1c3ed5a6d19e0f76f8c2f0509a39abb69f9ebbc3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1974272:4df5bbc9639b7bfab66523a4590567604babf57d",
                "EMMC:/dev/block/bootdevice/by-name/tz:1970176:e3ec01bb329e1969543420661d7decfd2d69d318",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1970176:e3ec01bb329e1969543420661d7decfd2d69d318");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:764f87753ab86d37e1a8a78b84cbd7ee162674ad",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:616465898413e18be5b1837c39fe645abc7ab6d4",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:616465898413e18be5b1837c39fe645abc7ab6d4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:278528:e0dd8c82568efce0846aca47375f34b43d9060b4",
                "EMMC:/dev/block/bootdevice/by-name/hyp:278528:66855b94585719b3a48508b54a260e7ff2a966ee",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:278528:66855b94585719b3a48508b54a260e7ff2a966ee");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:18f1e65c362cf5599891ade11fd657abfc01f709",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:35844b12e9873f7414c2d51c9f93a83ea03d8bfd",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:316072:35844b12e9873f7414c2d51c9f93a83ea03d8bfd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:49168:07a43f95f1ddc2c55a4941161e0a3dd0811da077",
                "EMMC:/dev/block/bootdevice/by-name/storsec:49168:5de86366b338fcfb0ab573c184aced5af0240ebe",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:49168:5de86366b338fcfb0ab573c184aced5af0240ebe");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:b70001628a82f9042a7c8f5c980f12b3c400c98e",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:512fdd69143434fb91993c302e7cc1fbafb9c52e",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:512fdd69143434fb91993c302e7cc1fbafb9c52e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:56bf86853c72040fb19f8cdc5981d27d7eb8bbcd",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:1d8c7abeb212adeeb1ec1ba94188be2daa6ba0d3",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:1d8c7abeb212adeeb1ec1ba94188be2daa6ba0d3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:92b232971a7f825aaaef2b585f0751bbedcdc416",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:a8eac8e62a0c89400f8d616110399a1ef0a701c7",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:a8eac8e62a0c89400f8d616110399a1ef0a701c7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:fc0e22587c0c8aff95f69fb7fa6db66e1ba8cfe1",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:194a3aab4c286fdfe7c3e349a9fdfab565b7434d",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:194a3aab4c286fdfe7c3e349a9fdfab565b7434d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:d682eb9bc7b58330dcf1821d76477bf7afa46719",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:7b56068cc7ad440003242f637b4aaecfc8bf015c",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:2744848:7b56068cc7ad440003242f637b4aaecfc8bf015c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:58ff932418139582ddbb4a793ed965e860f5c986",
                "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:1c3ed5a6d19e0f76f8c2f0509a39abb69f9ebbc3",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:1c3ed5a6d19e0f76f8c2f0509a39abb69f9ebbc3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:4df5bbc9639b7bfab66523a4590567604babf57d",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:e3ec01bb329e1969543420661d7decfd2d69d318",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1970176:e3ec01bb329e1969543420661d7decfd2d69d318");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:764f87753ab86d37e1a8a78b84cbd7ee162674ad",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:616465898413e18be5b1837c39fe645abc7ab6d4",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:616465898413e18be5b1837c39fe645abc7ab6d4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:e0dd8c82568efce0846aca47375f34b43d9060b4",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:66855b94585719b3a48508b54a260e7ff2a966ee",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:278528:66855b94585719b3a48508b54a260e7ff2a966ee");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:18f1e65c362cf5599891ade11fd657abfc01f709",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:35844b12e9873f7414c2d51c9f93a83ea03d8bfd",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:35844b12e9873f7414c2d51c9f93a83ea03d8bfd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:07a43f95f1ddc2c55a4941161e0a3dd0811da077",
                "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:5de86366b338fcfb0ab573c184aced5af0240ebe",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:5de86366b338fcfb0ab573c184aced5af0240ebe");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:b70001628a82f9042a7c8f5c980f12b3c400c98e",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:512fdd69143434fb91993c302e7cc1fbafb9c52e",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:512fdd69143434fb91993c302e7cc1fbafb9c52e");
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...");
