From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 51026 invoked by alias); 31 Jan 2020 08:55:16 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 51011 invoked by uid 89); 31 Jan 2020 08:55:15 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-11.8 required=5.0 tests=AWL,BAYES_00,FORGED_SPF_HELO,GIT_PATCH_1,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS autolearn=ham version=3.3.1 spammy=complaint, *should* X-HELO: NAM11-CO1-obe.outbound.protection.outlook.com Received: from mail-co1nam11on2042.outbound.protection.outlook.com (HELO NAM11-CO1-obe.outbound.protection.outlook.com) (40.107.220.42) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 31 Jan 2020 08:55:13 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FvIfoQzyG1IQpe9V+PNnn0G9uywd3xoKacPhKXUW37rQocZPiaPC8YI2H4GB9QqxgNdc57BOeTlFMkP95kmjhA1deU2ixa6pOclesnYJRuLIyuaHHgHiE+0Vd8SVYz0KNfZNgBmrj1F7cxuJ0WNxEcRe6OyghtHvFFb6fW5sx08Wdbm0S2plxC/395LInmoyDch3pBFVZD7Ne7hQWegE9Ow5otOxzUBwnjxBR4mwGPOx+7oHKg9nz36LN/kzLwEaRgr8qkZnIgvWf5F97BZfQHipGFpbRoGuhSRECCz+Izz2c+566vMpHB83tPsYRkxVNO3eWMYQt+4sKcATfydclg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MYq2rNgyn+oOhIJMAUkn439Y4LEejb/fOkuoHN2s/B4=; b=fliXqSMYmO27TfCUgCKG6sOfsnmGQLkOP39K8f8HLYFe7Xt1MarY71SX0mykeA/KyXoxm7I2XLBk3+SMZ2970enYRk7JjLM7g5egpVyWW/GdNQhVFVD60b5MAUnO3IFf+9nxueYMSgc+D52UUQwLnKTpT9RgG9xAnPAmg9TLbqh+gxy6OhLth+AohqZs6e53RxMNXRBI4l8oqY1A9pTNBFpAouUeL58XOxXSQTln3uWotE0eWoms3gQRtm+mcmNAMfnRqMUA7Ktyjzb2QQqdhS4iofio3XC2dQ7/oEKu5CwL43dp0gHrJNCNtbkcMXVTRn3nJH29KKHBALHmHZuk5w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MYq2rNgyn+oOhIJMAUkn439Y4LEejb/fOkuoHN2s/B4=; b=K1/JfbYpMYpZ4ZcH/qw0J2XfDkAOsi28KPGvn4U3ycwO/acgJXENrgMMLXQA72vi6kF4ImkaAbF0k/meSMPcRdcJtXC7+cLHJIsh/Kxqm+1Rld3gpxZCiGwy7XE/8f0J6Ntx6QyeYcz47FuvA92fbDU3OvT13EbiW82hC1FkJpU= Received: from CH2PR12MB3733.namprd12.prod.outlook.com (52.132.247.142) by CH2PR12MB4103.namprd12.prod.outlook.com (10.141.156.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2686.26; Fri, 31 Jan 2020 08:55:09 +0000 Received: from CH2PR12MB3733.namprd12.prod.outlook.com ([fe80::91f:eb69:82b2:12fd]) by CH2PR12MB3733.namprd12.prod.outlook.com ([fe80::91f:eb69:82b2:12fd%3]) with mapi id 15.20.2686.028; Fri, 31 Jan 2020 08:55:09 +0000 From: "Achra, Nitika" To: Tom Tromey CC: "gdb-patches@sourceware.org" , "George, Jini Susan" , Ali Tamur Subject: RE: [PATCH] Support for DW_AT_loclists_base and DW_FORM_loclistx. Date: Fri, 31 Jan 2020 08:59:00 -0000 Message-ID: References: <87tv4lreki.fsf@tromey.com> In-Reply-To: <87tv4lreki.fsf@tromey.com> msip_label_76546daa-41b6-470c-bb85-f6f40f044d7f_enabled: true msip_label_76546daa-41b6-470c-bb85-f6f40f044d7f_setdate: 2020-01-31T08:55:05Z msip_label_76546daa-41b6-470c-bb85-f6f40f044d7f_method: Standard msip_label_76546daa-41b6-470c-bb85-f6f40f044d7f_name: Internal Use Only - Unrestricted msip_label_76546daa-41b6-470c-bb85-f6f40f044d7f_siteid: 3dd8961f-e488-4e60-8e11-a82d994e183d msip_label_76546daa-41b6-470c-bb85-f6f40f044d7f_actionid: 71db546f-d671-491e-905d-0000ad1f33d9 msip_label_76546daa-41b6-470c-bb85-f6f40f044d7f_contentbits: 0 authentication-results: spf=none (sender IP is ) smtp.mailfrom=Nitika.Achra@amd.com; x-ms-exchange-transport-forked: True x-ms-oob-tlc-oobclassifiers: OLM:7691; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-messagedata: fPYJWCdKmSTA8RILMMlzJ92cU+gjK0qI3JPhiwYVZxqxQQjhTwLyAOQAW8QinzjS1lMzJCr5DqRKyoIl8j0qZKJ8EHd5G/+wUNw6AJGx/dk3+tiRbm0f+402w6bImCjja08hGr/fZ7EPd+A+iotZhw== Content-Type: multipart/mixed; boundary="_002_CH2PR12MB3733AFBDED08D5F7FA6A3E0C9A070CH2PR12MB3733namp_" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: B3sqqV9DvHPQnhTGQjpLyP82sMfKXwltwivYIHoi/D42uSV2esAO6F+3+sfx4IMx7xCDIefKrP2CQcUy8o9tRw== X-SW-Source: 2020-01/txt/msg00983.txt.bz2 --_002_CH2PR12MB3733AFBDED08D5F7FA6A3E0C9A070CH2PR12MB3733namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 5545 [AMD Official Use Only - Internal Distribution Only] Hello Tom, Thanks for the review. I have incorporated the review comments. Please have= a look. Nitika> *Support for DW_AT_loclists_base and DW_FORM_loclistx. Tom>Thanks for the patch. Tom>My comments below are primarily nits. Nitika> Tested by running the testsuite before and after the patch and=20 Nitika> there is no increase in the number of test cases that fails.=20 Nitika> Tested with both Nitika> -gdwarf-4 and -gdwarf-5 flags. Also tested -gslit-dwarf along=20 Nitika> with Nitika> -gdwarf-4 as well as -gdwarf5 flags. Tom> I assume it fixed some tests with -gdwarf-5? Or else we'll need a new= test case. Added a new test case. This test checks if the file command passes without = any error with -g-dwarf-5 and -gsplit-dwarf.=20 Gcc emits DW_FORM_loclistx only with -gsplit-dwarf. I can also check by pri= nting the variable value, but right now printing the value is throwing the error- " DWARF ERROR: Corrupted dwarf expression= " which is not related to this patch. I have submitted=20 another patch which will fix that. Nitika> +/* Size of .debug_loclist section header for 32-bit DWARF=20 Nitika> +format. */ #define LOCLIST_HEADER_SIZE32 12; Nitika> + Nitika> +/* Size of .debug_loclist section header for 64-bit DWARF=20 Nitika> +format. */ #define LOCLIST_HEADER_SIZE64 20; Tom> The ";" at the end of these defines is weird. Removed Nitika> + /* Header data from the location list section. */ struct=20 Nitika> + loclist_header* loclist_header; Tom> gdb style puts the "*" on the other side of the " " like Tom> struct loclist_header *loclist_header; Nitika> +static struct dwarf2_section_info* cu_debug_loc_section (struct=20 Nitika> +dwarf2_cu* cu); Tom> Here too -- there are actually several instances in the patch. Done Nitika> +void Nitika> +read_loclist_header (struct dwarf2_cu* cu, struct=20 Nitika> +dwarf2_section_info* section) { Tom> New functions should have an introductory comment explaining their pur= pose. Done Tom> The "static" should be repeated here, rather than rely on the declarat= ion. This affects all of the new functions, I think. Also, there's no nee= d to forward Tom>declare them if the uses come after the definition, so pro= bably some of those declarations can be removed as well. Tom>Added static in definitions also.=20 Done Tom>It might be nicer if read_loclist_header took a pointer to the loclist_= header rather than a dwarf2_cu, and did not allocate. See below. Done Nitika> +ULONGEST Nitika> +lookup_loclist_base (struct dwarf2_cu* cu) { Nitika> + /* For the .dwo unit, the loclist_base points to the first offse= t following Nitika> + the header. The header consists of the following entities- Nitika> + 1. Unit Length (4 bytes for 32 bit DWARF format, and 12 bytes= for the 64 bit format) Nitika> + 2. version (2 bytes) Nitika> + 3. address size (1 byte) Nitika> + 4. segment selector size (1 byte) Nitika> + 5. offset entry count (4 bytes) Nitika> + These sizes are derived as per the DWARFv5 standard. */ Nitika> + if (cu->dwo_unit) Nitika> + { Nitika> + if (cu->header.initial_length_size =3D=3D 4) Nitika> + return LOCLIST_HEADER_SIZE32; Nitika> + return LOCLIST_HEADER_SIZE64; Tom>Is there some way to avoid hard-coding sizes here? I thought of using sizeof(struct loclist_header) in place of LOCLIST_HEADER= _SIZE32 and sizeof(struct loclist_header) + cu->initial_length_size in plac= e of=20 LOCLIST_HEADER_SIZE_64. But I am not sure if this a correct way of doing th= is. Some compilers append some padding at the end of structure. So the size of structure might not be equal to the sum of size of its members. Siz= eof() is also compiler dependent. So, right now I cannot think of any other= way. Nitika> +/* Given a DW_FORM_loclistx value loclist_index, fetch the offset = from the array Nitika> + of offsets in the .debug_loclists section. */ CORE_ADDR=20 Nitika> +read_loclist_index (struct dwarf2_cu* cu, ULONGEST=20 Nitika> +loclist_index) { ... Nitika> + const gdb_byte* info_ptr; Tom> This can be declared later, when it's first initialized. Done Nitika> + if (section->buffer =3D=3D NULL) Nitika> + error(_("DW_FORM_loclistx used without .debug_loclist section = [in module %s]"), Nitika> + objfile_name (objfile)); Tom>I wonder whether errors here will really do something good. The proble= m is that the DWARF reader, in general, doesn't handle errors very well. Tom>It *should* -- but it doesn't. I don't know about this spot, but in ot= her places, calling error will mean that reading all of the debuginfo for t= he entire file Tom>will be aborted. (It can even cause worse problems, the= re's a bug in bugzilla about it ending a remote session.) Tom>Maybe complaint() and then a fallback would be preferable. Tom>Or, test the error() to make sure it's ok. Replaced with complaint() Nitika> + delete cu->loclist_header; Tom>This is created, only to be deleted in the same function. Tom>I think it would be better to just stack-allocate this. Done Tom>Or, should this be cached in the CU -- that is, read once and then reus= ed? Tom>If so then a different approach should be used. It wasn't clear to me = how often read_loclist_index is called. Nitika> + case DW_FORM_loclistx: Nitika> + { Nitika> + *need_reprocess =3D true; Nitika> + DW_UNSND(attr) =3D read_unsigned_leb128 (abfd, info_ptr,=20 Nitika> + &bytes_read); Tom>Space before the first "(". Done Regards, Nitika Achra --_002_CH2PR12MB3733AFBDED08D5F7FA6A3E0C9A070CH2PR12MB3733namp_ Content-Type: application/octet-stream; name="0001-Support-for-DW_AT_loclists_base-and-DW_FORM_loclistx.patch" Content-Description: 0001-Support-for-DW_AT_loclists_base-and-DW_FORM_loclistx.patch Content-Disposition: attachment; filename="0001-Support-for-DW_AT_loclists_base-and-DW_FORM_loclistx.patch"; size=12495; creation-date="Mon, 20 Jan 2020 08:50:49 GMT"; modification-date="Fri, 31 Jan 2020 08:50:28 GMT" Content-Transfer-Encoding: base64 Content-length: 16938 RnJvbSBlNjQzZDRmNTk0ODY3OTBmMDBmYzQ5NWYyNDRkYWI5NzA0MDJmYjU2 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBuaXRhY2hyYSA8Tml0 aWthLkFjaHJhQGFtZC5jb20+CkRhdGU6IE1vbiwgMjAgSmFuIDIwMjAgMTQ6 MDc6MjkgKzA1MzAKU3ViamVjdDogW1BBVENIXSBTdXBwb3J0IGZvciBEV19B VF9sb2NsaXN0c19iYXNlIGFuZCBEV19GT1JNX2xvY2xpc3R4LgoKVGhpcyBw YXRjaCBoYW5kbGVzIERXX0FUX2xvY2xpc3RzX2Jhc2UgYW5kIERXX0ZPUk1f bG9jbGlzdHguCkRXX0FUX2xvY2xpc3RzX2Jhc2UgaXMgYSBuZXcgYXR0cmli dXRlIGFkZGVkIGluIERXQVJGdjUgd2hpY2gKcG9pbnRzIHRvIHRoZSBiZWdp bm5pbmcgb2YgdGhlIG9mZnNldCB0YWJsZSBvZiAuZGVidWdfbG9jbGlzdApz ZWN0aW9uLiBSZWZlcmVuY2UgdG8gdGhlIGxvY2F0aW9uIGxpc3QgKERXX0ZP Uk1fbG9jbGlzdHgpIGlzCmludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoaXMg YmFzZS4gRFdfRk9STV9sb2NsaXN0eCBpcyBhIG5ldwpmb3JtIGFkZGVkIGlu IERXQVJGdjUgd2hpY2ggaXMgdXNlZCB0byBhY2Nlc3MgbG9jYXRpb24gbGlz dC4KClRlc3RlZCBieSBydW5uaW5nIHRoZSB0ZXN0c3VpdGUgYmVmb3JlIGFu ZCBhZnRlciB0aGUgcGF0Y2ggYW5kIHRoZXJlCmlzIG5vIGluY3JlYXNlIGlu IHRoZSBudW1iZXIgb2YgdGVzdCBjYXNlcyB0aGF0IGZhaWxzLiBUZXN0ZWQg d2l0aCBib3RoCi1nZHdhcmYtNCBhbmQgLWdkd2FyZi01IGZsYWdzLiBBbHNv IHRlc3RlZCAtZ3NsaXQtZHdhcmYgYWxvbmcgd2l0aAotZ2R3YXJmLTQgYXMg d2VsbCBhcyAtZ2R3YXJmNSBmbGFncy4gVXNlZCBnY2MtOS40IGZvciB0ZXN0 aW5nLgoKZ2RiL0NoYW5nZUxvZzoKCiAgICpkd2FyZjJyZWFkLmMgKGN1X2Rl YnVnX2xvY19zZWN0aW9uKTogQWRkZWQgdGhlIGRlY2xhcmF0aW9uIGZvciB0 aGUgZnVuY3Rpb24uCiAgIChyZWFkX2xvY2xpc3RfaW5kZXgpOiBOZXcgZnVu Y3Rpb24gZGVjbGFyYXRpb24uCiAgIChsb29rdXBfbG9jbGlzdF9iYXNlKTog TmV3IGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgogICAocmVhZF9sb2NsaXN0X2hl YWRlcik6IE5ldyBmdW5jdGlvbiBkZWNsYXJhdGlvbgogICAoZHdhcmYyX2N1 KTogQWRkZWQgbG9jbGlzdF9iYXNlIGFuZCBsb2NsaXN0X2hlYWRlciBmaWVs ZC4KICAgKGR3YXJmMl9sb2NhdGVfZHdvX3NlY3Rpb25zKTogSGFuZGxlIC5k ZWJ1Z19sb2NsaXN0LmR3byBzZWN0aW9uLgogICAocmVhZF9mdWxsX2RpZV8x KTogUmVhZCB0aGUgdmFsdWUgb2YgRFdfQVRfbG9jbGlzdHNfYmFzZS4KICAg KHJlYWRfYXR0cmlidXRlX3JlcHJvY2Vzcyk6IEhhbmRsZSBEV19GT1JNX2xv Y2xpc3R4LgogICAocmVhZF9hdHRyaWJ1dGVfdmFsdWUpOiBIYW5kbGUgRFdf Rk9STV9sb2NsaXN0eC4KICAgKHNraXBfb25lX2RpZSk6IEhhbmRsZSBEV19G T1JNX2xvY2xpc3R4LgogICAoYXR0cl9mb3JtX2lzX3NlY3Rpb25fb2Zmc2V0 KTogSGFuZGxlIERXX0ZPUk1fbG9jbGlzdHguCiAgIChyZWFkX2xvY2xpc3Rf aW5kZXgpOiBGdW5jdGlvbiBkZWZpbml0aW9uLgogICAobG9va3VwX2xvY2xp c3RfYmFzZSk6IEZ1bmN0aW9uIGRlZmluaXRpb24uCiAgIChyZWFkX2xvY2xp c3RfaGVhZGVyKTogRnVuY3Rpb24gZGVmaW5pdGlvbi4KICAgKGxvY2xpc3Rf aGVhZGVyKTogTmV3IHN0cnVjdHVyZSBkZWNsYXJhdGlvbi4KCmdkYi90ZXN0 c3VpdGUvQ2hhbmdlTG9nOgoKICAgKmdkYi5kd2FyZjIvZHc1LWZvcm0tbG9j bGlzdHguZXhwOiBOZXcgZmlsZS4KICAgKmdkYi5kd2FyZjIvZHc1LWZvcm0t bG9jbGlzdHguYzogTmV3IGZpbGUuCi0tLQogZ2RiL2R3YXJmMnJlYWQuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTMwICsrKysrKysrKysr KysrKysrLQogZ2RiL3Rlc3RzdWl0ZS9nZGIuZHdhcmYyL2R3NS1mb3JtLWxv Y2xpc3R4LmMgIHwgIDE2ICsrKwogLi4uL2dkYi5kd2FyZjIvZHc1LWZvcm0t bG9jbGlzdHguZXhwICAgICAgICAgIHwgIDQyICsrKysrKwogMyBmaWxlcyBj aGFuZ2VkLCAxODcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLmR3YXJmMi9kdzUt Zm9ybS1sb2NsaXN0eC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3Rz dWl0ZS9nZGIuZHdhcmYyL2R3NS1mb3JtLWxvY2xpc3R4LmV4cAoKZGlmZiAt LWdpdCBhL2dkYi9kd2FyZjJyZWFkLmMgYi9nZGIvZHdhcmYycmVhZC5jCmlu ZGV4IGRmYTJmOTFkNDUuLmYxMDk2NTcwZmMgMTAwNjQ0Ci0tLSBhL2dkYi9k d2FyZjJyZWFkLmMKKysrIGIvZ2RiL2R3YXJmMnJlYWQuYwpAQCAtMTA0LDYg KzEwNCwxMiBAQCBzdGF0aWMgaW50IGR3YXJmMl9sb2NsaXN0X2luZGV4Owog c3RhdGljIGludCBkd2FyZjJfbG9jZXhwcl9ibG9ja19pbmRleDsKIHN0YXRp YyBpbnQgZHdhcmYyX2xvY2xpc3RfYmxvY2tfaW5kZXg7CiAKKy8qIFNpemUg b2YgLmRlYnVnX2xvY2xpc3Qgc2VjdGlvbiBoZWFkZXIgZm9yIDMyLWJpdCBE V0FSRiBmb3JtYXQuICovCisjZGVmaW5lIExPQ0xJU1RfSEVBREVSX1NJWkUz MiAxMgorCisvKiBTaXplIG9mIC5kZWJ1Z19sb2NsaXN0IHNlY3Rpb24gaGVh ZGVyIGZvciA2NC1iaXQgRFdBUkYgZm9ybWF0LiAqLworI2RlZmluZSBMT0NM SVNUX0hFQURFUl9TSVpFNjQgMjAKKwogLyogQW4gaW5kZXggaW50byBhIChD KyspIHN5bWJvbCBuYW1lIGNvbXBvbmVudCBpbiBhIHN5bWJvbCBuYW1lIGFz CiAgICByZWNvcmRlZCBpbiB0aGUgbWFwcGVkX2luZGV4J3Mgc3ltYm9sIHRh YmxlLiAgRm9yIGVhY2ggQysrIHN5bWJvbAogICAgaW4gdGhlIHN5bWJvbCB0 YWJsZSwgd2UgcmVjb3JkIG9uZSBlbnRyeSBmb3IgdGhlIHN0YXJ0IG9mIGVh Y2gKQEAgLTM3Myw2ICszNzksMzAgQEAgc3RydWN0IGNvbXBfdW5pdF9oZWFk CiAgIGN1X29mZnNldCB0eXBlX2N1X29mZnNldF9pbl90dTsKIH07CiAKKy8q IFRoZSBsb2NhdGlvbiBsaXN0IHNlY3Rpb24gKC5kZWJ1Z19sb2NsaXN0KSBi ZWdpbnMgd2l0aCBhIGhlYWRlciwKKyAgIHdoaWNoIGNvbnRhaW5zIHRoZSBm b2xsb3dpbmcgaW5mb3JtYXRpb24uICovCitzdHJ1Y3QgbG9jbGlzdF9oZWFk ZXIKK3sKKyAgLyogQSA0LWJ5dGUgb3IgMTItYnl0ZSBsZW5ndGggY29udGFp bmluZyB0aGUgbGVuZ3RoIG9mIHRoZQorICBzZXQgb2YgZW50cmllcyBmb3Ig dGhpcyBjb21waWxhdGlvbiB1bml0LCBub3QgaW5jbHVkaW5nIHRoZQorICBs ZW5ndGggZmllbGQgaXRzZWxmLiAqLworICB1bnNpZ25lZCBpbnQgbGVuZ3Ro OworCisgIC8qIEEgMi1ieXRlIHZlcnNpb24gaWRlbnRpZmllci4gKi8KKyAg c2hvcnQgdmVyc2lvbjsKKworICAvKiBBIDEtYnl0ZSB1bnNpZ25lZCBpbnRl Z2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgaW4gYnl0ZXMgb2YgYW4gYWRkcmVz cyBvbgorICAgICB0aGUgdGFyZ2V0IHN5c3RlbS4gKi8KKyAgdW5zaWduZWQg Y2hhciBhZGRyX3NpemU7CisKKyAgLyogQSAxLWJ5dGUgdW5zaWduZWQgaW50 ZWdlciBjb250YWluaW5nIHRoZSBzaXplIGluIGJ5dGVzIG9mIGEgc2VnbWVu dCBzZWxlY3RvcgorICAgICBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4gKi8KKyAg dW5zaWduZWQgY2hhciBzZWdtZW50X2NvbGxlY3Rvcl9zaXplOworCisgIC8q IEEgNC1ieXRlIGNvdW50IG9mIHRoZSBudW1iZXIgb2Ygb2Zmc2V0cyB0aGF0 IGZvbGxvdyB0aGUgaGVhZGVyLiAqLworICB1bnNpZ25lZCBpbnQgb2Zmc2V0 X2VudHJ5X2NvdW50OworfTsKKwogLyogVHlwZSB1c2VkIGZvciBkZWxheWlu ZyBjb21wdXRhdGlvbiBvZiBtZXRob2QgcGh5c25hbWVzLgogICAgU2VlIGNv bW1lbnRzIGZvciBjb21wdXRlX2RlbGF5ZWRfcGh5c25hbWVzLiAgKi8KIHN0 cnVjdCBkZWxheWVkX21ldGhvZF9pbmZvCkBAIC01MjMsNiArNTUzLDkgQEAg cHVibGljOgogICAgICB3aGV0aGVyIHRoZSBEV19BVF9yYW5nZXMgYXR0cmli dXRlIGNhbWUgZnJvbSB0aGUgc2tlbGV0b24gb3IgRFdPLiAgKi8KICAgVUxP TkdFU1QgcmFuZ2VzX2Jhc2UgPSAwOwogCisgIC8qIFRoZSBEV19BVF9sb2Ns aXN0c19iYXNlIGF0dHJpYnV0ZSBpZiBwcmVzZW50LiAqLworICBnZGI6Om9w dGlvbmFsPFVMT05HRVNUPiBsb2NsaXN0X2Jhc2U7CisKICAgLyogV2hlbiBy ZWFkaW5nIGRlYnVnIGluZm8gZ2VuZXJhdGVkIGJ5IG9sZGVyIHZlcnNpb25z IG9mIHJ1c3RjLCB3ZQogICAgICBoYXZlIHRvIHJld3JpdGUgc29tZSB1bmlv biB0eXBlcyB0byBiZSBzdHJ1Y3QgdHlwZXMgd2l0aCBhCiAgICAgIHZhcmlh bnQgcGFydC4gIFRoaXMgcmV3cml0aW5nIG11c3QgYmUgZG9uZSBhZnRlciB0 aGUgQ1UgaXMgZnVsbHkKQEAgLTE3MDUsNiArMTczOCw5IEBAIHN0YXRpYyB2 b2lkIHJlYWRfdmFyaWFibGUgKHN0cnVjdCBkaWVfaW5mbyAqZGllLCBzdHJ1 Y3QgZHdhcmYyX2N1ICpjdSk7CiBzdGF0aWMgaW50IGR3YXJmMl9yYW5nZXNf cmVhZCAodW5zaWduZWQsIENPUkVfQUREUiAqLCBDT1JFX0FERFIgKiwKIAkJ CSAgICAgICBzdHJ1Y3QgZHdhcmYyX2N1ICosIHN0cnVjdCBwYXJ0aWFsX3N5 bXRhYiAqKTsKIAorLyogUmV0dXJuIHRoZSAuZGVidWdfbG9jbGlzdCBzZWN0 aW9uIHRvIHVzZSBmb3IgY3UuICovCitzdGF0aWMgc3RydWN0IGR3YXJmMl9z ZWN0aW9uX2luZm8gKmN1X2RlYnVnX2xvY19zZWN0aW9uIChzdHJ1Y3QgZHdh cmYyX2N1ICpjdSk7CisKIC8qIEhvdyBkd2FyZjJfZ2V0X3BjX2JvdW5kcyBj b25zdHJ1Y3RlZCBpdHMgKkxPV1BDIGFuZCAqSElHSFBDIHJldHVybgogICAg dmFsdWVzLiAgS2VlcCB0aGUgaXRlbXMgb3JkZXJlZCB3aXRoIGluY3JlYXNp bmcgY29uc3RyYWludHMgY29tcGxpYW5jZS4gICovCiBlbnVtIHBjX2JvdW5k c19raW5kCkBAIC05NDQ1LDYgKzk0ODEsNyBAQCBza2lwX29uZV9kaWUgKGNv bnN0IHN0cnVjdCBkaWVfcmVhZGVyX3NwZWNzICpyZWFkZXIsIGNvbnN0IGdk Yl9ieXRlICppbmZvX3B0ciwKIAljYXNlIERXX0ZPUk1fR05VX2FkZHJfaW5k ZXg6CiAJY2FzZSBEV19GT1JNX0dOVV9zdHJfaW5kZXg6CiAJY2FzZSBEV19G T1JNX3JuZ2xpc3R4OgorCWNhc2UgRFdfRk9STV9sb2NsaXN0eDoKIAkgIGlu Zm9fcHRyID0gc2FmZV9za2lwX2xlYjEyOCAoaW5mb19wdHIsIGJ1ZmZlcl9l bmQpOwogCSAgYnJlYWs7CiAJY2FzZSBEV19GT1JNX2luZGlyZWN0OgpAQCAt MTI5NzksNiArMTMwMTYsMTEgQEAgZHdhcmYyX2xvY2F0ZV9kd29fc2VjdGlv bnMgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlY3RwLCB2b2lkICpkd29fc2Vj dGlvbnNfcHRyKQogICAgICAgZHdvX3NlY3Rpb25zLT5sb2Mucy5zZWN0aW9u ID0gc2VjdHA7CiAgICAgICBkd29fc2VjdGlvbnMtPmxvYy5zaXplID0gYmZk X3NlY3Rpb25fc2l6ZSAoc2VjdHApOwogICAgIH0KKyAgZWxzZSBpZiAoc2Vj dGlvbl9pc19wIChzZWN0cC0+bmFtZSwgJm5hbWVzLT5sb2NsaXN0c19kd28p KQorICAgIHsKKyAgICAgIGR3b19zZWN0aW9ucy0+bG9jbGlzdHMucy5zZWN0 aW9uID0gc2VjdHA7CisgICAgICBkd29fc2VjdGlvbnMtPmxvY2xpc3RzLnNp emUgPSBiZmRfc2VjdGlvbl9zaXplIChzZWN0cCk7CisgICAgfQogICBlbHNl IGlmIChzZWN0aW9uX2lzX3AgKHNlY3RwLT5uYW1lLCAmbmFtZXMtPm1hY2lu Zm9fZHdvKSkKICAgICB7CiAgICAgICBkd29fc2VjdGlvbnMtPm1hY2luZm8u cy5zZWN0aW9uID0gc2VjdHA7CkBAIC0xODQ1Myw2ICsxODQ5NSw5IEBAIHJl YWRfZnVsbF9kaWVfMSAoY29uc3Qgc3RydWN0IGRpZV9yZWFkZXJfc3BlY3Mg KnJlYWRlciwKICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciA9IGR3YXJmMl9h dHRyX25vX2ZvbGxvdyAoZGllLCBEV19BVF9zdHJfb2Zmc2V0c19iYXNlKTsK ICAgaWYgKGF0dHIgIT0gbnVsbHB0cikKICAgICBjdS0+c3RyX29mZnNldHNf YmFzZSA9IERXX1VOU05EIChhdHRyKTsKKyAgYXR0ciA9IGR3YXJmMl9hdHRy X25vX2ZvbGxvdyAoZGllLCBEV19BVF9sb2NsaXN0c19iYXNlKTsKKyAgaWYg KGF0dHIpCisgICAgY3UtPmxvY2xpc3RfYmFzZSA9IERXX1VOU05EIChhdHRy KTsKIAogICBhdXRvIG1heWJlX2FkZHJfYmFzZSA9IGxvb2t1cF9hZGRyX2Jh c2UoZGllKTsKICAgaWYgKG1heWJlX2FkZHJfYmFzZS5oYXNfdmFsdWUgKCkp CkBAIC0xOTQwOSw2ICsxOTQ1NCw3OCBAQCBwYXJ0aWFsX2RpZV9pbmZvOjpm aXh1cCAoc3RydWN0IGR3YXJmMl9jdSAqY3UpCiAgIGZpeHVwX2NhbGxlZCA9 IDE7CiB9CiAKK3N0YXRpYyB2b2lkCityZWFkX2xvY2xpc3RfaGVhZGVyIChz dHJ1Y3QgbG9jbGlzdF9oZWFkZXIgKmhlYWRlciwgc3RydWN0IGR3YXJmMl9z ZWN0aW9uX2luZm8gKnNlY3Rpb24pCit7CisgIHVuc2lnbmVkIGludCBieXRl c19yZWFkOworICBiZmQgKmFiZmQgPSBnZXRfc2VjdGlvbl9iZmRfb3duZXIg KHNlY3Rpb24pOworICBjb25zdCBnZGJfYnl0ZSAqaW5mb19wdHIgPSBzZWN0 aW9uLT5idWZmZXI7CisgIGhlYWRlci0+bGVuZ3RoID0gcmVhZF9pbml0aWFs X2xlbmd0aCAoYWJmZCwgaW5mb19wdHIsICZieXRlc19yZWFkKTsKKyAgaW5m b19wdHIgKz0gYnl0ZXNfcmVhZDsKKyAgaGVhZGVyLT52ZXJzaW9uID0gcmVh ZF8yX2J5dGVzIChhYmZkLCBpbmZvX3B0cik7CisgIGluZm9fcHRyICs9IDI7 CisgIGhlYWRlci0+YWRkcl9zaXplID0gcmVhZF8xX2J5dGUgKGFiZmQsIGlu Zm9fcHRyKTsKKyAgaW5mb19wdHIgKz0gMTsKKyAgaGVhZGVyLT5zZWdtZW50 X2NvbGxlY3Rvcl9zaXplID0gcmVhZF8xX2J5dGUgKGFiZmQsIGluZm9fcHRy KTsKKyAgaW5mb19wdHIgKz0gMTsKKyAgaGVhZGVyLT5vZmZzZXRfZW50cnlf Y291bnQgPSByZWFkXzRfYnl0ZXMgKGFiZmQsIGluZm9fcHRyKTsKK30KKwor CitzdGF0aWMgVUxPTkdFU1QKK2xvb2t1cF9sb2NsaXN0X2Jhc2UgKHN0cnVj dCBkd2FyZjJfY3UgKmN1KQoreworICAvKiBGb3IgdGhlIC5kd28gdW5pdCwg dGhlIGxvY2xpc3RfYmFzZSBwb2ludHMgdG8gdGhlIGZpcnN0IG9mZnNldCBm b2xsb3dpbmcKKyAgICAgdGhlIGhlYWRlci4gVGhlIGhlYWRlciBjb25zaXN0 cyBvZiB0aGUgZm9sbG93aW5nIGVudGl0aWVzLQorICAgICAxLiBVbml0IExl bmd0aCAoNCBieXRlcyBmb3IgMzIgYml0IERXQVJGIGZvcm1hdCwgYW5kIDEy IGJ5dGVzIGZvciB0aGUgNjQgYml0IGZvcm1hdCkKKyAgICAgMi4gdmVyc2lv biAoMiBieXRlcykKKyAgICAgMy4gYWRkcmVzcyBzaXplICgxIGJ5dGUpCisg ICAgIDQuIHNlZ21lbnQgc2VsZWN0b3Igc2l6ZSAoMSBieXRlKQorICAgICA1 LiBvZmZzZXQgZW50cnkgY291bnQgKDQgYnl0ZXMpCisgICAgIFRoZXNlIHNp emVzIGFyZSBkZXJpdmVkIGFzIHBlciB0aGUgRFdBUkZ2NSBzdGFuZGFyZC4g Ki8KKyAgaWYgKGN1LT5kd29fdW5pdCkKKyAgeworICAgIGlmIChjdS0+aGVh ZGVyLmluaXRpYWxfbGVuZ3RoX3NpemUgPT0gNCkKKyAgICAgIHJldHVybiBM T0NMSVNUX0hFQURFUl9TSVpFMzI7CisgICAgcmV0dXJuIExPQ0xJU1RfSEVB REVSX1NJWkU2NDsKKyAgfQorICByZXR1cm4gKmN1LT5sb2NsaXN0X2Jhc2U7 Cit9CisKKy8qIEdpdmVuIGEgRFdfRk9STV9sb2NsaXN0eCB2YWx1ZSBsb2Ns aXN0X2luZGV4LCBmZXRjaCB0aGUgb2Zmc2V0IGZyb20gdGhlIGFycmF5Cisg ICBvZiBvZmZzZXRzIGluIHRoZSAuZGVidWdfbG9jbGlzdHMgc2VjdGlvbi4g Ki8KK3N0YXRpYyBDT1JFX0FERFIKK3JlYWRfbG9jbGlzdF9pbmRleCAoc3Ry dWN0IGR3YXJmMl9jdSAqY3UsIFVMT05HRVNUIGxvY2xpc3RfaW5kZXgpCit7 CisgIHN0cnVjdCBkd2FyZjJfcGVyX29iamZpbGUgKmR3YXJmMl9wZXJfb2Jq ZmlsZQorCT0gY3UtPnBlcl9jdS0+ZHdhcmYyX3Blcl9vYmpmaWxlOworICBz dHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSA9IGR3YXJmMl9wZXJfb2JqZmlsZS0+ b2JqZmlsZTsKKyAgYmZkICphYmZkID0gb2JqZmlsZS0+b2JmZDsKKyAgVUxP TkdFU1QgbG9jbGlzdF9iYXNlID0gbG9va3VwX2xvY2xpc3RfYmFzZSAoY3Up OworICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25faW5mbyAqc2VjdGlvbiA9IGN1 X2RlYnVnX2xvY19zZWN0aW9uIChjdSk7CisgIGR3YXJmMl9yZWFkX3NlY3Rp b24gKG9iamZpbGUsIHNlY3Rpb24pOworICBpZiAoc2VjdGlvbi0+YnVmZmVy ID09IE5VTEwpCisgICAgY29tcGxhaW50KF8oIkRXX0ZPUk1fbG9jbGlzdHgg dXNlZCB3aXRob3V0IC5kZWJ1Z19sb2NsaXN0IHNlY3Rpb24gW2luIG1vZHVs ZSAlc10iKSwKKwlvYmpmaWxlX25hbWUgKG9iamZpbGUpKTsKKyAgc3RydWN0 IGxvY2xpc3RfaGVhZGVyIGhlYWRlcjsKKyAgcmVhZF9sb2NsaXN0X2hlYWRl ciAoJmhlYWRlciwgc2VjdGlvbik7CisgIGlmIChsb2NsaXN0X2luZGV4ID49 IGhlYWRlci5vZmZzZXRfZW50cnlfY291bnQpCisgICAgY29tcGxhaW50KF8o IkRXX0ZPUk1fbG9jbGlzdHggcG9pbnRpbmcgb3V0c2lkZSBvZiAiCisJIi5k ZWJ1Z19sb2NsaXN0IG9mZnNldCBhcnJheSBbaW4gbW9kdWxlICVzXSIpLAor CW9iamZpbGVfbmFtZSAob2JqZmlsZSkpOworICBpZiAobG9jbGlzdF9iYXNl ICsgbG9jbGlzdF9pbmRleCAqIGN1LT5oZWFkZXIub2Zmc2V0X3NpemUKKwk+ PSBzZWN0aW9uLT5zaXplKQorICAgIGNvbXBsYWludChfKCJEV19GT1JNX2xv Y2xpc3R4IHBvaW50aW5nIG91dHNpZGUgb2YgIgorCSIuZGVidWdfbG9jbGlz dCBzZWN0aW9uIFtpbiBtb2R1bGUgJXNdIiksCisJb2JqZmlsZV9uYW1lIChv YmpmaWxlKSk7CisgIGNvbnN0IGdkYl9ieXRlICppbmZvX3B0ciA9IChzZWN0 aW9uLT5idWZmZXIgKyBsb2NsaXN0X2Jhc2UgKworCWxvY2xpc3RfaW5kZXgg KiBjdS0+aGVhZGVyLm9mZnNldF9zaXplKTsKKyAgaWYgKGN1LT5oZWFkZXIu b2Zmc2V0X3NpemUgPT0gNCkKKyAgICByZXR1cm4gYmZkX2dldF8zMiAoYWJm ZCwgaW5mb19wdHIpICsgbG9jbGlzdF9iYXNlOworICBlbHNlCisgICAgcmV0 dXJuIGJmZF9nZXRfNjQgKGFiZmQsIGluZm9fcHRyKSArIGxvY2xpc3RfYmFz ZTsKK30KKwogLyogUHJvY2VzcyB0aGUgYXR0cmlidXRlcyB0aGF0IGhhZCB0 byBiZSBza2lwcGVkIGluIHRoZSBmaXJzdCByb3VuZC4gVGhlc2UKICAgIGF0 dHJpYnV0ZXMgYXJlIHRoZSBvbmVzIHRoYXQgbmVlZCBzdHJfb2Zmc2V0c19i YXNlIG9yIGFkZHJfYmFzZSBhdHRyaWJ1dGVzLgogICAgVGhleSBjb3VsZCBu b3QgaGF2ZSBiZWVuIHByb2Nlc3NlZCBpbiB0aGUgZmlyc3Qgcm91bmQsIGJl Y2F1c2UgYXQgdGhlIHRpbWUKQEAgLTE5NDIzLDYgKzE5NTQwLDkgQEAgdm9p ZCByZWFkX2F0dHJpYnV0ZV9yZXByb2Nlc3MgKGNvbnN0IHN0cnVjdCBkaWVf cmVhZGVyX3NwZWNzICpyZWFkZXIsCiAgICAgICBjYXNlIERXX0ZPUk1fR05V X2FkZHJfaW5kZXg6CiAgICAgICAgIERXX0FERFIgKGF0dHIpID0gcmVhZF9h ZGRyX2luZGV4IChjdSwgRFdfVU5TTkQgKGF0dHIpKTsKICAgICAgICAgYnJl YWs7CisgICAgICBjYXNlIERXX0ZPUk1fbG9jbGlzdHg6CisJIERXX1VOU05E IChhdHRyKSA9IHJlYWRfbG9jbGlzdF9pbmRleCAoY3UsIERXX1VOU05EIChh dHRyKSk7CisJIGJyZWFrOwogICAgICAgY2FzZSBEV19GT1JNX3N0cng6CiAg ICAgICBjYXNlIERXX0ZPUk1fc3RyeDE6CiAgICAgICBjYXNlIERXX0ZPUk1f c3RyeDI6CkBAIC0xOTUyNiw2ICsxOTY0NiwxMyBAQCByZWFkX2F0dHJpYnV0 ZV92YWx1ZSAoY29uc3Qgc3RydWN0IGRpZV9yZWFkZXJfc3BlY3MgKnJlYWRl ciwKICAgICAgIERXX1VOU05EIChhdHRyKSA9IHJlYWRfb2Zmc2V0IChhYmZk LCBpbmZvX3B0ciwgJmN1LT5oZWFkZXIsICZieXRlc19yZWFkKTsKICAgICAg IGluZm9fcHRyICs9IGJ5dGVzX3JlYWQ7CiAgICAgICBicmVhazsKKyAgICBj YXNlIERXX0ZPUk1fbG9jbGlzdHg6CisgICAgeworICAgICAgKm5lZWRfcmVw cm9jZXNzID0gdHJ1ZTsKKyAgICAgIERXX1VOU05EIChhdHRyKSA9IHJlYWRf dW5zaWduZWRfbGViMTI4IChhYmZkLCBpbmZvX3B0ciwgJmJ5dGVzX3JlYWQp OworICAgICAgaW5mb19wdHIgKz0gYnl0ZXNfcmVhZDsKKyAgICB9CisgICAg ICBicmVhazsKICAgICBjYXNlIERXX0ZPUk1fc3RyaW5nOgogICAgICAgRFdf U1RSSU5HIChhdHRyKSA9IHJlYWRfZGlyZWN0X3N0cmluZyAoYWJmZCwgaW5m b19wdHIsICZieXRlc19yZWFkKTsKICAgICAgIERXX1NUUklOR19JU19DQU5P TklDQUwgKGF0dHIpID0gMDsKQEAgLTI1NDA3LDcgKzI1NTM0LDggQEAgYXR0 cl9mb3JtX2lzX3NlY3Rpb25fb2Zmc2V0IChjb25zdCBzdHJ1Y3QgYXR0cmli dXRlICphdHRyKQogewogICByZXR1cm4gKGF0dHItPmZvcm0gPT0gRFdfRk9S TV9kYXRhNAogICAgICAgICAgIHx8IGF0dHItPmZvcm0gPT0gRFdfRk9STV9k YXRhOAotCSAgfHwgYXR0ci0+Zm9ybSA9PSBEV19GT1JNX3NlY19vZmZzZXQp OworCSAgfHwgYXR0ci0+Zm9ybSA9PSBEV19GT1JNX3NlY19vZmZzZXQKKwkg IHx8IGF0dHItPmZvcm0gPT0gRFdfRk9STV9sb2NsaXN0eCk7CiB9CiAKIC8q IFJldHVybiBub24temVybyBpZiBBVFRSJ3MgdmFsdWUgZmFsbHMgaW4gdGhl ICdjb25zdGFudCcgY2xhc3MsIG9yCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1 aXRlL2dkYi5kd2FyZjIvZHc1LWZvcm0tbG9jbGlzdHguYyBiL2dkYi90ZXN0 c3VpdGUvZ2RiLmR3YXJmMi9kdzUtZm9ybS1sb2NsaXN0eC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmEyYTE0NTgzYmUKLS0t IC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5kd2FyZjIvZHc1 LWZvcm0tbG9jbGlzdHguYwpAQCAtMCwwICsxLDE2IEBACisKKworaW50IGZv byhpbnQgYSwgaW50IGIpCit7CisgIGEgPSBhK2I7CisgIGIgPSBhLWI7Cisg IGEgPSAyKmI7CisgIHJldHVybiBhK2I7Cit9CisKK2ludCBtYWluKCkKK3sK KyAgaW50IHJlc3VsdCxhLGI7CisgIHJlc3VsdCA9IGZvbyhhLGIpOworICBy ZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9n ZGIuZHdhcmYyL2R3NS1mb3JtLWxvY2xpc3R4LmV4cCBiL2dkYi90ZXN0c3Vp dGUvZ2RiLmR3YXJmMi9kdzUtZm9ybS1sb2NsaXN0eC5leHAKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTVkOWFjMTNlNwotLS0g L2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmR3YXJmMi9kdzUt Zm9ybS1sb2NsaXN0eC5leHAKQEAgLTAsMCArMSw0MiBAQAorIyBDb3B5cmln aHQgMjAxMi0yMDIwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor CisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorCitsb2FkX2xpYiBkd2FyZi5leHAKKworIyBU aGlzIHRlc3QgY2FuIG9ubHkgYmUgcnVuIG9uIHRhcmdldHMgd2hpY2ggc3Vw cG9ydCBEV0FSRi0yIGFuZCB1c2UgZ2FzLgoraWYgeyFbZHdhcmYyX3N1cHBv cnRdfSB7CisgICAgcmV0dXJuIDAgIAorfQorCitzdGFuZGFyZF90ZXN0Zmls ZSAuYworCisKKyMgV2UgY2FuJ3QgdXNlIHByZXBhcmVfZm9yX3Rlc3Rpbmcg aGVyZSBiZWNhdXNlIHdlIG5lZWQgdG8gY2hlY2sgdGhlCisjICdmaWxlJyBj b21tYW5kJ3Mgb3V0cHV0LgorCitpZiB7IFtidWlsZF9leGVjdXRhYmxlICR7 dGVzdGZpbGV9LmV4cCAke3Rlc3RmaWxlfSAke3NyY2ZpbGV9XAorICAge2Fk ZGl0aW9uYWxfZmxhZ3M9LWdkd2FyZi01IGFkZGl0aW9uYWxfZmxhZ3M9LWdz cGxpdC1kd2FyZiBhZGRpdGlvbmFsX2ZsYWdzPS1PMn1dID09IC0xIH0gewor ICAgIHJldHVybiAtMQorfQorCitnZGJfZXhpdAorZ2RiX3N0YXJ0CitnZGJf cmVpbml0aWFsaXplX2RpciAkc3JjZGlyLyRzdWJkaXIKKworIyBDaGVjayB0 aGF0IGZpbGUgY29tbWFuZCBnaXZlcyBubyBlcnJvci4KK2dkYl90ZXN0ICJm aWxlICRiaW5maWxlIiBcCisgICAgIlJlYWRpbmcgc3ltYm9scyBmcm9tICRi aW5maWxlXC5cLlwuIgorCisKLS0gCjIuMTcuMQoK --_002_CH2PR12MB3733AFBDED08D5F7FA6A3E0C9A070CH2PR12MB3733namp_--