From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julia Lawall Subject: Re: [PATCH v3 0/5] bq27xxx_battery data memory update Date: Wed, 20 Sep 2017 11:14:41 +0200 (CEST) Message-ID: References: <20170824033617.20840-1-liam@networkimprov.net> <0bf4ba2f-18f9-1204-8241-8acb6ac6f490@ti.com> <20170829212259.gs4bljwscrprsfjl@earth> <20170830002939.ns43wldvffmwqhuv@earth> Mime-Version: 1.0 Content-Type: multipart/mixed; BOUNDARY="8323329-2108412672-1505898882=:3290" Return-path: Received: from mail3-relais-sop.national.inria.fr ([192.134.164.104]:49686 "EHLO mail3-relais-sop.national.inria.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751378AbdITJPT (ORCPT ); Wed, 20 Sep 2017 05:15:19 -0400 In-Reply-To: Sender: linux-pm-owner@vger.kernel.org List-Id: linux-pm@vger.kernel.org To: Liam Breck Cc: Sebastian Reichel , Gilles Muller , Nicolas Palix , Michal Marek , cocci@systeme.lip6.fr, "Andrew F. Davis" , =?ISO-8859-15?Q?Pali_Roh=E1r?= , Linux PM mailing list This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-2108412672-1505898882=:3290 Content-Type: text/plain; charset=US-ASCII On Tue, 19 Sep 2017, Liam Breck wrote: > On Tue, Sep 19, 2017 at 3:00 PM, Julia Lawall wrote: > > > > > > On Tue, 19 Sep 2017, Liam Breck wrote: > > > >> Hi Julia, > >> > >> I think Sebastian referred this to you in hopes of receiving a script > >> that would find duplicate arrays, similarly to the way > >> bq27xxx_battery_dbg_dupes does in the running code. Did you interpret > >> his request differently? > >> > >> bq27xxx_battery_dbg_dupes: > >> https://patchwork.kernel.org/patch/9918953/ > >> > >> The data structures being checked start here: > >> https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git/tree/drivers/power/supply/bq27xxx_battery.c?h=for-next#n138 > >> > >> And are aggregated here: > >> https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git/tree/drivers/power/supply/bq27xxx_battery.c?h=for-next#n743 > >> > >> The defines can be sed'd to pointers with 0 value, and array > >> comparisons where 1 pointer is 0 can be skipped. > > > > I followed the spirit of the runtime testing code. But Coccinelle doesn't > > normally unfold the definitions of macros. All it can do is take the > > different lists of fields and see if they are textually the same. > > There's no need to unfold macros. If you did, you would get false > positives. You do need to skip them somehow, hence the idea of sed'ing > to null pointers. I meant that for the properties, the values are: static enum power_supply_property bq27000_props[] = { POWER_SUPPLY_PROP_STATUS, POWER_SUPPLY_PROP_PRESENT, POWER_SUPPLY_PROP_VOLTAGE_NOW, POWER_SUPPLY_PROP_CURRENT_NOW, POWER_SUPPLY_PROP_CAPACITY, POWER_SUPPLY_PROP_CAPACITY_LEVEL, POWER_SUPPLY_PROP_TEMP, POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG, POWER_SUPPLY_PROP_TIME_TO_FULL_NOW, POWER_SUPPLY_PROP_TECHNOLOGY, POWER_SUPPLY_PROP_CHARGE_FULL, POWER_SUPPLY_PROP_CHARGE_NOW, POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, POWER_SUPPLY_PROP_CYCLE_COUNT, POWER_SUPPLY_PROP_ENERGY_NOW, POWER_SUPPLY_PROP_POWER_AVG, POWER_SUPPLY_PROP_HEALTH, POWER_SUPPLY_PROP_MANUFACTURER, }; Coccinelle is comparing the list of names, not the list of integers that these names are expanding to. Also, Coccinelle is comparing the list, but I guess you would prefer that it compare the set, to check for the cases where the names are the same but appear in a different order. > > > I've attached the script and some fake data that I made to test it. The > > fake data has some added cases where I have replaced 27 in the structure > > name by 07. For my test data I get: > > > > bq07421_regs and bq27421_regs have the same registers > > bq07000_regs and bq27000_regs have the same registers > > bq07421_dm_regs and bq27421_dm_regs have the same registers > > bq07421_props and bq27421_props have the same properties > > bq07000_props and bq27000_props have the same properties > > > > You won't get this currently; I needed to make some improvements to the > > Coccinelle C code parser. > > I didn't see anything attached, script or data. Sorry, should be there now. > The script should compare each object with only those objects that > follow it in sequence, so it doesn't repeat comparisons or compare to > self. It does this, ie it only compares xxx to yyy when xxx is alphabetically less than yyy. julia --8323329-2108412672-1505898882=:3290 Content-Type: text/plain; charset=US-ASCII; name=battery.cocci Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=battery.cocci QHN0ckANCnR5cGUgdDsNCmlkZW50aWZpZXIgaSxpMSxpMjsNCmV4cHJlc3Np b24gZTEsZTI7DQpAQA0KDQp0IGlbXSA9IHsNCiAgLi4uLA0KICBbZTFdID0g QlEyN1hYWF9EQVRBKGkxLC4uLiksDQogIC4uLiwNCiAgW2UyXSA9IEJRMjdY WFhfREFUQShpMiwuLi4pLA0KICAuLi4sDQp9Ow0KDQpAc2NyaXB0Om9jYW1s IHRvY2hlY2tADQppMSA8PCBzdHIuaTE7DQppMiA8PCBzdHIuaTI7DQppMXJl Z3M7IGkycmVnczsNCmkxZG1yZWdzOyBpMmRtcmVnczsNCmkxcHJvcHM7IGky cHJvcHM7DQpAQA0KDQppZiBub3QoaTEgPSBpMikNCnRoZW4NCiAgYmVnaW4N CiAgICBpMXJlZ3MgOj0gbWFrZV9pZGVudCAoaTEgXiAiX3JlZ3MiKTsNCiAg ICBpMnJlZ3MgOj0gbWFrZV9pZGVudCAoaTIgXiAiX3JlZ3MiKTsNCiAgICBp MWRtcmVncyA6PSBtYWtlX2lkZW50IChpMSBeICJfZG1fcmVncyIpOw0KICAg IGkyZG1yZWdzIDo9IG1ha2VfaWRlbnQgKGkyIF4gIl9kbV9yZWdzIik7DQog ICAgaTFwcm9wcyA6PSBtYWtlX2lkZW50IChpMSBeICJfcHJvcHMiKTsNCiAg ICBpMnByb3BzIDo9IG1ha2VfaWRlbnQgKGkyIF4gIl9wcm9wcyIpDQogIGVu ZA0KDQooKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICopDQoNCkBnZXRyZWdzMUAN CnR5cGVkZWYgdTg7DQppZGVudGlmaWVyIHRvY2hlY2suaTFyZWdzOw0KaW5p dGlhbGl6ZXIgbGlzdCBpMXJlZ3NfdmFsczsNCkBADQoNCnU4IGkxcmVnc1su Li5dID0geyBpMXJlZ3NfdmFscywgfTsNCg0KQGdldHJlZ3MyQA0KaWRlbnRp ZmllciB0b2NoZWNrLmkycmVnczsNCmluaXRpYWxpemVyIGxpc3QgaTJyZWdz X3ZhbHM7DQpAQA0KDQp1OCBpMnJlZ3NbLi4uXSA9IHsgaTJyZWdzX3ZhbHMs IH07DQoNCkBzY3JpcHQ6b2NhbWxADQooXyxpMXJlZ3NfdmFscykgPDwgZ2V0 cmVnczEuaTFyZWdzX3ZhbHM7DQooXyxpMnJlZ3NfdmFscykgPDwgZ2V0cmVn czIuaTJyZWdzX3ZhbHM7DQppMXJlZ3MgPDwgdG9jaGVjay5pMXJlZ3M7DQpp MnJlZ3MgPDwgdG9jaGVjay5pMnJlZ3M7DQpAQA0KDQppZiBpMXJlZ3MgPCBp MnJlZ3MgJiYNCiAgIExpc3Quc29ydCBjb21wYXJlIGkxcmVnc192YWxzID0g TGlzdC5zb3J0IGNvbXBhcmUgaTJyZWdzX3ZhbHMNCnRoZW4gUHJpbnRmLnBy aW50ZiAiJXMgYW5kICVzIGhhdmUgdGhlIHNhbWUgcmVnaXN0ZXJzXG4iIGkx cmVncyBpMnJlZ3MNCg0KKCogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqKQ0KDQpA Z2V0ZG1yZWdzMUANCmlkZW50aWZpZXIgdG9jaGVjay5pMWRtcmVnczsNCmlu aXRpYWxpemVyIGxpc3QgaTFkbXJlZ3NfdmFsczsNCkBADQoNCnN0cnVjdCBi cTI3eHh4X2RtX3JlZyBpMWRtcmVnc1tdID0geyBpMWRtcmVnc192YWxzLCB9 Ow0KDQpAZ2V0ZG1yZWdzMkANCmlkZW50aWZpZXIgdG9jaGVjay5pMmRtcmVn czsNCmluaXRpYWxpemVyIGxpc3QgaTJkbXJlZ3NfdmFsczsNCkBADQoNCnN0 cnVjdCBicTI3eHh4X2RtX3JlZyBpMmRtcmVnc1tdID0geyBpMmRtcmVnc192 YWxzLCB9Ow0KDQpAc2NyaXB0Om9jYW1sQA0KKF8saTFkbXJlZ3NfdmFscykg PDwgZ2V0ZG1yZWdzMS5pMWRtcmVnc192YWxzOw0KKF8saTJkbXJlZ3NfdmFs cykgPDwgZ2V0ZG1yZWdzMi5pMmRtcmVnc192YWxzOw0KaTFkbXJlZ3MgPDwg dG9jaGVjay5pMWRtcmVnczsNCmkyZG1yZWdzIDw8IHRvY2hlY2suaTJkbXJl Z3M7DQpAQA0KDQppZiBpMWRtcmVncyA8IGkyZG1yZWdzICYmDQogICBMaXN0 LnNvcnQgY29tcGFyZSBpMWRtcmVnc192YWxzID0gTGlzdC5zb3J0IGNvbXBh cmUgaTJkbXJlZ3NfdmFscw0KdGhlbiBQcmludGYucHJpbnRmICIlcyBhbmQg JXMgaGF2ZSB0aGUgc2FtZSByZWdpc3RlcnNcbiIgaTFkbXJlZ3MgaTJkbXJl Z3MNCg0KKCogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqKQ0KDQpAZ2V0cHJvcHMx QA0KaWRlbnRpZmllciB0b2NoZWNrLmkxcHJvcHM7DQppbml0aWFsaXplciBs aXN0W24xXSBpMXByb3BzX3ZhbHM7DQpAQA0KDQplbnVtIHBvd2VyX3N1cHBs eV9wcm9wZXJ0eSBpMXByb3BzW10gPSB7IGkxcHJvcHNfdmFscywgfTsNCg0K QGdldHByb3BzMkANCmlkZW50aWZpZXIgdG9jaGVjay5pMnByb3BzOw0KaW5p dGlhbGl6ZXIgbGlzdFtuMl0gaTJwcm9wc192YWxzOw0KQEANCg0KZW51bSBw b3dlcl9zdXBwbHlfcHJvcGVydHkgaTJwcm9wc1tdID0geyBpMnByb3BzX3Zh bHMsIH07DQoNCkBzY3JpcHQ6b2NhbWxADQppMXByb3BzX3ZhbHMgPDwgZ2V0 cHJvcHMxLmkxcHJvcHNfdmFsczsNCmkycHJvcHNfdmFscyA8PCBnZXRwcm9w czIuaTJwcm9wc192YWxzOw0KaTFwcm9wcyA8PCB0b2NoZWNrLmkxcHJvcHM7 DQppMnByb3BzIDw8IHRvY2hlY2suaTJwcm9wczsNCkBADQoNCmlmIGkxcHJv cHMgPCBpMnByb3BzICYmIGkxcHJvcHNfdmFscyA9IGkycHJvcHNfdmFscw0K dGhlbiBQcmludGYucHJpbnRmICIlcyBhbmQgJXMgaGF2ZSB0aGUgc2FtZSBw cm9wZXJ0aWVzXG4iIGkxcHJvcHMgaTJwcm9wcw0KDQo= --8323329-2108412672-1505898882=:3290 Content-Type: text/x-csrc; name=battery.c Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=battery.c LyoNCiAqIEJRMjd4eHggYmF0dGVyeSBkcml2ZXINCiAqDQogKiBDb3B5cmln aHQgKEMpIDIwMDggUm9kb2xmbyBHaW9tZXR0aSA8Z2lvbWV0dGlAbGludXgu aXQ+DQogKiBDb3B5cmlnaHQgKEMpIDIwMDggRXVyb3RlY2ggUy5wLkEuIDxp bmZvQGV1cm90ZWNoLml0Pg0KICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEg TGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+DQogKiBDb3B5 cmlnaHQgKEMpIDIwMTEgUGFsaSBSb2jDoXIgPHBhbGkucm9oYXJAZ21haWwu Y29tPg0KICogQ29weXJpZ2h0IChDKSAyMDE3IExpYW0gQnJlY2sgPGtlcm5l bEBuZXR3b3JraW1wcm92Lm5ldD4NCiAqDQogKiBCYXNlZCBvbiBhIHByZXZp b3VzIHdvcmsgYnkgQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1l bnRzLCBJbmMuDQogKg0KICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFzDQogKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCiAqDQogKiBUSElTIFBBQ0tBR0Ug SVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNT IE9SDQogKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9V VCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRA0KICogV0FSUkFOVElFUyBPRiBN RVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLg0KICoNCiAqIERhdGFzaGVldHM6DQogKiBodHRwOi8vd3d3LnRp LmNvbS9wcm9kdWN0L2JxMjcwMDANCiAqIGh0dHA6Ly93d3cudGkuY29tL3By b2R1Y3QvYnEyNzIwMA0KICogaHR0cDovL3d3dy50aS5jb20vcHJvZHVjdC9i cTI3MDEwDQogKiBodHRwOi8vd3d3LnRpLmNvbS9wcm9kdWN0L2JxMjcyMTAN CiAqIGh0dHA6Ly93d3cudGkuY29tL3Byb2R1Y3QvYnEyNzUwMA0KICogaHR0 cDovL3d3dy50aS5jb20vcHJvZHVjdC9icTI3NTEwLWcxDQogKiBodHRwOi8v d3d3LnRpLmNvbS9wcm9kdWN0L2JxMjc1MTAtZzINCiAqIGh0dHA6Ly93d3cu dGkuY29tL3Byb2R1Y3QvYnEyNzUxMC1nMw0KICogaHR0cDovL3d3dy50aS5j b20vcHJvZHVjdC9icTI3NTIwLWc0DQogKiBodHRwOi8vd3d3LnRpLmNvbS9w cm9kdWN0L2JxMjc1MjAtZzENCiAqIGh0dHA6Ly93d3cudGkuY29tL3Byb2R1 Y3QvYnEyNzUyMC1nMg0KICogaHR0cDovL3d3dy50aS5jb20vcHJvZHVjdC9i cTI3NTIwLWczDQogKiBodHRwOi8vd3d3LnRpLmNvbS9wcm9kdWN0L2JxMjc1 MjAtZzQNCiAqIGh0dHA6Ly93d3cudGkuY29tL3Byb2R1Y3QvYnEyNzUzMC1n MQ0KICogaHR0cDovL3d3dy50aS5jb20vcHJvZHVjdC9icTI3NTMxLWcxDQog KiBodHRwOi8vd3d3LnRpLmNvbS9wcm9kdWN0L2JxMjc1NDEtZzENCiAqIGh0 dHA6Ly93d3cudGkuY29tL3Byb2R1Y3QvYnEyNzU0Mi1nMQ0KICogaHR0cDov L3d3dy50aS5jb20vcHJvZHVjdC9icTI3NTQ2LWcxDQogKiBodHRwOi8vd3d3 LnRpLmNvbS9wcm9kdWN0L2JxMjc3NDItZzENCiAqIGh0dHA6Ly93d3cudGku Y29tL3Byb2R1Y3QvYnEyNzU0NS1nMQ0KICogaHR0cDovL3d3dy50aS5jb20v cHJvZHVjdC9icTI3NDIxLWcxDQogKiBodHRwOi8vd3d3LnRpLmNvbS9wcm9k dWN0L2JxMjc0MjUtZzENCiAqIGh0dHA6Ly93d3cudGkuY29tL3Byb2R1Y3Qv YnEyNzQxMS1nMQ0KICogaHR0cDovL3d3dy50aS5jb20vcHJvZHVjdC9icTI3 NjIxLWcxDQogKi8NCg0KI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KI2luY2x1ZGUgPGxpbnV4L211dGV4 Lmg+DQojaW5jbHVkZSA8bGludXgvcGFyYW0uaD4NCiNpbmNsdWRlIDxsaW51 eC9qaWZmaWVzLmg+DQojaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+DQoj aW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCiNpbmNsdWRlIDxsaW51eC9wbGF0 Zm9ybV9kZXZpY2UuaD4NCiNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHku aD4NCiNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQojaW5jbHVkZSA8bGludXgv b2YuaD4NCg0KI2luY2x1ZGUgPGxpbnV4L3Bvd2VyL2JxMjd4eHhfYmF0dGVy eS5oPg0KDQojZGVmaW5lIEJRMjdYWFhfTUFOVUZBQ1RVUkVSCSJUZXhhcyBJ bnN0cnVtZW50cyINCg0KLyogQlEyN1hYWCBGbGFncyAqLw0KI2RlZmluZSBC UTI3WFhYX0ZMQUdfRFNDCUJJVCgwKQ0KI2RlZmluZSBCUTI3WFhYX0ZMQUdf U09DRglCSVQoMSkgLyogU3RhdGUtb2YtQ2hhcmdlIHRocmVzaG9sZCBmaW5h bCAqLw0KI2RlZmluZSBCUTI3WFhYX0ZMQUdfU09DMQlCSVQoMikgLyogU3Rh dGUtb2YtQ2hhcmdlIHRocmVzaG9sZCAxICovDQojZGVmaW5lIEJRMjdYWFhf RkxBR19DRkdVUAlCSVQoNCkNCiNkZWZpbmUgQlEyN1hYWF9GTEFHX0ZDCQlC SVQoOSkNCiNkZWZpbmUgQlEyN1hYWF9GTEFHX09URAlCSVQoMTQpDQojZGVm aW5lIEJRMjdYWFhfRkxBR19PVEMJQklUKDE1KQ0KI2RlZmluZSBCUTI3WFhY X0ZMQUdfVVQJCUJJVCgxNCkNCiNkZWZpbmUgQlEyN1hYWF9GTEFHX09UCQlC SVQoMTUpDQoNCi8qIEJRMjcwMDAgaGFzIGRpZmZlcmVudCBsYXlvdXQgZm9y IEZsYWdzIHJlZ2lzdGVyICovDQojZGVmaW5lIEJRMjcwMDBfRkxBR19FRFZG CUJJVCgwKSAvKiBGaW5hbCBFbmQtb2YtRGlzY2hhcmdlLVZvbHRhZ2UgZmxh ZyAqLw0KI2RlZmluZSBCUTI3MDAwX0ZMQUdfRURWMQlCSVQoMSkgLyogRmly c3QgRW5kLW9mLURpc2NoYXJnZS1Wb2x0YWdlIGZsYWcgKi8NCiNkZWZpbmUg QlEyNzAwMF9GTEFHX0NJCQlCSVQoNCkgLyogQ2FwYWNpdHkgSW5hY2N1cmF0 ZSBmbGFnICovDQojZGVmaW5lIEJRMjcwMDBfRkxBR19GQwkJQklUKDUpDQoj ZGVmaW5lIEJRMjcwMDBfRkxBR19DSEdTCUJJVCg3KSAvKiBDaGFyZ2Ugc3Rh dGUgZmxhZyAqLw0KDQovKiBjb250cm9sIHJlZ2lzdGVyIHBhcmFtcyAqLw0K I2RlZmluZSBCUTI3WFhYX1NFQUxFRAkJCTB4MjANCiNkZWZpbmUgQlEyN1hY WF9TRVRfQ0ZHVVBEQVRFCQkweDEzDQojZGVmaW5lIEJRMjdYWFhfU09GVF9S RVNFVAkJMHg0Mg0KI2RlZmluZSBCUTI3WFhYX1JFU0VUCQkJMHg0MQ0KDQoj ZGVmaW5lIEJRMjdYWFhfUlMJCQkoMjApIC8qIFJlc2lzdG9yIHNlbnNlIG1P aG0gKi8NCiNkZWZpbmUgQlEyN1hYWF9QT1dFUl9DT05TVEFOVAkJKDI5MjAw KSAvKiAyOS4yIMK1Vl4yICogMTAwMCAqLw0KI2RlZmluZSBCUTI3WFhYX0NV UlJFTlRfQ09OU1RBTlQJKDM1NzApIC8qIDMuNTcgwrVWICogMTAwMCAqLw0K DQojZGVmaW5lIElOVkFMSURfUkVHX0FERFIJMHhmZg0KDQovKg0KICogYnEy N3h4eF9yZWdfaW5kZXggLSBSZWdpc3RlciBuYW1lcw0KICoNCiAqIFRoZXNl IGFyZSBpbmRleGVzIGludG8gYSBkZXZpY2UncyByZWdpc3RlciBtYXBwaW5n IGFycmF5Lg0KICovDQoNCmVudW0gYnEyN3h4eF9yZWdfaW5kZXggew0KCUJR MjdYWFhfUkVHX0NUUkwgPSAwLAkvKiBDb250cm9sICovDQoJQlEyN1hYWF9S RUdfVEVNUCwJLyogVGVtcGVyYXR1cmUgKi8NCglCUTI3WFhYX1JFR19JTlRf VEVNUCwJLyogSW50ZXJuYWwgVGVtcGVyYXR1cmUgKi8NCglCUTI3WFhYX1JF R19WT0xULAkvKiBWb2x0YWdlICovDQoJQlEyN1hYWF9SRUdfQUksCQkvKiBB dmVyYWdlIEN1cnJlbnQgKi8NCglCUTI3WFhYX1JFR19GTEFHUywJLyogRmxh Z3MgKi8NCglCUTI3WFhYX1JFR19UVEUsCS8qIFRpbWUtdG8tRW1wdHkgKi8N CglCUTI3WFhYX1JFR19UVEYsCS8qIFRpbWUtdG8tRnVsbCAqLw0KCUJRMjdY WFhfUkVHX1RURVMsCS8qIFRpbWUtdG8tRW1wdHkgU3RhbmRieSAqLw0KCUJR MjdYWFhfUkVHX1RURUNQLAkvKiBUaW1lLXRvLUVtcHR5IGF0IENvbnN0YW50 IFBvd2VyICovDQoJQlEyN1hYWF9SRUdfTkFDLAkvKiBOb21pbmFsIEF2YWls YWJsZSBDYXBhY2l0eSAqLw0KCUJRMjdYWFhfUkVHX0ZDQywJLyogRnVsbCBD aGFyZ2UgQ2FwYWNpdHkgKi8NCglCUTI3WFhYX1JFR19DWUNULAkvKiBDeWNs ZSBDb3VudCAqLw0KCUJRMjdYWFhfUkVHX0FFLAkJLyogQXZhaWxhYmxlIEVu ZXJneSAqLw0KCUJRMjdYWFhfUkVHX1NPQywJLyogU3RhdGUtb2YtQ2hhcmdl ICovDQoJQlEyN1hYWF9SRUdfRENBUCwJLyogRGVzaWduIENhcGFjaXR5ICov DQoJQlEyN1hYWF9SRUdfQVAsCQkvKiBBdmVyYWdlIFBvd2VyICovDQoJQlEy N1hYWF9ETV9DVFJMLAkvKiBCbG9jayBEYXRhIENvbnRyb2wgKi8NCglCUTI3 WFhYX0RNX0NMQVNTLAkvKiBEYXRhIENsYXNzICovDQoJQlEyN1hYWF9ETV9C TE9DSywJLyogRGF0YSBCbG9jayAqLw0KCUJRMjdYWFhfRE1fREFUQSwJLyog QmxvY2sgRGF0YSAqLw0KCUJRMjdYWFhfRE1fQ0tTVU0sCS8qIEJsb2NrIERh dGEgQ2hlY2tzdW0gKi8NCglCUTI3WFhYX1JFR19NQVgsCS8qIHNlbnRpbmVs ICovDQp9Ow0KDQojZGVmaW5lIEJRMjdYWFhfRE1fUkVHX1JPV1MgXA0KCVtC UTI3WFhYX0RNX0NUUkxdID0gMHg2MSwgIFwNCglbQlEyN1hYWF9ETV9DTEFT U10gPSAweDNlLCBcDQoJW0JRMjdYWFhfRE1fQkxPQ0tdID0gMHgzZiwgXA0K CVtCUTI3WFhYX0RNX0RBVEFdID0gMHg0MCwgIFwNCglbQlEyN1hYWF9ETV9D S1NVTV0gPSAweDYwDQoNCi8qIFJlZ2lzdGVyIG1hcHBpbmdzICovDQpzdGF0 aWMgdTgNCglicTI3MDAwX3JlZ3NbQlEyN1hYWF9SRUdfTUFYXSA9IHsNCgkJ W0JRMjdYWFhfUkVHX0NUUkxdID0gMHgwMCwNCgkJW0JRMjdYWFhfUkVHX1RF TVBdID0gMHgwNiwNCgkJW0JRMjdYWFhfUkVHX0lOVF9URU1QXSA9IElOVkFM SURfUkVHX0FERFIsDQoJCVtCUTI3WFhYX1JFR19WT0xUXSA9IDB4MDgsDQoJ CVtCUTI3WFhYX1JFR19BSV0gPSAweDE0LA0KCQlbQlEyN1hYWF9SRUdfRkxB R1NdID0gMHgwYSwNCgkJW0JRMjdYWFhfUkVHX1RURV0gPSAweDE2LA0KCQlb QlEyN1hYWF9SRUdfVFRGXSA9IDB4MTgsDQoJCVtCUTI3WFhYX1JFR19UVEVT XSA9IDB4MWMsDQoJCVtCUTI3WFhYX1JFR19UVEVDUF0gPSAweDI2LA0KCQlb QlEyN1hYWF9SRUdfTkFDXSA9IDB4MGMsDQoJCVtCUTI3WFhYX1JFR19GQ0Nd ID0gMHgxMiwNCgkJW0JRMjdYWFhfUkVHX0NZQ1RdID0gMHgyYSwNCgkJW0JR MjdYWFhfUkVHX0FFXSA9IDB4MjIsDQoJCVtCUTI3WFhYX1JFR19TT0NdID0g MHgwYiwNCgkJW0JRMjdYWFhfUkVHX0RDQVBdID0gMHg3NiwNCgkJW0JRMjdY WFhfUkVHX0FQXSA9IDB4MjQsDQoJCVtCUTI3WFhYX0RNX0NUUkxdID0gSU5W QUxJRF9SRUdfQUREUiwNCgkJW0JRMjdYWFhfRE1fQ0xBU1NdID0gSU5WQUxJ RF9SRUdfQUREUiwNCgkJW0JRMjdYWFhfRE1fQkxPQ0tdID0gSU5WQUxJRF9S RUdfQUREUiwNCgkJW0JRMjdYWFhfRE1fREFUQV0gPSBJTlZBTElEX1JFR19B RERSLA0KCQlbQlEyN1hYWF9ETV9DS1NVTV0gPSBJTlZBTElEX1JFR19BRERS LA0KCX0sDQoJYnEwNzAwMF9yZWdzW0JRMjdYWFhfUkVHX01BWF0gPSB7DQoJ CVtCUTI3WFhYX1JFR19DVFJMXSA9IDB4MDAsDQoJCVtCUTI3WFhYX1JFR19U RU1QXSA9IDB4MDYsDQoJCVtCUTI3WFhYX1JFR19JTlRfVEVNUF0gPSBJTlZB TElEX1JFR19BRERSLA0KCQlbQlEyN1hYWF9SRUdfVk9MVF0gPSAweDA4LA0K CQlbQlEyN1hYWF9SRUdfQUldID0gMHgxNCwNCgkJW0JRMjdYWFhfUkVHX0ZM QUdTXSA9IDB4MGEsDQoJCVtCUTI3WFhYX1JFR19UVEVdID0gMHgxNiwNCgkJ W0JRMjdYWFhfUkVHX1RURl0gPSAweDE4LA0KCQlbQlEyN1hYWF9SRUdfVFRF U10gPSAweDFjLA0KCQlbQlEyN1hYWF9SRUdfVFRFQ1BdID0gMHgyNiwNCgkJ W0JRMjdYWFhfUkVHX05BQ10gPSAweDBjLA0KCQlbQlEyN1hYWF9SRUdfRkND XSA9IDB4MTIsDQoJCVtCUTI3WFhYX1JFR19DWUNUXSA9IDB4MmEsDQoJCVtC UTI3WFhYX1JFR19BRV0gPSAweDIyLA0KCQlbQlEyN1hYWF9SRUdfU09DXSA9 IDB4MGIsDQoJCVtCUTI3WFhYX1JFR19EQ0FQXSA9IDB4NzYsDQoJCVtCUTI3 WFhYX1JFR19BUF0gPSAweDI0LA0KCQlbQlEyN1hYWF9ETV9DVFJMXSA9IElO VkFMSURfUkVHX0FERFIsDQoJCVtCUTI3WFhYX0RNX0NMQVNTXSA9IElOVkFM SURfUkVHX0FERFIsDQoJCVtCUTI3WFhYX0RNX0JMT0NLXSA9IElOVkFMSURf UkVHX0FERFIsDQoJCVtCUTI3WFhYX0RNX0RBVEFdID0gSU5WQUxJRF9SRUdf QUREUiwNCgkJW0JRMjdYWFhfRE1fQ0tTVU1dID0gSU5WQUxJRF9SRUdfQURE UiwNCgl9LA0KCWJxMjcwMTBfcmVnc1tCUTI3WFhYX1JFR19NQVhdID0gew0K CQlbQlEyN1hYWF9SRUdfQ1RSTF0gPSAweDAwLA0KCQlbQlEyN1hYWF9SRUdf VEVNUF0gPSAweDA2LA0KCQlbQlEyN1hYWF9SRUdfSU5UX1RFTVBdID0gSU5W QUxJRF9SRUdfQUREUiwNCgkJW0JRMjdYWFhfUkVHX1ZPTFRdID0gMHgwOCwN CgkJW0JRMjdYWFhfUkVHX0FJXSA9IDB4MTQsDQoJCVtCUTI3WFhYX1JFR19G TEFHU10gPSAweDBhLA0KCQlbQlEyN1hYWF9SRUdfVFRFXSA9IDB4MTYsDQoJ CVtCUTI3WFhYX1JFR19UVEZdID0gMHgxOCwNCgkJW0JRMjdYWFhfUkVHX1RU RVNdID0gMHgxYywNCgkJW0JRMjdYWFhfUkVHX1RURUNQXSA9IDB4MjYsDQoJ CVtCUTI3WFhYX1JFR19OQUNdID0gMHgwYywNCgkJW0JRMjdYWFhfUkVHX0ZD Q10gPSAweDEyLA0KCQlbQlEyN1hYWF9SRUdfQ1lDVF0gPSAweDJhLA0KCQlb QlEyN1hYWF9SRUdfQUVdID0gSU5WQUxJRF9SRUdfQUREUiwNCgkJW0JRMjdY WFhfUkVHX1NPQ10gPSAweDBiLA0KCQlbQlEyN1hYWF9SRUdfRENBUF0gPSAw eDc2LA0KCQlbQlEyN1hYWF9SRUdfQVBdID0gSU5WQUxJRF9SRUdfQUREUiwN CgkJW0JRMjdYWFhfRE1fQ1RSTF0gPSBJTlZBTElEX1JFR19BRERSLA0KCQlb QlEyN1hYWF9ETV9DTEFTU10gPSBJTlZBTElEX1JFR19BRERSLA0KCQlbQlEy N1hYWF9ETV9CTE9DS10gPSBJTlZBTElEX1JFR19BRERSLA0KCQlbQlEyN1hY WF9ETV9EQVRBXSA9IElOVkFMSURfUkVHX0FERFIsDQoJCVtCUTI3WFhYX0RN X0NLU1VNXSA9IElOVkFMSURfUkVHX0FERFIsDQoJfSwNCglicTI3NTB4X3Jl Z3NbQlEyN1hYWF9SRUdfTUFYXSA9IHsNCgkJW0JRMjdYWFhfUkVHX0NUUkxd ID0gMHgwMCwNCgkJW0JRMjdYWFhfUkVHX1RFTVBdID0gMHgwNiwNCgkJW0JR MjdYWFhfUkVHX0lOVF9URU1QXSA9IDB4MjgsDQoJCVtCUTI3WFhYX1JFR19W T0xUXSA9IDB4MDgsDQoJCVtCUTI3WFhYX1JFR19BSV0gPSAweDE0LA0KCQlb QlEyN1hYWF9SRUdfRkxBR1NdID0gMHgwYSwNCgkJW0JRMjdYWFhfUkVHX1RU RV0gPSAweDE2LA0KCQlbQlEyN1hYWF9SRUdfVFRGXSA9IElOVkFMSURfUkVH X0FERFIsDQoJCVtCUTI3WFhYX1JFR19UVEVTXSA9IDB4MWEsDQoJCVtCUTI3 WFhYX1JFR19UVEVDUF0gPSBJTlZBTElEX1JFR19BRERSLA0KCQlbQlEyN1hY WF9SRUdfTkFDXSA9IDB4MGMsDQoJCVtCUTI3WFhYX1JFR19GQ0NdID0gMHgx MiwNCgkJW0JRMjdYWFhfUkVHX0NZQ1RdID0gMHgyYSwNCgkJW0JRMjdYWFhf UkVHX0FFXSA9IElOVkFMSURfUkVHX0FERFIsDQoJCVtCUTI3WFhYX1JFR19T T0NdID0gMHgyYywNCgkJW0JRMjdYWFhfUkVHX0RDQVBdID0gMHgzYywNCgkJ W0JRMjdYWFhfUkVHX0FQXSA9IElOVkFMSURfUkVHX0FERFIsDQoJCUJRMjdY WFhfRE1fUkVHX1JPV1MsDQoJfSwNCiNkZWZpbmUgYnEyNzUxeF9yZWdzIGJx Mjc1MTBnM19yZWdzDQojZGVmaW5lIGJxMjc1MnhfcmVncyBicTI3NTEwZzNf cmVncw0KCWJxMjc1MDBfcmVnc1tCUTI3WFhYX1JFR19NQVhdID0gew0KCQlb QlEyN1hYWF9SRUdfQ1RSTF0gPSAweDAwLA0KCQlbQlEyN1hYWF9SRUdfVEVN UF0gPSAweDA2LA0KCQlbQlEyN1hYWF9SRUdfSU5UX1RFTVBdID0gSU5WQUxJ RF9SRUdfQUREUiwNCgkJW0JRMjdYWFhfUkVHX1ZPTFRdID0gMHgwOCwNCgkJ W0JRMjdYWFhfUkVHX0FJXSA9IDB4MTQsDQoJCVtCUTI3WFhYX1JFR19GTEFH U10gPSAweDBhLA0KCQlbQlEyN1hYWF9SRUdfVFRFXSA9IDB4MTYsDQoJCVtC UTI3WFhYX1JFR19UVEZdID0gMHgxOCwNCgkJW0JRMjdYWFhfUkVHX1RURVNd ID0gMHgxYywNCgkJW0JRMjdYWFhfUkVHX1RURUNQXSA9IDB4MjYsDQoJCVtC UTI3WFhYX1JFR19OQUNdID0gMHgwYywNCgkJW0JRMjdYWFhfUkVHX0ZDQ10g PSAweDEyLA0KCQlbQlEyN1hYWF9SRUdfQ1lDVF0gPSAweDJhLA0KCQlbQlEy N1hYWF9SRUdfQUVdID0gMHgyMiwNCgkJW0JRMjdYWFhfUkVHX1NPQ10gPSAw eDJjLA0KCQlbQlEyN1hYWF9SRUdfRENBUF0gPSAweDNjLA0KCQlbQlEyN1hY WF9SRUdfQVBdID0gMHgyNCwNCgkJQlEyN1hYWF9ETV9SRUdfUk9XUywNCgl9 LA0KI2RlZmluZSBicTI3NTEwZzFfcmVncyBicTI3NTAwX3JlZ3MNCiNkZWZp bmUgYnEyNzUxMGcyX3JlZ3MgYnEyNzUwMF9yZWdzDQoJYnEyNzUxMGczX3Jl Z3NbQlEyN1hYWF9SRUdfTUFYXSA9IHsNCgkJW0JRMjdYWFhfUkVHX0NUUkxd ID0gMHgwMCwNCgkJW0JRMjdYWFhfUkVHX1RFTVBdID0gMHgwNiwNCgkJW0JR MjdYWFhfUkVHX0lOVF9URU1QXSA9IDB4MjgsDQoJCVtCUTI3WFhYX1JFR19W T0xUXSA9IDB4MDgsDQoJCVtCUTI3WFhYX1JFR19BSV0gPSAweDE0LA0KCQlb QlEyN1hYWF9SRUdfRkxBR1NdID0gMHgwYSwNCgkJW0JRMjdYWFhfUkVHX1RU RV0gPSAweDE2LA0KCQlbQlEyN1hYWF9SRUdfVFRGXSA9IElOVkFMSURfUkVH X0FERFIsDQoJCVtCUTI3WFhYX1JFR19UVEVTXSA9IDB4MWEsDQoJCVtCUTI3 WFhYX1JFR19UVEVDUF0gPSBJTlZBTElEX1JFR19BRERSLA0KCQlbQlEyN1hY WF9SRUdfTkFDXSA9IDB4MGMsDQoJCVtCUTI3WFhYX1JFR19GQ0NdID0gMHgx MiwNCgkJW0JRMjdYWFhfUkVHX0NZQ1RdID0gMHgxZSwNCgkJW0JRMjdYWFhf UkVHX0FFXSA9IElOVkFMSURfUkVHX0FERFIsDQoJCVtCUTI3WFhYX1JFR19T T0NdID0gMHgyMCwNCgkJW0JRMjdYWFhfUkVHX0RDQVBdID0gMHgyZSwNCgkJ W0JRMjdYWFhfUkVHX0FQXSA9IElOVkFMSURfUkVHX0FERFIsDQoJCUJRMjdY WFhfRE1fUkVHX1JPV1MsDQoJfSwNCglicTI3NTIwZzFfcmVnc1tCUTI3WFhY X1JFR19NQVhdID0gew0KCQlbQlEyN1hYWF9SRUdfQ1RSTF0gPSAweDAwLA0K CQlbQlEyN1hYWF9SRUdfVEVNUF0gPSAweDA2LA0KCQlbQlEyN1hYWF9SRUdf SU5UX1RFTVBdID0gSU5WQUxJRF9SRUdfQUREUiwNCgkJW0JRMjdYWFhfUkVH X1ZPTFRdID0gMHgwOCwNCgkJW0JRMjdYWFhfUkVHX0FJXSA9IDB4MTQsDQoJ CVtCUTI3WFhYX1JFR19GTEFHU10gPSAweDBhLA0KCQlbQlEyN1hYWF9SRUdf VFRFXSA9IDB4MTYsDQoJCVtCUTI3WFhYX1JFR19UVEZdID0gMHgxOCwNCgkJ W0JRMjdYWFhfUkVHX1RURVNdID0gMHgxYywNCgkJW0JRMjdYWFhfUkVHX1RU RUNQXSA9IDB4MjYsDQoJCVtCUTI3WFhYX1JFR19OQUNdID0gMHgwYywNCgkJ W0JRMjdYWFhfUkVHX0ZDQ10gPSAweDEyLA0KCQlbQlEyN1hYWF9SRUdfQ1lD VF0gPSBJTlZBTElEX1JFR19BRERSLA0KCQlbQlEyN1hYWF9SRUdfQUVdID0g MHgyMiwNCgkJW0JRMjdYWFhfUkVHX1NPQ10gPSAweDJjLA0KCQlbQlEyN1hY WF9SRUdfRENBUF0gPSAweDNjLA0KCQlbQlEyN1hYWF9SRUdfQVBdID0gMHgy NCwNCgkJQlEyN1hYWF9ETV9SRUdfUk9XUywNCgl9LA0KCWJxMjc1MjBnMl9y ZWdzW0JRMjdYWFhfUkVHX01BWF0gPSB7DQoJCVtCUTI3WFhYX1JFR19DVFJM XSA9IDB4MDAsDQoJCVtCUTI3WFhYX1JFR19URU1QXSA9IDB4MDYsDQoJCVtC UTI3WFhYX1JFR19JTlRfVEVNUF0gPSAweDM2LA0KCQlbQlEyN1hYWF9SRUdf Vk9MVF0gPSAweDA4LA0KCQlbQlEyN1hYWF9SRUdfQUldID0gMHgxNCwNCgkJ W0JRMjdYWFhfUkVHX0ZMQUdTXSA9IDB4MGEsDQoJCVtCUTI3WFhYX1JFR19U VEVdID0gMHgxNiwNCgkJW0JRMjdYWFhfUkVHX1RURl0gPSAweDE4LA0KCQlb QlEyN1hYWF9SRUdfVFRFU10gPSAweDFjLA0KCQlbQlEyN1hYWF9SRUdfVFRF Q1BdID0gMHgyNiwNCgkJW0JRMjdYWFhfUkVHX05BQ10gPSAweDBjLA0KCQlb QlEyN1hYWF9SRUdfRkNDXSA9IDB4MTIsDQoJCVtCUTI3WFhYX1JFR19DWUNU XSA9IDB4MmEsDQoJCVtCUTI3WFhYX1JFR19BRV0gPSAweDIyLA0KCQlbQlEy N1hYWF9SRUdfU09DXSA9IDB4MmMsDQoJCVtCUTI3WFhYX1JFR19EQ0FQXSA9 IDB4M2MsDQoJCVtCUTI3WFhYX1JFR19BUF0gPSAweDI0LA0KCQlCUTI3WFhY X0RNX1JFR19ST1dTLA0KCX0sDQoJYnEyNzUyMGczX3JlZ3NbQlEyN1hYWF9S RUdfTUFYXSA9IHsNCgkJW0JRMjdYWFhfUkVHX0NUUkxdID0gMHgwMCwNCgkJ W0JRMjdYWFhfUkVHX1RFTVBdID0gMHgwNiwNCgkJW0JRMjdYWFhfUkVHX0lO VF9URU1QXSA9IDB4MzYsDQoJCVtCUTI3WFhYX1JFR19WT0xUXSA9IDB4MDgs DQoJCVtCUTI3WFhYX1JFR19BSV0gPSAweDE0LA0KCQlbQlEyN1hYWF9SRUdf RkxBR1NdID0gMHgwYSwNCgkJW0JRMjdYWFhfUkVHX1RURV0gPSAweDE2LA0K CQlbQlEyN1hYWF9SRUdfVFRGXSA9IElOVkFMSURfUkVHX0FERFIsDQoJCVtC UTI3WFhYX1JFR19UVEVTXSA9IDB4MWMsDQoJCVtCUTI3WFhYX1JFR19UVEVD UF0gPSAweDI2LA0KCQlbQlEyN1hYWF9SRUdfTkFDXSA9IDB4MGMsDQoJCVtC UTI3WFhYX1JFR19GQ0NdID0gMHgxMiwNCgkJW0JRMjdYWFhfUkVHX0NZQ1Rd ID0gMHgyYSwNCgkJW0JRMjdYWFhfUkVHX0FFXSA9IDB4MjIsDQoJCVtCUTI3 WFhYX1JFR19TT0NdID0gMHgyYywNCgkJW0JRMjdYWFhfUkVHX0RDQVBdID0g MHgzYywNCgkJW0JRMjdYWFhfUkVHX0FQXSA9IDB4MjQsDQoJCUJRMjdYWFhf RE1fUkVHX1JPV1MsDQoJfSwNCglicTI3NTIwZzRfcmVnc1tCUTI3WFhYX1JF R19NQVhdID0gew0KCQlbQlEyN1hYWF9SRUdfQ1RSTF0gPSAweDAwLA0KCQlb QlEyN1hYWF9SRUdfVEVNUF0gPSAweDA2LA0KCQlbQlEyN1hYWF9SRUdfSU5U X1RFTVBdID0gMHgyOCwNCgkJW0JRMjdYWFhfUkVHX1ZPTFRdID0gMHgwOCwN CgkJW0JRMjdYWFhfUkVHX0FJXSA9IDB4MTQsDQoJCVtCUTI3WFhYX1JFR19G TEFHU10gPSAweDBhLA0KCQlbQlEyN1hYWF9SRUdfVFRFXSA9IDB4MTYsDQoJ CVtCUTI3WFhYX1JFR19UVEZdID0gSU5WQUxJRF9SRUdfQUREUiwNCgkJW0JR MjdYWFhfUkVHX1RURVNdID0gMHgxYywNCgkJW0JRMjdYWFhfUkVHX1RURUNQ XSA9IElOVkFMSURfUkVHX0FERFIsDQoJCVtCUTI3WFhYX1JFR19OQUNdID0g MHgwYywNCgkJW0JRMjdYWFhfUkVHX0ZDQ10gPSAweDEyLA0KCQlbQlEyN1hY WF9SRUdfQ1lDVF0gPSAweDFlLA0KCQlbQlEyN1hYWF9SRUdfQUVdID0gSU5W QUxJRF9SRUdfQUREUiwNCgkJW0JRMjdYWFhfUkVHX1NPQ10gPSAweDIwLA0K CQlbQlEyN1hYWF9SRUdfRENBUF0gPSBJTlZBTElEX1JFR19BRERSLA0KCQlb QlEyN1hYWF9SRUdfQVBdID0gSU5WQUxJRF9SRUdfQUREUiwNCgkJQlEyN1hY WF9ETV9SRUdfUk9XUywNCgl9LA0KCWJxMjc1MzBfcmVnc1tCUTI3WFhYX1JF R19NQVhdID0gew0KCQlbQlEyN1hYWF9SRUdfQ1RSTF0gPSAweDAwLA0KCQlb QlEyN1hYWF9SRUdfVEVNUF0gPSAweDA2LA0KCQlbQlEyN1hYWF9SRUdfSU5U X1RFTVBdID0gMHgzMiwNCgkJW0JRMjdYWFhfUkVHX1ZPTFRdID0gMHgwOCwN CgkJW0JRMjdYWFhfUkVHX0FJXSA9IDB4MTQsDQoJCVtCUTI3WFhYX1JFR19G TEFHU10gPSAweDBhLA0KCQlbQlEyN1hYWF9SRUdfVFRFXSA9IDB4MTYsDQoJ CVtCUTI3WFhYX1JFR19UVEZdID0gSU5WQUxJRF9SRUdfQUREUiwNCgkJW0JR MjdYWFhfUkVHX1RURVNdID0gSU5WQUxJRF9SRUdfQUREUiwNCgkJW0JRMjdY WFhfUkVHX1RURUNQXSA9IElOVkFMSURfUkVHX0FERFIsDQoJCVtCUTI3WFhY X1JFR19OQUNdID0gMHgwYywNCgkJW0JRMjdYWFhfUkVHX0ZDQ10gPSAweDEy LA0KCQlbQlEyN1hYWF9SRUdfQ1lDVF0gPSAweDJhLA0KCQlbQlEyN1hYWF9S RUdfQUVdID0gSU5WQUxJRF9SRUdfQUREUiwNCgkJW0JRMjdYWFhfUkVHX1NP Q10gPSAweDJjLA0KCQlbQlEyN1hYWF9SRUdfRENBUF0gPSBJTlZBTElEX1JF R19BRERSLA0KCQlbQlEyN1hYWF9SRUdfQVBdID0gMHgyNCwNCgkJQlEyN1hY WF9ETV9SRUdfUk9XUywNCgl9LA0KI2RlZmluZSBicTI3NTMxX3JlZ3MgYnEy NzUzMF9yZWdzDQoJYnEyNzU0MV9yZWdzW0JRMjdYWFhfUkVHX01BWF0gPSB7 DQoJCVtCUTI3WFhYX1JFR19DVFJMXSA9IDB4MDAsDQoJCVtCUTI3WFhYX1JF R19URU1QXSA9IDB4MDYsDQoJCVtCUTI3WFhYX1JFR19JTlRfVEVNUF0gPSAw eDI4LA0KCQlbQlEyN1hYWF9SRUdfVk9MVF0gPSAweDA4LA0KCQlbQlEyN1hY WF9SRUdfQUldID0gMHgxNCwNCgkJW0JRMjdYWFhfUkVHX0ZMQUdTXSA9IDB4 MGEsDQoJCVtCUTI3WFhYX1JFR19UVEVdID0gMHgxNiwNCgkJW0JRMjdYWFhf UkVHX1RURl0gPSBJTlZBTElEX1JFR19BRERSLA0KCQlbQlEyN1hYWF9SRUdf VFRFU10gPSBJTlZBTElEX1JFR19BRERSLA0KCQlbQlEyN1hYWF9SRUdfVFRF Q1BdID0gSU5WQUxJRF9SRUdfQUREUiwNCgkJW0JRMjdYWFhfUkVHX05BQ10g PSAweDBjLA0KCQlbQlEyN1hYWF9SRUdfRkNDXSA9IDB4MTIsDQoJCVtCUTI3 WFhYX1JFR19DWUNUXSA9IDB4MmEsDQoJCVtCUTI3WFhYX1JFR19BRV0gPSBJ TlZBTElEX1JFR19BRERSLA0KCQlbQlEyN1hYWF9SRUdfU09DXSA9IDB4MmMs DQoJCVtCUTI3WFhYX1JFR19EQ0FQXSA9IDB4M2MsDQoJCVtCUTI3WFhYX1JF R19BUF0gPSAweDI0LA0KCQlCUTI3WFhYX0RNX1JFR19ST1dTLA0KCX0sDQoj ZGVmaW5lIGJxMjc1NDJfcmVncyBicTI3NTQxX3JlZ3MNCiNkZWZpbmUgYnEy NzU0Nl9yZWdzIGJxMjc1NDFfcmVncw0KI2RlZmluZSBicTI3NzQyX3JlZ3Mg YnEyNzU0MV9yZWdzDQoJYnEyNzU0NV9yZWdzW0JRMjdYWFhfUkVHX01BWF0g PSB7DQoJCVtCUTI3WFhYX1JFR19DVFJMXSA9IDB4MDAsDQoJCVtCUTI3WFhY X1JFR19URU1QXSA9IDB4MDYsDQoJCVtCUTI3WFhYX1JFR19JTlRfVEVNUF0g PSAweDI4LA0KCQlbQlEyN1hYWF9SRUdfVk9MVF0gPSAweDA4LA0KCQlbQlEy N1hYWF9SRUdfQUldID0gMHgxNCwNCgkJW0JRMjdYWFhfUkVHX0ZMQUdTXSA9 IDB4MGEsDQoJCVtCUTI3WFhYX1JFR19UVEVdID0gMHgxNiwNCgkJW0JRMjdY WFhfUkVHX1RURl0gPSBJTlZBTElEX1JFR19BRERSLA0KCQlbQlEyN1hYWF9S RUdfVFRFU10gPSBJTlZBTElEX1JFR19BRERSLA0KCQlbQlEyN1hYWF9SRUdf VFRFQ1BdID0gSU5WQUxJRF9SRUdfQUREUiwNCgkJW0JRMjdYWFhfUkVHX05B Q10gPSAweDBjLA0KCQlbQlEyN1hYWF9SRUdfRkNDXSA9IDB4MTIsDQoJCVtC UTI3WFhYX1JFR19DWUNUXSA9IDB4MmEsDQoJCVtCUTI3WFhYX1JFR19BRV0g PSBJTlZBTElEX1JFR19BRERSLA0KCQlbQlEyN1hYWF9SRUdfU09DXSA9IDB4 MmMsDQoJCVtCUTI3WFhYX1JFR19EQ0FQXSA9IElOVkFMSURfUkVHX0FERFIs DQoJCVtCUTI3WFhYX1JFR19BUF0gPSAweDI0LA0KCQlCUTI3WFhYX0RNX1JF R19ST1dTLA0KCX0sDQoJYnEyNzQyMV9yZWdzW0JRMjdYWFhfUkVHX01BWF0g PSB7DQoJCVtCUTI3WFhYX1JFR19DVFJMXSA9IDB4MDAsDQoJCVtCUTI3WFhY X1JFR19URU1QXSA9IDB4MDIsDQoJCVtCUTI3WFhYX1JFR19JTlRfVEVNUF0g PSAweDFlLA0KCQlbQlEyN1hYWF9SRUdfVk9MVF0gPSAweDA0LA0KCQlbQlEy N1hYWF9SRUdfQUldID0gMHgxMCwNCgkJW0JRMjdYWFhfUkVHX0ZMQUdTXSA9 IDB4MDYsDQoJCVtCUTI3WFhYX1JFR19UVEVdID0gSU5WQUxJRF9SRUdfQURE UiwNCgkJW0JRMjdYWFhfUkVHX1RURl0gPSBJTlZBTElEX1JFR19BRERSLA0K CQlbQlEyN1hYWF9SRUdfVFRFU10gPSBJTlZBTElEX1JFR19BRERSLA0KCQlb QlEyN1hYWF9SRUdfVFRFQ1BdID0gSU5WQUxJRF9SRUdfQUREUiwNCgkJW0JR MjdYWFhfUkVHX05BQ10gPSAweDA4LA0KCQlbQlEyN1hYWF9SRUdfRkNDXSA9 IDB4MGUsDQoJCVtCUTI3WFhYX1JFR19DWUNUXSA9IElOVkFMSURfUkVHX0FE RFIsDQoJCVtCUTI3WFhYX1JFR19BRV0gPSBJTlZBTElEX1JFR19BRERSLA0K CQlbQlEyN1hYWF9SRUdfU09DXSA9IDB4MWMsDQoJCVtCUTI3WFhYX1JFR19E Q0FQXSA9IDB4M2MsDQoJCVtCUTI3WFhYX1JFR19BUF0gPSAweDE4LA0KCQlC UTI3WFhYX0RNX1JFR19ST1dTLA0KCX0sDQoJYnEwNzQyMV9yZWdzW0JRMjdY WFhfUkVHX01BWF0gPSB7DQoJCVtCUTI3WFhYX1JFR19DVFJMXSA9IDB4MDAs DQoJCVtCUTI3WFhYX1JFR19URU1QXSA9IDB4MDIsDQoJCVtCUTI3WFhYX1JF R19JTlRfVEVNUF0gPSAweDFlLA0KCQlbQlEyN1hYWF9SRUdfVk9MVF0gPSAw eDA0LA0KCQlbQlEyN1hYWF9SRUdfQUldID0gMHgxMCwNCgkJW0JRMjdYWFhf UkVHX0ZMQUdTXSA9IDB4MDYsDQoJCVtCUTI3WFhYX1JFR19UVEVdID0gSU5W QUxJRF9SRUdfQUREUiwNCgkJW0JRMjdYWFhfUkVHX1RURl0gPSBJTlZBTElE X1JFR19BRERSLA0KCQlbQlEyN1hYWF9SRUdfVFRFU10gPSBJTlZBTElEX1JF R19BRERSLA0KCQlbQlEyN1hYWF9SRUdfVFRFQ1BdID0gSU5WQUxJRF9SRUdf QUREUiwNCgkJW0JRMjdYWFhfUkVHX05BQ10gPSAweDA4LA0KCQlbQlEyN1hY WF9SRUdfRkNDXSA9IDB4MGUsDQoJCVtCUTI3WFhYX1JFR19DWUNUXSA9IElO VkFMSURfUkVHX0FERFIsDQoJCVtCUTI3WFhYX1JFR19BRV0gPSBJTlZBTElE X1JFR19BRERSLA0KCQlbQlEyN1hYWF9SRUdfU09DXSA9IDB4MWMsDQoJCVtC UTI3WFhYX1JFR19EQ0FQXSA9IDB4M2MsDQoJCVtCUTI3WFhYX1JFR19BUF0g PSAweDE4LA0KCQlCUTI3WFhYX0RNX1JFR19ST1dTLA0KCX07DQojZGVmaW5l IGJxMjc0MjVfcmVncyBicTI3NDIxX3JlZ3MNCiNkZWZpbmUgYnEyNzQ0MV9y ZWdzIGJxMjc0MjFfcmVncw0KI2RlZmluZSBicTI3NjIxX3JlZ3MgYnEyNzQy MV9yZWdzDQoNCnN0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBi cTI3MDAwX3Byb3BzW10gPSB7DQoJUE9XRVJfU1VQUExZX1BST1BfU1RBVFVT LA0KCVBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQsDQoJUE9XRVJfU1VQUExZ X1BST1BfVk9MVEFHRV9OT1csDQoJUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVO VF9OT1csDQoJUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFksDQoJUE9XRVJf U1VQUExZX1BST1BfQ0FQQUNJVFlfTEVWRUwsDQoJUE9XRVJfU1VQUExZX1BS T1BfVEVNUCwNCglQT1dFUl9TVVBQTFlfUFJPUF9USU1FX1RPX0VNUFRZX05P VywNCglQT1dFUl9TVVBQTFlfUFJPUF9USU1FX1RPX0VNUFRZX0FWRywNCglQ T1dFUl9TVVBQTFlfUFJPUF9USU1FX1RPX0ZVTExfTk9XLA0KCVBPV0VSX1NV UFBMWV9QUk9QX1RFQ0hOT0xPR1ksDQoJUE9XRVJfU1VQUExZX1BST1BfQ0hB UkdFX0ZVTEwsDQoJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX05PVywNCglQ T1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfRlVMTF9ERVNJR04sDQoJUE9XRVJf U1VQUExZX1BST1BfQ1lDTEVfQ09VTlQsDQoJUE9XRVJfU1VQUExZX1BST1Bf RU5FUkdZX05PVywNCglQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9BVkcsDQoJ UE9XRVJfU1VQUExZX1BST1BfSEVBTFRILA0KCVBPV0VSX1NVUFBMWV9QUk9Q X01BTlVGQUNUVVJFUiwNCn07DQoNCnN0YXRpYyBlbnVtIHBvd2VyX3N1cHBs eV9wcm9wZXJ0eSBicTA3MDAwX3Byb3BzW10gPSB7DQoJUE9XRVJfU1VQUExZ X1BST1BfU1RBVFVTLA0KCVBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQsDQoJ UE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1csDQoJUE9XRVJfU1VQUExZ X1BST1BfQ1VSUkVOVF9OT1csDQoJUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJ VFksDQoJUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFlfTEVWRUwsDQoJUE9X RVJfU1VQUExZX1BST1BfVEVNUCwNCglQT1dFUl9TVVBQTFlfUFJPUF9USU1F X1RPX0VNUFRZX05PVywNCglQT1dFUl9TVVBQTFlfUFJPUF9USU1FX1RPX0VN UFRZX0FWRywNCglQT1dFUl9TVVBQTFlfUFJPUF9USU1FX1RPX0ZVTExfTk9X LA0KCVBPV0VSX1NVUFBMWV9QUk9QX1RFQ0hOT0xPR1ksDQoJUE9XRVJfU1VQ UExZX1BST1BfQ0hBUkdFX0ZVTEwsDQoJUE9XRVJfU1VQUExZX1BST1BfQ0hB UkdFX05PVywNCglQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfRlVMTF9ERVNJ R04sDQoJUE9XRVJfU1VQUExZX1BST1BfQ1lDTEVfQ09VTlQsDQoJUE9XRVJf U1VQUExZX1BST1BfRU5FUkdZX05PVywNCglQT1dFUl9TVVBQTFlfUFJPUF9Q T1dFUl9BVkcsDQoJUE9XRVJfU1VQUExZX1BST1BfSEVBTFRILA0KCVBPV0VS X1NVUFBMWV9QUk9QX01BTlVGQUNUVVJFUiwNCn07DQoNCnN0YXRpYyBlbnVt IHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBicTI3MDEwX3Byb3BzW10gPSB7DQoJ UE9XRVJfU1VQUExZX1BST1BfU1RBVFVTLA0KCVBPV0VSX1NVUFBMWV9QUk9Q X1BSRVNFTlQsDQoJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1csDQoJ UE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9OT1csDQoJUE9XRVJfU1VQUExZ X1BST1BfQ0FQQUNJVFksDQoJUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFlf TEVWRUwsDQoJUE9XRVJfU1VQUExZX1BST1BfVEVNUCwNCglQT1dFUl9TVVBQ TFlfUFJPUF9USU1FX1RPX0VNUFRZX05PVywNCglQT1dFUl9TVVBQTFlfUFJP UF9USU1FX1RPX0VNUFRZX0FWRywNCglQT1dFUl9TVVBQTFlfUFJPUF9USU1F X1RPX0ZVTExfTk9XLA0KCVBPV0VSX1NVUFBMWV9QUk9QX1RFQ0hOT0xPR1ks DQoJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX0ZVTEwsDQoJUE9XRVJfU1VQ UExZX1BST1BfQ0hBUkdFX05PVywNCglQT1dFUl9TVVBQTFlfUFJPUF9DSEFS R0VfRlVMTF9ERVNJR04sDQoJUE9XRVJfU1VQUExZX1BST1BfQ1lDTEVfQ09V TlQsDQoJUE9XRVJfU1VQUExZX1BST1BfSEVBTFRILA0KCVBPV0VSX1NVUFBM WV9QUk9QX01BTlVGQUNUVVJFUiwNCn07DQoNCiNkZWZpbmUgYnEyNzUweF9w cm9wcyBicTI3NTEwZzNfcHJvcHMNCiNkZWZpbmUgYnEyNzUxeF9wcm9wcyBi cTI3NTEwZzNfcHJvcHMNCiNkZWZpbmUgYnEyNzUyeF9wcm9wcyBicTI3NTEw ZzNfcHJvcHMNCg0Kc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5 IGJxMjc1MDBfcHJvcHNbXSA9IHsNCglQT1dFUl9TVVBQTFlfUFJPUF9TVEFU VVMsDQoJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwNCglQT1dFUl9TVVBQ TFlfUFJPUF9WT0xUQUdFX05PVywNCglQT1dFUl9TVVBQTFlfUFJPUF9DVVJS RU5UX05PVywNCglQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWSwNCglQT1dF Ul9TVVBQTFlfUFJPUF9DQVBBQ0lUWV9MRVZFTCwNCglQT1dFUl9TVVBQTFlf UFJPUF9URU1QLA0KCVBPV0VSX1NVUFBMWV9QUk9QX1RJTUVfVE9fRU1QVFlf Tk9XLA0KCVBPV0VSX1NVUFBMWV9QUk9QX1RJTUVfVE9fRlVMTF9OT1csDQoJ UE9XRVJfU1VQUExZX1BST1BfVEVDSE5PTE9HWSwNCglQT1dFUl9TVVBQTFlf UFJPUF9DSEFSR0VfRlVMTCwNCglQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0Vf Tk9XLA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMX0RFU0lHTiwN CglQT1dFUl9TVVBQTFlfUFJPUF9DWUNMRV9DT1VOVCwNCglQT1dFUl9TVVBQ TFlfUFJPUF9FTkVSR1lfTk9XLA0KCVBPV0VSX1NVUFBMWV9QUk9QX1BPV0VS X0FWRywNCglQT1dFUl9TVVBQTFlfUFJPUF9IRUFMVEgsDQoJUE9XRVJfU1VQ UExZX1BST1BfTUFOVUZBQ1RVUkVSLA0KfTsNCiNkZWZpbmUgYnEyNzUxMGcx X3Byb3BzIGJxMjc1MDBfcHJvcHMNCiNkZWZpbmUgYnEyNzUxMGcyX3Byb3Bz IGJxMjc1MDBfcHJvcHMNCg0Kc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3By b3BlcnR5IGJxMjc1MTBnM19wcm9wc1tdID0gew0KCVBPV0VSX1NVUFBMWV9Q Uk9QX1NUQVRVUywNCglQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5ULA0KCVBP V0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XLA0KCVBPV0VSX1NVUFBMWV9Q Uk9QX0NVUlJFTlRfTk9XLA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZ LA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZX0xFVkVMLA0KCVBPV0VS X1NVUFBMWV9QUk9QX1RFTVAsDQoJUE9XRVJfU1VQUExZX1BST1BfVElNRV9U T19FTVBUWV9OT1csDQoJUE9XRVJfU1VQUExZX1BST1BfVEVDSE5PTE9HWSwN CglQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfRlVMTCwNCglQT1dFUl9TVVBQ TFlfUFJPUF9DSEFSR0VfTk9XLA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJH RV9GVUxMX0RFU0lHTiwNCglQT1dFUl9TVVBQTFlfUFJPUF9DWUNMRV9DT1VO VCwNCglQT1dFUl9TVVBQTFlfUFJPUF9IRUFMVEgsDQoJUE9XRVJfU1VQUExZ X1BST1BfTUFOVUZBQ1RVUkVSLA0KfTsNCg0Kc3RhdGljIGVudW0gcG93ZXJf c3VwcGx5X3Byb3BlcnR5IGJxMjc1MjBnMV9wcm9wc1tdID0gew0KCVBPV0VS X1NVUFBMWV9QUk9QX1NUQVRVUywNCglQT1dFUl9TVVBQTFlfUFJPUF9QUkVT RU5ULA0KCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XLA0KCVBPV0VS X1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XLA0KCVBPV0VSX1NVUFBMWV9QUk9Q X0NBUEFDSVRZLA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZX0xFVkVM LA0KCVBPV0VSX1NVUFBMWV9QUk9QX1RFTVAsDQoJUE9XRVJfU1VQUExZX1BS T1BfVElNRV9UT19FTVBUWV9OT1csDQoJUE9XRVJfU1VQUExZX1BST1BfVElN RV9UT19GVUxMX05PVywNCglQT1dFUl9TVVBQTFlfUFJPUF9URUNITk9MT0dZ LA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMLA0KCVBPV0VSX1NV UFBMWV9QUk9QX0NIQVJHRV9OT1csDQoJUE9XRVJfU1VQUExZX1BST1BfQ0hB UkdFX0ZVTExfREVTSUdOLA0KCVBPV0VSX1NVUFBMWV9QUk9QX0VORVJHWV9O T1csDQoJUE9XRVJfU1VQUExZX1BST1BfUE9XRVJfQVZHLA0KCVBPV0VSX1NV UFBMWV9QUk9QX0hFQUxUSCwNCglQT1dFUl9TVVBQTFlfUFJPUF9NQU5VRkFD VFVSRVIsDQp9Ow0KDQojZGVmaW5lIGJxMjc1MjBnMl9wcm9wcyBicTI3NTAw X3Byb3BzDQoNCnN0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBi cTI3NTIwZzNfcHJvcHNbXSA9IHsNCglQT1dFUl9TVVBQTFlfUFJPUF9TVEFU VVMsDQoJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwNCglQT1dFUl9TVVBQ TFlfUFJPUF9WT0xUQUdFX05PVywNCglQT1dFUl9TVVBQTFlfUFJPUF9DVVJS RU5UX05PVywNCglQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWSwNCglQT1dF Ul9TVVBQTFlfUFJPUF9DQVBBQ0lUWV9MRVZFTCwNCglQT1dFUl9TVVBQTFlf UFJPUF9URU1QLA0KCVBPV0VSX1NVUFBMWV9QUk9QX1RJTUVfVE9fRU1QVFlf Tk9XLA0KCVBPV0VSX1NVUFBMWV9QUk9QX1RFQ0hOT0xPR1ksDQoJUE9XRVJf U1VQUExZX1BST1BfQ0hBUkdFX0ZVTEwsDQoJUE9XRVJfU1VQUExZX1BST1Bf Q0hBUkdFX05PVywNCglQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfRlVMTF9E RVNJR04sDQoJUE9XRVJfU1VQUExZX1BST1BfQ1lDTEVfQ09VTlQsDQoJUE9X RVJfU1VQUExZX1BST1BfRU5FUkdZX05PVywNCglQT1dFUl9TVVBQTFlfUFJP UF9QT1dFUl9BVkcsDQoJUE9XRVJfU1VQUExZX1BST1BfSEVBTFRILA0KCVBP V0VSX1NVUFBMWV9QUk9QX01BTlVGQUNUVVJFUiwNCn07DQoNCnN0YXRpYyBl bnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBicTI3NTIwZzRfcHJvcHNbXSA9 IHsNCglQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMsDQoJUE9XRVJfU1VQUExZ X1BST1BfUFJFU0VOVCwNCglQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05P VywNCglQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywNCglQT1dFUl9T VVBQTFlfUFJPUF9DQVBBQ0lUWSwNCglQT1dFUl9TVVBQTFlfUFJPUF9DQVBB Q0lUWV9MRVZFTCwNCglQT1dFUl9TVVBQTFlfUFJPUF9URU1QLA0KCVBPV0VS X1NVUFBMWV9QUk9QX1RJTUVfVE9fRU1QVFlfTk9XLA0KCVBPV0VSX1NVUFBM WV9QUk9QX1RFQ0hOT0xPR1ksDQoJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdF X0ZVTEwsDQoJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX05PVywNCglQT1dF Ul9TVVBQTFlfUFJPUF9DWUNMRV9DT1VOVCwNCglQT1dFUl9TVVBQTFlfUFJP UF9IRUFMVEgsDQoJUE9XRVJfU1VQUExZX1BST1BfTUFOVUZBQ1RVUkVSLA0K fTsNCg0Kc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IGJxMjc1 MzBfcHJvcHNbXSA9IHsNCglQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMsDQoJ UE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwNCglQT1dFUl9TVVBQTFlfUFJP UF9WT0xUQUdFX05PVywNCglQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05P VywNCglQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWSwNCglQT1dFUl9TVVBQ TFlfUFJPUF9DQVBBQ0lUWV9MRVZFTCwNCglQT1dFUl9TVVBQTFlfUFJPUF9U RU1QLA0KCVBPV0VSX1NVUFBMWV9QUk9QX1RJTUVfVE9fRU1QVFlfTk9XLA0K CVBPV0VSX1NVUFBMWV9QUk9QX1RFQ0hOT0xPR1ksDQoJUE9XRVJfU1VQUExZ X1BST1BfQ0hBUkdFX0ZVTEwsDQoJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdF X05PVywNCglQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9BVkcsDQoJUE9XRVJf U1VQUExZX1BST1BfSEVBTFRILA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NZQ0xF X0NPVU5ULA0KCVBPV0VSX1NVUFBMWV9QUk9QX01BTlVGQUNUVVJFUiwNCn07 DQojZGVmaW5lIGJxMjc1MzFfcHJvcHMgYnEyNzUzMF9wcm9wcw0KDQpzdGF0 aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgYnEyNzU0MV9wcm9wc1td ID0gew0KCVBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUywNCglQT1dFUl9TVVBQ TFlfUFJPUF9QUkVTRU5ULA0KCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0Vf Tk9XLA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XLA0KCVBPV0VS X1NVUFBMWV9QUk9QX0NBUEFDSVRZLA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NB UEFDSVRZX0xFVkVMLA0KCVBPV0VSX1NVUFBMWV9QUk9QX1RFTVAsDQoJUE9X RVJfU1VQUExZX1BST1BfVElNRV9UT19FTVBUWV9OT1csDQoJUE9XRVJfU1VQ UExZX1BST1BfVEVDSE5PTE9HWSwNCglQT1dFUl9TVVBQTFlfUFJPUF9DSEFS R0VfRlVMTCwNCglQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfTk9XLA0KCVBP V0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMX0RFU0lHTiwNCglQT1dFUl9T VVBQTFlfUFJPUF9DWUNMRV9DT1VOVCwNCglQT1dFUl9TVVBQTFlfUFJPUF9Q T1dFUl9BVkcsDQoJUE9XRVJfU1VQUExZX1BST1BfSEVBTFRILA0KCVBPV0VS X1NVUFBMWV9QUk9QX01BTlVGQUNUVVJFUiwNCn07DQojZGVmaW5lIGJxMjc1 NDJfcHJvcHMgYnEyNzU0MV9wcm9wcw0KI2RlZmluZSBicTI3NTQ2X3Byb3Bz IGJxMjc1NDFfcHJvcHMNCiNkZWZpbmUgYnEyNzc0Ml9wcm9wcyBicTI3NTQx X3Byb3BzDQoNCnN0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBi cTI3NTQ1X3Byb3BzW10gPSB7DQoJUE9XRVJfU1VQUExZX1BST1BfU1RBVFVT LA0KCVBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQsDQoJUE9XRVJfU1VQUExZ X1BST1BfVk9MVEFHRV9OT1csDQoJUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVO VF9OT1csDQoJUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFksDQoJUE9XRVJf U1VQUExZX1BST1BfQ0FQQUNJVFlfTEVWRUwsDQoJUE9XRVJfU1VQUExZX1BS T1BfVEVNUCwNCglQT1dFUl9TVVBQTFlfUFJPUF9USU1FX1RPX0VNUFRZX05P VywNCglQT1dFUl9TVVBQTFlfUFJPUF9URUNITk9MT0dZLA0KCVBPV0VSX1NV UFBMWV9QUk9QX0NIQVJHRV9GVUxMLA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NI QVJHRV9OT1csDQoJUE9XRVJfU1VQUExZX1BST1BfSEVBTFRILA0KCVBPV0VS X1NVUFBMWV9QUk9QX0NZQ0xFX0NPVU5ULA0KCVBPV0VSX1NVUFBMWV9QUk9Q X1BPV0VSX0FWRywNCglQT1dFUl9TVVBQTFlfUFJPUF9NQU5VRkFDVFVSRVIs DQp9Ow0KDQpzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgYnEy NzQyMV9wcm9wc1tdID0gew0KCVBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUywN CglQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5ULA0KCVBPV0VSX1NVUFBMWV9Q Uk9QX1ZPTFRBR0VfTk9XLA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRf Tk9XLA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZLA0KCVBPV0VSX1NV UFBMWV9QUk9QX0NBUEFDSVRZX0xFVkVMLA0KCVBPV0VSX1NVUFBMWV9QUk9Q X1RFTVAsDQoJUE9XRVJfU1VQUExZX1BST1BfVEVDSE5PTE9HWSwNCglQT1dF Ul9TVVBQTFlfUFJPUF9DSEFSR0VfRlVMTCwNCglQT1dFUl9TVVBQTFlfUFJP UF9DSEFSR0VfTk9XLA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxM X0RFU0lHTiwNCglQT1dFUl9TVVBQTFlfUFJPUF9NQU5VRkFDVFVSRVIsDQp9 Ow0KDQpzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgYnEwNzQy MV9wcm9wc1tdID0gew0KCVBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUywNCglQ T1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5ULA0KCVBPV0VSX1NVUFBMWV9QUk9Q X1ZPTFRBR0VfTk9XLA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9X LA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZLA0KCVBPV0VSX1NVUFBM WV9QUk9QX0NBUEFDSVRZX0xFVkVMLA0KCVBPV0VSX1NVUFBMWV9QUk9QX1RF TVAsDQoJUE9XRVJfU1VQUExZX1BST1BfVEVDSE5PTE9HWSwNCglQT1dFUl9T VVBQTFlfUFJPUF9DSEFSR0VfRlVMTCwNCglQT1dFUl9TVVBQTFlfUFJPUF9D SEFSR0VfTk9XLA0KCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMX0RF U0lHTiwNCglQT1dFUl9TVVBQTFlfUFJPUF9NQU5VRkFDVFVSRVIsDQp9Ow0K I2RlZmluZSBicTI3NDI1X3Byb3BzIGJxMjc0MjFfcHJvcHMNCiNkZWZpbmUg YnEyNzQ0MV9wcm9wcyBicTI3NDIxX3Byb3BzDQojZGVmaW5lIGJxMjc2MjFf cHJvcHMgYnEyNzQyMV9wcm9wcw0KDQpzdHJ1Y3QgYnEyN3h4eF9kbV9yZWcg ew0KCXU4IHN1YmNsYXNzX2lkOw0KCXU4IG9mZnNldDsNCgl1OCBieXRlczsN Cgl1MTYgbWluLCBtYXg7DQp9Ow0KDQplbnVtIGJxMjd4eHhfZG1fcmVnX2lk IHsNCglCUTI3WFhYX0RNX0RFU0lHTl9DQVBBQ0lUWSA9IDAsDQoJQlEyN1hY WF9ETV9ERVNJR05fRU5FUkdZLA0KCUJRMjdYWFhfRE1fVEVSTUlOQVRFX1ZP TFRBR0UsDQp9Ow0KDQojZGVmaW5lIGJxMjcwMDBfZG1fcmVncyAwDQojZGVm aW5lIGJxMDcwMDBfZG1fcmVncyAwDQojZGVmaW5lIGJxMjcwMTBfZG1fcmVn cyAwDQojZGVmaW5lIGJxMjc1MHhfZG1fcmVncyAwDQojZGVmaW5lIGJxMjc1 MXhfZG1fcmVncyAwDQojZGVmaW5lIGJxMjc1MnhfZG1fcmVncyAwDQoNCiNp ZiAwIC8qIG5vdCB5ZXQgdGVzdGVkICovDQpzdGF0aWMgc3RydWN0IGJxMjd4 eHhfZG1fcmVnIGJxMjc1MDBfZG1fcmVnc1tdID0gew0KCVtCUTI3WFhYX0RN X0RFU0lHTl9DQVBBQ0lUWV0gICA9IHsgNDgsIDEwLCAyLCAgICAwLCA2NTUz NSB9LA0KCVtCUTI3WFhYX0RNX0RFU0lHTl9FTkVSR1ldICAgICA9IHsgfSwg LyogbWlzc2luZyBvbiBjaGlwICovDQoJW0JRMjdYWFhfRE1fVEVSTUlOQVRF X1ZPTFRBR0VdID0geyA4MCwgNDgsIDIsIDEwMDAsIDMyNzY3IH0sDQp9Ow0K I2Vsc2UNCiNkZWZpbmUgYnEyNzUwMF9kbV9yZWdzIDANCiNlbmRpZg0KDQov KiB0b2RvIGNyZWF0ZSBkYXRhIG1lbW9yeSBkZWZpbml0aW9ucyBmcm9tIGRh dGFzaGVldHMgYW5kIHRlc3Qgb24gY2hpcHMgKi8NCiNkZWZpbmUgYnEyNzUx MGcxX2RtX3JlZ3MgMA0KI2RlZmluZSBicTI3NTEwZzJfZG1fcmVncyAwDQoj ZGVmaW5lIGJxMjc1MTBnM19kbV9yZWdzIDANCiNkZWZpbmUgYnEyNzUyMGcx X2RtX3JlZ3MgMA0KI2RlZmluZSBicTI3NTIwZzJfZG1fcmVncyAwDQojZGVm aW5lIGJxMjc1MjBnM19kbV9yZWdzIDANCiNkZWZpbmUgYnEyNzUyMGc0X2Rt X3JlZ3MgMA0KI2RlZmluZSBicTI3NTMwX2RtX3JlZ3MgMA0KI2RlZmluZSBi cTI3NTMxX2RtX3JlZ3MgMA0KI2RlZmluZSBicTI3NTQxX2RtX3JlZ3MgMA0K I2RlZmluZSBicTI3NTQyX2RtX3JlZ3MgMA0KI2RlZmluZSBicTI3NTQ2X2Rt X3JlZ3MgMA0KI2RlZmluZSBicTI3NzQyX2RtX3JlZ3MgMA0KDQojaWYgMCAv KiBub3QgeWV0IHRlc3RlZCAqLw0Kc3RhdGljIHN0cnVjdCBicTI3eHh4X2Rt X3JlZyBicTI3NTQ1X2RtX3JlZ3NbXSA9IHsNCglbQlEyN1hYWF9ETV9ERVNJ R05fQ0FQQUNJVFldICAgPSB7IDQ4LCAyMywgMiwgICAgMCwgMzI3NjcgfSwN CglbQlEyN1hYWF9ETV9ERVNJR05fRU5FUkdZXSAgICAgPSB7IDQ4LCAyNSwg MiwgICAgMCwgMzI3NjcgfSwNCglbQlEyN1hYWF9ETV9URVJNSU5BVEVfVk9M VEFHRV0gPSB7IDgwLCA2NywgMiwgMjgwMCwgIDM3MDAgfSwNCn07DQojZWxz ZQ0KI2RlZmluZSBicTI3NTQ1X2RtX3JlZ3MgMA0KI2VuZGlmDQoNCnN0YXRp YyBzdHJ1Y3QgYnEyN3h4eF9kbV9yZWcgYnEyNzQyMV9kbV9yZWdzW10gPSB7 DQoJW0JRMjdYWFhfRE1fREVTSUdOX0NBUEFDSVRZXSAgID0geyA4MiwgMTAs IDIsICAgIDAsICA4MDAwIH0sDQoJW0JRMjdYWFhfRE1fREVTSUdOX0VORVJH WV0gICAgID0geyA4MiwgMTIsIDIsICAgIDAsIDMyNzY3IH0sDQoJW0JRMjdY WFhfRE1fVEVSTUlOQVRFX1ZPTFRBR0VdID0geyA4MiwgMTYsIDIsIDI1MDAs ICAzNzAwIH0sDQp9Ow0KDQpzdGF0aWMgc3RydWN0IGJxMjd4eHhfZG1fcmVn IGJxMjc0MjVfZG1fcmVnc1tdID0gew0KCVtCUTI3WFhYX0RNX0RFU0lHTl9D QVBBQ0lUWV0gICA9IHsgODIsIDEyLCAyLCAgICAwLCAzMjc2NyB9LA0KCVtC UTI3WFhYX0RNX0RFU0lHTl9FTkVSR1ldICAgICA9IHsgODIsIDE0LCAyLCAg ICAwLCAzMjc2NyB9LA0KCVtCUTI3WFhYX0RNX1RFUk1JTkFURV9WT0xUQUdF XSA9IHsgODIsIDE4LCAyLCAyODAwLCAgMzcwMCB9LA0KfTsNCg0Kc3RhdGlj IHN0cnVjdCBicTI3eHh4X2RtX3JlZyBicTA3NDIxX2RtX3JlZ3NbXSA9IHsN CglbQlEyN1hYWF9ETV9ERVNJR05fQ0FQQUNJVFldICAgPSB7IDgyLCAxMCwg MiwgICAgMCwgIDgwMDAgfSwNCglbQlEyN1hYWF9ETV9ERVNJR05fRU5FUkdZ XSAgICAgPSB7IDgyLCAxMiwgMiwgICAgMCwgMzI3NjcgfSwNCglbQlEyN1hY WF9ETV9URVJNSU5BVEVfVk9MVEFHRV0gPSB7IDgyLCAxNiwgMiwgMjUwMCwg IDM3MDAgfSwNCn07DQoNCiNpZiAwIC8qIG5vdCB5ZXQgdGVzdGVkICovDQoj ZGVmaW5lIGJxMjc0NDFfZG1fcmVncyBicTI3NDIxX2RtX3JlZ3MNCiNlbHNl DQojZGVmaW5lIGJxMjc0NDFfZG1fcmVncyAwDQojZW5kaWYNCg0KI2lmIDAg Lyogbm90IHlldCB0ZXN0ZWQgKi8NCnN0YXRpYyBzdHJ1Y3QgYnEyN3h4eF9k bV9yZWcgYnEyNzYyMV9kbV9yZWdzW10gPSB7DQoJW0JRMjdYWFhfRE1fREVT SUdOX0NBUEFDSVRZXSAgID0geyA4MiwgMywgMiwgICAgMCwgIDgwMDAgfSwN CglbQlEyN1hYWF9ETV9ERVNJR05fRU5FUkdZXSAgICAgPSB7IDgyLCA1LCAy LCAgICAwLCAzMjc2NyB9LA0KCVtCUTI3WFhYX0RNX1RFUk1JTkFURV9WT0xU QUdFXSA9IHsgODIsIDksIDIsIDI1MDAsICAzNzAwIH0sDQp9Ow0KI2Vsc2UN CiNkZWZpbmUgYnEyNzYyMV9kbV9yZWdzIDANCiNlbmRpZg0KDQojZGVmaW5l IEJRMjdYWFhfT19aRVJPCTB4MDAwMDAwMDENCiNkZWZpbmUgQlEyN1hYWF9P X09UREMJMHgwMDAwMDAwMg0KI2RlZmluZSBCUTI3WFhYX09fVVRPVCAgMHgw MDAwMDAwNA0KI2RlZmluZSBCUTI3WFhYX09fQ0ZHVVAJMHgwMDAwMDAwOA0K I2RlZmluZSBCUTI3WFhYX09fUkFNCTB4MDAwMDAwMTANCg0KI2RlZmluZSBC UTI3WFhYX0RBVEEocmVmLCBrZXksIG9wdCkgewkJXA0KCS5vcHRzID0gKG9w dCksCQkJCVwNCgkudW5zZWFsX2tleSA9IGtleSwJCQlcDQoJLnJlZ3MgID0g cmVmIyNfcmVncywJCQlcDQoJLmRtX3JlZ3MgPSByZWYjI19kbV9yZWdzLAkJ XA0KCS5wcm9wcyA9IHJlZiMjX3Byb3BzLAkJCVwNCgkucHJvcHNfc2l6ZSA9 IEFSUkFZX1NJWkUocmVmIyNfcHJvcHMpIH0NCg0Kc3RhdGljIHN0cnVjdCB7 DQoJdTMyIG9wdHM7DQoJdTMyIHVuc2VhbF9rZXk7DQoJdTggKnJlZ3M7DQoJ c3RydWN0IGJxMjd4eHhfZG1fcmVnICpkbV9yZWdzOw0KCWVudW0gcG93ZXJf c3VwcGx5X3Byb3BlcnR5ICpwcm9wczsNCglzaXplX3QgcHJvcHNfc2l6ZTsN Cn0gYnEyN3h4eF9jaGlwX2RhdGFbXSA9IHsNCglbQlEyNzAwMF0gICA9IEJR MjdYWFhfREFUQShicTI3MDAwLCAgIDAgICAgICAgICAsIEJRMjdYWFhfT19a RVJPKSwNCglbQlEwNzAwMF0gICA9IEJRMjdYWFhfREFUQShicTA3MDAwLCAg IDAgICAgICAgICAsIEJRMjdYWFhfT19aRVJPKSwvL2R1cA0KCVtCUTI3MDEw XSAgID0gQlEyN1hYWF9EQVRBKGJxMjcwMTAsICAgMCAgICAgICAgICwgQlEy N1hYWF9PX1pFUk8pLA0KCVtCUTI3NTBYXSAgID0gQlEyN1hYWF9EQVRBKGJx Mjc1MHgsICAgMCAgICAgICAgICwgQlEyN1hYWF9PX09UREMpLA0KCVtCUTI3 NTFYXSAgID0gQlEyN1hYWF9EQVRBKGJxMjc1MXgsICAgMCAgICAgICAgICwg QlEyN1hYWF9PX09UREMpLA0KCVtCUTI3NTJYXSAgID0gQlEyN1hYWF9EQVRB KGJxMjc1MngsICAgMCAgICAgICAgICwgQlEyN1hYWF9PX09UREMpLA0KCVtC UTI3NTAwXSAgID0gQlEyN1hYWF9EQVRBKGJxMjc1MDAsICAgMHgwNDE0MzY3 MiwgQlEyN1hYWF9PX09UREMpLA0KCVtCUTA3NDIxXSAgID0gQlEyN1hYWF9E QVRBKGJxMDc0MjEsICAgMHg4MDAwODAwMCwgQlEyN1hYWF9PX1VUT1QgfCBC UTI3WFhYX09fQ0ZHVVAgfCBCUTI3WFhYX09fUkFNKSwgLy9kdXANCglbQlEy NzUxMEcxXSA9IEJRMjdYWFhfREFUQShicTI3NTEwZzEsIDAgICAgICAgICAs IEJRMjdYWFhfT19PVERDKSwNCglbQlEyNzUxMEcyXSA9IEJRMjdYWFhfREFU QShicTI3NTEwZzIsIDAgICAgICAgICAsIEJRMjdYWFhfT19PVERDKSwNCglb QlEyNzUxMEczXSA9IEJRMjdYWFhfREFUQShicTI3NTEwZzMsIDAgICAgICAg ICAsIEJRMjdYWFhfT19PVERDKSwNCglbQlEyNzUyMEcxXSA9IEJRMjdYWFhf REFUQShicTI3NTIwZzEsIDAgICAgICAgICAsIEJRMjdYWFhfT19PVERDKSwN CglbQlEyNzUyMEcyXSA9IEJRMjdYWFhfREFUQShicTI3NTIwZzIsIDAgICAg ICAgICAsIEJRMjdYWFhfT19PVERDKSwNCglbQlEyNzUyMEczXSA9IEJRMjdY WFhfREFUQShicTI3NTIwZzMsIDAgICAgICAgICAsIEJRMjdYWFhfT19PVERD KSwNCglbQlEyNzUyMEc0XSA9IEJRMjdYWFhfREFUQShicTI3NTIwZzQsIDAg ICAgICAgICAsIEJRMjdYWFhfT19PVERDKSwNCglbQlEyNzUzMF0gICA9IEJR MjdYWFhfREFUQShicTI3NTMwLCAgIDAgICAgICAgICAsIEJRMjdYWFhfT19V VE9UKSwNCglbQlEyNzUzMV0gICA9IEJRMjdYWFhfREFUQShicTI3NTMxLCAg IDAgICAgICAgICAsIEJRMjdYWFhfT19VVE9UKSwNCglbQlEyNzU0MV0gICA9 IEJRMjdYWFhfREFUQShicTI3NTQxLCAgIDAgICAgICAgICAsIEJRMjdYWFhf T19PVERDKSwNCglbQlEyNzU0Ml0gICA9IEJRMjdYWFhfREFUQShicTI3NTQy LCAgIDAgICAgICAgICAsIEJRMjdYWFhfT19PVERDKSwNCglbQlEyNzU0Nl0g ICA9IEJRMjdYWFhfREFUQShicTI3NTQ2LCAgIDAgICAgICAgICAsIEJRMjdY WFhfT19PVERDKSwNCglbQlEyNzc0Ml0gICA9IEJRMjdYWFhfREFUQShicTI3 NzQyLCAgIDAgICAgICAgICAsIEJRMjdYWFhfT19PVERDKSwNCglbQlEyNzU0 NV0gICA9IEJRMjdYWFhfREFUQShicTI3NTQ1LCAgIDB4MDQxNDM2NzIsIEJR MjdYWFhfT19PVERDKSwNCglbQlEyNzQyMV0gICA9IEJRMjdYWFhfREFUQShi cTI3NDIxLCAgIDB4ODAwMDgwMDAsIEJRMjdYWFhfT19VVE9UIHwgQlEyN1hY WF9PX0NGR1VQIHwgQlEyN1hYWF9PX1JBTSksDQoJW0JRMjc0MjVdICAgPSBC UTI3WFhYX0RBVEEoYnEyNzQyNSwgICAweDA0MTQzNjcyLCBCUTI3WFhYX09f VVRPVCB8IEJRMjdYWFhfT19DRkdVUCksDQoJW0JRMjc0NDFdICAgPSBCUTI3 WFhYX0RBVEEoYnEyNzQ0MSwgICAweDgwMDA4MDAwLCBCUTI3WFhYX09fVVRP VCB8IEJRMjdYWFhfT19DRkdVUCB8IEJRMjdYWFhfT19SQU0pLA0KCVtCUTI3 NjIxXSAgID0gQlEyN1hYWF9EQVRBKGJxMjc2MjEsICAgMHg4MDAwODAwMCwg QlEyN1hYWF9PX1VUT1QgfCBCUTI3WFhYX09fQ0ZHVVAgfCBCUTI3WFhYX09f UkFNKSwNCn07DQoNCnN0YXRpYyBERUZJTkVfTVVURVgoYnEyN3h4eF9saXN0 X2xvY2spOw0Kc3RhdGljIExJU1RfSEVBRChicTI3eHh4X2JhdHRlcnlfZGV2 aWNlcyk7DQoNCiNkZWZpbmUgQlEyN1hYWF9NU0xFRVAoaSkgdXNsZWVwX3Jh bmdlKChpKSoxMDAwLCAoaSkqMTAwMCs1MDApDQoNCiNkZWZpbmUgQlEyN1hY WF9ETV9TWgkzMg0KDQovKioNCiAqIHN0cnVjdCBicTI3eHh4X2RtX2J1ZiAt IGNoaXAgZGF0YSBtZW1vcnkgYnVmZmVyDQogKiBAY2xhc3M6IGRhdGEgbWVt b3J5IHN1YmNsYXNzX2lkDQogKiBAYmxvY2s6IGRhdGEgbWVtb3J5IGJsb2Nr IG51bWJlcg0KICogQGRhdGE6IGRhdGEgZnJvbS9mb3IgdGhlIGJsb2NrDQog KiBAaGFzX2RhdGE6IHRydWUgaWYgZGF0YSBoYXMgYmVlbiBmaWxsZWQgYnkg cmVhZA0KICogQGRpcnR5OiB0cnVlIGlmIGRhdGEgaGFzIGNoYW5nZWQgc2lu Y2UgbGFzdCByZWFkL3dyaXRlDQogKg0KICogRW5jYXBzdWxhdGVzIGluZm8g cmVxdWlyZWQgdG8gbWFuYWdlIGNoaXAgZGF0YSBtZW1vcnkgYmxvY2tzLg0K ICovDQpzdHJ1Y3QgYnEyN3h4eF9kbV9idWYgew0KCXU4IGNsYXNzOw0KCXU4 IGJsb2NrOw0KCXU4IGRhdGFbQlEyN1hYWF9ETV9TWl07DQoJYm9vbCBoYXNf ZGF0YSwgZGlydHk7DQp9Ow0KDQojZGVmaW5lIEJRMjdYWFhfRE1fQlVGKGRp LCBpKSB7IFwNCgkuY2xhc3MgPSAoZGkpLT5kbV9yZWdzW2ldLnN1YmNsYXNz X2lkLCBcDQoJLmJsb2NrID0gKGRpKS0+ZG1fcmVnc1tpXS5vZmZzZXQgLyBC UTI3WFhYX0RNX1NaLCBcDQp9DQoNCnN0YXRpYyBpbmxpbmUgdTE2ICpicTI3 eHh4X2RtX3JlZ19wdHIoc3RydWN0IGJxMjd4eHhfZG1fYnVmICpidWYsDQoJ CQkJICAgICAgc3RydWN0IGJxMjd4eHhfZG1fcmVnICpyZWcpDQp7DQoJaWYg KGJ1Zi0+Y2xhc3MgPT0gcmVnLT5zdWJjbGFzc19pZCAmJg0KCSAgICBidWYt PmJsb2NrID09IHJlZy0+b2Zmc2V0IC8gQlEyN1hYWF9ETV9TWikNCgkJcmV0 dXJuICh1MTYgKikgKGJ1Zi0+ZGF0YSArIHJlZy0+b2Zmc2V0ICUgQlEyN1hY WF9ETV9TWik7DQoNCglyZXR1cm4gTlVMTDsNCn0NCg0Kc3RhdGljIGNvbnN0 IGNoYXIgKiBjb25zdCBicTI3eHh4X2RtX3JlZ19uYW1lW10gPSB7DQoJW0JR MjdYWFhfRE1fREVTSUdOX0NBUEFDSVRZXSA9ICJkZXNpZ24tY2FwYWNpdHki LA0KCVtCUTI3WFhYX0RNX0RFU0lHTl9FTkVSR1ldID0gImRlc2lnbi1lbmVy Z3kiLA0KCVtCUTI3WFhYX0RNX1RFUk1JTkFURV9WT0xUQUdFXSA9ICJ0ZXJt aW5hdGUtdm9sdGFnZSIsDQp9Ow0KDQoNCnN0YXRpYyBib29sIGJxMjd4eHhf ZHRfdG9fbnZtID0gdHJ1ZTsNCm1vZHVsZV9wYXJhbV9uYW1lZChkdF9tb25p dG9yZWRfYmF0dGVyeV91cGRhdGVzX252bSwgYnEyN3h4eF9kdF90b19udm0s IGJvb2wsIDA0NDQpOw0KTU9EVUxFX1BBUk1fREVTQyhkdF9tb25pdG9yZWRf YmF0dGVyeV91cGRhdGVzX252bSwNCgkiRGV2aWNldHJlZSBtb25pdG9yZWQt YmF0dGVyeSBjb25maWcgdXBkYXRlcyBkYXRhIG1lbW9yeSBvbiBOVk0vZmxh c2ggY2hpcHMuXG4iDQoJIlVzZXJzIG11c3Qgc2V0IHRoaXMgPTAgd2hlbiBp bnN0YWxsaW5nIGEgZGlmZmVyZW50IHR5cGUgb2YgYmF0dGVyeSFcbiINCgki RGVmYXVsdCBpcyA9MS4iDQojaWZuZGVmIENPTkZJR19CQVRURVJZX0JRMjdY WFhfRFRfVVBEQVRFU19OVk0NCgkiXG5TZXR0aW5nIHRoaXMgYWZmZWN0cyBm dXR1cmUga2VybmVsIHVwZGF0ZXMsIG5vdCB0aGUgY3VycmVudCBjb25maWd1 cmF0aW9uLiINCiNlbmRpZg0KKTsNCg0Kc3RhdGljIGludCBwb2xsX2ludGVy dmFsX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBr ZXJuZWxfcGFyYW0gKmtwKQ0Kew0KCXN0cnVjdCBicTI3eHh4X2RldmljZV9p bmZvICpkaTsNCgl1bnNpZ25lZCBpbnQgcHJldl92YWwgPSAqKHVuc2lnbmVk IGludCAqKSBrcC0+YXJnOw0KCWludCByZXQ7DQoNCglyZXQgPSBwYXJhbV9z ZXRfdWludCh2YWwsIGtwKTsNCglpZiAocmV0IDwgMCB8fCBwcmV2X3ZhbCA9 PSAqKHVuc2lnbmVkIGludCAqKSBrcC0+YXJnKQ0KCQlyZXR1cm4gcmV0Ow0K DQoJbXV0ZXhfbG9jaygmYnEyN3h4eF9saXN0X2xvY2spOw0KCWxpc3RfZm9y X2VhY2hfZW50cnkoZGksICZicTI3eHh4X2JhdHRlcnlfZGV2aWNlcywgbGlz dCkgew0KCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRpLT53b3JrKTsN CgkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkaS0+d29yaywgMCk7DQoJfQ0K CW11dGV4X3VubG9jaygmYnEyN3h4eF9saXN0X2xvY2spOw0KDQoJcmV0dXJu IHJldDsNCn0NCg0Kc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1f b3BzIHBhcmFtX29wc19wb2xsX2ludGVydmFsID0gew0KCS5nZXQgPSBwYXJh bV9nZXRfdWludCwNCgkuc2V0ID0gcG9sbF9pbnRlcnZhbF9wYXJhbV9zZXQs DQp9Ow0KDQpzdGF0aWMgdW5zaWduZWQgaW50IHBvbGxfaW50ZXJ2YWwgPSAz NjA7DQptb2R1bGVfcGFyYW1fY2IocG9sbF9pbnRlcnZhbCwgJnBhcmFtX29w c19wb2xsX2ludGVydmFsLCAmcG9sbF9pbnRlcnZhbCwgMDY0NCk7DQpNT0RV TEVfUEFSTV9ERVNDKHBvbGxfaW50ZXJ2YWwsDQoJCSAiYmF0dGVyeSBwb2xs IGludGVydmFsIGluIHNlY29uZHMgLSAwIGRpc2FibGVzIHBvbGxpbmciKTsN Cg0KLyoNCiAqIENvbW1vbiBjb2RlIGZvciBCUTI3eHh4IGRldmljZXMNCiAq Lw0KDQpzdGF0aWMgaW5saW5lIGludCBicTI3eHh4X3JlYWQoc3RydWN0IGJx Mjd4eHhfZGV2aWNlX2luZm8gKmRpLCBpbnQgcmVnX2luZGV4LA0KCQkJICAg ICAgIGJvb2wgc2luZ2xlKQ0Kew0KCWludCByZXQ7DQoNCglpZiAoIWRpIHx8 IGRpLT5yZWdzW3JlZ19pbmRleF0gPT0gSU5WQUxJRF9SRUdfQUREUikNCgkJ cmV0dXJuIC1FSU5WQUw7DQoNCglyZXQgPSBkaS0+YnVzLnJlYWQoZGksIGRp LT5yZWdzW3JlZ19pbmRleF0sIHNpbmdsZSk7DQoJaWYgKHJldCA8IDApDQoJ CWRldl9kYmcoZGktPmRldiwgImZhaWxlZCB0byByZWFkIHJlZ2lzdGVyIDB4 JTAyeCAoaW5kZXggJWQpXG4iLA0KCQkJZGktPnJlZ3NbcmVnX2luZGV4XSwg cmVnX2luZGV4KTsNCg0KCXJldHVybiByZXQ7DQp9DQoNCnN0YXRpYyBpbmxp bmUgaW50IGJxMjd4eHhfd3JpdGUoc3RydWN0IGJxMjd4eHhfZGV2aWNlX2lu Zm8gKmRpLCBpbnQgcmVnX2luZGV4LA0KCQkJCXUxNiB2YWx1ZSwgYm9vbCBz aW5nbGUpDQp7DQoJaW50IHJldDsNCg0KCWlmICghZGkgfHwgZGktPnJlZ3Nb cmVnX2luZGV4XSA9PSBJTlZBTElEX1JFR19BRERSKQ0KCQlyZXR1cm4gLUVJ TlZBTDsNCg0KCWlmICghZGktPmJ1cy53cml0ZSkNCgkJcmV0dXJuIC1FUEVS TTsNCg0KCXJldCA9IGRpLT5idXMud3JpdGUoZGksIGRpLT5yZWdzW3JlZ19p bmRleF0sIHZhbHVlLCBzaW5nbGUpOw0KCWlmIChyZXQgPCAwKQ0KCQlkZXZf ZGJnKGRpLT5kZXYsICJmYWlsZWQgdG8gd3JpdGUgcmVnaXN0ZXIgMHglMDJ4 IChpbmRleCAlZClcbiIsDQoJCQlkaS0+cmVnc1tyZWdfaW5kZXhdLCByZWdf aW5kZXgpOw0KDQoJcmV0dXJuIHJldDsNCn0NCg0Kc3RhdGljIGlubGluZSBp bnQgYnEyN3h4eF9yZWFkX2Jsb2NrKHN0cnVjdCBicTI3eHh4X2RldmljZV9p bmZvICpkaSwgaW50IHJlZ19pbmRleCwNCgkJCQkgICAgIHU4ICpkYXRhLCBp bnQgbGVuKQ0Kew0KCWludCByZXQ7DQoNCglpZiAoIWRpIHx8IGRpLT5yZWdz W3JlZ19pbmRleF0gPT0gSU5WQUxJRF9SRUdfQUREUikNCgkJcmV0dXJuIC1F SU5WQUw7DQoNCglpZiAoIWRpLT5idXMucmVhZF9idWxrKQ0KCQlyZXR1cm4g LUVQRVJNOw0KDQoJcmV0ID0gZGktPmJ1cy5yZWFkX2J1bGsoZGksIGRpLT5y ZWdzW3JlZ19pbmRleF0sIGRhdGEsIGxlbik7DQoJaWYgKHJldCA8IDApDQoJ CWRldl9kYmcoZGktPmRldiwgImZhaWxlZCB0byByZWFkX2J1bGsgcmVnaXN0 ZXIgMHglMDJ4IChpbmRleCAlZClcbiIsDQoJCQlkaS0+cmVnc1tyZWdfaW5k ZXhdLCByZWdfaW5kZXgpOw0KDQoJcmV0dXJuIHJldDsNCn0NCg0Kc3RhdGlj IGlubGluZSBpbnQgYnEyN3h4eF93cml0ZV9ibG9jayhzdHJ1Y3QgYnEyN3h4 eF9kZXZpY2VfaW5mbyAqZGksIGludCByZWdfaW5kZXgsDQoJCQkJICAgICAg dTggKmRhdGEsIGludCBsZW4pDQp7DQoJaW50IHJldDsNCg0KCWlmICghZGkg fHwgZGktPnJlZ3NbcmVnX2luZGV4XSA9PSBJTlZBTElEX1JFR19BRERSKQ0K CQlyZXR1cm4gLUVJTlZBTDsNCg0KCWlmICghZGktPmJ1cy53cml0ZV9idWxr KQ0KCQlyZXR1cm4gLUVQRVJNOw0KDQoJcmV0ID0gZGktPmJ1cy53cml0ZV9i dWxrKGRpLCBkaS0+cmVnc1tyZWdfaW5kZXhdLCBkYXRhLCBsZW4pOw0KCWlm IChyZXQgPCAwKQ0KCQlkZXZfZGJnKGRpLT5kZXYsICJmYWlsZWQgdG8gd3Jp dGVfYnVsayByZWdpc3RlciAweCUwMnggKGluZGV4ICVkKVxuIiwNCgkJCWRp LT5yZWdzW3JlZ19pbmRleF0sIHJlZ19pbmRleCk7DQoNCglyZXR1cm4gcmV0 Ow0KfQ0KDQpzdGF0aWMgaW50IGJxMjd4eHhfYmF0dGVyeV9zZWFsKHN0cnVj dCBicTI3eHh4X2RldmljZV9pbmZvICpkaSkNCnsNCglpbnQgcmV0Ow0KDQoJ cmV0ID0gYnEyN3h4eF93cml0ZShkaSwgQlEyN1hYWF9SRUdfQ1RSTCwgQlEy N1hYWF9TRUFMRUQsIGZhbHNlKTsNCglpZiAocmV0IDwgMCkgew0KCQlkZXZf ZXJyKGRpLT5kZXYsICJidXMgZXJyb3Igb24gc2VhbDogJWRcbiIsIHJldCk7 DQoJCXJldHVybiByZXQ7DQoJfQ0KDQoJcmV0dXJuIDA7DQp9DQoNCnN0YXRp YyBpbnQgYnEyN3h4eF9iYXR0ZXJ5X3Vuc2VhbChzdHJ1Y3QgYnEyN3h4eF9k ZXZpY2VfaW5mbyAqZGkpDQp7DQoJaW50IHJldDsNCg0KCWlmIChkaS0+dW5z ZWFsX2tleSA9PSAwKSB7DQoJCWRldl9lcnIoZGktPmRldiwgInVuc2VhbCBm YWlsZWQgZHVlIHRvIG1pc3Npbmcga2V5XG4iKTsNCgkJcmV0dXJuIC1FSU5W QUw7DQoJfQ0KDQoJcmV0ID0gYnEyN3h4eF93cml0ZShkaSwgQlEyN1hYWF9S RUdfQ1RSTCwgKHUxNikoZGktPnVuc2VhbF9rZXkgPj4gMTYpLCBmYWxzZSk7 DQoJaWYgKHJldCA8IDApDQoJCWdvdG8gb3V0Ow0KDQoJcmV0ID0gYnEyN3h4 eF93cml0ZShkaSwgQlEyN1hYWF9SRUdfQ1RSTCwgKHUxNilkaS0+dW5zZWFs X2tleSwgZmFsc2UpOw0KCWlmIChyZXQgPCAwKQ0KCQlnb3RvIG91dDsNCg0K CXJldHVybiAwOw0KDQpvdXQ6DQoJZGV2X2VycihkaS0+ZGV2LCAiYnVzIGVy cm9yIG9uIHVuc2VhbDogJWRcbiIsIHJldCk7DQoJcmV0dXJuIHJldDsNCn0N Cg0Kc3RhdGljIHU4IGJxMjd4eHhfYmF0dGVyeV9jaGVja3N1bV9kbV9ibG9j ayhzdHJ1Y3QgYnEyN3h4eF9kbV9idWYgKmJ1ZikNCnsNCgl1MTYgc3VtID0g MDsNCglpbnQgaTsNCg0KCWZvciAoaSA9IDA7IGkgPCBCUTI3WFhYX0RNX1Na OyBpKyspDQoJCXN1bSArPSBidWYtPmRhdGFbaV07DQoJc3VtICY9IDB4ZmY7 DQoNCglyZXR1cm4gMHhmZiAtIHN1bTsNCn0NCg0Kc3RhdGljIGludCBicTI3 eHh4X2JhdHRlcnlfcmVhZF9kbV9ibG9jayhzdHJ1Y3QgYnEyN3h4eF9kZXZp Y2VfaW5mbyAqZGksDQoJCQkJCSBzdHJ1Y3QgYnEyN3h4eF9kbV9idWYgKmJ1 ZikNCnsNCglpbnQgcmV0Ow0KDQoJYnVmLT5oYXNfZGF0YSA9IGZhbHNlOw0K DQoJcmV0ID0gYnEyN3h4eF93cml0ZShkaSwgQlEyN1hYWF9ETV9DTEFTUywg YnVmLT5jbGFzcywgdHJ1ZSk7DQoJaWYgKHJldCA8IDApDQoJCWdvdG8gb3V0 Ow0KDQoJcmV0ID0gYnEyN3h4eF93cml0ZShkaSwgQlEyN1hYWF9ETV9CTE9D SywgYnVmLT5ibG9jaywgdHJ1ZSk7DQoJaWYgKHJldCA8IDApDQoJCWdvdG8g b3V0Ow0KDQoJQlEyN1hYWF9NU0xFRVAoMSk7DQoNCglyZXQgPSBicTI3eHh4 X3JlYWRfYmxvY2soZGksIEJRMjdYWFhfRE1fREFUQSwgYnVmLT5kYXRhLCBC UTI3WFhYX0RNX1NaKTsNCglpZiAocmV0IDwgMCkNCgkJZ290byBvdXQ7DQoN CglyZXQgPSBicTI3eHh4X3JlYWQoZGksIEJRMjdYWFhfRE1fQ0tTVU0sIHRy dWUpOw0KCWlmIChyZXQgPCAwKQ0KCQlnb3RvIG91dDsNCg0KCWlmICgodTgp cmV0ICE9IGJxMjd4eHhfYmF0dGVyeV9jaGVja3N1bV9kbV9ibG9jayhidWYp KSB7DQoJCXJldCA9IC1FSU5WQUw7DQoJCWdvdG8gb3V0Ow0KCX0NCg0KCWJ1 Zi0+aGFzX2RhdGEgPSB0cnVlOw0KCWJ1Zi0+ZGlydHkgPSBmYWxzZTsNCg0K CXJldHVybiAwOw0KDQpvdXQ6DQoJZGV2X2VycihkaS0+ZGV2LCAiYnVzIGVy cm9yIHJlYWRpbmcgY2hpcCBtZW1vcnk6ICVkXG4iLCByZXQpOw0KCXJldHVy biByZXQ7DQp9DQoNCnN0YXRpYyB2b2lkIGJxMjd4eHhfYmF0dGVyeV91cGRh dGVfZG1fYmxvY2soc3RydWN0IGJxMjd4eHhfZGV2aWNlX2luZm8gKmRpLA0K CQkJCQkgICAgc3RydWN0IGJxMjd4eHhfZG1fYnVmICpidWYsDQoJCQkJCSAg ICBlbnVtIGJxMjd4eHhfZG1fcmVnX2lkIHJlZ19pZCwNCgkJCQkJICAgIHVu c2lnbmVkIGludCB2YWwpDQp7DQoJc3RydWN0IGJxMjd4eHhfZG1fcmVnICpy ZWcgPSAmZGktPmRtX3JlZ3NbcmVnX2lkXTsNCgljb25zdCBjaGFyICpzdHIg PSBicTI3eHh4X2RtX3JlZ19uYW1lW3JlZ19pZF07DQoJdTE2ICpwcmV2ID0g YnEyN3h4eF9kbV9yZWdfcHRyKGJ1ZiwgcmVnKTsNCg0KCWlmIChwcmV2ID09 IE5VTEwpIHsNCgkJZGV2X3dhcm4oZGktPmRldiwgImJ1ZmZlciBkb2VzIG5v dCBtYXRjaCAlcyBkbSBzcGVjXG4iLCBzdHIpOw0KCQlyZXR1cm47DQoJfQ0K DQoJaWYgKHJlZy0+Ynl0ZXMgIT0gMikgew0KCQlkZXZfd2FybihkaS0+ZGV2 LCAiJXMgZG0gc3BlYyBoYXMgdW5zdXBwb3J0ZWQgYnl0ZSBzaXplXG4iLCBz dHIpOw0KCQlyZXR1cm47DQoJfQ0KDQoJaWYgKCFidWYtPmhhc19kYXRhKQ0K CQlyZXR1cm47DQoNCglpZiAoYmUxNl90b19jcHVwKHByZXYpID09IHZhbCkg ew0KCQlkZXZfaW5mbyhkaS0+ZGV2LCAiJXMgaGFzICV1XG4iLCBzdHIsIHZh bCk7DQoJCXJldHVybjsNCgl9DQoNCiNpZmRlZiBDT05GSUdfQkFUVEVSWV9C UTI3WFhYX0RUX1VQREFURVNfTlZNDQoJaWYgKCEoZGktPm9wdHMgJiBCUTI3 WFhYX09fUkFNKSAmJiAhYnEyN3h4eF9kdF90b19udm0pIHsNCiNlbHNlDQoJ aWYgKCEoZGktPm9wdHMgJiBCUTI3WFhYX09fUkFNKSkgew0KI2VuZGlmDQoJ CS8qIGRldmljZXRyZWUgYW5kIE5WTSBkaWZmZXI7IGRlZmVyIHRvIE5WTSAq Lw0KCQlkZXZfd2FybihkaS0+ZGV2LCAiJXMgaGFzICV1OyB1cGRhdGUgdG8g JXUgZGlzYWxsb3dlZCAiDQojaWZkZWYgQ09ORklHX0JBVFRFUllfQlEyN1hY WF9EVF9VUERBVEVTX05WTQ0KCQkJICJieSBkdF9tb25pdG9yZWRfYmF0dGVy eV91cGRhdGVzX252bT0wIg0KI2Vsc2UNCgkJCSAiZm9yIGZsYXNoL05WTSBk YXRhIG1lbW9yeSINCiNlbmRpZg0KCQkJICJcbiIsIHN0ciwgYmUxNl90b19j cHVwKHByZXYpLCB2YWwpOw0KCQlyZXR1cm47DQoJfQ0KDQoJZGV2X2luZm8o ZGktPmRldiwgInVwZGF0ZSAlcyB0byAldVxuIiwgc3RyLCB2YWwpOw0KDQoJ KnByZXYgPSBjcHVfdG9fYmUxNih2YWwpOw0KCWJ1Zi0+ZGlydHkgPSB0cnVl Ow0KfQ0KDQpzdGF0aWMgaW50IGJxMjd4eHhfYmF0dGVyeV9jZmd1cGRhdGVf cHJpdihzdHJ1Y3QgYnEyN3h4eF9kZXZpY2VfaW5mbyAqZGksIGJvb2wgYWN0 aXZlKQ0Kew0KCWNvbnN0IGludCBsaW1pdCA9IDEwMDsNCgl1MTYgY21kID0g YWN0aXZlID8gQlEyN1hYWF9TRVRfQ0ZHVVBEQVRFIDogQlEyN1hYWF9TT0ZU X1JFU0VUOw0KCWludCByZXQsIHRyeSA9IGxpbWl0Ow0KDQoJcmV0ID0gYnEy N3h4eF93cml0ZShkaSwgQlEyN1hYWF9SRUdfQ1RSTCwgY21kLCBmYWxzZSk7 DQoJaWYgKHJldCA8IDApDQoJCXJldHVybiByZXQ7DQoNCglkbyB7DQoJCUJR MjdYWFhfTVNMRUVQKDI1KTsNCgkJcmV0ID0gYnEyN3h4eF9yZWFkKGRpLCBC UTI3WFhYX1JFR19GTEFHUywgZmFsc2UpOw0KCQlpZiAocmV0IDwgMCkNCgkJ CXJldHVybiByZXQ7DQoJfSB3aGlsZSAoISEocmV0ICYgQlEyN1hYWF9GTEFH X0NGR1VQKSAhPSBhY3RpdmUgJiYgLS10cnkpOw0KDQoJaWYgKCF0cnkgJiYg ZGktPmNoaXAgIT0gQlEyNzQyNSkgeyAvLyA0MjUgaGFzIGEgYnVnDQoJCWRl dl9lcnIoZGktPmRldiwgInRpbWVkIG91dCB3YWl0aW5nIGZvciBjZmd1cGRh dGUgZmxhZyAlZFxuIiwgYWN0aXZlKTsNCgkJcmV0dXJuIC1FSU5WQUw7DQoJ fQ0KDQoJaWYgKGxpbWl0IC0gdHJ5ID4gMykNCgkJZGV2X3dhcm4oZGktPmRl diwgImNmZ3VwZGF0ZSAlZCwgcmV0cmllcyAlZFxuIiwgYWN0aXZlLCBsaW1p dCAtIHRyeSk7DQoNCglyZXR1cm4gMDsNCn0NCg0Kc3RhdGljIGlubGluZSBp bnQgYnEyN3h4eF9iYXR0ZXJ5X3NldF9jZmd1cGRhdGUoc3RydWN0IGJxMjd4 eHhfZGV2aWNlX2luZm8gKmRpKQ0Kew0KCWludCByZXQgPSBicTI3eHh4X2Jh dHRlcnlfY2ZndXBkYXRlX3ByaXYoZGksIHRydWUpOw0KCWlmIChyZXQgPCAw ICYmIHJldCAhPSAtRUlOVkFMKQ0KCQlkZXZfZXJyKGRpLT5kZXYsICJidXMg ZXJyb3Igb24gc2V0X2NmZ3VwZGF0ZTogJWRcbiIsIHJldCk7DQoNCglyZXR1 cm4gcmV0Ow0KfQ0KDQpzdGF0aWMgaW5saW5lIGludCBicTI3eHh4X2JhdHRl cnlfc29mdF9yZXNldChzdHJ1Y3QgYnEyN3h4eF9kZXZpY2VfaW5mbyAqZGkp DQp7DQoJaW50IHJldCA9IGJxMjd4eHhfYmF0dGVyeV9jZmd1cGRhdGVfcHJp dihkaSwgZmFsc2UpOw0KCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRUlOVkFM KQ0KCQlkZXZfZXJyKGRpLT5kZXYsICJidXMgZXJyb3Igb24gc29mdF9yZXNl dDogJWRcbiIsIHJldCk7DQoNCglyZXR1cm4gcmV0Ow0KfQ0KDQpzdGF0aWMg aW50IGJxMjd4eHhfYmF0dGVyeV93cml0ZV9kbV9ibG9jayhzdHJ1Y3QgYnEy N3h4eF9kZXZpY2VfaW5mbyAqZGksDQoJCQkJCSAgc3RydWN0IGJxMjd4eHhf ZG1fYnVmICpidWYpDQp7DQoJYm9vbCBjZmd1cCA9IGRpLT5vcHRzICYgQlEy N1hYWF9PX0NGR1VQOw0KCWludCByZXQ7DQoNCglpZiAoIWJ1Zi0+ZGlydHkp DQoJCXJldHVybiAwOw0KDQoJaWYgKGNmZ3VwKSB7DQoJCXJldCA9IGJxMjd4 eHhfYmF0dGVyeV9zZXRfY2ZndXBkYXRlKGRpKTsNCgkJaWYgKHJldCA8IDAp DQoJCQlyZXR1cm4gcmV0Ow0KCX0NCg0KCXJldCA9IGJxMjd4eHhfd3JpdGUo ZGksIEJRMjdYWFhfRE1fQ1RSTCwgMCwgdHJ1ZSk7DQoJaWYgKHJldCA8IDAp DQoJCWdvdG8gb3V0Ow0KDQoJcmV0ID0gYnEyN3h4eF93cml0ZShkaSwgQlEy N1hYWF9ETV9DTEFTUywgYnVmLT5jbGFzcywgdHJ1ZSk7DQoJaWYgKHJldCA8 IDApDQoJCWdvdG8gb3V0Ow0KDQoJcmV0ID0gYnEyN3h4eF93cml0ZShkaSwg QlEyN1hYWF9ETV9CTE9DSywgYnVmLT5ibG9jaywgdHJ1ZSk7DQoJaWYgKHJl dCA8IDApDQoJCWdvdG8gb3V0Ow0KDQoJQlEyN1hYWF9NU0xFRVAoMSk7DQoN CglyZXQgPSBicTI3eHh4X3dyaXRlX2Jsb2NrKGRpLCBCUTI3WFhYX0RNX0RB VEEsIGJ1Zi0+ZGF0YSwgQlEyN1hYWF9ETV9TWik7DQoJaWYgKHJldCA8IDAp DQoJCWdvdG8gb3V0Ow0KDQoJcmV0ID0gYnEyN3h4eF93cml0ZShkaSwgQlEy N1hYWF9ETV9DS1NVTSwNCgkJCSAgICBicTI3eHh4X2JhdHRlcnlfY2hlY2tz dW1fZG1fYmxvY2soYnVmKSwgdHJ1ZSk7DQoJaWYgKHJldCA8IDApDQoJCWdv dG8gb3V0Ow0KDQoJLyogRE8gTk9UIHJlYWQgQlEyN1hYWF9ETV9DS1NVTSBo ZXJlIHRvIHZlcmlmeSBpdCEgVGhhdCBtYXkgY2F1c2UgTlZNDQoJICogY29y cnVwdGlvbiBvbiB0aGUgJzQyNSBjaGlwIChhbmQgcGVyaGFwcyBvdGhlcnMp LCB3aGljaCBjYW4gZGFtYWdlDQoJICogdGhlIGNoaXAuDQoJICovDQoNCglp ZiAoY2ZndXApIHsNCgkJQlEyN1hYWF9NU0xFRVAoMSk7DQoJCXJldCA9IGJx Mjd4eHhfYmF0dGVyeV9zb2Z0X3Jlc2V0KGRpKTsNCgkJaWYgKHJldCA8IDAp DQoJCQlyZXR1cm4gcmV0Ow0KCX0gZWxzZSB7DQoJCUJRMjdYWFhfTVNMRUVQ KDEwMCk7IC8qIGZsYXNoIERNIHVwZGF0ZXMgaW4gPDEwMG1zICovDQoJfQ0K DQoJYnVmLT5kaXJ0eSA9IGZhbHNlOw0KDQoJcmV0dXJuIDA7DQoNCm91dDoN CglpZiAoY2ZndXApDQoJCWJxMjd4eHhfYmF0dGVyeV9zb2Z0X3Jlc2V0KGRp KTsNCg0KCWRldl9lcnIoZGktPmRldiwgImJ1cyBlcnJvciB3cml0aW5nIGNo aXAgbWVtb3J5OiAlZFxuIiwgcmV0KTsNCglyZXR1cm4gcmV0Ow0KfQ0KDQpz dGF0aWMgdm9pZCBicTI3eHh4X2JhdHRlcnlfc2V0X2NvbmZpZyhzdHJ1Y3Qg YnEyN3h4eF9kZXZpY2VfaW5mbyAqZGksDQoJCQkJICAgICAgIHN0cnVjdCBw b3dlcl9zdXBwbHlfYmF0dGVyeV9pbmZvICppbmZvKQ0Kew0KCXN0cnVjdCBi cTI3eHh4X2RtX2J1ZiBiZCA9IEJRMjdYWFhfRE1fQlVGKGRpLCBCUTI3WFhY X0RNX0RFU0lHTl9DQVBBQ0lUWSk7DQoJc3RydWN0IGJxMjd4eHhfZG1fYnVm IGJ0ID0gQlEyN1hYWF9ETV9CVUYoZGksIEJRMjdYWFhfRE1fVEVSTUlOQVRF X1ZPTFRBR0UpOw0KCWJvb2wgdXBkYXRlZDsNCg0KCWlmIChicTI3eHh4X2Jh dHRlcnlfdW5zZWFsKGRpKSA8IDApDQoJCXJldHVybjsNCg0KCWlmIChpbmZv LT5jaGFyZ2VfZnVsbF9kZXNpZ25fdWFoICE9IC1FSU5WQUwgJiYNCgkgICAg aW5mby0+ZW5lcmd5X2Z1bGxfZGVzaWduX3V3aCAhPSAtRUlOVkFMKSB7DQoJ CWJxMjd4eHhfYmF0dGVyeV9yZWFkX2RtX2Jsb2NrKGRpLCAmYmQpOw0KCQkv KiBhc3N1bWUgZGVzaWduIGVuZXJneSAmIGNhcGFjaXR5IGFyZSBpbiBzYW1l IGJsb2NrICovDQoJCWJxMjd4eHhfYmF0dGVyeV91cGRhdGVfZG1fYmxvY2so ZGksICZiZCwNCgkJCQkJQlEyN1hYWF9ETV9ERVNJR05fQ0FQQUNJVFksDQoJ CQkJCWluZm8tPmNoYXJnZV9mdWxsX2Rlc2lnbl91YWggLyAxMDAwKTsNCgkJ YnEyN3h4eF9iYXR0ZXJ5X3VwZGF0ZV9kbV9ibG9jayhkaSwgJmJkLA0KCQkJ CQlCUTI3WFhYX0RNX0RFU0lHTl9FTkVSR1ksDQoJCQkJCWluZm8tPmVuZXJn eV9mdWxsX2Rlc2lnbl91d2ggLyAxMDAwKTsNCgl9DQoNCglpZiAoaW5mby0+ dm9sdGFnZV9taW5fZGVzaWduX3V2ICE9IC1FSU5WQUwpIHsNCgkJYm9vbCBz YW1lID0gYmQuY2xhc3MgPT0gYnQuY2xhc3MgJiYgYmQuYmxvY2sgPT0gYnQu YmxvY2s7DQoJCWlmICghc2FtZSkNCgkJCWJxMjd4eHhfYmF0dGVyeV9yZWFk X2RtX2Jsb2NrKGRpLCAmYnQpOw0KCQlicTI3eHh4X2JhdHRlcnlfdXBkYXRl X2RtX2Jsb2NrKGRpLCBzYW1lID8gJmJkIDogJmJ0LA0KCQkJCQlCUTI3WFhY X0RNX1RFUk1JTkFURV9WT0xUQUdFLA0KCQkJCQlpbmZvLT52b2x0YWdlX21p bl9kZXNpZ25fdXYgLyAxMDAwKTsNCgl9DQoNCgl1cGRhdGVkID0gYmQuZGly dHkgfHwgYnQuZGlydHk7DQoNCglicTI3eHh4X2JhdHRlcnlfd3JpdGVfZG1f YmxvY2soZGksICZiZCk7DQoJYnEyN3h4eF9iYXR0ZXJ5X3dyaXRlX2RtX2Js b2NrKGRpLCAmYnQpOw0KDQoJYnEyN3h4eF9iYXR0ZXJ5X3NlYWwoZGkpOw0K DQoJaWYgKHVwZGF0ZWQgJiYgIShkaS0+b3B0cyAmIEJRMjdYWFhfT19DRkdV UCkpIHsNCgkJYnEyN3h4eF93cml0ZShkaSwgQlEyN1hYWF9SRUdfQ1RSTCwg QlEyN1hYWF9SRVNFVCwgZmFsc2UpOw0KCQlCUTI3WFhYX01TTEVFUCgzMDAp OyAvKiByZXNldCB0aW1lIGlzIG5vdCBkb2N1bWVudGVkICovDQoJfQ0KCS8q IGFzc3VtZSBicTI3eHh4X2JhdHRlcnlfdXBkYXRlKCkgaXMgY2FsbGVkIGhl cmVhZnRlciAqLw0KfQ0KDQpzdGF0aWMgdm9pZCBicTI3eHh4X2JhdHRlcnlf c2V0dGluZ3Moc3RydWN0IGJxMjd4eHhfZGV2aWNlX2luZm8gKmRpKQ0Kew0K CXN0cnVjdCBwb3dlcl9zdXBwbHlfYmF0dGVyeV9pbmZvIGluZm8gPSB7fTsN Cgl1bnNpZ25lZCBpbnQgbWluLCBtYXg7DQoNCglpZiAocG93ZXJfc3VwcGx5 X2dldF9iYXR0ZXJ5X2luZm8oZGktPmJhdCwgJmluZm8pIDwgMCkNCgkJcmV0 dXJuOw0KDQoJaWYgKCFkaS0+ZG1fcmVncykgew0KCQlkZXZfd2FybihkaS0+ ZGV2LCAiZGF0YSBtZW1vcnkgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgZm9yIGNo aXBcbiIpOw0KCQlyZXR1cm47DQoJfQ0KDQoJaWYgKGluZm8uZW5lcmd5X2Z1 bGxfZGVzaWduX3V3aCAhPSBpbmZvLmNoYXJnZV9mdWxsX2Rlc2lnbl91YWgp IHsNCgkJaWYgKGluZm8uZW5lcmd5X2Z1bGxfZGVzaWduX3V3aCA9PSAtRUlO VkFMKQ0KCQkJZGV2X3dhcm4oZGktPmRldiwgIm1pc3NpbmcgYmF0dGVyeTpl bmVyZ3ktZnVsbC1kZXNpZ24tbWljcm93YXR0LWhvdXJzXG4iKTsNCgkJZWxz ZSBpZiAoaW5mby5jaGFyZ2VfZnVsbF9kZXNpZ25fdWFoID09IC1FSU5WQUwp DQoJCQlkZXZfd2FybihkaS0+ZGV2LCAibWlzc2luZyBiYXR0ZXJ5OmNoYXJn ZS1mdWxsLWRlc2lnbi1taWNyb2FtcC1ob3Vyc1xuIik7DQoJfQ0KDQoJLyog YXNzdW1lIG1pbiA9PSAwICovDQoJbWF4ID0gZGktPmRtX3JlZ3NbQlEyN1hY WF9ETV9ERVNJR05fRU5FUkdZXS5tYXg7DQoJaWYgKGluZm8uZW5lcmd5X2Z1 bGxfZGVzaWduX3V3aCA+IG1heCAqIDEwMDApIHsNCgkJZGV2X2VycihkaS0+ ZGV2LCAiaW52YWxpZCBiYXR0ZXJ5OmVuZXJneS1mdWxsLWRlc2lnbi1taWNy b3dhdHQtaG91cnMgJWRcbiIsDQoJCQlpbmZvLmVuZXJneV9mdWxsX2Rlc2ln bl91d2gpOw0KCQlpbmZvLmVuZXJneV9mdWxsX2Rlc2lnbl91d2ggPSAtRUlO VkFMOw0KCX0NCg0KCS8qIGFzc3VtZSBtaW4gPT0gMCAqLw0KCW1heCA9IGRp LT5kbV9yZWdzW0JRMjdYWFhfRE1fREVTSUdOX0NBUEFDSVRZXS5tYXg7DQoJ aWYgKGluZm8uY2hhcmdlX2Z1bGxfZGVzaWduX3VhaCA+IG1heCAqIDEwMDAp IHsNCgkJZGV2X2VycihkaS0+ZGV2LCAiaW52YWxpZCBiYXR0ZXJ5OmNoYXJn ZS1mdWxsLWRlc2lnbi1taWNyb2FtcC1ob3VycyAlZFxuIiwNCgkJCWluZm8u Y2hhcmdlX2Z1bGxfZGVzaWduX3VhaCk7DQoJCWluZm8uY2hhcmdlX2Z1bGxf ZGVzaWduX3VhaCA9IC1FSU5WQUw7DQoJfQ0KDQoJbWluID0gZGktPmRtX3Jl Z3NbQlEyN1hYWF9ETV9URVJNSU5BVEVfVk9MVEFHRV0ubWluOw0KCW1heCA9 IGRpLT5kbV9yZWdzW0JRMjdYWFhfRE1fVEVSTUlOQVRFX1ZPTFRBR0VdLm1h eDsNCglpZiAoKGluZm8udm9sdGFnZV9taW5fZGVzaWduX3V2IDwgbWluICog MTAwMCB8fA0KCSAgICAgaW5mby52b2x0YWdlX21pbl9kZXNpZ25fdXYgPiBt YXggKiAxMDAwKSAmJg0KCSAgICAgaW5mby52b2x0YWdlX21pbl9kZXNpZ25f dXYgIT0gLUVJTlZBTCkgew0KCQlkZXZfZXJyKGRpLT5kZXYsICJpbnZhbGlk IGJhdHRlcnk6dm9sdGFnZS1taW4tZGVzaWduLW1pY3Jvdm9sdCAlZFxuIiwN CgkJCWluZm8udm9sdGFnZV9taW5fZGVzaWduX3V2KTsNCgkJaW5mby52b2x0 YWdlX21pbl9kZXNpZ25fdXYgPSAtRUlOVkFMOw0KCX0NCg0KCWlmICgoaW5m by5lbmVyZ3lfZnVsbF9kZXNpZ25fdXdoICE9IC1FSU5WQUwgJiYNCgkgICAg IGluZm8uY2hhcmdlX2Z1bGxfZGVzaWduX3VhaCAhPSAtRUlOVkFMKSB8fA0K CSAgICAgaW5mby52b2x0YWdlX21pbl9kZXNpZ25fdXYgICE9IC1FSU5WQUwp DQoJCWJxMjd4eHhfYmF0dGVyeV9zZXRfY29uZmlnKGRpLCAmaW5mbyk7DQp9 DQoNCi8qDQogKiBSZXR1cm4gdGhlIGJhdHRlcnkgU3RhdGUtb2YtQ2hhcmdl DQogKiBPciA8IDAgaWYgc29tZXRoaW5nIGZhaWxzLg0KICovDQpzdGF0aWMg aW50IGJxMjd4eHhfYmF0dGVyeV9yZWFkX3NvYyhzdHJ1Y3QgYnEyN3h4eF9k ZXZpY2VfaW5mbyAqZGkpDQp7DQoJaW50IHNvYzsNCg0KCWlmIChkaS0+b3B0 cyAmIEJRMjdYWFhfT19aRVJPKQ0KCQlzb2MgPSBicTI3eHh4X3JlYWQoZGks IEJRMjdYWFhfUkVHX1NPQywgdHJ1ZSk7DQoJZWxzZQ0KCQlzb2MgPSBicTI3 eHh4X3JlYWQoZGksIEJRMjdYWFhfUkVHX1NPQywgZmFsc2UpOw0KDQoJaWYg KHNvYyA8IDApDQoJCWRldl9kYmcoZGktPmRldiwgImVycm9yIHJlYWRpbmcg U3RhdGUtb2YtQ2hhcmdlXG4iKTsNCg0KCXJldHVybiBzb2M7DQp9DQoNCi8q DQogKiBSZXR1cm4gYSBiYXR0ZXJ5IGNoYXJnZSB2YWx1ZSBpbiDCtUFoDQog KiBPciA8IDAgaWYgc29tZXRoaW5nIGZhaWxzLg0KICovDQpzdGF0aWMgaW50 IGJxMjd4eHhfYmF0dGVyeV9yZWFkX2NoYXJnZShzdHJ1Y3QgYnEyN3h4eF9k ZXZpY2VfaW5mbyAqZGksIHU4IHJlZykNCnsNCglpbnQgY2hhcmdlOw0KDQoJ Y2hhcmdlID0gYnEyN3h4eF9yZWFkKGRpLCByZWcsIGZhbHNlKTsNCglpZiAo Y2hhcmdlIDwgMCkgew0KCQlkZXZfZGJnKGRpLT5kZXYsICJlcnJvciByZWFk aW5nIGNoYXJnZSByZWdpc3RlciAlMDJ4OiAlZFxuIiwNCgkJCXJlZywgY2hh cmdlKTsNCgkJcmV0dXJuIGNoYXJnZTsNCgl9DQoNCglpZiAoZGktPm9wdHMg JiBCUTI3WFhYX09fWkVSTykNCgkJY2hhcmdlICo9IEJRMjdYWFhfQ1VSUkVO VF9DT05TVEFOVCAvIEJRMjdYWFhfUlM7DQoJZWxzZQ0KCQljaGFyZ2UgKj0g MTAwMDsNCg0KCXJldHVybiBjaGFyZ2U7DQp9DQoNCi8qDQogKiBSZXR1cm4g dGhlIGJhdHRlcnkgTm9taW5hbCBhdmFpbGFibGUgY2FwYWNpdHkgaW4gwrVB aA0KICogT3IgPCAwIGlmIHNvbWV0aGluZyBmYWlscy4NCiAqLw0Kc3RhdGlj IGlubGluZSBpbnQgYnEyN3h4eF9iYXR0ZXJ5X3JlYWRfbmFjKHN0cnVjdCBi cTI3eHh4X2RldmljZV9pbmZvICpkaSkNCnsNCglpbnQgZmxhZ3M7DQoNCglp ZiAoZGktPm9wdHMgJiBCUTI3WFhYX09fWkVSTykgew0KCQlmbGFncyA9IGJx Mjd4eHhfcmVhZChkaSwgQlEyN1hYWF9SRUdfRkxBR1MsIHRydWUpOw0KCQlp ZiAoZmxhZ3MgPj0gMCAmJiAoZmxhZ3MgJiBCUTI3MDAwX0ZMQUdfQ0kpKQ0K CQkJcmV0dXJuIC1FTk9EQVRBOw0KCX0NCg0KCXJldHVybiBicTI3eHh4X2Jh dHRlcnlfcmVhZF9jaGFyZ2UoZGksIEJRMjdYWFhfUkVHX05BQyk7DQp9DQoN Ci8qDQogKiBSZXR1cm4gdGhlIGJhdHRlcnkgRnVsbCBDaGFyZ2UgQ2FwYWNp dHkgaW4gwrVBaA0KICogT3IgPCAwIGlmIHNvbWV0aGluZyBmYWlscy4NCiAq Lw0Kc3RhdGljIGlubGluZSBpbnQgYnEyN3h4eF9iYXR0ZXJ5X3JlYWRfZmNj KHN0cnVjdCBicTI3eHh4X2RldmljZV9pbmZvICpkaSkNCnsNCglyZXR1cm4g YnEyN3h4eF9iYXR0ZXJ5X3JlYWRfY2hhcmdlKGRpLCBCUTI3WFhYX1JFR19G Q0MpOw0KfQ0KDQovKg0KICogUmV0dXJuIHRoZSBEZXNpZ24gQ2FwYWNpdHkg aW4gwrVBaA0KICogT3IgPCAwIGlmIHNvbWV0aGluZyBmYWlscy4NCiAqLw0K c3RhdGljIGludCBicTI3eHh4X2JhdHRlcnlfcmVhZF9kY2FwKHN0cnVjdCBi cTI3eHh4X2RldmljZV9pbmZvICpkaSkNCnsNCglpbnQgZGNhcDsNCg0KCWlm IChkaS0+b3B0cyAmIEJRMjdYWFhfT19aRVJPKQ0KCQlkY2FwID0gYnEyN3h4 eF9yZWFkKGRpLCBCUTI3WFhYX1JFR19EQ0FQLCB0cnVlKTsNCgllbHNlDQoJ CWRjYXAgPSBicTI3eHh4X3JlYWQoZGksIEJRMjdYWFhfUkVHX0RDQVAsIGZh bHNlKTsNCg0KCWlmIChkY2FwIDwgMCkgew0KCQlkZXZfZGJnKGRpLT5kZXYs ICJlcnJvciByZWFkaW5nIGluaXRpYWwgbGFzdCBtZWFzdXJlZCBkaXNjaGFy Z2VcbiIpOw0KCQlyZXR1cm4gZGNhcDsNCgl9DQoNCglpZiAoZGktPm9wdHMg JiBCUTI3WFhYX09fWkVSTykNCgkJZGNhcCA9IChkY2FwIDw8IDgpICogQlEy N1hYWF9DVVJSRU5UX0NPTlNUQU5UIC8gQlEyN1hYWF9SUzsNCgllbHNlDQoJ CWRjYXAgKj0gMTAwMDsNCg0KCXJldHVybiBkY2FwOw0KfQ0KDQovKg0KICog UmV0dXJuIHRoZSBiYXR0ZXJ5IEF2YWlsYWJsZSBlbmVyZ3kgaW4gwrVXaA0K ICogT3IgPCAwIGlmIHNvbWV0aGluZyBmYWlscy4NCiAqLw0Kc3RhdGljIGlu dCBicTI3eHh4X2JhdHRlcnlfcmVhZF9lbmVyZ3koc3RydWN0IGJxMjd4eHhf ZGV2aWNlX2luZm8gKmRpKQ0Kew0KCWludCBhZTsNCg0KCWFlID0gYnEyN3h4 eF9yZWFkKGRpLCBCUTI3WFhYX1JFR19BRSwgZmFsc2UpOw0KCWlmIChhZSA8 IDApIHsNCgkJZGV2X2RiZyhkaS0+ZGV2LCAiZXJyb3IgcmVhZGluZyBhdmFp bGFibGUgZW5lcmd5XG4iKTsNCgkJcmV0dXJuIGFlOw0KCX0NCg0KCWlmIChk aS0+b3B0cyAmIEJRMjdYWFhfT19aRVJPKQ0KCQlhZSAqPSBCUTI3WFhYX1BP V0VSX0NPTlNUQU5UIC8gQlEyN1hYWF9SUzsNCgllbHNlDQoJCWFlICo9IDEw MDA7DQoNCglyZXR1cm4gYWU7DQp9DQoNCi8qDQogKiBSZXR1cm4gdGhlIGJh dHRlcnkgdGVtcGVyYXR1cmUgaW4gdGVudGhzIG9mIGRlZ3JlZSBLZWx2aW4N CiAqIE9yIDwgMCBpZiBzb21ldGhpbmcgZmFpbHMuDQogKi8NCnN0YXRpYyBp bnQgYnEyN3h4eF9iYXR0ZXJ5X3JlYWRfdGVtcGVyYXR1cmUoc3RydWN0IGJx Mjd4eHhfZGV2aWNlX2luZm8gKmRpKQ0Kew0KCWludCB0ZW1wOw0KDQoJdGVt cCA9IGJxMjd4eHhfcmVhZChkaSwgQlEyN1hYWF9SRUdfVEVNUCwgZmFsc2Up Ow0KCWlmICh0ZW1wIDwgMCkgew0KCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJv ciByZWFkaW5nIHRlbXBlcmF0dXJlXG4iKTsNCgkJcmV0dXJuIHRlbXA7DQoJ fQ0KDQoJaWYgKGRpLT5vcHRzICYgQlEyN1hYWF9PX1pFUk8pDQoJCXRlbXAg PSA1ICogdGVtcCAvIDI7DQoNCglyZXR1cm4gdGVtcDsNCn0NCg0KLyoNCiAq IFJldHVybiB0aGUgYmF0dGVyeSBDeWNsZSBjb3VudCB0b3RhbA0KICogT3Ig PCAwIGlmIHNvbWV0aGluZyBmYWlscy4NCiAqLw0Kc3RhdGljIGludCBicTI3 eHh4X2JhdHRlcnlfcmVhZF9jeWN0KHN0cnVjdCBicTI3eHh4X2RldmljZV9p bmZvICpkaSkNCnsNCglpbnQgY3ljdDsNCg0KCWN5Y3QgPSBicTI3eHh4X3Jl YWQoZGksIEJRMjdYWFhfUkVHX0NZQ1QsIGZhbHNlKTsNCglpZiAoY3ljdCA8 IDApDQoJCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgY3ljbGUg Y291bnQgdG90YWxcbiIpOw0KDQoJcmV0dXJuIGN5Y3Q7DQp9DQoNCi8qDQog KiBSZWFkIGEgdGltZSByZWdpc3Rlci4NCiAqIFJldHVybiA8IDAgaWYgc29t ZXRoaW5nIGZhaWxzLg0KICovDQpzdGF0aWMgaW50IGJxMjd4eHhfYmF0dGVy eV9yZWFkX3RpbWUoc3RydWN0IGJxMjd4eHhfZGV2aWNlX2luZm8gKmRpLCB1 OCByZWcpDQp7DQoJaW50IHR2YWw7DQoNCgl0dmFsID0gYnEyN3h4eF9yZWFk KGRpLCByZWcsIGZhbHNlKTsNCglpZiAodHZhbCA8IDApIHsNCgkJZGV2X2Ri ZyhkaS0+ZGV2LCAiZXJyb3IgcmVhZGluZyB0aW1lIHJlZ2lzdGVyICUwMng6 ICVkXG4iLA0KCQkJcmVnLCB0dmFsKTsNCgkJcmV0dXJuIHR2YWw7DQoJfQ0K DQoJaWYgKHR2YWwgPT0gNjU1MzUpDQoJCXJldHVybiAtRU5PREFUQTsNCg0K CXJldHVybiB0dmFsICogNjA7DQp9DQoNCi8qDQogKiBSZWFkIGFuIGF2ZXJh Z2UgcG93ZXIgcmVnaXN0ZXIuDQogKiBSZXR1cm4gPCAwIGlmIHNvbWV0aGlu ZyBmYWlscy4NCiAqLw0Kc3RhdGljIGludCBicTI3eHh4X2JhdHRlcnlfcmVh ZF9wd3JfYXZnKHN0cnVjdCBicTI3eHh4X2RldmljZV9pbmZvICpkaSkNCnsN CglpbnQgdHZhbDsNCg0KCXR2YWwgPSBicTI3eHh4X3JlYWQoZGksIEJRMjdY WFhfUkVHX0FQLCBmYWxzZSk7DQoJaWYgKHR2YWwgPCAwKSB7DQoJCWRldl9l cnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgYXZlcmFnZSBwb3dlciByZWdp c3RlciAgJTAyeDogJWRcbiIsDQoJCQlCUTI3WFhYX1JFR19BUCwgdHZhbCk7 DQoJCXJldHVybiB0dmFsOw0KCX0NCg0KCWlmIChkaS0+b3B0cyAmIEJRMjdY WFhfT19aRVJPKQ0KCQlyZXR1cm4gKHR2YWwgKiBCUTI3WFhYX1BPV0VSX0NP TlNUQU5UKSAvIEJRMjdYWFhfUlM7DQoJZWxzZQ0KCQlyZXR1cm4gdHZhbDsN Cn0NCg0KLyoNCiAqIFJldHVybnMgdHJ1ZSBpZiBhIGJhdHRlcnkgb3ZlciB0 ZW1wZXJhdHVyZSBjb25kaXRpb24gaXMgZGV0ZWN0ZWQNCiAqLw0Kc3RhdGlj IGJvb2wgYnEyN3h4eF9iYXR0ZXJ5X292ZXJ0ZW1wKHN0cnVjdCBicTI3eHh4 X2RldmljZV9pbmZvICpkaSwgdTE2IGZsYWdzKQ0Kew0KCWlmIChkaS0+b3B0 cyAmIEJRMjdYWFhfT19PVERDKQ0KCQlyZXR1cm4gZmxhZ3MgJiAoQlEyN1hY WF9GTEFHX09UQyB8IEJRMjdYWFhfRkxBR19PVEQpOw0KICAgICAgICBpZiAo ZGktPm9wdHMgJiBCUTI3WFhYX09fVVRPVCkNCgkJcmV0dXJuIGZsYWdzICYg QlEyN1hYWF9GTEFHX09UOw0KDQoJcmV0dXJuIGZhbHNlOw0KfQ0KDQovKg0K ICogUmV0dXJucyB0cnVlIGlmIGEgYmF0dGVyeSB1bmRlciB0ZW1wZXJhdHVy ZSBjb25kaXRpb24gaXMgZGV0ZWN0ZWQNCiAqLw0Kc3RhdGljIGJvb2wgYnEy N3h4eF9iYXR0ZXJ5X3VuZGVydGVtcChzdHJ1Y3QgYnEyN3h4eF9kZXZpY2Vf aW5mbyAqZGksIHUxNiBmbGFncykNCnsNCglpZiAoZGktPm9wdHMgJiBCUTI3 WFhYX09fVVRPVCkNCgkJcmV0dXJuIGZsYWdzICYgQlEyN1hYWF9GTEFHX1VU Ow0KDQoJcmV0dXJuIGZhbHNlOw0KfQ0KDQovKg0KICogUmV0dXJucyB0cnVl IGlmIGEgbG93IHN0YXRlIG9mIGNoYXJnZSBjb25kaXRpb24gaXMgZGV0ZWN0 ZWQNCiAqLw0Kc3RhdGljIGJvb2wgYnEyN3h4eF9iYXR0ZXJ5X2RlYWQoc3Ry dWN0IGJxMjd4eHhfZGV2aWNlX2luZm8gKmRpLCB1MTYgZmxhZ3MpDQp7DQoJ aWYgKGRpLT5vcHRzICYgQlEyN1hYWF9PX1pFUk8pDQoJCXJldHVybiBmbGFn cyAmIChCUTI3MDAwX0ZMQUdfRURWMSB8IEJRMjcwMDBfRkxBR19FRFZGKTsN CgllbHNlDQoJCXJldHVybiBmbGFncyAmIChCUTI3WFhYX0ZMQUdfU09DMSB8 IEJRMjdYWFhfRkxBR19TT0NGKTsNCn0NCg0KLyoNCiAqIFJlYWQgZmxhZyBy ZWdpc3Rlci4NCiAqIFJldHVybiA8IDAgaWYgc29tZXRoaW5nIGZhaWxzLg0K ICovDQpzdGF0aWMgaW50IGJxMjd4eHhfYmF0dGVyeV9yZWFkX2hlYWx0aChz dHJ1Y3QgYnEyN3h4eF9kZXZpY2VfaW5mbyAqZGkpDQp7DQoJaW50IGZsYWdz Ow0KCWJvb2wgaGFzX3NpbmdlX2ZsYWcgPSBkaS0+b3B0cyAmIEJRMjdYWFhf T19aRVJPOw0KDQoJZmxhZ3MgPSBicTI3eHh4X3JlYWQoZGksIEJRMjdYWFhf UkVHX0ZMQUdTLCBoYXNfc2luZ2VfZmxhZyk7DQoJaWYgKGZsYWdzIDwgMCkg ew0KCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIGZsYWcgcmVn aXN0ZXI6JWRcbiIsIGZsYWdzKTsNCgkJcmV0dXJuIGZsYWdzOw0KCX0NCg0K CS8qIFVubGlrZWx5IGJ1dCBpbXBvcnRhbnQgdG8gcmV0dXJuIGZpcnN0ICov DQoJaWYgKHVubGlrZWx5KGJxMjd4eHhfYmF0dGVyeV9vdmVydGVtcChkaSwg ZmxhZ3MpKSkNCgkJcmV0dXJuIFBPV0VSX1NVUFBMWV9IRUFMVEhfT1ZFUkhF QVQ7DQoJaWYgKHVubGlrZWx5KGJxMjd4eHhfYmF0dGVyeV91bmRlcnRlbXAo ZGksIGZsYWdzKSkpDQoJCXJldHVybiBQT1dFUl9TVVBQTFlfSEVBTFRIX0NP TEQ7DQoJaWYgKHVubGlrZWx5KGJxMjd4eHhfYmF0dGVyeV9kZWFkKGRpLCBm bGFncykpKQ0KCQlyZXR1cm4gUE9XRVJfU1VQUExZX0hFQUxUSF9ERUFEOw0K DQoJcmV0dXJuIFBPV0VSX1NVUFBMWV9IRUFMVEhfR09PRDsNCn0NCg0Kdm9p ZCBicTI3eHh4X2JhdHRlcnlfdXBkYXRlKHN0cnVjdCBicTI3eHh4X2Rldmlj ZV9pbmZvICpkaSkNCnsNCglzdHJ1Y3QgYnEyN3h4eF9yZWdfY2FjaGUgY2Fj aGUgPSB7MCwgfTsNCglib29sIGhhc19jaV9mbGFnID0gZGktPm9wdHMgJiBC UTI3WFhYX09fWkVSTzsNCglib29sIGhhc19zaW5nZV9mbGFnID0gZGktPm9w dHMgJiBCUTI3WFhYX09fWkVSTzsNCg0KCWNhY2hlLmZsYWdzID0gYnEyN3h4 eF9yZWFkKGRpLCBCUTI3WFhYX1JFR19GTEFHUywgaGFzX3NpbmdlX2ZsYWcp Ow0KCWlmICgoY2FjaGUuZmxhZ3MgJiAweGZmKSA9PSAweGZmKQ0KCQljYWNo ZS5mbGFncyA9IC0xOyAvKiByZWFkIGVycm9yICovDQoJaWYgKGNhY2hlLmZs YWdzID49IDApIHsNCgkJY2FjaGUudGVtcGVyYXR1cmUgPSBicTI3eHh4X2Jh dHRlcnlfcmVhZF90ZW1wZXJhdHVyZShkaSk7DQoJCWlmIChoYXNfY2lfZmxh ZyAmJiAoY2FjaGUuZmxhZ3MgJiBCUTI3MDAwX0ZMQUdfQ0kpKSB7DQoJCQlk ZXZfaW5mb19vbmNlKGRpLT5kZXYsICJiYXR0ZXJ5IGlzIG5vdCBjYWxpYnJh dGVkISBpZ25vcmluZyBjYXBhY2l0eSB2YWx1ZXNcbiIpOw0KCQkJY2FjaGUu Y2FwYWNpdHkgPSAtRU5PREFUQTsNCgkJCWNhY2hlLmVuZXJneSA9IC1FTk9E QVRBOw0KCQkJY2FjaGUudGltZV90b19lbXB0eSA9IC1FTk9EQVRBOw0KCQkJ Y2FjaGUudGltZV90b19lbXB0eV9hdmcgPSAtRU5PREFUQTsNCgkJCWNhY2hl LnRpbWVfdG9fZnVsbCA9IC1FTk9EQVRBOw0KCQkJY2FjaGUuY2hhcmdlX2Z1 bGwgPSAtRU5PREFUQTsNCgkJCWNhY2hlLmhlYWx0aCA9IC1FTk9EQVRBOw0K CQl9IGVsc2Ugew0KCQkJaWYgKGRpLT5yZWdzW0JRMjdYWFhfUkVHX1RURV0g IT0gSU5WQUxJRF9SRUdfQUREUikNCgkJCQljYWNoZS50aW1lX3RvX2VtcHR5 ID0gYnEyN3h4eF9iYXR0ZXJ5X3JlYWRfdGltZShkaSwgQlEyN1hYWF9SRUdf VFRFKTsNCgkJCWlmIChkaS0+cmVnc1tCUTI3WFhYX1JFR19UVEVDUF0gIT0g SU5WQUxJRF9SRUdfQUREUikNCgkJCQljYWNoZS50aW1lX3RvX2VtcHR5X2F2 ZyA9IGJxMjd4eHhfYmF0dGVyeV9yZWFkX3RpbWUoZGksIEJRMjdYWFhfUkVH X1RURUNQKTsNCgkJCWlmIChkaS0+cmVnc1tCUTI3WFhYX1JFR19UVEZdICE9 IElOVkFMSURfUkVHX0FERFIpDQoJCQkJY2FjaGUudGltZV90b19mdWxsID0g YnEyN3h4eF9iYXR0ZXJ5X3JlYWRfdGltZShkaSwgQlEyN1hYWF9SRUdfVFRG KTsNCgkJCWNhY2hlLmNoYXJnZV9mdWxsID0gYnEyN3h4eF9iYXR0ZXJ5X3Jl YWRfZmNjKGRpKTsNCgkJCWNhY2hlLmNhcGFjaXR5ID0gYnEyN3h4eF9iYXR0 ZXJ5X3JlYWRfc29jKGRpKTsNCgkJCWlmIChkaS0+cmVnc1tCUTI3WFhYX1JF R19BRV0gIT0gSU5WQUxJRF9SRUdfQUREUikNCgkJCQljYWNoZS5lbmVyZ3kg PSBicTI3eHh4X2JhdHRlcnlfcmVhZF9lbmVyZ3koZGkpOw0KCQkJY2FjaGUu aGVhbHRoID0gYnEyN3h4eF9iYXR0ZXJ5X3JlYWRfaGVhbHRoKGRpKTsNCgkJ fQ0KCQlpZiAoZGktPnJlZ3NbQlEyN1hYWF9SRUdfQ1lDVF0gIT0gSU5WQUxJ RF9SRUdfQUREUikNCgkJCWNhY2hlLmN5Y2xlX2NvdW50ID0gYnEyN3h4eF9i YXR0ZXJ5X3JlYWRfY3ljdChkaSk7DQoJCWlmIChkaS0+cmVnc1tCUTI3WFhY X1JFR19BUF0gIT0gSU5WQUxJRF9SRUdfQUREUikNCgkJCWNhY2hlLnBvd2Vy X2F2ZyA9IGJxMjd4eHhfYmF0dGVyeV9yZWFkX3B3cl9hdmcoZGkpOw0KDQoJ CS8qIFdlIG9ubHkgaGF2ZSB0byByZWFkIGNoYXJnZSBkZXNpZ24gZnVsbCBv bmNlICovDQoJCWlmIChkaS0+Y2hhcmdlX2Rlc2lnbl9mdWxsIDw9IDApDQoJ CQlkaS0+Y2hhcmdlX2Rlc2lnbl9mdWxsID0gYnEyN3h4eF9iYXR0ZXJ5X3Jl YWRfZGNhcChkaSk7DQoJfQ0KDQoJaWYgKGRpLT5jYWNoZS5jYXBhY2l0eSAh PSBjYWNoZS5jYXBhY2l0eSkNCgkJcG93ZXJfc3VwcGx5X2NoYW5nZWQoZGkt PmJhdCk7DQoNCglpZiAobWVtY21wKCZkaS0+Y2FjaGUsICZjYWNoZSwgc2l6 ZW9mKGNhY2hlKSkgIT0gMCkNCgkJZGktPmNhY2hlID0gY2FjaGU7DQoNCglk aS0+bGFzdF91cGRhdGUgPSBqaWZmaWVzOw0KfQ0KRVhQT1JUX1NZTUJPTF9H UEwoYnEyN3h4eF9iYXR0ZXJ5X3VwZGF0ZSk7DQoNCnN0YXRpYyB2b2lkIGJx Mjd4eHhfYmF0dGVyeV9wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykN CnsNCglzdHJ1Y3QgYnEyN3h4eF9kZXZpY2VfaW5mbyAqZGkgPQ0KCQkJY29u dGFpbmVyX29mKHdvcmssIHN0cnVjdCBicTI3eHh4X2RldmljZV9pbmZvLA0K CQkJCSAgICAgd29yay53b3JrKTsNCg0KCWJxMjd4eHhfYmF0dGVyeV91cGRh dGUoZGkpOw0KDQoJaWYgKHBvbGxfaW50ZXJ2YWwgPiAwKQ0KCQlzY2hlZHVs ZV9kZWxheWVkX3dvcmsoJmRpLT53b3JrLCBwb2xsX2ludGVydmFsICogSFop Ow0KfQ0KDQovKg0KICogUmV0dXJuIHRoZSBiYXR0ZXJ5IGF2ZXJhZ2UgY3Vy cmVudCBpbiDCtUENCiAqIE5vdGUgdGhhdCBjdXJyZW50IGNhbiBiZSBuZWdh dGl2ZSBzaWduZWQgYXMgd2VsbA0KICogT3IgMCBpZiBzb21ldGhpbmcgZmFp bHMuDQogKi8NCnN0YXRpYyBpbnQgYnEyN3h4eF9iYXR0ZXJ5X2N1cnJlbnQo c3RydWN0IGJxMjd4eHhfZGV2aWNlX2luZm8gKmRpLA0KCQkJCSAgIHVuaW9u IHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpDQp7DQoJaW50IGN1cnI7DQoJ aW50IGZsYWdzOw0KDQoJY3VyciA9IGJxMjd4eHhfcmVhZChkaSwgQlEyN1hY WF9SRUdfQUksIGZhbHNlKTsNCglpZiAoY3VyciA8IDApIHsNCgkJZGV2X2Vy cihkaS0+ZGV2LCAiZXJyb3IgcmVhZGluZyBjdXJyZW50XG4iKTsNCgkJcmV0 dXJuIGN1cnI7DQoJfQ0KDQoJaWYgKGRpLT5vcHRzICYgQlEyN1hYWF9PX1pF Uk8pIHsNCgkJZmxhZ3MgPSBicTI3eHh4X3JlYWQoZGksIEJRMjdYWFhfUkVH X0ZMQUdTLCB0cnVlKTsNCgkJaWYgKGZsYWdzICYgQlEyNzAwMF9GTEFHX0NI R1MpIHsNCgkJCWRldl9kYmcoZGktPmRldiwgIm5lZ2F0aXZlIGN1cnJlbnQh XG4iKTsNCgkJCWN1cnIgPSAtY3VycjsNCgkJfQ0KDQoJCXZhbC0+aW50dmFs ID0gY3VyciAqIEJRMjdYWFhfQ1VSUkVOVF9DT05TVEFOVCAvIEJRMjdYWFhf UlM7DQoJfSBlbHNlIHsNCgkJLyogT3RoZXIgZ2F1Z2VzIHJldHVybiBzaWdu ZWQgdmFsdWUgKi8NCgkJdmFsLT5pbnR2YWwgPSAoaW50KSgoczE2KWN1cnIp ICogMTAwMDsNCgl9DQoNCglyZXR1cm4gMDsNCn0NCg0Kc3RhdGljIGludCBi cTI3eHh4X2JhdHRlcnlfc3RhdHVzKHN0cnVjdCBicTI3eHh4X2RldmljZV9p bmZvICpkaSwNCgkJCQkgIHVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2 YWwpDQp7DQoJaW50IHN0YXR1czsNCg0KCWlmIChkaS0+b3B0cyAmIEJRMjdY WFhfT19aRVJPKSB7DQoJCWlmIChkaS0+Y2FjaGUuZmxhZ3MgJiBCUTI3MDAw X0ZMQUdfRkMpDQoJCQlzdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0ZV TEw7DQoJCWVsc2UgaWYgKGRpLT5jYWNoZS5mbGFncyAmIEJRMjcwMDBfRkxB R19DSEdTKQ0KCQkJc3RhdHVzID0gUE9XRVJfU1VQUExZX1NUQVRVU19DSEFS R0lORzsNCgkJZWxzZSBpZiAocG93ZXJfc3VwcGx5X2FtX2lfc3VwcGxpZWQo ZGktPmJhdCkpDQoJCQlzdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX05P VF9DSEFSR0lORzsNCgkJZWxzZQ0KCQkJc3RhdHVzID0gUE9XRVJfU1VQUExZ X1NUQVRVU19ESVNDSEFSR0lORzsNCgl9IGVsc2Ugew0KCQlpZiAoZGktPmNh Y2hlLmZsYWdzICYgQlEyN1hYWF9GTEFHX0ZDKQ0KCQkJc3RhdHVzID0gUE9X RVJfU1VQUExZX1NUQVRVU19GVUxMOw0KCQllbHNlIGlmIChkaS0+Y2FjaGUu ZmxhZ3MgJiBCUTI3WFhYX0ZMQUdfRFNDKQ0KCQkJc3RhdHVzID0gUE9XRVJf U1VQUExZX1NUQVRVU19ESVNDSEFSR0lORzsNCgkJZWxzZQ0KCQkJc3RhdHVz ID0gUE9XRVJfU1VQUExZX1NUQVRVU19DSEFSR0lORzsNCgl9DQoNCgl2YWwt PmludHZhbCA9IHN0YXR1czsNCg0KCXJldHVybiAwOw0KfQ0KDQpzdGF0aWMg aW50IGJxMjd4eHhfYmF0dGVyeV9jYXBhY2l0eV9sZXZlbChzdHJ1Y3QgYnEy N3h4eF9kZXZpY2VfaW5mbyAqZGksDQoJCQkJCSAgdW5pb24gcG93ZXJfc3Vw cGx5X3Byb3B2YWwgKnZhbCkNCnsNCglpbnQgbGV2ZWw7DQoNCglpZiAoZGkt Pm9wdHMgJiBCUTI3WFhYX09fWkVSTykgew0KCQlpZiAoZGktPmNhY2hlLmZs YWdzICYgQlEyNzAwMF9GTEFHX0ZDKQ0KCQkJbGV2ZWwgPSBQT1dFUl9TVVBQ TFlfQ0FQQUNJVFlfTEVWRUxfRlVMTDsNCgkJZWxzZSBpZiAoZGktPmNhY2hl LmZsYWdzICYgQlEyNzAwMF9GTEFHX0VEVjEpDQoJCQlsZXZlbCA9IFBPV0VS X1NVUFBMWV9DQVBBQ0lUWV9MRVZFTF9MT1c7DQoJCWVsc2UgaWYgKGRpLT5j YWNoZS5mbGFncyAmIEJRMjcwMDBfRkxBR19FRFZGKQ0KCQkJbGV2ZWwgPSBQ T1dFUl9TVVBQTFlfQ0FQQUNJVFlfTEVWRUxfQ1JJVElDQUw7DQoJCWVsc2UN CgkJCWxldmVsID0gUE9XRVJfU1VQUExZX0NBUEFDSVRZX0xFVkVMX05PUk1B TDsNCgl9IGVsc2Ugew0KCQlpZiAoZGktPmNhY2hlLmZsYWdzICYgQlEyN1hY WF9GTEFHX0ZDKQ0KCQkJbGV2ZWwgPSBQT1dFUl9TVVBQTFlfQ0FQQUNJVFlf TEVWRUxfRlVMTDsNCgkJZWxzZSBpZiAoZGktPmNhY2hlLmZsYWdzICYgQlEy N1hYWF9GTEFHX1NPQzEpDQoJCQlsZXZlbCA9IFBPV0VSX1NVUFBMWV9DQVBB Q0lUWV9MRVZFTF9MT1c7DQoJCWVsc2UgaWYgKGRpLT5jYWNoZS5mbGFncyAm IEJRMjdYWFhfRkxBR19TT0NGKQ0KCQkJbGV2ZWwgPSBQT1dFUl9TVVBQTFlf Q0FQQUNJVFlfTEVWRUxfQ1JJVElDQUw7DQoJCWVsc2UNCgkJCWxldmVsID0g UE9XRVJfU1VQUExZX0NBUEFDSVRZX0xFVkVMX05PUk1BTDsNCgl9DQoNCgl2 YWwtPmludHZhbCA9IGxldmVsOw0KDQoJcmV0dXJuIDA7DQp9DQoNCi8qDQog KiBSZXR1cm4gdGhlIGJhdHRlcnkgVm9sdGFnZSBpbiBtaWxsaXZvbHRzDQog KiBPciA8IDAgaWYgc29tZXRoaW5nIGZhaWxzLg0KICovDQpzdGF0aWMgaW50 IGJxMjd4eHhfYmF0dGVyeV92b2x0YWdlKHN0cnVjdCBicTI3eHh4X2Rldmlj ZV9pbmZvICpkaSwNCgkJCQkgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZh bCAqdmFsKQ0Kew0KCWludCB2b2x0Ow0KDQoJdm9sdCA9IGJxMjd4eHhfcmVh ZChkaSwgQlEyN1hYWF9SRUdfVk9MVCwgZmFsc2UpOw0KCWlmICh2b2x0IDwg MCkgew0KCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIHZvbHRh Z2VcbiIpOw0KCQlyZXR1cm4gdm9sdDsNCgl9DQoNCgl2YWwtPmludHZhbCA9 IHZvbHQgKiAxMDAwOw0KDQoJcmV0dXJuIDA7DQp9DQoNCnN0YXRpYyBpbnQg YnEyN3h4eF9zaW1wbGVfdmFsdWUoaW50IHZhbHVlLA0KCQkJCXVuaW9uIHBv d2VyX3N1cHBseV9wcm9wdmFsICp2YWwpDQp7DQoJaWYgKHZhbHVlIDwgMCkN CgkJcmV0dXJuIHZhbHVlOw0KDQoJdmFsLT5pbnR2YWwgPSB2YWx1ZTsNCg0K CXJldHVybiAwOw0KfQ0KDQpzdGF0aWMgaW50IGJxMjd4eHhfYmF0dGVyeV9n ZXRfcHJvcGVydHkoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LA0KCQkJCQll bnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsDQoJCQkJCXVuaW9uIHBv d2VyX3N1cHBseV9wcm9wdmFsICp2YWwpDQp7DQoJaW50IHJldCA9IDA7DQoJ c3RydWN0IGJxMjd4eHhfZGV2aWNlX2luZm8gKmRpID0gcG93ZXJfc3VwcGx5 X2dldF9kcnZkYXRhKHBzeSk7DQoNCgltdXRleF9sb2NrKCZkaS0+bG9jayk7 DQoJaWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMoZGktPmxhc3RfdXBkYXRl ICsgNSAqIEhaKSkgew0KCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRp LT53b3JrKTsNCgkJYnEyN3h4eF9iYXR0ZXJ5X3BvbGwoJmRpLT53b3JrLndv cmspOw0KCX0NCgltdXRleF91bmxvY2soJmRpLT5sb2NrKTsNCg0KCWlmIChw c3AgIT0gUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCAmJiBkaS0+Y2FjaGUu ZmxhZ3MgPCAwKQ0KCQlyZXR1cm4gLUVOT0RFVjsNCg0KCXN3aXRjaCAocHNw KSB7DQoJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVM6DQoJCXJldCA9 IGJxMjd4eHhfYmF0dGVyeV9zdGF0dXMoZGksIHZhbCk7DQoJCWJyZWFrOw0K CWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1c6DQoJCXJldCA9 IGJxMjd4eHhfYmF0dGVyeV92b2x0YWdlKGRpLCB2YWwpOw0KCQlicmVhazsN CgljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQ6DQoJCXZhbC0+aW50 dmFsID0gZGktPmNhY2hlLmZsYWdzIDwgMCA/IDAgOiAxOw0KCQlicmVhazsN CgljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XOg0KCQlyZXQg PSBicTI3eHh4X2JhdHRlcnlfY3VycmVudChkaSwgdmFsKTsNCgkJYnJlYWs7 DQoJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWToNCgkJcmV0ID0g YnEyN3h4eF9zaW1wbGVfdmFsdWUoZGktPmNhY2hlLmNhcGFjaXR5LCB2YWwp Ow0KCQlicmVhazsNCgljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZ X0xFVkVMOg0KCQlyZXQgPSBicTI3eHh4X2JhdHRlcnlfY2FwYWNpdHlfbGV2 ZWwoZGksIHZhbCk7DQoJCWJyZWFrOw0KCWNhc2UgUE9XRVJfU1VQUExZX1BS T1BfVEVNUDoNCgkJcmV0ID0gYnEyN3h4eF9zaW1wbGVfdmFsdWUoZGktPmNh Y2hlLnRlbXBlcmF0dXJlLCB2YWwpOw0KCQlpZiAocmV0ID09IDApDQoJCQl2 YWwtPmludHZhbCAtPSAyNzMxOyAvKiBjb252ZXJ0IGRlY2lkZWdyZWUgayB0 byBjICovDQoJCWJyZWFrOw0KCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVElN RV9UT19FTVBUWV9OT1c6DQoJCXJldCA9IGJxMjd4eHhfc2ltcGxlX3ZhbHVl KGRpLT5jYWNoZS50aW1lX3RvX2VtcHR5LCB2YWwpOw0KCQlicmVhazsNCglj YXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RJTUVfVE9fRU1QVFlfQVZHOg0KCQly ZXQgPSBicTI3eHh4X3NpbXBsZV92YWx1ZShkaS0+Y2FjaGUudGltZV90b19l bXB0eV9hdmcsIHZhbCk7DQoJCWJyZWFrOw0KCWNhc2UgUE9XRVJfU1VQUExZ X1BST1BfVElNRV9UT19GVUxMX05PVzoNCgkJcmV0ID0gYnEyN3h4eF9zaW1w bGVfdmFsdWUoZGktPmNhY2hlLnRpbWVfdG9fZnVsbCwgdmFsKTsNCgkJYnJl YWs7DQoJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9URUNITk9MT0dZOg0KCQl2 YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9URUNITk9MT0dZX0xJT047DQoJ CWJyZWFrOw0KCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX05PVzoN CgkJcmV0ID0gYnEyN3h4eF9zaW1wbGVfdmFsdWUoYnEyN3h4eF9iYXR0ZXJ5 X3JlYWRfbmFjKGRpKSwgdmFsKTsNCgkJYnJlYWs7DQoJY2FzZSBQT1dFUl9T VVBQTFlfUFJPUF9DSEFSR0VfRlVMTDoNCgkJcmV0ID0gYnEyN3h4eF9zaW1w bGVfdmFsdWUoZGktPmNhY2hlLmNoYXJnZV9mdWxsLCB2YWwpOw0KCQlicmVh azsNCgljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMX0RFU0lH TjoNCgkJcmV0ID0gYnEyN3h4eF9zaW1wbGVfdmFsdWUoZGktPmNoYXJnZV9k ZXNpZ25fZnVsbCwgdmFsKTsNCgkJYnJlYWs7DQoJLyoNCgkgKiBUT0RPOiBJ bXBsZW1lbnQgdGhlc2UgdG8gbWFrZSByZWdpc3RlcnMgc2V0IGZyb20NCgkg KiBwb3dlcl9zdXBwbHlfYmF0dGVyeV9pbmZvIHZpc2libGUgaW4gc3lzZnMu DQoJICovDQoJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9FTkVSR1lfRlVMTF9E RVNJR046DQoJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01JTl9E RVNJR046DQoJCXJldHVybiAtRUlOVkFMOw0KCWNhc2UgUE9XRVJfU1VQUExZ X1BST1BfQ1lDTEVfQ09VTlQ6DQoJCXJldCA9IGJxMjd4eHhfc2ltcGxlX3Zh bHVlKGRpLT5jYWNoZS5jeWNsZV9jb3VudCwgdmFsKTsNCgkJYnJlYWs7DQoJ Y2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9FTkVSR1lfTk9XOg0KCQlyZXQgPSBi cTI3eHh4X3NpbXBsZV92YWx1ZShkaS0+Y2FjaGUuZW5lcmd5LCB2YWwpOw0K CQlicmVhazsNCgljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BPV0VSX0FWRzoN CgkJcmV0ID0gYnEyN3h4eF9zaW1wbGVfdmFsdWUoZGktPmNhY2hlLnBvd2Vy X2F2ZywgdmFsKTsNCgkJYnJlYWs7DQoJY2FzZSBQT1dFUl9TVVBQTFlfUFJP UF9IRUFMVEg6DQoJCXJldCA9IGJxMjd4eHhfc2ltcGxlX3ZhbHVlKGRpLT5j YWNoZS5oZWFsdGgsIHZhbCk7DQoJCWJyZWFrOw0KCWNhc2UgUE9XRVJfU1VQ UExZX1BST1BfTUFOVUZBQ1RVUkVSOg0KCQl2YWwtPnN0cnZhbCA9IEJRMjdY WFhfTUFOVUZBQ1RVUkVSOw0KCQlicmVhazsNCglkZWZhdWx0Og0KCQlyZXR1 cm4gLUVJTlZBTDsNCgl9DQoNCglyZXR1cm4gcmV0Ow0KfQ0KDQpzdGF0aWMg dm9pZCBicTI3eHh4X2V4dGVybmFsX3Bvd2VyX2NoYW5nZWQoc3RydWN0IHBv d2VyX3N1cHBseSAqcHN5KQ0Kew0KCXN0cnVjdCBicTI3eHh4X2RldmljZV9p bmZvICpkaSA9IHBvd2VyX3N1cHBseV9nZXRfZHJ2ZGF0YShwc3kpOw0KDQoJ Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkaS0+d29yayk7DQoJc2NoZWR1 bGVfZGVsYXllZF93b3JrKCZkaS0+d29yaywgMCk7DQp9DQoNCmludCBicTI3 eHh4X2JhdHRlcnlfc2V0dXAoc3RydWN0IGJxMjd4eHhfZGV2aWNlX2luZm8g KmRpKQ0Kew0KCXN0cnVjdCBwb3dlcl9zdXBwbHlfZGVzYyAqcHN5X2Rlc2M7 DQoJc3RydWN0IHBvd2VyX3N1cHBseV9jb25maWcgcHN5X2NmZyA9IHsNCgkJ Lm9mX25vZGUgPSBkaS0+ZGV2LT5vZl9ub2RlLA0KCQkuZHJ2X2RhdGEgPSBk aSwNCgl9Ow0KDQoJSU5JVF9ERUxBWUVEX1dPUksoJmRpLT53b3JrLCBicTI3 eHh4X2JhdHRlcnlfcG9sbCk7DQoJbXV0ZXhfaW5pdCgmZGktPmxvY2spOw0K DQoJZGktPnJlZ3MgICAgICAgPSBicTI3eHh4X2NoaXBfZGF0YVtkaS0+Y2hp cF0ucmVnczsNCglkaS0+dW5zZWFsX2tleSA9IGJxMjd4eHhfY2hpcF9kYXRh W2RpLT5jaGlwXS51bnNlYWxfa2V5Ow0KCWRpLT5kbV9yZWdzICAgID0gYnEy N3h4eF9jaGlwX2RhdGFbZGktPmNoaXBdLmRtX3JlZ3M7DQoJZGktPm9wdHMg ICAgICAgPSBicTI3eHh4X2NoaXBfZGF0YVtkaS0+Y2hpcF0ub3B0czsNCg0K CXBzeV9kZXNjID0gZGV2bV9remFsbG9jKGRpLT5kZXYsIHNpemVvZigqcHN5 X2Rlc2MpLCBHRlBfS0VSTkVMKTsNCglpZiAoIXBzeV9kZXNjKQ0KCQlyZXR1 cm4gLUVOT01FTTsNCg0KCXBzeV9kZXNjLT5uYW1lID0gZGktPm5hbWU7DQoJ cHN5X2Rlc2MtPnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRURVJZOw0K CXBzeV9kZXNjLT5wcm9wZXJ0aWVzID0gYnEyN3h4eF9jaGlwX2RhdGFbZGkt PmNoaXBdLnByb3BzOw0KCXBzeV9kZXNjLT5udW1fcHJvcGVydGllcyA9IGJx Mjd4eHhfY2hpcF9kYXRhW2RpLT5jaGlwXS5wcm9wc19zaXplOw0KCXBzeV9k ZXNjLT5nZXRfcHJvcGVydHkgPSBicTI3eHh4X2JhdHRlcnlfZ2V0X3Byb3Bl cnR5Ow0KCXBzeV9kZXNjLT5leHRlcm5hbF9wb3dlcl9jaGFuZ2VkID0gYnEy N3h4eF9leHRlcm5hbF9wb3dlcl9jaGFuZ2VkOw0KDQoJZGktPmJhdCA9IHBv d2VyX3N1cHBseV9yZWdpc3Rlcl9ub193cyhkaS0+ZGV2LCBwc3lfZGVzYywg JnBzeV9jZmcpOw0KCWlmIChJU19FUlIoZGktPmJhdCkpIHsNCgkJZGV2X2Vy cihkaS0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGJhdHRlcnlcbiIpOw0K CQlyZXR1cm4gUFRSX0VSUihkaS0+YmF0KTsNCgl9DQoNCglicTI3eHh4X2Jh dHRlcnlfc2V0dGluZ3MoZGkpOw0KCWJxMjd4eHhfYmF0dGVyeV91cGRhdGUo ZGkpOw0KDQoJbXV0ZXhfbG9jaygmYnEyN3h4eF9saXN0X2xvY2spOw0KCWxp c3RfYWRkKCZkaS0+bGlzdCwgJmJxMjd4eHhfYmF0dGVyeV9kZXZpY2VzKTsN CgltdXRleF91bmxvY2soJmJxMjd4eHhfbGlzdF9sb2NrKTsNCg0KCXJldHVy biAwOw0KfQ0KRVhQT1JUX1NZTUJPTF9HUEwoYnEyN3h4eF9iYXR0ZXJ5X3Nl dHVwKTsNCg0Kdm9pZCBicTI3eHh4X2JhdHRlcnlfdGVhcmRvd24oc3RydWN0 IGJxMjd4eHhfZGV2aWNlX2luZm8gKmRpKQ0Kew0KCS8qDQoJICogcG93ZXJf c3VwcGx5X3VucmVnaXN0ZXIgY2FsbCBicTI3eHh4X2JhdHRlcnlfZ2V0X3By b3BlcnR5IHdoaWNoDQoJICogY2FsbCBicTI3eHh4X2JhdHRlcnlfcG9sbC4N CgkgKiBNYWtlIHN1cmUgdGhhdCBicTI3eHh4X2JhdHRlcnlfcG9sbCB3aWxs IG5vdCBjYWxsDQoJICogc2NoZWR1bGVfZGVsYXllZF93b3JrIGFnYWluIGFm dGVyIHVucmVnaXN0ZXIgKHdoaWNoIGNhdXNlIE9PUFMpLg0KCSAqLw0KCXBv bGxfaW50ZXJ2YWwgPSAwOw0KDQoJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5j KCZkaS0+d29yayk7DQoNCglwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcihkaS0+ YmF0KTsNCg0KCW11dGV4X2xvY2soJmJxMjd4eHhfbGlzdF9sb2NrKTsNCgls aXN0X2RlbCgmZGktPmxpc3QpOw0KCW11dGV4X3VubG9jaygmYnEyN3h4eF9s aXN0X2xvY2spOw0KDQoJbXV0ZXhfZGVzdHJveSgmZGktPmxvY2spOw0KfQ0K RVhQT1JUX1NZTUJPTF9HUEwoYnEyN3h4eF9iYXR0ZXJ5X3RlYXJkb3duKTsN Cg0KTU9EVUxFX0FVVEhPUigiUm9kb2xmbyBHaW9tZXR0aSA8Z2lvbWV0dGlA bGludXguaXQ+Iik7DQpNT0RVTEVfREVTQ1JJUFRJT04oIkJRMjd4eHggYmF0 dGVyeSBtb25pdG9yIGRyaXZlciIpOw0KTU9EVUxFX0xJQ0VOU0UoIkdQTCIp Ow0K --8323329-2108412672-1505898882=:3290-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: julia.lawall@lip6.fr (Julia Lawall) Date: Wed, 20 Sep 2017 11:14:41 +0200 (CEST) Subject: [Cocci] [PATCH v3 0/5] bq27xxx_battery data memory update In-Reply-To: References: <20170824033617.20840-1-liam@networkimprov.net> <0bf4ba2f-18f9-1204-8241-8acb6ac6f490@ti.com> <20170829212259.gs4bljwscrprsfjl@earth> <20170830002939.ns43wldvffmwqhuv@earth> Message-ID: To: cocci@systeme.lip6.fr List-Id: cocci@systeme.lip6.fr On Tue, 19 Sep 2017, Liam Breck wrote: > On Tue, Sep 19, 2017 at 3:00 PM, Julia Lawall wrote: > > > > > > On Tue, 19 Sep 2017, Liam Breck wrote: > > > >> Hi Julia, > >> > >> I think Sebastian referred this to you in hopes of receiving a script > >> that would find duplicate arrays, similarly to the way > >> bq27xxx_battery_dbg_dupes does in the running code. Did you interpret > >> his request differently? > >> > >> bq27xxx_battery_dbg_dupes: > >> https://patchwork.kernel.org/patch/9918953/ > >> > >> The data structures being checked start here: > >> https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git/tree/drivers/power/supply/bq27xxx_battery.c?h=for-next#n138 > >> > >> And are aggregated here: > >> https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git/tree/drivers/power/supply/bq27xxx_battery.c?h=for-next#n743 > >> > >> The defines can be sed'd to pointers with 0 value, and array > >> comparisons where 1 pointer is 0 can be skipped. > > > > I followed the spirit of the runtime testing code. But Coccinelle doesn't > > normally unfold the definitions of macros. All it can do is take the > > different lists of fields and see if they are textually the same. > > There's no need to unfold macros. If you did, you would get false > positives. You do need to skip them somehow, hence the idea of sed'ing > to null pointers. I meant that for the properties, the values are: static enum power_supply_property bq27000_props[] = { POWER_SUPPLY_PROP_STATUS, POWER_SUPPLY_PROP_PRESENT, POWER_SUPPLY_PROP_VOLTAGE_NOW, POWER_SUPPLY_PROP_CURRENT_NOW, POWER_SUPPLY_PROP_CAPACITY, POWER_SUPPLY_PROP_CAPACITY_LEVEL, POWER_SUPPLY_PROP_TEMP, POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG, POWER_SUPPLY_PROP_TIME_TO_FULL_NOW, POWER_SUPPLY_PROP_TECHNOLOGY, POWER_SUPPLY_PROP_CHARGE_FULL, POWER_SUPPLY_PROP_CHARGE_NOW, POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, POWER_SUPPLY_PROP_CYCLE_COUNT, POWER_SUPPLY_PROP_ENERGY_NOW, POWER_SUPPLY_PROP_POWER_AVG, POWER_SUPPLY_PROP_HEALTH, POWER_SUPPLY_PROP_MANUFACTURER, }; Coccinelle is comparing the list of names, not the list of integers that these names are expanding to. Also, Coccinelle is comparing the list, but I guess you would prefer that it compare the set, to check for the cases where the names are the same but appear in a different order. > > > I've attached the script and some fake data that I made to test it. The > > fake data has some added cases where I have replaced 27 in the structure > > name by 07. For my test data I get: > > > > bq07421_regs and bq27421_regs have the same registers > > bq07000_regs and bq27000_regs have the same registers > > bq07421_dm_regs and bq27421_dm_regs have the same registers > > bq07421_props and bq27421_props have the same properties > > bq07000_props and bq27000_props have the same properties > > > > You won't get this currently; I needed to make some improvements to the > > Coccinelle C code parser. > > I didn't see anything attached, script or data. Sorry, should be there now. > The script should compare each object with only those objects that > follow it in sequence, so it doesn't repeat comparisons or compare to > self. It does this, ie it only compares xxx to yyy when xxx is alphabetically less than yyy. julia -------------- next part -------------- @str@ type t; identifier i,i1,i2; expression e1,e2; @@ t i[] = { ..., [e1] = BQ27XXX_DATA(i1,...), ..., [e2] = BQ27XXX_DATA(i2,...), ..., }; @script:ocaml tocheck@ i1 << str.i1; i2 << str.i2; i1regs; i2regs; i1dmregs; i2dmregs; i1props; i2props; @@ if not(i1 = i2) then begin i1regs := make_ident (i1 ^ "_regs"); i2regs := make_ident (i2 ^ "_regs"); i1dmregs := make_ident (i1 ^ "_dm_regs"); i2dmregs := make_ident (i2 ^ "_dm_regs"); i1props := make_ident (i1 ^ "_props"); i2props := make_ident (i2 ^ "_props") end (* ---------------------------------------------------------------- *) @getregs1@ typedef u8; identifier tocheck.i1regs; initializer list i1regs_vals; @@ u8 i1regs[...] = { i1regs_vals, }; @getregs2@ identifier tocheck.i2regs; initializer list i2regs_vals; @@ u8 i2regs[...] = { i2regs_vals, }; @script:ocaml@ (_,i1regs_vals) << getregs1.i1regs_vals; (_,i2regs_vals) << getregs2.i2regs_vals; i1regs << tocheck.i1regs; i2regs << tocheck.i2regs; @@ if i1regs < i2regs && List.sort compare i1regs_vals = List.sort compare i2regs_vals then Printf.printf "%s and %s have the same registers\n" i1regs i2regs (* ---------------------------------------------------------------- *) @getdmregs1@ identifier tocheck.i1dmregs; initializer list i1dmregs_vals; @@ struct bq27xxx_dm_reg i1dmregs[] = { i1dmregs_vals, }; @getdmregs2@ identifier tocheck.i2dmregs; initializer list i2dmregs_vals; @@ struct bq27xxx_dm_reg i2dmregs[] = { i2dmregs_vals, }; @script:ocaml@ (_,i1dmregs_vals) << getdmregs1.i1dmregs_vals; (_,i2dmregs_vals) << getdmregs2.i2dmregs_vals; i1dmregs << tocheck.i1dmregs; i2dmregs << tocheck.i2dmregs; @@ if i1dmregs < i2dmregs && List.sort compare i1dmregs_vals = List.sort compare i2dmregs_vals then Printf.printf "%s and %s have the same registers\n" i1dmregs i2dmregs (* ---------------------------------------------------------------- *) @getprops1@ identifier tocheck.i1props; initializer list[n1] i1props_vals; @@ enum power_supply_property i1props[] = { i1props_vals, }; @getprops2@ identifier tocheck.i2props; initializer list[n2] i2props_vals; @@ enum power_supply_property i2props[] = { i2props_vals, }; @script:ocaml@ i1props_vals << getprops1.i1props_vals; i2props_vals << getprops2.i2props_vals; i1props << tocheck.i1props; i2props << tocheck.i2props; @@ if i1props < i2props && i1props_vals = i2props_vals then Printf.printf "%s and %s have the same properties\n" i1props i2props -------------- next part -------------- A non-text attachment was scrubbed... Name: battery.c Type: text/x-csrc Size: 57648 bytes Desc: URL: