Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nkG2C-0003cy-Lj for pgsql-hackers@arkaria.postgresql.org; Fri, 29 Apr 2022 02:07:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nkG29-0008DD-JZ for pgsql-hackers@arkaria.postgresql.org; Fri, 29 Apr 2022 02:07:01 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nkG28-0008BA-Pg for pgsql-hackers@lists.postgresql.org; Fri, 29 Apr 2022 02:07:01 +0000 Received: from esa9.fujitsucc.c3s2.iphmx.com ([68.232.159.90]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nkG23-0007YF-B8 for pgsql-hackers@lists.postgresql.org; Fri, 29 Apr 2022 02:06:59 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1651198016; x=1682734016; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=LUmGgAOC2NGoeGVCssHIuuqG9keepuBaox8CyjXphhg=; b=hxJW8fgqCJOymM4D8UaLU8qJzu7Rs5IDsq+I9Qmb1NXa6mgMbcoq2f+M vjR/quLiBWvAqsL4e/7Rvf1+J/cUcnZYEUY80W2GRy76eLAVI/EO2vbaz qXU8PfY6pKLt7xDFCILjZKSc8Zlk3c175o4OcM+uA3cia7auefyxInRSX V5ZDwJA/MLHXiKl/QpelfZOU8S2zEad+allBHTE5LoKVLMobFXIo96HTN jGhyjkn69HRffM0Wsju2PCRQrH03gmFw+HVvV6cX5H+kyeVk/7uFa9jpT g4F2pfLE63VzoVTGwTh2njPRbQb/1vgoAcxVl6+ut1Y0YSmo5nsVPvgEt w==; X-IronPort-AV: E=McAfee;i="6400,9594,10331"; a="55055266" X-IronPort-AV: E=Sophos;i="5.91,296,1647270000"; d="scan'208,223";a="55055266" Received: from mail-os0jpn01lp2108.outbound.protection.outlook.com (HELO JPN01-OS0-obe.outbound.protection.outlook.com) ([104.47.23.108]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Apr 2022 11:06:52 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eA5S7cIE5SI75eishQvyBh+PewDAbLHeJD9k+oR2DFYQ5n7Mpdh79Gu/BmY5Sq79fWYLuZ8OdTL9bOS1VjECic35h1ngswR8tjLeUeUqJXXP30vORynZCLHiArThZUiw9GAV0uPmqnJNGdBXAKZMMX3Qu8jKLRHRKzH3pbL5f4rARnGU4Ts0DqwZclFwRuKypvMQ2/VK9ICt//6uhrdHM7SU719V5BrdcztNl58utc6zr3Jcu+41BtmHWMsLmg7+Q/3Lw/Q9jSv2AKpI9TQHmsUpdbkfbW0vC1h83E0cWjSa2hT9Ucyf2jsq0daLqWTOpz9BFgk96Bw6PgifJfk/eg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=AGP9qmhBlP3gB+sk+WDupOWyHvWkRONLCSFhvDv8b8c=; b=NcYJo7aqrHPfMg7Pm85koUwyAF/G3F5p+T3i1GBPQifc0AcmNFDzAlQL7weAw3SAZIFkPpSs2h5PPtnmd8SOR/BQCVHelcOi1RJreAPamivhS5OHIfAVj686PeaGBUNiV18hukFIBBLHzaYJbuT6MzpSwSq3oYSZ9vbj4Ya31qIOwV0p10fxQM/yngtUxMlsZNXB1OPk9oD/2b16/QHPIq04J+zjOdWW6n7n/ZxCg+cYtsg2I1Fefa3pXUEYgC9pXEPhEAzBx9avOqQOlrpZSyzxN1bPsPo4yGc0y1ApHQxwxbt83gToTm4zNrK4rgnHqU+jD074vbd1bt/OTeO9IA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fujitsu.onmicrosoft.com; s=selector2-fujitsu-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AGP9qmhBlP3gB+sk+WDupOWyHvWkRONLCSFhvDv8b8c=; b=GpXoNzqjgRY7xxF339BSWrkQahLYoxcT9bQsmeDz2LUEqZs6O2s2CtXj081I3SkoW+kpTIzyBjg1qTNU3JTFFhEtr//TJMMRuTVwEVEQkSyPKrrgO92SDkumcpv4Mf3OTyBunQid1fpUNpSmPuN5FmqTzZeLyUDYsxV7XyvVxLk= Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com (2603:1096:604:bb::12) by TYAPR01MB5577.jpnprd01.prod.outlook.com (2603:1096:404:8055::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Fri, 29 Apr 2022 02:06:49 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::fcd7:9667:ec81:d1d5]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::fcd7:9667:ec81:d1d5%5]) with mapi id 15.20.5206.012; Fri, 29 Apr 2022 02:06:48 +0000 From: "houzj.fnst@fujitsu.com" To: Peter Smith CC: Amit Kapila , "shiy.fnst@fujitsu.com" , PostgreSQL Hackers Subject: RE: Perform streaming logical transactions by background workers and parallel apply Thread-Topic: Perform streaming logical transactions by background workers and parallel apply Thread-Index: AQHYSXX5zhPsn/DiHU+5DFLHlN8Fn6zlu9SQgAkSooCACBQ0gIABsTcwgAA1vECAAqHFgIAE/jVwgAXct9A= Date: Fri, 29 Apr 2022 02:06:48 +0000 Message-ID: References: In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: yes X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 40c9d96f-b578-46cb-f870-08da2984eb76 x-ms-traffictypediagnostic: TYAPR01MB5577:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: lmjxTRTU/GsBZDH8T+L6+yIm4s7I5hZsHS4j/lJXmPGI1cAQe1xig6aRIfLYnYGn4kwxnYOspi7wYuq/hd3UsdQChEyMK34QVcLQ/d3pXlMA3aUo/r1Q43miiAN/ilxyk2hk+1PI/+BVHFekHWiDYbDnJCm1pJSEKhKhK79lzvQzIJ1twZqNholgerJEsJR/h8VQpQ0bX74WNN4yxGLqHjLr5YawPdErvHCXxwlkPNmCy+cV2F1TH5xUEsePRMHnBaZUta7TkVwVuEp5UpD1TgHJI9nC04kXNTf+iyjFYbw8b9kNlab78O+N1Kd/8c+EEhleU00w4sZ4ymGiWvV1o2Y9eHFgYumgBpiUUlckIpkwBbBCGqXLrfk6kF9JEeOjDDssvBljoEb7ae+2H7xCuUD9GpUDjVB2OSRZAJEjLypvMeyjlh8M2yhOe4/OGQ9w1zeeZJJpmym5vHJdiyKJpMoX5qSLxrnOI+aLSzcyIbyNqGo/W7LtLkuBaSZihMsew/z+Vib5NsUScrYRfKdSi2Bjydt5J8ls3Bs/A74Dk4O4p0cUV5co08404EqNFqhc0zmkJgGl1TxZUgM08tSMgfXz3B1ud3toL4u/zbhzJaQj9jooQ+xM6rUeZQVtPKKkeU+cesTi81NOBBzpxnYM9M/+Gf09UJNAOF9ajTFuHmsx6yMmVLhXaB1h+d42uFofRjNPhMg16StSJJqz10qZFhbxceR2MdttP86O6MJ8rnlFFi00mxzerfhMAPnmCtL3KxM0aUDoJwTxxlZzUhPtvsNqIUSf8SgfGH1VW+2IQT8= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS0PR01MB5716.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(66556008)(66946007)(99936003)(66476007)(76116006)(6506007)(64756008)(82960400001)(7696005)(2906002)(66446008)(54906003)(38100700002)(38070700005)(186003)(33656002)(55016003)(316002)(4326008)(8676002)(83380400001)(26005)(9686003)(86362001)(966005)(8936002)(508600001)(5660300002)(6916009)(71200400001)(85182001)(53546011)(122000001)(52536014);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SVlsS0hwWGdVWm1NNXlFaVhBZWVEN21sSTRiYnVuRjVFYVNKMVhGYmtEeFFv?= =?utf-8?B?WHl1ZnFnamtmaUlUYkZGVWNUU2VqdE1VNjBFRnVWaHpYTHRZOXJIbWRxdFZR?= =?utf-8?B?V0w3dWtRbW1ZazFHMU5Pc0tDY0EwMWRXQm5Zelo0dGJRWG80WStjUzVuYnhx?= =?utf-8?B?Nm5EWXFCVStzSU1KZXZPdXpVbUQyTitCQW1SSEs1TzRjQVIvT1BFYmFvNU00?= =?utf-8?B?QkxSSmE5ZlNoa0E0QW9qUFBTKzZwUWdCdExWMVRzVzR5UllNdDdGTkRRc2JK?= =?utf-8?B?VVJndXNiYjkzMWhRNnpoa0duM05WUW5uQWh3NHkrUmloU2dKZ2VEVlRJTWxu?= =?utf-8?B?MG5IendFM2dWdlczQ2JhQnV5ZHNzNkt1VGsrbzhqajBCWno2YWJVdzdyN0lX?= =?utf-8?B?dmZXNnVOUC9lblJMaTZYSjdtUm5BckFaQkVzaDNxM0crQnVjZVUxczM1VFNH?= =?utf-8?B?bFVvZlUxTE1OWHZTTE9rT0NSMjQwZFN0U3dkNHVmRXdjbFN4OXVjSTNOVlNJ?= =?utf-8?B?eU1EK3JBY2hQU3Bja3VSNmFBRjNaTE9seFArYUZlY21BTEVta3B4MTNZaFJL?= =?utf-8?B?UzNBT1diODlkQVhaMXJCVzlWM0g5Vm1DYnMvZE5MMzdTQ2xRWUxySVp1Nndw?= =?utf-8?B?RVdZUEVMTzhtNjcvMHJTV3cwYzJyME54NGZ3ckxmdDdWcG90dDUvS0lQTnc1?= =?utf-8?B?OGg3Tm9GMEFCdDdmcGU2WGJ4bUVsSFVwY2QyZEZvdTY3UW9wNHNUa1BzcndQ?= =?utf-8?B?SGd3eVM1UjRoTDZnMUc0TlhnaUVYYm12K3ppS0dUamRoY0l3bkR5TjhvNUhJ?= =?utf-8?B?RHBwQnNHdGh2a2pERTZqZ3pEU3RLZUhCd0NIODVES3hCTE13b1VLWmh6K3pY?= =?utf-8?B?d1A1aTNsaHM3N0taVE93SnYyOURMclZNR2t6ckFleGVNU0lEcVJGdWs3OThU?= =?utf-8?B?Wk14REpnZTZvUkNuVm1VTFhFeGhVcGNxNFArYmpZYXVlb0c2c2czWXozak1Z?= =?utf-8?B?cm1OVUpLYUlqM1ZTb2FhZ28xRzdCRDJhVWxiOUVMcnh6aXkvS0NTYisvK09Q?= =?utf-8?B?RFk3ZThnUXBZeU9uTjJ6dEpIUEg1WEhjV0wwRmVsRGhIcVM1STR3OVBZcENV?= =?utf-8?B?YXk4MnlFTmJJTVZHY3VIOUlRVVpLcG1meWZnSEE5RDg3L002UktRQkhNKyto?= =?utf-8?B?MVJxM21KTklHSk1pem5qSEdQTUQ3aUZnb1huR2dWRmFndkpMb2dmRnBvYkM3?= =?utf-8?B?aWNTK09lcTNRREdzbHBlZWlWSm1OMGJSSTlRQ1R4Z1RxOTFtaFpnOVBRYmsx?= =?utf-8?B?ZnlWRkM0clJ0WHY5UnB5MmNkdTdBQytIYVJycFpwWHlGT3lLTVFJV3BaQ2U4?= =?utf-8?B?QVUwdXp2NDZpU2U0VUtHQ3p0azdJUFdEVmRML3ErcXlubnVsUldjeW9XR1RQ?= =?utf-8?B?NzdPSldZWjdTSWZIWDdCY3hxRFJKbEpteEtMMjZGUjBWemNvR3hxZm5BMGVQ?= =?utf-8?B?MGdDdlZ3RDVmQU9BSmpzSVJ3MVFHTW5NVkJNSFh2V1pmVFUrTnUzS2EvVzU2?= =?utf-8?B?dWNTdjAxWkxIVmVkaFloL21IdktxVm5VbE5nMzRQY21vUXJReWVuZ3NtSFp5?= =?utf-8?B?bVVWVFpCQWRWbi9qWjhtYlREdDd3SFMwdmIrYnIzUDNkMUNxMHk1YmJkc3pi?= =?utf-8?B?dGNLQ2tkZmtJUWRGeks4eXl2RFk2NUhuSk9DWFhSWjg3SHhlWlhLK1Z3T1pP?= =?utf-8?B?dW9UZitnL3BnbWxHWXB5QzFkWmhkUU0rcHVJQ2NvUkY5QTJMZnJES1paN1Yv?= =?utf-8?B?NHJmRFZyUytDQVBmUGxSbEVBc2J0ZElrWUtjNllVekdCR3lKTzA4RkJZbmlG?= =?utf-8?B?YkxtdmNJb29Zemw5a2VGU2VHbitVZ09FSHRtQmhDWWljK3Bid1FteE1MdnVh?= =?utf-8?B?Z2gwNEFpdGhuMUkrcnNCbEcxakRxOGFhakZ1dDdSRm5TdFhPNFp0TkEveS9U?= =?utf-8?B?YzRyTVJRemZXUHhQbTZNU1JGS0EwbUFzTXozQVAvQVdWdlVsaFI5Ry9uamVD?= =?utf-8?B?ZUE4VldDYy82Qm5JODZocllOMFNDL29xb2pEdjdZdVR2SDYza1dPQjN3SlpZ?= =?utf-8?B?OGYwcWlsWU54eVR5eVcrejRjbzR6MVFtR2JUbDJDemdlZ3RUd2dTZFlWZ3Nr?= =?utf-8?B?YksvR2xaeG1BYkNEYWZMR3AveHVETW5yc3BFcHhNK0szNURTbzNjOHV4dUQz?= =?utf-8?B?OVdrUjBSQ1V5SGZJQUx5SHZvRmpJNWNaZmFUS2VCbFVMOVlpbGxaV3NDaXc5?= =?utf-8?B?ZkU2TFJpaE1JTkduNVUxbDBaamhlWG5uRDBZeFd5eVFIOXJPVDVDZz09?= Content-Type: multipart/mixed; boundary="_002_OS0PR01MB5716E8D536552467EFB512EF94FC9OS0PR01MB5716jpnp_" MIME-Version: 1.0 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OS0PR01MB5716.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 40c9d96f-b578-46cb-f870-08da2984eb76 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Apr 2022 02:06:48.8898 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: UY6jKJowQHP2LuhkU+0ZYZkRd/pWHNOiV5kmUfrfUVi6ExfxQ00SCiKMRDd90vsO1H4yqp7IHu10ljXPg6gy6Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYAPR01MB5577 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_OS0PR01MB5716E8D536552467EFB512EF94FC9OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gTW9uZGF5LCBBcHJpbCAyNSwgMjAyMiA0OjM1IFBNIGhvdXpqLmZuc3RAZnVqaXRzdS5jb20g PGhvdXpqLmZuc3RAZnVqaXRzdS5jb20+IHdyb3RlOg0KPiBPbiBGcmlkYXksIEFwcmlsIDIyLCAy MDIyIDEyOjEyIFBNIFBldGVyIFNtaXRoIDxzbWl0aHBiMjI1MEBnbWFpbC5jb20+DQo+IHdyb3Rl Og0KPiA+DQo+ID4gSGVsbG8gSG91LXNhbi4gSGVyZSBhcmUgbXkgcmV2aWV3IGNvbW1lbnRzIGZv ciB2NC0wMDAxLiBTb3JyeSwgdGhlcmUNCj4gPiBhcmUgc28gbWFueSBvZiB0aGVtIChpdCBpcyBh IGJpZyBwYXRjaCk7IHNvbWUgYXJlIHRyaXZpYWwsIGFuZCBvdGhlcnMNCj4gPiB5b3UgbWlnaHQg ZWFzaWx5IGRpc21pc3MgZHVlIHRvIG15IG1pc3VuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuIEJ1 dA0KPiA+IGhvcGVmdWxseSwgdGhlcmUgYXJlIGF0IGxlYXN0IHNvbWUgY29tbWVudHMgdGhhdCBj YW4gYmUgaGVscGZ1bCBpbg0KPiA+IGltcHJvdmluZyB0aGUgcGF0Y2ggcXVhbGl0eS4NCj4gDQo+ IFRoYW5rcyBmb3IgdGhlIGNvbW1lbnRzICENCj4gSSB0aGluayBtb3N0IG9mIHRoZSBjb21tZW50 cyBtYWtlIHNlbnNlIGFuZCBoZXJlIGFyZSBleHBsYW5hdGlvbnMgZm9yIHNvbWUNCj4gb2YgdGhl bS4NCg0KSGksDQoNCkkgYWRkcmVzc2VkIHRoZSByZXN0IG9mIFBldGVyJ3MgY29tbWVudHMgYW5k IGhlcmUgaXMgYSBuZXcgdmVyc2lvbiBwYXRjaC4NCg0KVGhlIG5hbWluZyBvZiB0aGUgbmV3bHkg aW50cm9kdWNlZCBvcHRpb24gYW5kIHdvcmtlciBtaWdodA0KbmVlZCBtb3JlIHRob3VnaHQsIHNv IEkgaGF2ZW4ndCBjaGFuZ2UgYWxsIG9mIHRoZW0uIEkgd2lsbCB0aGluayBvdmVyDQphbmQgY2hh bmdlIGl0IGxhdGVyLg0KDQpPbmUgY29tbWVudCBJIGRpZG4ndCBhZGRyZXNzOg0KPiAzLiBHZW5l cmFsIGNvbW1lbnQgLSBib29sIG9wdGlvbiBjaGFuZ2UgdG8gZW51bQ0KPiANCj4gVGhpcyBvcHRp b24gY2hhbmdlIGZvciAic3RyZWFtaW5nIiBpcyBzaW1pbGFyIHRvIHRoZSBvcHRpb25zIGNoYW5n ZQ0KPiBmb3IgImNvcHlfZGF0YT1mb3JjZSIgdGhhdCBWaWduZXNoIGlzIGRvaW5nIGZvciBoaXMg ImluZmluaXRlDQo+IHJlY3Vyc2lvbiIgcGF0Y2ggdjktMDAwMiBbMV0uIFlldCB0aGV5IHNlZW0g aW1wbGVtZW50ZWQgZGlmZmVyZW50bHkNCj4gKGkuZS4gY2hhciB2ZXJzdXMgZW51bSkuIEkgdGhp bmsgeW91IHNob3VsZCBkaXNjdXNzIHRoZSAyIGFwcHJvYWNoZXMNCj4gd2l0aCBWaWduZXNoIGFu ZCB0aGVuIGNvZGUgdGhlc2Ugb3B0aW9uIGNoYW5nZXMgaW4gYSBjb25zaXN0ZW50IHdheS4NCj4g DQo+IFsxXSBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBTERhTm0yRmUl M0RnNFR4LURoendENk5VMFZSQWZhUGVkWHdXTzAxbWFOVTdfT2ZTOGZ3JTQwbWFpbC5nbWFpbC4+ IGNvbQ0KDQpJIHRoaW5rIHRoZSAic3RyZWFtaW5nIiBvcHRpb24gaXMgYSBiaXQgZGlmZmVyZW50 IGZyb20gdGhlICJjb3B5X2RhdGEiIG9wdGlvbi4NCkJlY2F1c2UgdGhlICJzdHJlYW1pbmciIGlz IGEgY29sdW1uIG9mIHRoZSBzeXN0ZW0gdGFibGUgKHBnX3N1YnNjcmlwdGlvbikgd2hpY2gNCnNo b3VsZCB1c2UgImNoYXIiIHR5cGUgdG8gcmVwcmVzZW50IGRpZmZlcmVudCB2YWx1ZXMgaW4gdGhp cyBjYXNlKEZvciBleGFtcGxlOg0KcGdfY2xhc3MucmVsa2luZC9wZ19jbGFzcy5yZWxwZXJzaXN0 ZW5jZS9wZ19jbGFzcy5yZWxyZXBsaWRlbnQgLi4uKS4NCg0KQW5kIHRoZSAiY29weV9kYXRhIiBv cHRpb24gaXMgbm90IGEgc3lzdGVtIHRhYmxlIGNvbHVtbiBhbmQgSSB0aGluayBpdCdzIGZpbmUN CnRvIHVzZSBFbnVtIGZvciBpdC4NCg0KQmVzdCByZWdhcmRzLA0KSG91IHpqDQo= --_002_OS0PR01MB5716E8D536552467EFB512EF94FC9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v5-0001-Perform-streaming-logical-transactions-by-background.patch" Content-Description: v5-0001-Perform-streaming-logical-transactions-by-background.patch Content-Disposition: attachment; filename="v5-0001-Perform-streaming-logical-transactions-by-background.patch"; size=83741; creation-date="Fri, 29 Apr 2022 02:04:00 GMT"; modification-date="Fri, 29 Apr 2022 02:06:47 GMT" Content-Transfer-Encoding: base64 RnJvbSBlYzMzYTI3MGViODAzMzBiMDEwM2Q2MDUxYWU5YmVhMGIyZDZmN2ZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjAgQXByIDIwMjIgMTY6NDU6MDcgKzA4MDAKU3ViamVjdDogW1BBVENI XSBQZXJmb3JtIHN0cmVhbWluZyBsb2dpY2FsIHRyYW5zYWN0aW9ucyBieSBiYWNrZ3JvdW5kIHdv cmtlcnMKCkN1cnJlbnRseSwgZm9yIGxhcmdlIHRyYW5zYWN0aW9ucywgdGhlIHB1Ymxpc2hlciBz ZW5kcyB0aGUgZGF0YSBpbiBtdWx0aXBsZQpzdHJlYW1zIChjaGFuZ2VzIGRpdmlkZWQgaW50byBj aHVua3MgZGVwZW5kaW5nIHVwb24gbG9naWNhbF9kZWNvZGluZ193b3JrX21lbSksCmFuZCB0aGVu IG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUsIHRoZSBhcHBseSB3b3JrZXIgd3JpdGVzIHRoZSBjaGFu Z2VzIGludG8KdGVtcG9yYXJ5IGZpbGVzIGFuZCBvbmNlIGl0IHJlY2VpdmVzIHRoZSBjb21taXQs IGl0IHJlYWRzIGZyb20gdGhlIGZpbGUgYW5kCmFwcGxpZXMgdGhlIGVudGlyZSB0cmFuc2FjdGlv bi4gVG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2Ygc3VjaAp0cmFuc2FjdGlvbnMsIHdlIGNh biBpbnN0ZWFkIGFsbG93IHRoZW0gdG8gYmUgYXBwbGllZCB2aWEgYmFja2dyb3VuZCB3b3JrZXJz LgoKSW4gdGhpcyBhcHByb2FjaCwgd2UgYXNzaWduIGEgbmV3IGFwcGx5IGJhY2tncm91bmQgKGlm IGF2YWlsYWJsZSkgYXMgc29vbiBhcyB0aGUKeGFjdCdzIGZpcnN0IHN0cmVhbSBpcyByZWNlaXZl ZCBhbmQgdGhlIG1haW4gYXBwbHkgd29ya2VyIHdpbGwgc2VuZCBjaGFuZ2VzIHRvCnRoaXMgbmV3 IHdvcmtlciB2aWEgc2hhcmVkIG1lbW9yeS4gVGhlIGFwcGx5IGJhY2tncm91bmQgd2lsbCBkaXJl Y3RseSBhcHBseSB0aGUKY2hhbmdlIGluc3RlYWQgb2Ygd3JpdGluZyBpdCB0byB0ZW1wb3Jhcnkg ZmlsZXMuICBXZSBrZWVwIHRoaXMgd29ya2VyIGFzc2lnbmVkCnRpbGwgdGhlIHRyYW5zYWN0aW9u IGNvbW1pdCBpcyByZWNlaXZlZCBhbmQgYWxzbyB3YWl0IGZvciB0aGUgd29ya2VyIHRvIGZpbmlz aAphdCBjb21taXQuIFRoaXMgcHJlc2VydmVzIGNvbW1pdCBvcmRlcmluZyBhbmQgYXZvaWRzIHdy aXRpbmcgdG8gYW5kIHJlYWRpbmcKZnJvbSBmaWxlIGluIG1vc3QgY2FzZXMuIFdlIHN0aWxsIG5l ZWQgdG8gc3BpbGwgaWYgdGhlcmUgaXMgbm8gd29ya2VyCmF2YWlsYWJsZS4gV2UgYWxzbyBuZWVk IHRvIGFsbG93IHN0cmVhbV9zdG9wIHRvIGNvbXBsZXRlIGJ5IHRoZSBhcHBseSBiYWNrZ3JvdW5k CnRvIGZpbmlzaCBpdCB0byBhdm9pZCBkZWFkbG9ja3MgYmVjYXVzZSBULTEncyBjdXJyZW50IHN0 cmVhbSBvZiBjaGFuZ2VzIGNhbgp1cGRhdGUgcm93cyBpbiBjb25mbGljdGluZyBvcmRlciB3aXRo IFQtMidzIG5leHQgc3RyZWFtIG9mIGNoYW5nZXMuCgpUaGlzIHBhdGNoIGFsc28gZXh0ZW5kcyB0 aGUgc3Vic2NyaXB0aW9uIHN0cmVhbWluZyBvcHRpb24gc28gdGhhdCB1c2VyIGNhbgpjb250cm9s IHdoZXRoZXIgYXBwbHkgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiBpbiBhIGFwcGx5IGJhY2tn cm91bmQgb3Igc3BpbGwKdGhlIGNoYW5nZSB0byBkaXNrLiBVc2VyIGNhbiBzZXQgdGhlIHN0cmVh bWluZyBvcHRpb24gdG8gJ29uL29mZicsICdhcHBseScuIEZvcgpub3csICdhcHBseScgbWVhbnMg dGhlIHN0cmVhbWluZyB3aWxsIGJlIGFwcGxpZWQgdmlhIGEgYXBwbHkgYmFja2dyb3VuZCBpZgph dmFpbGFibGUuICdvbicgbWVhbnMgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB3aWxsIGJlIHNw aWxsZWQgdG8gZGlzay4KLS0tCiBkb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCAgICAgICAgICAg ICAgICAgIHwgICAxMCArLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNn bWwgICB8ICAgMjQgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyAg ICAgfCAgIDY2ICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgICAgICAgICAg IHwgICAgMyArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgIHwg ICA4NCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYyAgICB8ICAg MTAgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgICAgfCAgICA3 ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIHwgICAxMCAr LQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICB8IDE0NTQgKysr KysrKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0 X2V2ZW50LmMgICAgIHwgICAgMyArCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAg ICAgICAgICAgIHwgICAgNiArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24u aCAgICAgICB8ICAgMTYgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5o ICAgICAgfCAgICA0ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgg ICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaCAgICAgICAgICAg IHwgICAgMiArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggICB8 ICAgIDcgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaCAgICAgICAgICAgICAgfCAg ICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dCAgfCAgICA4 ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgIHwgICAgMiAr CiAxOSBmaWxlcyBjaGFuZ2VkLCAxNTA2IGluc2VydGlvbnMoKyksIDIxMiBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9j YXRhbG9ncy5zZ21sCmluZGV4IGE1MzNhMjEuLmVkNjFmOTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCkBAIC03 ODYzLDExICs3ODYzLDE1IEBAIFNDUkFNLVNIQS0yNTYkPHJlcGxhY2VhYmxlPiZsdDtpdGVyYXRp b24gY291bnQmZ3Q7PC9yZXBsYWNlYWJsZT46PHJlcGxhY2VhYmxlPiZsCiAKICAgICAgPHJvdz4K ICAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1 bW5fZGVmaW5pdGlvbiI+Ci0gICAgICAgPHN0cnVjdGZpZWxkPnN1YnN0cmVhbTwvc3RydWN0Zmll bGQ+IDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICAgPHN0cnVjdGZpZWxkPnN1YnN0cmVhbTwvc3Ry dWN0ZmllbGQ+IDx0eXBlPmNoYXI8L3R5cGU+CiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4K LSAgICAgICBJZiB0cnVlLCB0aGUgc3Vic2NyaXB0aW9uIHdpbGwgYWxsb3cgc3RyZWFtaW5nIG9m IGluLXByb2dyZXNzCi0gICAgICAgdHJhbnNhY3Rpb25zCisgICAgICAgQ29udHJvbHMgaG93IHRv IGhhbmRsZSB0aGUgc3RyZWFtaW5nIG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4KKyAgICAg ICA8bGl0ZXJhbD5mPC9saXRlcmFsPiA9IGRpc2FsbG93IHN0cmVhbWluZyBvZiBpbi1wcm9ncmVz cyB0cmFuc2FjdGlvbnMKKyAgICAgICA8bGl0ZXJhbD5vPC9saXRlcmFsPiA9IHNwaWxsIHRoZSBj aGFuZ2VzIG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucyB0bworICAgICAgIGRpc2sgYW5kIGFw cGx5IGF0IG9uY2UgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiB0aGUKKyAg ICAgICBwdWJsaXNoZXIuCisgICAgICAgPGxpdGVyYWw+YTwvbGl0ZXJhbD4gPSBhcHBseSBjaGFu Z2VzIGRpcmVjdGx5IHVzaW5nIGEgYmFja2dyb3VuZCB3b3JrZXIKICAgICAgIDwvcGFyYT48L2Vu dHJ5PgogICAgICA8L3Jvdz4KIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVf c3Vic2NyaXB0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24u c2dtbAppbmRleCAyMDNiYjQxLi44NDQxYWEwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVm L2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9z dWJzY3JpcHRpb24uc2dtbApAQCAtMjE3LDEzICsyMTcsMjkgQEAgQ1JFQVRFIFNVQlNDUklQVElP TiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c3Vic2NyaXB0aW9uX25hbWU8L3JlcGxh Y2VhYmwKICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICAgIDx2YXJsaXN0ZW50cnk+Ci0g ICAgICAgIDx0ZXJtPjxsaXRlcmFsPnN0cmVhbWluZzwvbGl0ZXJhbD4gKDx0eXBlPmJvb2xlYW48 L3R5cGU+KTwvdGVybT4KKyAgICAgICAgPHRlcm0+PGxpdGVyYWw+c3RyZWFtaW5nPC9saXRlcmFs PiAoPHR5cGU+ZW51bTwvdHlwZT4pPC90ZXJtPgogICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAg ICA8cGFyYT4KICAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciB0byBlbmFibGUgc3RyZWFtaW5n IG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucwotICAgICAgICAgIGZvciB0aGlzIHN1YnNjcmlw dGlvbi4gIEJ5IGRlZmF1bHQsIGFsbCB0cmFuc2FjdGlvbnMKLSAgICAgICAgICBhcmUgZnVsbHkg ZGVjb2RlZCBvbiB0aGUgcHVibGlzaGVyIGFuZCBvbmx5IHRoZW4gc2VudCB0byB0aGUKLSAgICAg ICAgICBzdWJzY3JpYmVyIGFzIGEgd2hvbGUuCisgICAgICAgICAgZm9yIHRoaXMgc3Vic2NyaXB0 aW9uLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPiwKKyAgICAg ICAgICBhbGwgdHJhbnNhY3Rpb25zIGFyZSBmdWxseSBkZWNvZGVkIG9uIHRoZSBwdWJsaXNoZXIg YW5kIG9ubHkgdGhlbgorICAgICAgICAgIHNlbnQgdG8gdGhlIHN1YnNjcmliZXIgYXMgYSB3aG9s ZS4KKyAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgPHBhcmE+CisgICAgICAgICAgSWYgc2V0 IHRvIDxsaXRlcmFsPm9uPC9saXRlcmFsPiwgdGhlIGNoYW5nZXMgb2YgdHJhbnNhY3Rpb24gYXJl CisgICAgICAgICAgd3JpdHRlbiB0byB0ZW1wb3JhcnkgZmlsZXMgYW5kIHRoZW4gYXBwbGllZCBh dCBvbmNlIGFmdGVyIHRoZQorICAgICAgICAgIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiB0 aGUgcHVibGlzaGVyLgorICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICA8cGFyYT4KKyAgICAg ICAgICBJZiBzZXQgdG8gPGxpdGVyYWw+YXBwbHk8L2xpdGVyYWw+IGluY29taW5nCisgICAgICAg ICAgY2hhbmdlcyBhcmUgZGlyZWN0bHkgYXBwbGllZCB2aWEgb25lIG9mIHRoZSBiYWNrZ3JvdW5k IHdvcmtlciwgaWYKKyAgICAgICAgICBhdmFpbGFibGUuIElmIG5vIGJhY2tncm91bmQgd29ya2Vy IGlzIGZyZWUgdG8gaGFuZGxlIHN0cmVhbWluZworICAgICAgICAgIHRyYW5zYWN0aW9uIHRoZW4g dGhlIGNoYW5nZXMgYXJlIHdyaXR0ZW4gdG8gYSBmaWxlIGFuZCBhcHBsaWVkIGFmdGVyCisgICAg ICAgICAgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4gTm90ZSB0aGF0IGlmIGVycm9yIGhh cHBlbiB3aGVuIGFwcGx5aW5nCisgICAgICAgICAgY2hhbmdlcyBpbiBiYWNrZ3JvdW5kIHdvcmtl ciwgaXQgbWlnaHQgbm90IHJlcG9ydCB0aGUgZmluaXNoIExTTiBvZgorICAgICAgICAgIHRoZSBy ZW1vdGUgdHJhbnNhY3Rpb24gaW4gc2VydmVyIGxvZy4KICAgICAgICAgIDwvcGFyYT4KICAgICAg ICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3N1YnNjcmlwdGlvbmNtZHMuYwppbmRleCBiOTQyMzZmLi5mZTFkMzczIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC04Myw3ICs4Myw3IEBAIHR5cGVkZWYgc3Ry dWN0IFN1Yk9wdHMKIAlib29sCQljb3B5X2RhdGE7CiAJYm9vbAkJcmVmcmVzaDsKIAlib29sCQli aW5hcnk7Ci0JYm9vbAkJc3RyZWFtaW5nOworCWNoYXIJCXN0cmVhbWluZzsKIAlib29sCQl0d29w aGFzZTsKIAlib29sCQlkaXNhYmxlb25lcnI7CiAJWExvZ1JlY1B0cglsc247CkBAIC05Niw2ICs5 Niw2MiBAQCBzdGF0aWMgdm9pZCBSZXBvcnRTbG90Q29ubmVjdGlvbkVycm9yKExpc3QgKnJzdGF0 ZXMsIE9pZCBzdWJpZCwgY2hhciAqc2xvdG5hbWUsCiAKIAogLyoKKyAqIEV4dHJhY3QgdGhlIHN0 cmVhbWluZyBtb2RlIHZhbHVlIGZyb20gYSBEZWZFbGVtLiAgVGhpcyBpcyBsaWtlCisgKiBkZWZH ZXRCb29sZWFuKCkgYnV0IGFsc28gYWNjZXB0cyB0aGUgc3BlY2lhbCB2YWx1ZSBhbmQgImFwcGx5 Ii4KKyAqLworc3RhdGljIGNoYXIKK2RlZkdldFN0cmVhbWluZ01vZGUoRGVmRWxlbSAqZGVmKQor eworCS8qCisJICogSWYgbm8gcGFyYW1ldGVyIGdpdmVuLCBhc3N1bWUgInRydWUiIGlzIG1lYW50 LgorCSAqLworCWlmIChkZWYtPmFyZyA9PSBOVUxMKQorCQlyZXR1cm4gU1VCU1RSRUFNX09OOwor CisJLyoKKwkgKiBBbGxvdyAwLCAxLCAidHJ1ZSIsICJmYWxzZSIsICJvbiIsICJvZmYiIG9yICJh cHBseSIuCisJICovCisJc3dpdGNoIChub2RlVGFnKGRlZi0+YXJnKSkKKwl7CisJCWNhc2UgVF9J bnRlZ2VyOgorCQkJc3dpdGNoIChpbnRWYWwoZGVmLT5hcmcpKQorCQkJeworCQkJCWNhc2UgMDoK KwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9PRkY7CisJCQkJY2FzZSAxOgorCQkJCQlyZXR1cm4gU1VC U1RSRUFNX09OOworCQkJCWRlZmF1bHQ6CisJCQkJCS8qIG90aGVyd2lzZSwgZXJyb3Igb3V0IGJl bG93ICovCisJCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl7CisJ CQkJY2hhcgkqc3ZhbCA9IGRlZkdldFN0cmluZyhkZWYpOworCisJCQkJLyoKKwkJCQkgKiBUaGUg c2V0IG9mIHN0cmluZ3MgYWNjZXB0ZWQgaGVyZSBzaG91bGQgbWF0Y2ggdXAgd2l0aCB0aGUKKwkJ CQkgKiBncmFtbWFyJ3Mgb3B0X2Jvb2xlYW5fb3Jfc3RyaW5nIHByb2R1Y3Rpb24uCisJCQkJICov CisJCQkJaWYgKHBnX3N0cmNhc2VjbXAoc3ZhbCwgInRydWUiKSA9PSAwIHx8CisJCQkJCXBnX3N0 cmNhc2VjbXAoc3ZhbCwgIm9uIikgPT0gMCkKKwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9PTjsKKwkJ CQlpZiAocGdfc3RyY2FzZWNtcChzdmFsLCAiYXBwbHkiKSA9PSAwKQorCQkJCQlyZXR1cm4gU1VC U1RSRUFNX0FQUExZOworCQkJCWlmIChwZ19zdHJjYXNlY21wKHN2YWwsICJmYWxzZSIpID09IDAg fHwKKwkJCQkJcGdfc3RyY2FzZWNtcChzdmFsLCAib2ZmIikgPT0gMCkKKwkJCQkJcmV0dXJuIFNV QlNUUkVBTV9PRkY7CisJCQl9CisJCQlicmVhazsKKwl9CisJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJIGVycm1zZygiJXMgcmVxdWlyZXMg YSBCb29sZWFuIHZhbHVlIG9yIFwiYXBwbHlcIiIsCisJCQkJCWRlZi0+ZGVmbmFtZSkpKTsKKwly ZXR1cm4gU1VCU1RSRUFNX09GRjsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworfQorCisvKgog ICogQ29tbW9uIG9wdGlvbiBwYXJzaW5nIGZ1bmN0aW9uIGZvciBDUkVBVEUgYW5kIEFMVEVSIFNV QlNDUklQVElPTiBjb21tYW5kcy4KICAqCiAgKiBTaW5jZSBub3QgYWxsIG9wdGlvbnMgY2FuIGJl IHNwZWNpZmllZCBpbiBib3RoIGNvbW1hbmRzLCB0aGlzIGZ1bmN0aW9uCkBAIC0xMzIsNyArMTg4 LDcgQEAgcGFyc2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0 ICpzdG10X29wdGlvbnMsCiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBTVUJPUFRfQklOQVJZ KSkKIAkJb3B0cy0+YmluYXJ5ID0gZmFsc2U7CiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBT VUJPUFRfU1RSRUFNSU5HKSkKLQkJb3B0cy0+c3RyZWFtaW5nID0gZmFsc2U7CisJCW9wdHMtPnN0 cmVhbWluZyA9IFNVQlNUUkVBTV9PRkY7CiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBTVUJP UFRfVFdPUEhBU0VfQ09NTUlUKSkKIAkJb3B0cy0+dHdvcGhhc2UgPSBmYWxzZTsKIAlpZiAoSXNT ZXQoc3VwcG9ydGVkX29wdHMsIFNVQk9QVF9ESVNBQkxFX09OX0VSUikpCkBAIC0yMzMsNyArMjg5 LDcgQEAgcGFyc2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0 ICpzdG10X29wdGlvbnMsCiAJCQkJZXJyb3JDb25mbGljdGluZ0RlZkVsZW0oZGVmZWwsIHBzdGF0 ZSk7CiAKIAkJCW9wdHMtPnNwZWNpZmllZF9vcHRzIHw9IFNVQk9QVF9TVFJFQU1JTkc7Ci0JCQlv cHRzLT5zdHJlYW1pbmcgPSBkZWZHZXRCb29sZWFuKGRlZmVsKTsKKwkJCW9wdHMtPnN0cmVhbWlu ZyA9IGRlZkdldFN0cmVhbWluZ01vZGUoZGVmZWwpOwogCQl9CiAJCWVsc2UgaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgInR3b19waGFzZSIpID09IDApCiAJCXsKQEAgLTYwMSw3ICs2NTcsNyBA QCBDcmVhdGVTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTdWJzY3JpcHRp b25TdG10ICpzdG10LAogCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJvd25lciAtIDFd ID0gT2JqZWN0SWRHZXREYXR1bShvd25lcik7CiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9u X3N1YmVuYWJsZWQgLSAxXSA9IEJvb2xHZXREYXR1bShvcHRzLmVuYWJsZWQpOwogCXZhbHVlc1tB bnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJiaW5hcnkgLSAxXSA9IEJvb2xHZXREYXR1bShvcHRzLmJp bmFyeSk7Ci0JdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0cmVhbSAtIDFdID0gQm9v bEdldERhdHVtKG9wdHMuc3RyZWFtaW5nKTsKKwl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25f c3Vic3RyZWFtIC0gMV0gPSBDaGFyR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOwogCXZhbHVlc1tB bnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJ0d29waGFzZXN0YXRlIC0gMV0gPQogCQlDaGFyR2V0RGF0 dW0ob3B0cy50d29waGFzZSA/CiAJCQkJCSBMT0dJQ0FMUkVQX1RXT1BIQVNFX1NUQVRFX1BFTkRJ TkcgOgpAQCAtMTA2MCw3ICsxMTE2LDcgQEAgQWx0ZXJTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAq cHN0YXRlLCBBbHRlclN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJCQkJaWYgKElzU2V0KG9wdHMu c3BlY2lmaWVkX29wdHMsIFNVQk9QVF9TVFJFQU1JTkcpKQogCQkJCXsKIAkJCQkJdmFsdWVzW0Fu dW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0cmVhbSAtIDFdID0KLQkJCQkJCUJvb2xHZXREYXR1bShv cHRzLnN0cmVhbWluZyk7CisJCQkJCQlDaGFyR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOwogCQkJ CQlyZXBsYWNlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJzdHJlYW0gLSAxXSA9IHRydWU7CiAJ CQkJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKaW5kZXggMzA2ODJiNi4uMDcwZDc3OCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwpAQCAtMTI4LDYgKzEyOCw5IEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QKIAl9LAogCXsKIAkJIkFwcGx5V29ya2VyTWFpbiIsIEFwcGx5V29ya2VyTWFp bgorCX0sCisJeworCQkiQXBwbHlCZ3dvcmtlck1haW4iLCBBcHBseUJnd29ya2VyTWFpbgogCX0K IH07CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNo ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYwppbmRleCAw YWRiMmQxLi4yOTk2MzRjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xhdW5jaGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVu Y2hlci5jCkBAIC03Miw2ICs3Miw3IEBAIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfbGF1bmNoZXJf b25leGl0KGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgbG9naWNhbHJlcF93b3Jr ZXJfb25leGl0KGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgbG9naWNhbHJlcF93 b3JrZXJfZGV0YWNoKHZvaWQpOwogc3RhdGljIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfY2xlYW51 cChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIpOworc3RhdGljIHZvaWQgbG9naWNhbHJlcF93b3Jr ZXJfc3RvcF9pbnRlcm5hbChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIpOwogCiBzdGF0aWMgYm9v bCBvbl9jb21taXRfbGF1bmNoZXJfd2FrZXVwID0gZmFsc2U7CiAKQEAgLTIyNCw2ICsyMjUsMTAg QEAgbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQgc3ViaWQsIE9pZCByZWxpZCwgYm9vbCBvbmx5 X3J1bm5pbmcpCiAJewogCQlMb2dpY2FsUmVwV29ya2VyICp3ID0gJkxvZ2ljYWxSZXBDdHgtPndv cmtlcnNbaV07CiAKKwkJLyogV2Ugb25seSBuZWVkIG1haW4gYXBwbHkgd29ya2VyIG9yIHRhYmxl IHN5bmMgd29ya2VyIGhlcmUgKi8KKwkJaWYgKHctPnN1YndvcmtlcikKKwkJCWNvbnRpbnVlOwor CiAJCWlmICh3LT5pbl91c2UgJiYgdy0+c3ViaWQgPT0gc3ViaWQgJiYgdy0+cmVsaWQgPT0gcmVs aWQgJiYKIAkJCSghb25seV9ydW5uaW5nIHx8IHctPnByb2MpKQogCQl7CkBAIC0yNjIsOSArMjY3 LDkgQEAgbG9naWNhbHJlcF93b3JrZXJzX2ZpbmQoT2lkIHN1YmlkLCBib29sIG9ubHlfcnVubmlu ZykKIC8qCiAgKiBTdGFydCBuZXcgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIsIGlmIHBvc3NpYmxl LgogICovCi12b2lkCitib29sCiBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9p ZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKLQkJCQkJCSBPaWQgcmVs aWQpCisJCQkJCQkgT2lkIHJlbGlkLCBkc21faGFuZGxlIHN1Yndvcmtlcl9kc20pCiB7CiAJQmFj a2dyb3VuZFdvcmtlciBiZ3c7CiAJQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqYmd3X2hhbmRsZTsK QEAgLTI3NSw2ICsyODAsOSBAQCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9p ZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKIAlpbnQJCQluc3luY3dv cmtlcnM7CiAJVGltZXN0YW1wVHogbm93OwogCisJLyogV2UgZG9uJ3Qgc3VwcG9ydCB0YWJsZSBz eW5jIGluIHN1YndvcmtlciAqLworCUFzc2VydCghKChzdWJ3b3JrZXJfZHNtICE9IERTTV9IQU5E TEVfSU5WQUxJRCkgJiYgT2lkSXNWYWxpZChyZWxpZCkpKTsKKwogCWVyZXBvcnQoREVCVUcxLAog CQkJKGVycm1zZ19pbnRlcm5hbCgic3RhcnRpbmcgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIg Zm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIiLAogCQkJCQkJCSBzdWJuYW1lKSkpOwpAQCAtMzUxLDcg KzM1OSw3IEBAIHJldHJ5OgogCWlmIChPaWRJc1ZhbGlkKHJlbGlkKSAmJiBuc3luY3dvcmtlcnMg Pj0gbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uKQogCXsKIAkJTFdMb2NrUmVsZWFz ZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0K IAogCS8qCkBAIC0zNjUsNyArMzczLDcgQEAgcmV0cnk6CiAJCQkJKGVycmNvZGUoRVJSQ09ERV9D T05GSUdVUkFUSU9OX0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkgZXJybXNnKCJvdXQgb2YgbG9naWNh bCByZXBsaWNhdGlvbiB3b3JrZXIgc2xvdHMiKSwKIAkJCQkgZXJyaGludCgiWW91IG1pZ2h0IG5l ZWQgdG8gaW5jcmVhc2UgbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2Vycy4iKSkpOwotCQly ZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBQcmVwYXJlIHRoZSB3b3JrZXIgc2xv dC4gKi8KQEAgLTM4MCw2ICszODgsNyBAQCByZXRyeToKIAl3b3JrZXItPnJlbHN0YXRlID0gU1VC UkVMX1NUQVRFX1VOS05PV047CiAJd29ya2VyLT5yZWxzdGF0ZV9sc24gPSBJbnZhbGlkWExvZ1Jl Y1B0cjsKIAl3b3JrZXItPnN0cmVhbV9maWxlc2V0ID0gTlVMTDsKKwl3b3JrZXItPnN1Yndvcmtl ciA9IChzdWJ3b3JrZXJfZHNtICE9IERTTV9IQU5ETEVfSU5WQUxJRCk7CiAJd29ya2VyLT5sYXN0 X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogCVRJTUVTVEFNUF9OT0JFR0lOKHdvcmtlci0+bGFz dF9zZW5kX3RpbWUpOwogCVRJTUVTVEFNUF9OT0JFR0lOKHdvcmtlci0+bGFzdF9yZWN2X3RpbWUp OwpAQCAtMzk3LDE5ICs0MDYsMzEgQEAgcmV0cnk6CiAJCUJHV09SS0VSX0JBQ0tFTkRfREFUQUJB U0VfQ09OTkVDVElPTjsKIAliZ3cuYmd3X3N0YXJ0X3RpbWUgPSBCZ1dvcmtlclN0YXJ0X1JlY292 ZXJ5RmluaXNoZWQ7CiAJc25wcmludGYoYmd3LmJnd19saWJyYXJ5X25hbWUsIEJHV19NQVhMRU4s ICJwb3N0Z3JlcyIpOwotCXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExF TiwgIkFwcGx5V29ya2VyTWFpbiIpOworCisJaWYgKHN1Yndvcmtlcl9kc20gPT0gRFNNX0hBTkRM RV9JTlZBTElEKQorCQlzbnByaW50ZihiZ3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJHV19NQVhMRU4s ICJBcHBseVdvcmtlck1haW4iKTsKKwllbHNlCisJCXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25f bmFtZSwgQkdXX01BWExFTiwgIkFwcGx5Qmd3b3JrZXJNYWluIik7CisKKwogCWlmIChPaWRJc1Zh bGlkKHJlbGlkKSkKIAkJc25wcmludGYoYmd3LmJnd19uYW1lLCBCR1dfTUFYTEVOLAogCQkJCSAi bG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiAldSBzeW5jICV1Iiwg c3ViaWQsIHJlbGlkKTsKLQllbHNlCisJZWxzZSBpZiAoc3Vid29ya2VyX2RzbSA9PSBEU01fSEFO RExFX0lOVkFMSUQpCiAJCXNucHJpbnRmKGJndy5iZ3dfbmFtZSwgQkdXX01BWExFTiwKIAkJCQkg ImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUiLCBzdWJpZCk7 CisJZWxzZQorCQlzbnByaW50ZihiZ3cuYmd3X25hbWUsIEJHV19NQVhMRU4sCisJCQkJICJsb2dp Y2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1Iiwgc3ViaWQp OwogCXNucHJpbnRmKGJndy5iZ3dfdHlwZSwgQkdXX01BWExFTiwgImxvZ2ljYWwgcmVwbGljYXRp b24gd29ya2VyIik7CiAKIAliZ3cuYmd3X3Jlc3RhcnRfdGltZSA9IEJHV19ORVZFUl9SRVNUQVJU OwogCWJndy5iZ3dfbm90aWZ5X3BpZCA9IE15UHJvY1BpZDsKIAliZ3cuYmd3X21haW5fYXJnID0g SW50MzJHZXREYXR1bShzbG90KTsKIAorCWlmIChzdWJ3b3JrZXJfZHNtICE9IERTTV9IQU5ETEVf SU5WQUxJRCkKKwkJbWVtY3B5KGJndy5iZ3dfZXh0cmEsICZzdWJ3b3JrZXJfZHNtLCBzaXplb2Yo ZHNtX2hhbmRsZSkpOworCiAJaWYgKCFSZWdpc3RlckR5bmFtaWNCYWNrZ3JvdW5kV29ya2VyKCZi Z3csICZiZ3dfaGFuZGxlKSkKIAl7CiAJCS8qIEZhaWxlZCB0byBzdGFydCB3b3JrZXIsIHNvIGNs ZWFuIHVwIHRoZSB3b3JrZXIgc2xvdC4gKi8KQEAgLTQyMiwxMSArNDQzLDEzIEBAIHJldHJ5Ogog CQkJCShlcnJjb2RlKEVSUkNPREVfQ09ORklHVVJBVElPTl9MSU1JVF9FWENFRURFRCksCiAJCQkJ IGVycm1zZygib3V0IG9mIGJhY2tncm91bmQgd29ya2VyIHNsb3RzIiksCiAJCQkJIGVycmhpbnQo IllvdSBtaWdodCBuZWVkIHRvIGluY3JlYXNlIG1heF93b3JrZXJfcHJvY2Vzc2VzLiIpKSk7Ci0J CXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIE5vdyB3YWl0IHVudGlsIGl0IGF0 dGFjaGVzLiAqLwogCVdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaCh3b3JrZXIsIGdlbmVy YXRpb24sIGJnd19oYW5kbGUpOworCisJcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC00MzcsNyAr NDYwLDYgQEAgdm9pZAogbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxp ZCkKIHsKIAlMb2dpY2FsUmVwV29ya2VyICp3b3JrZXI7Ci0JdWludDE2CQlnZW5lcmF0aW9uOwog CiAJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKIApAQCAt NDUwLDYgKzQ3MiwyMiBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJl bGlkKQogCQlyZXR1cm47CiAJfQogCisJbG9naWNhbHJlcF93b3JrZXJfc3RvcF9pbnRlcm5hbCh3 b3JrZXIpOworCisJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Cit9CisKKy8q CisgKiBXb3JraG9yc2UgZm9yIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoKSBhbmQgbG9naWNhbHJl cF93b3JrZXJfZGV0YWNoKCkuIFN0b3AKKyAqIHRoZSB3b3JrZXIgYW5kIHdhaXQgZm9yIHdhaXQg Zm9yIGl0IHRvIGRpZS4KKyAqLworc3RhdGljIHZvaWQKK2xvZ2ljYWxyZXBfd29ya2VyX3N0b3Bf aW50ZXJuYWwoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKQoreworCXVpbnQxNgkJZ2VuZXJhdGlv bjsKKworCUFzc2VydChMV0xvY2tIZWxkQnlNZShMb2dpY2FsUmVwV29ya2VyTG9jaykpOworCiAJ LyoKIAkgKiBSZW1lbWJlciB3aGljaCBnZW5lcmF0aW9uIHdhcyBvdXIgd29ya2VyIHNvIHdlIGNh biBjaGVjayBpZiB3aGF0IHdlIHNlZQogCSAqIGlzIHN0aWxsIHRoZSBzYW1lIG9uZS4KQEAgLTQ4 NiwxMCArNTI0LDcgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxp ZCkKIAkJICogZGlmZmVyZW50LCBtZWFuaW5nIHRoYXQgYSBkaWZmZXJlbnQgd29ya2VyIGhhcyB0 YWtlbiB0aGUgc2xvdC4KIAkJICovCiAJCWlmICghd29ya2VyLT5pbl91c2UgfHwgd29ya2VyLT5n ZW5lcmF0aW9uICE9IGdlbmVyYXRpb24pCi0JCXsKLQkJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJl cFdvcmtlckxvY2spOwogCQkJcmV0dXJuOwotCQl9CiAKIAkJLyogV29ya2VyIGhhcyBhc3NpZ25l ZCBwcm9jLCBzbyBpdCBoYXMgc3RhcnRlZC4gKi8KIAkJaWYgKHdvcmtlci0+cHJvYykKQEAgLTUy Myw4ICs1NTgsNiBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJlbGlk KQogCiAJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CiAJ fQotCi0JTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CiB9CiAKIC8qCkBAIC02 MDAsNiArNjMzLDI4IEBAIGxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaChpbnQgc2xvdCkKIHN0YXRp YyB2b2lkCiBsb2dpY2FscmVwX3dvcmtlcl9kZXRhY2godm9pZCkKIHsKKwkvKgorCSAqIElmIHdl IGFyZSB0aGUgbWFpbiBhcHBseSB3b3JrZXIsIHN0b3AgYWxsIHRoZSBhcHBseSBiYWNrZ3JvdW5k IHdvcmtlcnMKKwkgKiB3ZSBzdGFydGVkIGJlZm9yZS4KKwkgKi8KKwlpZiAoIU15TG9naWNhbFJl cFdvcmtlci0+c3Vid29ya2VyKQorCXsKKwkJTGlzdAkgKndvcmtlcnM7CisJCUxpc3RDZWxsICps YzsKKworCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwor CisJCXdvcmtlcnMgPSBsb2dpY2FscmVwX3dvcmtlcnNfZmluZChNeUxvZ2ljYWxSZXBXb3JrZXIt PnN1YmlkLCB0cnVlKTsKKwkJZm9yZWFjaChsYywgd29ya2VycykKKwkJeworCQkJTG9naWNhbFJl cFdvcmtlciAqdyA9IChMb2dpY2FsUmVwV29ya2VyICopIGxmaXJzdChsYyk7CisJCQlpZiAody0+ c3Vid29ya2VyKQorCQkJCWxvZ2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwodyk7CisJCX0K KworCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKKwl9CisKIAkvKiBCbG9j ayBjb25jdXJyZW50IGFjY2Vzcy4gKi8KIAlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJM b2NrLCBMV19FWENMVVNJVkUpOwogCkBAIC02MjIsNiArNjc3LDcgQEAgbG9naWNhbHJlcF93b3Jr ZXJfY2xlYW51cChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIpCiAJd29ya2VyLT51c2VyaWQgPSBJ bnZhbGlkT2lkOwogCXdvcmtlci0+c3ViaWQgPSBJbnZhbGlkT2lkOwogCXdvcmtlci0+cmVsaWQg PSBJbnZhbGlkT2lkOworCXdvcmtlci0+c3Vid29ya2VyID0gZmFsc2U7CiB9CiAKIC8qCkBAIC04 NjksNyArOTI1LDcgQEAgQXBwbHlMYXVuY2hlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJCQkJCXdh aXRfdGltZSA9IHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbDsKIAogCQkJCQlsb2dpY2FscmVw X3dvcmtlcl9sYXVuY2goc3ViLT5kYmlkLCBzdWItPm9pZCwgc3ViLT5uYW1lLAotCQkJCQkJCQkJ CQkgc3ViLT5vd25lciwgSW52YWxpZE9pZCk7CisJCQkJCQkJCQkJCSBzdWItPm93bmVyLCBJbnZh bGlkT2lkLCBEU01fSEFORExFX0lOVkFMSUQpOwogCQkJCX0KIAkJCX0KIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMKaW5kZXggYjBjOGI2Yy4uYzZlYTY4YSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCkBAIC0xMDY4LDcgKzEwNjgsNyBA QCBSZXBsaWNhdGlvbk9yaWdpbkV4aXRDbGVhbnVwKGludCBjb2RlLCBEYXR1bSBhcmcpCiAgKiB3 aXRoIHJlcGxvcmlnaW5fc2Vzc2lvbl9yZXNldCgpLgogICovCiB2b2lkCi1yZXBsb3JpZ2luX3Nl c3Npb25fc2V0dXAoUmVwT3JpZ2luSWQgbm9kZSkKK3JlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChS ZXBPcmlnaW5JZCBub2RlLCBib29sIGFjcXVpcmUpCiB7CiAJc3RhdGljIGJvb2wgcmVnaXN0ZXJl ZF9jbGVhbnVwOwogCWludAkJCWk7CkBAIC0xMTEwLDcgKzExMTAsMTEgQEAgcmVwbG9yaWdpbl9z ZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpCiAJCWlmIChjdXJzdGF0ZS0+cm9pZGVudCAh PSBub2RlKQogCQkJY29udGludWU7CiAKLQkJZWxzZSBpZiAoY3Vyc3RhdGUtPmFjcXVpcmVkX2J5 ICE9IDApCisJCS8qCisJCSAqIFdlIGFsbG93IHRoZSBhcHBseSB3b3JrZXIgdG8gZ2V0IHRoZSBz bG90IHdoaWNoIGlzIGFjcXVpcmVkIGJ5IGl0cworCQkgKiBsZWFkZXIgcHJvY2Vzcy4KKwkJICov CisJCWVsc2UgaWYgKGN1cnN0YXRlLT5hY3F1aXJlZF9ieSAhPSAwICYmIGFjcXVpcmUpCiAJCXsK IAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX0lOX1VTRSks CkBAIC0xMzIxLDcgKzEzMjUsNyBAQCBwZ19yZXBsaWNhdGlvbl9vcmlnaW5fc2Vzc2lvbl9zZXR1 cChQR19GVU5DVElPTl9BUkdTKQogCiAJbmFtZSA9IHRleHRfdG9fY3N0cmluZygodGV4dCAqKSBE YXR1bUdldFBvaW50ZXIoUEdfR0VUQVJHX0RBVFVNKDApKSk7CiAJb3JpZ2luID0gcmVwbG9yaWdp bl9ieV9uYW1lKG5hbWUsIGZhbHNlKTsKLQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2lu KTsKKwlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luLCB0cnVlKTsKIAogCXJlcGxvcmln aW5fc2Vzc2lvbl9vcmlnaW4gPSBvcmlnaW47CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcHJvdG8uYwppbmRleCBmZjg1MTNlLi4wNDA5ZmRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9wcm90by5jCkBAIC0xMTM4LDE0ICsxMTM4LDExIEBAIGxvZ2ljYWxyZXBfd3Jp dGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIG91dCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog LyoKICAqIFJlYWQgU1RSRUFNIENPTU1JVCBmcm9tIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCi1U cmFuc2FjdGlvbklkCit2b2lkCiBsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2NvbW1pdChTdHJpbmdJ bmZvIGluLCBMb2dpY2FsUmVwQ29tbWl0RGF0YSAqY29tbWl0X2RhdGEpCiB7Ci0JVHJhbnNhY3Rp b25JZCB4aWQ7CiAJdWludDgJCWZsYWdzOwogCi0JeGlkID0gcHFfZ2V0bXNnaW50KGluLCA0KTsK LQogCS8qIHJlYWQgZmxhZ3MgKHVudXNlZCBmb3Igbm93KSAqLwogCWZsYWdzID0gcHFfZ2V0bXNn Ynl0ZShpbik7CiAKQEAgLTExNTYsOCArMTE1Myw2IEBAIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1f Y29tbWl0KFN0cmluZ0luZm8gaW4sIExvZ2ljYWxSZXBDb21taXREYXRhICpjb21taXRfZGF0YSkK IAljb21taXRfZGF0YS0+Y29tbWl0X2xzbiA9IHBxX2dldG1zZ2ludDY0KGluKTsKIAljb21taXRf ZGF0YS0+ZW5kX2xzbiA9IHBxX2dldG1zZ2ludDY0KGluKTsKIAljb21taXRfZGF0YS0+Y29tbWl0 dGltZSA9IHBxX2dldG1zZ2ludDY0KGluKTsKLQotCXJldHVybiB4aWQ7CiB9CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwppbmRleCA0OWNlZWMzLi4w NGM5Zjk2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxl c3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMK QEAgLTU2OCw3ICs1NjgsOCBAQCBwcm9jZXNzX3N5bmNpbmdfdGFibGVzX2Zvcl9hcHBseShYTG9n UmVjUHRyIGN1cnJlbnRfbHNuKQogCQkJCQkJCQkJCQkJIE15U3Vic2NyaXB0aW9uLT5vaWQsCiAJ CQkJCQkJCQkJCQkgTXlTdWJzY3JpcHRpb24tPm5hbWUsCiAJCQkJCQkJCQkJCQkgTXlMb2dpY2Fs UmVwV29ya2VyLT51c2VyaWQsCi0JCQkJCQkJCQkJCQkgcnN0YXRlLT5yZWxpZCk7CisJCQkJCQkJ CQkJCQkgcnN0YXRlLT5yZWxpZCwKKwkJCQkJCQkJCQkJCSBEU01fSEFORExFX0lOVkFMSUQpOwog CQkJCQkJaGVudHJ5LT5sYXN0X3N0YXJ0X3RpbWUgPSBub3c7CiAJCQkJCX0KIAkJCQl9CkBAIC01 ODksNiArNTkwLDkgQEAgcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19mb3JfYXBwbHkoWExvZ1JlY1B0 ciBjdXJyZW50X2xzbikKIHZvaWQKIHByb2Nlc3Nfc3luY2luZ190YWJsZXMoWExvZ1JlY1B0ciBj dXJyZW50X2xzbikKIHsKKwlpZiAoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJ3b3JrZXIpCisJCXJl dHVybjsKKwogCWlmIChhbV90YWJsZXN5bmNfd29ya2VyKCkpCiAJCXByb2Nlc3Nfc3luY2luZ190 YWJsZXNfZm9yX3N5bmMoY3VycmVudF9sc24pOwogCWVsc2UKQEAgLTEyNzUsNyArMTI3OSw3IEBA IExvZ2ljYWxSZXBTeW5jVGFibGVTdGFydChYTG9nUmVjUHRyICpvcmlnaW5fc3RhcnRwb3MpCiAJ CSAqIHRpbWUgdGhpcyB0YWJsZXN5bmMgd2FzIGxhdW5jaGVkLgogCQkgKi8KIAkJb3JpZ2luaWQg PSByZXBsb3JpZ2luX2J5X25hbWUob3JpZ2lubmFtZSwgZmFsc2UpOwotCQlyZXBsb3JpZ2luX3Nl c3Npb25fc2V0dXAob3JpZ2luaWQpOworCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2lu aWQsIHRydWUpOwogCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJCSpv cmlnaW5fc3RhcnRwb3MgPSByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dyZXNzKGZhbHNlKTsK IApAQCAtMTM4Niw3ICsxMzkwLDcgQEAgTG9naWNhbFJlcFN5bmNUYWJsZVN0YXJ0KFhMb2dSZWNQ dHIgKm9yaWdpbl9zdGFydHBvcykKIAkJCQkJCSAgIHRydWUgLyogZ28gYmFja3dhcmQgKi8gLCB0 cnVlIC8qIFdBTCBsb2cgKi8gKTsKIAkJVW5sb2NrUmVsYXRpb25PaWQoUmVwbGljYXRpb25Pcmln aW5SZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAotCQlyZXBsb3JpZ2luX3Nlc3Npb25f c2V0dXAob3JpZ2luaWQpOworCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIHRy dWUpOwogCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJfQogCWVsc2UK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDdkYTc4MjMuLmEz MTdmNzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMjIs OCArMjIsMjUgQEAKICAqIFNUUkVBTUVEIFRSQU5TQUNUSU9OUwogICogLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgKiBTdHJlYW1lZCB0cmFuc2FjdGlvbnMgKGxhcmdlIHRyYW5zYWN0aW9ucyBleGNl ZWRpbmcgYSBtZW1vcnkgbGltaXQgb24gdGhlCi0gKiB1cHN0cmVhbSkgYXJlIG5vdCBhcHBsaWVk IGltbWVkaWF0ZWx5LCBidXQgaW5zdGVhZCwgdGhlIGRhdGEgaXMgd3JpdHRlbgotICogdG8gdGVt cG9yYXJ5IGZpbGVzIGFuZCB0aGVuIGFwcGxpZWQgYXQgb25jZSB3aGVuIHRoZSBmaW5hbCBjb21t aXQgYXJyaXZlcy4KKyAqIHVwc3RyZWFtKSBhcmUgYXBwbGllZCB2aWEgb25lIG9mIHR3byBhcHBy b2FjaGVzLgorICoKKyAqIDEpIFNlcGFyYXRlIGJhY2tncm91bmQgd29ya2VycworICoKKyAqIEFz c2lnbiBhIG5ldyBiZ3dvcmtlciAoaWYgYXZhaWxhYmxlKSBhcyBzb29uIGFzIHRoZSB4YWN0J3Mg Zmlyc3Qgc3RyZWFtIGlzCisgKiByZWNlaXZlZCBhbmQgdGhlIG1haW4gYXBwbHkgd29ya2VyIHdp bGwgc2VuZCBjaGFuZ2VzIHRvIHRoaXMgbmV3IHdvcmtlciB2aWEKKyAqIHNoYXJlZCBtZW1vcnku IFdlIGtlZXAgdGhpcyB3b3JrZXIgYXNzaWduZWQgdGlsbCB0aGUgdHJhbnNhY3Rpb24gY29tbWl0 IGlzCisgKiByZWNlaXZlZCBhbmQgYWxzbyB3YWl0IGZvciB0aGUgd29ya2VyIHRvIGZpbmlzaCBh dCBjb21taXQuIFRoaXMgcHJlc2VydmVzCisgKiBjb21taXQgb3JkZXJpbmcgYW5kIGF2b2lkcyB3 cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gZmlsZSBpbiBtb3N0IGNhc2VzLgorICogV2Ugc3Rp bGwgbmVlZCB0byBzcGlsbCBpZiB0aGVyZSBpcyBubyB3b3JrZXIgYXZhaWxhYmxlLiBXZSBhbHNv IG5lZWQgdG8KKyAqIGFsbG93IHN0cmVhbV9zdG9wIHRvIGNvbXBsZXRlIGJ5IHRoZSBiYWNrZ3Jv dW5kIHdvcmtlciB0byBmaW5pc2ggaXQgdG8gYXZvaWQKKyAqIGRlYWRsb2NrcyBiZWNhdXNlIFQt MSdzIGN1cnJlbnQgc3RyZWFtIG9mIGNoYW5nZXMgY2FuIHVwZGF0ZSByb3dzIGluCisgKiBjb25m bGljdGluZyBvcmRlciB3aXRoIFQtMidzIG5leHQgc3RyZWFtIG9mIGNoYW5nZXMuCisgKgorICog MikgV3JpdGUgdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCBhcHBseSB3aGVuIHRoZSBmaW5hbCBjb21t aXQgYXJyaXZlcworICoKKyAqIElmIG5vIHdvcmtlciBpcyBhdmFpbGFibGUgdG8gaGFuZGxlIHN0 cmVhbWVkIHRyYW5zYWN0aW9uLCB0aGUgZGF0YSBpcworICogd3JpdHRlbiB0byB0ZW1wb3Jhcnkg ZmlsZXMgYW5kIHRoZW4gYXBwbGllZCBhdCBvbmNlIHdoZW4gdGhlIGZpbmFsIGNvbW1pdAorICog YXJyaXZlcy4KICAqCiAgKiBVbmxpa2UgdGhlIHJlZ3VsYXIgKG5vbi1zdHJlYW1lZCkgY2FzZSwg aGFuZGxpbmcgc3RyZWFtZWQgdHJhbnNhY3Rpb25zIGhhcwogICogdG8gaGFuZGxlIGFib3J0cyBv ZiBib3RoIHRoZSB0b3BsZXZlbCB0cmFuc2FjdGlvbiBhbmQgc3VidHJhbnNhY3Rpb25zLiBUaGlz CkBAIC0xNzQsMTEgKzE5MSwxNSBAQAogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIu aCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZmZpbGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1n ci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZHNtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgog I2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNp bmNsdWRlICJzdG9yYWdlL3NobV9tcS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX3RvYy5oIgor I2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNp bmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgpAQCAtMTk4 LDYgKzIxOSw3NSBAQAogCiAjZGVmaW5lIE5BUFRJTUVfUEVSX0NZQ0xFIDEwMDAJLyogbWF4IHNs ZWVwIHRpbWUgYmV0d2VlbiBjeWNsZXMgKDFzKSAqLwogCisjZGVmaW5lIFBHX0xPR0lDQUxfQVBQ TFlfU0hNX01BR0lDIDB4NzlmYjI0NDcgLy8gVE9ETyBDb25zaWRlciBjaGFuZ2UKKworLyoKKyAq IFNoYXJlZCBpbmZvcm1hdGlvbiBhbW9uZyBhcHBseSB3b3JrZXJzLgorICovCit0eXBlZGVmIHN0 cnVjdCBQYXJhbGxlbFN0YXRlCit7CisJc2xvY2tfdAltdXRleDsKKworCS8qIFN0YXRlIGZvciBh cHBseSBiYWNrZ3JvdW5kIHdvcmtlci4gKi8KKwljaGFyCQkJc3RhdGU7CisKKwlUcmFuc2FjdGlv bklkCXN0cmVhbV94aWQ7CisJdWludDMyCW47CS8qIGlkIG9mIGFwcGx5IGJhY2tncm91bmQgd29y a2VyICovCit9IFBhcmFsbGVsU3RhdGU7CisKKy8qCisgKiBTdGF0ZXMgZm9yIGFwcGx5IGJhY2tn cm91bmQgd29ya2VyLgorICovCisjZGVmaW5lIEFQUExZX0JHV09SS0VSX0FUVEFDSEVECSdhJwor I2RlZmluZSBBUFBMWV9CR1dPUktFUl9SRUFEWQkncicKKyNkZWZpbmUJQVBQTFlfQkdXT1JLRVJf QlVTWQkJJ2InCisjZGVmaW5lIEFQUExZX0JHV09SS0VSX0ZJTklTSEVECSdmJworI2RlZmluZQlB UFBMWV9CR1dPUktFUl9FWElUCQknZScKKworLyoKKyAqIFN0cnVjdCBmb3IgbWFpbnRhaW5pbmcg YSBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgV29ya2VyU3Rh dGUKK3sKKwlzaG1fbXFfaGFuZGxlCQkJKm1xX2hhbmRsZTsKKwlkc21fc2VnbWVudAkJCQkqZHNt X3NlZzsKKwlQYXJhbGxlbFN0YXRlIHZvbGF0aWxlCSpwc3RhdGU7Cit9IFdvcmtlclN0YXRlOwor Cit0eXBlZGVmIHN0cnVjdCBXb3JrZXJFbnRyeQoreworCVRyYW5zYWN0aW9uSWQJeGlkOworCVdv cmtlclN0YXRlCSAgICp3c3RhdGU7Cit9IFdvcmtlckVudHJ5OworCisvKiBBcHBseSBiYWNrZ3Jv dW5kIHdvcmtlcnMgaGFzaCB0YWJsZSAoaW5pdGlhbGl6ZWQgb24gZmlyc3QgdXNlKSAqLworc3Rh dGljIEhUQUIgKkFwcGx5V29ya2Vyc0hhc2ggPSBOVUxMOworc3RhdGljIExpc3QgKkFwcGx5V29y a2Vyc0lkbGVMaXN0ID0gTklMOworc3RhdGljIExpc3QgKkFwcGx5V29ya2Vyc0xpc3QgPSBOSUw7 CisKKy8qIEZpZWxkcyB2YWxpZCBvbmx5IGZvciBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlcnMgKi8K K3ZvbGF0aWxlIFBhcmFsbGVsU3RhdGUgKk15UGFyYWxsZWxTdGF0ZSA9IE5VTEw7CitzdGF0aWMg TGlzdCAqc3VieGFjdGxpc3QgPSBOSUw7CisKKy8qIFRoZSBudW1iZXIgb2YgY2hhbmdlcyBkdXJp bmcgb25lIHN0cmVhbWluZyBibG9jayAqLworc3RhdGljIHVpbnQzMiBuY2hhbmdlcyA9IDA7CisK Ky8qIFdvcmtlciBzZXR1cCBhbmQgaW50ZXJhY3Rpb25zICovCitzdGF0aWMgV29ya2VyU3RhdGUg KmFwcGx5X2Jnd29ya2VyX3NldHVwKHZvaWQpOworc3RhdGljIFdvcmtlclN0YXRlICpmaW5kX29y X3N0YXJ0X2FwcGx5X2Jnd29ya2VyKFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCQkJCQkJIGJv b2wgc3RhcnQpOworc3RhdGljIHZvaWQgYXBwbHlfYmd3b3JrZXJfc2V0dXBfZHNtKFdvcmtlclN0 YXRlICp3c3RhdGUpOworc3RhdGljIHZvaWQgYXBwbHlfYmd3b3JrZXJfd2FpdF9mb3IoV29ya2Vy U3RhdGUgKndzdGF0ZSwKKwkJCQkJCQkJCWNoYXIgd2FpdF9mb3Jfc3RhdGUpOworc3RhdGljIHZv aWQgYXBwbHlfYmd3b3JrZXJfc2VuZF9kYXRhKFdvcmtlclN0YXRlICp3c3RhdGUsIFNpemUgbmJ5 dGVzLAorCQkJCQkJCQkJIGNvbnN0IHZvaWQgKmRhdGEpOworc3RhdGljIHZvaWQgYXBwbHlfYmd3 b3JrZXJfZnJlZShXb3JrZXJTdGF0ZSAqd3N0YXRlKTsKK3N0YXRpYyB2b2lkIGFwcGx5X2Jnd29y a2VyX2NoZWNrX3N0YXR1cyh2b2lkKTsKK3N0YXRpYyB2b2lkIGFwcGx5X2Jnd29ya2VyX3NldF9z dGF0ZShjaGFyIHN0YXRlKTsKKworI2RlZmluZSBhbV9hcHBseV9iZ3dvcmtlcigpIChNeUxvZ2lj YWxSZXBXb3JrZXItPnN1YndvcmtlcikKKyNkZWZpbmUgYXBwbHlpbmdfY2hhbmdlc19pbl9iZ3dv cmtlcigpIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiAmJiBzdHJlYW1fYXBwbHlfd29ya2VyICE9 IE5VTEwpCisKIHR5cGVkZWYgc3RydWN0IEZsdXNoUG9zaXRpb24KIHsKIAlkbGlzdF9ub2RlCW5v ZGU7CkBAIC0yNjAsMTggKzM1MCwyMCBAQCBzdGF0aWMgWExvZ1JlY1B0ciByZW1vdGVfZmluYWxf bHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CiBzdGF0aWMgYm9vbCBpbl9zdHJlYW1lZF90cmFuc2Fj dGlvbiA9IGZhbHNlOwogCiBzdGF0aWMgVHJhbnNhY3Rpb25JZCBzdHJlYW1feGlkID0gSW52YWxp ZFRyYW5zYWN0aW9uSWQ7CitzdGF0aWMgV29ya2VyU3RhdGUgKnN0cmVhbV9hcHBseV93b3JrZXIg PSBOVUxMOwogCiAvKgogICogV2UgZW5hYmxlIHNraXBwaW5nIGFsbCBkYXRhIG1vZGlmaWNhdGlv biBjaGFuZ2VzIChJTlNFUlQsIFVQREFURSwgZXRjLikgZm9yCiAgKiB0aGUgc3Vic2NyaXB0aW9u IGlmIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24ncyBmaW5pc2ggTFNOIG1hdGNoZXMgdGhlIHN1YnNr aXBsc24uCiAgKiBPbmNlIHdlIHN0YXJ0IHNraXBwaW5nIGNoYW5nZXMsIHdlIGRvbid0IHN0b3Ag aXQgdW50aWwgd2Ugc2tpcCBhbGwgY2hhbmdlcyBvZgogICogdGhlIHRyYW5zYWN0aW9uIGV2ZW4g aWYgcGdfc3Vic2NyaXB0aW9uIGlzIHVwZGF0ZWQgYW5kIE15U3Vic2NyaXB0aW9uLT5za2lwbHNu Ci0gKiBnZXRzIGNoYW5nZWQgb3IgcmVzZXQgZHVyaW5nIHRoYXQuIEFsc28sIGluIHN0cmVhbWlu ZyB0cmFuc2FjdGlvbiBjYXNlcywgd2UKLSAqIGRvbid0IHNraXAgcmVjZWl2aW5nIGFuZCBzcG9v bGluZyB0aGUgY2hhbmdlcyBzaW5jZSB3ZSBkZWNpZGUgd2hldGhlciBvciBub3QKKyAqIGdldHMg Y2hhbmdlZCBvciByZXNldCBkdXJpbmcgdGhhdC4gQWxzbywgaW4gc3RyZWFtaW5nIHRyYW5zYWN0 aW9uIGNhc2VzIChzdHJlYW1pbmcgPSBvbiksCisgKiB3ZSBkb24ndCBza2lwIHJlY2VpdmluZyBh bmQgc3Bvb2xpbmcgdGhlIGNoYW5nZXMgc2luY2Ugd2UgZGVjaWRlIHdoZXRoZXIgb3Igbm90CiAg KiB0byBza2lwIGFwcGx5aW5nIHRoZSBjaGFuZ2VzIHdoZW4gc3RhcnRpbmcgdG8gYXBwbHkgY2hh bmdlcy4gVGhlIHN1YnNraXBsc24gaXMKICAqIGNsZWFyZWQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHNr aXBwaW5nIHRoZSB0cmFuc2FjdGlvbiBvciBhcHBseWluZyBub24tZW1wdHkKICAqIHRyYW5zYWN0 aW9uLiBUaGUgbGF0dGVyIHByZXZlbnRzIHRoZSBtaXN0YWtlbmx5IHNwZWNpZmllZCBzdWJza2lw bHNuIGZyb20KLSAqIGJlaW5nIGxlZnQuCisgKiBiZWluZyBsZWZ0LiBOb3RlIHRoYXQgd2UgY2Fu bm90IHNraXAgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiBpbiBhcHBseSBtb2RlLAorICogYmVj YXVzZSB3ZSBjYW5ub3QgZ2V0IHRoZSBmaW5pc2ggTFNOIGJlZm9yZSBhcHBseWluZyB0aGUgY2hh bmdlcy4KICAqLwogc3RhdGljIFhMb2dSZWNQdHIgc2tpcF94YWN0X2ZpbmlzaF9sc24gPSBJbnZh bGlkWExvZ1JlY1B0cjsKICNkZWZpbmUgaXNfc2tpcHBpbmdfY2hhbmdlcygpICh1bmxpa2VseSgh WExvZ1JlY1B0cklzSW52YWxpZChza2lwX3hhY3RfZmluaXNoX2xzbikpKQpAQCAtNDI2LDQzICs1 MTgsMTAzIEBAIGVuZF9yZXBsaWNhdGlvbl9zdGVwKHZvaWQpCiB9CiAKIC8qCi0gKiBIYW5kbGUg c3RyZWFtZWQgdHJhbnNhY3Rpb25zLgorICogSGFuZGxlIHN0cmVhbWVkIHRyYW5zYWN0aW9ucyBm b3IgYm90aCBtYWluIGFwcGx5IHdvcmtlciBhbmQgYXBwbHkgYmFja2dyb3VuZAorICogd29ya2Vy LgogICoKLSAqIElmIGluIHN0cmVhbWluZyBtb2RlIChyZWNlaXZpbmcgYSBibG9jayBvZiBzdHJl YW1lZCB0cmFuc2FjdGlvbiksIHdlCi0gKiBzaW1wbHkgcmVkaXJlY3QgaXQgdG8gYSBmaWxlIGZv ciB0aGUgcHJvcGVyIHRvcGxldmVsIHRyYW5zYWN0aW9uLgorICogRm9yIHRoZSBtYWluIGFwcGx5 IHdvcmtlciwgaWYgaW4gc3RyZWFtaW5nIG1vZGUgKHJlY2VpdmluZyBhIGJsb2NrIG9mCisgKiBz dHJlYW1lZCB0cmFuc2FjdGlvbiksIHdlIHNlbmQgdGhlIGRhdGEgdG8gdGhlIGFwcGx5IGJhY2tn cm91bmQgd29ya2VyLgorICoKKyAqIEZvciB0aGUgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIsIGRl ZmluZSBhIHNhdmVwb2ludCBpZiBuZXcgc3VidHJhbnNhY3Rpb24KKyAqIHdhcyBzdGFydGVkLgog ICoKICAqIFJldHVybnMgdHJ1ZSBmb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb25zLCBmYWxzZSBvdGhl cndpc2UgKHJlZ3VsYXIgbW9kZSkuCiAgKi8KIHN0YXRpYyBib29sCiBoYW5kbGVfc3RyZWFtZWRf dHJhbnNhY3Rpb24oTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJbmZvIHMpCiB7Ci0J VHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNhY3Rpb25JZCBjdXJyZW50X3hpZCA9IEludmFsaWRU cmFuc2FjdGlvbklkOwogCi0JLyogbm90IGluIHN0cmVhbWluZyBtb2RlICovCi0JaWYgKCFpbl9z dHJlYW1lZF90cmFuc2FjdGlvbikKKwkvKgorCSAqIFJldHVybiBpZiB3ZSBhcmUgbm90IGluIHN0 cmVhbWluZyBtb2RlIGFuZCBhcmUgbm90IGluIGEgYXBwbHkgYmFja2dyb3VuZAorCSAqIHdvcmtl ci4KKwkgKi8KKwlpZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uICYmICFhbV9hcHBseV9iZ3dv cmtlcigpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlBc3NlcnQoc3RyZWFtX2ZkICE9IE5VTEwpOwog CUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChzdHJlYW1feGlkKSk7CiAKIAkvKgogCSAqIFdl IHNob3VsZCBoYXZlIHJlY2VpdmVkIFhJRCBvZiB0aGUgc3VieGFjdCBhcyB0aGUgZmlyc3QgcGFy dCBvZiB0aGUKIAkgKiBtZXNzYWdlLCBzbyBleHRyYWN0IGl0LgogCSAqLwotCXhpZCA9IHBxX2dl dG1zZ2ludChzLCA0KTsKKwljdXJyZW50X3hpZCA9IHBxX2dldG1zZ2ludChzLCA0KTsKIAotCWlm ICghVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlk KGN1cnJlbnRfeGlkKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BS T1RPQ09MX1ZJT0xBVElPTiksCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgiaW52YWxpZCB0cmFuc2Fj dGlvbiBJRCBpbiBzdHJlYW1lZCByZXBsaWNhdGlvbiB0cmFuc2FjdGlvbiIpKSk7CiAKLQkvKiBB ZGQgdGhlIG5ldyBzdWJ4YWN0IHRvIHRoZSBhcnJheSAodW5sZXNzIGFscmVhZHkgdGhlcmUpLiAq LwotCXN1YnhhY3RfaW5mb19hZGQoeGlkKTsKKwlpZiAoYW1fYXBwbHlfYmd3b3JrZXIoKSkKKwl7 CisJCS8qCisJCSAqIEluc2lkZSBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciB3ZSBjYW4gZmlndXJl IG91dCB0aGF0IG5ldworCQkgKiBzdWJ0cmFuc2FjdGlvbiB3YXMgc3RhcnRlZCBpZiBuZXcgY2hh bmdlIGFycml2ZWQgd2l0aCBkaWZmZXJlbnQgeGlkLgorCQkgKiBJbiB0aGF0IGNhc2Ugd2UgY2Fu IGRlZmluZSBuYW1lZCBzYXZlcG9pbnQsIHNvIHRoYXQgd2Ugd2VyZSBhYmxlIHRvCisJCSAqIGNv bW1pdC9yb2xsYmFjayBpdCBzZXBhcmF0ZWx5IGxhdGVyLgorCQkgKgorCQkgKiBTcGVjaWFsIGNh c2UgaXMgaWYgdGhlIGZpcnN0IGNoYW5nZSBjb21lcyBmcm9tIHN1YnRyYW5zYWN0aW9uLCB0aGVu CisJCSAqIHdlIGNoZWNrIHRoYXQgY3VycmVudF94aWQgZGlmZmVycyBmcm9tIHN0cmVhbV94aWQu CisJCSAqLworCQlpZiAoY3VycmVudF94aWQgIT0gc3RyZWFtX3hpZCAmJgorCQkJIWxpc3RfbWVt YmVyX2ludChzdWJ4YWN0bGlzdCwgKGludCkgY3VycmVudF94aWQpKQorCQl7CisJCQlNZW1vcnlD b250ZXh0CW9sZGN0eDsKKwkJCWNoYXIJCQlzcG5hbWVbTUFYUEdQQVRIXTsKKworCQkJc25wcmlu dGYoc3BuYW1lLCBNQVhQR1BBVEgsICJzYXZlcG9pbnRfZm9yX3hpZF8ldSIsIGN1cnJlbnRfeGlk KTsKKworCQkJZWxvZyhMT0csICJbQXBwbHkgQkdXICMldV0gZGVmaW5pbmcgc2F2ZXBvaW50ICVz IiwKKwkJCQkgTXlQYXJhbGxlbFN0YXRlLT5uLCBzcG5hbWUpOworCisJCQlEZWZpbmVTYXZlcG9p bnQoc3BuYW1lKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCQlvbGRjdHgg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsKKwkJCXN1YnhhY3RsaXN0ID0g bGFwcGVuZF9pbnQoc3VieGFjdGxpc3QsIChpbnQpIGN1cnJlbnRfeGlkKTsKKwkJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCQl9CisJfQorCWVsc2UgaWYgKGFwcGx5aW5nX2NoYW5n ZXNfaW5fYmd3b3JrZXIoKSkKKwl7CisJCS8qCisJCSAqIElmIHdlIGRlY2lkZWQgdG8gYXBwbHkg dGhlIGNoYW5nZXMgb2YgdGhpcyB0cmFuc2FjdGlvbiBpbiBhIGFwcGx5CisJCSAqIGJhY2tncm91 bmQgd29ya2VyLCBwYXNzIHRoZSBkYXRhIHRvIHRoZSB3b3JrZXIuCisJCSAqLworCQlhcHBseV9i Z3dvcmtlcl9zZW5kX2RhdGEoc3RyZWFtX2FwcGx5X3dvcmtlciwgcy0+bGVuLCBzLT5kYXRhKTsK KwkJbmNoYW5nZXMgKz0gMTsKKworCQkvKgorCQkgKiBYWFggVGhlIHB1Ymxpc2hlciBzaWRlIGRv ZXNuJ3QgYWx3YXlzIHNlbmQgcmVsYXRpb24gdXBkYXRlIG1lc3NhZ2UKKwkJICogYWZ0ZXIgdGhl IHN0cmVhbWluZyB0cmFuc2FjdGlvbiwgc28gdXBkYXRlIHRoZSByZWxhdGlvbiBpbiBtYWluCisJ CSAqIGFwcGx5IHdvcmtlciBoZXJlLgorCQkgKi8KKwkJaWYgKGFjdGlvbiA9PSBMT0dJQ0FMX1JF UF9NU0dfUkVMQVRJT04pCisJCXsKKwkJCUxvZ2ljYWxSZXBSZWxhdGlvbiAqcmVsID0gbG9naWNh bHJlcF9yZWFkX3JlbChzKTsKKwkJCWxvZ2ljYWxyZXBfcmVsbWFwX3VwZGF0ZShyZWwpOworCQl9 CisKKwl9CisJZWxzZQorCXsKKwkJLyogQWRkIHRoZSBuZXcgc3VieGFjdCB0byB0aGUgYXJyYXkg KHVubGVzcyBhbHJlYWR5IHRoZXJlKS4gKi8KKwkJc3VieGFjdF9pbmZvX2FkZChjdXJyZW50X3hp ZCk7CiAKLQkvKiB3cml0ZSB0aGUgY2hhbmdlIHRvIHRoZSBjdXJyZW50IGZpbGUgKi8KLQlzdHJl YW1fd3JpdGVfY2hhbmdlKGFjdGlvbiwgcyk7CisJCS8qIHdyaXRlIHRoZSBjaGFuZ2UgdG8gdGhl IGN1cnJlbnQgZmlsZSAqLworCQlzdHJlYW1fd3JpdGVfY2hhbmdlKGFjdGlvbiwgcyk7CisJfQog Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuICFhbV9hcHBseV9iZ3dvcmtlcigpOwogfQogCiAvKgpA QCAtODQ0LDYgKzk5Niw5IEBAIGFwcGx5X2hhbmRsZV9jb21taXQoU3RyaW5nSW5mbyBzKQogCiAJ YXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5hbCgmY29tbWl0X2RhdGEpOwogCisJLyogQ2hlY2sg dGhlIHN0YXR1cyBvZiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciBpZiBhbnkuICovCisJYXBwbHlf Ymd3b3JrZXJfY2hlY2tfc3RhdHVzKCk7CisKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBh cmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2luZ190 YWJsZXMoY29tbWl0X2RhdGEuZW5kX2xzbik7CiAKQEAgLTg5OCw3ICsxMDUzLDkgQEAgYXBwbHlf aGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoTG9naWNhbFJlcFByZXBhcmVkVHhuRGF0YSAqcHJlcGFy ZV9kYXRhKQogCSAqIEJlZ2luVHJhbnNhY3Rpb25CbG9jayBpcyBuZWNlc3NhcnkgdG8gYmFsYW5j ZSB0aGUgRW5kVHJhbnNhY3Rpb25CbG9jawogCSAqIGNhbGxlZCB3aXRoaW4gdGhlIFByZXBhcmVU cmFuc2FjdGlvbkJsb2NrIGJlbG93LgogCSAqLwotCUJlZ2luVHJhbnNhY3Rpb25CbG9jaygpOwor CWlmICghSXNUcmFuc2FjdGlvbkJsb2NrKCkpCisJCUJlZ2luVHJhbnNhY3Rpb25CbG9jaygpOwor CiAJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7IC8qIENvbXBsZXRlcyB0aGUgcHJlY2VkaW5n IEJlZ2luIGNvbW1hbmQuICovCiAKIAkvKgpAQCAtOTUwLDYgKzExMDcsOSBAQCBhcHBseV9oYW5k bGVfcHJlcGFyZShTdHJpbmdJbmZvIHMpCiAKIAlpbl9yZW1vdGVfdHJhbnNhY3Rpb24gPSBmYWxz ZTsKIAorCS8qIENoZWNrIHRoZSBzdGF0dXMgb2YgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIgaWYg YW55LiAqLworCWFwcGx5X2Jnd29ya2VyX2NoZWNrX3N0YXR1cygpOworCiAJLyogUHJvY2VzcyBh bnkgdGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4gKi8KIAlw cm9jZXNzX3N5bmNpbmdfdGFibGVzKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKIApAQCAtOTc0LDMy ICsxMTM0LDU3IEBAIGFwcGx5X2hhbmRsZV9jb21taXRfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQog ewogCUxvZ2ljYWxSZXBDb21taXRQcmVwYXJlZFR4bkRhdGEgcHJlcGFyZV9kYXRhOwogCWNoYXIJ CWdpZFtHSURTSVpFXTsKKwlXb3JrZXJTdGF0ZSAqd3N0YXRlOwogCiAJbG9naWNhbHJlcF9yZWFk X2NvbW1pdF9wcmVwYXJlZChzLCAmcHJlcGFyZV9kYXRhKTsKIAlzZXRfYXBwbHlfZXJyb3JfY29u dGV4dF94YWN0KHByZXBhcmVfZGF0YS54aWQsIHByZXBhcmVfZGF0YS5jb21taXRfbHNuKTsKIAot CS8qIENvbXB1dGUgR0lEIGZvciB0d29fcGhhc2UgdHJhbnNhY3Rpb25zLiAqLwotCVR3b1BoYXNl VHJhbnNhY3Rpb25HaWQoTXlTdWJzY3JpcHRpb24tPm9pZCwgcHJlcGFyZV9kYXRhLnhpZCwKLQkJ CQkJCSAgIGdpZCwgc2l6ZW9mKGdpZCkpOworCS8qIENoZWNrIGlmIHdlIGhhdmUgcHJlcGFyZWQg dHJhbnNhY3Rpb24gaW4gYW5vdGhlciBiZ3dvcmtlciAqLworCXdzdGF0ZSA9IGZpbmRfb3Jfc3Rh cnRfYXBwbHlfYmd3b3JrZXIocHJlcGFyZV9kYXRhLnhpZCwgZmFsc2UpOwogCi0JLyogVGhlcmUg aXMgbm8gdHJhbnNhY3Rpb24gd2hlbiBDT01NSVQgUFJFUEFSRUQgaXMgY2FsbGVkICovCi0JYmVn aW5fcmVwbGljYXRpb25fc3RlcCgpOworCWlmICh3c3RhdGUpCisJeworCQllbG9nKERFQlVHMSwg InJlY2VpdmVkIGNvbW1pdCBmb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb24gJXUiLCBwcmVwYXJlX2Rh dGEueGlkKTsKIAotCS8qCi0JICogVXBkYXRlIG9yaWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFy dCBzdHJlYW1pbmcgZnJvbSBjb3JyZWN0IHBvc2l0aW9uCi0JICogaW4gY2FzZSBvZiBjcmFzaC4K LQkgKi8KLQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX2xzbiA9IHByZXBhcmVfZGF0YS5lbmRf bHNuOwotCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fdGltZXN0YW1wID0gcHJlcGFyZV9kYXRh LmNvbW1pdF90aW1lOworCQkvKiBTZW5kIGNvbW1pdCBtZXNzYWdlICovCisJCWFwcGx5X2Jnd29y a2VyX3NlbmRfZGF0YSh3c3RhdGUsIHMtPmxlbiwgcy0+ZGF0YSk7CisKKwkJLyogV2FpdCBmb3Ig Ymd3b3JrZXIgdG8gZmluaXNoICovCisJCWFwcGx5X2Jnd29ya2VyX3dhaXRfZm9yKHdzdGF0ZSwg QVBQTFlfQkdXT1JLRVJfRklOSVNIRUQpOworCisJCWFwcGx5X2Jnd29ya2VyX2ZyZWUod3N0YXRl KTsKKwl9CisJZWxzZQorCXsKKwkJLyogQ29tcHV0ZSBHSUQgZm9yIHR3b19waGFzZSB0cmFuc2Fj dGlvbnMuICovCisJCVR3b1BoYXNlVHJhbnNhY3Rpb25HaWQoTXlTdWJzY3JpcHRpb24tPm9pZCwg cHJlcGFyZV9kYXRhLnhpZCwKKwkJCQkJCQkgICBnaWQsIHNpemVvZihnaWQpKTsKKworCQkvKiBU aGVyZSBpcyBubyB0cmFuc2FjdGlvbiB3aGVuIENPTU1JVCBQUkVQQVJFRCBpcyBjYWxsZWQgKi8K KwkJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJCS8qCisJCSAqIFVwZGF0ZSBvcmlnaW4g c3RhdGUgc28gd2UgY2FuIHJlc3RhcnQgc3RyZWFtaW5nIGZyb20gY29ycmVjdCBwb3NpdGlvbgor CQkgKiBpbiBjYXNlIG9mIGNyYXNoLgorCQkgKi8KKwkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdp bl9sc24gPSBwcmVwYXJlX2RhdGEuZW5kX2xzbjsKKwkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdp bl90aW1lc3RhbXAgPSBwcmVwYXJlX2RhdGEuY29tbWl0X3RpbWU7CisKKwkJRmluaXNoUHJlcGFy ZWRUcmFuc2FjdGlvbihnaWQsIHRydWUpOworCQllbmRfcmVwbGljYXRpb25fc3RlcCgpOworCQlD b21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQlhcHBseV9iZ3dvcmtlcl9zZXRfc3RhdGUo QVBQTFlfQkdXT1JLRVJfRklOSVNIRUQpOworCX0KIAotCUZpbmlzaFByZXBhcmVkVHJhbnNhY3Rp b24oZ2lkLCB0cnVlKTsKLQllbmRfcmVwbGljYXRpb25fc3RlcCgpOwotCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOwogCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CiAKIAlzdG9yZV9mbHVz aF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CiAJaW5fcmVtb3RlX3RyYW5zYWN0aW9u ID0gZmFsc2U7CiAKKwkvKiBDaGVjayB0aGUgc3RhdHVzIG9mIGFwcGx5IGJhY2tncm91bmQgd29y a2VyIGlmIGFueS4gKi8KKwlhcHBseV9iZ3dvcmtlcl9jaGVja19zdGF0dXMoKTsKKwogCS8qIFBy b2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFyYWxsZWwu ICovCiAJcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhwcmVwYXJlX2RhdGEuZW5kX2xzbik7CiAKQEAg LTEwMTcsMzcgKzEyMDIsNTcgQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmlu Z0luZm8gcykKIHsKIAlMb2dpY2FsUmVwUm9sbGJhY2tQcmVwYXJlZFR4bkRhdGEgcm9sbGJhY2tf ZGF0YTsKIAljaGFyCQlnaWRbR0lEU0laRV07CisJV29ya2VyU3RhdGUgKndzdGF0ZTsKIAogCWxv Z2ljYWxyZXBfcmVhZF9yb2xsYmFja19wcmVwYXJlZChzLCAmcm9sbGJhY2tfZGF0YSk7CiAJc2V0 X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChyb2xsYmFja19kYXRhLnhpZCwgcm9sbGJhY2tfZGF0 YS5yb2xsYmFja19lbmRfbHNuKTsKIAotCS8qIENvbXB1dGUgR0lEIGZvciB0d29fcGhhc2UgdHJh bnNhY3Rpb25zLiAqLwotCVR3b1BoYXNlVHJhbnNhY3Rpb25HaWQoTXlTdWJzY3JpcHRpb24tPm9p ZCwgcm9sbGJhY2tfZGF0YS54aWQsCi0JCQkJCQkgICBnaWQsIHNpemVvZihnaWQpKTsKKwkvKiBD aGVjayBpZiB3ZSBhcmUgcHJvY2Vzc2luZyB0aGUgcHJlcGFyZWQgdHJhbnNhY3Rpb24gaW4gYSBi Z3dvcmtlciAqLworCXdzdGF0ZSA9IGZpbmRfb3Jfc3RhcnRfYXBwbHlfYmd3b3JrZXIocm9sbGJh Y2tfZGF0YS54aWQsIGZhbHNlKTsKIAotCS8qCi0JICogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBo YXZlbid0IHJlY2VpdmVkIHByZXBhcmUgYmVjYXVzZSBpdCBvY2N1cnJlZAotCSAqIGJlZm9yZSB3 YWxzZW5kZXIgcmVhY2hlZCBhIGNvbnNpc3RlbnQgcG9pbnQgb3IgdGhlIHR3b19waGFzZSB3YXMg c3RpbGwKLQkgKiBub3QgZW5hYmxlZCBieSB0aGF0IHRpbWUsIHNvIGluIHN1Y2ggY2FzZXMsIHdl IG5lZWQgdG8gc2tpcCByb2xsYmFjawotCSAqIHByZXBhcmVkLgotCSAqLwotCWlmIChMb29rdXBH WGFjdChnaWQsIHJvbGxiYWNrX2RhdGEucHJlcGFyZV9lbmRfbHNuLAotCQkJCQlyb2xsYmFja19k YXRhLnByZXBhcmVfdGltZSkpCisJaWYgKHdzdGF0ZSkKKwl7CisJCWFwcGx5X2Jnd29ya2VyX3Nl bmRfZGF0YSh3c3RhdGUsIHMtPmxlbiwgcy0+ZGF0YSk7CisKKwkJLyogV2FpdCBmb3IgYmd3b3Jr ZXIgdG8gZmluaXNoICovCisJCWFwcGx5X2Jnd29ya2VyX3dhaXRfZm9yKHdzdGF0ZSwgQVBQTFlf QkdXT1JLRVJfRklOSVNIRUQpOworCisJCWVsb2coTE9HLCAicm9sbGJhY2sgcHJlcGFyZWQgc3Ry ZWFtaW5nIG9mIHhpZCAldSIsIHJvbGxiYWNrX2RhdGEueGlkKTsKKworCQlhcHBseV9iZ3dvcmtl cl9mcmVlKHdzdGF0ZSk7CisJfQorCWVsc2UKIAl7CisJCS8qIENvbXB1dGUgR0lEIGZvciB0d29f cGhhc2UgdHJhbnNhY3Rpb25zLiAqLworCQlUd29QaGFzZVRyYW5zYWN0aW9uR2lkKE15U3Vic2Ny aXB0aW9uLT5vaWQsIHJvbGxiYWNrX2RhdGEueGlkLAorCQkJCQkJCSAgIGdpZCwgc2l6ZW9mKGdp ZCkpOworCiAJCS8qCi0JCSAqIFVwZGF0ZSBvcmlnaW4gc3RhdGUgc28gd2UgY2FuIHJlc3RhcnQg c3RyZWFtaW5nIGZyb20gY29ycmVjdAotCQkgKiBwb3NpdGlvbiBpbiBjYXNlIG9mIGNyYXNoLgor CQkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIGhhdmVuJ3QgcmVjZWl2ZWQgcHJlcGFyZSBiZWNh dXNlIGl0IG9jY3VycmVkCisJCSAqIGJlZm9yZSB3YWxzZW5kZXIgcmVhY2hlZCBhIGNvbnNpc3Rl bnQgcG9pbnQgb3IgdGhlIHR3b19waGFzZSB3YXMgc3RpbGwKKwkJICogbm90IGVuYWJsZWQgYnkg dGhhdCB0aW1lLCBzbyBpbiBzdWNoIGNhc2VzLCB3ZSBuZWVkIHRvIHNraXAgcm9sbGJhY2sKKwkJ ICogcHJlcGFyZWQuCiAJCSAqLwotCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX2xzbiA9IHJv bGxiYWNrX2RhdGEucm9sbGJhY2tfZW5kX2xzbjsKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdp bl90aW1lc3RhbXAgPSByb2xsYmFja19kYXRhLnJvbGxiYWNrX3RpbWU7CisJCWlmIChMb29rdXBH WGFjdChnaWQsIHJvbGxiYWNrX2RhdGEucHJlcGFyZV9lbmRfbHNuLAorCQkJCQkJcm9sbGJhY2tf ZGF0YS5wcmVwYXJlX3RpbWUpKQorCQl7CisJCQkvKgorCQkJICogVXBkYXRlIG9yaWdpbiBzdGF0 ZSBzbyB3ZSBjYW4gcmVzdGFydCBzdHJlYW1pbmcgZnJvbSBjb3JyZWN0CisJCQkgKiBwb3NpdGlv biBpbiBjYXNlIG9mIGNyYXNoLgorCQkJICovCisJCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2lu X2xzbiA9IHJvbGxiYWNrX2RhdGEucm9sbGJhY2tfZW5kX2xzbjsKKwkJCXJlcGxvcmlnaW5fc2Vz c2lvbl9vcmlnaW5fdGltZXN0YW1wID0gcm9sbGJhY2tfZGF0YS5yb2xsYmFja190aW1lOwogCi0J CS8qIFRoZXJlIGlzIG5vIHRyYW5zYWN0aW9uIHdoZW4gQUJPUlQvUk9MTEJBQ0sgUFJFUEFSRUQg aXMgY2FsbGVkICovCi0JCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKLQkJRmluaXNoUHJlcGFy ZWRUcmFuc2FjdGlvbihnaWQsIGZhbHNlKTsKLQkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKLQkJ Q29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCQkvKiBUaGVyZSBpcyBubyB0cmFuc2FjdGlv biB3aGVuIEFCT1JUL1JPTExCQUNLIFBSRVBBUkVEIGlzIGNhbGxlZCAqLworCQkJYmVnaW5fcmVw bGljYXRpb25fc3RlcCgpOworCQkJRmluaXNoUHJlcGFyZWRUcmFuc2FjdGlvbihnaWQsIGZhbHNl KTsKKwkJCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CisJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1h bmQoKTsKKworCQkJY2xlYXJfc3Vic2NyaXB0aW9uX3NraXBfbHNuKHJvbGxiYWNrX2RhdGEucm9s bGJhY2tfZW5kX2xzbik7CisJCX0KIAotCQljbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24ocm9s bGJhY2tfZGF0YS5yb2xsYmFja19lbmRfbHNuKTsKKwkJYXBwbHlfYmd3b3JrZXJfc2V0X3N0YXRl KEFQUExZX0JHV09SS0VSX0ZJTklTSEVEKTsKIAl9CiAKIAlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFs c2UpOwpAQCAtMTA1NSw2ICsxMjYwLDkgQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVk KFN0cmluZ0luZm8gcykKIAlzdG9yZV9mbHVzaF9wb3NpdGlvbihyb2xsYmFja19kYXRhLnJvbGxi YWNrX2VuZF9sc24pOwogCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOwogCisJLyogQ2hl Y2sgdGhlIHN0YXR1cyBvZiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciBpZiBhbnkuICovCisJYXBw bHlfYmd3b3JrZXJfY2hlY2tfc3RhdHVzKCk7CisKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhh dCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2lu Z190YWJsZXMocm9sbGJhY2tfZGF0YS5yb2xsYmFja19lbmRfbHNuKTsKIApAQCAtMTA2MywxMSAr MTI3MSwxMzEgQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmluZ0luZm8gcykK IH0KIAogLyoKLSAqIEhhbmRsZSBTVFJFQU0gUFJFUEFSRS4KKyAqIExvb2sgdXAgd29ya2VyIGlu c2lkZSBBcHBseVdvcmtlcnNIYXNoIGZvciByZXF1ZXN0ZWQgeGlkLgogICoKLSAqIExvZ2ljIGlz IGluIHR3byBwYXJ0czoKLSAqIDEuIFJlcGxheSBhbGwgdGhlIHNwb29sZWQgb3BlcmF0aW9ucwot ICogMi4gTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQKKyAqIElmIHN0YXJ0IGZsYWcg aXMgdHJ1ZSwgdHJ5IHRvIHN0YXJ0IGEgbmV3IHdvcmtlciBpZiBub3QgZm91bmQgaW4gaGFzaCB0 YWJsZS4KKyAqLworc3RhdGljIFdvcmtlclN0YXRlICoKK2ZpbmRfb3Jfc3RhcnRfYXBwbHlfYmd3 b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgc3RhcnQpCit7CisJYm9vbCBmb3VuZDsKKwlX b3JrZXJTdGF0ZSAqd3N0YXRlOworCVdvcmtlckVudHJ5ICplbnRyeSA9IE5VTEw7CisKKwlpZiAo IVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFzdGFy dCAmJiBBcHBseVdvcmtlcnNIYXNoID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkg KiBXZSBkb24ndCBzdGFydCBuZXcgYmFja2dyb3VuZCB3b3JrZXIgaWYgd2UgYXJlIG5vdCBpbiBz dHJlYW1pbmcgYXBwbHkKKwkgKiBtb2RlLgorCSAqLworCWlmIChNeVN1YnNjcmlwdGlvbi0+c3Ry ZWFtICE9IFNVQlNUUkVBTV9BUFBMWSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIFdlIGRv bid0IHN0YXJ0IG5ldyBiYWNrZ3JvdW5kIHdvcmtlciBpZiB1c2VyIGhhcyBzZXQgc2tpcGxzbiBh cyBpdCdzCisJICogcG9zc2libGUgdGhhdCB1c2VyIHdhbnQgdG8gc2tpcCB0aGUgc3RyZWFtaW5n IHRyYW5zYWN0aW9uLiBGb3Igc3RyZWFtaW5nCisJICogdHJhbnNhY3Rpb24sIHdlIG5lZWQgdG8g c3BpbGwgdGhlIHRyYW5zYWN0aW9uIHRvIGRpc2sgc28gdGhhdCB3ZSBjYW4gZ2V0CisJICogdGhl IGxhc3QgTFNOIG9mIHRoZSB0cmFuc2FjdGlvbiB0byBqdWRnZSB3aGV0aGVyIHRvIHNraXAgYmVm b3JlIHN0YXJ0aW5nCisJICogdG8gYXBwbHkgdGhlIGNoYW5nZS4KKwkgKi8KKwlpZiAoc3RhcnQg JiYgIVhMb2dSZWNQdHJJc0ludmFsaWQoTXlTdWJzY3JpcHRpb24tPnNraXBsc24pKQorCQlyZXR1 cm4gTlVMTDsKKworCS8qCisJICogRm9yIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgdGhhdCBhcmUg YmVpbmcgYXBwbGllZCBpbiBiZ3dvcmtlciwgd2UgY2Fubm90CisJICogZGVjaWRlIHdoZXRoZXIg dG8gYXBwbHkgdGhlIGNoYW5nZSBmb3IgYSByZWxhdGlvbiB0aGF0IGlzIG5vdCBpbiB0aGUKKwkg KiBSRUFEWSBzdGF0ZSAoc2VlIHNob3VsZF9hcHBseV9jaGFuZ2VzX2Zvcl9yZWwpIGFzIHdlIHdv bid0IGtub3cKKwkgKiByZW1vdGVfZmluYWxfbHNuIGJ5IHRoYXQgdGltZS4gU28sIHdlIGRvbid0 IHN0YXJ0IG5ldyBiZ3dvcmtlciBpbiB0aGlzCisJICogY2FzZS4KKwkgKi8KKwlpZiAoc3RhcnQg JiYgIUFsbFRhYmxlc3luY3NSZWFkeSgpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEZpcnN0IHRp bWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSBhcHBseSB3b3JrZXJzIGhhc2h0YWJsZSAqLworCWlmIChB cHBseVdvcmtlcnNIYXNoID09IE5VTEwpCisJeworCQlIQVNIQ1RMCQljdGw7CisKKwkJTWVtU2V0 KCZjdGwsIDAsIHNpemVvZihjdGwpKTsKKwkJY3RsLmtleXNpemUgPSBzaXplb2YoVHJhbnNhY3Rp b25JZCk7CisJCWN0bC5lbnRyeXNpemUgPSBzaXplb2YoV29ya2VyRW50cnkpOworCQljdGwuaGN4 dCA9IEFwcGx5Q29udGV4dDsKKworCQlBcHBseVdvcmtlcnNIYXNoID0gaGFzaF9jcmVhdGUoImxv Z2ljYWwgYXBwbHkgd29ya2VycyBoYXNoIiwgOCwgJmN0bCwKKwkJCQkJCQkJCSAgIEhBU0hfRUxF TSB8IEhBU0hfQkxPQlMgfCBIQVNIX0NPTlRFWFQpOworCX0KKworCS8qCisJICogRmluZCBlbnRy eSBmb3IgcmVxdWVzdGVkIHRyYW5zYWN0aW9uLgorCSAqLworCWVudHJ5ID0gaGFzaF9zZWFyY2go QXBwbHlXb3JrZXJzSGFzaCwgJnhpZCwgc3RhcnQgPyBIQVNIX0VOVEVSIDogSEFTSF9GSU5ELAor CQkJCQkJJmZvdW5kKTsKKwlpZiAoZm91bmQpCisJeworCQllbnRyeS0+d3N0YXRlLT5wc3RhdGUt PnN0YXRlID0gQVBQTFlfQkdXT1JLRVJfQlVTWTsKKwkJcmV0dXJuIGVudHJ5LT53c3RhdGU7CisJ fQorCWVsc2UgaWYgKCFzdGFydCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBJZiB0aGVyZSBpcyBh dCBsZWFzdCBvbmUgd29ya2VyIGluIHRoZSBpZGxlIGxpc3QsIHRoZW4gdGFrZSBvbmUuICovCisJ aWYgKGxpc3RfbGVuZ3RoKEFwcGx5V29ya2Vyc0lkbGVMaXN0KSA+IDApCisJeworCQl3c3RhdGUg PSAoV29ya2VyU3RhdGUgKikgbGxhc3QoQXBwbHlXb3JrZXJzSWRsZUxpc3QpOworCQlBcHBseVdv cmtlcnNJZGxlTGlzdCA9IGxpc3RfZGVsZXRlX2xhc3QoQXBwbHlXb3JrZXJzSWRsZUxpc3QpOwor CX0KKwllbHNlCisJeworCQl3c3RhdGUgPSBhcHBseV9iZ3dvcmtlcl9zZXR1cCgpOworCisJCWlm ICh3c3RhdGUgPT0gTlVMTCkKKwkJeworCQkJLyoKKwkJCSAqIElmIHRoZSBiZ3dvcmtlciBjYW5u b3QgYmUgbGF1bmNoZWQsIHJlbW92ZSBlbnRyeSBpbiBoYXNoIHRhYmxlLgorCQkJICovCisJCQlo YXNoX3NlYXJjaChBcHBseVdvcmtlcnNIYXNoLCAmeGlkLCBIQVNIX1JFTU9WRSwgJmZvdW5kKTsK KwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJLyogRmlsbCB1cCB0aGUgaGFzaCBlbnRyeSAq LworCXdzdGF0ZS0+cHN0YXRlLT5zdGF0ZSA9IEFQUExZX0JHV09SS0VSX0JVU1k7CisJd3N0YXRl LT5wc3RhdGUtPnN0cmVhbV94aWQgPSB4aWQ7CisJZW50cnktPndzdGF0ZSA9IHdzdGF0ZTsKKwll bnRyeS0+eGlkID0geGlkOworCisJcmV0dXJuIHdzdGF0ZTsKK30KKworLyoKKyAqIEFkZCB0aGUg d29ya2VyIHRvIHRoZSBmcmVlbGlzdCBhbmQgcmVtb3ZlIHRoZSBlbnRyeSBmcm9tIGhhc2ggdGFi bGUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9iZ3dvcmtlcl9mcmVlKFdvcmtlclN0YXRlICp3 c3RhdGUpCit7CisJYm9vbCBmb3VuZDsKKwlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKwlUcmFuc2Fj dGlvbklkIHhpZCA9IHdzdGF0ZS0+cHN0YXRlLT5zdHJlYW1feGlkOworCisJb2xkY3R4ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisKKwloYXNoX3NlYXJjaChBcHBseVdv cmtlcnNIYXNoLCAmeGlkLAorCQkJCUhBU0hfUkVNT1ZFLCAmZm91bmQpOworCisJZWxvZyhMT0cs ICJhZGRpbmcgZmluaXNoZWQgYXBwbHkgd29ya2VyICMldSBmb3IgeGlkICV1IHRvIHRoZSBpZGxl IGxpc3QiLAorCQkgd3N0YXRlLT5wc3RhdGUtPm4sIHdzdGF0ZS0+cHN0YXRlLT5zdHJlYW1feGlk KTsKKworCUFwcGx5V29ya2Vyc0lkbGVMaXN0ID0gbGFwcGVuZChBcHBseVdvcmtlcnNJZGxlTGlz dCwgd3N0YXRlKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworfQorCisvKgor ICogSGFuZGxlIFNUUkVBTSBQUkVQQVJFLgogICovCiBzdGF0aWMgdm9pZAogYXBwbHlfaGFuZGxl X3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykKQEAgLTEwODgsMjQgKzE0MTYsNzEgQEAgYXBw bHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAlsb2dpY2FscmVwX3JlYWRf c3RyZWFtX3ByZXBhcmUocywgJnByZXBhcmVfZGF0YSk7CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRl eHRfeGFjdChwcmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOwogCi0J ZWxvZyhERUJVRzEsICJyZWNlaXZlZCBwcmVwYXJlIGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAl dSIsIHByZXBhcmVfZGF0YS54aWQpOworCS8qCisJICogSWYgd2UgYXJlIGluIGEgYmd3b3JrZXIs IGp1c3QgcHJlcGFyZSB0aGUgdHJhbnNhY3Rpb24uCisJICovCisJaWYgKGFtX2FwcGx5X2Jnd29y a2VyKCkpCisJeworCQllbG9nKExPRywgInJlY2VpdmVkIHByZXBhcmUgZm9yIHN0cmVhbWVkIHRy YW5zYWN0aW9uICV1IiwgcHJlcGFyZV9kYXRhLnhpZCk7CiAKLQkvKiBSZXBsYXkgYWxsIHRoZSBz cG9vbGVkIG9wZXJhdGlvbnMuICovCi0JYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhwcmVwYXJlX2Rh dGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOworCQkvKiBNYXJrIHRoZSB0cmFuc2Fj dGlvbiBhcyBwcmVwYXJlZC4gKi8KKwkJYXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoJnBy ZXBhcmVfZGF0YSk7CiAKLQkvKiBNYXJrIHRoZSB0cmFuc2FjdGlvbiBhcyBwcmVwYXJlZC4gKi8K LQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRhKTsKKwkJQ29tbWl0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJ cGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKIAotCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7 CisJCWxpc3RfZnJlZShzdWJ4YWN0bGlzdCk7CisJCXN1YnhhY3RsaXN0ID0gTklMOwogCi0Jc3Rv cmVfZmx1c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVuZF9sc24pOworCQlhcHBseV9iZ3dvcmtl cl9zZXRfc3RhdGUoQVBQTFlfQkdXT1JLRVJfUkVBRFkpOworCX0KKwllbHNlCisJeworCQlXb3Jr ZXJTdGF0ZSAqd3N0YXRlID0gZmluZF9vcl9zdGFydF9hcHBseV9iZ3dvcmtlcihwcmVwYXJlX2Rh dGEueGlkLCBmYWxzZSk7CisKKwkJLyoKKwkJICogSWYgd2UgYXJlIGluIG1haW4gYXBwbHkgd29y a2VyLCBjaGVjayBpZiB3ZSBhcmUgcHJvY2Vzc2luZyB0aGlzCisJCSAqIHRyYW5zYWN0aW9uIGlu IGEgYmd3b3JrZXIuCisJCSAqLworCQlpZiAod3N0YXRlKQorCQl7CisJCQlhcHBseV9iZ3dvcmtl cl9zZW5kX2RhdGEod3N0YXRlLCBzLT5sZW4sIHMtPmRhdGEpOworCisJCQlhcHBseV9iZ3dvcmtl cl93YWl0X2Zvcih3c3RhdGUsIEFQUExZX0JHV09SS0VSX1JFQURZKTsKKworCQkJcGdzdGF0X3Jl cG9ydF9zdGF0KGZhbHNlKTsKKwkJCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKHByZXBhcmVfZGF0YS5l bmRfbHNuKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBJZiB3ZSBhcmUgaW4gbWFp biBhcHBseSB3b3JrZXIgYW5kIHRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbgorCQkJICogc2VyaWFs aXplZCB0byBmaWxlLCByZXBsYXkgYWxsIHRoZSBzcG9vbGVkIG9wZXJhdGlvbnMuCisJCQkgKi8K KwkJCWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMocHJlcGFyZV9kYXRhLnhpZCwgcHJlcGFyZV9kYXRh LnByZXBhcmVfbHNuKTsKKworCQkJLyogTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQu ICovCisJCQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRhKTsKKwor CQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJCXBnc3RhdF9yZXBvcnRfc3RhdChm YWxzZSk7CisKKwkJCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsK KworCQkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CisKKwkJCS8qIHVubGluayB0aGUg ZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1YnhhY3QgaW5mby4gKi8KKwkJCXN0 cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHByZXBhcmVfZGF0 YS54aWQpOworCQl9CisJfQogCiAJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CisJc3Ry ZWFtX2FwcGx5X3dvcmtlciA9IE5VTEw7CiAKLQkvKiB1bmxpbmsgdGhlIGZpbGVzIHdpdGggc2Vy aWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8uICovCi0Jc3RyZWFtX2NsZWFudXBfZmls ZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgcHJlcGFyZV9kYXRhLnhpZCk7CisJLyogQ2hl Y2sgdGhlIHN0YXR1cyBvZiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciBpZiBhbnkuICovCisJYXBw bHlfYmd3b3JrZXJfY2hlY2tfc3RhdHVzKCk7CiAKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhh dCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2lu Z190YWJsZXMocHJlcGFyZV9kYXRhLmVuZF9sc24pOwpAQCAtMTE1NSwxNSArMTUzMCw2IEBAIGFw cGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQoU3RyaW5nSW5mbyBzKQogCQkJCShlcnJjb2RlKEVSUkNP REVfUFJPVE9DT0xfVklPTEFUSU9OKSwKIAkJCQkgZXJybXNnX2ludGVybmFsKCJkdXBsaWNhdGUg U1RSRUFNIFNUQVJUIG1lc3NhZ2UiKSkpOwogCi0JLyoKLQkgKiBTdGFydCBhIHRyYW5zYWN0aW9u IG9uIHN0cmVhbSBzdGFydCwgdGhpcyB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbW1pdHRlZAotCSAq IG9uIHRoZSBzdHJlYW0gc3RvcCB1bmxlc3MgaXQgaXMgYSB0YWJsZXN5bmMgd29ya2VyIGluIHdo aWNoIGNhc2UgaXQKLQkgKiB3aWxsIGJlIGNvbW1pdHRlZCBhZnRlciBwcm9jZXNzaW5nIGFsbCB0 aGUgbWVzc2FnZXMuIFdlIG5lZWQgdGhlCi0JICogdHJhbnNhY3Rpb24gZm9yIGhhbmRsaW5nIHRo ZSBidWZmaWxlLCB1c2VkIGZvciBzZXJpYWxpemluZyB0aGUKLQkgKiBzdHJlYW1pbmcgZGF0YSBh bmQgc3VieGFjdCBpbmZvLgotCSAqLwotCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKLQogCS8q IG5vdGlmeSBoYW5kbGUgbWV0aG9kcyB3ZSdyZSBwcm9jZXNzaW5nIGEgcmVtb3RlIHRyYW5zYWN0 aW9uICovCiAJaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSB0cnVlOwogCkBAIC0xMTc3LDM2ICsx NTQzLDkwIEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQoU3RyaW5nSW5mbyBzKQogCiAJc2V0 X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChzdHJlYW1feGlkLCBJbnZhbGlkWExvZ1JlY1B0cik7 CiAKKwlpZiAoYW1fYXBwbHlfYmd3b3JrZXIoKSkKKwl7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0 aGUgaGFuZGxlIGFwcGx5X2Rpc3BhdGNoIG1ldGhvZHMgYXJlIGF3YXJlIHdlJ3JlIGluIGEKKwkJ ICogcmVtb3RlIHRyYW5zYWN0aW9uLgorCQkgKi8KKwkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0g dHJ1ZTsKKworCQkvKiBJZiB3ZSBhcmUgaW4gYSBiZ3dvcmtlciwgYmVnaW4gdGhlIHRyYW5zYWN0 aW9uICovCisJCUFjY2VwdEludmFsaWRhdGlvbk1lc3NhZ2VzKCk7CisJCW1heWJlX3JlcmVhZF9z dWJzY3JpcHRpb24oKTsKKworCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQlCZWdpblRy YW5zYWN0aW9uQmxvY2soKTsKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJcmV0 dXJuOworCX0KKwogCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgd29ya2VyJ3Mgc3RyZWFtX2ZpbGVz ZXQgaWYgd2UgaGF2ZW4ndCB5ZXQuIFRoaXMgd2lsbCBiZQotCSAqIHVzZWQgZm9yIHRoZSBlbnRp cmUgZHVyYXRpb24gb2YgdGhlIHdvcmtlciBzbyBjcmVhdGUgaXQgaW4gYSBwZXJtYW5lbnQKLQkg KiBjb250ZXh0LiBXZSBjcmVhdGUgdGhpcyBvbiB0aGUgdmVyeSBmaXJzdCBzdHJlYW1pbmcgbWVz c2FnZSBmcm9tIGFueQotCSAqIHRyYW5zYWN0aW9uIGFuZCB0aGVuIHVzZSBpdCBmb3IgdGhpcyBh bmQgb3RoZXIgc3RyZWFtaW5nIHRyYW5zYWN0aW9ucy4KLQkgKiBOb3csIHdlIGNvdWxkIGNyZWF0 ZSBhIGZpbGVzZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSB3b3JrZXIgYXMgd2VsbCBidXQKLQkgKiB0 aGVuIHdlIHdvbid0IGJlIHN1cmUgdGhhdCBpdCB3aWxsIGV2ZXIgYmUgdXNlZC4KKwkgKiBJZiB3 ZSBhcmUgaW4gbWFpbiBhcHBseSB3b3JrZXIsIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBmcmVlIGJn d29ya2VyCisJICogd2UgY2FuIHVzZSB0byBwcm9jZXNzIHRoaXMgdHJhbnNhY3Rpb24uCiAJICov Ci0JaWYgKE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgPT0gTlVMTCkKKwlzdHJl YW1fYXBwbHlfd29ya2VyID0gZmluZF9vcl9zdGFydF9hcHBseV9iZ3dvcmtlcihzdHJlYW1feGlk LCBmaXJzdF9zZWdtZW50KTsKKworCWlmIChhcHBseWluZ19jaGFuZ2VzX2luX2Jnd29ya2VyKCkp CiAJewotCQlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBmcmVl IHdvcmtlciBvciB3ZSBhbHJlYWR5IHN0YXJ0ZWQgdG8gYXBwbHkgdGhpcworCQkgKiB0cmFuc2Fj dGlvbiBpbiBiZ3dvcmtlciwgd2UgcGFzcyB0aGUgZGF0YSB0byB3b3JrZXIuCisJCSAqLworCQlp ZiAoZmlyc3Rfc2VnbWVudCkKKwkJCWFwcGx5X2Jnd29ya2VyX3NlbmRfZGF0YShzdHJlYW1fYXBw bHlfd29ya2VyLCBzLT5sZW4sIHMtPmRhdGEpOwogCi0JCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhBcHBseUNvbnRleHQpOworCQluY2hhbmdlcyA9IDA7CisJCWVsb2coTE9HLCAic3Rh cnRpbmcgc3RyZWFtaW5nIG9mIHhpZCAldSIsIHN0cmVhbV94aWQpOworCX0KIAotCQlNeUxvZ2lj YWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID0gcGFsbG9jKHNpemVvZihGaWxlU2V0KSk7Ci0J CUZpbGVTZXRJbml0KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQpOworCS8qCisJ ICogSWYgbm8gd29ya2VyIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGZpcnN0IHN0cmVhbSBzdGFydCwg d2Ugc3RhcnQgdG8KKwkgKiBzZXJpYWxpemUgYWxsIHRoZSBjaGFuZ2VzIG9mIHRoZSB0cmFuc2Fj dGlvbi4KKwkgKi8KKwllbHNlCisJeworCQkvKgorCQkgKiBTdGFydCBhIHRyYW5zYWN0aW9uIG9u IHN0cmVhbSBzdGFydCwgdGhpcyB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbW1pdHRlZAorCQkgKiBv biB0aGUgc3RyZWFtIHN0b3AgdW5sZXNzIGl0IGlzIGEgdGFibGVzeW5jIHdvcmtlciBpbiB3aGlj aCBjYXNlIGl0CisJCSAqIHdpbGwgYmUgY29tbWl0dGVkIGFmdGVyIHByb2Nlc3NpbmcgYWxsIHRo ZSBtZXNzYWdlcy4gV2UgbmVlZCB0aGUKKwkJICogdHJhbnNhY3Rpb24gZm9yIGhhbmRsaW5nIHRo ZSBidWZmaWxlLCB1c2VkIGZvciBzZXJpYWxpemluZyB0aGUKKwkJICogc3RyZWFtaW5nIGRhdGEg YW5kIHN1YnhhY3QgaW5mby4KKwkJICovCisJCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAot CQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKLQl9CisJCS8qCisJCSAqIEluaXRpYWxp emUgdGhlIHdvcmtlcidzIHN0cmVhbV9maWxlc2V0IGlmIHdlIGhhdmVuJ3QgeWV0LiBUaGlzIHdp bGwgYmUKKwkJICogdXNlZCBmb3IgdGhlIGVudGlyZSBkdXJhdGlvbiBvZiB0aGUgd29ya2VyIHNv IGNyZWF0ZSBpdCBpbiBhIHBlcm1hbmVudAorCQkgKiBjb250ZXh0LiBXZSBjcmVhdGUgdGhpcyBv biB0aGUgdmVyeSBmaXJzdCBzdHJlYW1pbmcgbWVzc2FnZSBmcm9tIGFueQorCQkgKiB0cmFuc2Fj dGlvbiBhbmQgdGhlbiB1c2UgaXQgZm9yIHRoaXMgYW5kIG90aGVyIHN0cmVhbWluZyB0cmFuc2Fj dGlvbnMuCisJCSAqIE5vdywgd2UgY291bGQgY3JlYXRlIGEgZmlsZXNldCBhdCB0aGUgc3RhcnQg b2YgdGhlIHdvcmtlciBhcyB3ZWxsIGJ1dAorCQkgKiB0aGVuIHdlIHdvbid0IGJlIHN1cmUgdGhh dCBpdCB3aWxsIGV2ZXIgYmUgdXNlZC4KKwkJICovCisJCWlmIChNeUxvZ2ljYWxSZXBXb3JrZXIt PnN0cmVhbV9maWxlc2V0ID09IE5VTEwpCisJCXsKKwkJCU1lbW9yeUNvbnRleHQgb2xkY3R4Owog Ci0JLyogb3BlbiB0aGUgc3Bvb2wgZmlsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiAqLwotCXN0cmVh bV9vcGVuX2ZpbGUoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hpZCwgZmlyc3Rf c2VnbWVudCk7CisJCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0 KTsKIAotCS8qIGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBzZWdtZW50LCBvcGVuIGV4aXN0aW5n IHN1YnhhY3QgZmlsZSAqLwotCWlmICghZmlyc3Rfc2VnbWVudCkKLQkJc3VieGFjdF9pbmZvX3Jl YWQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hpZCk7CisJCQlNeUxvZ2ljYWxS ZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID0gcGFsbG9jKHNpemVvZihGaWxlU2V0KSk7CisJCQlG aWxlU2V0SW5pdChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0KTsKIAotCXBnc3Rh dF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfUlVOTklORywgTlVMTCk7CisJCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY3R4KTsKKwkJfQogCi0JZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKwkJLyog b3BlbiB0aGUgc3Bvb2wgZmlsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiAqLworCQlzdHJlYW1fb3Bl bl9maWxlKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHN0cmVhbV94aWQsIGZpcnN0X3NlZ21l bnQpOworCisJCS8qIGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBzZWdtZW50LCBvcGVuIGV4aXN0 aW5nIHN1YnhhY3QgZmlsZSAqLworCQlpZiAoIWZpcnN0X3NlZ21lbnQpCisJCQlzdWJ4YWN0X2lu Zm9fcmVhZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBzdHJlYW1feGlkKTsKKworCQllbmRf cmVwbGljYXRpb25fc3RlcCgpOworCX0KKworCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVf UlVOTklORywgTlVMTCk7CiB9CiAKIC8qCkBAIC0xMjIwLDQ0ICsxNjQwLDQ3IEBAIGFwcGx5X2hh bmRsZV9zdHJlYW1fc3RvcChTdHJpbmdJbmZvIHMpCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9U T0NPTF9WSU9MQVRJT04pLAogCQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBTVE9QIG1lc3Nh Z2Ugd2l0aG91dCBTVFJFQU0gU1RBUlQiKSkpOwogCi0JLyoKLQkgKiBDbG9zZSB0aGUgZmlsZSB3 aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcywgYW5kIHNlcmlhbGl6ZSBpbmZvcm1hdGlvbiBhYm91dAot CSAqIHN1YnhhY3RzIGZvciB0aGUgdG9wbGV2ZWwgdHJhbnNhY3Rpb24uCi0JICovCi0Jc3VieGFj dF9pbmZvX3dyaXRlKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHN0cmVhbV94aWQpOwotCXN0 cmVhbV9jbG9zZV9maWxlKCk7CisJaWYgKGFwcGx5aW5nX2NoYW5nZXNfaW5fYmd3b3JrZXIoKSkK Kwl7CisJCWNoYXIJYWN0aW9uID0gTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVE9QOwogCi0JLyog V2UgbXVzdCBiZSBpbiBhIHZhbGlkIHRyYW5zYWN0aW9uIHN0YXRlICovCi0JQXNzZXJ0KElzVHJh bnNhY3Rpb25TdGF0ZSgpKTsKKwkJYXBwbHlfYmd3b3JrZXJfc2VuZF9kYXRhKHN0cmVhbV9hcHBs eV93b3JrZXIsIDEsICZhY3Rpb24pOworCQlhcHBseV9iZ3dvcmtlcl93YWl0X2ZvcihzdHJlYW1f YXBwbHlfd29ya2VyLCBBUFBMWV9CR1dPUktFUl9SRUFEWSk7CiAKLQkvKiBDb21taXQgdGhlIHBl ci1zdHJlYW0gdHJhbnNhY3Rpb24gKi8KLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJ ZWxvZyhMT0csICJzdG9wcGVkIHN0cmVhbWluZyBvZiB4aWQgJXUsICV1IGNoYW5nZXMgc3RyZWFt ZWQiLCBzdHJlYW1feGlkLCBuY2hhbmdlcyk7CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIENs b3NlIHRoZSBmaWxlIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzLCBhbmQgc2VyaWFsaXplIGluZm9y bWF0aW9uCisJCSAqIGFib3V0IHN1YnhhY3RzIGZvciB0aGUgdG9wbGV2ZWwgdHJhbnNhY3Rpb24u CisJCSAqLworCQlzdWJ4YWN0X2luZm9fd3JpdGUoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwg c3RyZWFtX3hpZCk7CisJCXN0cmVhbV9jbG9zZV9maWxlKCk7CiAKLQlpbl9zdHJlYW1lZF90cmFu c2FjdGlvbiA9IGZhbHNlOworCQkvKiBXZSBtdXN0IGJlIGluIGEgdmFsaWQgdHJhbnNhY3Rpb24g c3RhdGUgKi8KKwkJQXNzZXJ0KElzVHJhbnNhY3Rpb25TdGF0ZSgpKTsKKworCQkvKiBDb21taXQg dGhlIHBlci1zdHJlYW0gdHJhbnNhY3Rpb24gKi8KKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5k KCk7CiAKLQkvKiBSZXNldCBwZXItc3RyZWFtIGNvbnRleHQgKi8KLQlNZW1vcnlDb250ZXh0UmVz ZXQoTG9naWNhbFN0cmVhbWluZ0NvbnRleHQpOworCQkvKiBSZXNldCBwZXItc3RyZWFtIGNvbnRl eHQgKi8KKwkJTWVtb3J5Q29udGV4dFJlc2V0KExvZ2ljYWxTdHJlYW1pbmdDb250ZXh0KTsKKwl9 CisKKwlpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZhbHNlOworCXN0cmVhbV9hcHBseV93b3Jr ZXIgPSBOVUxMOwogCiAJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsK IAlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKIH0KIAogLyoKLSAqIEhhbmRsZSBT VFJFQU0gYWJvcnQgbWVzc2FnZS4KKyAqIEhhbmRsZSBTVFJFQU0gQUJPUlQgbWVzc2FnZSB3aGVu IHRoZSB0cmFuc2FjdGlvbiB3YXMgc3BpbGxlZCB0byBkaXNrLgogICovCiBzdGF0aWMgdm9pZAot YXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIHMpCitzZXJpYWxpemVfc3RyZWFt X2Fib3J0KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFuc2FjdGlvbklkIHN1YnhpZCkKIHsKLQlUcmFu c2FjdGlvbklkIHhpZDsKLQlUcmFuc2FjdGlvbklkIHN1YnhpZDsKLQotCWlmIChpbl9zdHJlYW1l ZF90cmFuc2FjdGlvbikKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX1BS T1RPQ09MX1ZJT0xBVElPTiksCi0JCQkJIGVycm1zZ19pbnRlcm5hbCgiU1RSRUFNIEFCT1JUIG1l c3NhZ2Ugd2l0aG91dCBTVFJFQU0gU1RPUCIpKSk7Ci0KLQlsb2dpY2FscmVwX3JlYWRfc3RyZWFt X2Fib3J0KHMsICZ4aWQsICZzdWJ4aWQpOwotCiAJLyoKIAkgKiBJZiB0aGUgdHdvIFhJRHMgYXJl IHRoZSBzYW1lLCBpdCdzIGluIGZhY3QgYWJvcnQgb2YgdG9wbGV2ZWwgeGFjdCwgc28KIAkgKiBq dXN0IGRlbGV0ZSB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGluZm8uCkBAIC0xMzM5LDggKzE3 NjIsMTIwIEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBzKQogCQllbmRf cmVwbGljYXRpb25fc3RlcCgpOwogCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAl9Cit9 CiAKLQlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKKy8qCisgKiBIYW5kbGUgU1RS RUFNIEFCT1JUIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVfc3RyZWFt X2Fib3J0KFN0cmluZ0luZm8gcykKK3sKKwlUcmFuc2FjdGlvbklkIHhpZDsKKwlUcmFuc2FjdGlv bklkIHN1YnhpZDsKKworCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJIGVy cm1zZ19pbnRlcm5hbCgiU1RSRUFNIENPTU1JVCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUT1Ai KSkpOworCisJbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9ydChzLCAmeGlkLCAmc3VieGlkKTsK KworCWlmIChhbV9hcHBseV9iZ3dvcmtlcigpKQorCXsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVy cm1zZygiW0FwcGx5IEJHVyAjJXVdIGFib3J0aW5nIGN1cnJlbnQgdHJhbnNhY3Rpb24geGlkPSV1 LCBzdWJ4aWQ9JXUiLAorCQkJCU15UGFyYWxsZWxTdGF0ZS0+biwgR2V0Q3VycmVudFRyYW5zYWN0 aW9uSWRJZkFueSgpLCBHZXRDdXJyZW50U3ViVHJhbnNhY3Rpb25JZCgpKSkpOworCisJCS8qCisJ CSAqIElmIHRoZSB0d28gWElEcyBhcmUgdGhlIHNhbWUsIGl0J3MgaW4gZmFjdCBhYm9ydCBvZiB0 b3BsZXZlbCB4YWN0LAorCQkgKiBzbyBqdXN0IGZyZWUgdGhlIHN1YnhhY3RsaXN0LgorCQkgKi8K KwkJaWYgKHN1YnhpZCA9PSB4aWQpCisJCXsKKwkJCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hh Y3Qoc3VieGlkLCBJbnZhbGlkWExvZ1JlY1B0cik7CisKKwkJCUFib3J0Q3VycmVudFRyYW5zYWN0 aW9uKCk7CisKKwkJCUVuZFRyYW5zYWN0aW9uQmxvY2soZmFsc2UpOworCQkJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisKKwkJCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCisJ CQlsaXN0X2ZyZWUoc3VieGFjdGxpc3QpOworCQkJc3VieGFjdGxpc3QgPSBOSUw7CisKKwkJCWFw cGx5X2Jnd29ya2VyX3NldF9zdGF0ZShBUFBMWV9CR1dPUktFUl9GSU5JU0hFRCk7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQkvKgorCQkJICogT0ssIHNvIGl0J3MgYSBzdWJ4YWN0LiBSb2xsYmFjayB0 byB0aGUgc2F2ZXBvaW50LgorCQkJICoKKwkJCSAqIFdlIGFsc28gbmVlZCB0byByZWFkIHRoZSBz dWJ4YWN0bGlzdCwgZGV0ZXJtaW5lIHRoZSBvZmZzZXQKKwkJCSAqIHRyYWNrZWQgZm9yIHRoZSBz dWJ4YWN0LCBhbmQgdHJ1bmNhdGUgdGhlIGxpc3QuCisJCQkgKi8KKwkJCWludAkJaTsKKwkJCWJv b2wJZm91bmQgPSBmYWxzZTsKKwkJCWNoYXIJc3BuYW1lW01BWFBHUEFUSF07CisKKwkJCXNldF9h cHBseV9lcnJvcl9jb250ZXh0X3hhY3Qoc3VieGlkLCBJbnZhbGlkWExvZ1JlY1B0cik7CisJCQlz bnByaW50ZihzcG5hbWUsIE1BWFBHUEFUSCwgInNhdmVwb2ludF9mb3JfeGlkXyV1Iiwgc3VieGlk KTsKKworCQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJtc2coIltBcHBseSBCR1cgIyV1XSByb2xs aW5nIGJhY2sgdG8gc2F2ZXBvaW50ICVzIiwKKwkJCQkJTXlQYXJhbGxlbFN0YXRlLT5uLCBzcG5h bWUpKSk7CisKKwkJCWZvcihpID0gbGlzdF9sZW5ndGgoc3VieGFjdGxpc3QpIC0gMTsgaSA+PSAw OyBpLS0pCisJCQl7CisJCQkJeGlkID0gKFRyYW5zYWN0aW9uSWQpIGxpc3RfbnRoX2ludChzdWJ4 YWN0bGlzdCwgaSk7CisJCQkJaWYgKHhpZCA9PSBzdWJ4aWQpCisJCQkJeworCQkJCQlmb3VuZCA9 IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGZvdW5kKQorCQkJewor CQkJCWVsb2coTE9HLCAicm9sbGVkIGJhY2sgdG8gc2F2ZXBvaW50ICVzIiwgc3BuYW1lKTsKKwkJ CQlSb2xsYmFja1RvU2F2ZXBvaW50KHNwbmFtZSk7CisJCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21t YW5kKCk7CisJCQkJc3VieGFjdGxpc3QgPSBsaXN0X3RydW5jYXRlKHN1YnhhY3RsaXN0LCBpICsg MSk7CisJCQl9CisKKwkJCWFwcGx5X2Jnd29ya2VyX3NldF9zdGF0ZShBUFBMWV9CR1dPUktFUl9S RUFEWSk7CisJCX0KKworCQlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKKwl9CisJ ZWxzZQorCXsKKwkJV29ya2VyU3RhdGUgKndzdGF0ZSA9IGZpbmRfb3Jfc3RhcnRfYXBwbHlfYmd3 b3JrZXIoeGlkLCBmYWxzZSk7CisKKwkJLyoKKwkJICogSWYgd2UgYXJlIGluIG1haW4gYXBwbHkg d29ya2VyLCBjaGVjayBpZiB3ZSBhcmUgcHJvY2Vzc2luZyB0aGlzCisJCSAqIHRyYW5zYWN0aW9u IGluIGEgYmd3b3JrZXIuCisJCSAqLworCQlpZiAod3N0YXRlKQorCQl7CisJCQlhcHBseV9iZ3dv cmtlcl9zZW5kX2RhdGEod3N0YXRlLCBzLT5sZW4sIHMtPmRhdGEpOworCisJCQlpZiAoc3VieGlk ID09IHhpZCkKKwkJCXsKKwkJCQlhcHBseV9iZ3dvcmtlcl93YWl0X2Zvcih3c3RhdGUsIEFQUExZ X0JHV09SS0VSX0ZJTklTSEVEKTsKKwkJCQlhcHBseV9iZ3dvcmtlcl9mcmVlKHdzdGF0ZSk7CisJ CQl9CisJCQllbHNlCisJCQkJYXBwbHlfYmd3b3JrZXJfd2FpdF9mb3Iod3N0YXRlLCBBUFBMWV9C R1dPUktFUl9SRUFEWSk7CisJCX0KKworCQkvKgorCQkgKiBXZSBhcmUgaW4gbWFpbiBhcHBseSB3 b3JrZXIgYW5kIHRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbiBzZXJpYWxpemVkCisJCSAqIHRvIGZp bGUuCisJCSAqLworCQllbHNlCisJCQlzZXJpYWxpemVfc3RyZWFtX2Fib3J0KHhpZCwgc3VieGlk KTsKKwl9CiB9CiAKIC8qCkBAIC0xNDYzLDQwICsxOTk4LDYgQEAgYXBwbHlfc3Bvb2xlZF9tZXNz YWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCiB9CiAKIC8qCi0gKiBIYW5k bGUgU1RSRUFNIENPTU1JVCBtZXNzYWdlLgotICovCi1zdGF0aWMgdm9pZAotYXBwbHlfaGFuZGxl X3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBzKQotewotCVRyYW5zYWN0aW9uSWQgeGlkOwotCUxv Z2ljYWxSZXBDb21taXREYXRhIGNvbW1pdF9kYXRhOwotCi0JaWYgKGluX3N0cmVhbWVkX3RyYW5z YWN0aW9uKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xf VklPTEFUSU9OKSwKLQkJCQkgZXJybXNnX2ludGVybmFsKCJTVFJFQU0gQ09NTUlUIG1lc3NhZ2Ug d2l0aG91dCBTVFJFQU0gU1RPUCIpKSk7Ci0KLQl4aWQgPSBsb2dpY2FscmVwX3JlYWRfc3RyZWFt X2NvbW1pdChzLCAmY29tbWl0X2RhdGEpOwotCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3Qo eGlkLCBjb21taXRfZGF0YS5jb21taXRfbHNuKTsKLQotCWVsb2coREVCVUcxLCAicmVjZWl2ZWQg Y29tbWl0IGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIsIHhpZCk7Ci0KLQlhcHBseV9zcG9v bGVkX21lc3NhZ2VzKHhpZCwgY29tbWl0X2RhdGEuY29tbWl0X2xzbik7Ci0KLQlhcHBseV9oYW5k bGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7Ci0KLQkvKiB1bmxpbmsgdGhlIGZpbGVz IHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8gKi8KLQlzdHJlYW1fY2xl YW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOwotCi0JLyogUHJvY2Vz cyBhbnkgdGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4gKi8K LQlwcm9jZXNzX3N5bmNpbmdfdGFibGVzKGNvbW1pdF9kYXRhLmVuZF9sc24pOwotCi0JcGdzdGF0 X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKLQotCXJlc2V0X2FwcGx5X2Vycm9y X2NvbnRleHRfaW5mbygpOwotfQotCi0vKgogICogSGVscGVyIGZ1bmN0aW9uIGZvciBhcHBseV9o YW5kbGVfY29tbWl0IGFuZCBhcHBseV9oYW5kbGVfc3RyZWFtX2NvbW1pdC4KICAqLwogc3RhdGlj IHZvaWQKQEAgLTI0NDUsNiArMjk0NiwxMDEgQEAgYXBwbHlfaGFuZGxlX3RydW5jYXRlKFN0cmlu Z0luZm8gcykKIAllbmRfcmVwbGljYXRpb25fc3RlcCgpOwogfQogCisvKgorICogSGFuZGxlIFNU UkVBTSBDT01NSVQgbWVzc2FnZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGx5X2hhbmRsZV9zdHJl YW1fY29tbWl0KFN0cmluZ0luZm8gcykKK3sKKwlMb2dpY2FsUmVwQ29tbWl0RGF0YSBjb21taXRf ZGF0YTsKKwlUcmFuc2FjdGlvbklkIHhpZDsKKworCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlv bikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xB VElPTiksCisJCQkJIGVycm1zZ19pbnRlcm5hbCgiU1RSRUFNIENPTU1JVCBtZXNzYWdlIHdpdGhv dXQgU1RSRUFNIFNUT1AiKSkpOworCisJeGlkID0gcHFfZ2V0bXNnaW50KHMsIDQpOworCWxvZ2lj YWxyZXBfcmVhZF9zdHJlYW1fY29tbWl0KHMsICZjb21taXRfZGF0YSk7CisJc2V0X2FwcGx5X2Vy cm9yX2NvbnRleHRfeGFjdCh4aWQsIGNvbW1pdF9kYXRhLmNvbW1pdF9sc24pOworCisJZWxvZyhE RUJVRzEsICJyZWNlaXZlZCBjb21taXQgZm9yIHN0cmVhbWVkIHRyYW5zYWN0aW9uICV1IiwgeGlk KTsKKworCWlmIChhbV9hcHBseV9iZ3dvcmtlcigpKQorCXsKKwkJLyoKKwkJICogVXBkYXRlIG9y aWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFydCBzdHJlYW1pbmcgZnJvbSBjb3JyZWN0CisJCSAq IHBvc2l0aW9uIGluIGNhc2Ugb2YgY3Jhc2guCisJCSAqLworCQlyZXBsb3JpZ2luX3Nlc3Npb25f b3JpZ2luX2xzbiA9IGNvbW1pdF9kYXRhLmVuZF9sc247CisJCXJlcGxvcmlnaW5fc2Vzc2lvbl9v cmlnaW5fdGltZXN0YW1wID0gY29tbWl0X2RhdGEuY29tbWl0dGltZTsKKworCQlDb21taXRUcmFu c2FjdGlvbkNvbW1hbmQoKTsKKwkJRW5kVHJhbnNhY3Rpb25CbG9jayhmYWxzZSk7CisJCUNvbW1p dFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNl OworCisJCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CisKKwkJbGlzdF9mcmVlKHN1YnhhY3Rs aXN0KTsKKwkJc3VieGFjdGxpc3QgPSBOSUw7CisKKwkJYXBwbHlfYmd3b3JrZXJfc2V0X3N0YXRl KEFQUExZX0JHV09SS0VSX0ZJTklTSEVEKTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogSWYg d2UgYXJlIGluIG1haW4gYXBwbHkgd29ya2VyLCBjaGVjayBpZiB3ZSBhcmUgcHJvY2Vzc2luZyB0 aGlzCisJCSAqIHRyYW5zYWN0aW9uIGluIGEgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIuCisJCSAq LworCQlXb3JrZXJTdGF0ZSAqd3N0YXRlID0gZmluZF9vcl9zdGFydF9hcHBseV9iZ3dvcmtlcih4 aWQsIGZhbHNlKTsKKworCQlpZiAod3N0YXRlKQorCQl7CisJCQkvKiBTZW5kIGNvbW1pdCBtZXNz YWdlICovCisJCQlhcHBseV9iZ3dvcmtlcl9zZW5kX2RhdGEod3N0YXRlLCBzLT5sZW4sIHMtPmRh dGEpOworCisJCQkvKiBXYWl0IGZvciBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciB0byBmaW5pc2gg Ki8KKwkJCWFwcGx5X2Jnd29ya2VyX3dhaXRfZm9yKHdzdGF0ZSwgQVBQTFlfQkdXT1JLRVJfRklO SVNIRUQpOworCisJCQlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2UpOworCQkJc3RvcmVfZmx1c2hf cG9zaXRpb24oY29tbWl0X2RhdGEuZW5kX2xzbik7CisJCQlzdG9wX3NraXBwaW5nX2NoYW5nZXMo KTsKKworCQkJYXBwbHlfYmd3b3JrZXJfZnJlZSh3c3RhdGUpOworCisJCQkvKgorCQkJICogVGhl IHRyYW5zYWN0aW9uIGlzIGVpdGhlciBub24tZW1wdHkgb3Igc2tpcHBlZCwgc28gd2UgY2xlYXIg dGhlCisJCQkgKiBzdWJza2lwbHNuLgorCQkJICovCisJCQljbGVhcl9zdWJzY3JpcHRpb25fc2tp cF9sc24oY29tbWl0X2RhdGEuY29tbWl0X2xzbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgor CQkJICogSWYgd2UgYXJlIGluIG1haW4gYXBwbHkgd29ya2VyIGFuZCB0aGUgdHJhbnNhY3Rpb24g aGFzIGJlZW4KKwkJCSAqIHNlcmlhbGl6ZWQgdG8gZmlsZSwgcmVwbGF5IGFsbCB0aGUgc3Bvb2xl ZCBvcGVyYXRpb25zLgorCQkJICovCisJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHhpZCwgY29t bWl0X2RhdGEuY29tbWl0X2xzbik7CisKKwkJCWFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwo JmNvbW1pdF9kYXRhKTsKKworCQkJLyogdW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQg Y2hhbmdlcyBhbmQgc3VieGFjdCBpbmZvICovCisJCQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxv Z2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOworCQl9CisJfQorCisJLyogQ2hlY2sgdGhlIHN0 YXR1cyBvZiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciBpZiBhbnkuICovCisJYXBwbHlfYmd3b3Jr ZXJfY2hlY2tfc3RhdHVzKCk7CisKKwkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVp bmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLworCXByb2Nlc3Nfc3luY2luZ190YWJsZXMo Y29tbWl0X2RhdGEuZW5kX2xzbik7CisKKwlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lE TEUsIE5VTEwpOworCisJcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKCk7Cit9CiAKIC8q CiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9uIHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0Y2hlci4KQEAg LTI1MTEsNiArMzEwNyw4IEBAIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcykKIAkJCWJyZWFr OwogCiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVEFSVDoKKwkJCS8qIEZJWE1FIDog bG9nIGZvciBkZWJ1Z2dpbmcgaGVyZS4gKi8KKwkJCWVsb2coTE9HLCAiTE9HSUNBTF9SRVBfTVNH X1NUUkVBTV9TVEFSVCIpOwogCQkJYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChzKTsKIAkJCWJy ZWFrOwogCkBAIC0yNjE4LDYgKzMyMTYsMTAgQEAgc3RvcmVfZmx1c2hfcG9zaXRpb24oWExvZ1Jl Y1B0ciByZW1vdGVfbHNuKQogewogCUZsdXNoUG9zaXRpb24gKmZsdXNocG9zOwogCisJLyogV2Ug b25seSBuZWVkIHRvIGNvbGxlY3QgdGhlIExTTiBpbiBtYWluIGFwcGx5IHdvcmtlciAqLworCWlm IChhbV9hcHBseV9iZ3dvcmtlcigpKQorCQlyZXR1cm47CisKIAkvKiBOZWVkIHRvIGRvIHRoaXMg aW4gcGVybWFuZW50IGNvbnRleHQgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250 ZXh0KTsKIApAQCAtMjc5NCw2ICszMzk2LDkgQEAgTG9naWNhbFJlcEFwcGx5TG9vcChYTG9nUmVj UHRyIGxhc3RfcmVjZWl2ZWQpCiAJCQlBY2NlcHRJbnZhbGlkYXRpb25NZXNzYWdlcygpOwogCQkJ bWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbigpOwogCisJCQkvKiBDaGVjayB0aGUgc3RhdHVzIG9m IGFwcGx5IGJhY2tncm91bmQgd29ya2VyIGlmIGFueS4gKi8KKwkJCWFwcGx5X2Jnd29ya2VyX2No ZWNrX3N0YXR1cygpOworCiAJCQkvKiBQcm9jZXNzIGFueSB0YWJsZSBzeW5jaHJvbml6YXRpb24g Y2hhbmdlcy4gKi8KIAkJCXByb2Nlc3Nfc3luY2luZ190YWJsZXMobGFzdF9yZWNlaXZlZCk7CiAJ CX0KQEAgLTM2ODYsNyArNDI5MSw3IEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykK IAkJb3JpZ2luaWQgPSByZXBsb3JpZ2luX2J5X25hbWUob3JpZ2lubmFtZSwgdHJ1ZSk7CiAJCWlm ICghT2lkSXNWYWxpZChvcmlnaW5pZCkpCiAJCQlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fY3JlYXRl KG9yaWdpbm5hbWUpOwotCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQpOworCQly ZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIHRydWUpOwogCQlyZXBsb3JpZ2luX3Nl c3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJCW9yaWdpbl9zdGFydHBvcyA9IHJlcGxvcmlnaW5f c2Vzc2lvbl9nZXRfcHJvZ3Jlc3MoZmFsc2UpOwogCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQo KTsKQEAgLTM3MzMsNyArNDMzOCw3IEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykK IAogCW9wdGlvbnMucHJvdG8ubG9naWNhbC5wdWJsaWNhdGlvbl9uYW1lcyA9IE15U3Vic2NyaXB0 aW9uLT5wdWJsaWNhdGlvbnM7CiAJb3B0aW9ucy5wcm90by5sb2dpY2FsLmJpbmFyeSA9IE15U3Vi c2NyaXB0aW9uLT5iaW5hcnk7Ci0Jb3B0aW9ucy5wcm90by5sb2dpY2FsLnN0cmVhbWluZyA9IE15 U3Vic2NyaXB0aW9uLT5zdHJlYW07CisJb3B0aW9ucy5wcm90by5sb2dpY2FsLnN0cmVhbWluZyA9 IChNeVN1YnNjcmlwdGlvbi0+c3RyZWFtICE9IFNVQlNUUkVBTV9PRkYpOwogCW9wdGlvbnMucHJv dG8ubG9naWNhbC50d29waGFzZSA9IGZhbHNlOwogCiAJaWYgKCFhbV90YWJsZXN5bmNfd29ya2Vy KCkpCkBAIC0zODkxLDcgKzQ0OTYsOCBAQCBjbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24oWExv Z1JlY1B0ciBmaW5pc2hfbHNuKQogCVhMb2dSZWNQdHIJbXlza2lwbHNuID0gTXlTdWJzY3JpcHRp b24tPnNraXBsc247CiAJYm9vbAkJc3RhcnRlZF90eCA9IGZhbHNlOwogCi0JaWYgKGxpa2VseShY TG9nUmVjUHRySXNJbnZhbGlkKG15c2tpcGxzbikpKQorCWlmIChsaWtlbHkoWExvZ1JlY1B0cklz SW52YWxpZChteXNraXBsc24pKSB8fAorCQlhbV9hcHBseV9iZ3dvcmtlcigpKQogCQlyZXR1cm47 CiAKIAlpZiAoIUlzVHJhbnNhY3Rpb25TdGF0ZSgpKQpAQCAtNDAyNywzICs0NjMzLDUyOSBAQCBy ZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8odm9pZCkKIAlhcHBseV9lcnJvcl9jYWxsYmFj a19hcmcucmVtb3RlX2F0dG51bSA9IC0xOwogCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3Qo SW52YWxpZFRyYW5zYWN0aW9uSWQsIEludmFsaWRYTG9nUmVjUHRyKTsKIH0KKworLyogQXBwbHkg QmFja2dyb3VuZCBXb3JrZXIgbWFpbiBsb29wICovCitzdGF0aWMgdm9pZAorTG9naWNhbEFwcGx5 Qmd3TG9vcChzaG1fbXFfaGFuZGxlICptcWgsIHZvbGF0aWxlIFBhcmFsbGVsU3RhdGUgKnBzdCkK K3sKKwlzaG1fbXFfcmVzdWx0CQlzaG1xX3JlczsKKwlQR1BST0MJCQkJKnJlZ2lzdHJhbnQ7CisJ RXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisJWExvZ1JlY1B0cgkJCWxhc3RfcmVj ZWl2ZWQgPSBJbnZhbGlkWExvZ1JlY1B0cjsKKworCXJlZ2lzdHJhbnQgPSBCYWNrZW5kUGlkR2V0 UHJvYyhNeUJnd29ya2VyRW50cnktPmJnd19ub3RpZnlfcGlkKTsKKwlTZXRMYXRjaCgmcmVnaXN0 cmFudC0+cHJvY0xhdGNoKTsKKworCS8qCisJICogUHVzaCBhcHBseSBlcnJvciBjb250ZXh0IGNh bGxiYWNrLiBGaWVsZHMgd2lsbCBiZSBmaWxsZWQgZHVyaW5nCisJICogYXBwbHlpbmcgYSBjaGFu Z2UuCisJICovCisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBhcHBseV9lcnJvcl9jYWxsYmFjazsK KwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29u dGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCWZvciAoOzspCisJeworCQl2b2lkICpkYXRh OworCQlTaXplICBsZW47CisJCVN0cmluZ0luZm9EYXRhIHM7CisJCU1lbW9yeUNvbnRleHQJb2xk Y3R4OworCQlYTG9nUmVjUHRyCXN0YXJ0X2xzbjsKKwkJWExvZ1JlY1B0cgllbmRfbHNuOworCQlU aW1lc3RhbXBUeiBzZW5kX3RpbWU7CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkv KiBFbnN1cmUgd2UgYXJlIHJlYWRpbmcgdGhlIGRhdGEgaW50byBvdXIgbWVtb3J5IGNvbnRleHQu ICovCisJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseU1lc3NhZ2VDb250ZXh0 KTsKKworCQlzaG1xX3JlcyA9IHNobV9tcV9yZWNlaXZlKG1xaCwgJmxlbiwgJmRhdGEsIGZhbHNl KTsKKworCQlpZiAoc2htcV9yZXMgIT0gU0hNX01RX1NVQ0NFU1MpCisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRF KSwKKwkJCQkJIGVycm1zZygibG9zdCBjb25uZWN0aW9uIHRvIHRoZSBtYWluIGFwcGx5IHdvcmtl ciIpKSk7CisKKwkJaWYgKGxlbiA9PSAwKQorCQl7CisJCQllbG9nKExPRywgIltBcHBseSBCR1cg IyV1XSBnb3QgemVyby1sZW5ndGggbWVzc2FnZSwgc3RvcHBpbmciLCBwc3QtPm4pOworCQkJYnJl YWs7CisJCX0KKworCQlzLmN1cnNvciA9IDA7CisJCXMubWF4bGVuID0gLTE7CisJCXMuZGF0YSA9 IChjaGFyICopIGRhdGE7CisJCXMubGVuID0gbGVuOworCisJCS8qCisJCSAqIFdlIHVzZSBmaXJz dCBieXRlIG9mIG1lc3NhZ2UgZm9yIGFkZGl0aW9uYWwgY29tbXVuaWNhdGlvbiBiZXR3ZWVuCisJ CSAqIG1haW4gTG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgYW5kIGFwcGx5IGJnd29ya2Vycywg c28gaWYgaXQKKwkJICogZGlmZmVycyBmcm9tICd3JywgdGhlbiBwcm9jZXNzIGl0IGZpcnN0Lgor CQkgKi8KKwkJc3dpdGNoIChwcV9nZXRtc2dieXRlKCZzKSkKKwkJeworCQkJLyogRW5kIG1lc3Nh Z2Ugb2Ygc3RyZWFtaW5nIGNodW5rICovCisJCQljYXNlIExPR0lDQUxfUkVQX01TR19TVFJFQU1f U1RPUDoKKwkJCQllbG9nKExPRywgIltBcHBseSBCR1cgIyV1XSBlbmRlZCBwcm9jZXNzaW5nIHN0 cmVhbWluZyBjaHVuaywiCisJCQkJCQkgICJ3YWl0aW5nIG9uIHNobV9tcV9yZWNlaXZlIiwgcHN0 LT5uKTsKKworCQkJCWFwcGx5X2Jnd29ya2VyX3NldF9zdGF0ZShBUFBMWV9CR1dPUktFUl9SRUFE WSk7CisKKwkJCQlTZXRMYXRjaCgmcmVnaXN0cmFudC0+cHJvY0xhdGNoKTsKKworCQkJCWluX3N0 cmVhbWVkX3RyYW5zYWN0aW9uID0gZmFsc2U7CisJCQkJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShT VEFURV9JRExFLCBOVUxMKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ3cnOgorCQkJCWJyZWFr OworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBtZXNzYWdlIik7CisJ CQkJYnJlYWs7CisJCX0KKworCQlzdGFydF9sc24gPSBwcV9nZXRtc2dpbnQ2NCgmcyk7CisJCWVu ZF9sc24gPSBwcV9nZXRtc2dpbnQ2NCgmcyk7CisJCXNlbmRfdGltZSA9IHBxX2dldG1zZ2ludDY0 KCZzKTsKKworCQlpZiAobGFzdF9yZWNlaXZlZCA8IHN0YXJ0X2xzbikKKwkJCWxhc3RfcmVjZWl2 ZWQgPSBzdGFydF9sc247CisKKwkJaWYgKGxhc3RfcmVjZWl2ZWQgPCBlbmRfbHNuKQorCQkJbGFz dF9yZWNlaXZlZCA9IGVuZF9sc247CisKKwkJLyoKKwkJICogVE8gSU1QUk9WRTogRG8gd2UgbmVl ZCB0byBkaXNwbGF5IHRoZSBiZ3dvcmtlcidzIGluZm9ybWF0aW9uIGluCisJCSAqIHBnX3N0YXRf cmVwbGljYXRpb24gPworCQkgKi8KKwkJVXBkYXRlV29ya2VyU3RhdHMobGFzdF9yZWNlaXZlZCwg c2VuZF90aW1lLCBmYWxzZSk7CisKKwkJYXBwbHlfZGlzcGF0Y2goJnMpOworCisJCWlmIChDb25m aWdSZWxvYWRQZW5kaW5nKQorCQl7CisJCQlDb25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7CisJ CQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKKwkJfQorCisJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjdHgpOworCQlNZW1vcnlDb250ZXh0UmVzZXQoQXBwbHlNZXNzYWdlQ29udGV4 dCk7CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCU1l bW9yeUNvbnRleHRSZXNldChBcHBseUNvbnRleHQpOworCisJLyogUG9wIHRoZSBlcnJvciBjb250 ZXh0IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3Vz OworCisJZWxvZyhMT0csICJbQXBwbHkgQkdXICMldV0gZXhpdGluZyIsIHBzdC0+bik7CisKKwkv KiBTaWduYWwgbWFpbiBwcm9jZXNzIHRoYXQgd2UgYXJlIGRvbmUuICovCisJU2V0TGF0Y2goJnJl Z2lzdHJhbnQtPnByb2NMYXRjaCk7Cit9CisKKy8qCisgKiBTZXQgdGhlIGZhaWxlZCBmbGFnIHNv IHRoYXQgdGhlIG1haW4gYXBwbHkgd29ya2VyIGNhbiByZWFsaXplIHdlIGhhdmUKKyAqIHNodXRk b3duLgorICovCitzdGF0aWMgdm9pZAorQXBwbHlCZ3dTaHV0ZG93bihpbnQgY29kZSwgRGF0dW0g YXJnKQoreworCVNwaW5Mb2NrQWNxdWlyZSgmTXlQYXJhbGxlbFN0YXRlLT5tdXRleCk7CisJTXlQ YXJhbGxlbFN0YXRlLT5zdGF0ZSA9IEFQUExZX0JHV09SS0VSX0VYSVQ7CisJU3BpbkxvY2tSZWxl YXNlKCZNeVBhcmFsbGVsU3RhdGUtPm11dGV4KTsKKworCWRzbV9kZXRhY2goKGRzbV9zZWdtZW50 ICopIERhdHVtR2V0UG9pbnRlcihhcmcpKTsKK30KKworLyoKKyAqIEFwcGx5IEJhY2tncm91bmQg V29ya2VyIGVudHJ5IHBvaW50CisgKi8KK3ZvaWQKK0FwcGx5Qmd3b3JrZXJNYWluKERhdHVtIG1h aW5fYXJnKQoreworCXZvbGF0aWxlIFBhcmFsbGVsU3RhdGUgKnBzdDsKKworCWRzbV9oYW5kbGUJ CQloYW5kbGU7CisJZHNtX3NlZ21lbnQJCQkqc2VnOworCXNobV90b2MJCQkJKnRvYzsKKwlzaG1f bXEJCQkJKm1xOworCXNobV9tcV9oYW5kbGUJCSptcWg7CisJTWVtb3J5Q29udGV4dAkJIG9sZGNv bnRleHQ7CisJUmVwT3JpZ2luSWQJCQlvcmlnaW5pZDsKKwlpbnQJCQl3b3JrZXJfc2xvdCA9IERh dHVtR2V0SW50MzIobWFpbl9hcmcpOworCWNoYXIJCW9yaWdpbm5hbWVbTkFNRURBVEFMRU5dOwor CisJLyogQXR0YWNoIHRvIHNsb3QgKi8KKwlsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2god29ya2Vy X3Nsb3QpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCisJ LyogTG9hZCB0aGUgc3Vic2NyaXB0aW9uIGludG8gcGVyc2lzdGVudCBtZW1vcnkgY29udGV4dC4g Ki8KKwlBcHBseUNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29udGV4 dCwKKwkJCQkJCQkJCQkgIkFwcGx5Q29udGV4dCIsCisJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFV TFRfU0laRVMpOworCisJLyoKKwkgKiBJbml0IHRoZSBBcHBseU1lc3NhZ2VDb250ZXh0IHdoaWNo IHdlIGNsZWFuIHVwIGFmdGVyIGVhY2ggcmVwbGljYXRpb24KKwkgKiBwcm90b2NvbCBtZXNzYWdl LgorCSAqLworCUFwcGx5TWVzc2FnZUNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQXBw bHlDb250ZXh0LAorCQkJCQkJCQkJCQkJIkFwcGx5TWVzc2FnZUNvbnRleHQiLAorCQkJCQkJCQkJ CQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwkvKiBTZXR1cCBzaWduYWwgaGFuZGxpbmcg Ki8KKwlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQpOworCXBx c2lnbmFsKFNJR1RFUk0sIGRpZSk7CisJQmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7 CisKKwkvKgorCSAqIENvbm5lY3QgdG8gdGhlIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50 LgorCSAqCisJICogVGhlIGJhY2tlbmQgdGhhdCByZWdpc3RlcmVkIHRoaXMgd29ya2VyIHBhc3Nl ZCB1cyB0aGUgSUQgb2YgYSBzaGFyZWQKKwkgKiBtZW1vcnkgc2VnbWVudCB0byB3aGljaCB3ZSBt dXN0IGF0dGFjaCBmb3IgZnVydGhlciBpbnN0cnVjdGlvbnMuICBJbgorCSAqIG9yZGVyIHRvIGF0 dGFjaCB0byBkeW5hbWljIHNoYXJlZCBtZW1vcnksIHdlIG5lZWQgYSByZXNvdXJjZSBvd25lci4K KwkgKiBPbmNlIHdlJ3ZlIG1hcHBlZCB0aGUgc2VnbWVudCBpbiBvdXIgYWRkcmVzcyBzcGFjZSwg YXR0YWNoIHRvIHRoZSB0YWJsZQorCSAqIG9mIGNvbnRlbnRzIHNvIHdlIGNhbiBsb2NhdGUgdGhl IHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzIHdlJ2xsIG5lZWQgdG8KKwkgKiBmaW5kIHdpdGhpbiB0 aGUgc2VnbWVudC4KKwkgKi8KKwlDdXJyZW50UmVzb3VyY2VPd25lciA9IFJlc291cmNlT3duZXJD cmVhdGUoTlVMTCwgIkxvZ2ljYWwgYXBwbHkgd29ya2VyIik7CisJbWVtY3B5KCZoYW5kbGUsIE15 Qmd3b3JrZXJFbnRyeS0+Ymd3X2V4dHJhLCBzaXplb2YoZHNtX2hhbmRsZSkpOworCXNlZyA9IGRz bV9hdHRhY2goaGFuZGxlKTsKKwlpZiAoc2VnID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJ CQkJIGVycm1zZygidW5hYmxlIHRvIG1hcCBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudCIp KSk7CisJdG9jID0gc2htX3RvY19hdHRhY2goUEdfTE9HSUNBTF9BUFBMWV9TSE1fTUFHSUMsIGRz bV9zZWdtZW50X2FkZHJlc3Moc2VnKSk7CisJaWYgKHRvYyA9PSBOVUxMKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RB VEUpLAorCQkJCSBlcnJtc2coImJhZCBtYWdpYyBudW1iZXIgaW4gZHluYW1pYyBzaGFyZWQgbWVt b3J5IHNlZ21lbnQiKSkpOworCisJYmVmb3JlX3NobWVtX2V4aXQoQXBwbHlCZ3dTaHV0ZG93biwg UG9pbnRlckdldERhdHVtKHNlZykpOworCisJLyogTG9vayB1cCB0aGUgcGFyYWxsZWwgc3RhdGUu ICovCisJcHN0ID0gc2htX3RvY19sb29rdXAodG9jLCAwLCBmYWxzZSk7CisJTXlQYXJhbGxlbFN0 YXRlID0gcHN0OworCisJLyoKKwkgKiBBdHRhY2ggdG8gdGhlIG1lc3NhZ2UgcXVldWUuCisJICov CisJbXEgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIDEsIGZhbHNlKTsKKwlzaG1fbXFfc2V0X3JlY2Vp dmVyKG1xLCBNeVByb2MpOworCW1xaCA9IHNobV9tcV9hdHRhY2gobXEsIHNlZywgTlVMTCk7CisK KwkvKiBDb25uZWN0IHRvIG91ciBkYXRhYmFzZS4gKi8KKwlCYWNrZ3JvdW5kV29ya2VySW5pdGlh bGl6ZUNvbm5lY3Rpb25CeU9pZChNeUxvZ2ljYWxSZXBXb3JrZXItPmRiaWQsCisJCQkJCQkJCQkJ CSAgTXlMb2dpY2FsUmVwV29ya2VyLT51c2VyaWQsCisJCQkJCQkJCQkJCSAgMCk7CisKKwkvKgor CSAqIFNldCB0aGUgY2xpZW50IGVuY29kaW5nIHRvIHRoZSBkYXRhYmFzZSBlbmNvZGluZywgc2lu Y2UgdGhhdCBpcyB3aGF0CisJICogdGhlIGxlYWRlciB3aWxsIGV4cGVjdC4KKwkgKi8KKwlTZXRD bGllbnRFbmNvZGluZyhHZXREYXRhYmFzZUVuY29kaW5nKCkpOworCisJc3RyZWFtX3hpZCA9IHBz dC0+c3RyZWFtX3hpZDsKKworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJb2xkY29udGV4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNvbnRleHQpOworCisJTXlTdWJzY3JpcHRp b24gPSBHZXRTdWJzY3JpcHRpb24oTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgdHJ1ZSk7CisJ aWYgKCFNeVN1YnNjcmlwdGlvbikKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2coImxv Z2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUgd2lsbCBu b3QgIgorCQkJCQkJInN0YXJ0IGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMgcmVtb3ZlZCBk dXJpbmcgc3RhcnR1cCIsCisJCQkJCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkKSkpOworCQlw cm9jX2V4aXQoMCk7CisJfQorCisJTXlTdWJzY3JpcHRpb25WYWxpZCA9IHRydWU7CisJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJLyogU2V0dXAgc3luY2hyb25vdXMgY29t bWl0IGFjY29yZGluZyB0byB0aGUgdXNlcidzIHdpc2hlcyAqLworCVNldENvbmZpZ09wdGlvbigi c3luY2hyb25vdXNfY29tbWl0IiwgTXlTdWJzY3JpcHRpb24tPnN5bmNjb21taXQsCisJCQkJCVBH Q19CQUNLRU5ELCBQR0NfU19PVkVSUklERSk7CisKKwkvKiBLZWVwIHVzIGluZm9ybWVkIGFib3V0 IHN1YnNjcmlwdGlvbiBjaGFuZ2VzLiAqLworCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxiYWNr KFNVQlNDUklQVElPTk9JRCwKKwkJCQkJCQkJICBzdWJzY3JpcHRpb25fY2hhbmdlX2NiLAorCQkJ CQkJCQkgIChEYXR1bSkgMCk7CisKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8q IFNldHVwIHJlcGxpY2F0aW9uIG9yaWdpbiB0cmFja2luZy4gKi8KKwlTdGFydFRyYW5zYWN0aW9u Q29tbWFuZCgpOworCXNucHJpbnRmKG9yaWdpbm5hbWUsIHNpemVvZihvcmlnaW5uYW1lKSwgInBn XyV1IiwgTXlTdWJzY3JpcHRpb24tPm9pZCk7CisJb3JpZ2luaWQgPSByZXBsb3JpZ2luX2J5X25h bWUob3JpZ2lubmFtZSwgdHJ1ZSk7CisJaWYgKCFPaWRJc1ZhbGlkKG9yaWdpbmlkKSkKKwkJb3Jp Z2luaWQgPSByZXBsb3JpZ2luX2NyZWF0ZShvcmlnaW5uYW1lKTsKKwlyZXBsb3JpZ2luX3Nlc3Np b25fc2V0dXAob3JpZ2luaWQsIGZhbHNlKTsKKwlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0g b3JpZ2luaWQ7CisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAqIEFsbG9j YXRlIHRoZSBvcmlnaW4gbmFtZSBpbiBsb25nLWxpdmVkIGNvbnRleHQgZm9yIGVycm9yIGNvbnRl eHQKKwkgKiBtZXNzYWdlLgorCSAqLworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5vcmlnaW5f bmFtZSA9IE1lbW9yeUNvbnRleHRTdHJkdXAoQXBwbHlDb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJ ICAgb3JpZ2lubmFtZSk7CisKKwkvKgorCSAqIEluZGljYXRlIHRoYXQgd2UncmUgZnVsbHkgaW5p dGlhbGl6ZWQgYW5kIHJlYWR5IHRvIGJlZ2luIHRoZSBtYWluIHBhcnQKKwkgKiBvZiB0aGUgYXBw bHkgb3BlcmF0aW9uLgorCSAqLworCWFwcGx5X2Jnd29ya2VyX3NldF9zdGF0ZShBUFBMWV9CR1dP UktFUl9BVFRBQ0hFRCk7CisKKwllbG9nKExPRywgIltBcHBseSBCR1cgIyV1XSBzdGFydGVkIiwg cHN0LT5uKTsKKworCVBHX1RSWSgpOworCXsKKwkJTG9naWNhbEFwcGx5Qmd3TG9vcChtcWgsIHBz dCk7CisJfQorCVBHX0NBVENIKCk7CisJeworCQkvKgorCQkgKiBSZXBvcnQgdGhlIHdvcmtlciBm YWlsZWQgd2hpbGUgYXBwbHlpbmcgc3RyZWFtaW5nIHRyYW5zYWN0aW9uCisJCSAqIGNoYW5nZXMu IEFib3J0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHNvIHRoYXQgdGhlIHN0YXRzIG1lc3NhZ2Ug aXMKKwkJICogc2VudCBpbiBhbiBpZGxlIHN0YXRlLgorCQkgKi8KKwkJQWJvcnRPdXRPZkFueVRy YW5zYWN0aW9uKCk7CisJCXBnc3RhdF9yZXBvcnRfc3Vic2NyaXB0aW9uX2Vycm9yKE15U3Vic2Ny aXB0aW9uLT5vaWQsIGZhbHNlKTsKKworCQlQR19SRV9USFJPVygpOworCX0KKwlQR19FTkRfVFJZ KCk7CisKKwkvKgorCSAqIFdlJ3JlIGRvbmUuICBFeHBsaWNpdGx5IGRldGFjaCB0aGUgc2hhcmVk IG1lbW9yeSBzZWdtZW50IHNvIHRoYXQgd2UKKwkgKiBkb24ndCBnZXQgYSByZXNvdXJjZSBsZWFr IHdhcm5pbmcgYXQgY29tbWl0IHRpbWUuICBUaGlzIHdpbGwgZmlyZSBhbnkKKwkgKiBvbl9kc21f ZGV0YWNoIGNhbGxiYWNrcyB3ZSd2ZSByZWdpc3RlcmVkLCBhcyB3ZWxsLiAgT25jZSB0aGF0J3Mg ZG9uZSwKKwkgKiB3ZSBjYW4gZ28gYWhlYWQgYW5kIGV4aXQuCisJICovCisJZHNtX2RldGFjaChz ZWcpOworCXByb2NfZXhpdCgwKTsKK30KKworLyoKKyAqIFNldCB1cCBhIGR5bmFtaWMgc2hhcmVk IG1lbW9yeSBzZWdtZW50LgorICoKKyAqIFdlIHNldCB1cCBhIGNvbnRyb2wgcmVnaW9uIHRoYXQg Y29udGFpbnMgYSBQYXJhbGxlbFN0YXRlLAorICogcGx1cyBvbmUgcmVnaW9uIHBlciBtZXNzYWdl IHF1ZXVlLiBUaGVyZSBhcmUgYXMgbWFueSBtZXNzYWdlIHF1ZXVlcyBhcworICogdGhlIG51bWJl ciBvZiB3b3JrZXJzLgorICovCitzdGF0aWMgdm9pZAorYXBwbHlfYmd3b3JrZXJfc2V0dXBfZHNt KFdvcmtlclN0YXRlICp3c3RhdGUpCit7CisJc2htX3RvY19lc3RpbWF0b3IJIGU7CisJaW50CQkJ CQkgdG9jX2tleSA9IDA7CisJU2l6ZQkJCQkgc2Vnc2l6ZTsKKwlkc21fc2VnbWVudAkJCSpzZWc7 CisJc2htX3RvYwkJCQkqdG9jOworCVBhcmFsbGVsU3RhdGUJCSpwc3Q7CisJc2htX21xCQkJCSpt cTsKKwlpbnQ2NAkJCQkgcXVldWVfc2l6ZSA9IDE2MDAwMDAwMDsgLyogMTYgTUIgZm9yIG5vdyAq LworCisJLyoKKwkgKiBFc3RpbWF0ZSBob3cgbXVjaCBzaGFyZWQgbWVtb3J5IHdlIG5lZWQuCisJ ICoKKwkgKiBCZWNhdXNlIHRoZSBUT0MgbWFjaGluZXJ5IG1heSBjaG9vc2UgdG8gaW5zZXJ0IHBh ZGRpbmcgb2Ygb2RkbHktc2l6ZWQKKwkgKiByZXF1ZXN0cywgd2UgbXVzdCBlc3RpbWF0ZSBlYWNo IGNodW5rIHNlcGFyYXRlbHkuCisJICoKKwkgKiBXZSBuZWVkIG9uZSBrZXkgdG8gcmVnaXN0ZXIg dGhlIGxvY2F0aW9uIG9mIHRoZSBoZWFkZXIsIGFuZCB3ZSBuZWVkCisJICogbndvcmtlcnMga2V5 cyB0byB0cmFjayB0aGUgbG9jYXRpb25zIG9mIHRoZSBtZXNzYWdlIHF1ZXVlcy4KKwkgKi8KKwlz aG1fdG9jX2luaXRpYWxpemVfZXN0aW1hdG9yKCZlKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5r KCZlLCBzaXplb2YoUGFyYWxsZWxTdGF0ZSkpOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJmUs IChTaXplKSBxdWV1ZV9zaXplKTsKKworCXNobV90b2NfZXN0aW1hdGVfa2V5cygmZSwgMSArIDEp OworCXNlZ3NpemUgPSBzaG1fdG9jX2VzdGltYXRlKCZlKTsKKworCS8qIENyZWF0ZSB0aGUgc2hh cmVkIG1lbW9yeSBzZWdtZW50IGFuZCBlc3RhYmxpc2ggYSB0YWJsZSBvZiBjb250ZW50cy4gKi8K KwlzZWcgPSBkc21fY3JlYXRlKHNobV90b2NfZXN0aW1hdGUoJmUpLCAwKTsKKwl0b2MgPSBzaG1f dG9jX2NyZWF0ZShQR19MT0dJQ0FMX0FQUExZX1NITV9NQUdJQywgZHNtX3NlZ21lbnRfYWRkcmVz cyhzZWcpLAorCQkJCQkJIHNlZ3NpemUpOworCisJLyogU2V0IHVwIHRoZSBoZWFkZXIgcmVnaW9u LiAqLworCXBzdCA9IHNobV90b2NfYWxsb2NhdGUodG9jLCBzaXplb2YoUGFyYWxsZWxTdGF0ZSkp OworCVNwaW5Mb2NrSW5pdCgmcHN0LT5tdXRleCk7CisJcHN0LT5zdGF0ZSA9IEFQUExZX0JHV09S S0VSX0JVU1k7CisJcHN0LT5zdHJlYW1feGlkID0gc3RyZWFtX3hpZDsKKwlwc3QtPm4gPSBsaXN0 X2xlbmd0aChBcHBseVdvcmtlcnNMaXN0KSArIDE7CisKKwlzaG1fdG9jX2luc2VydCh0b2MsIHRv Y19rZXkrKywgcHN0KTsKKworCS8qIFNldCB1cCBvbmUgbWVzc2FnZSBxdWV1ZSBwZXIgd29ya2Vy LCBwbHVzIG9uZS4gKi8KKwltcSA9IHNobV9tcV9jcmVhdGUoc2htX3RvY19hbGxvY2F0ZSh0b2Ms IChTaXplKSBxdWV1ZV9zaXplKSwKKwkJCQkJCShTaXplKSBxdWV1ZV9zaXplKTsKKwlzaG1fdG9j X2luc2VydCh0b2MsIHRvY19rZXkrKywgbXEpOworCXNobV9tcV9zZXRfc2VuZGVyKG1xLCBNeVBy b2MpOworCisJLyogQXR0YWNoIHRoZSBxdWV1ZXMuICovCisJd3N0YXRlLT5tcV9oYW5kbGUgPSBz aG1fbXFfYXR0YWNoKG1xLCBzZWcsIE5VTEwpOworCisJLyogUmV0dXJuIHJlc3VsdHMgdG8gY2Fs bGVyLiAqLworCXdzdGF0ZS0+ZHNtX3NlZyA9IHNlZzsKKwl3c3RhdGUtPnBzdGF0ZSA9IHBzdDsK K30KKworLyoKKyAqIFN0YXJ0IGFwcGx5IHdvcmtlciBiYWNrZ3JvdW5kIHdvcmtlciBwcm9jZXNz IGFuZCBhbGxvY2F0IHNoYXJlZCBtZW1vcnkgZm9yCisgKiBpdC4KKyAqLworc3RhdGljIFdvcmtl clN0YXRlICoKK2FwcGx5X2Jnd29ya2VyX3NldHVwKHZvaWQpCit7CisJTWVtb3J5Q29udGV4dAkJ b2xkY29udGV4dDsKKwlib29sCQkJCWxhdW5jaGVkOworCVdvcmtlclN0YXRlCQkgICAqd3N0YXRl OworCisJZWxvZyhMT0csICJzZXR0aW5nIHVwIGFwcGx5IHdvcmtlciAjJXUiLCBsaXN0X2xlbmd0 aChBcHBseVdvcmtlcnNMaXN0KSArIDEpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhBcHBseUNvbnRleHQpOworCisJd3N0YXRlID0gKFdvcmtlclN0YXRlICopIHBhbGxv YzAoc2l6ZW9mKFdvcmtlclN0YXRlKSk7CisKKwkvKiBTZXR1cCBzaGFyZWQgbWVtb3J5ICovCisJ YXBwbHlfYmd3b3JrZXJfc2V0dXBfZHNtKHdzdGF0ZSk7CisKKwlsYXVuY2hlZCA9IGxvZ2ljYWxy ZXBfd29ya2VyX2xhdW5jaChNeUxvZ2ljYWxSZXBXb3JrZXItPmRiaWQsCisJCQkJCQkJCQkJTXlT dWJzY3JpcHRpb24tPm9pZCwKKwkJCQkJCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSwKKwkJCQkJ CQkJCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnVzZXJpZCwKKwkJCQkJCQkJCQlJbnZhbGlkT2lkLAor CQkJCQkJCQkJCWRzbV9zZWdtZW50X2hhbmRsZSh3c3RhdGUtPmRzbV9zZWcpKTsKKworCWlmIChs YXVuY2hlZCkKKwl7CisJCS8qIFdhaXQgZm9yIHdvcmtlciB0byBiZWNvbWUgcmVhZHkuICovCisJ CWFwcGx5X2Jnd29ya2VyX3dhaXRfZm9yKHdzdGF0ZSwgQVBQTFlfQkdXT1JLRVJfQVRUQUNIRUQp OworCisJCUFwcGx5V29ya2Vyc0xpc3QgPSBsYXBwZW5kKEFwcGx5V29ya2Vyc0xpc3QsIHdzdGF0 ZSk7CisJfQorCWVsc2UKKwl7CisJCXBmcmVlKHdzdGF0ZSk7CisJCXdzdGF0ZSA9IE5VTEw7CisJ fQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJcmV0dXJuIHdzdGF0 ZTsKK30KKworLyoKKyAqIFNlbmQgdGhlIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBhcHBseSBiZ3dv cmtlciB2aWEgc2hhcmVkLW1lbW9yeSBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGx5X2Jn d29ya2VyX3NlbmRfZGF0YShXb3JrZXJTdGF0ZSAqd3N0YXRlLCBTaXplIG5ieXRlcywgY29uc3Qg dm9pZCAqZGF0YSkKK3sKKwlzaG1fbXFfcmVzdWx0IHJlc3VsdDsKKworCXJlc3VsdCA9IHNobV9t cV9zZW5kKHdzdGF0ZS0+bXFfaGFuZGxlLCBuYnl0ZXMsIGRhdGEsIGZhbHNlLCB0cnVlKTsKKwor CWlmIChyZXN1bHQgIT0gU0hNX01RX1NVQ0NFU1MpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVy cm1zZygiY291bGQgbm90IHNlbmQgdHVwbGVzIHRvIHNoYXJlZC1tZW1vcnkgcXVldWUiKSkpOwor fQorCisvKgorICogV2FpdCB1bnRpbCB0aGUgc3RhdGUgb2YgYXBwbHkgYmFja2dyb3VuZCB3b3Jr ZXIgcmVhY2ggdGhlICd3YWl0X2Zvcl9zdGF0ZScKKyAqLworc3RhdGljIHZvaWQKK2FwcGx5X2Jn d29ya2VyX3dhaXRfZm9yKFdvcmtlclN0YXRlICp3c3RhdGUsIGNoYXIgd2FpdF9mb3Jfc3RhdGUp Cit7CisJZm9yICg7OykKKwl7CisJCWNoYXIgc3RhdHVzOworCisJCS8qIElmIHRoZSB3b3JrZXIg aXMgcmVhZHksIHdlIGhhdmUgc3VjY2VlZGVkLiAqLworCQlTcGluTG9ja0FjcXVpcmUoJndzdGF0 ZS0+cHN0YXRlLT5tdXRleCk7CisJCXN0YXR1cyA9IHdzdGF0ZS0+cHN0YXRlLT5zdGF0ZTsKKwkJ U3BpbkxvY2tSZWxlYXNlKCZ3c3RhdGUtPnBzdGF0ZS0+bXV0ZXgpOworCisJCWlmIChzdGF0dXMg PT0gd2FpdF9mb3Jfc3RhdGUpCisJCQlicmVhazsKKworCQkvKiBJZiBhbnkgd29ya2VycyAob3Ig dGhlIHBvc3RtYXN0ZXIpIGhhdmUgZGllZCwgd2UgaGF2ZSBmYWlsZWQuICovCisJCWlmIChzdGF0 dXMgPT0gQVBQTFlfQkdXT1JLRVJfRVhJVCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJj b2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJy bXNnKCJCYWNrZ3JvdW5kIHdvcmtlciAldSBmYWlsZWQgdG8gYXBwbHkgdHJhbnNhY3Rpb24gJXUi LAorCQkJCQkJCXdzdGF0ZS0+cHN0YXRlLT5uLCB3c3RhdGUtPnBzdGF0ZS0+c3RyZWFtX3hpZCkp KTsKKworCQkvKiBXYWl0IHRvIGJlIHNpZ25hbGxlZC4gKi8KKwkJV2FpdExhdGNoKE15TGF0Y2gs IFdMX0xBVENIX1NFVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsIDAsCisJCQkJCQkJV0FJVF9FVkVO VF9MT0dJQ0FMX0FQUExZX1dPUktFUl9SRUFEWSk7CisKKwkJLyogUmVzZXQgdGhlIGxhdGNoIHNv IHdlIGRvbid0IHNwaW4uICovCisJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisKKwkJLyogQW4gaW50 ZXJydXB0IG1heSBoYXZlIG9jY3VycmVkIHdoaWxlIHdlIHdlcmUgd2FpdGluZy4gKi8KKwkJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKKwl9Cit9CisKKy8qCisgKiBDaGVjayB0aGUgc3RhdHVzIG9m IHdvcmtlcnMgYW5kIHJlcG9ydCBhbiBlcnJvciBpZiBhbnkgYXBwbHkgYmFja2dyb3VuZAorICog d29ya2VyIGhhcyBleGl0ZWQgdW5leHBlY3RlZGx5LgorICoKKyAqIEV4aXQgaWYgYW55IHJlbGF0 aW9uIGlzIG5vdCBpbiB0aGUgUkVBRFkgc3RhdGUgYW5kIGlmIGFueSB3b3JrZXIgaXMgaGFuZGxp bmcKKyAqIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gYXQgdGhlIHNhbWUgdGltZS4gQmVjYXVz ZSBmb3Igc3RyZWFtaW5nCisgKiB0cmFuc2FjdGlvbnMgdGhhdCBpcyBiZWluZyBhcHBsaWVkIGlu IGFwcGx5IGJnd29ya2VyLCB3ZSBjYW5ub3QgZGVjaWRlIHdoZXRoZXIgdG8KKyAqIGFwcGx5IHRo ZSBjaGFuZ2UgZm9yIGEgcmVsYXRpb24gdGhhdCBpcyBub3QgaW4gdGhlIFJFQURZIHN0YXRlIChz ZWUKKyAqIHNob3VsZF9hcHBseV9jaGFuZ2VzX2Zvcl9yZWwpIGFzIHdlIHdvbid0IGtub3cgcmVt b3RlX2ZpbmFsX2xzbiBieSB0aGF0CisgKiB0aW1lLgorICovCitzdGF0aWMgdm9pZAorYXBwbHlf Ymd3b3JrZXJfY2hlY2tfc3RhdHVzKHZvaWQpCit7CisJTGlzdENlbGwgKmxjOworCisJaWYgKGFt X2FwcGx5X2Jnd29ya2VyKCkgfHwgTXlTdWJzY3JpcHRpb24tPnN0cmVhbSAhPSBTVUJTVFJFQU1f QVBQTFkpCisJCXJldHVybjsKKworCWZvcmVhY2gobGMsIEFwcGx5V29ya2Vyc0xpc3QpCisJewor CQlXb3JrZXJTdGF0ZSAqd3N0YXRlID0gKFdvcmtlclN0YXRlICopIGxmaXJzdChsYyk7CisKKwkJ LyoKKwkJICogV2UgZG9uJ3QgbG9jayBoZXJlIGFzIGluIHRoZSB3b3JzdCBjYXNlIHdlIHdpbGwg anVzdCBkZXRlY3QgdGhlCisJCSAqIGZhaWx1cmUgb2Ygd29ya2VyIGEgYml0IGxhdGVyLgorCQkg Ki8KKwkJaWYgKHdzdGF0ZS0+cHN0YXRlLT5zdGF0ZSA9PSBBUFBMWV9CR1dPUktFUl9FWElUKQor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BS RVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coIkJhY2tncm91bmQgd29ya2VyICV1IGV4 aXRlZCB1bmV4cGVjdGVkbHkiLAorCQkJCQkJCXdzdGF0ZS0+cHN0YXRlLT5uKSkpOworCX0KKwor CWlmIChsaXN0X2xlbmd0aChBcHBseVdvcmtlcnNJZGxlTGlzdCkgIT0gbGlzdF9sZW5ndGgoQXBw bHlXb3JrZXJzTGlzdCkgJiYKKwkJIUFsbFRhYmxlc3luY3NSZWFkeSgpKQorCXsKKwkJZXJlcG9y dChMT0csCisJCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXJzIGZv ciBzdWJzY3JpcHRpb24gXCIlc1wiIHdpbGwgcmVzdGFydCIsCisJCQkJCQlNeVN1YnNjcmlwdGlv bi0+bmFtZSksCisJCQkJIGVycmRldGFpbCgiQ2Fubm90IHN0YXJ0IHRhYmxlIHN5bmNocm9uaXph dGlvbiB3aGlsZSBiZ3dvcmtlcnMgYXJlICIKKwkJCQkJCSAgICJoYW5kbGluZyBzdHJlYW1lZCBy ZXBsaWNhdGlvbiB0cmFuc2FjdGlvbiIpKSk7CisKKwkJcHJvY19leGl0KDApOworCX0KK30KKwor LyogU2V0IHRoZSBzdGF0ZSBvZiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciAqLworc3RhdGljIHZv aWQKK2FwcGx5X2Jnd29ya2VyX3NldF9zdGF0ZShjaGFyIHN0YXRlKQoreworCWlmICghYW1fYXBw bHlfYmd3b3JrZXIoKSkKKwkJcmV0dXJuOworCisJZWxvZyhMT0csICJbQXBwbHkgQkdXICMldV0g c2V0IHN0YXRlIHRvICVjIiwKKwkJIE15UGFyYWxsZWxTdGF0ZS0+biwgc3RhdGUpOworCisJU3Bp bkxvY2tBY3F1aXJlKCZNeVBhcmFsbGVsU3RhdGUtPm11dGV4KTsKKwlNeVBhcmFsbGVsU3RhdGUt PnN0YXRlID0gc3RhdGU7CisJU3BpbkxvY2tSZWxlYXNlKCZNeVBhcmFsbGVsU3RhdGUtPm11dGV4 KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYwppbmRleCA4N2MxNWI5 Li4yNGE2ZmFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2 ZW50LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCkBAIC0z ODgsNiArMzg4LDkgQEAgcGdzdGF0X2dldF93YWl0X2lwYyhXYWl0RXZlbnRJUEMgdykKIAkJY2Fz ZSBXQUlUX0VWRU5UX0hBU0hfR1JPV19CVUNLRVRTX1JFSU5TRVJUOgogCQkJZXZlbnRfbmFtZSA9 ICJIYXNoR3Jvd0J1Y2tldHNSZWluc2VydCI7CiAJCQlicmVhazsKKwkJY2FzZSBXQUlUX0VWRU5U X0xPR0lDQUxfQVBQTFlfV09SS0VSX1JFQURZOgorCQkJZXZlbnRfbmFtZSA9ICJMb2dpY2FsQXBw bHlXb3JrZXJSZWFkeSI7CisJCQlicmVhazsKIAkJY2FzZSBXQUlUX0VWRU5UX0xPR0lDQUxfU1lO Q19EQVRBOgogCQkJZXZlbnRfbmFtZSA9ICJMb2dpY2FsU3luY0RhdGEiOwogCQkJYnJlYWs7CmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXAuYwppbmRleCA3ODZkNTkyLi5hNDc2ODg1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTQ0NDksNyAr NDQ0OSw3IEBAIGdldFN1YnNjcmlwdGlvbnMoQXJjaGl2ZSAqZm91dCkKIAlpZiAoZm91dC0+cmVt b3RlVmVyc2lvbiA+PSAxNDAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiIHMu c3Vic3RyZWFtLFxuIik7CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiBm YWxzZSBBUyBzdWJzdHJlYW0sXG4iKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIg J2YnIEFTIHN1YnN0cmVhbSxcbiIpOwogCiAJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTUw MDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKQEAgLTQ1NzksOCArNDU3OSwxMCBA QCBkdW1wU3Vic2NyaXB0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFN1YnNjcmlwdGlvbkluZm8g KnN1YmluZm8pCiAJaWYgKHN0cmNtcChzdWJpbmZvLT5zdWJiaW5hcnksICJ0IikgPT0gMCkKIAkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIGJpbmFyeSA9IHRydWUiKTsKIAotCWlmIChz dHJjbXAoc3ViaW5mby0+c3Vic3RyZWFtLCAiZiIpICE9IDApCisJaWYgKHN0cmNtcChzdWJpbmZv LT5zdWJzdHJlYW0sICJvIikgPT0gMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIs IHN0cmVhbWluZyA9IG9uIik7CisJZWxzZSBpZiAoc3RyY21wKHN1YmluZm8tPnN1YnN0cmVhbSwg ImEiKSA9PSAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgc3RyZWFtaW5nID0g YXBwbHkiKTsKIAogCWlmIChzdHJjbXAoc3ViaW5mby0+c3VidHdvcGhhc2VzdGF0ZSwgdHdvX3Bo YXNlX2Rpc2FibGVkKSAhPSAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgdHdv X3BoYXNlID0gb24iKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2Ny aXB0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCmluZGV4IGQx MjYwZjUuLmI1ZjI3MGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2Ny aXB0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaApAQCAt NjgsNyArNjgsNyBAQCBDQVRBTE9HKHBnX3N1YnNjcmlwdGlvbiw2MTAwLFN1YnNjcmlwdGlvblJl bGF0aW9uSWQpIEJLSV9TSEFSRURfUkVMQVRJT04gQktJX1JPVwogCWJvb2wJCXN1YmJpbmFyeTsJ CS8qIFRydWUgaWYgdGhlIHN1YnNjcmlwdGlvbiB3YW50cyB0aGUKIAkJCQkJCQkJICogcHVibGlz aGVyIHRvIHNlbmQgZGF0YSBpbiBiaW5hcnkgKi8KIAotCWJvb2wJCXN1YnN0cmVhbTsJCS8qIFN0 cmVhbSBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuICovCisJY2hhcgkJc3Vic3RyZWFtOwkJLyog U3RyZWFtIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4gKi8KIAogCWNoYXIJCXN1YnR3b3BoYXNl c3RhdGU7CS8qIFN0cmVhbSB0d28tcGhhc2UgdHJhbnNhY3Rpb25zICovCiAKQEAgLTEwOSw3ICsx MDksNyBAQCB0eXBlZGVmIHN0cnVjdCBTdWJzY3JpcHRpb24KIAlib29sCQllbmFibGVkOwkJLyog SW5kaWNhdGVzIGlmIHRoZSBzdWJzY3JpcHRpb24gaXMgZW5hYmxlZCAqLwogCWJvb2wJCWJpbmFy eTsJCQkvKiBJbmRpY2F0ZXMgaWYgdGhlIHN1YnNjcmlwdGlvbiB3YW50cyBkYXRhIGluCiAJCQkJ CQkJCSAqIGJpbmFyeSBmb3JtYXQgKi8KLQlib29sCQlzdHJlYW07CQkJLyogQWxsb3cgc3RyZWFt aW5nIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4gKi8KKwljaGFyCQlzdHJlYW07CQkJLyogQWxs b3cgc3RyZWFtaW5nIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4gKi8KIAljaGFyCQl0d29waGFz ZXN0YXRlOwkvKiBBbGxvdyBzdHJlYW1pbmcgdHdvLXBoYXNlIHRyYW5zYWN0aW9ucyAqLwogCWJv b2wJCWRpc2FibGVvbmVycjsJLyogSW5kaWNhdGVzIGlmIHRoZSBzdWJzY3JpcHRpb24gc2hvdWxk IGJlCiAJCQkJCQkJCSAqIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgaWYgYSB3b3JrZXIgZXJyb3IK QEAgLTEyMCw2ICsxMjAsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgU3Vic2NyaXB0aW9uCiAJTGlzdAkg ICAqcHVibGljYXRpb25zOwkvKiBMaXN0IG9mIHB1YmxpY2F0aW9uIG5hbWVzIHRvIHN1YnNjcmli ZSB0byAqLwogfSBTdWJzY3JpcHRpb247CiAKKy8qIERpc2FsbG93IHN0cmVhbWluZyBpbi1wcm9n cmVzcyB0cmFuc2FjdGlvbnMgKi8KKyNkZWZpbmUgU1VCU1RSRUFNX09GRgknZicKKworLyoKKyAq IFN0cmVhbWluZyB0cmFuc2FjdGlvbnMgYXJlIHdyaXR0ZW4gdG8gYSB0ZW1wb3JhcnkgZmlsZSBh bmQgYXBwbGllZCBvbmx5CisgKiBhZnRlciB0aGUgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9u IHVwc3RyZWFtLgorICovCisjZGVmaW5lIFNVQlNUUkVBTV9PTgknbycKKworLyogU3RyZWFtaW5n IHRyYW5zYWN0aW9ucyBhcmUgYXBwaWVkIGltbWVkaWF0ZWx5IHZpYSBhIGJhY2tncm91bmQgd29y a2VyICovCisjZGVmaW5lIFNVQlNUUkVBTV9BUFBMWQknYScKKwogZXh0ZXJuIFN1YnNjcmlwdGlv biAqR2V0U3Vic2NyaXB0aW9uKE9pZCBzdWJpZCwgYm9vbCBtaXNzaW5nX29rKTsKIGV4dGVybiB2 b2lkIEZyZWVTdWJzY3JpcHRpb24oU3Vic2NyaXB0aW9uICpzdWIpOwogZXh0ZXJuIHZvaWQgRGlz YWJsZVN1YnNjcmlwdGlvbihPaWQgc3ViaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vbG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fs cHJvdG8uaAppbmRleCBhNzcxYWI4Li4xZWI4ZTEyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9s b2dpY2FscHJvdG8uaApAQCAtMjQzLDggKzI0Myw4IEBAIGV4dGVybiBUcmFuc2FjdGlvbklkIGxv Z2ljYWxyZXBfcmVhZF9zdHJlYW1fc3RhcnQoU3RyaW5nSW5mbyBpbiwKIGV4dGVybiB2b2lkIGxv Z2ljYWxyZXBfd3JpdGVfc3RyZWFtX3N0b3AoU3RyaW5nSW5mbyBvdXQpOwogZXh0ZXJuIHZvaWQg bG9naWNhbHJlcF93cml0ZV9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gb3V0LCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBjb21taXRfbHNuKTsKLWV4dGVy biBUcmFuc2FjdGlvbklkIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8g b3V0LAotCQkJCQkJCQkJCQkJICAgTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKTsK K2V4dGVybiB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gb3V0 LAorCQkJCQkJCQkJCSAgTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKTsKIGV4dGVy biB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gb3V0LCBUcmFu c2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgc3VieGlkKTsKIGV4dGVy biB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBpbiwgVHJhbnNh Y3Rpb25JZCAqeGlkLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNh bHdvcmtlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oCmluZGV4 IGNkMWI2ZTguLjZhMWFmN2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xv Z2ljYWx3b3JrZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2Vy LmgKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgTE9HSUNBTFdPUktFUl9ICiAKIGV4dGVybiB2 b2lkIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZyk7CitleHRlcm4gdm9pZCBBcHBseUJn d29ya2VyTWFpbihEYXR1bSBtYWluX2FyZyk7CiAKIGV4dGVybiBib29sIElzTG9naWNhbFdvcmtl cih2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmgg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAppbmRleCAxNGQ1YzQ5Li4xZWQ1MWJj IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAorKysgYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaApAQCAtNTMsNyArNTMsNyBAQCBleHRlcm4gWExv Z1JlY1B0ciByZXBsb3JpZ2luX2dldF9wcm9ncmVzcyhSZXBPcmlnaW5JZCBub2RlLCBib29sIGZs dXNoKTsKIAogZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UoWExvZ1JlY1B0 ciByZW1vdGVfY29tbWl0LAogCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBsb2NhbF9jb21taXQpOwot ZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpOwor ZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUsIGJv b2wgYWNxdWlyZSk7CiBleHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fcmVzZXQodm9pZCk7 CiBleHRlcm4gWExvZ1JlY1B0ciByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dyZXNzKGJvb2wg Zmx1c2gpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50 ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCmluZGV4 IDQ0ODVkNGUuLjRkMTFhMTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dv cmtlcl9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRl cm5hbC5oCkBAIC02MCw2ICs2MCw4IEBAIHR5cGVkZWYgc3RydWN0IExvZ2ljYWxSZXBXb3JrZXIK IAkgKi8KIAlGaWxlU2V0ICAgICpzdHJlYW1fZmlsZXNldDsKIAorCWJvb2wJCXN1YndvcmtlcjsK KwogCS8qIFN0YXRzLiAqLwogCVhMb2dSZWNQdHIJbGFzdF9sc247CiAJVGltZXN0YW1wVHogbGFz dF9zZW5kX3RpbWU7CkBAIC04NCw4ICs4Niw5IEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29y a2VyX2F0dGFjaChpbnQgc2xvdCk7CiBleHRlcm4gTG9naWNhbFJlcFdvcmtlciAqbG9naWNhbHJl cF93b3JrZXJfZmluZChPaWQgc3ViaWQsIE9pZCByZWxpZCwKIAkJCQkJCQkJCQkJCWJvb2wgb25s eV9ydW5uaW5nKTsKIGV4dGVybiBMaXN0ICpsb2dpY2FscmVwX3dvcmtlcnNfZmluZChPaWQgc3Vi aWQsIGJvb2wgb25seV9ydW5uaW5nKTsKLWV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2xh dW5jaChPaWQgZGJpZCwgT2lkIHN1YmlkLCBjb25zdCBjaGFyICpzdWJuYW1lLAotCQkJCQkJCQkJ IE9pZCB1c2VyaWQsIE9pZCByZWxpZCk7CitleHRlcm4gYm9vbCBsb2dpY2FscmVwX3dvcmtlcl9s YXVuY2goT2lkIGRiaWQsIE9pZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwKKwkJCQkJCQkJ CSBPaWQgdXNlcmlkLCBPaWQgcmVsaWQsCisJCQkJCQkJCQkgZHNtX2hhbmRsZSBzdWJ3b3JrZXJf ZHNtKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQg cmVsaWQpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfd2FrZXVwKE9pZCBzdWJpZCwg T2lkIHJlbGlkKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cF9wdHIoTG9n aWNhbFJlcFdvcmtlciAqd29ya2VyKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3dh aXRfZXZlbnQuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaAppbmRleCBiNTc4ZTJl Li5kNTA4MWQ5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKKysr IGIvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCkBAIC0xMDUsNiArMTA1LDcgQEAgdHlw ZWRlZiBlbnVtCiAJV0FJVF9FVkVOVF9IQVNIX0dST1dfQlVDS0VUU19BTExPQ0FURSwKIAlXQUlU X0VWRU5UX0hBU0hfR1JPV19CVUNLRVRTX0VMRUNULAogCVdBSVRfRVZFTlRfSEFTSF9HUk9XX0JV Q0tFVFNfUkVJTlNFUlQsCisJV0FJVF9FVkVOVF9MT0dJQ0FMX0FQUExZX1dPUktFUl9SRUFEWSwK IAlXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19EQVRBLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9TWU5D X1NUQVRFX0NIQU5HRSwKIAlXQUlUX0VWRU5UX01RX0lOVEVSTkFMLApkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0CmluZGV4IDdmY2ZhZDEuLmUwOGU0ZDQgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQKQEAgLTE5Nyw3ICsxOTcs NyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0g Tk9ORSk7CiBEUk9QIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWI7CiAtLSBmYWlsIC0gc3Ry ZWFtaW5nIG11c3QgYmUgYm9vbGVhbgogQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3Rz dWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0 ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwgc3RyZWFtaW5nID0gZm9vKTsKLUVSUk9SOiAg c3RyZWFtaW5nIHJlcXVpcmVzIGEgQm9vbGVhbiB2YWx1ZQorRVJST1I6ICBzdHJlYW1pbmcgcmVx dWlyZXMgYSBCb29sZWFuIHZhbHVlIG9yICJhcHBseSIKIC0tIG5vdyBpdCB3b3JrcwogQ1JFQVRF IFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3Nf ZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwg c3RyZWFtaW5nID0gdHJ1ZSk7CiBXQVJOSU5HOiAgdGFibGVzIHdlcmUgbm90IHN1YnNjcmliZWQs IHlvdSB3aWxsIGhhdmUgdG8gcnVuIEFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJM SUNBVElPTiB0byBzdWJzY3JpYmUgdGhlIHRhYmxlcwpAQCAtMjA1LDcgKzIwNSw3IEBAIFdBUk5J Tkc6ICB0YWJsZXMgd2VyZSBub3Qgc3Vic2NyaWJlZCwgeW91IHdpbGwgaGF2ZSB0byBydW4gQUxU RVIgU1VCU0NSSVBUSU9OIC4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1 YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvIHBoYXNl IGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAg ICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0 ZXN0cHVifSAgIHwgZiAgICAgIHwgdCAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAg ICAgICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90 ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2Vy IHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgbyAgICAgICAgIHwgZCAgICAgICAg ICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9 cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9O IHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IGZhbHNlKTsKQEAgLTI5OSw3ICsyOTks NyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc3RyZWFtaW5nID0g dHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMK ICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8 IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvIHBoYXNlIGNvbW1pdCB8IERp c2FibGUgb24gZXJyb3IgfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAg ICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3Rz dWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwg ZiAgICAgIHwgdCAgICAgICAgIHwgcCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAg fCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAK KyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8 IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgbyAgICAgICAgIHwgcCAgICAgICAgICAgICAgICB8IGYg ICAgICAgICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vz bm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVz dHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwpAQCAtMzExLDcgKzMxMSw3IEBAIFdBUk5JTkc6 ICB0YWJsZXMgd2VyZSBub3Qgc3Vic2NyaWJlZCwgeW91IHdpbGwgaGF2ZSB0byBydW4gQUxURVIg U1VCU0NSSVBUSU9OIC4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNj cmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg RW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvIHBoYXNlIGNv bW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBD b25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0 cHVifSAgIHwgZiAgICAgIHwgdCAgICAgICAgIHwgcCAgICAgICAgICAgICAgICB8IGYgICAgICAg ICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhp c3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwg ZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgbyAgICAgICAgIHwgcCAgICAgICAgICAg ICAgICB8IGYgICAgICAgICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVn cmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJl Z3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAppbmRleCA4N2VlN2JmLi45YzAzNmQxIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApA QCAtMjkxOCwxMSArMjkxOCwxMyBAQCBXb3JkRW50cnlQb3NWZWN0b3IKIFdvcmRFbnRyeVBvc1Zl Y3RvcjEKIFdvcmtUYWJsZVNjYW4KIFdvcmtUYWJsZVNjYW5TdGF0ZQorV29ya2VyRW50cnkKIFdv cmtlckluZm8KIFdvcmtlckluZm9EYXRhCiBXb3JrZXJJbnN0cnVtZW50YXRpb24KIFdvcmtlckpv YkR1bXBQdHJUeXBlCiBXb3JrZXJKb2JSZXN0b3JlUHRyVHlwZQorV29ya2VyU3RhdGUKIFdvcmtp bmdfU3RhdGUKIFdyaXRlQnVmUHRyVHlwZQogV3JpdGVCeXRlUHRyVHlwZQotLSAKMi43LjIud2lu ZG93cy4xCgo= --_002_OS0PR01MB5716E8D536552467EFB512EF94FC9OS0PR01MB5716jpnp_--