getprop("ro.product.device") == "davinci" || abort("E3004: This package is for \"davinci\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/davinci_ru/davinci:10/QKQ1.190825.002/V12.0.2.0.QFJRUXM:user/release-keys");
ui_print("Target: Xiaomi/davinci_ru/davinci:10/QKQ1.190825.002/V12.0.3.0.QFJRUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/davinci_ru/davinci:10/QKQ1.190825.002/V12.0.2.0.QFJRUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/davinci_ru/davinci:10/QKQ1.190825.002/V12.0.3.0.QFJRUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/davinci_ru/davinci:10/QKQ1.190825.002/V12.0.2.0.QFJRUXM:user/release-keys or Xiaomi/davinci_ru/davinci:10/QKQ1.190825.002/V12.0.3.0.QFJRUXM: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:43a48ad9db25b2a75ff6b3ecc96a05b20edc74a3",
                      "EMMC:/dev/block/bootdevice/by-name/boot:134217728:70ea7439281fe60b8a0cab6eb4e4917b504424d4") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:43a48ad9db25b2a75ff6b3ecc96a05b20edc74a3\" or \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:70ea7439281fe60b8a0cab6eb4e4917b504424d4\" 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("/dev/block/bootdevice/by-name/system", "1160,1,575,728,742,775,782,784,785,1031,1036,1038,1039,1145,1146,1631,1632,2320,2321,2323,2325,2326,2327,2342,2343,2524,2525,2857,2967,2987,2998,3664,3695,3697,3698,3702,3703,3711,3712,3713,3714,5033,5237,5547,5817,8565,8595,9071,9072,9074,9480,9482,9483,10480,10482,16421,16422,16555,16556,19325,19327,25656,25658,32768,32770,32990,32991,34824,34825,34827,34829,34888,34889,35022,35024,35077,35078,35084,35085,35295,35296,35308,35932,35938,35939,35944,35945,36064,36067,37681,37682,39893,39894,39925,39926,40071,40072,40171,41587,43400,43401,43414,43415,43420,43421,43423,43424,45888,45889,46259,46260,46314,46317,46404,46405,46596,46597,49282,49283,49286,49287,49596,49597,49845,49846,50294,50295,51201,51202,51206,51207,51229,51230,52455,52456,52860,52861,52897,52898,56205,56207,59993,59994,60181,60182,61484,61485,61623,61624,61656,61657,62107,62108,62791,62792,64145,64146,64322,64323,65505,65506,65536,65537,68497,68498,68983,68984,73287,73288,76017,76018,77197,77198,77270,77271,77290,77293,80599,80600,83223,83224,84014,84015,84162,84163,84822,84823,84835,84836,84840,84841,85051,85054,85064,85065,90662,90663,92311,92312,92363,92364,92367,92370,92375,92376,94233,94234,94318,94319,94321,94322,94343,94344,95281,95284,95684,95687,95853,95854,95894,95895,97880,97881,97931,97932,98282,98283,98304,98306,98526,98527,99032,99033,99105,99106,99722,99723,103875,103876,103881,103882,104278,104279,105764,105765,107309,107310,107758,107759,107763,107764,107772,107773,107777,107778,107789,107790,107813,107814,109768,109769,109907,109908,110187,110190,110193,110194,111112,111113,111683,111684,115932,115935,118226,118227,118576,118577,121206,121207,121219,121220,121555,121556,123461,123462,123895,123896,124759,124870,125634,125635,126444,126483,128142,128147,128153,128154,128473,128474,128787,128788,128800,128801,128810,128813,128814,128815,128816,128817,128819,128820,128821,128822,128868,128869,128875,128876,128963,128964,128968,128969,128970,128972,128995,128996,129066,129067,129070,129075,129076,129077,129078,129079,129080,129081,130011,130012,130019,130020,130573,130575,131072,131073,131634,131636,131637,131638,131639,131640,131641,131642,131643,131644,131645,131646,131647,131648,131650,131651,131652,131655,132512,132514,132515,132516,132599,132600,132602,132603,132606,132608,132866,132867,132874,132876,133363,133365,133473,133474,133504,133505,133516,133517,133783,133784,133897,133898,133914,133916,133918,133919,142853,142854,150790,150791,152731,152732,153009,153098,154284,154537,155859,163842,164062,164063,164568,170664,170889,170930,170937,173037,175634,175736,175798,175799,177138,177451,179020,195911,196183,196229,196236,196609,197114,199312,202342,202352,203412,203413,213443,220990,221295,221796,221831,222113,222127,222131,222135,222136,222140,222143,222148,222149,222153,222155,222170,222171,222176,229378,229598,229599,230104,232455,232673,244670,245709,245722,245963,247445,248183,248216,249918,250088,250347,250634,251943,251944,252983,253026,253128,253285,255818,255851,256234,256391,256461,256496,256624,256832,259112,259113,260236,260269,260718,260763,262144,262145,262960,263034,264216,264238,265646,265918,266644,266646,270593,270595,270750,270751,274384,274385,278118,278161,279848,279849,280245,280246,280420,280421,281655,281677,281712,281713,286411,286412,288789,288790,289150,289151,289171,289172,289206,289207,289277,289278,291319,291320,294912,294914,295134,295135,300012,300053,300132,300659,303368,303375,304986,305005,305370,307534,309253,309254,316798,316839,319337,319541,319851,320121,326175,326231,327680,327681,331270,331271,331361,331528,344231,344272,344900,345199,355203,355258,355571,355870,358781,358782,359574,359576,360448,360449,368946,368987,369681,369744,375109,375243,381355,381356,385208,385209,386287,386317,393216,393217,397162,397163,402053,402054,407155,407211,409393,409394,409948,409949,410168,410169,411863,411893,411926,411929,413784,413785,413992,413993,418904,418905,419721,419725,419744,419745,419748,419749,419772,419773,419844,419845,419859,419860,419869,419870,419879,419880,419893,419894,419915,419916,419961,419963,419964,419965,419966,419967,419968,419969,419970,419971,419973,419974,419978,419979,419980,419981,419983,419984,419985,419986,419987,419988,419990,419991,419992,419993,419994,419995,419996,419997,419998,419999,420000,420001,420002,420003,420004,420005,420006,420007,420009,420010,420012,420013,420014,420017,420019,420021,420029,420030,420036,420038,420044,420045,420051,420052,420056,420057,421166,421167,421272,421274,421284,421286,421304,421306,421346,421347,421349,421364,421369,425985,426490,428749,428888,428921,428922,428923,429365,429368,432396,432397,432759,432760,432812,432813,434213,434214,435476,435477,436975,436977,437454,437455,443626,443627,443686,443687,443764,443765,443891,443892,444090,444091,444097,445631,450936,450937,451947,451948,452006,452007,458249,458250,458580,458581,458588,458589,458752,458753,459792,459793,462455,462456,462464,462465,462478,462479,462856,462857,462864,462865,465067,465068,473140,473141,474369,474370,474399,474400,474867,474868,476341,476342,476992,476993,477086,477089,477146,477147,477152,477153,478975,478976,479101,479102,479113,479114,486826,486827,489518,489519,491069,491072,491405,491406,491520,491521,493850,493851,497964,497965,500826,500827,507477,507478,508013,508014,524288,524289,529443,529446,530501,530504,530772,530773,542665,542666,545372,545373,545410,545411,551181,551182,557056,557057,565151,565152,574257,574258,574275,574276,574313,574314,574341,574342,574352,574353,574355,574356,574872,574873,576568,576569,576573,576574,576635,576636,589824,589825,590331,590332,590768,590769,590841,590842,590846,590847,590937,590938,593711,593712,593727,593728,593885,593886,598898,600514,600668,600669,600677,600678,600720,600721,600728,600729,600758,600761,602929,602930,603492,603493,603575,603576,603890,603893,603906,603907,608243,608244,608251,608252,608256,608257,608317,608318,614557,614558,615197,615198,615562,615563,615575,615576,622469,622470,622592,622593,623377,623378,630543,630544,638594,638595,650482,650483,651139,651140,651146,651147,651151,651152,651280,651281,651288,651289,651292,651293,651297,651298,651309,651310,655360,655361,666381,666382,682063,682064,683475,683476,688128,688129,690364,690365,697607,697608,697614,697615,697625,697626,697630,697631,697635,697636,697648,697649,697655,697656,697658,697659,697664,697665,700775,700776,700794,700795,700799,700800,700824,700825,700833,700834,700841,700842,700851,700852,700861,700862,701025,701026,701027,701028,701029,701030,701031,701032,701068,701069,701070,701071,701073,701075,701076,701077,702007,702008,705561,705562,706417,706418,711120,711121,712308,712311,712760,712761,713132,713133,714618,714619,714709,714711,714713,714714,714716,714717,714719,714720,714722,714723,714725,714726,714728,714729,714733,714734,714738,714739,714744,714745,714749,714750,714768,714769,714788,714789,714794,714795,714814,714815,714830,714831,714835,714836,714852,714853,714858,714859,714877,714878,714891,714892,714896,714897,714914,714915,714920,714921,714940,714941,714955,714956,714958,714959,714961,714962,714964,714965,714967,714968,714970,714971,714973,714974,714976,714977,714979,714980,714982,714983,714985,714987,715282,715283,715323,715324,716642,716643,718137,718138,720896,720897,722031,722032,740678,740680,743439,743440,743611,743612,743652,743653,743777,743778,745026,745027,746076,746077,753664,753665,755211,755212,755636,755637,760500,760501,767482,767483,783723,783724,784213,784214,785589,785590,786432,786433,787503,787504,789385,789386,789811,789812,819200,819202,819422,819423,821465,821466,836777,836778,836808,836809,839371,839372,839375,839376,839648,839651,839672,839673,839688,839691,849473,851969,852474,854329,884736,884738,884958,884959,903007,917316,917503,917504") == "fed4a3d579585ec26a785df4ef0a531373bd2c63" || 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", "1160,1,575,728,742,775,782,784,785,1031,1036,1038,1039,1145,1146,1631,1632,2320,2321,2323,2325,2326,2327,2342,2343,2524,2525,2857,2967,2987,2998,3664,3695,3697,3698,3702,3703,3711,3712,3713,3714,5033,5237,5547,5817,8565,8595,9071,9072,9074,9480,9482,9483,10480,10482,16421,16422,16555,16556,19325,19327,25656,25658,32768,32770,32990,32991,34824,34825,34827,34829,34888,34889,35022,35024,35077,35078,35084,35085,35295,35296,35308,35932,35938,35939,35944,35945,36064,36067,37681,37682,39893,39894,39925,39926,40071,40072,40171,41587,43400,43401,43414,43415,43420,43421,43423,43424,45888,45889,46259,46260,46314,46317,46404,46405,46596,46597,49282,49283,49286,49287,49596,49597,49845,49846,50294,50295,51201,51202,51206,51207,51229,51230,52455,52456,52860,52861,52897,52898,56205,56207,59993,59994,60181,60182,61484,61485,61623,61624,61656,61657,62107,62108,62791,62792,64145,64146,64322,64323,65505,65506,65536,65537,68497,68498,68983,68984,73287,73288,76017,76018,77197,77198,77270,77271,77290,77293,80599,80600,83223,83224,84014,84015,84162,84163,84822,84823,84835,84836,84840,84841,85051,85054,85064,85065,90662,90663,92311,92312,92363,92364,92367,92370,92375,92376,94233,94234,94318,94319,94321,94322,94343,94344,95281,95284,95684,95687,95853,95854,95894,95895,97880,97881,97931,97932,98282,98283,98304,98306,98526,98527,99032,99033,99105,99106,99722,99723,103875,103876,103881,103882,104278,104279,105764,105765,107309,107310,107758,107759,107763,107764,107772,107773,107777,107778,107789,107790,107813,107814,109768,109769,109907,109908,110187,110190,110193,110194,111112,111113,111683,111684,115932,115935,118226,118227,118576,118577,121206,121207,121219,121220,121555,121556,123461,123462,123895,123896,124759,124870,125634,125635,126444,126483,128142,128147,128153,128154,128473,128474,128787,128788,128800,128801,128810,128813,128814,128815,128816,128817,128819,128820,128821,128822,128868,128869,128875,128876,128963,128964,128968,128969,128970,128972,128995,128996,129066,129067,129070,129075,129076,129077,129078,129079,129080,129081,130011,130012,130019,130020,130573,130575,131072,131073,131634,131636,131637,131638,131639,131640,131641,131642,131643,131644,131645,131646,131647,131648,131650,131651,131652,131655,132512,132514,132515,132516,132599,132600,132602,132603,132606,132608,132866,132867,132874,132876,133363,133365,133473,133474,133504,133505,133516,133517,133783,133784,133897,133898,133914,133916,133918,133919,142853,142854,150790,150791,152731,152732,153009,153098,154284,154537,155859,163842,164062,164063,164568,170664,170889,170930,170937,173037,175634,175736,175798,175799,177138,177451,179020,195911,196183,196229,196236,196609,197114,199312,202342,202352,203412,203413,213443,220990,221295,221796,221831,222113,222127,222131,222135,222136,222140,222143,222148,222149,222153,222155,222170,222171,222176,229378,229598,229599,230104,232455,232673,244670,245709,245722,245963,247445,248183,248216,249918,250088,250347,250634,251943,251944,252983,253026,253128,253285,255818,255851,256234,256391,256461,256496,256624,256832,259112,259113,260236,260269,260718,260763,262144,262145,262960,263034,264216,264238,265646,265918,266644,266646,270593,270595,270750,270751,274384,274385,278118,278161,279848,279849,280245,280246,280420,280421,281655,281677,281712,281713,286411,286412,288789,288790,289150,289151,289171,289172,289206,289207,289277,289278,291319,291320,294912,294914,295134,295135,300012,300053,300132,300659,303368,303375,304986,305005,305370,307534,309253,309254,316798,316839,319337,319541,319851,320121,326175,326231,327680,327681,331270,331271,331361,331528,344231,344272,344900,345199,355203,355258,355571,355870,358781,358782,359574,359576,360448,360449,368946,368987,369681,369744,375109,375243,381355,381356,385208,385209,386287,386317,393216,393217,397162,397163,402053,402054,407155,407211,409393,409394,409948,409949,410168,410169,411863,411893,411926,411929,413784,413785,413992,413993,418904,418905,419721,419725,419744,419745,419748,419749,419772,419773,419844,419845,419859,419860,419869,419870,419879,419880,419893,419894,419915,419916,419961,419963,419964,419965,419966,419967,419968,419969,419970,419971,419973,419974,419978,419979,419980,419981,419983,419984,419985,419986,419987,419988,419990,419991,419992,419993,419994,419995,419996,419997,419998,419999,420000,420001,420002,420003,420004,420005,420006,420007,420009,420010,420012,420013,420014,420017,420019,420021,420029,420030,420036,420038,420044,420045,420051,420052,420056,420057,421166,421167,421272,421274,421284,421286,421304,421306,421346,421347,421349,421364,421369,425985,426490,428749,428888,428921,428922,428923,429365,429368,432396,432397,432759,432760,432812,432813,434213,434214,435476,435477,436975,436977,437454,437455,443626,443627,443686,443687,443764,443765,443891,443892,444090,444091,444097,445631,450936,450937,451947,451948,452006,452007,458249,458250,458580,458581,458588,458589,458752,458753,459792,459793,462455,462456,462464,462465,462478,462479,462856,462857,462864,462865,465067,465068,473140,473141,474369,474370,474399,474400,474867,474868,476341,476342,476992,476993,477086,477089,477146,477147,477152,477153,478975,478976,479101,479102,479113,479114,486826,486827,489518,489519,491069,491072,491405,491406,491520,491521,493850,493851,497964,497965,500826,500827,507477,507478,508013,508014,524288,524289,529443,529446,530501,530504,530772,530773,542665,542666,545372,545373,545410,545411,551181,551182,557056,557057,565151,565152,574257,574258,574275,574276,574313,574314,574341,574342,574352,574353,574355,574356,574872,574873,576568,576569,576573,576574,576635,576636,589824,589825,590331,590332,590768,590769,590841,590842,590846,590847,590937,590938,593711,593712,593727,593728,593885,593886,598898,600514,600668,600669,600677,600678,600720,600721,600728,600729,600758,600761,602929,602930,603492,603493,603575,603576,603890,603893,603906,603907,608243,608244,608251,608252,608256,608257,608317,608318,614557,614558,615197,615198,615562,615563,615575,615576,622469,622470,622592,622593,623377,623378,630543,630544,638594,638595,650482,650483,651139,651140,651146,651147,651151,651152,651280,651281,651288,651289,651292,651293,651297,651298,651309,651310,655360,655361,666381,666382,682063,682064,683475,683476,688128,688129,690364,690365,697607,697608,697614,697615,697625,697626,697630,697631,697635,697636,697648,697649,697655,697656,697658,697659,697664,697665,700775,700776,700794,700795,700799,700800,700824,700825,700833,700834,700841,700842,700851,700852,700861,700862,701025,701026,701027,701028,701029,701030,701031,701032,701068,701069,701070,701071,701073,701075,701076,701077,702007,702008,705561,705562,706417,706418,711120,711121,712308,712311,712760,712761,713132,713133,714618,714619,714709,714711,714713,714714,714716,714717,714719,714720,714722,714723,714725,714726,714728,714729,714733,714734,714738,714739,714744,714745,714749,714750,714768,714769,714788,714789,714794,714795,714814,714815,714830,714831,714835,714836,714852,714853,714858,714859,714877,714878,714891,714892,714896,714897,714914,714915,714920,714921,714940,714941,714955,714956,714958,714959,714961,714962,714964,714965,714967,714968,714970,714971,714973,714974,714976,714977,714979,714980,714982,714983,714985,714987,715282,715283,715323,715324,716642,716643,718137,718138,720896,720897,722031,722032,740678,740680,743439,743440,743611,743612,743652,743653,743777,743778,745026,745027,746076,746077,753664,753665,755211,755212,755636,755637,760500,760501,767482,767483,783723,783724,784213,784214,785589,785590,786432,786433,787503,787504,789385,789386,789811,789812,819200,819202,819422,819423,821465,821466,836777,836778,836808,836809,839371,839372,839375,839376,839648,839651,839672,839673,839688,839691,849473,851969,852474,854329,884736,884738,884958,884959,903007,917316,917503,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;
