From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 364B9C46470 for ; Tue, 7 May 2019 14:20:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id EB35820C01 for ; Tue, 7 May 2019 14:20:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="L39S0TpC" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726634AbfEGOUL (ORCPT ); Tue, 7 May 2019 10:20:11 -0400 Received: from mail-eopbgr00079.outbound.protection.outlook.com ([40.107.0.79]:38368 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726511AbfEGOUK (ORCPT ); Tue, 7 May 2019 10:20:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9h4/2oKSln9w95KLOd2tBhW2ciW56SzEO65EksUa70U=; b=L39S0TpCz/RRT+eAik33YFN7kPcFm4RscWnYDYCO8LXxNlN86f42UWpjIZWvb3P3+jkzbU0z1ty/LP/umluXvTMyCmiF7ltGJHz4DIzH5g0tvb0+C0iYCrlU63OFnolxyL9KBDIFS3WyOhWTAtgvmY3R5QyPV8Cr/cbm8+81HT8= Received: from AM6PR05MB5879.eurprd05.prod.outlook.com (20.179.0.76) by AM6PR05MB6023.eurprd05.prod.outlook.com (20.179.2.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1856.11; Tue, 7 May 2019 14:19:45 +0000 Received: from AM6PR05MB5879.eurprd05.prod.outlook.com ([fe80::cc18:150a:7740:1e2f]) by AM6PR05MB5879.eurprd05.prod.outlook.com ([fe80::cc18:150a:7740:1e2f%2]) with mapi id 15.20.1856.012; Tue, 7 May 2019 14:19:45 +0000 From: Maxim Mikityanskiy To: Magnus Karlsson CC: =?utf-8?B?QmrDtnJuIFTDtnBlbA==?= , Alexei Starovoitov , Daniel Borkmann , =?utf-8?B?QmrDtnJuIFTDtnBlbA==?= , Magnus Karlsson , "bpf@vger.kernel.org" , "netdev@vger.kernel.org" , "David S. Miller" , Saeed Mahameed , Jonathan Lemon , Tariq Toukan , Martin KaFai Lau , Song Liu , Yonghong Song , Jakub Kicinski , Maciej Fijalkowski Subject: Re: [PATCH bpf-next v2 04/16] xsk: Extend channels to support combined XSK/non-XSK traffic Thread-Topic: [PATCH bpf-next v2 04/16] xsk: Extend channels to support combined XSK/non-XSK traffic Thread-Index: AQHU/4BNBZRhWiv6AkKYN9sYVKeCy6ZbPeMAgALnBoCAAAqmAIABkUSA Date: Tue, 7 May 2019 14:19:45 +0000 Message-ID: References: <20190430181215.15305-1-maximmi@mellanox.com> <20190430181215.15305-5-maximmi@mellanox.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM0PR06CA0041.eurprd06.prod.outlook.com (2603:10a6:208:aa::18) To AM6PR05MB5879.eurprd05.prod.outlook.com (2603:10a6:20b:a2::12) authentication-results: spf=none (sender IP is ) smtp.mailfrom=maximmi@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.67.35.250] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a185b59b-639c-4872-b804-08d6d2f70dc3 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(4618075)(2017052603328)(7193020);SRVR:AM6PR05MB6023; x-ms-traffictypediagnostic: AM6PR05MB6023: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0030839EEE x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(136003)(376002)(396003)(39860400002)(346002)(189003)(199004)(6486002)(68736007)(71200400001)(5660300002)(478600001)(53946003)(26005)(446003)(11346002)(2616005)(476003)(6512007)(31686004)(6436002)(7416002)(2906002)(66476007)(5024004)(64756008)(73956011)(66574012)(6116002)(3846002)(14444005)(256004)(66556008)(66446008)(66946007)(486006)(66066001)(316002)(53936002)(6246003)(86362001)(102836004)(386003)(6506007)(71190400001)(99286004)(52116002)(186003)(54906003)(53546011)(4326008)(229853002)(8676002)(6916009)(81156014)(81166006)(7736002)(30864003)(25786009)(14454004)(36756003)(76176011)(8936002)(305945005)(31696002)(579004)(559001);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR05MB6023;H:AM6PR05MB5879.eurprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: H9CxtjCVJMb11n1Rp975a5uIqlIX+9dYcb5Ur4GTSzfWuv5/p/1y8PO8BYq143cV999Lgu6lkl7PepbJKQuvf3Q4wEQjUHCOMc3jmaSg355s9XYeruNUXy6NOjK8KpHyjDAsUadBomV8phw1g63qKHkxRyQEtZU32vD0KVQKTu4FFJw34qsaM1vI6mSZWxMpKlSQpFJZDAv20AvAWcM+VpTDAO9C57v9QqOj/QIDDaxVDmDcgt6feN/R9w0Sfe46Oxev9SmdDerFxj1hyp0ak21o+cLBpvFgZhtBXoiCfLcAbFll8gjN3iojjN1HmYLFOMKME8YbRIW23uciFX925q4BvdJWRUqixEwnLGON6VbNwFPukhxELaZE4MQNUD84C2t7iE7fekbFoY9VFuyGjqdYNY45M6zZbthK3zcNG7I= Content-Type: text/plain; charset="utf-8" Content-ID: <5C9C4DAF3FDAF0478AC6C2425AA06613@eurprd05.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: a185b59b-639c-4872-b804-08d6d2f70dc3 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 May 2019 14:19:45.2711 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR05MB6023 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org T24gMjAxOS0wNS0wNiAxNzoyMywgTWFnbnVzIEthcmxzc29uIHdyb3RlOg0KPiBPbiBNb24sIE1h eSA2LCAyMDE5IGF0IDM6NDYgUE0gTWF4aW0gTWlraXR5YW5za2l5IDxtYXhpbW1pQG1lbGxhbm94 LmNvbT4gd3JvdGU6DQo+Pg0KPj4gT24gMjAxOS0wNS0wNCAyMDoyNiwgQmrDtnJuIFTDtnBlbCB3 cm90ZToNCj4+PiBPbiBUdWUsIDMwIEFwciAyMDE5IGF0IDIwOjEyLCBNYXhpbSBNaWtpdHlhbnNr aXkgPG1heGltbWlAbWVsbGFub3guY29tPiB3cm90ZToNCj4+Pj4NCj4+Pj4gQ3VycmVudGx5LCB0 aGUgZHJpdmVycyB0aGF0IGltcGxlbWVudCBBRl9YRFAgemVyby1jb3B5IHN1cHBvcnQgKGUuZy4s DQo+Pj4+IGk0MGUpIHN3aXRjaCB0aGUgY2hhbm5lbCBpbnRvIGEgZGlmZmVyZW50IG1vZGUgd2hl biBhbiBYU0sgaXMgb3BlbmVkLiBJdA0KPj4+PiBjYXVzZXMgc29tZSBpc3N1ZXMgdGhhdCBoYXZl IHRvIGJlIHRha2VuIGludG8gYWNjb3VudC4gRm9yIGV4YW1wbGUsIFJTUw0KPj4+PiBuZWVkcyB0 byBiZSByZWNvbmZpZ3VyZWQgdG8gc2tpcCB0aGUgWFNLLWVuYWJsZWQgY2hhbm5lbHMsIG9yIHRo ZSBYRFANCj4+Pj4gcHJvZ3JhbSBzaG91bGQgZmlsdGVyIG91dCB0cmFmZmljIG5vdCBpbnRlbmRl ZCBmb3IgdGhhdCBzb2NrZXQgYW5kDQo+Pj4+IFhEUF9QQVNTIGl0IHdpdGggYW4gYWRkaXRpb25h bCBjb3B5LiBBcyBub3RoaW5nIHZhbGlkYXRlcyBvciBmb3JjZXMgdGhlDQo+Pj4+IHByb3BlciBj b25maWd1cmF0aW9uLCBpdCdzIGVhc3kgdG8gaGF2ZSBwYWNrZXRzIGRyb3BzLCB3aGVuIHRoZXkg Z2V0DQo+Pj4+IGludG8gYW4gWFNLIGJ5IG1pc3Rha2UsIGFuZCwgaW4gZmFjdCwgaXQncyB0aGUg ZGVmYXVsdCBjb25maWd1cmF0aW9uLg0KPj4+PiBUaGVyZSBoYXMgdG8gYmUgc29tZSB0b29sIHRv IGhhdmUgUlNTIHJlY29uZmlndXJlZCBvbiBlYWNoIHNvY2tldCBvcGVuDQo+Pj4+IGFuZCBjbG9z ZSBldmVudCwgYnV0IHN1Y2ggYSB0b29sIGlzIHByb2JsZW1hdGljIHRvIGltcGxlbWVudCwgYmVj YXVzZSBubw0KPj4+PiBvbmUgcmVwb3J0cyB0aGVzZSBldmVudHMsIGFuZCBpdCdzIHJhY2UtcHJv bmUuDQo+Pj4+DQo+Pj4+IFRoaXMgY29tbWl0IGV4dGVuZHMgWFNLIHRvIHN1cHBvcnQgYm90aCBr aW5kcyBvZiB0cmFmZmljIChYU0sgYW5kDQo+Pj4+IG5vbi1YU0spIGluIHRoZSBzYW1lIGNoYW5u ZWwuIEl0IGltcGxpZXMgaGF2aW5nIHR3byBSWCBxdWV1ZXMgaW4NCj4+Pj4gWFNLLWVuYWJsZWQg Y2hhbm5lbHM6IG9uZSBmb3IgdGhlIHJlZ3VsYXIgdHJhZmZpYywgYW5kIHRoZSBvdGhlciBmb3IN Cj4+Pj4gWFNLLiBJdCBzb2x2ZXMgdGhlIHByb2JsZW0gd2l0aCBSU1M6IHRoZSBkZWZhdWx0IGNv bmZpZ3VyYXRpb24ganVzdA0KPj4+PiB3b3JrcyB3aXRob3V0IHRoZSBuZWVkIHRvIG1hbnVhbGx5 IHJlY29uZmlndXJlIFJTUyBvciB0byBwZXJmb3JtIHNvbWUNCj4+Pj4gcG9zc2libHkgY29tcGxp Y2F0ZWQgZmlsdGVyaW5nIGluIHRoZSBYRFAgbGF5ZXIuIEl0IG1ha2VzIGl0IGVhc3kgdG8gcnVu DQo+Pj4+IGJvdGggQUZfWERQIGFuZCByZWd1bGFyIHNvY2tldHMgb24gdGhlIHNhbWUgbWFjaGlu ZS4gSW4gdGhlIFhEUCBwcm9ncmFtLA0KPj4+PiB0aGUgUUlEJ3MgbW9zdCBzaWduaWZpY2FudCBi aXQgd2lsbCBzZXJ2ZSBhcyBhIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlcg0KPj4+PiBpdCdzIHRo ZSBYU0sgcXVldWUgb3Igbm90LiBUaGUgZXh0ZW5zaW9uIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUg bGVnYWN5DQo+Pj4+IGNvbmZpZ3VyYXRpb24sIHNvIGlmIG9uZSB3YW50cyB0byBydW4gdGhlIGxl Z2FjeSBtb2RlLCB0aGV5IGNhbg0KPj4+PiByZWNvbmZpZ3VyZSBSU1MgYW5kIGlnbm9yZSB0aGUg ZmxhZyBpbiB0aGUgWERQIHByb2dyYW0gKGltcGxlbWVudGVkIGluDQo+Pj4+IHRoZSByZWZlcmVu Y2UgWERQIHByb2dyYW0gaW4gbGliYnBmKS4gbWx4NWUgd2lsbCBzdXBwb3J0IHRoaXMgZXh0ZW5z aW9uLg0KPj4+Pg0KPj4+PiBBIHNpbmdsZSBYRFAgcHJvZ3JhbSBjYW4gcnVuIGJvdGggd2l0aCBk cml2ZXJzIHN1cHBvcnRpbmcgb3Igbm90DQo+Pj4+IHN1cHBvcnRpbmcgdGhpcyBleHRlbnNpb24u IFRoZSB4ZHBzb2NrIHNhbXBsZSBhbmQgbGliYnBmIGFyZSB1cGRhdGVkDQo+Pj4+IGFjY29yZGlu Z2x5Lg0KPj4+Pg0KPj4+DQo+Pj4gSSdtIHN0aWxsIG5vdCBhIGZhbiBvZiB0aGlzLCBvciBtYXli ZSBJJ20gbm90IGZvbGxvd2luZyB5b3UuIEl0IG1ha2VzDQo+Pj4gaXQgbW9yZSBjb21wbGV4IGFu ZCBldmVuIGhhcmRlciB0byB1c2UuIExldCdzIHRha2UgYSBsb29rIGF0IHRoZQ0KPj4+IGtlcm5l bCBub21lbmNsYXR1cmUuICJldGh0b29sIiB1c2VzIG5ldGRldnMgYW5kIGNoYW5uZWxzLiBBIGNo YW5uZWwgaXMNCj4+PiBhIFJ4IHF1ZXVlIG9yIGEgVHggcXVldWUuDQo+Pg0KPj4gVGhlcmUgYXJl IGFsc28gY29tYmluZWQgY2hhbm5lbHMgdGhhdCBjb25zaXN0IG9mIGFuIFJYIGFuZCBhIFRYIHF1 ZXVlLg0KPj4gbWx4NWUgaGFzIG9ubHkgdGhpcyBraW5kIG9mIGNoYW5uZWxzLiBGb3IgdXMsIGEg Y2hhbm5lbCBpcyBhIHNldCBvZg0KPj4gcXVldWVzICJwaW5uZWQgdG8gYSBDUFUgY29yZSIgKHRo ZXkgdXNlIHRoZSBzYW1lIE5BUEkpLg0KPj4NCj4+PiBJbiBBRl9YRFAgd2UgY2FsbCB0aGUgY2hh bm5lbCBhIHF1ZXVlLCB3aGljaA0KPj4+IGlzIHdoYXQga2VybmVsIHVzZXMgaW50ZXJuYWxseSAo bmV0ZGV2X3J4X3F1ZXVlLCBuZXRkZXZfcXVldWUpLg0KPj4NCj4+IFlvdSBzZWVtIHRvIGFncmVl IGl0J3MgYSBjaGFubmVsLCByaWdodD8NCj4+DQo+PiBBRl9YRFAgZG9lc24ndCBhbGxvdyB0byBj b25maWd1cmUgUlggcXVldWUgbnVtYmVyIGFuZCBUWCBxdWV1ZSBudW1iZXINCj4+IHNlcGFyYXRl bHkuIEJhc2ljYWxseSB5b3UgY2hvb3NlIGEgY2hhbm5lbCBpbiBBRl9YRFAuIEZvciBzb21lIHJl YXNvbiwNCj4+IGl0J3MgcmVmZXJyZWQgYXMgYSBxdWV1ZSBpbiBzb21lIHBsYWNlcywgYnV0IGxv Z2ljYWxseSBpdCBtZWFucyAiY2hhbm5lbCIuDQo+IA0KPiBZb3UgY2FuIGNvbmZpZ3VyZSB0aGUg UnggcXVldWUgYW5kIHRoZSBUeCBxdWV1ZSBzZXBhcmF0ZWx5IGJ5IGNyZWF0aW5nDQo+IHR3byBz b2NrZXRzIHRpZWQgdG8gdGhlIHNhbWUgdW1lbSBhcmVhLiBCdXQgaWYgeW91IGp1c3QgY3JlYXRl IG9uZSwNCj4geW91IGFyZSBjb3JyZWN0Lg0KDQpZZXMsIEkga25vdyBJIGNhbiBvcGVuIHR3byBz b2NrZXRzLCBidXQgaXQncyBvbmx5IGEgd29ya2Fyb3VuZC4gSWYgSSANCndhbnQgdG8gUlggb24g UlEgMyBhbmQgVFggb24gU1EgNSwgSSdsbCBoYXZlIG9uZSBzb2NrZXQgYm91bmQgdG8gUlEgMyAN CmFuZCBTUSAzLCBhbmQgdGhlIG90aGVyIGJvdW5kIHRvIFJRIDUgYW5kIFNRIDUuIEl0J3Mgbm90 IGEgY2xlYW4gd2F5IHRvIA0KYWNoaWV2ZSB0aGUgaW5pdGlhbCBnb2FsLiBJdCBtZWFucyB0aGF0 IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIA0KYWN0dWFsbHkgYmluZHMgYSBzb2NrZXQgdG8g YSBjaGFubmVsIFggKHRoYXQgaGFzIFJRIFggYW5kIFNRIFgpLiBJdCANCmNvdWxkIGJlIGRpZmZl cmVudCBpZiB0aGVyZSB3ZXJlIHR3byBraW5kcyBvZiBYU0sgc29ja2V0czogUlgtb25seSBhbmQg DQpUWC1vbmx5LCBidXQgaXQncyBub3QgdGhlIGNhc2UuDQoNCj4+PiBUb2RheSwgQUZfWERQIGNh biBhdHRhY2ggdG8gYW4gZXhpc3RpbmcgcXVldWUgZm9yIGluZ3Jlc3MuIChPbiB0aGUNCj4+PiBl Z3Jlc3Mgc2lkZSwgd2UncmUgdXNpbmcgImEgcXVldWUiLCBidXQgdGhlICJYRFAgcXVldWUiLiBY RFAgaGFzIHRoZXNlDQo+Pj4gInNoYWRvdyBxdWV1ZXMiIHdoaWNoIGFyZSBzZXBhcmF0ZWQgZnJv bSB0aGUgbmV0ZGV2LiBUaGlzIGlzIGEgYml0DQo+Pj4gbWVzc3ksIGFuZCB3ZSBjYW4ndCByZWFs bHkgY29uZmlndXJlIHRoZW0uIEkgYmVsaWV2ZSBKYWt1YiBoYXMgc29tZQ0KPj4+IGlkZWFzIGhl cmUuIDotKSBGb3Igbm93LCBsZXQncyBsZWF2ZSBlZ3Jlc3MgYXNpZGUuKQ0KPj4NCj4+IFNvLCBY RFAgYWxyZWFkeSBoYXMgInNoYWRvdyBxdWV1ZXMiIGZvciBUWCwgc28gSSBzZWUgbm8gcHJvYmxl bSBpbg0KPj4gaGF2aW5nIHRoZSBzaW1pbGFyIGNvbmNlcHQgZm9yIEFGX1hEUCBSWC4NCj4gDQo+ IFRoZSBxdWVzdGlvbiBpcyBpZiB3ZSB3b3VsZCBsaWtlIHRvIGNvbnRpbnVlIGRvd24gdGhlIHBh dGggb2YgInNoYWRvdw0KPiBxdWV1ZXMiIGJ5IGFkZGluZyBldmVuIG1vcmUuDQoNCk9LLCBJIHRo aW5rICJzaGFkb3cgcXVldWVzIiBpcyBub3QgYSB2YWxpZCBuYW1lLCBhbmQgaXQncyBjZXJ0YWlu bHkgbm90IA0Kc29tZXRoaW5nIGJhZC4gSW5pdGlhbGx5LCBrZXJuZWwgaGFkIGEgY29uY2VwdCBv ZiBSWCBhbmQgVFggcXVldWVzLiBUaGV5IA0KY2FuIG1hdGNoIHRoZSBxdWV1ZXMgdGhlIGRyaXZl ciBoYXMgZm9yIHJlZ3VsYXIgdHJhZmZpYy4gVGhlbiBuZXcgDQpmZWF0dXJlcyBhcHBlYXJlZCAo WERQLCB0aGVuIEFGX1hEUCksIGFuZCB0aGV5IHJlcXVpcmVkIG5ldyB0eXBlcyBvZiANCnF1ZXVl czogWERQIFRYIHF1ZXVlLCBBRl9YRFAgUlggcXVldWUuIFRoZXNlIGFyZSBhYnNvbHV0ZWx5IG5l dyANCmNvbmNlcHRzLCB0aGV5IGFyZW4ndCBpbnRlcmNoYW5nZWFibGUgd2l0aCB0aGUgbGVnYWN5 IFJYIGFuZCBUWCBxdWV1ZXMuIA0KSXQgbWVhbnMgd2UgY2FuJ3QganVzdCBzYXkgd2UgaGF2ZSAz MiBUWCBxdWV1ZXMsIDE2IG9mIHdoaWNoIGFyZSByZWd1bGFyIA0KU1FzIGFuZCAxNiBhcmUgWERQ IFNRcy4gVGhleSBmdW5jdGlvbiBkaWZmZXJlbnRseTogdGhlIHN0YWNrIG11c3Qgbm90IA0KdHJ5 IHNlbmRpbmcgYW55dGhpbmcgZnJvbSBhbiBYRFAgU1EsIGFuZCBYRFBfUkVESVJFQ1QgbXVzdCBu b3QgdHJ5IA0Kc2VuZGluZyBmcm9tIHRoZSByZWd1bGFyIFNRLg0KDQpIb3dldmVyLCB0aGUga2Vy bmVsIGRpZG4ndCBsZWFybiBhYm91dCBuZXcgdHlwZXMgb2YgcXVldWVzLiBUaGF0J3Mgd2h5IA0K dGhlIG5ldyBxdWV1ZXMgcmVtYWluICJpbiBzaGFkb3ciLiBBbmQgd2UgY2VydGFpbmx5IHNob3Vs ZG4ndCB1c2UgdGhlIA0Kc2FtZSBudW1lcmF0aW9uIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgcXVl dWVzLCBpLmUuIGl0J3MgaW5jb3JyZWN0IHRvIA0Kc2F5IHRoYXQgVFggcXVldWVzIDAuLjE1IGFy ZSByZWd1bGFyIFNRcywgVFggcXVldWVzIDE2Li4zMSBhcmUgWERQIFNRcywgDQpldGMuIFRoZSBj b3JyZWN0IHdheSBpczogdGhlcmUgYXJlIDE2IHJlZ3VsYXIgU1FzIDAuLjE1IGFuZCAxNiBYRFAg U1FzIA0KMC4uMTUuDQoNClRoZSBzYW1lIGNvbnNpZGVyYXRpb25zIGFwcGx5IHRvIEFGX1hEUCBS WCBxdWV1ZXMgKFhTSyBSUXMpLiBUaGlzIGlzIGEgDQp3aG9sZSBuZXcgdHlwZSBvZiBxdWV1ZSwg c28gaXQgY2FuJ3QgYmUgbWl4ZWQgd2l0aCB0aGUgcmVndWxhciBSUXMuIA0KVGhhdCdzIHdoeSB0 aGV5IGhhdmUgdGhlaXIgb3duIG51bWVyYXRpb24gYW5kIGFyZSBub3QgYWNjb3VudGVkIGFzIFJY IA0KcXVldWVzIChtb3Jlb3ZlciwgdGhlaXIgbnVtZXJhdGlvbiBjYW4gYmUgbm9uLWNvbnRpZ3Vv dXMpLiBJZiB0aGUga2VybmVsIA0KaGFkIG5lZWQgdG8ga25vdyBhYm91dCB0aGVtLCB0aGV5IGNv dWxkIGJlIGV4cG9zZWQgdG8gdGhlIG5ldGRldiBhcyBhIA0KdGhpcmQgdHlwZSBvZiBxdWV1ZSwg YnV0IEkgc2VlIG5vIG5lZWQgY3VycmVudGx5Lg0KDQo+IEluIHRoZSBidXN5LXBvbGwgUkZDIEkg c2VudCBvdXQgbGFzdA0KPiB3ZWVrLCBJIHRhbGsgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IHRvIGNy ZWF0ZSBhIG5ldyBxdWV1ZSAoc2V0KSBub3QNCj4gdGllZCB0byB0aGUgbmFwaSBvZiB0aGUgcmVn dWxhciBSeCBxdWV1ZXMgaW4gb3JkZXIgdG8gZ2V0IGJldHRlcg0KPiBwZXJmb3JtYW5jZSB3aGVu IHVzaW5nIGJ1c3ktcG9sbC4gSG93IHdvdWxkIHN1Y2ggYSBxdWV1ZSBzZXQgZml0IGludG8NCj4g YSBzaGFkb3cgcXVldWUgc2V0IGFwcHJvYWNoPw0KDQpMb29raW5nIGF0IHRoZSBxdWVzdGlvbiBp biB0aGUgUkZDLCBJIGRvbid0IHNlZSBpbiB3aGF0IHdheSBpdCANCmludGVyZmVyZXMgd2l0aCBY U0sgUlFzLiBNb3Jlb3ZlciwgaXQncyBldmVuIG1vcmUgY29udmVuaWVudCB0byBoYXZlIGEgDQpz ZXBhcmF0ZSB0eXBlIG9mIHF1ZXVlIC0geW91J2xsIGJlIGFibGUgdG8gY3JlYXRlIGFuZCBkZXN0 cm95ICJ1bmJvdW5kIiANCihub3QgZHJpdmVuIGJ5IGFuIGludGVycnVwdCwgaGF2aW5nIGEgc2Vw YXJhdGUgTkFQSSkgWFNLIFJRcyB3aXRob3V0IA0KaW50ZXJmZXJpbmcgd2l0aCB0aGUgcmVndWxh ciBxdWV1ZXMuIEF0IGZpcnN0IHNpZ2h0LCBJIHdvdWxkIHNheSBpdCdzIGEgDQpwZXJmZWN0IGZp dCA6KS4gRm9yIG1lLCBpdCBsb29rcyBjbGVhbmVyIHdoZW4gd2UgaGF2ZSByZWd1bGFyIFJRcyBp biANCmNoYW5uZWxzLCBYU0sgUlFzIGluIGNoYW5uZWxzIGFuZCAidW5ib3VuZCIgWFNLIFJRcyB0 aGFuIGhhdmluZyBjaGFubmVscyANCnRoYXQgc3dpdGNoIHRoZSBSUSB0eXBlIGFuZCBoYXZpbmcg c29tZSBleHRyYSBvdXQtb2YtY2hhbm5lbCBSUXMgdGhhdCANCmJlaGF2ZSBkaWZmZXJlbnRseSwg YnV0IGxvb2sgdGhlIHNhbWUgdG8gdGhlIGtlcm5lbC4NCg0KPiBXaGVuIGRvZXMgaGlkaW5nIHRo ZSByZWFsIHF1ZXVlcyBjcmVhdGVkDQo+IHRvIHN1cHBvcnQgdmFyaW91cyBmZWF0dXJlcyBicmVh ayBhbmQgd2UgaGF2ZSB0byBleHBvc2UgdGhlIHJlYWwgcXVldWUNCj4gbnVtYmVyPyBUcnlpbmcg dG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGVzZSBxdWVzdGlvbnMuDQoNCkFzIEkgc2FpZCBhYm92 ZSwgZGlmZmVyZW50IHR5cGVzIG9mIHF1ZXVlcyBzaG91bGQgbm90IHNoYXJlIHRoZSANCm51bWVy YXRpb24uIFNvLCBpZiBuZWVkIGJlLCB0aGV5IGNhbiBiZSBleHBvc2VkIGFzIGEgZGlmZmVyZW50 IHR5cGUsIGJ1dCANCkkgZG9uJ3Qgc2VlIHRoZSBuZWNlc3NpdHkgeWV0Lg0KDQo+IE1heGltLCB3 b3VsZCBpdCBiZSBwb3NzaWJsZSBmb3IgeW91IHRvIHJlc3BpbiB0aGlzIHNldCB3aXRob3V0IHRo aXMNCj4gZmVhdHVyZT8NCg0KVGhhdCdzIG5vdCBhcyBlYXN5IGFzIHlvdSBtYXkgdGhpbmsuLi4g SXQncyBub3QganVzdCBhIGZlYXR1cmUgLSBmb3IgdGhlIA0Ka2VybmVsIGl0J3MganVzdCBhIGZl YXR1cmUsIGJ1dCBmb3IgdGhlIGRyaXZlciBpdCdzIHBhcnQgb2YgY29yZSBkZXNpZ24gDQpvZiBB Rl9YRFAgc3VwcG9ydCBpbiBtbHg1LiBSZW1vdmluZyBpdCB3aWxsIHJlcXVpcmUgYSBsb3Qgb2Yg Y2hhbmdlcywgDQpyZXZpZXdpbmcgYW5kIHRlc3RpbmcgdG8gYWRhcHQgdGhlIGRyaXZlciB0byBh IGRpZmZlcmVudCBhcHByb2FjaC4gSSdkIA0KcHJlZmVyIHRvIGNvbWUgdG8gdGhlIGNvbmNsdXNp b24gYmVmb3JlIHRoaW5raW5nIG9mIHN1Y2ggY2hhbmdlcyA6KQ0KDQpUaGFua3MgZm9yIGdpdmlu ZyB0aGUgZmVlZGJhY2sgYW5kIGpvaW5pbmcgdGhpcyBkaXNjdXNzaW9uIQ0KDQo+IEkgbGlrZSB0 aGUgb3RoZXIgc3R1ZmYgeW91IGhhdmUgaW1wbGVtZW50ZWQgYW5kIHRoaW5rIHRoYXQNCj4gdGhl IHJlc3Qgb2YgdGhlIGNvbW1vbiBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZSB1c2VmdWwgZm9yIGFs bCBvZiB1cy4NCj4gVGhpcyB3YXkgeW91IGNhbiBnZXQgdGhlIEFGX1hEUCBzdXBwb3J0IGFjY2Vw dGVkIHF1aWNrZXIgd2hpbGUgd2UNCj4gZGViYXRlIHRoZSBiZXN0IHdheSB0byBzb2x2ZSB0aGUg aXNzdWUgaW4gdGhpcyB0aHJlYWQuDQo+IA0KPiBUaGFua3MgZm9yIGFsbCB5b3VyIHdvcms6IE1h Z251cw0KPiANCj4+PiBJZiBhbiBhcHBsaWNhdGlvbiB3b3VsZCBsaWtlIHRvIGdldCBhbGwgdGhl IHRyYWZmaWMgZnJvbSBhIG5ldGRldiwNCj4+PiBpdCdsbCBjcmVhdGUgYW4gZXF1YWwgYW1vdXQg b2Ygc29ja2V0cyBhcyB0aGUgcXVldWVzIGFuZCBiaW5kIHRvIHRoZQ0KPj4+IHF1ZXVlcy4gWWVz LCBldmVuIHRoZSBxdWV1ZXMgaW4gdGhlIFJTUyAgc2V0Lg0KPj4+DQo+Pj4gV2hhdCB5b3Ugd291 bGQgbGlrZSAoSSB0aGluayk6DQo+Pj4gYSkgaXMgYSB3YXkgb2Ygc3Bhd25pbmcgYSBuZXcgcXVl dWUgZm9yIGEgbmV0ZGV2LCB0aGF0IGlzIG5vdCBwYXJ0IG9mDQo+Pj4gdGhlIHN0YWNrIGFuZC9v ciBSU1Mgc2V0DQo+Pg0KPj4gWWVzIC0gZm9yIHRoZSBzaW1wbGljaXR5IHNha2UgYW5kIHRvIG1h a2UgY29uZmlndXJhdGlvbiBlYXNpZXIuIFRoZSBvbmx5DQo+PiB0aGluZyBuZWVkZWQgaXMgdG8g c3RlZXIgdGhlIHRyYWZmaWMgYW5kIHRvIG9wZW4gYW4gQUZfWERQIHNvY2tldCBvbg0KPj4gY2hh bm5lbCBYLiBXZSBkb24ndCBuZWVkIHRvIGNhcmUgYWJvdXQgcmVtb3ZpbmcgdGhlIHF1ZXVlIG91 dCBvZiBSU1MsDQo+PiBhYm91dCBmaW5kaW5nIGEgd2F5IHRvIGFkbWluaXN0ZXIgdGhpcyAod2hp Y2ggaXMgaGFyZCBiZWNhdXNlIGl0J3MgcmFjeQ0KPj4gaWYgdGhlIGNvbmZpZ3VyYXRpb24gaW4g bm90IGtub3duIGluIGFkdmFuY2UpLiBTbyBJIGRvbid0IGFncmVlIEknbQ0KPj4gY29tcGxpY2F0 aW5nIHRoaW5ncywgbXkgZ29hbCBpcyB0byBtYWtlIHRoZW0gZWFzaWVyLg0KPj4NCj4+PiBiKSBz dGVlcmluZyB0cmFmZmljIHRvIHRoYXQgcXVldWUgdXNpbmcgYSBjb25maWd1cmF0aW9uIG1lY2hh bmlzbSAodGM/DQo+Pj4gc29tZSB5ZXQgdG8gYmUgaGFja2VkIEJQRiBjb25maWd1cmF0aW9uIGhv b2s/KQ0KPj4NCj4+IEN1cnJlbnRseSwgZXRodG9vbCAtLWNvbmZpZy1udHVwbGUgaXMgdXNlZCB0 byBzdGVlciB0aGUgdHJhZmZpYy4gVGhlDQo+PiB1c2VyLWRlZiBhcmd1bWVudCBoYXMgYSBiaXQg dGhhdCBzZWxlY3RzIFhTSyBSUS9yZWd1bGFyIFJRLCBhbmQgYWN0aW9uDQo+PiBzZWxlY3RzIGEg Y2hhbm5lbDoNCj4+DQo+PiBldGh0b29sIC1OIGV0aDAgZmxvdy10eXBlIHVkcDQgZHN0LXBvcnQg NDI0MiBhY3Rpb24gMyB1c2VyLWRlZiAxDQo+Pg0KPj4+IFdpdGggeW91ciBtZWNoYW5pc20geW91 J3JlIGRvaW5nIHRoaXMgaW4gY29udHJpdmVkIHdheS4gVGhpcyBtYWtlcyB0aGUNCj4+PiBleGlz dGluZyBBRl9YRFAgbW9kZWwgKm1vcmUqIGNvbXBsZXgvaGFyZChlcikgdG8gdXNlLg0KPj4NCj4+ IE5vLCBhcyBJIHNhaWQgYWJvdmUsIHNvbWUgaXNzdWVzIGFyZSBlbGltaW5hdGVkIHdpdGggbXkg YXBwcm9hY2gsIGFuZCBubw0KPj4gbmV3IGxpbWl0YXRpb25zIGFyZSBpbnRyb2R1Y2VkLCBzbyBp dCBtYWtlcyB0aGluZ3MgbW9yZSB1bml2ZXJzYWwgYW5kDQo+PiBzaW1wbGVyIHRvIGNvbmZpZ3Vy ZS4NCj4+DQo+Pj4gSG93IGRvIHlvdSBzdGVlciB0cmFmZmljIHRvIHRoaXMgZHVhbC1jaGFubmVs IFJRPw0KPj4NCj4+IEZpcnN0LCB0aGVyZSBpcyBubyBkdWFsLWNoYW5uZWwgUlEsIGEgbW9yZSBh Y2N1cmF0ZSB0ZXJtIGlzIGR1YWwtUlENCj4+IGNoYW5uZWwsIGNhdXNlIG5vdyB0aGUgY2hhbm5l bCBjb250YWlucyBhIHJlZ3VsYXIgUlEgYW5kIGNhbiBjb250YWluIGFuDQo+PiBYU0sgUlEuDQo+ Pg0KPj4gRm9yIHRoZSBzdGVlcmluZyBpdHNlbGYsIHNlZSB0aGUgZXRodG9vbCBjb21tYW5kIGFi b3ZlIC0gdGhlIHVzZXItZGVmDQo+PiBhcmd1bWVudCBoYXMgYSBiaXQgdGhhdCBzZWxlY3RzIG9u ZSBvZiB0d28gUlFzLg0KPj4NCj4+PiBTbyB5b3UgaGF2ZSBhIG5ldGRldg0KPj4+IHJlY2Vpdmlu ZyBvbiBhbGwgcXVldWVzLiBUaGVuLCBlLmcuLCB0aGUgbGFzdCBxdWV1ZSBpcyBhICJkdWFsDQo+ Pj4gY2hhbm5lbCIgcXVldWUgdGhhdCBjYW4gcmVjZWl2ZSB0cmFmZmljIGZyb20gc29tZSBvdGhl ciBmaWx0ZXIuIEhvdyBkbw0KPj4+IHlvdSB1c2UgaXQ/DQo+Pg0KPj4gSWYgSSB3YW50IHRvIHRh a2UgdGhlIGxhc3QgKG9yIHNvbWUpIGNoYW5uZWwgYW5kIHN0YXJ0IHVzaW5nIEFGX1hEUCB3aXRo DQo+PiBpdCwgSSBzaW1wbHkgY29uZmlndXJlIHN0ZWVyaW5nIHRvIHRoZSBYU0sgUlEgb2YgdGhh dCBjaGFubmVsIGFuZCBvcGVuIGENCj4+IHNvY2tldCBzcGVjaWZ5aW5nIHRoZSBjaGFubmVsIG51 bWJlci4gSSBkb24ndCBuZWVkIHRvIHJlY29uZmlndXJlIFJTUywNCj4+IGJlY2F1c2UgUlNTIHBh Y2tldHMgZ28gdG8gdGhlIHJlZ3VsYXIgUlEgb2YgdGhhdCBjaGFubmVsIGFuZCBkb24ndA0KPj4g aW50ZXJmZXJlIHdpdGggWFNLLg0KPj4NCj4+IE5vIGZ1bmN0aW9uYWxpdHkgaXMgbG9zdCAtIGlm IHlvdSBkb24ndCBkaXN0aW5ndWlzaCB0aGUgcmVndWxhciBhbmQgWFNLDQo+PiBSUXMgb24gdGhl IFhEUCBsZXZlbCwgeW91J2xsIGdldCB0aGUgc2FtZSBlZmZlY3QgYXMgd2l0aCBpNDBlJ3MNCj4+ IGltcGxlbWVudGF0aW9uLiBJZiB5b3Ugd2FudCB0byBkZWRpY2F0ZSB0aGUgQ1BVIGNvcmUgYW5k IGNoYW5uZWwgc29sZWx5DQo+PiBmb3IgQUZfWERQLCBpbiBpNDBlIHlvdSBleGNsdWRlIHRoZSBj aGFubmVsIGZyb20gUlNTLCBhbmQgaGVyZSB5b3UgY2FuDQo+PiBkbyBleGFjdGx5IHRoZSBzYW1l IHRoaW5nLiBTbywgbm8gdXNlIGNhc2UgaXMgY29tcGxpY2F0ZWQgY29tcGFyaW5nIHRvDQo+PiBp NDBlLCBidXQgdGhlcmUgYXJlIHVzZSBjYXNlcyB3aGVyZSB0aGlzIGZlYXR1cmUgaXMgdG8gYWR2 YW50YWdlLg0KPj4NCj4+IEkgaG9wZSBJIGV4cGxhaW5lZCB0aGUgcG9pbnRzIHlvdSB3ZXJlIGlu dGVyZXN0ZWQgaW4uIFBsZWFzZSBhc2sgbW9yZQ0KPj4gcXVlc3Rpb25zIGlmIHRoZXJlIGlzIHN0 aWxsIHNvbWV0aGluZyB0aGF0IEkgc2hvdWxkIGNsYXJpZnkgcmVnYXJkaW5nDQo+PiB0aGlzIHRv cGljLg0KPj4NCj4+IFRoYW5rcywNCj4+IE1heA0KPj4NCj4+Pg0KPj4+DQo+Pj4gQmrDtnJuDQo+ Pj4NCj4+Pj4gU2lnbmVkLW9mZi1ieTogTWF4aW0gTWlraXR5YW5za2l5IDxtYXhpbW1pQG1lbGxh bm94LmNvbT4NCj4+Pj4gQWNrZWQtYnk6IFNhZWVkIE1haGFtZWVkIDxzYWVlZG1AbWVsbGFub3gu Y29tPg0KPj4+PiAtLS0NCj4+Pj4gICAgaW5jbHVkZS91YXBpL2xpbnV4L2lmX3hkcC5oICAgICAg IHwgIDExICsrKw0KPj4+PiAgICBuZXQveGRwL3hzay5jICAgICAgICAgICAgICAgICAgICAgfCAg IDUgKy0NCj4+Pj4gICAgc2FtcGxlcy9icGYveGRwc29ja191c2VyLmMgICAgICAgIHwgIDEwICsr LQ0KPj4+PiAgICB0b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfeGRwLmggfCAgMTEgKysrDQo+ Pj4+ICAgIHRvb2xzL2xpYi9icGYveHNrLmMgICAgICAgICAgICAgICB8IDExNiArKysrKysrKysr KysrKysrKysrKysrLS0tLS0tLS0NCj4+Pj4gICAgdG9vbHMvbGliL2JwZi94c2suaCAgICAgICAg ICAgICAgIHwgICA0ICsrDQo+Pj4+ICAgIDYgZmlsZXMgY2hhbmdlZCwgMTI2IGluc2VydGlvbnMo KyksIDMxIGRlbGV0aW9ucygtKQ0KPj4+Pg0KPj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBp L2xpbnV4L2lmX3hkcC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3hkcC5oDQo+Pj4+IGluZGV4 IDlhZTRiNGUwOGI2OC4uY2Y2ZmYxZWNjNmJkIDEwMDY0NA0KPj4+PiAtLS0gYS9pbmNsdWRlL3Vh cGkvbGludXgvaWZfeGRwLmgNCj4+Pj4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3hkcC5o DQo+Pj4+IEBAIC04Miw0ICs4MiwxNSBAQCBzdHJ1Y3QgeGRwX2Rlc2Mgew0KPj4+Pg0KPj4+PiAg ICAvKiBVTUVNIGRlc2NyaXB0b3IgaXMgX191NjQgKi8NCj4+Pj4NCj4+Pj4gKy8qIFRoZSBkcml2 ZXIgbWF5IHJ1biBhIGRlZGljYXRlZCBYU0sgUlEgaW4gdGhlIGNoYW5uZWwuIFRoZSBYRFAgcHJv Z3JhbSB1c2VzDQo+Pj4+ICsgKiB0aGlzIGZsYWcgYml0IGluIHRoZSBxdWV1ZSBpbmRleCB0byBk aXN0aW5ndWlzaCBiZXR3ZWVuIHR3byBSUXMgb2YgdGhlIHNhbWUNCj4+Pj4gKyAqIGNoYW5uZWwu DQo+Pj4+ICsgKi8NCj4+Pj4gKyNkZWZpbmUgWERQX1FJRF9GTEFHX1hTS1JRICgxIDw8IDMxKQ0K Pj4+PiArDQo+Pj4+ICtzdGF0aWMgaW5saW5lIF9fdTMyIHhkcF9xaWRfZ2V0X2NoYW5uZWwoX191 MzIgcWlkKQ0KPj4+PiArew0KPj4+PiArICAgICAgIHJldHVybiBxaWQgJiB+WERQX1FJRF9GTEFH X1hTS1JROw0KPj4+PiArfQ0KPj4+PiArDQo+Pj4+ICAgICNlbmRpZiAvKiBfTElOVVhfSUZfWERQ X0ggKi8NCj4+Pj4gZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jDQo+ Pj4+IGluZGV4IDk5ODE5OTEwOWQ1Yy4uMTE0YmExN2FjYjA5IDEwMDY0NA0KPj4+PiAtLS0gYS9u ZXQveGRwL3hzay5jDQo+Pj4+ICsrKyBiL25ldC94ZHAveHNrLmMNCj4+Pj4gQEAgLTEwNCw5ICsx MDQsMTIgQEAgc3RhdGljIGludCBfX3hza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3Ry dWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pDQo+Pj4+DQo+Pj4+ICAgIGludCB4c2tfcmN2KHN0 cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQ0KPj4+PiAgICB7DQo+Pj4+ ICsgICAgICAgc3RydWN0IHhkcF9yeHFfaW5mbyAqcnhxID0geGRwLT5yeHE7DQo+Pj4+ICsgICAg ICAgdTMyIGNoYW5uZWwgPSB4ZHBfcWlkX2dldF9jaGFubmVsKHJ4cS0+cXVldWVfaW5kZXgpOw0K Pj4+PiAgICAgICAgICAgdTMyIGxlbjsNCj4+Pj4NCj4+Pj4gLSAgICAgICBpZiAoeHMtPmRldiAh PSB4ZHAtPnJ4cS0+ZGV2IHx8IHhzLT5xdWV1ZV9pZCAhPSB4ZHAtPnJ4cS0+cXVldWVfaW5kZXgp DQo+Pj4+ICsgICAgICAgaWYgKHhzLT5kZXYgIT0gcnhxLT5kZXYgfHwgeHMtPnF1ZXVlX2lkICE9 IGNoYW5uZWwgfHwNCj4+Pj4gKyAgICAgICAgICAgeHMtPnpjICE9IChyeHEtPm1lbS50eXBlID09 IE1FTV9UWVBFX1pFUk9fQ09QWSkpDQo+Pj4+ICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlO VkFMOw0KPj4+Pg0KPj4+PiAgICAgICAgICAgbGVuID0geGRwLT5kYXRhX2VuZCAtIHhkcC0+ZGF0 YTsNCj4+Pj4gZGlmZiAtLWdpdCBhL3NhbXBsZXMvYnBmL3hkcHNvY2tfdXNlci5jIGIvc2FtcGxl cy9icGYveGRwc29ja191c2VyLmMNCj4+Pj4gaW5kZXggZDA4ZWUxYWI3YmI0Li5hNmIxMzAyNWVl NzkgMTAwNjQ0DQo+Pj4+IC0tLSBhL3NhbXBsZXMvYnBmL3hkcHNvY2tfdXNlci5jDQo+Pj4+ICsr KyBiL3NhbXBsZXMvYnBmL3hkcHNvY2tfdXNlci5jDQo+Pj4+IEBAIC02Miw2ICs2Miw3IEBAIGVu dW0gYmVuY2htYXJrX3R5cGUgew0KPj4+Pg0KPj4+PiAgICBzdGF0aWMgZW51bSBiZW5jaG1hcmtf dHlwZSBvcHRfYmVuY2ggPSBCRU5DSF9SWERST1A7DQo+Pj4+ICAgIHN0YXRpYyB1MzIgb3B0X3hk cF9mbGFncyA9IFhEUF9GTEFHU19VUERBVEVfSUZfTk9FWElTVDsNCj4+Pj4gK3N0YXRpYyB1MzIg b3B0X2xpYmJwZl9mbGFnczsNCj4+Pj4gICAgc3RhdGljIGNvbnN0IGNoYXIgKm9wdF9pZiA9ICIi Ow0KPj4+PiAgICBzdGF0aWMgaW50IG9wdF9pZmluZGV4Ow0KPj4+PiAgICBzdGF0aWMgaW50IG9w dF9xdWV1ZTsNCj4+Pj4gQEAgLTMwNiw3ICszMDcsNyBAQCBzdGF0aWMgc3RydWN0IHhza19zb2Nr ZXRfaW5mbyAqeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0p DQo+Pj4+ICAgICAgICAgICB4c2stPnVtZW0gPSB1bWVtOw0KPj4+PiAgICAgICAgICAgY2ZnLnJ4 X3NpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUzsNCj4+Pj4gICAgICAgICAg IGNmZy50eF9zaXplID0gWFNLX1JJTkdfUFJPRF9fREVGQVVMVF9OVU1fREVTQ1M7DQo+Pj4+IC0g ICAgICAgY2ZnLmxpYmJwZl9mbGFncyA9IDA7DQo+Pj4+ICsgICAgICAgY2ZnLmxpYmJwZl9mbGFn cyA9IG9wdF9saWJicGZfZmxhZ3M7DQo+Pj4+ICAgICAgICAgICBjZmcueGRwX2ZsYWdzID0gb3B0 X3hkcF9mbGFnczsNCj4+Pj4gICAgICAgICAgIGNmZy5iaW5kX2ZsYWdzID0gb3B0X3hkcF9iaW5k X2ZsYWdzOw0KPj4+PiAgICAgICAgICAgcmV0ID0geHNrX3NvY2tldF9fY3JlYXRlKCZ4c2stPnhz aywgb3B0X2lmLCBvcHRfcXVldWUsIHVtZW0tPnVtZW0sDQo+Pj4+IEBAIC0zNDYsNiArMzQ3LDcg QEAgc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7DQo+Pj4+ICAgICAgICAg ICB7ImludGVydmFsIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsICduJ30sDQo+Pj4+ICAgICAgICAg ICB7Inplcm8tY29weSIsIG5vX2FyZ3VtZW50LCAwLCAneid9LA0KPj4+PiAgICAgICAgICAgeyJj b3B5Iiwgbm9fYXJndW1lbnQsIDAsICdjJ30sDQo+Pj4+ICsgICAgICAgeyJjb21iaW5lZCIsIG5v X2FyZ3VtZW50LCAwLCAnQyd9LA0KPj4+PiAgICAgICAgICAgezAsIDAsIDAsIDB9DQo+Pj4+ICAg IH07DQo+Pj4+DQo+Pj4+IEBAIC0zNjUsNiArMzY3LDcgQEAgc3RhdGljIHZvaWQgdXNhZ2UoY29u c3QgY2hhciAqcHJvZykNCj4+Pj4gICAgICAgICAgICAgICAgICAgIiAgLW4sIC0taW50ZXJ2YWw9 biAgICAgU3BlY2lmeSBzdGF0aXN0aWNzIHVwZGF0ZSBpbnRlcnZhbCAoZGVmYXVsdCAxIHNlYyku XG4iDQo+Pj4+ICAgICAgICAgICAgICAgICAgICIgIC16LCAtLXplcm8tY29weSAgICAgIEZvcmNl IHplcm8tY29weSBtb2RlLlxuIg0KPj4+PiAgICAgICAgICAgICAgICAgICAiICAtYywgLS1jb3B5 ICAgICAgICAgICBGb3JjZSBjb3B5IG1vZGUuXG4iDQo+Pj4+ICsgICAgICAgICAgICAgICAiICAt QywgLS1jb21iaW5lZCAgICAgICBEcml2ZXIgc3VwcG9ydHMgY29tYmluZWQgWFNLIGFuZCBub24t WFNLIHRyYWZmaWMgaW4gYSBjaGFubmVsLlxuIg0KPj4+PiAgICAgICAgICAgICAgICAgICAiXG4i Ow0KPj4+PiAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIHN0ciwgcHJvZyk7DQo+Pj4+ICAgICAg ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7DQo+Pj4+IEBAIC0zNzcsNyArMzgwLDcgQEAgc3RhdGlj IHZvaWQgcGFyc2VfY29tbWFuZF9saW5lKGludCBhcmdjLCBjaGFyICoqYXJndikNCj4+Pj4gICAg ICAgICAgIG9wdGVyciA9IDA7DQo+Pj4+DQo+Pj4+ICAgICAgICAgICBmb3IgKDs7KSB7DQo+Pj4+ IC0gICAgICAgICAgICAgICBjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIkZydGxpOnE6cHNT Tm46Y3oiLCBsb25nX29wdGlvbnMsDQo+Pj4+ICsgICAgICAgICAgICAgICBjID0gZ2V0b3B0X2xv bmcoYXJnYywgYXJndiwgIkZydGxpOnE6cHNTTm46Y3pDIiwgbG9uZ19vcHRpb25zLA0KPj4+PiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbl9pbmRleCk7DQo+Pj4+ICAg ICAgICAgICAgICAgICAgIGlmIChjID09IC0xKQ0KPj4+PiAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOw0KPj4+PiBAQCAtNDIwLDYgKzQyMyw5IEBAIHN0YXRpYyB2b2lkIHBhcnNlX2Nv bW1hbmRfbGluZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQo+Pj4+ICAgICAgICAgICAgICAgICAg IGNhc2UgJ0YnOg0KPj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF94ZHBfZmxhZ3Mg Jj0gflhEUF9GTEFHU19VUERBVEVfSUZfTk9FWElTVDsNCj4+Pj4gICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsNCj4+Pj4gKyAgICAgICAgICAgICAgIGNhc2UgJ0MnOg0KPj4+PiArICAg ICAgICAgICAgICAgICAgICAgICBvcHRfbGliYnBmX2ZsYWdzIHw9IFhTS19MSUJCUEZfRkxBR1Nf X0NPTUJJTkVEX0NIQU5ORUxTOw0KPj4+PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsN Cj4+Pj4gICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCj4+Pj4gICAgICAgICAgICAgICAgICAg ICAgICAgICB1c2FnZShiYXNlbmFtZShhcmd2WzBdKSk7DQo+Pj4+ICAgICAgICAgICAgICAgICAg IH0NCj4+Pj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl94ZHAuaCBi L3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl94ZHAuaA0KPj4+PiBpbmRleCA5YWU0YjRlMDhi NjguLmNmNmZmMWVjYzZiZCAxMDA2NDQNCj4+Pj4gLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xp bnV4L2lmX3hkcC5oDQo+Pj4+ICsrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl94ZHAu aA0KPj4+PiBAQCAtODIsNCArODIsMTUgQEAgc3RydWN0IHhkcF9kZXNjIHsNCj4+Pj4NCj4+Pj4g ICAgLyogVU1FTSBkZXNjcmlwdG9yIGlzIF9fdTY0ICovDQo+Pj4+DQo+Pj4+ICsvKiBUaGUgZHJp dmVyIG1heSBydW4gYSBkZWRpY2F0ZWQgWFNLIFJRIGluIHRoZSBjaGFubmVsLiBUaGUgWERQIHBy b2dyYW0gdXNlcw0KPj4+PiArICogdGhpcyBmbGFnIGJpdCBpbiB0aGUgcXVldWUgaW5kZXggdG8g ZGlzdGluZ3Vpc2ggYmV0d2VlbiB0d28gUlFzIG9mIHRoZSBzYW1lDQo+Pj4+ICsgKiBjaGFubmVs Lg0KPj4+PiArICovDQo+Pj4+ICsjZGVmaW5lIFhEUF9RSURfRkxBR19YU0tSUSAoMSA8PCAzMSkN Cj4+Pj4gKw0KPj4+PiArc3RhdGljIGlubGluZSBfX3UzMiB4ZHBfcWlkX2dldF9jaGFubmVsKF9f dTMyIHFpZCkNCj4+Pj4gK3sNCj4+Pj4gKyAgICAgICByZXR1cm4gcWlkICYgflhEUF9RSURfRkxB R19YU0tSUTsNCj4+Pj4gK30NCj4+Pj4gKw0KPj4+PiAgICAjZW5kaWYgLyogX0xJTlVYX0lGX1hE UF9IICovDQo+Pj4+IGRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL3hzay5jIGIvdG9vbHMvbGli L2JwZi94c2suYw0KPj4+PiBpbmRleCBhOTViMDZkMWY4MWQuLjk2OWRmZDg1NjAzOSAxMDA2NDQN Cj4+Pj4gLS0tIGEvdG9vbHMvbGliL2JwZi94c2suYw0KPj4+PiArKysgYi90b29scy9saWIvYnBm L3hzay5jDQo+Pj4+IEBAIC03Niw2ICs3NiwxMiBAQCBzdHJ1Y3QgeHNrX25sX2luZm8gew0KPj4+ PiAgICAgICAgICAgaW50IGZkOw0KPj4+PiAgICB9Ow0KPj4+Pg0KPj4+PiArZW51bSBxaWRjb25m IHsNCj4+Pj4gKyAgICAgICBRSURDT05GX1JFR1VMQVIsDQo+Pj4+ICsgICAgICAgUUlEQ09ORl9Y U0ssDQo+Pj4+ICsgICAgICAgUUlEQ09ORl9YU0tfQ09NQklORUQsDQo+Pj4+ICt9Ow0KPj4+PiAr DQo+Pj4+ICAgIC8qIEZvciAzMi1iaXQgc3lzdGVtcywgd2UgbmVlZCB0byB1c2UgbW1hcDIgYXMg dGhlIG9mZnNldHMgYXJlIDY0LWJpdC4NCj4+Pj4gICAgICogVW5mb3J0dW5hdGVseSwgaXQgaXMg bm90IHBhcnQgb2YgZ2xpYmMuDQo+Pj4+ICAgICAqLw0KPj4+PiBAQCAtMTM5LDcgKzE0NSw3IEBA IHN0YXRpYyBpbnQgeHNrX3NldF94ZHBfc29ja2V0X2NvbmZpZyhzdHJ1Y3QgeHNrX3NvY2tldF9j b25maWcgKmNmZywNCj4+Pj4gICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+Pj4+ICAgICAg ICAgICB9DQo+Pj4+DQo+Pj4+IC0gICAgICAgaWYgKHVzcl9jZmctPmxpYmJwZl9mbGFncyAmIH5Y U0tfTElCQlBGX0ZMQUdTX19JTkhJQklUX1BST0dfTE9BRCkNCj4+Pj4gKyAgICAgICBpZiAodXNy X2NmZy0+bGliYnBmX2ZsYWdzICYgflhTS19MSUJCUEZfRkxBR1NfTUFTSykNCj4+Pj4gICAgICAg ICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+Pj4+DQo+Pj4+ICAgICAgICAgICBjZmctPnJ4 X3NpemUgPSB1c3JfY2ZnLT5yeF9zaXplOw0KPj4+PiBAQCAtMjY3LDQ0ICsyNzMsOTMgQEAgc3Rh dGljIGludCB4c2tfbG9hZF94ZHBfcHJvZyhzdHJ1Y3QgeHNrX3NvY2tldCAqeHNrKQ0KPj4+PiAg ICAgICAgICAgLyogVGhpcyBpcyB0aGUgQy1wcm9ncmFtOg0KPj4+PiAgICAgICAgICAgICogU0VD KCJ4ZHBfc29jayIpIGludCB4ZHBfc29ja19wcm9nKHN0cnVjdCB4ZHBfbWQgKmN0eCkNCj4+Pj4g ICAgICAgICAgICAqIHsNCj4+Pj4gLSAgICAgICAgKiAgICAgaW50ICpxaWRjb25mLCBpbmRleCA9 IGN0eC0+cnhfcXVldWVfaW5kZXg7DQo+Pj4+ICsgICAgICAgICogICAgIGludCAqcWlkY29uZiwg cWM7DQo+Pj4+ICsgICAgICAgICogICAgIGludCBpbmRleCA9IGN0eC0+cnhfcXVldWVfaW5kZXgg JiB+KDEgPDwgMzEpOw0KPj4+PiArICAgICAgICAqICAgICBib29sIGlzX3hza3JxID0gY3R4LT5y eF9xdWV1ZV9pbmRleCAmICgxIDw8IDMxKTsNCj4+Pj4gICAgICAgICAgICAqDQo+Pj4+IC0gICAg ICAgICogICAgIC8vIEEgc2V0IGVudHJ5IGhlcmUgbWVhbnMgdGhhdCB0aGUgY29ycmVzcG5kaW5n IHF1ZXVlX2lkDQo+Pj4+IC0gICAgICAgICogICAgIC8vIGhhcyBhbiBhY3RpdmUgQUZfWERQIHNv Y2tldCBib3VuZCB0byBpdC4NCj4+Pj4gKyAgICAgICAgKiAgICAgLy8gQSBzZXQgZW50cnkgaGVy ZSBtZWFucyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIHF1ZXVlX2lkDQo+Pj4+ICsgICAgICAgICog ICAgIC8vIGhhcyBhbiBhY3RpdmUgQUZfWERQIHNvY2tldCBib3VuZCB0byBpdC4gVmFsdWUgMiBt ZWFucw0KPj4+PiArICAgICAgICAqICAgICAvLyBpdCdzIHplcm8tY29weSBtdWx0aS1SUSBtb2Rl Lg0KPj4+PiAgICAgICAgICAgICogICAgIHFpZGNvbmYgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZx aWRjb25mX21hcCwgJmluZGV4KTsNCj4+Pj4gICAgICAgICAgICAqICAgICBpZiAoIXFpZGNvbmYp DQo+Pj4+ICAgICAgICAgICAgKiAgICAgICAgIHJldHVybiBYRFBfQUJPUlRFRDsNCj4+Pj4gICAg ICAgICAgICAqDQo+Pj4+IC0gICAgICAgICogICAgIGlmICgqcWlkY29uZikNCj4+Pj4gKyAgICAg ICAgKiAgICAgcWMgPSAqcWlkY29uZjsNCj4+Pj4gKyAgICAgICAgKg0KPj4+PiArICAgICAgICAq ICAgICBpZiAocWMgPT0gMikNCj4+Pj4gKyAgICAgICAgKiAgICAgICAgIHFjID0gaXNfeHNrcnEg PyAxIDogMDsNCj4+Pj4gKyAgICAgICAgKg0KPj4+PiArICAgICAgICAqICAgICBzd2l0Y2ggKHFj KSB7DQo+Pj4+ICsgICAgICAgICogICAgIGNhc2UgMDoNCj4+Pj4gKyAgICAgICAgKiAgICAgICAg IHJldHVybiBYRFBfUEFTUzsNCj4+Pj4gKyAgICAgICAgKiAgICAgY2FzZSAxOg0KPj4+PiAgICAg ICAgICAgICogICAgICAgICByZXR1cm4gYnBmX3JlZGlyZWN0X21hcCgmeHNrc19tYXAsIGluZGV4 LCAwKTsNCj4+Pj4gKyAgICAgICAgKiAgICAgfQ0KPj4+PiAgICAgICAgICAgICoNCj4+Pj4gLSAg ICAgICAgKiAgICAgcmV0dXJuIFhEUF9QQVNTOw0KPj4+PiArICAgICAgICAqICAgICByZXR1cm4g WERQX0FCT1JURUQ7DQo+Pj4+ICAgICAgICAgICAgKiB9DQo+Pj4+ICAgICAgICAgICAgKi8NCj4+ Pj4gICAgICAgICAgIHN0cnVjdCBicGZfaW5zbiBwcm9nW10gPSB7DQo+Pj4+IC0gICAgICAgICAg ICAgICAvKiByMSA9ICoodTMyICopKHIxICsgMTYpICovDQo+Pj4+IC0gICAgICAgICAgICAgICBC UEZfTERYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzEsIDE2KSwNCj4+Pj4gLSAgICAg ICAgICAgICAgIC8qICoodTMyICopKHIxMCAtIDQpID0gcjEgKi8NCj4+Pj4gLSAgICAgICAgICAg ICAgIEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEwLCBCUEZfUkVHXzEsIC00KSwNCj4+Pj4g LSAgICAgICAgICAgICAgIEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18yLCBCUEZfUkVHXzEwKSwNCj4+ Pj4gLSAgICAgICAgICAgICAgIEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgQlBGX1JFR18yLCAtNCks DQo+Pj4+IC0gICAgICAgICAgICAgICBCUEZfTERfTUFQX0ZEKEJQRl9SRUdfMSwgeHNrLT5xaWRj b25mX21hcF9mZCksDQo+Pj4+ICsgICAgICAgICAgICAgICAvKiBMb2FkIGluZGV4LiAqLw0KPj4+ PiArICAgICAgICAgICAgICAgLyogcjYgPSAqKHUzMiAqKShyMSArIDE2KSAqLw0KPj4+PiArICAg ICAgICAgICAgICAgQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfNiwgQlBGX1JFR19BUkcxLCAx NiksDQo+Pj4+ICsgICAgICAgICAgICAgICAvKiB3NyA9IHc2ICovDQo+Pj4+ICsgICAgICAgICAg ICAgICBCUEZfTU9WMzJfUkVHKEJQRl9SRUdfNywgQlBGX1JFR182KSwNCj4+Pj4gKyAgICAgICAg ICAgICAgIC8qIHc3ICY9IDIxNDc0ODM2NDcgKi8NCj4+Pj4gKyAgICAgICAgICAgICAgIEJQRl9B TFUzMl9JTU0oQlBGX0FORCwgQlBGX1JFR183LCB+WERQX1FJRF9GTEFHX1hTS1JRKSwNCj4+Pj4g KyAgICAgICAgICAgICAgIC8qICoodTMyICopKHIxMCAtIDQpID0gcjcgKi8NCj4+Pj4gKyAgICAg ICAgICAgICAgIEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzcsIC00KSwN Cj4+Pj4gKw0KPj4+PiArICAgICAgICAgICAgICAgLyogQ2FsbCBicGZfbWFwX2xvb2t1cF9lbGVt LiAqLw0KPj4+PiArICAgICAgICAgICAgICAgLyogcjIgPSByMTAgKi8NCj4+Pj4gKyAgICAgICAg ICAgICAgIEJQRl9NT1Y2NF9SRUcoQlBGX1JFR19BUkcyLCBCUEZfUkVHX0ZQKSwNCj4+Pj4gKyAg ICAgICAgICAgICAgIC8qIHIyICs9IC00ICovDQo+Pj4+ICsgICAgICAgICAgICAgICBCUEZfQUxV NjRfSU1NKEJQRl9BREQsIEJQRl9SRUdfQVJHMiwgLTQpLA0KPj4+PiArICAgICAgICAgICAgICAg LyogcjEgPSBxaWRjb25mX21hcCBsbCAqLw0KPj4+PiArICAgICAgICAgICAgICAgQlBGX0xEX01B UF9GRChCUEZfUkVHX0FSRzEsIHhzay0+cWlkY29uZl9tYXBfZmQpLA0KPj4+PiArICAgICAgICAg ICAgICAgLyogY2FsbCAxICovDQo+Pj4+ICAgICAgICAgICAgICAgICAgIEJQRl9FTUlUX0NBTEwo QlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtKSwNCj4+Pj4gLSAgICAgICAgICAgICAgIEJQRl9NT1Y2 NF9SRUcoQlBGX1JFR18xLCBCUEZfUkVHXzApLA0KPj4+PiAtICAgICAgICAgICAgICAgQlBGX01P VjMyX0lNTShCUEZfUkVHXzAsIDApLA0KPj4+PiAtICAgICAgICAgICAgICAgLyogaWYgcjEgPT0g MCBnb3RvICs4ICovDQo+Pj4+IC0gICAgICAgICAgICAgICBCUEZfSk1QX0lNTShCUEZfSkVRLCBC UEZfUkVHXzEsIDAsIDgpLA0KPj4+PiAtICAgICAgICAgICAgICAgQlBGX01PVjMyX0lNTShCUEZf UkVHXzAsIDIpLA0KPj4+PiAtICAgICAgICAgICAgICAgLyogcjEgPSAqKHUzMiAqKShyMSArIDAp ICovDQo+Pj4+IC0gICAgICAgICAgICAgICBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18xLCBC UEZfUkVHXzEsIDApLA0KPj4+PiAtICAgICAgICAgICAgICAgLyogaWYgcjEgPT0gMCBnb3RvICs1 ICovDQo+Pj4+IC0gICAgICAgICAgICAgICBCUEZfSk1QX0lNTShCUEZfSkVRLCBCUEZfUkVHXzEs IDAsIDUpLA0KPj4+PiAtICAgICAgICAgICAgICAgLyogcjIgPSAqKHUzMiAqKShyMTAgLSA0KSAq Lw0KPj4+PiAtICAgICAgICAgICAgICAgQlBGX0xEX01BUF9GRChCUEZfUkVHXzEsIHhzay0+eHNr c19tYXBfZmQpLA0KPj4+PiAtICAgICAgICAgICAgICAgQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9S RUdfMiwgQlBGX1JFR18xMCwgLTQpLA0KPj4+PiArDQo+Pj4+ICsgICAgICAgICAgICAgICAvKiBD aGVjayB0aGUgcmV0dXJuIHZhbHVlLiAqLw0KPj4+PiArICAgICAgICAgICAgICAgLyogaWYgcjAg PT0gMCBnb3RvICsxNCAqLw0KPj4+PiArICAgICAgICAgICAgICAgQlBGX0pNUF9JTU0oQlBGX0pF USwgQlBGX1JFR18wLCAwLCAxNCksDQo+Pj4+ICsNCj4+Pj4gKyAgICAgICAgICAgICAgIC8qIENo ZWNrIHFjID09IFFJRENPTkZfWFNLX0NPTUJJTkVELiAqLw0KPj4+PiArICAgICAgICAgICAgICAg LyogcjYgPj49IDMxICovDQo+Pj4+ICsgICAgICAgICAgICAgICBCUEZfQUxVNjRfSU1NKEJQRl9S U0gsIEJQRl9SRUdfNiwgMzEpLA0KPj4+PiArICAgICAgICAgICAgICAgLyogcjEgPSAqKHUzMiAq KShyMCArIDApICovDQo+Pj4+ICsgICAgICAgICAgICAgICBCUEZfTERYX01FTShCUEZfVywgQlBG X1JFR18xLCBCUEZfUkVHXzAsIDApLA0KPj4+PiArICAgICAgICAgICAgICAgLyogaWYgcjEgPT0g MiBnb3RvICsxICovDQo+Pj4+ICsgICAgICAgICAgICAgICBCUEZfSk1QX0lNTShCUEZfSkVRLCBC UEZfUkVHXzEsIFFJRENPTkZfWFNLX0NPTUJJTkVELCAxKSwNCj4+Pj4gKw0KPj4+PiArICAgICAg ICAgICAgICAgLyogcWMgIT0gUUlEQ09ORl9YU0tfQ09NQklORUQgKi8NCj4+Pj4gKyAgICAgICAg ICAgICAgIC8qIHI2ID0gcjEgKi8NCj4+Pj4gKyAgICAgICAgICAgICAgIEJQRl9NT1Y2NF9SRUco QlBGX1JFR182LCBCUEZfUkVHXzEpLA0KPj4+PiArDQo+Pj4+ICsgICAgICAgICAgICAgICAvKiBz d2l0Y2ggKHFjKSAqLw0KPj4+PiArICAgICAgICAgICAgICAgLyogdzAgPSAyICovDQo+Pj4+ICsg ICAgICAgICAgICAgICBCUEZfTU9WMzJfSU1NKEJQRl9SRUdfMCwgWERQX1BBU1MpLA0KPj4+PiAr ICAgICAgICAgICAgICAgLyogaWYgdzYgPT0gMCBnb3RvICs4ICovDQo+Pj4+ICsgICAgICAgICAg ICAgICBCUEZfSk1QMzJfSU1NKEJQRl9KRVEsIEJQRl9SRUdfNiwgUUlEQ09ORl9SRUdVTEFSLCA4 KSwNCj4+Pj4gKyAgICAgICAgICAgICAgIC8qIGlmIHc2ICE9IDEgZ290byArNiAqLw0KPj4+PiAr ICAgICAgICAgICAgICAgQlBGX0pNUDMyX0lNTShCUEZfSk5FLCBCUEZfUkVHXzYsIFFJRENPTkZf WFNLLCA2KSwNCj4+Pj4gKw0KPj4+PiArICAgICAgICAgICAgICAgLyogQ2FsbCBicGZfcmVkaXJl Y3RfbWFwLiAqLw0KPj4+PiArICAgICAgICAgICAgICAgLyogcjEgPSB4c2tzX21hcCBsbCAqLw0K Pj4+PiArICAgICAgICAgICAgICAgQlBGX0xEX01BUF9GRChCUEZfUkVHX0FSRzEsIHhzay0+eHNr c19tYXBfZmQpLA0KPj4+PiArICAgICAgICAgICAgICAgLyogdzIgPSB3NyAqLw0KPj4+PiArICAg ICAgICAgICAgICAgQlBGX01PVjMyX1JFRyhCUEZfUkVHX0FSRzIsIEJQRl9SRUdfNyksDQo+Pj4+ ICsgICAgICAgICAgICAgICAvKiB3MyA9IDAgKi8NCj4+Pj4gICAgICAgICAgICAgICAgICAgQlBG X01PVjMyX0lNTShCUEZfUkVHXzMsIDApLA0KPj4+PiArICAgICAgICAgICAgICAgLyogY2FsbCA1 MSAqLw0KPj4+PiAgICAgICAgICAgICAgICAgICBCUEZfRU1JVF9DQUxMKEJQRl9GVU5DX3JlZGly ZWN0X21hcCksDQo+Pj4+IC0gICAgICAgICAgICAgICAvKiBUaGUganVtcHMgYXJlIHRvIHRoaXMg aW5zdHJ1Y3Rpb24gKi8NCj4+Pj4gKyAgICAgICAgICAgICAgIC8qIGV4aXQgKi8NCj4+Pj4gKyAg ICAgICAgICAgICAgIEJQRl9FWElUX0lOU04oKSwNCj4+Pj4gKw0KPj4+PiArICAgICAgICAgICAg ICAgLyogWERQX0FCT1JURUQgKi8NCj4+Pj4gKyAgICAgICAgICAgICAgIC8qIHcwID0gMCAqLw0K Pj4+PiArICAgICAgICAgICAgICAgQlBGX01PVjMyX0lNTShCUEZfUkVHXzAsIFhEUF9BQk9SVEVE KSwNCj4+Pj4gKyAgICAgICAgICAgICAgIC8qIGV4aXQgKi8NCj4+Pj4gICAgICAgICAgICAgICAg ICAgQlBGX0VYSVRfSU5TTigpLA0KPj4+PiAgICAgICAgICAgfTsNCj4+Pj4gICAgICAgICAgIHNp emVfdCBpbnNuc19jbnQgPSBzaXplb2YocHJvZykgLyBzaXplb2Yoc3RydWN0IGJwZl9pbnNuKTsN Cj4+Pj4gQEAgLTQ4Myw2ICs1MzgsNyBAQCBzdGF0aWMgaW50IHhza191cGRhdGVfYnBmX21hcHMo c3RydWN0IHhza19zb2NrZXQgKnhzaywgaW50IHFpZGNvbmZfdmFsdWUsDQo+Pj4+DQo+Pj4+ICAg IHN0YXRpYyBpbnQgeHNrX3NldHVwX3hkcF9wcm9nKHN0cnVjdCB4c2tfc29ja2V0ICp4c2spDQo+ Pj4+ICAgIHsNCj4+Pj4gKyAgICAgICBpbnQgcWlkY29uZl92YWx1ZSA9IFFJRENPTkZfWFNLOw0K Pj4+PiAgICAgICAgICAgYm9vbCBwcm9nX2F0dGFjaGVkID0gZmFsc2U7DQo+Pj4+ICAgICAgICAg ICBfX3UzMiBwcm9nX2lkID0gMDsNCj4+Pj4gICAgICAgICAgIGludCBlcnI7DQo+Pj4+IEBAIC01 MDUsNyArNTYxLDExIEBAIHN0YXRpYyBpbnQgeHNrX3NldHVwX3hkcF9wcm9nKHN0cnVjdCB4c2tf c29ja2V0ICp4c2spDQo+Pj4+ICAgICAgICAgICAgICAgICAgIHhzay0+cHJvZ19mZCA9IGJwZl9w cm9nX2dldF9mZF9ieV9pZChwcm9nX2lkKTsNCj4+Pj4gICAgICAgICAgIH0NCj4+Pj4NCj4+Pj4g LSAgICAgICBlcnIgPSB4c2tfdXBkYXRlX2JwZl9tYXBzKHhzaywgdHJ1ZSwgeHNrLT5mZCk7DQo+ Pj4+ICsgICAgICAgaWYgKHhzay0+Y29uZmlnLmxpYmJwZl9mbGFncyAmIFhTS19MSUJCUEZfRkxB R1NfX0NPTUJJTkVEX0NIQU5ORUxTKQ0KPj4+PiArICAgICAgICAgICAgICAgaWYgKHhzay0+emMp DQo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHFpZGNvbmZfdmFsdWUgPSBRSURDT05GX1hT S19DT01CSU5FRDsNCj4+Pj4gKw0KPj4+PiArICAgICAgIGVyciA9IHhza191cGRhdGVfYnBmX21h cHMoeHNrLCBxaWRjb25mX3ZhbHVlLCB4c2stPmZkKTsNCj4+Pj4gICAgICAgICAgIGlmIChlcnIp DQo+Pj4+ICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0X2xvYWQ7DQo+Pj4+DQo+Pj4+IEBAIC03 MTcsNyArNzc3LDcgQEAgdm9pZCB4c2tfc29ja2V0X19kZWxldGUoc3RydWN0IHhza19zb2NrZXQg KnhzaykNCj4+Pj4gICAgICAgICAgIGlmICgheHNrKQ0KPj4+PiAgICAgICAgICAgICAgICAgICBy ZXR1cm47DQo+Pj4+DQo+Pj4+IC0gICAgICAgKHZvaWQpeHNrX3VwZGF0ZV9icGZfbWFwcyh4c2ss IDAsIDApOw0KPj4+PiArICAgICAgICh2b2lkKXhza191cGRhdGVfYnBmX21hcHMoeHNrLCBRSURD T05GX1JFR1VMQVIsIDApOw0KPj4+Pg0KPj4+PiAgICAgICAgICAgb3B0bGVuID0gc2l6ZW9mKG9m Zik7DQo+Pj4+ICAgICAgICAgICBlcnIgPSBnZXRzb2Nrb3B0KHhzay0+ZmQsIFNPTF9YRFAsIFhE UF9NTUFQX09GRlNFVFMsICZvZmYsICZvcHRsZW4pOw0KPj4+PiBkaWZmIC0tZ2l0IGEvdG9vbHMv bGliL2JwZi94c2suaCBiL3Rvb2xzL2xpYi9icGYveHNrLmgNCj4+Pj4gaW5kZXggODJlYTcxYTBm M2VjLi5iZTI2YTI0MjNjMDQgMTAwNjQ0DQo+Pj4+IC0tLSBhL3Rvb2xzL2xpYi9icGYveHNrLmgN Cj4+Pj4gKysrIGIvdG9vbHMvbGliL2JwZi94c2suaA0KPj4+PiBAQCAtMTgwLDYgKzE4MCwxMCBA QCBzdHJ1Y3QgeHNrX3VtZW1fY29uZmlnIHsNCj4+Pj4NCj4+Pj4gICAgLyogRmxhZ3MgZm9yIHRo ZSBsaWJicGZfZmxhZ3MgZmllbGQuICovDQo+Pj4+ICAgICNkZWZpbmUgWFNLX0xJQkJQRl9GTEFH U19fSU5ISUJJVF9QUk9HX0xPQUQgKDEgPDwgMCkNCj4+Pj4gKyNkZWZpbmUgWFNLX0xJQkJQRl9G TEFHU19fQ09NQklORURfQ0hBTk5FTFMgKDEgPDwgMSkNCj4+Pj4gKyNkZWZpbmUgWFNLX0xJQkJQ Rl9GTEFHU19NQVNLICggXA0KPj4+PiArICAgICAgIFhTS19MSUJCUEZfRkxBR1NfX0lOSElCSVRf UFJPR19MT0FEIHwgXA0KPj4+PiArICAgICAgIFhTS19MSUJCUEZfRkxBR1NfX0NPTUJJTkVEX0NI QU5ORUxTKQ0KPj4+Pg0KPj4+PiAgICBzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgew0KPj4+PiAg ICAgICAgICAgX191MzIgcnhfc2l6ZTsNCj4+Pj4gLS0NCj4+Pj4gMi4xOS4xDQo+Pj4+DQo+Pg0K DQo=