From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 38330 invoked by alias); 7 Feb 2017 16:33:46 -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 38286 invoked by uid 89); 7 Feb 2017 16:33:46 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.9 required=5.0 tests=AWL,BAYES_50,KAM_LOTSOFHASH,MIME_BASE64_BLANKS,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=no version=3.3.2 spammy=bright, 12506, 1876, qiyaoltc@gmail.com X-HELO: EUR01-VE1-obe.outbound.protection.outlook.com Received: from mail-ve1eur01on0045.outbound.protection.outlook.com (HELO EUR01-VE1-obe.outbound.protection.outlook.com) (104.47.1.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 07 Feb 2017 16:33:25 +0000 Received: from VI1PR0801MB1822.eurprd08.prod.outlook.com (10.168.68.7) by VI1PR0801MB1823.eurprd08.prod.outlook.com (10.168.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.888.16; Tue, 7 Feb 2017 16:33:19 +0000 Received: from VI1PR0801MB1822.eurprd08.prod.outlook.com ([10.168.68.7]) by VI1PR0801MB1822.eurprd08.prod.outlook.com ([10.168.68.7]) with mapi id 15.01.0888.026; Tue, 7 Feb 2017 16:33:19 +0000 From: Alan Hayward To: Yao Qi CC: Pedro Alves , Joel Brobecker , "gdb-patches@sourceware.org" , nd Subject: Re: [PATCH] Removal of uses of MAX_REGISTER_SIZE Date: Tue, 07 Feb 2017 16:33:00 -0000 Message-ID: <5F3D30AE-9A53-493A-B6DC-DF594C2FAB18@arm.com> References: <45e3a5e1-a9aa-1bc0-5d08-526b89fc458e@redhat.com> <20170201124123.GA27498@E107787-LIN> <20170202094012.dge4r6rsl2skdrii@adacore.com> <20170203102819.GA11916@E107787-LIN> <25716edf-096e-20c5-4170-fb8ca04d897b@redhat.com> <0C6A0D51-4C49-4400-8C46-E77DD512DF56@arm.com> <20170203165022.GB11916@E107787-LIN> <1E0030CE-FB37-4821-AA53-9C6D1CC285C9@arm.com> <20170206152635.GE11916@E107787-LIN> In-Reply-To: <20170206152635.GE11916@E107787-LIN> authentication-results: spf=none (sender IP is ) smtp.mailfrom=Alan.Hayward@arm.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-office365-filtering-correlation-id: 18f72d5d-45a9-4fc3-2cc6-08d44f7706ab x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081);SRVR:VI1PR0801MB1823; x-microsoft-exchange-diagnostics: 1;VI1PR0801MB1823;7:zcwZ0UPuv2hWu10gyez0GRDJu6pjkqSZoyiq+NqRMGPwfKGkbazQ3i6dXf2+4UtN1uK+8AICC0iA80PYqpnZzwEfFrI1F6iIRidJT8yNgrq+vL5gKp+7EJQKv1orAXNIhC1RpjbhXhKbu0fymEqscq/NYEE1jW8Kn/CDWum38J8gHdF9PBcW6TF98l+peUKd/Ec3nRfHAfzoVVWXpff82impgc3Eo755at5+YUmzb8LTE29bLDj5nUH5+J2iN+vPhb+cmul1YhGsbQmtlBZ7iBOU1ydBGj00HJPMoevqKqt8M3LOQODlvhisLBFmHLS4TzRk4DA9XeR/Ueh7WhsXMLvz9/EDZRN+xi82wd/mT1UxSzSdU31Mpn9B5V7VNP37ks26Toq4RnqmeLNDTbu/qKieenNmIl/lOUk1ag5KTzOFLvZ/5TwFvhb4PssWwyGaLm7tQXWqlrPNArhEgKLPRU4ZXFIyDc1uWwbl5NttYaHZam1Tv9E6C7PM/PIgibP8VpY2oTOs4Ylhb+v/XLXwHg== nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917)(788757137089); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(2017020603029)(8121501046)(5005006)(20170203043)(3002001)(10201501046)(6055026)(6041248)(20161123555025)(20161123558025)(20161123560025)(20161123564025)(20161123562025)(6072148);SRVR:VI1PR0801MB1823;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0801MB1823; x-forefront-prvs: 0211965D06 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(7916002)(39860400002)(39850400002)(39410400002)(39840400002)(39450400003)(377424004)(24454002)(189002)(199003)(2906002)(4326007)(53936002)(53546003)(6246003)(92566002)(82746002)(86362001)(575784001)(16200700003)(53946003)(93886004)(189998001)(66066001)(83716003)(122556002)(305945005)(7736002)(77096006)(229853002)(68736007)(25786008)(39060400001)(105586002)(106116001)(106356001)(6486002)(6506006)(6436002)(97736004)(3280700002)(8936002)(6512007)(54356999)(76176999)(50986999)(3660700001)(99286003)(54906002)(36756003)(101416001)(1411001)(102836003)(3846002)(2900100001)(6116002)(81166006)(5660300001)(81156014)(6916009)(8676002)(2950100002)(110136004)(38730400002)(33656002)(104396002)(569005);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR0801MB1823;H:VI1PR0801MB1822.eurprd08.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-ID: <1648D5803BE0D34AA0EE3BBE5913C6B3@eurprd08.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Feb 2017 16:33:19.5134 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1823 X-SW-Source: 2017-02/txt/msg00156.txt.bz2 DQo+IE9uIDYgRmViIDIwMTcsIGF0IDE1OjI2LCBZYW8gUWkgPHFpeWFvbHRj QGdtYWlsLmNvbT4gd3JvdGU6DQo+IA0KPiBPbiAxNy0wMi0wNiAwOTozMzoy NSwgQWxhbiBIYXl3YXJkIHdyb3RlOg0KPj4gDQo+PiBPaywgR2l2ZW4gdGhh dCwgSSd2ZSBwdXQgdG9nZXRoZXIgYSBxdWljayBwYXRjaCB0bzoNCj4+ICog VXNlIE02OEtfTUFYX1JFR0lTVEVSX1NJWkUgYW5kIEkzODZfTUFYX1JFR0lT VEVSX1NJWkUgd2hlcmUgcG9zc2libGUuDQo+IA0KPiBUaGV5IGNhbiBiZSBp biBhIHNlcGFyYXRlIHBhdGNoIGlmIHlvdSB3YW50Lg0KPiANCj4+ICogQWRk IG1heF9yZWdpc3Rlcl9zaXplKCkgZnVuY3Rpb24NCj4+ICogUmVtb3ZlIE1B WF9SRUdJU1RFUl9TSVpFIGZyb20gYWxsIGNvbW1vbiBmaWxlcyBieSB1c2lu ZyBzdGQ6OnZlY3Rvci4NCj4+IENvbnRlbnRzIHNob3VsZCBiZSB2ZXJ5IHNp bWlsYXIgdG8gcHJldmlvdXMgcGF0Y2hlcyBwb3N0ZWQuDQo+PiANCj4+IFRo aXMgcGF0Y2ggb2s/DQo+PiANCj4+IDIwMTctMDItMDYgIEFsYW4gSGF5d2Fy ZCAgPGFsYW4uaGF5d2FyZEBhcm0uY29tXFw+DQo+PiANCj4+IAkqIGZyYW1l LmMgKGZyYW1lX3Vud2luZF9yZWdpc3Rlcl9zaWduZWQpOiBVc2Ugc3RkOjp2 ZWN0b3IuDQo+PiAJKGZyYW1lX3Vud2luZF9yZWdpc3Rlcl91bnNpZ25lZCk6 IExpa2V3aXNlLg0KPj4gCShnZXRfZnJhbWVfcmVnaXN0ZXJfYnl0ZXMpOiBM aWtld2lzZS4NCj4+IAkocHV0X2ZyYW1lX3JlZ2lzdGVyX2J5dGVzKTogTGlr ZXdpc2UuDQo+PiAJKiBpMzg2LXRkZXAuYyAoaTM4Nl9wc2V1ZG9fcmVnaXN0 ZXJfcmVhZF9pbnRvX3ZhbHVlKTogVXNlDQo+PiAJSTM4Nl9NQVhfUkVHSVNU RVJfU0laRS4NCj4+IAkoaTM4Nl9wc2V1ZG9fcmVnaXN0ZXJfd3JpdGUpOiBM aWtld2lzZS4NCj4+IAkoaTM4Nl9wcm9jZXNzX3JlY29yZCk6IExpa2V3aXNl Lg0KPj4gCSogaTM4Ny10ZGVwLmMgKGkzODdfc3VwcGx5X3hzYXZlKTogTGlr ZXdpc2UuDQo+PiAJKiBtNjhrLWxpbnV4LW5hdC5jIChmZXRjaF9yZWdpc3Rl cik6IFVzZSBNNjhLX01BWF9SRUdJU1RFUl9TSVpFLg0KPj4gCShzdG9yZV9y ZWdpc3Rlcik6IExpa2V3aXNlLg0KPj4gCSogbWkvbWktbWFpbi5jIChyZWdp c3Rlcl9jaGFuZ2VkX3ApOiBVc2Ugc3RkOjp2ZWN0b3IuDQo+PiAJKiByZWNv cmQtZnVsbC5jIChyZWNvcmRfZnVsbF9leGVjX2luc24pOiBMaWtld2lzZS4N Cj4+IAkocmVjb3JkX2Z1bGxfY29yZV9vcGVuXzEpOiBVc2UgbWF4X3JlZ2lz dGVyX3NpemUgKCkuDQo+PiAJKHJlY29yZF9mdWxsX2NvcmVfZmV0Y2hfcmVn aXN0ZXJzKTogTGlrZXdpc2UuDQo+PiAJKHJlY29yZF9mdWxsX2NvcmVfc3Rv cmVfcmVnaXN0ZXJzKTogTGlrZXdpc2UuDQo+PiAJKGluaXRfcmVjb3JkX2Z1 bGxfY29yZV9vcHMpOiBMaWtld2lzZS4NCj4+IAkqIHJlbW90ZS1zaW0uYyAo Z2Ric2ltX2ZldGNoX3JlZ2lzdGVyKTogTGlrZXdpc2UuDQo+PiAJKGdkYnNp bV9zdG9yZV9yZWdpc3Rlcik6IExpa2V3aXNlLg0KPj4gCSogcmVnY2FjaGUu YyAoc3RydWN0IHJlZ2NhY2hlX2Rlc2NyKTogQWRkIG1heF9yZWdpc3Rlcl9z aXplLg0KPj4gCShtYXhfcmVnaXN0ZXJfc2l6ZSk6IE5ldy4NCj4+IAkoaW5p dF9yZWdjYWNoZV9kZXNjcik6IEZpbmQgbWF4IHJlZ2lzdGVyIHNpemUuDQo+ PiAJKHJlZ2NhY2hlX3NhdmUpOiBVc2Ugc3RkOjp2ZWN0b3IuDQo+PiAJKHJl Z2NhY2hlX3Jlc3RvcmUpOiBMaWtld2lzZS4NCj4+IAkocmVnY2FjaGVfZHVt cCk6IExpa2V3aXNlLg0KPj4gCSogcmVnY2FjaGUuaCAobWF4X3JlZ2lzdGVy X3NpemUpOiBOZXcuDQo+PiAJKiByZW1vdGUuYyAocmVtb3RlX3ByZXBhcmVf dG9fc3RvcmUpOiBVc2Ugc3RkOjp2ZWN0b3IuDQo+PiAJKiBzb2wtdGhyZWFk LmMgKHNvbF90aHJlYWRfc3RvcmVfcmVnaXN0ZXJzKTogTGlrZXdpc2UuDQo+ PiAJKiBzdGFjay5jIChmcmFtZV9pbmZvKTogTGlrZXdpc2UuDQo+PiAJKiB0 YXJnZXQuYyAoZGVidWdfcHJpbnRfcmVnaXN0ZXIpOiBMaWtld2lzZS4NCj4+ IA0KPj4gDQo+PiBkaWZmIC0tZ2l0IGEvZ2RiL2ZyYW1lLmMgYi9nZGIvZnJh bWUuYw0KPj4gaW5kZXggZDk4MDAzZGVlN2MzNGE2M2JkMjUzNTZlNjY3NDcy MTY2NGE0YjJmMy4uMTcwMDMwODM3MWQ5ZDc5NTU0NWMwYThiYjI2ZGJhMjg5 YjE4MjE3ZCAxMDA2NDQNCj4+IC0tLSBhL2dkYi9mcmFtZS5jDQo+PiArKysg Yi9nZGIvZnJhbWUuYw0KPj4gQEAgLTEyNTIsMTAgKzEyNTIsMTAgQEAgZnJh bWVfdW53aW5kX3JlZ2lzdGVyX3NpZ25lZCAoc3RydWN0IGZyYW1lX2luZm8g KmZyYW1lLCBpbnQgcmVnbnVtKQ0KPj4gICBzdHJ1Y3QgZ2RiYXJjaCAqZ2Ri YXJjaCA9IGZyYW1lX3Vud2luZF9hcmNoIChmcmFtZSk7DQo+PiAgIGVudW0g YmZkX2VuZGlhbiBieXRlX29yZGVyID0gZ2RiYXJjaF9ieXRlX29yZGVyIChn ZGJhcmNoKTsNCj4+ICAgaW50IHNpemUgPSByZWdpc3Rlcl9zaXplIChnZGJh cmNoLCByZWdudW0pOw0KPj4gLSAgZ2RiX2J5dGUgYnVmW01BWF9SRUdJU1RF Ul9TSVpFXTsNCj4+ICsgIHN0ZDo6dmVjdG9yPGdkYl9ieXRlPiBidWYgKHNp emUpOw0KPj4gDQo+PiAtICBmcmFtZV91bndpbmRfcmVnaXN0ZXIgKGZyYW1l LCByZWdudW0sIGJ1Zik7DQo+PiAtICByZXR1cm4gZXh0cmFjdF9zaWduZWRf aW50ZWdlciAoYnVmLCBzaXplLCBieXRlX29yZGVyKTsNCj4+ICsgIGZyYW1l X3Vud2luZF9yZWdpc3RlciAoZnJhbWUsIHJlZ251bSwgYnVmLmRhdGEgKCkp Ow0KPj4gKyAgcmV0dXJuIGV4dHJhY3Rfc2lnbmVkX2ludGVnZXIgKGJ1Zi5k YXRhICgpLCBzaXplLCBieXRlX29yZGVyKTsNCj4gDQo+IFdlIGNhbiByZXBs YWNlIE1BWF9SRUdJU1RFUl9TSVpFIHdpdGggJ3NpemVvZiAoTE9OR0VTVCkn LCBiZWNhdXNlDQo+IGV4dHJhY3Rfc2lnbmVkX2ludGVnZXIgY2hlY2tzICdz aXplJyBzaG91bGRuJ3QgYmUgZ3JlYXRlciB0aGFuDQo+ICdzaXplb2YgKExP TkdFU1QpJy4NCj4gDQo+ICBpZiAobGVuID4gKGludCkgc2l6ZW9mIChMT05H RVNUKSkNCj4gICAgZXJyb3IgKF8oIlwNCj4gVGhhdCBvcGVyYXRpb24gaXMg bm90IGF2YWlsYWJsZSBvbiBpbnRlZ2VycyBvZiBtb3JlIHRoYW4gJWQgYnl0 ZXMuIiksDQo+IAkgICAoaW50KSBzaXplb2YgKExPTkdFU1QpKTsNCg0KT2su DQoNCj4gDQo+PiB9DQo+PiANCj4+IExPTkdFU1QNCj4+IEBAIC0xMjcwLDEw ICsxMjcwLDEwIEBAIGZyYW1lX3Vud2luZF9yZWdpc3Rlcl91bnNpZ25lZCAo c3RydWN0IGZyYW1lX2luZm8gKmZyYW1lLCBpbnQgcmVnbnVtKQ0KPj4gICBz dHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGZyYW1lX3Vud2luZF9hcmNoIChm cmFtZSk7DQo+PiAgIGVudW0gYmZkX2VuZGlhbiBieXRlX29yZGVyID0gZ2Ri YXJjaF9ieXRlX29yZGVyIChnZGJhcmNoKTsNCj4+ICAgaW50IHNpemUgPSBy ZWdpc3Rlcl9zaXplIChnZGJhcmNoLCByZWdudW0pOw0KPj4gLSAgZ2RiX2J5 dGUgYnVmW01BWF9SRUdJU1RFUl9TSVpFXTsNCj4+ICsgIHN0ZDo6dmVjdG9y PGdkYl9ieXRlPiBidWYgKHNpemUpOw0KPiANCj4gTGlrZXdpc2UsDQo+IHJl cGxhY2UgTUFYX1JFR0lTVEVSX1NJWkUgd2l0aCAnc2l6ZW9mIChVTE9OR0VT VCnigJkNCg0KT2suDQoNCj4gDQo+PiANCj4+IC0gIGZyYW1lX3Vud2luZF9y ZWdpc3RlciAoZnJhbWUsIHJlZ251bSwgYnVmKTsNCj4+IC0gIHJldHVybiBl eHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGJ1Ziwgc2l6ZSwgYnl0ZV9vcmRl cik7DQo+PiArICBmcmFtZV91bndpbmRfcmVnaXN0ZXIgKGZyYW1lLCByZWdu dW0sIGJ1Zi5kYXRhICgpKTsNCj4+ICsgIHJldHVybiBleHRyYWN0X3Vuc2ln bmVkX2ludGVnZXIgKGJ1Zi5kYXRhICgpLCBzaXplLCBieXRlX29yZGVyKTsN Cj4+IH0NCj4+IA0KPj4gVUxPTkdFU1QNCj4+IEBAIC0xMzg5LDYgKzEzODks OCBAQCBnZXRfZnJhbWVfcmVnaXN0ZXJfYnl0ZXMgKHN0cnVjdCBmcmFtZV9p bmZvICpmcmFtZSwgaW50IHJlZ251bSwNCj4+ICAgICBlcnJvciAoXygiQmFk IGRlYnVnIGluZm9ybWF0aW9uIGRldGVjdGVkOiAiDQo+PiAJICAgICAiQXR0 ZW1wdCB0byByZWFkICVkIGJ5dGVzIGZyb20gcmVnaXN0ZXJzLiIpLCBsZW4p Ow0KPj4gDQo+PiArICBzdGQ6OnZlY3RvcjxnZGJfYnl0ZT4gYnVmIChtYXhf cmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCkpOw0KPj4gKw0KPj4gICAvKiBDb3B5 IHRoZSBkYXRhLiAgKi8NCj4+ICAgd2hpbGUgKGxlbiA+IDApDQo+PiAgICAg ew0KPj4gQEAgLTE0MTAsMTYgKzE0MTIsMTUgQEAgZ2V0X2ZyYW1lX3JlZ2lz dGVyX2J5dGVzIChzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUsIGludCByZWdu dW0sDQo+PiAJfQ0KPj4gICAgICAgZWxzZQ0KPj4gCXsNCj4+IC0JICBnZGJf Ynl0ZSBidWZbTUFYX1JFR0lTVEVSX1NJWkVdOw0KPj4gCSAgZW51bSBsdmFs X3R5cGUgbHZhbDsNCj4+IAkgIENPUkVfQUREUiBhZGRyOw0KPj4gCSAgaW50 IHJlYWxudW07DQo+PiANCj4+IAkgIGZyYW1lX3JlZ2lzdGVyIChmcmFtZSwg cmVnbnVtLCBvcHRpbWl6ZWRwLCB1bmF2YWlsYWJsZXAsDQo+PiAtCQkJICAm bHZhbCwgJmFkZHIsICZyZWFsbnVtLCBidWYpOw0KPj4gKwkJCSAgJmx2YWws ICZhZGRyLCAmcmVhbG51bSwgYnVmLmRhdGEgKCkpOw0KPiANCj4gSSBhbSB3 b25kZXJpbmcgdGhhdCB3ZSBjYW4gcmVwbGFjZSBmcmFtZV9yZWdpc3RlciB3 aXRoDQo+IA0KPiB2YWx1ZSA9IGZyYW1lX3Vud2luZF9yZWdpc3Rlcl92YWx1 ZSAoZnJhbWUtPm5leHQsIHJlZ251bSk7DQo+IA0KPiBiZWNhdXNlIGZyYW1l X3JlZ2lzdGVyIC0+IGZyYW1lX3JlZ2lzdGVyX3Vud2luZCAgLT4gZnJhbWVf dW53aW5kX3JlZ2lzdGVyX3ZhbHVlDQo+IGFuZCB3ZSBjYW4gZ2V0IHJlZ2lz dGVyIGNvbnRlbnRzIGZyb20gdmFsdWUsIHNvIHdlIGRvbid0IG5lZWQgJ2J1 ZicgYXQgYWxsLg0KDQpPay4NCg0KPiANCj4+IAkgIGlmICgqb3B0aW1pemVk cCB8fCAqdW5hdmFpbGFibGVwKQ0KPj4gCSAgICByZXR1cm4gMDsNCj4+IC0J ICBtZW1jcHkgKG15YWRkciwgYnVmICsgb2Zmc2V0LCBjdXJyX2xlbik7DQo+ PiArCSAgbWVtY3B5IChteWFkZHIsIGJ1Zi5kYXRhICgpICsgb2Zmc2V0LCBj dXJyX2xlbik7DQo+PiAJfQ0KPj4gDQo+PiAgICAgICBteWFkZHIgKz0gY3Vy cl9sZW47DQo+PiBAQCAtMTQ0Niw2ICsxNDQ3LDggQEAgcHV0X2ZyYW1lX3Jl Z2lzdGVyX2J5dGVzIChzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUsIGludCBy ZWdudW0sDQo+PiAgICAgICByZWdudW0rKzsNCj4+ICAgICB9DQo+PiANCj4+ ICsgIHN0ZDo6dmVjdG9yPGdkYl9ieXRlPiBidWYgKG1heF9yZWdpc3Rlcl9z aXplIChnZGJhcmNoKSk7DQo+PiArDQo+PiAgIC8qIENvcHkgdGhlIGRhdGEu ICAqLw0KPj4gICB3aGlsZSAobGVuID4gMCkNCj4+ICAgICB7DQo+PiBAQCAt MTQ2MCwxMSArMTQ2Myw5IEBAIHB1dF9mcmFtZV9yZWdpc3Rlcl9ieXRlcyAo c3RydWN0IGZyYW1lX2luZm8gKmZyYW1lLCBpbnQgcmVnbnVtLA0KPj4gCX0N Cj4+ICAgICAgIGVsc2UNCj4+IAl7DQo+PiAtCSAgZ2RiX2J5dGUgYnVmW01B WF9SRUdJU1RFUl9TSVpFXTsNCj4+IC0NCj4+IC0JICBkZXByZWNhdGVkX2Zy YW1lX3JlZ2lzdGVyX3JlYWQgKGZyYW1lLCByZWdudW0sIGJ1Zik7DQo+PiAt CSAgbWVtY3B5IChidWYgKyBvZmZzZXQsIG15YWRkciwgY3Vycl9sZW4pOw0K Pj4gLQkgIHB1dF9mcmFtZV9yZWdpc3RlciAoZnJhbWUsIHJlZ251bSwgYnVm KTsNCj4+ICsJICBkZXByZWNhdGVkX2ZyYW1lX3JlZ2lzdGVyX3JlYWQgKGZy YW1lLCByZWdudW0sIGJ1Zi5kYXRhICgpKTsNCj4+ICsJICBtZW1jcHkgKGJ1 Zi5kYXRhICgpICsgb2Zmc2V0LCBteWFkZHIsIGN1cnJfbGVuKTsNCj4+ICsJ ICBwdXRfZnJhbWVfcmVnaXN0ZXIgKGZyYW1lLCByZWdudW0sIGJ1Zi5kYXRh ICgpKTsNCj4gDQo+IENhbiB5b3UgdHJ5IHVzaW5nIGZyYW1lX3Vud2luZF9y ZWdpc3Rlcl92YWx1ZSB0byByZWFkIHRoZSByZWdpc3RlciB2YWx1ZT8NCj4g R2V0IHRoZSB2YWx1ZSBjb250ZW50LCBwYXRjaCBpdCwgYW5kIHBhc3MgaXQg dG8gcHV0X2ZyYW1lX3JlZ2lzdGVyLg0KDQpZZXMuIFRlY2huaWNhbGx5LCB0 aGUgdmFsdWUgY29udGVudCBpcyBhIGNvbnN0LCBidXQgd2UgbmVlZCB0byBj YXN0IGZyb20gdm9pZCogdG8gY2hhciogYW55d2F5Lg0KDQo+IA0KPj4gZGlm ZiAtLWdpdCBhL2dkYi9taS9taS1tYWluLmMgYi9nZGIvbWkvbWktbWFpbi5j DQo+PiBpbmRleCA1N2MyM2ViZjVkNmIyZDNiMzk4YWE0MGViZDliM2NiNzBj NTYxMjVjLi5iMDczMzVkODI3MjNmM2VlOWM3NjAyYThmYTI4NGFjYjdlM2Iz YTI1IDEwMDY0NA0KPj4gLS0tIGEvZ2RiL21pL21pLW1haW4uYw0KPj4gKysr IGIvZ2RiL21pL21pLW1haW4uYw0KPj4gQEAgLTExMzUsOCArMTEzNSw4IEBA IHJlZ2lzdGVyX2NoYW5nZWRfcCAoaW50IHJlZ251bSwgc3RydWN0IHJlZ2Nh Y2hlICpwcmV2X3JlZ3MsDQo+PiAJCSAgICBzdHJ1Y3QgcmVnY2FjaGUgKnRo aXNfcmVncykNCj4+IHsNCj4+ICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gg PSBnZXRfcmVnY2FjaGVfYXJjaCAodGhpc19yZWdzKTsNCj4+IC0gIGdkYl9i eXRlIHByZXZfYnVmZmVyW01BWF9SRUdJU1RFUl9TSVpFXTsNCj4+IC0gIGdk Yl9ieXRlIHRoaXNfYnVmZmVyW01BWF9SRUdJU1RFUl9TSVpFXTsNCj4+ICsg IHN0ZDo6dmVjdG9yPGdkYl9ieXRlPiBwcmV2X2J1ZmZlciAobWF4X3JlZ2lz dGVyX3NpemUgKGdkYmFyY2gpKTsNCj4gDQo+IHJlZ2lzdGVyX3NpemUgKGdk YmFyY2gsIHJlZ251bSkgaW5zdGVhZCBvZiBtYXhfcmVnaXN0ZXJfc2l6ZT8N Cg0KT2suDQoNCj4gDQo+PiArICBzdGQ6OnZlY3RvcjxnZGJfYnl0ZT4gdGhp c19idWZmZXIgKG1heF9yZWdpc3Rlcl9zaXplIChnZGJhcmNoKSk7DQo+PiAg IGVudW0gcmVnaXN0ZXJfc3RhdHVzIHByZXZfc3RhdHVzOw0KPj4gICBlbnVt IHJlZ2lzdGVyX3N0YXR1cyB0aGlzX3N0YXR1czsNCj4+IA0KPj4gQEAgLTEx NDYsMTMgKzExNDYsMTMgQEAgcmVnaXN0ZXJfY2hhbmdlZF9wIChpbnQgcmVn bnVtLCBzdHJ1Y3QgcmVnY2FjaGUgKnByZXZfcmVncywNCj4+ICAgICByZXR1 cm4gMTsNCj4+IA0KPj4gICAvKiBHZXQgcmVnaXN0ZXIgY29udGVudHMgYW5k IGNvbXBhcmUuICAqLw0KPj4gLSAgcHJldl9zdGF0dXMgPSByZWdjYWNoZV9j b29rZWRfcmVhZCAocHJldl9yZWdzLCByZWdudW0sIHByZXZfYnVmZmVyKTsN Cj4+IC0gIHRoaXNfc3RhdHVzID0gcmVnY2FjaGVfY29va2VkX3JlYWQgKHRo aXNfcmVncywgcmVnbnVtLCB0aGlzX2J1ZmZlcik7DQo+PiArICBwcmV2X3N0 YXR1cyA9IHJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChwcmV2X3JlZ3MsIHJlZ251 bSwgcHJldl9idWZmZXIuZGF0YSAoKSk7DQo+PiArICB0aGlzX3N0YXR1cyA9 IHJlZ2NhY2hlX2Nvb2tlZF9yZWFkICh0aGlzX3JlZ3MsIHJlZ251bSwgdGhp c19idWZmZXIuZGF0YSAoKSk7DQo+PiANCj4+ICAgaWYgKHRoaXNfc3RhdHVz ICE9IHByZXZfc3RhdHVzKQ0KPj4gICAgIHJldHVybiAxOw0KPj4gICBlbHNl IGlmICh0aGlzX3N0YXR1cyA9PSBSRUdfVkFMSUQpDQo+PiAtICAgIHJldHVy biBtZW1jbXAgKHByZXZfYnVmZmVyLCB0aGlzX2J1ZmZlciwNCj4+ICsgICAg cmV0dXJuIG1lbWNtcCAocHJldl9idWZmZXIuZGF0YSAoKSwgdGhpc19idWZm ZXIuZGF0YSAoKSwNCj4+IAkJICAgcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwg cmVnbnVtKSkgIT0gMDsNCj4+ICAgZWxzZQ0KPj4gICAgIHJldHVybiAwOw0K PiANCj4+IGRpZmYgLS1naXQgYS9nZGIvcmVjb3JkLWZ1bGwuYyBiL2dkYi9y ZWNvcmQtZnVsbC5jDQo+PiBpbmRleCBmZGQ2MTNiNmU0MWJiZmNkODY0NGIw MmNjZmViOThiNTNiNTE4YmZmLi5hNjE5ZTA5YTY0NmM0OGM2MzJhNjA0MDdk NzAxODk3OWQ4MDVhMDhmIDEwMDY0NA0KPj4gLS0tIGEvZ2RiL3JlY29yZC1m dWxsLmMNCj4+ICsrKyBiL2dkYi9yZWNvcmQtZnVsbC5jDQo+PiBAQCAtNjk4 LDcgKzY5OCw3IEBAIHJlY29yZF9mdWxsX2V4ZWNfaW5zbiAoc3RydWN0IHJl Z2NhY2hlICpyZWdjYWNoZSwNCj4+ICAgICB7DQo+PiAgICAgY2FzZSByZWNv cmRfZnVsbF9yZWc6IC8qIHJlZyAqLw0KPj4gICAgICAgew0KPj4gLSAgICAg ICAgZ2RiX2J5dGUgcmVnW01BWF9SRUdJU1RFUl9TSVpFXTsNCj4+ICsJc3Rk Ojp2ZWN0b3I8Z2RiX2J5dGU+IHJlZyAocmVnaXN0ZXJfc2l6ZSAoZ2RiYXJj aCwgZW50cnktPnUucmVnLm51bSkpOw0KPj4gDQo+PiAgICAgICAgIGlmIChy ZWNvcmRfZGVidWcgPiAxKQ0KPj4gICAgICAgICAgIGZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywNCj4+IEBAIC03MDcsMTAgKzcwNywxMCBAQCBy ZWNvcmRfZnVsbF9leGVjX2luc24gKHN0cnVjdCByZWdjYWNoZSAqcmVnY2Fj aGUsDQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0X2Fk ZHJlc3NfdG9fc3RyaW5nIChlbnRyeSksDQo+PiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlbnRyeS0+dS5yZWcubnVtKTsNCj4+IA0KPj4gLSAg ICAgICAgcmVnY2FjaGVfY29va2VkX3JlYWQgKHJlZ2NhY2hlLCBlbnRyeS0+ dS5yZWcubnVtLCByZWcpOw0KPj4gLSAgICAgICAgcmVnY2FjaGVfY29va2Vk X3dyaXRlIChyZWdjYWNoZSwgZW50cnktPnUucmVnLm51bSwNCj4+ICsJcmVn Y2FjaGVfY29va2VkX3JlYWQgKHJlZ2NhY2hlLCBlbnRyeS0+dS5yZWcubnVt LCByZWcuZGF0YSAoKSk7DQo+PiArCXJlZ2NhY2hlX2Nvb2tlZF93cml0ZSAo cmVnY2FjaGUsIGVudHJ5LT51LnJlZy5udW0sDQo+PiAJCQkgICAgICAgcmVj b3JkX2Z1bGxfZ2V0X2xvYyAoZW50cnkpKTsNCj4+IC0gICAgICAgIG1lbWNw eSAocmVjb3JkX2Z1bGxfZ2V0X2xvYyAoZW50cnkpLCByZWcsIGVudHJ5LT51 LnJlZy5sZW4pOw0KPj4gKwltZW1jcHkgKHJlY29yZF9mdWxsX2dldF9sb2Mg KGVudHJ5KSwgcmVnLmRhdGEgKCksIGVudHJ5LT51LnJlZy5sZW4pOw0KPiAN Cj4gTG9va3MgdGhlIGNvZGUgYWJvdmUgY29waWVzIHJlZ2lzdGVyIGVudHJ5 LT51LnJlZy5udW0gY29udGVudHMgZnJvbQ0KPiByZWdjYWNoZSB0byByZWNv cmRfZnVsbF9nZXRfbG9jIChlbnRyeSksIHNvIHdlIG1heSByZXdyaXRlIHRo ZSBjb2RlIHVzaW5nDQo+IHJlZ2NhY2hlX3Jhd19jb2xsZWN0LA0KPiANCj4g cmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBlbnRyeS0+dS5yZWcu bnVtLCByZWNvcmRfZnVsbF9nZXRfbG9jIChlbnRyeSkpOw0KPiANCj4gc28g YXJyYXkgcmVnIGlzIG5vdCBuZWVkZWQgYW55bW9yZS4gIExldCBtZSBwb3N0 IGEgcGF0Y2ggdG8gZml4IGl0Lg0KDQpMb29rcyB0byBtZSBsaWtlIHRoZSB0 aHJlZSBsaW5lcyBvZiBjb2RlIGFyZSBzd2FwcGluZyB0aGUgY29udGVudHMg b2YgcmVnY2FjaGUNCmFuZCByZWNvcmRfZnVsbF9nZXRfbG9jLg0KDQp0ZW1w IDw9IHJlZ2NhY2hlDQpyZWdjYWNoZSA8PSByZWNvcmRfZnVsbF9nZXRfbG9j DQpyZWNvcmRfZnVsbF9nZXRfbG9jIDw9IHRlbXANCg0KSSBjYW7igJl0IHNl ZSBhIHdheSBvZiBkb2luZyB0aGlzIHdpdGhvdXQgdGhlIGJ1ZmZlci4NCkxl ZnQgY29kZSBhcyBpcyBpbiBwYXRjaC4NCg0KDQo+IA0KPj4gICAgICAgfQ0K Pj4gICAgICAgYnJlYWs7DQo+PiANCj4+IEBAIC03OTIsMTUgKzc5MiwxNyBA QCBzdGF0aWMgdm9pZA0KPj4gcmVjb3JkX2Z1bGxfY29yZV9vcGVuXzEgKGNv bnN0IGNoYXIgKm5hbWUsIGludCBmcm9tX3R0eSkNCj4+IHsNCj4+ICAgc3Ry dWN0IHJlZ2NhY2hlICpyZWdjYWNoZSA9IGdldF9jdXJyZW50X3JlZ2NhY2hl ICgpOw0KPj4gLSAgaW50IHJlZ251bSA9IGdkYmFyY2hfbnVtX3JlZ3MgKGdl dF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpOw0KPj4gKyAgc3RydWN0IGdk YmFyY2ggKmdkYmFyY2ggPSBnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUp Ow0KPj4gKyAgaW50IHJlZ251bSA9IGdkYmFyY2hfbnVtX3JlZ3MgKGdkYmFy Y2gpOw0KPj4gKyAgaW50IHJlZ21heHNpemUgPSBtYXhfcmVnaXN0ZXJfc2l6 ZSAoZ2RiYXJjaCk7DQo+PiAgIGludCBpOw0KPj4gDQo+PiAgIC8qIEdldCBy ZWNvcmRfZnVsbF9jb3JlX3JlZ2J1Zi4gICovDQo+PiAgIHRhcmdldF9mZXRj aF9yZWdpc3RlcnMgKHJlZ2NhY2hlLCAtMSk7DQo+PiAtICByZWNvcmRfZnVs bF9jb3JlX3JlZ2J1ZiA9IChnZGJfYnl0ZSAqKSB4bWFsbG9jIChNQVhfUkVH SVNURVJfU0laRSAqIHJlZ251bSk7DQo+PiArICByZWNvcmRfZnVsbF9jb3Jl X3JlZ2J1ZiA9IChnZGJfYnl0ZSAqKSB4bWFsbG9jIChyZWdtYXhzaXplICog cmVnbnVtKTsNCj4+ICAgZm9yIChpID0gMDsgaSA8IHJlZ251bTsgaSArKykN Cj4+ICAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIGksDQo+ PiAtCQkJICByZWNvcmRfZnVsbF9jb3JlX3JlZ2J1ZiArIE1BWF9SRUdJU1RF Ul9TSVpFICogaSk7DQo+PiArCQkJICByZWNvcmRfZnVsbF9jb3JlX3JlZ2J1 ZiArIHJlZ21heHNpemUgKiBpKTsNCj4+IA0KPj4gICAvKiBHZXQgcmVjb3Jk X2Z1bGxfY29yZV9zdGFydCBhbmQgcmVjb3JkX2Z1bGxfY29yZV9lbmQuICAq Lw0KPj4gICBpZiAoYnVpbGRfc2VjdGlvbl90YWJsZSAoY29yZV9iZmQsICZy ZWNvcmRfZnVsbF9jb3JlX3N0YXJ0LA0KPj4gQEAgLTIwMzgsNiArMjA0MCw5 IEBAIHJlY29yZF9mdWxsX2NvcmVfZmV0Y2hfcmVnaXN0ZXJzIChzdHJ1Y3Qg dGFyZ2V0X29wcyAqb3BzLA0KPj4gCQkJCSAgc3RydWN0IHJlZ2NhY2hlICpy ZWdjYWNoZSwNCj4+IAkJCQkgIGludCByZWdubykNCj4+IHsNCj4+ICsgIHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X3JlZ2NhY2hlX2FyY2ggKHJl Z2NhY2hlKTsNCj4+ICsgIGludCByZWdtYXhzaXplID0gbWF4X3JlZ2lzdGVy X3NpemUgKGdkYmFyY2gpOw0KPj4gKw0KPj4gICBpZiAocmVnbm8gPCAwKQ0K Pj4gICAgIHsNCj4+ICAgICAgIGludCBudW0gPSBnZGJhcmNoX251bV9yZWdz IChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpKTsNCj4+IEBAIC0yMDQ1 LDExICsyMDUwLDExIEBAIHJlY29yZF9mdWxsX2NvcmVfZmV0Y2hfcmVnaXN0 ZXJzIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLA0KPj4gDQo+PiAgICAgICBm b3IgKGkgPSAwOyBpIDwgbnVtOyBpICsrKQ0KPj4gICAgICAgICByZWdjYWNo ZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgaSwNCj4+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlY29yZF9mdWxsX2NvcmVfcmVnYnVmICsgTUFY X1JFR0lTVEVSX1NJWkUgKiBpKTsNCj4+ICsJCQkgICAgIHJlY29yZF9mdWxs X2NvcmVfcmVnYnVmICsgcmVnbWF4c2l6ZSAqIGkpOw0KPj4gICAgIH0NCj4+ ICAgZWxzZQ0KPj4gICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hl LCByZWdubywNCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3Jk X2Z1bGxfY29yZV9yZWdidWYgKyBNQVhfUkVHSVNURVJfU0laRSAqIHJlZ25v KTsNCj4+ICsJCQkgcmVjb3JkX2Z1bGxfY29yZV9yZWdidWYgKyByZWdtYXhz aXplICogcmVnbm8pOw0KPj4gfQ0KPj4gDQo+PiAvKiAidG9fcHJlcGFyZV90 b19zdG9yZSIgbWV0aG9kIGZvciBwcmVjIG92ZXIgY29yZWZpbGUuICAqLw0K Pj4gQEAgLTIwNjcsOSArMjA3MiwxMiBAQCByZWNvcmRfZnVsbF9jb3JlX3N0 b3JlX3JlZ2lzdGVycyAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywNCj4+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlZ2NhY2hlICpy ZWdjYWNoZSwNCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHJlZ25vKQ0KPj4gew0KPj4gKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gg PSBnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpOw0KPj4gKyAgaW50IHJl Z21heHNpemUgPSBtYXhfcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCk7DQo+PiAr DQo+PiAgIGlmIChyZWNvcmRfZnVsbF9nZGJfb3BlcmF0aW9uX2Rpc2FibGUp DQo+PiAgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCByZWdu bywNCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZF9mdWxs X2NvcmVfcmVnYnVmICsgTUFYX1JFR0lTVEVSX1NJWkUgKiByZWdubyk7DQo+ PiArCQkJICByZWNvcmRfZnVsbF9jb3JlX3JlZ2J1ZiArIHJlZ21heHNpemUg KiByZWdubyk7DQo+PiAgIGVsc2UNCj4+ICAgICBlcnJvciAoXygiWW91IGNh bid0IGRvIHRoYXQgd2l0aG91dCBhIHByb2Nlc3MgdG8gZGVidWcuIikpOw0K Pj4gfQ0KPj4gQEAgLTIyNjUsNyArMjI3Myw3IEBAIGluaXRfcmVjb3JkX2Z1 bGxfY29yZV9vcHMgKHZvaWQpDQo+PiAgICAgIHJlY29yZF9mdWxsX3JlZzoN Cj4+ICAgICAgICAxIGJ5dGU6ICByZWNvcmQgdHlwZSAocmVjb3JkX2Z1bGxf cmVnLCBzZWUgZW51bSByZWNvcmRfZnVsbF90eXBlKS4NCj4+ICAgICAgICA4 IGJ5dGVzOiByZWdpc3RlciBpZCAobmV0d29yayBieXRlIG9yZGVyKS4NCj4+ IC0gICAgICAgTUFYX1JFR0lTVEVSX1NJWkUgYnl0ZXM6IHJlZ2lzdGVyIHZh bHVlLg0KPj4gKyAgICAgICBtYXhfcmVnaXN0ZXJfc2l6ZSBieXRlczogcmVn aXN0ZXIgdmFsdWUuDQo+PiAgICAgIHJlY29yZF9mdWxsX21lbToNCj4+ICAg ICAgICAxIGJ5dGU6ICByZWNvcmQgdHlwZSAocmVjb3JkX2Z1bGxfbWVtLCBz ZWUgZW51bSByZWNvcmRfZnVsbF90eXBlKS4NCj4+ICAgICAgICA4IGJ5dGVz OiBtZW1vcnkgbGVuZ3RoIChuZXR3b3JrIGJ5dGUgb3JkZXIpLg0KPiANCj4g VGhpcyBjb21tZW50IGlzIGFib3V0IGxvZyBmaWxlIGZvcm1hdCB2ZXJzaW9u IDEsIGJ1dCB3ZSBhcmUgdXNpbmcgdmVyc2lvbiAyLCBJSVVDLg0KPiBXZSBw cm9iYWJseSBuZWVkIHRvIHJlbW92ZSBhbGwgdGhlIGNvbW1lbnRzIGZvciB2 ZXJzaW9uIDEuDQo+IA0KDQpPaywgcmVtb3ZlZCBhbGwgb2YgVmVyc2lvbiAx IGZyb20gc2VjdGlvbi4NCg0KPiANCj4+IEBAIC0zMjcsNyArMzQxLDcgQEAg cmVnY2FjaGVfc2F2ZSAoc3RydWN0IHJlZ2NhY2hlICpkc3QsIHJlZ2NhY2hl X2Nvb2tlZF9yZWFkX2Z0eXBlICpjb29rZWRfcmVhZCwNCj4+IAkgICAgICAg dm9pZCAqc3JjKQ0KPj4gew0KPj4gICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJj aCA9IGRzdC0+ZGVzY3ItPmdkYmFyY2g7DQo+PiAtICBnZGJfYnl0ZSBidWZb TUFYX1JFR0lTVEVSX1NJWkVdOw0KPj4gKyAgc3RkOjp2ZWN0b3I8Z2RiX2J5 dGU+IGJ1ZiAobWF4X3JlZ2lzdGVyX3NpemUgKGdkYmFyY2gpKTsNCj4+ICAg aW50IHJlZ251bTsNCj4+IA0KPj4gICAvKiBUaGUgRFNUIHNob3VsZCBiZSBg cmVhZC1vbmx5JywgaWYgaXQgd2Fzbid0IHRoZW4gdGhlIHNhdmUgd291bGQN Cj4+IEBAIC0zNDYsMTAgKzM2MCwxMCBAQCByZWdjYWNoZV9zYXZlIChzdHJ1 Y3QgcmVnY2FjaGUgKmRzdCwgcmVnY2FjaGVfY29va2VkX3JlYWRfZnR5cGUg KmNvb2tlZF9yZWFkLA0KPj4gICAgIHsNCj4+ICAgICAgIGlmIChnZGJhcmNo X3JlZ2lzdGVyX3JlZ2dyb3VwX3AgKGdkYmFyY2gsIHJlZ251bSwgc2F2ZV9y ZWdncm91cCkpDQo+PiAJew0KPj4gLQkgIGVudW0gcmVnaXN0ZXJfc3RhdHVz IHN0YXR1cyA9IGNvb2tlZF9yZWFkIChzcmMsIHJlZ251bSwgYnVmKTsNCj4+ ICsJICBlbnVtIHJlZ2lzdGVyX3N0YXR1cyBzdGF0dXMgPSBjb29rZWRfcmVh ZCAoc3JjLCByZWdudW0sIGJ1Zi5kYXRhICgpKTsNCj4+IA0KPj4gCSAgaWYg KHN0YXR1cyA9PSBSRUdfVkFMSUQpDQo+PiAtCSAgICBtZW1jcHkgKHJlZ2lz dGVyX2J1ZmZlciAoZHN0LCByZWdudW0pLCBidWYsDQo+PiArCSAgICBtZW1j cHkgKHJlZ2lzdGVyX2J1ZmZlciAoZHN0LCByZWdudW0pLCBidWYuZGF0YSAo KSwNCj4+IAkJICAgIHJlZ2lzdGVyX3NpemUgKGdkYmFyY2gsIHJlZ251bSkp Ow0KPj4gCSAgZWxzZQ0KPj4gCSAgICB7DQo+IA0KPiBEaWQgeW91IHRyeSBy ZW1vdmluZyB2YXJpYWJsZSAnYnVmJz8gbGlrZSB0aGlzLA0KPiANCj4gIGVu dW0gcmVnaXN0ZXJfc3RhdHVzIHN0YXR1cyA9IGNvb2tlZF9yZWFkIChzcmMs IHJlZ251bSwgcmVnaXN0ZXJfYnVmZmVyIChkc3QsIHJlZ251bSkpOw0KPiAN Cj4gIGlmIChzdGF0dXMgIT0gUkVHX1ZBTElEKQ0KPiAgICB7DQo+ICAgICAg IGdkYl9hc3NlcnQgKHN0YXR1cyAhPSBSRUdfVU5LTk9XTik7DQo+IA0KPiAg ICAgIG1lbXNldCAocmVnaXN0ZXJfYnVmZmVyIChkc3QsIHJlZ251bSksIDAs DQo+IAkgICAgICByZWdpc3Rlcl9zaXplIChnZGJhcmNoLCByZWdudW0pKTsN Cj4gICAgfQ0KPiANCj4gSSBzdXBwb3NlIGZ1bmN0aW9uIGNvb2tlZF9yZWFk IHNob3VsZG4ndCBvdmVyZmxvdyB0aGUgYnVmZmVyIChpdHMgdGhpcmQNCj4g YXJndW1lbnQpLg0KDQpPay4NCg0KPiANCj4+IEBAIC0zNjksNyArMzgzLDcg QEAgcmVnY2FjaGVfcmVzdG9yZSAoc3RydWN0IHJlZ2NhY2hlICpkc3QsDQo+ PiAJCSAgdm9pZCAqY29va2VkX3JlYWRfY29udGV4dCkNCj4+IHsNCj4+ICAg c3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBkc3QtPmRlc2NyLT5nZGJhcmNo Ow0KPj4gLSAgZ2RiX2J5dGUgYnVmW01BWF9SRUdJU1RFUl9TSVpFXTsNCj4+ ICsgIHN0ZDo6dmVjdG9yPGdkYl9ieXRlPiBidWYgKG1heF9yZWdpc3Rlcl9z aXplIChnZGJhcmNoKSk7DQo+PiAgIGludCByZWdudW07DQo+PiANCj4+ICAg LyogVGhlIGRzdCBoYWQgYmV0dGVyIG5vdCBiZSByZWFkLW9ubHkuICBJZiBp dCBpcywgdGhlIGByZXN0b3JlJw0KPj4gQEAgLTM4NSw5ICszOTksOSBAQCBy ZWdjYWNoZV9yZXN0b3JlIChzdHJ1Y3QgcmVnY2FjaGUgKmRzdCwNCj4+IAl7 DQo+PiAJICBlbnVtIHJlZ2lzdGVyX3N0YXR1cyBzdGF0dXM7DQo+PiANCj4+ IC0JICBzdGF0dXMgPSBjb29rZWRfcmVhZCAoY29va2VkX3JlYWRfY29udGV4 dCwgcmVnbnVtLCBidWYpOw0KPj4gKwkgIHN0YXR1cyA9IGNvb2tlZF9yZWFk IChjb29rZWRfcmVhZF9jb250ZXh0LCByZWdudW0sIGJ1Zi5kYXRhICgpKTsN Cj4+IAkgIGlmIChzdGF0dXMgPT0gUkVHX1ZBTElEKQ0KPj4gLQkgICAgcmVn Y2FjaGVfY29va2VkX3dyaXRlIChkc3QsIHJlZ251bSwgYnVmKTsNCj4+ICsJ ICAgIHJlZ2NhY2hlX2Nvb2tlZF93cml0ZSAoZHN0LCByZWdudW0sIGJ1Zi5k YXRhICgpKTsNCj4+IAl9DQo+PiAgICAgfQ0KPj4gfQ0KPj4gQEAgLTEyNzks NyArMTI5Myw3IEBAIHJlZ2NhY2hlX2R1bXAgKHN0cnVjdCByZWdjYWNoZSAq cmVnY2FjaGUsIHN0cnVjdCB1aV9maWxlICpmaWxlLA0KPj4gICBpbnQgZm9v dG5vdGVfcmVnaXN0ZXJfb2Zmc2V0ID0gMDsNCj4+ICAgaW50IGZvb3Rub3Rl X3JlZ2lzdGVyX3R5cGVfbmFtZV9udWxsID0gMDsNCj4+ICAgbG9uZyByZWdp c3Rlcl9vZmZzZXQgPSAwOw0KPj4gLSAgZ2RiX2J5dGUgYnVmW01BWF9SRUdJ U1RFUl9TSVpFXTsNCj4+ICsgIHN0ZDo6dmVjdG9yPGdkYl9ieXRlPiBidWYg KG1heF9yZWdpc3Rlcl9zaXplIChnZGJhcmNoKSk7DQo+PiANCj4+ICNpZiAw DQo+PiAgIGZwcmludGZfdW5maWx0ZXJlZCAoZmlsZSwgIm5yX3Jhd19yZWdp c3RlcnMgJWRcbiIsDQo+PiBAQCAtMTQwNiw4ICsxNDIwLDggQEAgcmVnY2Fj aGVfZHVtcCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgc3RydWN0IHVp X2ZpbGUgKmZpbGUsDQo+PiAJICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZmls ZSwgIjx1bmF2YWlsYWJsZT4iKTsNCj4+IAkgIGVsc2UNCj4+IAkgICAgew0K Pj4gLQkgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHJlZ251 bSwgYnVmKTsNCj4+IC0JICAgICAgcHJpbnRfaGV4X2NoYXJzIChmaWxlLCBi dWYsDQo+PiArCSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwg cmVnbnVtLCBidWYuZGF0YSAoKSk7DQo+PiArCSAgICAgIHByaW50X2hleF9j aGFycyAoZmlsZSwgYnVmLmRhdGEgKCksDQo+IA0KPiBXZSBjYW4gZ2V0IHJl Z2lzdGVyIGNvbnRlbnRzIGJ1ZmZlciBieSByZWdpc3Rlcl9idWZmZXIgKHJl Z2NhY2hlLCByZWdudW0pLA0KPiBidXQgd2UgbmVlZCB0byBtYWtlIHN1cmUg dGhhdCByZWdjYWNoZSBpcyB1cC10by1kYXRlLg0KPiANCj4gUHJvYmFibHks IHdlIGNhbiBhZGQgYSBmdW5jdGlvbiwNCj4gDQo+IHZvaWQNCj4gcmVnY2Fj aGVfcmF3X3VwZGF0ZSAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50 IHJlZ251bSkNCj4gew0KPiAgICBpZiAoIXJlZ2NhY2hlLT5yZWFkb25seV9w DQo+ICAgICAgJiYgcmVnY2FjaGVfcmVnaXN0ZXJfc3RhdHVzIChyZWdjYWNo ZSwgcmVnbnVtKSA9PSBSRUdfVU5LTk9XTikNCj4gICAgew0KPiAgICAgIHN0 cnVjdCBjbGVhbnVwICpvbGRfY2hhaW4gPSBzYXZlX2luZmVyaW9yX3B0aWQg KCk7DQo+IA0KPiAgICAgIGluZmVyaW9yX3B0aWQgPSByZWdjYWNoZS0+cHRp ZDsNCj4gICAgICB0YXJnZXRfZmV0Y2hfcmVnaXN0ZXJzIChyZWdjYWNoZSwg cmVnbnVtKTsNCj4gICAgICBkb19jbGVhbnVwcyAob2xkX2NoYWluKTsNCj4g DQo+ICAgICAgLyogQSBudW1iZXIgb2YgdGFyZ2V0cyBjYW4ndCBhY2Nlc3Mg dGhlIHdob2xlIHNldCBvZiByYXcNCj4gCSByZWdpc3RlcnMgKGJlY2F1c2Ug dGhlIGRlYnVnIEFQSSBwcm92aWRlcyBubyBtZWFucyB0byBnZXQgYXQNCj4g CSB0aGVtKS4gICovDQo+ICAgICAgaWYgKHJlZ2NhY2hlLT5yZWdpc3Rlcl9z dGF0dXNbcmVnbnVtXSA9PSBSRUdfVU5LTk9XTikNCj4gCXJlZ2NhY2hlLT5y ZWdpc3Rlcl9zdGF0dXNbcmVnbnVtXSA9IFJFR19VTkFWQUlMQUJMRTsNCj4g ICAgfQ0KPiB9DQo+IA0KPiBpbiByZWdjYWNoZV9kdW1wLCB3ZSBjYW4gY2Fs bCByZWdjYWNoZV9yYXdfdXBkYXRlLCBhbmQgdGhlbiBnZXQNCj4gcmVnaXN0 ZXIgY29udGVudHMgZnJvbSByZWdpc3Rlcl9idWZmZXIgKHJlZ2NhY2hlLCBy ZWdudW0pLg0KDQpPay4NCg0KPiANCj4+IAkJCSAgICAgICByZWdjYWNoZS0+ ZGVzY3ItPnNpemVvZl9yZWdpc3RlcltyZWdudW1dLA0KPj4gCQkJICAgICAg IGdkYmFyY2hfYnl0ZV9vcmRlciAoZ2RiYXJjaCkpOw0KPiANCj4gDQo+PiAJ ICAgIH0NCj4+IEBAIC0xNDIyLDEzICsxNDM2LDEzIEBAIHJlZ2NhY2hlX2R1 bXAgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIHN0cnVjdCB1aV9maWxl ICpmaWxlLA0KPj4gCSAgICB7DQo+PiAJICAgICAgZW51bSByZWdpc3Rlcl9z dGF0dXMgc3RhdHVzOw0KPj4gDQo+PiAtCSAgICAgIHN0YXR1cyA9IHJlZ2Nh Y2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgcmVnbnVtLCBidWYpOw0KPj4g KwkgICAgICBzdGF0dXMgPSByZWdjYWNoZV9jb29rZWRfcmVhZCAocmVnY2Fj aGUsIHJlZ251bSwgYnVmLmRhdGEgKCkpOw0KPj4gCSAgICAgIGlmIChzdGF0 dXMgPT0gUkVHX1VOS05PV04pDQo+PiAJCWZwcmludGZfdW5maWx0ZXJlZCAo ZmlsZSwgIjxpbnZhbGlkPiIpOw0KPj4gCSAgICAgIGVsc2UgaWYgKHN0YXR1 cyA9PSBSRUdfVU5BVkFJTEFCTEUpDQo+PiAJCWZwcmludGZfdW5maWx0ZXJl ZCAoZmlsZSwgIjx1bmF2YWlsYWJsZT4iKTsNCj4+IAkgICAgICBlbHNlDQo+ PiAtCQlwcmludF9oZXhfY2hhcnMgKGZpbGUsIGJ1ZiwNCj4+ICsJCXByaW50 X2hleF9jaGFycyAoZmlsZSwgYnVmLmRhdGEgKCksDQo+PiAJCQkJIHJlZ2Nh Y2hlLT5kZXNjci0+c2l6ZW9mX3JlZ2lzdGVyW3JlZ251bV0sDQo+PiAJCQkJ IGdkYmFyY2hfYnl0ZV9vcmRlciAoZ2RiYXJjaCkpOw0KPj4gCSAgICB9DQo+ PiBkaWZmIC0tZ2l0IGEvZ2RiL3JlbW90ZS1zaW0uYyBiL2dkYi9yZW1vdGUt c2ltLmMNCj4+IGluZGV4IGIwYzY4YzYxN2UzNjVjMGVhMThhYzJlY2E1MjU1 OThiNjg4ZmZiYjUuLmM1YjFhNDgwYzUyZTEyYWYwMWRjMmQ2Yzk1OWZkNDI5 NzM1YmM4MDUgMTAwNjQ0DQo+PiAtLS0gYS9nZGIvcmVtb3RlLXNpbS5jDQo+ PiArKysgYi9nZGIvcmVtb3RlLXNpbS5jDQo+PiBAQCAtNDM5LDYgKzQzOSw5 IEBAIGdkYnNpbV9mZXRjaF9yZWdpc3RlciAoc3RydWN0IHRhcmdldF9vcHMg Km9wcywNCj4+ICAgICAgIHJldHVybjsNCj4+ICAgICB9DQo+PiANCj4+ICsg IGludCByZWdzaXplID0gcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwgcmVnbm8p Ow0KPj4gKyAgc3RkOjp2ZWN0b3I8Z2RiX2J5dGU+IGJ1ZiAocmVnc2l6ZSk7 DQo+PiArDQo+PiAgIHN3aXRjaCAoZ2RiYXJjaF9yZWdpc3Rlcl9zaW1fcmVn bm8gKGdkYmFyY2gsIHJlZ25vKSkNCj4+ICAgICB7DQo+PiAgICAgY2FzZSBM RUdBQ1lfU0lNX1JFR05PX0lHTk9SRToNCj4+IEBAIC00NDcsMTAgKzQ1MCw5 IEBAIGdkYnNpbV9mZXRjaF9yZWdpc3RlciAoc3RydWN0IHRhcmdldF9vcHMg Km9wcywNCj4+ICAgICAgIHsNCj4+IAkvKiBGb3IgbW9tZW50IHRyZWF0IGEg YGRvZXMgbm90IGV4aXN0JyByZWdpc3RlciB0aGUgc2FtZSB3YXkNCj4+IAkg ICBhcyBhbiBgYHVuYXZhaWxhYmxlJycgcmVnaXN0ZXIuICAqLw0KPj4gLQln ZGJfYnl0ZSBidWZbTUFYX1JFR0lTVEVSX1NJWkVdOw0KPj4gCWludCBucl9i eXRlczsNCj4+IA0KPj4gLQltZW1zZXQgKGJ1ZiwgMCwgTUFYX1JFR0lTVEVS X1NJWkUpOw0KPj4gKwltZW1zZXQgKGJ1ZiwgMCwgcmVnc2l6ZSk7DQo+IA0K PiBtZW1zZXQgdG8gc3RkOjp2ZWN0b3I/DQoNCkRvaCENCg0KPiANCj4+IAly ZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgcmVnbm8sIGJ1Zik7DQo+ PiAJYnJlYWs7DQo+PiAgICAgICB9DQo+PiBAQCAtNDU4LDE4ICs0NjAsMTcg QEAgZ2Ric2ltX2ZldGNoX3JlZ2lzdGVyIChzdHJ1Y3QgdGFyZ2V0X29wcyAq b3BzLA0KPj4gICAgIGRlZmF1bHQ6DQo+PiAgICAgICB7DQo+PiAJc3RhdGlj IGludCB3YXJuX3VzZXIgPSAxOw0KPj4gLQlnZGJfYnl0ZSBidWZbTUFYX1JF R0lTVEVSX1NJWkVdOw0KPj4gCWludCBucl9ieXRlczsNCj4+IA0KPj4gCWdk Yl9hc3NlcnQgKHJlZ25vID49IDAgJiYgcmVnbm8gPCBnZGJhcmNoX251bV9y ZWdzIChnZGJhcmNoKSk7DQo+PiAtCW1lbXNldCAoYnVmLCAwLCBNQVhfUkVH SVNURVJfU0laRSk7DQo+PiArCW1lbXNldCAoYnVmLCAwLCByZWdzaXplKTsN Cj4+IAlucl9ieXRlcyA9IHNpbV9mZXRjaF9yZWdpc3RlciAoc2ltX2RhdGEt PmdkYnNpbV9kZXNjLA0KPj4gCQkJCSAgICAgICBnZGJhcmNoX3JlZ2lzdGVy X3NpbV9yZWdubw0KPj4gCQkJCQkgKGdkYmFyY2gsIHJlZ25vKSwNCj4+IAkJ CQkgICAgICAgYnVmLA0KPiANCj4gJ2J1ZicgaXMgYSBzdGQ6OnZlY3Rvciwg c28gaG93IGRvZXMgaXQgY29tcGlsZT8NCg0KTG9va3MgbGlrZSByZW1vdGUt c2ltLmMgZG9lc27igJl0IGdldCBjb21wbGllZCBpbiBpZiB5b3UgZG9u4oCZ dCBzcGVjaWZ5IGEgc2ltIGF0IGNvbmZpZyB0aW1lLg0KSGFja2luZyB0aGUg bWFrZWZpbGUsIEkgY2FuIGdldCB0aGlzIHRvIGJ1aWxkLCBidXQgSSBkb27i gJl0IGhhdmUgYSBzaW0sIHNvIGNhbuKAmXQgbGluayB0aGUgY29kZS4NCkZp eGVkIHVwLg0KDQoNCj4gDQo+PiBkaWZmIC0tZ2l0IGEvZ2RiL3JlbW90ZS5j IGIvZ2RiL3JlbW90ZS5jDQo+PiBpbmRleCBjNGNlYzkxMGM0NGNmOTFjYzdm MzZiN2YyZDg3Y2RlM2Y0NmRlNDFlLi4xNTdhMWIxNzg5ZDJhMjQ4YzExZGNj NGVmZWJkOGNlNTRkYTgyMDQ1IDEwMDY0NA0KPj4gLS0tIGEvZ2RiL3JlbW90 ZS5jDQo+PiArKysgYi9nZGIvcmVtb3RlLmMNCj4+IEBAIC03NzU3LDkgKzc3 NTcsMTAgQEAgcmVtb3RlX2ZldGNoX3JlZ2lzdGVycyAoc3RydWN0IHRhcmdl dF9vcHMgKm9wcywNCj4+IHN0YXRpYyB2b2lkDQo+PiByZW1vdGVfcHJlcGFy ZV90b19zdG9yZSAoc3RydWN0IHRhcmdldF9vcHMgKnNlbGYsIHN0cnVjdCBy ZWdjYWNoZSAqcmVnY2FjaGUpDQo+PiB7DQo+PiArICBzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCA9IGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSk7DQo+ PiAgIHN0cnVjdCByZW1vdGVfYXJjaF9zdGF0ZSAqcnNhID0gZ2V0X3JlbW90 ZV9hcmNoX3N0YXRlICgpOw0KPj4gICBpbnQgaTsNCj4+IC0gIGdkYl9ieXRl IGJ1ZltNQVhfUkVHSVNURVJfU0laRV07DQo+PiArICBzdGQ6OnZlY3Rvcjxn ZGJfYnl0ZT4gYnVmIChtYXhfcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCkpOw0K Pj4gDQo+PiAgIC8qIE1ha2Ugc3VyZSB0aGUgZW50aXJlIHJlZ2lzdGVycyBh cnJheSBpcyB2YWxpZC4gICovDQo+PiAgIHN3aXRjaCAocGFja2V0X3N1cHBv cnQgKFBBQ0tFVF9QKSkNCj4+IEBAIC03NzY5LDcgKzc3NzAsNyBAQCByZW1v dGVfcHJlcGFyZV90b19zdG9yZSAoc3RydWN0IHRhcmdldF9vcHMgKnNlbGYs IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUpDQo+PiAgICAgICAvKiBNYWtl IHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgcmVnaXN0ZXJzIGFyZSBjYWNoZWQu ICAqLw0KPj4gICAgICAgZm9yIChpID0gMDsgaSA8IGdkYmFyY2hfbnVtX3Jl Z3MgKGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpOyBpKyspDQo+PiAJ aWYgKHJzYS0+cmVnc1tpXS5pbl9nX3BhY2tldCkNCj4+IC0JICByZWdjYWNo ZV9yYXdfcmVhZCAocmVnY2FjaGUsIHJzYS0+cmVnc1tpXS5yZWdudW0sIGJ1 Zik7DQo+PiArCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCByc2Et PnJlZ3NbaV0ucmVnbnVtLCBidWYuZGF0YSAoKSk7DQo+IA0KPiBVc2UgcmVn Y2FjaGVfcmF3X3VwZGF0ZS4NCg0KT2suDQoNCj4gDQo+PiAgICAgICBicmVh azsNCj4+ICAgICBjYXNlIFBBQ0tFVF9FTkFCTEU6DQo+PiAgICAgICBicmVh azsNCj4+IGRpZmYgLS1naXQgYS9nZGIvc29sLXRocmVhZC5jIGIvZ2RiL3Nv bC10aHJlYWQuYw0KPj4gaW5kZXggYTA5YTNhYjlhOGJjNTZmMzY3ZTNiYTE1 MzdmNTY3NGYwYTdmNDkxZi4uNWU3NDQzYTk3NjI0ZmJlYWU1YjY1Y2I1MzQ0 MDFlNjM3MTc1NTQyMyAxMDA2NDQNCj4+IC0tLSBhL2dkYi9zb2wtdGhyZWFk LmMNCj4+ICsrKyBiL2dkYi9zb2wtdGhyZWFkLmMNCj4+IEBAIC01MTQsNiAr NTE0LDcgQEAgc29sX3RocmVhZF9zdG9yZV9yZWdpc3RlcnMgKHN0cnVjdCB0 YXJnZXRfb3BzICpvcHMsDQo+PiAgIHRkX2Vycl9lIHZhbDsNCj4+ICAgcHJn cmVnc2V0X3QgZ3JlZ3NldDsNCj4+ICAgcHJmcHJlZ3NldF90IGZwcmVnc2V0 Ow0KPj4gKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfcmVnY2Fj aGVfYXJjaCAocmVnY2FjaGUpOw0KPj4gDQo+PiAgIGlmICghcHRpZF90aWRf cCAoaW5mZXJpb3JfcHRpZCkpDQo+PiAgICAgew0KPj4gQEAgLTUzNSwxMCAr NTM2LDEwIEBAIHNvbF90aHJlYWRfc3RvcmVfcmVnaXN0ZXJzIChzdHJ1Y3Qg dGFyZ2V0X29wcyAqb3BzLA0KPj4gICBpZiAocmVnbnVtICE9IC0xKQ0KPj4g ICAgIHsNCj4+ICAgICAgIC8qIE5vdCB3cml0aW5nIGFsbCB0aGUgcmVnaXN0 ZXJzLiAgKi8NCj4+IC0gICAgICBjaGFyIG9sZF92YWx1ZVtNQVhfUkVHSVNU RVJfU0laRV07DQo+PiArICAgICAgc3RkOjp2ZWN0b3I8Z2RiX2J5dGU+IG9s ZF92YWx1ZSAocmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwgcmVnbnVtKSk7DQo+ PiANCj4+ICAgICAgIC8qIFNhdmUgbmV3IHJlZ2lzdGVyIHZhbHVlLiAgKi8N Cj4+IC0gICAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIHJl Z251bSwgb2xkX3ZhbHVlKTsNCj4+ICsgICAgICByZWdjYWNoZV9yYXdfY29s bGVjdCAocmVnY2FjaGUsIHJlZ251bSwgb2xkX3ZhbHVlLmRhdGEgKCkpOw0K Pj4gDQo+PiAgICAgICB2YWwgPSBwX3RkX3Rocl9nZXRncmVncyAoJnRoYW5k bGUsIGdyZWdzZXQpOw0KPj4gICAgICAgaWYgKHZhbCAhPSBURF9PSykNCj4+ IEBAIC01NTAsNyArNTUxLDcgQEAgc29sX3RocmVhZF9zdG9yZV9yZWdpc3Rl cnMgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsDQo+PiAJICAgICAgIHRkX2Vy cl9zdHJpbmcgKHZhbCkpOw0KPj4gDQo+PiAgICAgICAvKiBSZXN0b3JlIG5l dyByZWdpc3RlciB2YWx1ZS4gICovDQo+PiAtICAgICAgcmVnY2FjaGVfcmF3 X3N1cHBseSAocmVnY2FjaGUsIHJlZ251bSwgb2xkX3ZhbHVlKTsNCj4+ICsg ICAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgcmVnbnVtLCBv bGRfdmFsdWUuZGF0YSAoKSk7DQo+IA0KPiBJIGRvbid0IHVuZGVyc3RhbmQg d2h5IHdlIGNvbGxlY3QgYWxsIHJlZ2lzdGVycyBhbmQgcmVzdG9yZSB0aGVt IGxhdGVyLg0KPiBXaWxsIHRha2UgYSBkZWVwZXIgbG9vay4NCg0KTG9va3Mg bGlrZSB0aGUgY29sbGVjdCBhbmQgc3VwcGx5IGFyZSBlbnRpcmVseSByZWR1 bmRhbnQhDQpwX3RkX3Rocl9nZXRncmVncyBhbmQgcF90ZF90aHJfZ2V0ZnBy ZWdzIGFyZSBzaW1wbGUgd3JpdGluZyBpbnRvIHRoZSBuZXdseSBjcmVhdGVk DQpncmVnc2V0L2ZwcmVnc2V0DQoNClRoZSBmdW5jdGlvbiBzaG91bGQgYmUg ZG9pbmc6DQoNCiogSWYgcmVnbnVtIGlzIGEgcmVhbCByZWdpc3RlciBudW1i ZXIgdGhlbjogcmVhZCBhbGwgcmVnaXN0ZXJzIGZyb20gT1MgaW50byBncmVn c2V0L2ZwcmVnc2V0LA0KICBjb3B5IHJlZ251bSBmcm9tIHJlY2FjaGUgaW50 byBzdHJ1Y3QsIHdyaXRlIHN0cnVjdCBiYWNrIHRvIE9TDQoqIElmIHJlZ251 bSBpcyAtMSB0aGVuOiBjb3B5IGFsbCByZWdpc3RlcnMgZnJvbSByZWdjYWNo ZSBpbnRvIGdyZWdzZXQvZnByZWdzZXQsIHdyaXRlIHN0cnVjdCB0byBPUy4N CiANCknigJlsbCByZW1vdmUgdGhlIGJvZ3VzIGNvZGUuDQoNCj4gDQo+PiAg ICAgfQ0KPj4gDQo+PiAgIGZpbGxfZ3JlZ3NldCAocmVnY2FjaGUsIChnZGJf Z3JlZ3NldF90ICopICZncmVnc2V0LCByZWdudW0pOw0KPj4gZGlmZiAtLWdp dCBhL2dkYi9zdGFjay5jIGIvZ2RiL3N0YWNrLmMNCj4+IGluZGV4IGUwMGUy OTcyY2YyMGJjNjM5MTdhZjE5Zjg2YmY1N2YxYzZiMGI1YjAuLjliODQ0MzVm ZTczYjlhZjliMTNmMDFjODE5Zjc3ZjgzYmJiNzExN2IgMTAwNjQ0DQo+PiAt LS0gYS9nZGIvc3RhY2suYw0KPj4gKysrIGIvZ2RiL3N0YWNrLmMNCj4+IEBA IC0xNjY3LDE2ICsxNjY3LDE2IEBAIGZyYW1lX2luZm8gKGNoYXIgKmFkZHJf ZXhwLCBpbnQgZnJvbV90dHkpDQo+PiAJICB7DQo+PiAJICAgIGVudW0gYmZk X2VuZGlhbiBieXRlX29yZGVyID0gZ2RiYXJjaF9ieXRlX29yZGVyIChnZGJh cmNoKTsNCj4+IAkgICAgaW50IHNwX3NpemUgPSByZWdpc3Rlcl9zaXplIChn ZGJhcmNoLCBnZGJhcmNoX3NwX3JlZ251bSAoZ2RiYXJjaCkpOw0KPj4gLQkg ICAgZ2RiX2J5dGUgdmFsdWVbTUFYX1JFR0lTVEVSX1NJWkVdOw0KPj4gKwkg ICAgc3RkOjp2ZWN0b3I8Z2RiX2J5dGU+IHZhbHVlIChzcF9zaXplKTsNCj4+ IAkgICAgQ09SRV9BRERSIHNwOw0KPj4gDQo+PiAJICAgIGZyYW1lX3JlZ2lz dGVyX3Vud2luZCAoZmksIGdkYmFyY2hfc3BfcmVnbnVtIChnZGJhcmNoKSwN Cj4+IAkJCQkgICAmb3B0aW1pemVkLCAmdW5hdmFpbGFibGUsICZsdmFsLCAm YWRkciwNCj4+IC0JCQkJICAgJnJlYWxudW0sIHZhbHVlKTsNCj4+ICsJCQkJ ICAgJnJlYWxudW0sIHZhbHVlLmRhdGEgKCkpOw0KPiANCj4gV2UgY2FuIHVz ZSBmcmFtZV91bndpbmRfcmVnaXN0ZXJfdmFsdWUuDQo+IA0KDQpPay4NCg0K Pj4gCSAgICAvKiBOT1RFOiBjYWduZXkvMjAwMy0wNS0yMjogVGhpcyBpcyBh c3N1bWluZyB0aGF0IHRoZQ0KPj4gICAgICAgICAgICAgICAgc3RhY2sgcG9p bnRlciB3YXMgcGFja2VkIGFzIGFuIHVuc2lnbmVkIGludGVnZXIuICBUaGF0 DQo+PiAgICAgICAgICAgICAgICBtYXkgb3IgbWF5IG5vdCBiZSB2YWxpZC4g ICovDQo+PiAtCSAgICBzcCA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAo dmFsdWUsIHNwX3NpemUsIGJ5dGVfb3JkZXIpOw0KPj4gKwkgICAgc3AgPSBl eHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKHZhbHVlLmRhdGEgKCksIHNwX3Np emUsIGJ5dGVfb3JkZXIpOw0KPj4gCSAgICBwcmludGZfZmlsdGVyZWQgKCIg UHJldmlvdXMgZnJhbWUncyBzcCBpcyAiKTsNCj4+IAkgICAgZnB1dHNfZmls dGVyZWQgKHBhZGRyZXNzIChnZGJhcmNoLCBzcCksIGdkYl9zdGRvdXQpOw0K Pj4gCSAgICBwcmludGZfZmlsdGVyZWQgKCJcbiIpOw0KPj4gZGlmZiAtLWdp dCBhL2dkYi90YXJnZXQuYyBiL2dkYi90YXJnZXQuYw0KPj4gaW5kZXggM2M0 MDlmMGY2MTkxNDEyMDVkZmRjYmJmOGU0NmEyNzc1ODVlZDY4My4uNTJiYjU5 MjU1ZmNiZGM3NGE2NzRlMDhmNmUxNjhiZTViNjI5NDgxOSAxMDA2NDQNCj4+ IC0tLSBhL2dkYi90YXJnZXQuYw0KPj4gKysrIGIvZ2RiL3RhcmdldC5jDQo+ PiBAQCAtMzU2NSwxNyArMzU2NSwxOCBAQCBkZWJ1Z19wcmludF9yZWdpc3Rl ciAoY29uc3QgY2hhciAqIGZ1bmMsDQo+PiAgICAgew0KPj4gICAgICAgZW51 bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3JkZXIg KGdkYmFyY2gpOw0KPj4gICAgICAgaW50IGksIHNpemUgPSByZWdpc3Rlcl9z aXplIChnZGJhcmNoLCByZWdubyk7DQo+PiAtICAgICAgZ2RiX2J5dGUgYnVm W01BWF9SRUdJU1RFUl9TSVpFXTsNCj4+ICsgICAgICBzdGQ6OnZlY3Rvcjxn ZGJfYnl0ZT4gYnVmIChzaXplKTsNCj4+IA0KPj4gLSAgICAgIHJlZ2NhY2hl X3Jhd19jb2xsZWN0IChyZWdjYWNoZSwgcmVnbm8sIGJ1Zik7DQo+PiArICAg ICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCByZWdubywgYnVm LmRhdGEgKCkpOw0KPj4gICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJf c3RkbG9nLCAiID0gIik7DQo+PiAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6 ZTsgaSsrKQ0KPj4gCXsNCj4+IC0JICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdk Yl9zdGRsb2csICIlMDJ4IiwgYnVmW2ldKTsNCj4+ICsJICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csICIlMDJ4IiwgYnVmLmRhdGEgKClbaV0p Ow0KPj4gCX0NCj4+ICAgICAgIGlmIChzaXplIDw9IHNpemVvZiAoTE9OR0VT VCkpDQo+PiAJew0KPj4gLQkgIFVMT05HRVNUIHZhbCA9IGV4dHJhY3RfdW5z aWduZWRfaW50ZWdlciAoYnVmLCBzaXplLCBieXRlX29yZGVyKTsNCj4+ICsJ ICBVTE9OR0VTVCB2YWwgPSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGJ1 Zi5kYXRhICgpLCBzaXplLA0KPj4gKwkJCQkJCSAgIGJ5dGVfb3JkZXIpOw0K Pj4gDQo+PiAJICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICIg JXMgJXMiLA0KPj4gCQkJICAgICAgY29yZV9hZGRyX3RvX3N0cmluZ19ueiAo dmFsKSwgcGxvbmdlc3QgKHZhbCkpOw0KPj4gDQo+PiANCj4gDQo+IFdlIGNh biBtb3ZlIGRlYnVnX3ByaW50X3JlZ2lzdGVyIHRvIHJlZ2NhY2hlLmMsIHNv IHRoYXQgd2UgY2FuIGFjY2Vzcw0KPiByZWdpc3Rlcl9idWZmZXIsIGFuZCBk b24ndCBuZWVkICdidWYnIGF0IGFsbC4NCj4gDQoNCk9rLg0KDQo+IC0tIA0K PiBZYW8gKOm9kOWwpykNCg0KDQpOZXcgdmVyc2lvbiBvZiB0aGUgcGF0Y2gg d2l0aCBhbGwgdGhlIGNoYW5nZXMgYWJvdmUuDQoNCkFsYW4uDQoNCg0KMjAx Ny0wMi0wNyAgQWxhbiBIYXl3YXJkICA8YWxhbi5oYXl3YXJkQGFybS5jb20+ DQoNCgkqIGZyYW1lLmMgKGZyYW1lX3Vud2luZF9yZWdpc3Rlcl9zaWduZWQp OiBVc2UgTE9OR0VTVCBmb3Igc2l6ZS4NCgkoZnJhbWVfdW53aW5kX3JlZ2lz dGVyX3Vuc2lnbmVkKTogVXNlIFVMT05HRVNUIGZvciBzaXplLg0KCShnZXRf ZnJhbWVfcmVnaXN0ZXJfYnl0ZXMpOiBVbndpbmQgcmVnaXN0ZXIuDQoJKHB1 dF9mcmFtZV9yZWdpc3Rlcl9ieXRlcyk6IExpa2V3aXNlLg0KCSogaTM4Ni10 ZGVwLmMgKGkzODZfcHNldWRvX3JlZ2lzdGVyX3JlYWRfaW50b192YWx1ZSk6 IFVzZQ0KCUkzODZfTUFYX1JFR0lTVEVSX1NJWkUuDQoJKGkzODZfcHNldWRv X3JlZ2lzdGVyX3dyaXRlKTogTGlrZXdpc2UuDQoJKGkzODZfcHJvY2Vzc19y ZWNvcmQpOiBMaWtld2lzZS4NCgkqIGkzODctdGRlcC5jIChpMzg3X3N1cHBs eV94c2F2ZSk6IExpa2V3aXNlLg0KCSogbTY4ay1saW51eC1uYXQuYyAoZmV0 Y2hfcmVnaXN0ZXIpOiBVc2UgTTY4S19NQVhfUkVHSVNURVJfU0laRS4NCgko c3RvcmVfcmVnaXN0ZXIpOiBMaWtld2lzZS4NCgkqIG1pL21pLW1haW4uYyAo cmVnaXN0ZXJfY2hhbmdlZF9wKTogVXNlIHN0ZDo6dmVjdG9yLg0KCSogcmVj b3JkLWZ1bGwuYyAocmVjb3JkX2Z1bGxfZXhlY19pbnNuKTogTGlrZXdpc2Uu DQoJKHJlY29yZF9mdWxsX2NvcmVfb3Blbl8xKTogVXNlIG1heF9yZWdpc3Rl cl9zaXplICgpLg0KCShyZWNvcmRfZnVsbF9jb3JlX2ZldGNoX3JlZ2lzdGVy cyk6IExpa2V3aXNlLg0KCShyZWNvcmRfZnVsbF9jb3JlX3N0b3JlX3JlZ2lz dGVycyk6IExpa2V3aXNlLg0KCShpbml0X3JlY29yZF9mdWxsX2NvcmVfb3Bz KTogTGlrZXdpc2UuDQoJKiByZW1vdGUtc2ltLmMgKGdkYnNpbV9mZXRjaF9y ZWdpc3Rlcik6IExpa2V3aXNlLg0KCShnZGJzaW1fc3RvcmVfcmVnaXN0ZXIp OiBMaWtld2lzZS4NCgkqIHJlZ2NhY2hlLmMgKHN0cnVjdCByZWdjYWNoZV9k ZXNjcik6IEFkZCBtYXhfcmVnaXN0ZXJfc2l6ZS4NCgkobWF4X3JlZ2lzdGVy X3NpemUpOiBOZXcuDQoJKGluaXRfcmVnY2FjaGVfZGVzY3IpOiBGaW5kIG1h eCByZWdpc3RlciBzaXplLg0KCShyZWdjYWNoZV9zYXZlKTogVXNlIHN0ZDo6 dmVjdG9yLg0KCShyZWdjYWNoZV9yZXN0b3JlKTogTGlrZXdpc2UuDQoJKHJl Z2NhY2hlX3Jhd191cGRhdGUpOiBOZXcgZnVuY3Rpb24uDQoJKHJlZ2NhY2hl X3Jhd19yZWFkKTogTW92ZSBjaGVja3MgdG8gcmVnY2FjaGVfcmF3X3VwZGF0 ZS4NCgkocmVnY2FjaGVfZGVidWdfcHJpbnRfcmVnaXN0ZXIpOiBOZXcgZnVu Y3Rpb24uDQoJKHJlZ2NhY2hlX2R1bXApOiBDYWxsIHJlZ2NhY2hlX3Jhd191 cGRhdGUuIFVzZSBzdGQ6OnZlY3Rvci4NCgkqIHJlZ2NhY2hlLmggKG1heF9y ZWdpc3Rlcl9zaXplKTogTmV3Lg0KCShyZWdjYWNoZV9yYXdfdXBkYXRlKTog TmV3IGRlY2xhcmF0aW9uLg0KCShyZWdjYWNoZV9kZWJ1Z19wcmludF9yZWdp c3Rlcik6IE5ldyBkZWNsYXJhdGlvbi4NCgkqIHJlbW90ZS5jIChyZW1vdGVf cHJlcGFyZV90b19zdG9yZSk6IENhbGwgcmVnY2FjaGVfcmF3X3VwZGF0ZS4N CgkqIHNvbC10aHJlYWQuYyAoc29sX3RocmVhZF9zdG9yZV9yZWdpc3RlcnMp OiBSZW1vdmUgc3VwZXJmbHVvdXMgY29kZS4NCgkqIHN0YWNrLmMgKGZyYW1l X2luZm8pOiBVbndpbmQgc3AgcmVnaXN0ZXIuDQoJKiB0YXJnZXQuYyAoZGVi dWdfcHJpbnRfcmVnaXN0ZXIpOiBNb3ZlIHRvIHJlZ2NhY2hlLmMNCgkodGFy Z2V0X2ZldGNoX3JlZ2lzdGVycyk6IENhbGwgcmVnY2FjaGVfZGVidWdfcHJp bnRfcmVnaXN0ZXIuDQoJKHRhcmdldF9zdG9yZV9yZWdpc3RlcnMpOiBMaWtl d2lzZS4NCg0KDQoNCmRpZmYgLS1naXQgYS9nZGIvZnJhbWUuYyBiL2dkYi9m cmFtZS5jDQppbmRleCBkOTgwMDNkZWU3YzM0YTYzYmQyNTM1NmU2Njc0NzIx NjY0YTRiMmYzLi4yMmNmZGVhNGJjYjIwNTgyMjI5ZmZjMzYwZWFkMDYwYzQz ZDdjZDgxIDEwMDY0NA0KLS0tIGEvZ2RiL2ZyYW1lLmMNCisrKyBiL2dkYi9m cmFtZS5jDQpAQCAtMTI1Miw3ICsxMjUyLDExIEBAIGZyYW1lX3Vud2luZF9y ZWdpc3Rlcl9zaWduZWQgKHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSwgaW50 IHJlZ251bSkNCiAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZnJhbWVf dW53aW5kX2FyY2ggKGZyYW1lKTsNCiAgIGVudW0gYmZkX2VuZGlhbiBieXRl X29yZGVyID0gZ2RiYXJjaF9ieXRlX29yZGVyIChnZGJhcmNoKTsNCiAgIGlu dCBzaXplID0gcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwgcmVnbnVtKTsNCi0g IGdkYl9ieXRlIGJ1ZltNQVhfUkVHSVNURVJfU0laRV07DQorICBnZGJfYnl0 ZSBidWZbc2l6ZW9mIChMT05HRVNUKV07DQorDQorICBpZiAoc2l6ZSA+IChp bnQpIHNpemVvZiAoTE9OR0VTVCkpDQorICAgIGVycm9yIChfKCJDYW5ub3Qg dW53aW5kIGludGVnZXJzIG1vcmUgdGhhbiAlZCBieXRlcy4iKSwNCisJICAg KGludCkgc2l6ZW9mIChMT05HRVNUKSk7DQoNCiAgIGZyYW1lX3Vud2luZF9y ZWdpc3RlciAoZnJhbWUsIHJlZ251bSwgYnVmKTsNCiAgIHJldHVybiBleHRy YWN0X3NpZ25lZF9pbnRlZ2VyIChidWYsIHNpemUsIGJ5dGVfb3JkZXIpOw0K QEAgLTEyNzAsNyArMTI3NCwxMSBAQCBmcmFtZV91bndpbmRfcmVnaXN0ZXJf dW5zaWduZWQgKHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSwgaW50IHJlZ251 bSkNCiAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZnJhbWVfdW53aW5k X2FyY2ggKGZyYW1lKTsNCiAgIGVudW0gYmZkX2VuZGlhbiBieXRlX29yZGVy ID0gZ2RiYXJjaF9ieXRlX29yZGVyIChnZGJhcmNoKTsNCiAgIGludCBzaXpl ID0gcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwgcmVnbnVtKTsNCi0gIGdkYl9i eXRlIGJ1ZltNQVhfUkVHSVNURVJfU0laRV07DQorICBnZGJfYnl0ZSBidWZb c2l6ZW9mIChVTE9OR0VTVCldOw0KKw0KKyAgaWYgKHNpemUgPiAoaW50KSBz aXplb2YgKFVMT05HRVNUKSkNCisgICAgZXJyb3IgKF8oIkNhbm5vdCB1bndp bmQgaW50ZWdlcnMgbW9yZSB0aGFuICVkIGJ5dGVzLiIpLA0KKwkgICAoaW50 KSBzaXplb2YgKFVMT05HRVNUKSk7DQoNCiAgIGZyYW1lX3Vud2luZF9yZWdp c3RlciAoZnJhbWUsIHJlZ251bSwgYnVmKTsNCiAgIHJldHVybiBleHRyYWN0 X3Vuc2lnbmVkX2ludGVnZXIgKGJ1Ziwgc2l6ZSwgYnl0ZV9vcmRlcik7DQpA QCAtMTQxMCwxNiArMTQxOCwyMSBAQCBnZXRfZnJhbWVfcmVnaXN0ZXJfYnl0 ZXMgKHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSwgaW50IHJlZ251bSwNCiAJ fQ0KICAgICAgIGVsc2UNCiAJew0KLQkgIGdkYl9ieXRlIGJ1ZltNQVhfUkVH SVNURVJfU0laRV07DQotCSAgZW51bSBsdmFsX3R5cGUgbHZhbDsNCi0JICBD T1JFX0FERFIgYWRkcjsNCi0JICBpbnQgcmVhbG51bTsNCisJICBzdHJ1Y3Qg dmFsdWUgKnZhbHVlID0gZnJhbWVfdW53aW5kX3JlZ2lzdGVyX3ZhbHVlIChm cmFtZS0+bmV4dCwNCisJCQkJCQkJICAgICByZWdudW0pOw0KKwkgIGdkYl9h c3NlcnQgKHZhbHVlICE9IE5VTEwpOw0KKwkgICpvcHRpbWl6ZWRwID0gdmFs dWVfb3B0aW1pemVkX291dCAodmFsdWUpOw0KKwkgICp1bmF2YWlsYWJsZXAg PSAhdmFsdWVfZW50aXJlbHlfYXZhaWxhYmxlICh2YWx1ZSk7DQoNCi0JICBm cmFtZV9yZWdpc3RlciAoZnJhbWUsIHJlZ251bSwgb3B0aW1pemVkcCwgdW5h dmFpbGFibGVwLA0KLQkJCSAgJmx2YWwsICZhZGRyLCAmcmVhbG51bSwgYnVm KTsNCiAJICBpZiAoKm9wdGltaXplZHAgfHwgKnVuYXZhaWxhYmxlcCkNCi0J ICAgIHJldHVybiAwOw0KLQkgIG1lbWNweSAobXlhZGRyLCBidWYgKyBvZmZz ZXQsIGN1cnJfbGVuKTsNCisJICAgIHsNCisJICAgICAgcmVsZWFzZV92YWx1 ZSAodmFsdWUpOw0KKwkgICAgICB2YWx1ZV9mcmVlICh2YWx1ZSk7DQorCSAg ICAgIHJldHVybiAwOw0KKwkgICAgfQ0KKwkgIG1lbWNweSAobXlhZGRyLCB2 YWx1ZV9jb250ZW50c19hbGwgKHZhbHVlKSArIG9mZnNldCwgY3Vycl9sZW4p Ow0KKwkgIHJlbGVhc2VfdmFsdWUgKHZhbHVlKTsNCisJICB2YWx1ZV9mcmVl ICh2YWx1ZSk7DQogCX0NCg0KICAgICAgIG15YWRkciArPSBjdXJyX2xlbjsN CkBAIC0xNDYwLDExICsxNDczLDE1IEBAIHB1dF9mcmFtZV9yZWdpc3Rlcl9i eXRlcyAoc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lLCBpbnQgcmVnbnVtLA0K IAl9DQogICAgICAgZWxzZQ0KIAl7DQotCSAgZ2RiX2J5dGUgYnVmW01BWF9S RUdJU1RFUl9TSVpFXTsNCi0NCi0JICBkZXByZWNhdGVkX2ZyYW1lX3JlZ2lz dGVyX3JlYWQgKGZyYW1lLCByZWdudW0sIGJ1Zik7DQotCSAgbWVtY3B5IChi dWYgKyBvZmZzZXQsIG15YWRkciwgY3Vycl9sZW4pOw0KLQkgIHB1dF9mcmFt ZV9yZWdpc3RlciAoZnJhbWUsIHJlZ251bSwgYnVmKTsNCisJICBzdHJ1Y3Qg dmFsdWUgKnZhbHVlID0gZnJhbWVfdW53aW5kX3JlZ2lzdGVyX3ZhbHVlIChm cmFtZS0+bmV4dCwNCisJCQkJCQkJICAgICByZWdudW0pOw0KKwkgIGdkYl9h c3NlcnQgKHZhbHVlICE9IE5VTEwpOw0KKw0KKwkgIG1lbWNweSAoKGNoYXIg KikgdmFsdWVfY29udGVudHNfYWxsICh2YWx1ZSkgKyBvZmZzZXQsIG15YWRk ciwNCisJCSAgY3Vycl9sZW4pOw0KKwkgIHB1dF9mcmFtZV9yZWdpc3RlciAo ZnJhbWUsIHJlZ251bSwgdmFsdWVfY29udGVudHNfYWxsICh2YWx1ZSkpOw0K KwkgIHJlbGVhc2VfdmFsdWUgKHZhbHVlKTsNCisJICB2YWx1ZV9mcmVlICh2 YWx1ZSk7DQogCX0NCg0KICAgICAgIG15YWRkciArPSBjdXJyX2xlbjsNCmRp ZmYgLS1naXQgYS9nZGIvaTM4Ni10ZGVwLmMgYi9nZGIvaTM4Ni10ZGVwLmMN CmluZGV4IDhhNGQ1OWY2ZmRhZThlYzc4NTQ2MmQwY2VlZGNkNjUwMWI5NTVj ZjAuLjA4MWExNmM2ODk2Y2U3YWVlNGRiM2IwYmU0NWZiYmRkMmMyM2RiZGIg MTAwNjQ0DQotLS0gYS9nZGIvaTM4Ni10ZGVwLmMNCisrKyBiL2dkYi9pMzg2 LXRkZXAuYw0KQEAgLTMyNTAsNyArMzI1MCw3IEBAIGkzODZfcHNldWRvX3Jl Z2lzdGVyX3JlYWRfaW50b192YWx1ZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFy Y2gsDQogCQkJCSAgICAgIGludCByZWdudW0sDQogCQkJCSAgICAgIHN0cnVj dCB2YWx1ZSAqcmVzdWx0X3ZhbHVlKQ0KIHsNCi0gIGdkYl9ieXRlIHJhd19i dWZbTUFYX1JFR0lTVEVSX1NJWkVdOw0KKyAgZ2RiX2J5dGUgcmF3X2J1ZltJ Mzg2X01BWF9SRUdJU1RFUl9TSVpFXTsNCiAgIGVudW0gcmVnaXN0ZXJfc3Rh dHVzIHN0YXR1czsNCiAgIGdkYl9ieXRlICpidWYgPSB2YWx1ZV9jb250ZW50 c19yYXcgKHJlc3VsdF92YWx1ZSk7DQoNCkBAIC0zNDU1LDcgKzM0NTUsNyBA QCB2b2lkDQogaTM4Nl9wc2V1ZG9fcmVnaXN0ZXJfd3JpdGUgKHN0cnVjdCBn ZGJhcmNoICpnZGJhcmNoLCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0K IAkJCSAgICBpbnQgcmVnbnVtLCBjb25zdCBnZGJfYnl0ZSAqYnVmKQ0KIHsN Ci0gIGdkYl9ieXRlIHJhd19idWZbTUFYX1JFR0lTVEVSX1NJWkVdOw0KKyAg Z2RiX2J5dGUgcmF3X2J1ZltJMzg2X01BWF9SRUdJU1RFUl9TSVpFXTsNCg0K ICAgaWYgKGkzODZfbW14X3JlZ251bV9wIChnZGJhcmNoLCByZWdudW0pKQ0K ICAgICB7DQpAQCAtNTAzNyw3ICs1MDM3LDcgQEAgaTM4Nl9wcm9jZXNzX3Jl Y29yZCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCByZWdjYWNo ZSAqcmVnY2FjaGUsDQogICB1aW50MzJfdCBvcGNvZGU7DQogICB1aW50OF90 IG9wY29kZTg7DQogICBVTE9OR0VTVCBhZGRyOw0KLSAgZ2RiX2J5dGUgYnVm W01BWF9SRUdJU1RFUl9TSVpFXTsNCisgIGdkYl9ieXRlIGJ1ZltJMzg2X01B WF9SRUdJU1RFUl9TSVpFXTsNCiAgIHN0cnVjdCBpMzg2X3JlY29yZF9zIGly Ow0KICAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRl cCAoZ2RiYXJjaCk7DQogICB1aW50OF90IHJleF93ID0gLTE7DQpkaWZmIC0t Z2l0IGEvZ2RiL2kzODctdGRlcC5jIGIvZ2RiL2kzODctdGRlcC5jDQppbmRl eCBhZGJlNzIxMzMwODliYzM3MTEwOGQ1ZGQ3OWJmOGQ4ZTYxYmEyNTljLi5m Y2Q1YWQyNDhkNmI3MzdiOWYyN2UyOTRjZTE2NmExMThlNGJkY2FkIDEwMDY0 NA0KLS0tIGEvZ2RiL2kzODctdGRlcC5jDQorKysgYi9nZGIvaTM4Ny10ZGVw LmMNCkBAIC04OTksNyArODk5LDcgQEAgaTM4N19zdXBwbHlfeHNhdmUgKHN0 cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdudW0sDQogICBjb25z dCBnZGJfYnl0ZSAqcmVncyA9IChjb25zdCBnZGJfYnl0ZSAqKSB4c2F2ZTsN CiAgIGludCBpOw0KICAgdW5zaWduZWQgaW50IGNsZWFyX2J2Ow0KLSAgc3Rh dGljIGNvbnN0IGdkYl9ieXRlIHplcm9bTUFYX1JFR0lTVEVSX1NJWkVdID0g eyAwIH07DQorICBzdGF0aWMgY29uc3QgZ2RiX2J5dGUgemVyb1tJMzg2X01B WF9SRUdJU1RFUl9TSVpFXSA9IHsgMCB9Ow0KICAgZW51bQ0KICAgICB7DQog ICAgICAgbm9uZSA9IDB4MCwNCmRpZmYgLS1naXQgYS9nZGIvbTY4ay1saW51 eC1uYXQuYyBiL2dkYi9tNjhrLWxpbnV4LW5hdC5jDQppbmRleCA2OTQ0Yzc0 ZWIxOTgzODExMzVmZGEzZGRmMDFiOWRhM2E2M2U2MmQ1Li5lNTE4MmNhZjM5 MTk3Zjc1OWM4NWMyMzIxZTRkNjZjNDI4ZjU5MTFlIDEwMDY0NA0KLS0tIGEv Z2RiL202OGstbGludXgtbmF0LmMNCisrKyBiL2dkYi9tNjhrLWxpbnV4LW5h dC5jDQpAQCAtMTA1LDcgKzEwNSw3IEBAIGZldGNoX3JlZ2lzdGVyIChzdHJ1 Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8pDQogICBzdHJ1Y3Qg Z2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNo ZSk7DQogICBsb25nIHJlZ2FkZHIsIHZhbDsNCiAgIGludCBpOw0KLSAgZ2Ri X2J5dGUgYnVmW01BWF9SRUdJU1RFUl9TSVpFXTsNCisgIGdkYl9ieXRlIGJ1 ZltNNjhLX01BWF9SRUdJU1RFUl9TSVpFXTsNCiAgIGludCB0aWQ7DQoNCiAg IC8qIE92ZXJsb2FkIHRocmVhZCBpZCBvbnRvIHByb2Nlc3MgaWQuICAqLw0K QEAgLTE2MCw3ICsxNjAsNyBAQCBzdG9yZV9yZWdpc3RlciAoY29uc3Qgc3Ry dWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25vKQ0KICAgbG9uZyBy ZWdhZGRyLCB2YWw7DQogICBpbnQgaTsNCiAgIGludCB0aWQ7DQotICBnZGJf Ynl0ZSBidWZbTUFYX1JFR0lTVEVSX1NJWkVdOw0KKyAgZ2RiX2J5dGUgYnVm W002OEtfTUFYX1JFR0lTVEVSX1NJWkVdOw0KDQogICAvKiBPdmVybG9hZCB0 aHJlYWQgaWQgb250byBwcm9jZXNzIGlkLiAgKi8NCiAgIHRpZCA9IHB0aWRf Z2V0X2x3cCAoaW5mZXJpb3JfcHRpZCk7DQpkaWZmIC0tZ2l0IGEvZ2RiL21p L21pLW1haW4uYyBiL2dkYi9taS9taS1tYWluLmMNCmluZGV4IDU3YzIzZWJm NWQ2YjJkM2IzOThhYTQwZWJkOWIzY2I3MGM1NjEyNWMuLjExNzAyYzZjMDZj NWNkNzkxZTAzZDk5ZDU2ZWY5M2QyYzIzNDg2MmIgMTAwNjQ0DQotLS0gYS9n ZGIvbWkvbWktbWFpbi5jDQorKysgYi9nZGIvbWkvbWktbWFpbi5jDQpAQCAt MTEzNSw4ICsxMTM1LDggQEAgcmVnaXN0ZXJfY2hhbmdlZF9wIChpbnQgcmVn bnVtLCBzdHJ1Y3QgcmVnY2FjaGUgKnByZXZfcmVncywNCiAJCSAgICBzdHJ1 Y3QgcmVnY2FjaGUgKnRoaXNfcmVncykNCiB7DQogICBzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCA9IGdldF9yZWdjYWNoZV9hcmNoICh0aGlzX3JlZ3MpOw0K LSAgZ2RiX2J5dGUgcHJldl9idWZmZXJbTUFYX1JFR0lTVEVSX1NJWkVdOw0K LSAgZ2RiX2J5dGUgdGhpc19idWZmZXJbTUFYX1JFR0lTVEVSX1NJWkVdOw0K KyAgc3RkOjp2ZWN0b3I8Z2RiX2J5dGU+IHByZXZfYnVmZmVyIChyZWdpc3Rl cl9zaXplIChnZGJhcmNoLCByZWdudW0pKTsNCisgIHN0ZDo6dmVjdG9yPGdk Yl9ieXRlPiB0aGlzX2J1ZmZlciAocmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwg cmVnbnVtKSk7DQogICBlbnVtIHJlZ2lzdGVyX3N0YXR1cyBwcmV2X3N0YXR1 czsNCiAgIGVudW0gcmVnaXN0ZXJfc3RhdHVzIHRoaXNfc3RhdHVzOw0KDQpA QCAtMTE0NiwxMyArMTE0NiwxMyBAQCByZWdpc3Rlcl9jaGFuZ2VkX3AgKGlu dCByZWdudW0sIHN0cnVjdCByZWdjYWNoZSAqcHJldl9yZWdzLA0KICAgICBy ZXR1cm4gMTsNCg0KICAgLyogR2V0IHJlZ2lzdGVyIGNvbnRlbnRzIGFuZCBj b21wYXJlLiAgKi8NCi0gIHByZXZfc3RhdHVzID0gcmVnY2FjaGVfY29va2Vk X3JlYWQgKHByZXZfcmVncywgcmVnbnVtLCBwcmV2X2J1ZmZlcik7DQotICB0 aGlzX3N0YXR1cyA9IHJlZ2NhY2hlX2Nvb2tlZF9yZWFkICh0aGlzX3JlZ3Ms IHJlZ251bSwgdGhpc19idWZmZXIpOw0KKyAgcHJldl9zdGF0dXMgPSByZWdj YWNoZV9jb29rZWRfcmVhZCAocHJldl9yZWdzLCByZWdudW0sIHByZXZfYnVm ZmVyLmRhdGEgKCkpOw0KKyAgdGhpc19zdGF0dXMgPSByZWdjYWNoZV9jb29r ZWRfcmVhZCAodGhpc19yZWdzLCByZWdudW0sIHRoaXNfYnVmZmVyLmRhdGEg KCkpOw0KDQogICBpZiAodGhpc19zdGF0dXMgIT0gcHJldl9zdGF0dXMpDQog ICAgIHJldHVybiAxOw0KICAgZWxzZSBpZiAodGhpc19zdGF0dXMgPT0gUkVH X1ZBTElEKQ0KLSAgICByZXR1cm4gbWVtY21wIChwcmV2X2J1ZmZlciwgdGhp c19idWZmZXIsDQorICAgIHJldHVybiBtZW1jbXAgKHByZXZfYnVmZmVyLmRh dGEgKCksIHRoaXNfYnVmZmVyLmRhdGEgKCksDQogCQkgICByZWdpc3Rlcl9z aXplIChnZGJhcmNoLCByZWdudW0pKSAhPSAwOw0KICAgZWxzZQ0KICAgICBy ZXR1cm4gMDsNCmRpZmYgLS1naXQgYS9nZGIvcmVjb3JkLWZ1bGwuYyBiL2dk Yi9yZWNvcmQtZnVsbC5jDQppbmRleCBmZGQ2MTNiNmU0MWJiZmNkODY0NGIw MmNjZmViOThiNTNiNTE4YmZmLi5hZGE4NmNmNjcyNjE3NmQ5M2Y2MWQ4NWVm NjcyOTBiY2E0NmM1YjFhIDEwMDY0NA0KLS0tIGEvZ2RiL3JlY29yZC1mdWxs LmMNCisrKyBiL2dkYi9yZWNvcmQtZnVsbC5jDQpAQCAtNjk4LDcgKzY5OCw3 IEBAIHJlY29yZF9mdWxsX2V4ZWNfaW5zbiAoc3RydWN0IHJlZ2NhY2hlICpy ZWdjYWNoZSwNCiAgICAgew0KICAgICBjYXNlIHJlY29yZF9mdWxsX3JlZzog LyogcmVnICovDQogICAgICAgew0KLSAgICAgICAgZ2RiX2J5dGUgcmVnW01B WF9SRUdJU1RFUl9TSVpFXTsNCisJc3RkOjp2ZWN0b3I8Z2RiX2J5dGU+IHJl ZyAocmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwgZW50cnktPnUucmVnLm51bSkp Ow0KDQogICAgICAgICBpZiAocmVjb3JkX2RlYnVnID4gMSkNCiAgICAgICAg ICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLA0KQEAgLTcwNywx MCArNzA3LDEwIEBAIHJlY29yZF9mdWxsX2V4ZWNfaW5zbiAoc3RydWN0IHJl Z2NhY2hlICpyZWdjYWNoZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBob3N0X2FkZHJlc3NfdG9fc3RyaW5nIChlbnRyeSksDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnUucmVnLm51bSk7DQoN Ci0gICAgICAgIHJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgZW50 cnktPnUucmVnLm51bSwgcmVnKTsNCi0gICAgICAgIHJlZ2NhY2hlX2Nvb2tl ZF93cml0ZSAocmVnY2FjaGUsIGVudHJ5LT51LnJlZy5udW0sDQorCXJlZ2Nh Y2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgZW50cnktPnUucmVnLm51bSwg cmVnLmRhdGEgKCkpOw0KKwlyZWdjYWNoZV9jb29rZWRfd3JpdGUgKHJlZ2Nh Y2hlLCBlbnRyeS0+dS5yZWcubnVtLA0KIAkJCSAgICAgICByZWNvcmRfZnVs bF9nZXRfbG9jIChlbnRyeSkpOw0KLSAgICAgICAgbWVtY3B5IChyZWNvcmRf ZnVsbF9nZXRfbG9jIChlbnRyeSksIHJlZywgZW50cnktPnUucmVnLmxlbik7 DQorCW1lbWNweSAocmVjb3JkX2Z1bGxfZ2V0X2xvYyAoZW50cnkpLCByZWcu ZGF0YSAoKSwgZW50cnktPnUucmVnLmxlbik7DQogICAgICAgfQ0KICAgICAg IGJyZWFrOw0KDQpAQCAtNzkyLDE1ICs3OTIsMTcgQEAgc3RhdGljIHZvaWQN CiByZWNvcmRfZnVsbF9jb3JlX29wZW5fMSAoY29uc3QgY2hhciAqbmFtZSwg aW50IGZyb21fdHR5KQ0KIHsNCiAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2Fj aGUgPSBnZXRfY3VycmVudF9yZWdjYWNoZSAoKTsNCi0gIGludCByZWdudW0g PSBnZGJhcmNoX251bV9yZWdzIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2Fj aGUpKTsNCisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X3JlZ2Nh Y2hlX2FyY2ggKHJlZ2NhY2hlKTsNCisgIGludCByZWdudW0gPSBnZGJhcmNo X251bV9yZWdzIChnZGJhcmNoKTsNCisgIGludCByZWdtYXhzaXplID0gbWF4 X3JlZ2lzdGVyX3NpemUgKGdkYmFyY2gpOw0KICAgaW50IGk7DQoNCiAgIC8q IEdldCByZWNvcmRfZnVsbF9jb3JlX3JlZ2J1Zi4gICovDQogICB0YXJnZXRf ZmV0Y2hfcmVnaXN0ZXJzIChyZWdjYWNoZSwgLTEpOw0KLSAgcmVjb3JkX2Z1 bGxfY29yZV9yZWdidWYgPSAoZ2RiX2J5dGUgKikgeG1hbGxvYyAoTUFYX1JF R0lTVEVSX1NJWkUgKiByZWdudW0pOw0KKyAgcmVjb3JkX2Z1bGxfY29yZV9y ZWdidWYgPSAoZ2RiX2J5dGUgKikgeG1hbGxvYyAocmVnbWF4c2l6ZSAqIHJl Z251bSk7DQogICBmb3IgKGkgPSAwOyBpIDwgcmVnbnVtOyBpICsrKQ0KICAg ICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIGksDQotCQkJICBy ZWNvcmRfZnVsbF9jb3JlX3JlZ2J1ZiArIE1BWF9SRUdJU1RFUl9TSVpFICog aSk7DQorCQkJICByZWNvcmRfZnVsbF9jb3JlX3JlZ2J1ZiArIHJlZ21heHNp emUgKiBpKTsNCg0KICAgLyogR2V0IHJlY29yZF9mdWxsX2NvcmVfc3RhcnQg YW5kIHJlY29yZF9mdWxsX2NvcmVfZW5kLiAgKi8NCiAgIGlmIChidWlsZF9z ZWN0aW9uX3RhYmxlIChjb3JlX2JmZCwgJnJlY29yZF9mdWxsX2NvcmVfc3Rh cnQsDQpAQCAtMjAzOCw2ICsyMDQwLDkgQEAgcmVjb3JkX2Z1bGxfY29yZV9m ZXRjaF9yZWdpc3RlcnMgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsDQogCQkJ CSAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCiAJCQkJICBpbnQgcmVn bm8pDQogew0KKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfcmVn Y2FjaGVfYXJjaCAocmVnY2FjaGUpOw0KKyAgaW50IHJlZ21heHNpemUgPSBt YXhfcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCk7DQorDQogICBpZiAocmVnbm8g PCAwKQ0KICAgICB7DQogICAgICAgaW50IG51bSA9IGdkYmFyY2hfbnVtX3Jl Z3MgKGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpOw0KQEAgLTIwNDUs MTEgKzIwNTAsMTEgQEAgcmVjb3JkX2Z1bGxfY29yZV9mZXRjaF9yZWdpc3Rl cnMgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsDQoNCiAgICAgICBmb3IgKGkg PSAwOyBpIDwgbnVtOyBpICsrKQ0KICAgICAgICAgcmVnY2FjaGVfcmF3X3N1 cHBseSAocmVnY2FjaGUsIGksDQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZWNvcmRfZnVsbF9jb3JlX3JlZ2J1ZiArIE1BWF9SRUdJU1RFUl9T SVpFICogaSk7DQorCQkJICAgICByZWNvcmRfZnVsbF9jb3JlX3JlZ2J1ZiAr IHJlZ21heHNpemUgKiBpKTsNCiAgICAgfQ0KICAgZWxzZQ0KICAgICByZWdj YWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgcmVnbm8sDQotICAgICAgICAg ICAgICAgICAgICAgICAgIHJlY29yZF9mdWxsX2NvcmVfcmVnYnVmICsgTUFY X1JFR0lTVEVSX1NJWkUgKiByZWdubyk7DQorCQkJIHJlY29yZF9mdWxsX2Nv cmVfcmVnYnVmICsgcmVnbWF4c2l6ZSAqIHJlZ25vKTsNCiB9DQoNCiAvKiAi dG9fcHJlcGFyZV90b19zdG9yZSIgbWV0aG9kIGZvciBwcmVjIG92ZXIgY29y ZWZpbGUuICAqLw0KQEAgLTIwNjcsOSArMjA3MiwxMiBAQCByZWNvcmRfZnVs bF9jb3JlX3N0b3JlX3JlZ2lzdGVycyAoc3RydWN0IHRhcmdldF9vcHMgKm9w cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZWdj YWNoZSAqcmVnY2FjaGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgcmVnbm8pDQogew0KKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gg PSBnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpOw0KKyAgaW50IHJlZ21h eHNpemUgPSBtYXhfcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCk7DQorDQogICBp ZiAocmVjb3JkX2Z1bGxfZ2RiX29wZXJhdGlvbl9kaXNhYmxlKQ0KICAgICBy ZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIHJlZ25vLA0KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVjb3JkX2Z1bGxfY29yZV9yZWdidWYg KyBNQVhfUkVHSVNURVJfU0laRSAqIHJlZ25vKTsNCisJCQkgIHJlY29yZF9m dWxsX2NvcmVfcmVnYnVmICsgcmVnbWF4c2l6ZSAqIHJlZ25vKTsNCiAgIGVs c2UNCiAgICAgZXJyb3IgKF8oIllvdSBjYW4ndCBkbyB0aGF0IHdpdGhvdXQg YSBwcm9jZXNzIHRvIGRlYnVnLiIpKTsNCiB9DQpAQCAtMjI1MywyNSArMjI2 MSw2IEBAIGluaXRfcmVjb3JkX2Z1bGxfY29yZV9vcHMgKHZvaWQpDQogfQ0K DQogLyogUmVjb3JkIGxvZyBzYXZlLWZpbGUgZm9ybWF0DQotICAgVmVyc2lv biAxIChuZXZlciByZWxlYXNlZCkNCi0NCi0gICBIZWFkZXI6DQotICAgICA0 IGJ5dGVzOiBtYWdpYyBudW1iZXIgaHRvbmwoMHgyMDA5MDgyOSkuDQotICAg ICAgIE5PVEU6IGJlIHN1cmUgdG8gY2hhbmdlIHdoZW5ldmVyIHRoaXMgZmls ZSBmb3JtYXQgY2hhbmdlcyENCi0NCi0gICBSZWNvcmRzOg0KLSAgICAgcmVj b3JkX2Z1bGxfZW5kOg0KLSAgICAgICAxIGJ5dGU6ICByZWNvcmQgdHlwZSAo cmVjb3JkX2Z1bGxfZW5kLCBzZWUgZW51bSByZWNvcmRfZnVsbF90eXBlKS4N Ci0gICAgIHJlY29yZF9mdWxsX3JlZzoNCi0gICAgICAgMSBieXRlOiAgcmVj b3JkIHR5cGUgKHJlY29yZF9mdWxsX3JlZywgc2VlIGVudW0gcmVjb3JkX2Z1 bGxfdHlwZSkuDQotICAgICAgIDggYnl0ZXM6IHJlZ2lzdGVyIGlkIChuZXR3 b3JrIGJ5dGUgb3JkZXIpLg0KLSAgICAgICBNQVhfUkVHSVNURVJfU0laRSBi eXRlczogcmVnaXN0ZXIgdmFsdWUuDQotICAgICByZWNvcmRfZnVsbF9tZW06 DQotICAgICAgIDEgYnl0ZTogIHJlY29yZCB0eXBlIChyZWNvcmRfZnVsbF9t ZW0sIHNlZSBlbnVtIHJlY29yZF9mdWxsX3R5cGUpLg0KLSAgICAgICA4IGJ5 dGVzOiBtZW1vcnkgbGVuZ3RoIChuZXR3b3JrIGJ5dGUgb3JkZXIpLg0KLSAg ICAgICA4IGJ5dGVzOiBtZW1vcnkgYWRkcmVzcyAobmV0d29yayBieXRlIG9y ZGVyKS4NCi0gICAgICAgbiBieXRlczogbWVtb3J5IHZhbHVlIChuID09IG1l bW9yeSBsZW5ndGgpLg0KLQ0KICAgIFZlcnNpb24gMg0KICAgICAgNCBieXRl czogbWFnaWMgbnVtYmVyIG5ldG9yZGVyMzIoMHgyMDA5MTAxNikuDQogICAg ICAgIE5PVEU6IGJlIHN1cmUgdG8gY2hhbmdlIHdoZW5ldmVyIHRoaXMgZmls ZSBmb3JtYXQgY2hhbmdlcyENCmRpZmYgLS1naXQgYS9nZGIvcmVnY2FjaGUu aCBiL2dkYi9yZWdjYWNoZS5oDQppbmRleCBlNWE3Y2Y1NTMyNzliOGNjMGQ1 NDZlYzFiODI3NGNiZjk3ZTI0NmQ1Li5mOGQ4ZjJmODQ4ODdjYjliYjI1NDFm NjgzNjdmNTI2OWI3NWRlYjU2IDEwMDY0NA0KLS0tIGEvZ2RiL3JlZ2NhY2hl LmgNCisrKyBiL2dkYi9yZWdjYWNoZS5oDQpAQCAtNTAsNiArNTAsMTIgQEAg ZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpnZXRfcmVnY2FjaGVfYXNw YWNlIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKik7DQogZW51bSByZWdpc3Rl cl9zdGF0dXMgcmVnY2FjaGVfcmVnaXN0ZXJfc3RhdHVzIChjb25zdCBzdHJ1 Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0KIAkJCQkJICAgICAgIGludCByZWdu dW0pOw0KDQorLyogTWFrZSBjZXJ0YWluIHRoYXQgdGhlIHJlZ2lzdGVyIGNh Y2hlIGlzIHVwLXRvLWRhdGUgd2l0aCByZXNwZWN0IHRvIHRoZQ0KKyAgIGN1 cnJlbnQgdGhyZWFkLiAgKi8NCit2b2lkIHJlZ2NhY2hlX3Jhd191cGRhdGUg KHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdudW0pOw0KKw0K K2VudW0gcmVnaXN0ZXJfc3RhdHVzIHJlZ2NhY2hlX3Jhd19yZWFkIChzdHJ1 Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0KKwkJCQkJaW50IHJhd251bSwgZ2Ri X2J5dGUgKmJ1Zik7DQogLyogVHJhbnNmZXIgYSByYXcgcmVnaXN0ZXIgWzAu Lk5VTV9SRUdTKSBiZXR3ZWVuIGNvcmUtZ2RiIGFuZCB0aGUNCiAgICByZWdj YWNoZS4gIFRoZSByZWFkIHZhcmlhbnRzIHJldHVybiB0aGUgc3RhdHVzIG9m IHRoZSByZWdpc3Rlci4gICovDQoNCkBAIC0yMDIsNiArMjA4LDggQEAgZXh0 ZXJuIHN0cnVjdCB0eXBlICpyZWdpc3Rlcl90eXBlIChzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCwgaW50IHJlZ251bSk7DQoNCiBleHRlcm4gaW50IHJlZ2lz dGVyX3NpemUgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBpbnQgcmVnbnVt KTsNCg0KKy8qIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgbGFyZ2VzdCByZWdp c3Rlci4gICovDQorZXh0ZXJuIGxvbmcgbWF4X3JlZ2lzdGVyX3NpemUgKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoKTsNCg0KIC8qIFNhdmUvcmVzdG9yZSBh IHJlZ2lzdGVyIGNhY2hlLiAgVGhlIHNldCBvZiByZWdpc3RlcnMgc2F2ZWQg Lw0KICAgIHJlc3RvcmVkIGludG8gdGhlIERTVCByZWdjYWNoZSBkZXRlcm1p bmVkIGJ5IHRoZSBzYXZlX3JlZ2dyb3VwIC8NCkBAIC0yMjgsNCArMjM2LDgg QEAgZXh0ZXJuIHZvaWQgcmVnY2FjaGVfY3B5IChzdHJ1Y3QgcmVnY2FjaGUg KmRlc3QsIHN0cnVjdCByZWdjYWNoZSAqc3JjKTsNCiBleHRlcm4gdm9pZCBy ZWdpc3RlcnNfY2hhbmdlZCAodm9pZCk7DQogZXh0ZXJuIHZvaWQgcmVnaXN0 ZXJzX2NoYW5nZWRfcHRpZCAocHRpZF90KTsNCg0KK2V4dGVybiB2b2lkIHJl Z2NhY2hlX2RlYnVnX3ByaW50X3JlZ2lzdGVyIChjb25zdCBjaGFyICpmdW5j LA0KKwkJCQkJICAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCisJCQkJ CSAgIGludCByZWdubyk7DQorDQogI2VuZGlmIC8qIFJFR0NBQ0hFX0ggKi8N CmRpZmYgLS1naXQgYS9nZGIvcmVnY2FjaGUuYyBiL2dkYi9yZWdjYWNoZS5j DQppbmRleCA5ZDI4YWEyYzIxMTRlMGYxYzUyNzU4YmIyZmJlOTY2OWEzMjlj MTNlLi43ZDY5M2FjNjE2YzNjOGU2OTJkMzY5ZDc0ODkzN2FjNDY2MmM4NDlh IDEwMDY0NA0KLS0tIGEvZ2RiL3JlZ2NhY2hlLmMNCisrKyBiL2dkYi9yZWdj YWNoZS5jDQpAQCAtNzMsNiArNzMsOSBAQCBzdHJ1Y3QgcmVnY2FjaGVfZGVz Y3INCg0KICAgLyogQ2FjaGVkIHRhYmxlIGNvbnRhaW5pbmcgdGhlIHR5cGUg b2YgZWFjaCByZWdpc3Rlci4gICovDQogICBzdHJ1Y3QgdHlwZSAqKnJlZ2lz dGVyX3R5cGU7DQorDQorICAvKiBTaXplIG9mIHRoZSBsYXJnZXN0IHJlZ2lz dGVyLiAgKi8NCisgIGxvbmcgbWF4X3JlZ2lzdGVyX3NpemU7DQogfTsNCg0K IHN0YXRpYyB2b2lkICoNCkBAIC0xMjYsNiArMTI5LDggQEAgaW5pdF9yZWdj YWNoZV9kZXNjciAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gpDQogCWRlc2Ny LT5yZWdpc3Rlcl9vZmZzZXRbaV0gPSBvZmZzZXQ7DQogCW9mZnNldCArPSBk ZXNjci0+c2l6ZW9mX3JlZ2lzdGVyW2ldOw0KIAlnZGJfYXNzZXJ0IChNQVhf UkVHSVNURVJfU0laRSA+PSBkZXNjci0+c2l6ZW9mX3JlZ2lzdGVyW2ldKTsN CisJZGVzY3ItPm1heF9yZWdpc3Rlcl9zaXplID0gc3RkOjptYXggKGRlc2Ny LT5tYXhfcmVnaXN0ZXJfc2l6ZSwNCisJCQkJCSAgICAgZGVzY3ItPnNpemVv Zl9yZWdpc3RlcltpXSk7DQogICAgICAgfQ0KICAgICAvKiBTZXQgdGhlIHJl YWwgc2l6ZSBvZiB0aGUgcmF3IHJlZ2lzdGVyIGNhY2hlIGJ1ZmZlci4gICov DQogICAgIGRlc2NyLT5zaXplb2ZfcmF3X3JlZ2lzdGVycyA9IG9mZnNldDsN CkBAIC0xMzYsNiArMTQxLDggQEAgaW5pdF9yZWdjYWNoZV9kZXNjciAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gpDQogCWRlc2NyLT5yZWdpc3Rlcl9vZmZz ZXRbaV0gPSBvZmZzZXQ7DQogCW9mZnNldCArPSBkZXNjci0+c2l6ZW9mX3Jl Z2lzdGVyW2ldOw0KIAlnZGJfYXNzZXJ0IChNQVhfUkVHSVNURVJfU0laRSA+ PSBkZXNjci0+c2l6ZW9mX3JlZ2lzdGVyW2ldKTsNCisJZGVzY3ItPm1heF9y ZWdpc3Rlcl9zaXplID0gc3RkOjptYXggKGRlc2NyLT5tYXhfcmVnaXN0ZXJf c2l6ZSwNCisJCQkJCSAgICAgZGVzY3ItPnNpemVvZl9yZWdpc3RlcltpXSk7 DQogICAgICAgfQ0KICAgICAvKiBTZXQgdGhlIHJlYWwgc2l6ZSBvZiB0aGUg cmVhZG9ubHkgcmVnaXN0ZXIgY2FjaGUgYnVmZmVyLiAgKi8NCiAgICAgZGVz Y3ItPnNpemVvZl9jb29rZWRfcmVnaXN0ZXJzID0gb2Zmc2V0Ow0KQEAgLTE4 Nyw2ICsxOTQsMTMgQEAgcmVnY2FjaGVfcmVnaXN0ZXJfc2l6ZSAoY29uc3Qg c3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IG4pDQogICByZXR1cm4g cmVnaXN0ZXJfc2l6ZSAoZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKSwg bik7DQogfQ0KDQorbG9uZw0KK21heF9yZWdpc3Rlcl9zaXplIChzdHJ1Y3Qg Z2RiYXJjaCAqZ2RiYXJjaCkNCit7DQorICBzdHJ1Y3QgcmVnY2FjaGVfZGVz Y3IgKmRlc2NyID0gcmVnY2FjaGVfZGVzY3IgKGdkYmFyY2gpOw0KKyAgcmV0 dXJuIGRlc2NyLT5tYXhfcmVnaXN0ZXJfc2l6ZTsNCit9DQorDQogLyogVGhl IHJlZ2lzdGVyIGNhY2hlIGZvciBzdG9yaW5nIHJhdyByZWdpc3RlciB2YWx1 ZXMuICAqLw0KDQogc3RydWN0IHJlZ2NhY2hlDQpAQCAtMzI3LDcgKzM0MSw2 IEBAIHJlZ2NhY2hlX3NhdmUgKHN0cnVjdCByZWdjYWNoZSAqZHN0LCByZWdj YWNoZV9jb29rZWRfcmVhZF9mdHlwZSAqY29va2VkX3JlYWQsDQogCSAgICAg ICB2b2lkICpzcmMpDQogew0KICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gg PSBkc3QtPmRlc2NyLT5nZGJhcmNoOw0KLSAgZ2RiX2J5dGUgYnVmW01BWF9S RUdJU1RFUl9TSVpFXTsNCiAgIGludCByZWdudW07DQoNCiAgIC8qIFRoZSBE U1Qgc2hvdWxkIGJlIGByZWFkLW9ubHknLCBpZiBpdCB3YXNuJ3QgdGhlbiB0 aGUgc2F2ZSB3b3VsZA0KQEAgLTM0NiwxMiArMzU5LDEwIEBAIHJlZ2NhY2hl X3NhdmUgKHN0cnVjdCByZWdjYWNoZSAqZHN0LCByZWdjYWNoZV9jb29rZWRf cmVhZF9mdHlwZSAqY29va2VkX3JlYWQsDQogICAgIHsNCiAgICAgICBpZiAo Z2RiYXJjaF9yZWdpc3Rlcl9yZWdncm91cF9wIChnZGJhcmNoLCByZWdudW0s IHNhdmVfcmVnZ3JvdXApKQ0KIAl7DQorCSAgZ2RiX2J5dGUgKmJ1ZiA9IHJl Z2lzdGVyX2J1ZmZlciAoZHN0LCByZWdudW0pOw0KIAkgIGVudW0gcmVnaXN0 ZXJfc3RhdHVzIHN0YXR1cyA9IGNvb2tlZF9yZWFkIChzcmMsIHJlZ251bSwg YnVmKTsNCg0KLQkgIGlmIChzdGF0dXMgPT0gUkVHX1ZBTElEKQ0KLQkgICAg bWVtY3B5IChyZWdpc3Rlcl9idWZmZXIgKGRzdCwgcmVnbnVtKSwgYnVmLA0K LQkJICAgIHJlZ2lzdGVyX3NpemUgKGdkYmFyY2gsIHJlZ251bSkpOw0KLQkg IGVsc2UNCisJICBpZiAoc3RhdHVzICE9IFJFR19WQUxJRCkNCiAJICAgIHsN CiAJICAgICAgZ2RiX2Fzc2VydCAoc3RhdHVzICE9IFJFR19VTktOT1dOKTsN Cg0KQEAgLTM2OSw3ICszODAsNyBAQCByZWdjYWNoZV9yZXN0b3JlIChzdHJ1 Y3QgcmVnY2FjaGUgKmRzdCwNCiAJCSAgdm9pZCAqY29va2VkX3JlYWRfY29u dGV4dCkNCiB7DQogICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGRzdC0+ ZGVzY3ItPmdkYmFyY2g7DQotICBnZGJfYnl0ZSBidWZbTUFYX1JFR0lTVEVS X1NJWkVdOw0KKyAgc3RkOjp2ZWN0b3I8Z2RiX2J5dGU+IGJ1ZiAobWF4X3Jl Z2lzdGVyX3NpemUgKGdkYmFyY2gpKTsNCiAgIGludCByZWdudW07DQoNCiAg IC8qIFRoZSBkc3QgaGFkIGJldHRlciBub3QgYmUgcmVhZC1vbmx5LiAgSWYg aXQgaXMsIHRoZSBgcmVzdG9yZScNCkBAIC0zODUsOSArMzk2LDkgQEAgcmVn Y2FjaGVfcmVzdG9yZSAoc3RydWN0IHJlZ2NhY2hlICpkc3QsDQogCXsNCiAJ ICBlbnVtIHJlZ2lzdGVyX3N0YXR1cyBzdGF0dXM7DQoNCi0JICBzdGF0dXMg PSBjb29rZWRfcmVhZCAoY29va2VkX3JlYWRfY29udGV4dCwgcmVnbnVtLCBi dWYpOw0KKwkgIHN0YXR1cyA9IGNvb2tlZF9yZWFkIChjb29rZWRfcmVhZF9j b250ZXh0LCByZWdudW0sIGJ1Zi5kYXRhICgpKTsNCiAJICBpZiAoc3RhdHVz ID09IFJFR19WQUxJRCkNCi0JICAgIHJlZ2NhY2hlX2Nvb2tlZF93cml0ZSAo ZHN0LCByZWdudW0sIGJ1Zik7DQorCSAgICByZWdjYWNoZV9jb29rZWRfd3Jp dGUgKGRzdCwgcmVnbnVtLCBidWYuZGF0YSAoKSk7DQogCX0NCiAgICAgfQ0K IH0NCkBAIC02NDIsMTUgKzY1MywxNyBAQCByZWdpc3RlcnNfY2hhbmdlZCAo dm9pZCkNCiAgIGFsbG9jYSAoMCk7DQogfQ0KDQotZW51bSByZWdpc3Rlcl9z dGF0dXMNCi1yZWdjYWNoZV9yYXdfcmVhZCAoc3RydWN0IHJlZ2NhY2hlICpy ZWdjYWNoZSwgaW50IHJlZ251bSwgZ2RiX2J5dGUgKmJ1ZikNCit2b2lkDQor cmVnY2FjaGVfcmF3X3VwZGF0ZSAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNo ZSwgaW50IHJlZ251bSkNCiB7DQotICBnZGJfYXNzZXJ0IChyZWdjYWNoZSAh PSBOVUxMICYmIGJ1ZiAhPSBOVUxMKTsNCi0gIGdkYl9hc3NlcnQgKHJlZ251 bSA+PSAwICYmIHJlZ251bSA8IHJlZ2NhY2hlLT5kZXNjci0+bnJfcmF3X3Jl Z2lzdGVycyk7DQogICAvKiBNYWtlIGNlcnRhaW4gdGhhdCB0aGUgcmVnaXN0 ZXIgY2FjaGUgaXMgdXAtdG8tZGF0ZSB3aXRoIHJlc3BlY3QNCiAgICAgIHRv IHRoZSBjdXJyZW50IHRocmVhZC4gIFRoaXMgc3dpdGNoaW5nIHNob3VsZG4n dCBiZSBuZWNlc3NhcnkNCiAgICAgIG9ubHkgdGhlcmUgaXMgc3RpbGwgb25s eSBvbmUgdGFyZ2V0IHNpZGUgcmVnaXN0ZXIgY2FjaGUuICBTaWdoIQ0KICAg ICAgT24gdGhlIGJyaWdodCBzaWRlLCBhdCBsZWFzdCB0aGVyZSBpcyBhIHJl Z2NhY2hlIG9iamVjdC4gICovDQorDQorICBnZGJfYXNzZXJ0IChyZWdjYWNo ZSAhPSBOVUxMKTsNCisgIGdkYl9hc3NlcnQgKHJlZ251bSA+PSAwICYmIHJl Z251bSA8IHJlZ2NhY2hlLT5kZXNjci0+bnJfcmF3X3JlZ2lzdGVycyk7DQor DQogICBpZiAoIXJlZ2NhY2hlLT5yZWFkb25seV9wDQogICAgICAgJiYgcmVn Y2FjaGVfcmVnaXN0ZXJfc3RhdHVzIChyZWdjYWNoZSwgcmVnbnVtKSA9PSBS RUdfVU5LTk9XTikNCiAgICAgew0KQEAgLTY2Niw2ICs2NzksMTMgQEAgcmVn Y2FjaGVfcmF3X3JlYWQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGlu dCByZWdudW0sIGdkYl9ieXRlICpidWYpDQogICAgICAgaWYgKHJlZ2NhY2hl LT5yZWdpc3Rlcl9zdGF0dXNbcmVnbnVtXSA9PSBSRUdfVU5LTk9XTikNCiAJ cmVnY2FjaGUtPnJlZ2lzdGVyX3N0YXR1c1tyZWdudW1dID0gUkVHX1VOQVZB SUxBQkxFOw0KICAgICB9DQorfQ0KKw0KK2VudW0gcmVnaXN0ZXJfc3RhdHVz DQorcmVnY2FjaGVfcmF3X3JlYWQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2Fj aGUsIGludCByZWdudW0sIGdkYl9ieXRlICpidWYpDQorew0KKyAgZ2RiX2Fz c2VydCAoYnVmICE9IE5VTEwpOw0KKyAgcmVnY2FjaGVfcmF3X3VwZGF0ZSAo cmVnY2FjaGUsIHJlZ251bSk7DQoNCiAgIGlmIChyZWdjYWNoZS0+cmVnaXN0 ZXJfc3RhdHVzW3JlZ251bV0gIT0gUkVHX1ZBTElEKQ0KICAgICBtZW1zZXQg KGJ1ZiwgMCwgcmVnY2FjaGUtPmRlc2NyLT5zaXplb2ZfcmVnaXN0ZXJbcmVn bnVtXSk7DQpAQCAtMTI1MCw2ICsxMjcwLDQyIEBAIHJlZ2NhY2hlX3dyaXRl X3BjIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBDT1JFX0FERFIgcGMp DQogICByZWluaXRfZnJhbWVfY2FjaGUgKCk7DQogfQ0KDQordm9pZA0KK3Jl Z2NhY2hlX2RlYnVnX3ByaW50X3JlZ2lzdGVyIChjb25zdCBjaGFyICpmdW5j LCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0KKwkJCSAgICAgICBpbnQg cmVnbm8pDQorew0KKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRf cmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpOw0KKw0KKyAgZnByaW50Zl91bmZp bHRlcmVkIChnZGJfc3RkbG9nLCAiJXMgIiwgZnVuYyk7DQorICBpZiAocmVn bm8gPj0gMCAmJiByZWdubyA8IGdkYmFyY2hfbnVtX3JlZ3MgKGdkYmFyY2gp DQorICAgICAgJiYgZ2RiYXJjaF9yZWdpc3Rlcl9uYW1lIChnZGJhcmNoLCBy ZWdubykgIT0gTlVMTA0KKyAgICAgICYmIGdkYmFyY2hfcmVnaXN0ZXJfbmFt ZSAoZ2RiYXJjaCwgcmVnbm8pWzBdICE9ICdcMCcpDQorICAgIGZwcmludGZf dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIiglcykiLA0KKwkJCWdkYmFyY2hf cmVnaXN0ZXJfbmFtZSAoZ2RiYXJjaCwgcmVnbm8pKTsNCisgIGVsc2UNCisg ICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiKCVkKSIsIHJl Z25vKTsNCisgIGlmIChyZWdubyA+PSAwICYmIHJlZ25vIDwgZ2RiYXJjaF9u dW1fcmVncyAoZ2RiYXJjaCkpDQorICAgIHsNCisgICAgICBlbnVtIGJmZF9l bmRpYW4gYnl0ZV9vcmRlciA9IGdkYmFyY2hfYnl0ZV9vcmRlciAoZ2RiYXJj aCk7DQorICAgICAgaW50IGksIHNpemUgPSByZWdpc3Rlcl9zaXplIChnZGJh cmNoLCByZWdubyk7DQorICAgICAgZ2RiX2J5dGUgKmJ1ZiA9IHJlZ2lzdGVy X2J1ZmZlciAocmVnY2FjaGUsIHJlZ25vKTsNCisNCisgICAgICByZWdjYWNo ZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIHJlZ25vLCBidWYpOw0KKyAgICAg IGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIiA9ICIpOw0KKyAg ICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspDQorCXsNCisJICBmcHJp bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICIlMDJ4IiwgYnVmW2ldKTsN CisJfQ0KKyAgICAgIGlmIChzaXplIDw9IHNpemVvZiAoTE9OR0VTVCkpDQor CXsNCisJICBVTE9OR0VTVCB2YWwgPSBleHRyYWN0X3Vuc2lnbmVkX2ludGVn ZXIgKGJ1Ziwgc2l6ZSwgYnl0ZV9vcmRlcik7DQorDQorCSAgZnByaW50Zl91 bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiICVzICVzIiwNCisJCQkgICAgICBj b3JlX2FkZHJfdG9fc3RyaW5nX256ICh2YWwpLCBwbG9uZ2VzdCAodmFsKSk7 DQorCX0NCisgICAgfQ0KKyAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk bG9nLCAiXG4iKTsNCit9DQoNCiBzdGF0aWMgdm9pZA0KIHJlZ19mbHVzaF9j b21tYW5kIChjaGFyICpjb21tYW5kLCBpbnQgZnJvbV90dHkpDQpAQCAtMTI3 OSw3ICsxMzM1LDcgQEAgcmVnY2FjaGVfZHVtcCAoc3RydWN0IHJlZ2NhY2hl ICpyZWdjYWNoZSwgc3RydWN0IHVpX2ZpbGUgKmZpbGUsDQogICBpbnQgZm9v dG5vdGVfcmVnaXN0ZXJfb2Zmc2V0ID0gMDsNCiAgIGludCBmb290bm90ZV9y ZWdpc3Rlcl90eXBlX25hbWVfbnVsbCA9IDA7DQogICBsb25nIHJlZ2lzdGVy X29mZnNldCA9IDA7DQotICBnZGJfYnl0ZSBidWZbTUFYX1JFR0lTVEVSX1NJ WkVdOw0KKyAgc3RkOjp2ZWN0b3I8Z2RiX2J5dGU+IGJ1ZiAobWF4X3JlZ2lz dGVyX3NpemUgKGdkYmFyY2gpKTsNCg0KICNpZiAwDQogICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGZpbGUsICJucl9yYXdfcmVnaXN0ZXJzICVkXG4iLA0KQEAg LTE0MDYsOCArMTQ2Miw4IEBAIHJlZ2NhY2hlX2R1bXAgKHN0cnVjdCByZWdj YWNoZSAqcmVnY2FjaGUsIHN0cnVjdCB1aV9maWxlICpmaWxlLA0KIAkgICAg ZnByaW50Zl91bmZpbHRlcmVkIChmaWxlLCAiPHVuYXZhaWxhYmxlPiIpOw0K IAkgIGVsc2UNCiAJICAgIHsNCi0JICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCByZWdudW0sIGJ1Zik7DQotCSAgICAgIHByaW50X2hleF9j aGFycyAoZmlsZSwgYnVmLA0KKwkgICAgICByZWdjYWNoZV9yYXdfdXBkYXRl IChyZWdjYWNoZSwgcmVnbnVtKTsNCisJICAgICAgcHJpbnRfaGV4X2NoYXJz IChmaWxlLCByZWdpc3Rlcl9idWZmZXIgKHJlZ2NhY2hlLCByZWdudW0pLA0K IAkJCSAgICAgICByZWdjYWNoZS0+ZGVzY3ItPnNpemVvZl9yZWdpc3Rlclty ZWdudW1dLA0KIAkJCSAgICAgICBnZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFy Y2gpKTsNCiAJICAgIH0NCkBAIC0xNDIyLDEzICsxNDc4LDEzIEBAIHJlZ2Nh Y2hlX2R1bXAgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIHN0cnVjdCB1 aV9maWxlICpmaWxlLA0KIAkgICAgew0KIAkgICAgICBlbnVtIHJlZ2lzdGVy X3N0YXR1cyBzdGF0dXM7DQoNCi0JICAgICAgc3RhdHVzID0gcmVnY2FjaGVf Y29va2VkX3JlYWQgKHJlZ2NhY2hlLCByZWdudW0sIGJ1Zik7DQorCSAgICAg IHN0YXR1cyA9IHJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgcmVn bnVtLCBidWYuZGF0YSAoKSk7DQogCSAgICAgIGlmIChzdGF0dXMgPT0gUkVH X1VOS05PV04pDQogCQlmcHJpbnRmX3VuZmlsdGVyZWQgKGZpbGUsICI8aW52 YWxpZD4iKTsNCiAJICAgICAgZWxzZSBpZiAoc3RhdHVzID09IFJFR19VTkFW QUlMQUJMRSkNCiAJCWZwcmludGZfdW5maWx0ZXJlZCAoZmlsZSwgIjx1bmF2 YWlsYWJsZT4iKTsNCiAJICAgICAgZWxzZQ0KLQkJcHJpbnRfaGV4X2NoYXJz IChmaWxlLCBidWYsDQorCQlwcmludF9oZXhfY2hhcnMgKGZpbGUsIGJ1Zi5k YXRhICgpLA0KIAkJCQkgcmVnY2FjaGUtPmRlc2NyLT5zaXplb2ZfcmVnaXN0 ZXJbcmVnbnVtXSwNCiAJCQkJIGdkYmFyY2hfYnl0ZV9vcmRlciAoZ2RiYXJj aCkpOw0KIAkgICAgfQ0KZGlmZiAtLWdpdCBhL2dkYi9yZW1vdGUtc2ltLmMg Yi9nZGIvcmVtb3RlLXNpbS5jDQppbmRleCBiMGM2OGM2MTdlMzY1YzBlYTE4 YWMyZWNhNTI1NTk4YjY4OGZmYmI1Li4wZGQ5MDEzNzdlNTNlYWZjMjdlNGZi MzlhMTQ1MzM4MDc3OWFlMzYxIDEwMDY0NA0KLS0tIGEvZ2RiL3JlbW90ZS1z aW0uYw0KKysrIGIvZ2RiL3JlbW90ZS1zaW0uYw0KQEAgLTQzOSw2ICs0Mzks OSBAQCBnZGJzaW1fZmV0Y2hfcmVnaXN0ZXIgKHN0cnVjdCB0YXJnZXRfb3Bz ICpvcHMsDQogICAgICAgcmV0dXJuOw0KICAgICB9DQoNCisgIGludCByZWdz aXplID0gcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwgcmVnbm8pOw0KKyAgc3Rk Ojp2ZWN0b3I8Z2RiX2J5dGU+IGJ1ZiAocmVnc2l6ZSk7DQorDQogICBzd2l0 Y2ggKGdkYmFyY2hfcmVnaXN0ZXJfc2ltX3JlZ25vIChnZGJhcmNoLCByZWdu bykpDQogICAgIHsNCiAgICAgY2FzZSBMRUdBQ1lfU0lNX1JFR05PX0lHTk9S RToNCkBAIC00NDcsMzggKzQ1MCwzMiBAQCBnZGJzaW1fZmV0Y2hfcmVnaXN0 ZXIgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsDQogICAgICAgew0KIAkvKiBG b3IgbW9tZW50IHRyZWF0IGEgYGRvZXMgbm90IGV4aXN0JyByZWdpc3RlciB0 aGUgc2FtZSB3YXkNCiAJICAgYXMgYW4gYGB1bmF2YWlsYWJsZScnIHJlZ2lz dGVyLiAgKi8NCi0JZ2RiX2J5dGUgYnVmW01BWF9SRUdJU1RFUl9TSVpFXTsN CiAJaW50IG5yX2J5dGVzOw0KDQotCW1lbXNldCAoYnVmLCAwLCBNQVhfUkVH SVNURVJfU0laRSk7DQotCXJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hl LCByZWdubywgYnVmKTsNCisJcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2Fj aGUsIHJlZ25vLCBidWYuZGF0YSAoKSk7DQogCWJyZWFrOw0KICAgICAgIH0N Cg0KICAgICBkZWZhdWx0Og0KICAgICAgIHsNCiAJc3RhdGljIGludCB3YXJu X3VzZXIgPSAxOw0KLQlnZGJfYnl0ZSBidWZbTUFYX1JFR0lTVEVSX1NJWkVd Ow0KIAlpbnQgbnJfYnl0ZXM7DQoNCiAJZ2RiX2Fzc2VydCAocmVnbm8gPj0g MCAmJiByZWdubyA8IGdkYmFyY2hfbnVtX3JlZ3MgKGdkYmFyY2gpKTsNCi0J bWVtc2V0IChidWYsIDAsIE1BWF9SRUdJU1RFUl9TSVpFKTsNCiAJbnJfYnl0 ZXMgPSBzaW1fZmV0Y2hfcmVnaXN0ZXIgKHNpbV9kYXRhLT5nZGJzaW1fZGVz YywNCiAJCQkJICAgICAgIGdkYmFyY2hfcmVnaXN0ZXJfc2ltX3JlZ25vDQog CQkJCQkgKGdkYmFyY2gsIHJlZ25vKSwNCi0JCQkJICAgICAgIGJ1ZiwNCi0J CQkJICAgICAgIHJlZ2lzdGVyX3NpemUgKGdkYmFyY2gsIHJlZ25vKSk7DQor CQkJCSAgICAgICBidWYuZGF0YSAoKSwgcmVnc2l6ZSk7DQogCWlmIChucl9i eXRlcyA+IDANCi0JICAgICYmIG5yX2J5dGVzICE9IHJlZ2lzdGVyX3NpemUg KGdkYmFyY2gsIHJlZ25vKSAmJiB3YXJuX3VzZXIpDQorCSAgICAmJiBucl9i eXRlcyAhPSByZWdzaXplICYmIHdhcm5fdXNlcikNCiAJICB7DQogCSAgICBm cHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRlcnIsDQogCQkJCSJTaXplIG9m IHJlZ2lzdGVyICVzICglZC8lZCkgIg0KIAkJCQkiaW5jb3JyZWN0ICglZCBp bnN0ZWFkIG9mICVkKSkiLA0KIAkJCQlnZGJhcmNoX3JlZ2lzdGVyX25hbWUg KGdkYmFyY2gsIHJlZ25vKSwNCiAJCQkJcmVnbm8sDQotCQkJCWdkYmFyY2hf cmVnaXN0ZXJfc2ltX3JlZ25vDQotCQkJCSAgKGdkYmFyY2gsIHJlZ25vKSwN Ci0JCQkJbnJfYnl0ZXMsIHJlZ2lzdGVyX3NpemUgKGdkYmFyY2gsIHJlZ25v KSk7DQorCQkJCWdkYmFyY2hfcmVnaXN0ZXJfc2ltX3JlZ25vIChnZGJhcmNo LCByZWdubyksDQorCQkJCW5yX2J5dGVzLCByZWdzaXplKTsNCiAJICAgIHdh cm5fdXNlciA9IDA7DQogCSAgfQ0KIAkvKiBGSVhNRTogY2FnbmV5LzIwMDIt MDUtMjc6IFNob3VsZCBjaGVjayBgbnJfYnl0ZXMgPT0gMCcNCkBAIC00ODYs MTMgKzQ4MywxMyBAQCBnZGJzaW1fZmV0Y2hfcmVnaXN0ZXIgKHN0cnVjdCB0 YXJnZXRfb3BzICpvcHMsDQogCSAgIHdoaWNoIHJlZ2lzdGVycyBhcmUgZmV0 Y2hhYmxlLiAgKi8NCiAJLyogRWxzZSBpZiAobnJfYnl0ZXMgPCAwKTogYW4g b2xkIHNpbXVsYXRvciwgdGhhdCBkb2Vzbid0DQogCSAgIHRoaW5rIHRvIHJl dHVybiB0aGUgcmVnaXN0ZXIgc2l6ZS4gIEp1c3QgYXNzdW1lIGFsbCBpcyBv ay4gICovDQotCXJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCByZWdu bywgYnVmKTsNCisJcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIHJl Z25vLCBidWYuZGF0YSAoKSk7DQogCWlmIChyZW1vdGVfZGVidWcpDQogCSAg ew0KIAkgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLA0KIAkJ CQkiZ2Ric2ltX2ZldGNoX3JlZ2lzdGVyOiAlZCIsIHJlZ25vKTsNCiAJICAg IC8qIEZJWE1FOiBXZSBjb3VsZCBwcmludCBzb21ldGhpbmcgbW9yZSBpbnRl bGxpZ2libGUuICAqLw0KLQkgICAgZHVtcF9tZW0gKGJ1ZiwgcmVnaXN0ZXJf c2l6ZSAoZ2RiYXJjaCwgcmVnbm8pKTsNCisJICAgIGR1bXBfbWVtIChidWYu ZGF0YSAoKSwgcmVnc2l6ZSk7DQogCSAgfQ0KIAlicmVhazsNCiAgICAgICB9 DQpAQCAtNTE2LDE1ICs1MTMsMTYgQEAgZ2Ric2ltX3N0b3JlX3JlZ2lzdGVy IChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLA0KICAgICB9DQogICBlbHNlIGlm IChnZGJhcmNoX3JlZ2lzdGVyX3NpbV9yZWdubyAoZ2RiYXJjaCwgcmVnbm8p ID49IDApDQogICAgIHsNCi0gICAgICBnZGJfYnl0ZSB0bXBbTUFYX1JFR0lT VEVSX1NJWkVdOw0KKyAgICAgIGludCByZWdzaXplID0gcmVnaXN0ZXJfc2l6 ZSAoZ2RiYXJjaCwgcmVnbm8pOw0KKyAgICAgIHN0ZDo6dmVjdG9yPGdkYl9i eXRlPiB0bXAgKHJlZ3NpemUpOw0KICAgICAgIGludCBucl9ieXRlczsNCg0K LSAgICAgIHJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgcmVnbm8s IHRtcCk7DQorICAgICAgcmVnY2FjaGVfY29va2VkX3JlYWQgKHJlZ2NhY2hl LCByZWdubywgdG1wLmRhdGEgKCkpOw0KICAgICAgIG5yX2J5dGVzID0gc2lt X3N0b3JlX3JlZ2lzdGVyIChzaW1fZGF0YS0+Z2Ric2ltX2Rlc2MsDQogCQkJ CSAgICAgZ2RiYXJjaF9yZWdpc3Rlcl9zaW1fcmVnbm8NCiAJCQkJICAgICAg IChnZGJhcmNoLCByZWdubyksDQotCQkJCSAgICAgdG1wLCByZWdpc3Rlcl9z aXplIChnZGJhcmNoLCByZWdubykpOw0KLSAgICAgIGlmIChucl9ieXRlcyA+ IDAgJiYgbnJfYnl0ZXMgIT0gcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwgcmVn bm8pKQ0KKwkJCQkgICAgIHRtcC5kYXRhICgpLCByZWdzaXplKTsNCisgICAg ICBpZiAobnJfYnl0ZXMgPiAwICYmIG5yX2J5dGVzICE9IHJlZ3NpemUpDQog CWludGVybmFsX2Vycm9yIChfX0ZJTEVfXywgX19MSU5FX18sDQogCQkJXygi UmVnaXN0ZXIgc2l6ZSBkaWZmZXJlbnQgdG8gZXhwZWN0ZWQiKSk7DQogICAg ICAgaWYgKG5yX2J5dGVzIDwgMCkNCkBAIC01MzgsNyArNTM2LDcgQEAgZ2Ri c2ltX3N0b3JlX3JlZ2lzdGVyIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLA0K IAl7DQogCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiZ2Ri c2ltX3N0b3JlX3JlZ2lzdGVyOiAlZCIsIHJlZ25vKTsNCiAJICAvKiBGSVhN RTogV2UgY291bGQgcHJpbnQgc29tZXRoaW5nIG1vcmUgaW50ZWxsaWdpYmxl LiAgKi8NCi0JICBkdW1wX21lbSAodG1wLCByZWdpc3Rlcl9zaXplIChnZGJh cmNoLCByZWdubykpOw0KKwkgIGR1bXBfbWVtICh0bXAuZGF0YSAoKSwgcmVn c2l6ZSk7DQogCX0NCiAgICAgfQ0KIH0NCmRpZmYgLS1naXQgYS9nZGIvcmVt b3RlLmMgYi9nZGIvcmVtb3RlLmMNCmluZGV4IGM0Y2VjOTEwYzQ0Y2Y5MWNj N2YzNmI3ZjJkODdjZGUzZjQ2ZGU0MWUuLjBlZWJhMjE4ZWE0ODQ2NDY2NzQ2 ODE3ZThlNzlhNWJiZTg0ZmJhOTUgMTAwNjQ0DQotLS0gYS9nZGIvcmVtb3Rl LmMNCisrKyBiL2dkYi9yZW1vdGUuYw0KQEAgLTc3NTksNyArNzc1OSw2IEBA IHJlbW90ZV9wcmVwYXJlX3RvX3N0b3JlIChzdHJ1Y3QgdGFyZ2V0X29wcyAq c2VsZiwgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSkNCiB7DQogICBzdHJ1 Y3QgcmVtb3RlX2FyY2hfc3RhdGUgKnJzYSA9IGdldF9yZW1vdGVfYXJjaF9z dGF0ZSAoKTsNCiAgIGludCBpOw0KLSAgZ2RiX2J5dGUgYnVmW01BWF9SRUdJ U1RFUl9TSVpFXTsNCg0KICAgLyogTWFrZSBzdXJlIHRoZSBlbnRpcmUgcmVn aXN0ZXJzIGFycmF5IGlzIHZhbGlkLiAgKi8NCiAgIHN3aXRjaCAocGFja2V0 X3N1cHBvcnQgKFBBQ0tFVF9QKSkNCkBAIC03NzY5LDcgKzc3NjgsNyBAQCBy ZW1vdGVfcHJlcGFyZV90b19zdG9yZSAoc3RydWN0IHRhcmdldF9vcHMgKnNl bGYsIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUpDQogICAgICAgLyogTWFr ZSBzdXJlIGFsbCB0aGUgbmVjZXNzYXJ5IHJlZ2lzdGVycyBhcmUgY2FjaGVk LiAgKi8NCiAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2RiYXJjaF9udW1fcmVn cyAoZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKSk7IGkrKykNCiAJaWYg KHJzYS0+cmVnc1tpXS5pbl9nX3BhY2tldCkNCi0JICByZWdjYWNoZV9yYXdf cmVhZCAocmVnY2FjaGUsIHJzYS0+cmVnc1tpXS5yZWdudW0sIGJ1Zik7DQor CSAgcmVnY2FjaGVfcmF3X3VwZGF0ZSAocmVnY2FjaGUsIHJzYS0+cmVnc1tp XS5yZWdudW0pOw0KICAgICAgIGJyZWFrOw0KICAgICBjYXNlIFBBQ0tFVF9F TkFCTEU6DQogICAgICAgYnJlYWs7DQpkaWZmIC0tZ2l0IGEvZ2RiL3NvbC10 aHJlYWQuYyBiL2dkYi9zb2wtdGhyZWFkLmMNCmluZGV4IGEwOWEzYWI5YThi YzU2ZjM2N2UzYmExNTM3ZjU2NzRmMGE3ZjQ5MWYuLjA2YjE0NmMzMTRhMTBi ZTBlMzYwYTcyNDJiYWIyMjljZWQxYzAwYjEgMTAwNjQ0DQotLS0gYS9nZGIv c29sLXRocmVhZC5jDQorKysgYi9nZGIvc29sLXRocmVhZC5jDQpAQCAtNTM0 LDEyICs1MzQsNiBAQCBzb2xfdGhyZWFkX3N0b3JlX3JlZ2lzdGVycyAoc3Ry dWN0IHRhcmdldF9vcHMgKm9wcywNCg0KICAgaWYgKHJlZ251bSAhPSAtMSkN CiAgICAgew0KLSAgICAgIC8qIE5vdCB3cml0aW5nIGFsbCB0aGUgcmVnaXN0 ZXJzLiAgKi8NCi0gICAgICBjaGFyIG9sZF92YWx1ZVtNQVhfUkVHSVNURVJf U0laRV07DQotDQotICAgICAgLyogU2F2ZSBuZXcgcmVnaXN0ZXIgdmFsdWUu ICAqLw0KLSAgICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwg cmVnbnVtLCBvbGRfdmFsdWUpOw0KLQ0KICAgICAgIHZhbCA9IHBfdGRfdGhy X2dldGdyZWdzICgmdGhhbmRsZSwgZ3JlZ3NldCk7DQogICAgICAgaWYgKHZh bCAhPSBURF9PSykNCiAJZXJyb3IgKF8oInNvbF90aHJlYWRfc3RvcmVfcmVn aXN0ZXJzOiB0ZF90aHJfZ2V0Z3JlZ3MgJXMiKSwNCkBAIC01NDgsOSArNTQy LDYgQEAgc29sX3RocmVhZF9zdG9yZV9yZWdpc3RlcnMgKHN0cnVjdCB0YXJn ZXRfb3BzICpvcHMsDQogICAgICAgaWYgKHZhbCAhPSBURF9PSykNCiAJZXJy b3IgKF8oInNvbF90aHJlYWRfc3RvcmVfcmVnaXN0ZXJzOiB0ZF90aHJfZ2V0 ZnByZWdzICVzIiksDQogCSAgICAgICB0ZF9lcnJfc3RyaW5nICh2YWwpKTsN Ci0NCi0gICAgICAvKiBSZXN0b3JlIG5ldyByZWdpc3RlciB2YWx1ZS4gICov DQotICAgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIHJlZ251 bSwgb2xkX3ZhbHVlKTsNCiAgICAgfQ0KDQogICBmaWxsX2dyZWdzZXQgKHJl Z2NhY2hlLCAoZ2RiX2dyZWdzZXRfdCAqKSAmZ3JlZ3NldCwgcmVnbnVtKTsN CmRpZmYgLS1naXQgYS9nZGIvc3RhY2suYyBiL2dkYi9zdGFjay5jDQppbmRl eCBlMDBlMjk3MmNmMjBiYzYzOTE3YWYxOWY4NmJmNTdmMWM2YjBiNWIwLi43 YmE3ZDY4YmRlOGQ4M2VhMWU3MDBmYWE0NjZjNjk1MTk3OWUwZjc2IDEwMDY0 NA0KLS0tIGEvZ2RiL3N0YWNrLmMNCisrKyBiL2dkYi9zdGFjay5jDQpAQCAt MTY1MCwzMyArMTY1MCwzNSBAQCBmcmFtZV9pbmZvIChjaGFyICphZGRyX2V4 cCwgaW50IGZyb21fdHR5KQ0KICAgICBpbnQgY291bnQ7DQogICAgIGludCBp Ow0KICAgICBpbnQgbmVlZF9ubCA9IDE7DQorICAgIGludCBzcF9yZWdudW0g PSBnZGJhcmNoX3NwX3JlZ251bSAoZ2RiYXJjaCk7DQoNCiAgICAgLyogVGhl IHNwIGlzIHNwZWNpYWw7IHdoYXQncyBkaXNwbGF5ZWQgaXNuJ3QgdGhlIHNh dmUgYWRkcmVzcywgYnV0DQogICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgcHJl dmlvdXMgZnJhbWUncyBzcC4gIFRoaXMgaXMgYSBsZWdhY3kgdGhpbmcsDQog ICAgICAgIGF0IG9uZSBzdGFnZSB0aGUgZnJhbWUgY2FjaGVkIHRoZSBwcmV2 aW91cyBmcmFtZSdzIFNQIGluc3RlYWQNCiAgICAgICAgb2YgaXRzIGFkZHJl c3MsIGhlbmNlIGl0IHdhcyBlYXNpZXN0IHRvIGp1c3QgZGlzcGxheSB0aGUg Y2FjaGVkDQogICAgICAgIHZhbHVlLiAgKi8NCi0gICAgaWYgKGdkYmFyY2hf c3BfcmVnbnVtIChnZGJhcmNoKSA+PSAwKQ0KKyAgICBpZiAoc3BfcmVnbnVt ID49IDApDQogICAgICAgew0KIAkvKiBGaW5kIG91dCB0aGUgbG9jYXRpb24g b2YgdGhlIHNhdmVkIHN0YWNrIHBvaW50ZXIgd2l0aCBvdXQNCiAgICAgICAg ICAgIGFjdHVhbGx5IGV2YWx1YXRpbmcgaXQuICAqLw0KLQlmcmFtZV9yZWdp c3Rlcl91bndpbmQgKGZpLCBnZGJhcmNoX3NwX3JlZ251bSAoZ2RiYXJjaCks DQotCQkJICAgICAgICZvcHRpbWl6ZWQsICZ1bmF2YWlsYWJsZSwgJmx2YWws ICZhZGRyLA0KLQkJCSAgICAgICAmcmVhbG51bSwgTlVMTCk7DQorCWZyYW1l X3JlZ2lzdGVyX3Vud2luZCAoZmksIHNwX3JlZ251bSwgJm9wdGltaXplZCwg JnVuYXZhaWxhYmxlLCAmbHZhbCwNCisJCQkgICAgICAgJmFkZHIsICZyZWFs bnVtLCBOVUxMKTsNCiAJaWYgKCFvcHRpbWl6ZWQgJiYgIXVuYXZhaWxhYmxl ICYmIGx2YWwgPT0gbm90X2x2YWwpDQogCSAgew0KIAkgICAgZW51bSBiZmRf ZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFy Y2gpOw0KLQkgICAgaW50IHNwX3NpemUgPSByZWdpc3Rlcl9zaXplIChnZGJh cmNoLCBnZGJhcmNoX3NwX3JlZ251bSAoZ2RiYXJjaCkpOw0KLQkgICAgZ2Ri X2J5dGUgdmFsdWVbTUFYX1JFR0lTVEVSX1NJWkVdOw0KKwkgICAgaW50IHNw X3NpemUgPSByZWdpc3Rlcl9zaXplIChnZGJhcmNoLCBzcF9yZWdudW0pOw0K IAkgICAgQ09SRV9BRERSIHNwOw0KKwkgICAgc3RydWN0IHZhbHVlICp2YWx1 ZSA9IGZyYW1lX3Vud2luZF9yZWdpc3Rlcl92YWx1ZSAoZmksIHNwX3JlZ251 bSk7DQoNCi0JICAgIGZyYW1lX3JlZ2lzdGVyX3Vud2luZCAoZmksIGdkYmFy Y2hfc3BfcmVnbnVtIChnZGJhcmNoKSwNCi0JCQkJICAgJm9wdGltaXplZCwg JnVuYXZhaWxhYmxlLCAmbHZhbCwgJmFkZHIsDQotCQkJCSAgICZyZWFsbnVt LCB2YWx1ZSk7DQorCSAgICBnZGJfYXNzZXJ0ICh2YWx1ZSAhPSBOVUxMKTsN CiAJICAgIC8qIE5PVEU6IGNhZ25leS8yMDAzLTA1LTIyOiBUaGlzIGlzIGFz c3VtaW5nIHRoYXQgdGhlDQogICAgICAgICAgICAgICAgc3RhY2sgcG9pbnRl ciB3YXMgcGFja2VkIGFzIGFuIHVuc2lnbmVkIGludGVnZXIuICBUaGF0DQog ICAgICAgICAgICAgICAgbWF5IG9yIG1heSBub3QgYmUgdmFsaWQuICAqLw0K LQkgICAgc3AgPSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKHZhbHVlLCBz cF9zaXplLCBieXRlX29yZGVyKTsNCisJICAgIHNwID0gZXh0cmFjdF91bnNp Z25lZF9pbnRlZ2VyICh2YWx1ZV9jb250ZW50c19hbGwgKHZhbHVlKSwgc3Bf c2l6ZSwNCisJCQkJCSAgIGJ5dGVfb3JkZXIpOw0KKwkgICAgcmVsZWFzZV92 YWx1ZSAodmFsdWUpOw0KKwkgICAgdmFsdWVfZnJlZSAodmFsdWUpOw0KKw0K IAkgICAgcHJpbnRmX2ZpbHRlcmVkICgiIFByZXZpb3VzIGZyYW1lJ3Mgc3Ag aXMgIik7DQogCSAgICBmcHV0c19maWx0ZXJlZCAocGFkZHJlc3MgKGdkYmFy Y2gsIHNwKSwgZ2RiX3N0ZG91dCk7DQogCSAgICBwcmludGZfZmlsdGVyZWQg KCJcbiIpOw0KQEAgLTE3MDIsNyArMTcwNCw3IEBAIGZyYW1lX2luZm8gKGNo YXIgKmFkZHJfZXhwLCBpbnQgZnJvbV90dHkpDQogICAgIG51bXJlZ3MgPSBn ZGJhcmNoX251bV9yZWdzIChnZGJhcmNoKQ0KIAkgICAgICArIGdkYmFyY2hf bnVtX3BzZXVkb19yZWdzIChnZGJhcmNoKTsNCiAgICAgZm9yIChpID0gMDsg aSA8IG51bXJlZ3M7IGkrKykNCi0gICAgICBpZiAoaSAhPSBnZGJhcmNoX3Nw X3JlZ251bSAoZ2RiYXJjaCkNCisgICAgICBpZiAoaSAhPSBzcF9yZWdudW0N CiAJICAmJiBnZGJhcmNoX3JlZ2lzdGVyX3JlZ2dyb3VwX3AgKGdkYmFyY2gs IGksIGFsbF9yZWdncm91cCkpDQogCXsNCiAJICAvKiBGaW5kIG91dCB0aGUg bG9jYXRpb24gb2YgdGhlIHNhdmVkIHJlZ2lzdGVyIHdpdGhvdXQNCmRpZmYg LS1naXQgYS9nZGIvdGFyZ2V0LmMgYi9nZGIvdGFyZ2V0LmMNCmluZGV4IDNj NDA5ZjBmNjE5MTQxMjA1ZGZkY2JiZjhlNDZhMjc3NTg1ZWQ2ODMuLmFlMTMy MWM1Nzk4M2ZlMzQ0NjE0ODA5MGUxZDBhNGFhODIzYTNiMTkgMTAwNjQ0DQot LS0gYS9nZGIvdGFyZ2V0LmMNCisrKyBiL2dkYi90YXJnZXQuYw0KQEAgLTM1 NDcsNDkgKzM1NDcsMTIgQEAgdGFyZ2V0X29wdGlvbnNfdG9fc3RyaW5nIChp bnQgdGFyZ2V0X29wdGlvbnMpDQogICByZXR1cm4gcmV0Ow0KIH0NCg0KLXN0 YXRpYyB2b2lkDQotZGVidWdfcHJpbnRfcmVnaXN0ZXIgKGNvbnN0IGNoYXIg KiBmdW5jLA0KLQkJICAgICAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwg aW50IHJlZ25vKQ0KLXsNCi0gIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0g Z2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKTsNCi0NCi0gIGZwcmludGZf dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIiVzICIsIGZ1bmMpOw0KLSAgaWYg KHJlZ25vID49IDAgJiYgcmVnbm8gPCBnZGJhcmNoX251bV9yZWdzIChnZGJh cmNoKQ0KLSAgICAgICYmIGdkYmFyY2hfcmVnaXN0ZXJfbmFtZSAoZ2RiYXJj aCwgcmVnbm8pICE9IE5VTEwNCi0gICAgICAmJiBnZGJhcmNoX3JlZ2lzdGVy X25hbWUgKGdkYmFyY2gsIHJlZ25vKVswXSAhPSAnXDAnKQ0KLSAgICBmcHJp bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICIoJXMpIiwNCi0JCQlnZGJh cmNoX3JlZ2lzdGVyX25hbWUgKGdkYmFyY2gsIHJlZ25vKSk7DQotICBlbHNl DQotICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIiglZCki LCByZWdubyk7DQotICBpZiAocmVnbm8gPj0gMCAmJiByZWdubyA8IGdkYmFy Y2hfbnVtX3JlZ3MgKGdkYmFyY2gpKQ0KLSAgICB7DQotICAgICAgZW51bSBi ZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3JkZXIgKGdk YmFyY2gpOw0KLSAgICAgIGludCBpLCBzaXplID0gcmVnaXN0ZXJfc2l6ZSAo Z2RiYXJjaCwgcmVnbm8pOw0KLSAgICAgIGdkYl9ieXRlIGJ1ZltNQVhfUkVH SVNURVJfU0laRV07DQotDQotICAgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3Qg KHJlZ2NhY2hlLCByZWdubywgYnVmKTsNCi0gICAgICBmcHJpbnRmX3VuZmls dGVyZWQgKGdkYl9zdGRsb2csICIgPSAiKTsNCi0gICAgICBmb3IgKGkgPSAw OyBpIDwgc2l6ZTsgaSsrKQ0KLQl7DQotCSAgZnByaW50Zl91bmZpbHRlcmVk IChnZGJfc3RkbG9nLCAiJTAyeCIsIGJ1ZltpXSk7DQotCX0NCi0gICAgICBp ZiAoc2l6ZSA8PSBzaXplb2YgKExPTkdFU1QpKQ0KLQl7DQotCSAgVUxPTkdF U1QgdmFsID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyIChidWYsIHNpemUs IGJ5dGVfb3JkZXIpOw0KLQ0KLQkgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywgIiAlcyAlcyIsDQotCQkJICAgICAgY29yZV9hZGRyX3RvX3N0 cmluZ19ueiAodmFsKSwgcGxvbmdlc3QgKHZhbCkpOw0KLQl9DQotICAgIH0N Ci0gIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlxuIik7DQot fQ0KLQ0KIHZvaWQNCiB0YXJnZXRfZmV0Y2hfcmVnaXN0ZXJzIChzdHJ1Y3Qg cmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8pDQogew0KICAgY3VycmVu dF90YXJnZXQudG9fZmV0Y2hfcmVnaXN0ZXJzICgmY3VycmVudF90YXJnZXQs IHJlZ2NhY2hlLCByZWdubyk7DQogICBpZiAodGFyZ2V0ZGVidWcpDQotICAg IGRlYnVnX3ByaW50X3JlZ2lzdGVyICgidGFyZ2V0X2ZldGNoX3JlZ2lzdGVy cyIsIHJlZ2NhY2hlLCByZWdubyk7DQorICAgIHJlZ2NhY2hlX2RlYnVnX3By aW50X3JlZ2lzdGVyICgidGFyZ2V0X2ZldGNoX3JlZ2lzdGVycyIsIHJlZ2Nh Y2hlLCByZWdubyk7DQogfQ0KDQogdm9pZA0KQEAgLTM2MDEsNyArMzU2NCw4 IEBAIHRhcmdldF9zdG9yZV9yZWdpc3RlcnMgKHN0cnVjdCByZWdjYWNoZSAq cmVnY2FjaGUsIGludCByZWdubykNCiAgIGN1cnJlbnRfdGFyZ2V0LnRvX3N0 b3JlX3JlZ2lzdGVycyAoJmN1cnJlbnRfdGFyZ2V0LCByZWdjYWNoZSwgcmVn bm8pOw0KICAgaWYgKHRhcmdldGRlYnVnKQ0KICAgICB7DQotICAgICAgZGVi dWdfcHJpbnRfcmVnaXN0ZXIgKCJ0YXJnZXRfc3RvcmVfcmVnaXN0ZXJzIiwg cmVnY2FjaGUsIHJlZ25vKTsNCisgICAgICByZWdjYWNoZV9kZWJ1Z19wcmlu dF9yZWdpc3RlciAoInRhcmdldF9zdG9yZV9yZWdpc3RlcnMiLCByZWdjYWNo ZSwNCisJCQkJICAgICByZWdubyk7DQogICAgIH0NCiB9DQoNCg0KDQoNCg== >From gdb-patches-return-136781-listarch-gdb-patches=sources.redhat.com@sourceware.org Tue Feb 07 16:59:03 2017 Return-Path: Delivered-To: listarch-gdb-patches@sources.redhat.com Received: (qmail 69979 invoked by alias); 7 Feb 2017 16:59:02 -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 Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 69855 invoked by uid 89); 7 Feb 2017 16:59:01 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RCVD_IN_DNSWL_LOW autolearn=no version=3.3.2 spammy=836, concat, utils.c, UD:utils.c X-HELO: mx0a-001b2d01.pphosted.com Received: from mx0b-001b2d01.pphosted.com (HELO mx0a-001b2d01.pphosted.com) (148.163.158.5) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 07 Feb 2017 16:58:59 +0000 Received: from pps.filterd (m0098416.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.20/8.16.0.20) with SMTP id v17Gwn8O076236 for ; Tue, 7 Feb 2017 11:58:58 -0500 Received: from e06smtp13.uk.ibm.com (e06smtp13.uk.ibm.com [195.75.94.109]) by mx0b-001b2d01.pphosted.com with ESMTP id 28fch52dch-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 07 Feb 2017 11:58:57 -0500 Received: from localhost by e06smtp13.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 7 Feb 2017 16:58:55 -0000 Received: from d06dlp03.portsmouth.uk.ibm.com (9.149.20.15) by e06smtp13.uk.ibm.com (192.168.101.143) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 7 Feb 2017 16:58:53 -0000 Received: from b06cxnps4076.portsmouth.uk.ibm.com (d06relay13.portsmouth.uk.ibm.com [9.149.109.198]) by d06dlp03.portsmouth.uk.ibm.com (Postfix) with ESMTP id 89D4F1B08072; Tue, 7 Feb 2017 17:01:45 +0000 (GMT) Received: from d06av25.portsmouth.uk.ibm.com (d06av25.portsmouth.uk.ibm.com [9.149.105.61]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v17Gwq3E8388900; Tue, 7 Feb 2017 16:58:52 GMT Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D4F6411C04C; Tue, 7 Feb 2017 15:56:39 +0000 (GMT) Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AEE2311C050; Tue, 7 Feb 2017 15:56:39 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av25.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Tue, 7 Feb 2017 15:56:39 +0000 (GMT) From: Philipp Rudo To: gdb-patches@sourceware.org Cc: peter.griffin@linaro.org, arnez@linux.vnet.ibm.com, yao.qi@arm.com Subject: [RFC v2 2/8] Add libiberty/concat styled concat_path function Date: Tue, 07 Feb 2017 16:59:00 -0000 In-Reply-To: <20170207165849.23216-1-prudo@linux.vnet.ibm.com> References: <20170207165849.23216-1-prudo@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 X-Content-Scanned: Fidelis XPS MAILER x-cbid: 17020716-0012-0000-0000-000004C901F4 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17020716-0013-0000-0000-0000172B428F Message-Id: <20170207165849.23216-3-prudo@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-02-07_09:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=1 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1612050000 definitions=main-1702070161 X-IsSubscribed: yes X-SW-Source: 2017-02/txt/msg00158.txt.bz2 Content-length: 3866 This commit adds concat_path function to concatenate an arbitrary number of path elements. The function automatically adds an directory separator between two elements as needed. gdb/ChangeLog: * common/common-utils.h (endswith): New function. * utils.c (_concat_path, approx_path_length): New function. * utils.h (_concat_path): New export. (concat_path): New define. --- gdb/common/common-utils.h | 11 +++++++++++ gdb/utils.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ gdb/utils.h | 17 +++++++++++++++++ 3 files changed, 74 insertions(+) diff --git a/gdb/common/common-utils.h b/gdb/common/common-utils.h index 618d266..47fdeeb 100644 --- a/gdb/common/common-utils.h +++ b/gdb/common/common-utils.h @@ -83,6 +83,17 @@ startswith (const char *string, const char *pattern) return strncmp (string, pattern, strlen (pattern)) == 0; } +/* Return non-zero if the end of STRING matches PATTERN, zero + otherwise. */ + +static inline int +endswith (const char *string, const char *pattern) +{ + return (strlen (string) > strlen (pattern) + && strncmp (string + strlen (string) - strlen (pattern), pattern, + strlen (pattern)) == 0); +} + ULONGEST strtoulst (const char *num, const char **trailer, int base); /* Skip leading whitespace characters in INP, returning an updated diff --git a/gdb/utils.c b/gdb/utils.c index 2b947aa..1103850 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -3179,6 +3179,52 @@ substitute_path_component (std::string &str, const std::string &from, } } +/* Approximate length of final path. Helper for concat_path. */ + +static inline unsigned long +approx_path_length (std::initializer_list args, + std::string dir_separator) +{ + size_t length = 0; + + for (const std::string &arg: args) + length += arg.length () + dir_separator.length (); + + return length; +} + +/* See utils.h. */ + +std::string +_concat_path (std::initializer_list args, + std::string dir_separator) +{ + std::string dst; + dst.reserve (approx_path_length (args, dir_separator)); + + for (const std::string &arg : args) + { + if (arg.empty ()) + continue; + + if (startswith (arg.c_str (), dir_separator.c_str ()) + && endswith (dst.c_str (), dir_separator.c_str ())) + dst.erase (dst.length () - dir_separator.length (), + dir_separator.length ()); + + else if (!dst.empty () + && !startswith (arg.c_str (), dir_separator.c_str ()) + && !endswith (dst.c_str (), dir_separator.c_str ()) + && dst != TARGET_SYSROOT_PREFIX) + dst += dir_separator; + + dst += arg; + } + + dst.shrink_to_fit (); + return dst; +} + #ifdef HAVE_WAITPID #ifdef SIGALRM diff --git a/gdb/utils.h b/gdb/utils.h index d32114e..d9dbaec 100644 --- a/gdb/utils.h +++ b/gdb/utils.h @@ -24,6 +24,7 @@ #include "exceptions.h" #include "common/scoped_restore.h" #include +#include extern void initialize_utils (void); @@ -140,6 +141,22 @@ extern void substitute_path_component (std::string &str, const std::string &from, const std::string &to); +/* Concatenate an arbitrary number of path elements. Adds and removes + directory separators as needed. + + concat_path (/first, second) => /first/second + concat_path (first, second) => first/second + concat_path (first/, second) => first/second + concat_path (first, /second) => first/second + concat_path (first/, /second) => first/second + concat_path (target:, second) => target:second + */ + +extern std::string _concat_path (std::initializer_list args, + std::string dir_separator); + +#define concat_path(...) _concat_path ({__VA_ARGS__}, SLASH_STRING) + char *ldirname (const char *filename); extern int count_path_elements (const char *path); -- 2.8.4