From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 135BAA318B for ; Fri, 18 Oct 2019 05:48:41 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DBD171E544; Fri, 18 Oct 2019 05:48:39 +0200 (CEST) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20064.outbound.protection.outlook.com [40.107.2.64]) by dpdk.org (Postfix) with ESMTP id 272511DFE4 for ; Fri, 18 Oct 2019 05:48:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sfcRFbX0NJ9sUu44GbIjRDYz7msRBTxkSjRTwf58NU8=; b=4fw0W+x7wfzESi4coaidteNvlm8F31RiDghutW3G21yYsKg7VVpBdPVpZ1mw6qNrAAFmG+GkuYT4UxujAYqltTja2Q42LW8jZp2bn7wWO4av64yEu4ESBnl8uuaUAcig33chRDOwU/kJe+e/y8b9lXe6igP0C0e3dsk6vYiJCqM= Received: from VI1PR08CA0178.eurprd08.prod.outlook.com (2603:10a6:800:d1::32) by HE1PR0802MB2393.eurprd08.prod.outlook.com (2603:10a6:3:de::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.21; Fri, 18 Oct 2019 03:48:34 +0000 Received: from DB5EUR03FT042.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e0a::200) by VI1PR08CA0178.outlook.office365.com (2603:10a6:800:d1::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2347.18 via Frontend Transport; Fri, 18 Oct 2019 03:48:32 +0000 Authentication-Results: spf=temperror (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dpdk.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dpdk.org; dmarc=none action=none header.from=arm.com; Received-SPF: TempError (protection.outlook.com: error in processing during lookup of arm.com: DNS Timeout) Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB5EUR03FT042.mail.protection.outlook.com (10.152.21.123) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2305.15 via Frontend Transport; Fri, 18 Oct 2019 03:48:30 +0000 Received: ("Tessian outbound 851a1162fca7:v33"); Fri, 18 Oct 2019 03:47:53 +0000 X-CR-MTA-TID: 64aa7808 Received: from e3a3115f06cd.2 (ip-172-16-0-2.eu-west-1.compute.internal [104.47.4.52]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id B457F614-6A34-4BB0-A2C2-EFCB894CB260.1; Fri, 18 Oct 2019 03:47:48 +0000 Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-am5eur02lp2052.outbound.protection.outlook.com [104.47.4.52]) by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e3a3115f06cd.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 18 Oct 2019 03:47:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h4S+SsCkKaCbd9Y3GgO9C2NUtAeNGBFYDimrB418pP6XzeHAZ4irSIEwC5aqf5WTumg+b/Ugfzx2IKZqUgICF4B6MYkoUZmZz4bYKnMnlt7VtQlUQTUI2PzbylP/d8SX1PimvyKX7NPP5lN9ExdEzpVizx6yTu39E2gpvhWEoXG8XkJMXZA0my/ma7bIOsKj2NYewt07SDnc6WW/jXDXyn7xVX5gUrp63Ru4dBHEtyuAxK+rCENYJmdkcGHSZnTsEf7tSq2RxGZosPgAWlB+2m1tzYj/1g2C4O6sY0RiSxZGtWzOcPp7kBaAwD/8cJHC2FCI7G/lKKcjz1QxKR6FiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sfcRFbX0NJ9sUu44GbIjRDYz7msRBTxkSjRTwf58NU8=; b=lxD4/8jU7/14bk6k+f5EmGLOlc4JKzMZScUxIQJXm7WYEAALQW0o7jYpXIF6r6urCy9nTtyuLQ88HQmJVuzRLZjTNgBbttXeZ2wDTWJVvnjFvMJRasUE5H9yVCv32HESspCwGNcmIJa3Me/Si3QUUx/5PfTNG9tTDM5nye2HYlmbmHwKMlDfWSBYk/l/II7rwVEcxsRpuuG4TjQAHyZMwv7AszcqYBYiDw35C4+rmSFx+p5U20cLz2gHIgobuG6jF5yd993CppWVPLE0P/EQwR7HkYiV36+1kFoWMG8qPNSIdPIYw4z735m7gSjrhkByTGeJp1zoulugXDrwMcczwQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sfcRFbX0NJ9sUu44GbIjRDYz7msRBTxkSjRTwf58NU8=; b=4fw0W+x7wfzESi4coaidteNvlm8F31RiDghutW3G21yYsKg7VVpBdPVpZ1mw6qNrAAFmG+GkuYT4UxujAYqltTja2Q42LW8jZp2bn7wWO4av64yEu4ESBnl8uuaUAcig33chRDOwU/kJe+e/y8b9lXe6igP0C0e3dsk6vYiJCqM= Received: from VE1PR08MB5149.eurprd08.prod.outlook.com (20.179.30.27) by VE1PR08MB4975.eurprd08.prod.outlook.com (20.179.31.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.16; Fri, 18 Oct 2019 03:47:45 +0000 Received: from VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::8c82:8d9c:c78d:22a6]) by VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::8c82:8d9c:c78d:22a6%7]) with mapi id 15.20.2347.023; Fri, 18 Oct 2019 03:47:45 +0000 From: Honnappa Nagarahalli To: "Medvedkin, Vladimir" , "konstantin.ananyev@intel.com" , "stephen@networkplumber.org" , "paulmck@linux.ibm.com" CC: "yipeng1.wang@intel.com" , "Ruifeng Wang (Arm Technology China)" , Dharmik Thakkar , "dev@dpdk.org" , Honnappa Nagarahalli , nd , nd Thread-Topic: [PATCH v3 2/3] lib/rcu: add resource reclamation APIs Thread-Index: AQHVfRDLTYoyC+jQPke5IV6aKytntadRvqIwgAo4AACAA9jfkA== Date: Fri, 18 Oct 2019 03:47:45 +0000 Message-ID: References: <20190906094534.36060-1-ruifeng.wang@arm.com> <20191001062917.35578-1-honnappa.nagarahalli@arm.com> <20191001062917.35578-3-honnappa.nagarahalli@arm.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 72709bc1-26ba-4710-a4b8-67f1ea80cd74.0 x-checkrecipientchecked: true Authentication-Results-Original: spf=none (sender IP is ) smtp.mailfrom=Honnappa.Nagarahalli@arm.com; x-originating-ip: [217.140.111.135] x-ms-publictraffictype: Email X-MS-Office365-Filtering-Correlation-Id: e8baf0bf-317e-4423-52f2-08d7537e0a68 X-MS-Office365-Filtering-HT: Tenant X-MS-TrafficTypeDiagnostic: VE1PR08MB4975:|VE1PR08MB4975:|HE1PR0802MB2393: X-MS-Exchange-PUrlCount: 1 x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true x-ms-oob-tlc-oobclassifiers: OLM:3631;OLM:3631; x-forefront-prvs: 01949FE337 X-Forefront-Antispam-Report-Untrusted: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(136003)(396003)(346002)(366004)(376002)(51234002)(199004)(189003)(2906002)(2501003)(476003)(486006)(11346002)(446003)(71200400001)(81156014)(81166006)(71190400001)(8936002)(3846002)(6116002)(4326008)(86362001)(2201001)(966005)(66066001)(8676002)(54906003)(478600001)(99286004)(110136005)(316002)(76176011)(7696005)(102836004)(6506007)(53546011)(25786009)(14454004)(186003)(26005)(64756008)(66556008)(66476007)(66446008)(305945005)(52536014)(7736002)(30864003)(14444005)(256004)(66946007)(5660300002)(33656002)(76116006)(55016002)(229853002)(74316002)(6246003)(6306002)(9686003)(6436002)(21314003)(559001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:VE1PR08MB4975; H:VE1PR08MB5149.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: UwGU8x0B2bv2thHQG3tXDjUp8Ap3NX4P9e0VrEuVAP48wUn1yAizg78ouSsoE24ejpqKVccbtvi9nKJYGGCAmc/jgjTfECcjRd7N6o5C/Yd6AQ+L2IF56UxTiMIJM4FqoU7OryNuZLS/7n2o6oDgKQ83/x5pk81bbKJM/e91rYpU1RoMg6Xiy2DQ7RAEzqjy2nq9GMh5V85i/e8g2EGIaN+CY1OYl4iyhfzsdyljDChXsMQTiK0sh0KvIxlvPmVgTjynWs9vy56nLz1/jyWGQuZZPxssW06j3K/2vnia7zeJo/5lXzESn8YBvVkkiIKnjTqJnqDOrdohA4r0yJ+Ugq9Tov3QIcemJykGxsDVLiEiWG53YoJdatp5tgu+EyDWoQKKwQXp0PFhC41C4T9pjd226xblPQ8lCqh7tj3+foknurA0lWbEt95FsnidhbxgwTYj7W9lRDSi+NWP6SJ+CQ== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB4975 Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Honnappa.Nagarahalli@arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT042.eop-EUR03.prod.protection.outlook.com X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE; EFV:NLI; SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(346002)(396003)(136003)(376002)(51234002)(199004)(189003)(2906002)(11346002)(63350400001)(446003)(476003)(336012)(6116002)(436003)(486006)(7736002)(126002)(305945005)(3846002)(14444005)(74316002)(55016002)(6306002)(229853002)(6246003)(22756006)(4326008)(9686003)(70586007)(70206006)(8936002)(81166006)(81156014)(76130400001)(8676002)(26005)(2201001)(30864003)(186003)(86362001)(316002)(7696005)(2501003)(102836004)(23676004)(2486003)(99286004)(53546011)(6506007)(47776003)(76176011)(66066001)(33656002)(5660300002)(54906003)(52536014)(110136005)(356004)(966005)(26826003)(478600001)(25786009)(50466002)(14454004)(21314003); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0802MB2393; H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; X-MS-Office365-Filtering-Correlation-Id-Prvs: 3d55fd8d-a765-4287-1aa5-08d7537defe5 NoDisclaimer: True X-Forefront-PRVS: 01949FE337 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xxUtcHV0yBqI9DbjBxXuQXbugG1w/5QffRW5ZdK1rdAcSrgIJgKr/KY4AWvPJp+EG4eNpgZenVsCb40lnEzO4MubXMojGLFwNgssjlc66kpQNhh1qAhRnYU7CLQwVfPlDnzHO9oJ5rME5WI9GQBUlJn8yhTNKhmCQs3+53gABhzkadrjwNrZiqyBXVr2Ntu+nl7XgUvUoRSX+WR6R7Y4XUdZHJSJ/W/uWfrdxHW6foWw4wTUwVp5RBp0kKv5LgF/383lLWYRYKKg+Z2mcJXhiJw9xjz7gRISXwANajSQa04kgm/xA5Co38ZFB+E2spmoTHM01zHkFWWRU9m2jiNLe8c6lIjyIM+48US+RbpcEoeujQvyd91yG+VRO6mLo0ibpJEBf1QIXArqN+U9d0g9p9IPYcvPwaLVJzw5VblSTcf6bReNECn7JoGZIE6OWD1L/ytUAsPIG3uB8hcsqM4zMA== X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2019 03:48:30.1297 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e8baf0bf-317e-4423-52f2-08d7537e0a68 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2393 Subject: Re: [dpdk-dev] [PATCH v3 2/3] lib/rcu: add resource reclamation APIs X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" PHNuaXA+DQoNCj4gDQo+IEhpIEhvbm5hcHBhLA0KPiANCj4gT24gMTMvMTAvMjAxOSAwNDowMiwg SG9ubmFwcGEgTmFnYXJhaGFsbGkgd3JvdGU6DQo+ID4gSGkgVmxhZGltaXIsDQo+ID4gCUFwb2xv Z2llcyBmb3IgdGhlIGRlbGF5ZWQgcmVzcG9uc2UsIEkgaGFkIHRvIHJ1biBmZXcgZXhwZXJpbWVu dHMuDQo+ID4NCj4gPiA8c25pcD4NCj4gPg0KPiA+PiBIaSBIb25uYXBwYSwNCj4gPj4NCj4gPj4g T24gMDEvMTAvMjAxOSAwNzoyOSwgSG9ubmFwcGEgTmFnYXJhaGFsbGkgd3JvdGU6DQo+ID4+PiBB ZGQgcmVzb3VyY2UgcmVjbGFtYXRpb24gQVBJcyB0byBtYWtlIGl0IHNpbXBsZSBmb3IgYXBwbGlj YXRpb25zIGFuZA0KPiA+Pj4gbGlicmFyaWVzIHRvIGludGVncmF0ZSBydGVfcmN1IGxpYnJhcnku DQo+ID4+Pg0KPiA+Pj4gU2lnbmVkLW9mZi1ieTogSG9ubmFwcGEgTmFnYXJhaGFsbGkgPGhvbm5h cHBhLm5hZ2FyYWhhbGxpQGFybS5jb20+DQo+ID4+PiBSZXZpZXdlZC1ieTogT2xhIExpbGplZGhh bCA8b2xhLmxpbGplZGhhbEBhcm0uY29tPg0KPiA+Pj4gUmV2aWV3ZWQtYnk6IFJ1aWZlbmcgV2Fu ZyA8cnVpZmVuZy53YW5nQGFybS5jb20+DQo+ID4+PiAtLS0NCj4gPj4+ICAgIGFwcC90ZXN0L3Rl c3RfcmN1X3FzYnIuYyAgICAgICAgICAgfCAyOTEgKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0NCj4gPj4+ICAgIGxpYi9saWJydGVfcmN1L21lc29uLmJ1aWxkICAgICAgICAgfCAgIDIgKw0K PiA+Pj4gICAgbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmMgICAgICB8IDE4NSArKysrKysr KysrKysrKysrKysNCj4gPj4+ICAgIGxpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNici5oICAgICAg fCAxNjkgKysrKysrKysrKysrKysrKysNCj4gPj4+ICAgIGxpYi9saWJydGVfcmN1L3J0ZV9yY3Vf cXNicl9wdnQuaCAgfCAgNDYgKysrKysNCj4gPj4+ICAgIGxpYi9saWJydGVfcmN1L3J0ZV9yY3Vf dmVyc2lvbi5tYXAgfCAgIDQgKw0KPiA+Pj4gICAgbGliL21lc29uLmJ1aWxkICAgICAgICAgICAg ICAgICAgICB8ICAgNiArLQ0KPiA+Pj4gICAgNyBmaWxlcyBjaGFuZ2VkLCA3MDAgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkNCj4gPj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGli cnRlX3JjdS9ydGVfcmN1X3FzYnJfcHZ0LmgNCj4gPj4+DQo+ID4+PiBkaWZmIC0tZ2l0IGEvYXBw L3Rlc3QvdGVzdF9yY3VfcXNici5jIGIvYXBwL3Rlc3QvdGVzdF9yY3VfcXNici5jDQo+ID4+PiBp bmRleA0KPiA+Pj4gZDFiOWU0NmEyLi4zYTY4MTUyNDMgMTAwNjQ0DQo+ID4+PiAtLS0gYS9hcHAv dGVzdC90ZXN0X3JjdV9xc2JyLmMNCj4gPj4+ICsrKyBiL2FwcC90ZXN0L3Rlc3RfcmN1X3FzYnIu Yw0KPiA+Pj4gQEAgLTEsOCArMSw5IEBADQo+ID4+PiAgICAvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTMtQ2xhdXNlDQo+ID4+PiAtICogQ29weXJpZ2h0IChjKSAyMDE4IEFybSBMaW1p dGVkDQo+ID4+PiArICogQ29weXJpZ2h0IChjKSAyMDE5IEFybSBMaW1pdGVkDQo+ID4+PiAgICAg Ki8NCj4gPj4+DQo+ID4+PiAgICAjaW5jbHVkZSA8c3RkaW8uaD4NCj4gPj4+ICsjaW5jbHVkZSA8 c3RyaW5nLmg+DQo+ID4+PiAgICAjaW5jbHVkZSA8cnRlX3BhdXNlLmg+DQo+ID4+PiAgICAjaW5j bHVkZSA8cnRlX3JjdV9xc2JyLmg+DQo+ID4+PiAgICAjaW5jbHVkZSA8cnRlX2hhc2guaD4NCj4g Pj4+IEBAIC0zMyw2ICszNCw3IEBAIHN0YXRpYyB1aW50MzJfdCAqa2V5czsNCj4gPj4+ICAgICNk ZWZpbmUgQ09VTlRFUl9WQUxVRSA0MDk2DQo+ID4+PiAgICBzdGF0aWMgdWludDMyX3QgKmhhc2hf ZGF0YVtSVEVfTUFYX0xDT1JFXVtUT1RBTF9FTlRSWV07DQo+ID4+PiAgICBzdGF0aWMgdWludDhf dCB3cml0ZXJfZG9uZTsNCj4gPj4+ICtzdGF0aWMgdWludDhfdCBjYl9mYWlsZWQ7DQo+ID4+Pg0K PiA+Pj4gICAgc3RhdGljIHN0cnVjdCBydGVfcmN1X3FzYnIgKnRbUlRFX01BWF9MQ09SRV07DQo+ ID4+PiAgICBzdHJ1Y3QgcnRlX2hhc2ggKmhbUlRFX01BWF9MQ09SRV07IEBAIC01ODIsNiArNTg0 LDI2OSBAQA0KPiA+Pj4gdGVzdF9yY3VfcXNicl90aHJlYWRfb2ZmbGluZSh2b2lkKQ0KPiA+Pj4g ICAgCXJldHVybiAwOw0KPiA+Pj4gICAgfQ0KPiA+Pj4NCj4gPj4+ICtzdGF0aWMgdm9pZA0KPiA+ Pj4gK3J0ZV9yY3VfcXNicl90ZXN0X2ZyZWVfcmVzb3VyY2Uodm9pZCAqcCwgdm9pZCAqZSkgew0K PiA+Pj4gKwlpZiAocCAhPSBOVUxMICYmIGUgIT0gTlVMTCkgew0KPiA+Pj4gKwkJcHJpbnRmKCIl czogVGVzdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsNCj4gPj4+ICsJCWNiX2ZhaWxlZCA9IDE7DQo+ ID4+PiArCX0NCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoNCj4gPj4+ICsgKiBydGVfcmN1 X3FzYnJfZHFfY3JlYXRlOiBjcmVhdGUgYSBxdWV1ZSB1c2VkIHRvIHN0b3JlIHRoZSBkYXRhDQo+ ID4+PiArc3RydWN0dXJlDQo+ID4+PiArICogZWxlbWVudHMgdGhhdCBjYW4gYmUgZnJlZWQgbGF0 ZXIuIFRoaXMgcXVldWUgaXMgcmVmZXJyZWQgdG8gYXMNCj4gPj4+ICsnZGVmZXINCj4gPj4gcXVl dWUnLg0KPiA+Pj4gKyAqLw0KPiA+Pj4gK3N0YXRpYyBpbnQNCj4gPj4+ICt0ZXN0X3JjdV9xc2Jy X2RxX2NyZWF0ZSh2b2lkKQ0KPiA+Pj4gK3sNCj4gPj4+ICsJY2hhciByY3VfZHFfbmFtZVtSVEVf UklOR19OQU1FU0laRV07DQo+ID4+PiArCXN0cnVjdCBydGVfcmN1X3FzYnJfZHFfcGFyYW1ldGVy cyBwYXJhbXM7DQo+ID4+PiArCXN0cnVjdCBydGVfcmN1X3FzYnJfZHEgKmRxOw0KPiA+Pj4gKw0K PiA+Pj4gKwlwcmludGYoIlxuVGVzdCBydGVfcmN1X3FzYnJfZHFfY3JlYXRlKClcbiIpOw0KPiA+ Pj4gKw0KPiA+Pj4gKwkvKiBQYXNzIGludmFsaWQgcGFyYW1ldGVycyAqLw0KPiA+Pj4gKwlkcSA9 IHJ0ZV9yY3VfcXNicl9kcV9jcmVhdGUoTlVMTCk7DQo+ID4+PiArCVRFU1RfUkNVX1FTQlJfUkVU VVJOX0lGX0VSUk9SKChkcSAhPSBOVUxMKSwgImRxIGNyZWF0ZSBpbnZhbGlkDQo+ID4+PiArcGFy YW1zIik7DQo+ID4+PiArDQo+ID4+PiArCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2Yoc3RydWN0 IHJ0ZV9yY3VfcXNicl9kcV9wYXJhbWV0ZXJzKSk7DQo+ID4+PiArCWRxID0gcnRlX3JjdV9xc2Jy X2RxX2NyZWF0ZSgmcGFyYW1zKTsNCj4gPj4+ICsJVEVTVF9SQ1VfUVNCUl9SRVRVUk5fSUZfRVJS T1IoKGRxICE9IE5VTEwpLCAiZHEgY3JlYXRlIGludmFsaWQNCj4gPj4+ICtwYXJhbXMiKTsNCj4g Pj4+ICsNCj4gPj4+ICsJc25wcmludGYocmN1X2RxX25hbWUsIHNpemVvZihyY3VfZHFfbmFtZSks ICJURVNUX1JDVSIpOw0KPiA+Pj4gKwlwYXJhbXMubmFtZSA9IHJjdV9kcV9uYW1lOw0KPiA+Pj4g KwlkcSA9IHJ0ZV9yY3VfcXNicl9kcV9jcmVhdGUoJnBhcmFtcyk7DQo+ID4+PiArCVRFU1RfUkNV X1FTQlJfUkVUVVJOX0lGX0VSUk9SKChkcSAhPSBOVUxMKSwgImRxIGNyZWF0ZSBpbnZhbGlkDQo+ ID4+PiArcGFyYW1zIik7DQo+ID4+PiArDQo+ID4+PiArCXBhcmFtcy5mID0gcnRlX3JjdV9xc2Jy X3Rlc3RfZnJlZV9yZXNvdXJjZTsNCj4gPj4+ICsJZHEgPSBydGVfcmN1X3FzYnJfZHFfY3JlYXRl KCZwYXJhbXMpOw0KPiA+Pj4gKwlURVNUX1JDVV9RU0JSX1JFVFVSTl9JRl9FUlJPUigoZHEgIT0g TlVMTCksICJkcSBjcmVhdGUgaW52YWxpZA0KPiA+Pj4gK3BhcmFtcyIpOw0KPiA+Pj4gKw0KPiA+ Pj4gKwlydGVfcmN1X3FzYnJfaW5pdCh0WzBdLCBSVEVfTUFYX0xDT1JFKTsNCj4gPj4+ICsJcGFy YW1zLnYgPSB0WzBdOw0KPiA+Pj4gKwlkcSA9IHJ0ZV9yY3VfcXNicl9kcV9jcmVhdGUoJnBhcmFt cyk7DQo+ID4+PiArCVRFU1RfUkNVX1FTQlJfUkVUVVJOX0lGX0VSUk9SKChkcSAhPSBOVUxMKSwg ImRxIGNyZWF0ZSBpbnZhbGlkDQo+ID4+PiArcGFyYW1zIik7DQo+ID4+PiArDQo+ID4+PiArCXBh cmFtcy5zaXplID0gMTsNCj4gPj4+ICsJZHEgPSBydGVfcmN1X3FzYnJfZHFfY3JlYXRlKCZwYXJh bXMpOw0KPiA+Pj4gKwlURVNUX1JDVV9RU0JSX1JFVFVSTl9JRl9FUlJPUigoZHEgIT0gTlVMTCks ICJkcSBjcmVhdGUgaW52YWxpZA0KPiA+Pj4gK3BhcmFtcyIpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlw YXJhbXMuZXNpemUgPSAzOw0KPiA+Pj4gKwlkcSA9IHJ0ZV9yY3VfcXNicl9kcV9jcmVhdGUoJnBh cmFtcyk7DQo+ID4+PiArCVRFU1RfUkNVX1FTQlJfUkVUVVJOX0lGX0VSUk9SKChkcSAhPSBOVUxM KSwgImRxIGNyZWF0ZSBpbnZhbGlkDQo+ID4+PiArcGFyYW1zIik7DQo+ID4+PiArDQo+ID4+PiAr CS8qIFBhc3MgYWxsIHZhbGlkIHBhcmFtZXRlcnMgKi8NCj4gPj4+ICsJcGFyYW1zLmVzaXplID0g MTY7DQo+ID4+PiArCWRxID0gcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZSgmcGFyYW1zKTsNCj4gPj4+ ICsJVEVTVF9SQ1VfUVNCUl9SRVRVUk5fSUZfRVJST1IoKGRxID09IE5VTEwpLCAiZHEgY3JlYXRl IHZhbGlkDQo+ID4+IHBhcmFtcyIpOw0KPiA+Pj4gKwlydGVfcmN1X3FzYnJfZHFfZGVsZXRlKGRx KTsNCj4gPj4+ICsNCj4gPj4+ICsJcmV0dXJuIDA7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4g Ky8qDQo+ID4+PiArICogcnRlX3JjdV9xc2JyX2RxX2VucXVldWU6IGVucXVldWUgb25lIHJlc291 cmNlIHRvIHRoZSBkZWZlcg0KPiA+Pj4gK3F1ZXVlLA0KPiA+Pj4gKyAqIHRvIGJlIGZyZWVkIGxh dGVyIGFmdGVyIGF0bGVhc3Qgb25lIGdyYWNlIHBlcmlvZCBpcyBvdmVyLg0KPiA+Pj4gKyAqLw0K PiA+Pj4gK3N0YXRpYyBpbnQNCj4gPj4+ICt0ZXN0X3JjdV9xc2JyX2RxX2VucXVldWUodm9pZCkN Cj4gPj4+ICt7DQo+ID4+PiArCWludCByZXQ7DQo+ID4+PiArCXVpbnQ2NF90IHI7DQo+ID4+PiAr CWNoYXIgcmN1X2RxX25hbWVbUlRFX1JJTkdfTkFNRVNJWkVdOw0KPiA+Pj4gKwlzdHJ1Y3QgcnRl X3JjdV9xc2JyX2RxX3BhcmFtZXRlcnMgcGFyYW1zOw0KPiA+Pj4gKwlzdHJ1Y3QgcnRlX3JjdV9x c2JyX2RxICpkcTsNCj4gPj4+ICsNCj4gPj4+ICsJcHJpbnRmKCJcblRlc3QgcnRlX3JjdV9xc2Jy X2RxX2VucXVldWUoKVxuIik7DQo+ID4+PiArDQo+ID4+PiArCS8qIENyZWF0ZSBhIHF1ZXVlIHdp dGggc2ltcGxlIHBhcmFtZXRlcnMgKi8NCj4gPj4+ICsJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVv ZihzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxX3BhcmFtZXRlcnMpKTsNCj4gPj4+ICsJc25wcmludGYo cmN1X2RxX25hbWUsIHNpemVvZihyY3VfZHFfbmFtZSksICJURVNUX1JDVSIpOw0KPiA+Pj4gKwlw YXJhbXMubmFtZSA9IHJjdV9kcV9uYW1lOw0KPiA+Pj4gKwlwYXJhbXMuZiA9IHJ0ZV9yY3VfcXNi cl90ZXN0X2ZyZWVfcmVzb3VyY2U7DQo+ID4+PiArCXJ0ZV9yY3VfcXNicl9pbml0KHRbMF0sIFJU RV9NQVhfTENPUkUpOw0KPiA+Pj4gKwlwYXJhbXMudiA9IHRbMF07DQo+ID4+PiArCXBhcmFtcy5z aXplID0gMTsNCj4gPj4+ICsJcGFyYW1zLmVzaXplID0gMTY7DQo+ID4+PiArCWRxID0gcnRlX3Jj dV9xc2JyX2RxX2NyZWF0ZSgmcGFyYW1zKTsNCj4gPj4+ICsJVEVTVF9SQ1VfUVNCUl9SRVRVUk5f SUZfRVJST1IoKGRxID09IE5VTEwpLCAiZHEgY3JlYXRlIHZhbGlkDQo+ID4+PiArcGFyYW1zIik7 DQo+ID4+PiArDQo+ID4+PiArCS8qIFBhc3MgaW52YWxpZCBwYXJhbWV0ZXJzICovDQo+ID4+PiAr CXJldCA9IHJ0ZV9yY3VfcXNicl9kcV9lbnF1ZXVlKE5VTEwsIE5VTEwpOw0KPiA+Pj4gKwlURVNU X1JDVV9RU0JSX1JFVFVSTl9JRl9FUlJPUigocmV0ID09IDApLCAiZHEgZW5xdWV1ZSBpbnZhbGlk DQo+ID4+PiArcGFyYW1zIik7DQo+ID4+PiArDQo+ID4+PiArCXJldCA9IHJ0ZV9yY3VfcXNicl9k cV9lbnF1ZXVlKGRxLCBOVUxMKTsNCj4gPj4+ICsJVEVTVF9SQ1VfUVNCUl9SRVRVUk5fSUZfRVJS T1IoKHJldCA9PSAwKSwgImRxIGVucXVldWUgaW52YWxpZA0KPiA+Pj4gK3BhcmFtcyIpOw0KPiA+ Pj4gKw0KPiA+Pj4gKwlyZXQgPSBydGVfcmN1X3FzYnJfZHFfZW5xdWV1ZShOVUxMLCAmcik7DQo+ ID4+PiArCVRFU1RfUkNVX1FTQlJfUkVUVVJOX0lGX0VSUk9SKChyZXQgPT0gMCksICJkcSBlbnF1 ZXVlIGludmFsaWQNCj4gPj4+ICtwYXJhbXMiKTsNCj4gPj4+ICsNCj4gPj4+ICsJcmV0ID0gcnRl X3JjdV9xc2JyX2RxX2RlbGV0ZShkcSk7DQo+ID4+PiArCVRFU1RfUkNVX1FTQlJfUkVUVVJOX0lG X0VSUk9SKChyZXQgPT0gMSksICJkcSBkZWxldGUgdmFsaWQNCj4gPj4gcGFyYW1zIik7DQo+ID4+ PiArDQo+ID4+PiArCXJldHVybiAwOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKg0KPiA+ Pj4gKyAqIHJ0ZV9yY3VfcXNicl9kcV9yZWNsYWltOiBSZWNsYWltIHJlc291cmNlcyBmcm9tIHRo ZSBkZWZlciBxdWV1ZS4NCj4gPj4+ICsgKi8NCj4gPj4+ICtzdGF0aWMgaW50DQo+ID4+PiArdGVz dF9yY3VfcXNicl9kcV9yZWNsYWltKHZvaWQpDQo+ID4+PiArew0KPiA+Pj4gKwlpbnQgcmV0Ow0K PiA+Pj4gKw0KPiA+Pj4gKwlwcmludGYoIlxuVGVzdCBydGVfcmN1X3FzYnJfZHFfcmVjbGFpbSgp XG4iKTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogUGFzcyBpbnZhbGlkIHBhcmFtZXRlcnMgKi8NCj4g Pj4+ICsJcmV0ID0gcnRlX3JjdV9xc2JyX2RxX3JlY2xhaW0oTlVMTCk7DQo+ID4+PiArCVRFU1Rf UkNVX1FTQlJfUkVUVVJOX0lGX0VSUk9SKChyZXQgIT0gMSksICJkcSByZWNsYWltIGludmFsaWQN Cj4gPj4+ICtwYXJhbXMiKTsNCj4gPj4+ICsNCj4gPj4+ICsJcmV0dXJuIDA7DQo+ID4+PiArfQ0K PiA+Pj4gKw0KPiA+Pj4gKy8qDQo+ID4+PiArICogcnRlX3JjdV9xc2JyX2RxX2RlbGV0ZTogRGVs ZXRlIGEgZGVmZXIgcXVldWUuDQo+ID4+PiArICovDQo+ID4+PiArc3RhdGljIGludA0KPiA+Pj4g K3Rlc3RfcmN1X3FzYnJfZHFfZGVsZXRlKHZvaWQpDQo+ID4+PiArew0KPiA+Pj4gKwlpbnQgcmV0 Ow0KPiA+Pj4gKwljaGFyIHJjdV9kcV9uYW1lW1JURV9SSU5HX05BTUVTSVpFXTsNCj4gPj4+ICsJ c3RydWN0IHJ0ZV9yY3VfcXNicl9kcV9wYXJhbWV0ZXJzIHBhcmFtczsNCj4gPj4+ICsJc3RydWN0 IHJ0ZV9yY3VfcXNicl9kcSAqZHE7DQo+ID4+PiArDQo+ID4+PiArCXByaW50ZigiXG5UZXN0IHJ0 ZV9yY3VfcXNicl9kcV9kZWxldGUoKVxuIik7DQo+ID4+PiArDQo+ID4+PiArCS8qIFBhc3MgaW52 YWxpZCBwYXJhbWV0ZXJzICovDQo+ID4+PiArCXJldCA9IHJ0ZV9yY3VfcXNicl9kcV9kZWxldGUo TlVMTCk7DQo+ID4+PiArCVRFU1RfUkNVX1FTQlJfUkVUVVJOX0lGX0VSUk9SKChyZXQgIT0gMSks ICJkcSBkZWxldGUgaW52YWxpZA0KPiA+Pj4gK3BhcmFtcyIpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlt ZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHN0cnVjdCBydGVfcmN1X3FzYnJfZHFfcGFyYW1ldGVy cykpOw0KPiA+Pj4gKwlzbnByaW50ZihyY3VfZHFfbmFtZSwgc2l6ZW9mKHJjdV9kcV9uYW1lKSwg IlRFU1RfUkNVIik7DQo+ID4+PiArCXBhcmFtcy5uYW1lID0gcmN1X2RxX25hbWU7DQo+ID4+PiAr CXBhcmFtcy5mID0gcnRlX3JjdV9xc2JyX3Rlc3RfZnJlZV9yZXNvdXJjZTsNCj4gPj4+ICsJcnRl X3JjdV9xc2JyX2luaXQodFswXSwgUlRFX01BWF9MQ09SRSk7DQo+ID4+PiArCXBhcmFtcy52ID0g dFswXTsNCj4gPj4+ICsJcGFyYW1zLnNpemUgPSAxOw0KPiA+Pj4gKwlwYXJhbXMuZXNpemUgPSAx NjsNCj4gPj4+ICsJZHEgPSBydGVfcmN1X3FzYnJfZHFfY3JlYXRlKCZwYXJhbXMpOw0KPiA+Pj4g KwlURVNUX1JDVV9RU0JSX1JFVFVSTl9JRl9FUlJPUigoZHEgPT0gTlVMTCksICJkcSBjcmVhdGUg dmFsaWQNCj4gPj4gcGFyYW1zIik7DQo+ID4+PiArCXJldCA9IHJ0ZV9yY3VfcXNicl9kcV9kZWxl dGUoZHEpOw0KPiA+Pj4gKwlURVNUX1JDVV9RU0JSX1JFVFVSTl9JRl9FUlJPUigocmV0ICE9IDAp LCAiZHEgZGVsZXRlIHZhbGlkDQo+ID4+IHBhcmFtcyIpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXR1 cm4gMDsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoNCj4gPj4+ICsgKiBydGVfcmN1X3Fz YnJfZHFfZW5xdWV1ZTogZW5xdWV1ZSBvbmUgcmVzb3VyY2UgdG8gdGhlIGRlZmVyDQo+ID4+PiAr cXVldWUsDQo+ID4+PiArICogdG8gYmUgZnJlZWQgbGF0ZXIgYWZ0ZXIgYXRsZWFzdCBvbmUgZ3Jh Y2UgcGVyaW9kIGlzIG92ZXIuDQo+ID4+PiArICovDQo+ID4+PiArc3RhdGljIGludA0KPiA+Pj4g K3Rlc3RfcmN1X3FzYnJfZHFfZnVuY3Rpb25hbChpbnQzMl90IHNpemUsIGludDMyX3QgZXNpemUp IHsNCj4gPj4+ICsJaW50IGksIGosIHJldDsNCj4gPj4+ICsJY2hhciByY3VfZHFfbmFtZVtSVEVf UklOR19OQU1FU0laRV07DQo+ID4+PiArCXN0cnVjdCBydGVfcmN1X3FzYnJfZHFfcGFyYW1ldGVy cyBwYXJhbXM7DQo+ID4+PiArCXN0cnVjdCBydGVfcmN1X3FzYnJfZHEgKmRxOw0KPiA+Pj4gKwl1 aW50NjRfdCAqZTsNCj4gPj4+ICsJdWludDY0X3Qgc2MgPSAyMDA7DQo+ID4+PiArCWludCBtYXhf ZW50cmllczsNCj4gPj4+ICsNCj4gPj4+ICsJcHJpbnRmKCJcblRlc3QgcnRlX3JjdV9xc2JyX2Rx X3h4eCBmdW5jdGlvbmFsIHRlc3RzKClcbiIpOw0KPiA+Pj4gKwlwcmludGYoIlNpemUgPSAlZCwg ZXNpemUgPSAlZFxuIiwgc2l6ZSwgZXNpemUpOw0KPiA+Pj4gKw0KPiA+Pj4gKwllID0gKHVpbnQ2 NF90ICopcnRlX3ptYWxsb2MoTlVMTCwgZXNpemUsIFJURV9DQUNIRV9MSU5FX1NJWkUpOw0KPiA+ Pj4gKwlpZiAoZSA9PSBOVUxMKQ0KPiA+Pj4gKwkJcmV0dXJuIDA7DQo+ID4+PiArCWNiX2ZhaWxl ZCA9IDA7DQo+ID4+PiArDQo+ID4+PiArCS8qIEluaXRpYWxpemUgdGhlIFJDVSB2YXJpYWJsZS4g Tm8gdGhyZWFkcyBhcmUgcmVnaXN0ZXJlZCAqLw0KPiA+Pj4gKwlydGVfcmN1X3FzYnJfaW5pdCh0 WzBdLCBSVEVfTUFYX0xDT1JFKTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogQ3JlYXRlIGEgcXVldWUg d2l0aCBzaW1wbGUgcGFyYW1ldGVycyAqLw0KPiA+Pj4gKwltZW1zZXQoJnBhcmFtcywgMCwgc2l6 ZW9mKHN0cnVjdCBydGVfcmN1X3FzYnJfZHFfcGFyYW1ldGVycykpOw0KPiA+Pj4gKwlzbnByaW50 ZihyY3VfZHFfbmFtZSwgc2l6ZW9mKHJjdV9kcV9uYW1lKSwgIlRFU1RfUkNVIik7DQo+ID4+PiAr CXBhcmFtcy5uYW1lID0gcmN1X2RxX25hbWU7DQo+ID4+PiArCXBhcmFtcy5mID0gcnRlX3JjdV9x c2JyX3Rlc3RfZnJlZV9yZXNvdXJjZTsNCj4gPj4+ICsJcGFyYW1zLnYgPSB0WzBdOw0KPiA+Pj4g KwlwYXJhbXMuc2l6ZSA9IHNpemU7DQo+ID4+PiArCXBhcmFtcy5lc2l6ZSA9IGVzaXplOw0KPiA+ Pj4gKwlkcSA9IHJ0ZV9yY3VfcXNicl9kcV9jcmVhdGUoJnBhcmFtcyk7DQo+ID4+PiArCVRFU1Rf UkNVX1FTQlJfUkVUVVJOX0lGX0VSUk9SKChkcSA9PSBOVUxMKSwgImRxIGNyZWF0ZSB2YWxpZA0K PiA+Pj4gK3BhcmFtcyIpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBHaXZlbiB0aGUgc2l6ZSBhbmQg ZXNpemUsIGNhbGN1bGF0ZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcw0KPiA+Pj4gKwkg KiB0aGF0IGNhbiBiZSBzdG9yZWQgb24gdGhlIGRlZmVyIHF1ZXVlIChsb29rIGF0IHRoZSBsb2dp YyB1c2VkDQo+ID4+PiArCSAqIGluIGNhcGFjaXR5IGNhbGN1bGF0aW9uIG9mIHJ0ZV9yaW5nKS4N Cj4gPj4+ICsJICovDQo+ID4+PiArCW1heF9lbnRyaWVzID0gcnRlX2FsaWduMzJwb3cyKCgoZXNp emUvOCArIDEpICogc2l6ZSkgKyAxKTsNCj4gPj4+ICsJbWF4X2VudHJpZXMgPSAobWF4X2VudHJp ZXMgLSAxKS8oZXNpemUvOCArIDEpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBFbnF1ZXVlIGZldyBj b3VudGVycyBzdGFydGluZyB3aXRoIHRoZSB2YWx1ZSAnc2MnICovDQo+ID4+PiArCS8qIFRoZSBx dWV1ZSBzaXplIHdpbGwgYmUgcm91bmRlZCB1cCB0byAyLiBUaGUgZW5xdWV1ZSBBUEkgYWxzbw0K PiA+Pj4gKwkgKiByZWNsYWltcyBpZiB0aGUgcXVldWUgc2l6ZSBpcyBhYm92ZSBjZXJ0YWluIGxp bWl0LiBTaW5jZSwgdGhlcmUNCj4gPj4+ICsJICogYXJlIG5vIHRocmVhZHMgcmVnaXN0ZXJlZCwg cmVjbGFtYXRpb24gc3VjY2VkZXMuIEhlbmNlLCBpdCBzaG91bGQNCj4gPj4+ICsJICogYmUgcG9z c2libGUgdG8gZW5xdWV1ZSBtb3JlIHRoYW4gdGhlIHByb3ZpZGVkIHF1ZXVlIHNpemUuDQo+ID4+ PiArCSAqLw0KPiA+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgew0KPiA+Pj4gKwkJcmV0 ID0gcnRlX3JjdV9xc2JyX2RxX2VucXVldWUoZHEsIGUpOw0KPiA+Pj4gKwkJVEVTVF9SQ1VfUVNC Ul9SRVRVUk5fSUZfRVJST1IoKHJldCAhPSAwKSwNCj4gPj4+ICsJCQkiZHEgZW5xdWV1ZSBmdW5j dGlvbmFsIik7DQo+ID4+PiArCQlmb3IgKGogPSAwOyBqIDwgZXNpemUvODsgaisrKQ0KPiA+Pj4g KwkJCWVbal0gPSBzYysrOw0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiArCS8qIFJlZ2lzdGVy IGEgdGhyZWFkIG9uIHRoZSBSQ1UgUVNCUiB2YXJpYWJsZS4gUmVjbGFtYXRpb24gd2lsbCBub3QN Cj4gPj4+ICsJICogc3VjY2VlZC4gSXQgc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSB0byBlbnF1ZXVl IG1vcmUgdGhhbiB0aGUgc2l6ZQ0KPiA+Pj4gKwkgKiBudW1iZXIgb2YgcmVzb3VyY2VzLg0KPiA+ Pj4gKwkgKi8NCj4gPj4+ICsJcnRlX3JjdV9xc2JyX3RocmVhZF9yZWdpc3Rlcih0WzBdLCAxKTsN Cj4gPj4+ICsJcnRlX3JjdV9xc2JyX3RocmVhZF9vbmxpbmUodFswXSwgMSk7DQo+ID4+PiArDQo+ ID4+PiArCWZvciAoaSA9IDA7IGkgPCBtYXhfZW50cmllczsgaSsrKSB7DQo+ID4+PiArCQlyZXQg PSBydGVfcmN1X3FzYnJfZHFfZW5xdWV1ZShkcSwgZSk7DQo+ID4+PiArCQlURVNUX1JDVV9RU0JS X1JFVFVSTl9JRl9FUlJPUigocmV0ICE9IDApLA0KPiA+Pj4gKwkJCSJkcSBlbnF1ZXVlIGZ1bmN0 aW9uYWwiKTsNCj4gPj4+ICsJCWZvciAoaiA9IDA7IGogPCBlc2l6ZS84OyBqKyspDQo+ID4+PiAr CQkJZVtqXSA9IHNjKys7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJLyogRW5xdWV1ZSBm YWlscyBhcyBxdWV1ZSBpcyBmdWxsICovDQo+ID4+PiArCXJldCA9IHJ0ZV9yY3VfcXNicl9kcV9l bnF1ZXVlKGRxLCBlKTsNCj4gPj4+ICsJVEVTVF9SQ1VfUVNCUl9SRVRVUk5fSUZfRVJST1IoKHJl dCA9PSAwKSwgImRxIGVucXVldWUNCj4gPj4gZnVuY3Rpb25hbCIpOw0KPiA+Pj4gKw0KPiA+Pj4g KwkvKiBEZWxldGUgc2hvdWxkIGZhaWwgYXMgdGhlcmUgYXJlIGVsZW1lbnRzIGluIGRlZmVyIHF1 ZXVlIHdoaWNoDQo+ID4+PiArCSAqIGNhbm5vdCBiZSByZWNsYWltZWQuDQo+ID4+PiArCSAqLw0K PiA+Pj4gKwlyZXQgPSBydGVfcmN1X3FzYnJfZHFfZGVsZXRlKGRxKTsNCj4gPj4+ICsJVEVTVF9S Q1VfUVNCUl9SRVRVUk5fSUZfRVJST1IoKHJldCA9PSAwKSwgImRxIGRlbGV0ZSB2YWxpZA0KPiA+ PiBwYXJhbXMiKTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogUmVwb3J0IHF1aWVzY2VudCBzdGF0ZSwg ZW5xdWV1ZSBzaG91bGQgc3VjY2VlZCAqLw0KPiA+Pj4gKwlydGVfcmN1X3FzYnJfcXVpZXNjZW50 KHRbMF0sIDEpOw0KPiA+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2VudHJpZXM7IGkrKykgew0K PiA+Pj4gKwkJcmV0ID0gcnRlX3JjdV9xc2JyX2RxX2VucXVldWUoZHEsIGUpOw0KPiA+Pj4gKwkJ VEVTVF9SQ1VfUVNCUl9SRVRVUk5fSUZfRVJST1IoKHJldCAhPSAwKSwNCj4gPj4+ICsJCQkiZHEg ZW5xdWV1ZSBmdW5jdGlvbmFsIik7DQo+ID4+PiArCQlmb3IgKGogPSAwOyBqIDwgZXNpemUvODsg aisrKQ0KPiA+Pj4gKwkJCWVbal0gPSBzYysrOw0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiAr CS8qIFF1ZXVlIGlzIGZ1bGwgKi8NCj4gPj4+ICsJcmV0ID0gcnRlX3JjdV9xc2JyX2RxX2VucXVl dWUoZHEsIGUpOw0KPiA+Pj4gKwlURVNUX1JDVV9RU0JSX1JFVFVSTl9JRl9FUlJPUigocmV0ID09 IDApLCAiZHEgZW5xdWV1ZQ0KPiA+PiBmdW5jdGlvbmFsIik7DQo+ID4+PiArDQo+ID4+PiArCS8q IFJlcG9ydCBxdWllc2NlbnQgc3RhdGUsIGRlbGV0ZSBzaG91bGQgc3VjY2VlZCAqLw0KPiA+Pj4g KwlydGVfcmN1X3FzYnJfcXVpZXNjZW50KHRbMF0sIDEpOw0KPiA+Pj4gKwlyZXQgPSBydGVfcmN1 X3FzYnJfZHFfZGVsZXRlKGRxKTsNCj4gPj4+ICsJVEVTVF9SQ1VfUVNCUl9SRVRVUk5fSUZfRVJS T1IoKHJldCAhPSAwKSwgImRxIGRlbGV0ZSB2YWxpZA0KPiA+PiBwYXJhbXMiKTsNCj4gPj4+ICsN Cj4gPj4+ICsJLyogVmFsaWRhdGUgdGhhdCBjYWxsIGJhY2sgZnVuY3Rpb24gZGlkIG5vdCByZXR1 cm4gYW55IGVycm9yICovDQo+ID4+PiArCVRFU1RfUkNVX1FTQlJfUkVUVVJOX0lGX0VSUk9SKChj Yl9mYWlsZWQgPT0gMSksICJDQiBmYWlsZWQiKTsNCj4gPj4+ICsNCj4gPj4+ICsJcnRlX2ZyZWUo ZSk7DQo+ID4+PiArCXJldHVybiAwOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICAgIC8qDQo+ ID4+PiAgICAgKiBydGVfcmN1X3FzYnJfZHVtcDogRHVtcCBzdGF0dXMgb2YgYSBzaW5nbGUgUVMg dmFyaWFibGUgdG8gYSBmaWxlDQo+ID4+PiAgICAgKi8NCj4gPj4+IEBAIC0xMDI1LDYgKzEyOTAs MTggQEAgdGVzdF9yY3VfcXNicl9tYWluKHZvaWQpDQo+ID4+PiAgICAJaWYgKHRlc3RfcmN1X3Fz YnJfdGhyZWFkX29mZmxpbmUoKSA8IDApDQo+ID4+PiAgICAJCWdvdG8gdGVzdF9mYWlsOw0KPiA+ Pj4NCj4gPj4+ICsJaWYgKHRlc3RfcmN1X3FzYnJfZHFfY3JlYXRlKCkgPCAwKQ0KPiA+Pj4gKwkJ Z290byB0ZXN0X2ZhaWw7DQo+ID4+PiArDQo+ID4+PiArCWlmICh0ZXN0X3JjdV9xc2JyX2RxX3Jl Y2xhaW0oKSA8IDApDQo+ID4+PiArCQlnb3RvIHRlc3RfZmFpbDsNCj4gPj4+ICsNCj4gPj4+ICsJ aWYgKHRlc3RfcmN1X3FzYnJfZHFfZGVsZXRlKCkgPCAwKQ0KPiA+Pj4gKwkJZ290byB0ZXN0X2Zh aWw7DQo+ID4+PiArDQo+ID4+PiArCWlmICh0ZXN0X3JjdV9xc2JyX2RxX2VucXVldWUoKSA8IDAp DQo+ID4+PiArCQlnb3RvIHRlc3RfZmFpbDsNCj4gPj4+ICsNCj4gPj4+ICAgIAlwcmludGYoIlxu RnVuY3Rpb25hbCB0ZXN0c1xuIik7DQo+ID4+Pg0KPiA+Pj4gICAgCWlmICh0ZXN0X3JjdV9xc2Jy X3N3X3N2XzNxcygpIDwgMCkgQEAgLTEwMzMsNiArMTMxMCwxOCBAQA0KPiA+Pj4gdGVzdF9yY3Vf cXNicl9tYWluKHZvaWQpDQo+ID4+PiAgICAJaWYgKHRlc3RfcmN1X3FzYnJfbXdfbXZfbXFzKCkg PCAwKQ0KPiA+Pj4gICAgCQlnb3RvIHRlc3RfZmFpbDsNCj4gPj4+DQo+ID4+PiArCWlmICh0ZXN0 X3JjdV9xc2JyX2RxX2Z1bmN0aW9uYWwoMSwgOCkgPCAwKQ0KPiA+Pj4gKwkJZ290byB0ZXN0X2Zh aWw7DQo+ID4+PiArDQo+ID4+PiArCWlmICh0ZXN0X3JjdV9xc2JyX2RxX2Z1bmN0aW9uYWwoMiwg OCkgPCAwKQ0KPiA+Pj4gKwkJZ290byB0ZXN0X2ZhaWw7DQo+ID4+PiArDQo+ID4+PiArCWlmICh0 ZXN0X3JjdV9xc2JyX2RxX2Z1bmN0aW9uYWwoMzAzLCAxNikgPCAwKQ0KPiA+Pj4gKwkJZ290byB0 ZXN0X2ZhaWw7DQo+ID4+PiArDQo+ID4+PiArCWlmICh0ZXN0X3JjdV9xc2JyX2RxX2Z1bmN0aW9u YWwoNywgMTI4KSA8IDApDQo+ID4+PiArCQlnb3RvIHRlc3RfZmFpbDsNCj4gPj4+ICsNCj4gPj4+ ICAgIAlmcmVlX3JjdSgpOw0KPiA+Pj4NCj4gPj4+ICAgIAlwcmludGYoIlxuIik7DQo+ID4+PiBk aWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yY3UvbWVzb24uYnVpbGQgYi9saWIvbGlicnRlX3JjdS9t ZXNvbi5idWlsZA0KPiA+Pj4gaW5kZXggNjI5MjBiYTAyLi5lMjgwYjI5YzEgMTAwNjQ0DQo+ID4+ PiAtLS0gYS9saWIvbGlicnRlX3JjdS9tZXNvbi5idWlsZA0KPiA+Pj4gKysrIGIvbGliL2xpYnJ0 ZV9yY3UvbWVzb24uYnVpbGQNCj4gPj4+IEBAIC0xMCwzICsxMCw1IEBAIGhlYWRlcnMgPSBmaWxl cygncnRlX3JjdV9xc2JyLmgnKQ0KPiA+Pj4gICAgaWYgY2MuZ2V0X2lkKCkgPT0gJ2NsYW5nJyBh bmQgZHBka19jb25mLmdldCgnUlRFX0FSQ0hfNjQnKSA9PSBmYWxzZQ0KPiA+Pj4gICAgCWV4dF9k ZXBzICs9IGNjLmZpbmRfbGlicmFyeSgnYXRvbWljJykNCj4gPj4+ICAgIGVuZGlmDQo+ID4+PiAr DQo+ID4+PiArZGVwcyArPSBbJ3JpbmcnXQ0KPiA+Pj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVf cmN1L3J0ZV9yY3VfcXNici5jDQo+ID4+PiBiL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNici5j IGluZGV4IGNlN2Y5M2RkMy4uNzY4MTRmNTBiIDEwMDY0NA0KPiA+Pj4gLS0tIGEvbGliL2xpYnJ0 ZV9yY3UvcnRlX3JjdV9xc2JyLmMNCj4gPj4+ICsrKyBiL2xpYi9saWJydGVfcmN1L3J0ZV9yY3Vf cXNici5jDQo+ID4+PiBAQCAtMjEsNiArMjEsNyBAQA0KPiA+Pj4gICAgI2luY2x1ZGUgPHJ0ZV9l cnJuby5oPg0KPiA+Pj4NCj4gPj4+ICAgICNpbmNsdWRlICJydGVfcmN1X3FzYnIuaCINCj4gPj4+ ICsjaW5jbHVkZSAicnRlX3JjdV9xc2JyX3B2dC5oIg0KPiA+Pj4NCj4gPj4+ICAgIC8qIEdldCB0 aGUgbWVtb3J5IHNpemUgb2YgUVNCUiB2YXJpYWJsZSAqLw0KPiA+Pj4gICAgc2l6ZV90DQo+ID4+ PiBAQCAtMjY3LDYgKzI2OCwxOTAgQEAgcnRlX3JjdV9xc2JyX2R1bXAoRklMRSAqZiwgc3RydWN0 DQo+IHJ0ZV9yY3VfcXNicg0KPiA+PiAqdikNCj4gPj4+ICAgIAlyZXR1cm4gMDsNCj4gPj4+ICAg IH0NCj4gPj4+DQo+ID4+PiArLyogQ3JlYXRlIGEgcXVldWUgdXNlZCB0byBzdG9yZSB0aGUgZGF0 YSBzdHJ1Y3R1cmUgZWxlbWVudHMgdGhhdA0KPiA+Pj4gK2Nhbg0KPiA+Pj4gKyAqIGJlIGZyZWVk IGxhdGVyLiBUaGlzIHF1ZXVlIGlzIHJlZmVycmVkIHRvIGFzICdkZWZlciBxdWV1ZScuDQo+ID4+ PiArICovDQo+ID4+PiArc3RydWN0IHJ0ZV9yY3VfcXNicl9kcSAqDQo+ID4+PiArcnRlX3JjdV9x c2JyX2RxX2NyZWF0ZShjb25zdCBzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxX3BhcmFtZXRlcnMNCj4g Pj4+ICsqcGFyYW1zKSB7DQo+ID4+PiArCXN0cnVjdCBydGVfcmN1X3FzYnJfZHEgKmRxOw0KPiA+ Pj4gKwl1aW50MzJfdCBxc19maWZvX3NpemU7DQo+ID4+PiArDQo+ID4+PiArCWlmIChwYXJhbXMg PT0gTlVMTCB8fCBwYXJhbXMtPmYgPT0gTlVMTCB8fA0KPiA+Pj4gKwkJcGFyYW1zLT52ID09IE5V TEwgfHwgcGFyYW1zLT5uYW1lID09IE5VTEwgfHwNCj4gPj4+ICsJCXBhcmFtcy0+c2l6ZSA9PSAw IHx8IHBhcmFtcy0+ZXNpemUgPT0gMCB8fA0KPiA+Pj4gKwkJKHBhcmFtcy0+ZXNpemUgJSA4ICE9 IDApKSB7DQo+ID4+PiArCQlydGVfbG9nKFJURV9MT0dfRVJSLCBydGVfcmN1X2xvZ190eXBlLA0K PiA+Pj4gKwkJCSIlcygpOiBJbnZhbGlkIGlucHV0IHBhcmFtZXRlclxuIiwgX19mdW5jX18pOw0K PiA+Pj4gKwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJcmV0dXJuIE5V TEw7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJZHEgPSBydGVfem1hbGxvYyhOVUxMLA0K PiA+Pj4gKwkJKHNpemVvZihzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxKSArIHBhcmFtcy0+ZXNpemUp LA0KPiA+Pj4gKwkJUlRFX0NBQ0hFX0xJTkVfU0laRSk7DQo+ID4+PiArCWlmIChkcSA9PSBOVUxM KSB7DQo+ID4+PiArCQlydGVfZXJybm8gPSBFTk9NRU07DQo+ID4+PiArDQo+ID4+PiArCQlyZXR1 cm4gTlVMTDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiByb3VuZCB1cCBxc19maWZv X3NpemUgdG8gbmV4dCBwb3dlciBvZiB0d28gdGhhdCBpcyBub3QgbGVzcyB0aGFuDQo+ID4+PiAr CSAqIG1heF9zaXplLg0KPiA+Pj4gKwkgKi8NCj4gPj4+ICsJcXNfZmlmb19zaXplID0gcnRlX2Fs aWduMzJwb3cyKCgoKHBhcmFtcy0+ZXNpemUvOCkgKyAxKQ0KPiA+Pj4gKwkJCQkJKiBwYXJhbXMt PnNpemUpICsgMSk7DQo+ID4+PiArCWRxLT5yID0gcnRlX3JpbmdfY3JlYXRlKHBhcmFtcy0+bmFt ZSwgcXNfZmlmb19zaXplLA0KPiA+Pj4gKwkJCQkJU09DS0VUX0lEX0FOWSwgMCk7DQo+ID4+PiAr CWlmIChkcS0+ciA9PSBOVUxMKSB7DQo+ID4+PiArCQlydGVfbG9nKFJURV9MT0dfRVJSLCBydGVf cmN1X2xvZ190eXBlLA0KPiA+Pj4gKwkJCSIlcygpOiBkZWZlciBxdWV1ZSBjcmVhdGUgZmFpbGVk XG4iLCBfX2Z1bmNfXyk7DQo+ID4+PiArCQlydGVfZnJlZShkcSk7DQo+ID4+PiArCQlyZXR1cm4g TlVMTDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlkcS0+diA9IHBhcmFtcy0+djsNCj4g Pj4+ICsJZHEtPnNpemUgPSBwYXJhbXMtPnNpemU7DQo+ID4+PiArCWRxLT5lc2l6ZSA9IHBhcmFt cy0+ZXNpemU7DQo+ID4+PiArCWRxLT5mID0gcGFyYW1zLT5mOw0KPiA+Pj4gKwlkcS0+cCA9IHBh cmFtcy0+cDsNCj4gPj4+ICsNCj4gPj4+ICsJcmV0dXJuIGRxOw0KPiA+Pj4gK30NCj4gPj4+ICsN Cj4gPj4+ICsvKiBFbnF1ZXVlIG9uZSByZXNvdXJjZSB0byB0aGUgZGVmZXIgcXVldWUgdG8gZnJl ZSBhZnRlciB0aGUgZ3JhY2UNCj4gPj4+ICsgKiBwZXJpb2QgaXMgb3Zlci4NCj4gPj4+ICsgKi8N Cj4gPj4+ICtpbnQgcnRlX3JjdV9xc2JyX2RxX2VucXVldWUoc3RydWN0IHJ0ZV9yY3VfcXNicl9k cSAqZHEsIHZvaWQgKmUpIHsNCj4gPj4+ICsJdWludDY0X3QgdG9rZW47DQo+ID4+PiArCXVpbnQ2 NF90ICp0bXA7DQo+ID4+PiArCXVpbnQzMl90IGk7DQo+ID4+PiArCXVpbnQzMl90IGN1cl9zaXpl LCBmcmVlX3NpemU7DQo+ID4+PiArDQo+ID4+PiArCWlmIChkcSA9PSBOVUxMIHx8IGUgPT0gTlVM TCkgew0KPiA+Pj4gKwkJcnRlX2xvZyhSVEVfTE9HX0VSUiwgcnRlX3JjdV9sb2dfdHlwZSwNCj4g Pj4+ICsJCQkiJXMoKTogSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJcbiIsIF9fZnVuY19fKTsNCj4g Pj4+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4gPj4+ICsNCj4gPj4+ICsJCXJldHVybiAxOw0K PiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiArCS8qIFN0YXJ0IHRoZSBncmFjZSBwZXJpb2QgKi8N Cj4gPj4+ICsJdG9rZW4gPSBydGVfcmN1X3FzYnJfc3RhcnQoZHEtPnYpOw0KPiA+Pj4gKw0KPiA+ Pj4gKwkvKiBSZWNsYWltIHJlc291cmNlcyBpZiB0aGUgcXVldWUgaXMgMS84dGggZnVsbC4gVGhp cyBoZWxwcw0KPiA+Pj4gKwkgKiB0aGUgcXVldWUgZnJvbSBncm93aW5nIHRvbyBsYXJnZSBhbmQg YWxsb3dzIHRpbWUgZm9yIHJlYWRlcg0KPiA+Pj4gKwkgKiB0aHJlYWRzIHRvIHJlcG9ydCB0aGVp ciBxdWllc2NlbnQgc3RhdGUuDQo+ID4+PiArCSAqLw0KPiA+Pj4gKwljdXJfc2l6ZSA9IHJ0ZV9y aW5nX2NvdW50KGRxLT5yKSAvIChkcS0+ZXNpemUvOCArIDEpOw0KPiA+Pj4gKwlpZiAoY3VyX3Np emUgPiAoZHEtPnNpemUgPj4gUlRFX1JDVV9RU0JSX0FVVE9fUkVDTEFJTV9MSU1JVCkpIHsNCj4g Pj4+ICsJCXJ0ZV9sb2coUlRFX0xPR19JTkZPLCBydGVfcmN1X2xvZ190eXBlLA0KPiA+Pj4gKwkJ CSIlcygpOiBUcmlnZ2VyaW5nIHJlY2xhbWF0aW9uXG4iLCBfX2Z1bmNfXyk7DQo+ID4+PiArCQly dGVfcmN1X3FzYnJfZHFfcmVjbGFpbShkcSk7DQo+ID4+PiArCX0NCj4gPj4gVGhlcmUgYXJlIHR3 byBwcm9ibGVtcyBJIHNlZToNCj4gPj4NCj4gPj4gMS4gcnRlX3JjdV9xc2JyX2RxX3JlY2xhaW0o KSByZWNsYWltcyBvbmx5IDEvMTYgb2YgdGhlIGRlZmVyIHF1ZXVlDQo+ID4+IHdoaWxlIGl0IHRy aWdnZXJzIG9uIDEvOC4gVGhpcyBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYWx3YXlzIGJlIDEvMTYN Cj4gPj4gb2Ygbm9uIHJlY2xhaW1lZCBlbnRyaWVzIGluIHRoZSBxdWV1ZS4NCj4gPiBUaGVyZSB3 aWxsIGJlICdhdCBsZWFzdCcgMS8xNiBub24tcmVjbGFpbWVkIGVudHJpZXMuDQo+IENvcnJlY3Qs IHRoYXQncyB3aGF0IEkgbWVhbnQgOikNCj4gPiAgIEl0IGNvdWxkIGJlIG1vcmUgZGVwZW5kaW5n IG9uIHRoZSBsZW5ndGggb2YgdGhlIGdyYWNlIHBlcmlvZCBhbmQgdGhlIHJhdGUNCj4gb2YgZGVs ZXRpb24uDQo+IA0KPiBSaWdodCwgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIHJlY2xhaW0gZGVw ZW5kcyBvbjoNCj4gDQo+IC0gZ3JhY2UgcGVyaW9kIHdoaWNoIGlzIGFwcGxpY2F0aW9uIHNwZWNp ZmljDQo+IA0KPiAtIGNvc3Qgb2YgZGVsZXRlIG9wZXJhdGlvbiB3aGljaCBpcyBsaWJyYXJ5IChh bGdvcml0aG0pIHNwZWNpZmljDQo+IA0KPiAtIHJhdGUgb2YgZGVsZXRpb24gd2hpY2ggZGVwZW5k cyBvbiBydW50aW1lLg0KPiANCj4gU28gaXQgaXMgdmVyeSBoYXJkIHRvIHByZWRpY3QgaG93IGJp ZyBzaG91bGQgYmUgdGhyZXNob2xkIHRvIHRyaWdnZXINCj4gcmVjbGFtYXRpb24gYW5kIGhvdyBt YW55IGVudHJpZXMgc2hvdWxkIGl0IHJlY2xhaW0uDQo+IA0KPiA+IFRoZSB0cmlnZ2VyIG9mIDEv OCBpcyB1c2VkIHRvIGdpdmUgc3VmZmljaWVudCB0aW1lIGZvciB0aGUgcmVhZGVycyB0byByZXBv cnQNCj4gdGhlaXIgcXVpZXNjZW50IHN0YXRlLiAxLzE2IGlzIHVzZWQgdG8gc3ByZWFkIHRoZSBs b2FkIG9mIHJlY2xhbWF0aW9uIGFjcm9zcw0KPiBtdWx0aXBsZSBjYWxscyBhbmQgcHJvdmlkZSBh IHVwcGVyIGJvdW5kIG9uIHRoZSBjeWNsZXMgY29uc3VtZWQuDQo+IA0KPiAxLzE2IG9mIG1heCBl bnRyaWVzIHRvIHJlY2xhaW0gd2l0aGluIHNpbmdsZSBjYWxsIGNhbiBjb3N0IGEgbG90Lg0KPiBN b3Jlb3ZlciwgaXQgY291bGQgaGF2ZSBhbiBpbXBhY3Qgb24gdGhlIHJlYWRlcnMgdGhyb3VnaCBt YXNzaXZlIGNhY2hlDQo+IGV2aWN0aW9ucy4NCj4gDQo+IENvbnNpZGVyIGEgc2V0IG9mIHJvdXRl cyBmcm9tIHRlc3RfbHBtX3BlcmYuYy4gVG8gaW5zdGFsbCBhbGwgcm91dGVzIHlvdSBuZWVkDQo+ IHRvIGhhdmUgYXQgbGVhc3QgNjVrIHRibDggZW50cmllcyAobm93IGl0IGhhcyAyaykuIFNvIHdo ZW4gcmVjbGFpbWluZywgYmVzaWRlcw0KPiB0aGUgY29zdHMgb2YgcnRlX3JjdV9xc2JyX2NoZWNr KCksIHlvdSdsbCBuZWVkIHRvIHJld3JpdGUgNGsgY2FjaGUgbGluZXMuDQo+IA0KPiBTbyAxLzE2 IG9mIG1heCBlbnRyaWVzIGlzIHJlbGF0aXZlbHkgYmlnIGFuZCBpdCdzIGJldHRlciB0byBzcHJl YWQgdGhpcyBsb2FkDQo+IGFjcm9zcyBtdWx0aXBsZSBjYWxscy4NCj4gDQo+ID4NCj4gPj4gMi4g TnVtYmVyIG9mIGVudHJpZXMgdG8gcmVjbGFpbSBkZXBlbmQgb24gZHEtPnNpemUuIFNvLA0KPiA+ PiBydGVfcmN1X3FzYnJfZHFfcmVjbGFpbSgpIGNvdWxkIHRha2UgYSBsb3Qgb2YgY3ljbGVzLiBG b3IgTFBNIGxpYnJhcnkNCj4gPj4gdGhpcw0KPiA+IFRoYXQgaXMgdHJ1ZS4gSXQgZGVwZW5kcyBv biBkcS0+c2l6ZSAobnVtYmVyIG9mIHRibDggZ3JvdXBzKS4gSG93ZXZlciwgbm90ZQ0KPiB0aGF0 IHRoZXJlIGlzIHBhdGNoIFsxXSB3aGljaCBwcm92aWRlcyBiYXRjaCByZWNsYW1hdGlvbiBraW5k IG9mIGJlaGF2aW9yDQo+IHdoaWNoIHJlZHVjZXMgdGhlIGN5Y2xlcyBjb25zdW1lZCBieSByZWNs YW1hdGlvbiBzaWduaWZpY2FudGx5Lg0KPiA+DQo+ID4gWzFdIGh0dHBzOi8vcGF0Y2hlcy5kcGRr Lm9yZy9wYXRjaC81ODk2MC8NCj4gPg0KPiA+PiBtZWFucyB0aGF0IHJ0ZV9scG1fZGVsZXRlKCkg c29tZXRpbWVzIHRha2VzIGEgbG9uZyB0aW1lLg0KPiA+IEFncmVlLCBzb21ldGltZXMgdGFrZXMg YWRkaXRpb25hbCB0aW1lLiBJdCBpcyBnb29kIHRvIHNwcmVhZCBpdCBvdmVyIG11bHRpcGxlDQo+ IGNhbGxzLg0KPiBSaWdodCwgd2l0aCBiYXRjaCByZWNsYW1hdGlvbiB3ZSBoYXZlIGhlcmUgY2xh c3NpYyB0aHJvdWdocHV0IHZzIGxhdGVuY3kNCj4gcHJvYmxlbS4gRWl0aGVyIHJlY2xhaW1pbmcg YmlnIG51bWJlciBvZiBlbnRyaWVzIHJlbGF0aXZlbHkgaW5mcmVxdWVudGx5DQo+IHNwcmVhZGlu ZyB0aGUgY29zdCBvZiByZWFkZXJzIHF1aWVzY2VudCBzdGF0ZSBjaGVjayBvciByZWNsYWltaW5n IHNtYWxsDQo+IGFtb3VudCBvZiBlbnRyaWVzIG1vcmUgb2Z0ZW4gc3BlbmRpbmcgbW9yZSBjeWNs ZXMgaW4gYXZlcmFnZS4gSSdkIHByZWZlcg0KPiBsYXRlbmN5IGhlcmUgYmVjYXVzZSBhcyBJIG1l bnRpb25lZCBlYXJsaWVyIGh1Z2UgYmF0Y2hlcyBjb3VsZCBoYXZlIGFuDQo+IGltcGFjdCBvbiBy ZWFkZXJzIGFuZCBsZWFkIHRvIGJpZyBkaWZmZXJlbmNlIGluIGNvc3Qgb2YgZGVsZXRlKCkuDQo+ ID4NCj4gPj4gU28sIG15IHN1Z2dlc3Rpb25zIGhlcmUgd291bGQgYmUNCj4gPj4NCj4gPj4gLSB0 cmlnZ2VyIHJ0ZV9yY3VfcXNicl9kcV9yZWNsYWltKCkgd2l0aCBldmVyeSBlbnF1ZXVlDQo+ID4g R2l2ZW4gdGhhdCB0aGUgTFBNIEFQSXMgYXJlIG1haW5seSBmb3IgY29udHJvbCBwbGFuZSwgSSB3 b3VsZCB0aGluayB0aGF0LA0KPiB0aGUgbmV4dCB0aW1lIExQTSBBUEkgaXMgY2FsbGVkLCB0aGUg cmVhZGVycyBoYXZlIGNvbXBsZXRlZCB0aGUgZ3JhY2UgcGVyaW9kLg0KPiBCdXQgaWYgdGhlcmUg YXJlIGZyZXF1ZW50IHVwZGF0ZXMsIHdlIG1pZ2h0IGVuZCB1cCB3aXRoIGVtcHR5IHJlY2xhaW1z DQo+IHdoaWNoIHdpbGwgd2FzdGUgY3ljbGVzLiBJTU8sIHRoaXMgdHJpZ2dlciBzaG91bGQgaGFw cGVuIGFmdGVyIGF0IGxlYXN0IGZldw0KPiBlbnRyaWVzIGFyZSBpbiB0aGUgcXVldWUuDQo+ID4N Cj4gPj4gLSByZWNsYWltIHNtYWxsIGFtb3VudCBvZiBlbnRyaWVzIChjb3VsZCBiZSBjb25maWd1 cmFibGUgb2YgY3JlYXRpb24NCj4gPj4gdGltZSkNCj4gPiBBZ3JlZS4gSSB3b3VsZCBrZWVwIGl0 IGEgc21hbGxlciB0aGFuIHRoZSB0cmlnZ2VyIGFtb3VudCBrbm93aW5nIHRoYXQgdGhlDQo+IGVs ZW1lbnRzIGFkZGVkIHJpZ2h0IGJlZm9yZSB0aGUgdHJpZ2dlciBtaWdodCBub3QgaGF2ZSBjb21w bGV0ZWQgdGhlIGdyYWNlDQo+IHBlcmlvZC4NCj4gPg0KPiA+PiAtIHByb3ZpZGUgQVBJIHRvIHRy aWdnZXIgcmVjbGFpbSBmcm9tIHRoZSBhcHBsaWNhdGlvbiBtYW51YWxseS4NCj4gPiBJTU8sIHRo aXMgd2lsbCBhZGQgYWRkaXRpb25hbCBjb21wbGV4aXR5IHRvIHRoZSBhcHBsaWNhdGlvbi4gSSBh Z3JlZSB0aGF0DQo+IHRoZXJlIHdpbGwgYmUgc3BlY2lhbCBuZWVkcyBmb3Igc29tZSBhcHBsaWNh dGlvbnMuIEkgdGhpbmsgdGhvc2UgYXBwbGljYXRpb25zDQo+IG1pZ2h0IGhhdmUgdG8gaW1wbGVt ZW50IHRoZWlyIG93biBtZXRob2RzIHVzaW5nIHRoZSBiYXNlIFJDVSBBUElzLg0KPiA+IEluc3Rl YWQsIGFzIGFncmVlZCBpbiBvdGhlciB0aHJlYWRzLCBJIHN1Z2dlc3Qgd2UgZXhwb3NlIHRoZSBw YXJhbWV0ZXJzDQo+ICh3aGVuIHRvIHRyaWdnZXIgYW5kIGhvdyBtdWNoIHRvIHJlY2xhaW0pIHRv IHRoZSBhcHBsaWNhdGlvbiBhcyBvcHRpb25hbA0KPiBjb25maWd1cmFibGUgcGFyYW1ldGVycy4g aS5lLiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QgcHJvdmlkZSB3ZSBjYW4gdXNlDQo+IGRl ZmF1bHQgdmFsdWVzLiBJIHRoaW5rIHRoaXMgc2hvdWxkIHByb3ZpZGUgZW5vdWdoIGZsZXhpYmls aXR5IHRvIHRoZSBhcHBsaWNhdGlvbi4NCj4gDQo+IEFncmVlLg0KPiANCj4gUmVnYXJkaW5nIGRl ZmF1bHQgdmFsdWVzLCBvbmUgc3RyYXRlZ3kgY291bGQgYmU6DQo+IA0KPiAtIGlmIHJlcG9ydGVk IHRocmVzaG9sZCBpc24ndCBzZXQgKGkuZS4gaXMgZXF1YWwgMCkgdGhlbiBjYWxsIHJlY2xhaW0g d2l0aCBldmVyeQ0KPiBlbnF1ZXVlIChpLmUuIHRocmVzaG9sZCA9PSAxKQ0KPiANCj4gLSBpZiBt YXhfZW50cmllc190b19yZWNsYWltIGlzbid0IHNldCB0aGVuIHJlY2xhaW0gYXMgbXVjaCBhcyB3 ZSBjYW4NCj4gDQpPaywgc291bmRzIGdvb2QuDQoNCj4gDQo+ID4+PiArDQo+ID4+PiArCS8qIENo ZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGZvciBhdGxlYXN0IGZvciAxIHJlc291cmNlICovDQo+ID4+ PiArCWZyZWVfc2l6ZSA9IHJ0ZV9yaW5nX2ZyZWVfY291bnQoZHEtPnIpIC8gKGRxLT5lc2l6ZS84 ICsgMSk7DQo+ID4+PiArCWlmICghZnJlZV9zaXplKSB7DQo+ID4+PiArCQlydGVfbG9nKFJURV9M T0dfRVJSLCBydGVfcmN1X2xvZ190eXBlLA0KPiA+Pj4gKwkJCSIlcygpOiBEZWZlciBxdWV1ZSBp cyBmdWxsXG4iLCBfX2Z1bmNfXyk7DQo+ID4+PiArCQlydGVfZXJybm8gPSBFTk9TUEM7DQo+ID4+ PiArCQlyZXR1cm4gMTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBFbnF1ZXVlIHRo ZSByZXNvdXJjZSAqLw0KPiA+Pj4gKwlydGVfcmluZ19zcF9lbnF1ZXVlKGRxLT5yLCAodm9pZCAq KSh1aW50cHRyX3QpdG9rZW4pOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBUaGUgcmVzb3VyY2UgdG8g ZW5xdWV1ZSBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDY0Yg0KPiA+Pj4gKwkgKiBkdWUgdG8g dGhlIGxpbWl0YXRpb24gb2YgdGhlIHJ0ZV9yaW5nIGltcGxlbWVudGF0aW9uLg0KPiA+Pj4gKwkg Ki8NCj4gPj4+ICsJZm9yIChpID0gMCwgdG1wID0gKHVpbnQ2NF90ICopZTsgaSA8IGRxLT5lc2l6 ZS84OyBpKyssIHRtcCsrKQ0KPiA+Pj4gKwkJcnRlX3Jpbmdfc3BfZW5xdWV1ZShkcS0+ciwgKHZv aWQgKikodWludHB0cl90KSp0bXApOw0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXR1cm4gMDsNCj4gPj4+ ICt9DQo+ID4+PiArDQo+ID4+PiArLyogUmVjbGFpbSByZXNvdXJjZXMgZnJvbSB0aGUgZGVmZXIg cXVldWUuICovIGludA0KPiA+Pj4gK3J0ZV9yY3VfcXNicl9kcV9yZWNsYWltKHN0cnVjdCBydGVf cmN1X3FzYnJfZHEgKmRxKSB7DQo+ID4+PiArCXVpbnQzMl90IG1heF9jbnQ7DQo+ID4+PiArCXVp bnQzMl90IGNudDsNCj4gPj4+ICsJdm9pZCAqdG9rZW47DQo+ID4+PiArCXVpbnQ2NF90ICp0bXA7 DQo+ID4+PiArCXVpbnQzMl90IGk7DQo+ID4+PiArDQo+ID4+PiArCWlmIChkcSA9PSBOVUxMKSB7 DQo+ID4+PiArCQlydGVfbG9nKFJURV9MT0dfRVJSLCBydGVfcmN1X2xvZ190eXBlLA0KPiA+Pj4g KwkJCSIlcygpOiBJbnZhbGlkIGlucHV0IHBhcmFtZXRlclxuIiwgX19mdW5jX18pOw0KPiA+Pj4g KwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJcmV0dXJuIDE7DQo+ID4+ PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJLyogQW55dGhpbmcgdG8gcmVjbGFpbT8gKi8NCj4gPj4+ ICsJaWYgKHJ0ZV9yaW5nX2NvdW50KGRxLT5yKSA9PSAwKQ0KPiA+Pj4gKwkJcmV0dXJuIDA7DQo+ ID4+PiArDQo+ID4+PiArCS8qIFJlY2xhaW0gYXQgdGhlIG1heCAxLzE2dGggdGhlIHRvdGFsIG51 bWJlciBvZiBlbnRyaWVzLiAqLw0KPiA+Pj4gKwltYXhfY250ID0gZHEtPnNpemUgPj4gUlRFX1JD VV9RU0JSX01BWF9SRUNMQUlNX0xJTUlUOw0KPiA+Pj4gKwltYXhfY250ID0gKG1heF9jbnQgPT0g MCkgPyBkcS0+c2l6ZSA6IG1heF9jbnQ7DQo+ID4+PiArCWNudCA9IDA7DQo+ID4+PiArDQo+ID4+ PiArCS8qIENoZWNrIHJlYWRlciB0aHJlYWRzIHF1aWVzY2VudCBzdGF0ZSBhbmQgcmVjbGFpbSBy ZXNvdXJjZXMgKi8NCj4gPj4+ICsJd2hpbGUgKChjbnQgPCBtYXhfY250KSAmJiAocnRlX3Jpbmdf cGVlayhkcS0+ciwgJnRva2VuKSA9PSAwKSAmJg0KPiA+Pj4gKwkJKHJ0ZV9yY3VfcXNicl9jaGVj ayhkcS0+diwgKHVpbnQ2NF90KSgodWludHB0cl90KXRva2VuKSwgZmFsc2UpDQo+ID4+PiArCQkJ PT0gMSkpIHsNCj4gPj4+ICsJCSh2b2lkKXJ0ZV9yaW5nX3NjX2RlcXVldWUoZHEtPnIsICZ0b2tl bik7DQo+ID4+PiArCQkvKiBUaGUgcmVzb3VyY2UgdG8gZGVxdWV1ZSBuZWVkcyB0byBiZSBhIG11 bHRpcGxlIG9mIDY0Yg0KPiA+Pj4gKwkJICogZHVlIHRvIHRoZSBsaW1pdGF0aW9uIG9mIHRoZSBy dGVfcmluZyBpbXBsZW1lbnRhdGlvbi4NCj4gPj4+ICsJCSAqLw0KPiA+Pj4gKwkJZm9yIChpID0g MCwgdG1wID0gKHVpbnQ2NF90ICopZHEtPmU7IGkgPCBkcS0+ZXNpemUvODsNCj4gPj4+ICsJCQlp KyssIHRtcCsrKQ0KPiA+Pj4gKwkJCSh2b2lkKXJ0ZV9yaW5nX3NjX2RlcXVldWUoZHEtPnIsDQo+ ID4+PiArCQkJCQkodm9pZCAqKSh1aW50cHRyX3QpdG1wKTsNCj4gPj4+ICsJCWRxLT5mKGRxLT5w LCBkcS0+ZSk7DQo+ID4+PiArDQo+ID4+PiArCQljbnQrKzsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0K PiA+Pj4gKwlydGVfbG9nKFJURV9MT0dfSU5GTywgcnRlX3JjdV9sb2dfdHlwZSwNCj4gPj4+ICsJ CSIlcygpOiBSZWNsYWltZWQgJXUgcmVzb3VyY2VzXG4iLCBfX2Z1bmNfXywgY250KTsNCj4gPj4+ ICsNCj4gPj4+ICsJaWYgKGNudCA9PSAwKSB7DQo+ID4+PiArCQkvKiBObyByZXNvdXJjZXMgd2Vy ZSByZWNsYWltZWQgKi8NCj4gPj4+ICsJCXJ0ZV9lcnJubyA9IEVBR0FJTjsNCj4gPj4+ICsJCXJl dHVybiAxOw0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiArCXJldHVybiAwOw0KPiA+Pj4gK30N Cj4gPj4+ICsNCj4gPj4+ICsvKiBEZWxldGUgYSBkZWZlciBxdWV1ZS4gKi8NCj4gPj4+ICtpbnQN Cj4gPj4+ICtydGVfcmN1X3FzYnJfZHFfZGVsZXRlKHN0cnVjdCBydGVfcmN1X3FzYnJfZHEgKmRx KSB7DQo+ID4+PiArCWlmIChkcSA9PSBOVUxMKSB7DQo+ID4+PiArCQlydGVfbG9nKFJURV9MT0df RVJSLCBydGVfcmN1X2xvZ190eXBlLA0KPiA+Pj4gKwkJCSIlcygpOiBJbnZhbGlkIGlucHV0IHBh cmFtZXRlclxuIiwgX19mdW5jX18pOw0KPiA+Pj4gKwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+ Pj4gKw0KPiA+Pj4gKwkJcmV0dXJuIDE7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJLyog UmVjbGFpbSBhbGwgdGhlIHJlc291cmNlcyAqLw0KPiA+Pj4gKwlpZiAocnRlX3JjdV9xc2JyX2Rx X3JlY2xhaW0oZHEpICE9IDApDQo+ID4+PiArCQkvKiBFcnJvciBudW1iZXIgaXMgYWxyZWFkeSBz ZXQgYnkgdGhlIHJlY2xhaW0gQVBJICovDQo+ID4+PiArCQlyZXR1cm4gMTsNCj4gPj4+ICsNCj4g Pj4+ICsJcnRlX3JpbmdfZnJlZShkcS0+cik7DQo+ID4+PiArCXJ0ZV9mcmVlKGRxKTsNCj4gPj4+ ICsNCj4gPj4+ICsJcmV0dXJuIDA7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gICAgaW50IHJ0 ZV9yY3VfbG9nX3R5cGU7DQo+ID4+Pg0KPiA+Pj4gICAgUlRFX0lOSVQocnRlX3JjdV9yZWdpc3Rl cikNCj4gPj4+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuaA0KPiA+ Pj4gYi9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuaCBpbmRleCBjODBmMTVjMDAuLjE4NWQ0 YjUwYSAxMDA2NDQNCj4gPj4+IC0tLSBhL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNici5oDQo+ ID4+PiArKysgYi9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuaA0KPiA+Pj4gQEAgLTM0LDYg KzM0LDcgQEAgZXh0ZXJuICJDIiB7DQo+ID4+PiAgICAjaW5jbHVkZSA8cnRlX2xjb3JlLmg+DQo+ ID4+PiAgICAjaW5jbHVkZSA8cnRlX2RlYnVnLmg+DQo+ID4+PiAgICAjaW5jbHVkZSA8cnRlX2F0 b21pYy5oPg0KPiA+Pj4gKyNpbmNsdWRlIDxydGVfcmluZy5oPg0KPiA+Pj4NCj4gPj4+ICAgIGV4 dGVybiBpbnQgcnRlX3JjdV9sb2dfdHlwZTsNCj4gPj4+DQo+ID4+PiBAQCAtMTA5LDYgKzExMCw2 NyBAQCBzdHJ1Y3QgcnRlX3JjdV9xc2JyIHsNCj4gPj4+ICAgIAkgKi8NCj4gPj4+ICAgIH0gX19y dGVfY2FjaGVfYWxpZ25lZDsNCj4gPj4+DQo+ID4+PiArLyoqDQo+ID4+PiArICogQ2FsbCBiYWNr IGZ1bmN0aW9uIGNhbGxlZCB0byBmcmVlIHRoZSByZXNvdXJjZXMuDQo+ID4+PiArICoNCj4gPj4+ ICsgKiBAcGFyYW0gcA0KPiA+Pj4gKyAqICAgUG9pbnRlciBwcm92aWRlZCB3aGlsZSBjcmVhdGlu ZyB0aGUgZGVmZXIgcXVldWUNCj4gPj4+ICsgKiBAcGFyYW0gZQ0KPiA+Pj4gKyAqICAgUG9pbnRl ciB0byB0aGUgcmVzb3VyY2UgZGF0YSBzdG9yZWQgb24gdGhlIGRlZmVyIHF1ZXVlDQo+ID4+PiAr ICoNCj4gPj4+ICsgKiBAcmV0dXJuDQo+ID4+PiArICogICBOb25lDQo+ID4+PiArICovDQo+ID4+ PiArdHlwZWRlZiB2b2lkICgqcnRlX3JjdV9xc2JyX2ZyZWVfcmVzb3VyY2UpKHZvaWQgKnAsIHZv aWQgKmUpOw0KPiA+Pj4gKw0KPiA+Pj4gKyNkZWZpbmUgUlRFX1JDVV9RU0JSX0RRX05BTUVTSVpF IFJURV9SSU5HX05BTUVTSVpFDQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICogIFRyaWdn ZXIgYXV0b21hdGljIHJlY2xhbWF0aW9uIGFmdGVyIDEvOHRoIHRoZSBkZWZlciBxdWV1ZSBpcyBm dWxsLg0KPiA+Pj4gKyAqLw0KPiA+Pj4gKyNkZWZpbmUgUlRFX1JDVV9RU0JSX0FVVE9fUkVDTEFJ TV9MSU1JVCAzDQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICogIFJlY2xhaW0gYXQgdGhl IG1heCAxLzE2dGggdGhlIHRvdGFsIG51bWJlciBvZiByZXNvdXJjZXMuDQo+ID4+PiArICovDQo+ ID4+PiArI2RlZmluZSBSVEVfUkNVX1FTQlJfTUFYX1JFQ0xBSU1fTElNSVQgNA0KPiA+Pj4gKw0K PiA+Pj4gKy8qKg0KPiA+Pj4gKyAqIFBhcmFtZXRlcnMgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBk ZWZlciBxdWV1ZS4NCj4gPj4+ICsgKi8NCj4gPj4+ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxX3Bh cmFtZXRlcnMgew0KPiA+Pj4gKwljb25zdCBjaGFyICpuYW1lOw0KPiA+Pj4gKwkvKio8IE5hbWUg b2YgdGhlIHF1ZXVlLiAqLw0KPiA+Pj4gKwl1aW50MzJfdCBzaXplOw0KPiA+Pj4gKwkvKio8IE51 bWJlciBvZiBlbnRyaWVzIGluIHF1ZXVlLiBUeXBpY2FsbHksIHRoaXMgd2lsbCBiZQ0KPiA+Pj4g KwkgKiAgIHRoZSBzYW1lIGFzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIHN1cHBvcnRl ZCBpbiB0aGUNCj4gPj4+ICsJICogICBsb2NrIGZyZWUgZGF0YSBzdHJ1Y3R1cmUuDQo+ID4+PiAr CSAqICAgRGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5ib3VuZGVkIG51bWJlciBvZiBlbnRyaWVzIGlz IG5vdA0KPiA+Pj4gKwkgKiAgIHN1cHBvcnRlZCBjdXJyZW50bHkuDQo+ID4+PiArCSAqLw0KPiA+ Pj4gKwl1aW50MzJfdCBlc2l6ZTsNCj4gPj4+ICsJLyoqPCBTaXplIChpbiBieXRlcykgb2YgZWFj aCBlbGVtZW50IGluIHRoZSBkZWZlciBxdWV1ZS4NCj4gPj4+ICsJICogICBUaGlzIGhhcyB0byBi ZSBtdWx0aXBsZSBvZiA4QiBhcyB0aGUgcnRlX3JpbmcgQVBJcw0KPiA+Pj4gKwkgKiAgIHN1cHBv cnQgOEIgZWxlbWVudCBzaXplcyBvbmx5Lg0KPiA+Pj4gKwkgKi8NCj4gPj4+ICsJcnRlX3JjdV9x c2JyX2ZyZWVfcmVzb3VyY2UgZjsNCj4gPj4+ICsJLyoqPCBGdW5jdGlvbiB0byBjYWxsIHRvIGZy ZWUgdGhlIHJlc291cmNlLiAqLw0KPiA+Pj4gKwl2b2lkICpwOw0KPiA+Pj4gKwkvKio8IFBvaW50 ZXIgcGFzc2VkIHRvIHRoZSBmcmVlIGZ1bmN0aW9uLiBUeXBpY2FsbHksIHRoaXMgaXMgdGhlDQo+ ID4+PiArCSAqICAgcG9pbnRlciB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUgdG8gd2hpY2ggdGhlIHJl c291cmNlIHRvIGZyZWUNCj4gPj4+ICsJICogICBiZWxvbmdzLiBUaGlzIGNhbiBiZSBOVUxMLg0K PiA+Pj4gKwkgKi8NCj4gPj4+ICsJc3RydWN0IHJ0ZV9yY3VfcXNiciAqdjsNCj4gPj4+ICsJLyoq PCBSQ1UgUVNCUiB2YXJpYWJsZSB0byB1c2UgZm9yIHRoaXMgZGVmZXIgcXVldWUgKi8gfTsNCj4g Pj4+ICsNCj4gPj4+ICsvKiBSVEUgZGVmZXIgcXVldWUgc3RydWN0dXJlLg0KPiA+Pj4gKyAqIFRo aXMgc3RydWN0dXJlIGhvbGRzIHRoZSBkZWZlciBxdWV1ZS4gVGhlIGRlZmVyIHF1ZXVlIGlzIHVz ZWQgdG8NCj4gPj4+ICsgKiBob2xkIHRoZSBkZWxldGVkIGVudHJpZXMgZnJvbSB0aGUgZGF0YSBz dHJ1Y3R1cmUgdGhhdCBhcmUgbm90DQo+ID4+PiArICogeWV0IGZyZWVkLg0KPiA+Pj4gKyAqLw0K PiA+Pj4gK3N0cnVjdCBydGVfcmN1X3FzYnJfZHE7DQo+ID4+PiArDQo+ID4+PiAgICAvKioNCj4g Pj4+ICAgICAqIEB3YXJuaW5nDQo+ID4+PiAgICAgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJ IG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UgQEANCj4gPj4+IC02NDgsNiArNzEwLDEx MyBAQCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPj4+ICAgIGludA0KPiA+Pj4gICAgcnRlX3JjdV9x c2JyX2R1bXAoRklMRSAqZiwgc3RydWN0IHJ0ZV9yY3VfcXNiciAqdik7DQo+ID4+Pg0KPiA+Pj4g Ky8qKg0KPiA+Pj4gKyAqIEB3YXJuaW5nDQo+ID4+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlz IEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4+PiArICoNCj4gPj4+ICsg KiBDcmVhdGUgYSBxdWV1ZSB1c2VkIHRvIHN0b3JlIHRoZSBkYXRhIHN0cnVjdHVyZSBlbGVtZW50 cyB0aGF0DQo+ID4+PiArY2FuDQo+ID4+PiArICogYmUgZnJlZWQgbGF0ZXIuIFRoaXMgcXVldWUg aXMgcmVmZXJyZWQgdG8gYXMgJ2RlZmVyIHF1ZXVlJy4NCj4gPj4+ICsgKg0KPiA+Pj4gKyAqIEBw YXJhbSBwYXJhbXMNCj4gPj4+ICsgKiAgIFBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgZGVmZXIgcXVl dWUuDQo+ID4+PiArICogQHJldHVybg0KPiA+Pj4gKyAqICAgT24gc3VjY2VzcyAtIFZhbGlkIHBv aW50ZXIgdG8gZGVmZXIgcXVldWUNCj4gPj4+ICsgKiAgIE9uIGVycm9yIC0gTlVMTA0KPiA+Pj4g KyAqICAgUG9zc2libGUgcnRlX2Vycm5vIGNvZGVzIGFyZToNCj4gPj4+ICsgKiAgIC0gRUlOVkFM IC0gTlVMTCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQNCj4gPj4+ICsgKiAgIC0gRU5PTUVNIC0gTm90 IGVub3VnaCBtZW1vcnkNCj4gPj4+ICsgKi8NCj4gPj4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4g Pj4+ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxICoNCj4gPj4+ICtydGVfcmN1X3FzYnJfZHFfY3Jl YXRlKGNvbnN0IHN0cnVjdCBydGVfcmN1X3FzYnJfZHFfcGFyYW1ldGVycw0KPiA+Pj4gKypwYXJh bXMpOw0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAqIEB3YXJuaW5nDQo+ID4+PiArICog QGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNl DQo+ID4+PiArICoNCj4gPj4+ICsgKiBFbnF1ZXVlIG9uZSByZXNvdXJjZSB0byB0aGUgZGVmZXIg cXVldWUgYW5kIHN0YXJ0IHRoZSBncmFjZSBwZXJpb2QuDQo+ID4+PiArICogVGhlIHJlc291cmNl IHdpbGwgYmUgZnJlZWQgbGF0ZXIgYWZ0ZXIgYXQgbGVhc3Qgb25lIGdyYWNlIHBlcmlvZA0KPiA+ Pj4gKyAqIGlzIG92ZXIuDQo+ID4+PiArICoNCj4gPj4+ICsgKiBJZiB0aGUgZGVmZXIgcXVldWUg aXMgZnVsbCwgaXQgd2lsbCBhdHRlbXB0IHRvIHJlY2xhaW0gcmVzb3VyY2VzLg0KPiA+Pj4gKyAq IEl0IHdpbGwgYWxzbyByZWNsYWltIHJlc291cmNlcyBhdCByZWd1bGFyIGludGVydmFscyB0byBh dm9pZA0KPiA+Pj4gKyAqIHRoZSBkZWZlciBxdWV1ZSBmcm9tIGdyb3dpbmcgdG9vIGJpZy4NCj4g Pj4+ICsgKg0KPiA+Pj4gKyAqIFRoaXMgQVBJIGlzIG5vdCBtdWx0aS10aHJlYWQgc2FmZS4gSXQg aXMgZXhwZWN0ZWQgdGhhdCB0aGUNCj4gPj4+ICtjYWxsZXINCj4gPj4+ICsgKiBwcm92aWRlcyBt dWx0aS10aHJlYWQgc2FmZXR5IGJ5IGxvY2tpbmcgYSBtdXRleCBvciBzb21lIG90aGVyIG1lYW5z Lg0KPiA+Pj4gKyAqDQo+ID4+PiArICogQSBsb2NrIGZyZWUgbXVsdGktdGhyZWFkIHdyaXRlciBh bGdvcml0aG0gY291bGQgYWNoaWV2ZQ0KPiA+Pj4gK211bHRpLXRocmVhZA0KPiA+Pj4gKyAqIHNh ZmV0eSBieSBjcmVhdGluZyBhbmQgdXNpbmcgb25lIGRlZmVyIHF1ZXVlIHBlciB0aHJlYWQuDQo+ ID4+PiArICoNCj4gPj4+ICsgKiBAcGFyYW0gZHENCj4gPj4+ICsgKiAgIERlZmVyIHF1ZXVlIHRv IGFsbG9jYXRlIGFuIGVudHJ5IGZyb20uDQo+ID4+PiArICogQHBhcmFtIGUNCj4gPj4+ICsgKiAg IFBvaW50ZXIgdG8gcmVzb3VyY2UgZGF0YSB0byBjb3B5IHRvIHRoZSBkZWZlciBxdWV1ZS4gVGhl IHNpemUgb2YNCj4gPj4+ICsgKiAgIHRoZSBkYXRhIHRvIGNvcHkgaXMgZXF1YWwgdG8gdGhlIGVs ZW1lbnQgc2l6ZSBwcm92aWRlZCB3aGVuIHRoZQ0KPiA+Pj4gKyAqICAgZGVmZXIgcXVldWUgd2Fz IGNyZWF0ZWQuDQo+ID4+PiArICogQHJldHVybg0KPiA+Pj4gKyAqICAgT24gc3VjY2VzcyAtIDAN Cj4gPj4+ICsgKiAgIE9uIGVycm9yIC0gMSB3aXRoIHJ0ZV9lcnJubyBzZXQgdG8NCj4gPj4+ICsg KiAgIC0gRUlOVkFMIC0gTlVMTCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQNCj4gPj4+ICsgKiAgIC0g RU5PU1BDIC0gRGVmZXIgcXVldWUgaXMgZnVsbC4gVGhpcyBjb25kaXRpb24gY2FuIG5vdCBoYXBw ZW4NCj4gPj4+ICsgKgkJaWYgdGhlIGRlZmVyIHF1ZXVlIHNpemUgaXMgZXF1YWwgKG9yIGxhcmdl cikgdGhhbiB0aGUNCj4gPj4+ICsgKgkJbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBkYXRhIHN0 cnVjdHVyZS4NCj4gPj4+ICsgKi8NCj4gPj4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPj4+ICtp bnQNCj4gPj4+ICtydGVfcmN1X3FzYnJfZHFfZW5xdWV1ZShzdHJ1Y3QgcnRlX3JjdV9xc2JyX2Rx ICpkcSwgdm9pZCAqZSk7DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICogQHdhcm5pbmcN Cj4gPj4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBw cmlvciBub3RpY2UNCj4gPj4+ICsgKg0KPiA+Pj4gKyAqIFJlY2xhaW0gcmVzb3VyY2VzIGZyb20g dGhlIGRlZmVyIHF1ZXVlLg0KPiA+Pj4gKyAqDQo+ID4+PiArICogVGhpcyBBUEkgaXMgbm90IG11 bHRpLXRocmVhZCBzYWZlLiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZQ0KPiA+Pj4gK2NhbGxlcg0K PiA+Pj4gKyAqIHByb3ZpZGVzIG11bHRpLXRocmVhZCBzYWZldHkgYnkgbG9ja2luZyBhIG11dGV4 IG9yIHNvbWUgb3RoZXIgbWVhbnMuDQo+ID4+PiArICoNCj4gPj4+ICsgKiBBIGxvY2sgZnJlZSBt dWx0aS10aHJlYWQgd3JpdGVyIGFsZ29yaXRobSBjb3VsZCBhY2hpZXZlDQo+ID4+PiArbXVsdGkt dGhyZWFkDQo+ID4+PiArICogc2FmZXR5IGJ5IGNyZWF0aW5nIGFuZCB1c2luZyBvbmUgZGVmZXIg cXVldWUgcGVyIHRocmVhZC4NCj4gPj4+ICsgKg0KPiA+Pj4gKyAqIEBwYXJhbSBkcQ0KPiA+Pj4g KyAqICAgRGVmZXIgcXVldWUgdG8gcmVjbGFpbSBhbiBlbnRyeSBmcm9tLg0KPiA+Pj4gKyAqIEBy ZXR1cm4NCj4gPj4+ICsgKiAgIE9uIHN1Y2Nlc3NmdWwgcmVjbGFtYXRpb24gb2YgYXQgbGVhc3Qg MSByZXNvdXJjZSAtIDANCj4gPj4+ICsgKiAgIE9uIGVycm9yIC0gMSB3aXRoIHJ0ZV9lcnJubyBz ZXQgdG8NCj4gPj4+ICsgKiAgIC0gRUlOVkFMIC0gTlVMTCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQN Cj4gPj4+ICsgKiAgIC0gRUFHQUlOIC0gTm9uZSBvZiB0aGUgcmVzb3VyY2VzIGhhdmUgY29tcGxl dGVkIGF0IGxlYXN0IDEgZ3JhY2UNCj4gPj4gcGVyaW9kLA0KPiA+Pj4gKyAqCQl0cnkgYWdhaW4u DQo+ID4+PiArICovDQo+ID4+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4+PiAraW50DQo+ID4+ PiArcnRlX3JjdV9xc2JyX2RxX3JlY2xhaW0oc3RydWN0IHJ0ZV9yY3VfcXNicl9kcSAqZHEpOw0K PiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAqIEB3YXJuaW5nDQo+ID4+PiArICogQGIgRVhQ RVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4+ PiArICoNCj4gPj4+ICsgKiBEZWxldGUgYSBkZWZlciBxdWV1ZS4NCj4gPj4+ICsgKg0KPiA+Pj4g KyAqIEl0IHRyaWVzIHRvIHJlY2xhaW0gYWxsIHRoZSByZXNvdXJjZXMgb24gdGhlIGRlZmVyIHF1 ZXVlLg0KPiA+Pj4gKyAqIElmIGFueSBvZiB0aGUgcmVzb3VyY2VzIGhhdmUgbm90IGNvbXBsZXRl ZCB0aGUgZ3JhY2UgcGVyaW9kDQo+ID4+PiArICogdGhlIHJlY2xhbWF0aW9uIHN0b3BzIGFuZCBy ZXR1cm5zIGltbWVkaWF0ZWx5LiBUaGUgcmVzdCBvZg0KPiA+Pj4gKyAqIHRoZSByZXNvdXJjZXMg YXJlIG5vdCByZWNsYWltZWQgYW5kIHRoZSBkZWZlciBxdWV1ZSBpcyBub3QNCj4gPj4+ICsgKiBm cmVlZC4NCj4gPj4+ICsgKg0KPiA+Pj4gKyAqIEBwYXJhbSBkcQ0KPiA+Pj4gKyAqICAgRGVmZXIg cXVldWUgdG8gZGVsZXRlLg0KPiA+Pj4gKyAqIEByZXR1cm4NCj4gPj4+ICsgKiAgIE9uIHN1Y2Nl c3MgLSAwDQo+ID4+PiArICogICBPbiBlcnJvciAtIDENCj4gPj4+ICsgKiAgIFBvc3NpYmxlIHJ0 ZV9lcnJubyBjb2RlcyBhcmU6DQo+ID4+PiArICogICAtIEVJTlZBTCAtIE5VTEwgcGFyYW1ldGVy cyBhcmUgcGFzc2VkDQo+ID4+PiArICogICAtIEVBR0FJTiAtIFNvbWUgb2YgdGhlIHJlc291cmNl cyBoYXZlIG5vdCBjb21wbGV0ZWQgYXQgbGVhc3QgMQ0KPiBncmFjZQ0KPiA+Pj4gKyAqCQlwZXJp b2QsIHRyeSBhZ2Fpbi4NCj4gPj4+ICsgKi8NCj4gPj4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4g Pj4+ICtpbnQNCj4gPj4+ICtydGVfcmN1X3FzYnJfZHFfZGVsZXRlKHN0cnVjdCBydGVfcmN1X3Fz YnJfZHEgKmRxKTsNCj4gPj4+ICsNCj4gPj4+ICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KPiA+Pj4g ICAgfQ0KPiA+Pj4gICAgI2VuZGlmDQo+ID4+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yY3Uv cnRlX3JjdV9xc2JyX3B2dC5oDQo+ID4+PiBiL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNicl9w dnQuaA0KPiA+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPj4+IGluZGV4IDAwMDAwMDAwMC4u MjEyMmJjMzZhDQo+ID4+PiAtLS0gL2Rldi9udWxsDQo+ID4+PiArKysgYi9saWIvbGlicnRlX3Jj dS9ydGVfcmN1X3FzYnJfcHZ0LmgNCj4gPj4+IEBAIC0wLDAgKzEsNDYgQEANCj4gPj4+ICsvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ID4+PiArICogQ29weXJpZ2h0 IChjKSAyMDE5IEFybSBMaW1pdGVkDQo+ID4+PiArICovDQo+ID4+PiArDQo+ID4+PiArI2lmbmRl ZiBfUlRFX1JDVV9RU0JSX1BWVF9IXw0KPiA+Pj4gKyNkZWZpbmUgX1JURV9SQ1VfUVNCUl9QVlRf SF8NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgKiBUaGlzIGZpbGUgaXMgcHJpdmF0ZSB0 byB0aGUgUkNVIGxpYnJhcnkuIEl0IHNob3VsZCBub3QgYmUNCj4gPj4+ICtpbmNsdWRlZA0KPiA+ Pj4gKyAqIGJ5IHRoZSB1c2VyIG9mIHRoaXMgbGlicmFyeS4NCj4gPj4+ICsgKi8NCj4gPj4+ICsN Cj4gPj4+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gPj4+ICtleHRlcm4gIkMiIHsNCj4gPj4+ICsj ZW5kaWYNCj4gPj4+ICsNCj4gPj4+ICsjaW5jbHVkZSAicnRlX3JjdV9xc2JyLmgiDQo+ID4+PiAr DQo+ID4+PiArLyogUlRFIGRlZmVyIHF1ZXVlIHN0cnVjdHVyZS4NCj4gPj4+ICsgKiBUaGlzIHN0 cnVjdHVyZSBob2xkcyB0aGUgZGVmZXIgcXVldWUuIFRoZSBkZWZlciBxdWV1ZSBpcyB1c2VkIHRv DQo+ID4+PiArICogaG9sZCB0aGUgZGVsZXRlZCBlbnRyaWVzIGZyb20gdGhlIGRhdGEgc3RydWN0 dXJlIHRoYXQgYXJlIG5vdA0KPiA+Pj4gKyAqIHlldCBmcmVlZC4NCj4gPj4+ICsgKi8NCj4gPj4+ ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxIHsNCj4gPj4+ICsJc3RydWN0IHJ0ZV9yY3VfcXNiciAq djsgLyoqPCBSQ1UgUVNCUiB2YXJpYWJsZSB1c2VkIGJ5IHRoaXMgcXVldWUuKi8NCj4gPj4+ICsJ c3RydWN0IHJ0ZV9yaW5nICpyOyAgICAgLyoqPCBSQ1UgUVNCUiBkZWZlciBxdWV1ZS4gKi8NCj4g Pj4+ICsJdWludDMyX3Qgc2l6ZTsNCj4gPj4+ICsJLyoqPCBOdW1iZXIgb2YgZWxlbWVudHMgaW4g dGhlIGRlZmVyIHF1ZXVlICovDQo+ID4+PiArCXVpbnQzMl90IGVzaXplOw0KPiA+Pj4gKwkvKio8 IFNpemUgKGluIGJ5dGVzKSBvZiBkYXRhIHN0b3JlZCBvbiB0aGUgZGVmZXIgcXVldWUgKi8NCj4g Pj4+ICsJcnRlX3JjdV9xc2JyX2ZyZWVfcmVzb3VyY2UgZjsNCj4gPj4+ICsJLyoqPCBGdW5jdGlv biB0byBjYWxsIHRvIGZyZWUgdGhlIHJlc291cmNlLiAqLw0KPiA+Pj4gKwl2b2lkICpwOw0KPiA+ Pj4gKwkvKio8IFBvaW50ZXIgcGFzc2VkIHRvIHRoZSBmcmVlIGZ1bmN0aW9uLiBUeXBpY2FsbHks IHRoaXMgaXMgdGhlDQo+ID4+PiArCSAqICAgcG9pbnRlciB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUg dG8gd2hpY2ggdGhlIHJlc291cmNlIHRvIGZyZWUNCj4gPj4+ICsJICogICBiZWxvbmdzLg0KPiA+ Pj4gKwkgKi8NCj4gPj4+ICsJY2hhciBlWzBdOw0KPiA+Pj4gKwkvKio8IFRlbXBvcmFyeSBzdG9y YWdlIHRvIGNvcHkgdGhlIGRlZmVyIHF1ZXVlIGVsZW1lbnQuICovIH07DQo+ID4+PiArDQo+ID4+ PiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4+PiArfQ0KPiA+Pj4gKyNlbmRpZg0KPiA+Pj4gKw0K PiA+Pj4gKyNlbmRpZiAvKiBfUlRFX1JDVV9RU0JSX1BWVF9IXyAqLw0KPiA+Pj4gZGlmZiAtLWdp dCBhL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfdmVyc2lvbi5tYXANCj4gPj4+IGIvbGliL2xpYnJ0 ZV9yY3UvcnRlX3JjdV92ZXJzaW9uLm1hcA0KPiA+Pj4gaW5kZXggZjhiOWVmMmFiLi5kZmFjODhh MzcgMTAwNjQ0DQo+ID4+PiAtLS0gYS9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3ZlcnNpb24ubWFw DQo+ID4+PiArKysgYi9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3ZlcnNpb24ubWFwDQo+ID4+PiBA QCAtOCw2ICs4LDEwIEBAIEVYUEVSSU1FTlRBTCB7DQo+ID4+PiAgICAJcnRlX3JjdV9xc2JyX3N5 bmNocm9uaXplOw0KPiA+Pj4gICAgCXJ0ZV9yY3VfcXNicl90aHJlYWRfcmVnaXN0ZXI7DQo+ID4+ PiAgICAJcnRlX3JjdV9xc2JyX3RocmVhZF91bnJlZ2lzdGVyOw0KPiA+Pj4gKwlydGVfcmN1X3Fz YnJfZHFfY3JlYXRlOw0KPiA+Pj4gKwlydGVfcmN1X3FzYnJfZHFfZW5xdWV1ZTsNCj4gPj4+ICsJ cnRlX3JjdV9xc2JyX2RxX3JlY2xhaW07DQo+ID4+PiArCXJ0ZV9yY3VfcXNicl9kcV9kZWxldGU7 DQo+ID4+Pg0KPiA+Pj4gICAgCWxvY2FsOiAqOw0KPiA+Pj4gICAgfTsNCj4gPj4+IGRpZmYgLS1n aXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVpbGQgaW5kZXgNCj4gPj4+IGU1ZmY4 Mzg5My4uMGUxYmU4NDA3IDEwMDY0NA0KPiA+Pj4gLS0tIGEvbGliL21lc29uLmJ1aWxkDQo+ID4+ PiArKysgYi9saWIvbWVzb24uYnVpbGQNCj4gPj4+IEBAIC0xMSw3ICsxMSw5IEBADQo+ID4+PiAg ICBsaWJyYXJpZXMgPSBbDQo+ID4+PiAgICAJJ2t2YXJncycsICMgZWFsIGRlcGVuZHMgb24ga3Zh cmdzDQo+ID4+PiAgICAJJ2VhbCcsICMgZXZlcnl0aGluZyBkZXBlbmRzIG9uIGVhbA0KPiA+Pj4g LQkncmluZycsICdtZW1wb29sJywgJ21idWYnLCAnbmV0JywgJ21ldGVyJywgJ2V0aGRldicsICdw Y2knLCAjIGNvcmUNCj4gPj4+ICsJJ3JpbmcnLA0KPiA+Pj4gKwkncmN1JywgIyByY3UgZGVwZW5k cyBvbiByaW5nDQo+ID4+PiArCSdtZW1wb29sJywgJ21idWYnLCAnbmV0JywgJ21ldGVyJywgJ2V0 aGRldicsICdwY2knLCAjIGNvcmUNCj4gPj4+ICAgIAknY21kbGluZScsDQo+ID4+PiAgICAJJ21l dHJpY3MnLCAjIGJpdHJhdGUvbGF0ZW5jeSBzdGF0cyBkZXBlbmRzIG9uIHRoaXMNCj4gPj4+ICAg IAknaGFzaCcsICAgICMgZWZkIGRlcGVuZHMgb24gdGhpcw0KPiA+Pj4gQEAgLTIyLDcgKzI0LDcg QEAgbGlicmFyaWVzID0gWw0KPiA+Pj4gICAgCSdncm8nLCAnZ3NvJywgJ2lwX2ZyYWcnLCAnam9i c3RhdHMnLA0KPiA+Pj4gICAgCSdrbmknLCAnbGF0ZW5jeXN0YXRzJywgJ2xwbScsICdtZW1iZXIn LA0KPiA+Pj4gICAgCSdwb3dlcicsICdwZHVtcCcsICdyYXdkZXYnLA0KPiA+Pj4gLQkncmN1Jywg J3Jlb3JkZXInLCAnc2NoZWQnLCAnc2VjdXJpdHknLCAnc3RhY2snLCAndmhvc3QnLA0KPiA+Pj4g KwkncmVvcmRlcicsICdzY2hlZCcsICdzZWN1cml0eScsICdzdGFjaycsICd2aG9zdCcsDQo+ID4+ PiAgICAJIyBpcHNlYyBsaWIgZGVwZW5kcyBvbiBuZXQsIGNyeXB0byBhbmQgc2VjdXJpdHkNCj4g Pj4+ICAgIAknaXBzZWMnLA0KPiA+Pj4gICAgCSMgYWRkIHBrdCBmcmFtZXdvcmsgbGlicyB3aGlj aCB1c2Ugb3RoZXIgbGlicyBmcm9tIGFib3ZlDQo+ID4+IC0tDQo+ID4+IFJlZ2FyZHMsDQo+ID4+ IFZsYWRpbWlyDQo+IA0KPiAtLQ0KPiBSZWdhcmRzLA0KPiBWbGFkaW1pcg0KDQo=