if (range_sha1("/dev/block/bootdevice/by-name/vendor", "324,1,271,602,610,620,621,702,703,2409,2410,2474,2475,2477,2488,2726,2727,2732,2733,2735,2736,3244,3245,3253,3254,3732,3782,4183,4184,14567,14568,14686,14687,15455,15456,16088,16089,17065,17071,19324,19325,20974,20975,22246,22247,32768,32770,32864,32865,44059,44061,47140,47141,65536,65537,66043,66044,66495,66496,71489,71490,84022,84023,93300,93301,94323,94325,94342,94344,94823,94824,94899,94900,98304,98306,98400,98401,115479,115482,115500,115501,115546,115547,115565,115566,115568,115569,115655,115656,115662,115663,115688,115689,115724,115725,115917,115918,115942,115945,116174,116175,116188,116189,120418,120419,124946,124948,131072,131073,131590,131591,131593,131594,132150,132152,138534,138535,138537,138538,141566,141567,141568,141569,141591,141592,142017,142018,142074,142075,142416,142420,142423,142425,142426,142432,142751,142753,142758,142768,142777,142778,142780,142784,142933,142934,143550,143551,147992,147993,152386,152387,152811,152812,155631,155632,160070,160071,163840,163842,163936,163937,164976,164977,165401,165402,168036,168037,168567,168568,168624,168625,171476,171477,172454,172455,173289,174836,176682,176744,178714,178779,182033,182066,184346,184347,184555,184588,196608,196609,198594,198627,201050,201260,202151,202152,205145,205178,205977,206136,210758,210759,210998,211273,212646,212647,212669,212670,213354,216248,216252,219576,219593,219595,221537,221538,224050,224052,225911,225912,226004,226005,226198,226199,226802,226803,229376,229378,229472,229473,231846,231847,236240,236241,236665,236666,239485,239486,243924,243925,248228,248229,248653,248654,251288,251289,251819,251820,251876,251877,253724,253725,254519,254520,255570,255571,256599,256600,256913,256914,257889,259313,261486,261563,262144,262145,264454,264525,268264,268305,270462,270463,294912,294914,295008,295009,303478,303479,309387,309428,319103,319104,326683,326684,327271,327312,327680,327681,340354,340355,341056,341355,351069,351070,353594,353635,358592,358593,359537,359538,359562,359563,360448,360449,361368,361369,368402,368404,370957,370961,370982,370983,373485,373486,373494,373496,373520,373521,373546,373577,373583,373594,386991,393125,393215,393216") == "d440f11030f93b14d6f7d72fcdb1f2cbc2a6a767" || 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", "324,1,271,602,610,620,621,702,703,2409,2410,2474,2475,2477,2488,2726,2727,2732,2733,2735,2736,3244,3245,3253,3254,3732,3782,4183,4184,14567,14568,14686,14687,15455,15456,16088,16089,17065,17071,19324,19325,20974,20975,22246,22247,32768,32770,32864,32865,44059,44061,47140,47141,65536,65537,66043,66044,66495,66496,71489,71490,84022,84023,93300,93301,94323,94325,94342,94344,94823,94824,94899,94900,98304,98306,98400,98401,115479,115482,115500,115501,115546,115547,115565,115566,115568,115569,115655,115656,115662,115663,115688,115689,115724,115725,115917,115918,115942,115945,116174,116175,116188,116189,120418,120419,124946,124948,131072,131073,131590,131591,131593,131594,132150,132152,138534,138535,138537,138538,141566,141567,141568,141569,141591,141592,142017,142018,142074,142075,142416,142420,142423,142425,142426,142432,142751,142753,142758,142768,142777,142778,142780,142784,142933,142934,143550,143551,147992,147993,152386,152387,152811,152812,155631,155632,160070,160071,163840,163842,163936,163937,164976,164977,165401,165402,168036,168037,168567,168568,168624,168625,171476,171477,172454,172455,173289,174836,176682,176744,178714,178779,182033,182066,184346,184347,184555,184588,196608,196609,198594,198627,201050,201260,202151,202152,205145,205178,205977,206136,210758,210759,210998,211273,212646,212647,212669,212670,213354,216248,216252,219576,219593,219595,221537,221538,224050,224052,225911,225912,226004,226005,226198,226199,226802,226803,229376,229378,229472,229473,231846,231847,236240,236241,236665,236666,239485,239486,243924,243925,248228,248229,248653,248654,251288,251289,251819,251820,251876,251877,253724,253725,254519,254520,255570,255571,256599,256600,256913,256914,257889,259313,261486,261563,262144,262145,264454,264525,268264,268305,270462,270463,294912,294914,295008,295009,303478,303479,309387,309428,319103,319104,326683,326684,327271,327312,327680,327681,340354,340355,341056,341355,351069,351070,353594,353635,358592,358593,359537,359538,359562,359563,360448,360449,361368,361369,368402,368404,370957,370961,370982,370983,373485,373486,373494,373496,373520,373521,373546,373577,373583,373594,386991,393125,393215,393216") && 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 ----

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

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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hyp");
package_extract_file("firmware-update/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aop");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_config");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsec");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecapp");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/imagefv");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfw");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/dspso.bin", "/dev/block/bootdevice/by-name/dsp");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xbl");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aopbak");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_configbak");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecappbak");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/imagefvbak");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfwbak");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xblbak");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
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...");
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");
