getprop("ro.product.device") == "apollo" || abort("E3004: This package is for \"apollo\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/apollo/apollo:10/QKQ1.200419.002/V12.0.11.0.QJDCNXM:user/release-keys");
ui_print("Target: Redmi/apollo/apollo:10/QKQ1.200419.002/V12.0.12.0.QJDCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/apollo/apollo:10/QKQ1.200419.002/V12.0.11.0.QJDCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/apollo/apollo:10/QKQ1.200419.002/V12.0.12.0.QJDCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/apollo/apollo:10/QKQ1.200419.002/V12.0.11.0.QJDCNXM:user/release-keys or Redmi/apollo/apollo:10/QKQ1.200419.002/V12.0.12.0.QJDCNXM: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:134217728:8b3414e9efe8d5d78280cb3c7f1dab8fa8fff8e0",
                      "EMMC:/dev/block/bootdevice/by-name/boot:134217728:0eb0f36ac71cf497efc32da01c737fa5ed5dddc0") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:8b3414e9efe8d5d78280cb3c7f1dab8fa8fff8e0\" or \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:0eb0f36ac71cf497efc32da01c737fa5ed5dddc0\" has unexpected contents.");
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
show_progress(0.100000, 70);
if (range_sha1(map_partition("system"), "1428,1,254,282,291,293,294,555,559,575,576,32768,32770,32992,33008,35795,35797,36155,36159,36172,36173,36333,36337,36345,36346,36354,36358,36363,36364,36853,36857,36873,36874,36883,36887,36891,36892,37945,37951,37983,37984,37990,37994,37998,37999,38004,38008,38012,38013,38057,38063,38069,38070,42442,42443,42894,42895,42906,42910,42914,42915,43112,43116,43124,43125,43128,43129,43146,43150,43154,44469,46491,46495,46523,46524,46532,46536,46540,46541,46547,46551,46555,46556,46558,46559,49845,49849,49890,49891,50019,50023,50029,50030,50292,50293,50486,50490,50505,50506,53216,53220,53264,53265,53513,53514,53585,53589,53594,53595,53821,53825,53833,53834,53838,53842,53846,53847,53869,53873,53897,53898,55353,55357,55382,55383,56208,56212,56235,56236,56319,56323,56329,56330,61949,61951,65536,65552,67337,67338,67672,67674,67727,67728,67738,67742,67746,67747,67760,67764,67786,67787,68409,68413,68429,68430,69962,69966,70003,70004,70266,70267,70610,70614,70621,70622,71019,71023,71036,71037,73321,73322,74249,74253,74278,74279,86845,86849,86873,86874,89267,89271,89321,89322,98304,98306,98528,98544,99368,99372,99479,99480,101264,101265,103019,103023,103061,103062,103101,103107,103112,103113,105863,105867,105905,105906,108553,108554,108693,108694,109060,109066,109080,109081,109261,109262,111753,111754,112803,112807,112828,112829,113870,113874,113901,113902,114131,114135,114143,114144,114488,114494,114508,114509,116922,116928,116976,116977,119535,119539,119579,119580,119622,119626,119631,119632,119665,119669,119673,119674,119723,119727,119732,119733,119736,119742,119747,119748,122311,122312,122370,122374,122380,122381,122425,122429,122433,122434,124040,124046,124088,124089,124337,124343,124353,124354,124550,124554,124559,124560,124599,124603,124607,124608,127037,127041,127080,127081,127198,127202,127208,127209,127275,127279,127284,127285,127998,128002,128020,128021,128287,128291,128300,128301,131072,131088,136485,136489,139114,139115,139185,139189,139195,139196,143900,143906,143977,143978,149383,149387,149466,149467,149475,149479,149483,149484,150108,150112,150128,150129,150830,150834,150850,150851,150862,150866,150870,150871,153796,153800,154281,154282,156293,156297,156323,156324,163840,163842,164064,164080,170812,170814,176254,176255,177622,177624,179148,179149,180039,180043,180070,180071,180075,180079,180083,180084,180106,180110,180114,180115,180119,180123,180131,180132,180147,180151,180155,180156,180558,180562,180567,180568,180592,180596,180600,180601,182989,182993,183041,183042,183045,183051,183056,183057,183342,183346,183356,183357,183524,183530,183539,183540,183566,183572,183577,183578,185042,185046,185074,185075,185971,185974,190431,190435,192632,192633,196608,196624,197855,197859,197905,197908,200122,200126,200141,200142,200535,200539,200547,200548,200561,200565,200569,200570,203957,203962,203998,204003,204019,204024,204041,204042,204381,204382,206611,206620,206938,206939,207375,207376,209170,209171,211815,211820,211821,211822,211823,211824,211825,211826,211827,211828,211829,211830,211831,211833,213752,213753,218186,218187,223729,223730,229376,229378,229600,229616,230526,230527,230891,230892,232709,232710,233768,233772,233798,233799,247168,247169,251187,251188,262144,262160,272377,272378,273168,273169,274505,274506,287609,287610,288266,288267,293030,293031,294912,294914,295136,295152,298717,298718,300710,300711,301506,301507,306321,306322,310374,310375,316903,316904,321998,321999,327680,327696,331950,331951,347365,347366,347838,347839,360448,360464,371574,371575,393216,393232,394596,394597,394831,394832,394844,394845,394855,394858,394859,394860,394861,394862,394864,394865,394894,394895,394983,394984,394988,394989,394991,394993,395016,395017,395087,395088,395091,395096,395097,395098,395099,395100,395101,395102,395896,395897,395903,395904,396457,396459,397012,397014,397015,397016,397017,397018,397019,397020,397021,397022,397023,397024,397025,397026,397027,397028,397029,397032,398492,398494,398576,398581,398584,398587,398590,398593,398596,398598,398602,398603,398607,398610,398615,398616,398619,398621,398879,398880,398887,398889,399383,399385,399497,399498,399514,399515,399526,399527,399793,399794,399907,399908,399925,399927,401243,401244,415108,415109,422979,422980,425044,425045,425512,425513,425984,426000,428851,441278,444447,444963,447560,447561,447722,447723,451500,466469,470224,470910,473941,473951,475303,475304,478185,485795,486390,486893,486965,487251,487280,487284,487288,487290,487294,487296,487300,487302,487680,487682,487787,487789,487793,487795,487799,487801,487805,487807,487811,487813,487817,487819,487823,487825,487829,487831,487835,487837,487841,487843,487847,487849,487863,487865,487869,487871,487880,487882,487886,487888,487892,487894,487898,487903,487908,487910,487914,487916,487920,487922,487927,487929,487933,487935,487939,487941,487945,487947,488015,488017,488022,488024,488028,488030,488034,488036,488040,488042,488046,488048,488052,488054,488059,488061,488070,488072,488076,488078,488082,488084,488088,488090,488170,488172,488176,488178,488183,488185,488189,488191,488195,488197,488201,488203,488207,488209,488213,488215,488221,488223,488227,488229,488233,488235,488239,488241,488245,488247,488252,488254,488258,488260,488264,488266,488270,488272,488276,488278,488282,488284,488288,488291,488295,488297,488301,488303,488307,488309,488314,488316,488322,488324,488329,488332,488336,488338,488342,488344,488348,488350,488792,488794,488919,488921,488925,488927,488931,488933,488937,488939,488943,488945,488949,488951,488955,488957,488961,488963,488967,488969,488973,488975,488979,488981,488995,488997,489001,489003,489013,489015,489019,489021,489025,489027,489031,489036,489041,489043,489047,489049,489053,489055,489060,489062,489066,489068,489072,489074,489095,489097,489101,489103,489182,489184,489189,489191,489195,489197,489201,489203,489207,489209,489213,489215,489219,489221,489226,489228,489237,489239,489243,489245,489249,489251,489255,489257,489349,489351,489355,489357,489362,489364,489368,489370,489374,489739,491520,491536,497483,497485,497489,497491,497495,497497,497501,497503,497509,497511,497515,497517,497521,497523,497527,497529,497533,497535,497540,497542,497546,497548,497552,497554,497558,497560,497564,497566,497569,497570,497571,497573,497577,497579,497583,497585,497589,497591,497595,497597,497602,497604,499465,499467,499473,499475,505922,505923,510102,510103,510747,510748,511080,511081,511096,511097,511125,511126,511160,511161,511988,512000,513751,515244,518388,518389,518430,518436,524288,524304,526149,526150,531428,531430,536711,536712,537022,537023,540658,540659,546045,546046,546438,546439,546613,546614,547904,547905,552624,552625,555028,555029,555411,555412,555432,555433,555467,555468,555527,555528,557056,557072,567072,567083,570854,570855,580914,580915,589824,589840,595260,595266,609361,609362,622592,622608,634576,634577,641031,641033,655360,655376,658089,658090,665166,665167,673681,673682,678573,678574,685804,685805,686355,686356,686575,686576,688128,688144,688348,688351,690216,690217,690431,690432,694447,694448,695441,695445,695464,695465,695468,695469,695492,695493,695564,695565,695579,695580,695589,695590,695599,695600,695613,695614,695635,695636,695681,695683,695684,695685,695686,695687,695688,695689,695690,695691,695693,695694,695698,695699,695700,695701,695703,695704,695705,695706,695707,695708,695710,695711,695712,695713,695714,695715,695716,695717,695718,695719,695720,695721,695722,695723,695724,695725,695726,695727,695729,695730,695732,695733,695734,695737,695739,695741,695749,695750,695756,695758,695764,695765,695771,695772,695776,695777,696892,696893,696998,697000,697010,697012,697030,697032,697072,697073,697075,697090,697095,704388,704527,704560,704561,704563,704583,704584,704590,704591,704597,704598,704603,704604,704618,704619,704625,704626,704629,704630,704635,704636,704643,704644,704646,704647,704651,704652,704656,704657,704668,704669,704683,704684,704708,704709,704712,704713,704773,704774,704794,704795,704815,704816,704852,704853,704882,704883,704894,704895,704910,704911,704916,704917,704919,704920,704924,704925,704931,704932,704937,704938,704942,704943,704949,704950,704955,704956,704961,704962,704966,704967,704970,704971,704979,704980,704984,704985,704996,704997,705002,705003,705008,705009,705014,705015,705017,705018,705024,705025,705027,705028,705033,705034,705042,705043,705064,705065,705072,705073,705076,705077,705079,705080,705084,705085,705087,705088,705103,705104,705107,705108,705110,705111,705115,705116,705193,705194,705991,705992,714323,714325,719576,719578,719681,719683,719761,719763,720896,720985,748280,748282,748546,748548,748562,748564,749315,749317,749397,749399,753664,753748,756608,756610,756959,756961,761007,761009,762387,762389,764231,764233,764282,764284,764296,764298,764575,764577,764592,764594,765830,765832,765885,765887,766311,766313,766419,766421,766449,766451,766461,766463,767985,767987,768092,768094,781946,781948,785029,785031,786432,786507,811590,811592,811859,811861,819200,819202,819424,819542,821436,821438,824289,824291,828972,828974,836007,836009,851968,852005,853753,853754,857767,857771,857925,857926,861935,861939,861985,861986,862003,862007,862011,862012,862038,862042,862046,862047,870186,870187,870205,870209,870213,870214,870225,870229,870233,870234,870701,870705,870714,870715,871529,871533,871551,871552,877288,877289,879486,879488,881683,881684,881686,881690,881694,881695,882215,882216,883373,883377,883385,883386,883390,883394,883398,883399,884736,884738,884960,884975,886896,886900,886942,886943,887004,887008,887013,887016,887021,887022,895545,895549,895620,895621,895689,895693,895791,895792,895796,895800,895804,895805,895857,895861,895866,895867,898652,898656,898703,898704,898719,898723,898727,898728,898865,898869,898877,910502,913270,927741,927931,927932") == "198db812a608ab40bebe9609cb84bf7688e48e63" || block_image_verify(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block(map_partition("system"));
ifelse (block_image_recover(map_partition("system"), "1428,1,254,282,291,293,294,555,559,575,576,32768,32770,32992,33008,35795,35797,36155,36159,36172,36173,36333,36337,36345,36346,36354,36358,36363,36364,36853,36857,36873,36874,36883,36887,36891,36892,37945,37951,37983,37984,37990,37994,37998,37999,38004,38008,38012,38013,38057,38063,38069,38070,42442,42443,42894,42895,42906,42910,42914,42915,43112,43116,43124,43125,43128,43129,43146,43150,43154,44469,46491,46495,46523,46524,46532,46536,46540,46541,46547,46551,46555,46556,46558,46559,49845,49849,49890,49891,50019,50023,50029,50030,50292,50293,50486,50490,50505,50506,53216,53220,53264,53265,53513,53514,53585,53589,53594,53595,53821,53825,53833,53834,53838,53842,53846,53847,53869,53873,53897,53898,55353,55357,55382,55383,56208,56212,56235,56236,56319,56323,56329,56330,61949,61951,65536,65552,67337,67338,67672,67674,67727,67728,67738,67742,67746,67747,67760,67764,67786,67787,68409,68413,68429,68430,69962,69966,70003,70004,70266,70267,70610,70614,70621,70622,71019,71023,71036,71037,73321,73322,74249,74253,74278,74279,86845,86849,86873,86874,89267,89271,89321,89322,98304,98306,98528,98544,99368,99372,99479,99480,101264,101265,103019,103023,103061,103062,103101,103107,103112,103113,105863,105867,105905,105906,108553,108554,108693,108694,109060,109066,109080,109081,109261,109262,111753,111754,112803,112807,112828,112829,113870,113874,113901,113902,114131,114135,114143,114144,114488,114494,114508,114509,116922,116928,116976,116977,119535,119539,119579,119580,119622,119626,119631,119632,119665,119669,119673,119674,119723,119727,119732,119733,119736,119742,119747,119748,122311,122312,122370,122374,122380,122381,122425,122429,122433,122434,124040,124046,124088,124089,124337,124343,124353,124354,124550,124554,124559,124560,124599,124603,124607,124608,127037,127041,127080,127081,127198,127202,127208,127209,127275,127279,127284,127285,127998,128002,128020,128021,128287,128291,128300,128301,131072,131088,136485,136489,139114,139115,139185,139189,139195,139196,143900,143906,143977,143978,149383,149387,149466,149467,149475,149479,149483,149484,150108,150112,150128,150129,150830,150834,150850,150851,150862,150866,150870,150871,153796,153800,154281,154282,156293,156297,156323,156324,163840,163842,164064,164080,170812,170814,176254,176255,177622,177624,179148,179149,180039,180043,180070,180071,180075,180079,180083,180084,180106,180110,180114,180115,180119,180123,180131,180132,180147,180151,180155,180156,180558,180562,180567,180568,180592,180596,180600,180601,182989,182993,183041,183042,183045,183051,183056,183057,183342,183346,183356,183357,183524,183530,183539,183540,183566,183572,183577,183578,185042,185046,185074,185075,185971,185974,190431,190435,192632,192633,196608,196624,197855,197859,197905,197908,200122,200126,200141,200142,200535,200539,200547,200548,200561,200565,200569,200570,203957,203962,203998,204003,204019,204024,204041,204042,204381,204382,206611,206620,206938,206939,207375,207376,209170,209171,211815,211820,211821,211822,211823,211824,211825,211826,211827,211828,211829,211830,211831,211833,213752,213753,218186,218187,223729,223730,229376,229378,229600,229616,230526,230527,230891,230892,232709,232710,233768,233772,233798,233799,247168,247169,251187,251188,262144,262160,272377,272378,273168,273169,274505,274506,287609,287610,288266,288267,293030,293031,294912,294914,295136,295152,298717,298718,300710,300711,301506,301507,306321,306322,310374,310375,316903,316904,321998,321999,327680,327696,331950,331951,347365,347366,347838,347839,360448,360464,371574,371575,393216,393232,394596,394597,394831,394832,394844,394845,394855,394858,394859,394860,394861,394862,394864,394865,394894,394895,394983,394984,394988,394989,394991,394993,395016,395017,395087,395088,395091,395096,395097,395098,395099,395100,395101,395102,395896,395897,395903,395904,396457,396459,397012,397014,397015,397016,397017,397018,397019,397020,397021,397022,397023,397024,397025,397026,397027,397028,397029,397032,398492,398494,398576,398581,398584,398587,398590,398593,398596,398598,398602,398603,398607,398610,398615,398616,398619,398621,398879,398880,398887,398889,399383,399385,399497,399498,399514,399515,399526,399527,399793,399794,399907,399908,399925,399927,401243,401244,415108,415109,422979,422980,425044,425045,425512,425513,425984,426000,428851,441278,444447,444963,447560,447561,447722,447723,451500,466469,470224,470910,473941,473951,475303,475304,478185,485795,486390,486893,486965,487251,487280,487284,487288,487290,487294,487296,487300,487302,487680,487682,487787,487789,487793,487795,487799,487801,487805,487807,487811,487813,487817,487819,487823,487825,487829,487831,487835,487837,487841,487843,487847,487849,487863,487865,487869,487871,487880,487882,487886,487888,487892,487894,487898,487903,487908,487910,487914,487916,487920,487922,487927,487929,487933,487935,487939,487941,487945,487947,488015,488017,488022,488024,488028,488030,488034,488036,488040,488042,488046,488048,488052,488054,488059,488061,488070,488072,488076,488078,488082,488084,488088,488090,488170,488172,488176,488178,488183,488185,488189,488191,488195,488197,488201,488203,488207,488209,488213,488215,488221,488223,488227,488229,488233,488235,488239,488241,488245,488247,488252,488254,488258,488260,488264,488266,488270,488272,488276,488278,488282,488284,488288,488291,488295,488297,488301,488303,488307,488309,488314,488316,488322,488324,488329,488332,488336,488338,488342,488344,488348,488350,488792,488794,488919,488921,488925,488927,488931,488933,488937,488939,488943,488945,488949,488951,488955,488957,488961,488963,488967,488969,488973,488975,488979,488981,488995,488997,489001,489003,489013,489015,489019,489021,489025,489027,489031,489036,489041,489043,489047,489049,489053,489055,489060,489062,489066,489068,489072,489074,489095,489097,489101,489103,489182,489184,489189,489191,489195,489197,489201,489203,489207,489209,489213,489215,489219,489221,489226,489228,489237,489239,489243,489245,489249,489251,489255,489257,489349,489351,489355,489357,489362,489364,489368,489370,489374,489739,491520,491536,497483,497485,497489,497491,497495,497497,497501,497503,497509,497511,497515,497517,497521,497523,497527,497529,497533,497535,497540,497542,497546,497548,497552,497554,497558,497560,497564,497566,497569,497570,497571,497573,497577,497579,497583,497585,497589,497591,497595,497597,497602,497604,499465,499467,499473,499475,505922,505923,510102,510103,510747,510748,511080,511081,511096,511097,511125,511126,511160,511161,511988,512000,513751,515244,518388,518389,518430,518436,524288,524304,526149,526150,531428,531430,536711,536712,537022,537023,540658,540659,546045,546046,546438,546439,546613,546614,547904,547905,552624,552625,555028,555029,555411,555412,555432,555433,555467,555468,555527,555528,557056,557072,567072,567083,570854,570855,580914,580915,589824,589840,595260,595266,609361,609362,622592,622608,634576,634577,641031,641033,655360,655376,658089,658090,665166,665167,673681,673682,678573,678574,685804,685805,686355,686356,686575,686576,688128,688144,688348,688351,690216,690217,690431,690432,694447,694448,695441,695445,695464,695465,695468,695469,695492,695493,695564,695565,695579,695580,695589,695590,695599,695600,695613,695614,695635,695636,695681,695683,695684,695685,695686,695687,695688,695689,695690,695691,695693,695694,695698,695699,695700,695701,695703,695704,695705,695706,695707,695708,695710,695711,695712,695713,695714,695715,695716,695717,695718,695719,695720,695721,695722,695723,695724,695725,695726,695727,695729,695730,695732,695733,695734,695737,695739,695741,695749,695750,695756,695758,695764,695765,695771,695772,695776,695777,696892,696893,696998,697000,697010,697012,697030,697032,697072,697073,697075,697090,697095,704388,704527,704560,704561,704563,704583,704584,704590,704591,704597,704598,704603,704604,704618,704619,704625,704626,704629,704630,704635,704636,704643,704644,704646,704647,704651,704652,704656,704657,704668,704669,704683,704684,704708,704709,704712,704713,704773,704774,704794,704795,704815,704816,704852,704853,704882,704883,704894,704895,704910,704911,704916,704917,704919,704920,704924,704925,704931,704932,704937,704938,704942,704943,704949,704950,704955,704956,704961,704962,704966,704967,704970,704971,704979,704980,704984,704985,704996,704997,705002,705003,705008,705009,705014,705015,705017,705018,705024,705025,705027,705028,705033,705034,705042,705043,705064,705065,705072,705073,705076,705077,705079,705080,705084,705085,705087,705088,705103,705104,705107,705108,705110,705111,705115,705116,705193,705194,705991,705992,714323,714325,719576,719578,719681,719683,719761,719763,720896,720985,748280,748282,748546,748548,748562,748564,749315,749317,749397,749399,753664,753748,756608,756610,756959,756961,761007,761009,762387,762389,764231,764233,764282,764284,764296,764298,764575,764577,764592,764594,765830,765832,765885,765887,766311,766313,766419,766421,766449,766451,766461,766463,767985,767987,768092,768094,781946,781948,785029,785031,786432,786507,811590,811592,811859,811861,819200,819202,819424,819542,821436,821438,824289,824291,828972,828974,836007,836009,851968,852005,853753,853754,857767,857771,857925,857926,861935,861939,861985,861986,862003,862007,862011,862012,862038,862042,862046,862047,870186,870187,870205,870209,870213,870214,870225,870229,870233,870234,870701,870705,870714,870715,871529,871533,871551,871552,877288,877289,879486,879488,881683,881684,881686,881690,881694,881695,882215,882216,883373,883377,883385,883386,883390,883394,883398,883399,884736,884738,884960,884975,886896,886900,886942,886943,887004,887008,887013,887016,887021,887022,895545,895549,895620,895621,895689,895693,895791,895792,895796,895800,895804,895805,895857,895861,895866,895867,898652,898656,898703,898704,898719,898723,898727,898728,898865,898869,898877,910502,913270,927741,927931,927932") && block_image_verify(map_partition("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(map_partition("vendor"), "228,1,153,163,167,172,173,254,258,263,264,268,272,276,277,283,287,291,292,297,298,561,565,570,571,573,577,6351,6352,18252,18254,22947,22948,22950,22961,23489,23493,23498,23499,23635,23636,23648,23652,23656,23657,23660,23664,23668,23669,23672,23673,25104,25445,26478,26481,32768,32770,32898,32914,37589,37590,37646,37647,37958,38010,38694,38695,39302,39303,40360,40366,65536,65555,81797,81798,82426,82428,88101,88102,98304,98306,98434,98449,111091,111092,116978,116979,125017,125022,131072,131087,134906,134908,134945,134946,139655,139657,140316,140317,140403,140404,161780,161781,161795,161796,161800,161802,161820,161821,161866,161867,161885,161886,162029,162032,162691,162692,163456,163457,163466,163467,163840,163842,163970,163985,165949,165950,165975,165976,166014,166015,166136,166137,166783,166784,167270,167271,171492,171493,171508,171509,178166,178167,184063,184064,184066,184067,184468,184470,184522,184523,184685,184686,187815,187816,187817,187818,187844,187845,188271,188272,188297,188298,188400,188401,188514,188515,188920,188921,188982,188983,189122,189123,189244,189245,189313,189314,189482,189483,189598,189599,189644,189645,189861,189862,189903,189904,189941,189942,190119,190120,190253,190254,190642,190643,190754,190755,190809,190810,190860,190861,190959,190960,191022,191024,191025,191031,191127,191129,191136,191148,191149,191151,191158,191170,191190,191191,191769,229378,229506,294914,295042,524289,524303,526052,527649,536011,536129,536130") == "d3aad6e1456574adb4b257ea9c9e3283edb9d418" || block_image_verify(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block(map_partition("vendor"));
ifelse (block_image_recover(map_partition("vendor"), "228,1,153,163,167,172,173,254,258,263,264,268,272,276,277,283,287,291,292,297,298,561,565,570,571,573,577,6351,6352,18252,18254,22947,22948,22950,22961,23489,23493,23498,23499,23635,23636,23648,23652,23656,23657,23660,23664,23668,23669,23672,23673,25104,25445,26478,26481,32768,32770,32898,32914,37589,37590,37646,37647,37958,38010,38694,38695,39302,39303,40360,40366,65536,65555,81797,81798,82426,82428,88101,88102,98304,98306,98434,98449,111091,111092,116978,116979,125017,125022,131072,131087,134906,134908,134945,134946,139655,139657,140316,140317,140403,140404,161780,161781,161795,161796,161800,161802,161820,161821,161866,161867,161885,161886,162029,162032,162691,162692,163456,163457,163466,163467,163840,163842,163970,163985,165949,165950,165975,165976,166014,166015,166136,166137,166783,166784,167270,167271,171492,171493,171508,171509,178166,178167,184063,184064,184066,184067,184468,184470,184522,184523,184685,184686,187815,187816,187817,187818,187844,187845,188271,188272,188297,188298,188400,188401,188514,188515,188920,188921,188982,188983,189122,189123,189244,189245,189313,189314,189482,189483,189598,189599,189644,189645,189861,189862,189903,189904,189941,189942,190119,190120,190253,190254,190642,190643,190754,190755,190809,190810,190860,190861,190959,190960,191022,191024,191025,191031,191127,191129,191136,191148,191149,191151,191158,191170,191190,191191,191769,229378,229506,294914,295042,524289,524303,526052,527649,536011,536129,536130") && block_image_verify(map_partition("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;
if (range_sha1(map_partition("product"), "336,1,58,74,78,82,83,90,94,98,99,105,109,113,114,129,133,137,138,198,202,207,208,210,211,213,214,247,251,255,256,262,266,270,271,386,390,394,395,407,411,415,416,419,420,426,430,434,435,458,462,466,467,15744,15745,32311,32312,32768,32770,32798,32818,34805,34806,38150,38151,38162,38166,38170,38171,38181,38182,38187,38191,38196,38197,38201,38207,38212,38213,38219,38223,38227,38228,38240,38244,38248,38249,38251,38256,38265,38266,41376,41381,41438,41443,41451,41456,41484,41489,41511,41516,41537,41542,41561,41562,41573,41575,41739,41740,41741,41742,41743,41744,41745,41746,41783,41784,41788,41790,41798,41799,41803,41804,42141,42145,42149,42151,42156,42158,42162,42164,42168,42170,42174,42176,42180,42182,42186,42188,42192,42194,42198,42200,42207,42209,42213,42215,42219,42221,42225,42227,42231,42233,42237,42239,42243,42245,42249,42251,42255,42257,42261,42263,42267,42269,42273,42275,42279,42281,42285,42287,42291,42293,42297,42299,42303,42305,42310,42312,42316,42318,42322,42324,42328,42330,42334,42336,42340,42342,42346,42348,42352,42354,42358,42360,42364,42366,42370,42372,42376,42378,42382,42385,42389,42391,42396,42398,42402,42404,42408,42410,42414,42416,42420,42422,42426,42428,42432,42434,42438,42440,42447,42449,42453,42455,42459,42461,42465,42467,42471,42473,42477,42479,42483,42485,42489,42491,42495,42497,42501,42503,42507,42509,42513,42515,42519,42521,42525,42527,42531,42533,42537,42539,42543,42545,42550,42552,42556,42558,42562,42564,42568,42570,42574,42576,42580,42582,42586,42588,42592,42594,42598,42600,42604,42606,42610,42612,42616,42618,43655,43656,47222,47223,57972,57974,60034,60036,65536,65563,76826,76827,85866,85868,85954,85956,91617,91619,92820,92822,98001,98003,98304,98306,98334,98416,104898,104899,107541,107545,113686,113687,114152,114156,114170,114171,114838,114842,114858,114859,114886,114890,114894,114895,114903,114907,114911,114912,115191,115197,115206,115211,115236,115241,115613,117449,117487,117488") == "a9286a9ed982d88a31dd98ab4afd68bee7590390" || block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat")) then
ui_print("Verified product image...");
else
check_first_block(map_partition("product"));
ifelse (block_image_recover(map_partition("product"), "336,1,58,74,78,82,83,90,94,98,99,105,109,113,114,129,133,137,138,198,202,207,208,210,211,213,214,247,251,255,256,262,266,270,271,386,390,394,395,407,411,415,416,419,420,426,430,434,435,458,462,466,467,15744,15745,32311,32312,32768,32770,32798,32818,34805,34806,38150,38151,38162,38166,38170,38171,38181,38182,38187,38191,38196,38197,38201,38207,38212,38213,38219,38223,38227,38228,38240,38244,38248,38249,38251,38256,38265,38266,41376,41381,41438,41443,41451,41456,41484,41489,41511,41516,41537,41542,41561,41562,41573,41575,41739,41740,41741,41742,41743,41744,41745,41746,41783,41784,41788,41790,41798,41799,41803,41804,42141,42145,42149,42151,42156,42158,42162,42164,42168,42170,42174,42176,42180,42182,42186,42188,42192,42194,42198,42200,42207,42209,42213,42215,42219,42221,42225,42227,42231,42233,42237,42239,42243,42245,42249,42251,42255,42257,42261,42263,42267,42269,42273,42275,42279,42281,42285,42287,42291,42293,42297,42299,42303,42305,42310,42312,42316,42318,42322,42324,42328,42330,42334,42336,42340,42342,42346,42348,42352,42354,42358,42360,42364,42366,42370,42372,42376,42378,42382,42385,42389,42391,42396,42398,42402,42404,42408,42410,42414,42416,42420,42422,42426,42428,42432,42434,42438,42440,42447,42449,42453,42455,42459,42461,42465,42467,42471,42473,42477,42479,42483,42485,42489,42491,42495,42497,42501,42503,42507,42509,42513,42515,42519,42521,42525,42527,42531,42533,42537,42539,42543,42545,42550,42552,42556,42558,42562,42564,42568,42570,42574,42576,42580,42582,42586,42588,42592,42594,42598,42600,42604,42606,42610,42612,42616,42618,43655,43656,47222,47223,57972,57974,60034,60036,65536,65563,76826,76827,85866,85868,85954,85956,91617,91619,92820,92822,98001,98003,98304,98306,98334,98416,104898,104899,107541,107545,113686,113687,114152,114156,114170,114171,114838,114842,114858,114859,114886,114890,114894,114895,114903,114907,114911,114912,115191,115197,115206,115211,115236,115241,115613,117449,117487,117488") && block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat"), ui_print("product recovered successfully."), abort("E2004: product partition fails to recover"));
endif;
if (range_sha1(map_partition("odm"), "10,1,2,9,13,2026,2035,32231,32745,32767,32768") == "f516b91a6f581d2b8cfc19355bee32c0f3a0126e" || block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat")) then
ui_print("Verified odm image...");
else
check_first_block(map_partition("odm"));
ifelse (block_image_recover(map_partition("odm"), "10,1,2,9,13,2026,2035,32231,32745,32767,32768") && block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat"), ui_print("odm recovered successfully."), abort("E2004: odm partition fails to recover"));
endif;

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

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:134217728:8b3414e9efe8d5d78280cb3c7f1dab8fa8fff8e0",
                "EMMC:/dev/block/bootdevice/by-name/boot:134217728:0eb0f36ac71cf497efc32da01c737fa5ed5dddc0",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:134217728:0eb0f36ac71cf497efc32da01c737fa5ed5dddc0");

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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");
show_progress(0.600000, 600);

# --- Start patching dynamic partitions ---


# Update dynamic partition metadata

assert(update_dynamic_partitions(package_extract_file("dynamic_partitions_op_list")));

# Patch partition product

ui_print("Patching product image after verification.");
block_image_update(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat") ||
  abort("E2001: Failed to update product image.");

# Patch partition vendor

ui_print("Patching vendor image after verification.");
block_image_update(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");

# Patch partition system

ui_print("Patching system image after verification.");
block_image_update(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");

# Patch partition odm

ui_print("Patching odm image after verification.");
block_image_update(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat") ||
  abort("E2001: Failed to update odm image.");

# --- End patching dynamic partitions ---

show_progress(0.100000, 2);

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

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/vbmeta_system.img", "/dev/block/bootdevice/by-name/vbmeta_system");
package_extract_file("firmware-update/dtbo.img", "/dev/block/bootdevice/by-name/dtbo");
package_extract_file("firmware-update/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta");

# ---- update tasks: exaid part 2----


package_extract_file("exaid.img", "/dev/block/bootdevice/by-name/exaid");
    
