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 1neqNi-0000Ts-7p for pgsql-hackers@arkaria.postgresql.org; Thu, 14 Apr 2022 03:42:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1neqNg-0006JF-7L for pgsql-hackers@arkaria.postgresql.org; Thu, 14 Apr 2022 03:42:52 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1neqNf-0006J6-2U for pgsql-hackers@lists.postgresql.org; Thu, 14 Apr 2022 03:42:51 +0000 Received: from esa3.fujitsucc.c3s2.iphmx.com ([68.232.151.212]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1neqNb-0006pe-Fn for pgsql-hackers@lists.postgresql.org; Thu, 14 Apr 2022 03:42:49 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1649907767; x=1681443767; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=gos3zTTVQRxfV2oSHyw7XBdwDQMHLb67GrRtu67VBwA=; b=DG1lhBUgilZOjbH4AQW8yLmc5ngHBZ+KzrhZyTR+E/GoLCF0r3Sl4yzj O8nAtU1KpMZSvTbqhRCwnBxo8ALgrc/TOdfwI1LYFwLjkApD1dXitnHFV wqQkdw1StMHsl+V0WRGa9lQ6JiOnCe2YcgeDz/5OJGvzAFtYZcmr7zqtr ffj/D4AU5NL4M8FVa1B9e6utu2vhy4EA6re5/UHRI8D2s5xOHAP4hR2U1 N3FDlB5mB2yyg/+wMlXT17CoBfcCWggaXvMxfGHKvPiTdtCginLU2eOu6 eHWEOiZc20BgmOoBIhIsTb8GiW8+MMuFmErY16TznUN//yg7i1UuP3Sr/ g==; X-IronPort-AV: E=McAfee;i="6400,9594,10316"; a="61976952" X-IronPort-AV: E=Sophos;i="5.90,258,1643641200"; d="scan'208,223";a="61976952" Received: from mail-tycjpn01lp2174.outbound.protection.outlook.com (HELO JPN01-TYC-obe.outbound.protection.outlook.com) ([104.47.23.174]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Apr 2022 12:42:42 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bYtWkHWSdklvcsKRC89KzCKpSQKQHC8N04oxRV1XZ0FtVcbu9AZ5hwH13R0vspY2i0OcEAroR3CPJlyfftgbBm5QxM2i5qp0DtdwY0RhXB6xLoGJfhg52HnLURffsy28P4zoeqbI9WGRrGl4UrpTCL1s5ZgIecMlOjDE17uElBnPBDIMLr/vcnWOrf4lO5UHI2TAbzVJT8cEIPvWeJk6hyJhTvbvs+dOFBha7PA0Y65xmIgeJj+tnvaG5S3RZ0Q7Ed2YYx/u38i89873gpzBmod7ajEL/5qK3UHc+MqejzQagLelKm8zKp5d01NSjBMEJwjP1JqOG0WOgYTUFIq3Eg== 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=6E5X2XcxgAMsRnj37frcer7tc7so0qZrWEJhPdVkYzc=; b=gUZFIkWQr8QGRcUkCn+Gl7hva2fQn+5hakPiOND9Lzr0QVYT1EvjEWy8GQq4EeoNo1X+xZ7llvEUOrsECq1NPsY/hJB8NjdlyQnVoYU8nf115R+6ndEM0W9ihahaqZqoe2V0BzrGvtSDi8204mltUxB27WlBM/6hpqecrFDK57JH8q8FQ4E99WbujJPVXkqfmVWr3RZlBSS1mh5LM2roPcfchlOcYrBkJ91u2Kgo2KFDucLEApHpa/fYNI4Q8mm2VkFYAx7sucFi5KZIFhT3sJPeUzjDchlRdBnlmN1LjsnGulr0OD5PjrYeZfJOhGlZP/0bvWkdm/dWyTzG6EKYpQ== 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=6E5X2XcxgAMsRnj37frcer7tc7so0qZrWEJhPdVkYzc=; b=KUMM5cr7rGUWm5D9A0ULytR5bk9R5dbuVhFgHIly/h86VMNfaRKbEipRVRVVsm/VVuY6EuW5ZVppNuocCFlfz2B7a6KOvn5tDZKon9YNP2WTEDN6hBuIQr4GgPw7RczB4cjb0jnMK5STU0pBO0fyLVFOzowesgjJpjhWMIc3FMc= Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com (2603:1096:604:bb::12) by OSBPR01MB3703.jpnprd01.prod.outlook.com (2603:1096:604:2f::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5144.29; Thu, 14 Apr 2022 03:42:39 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::14c1:2e3e:af71:6872]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::14c1:2e3e:af71:6872%7]) with mapi id 15.20.5164.018; Thu, 14 Apr 2022 03:42:39 +0000 From: "houzj.fnst@fujitsu.com" To: Amit Kapila CC: "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+5DFLHlN8Fn6zlu9SQgAkSooA= Date: Thu, 14 Apr 2022 03:42:39 +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: 1dded31a-cd0c-4ecf-745a-08da1dc8d2fa x-ms-traffictypediagnostic: OSBPR01MB3703: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: 1s4neffZqBLW0/wfclDwoyLCiqG9EMONhhC4J/2OgDtfmmXkkmK4TFNS338j8sdOXLAIqRH0lKXKWzgzUe51YOZZNIKBcxF1MBrYBFinLYwauHtkFxFBvgsKDij8sc0/4Mh5GPTTDB2fGpuhWqBVUrGKAytKaDlLgG1PWXBCm3wh2U09t5DR01gw8Gjen5SSZTmx1CRjQIxzv88oYwf0a5CMLy+Gazzec1ZtaDGDFWkZkMXTVibwOMR1tJwO288TjTllSxpW/MD6sDyKR7nO/yrRuwpn7pRU5euaaYp4EWUKV4ZxHpNz02xkGAouQRr/amNgmYdnFlm8pocqZzLrtaelfA3G85fHFSO/jaAN5mfos5/FDVt6EV5hh/OnN6VVmyw+StpnHFeKoHmqxZgM/r4/pLPfsJKEaV61+dlnqZQheKK5pFqiI7aiY2SewReLwPERaMb84ZkFip2A7ln5b+M4uL7TuRdkCOUrh2IdpmhvmLZJoRk+ZpxKOY75hasEFNl8mOj16Ml6hhbPw/+RBEIZe4Jrwm31kaf3CV0uMe0fM2T8/sI1VXGP+A+KPY4lCV8onGXIjpWnG7WdhlXtSQKh4D5XfTHBbZ3rjIpEO6IHaWLCTwtx1LNT7ZUiPAbdYG9HakdxE/WBTnqkthw4VWmloVN3R16a10oyjT62ybq4688rnIjmQF0h6Abm7XvN3BobtxOtXrQgza8YGMO1rQ== 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)(316002)(33656002)(6506007)(54906003)(9686003)(55016003)(2906002)(38100700002)(508600001)(186003)(26005)(122000001)(82960400001)(7696005)(6916009)(83380400001)(38070700005)(8936002)(52536014)(85182001)(53546011)(64756008)(66476007)(66446008)(66556008)(4326008)(8676002)(76116006)(99936003)(5660300002)(66946007)(86362001)(71200400001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Z3VWVkJXR0xkT0JJODYwOTY4dEpaZDF6UTg0b3d6am1IVjljRld4azRjbkxm?= =?utf-8?B?ZkplYVoyTEtMR0d6dGhqUmpkRzVoNnFsOW1tMFBvSzRQd1QvZ3BxemR2UVF3?= =?utf-8?B?YkttTm90bVNNYWp1Q3pVbnlFZmcwZ1hWZ1JYSElYS0pIQ05FaWRSTFNlajVt?= =?utf-8?B?a3kwZEdkV0Y2RGVtR3AzcXcrNitDanltcHpCcTZKM0Uwa3lORk11Q3pOekNm?= =?utf-8?B?WDEwb3doZnhtdSs1dWVhbXNCdWRlUEExd09ZOGY3dnRUVFZUYmlnZk5YSEFs?= =?utf-8?B?aHVxU1Jhc2JHTkw0NVZUVDBDNGdINzNvcmVXT2ZSclFPUUlqT2kydFc2Ri9z?= =?utf-8?B?eUE4UXV3SmVVUncwMkdmdmcvU24zdFRTTUlJOEdzN1JWWnJ0SFNORlZ3VFI5?= =?utf-8?B?UzR5SG14Uk52T2JMWk56R3d3NUlZY0RwMVovR2UwUkpEZ1NxNC93MWdDd211?= =?utf-8?B?a3QyUHJTMXMyUWViOW1aS3poWXM4K1JrOE9tWkJpU1V6NzdiN3VrU2I2OGxK?= =?utf-8?B?YnU0OWdXVkkwK2ZEUTVERjB2YlVYUlVvcE9qL0dyYW9GWjFONWZkaWJHdGdO?= =?utf-8?B?L3JLOXVXZnlxMkhqOTh2M284ZkhqZUV1VUZaWVRCUkZRZnhyT25QSVBLc29s?= =?utf-8?B?cE9aYlVqSDA3N053UHN5dlN1ZmJJT3ViMVJzMU1DcEtoMDNSeWl6c0p2VGZ6?= =?utf-8?B?S056R21obnViajFsZWdkeWlxaE5yTnhyckNvRWlYMldzVUJ6RWZHNkZsdXoy?= =?utf-8?B?T3dtZzI5M1AxaEl4SndPejNaVjl1MzJmcld6WE0zVE1FSGgrbGNRa1h5VWIx?= =?utf-8?B?NEc1R2tKYmd5cml0eVVkM1MxeTVMdFNlNGpsVUlpcldsR0JzY05XRkJ0Wjkv?= =?utf-8?B?YWdHTTFxUVVyRngwWmpQczFBc3RzcUl6QVp5Z1U0cHVMRkhvNFdmR0xsWGxJ?= =?utf-8?B?c25vNHpPL1VVc1JldlBLNXBVMGJ3SjkzS0c0SHdHdys2VkdRaFBYRldnS3l1?= =?utf-8?B?MHRVc3YreXJFQkluL1BBcUpHVlppODJYOFgxcXdyb05FdUQ4Ny9qanJGdTc0?= =?utf-8?B?WFNKMmxjYjhHRWlCSzJqUEpEaC9QZHo4aytpMjdhcHNyWE4zRTRwY1NJVzhT?= =?utf-8?B?cGFOM21iKy90ZkFZL0w2UStKODJNSndBRXRab2Y5azJidllUcnVzK1VLUUlU?= =?utf-8?B?MzFVQ211aDFjWTVkWElJTlp4RGU0dS8zZDRKRThMS3RnQ2dnZmhadGNTb2hT?= =?utf-8?B?MU9tZDFxcnRWVXdvczg4SWF6WEI3SlJRZUNUby9DRWMvNFlTZG5VSWhOV3hp?= =?utf-8?B?M1A0Vm81clhhV2NkKzRSVW90TkQ0cmJxTnlIaTF6bmo4bndQeUVSUUszeExk?= =?utf-8?B?amJKQUoyUXZXeFFiL3hXOUFudVVhSzk3aklOR0JMSWd6TEw5K0VzcCtwRytE?= =?utf-8?B?Ym5UV29iblkyL3lrdU1BMkRvcHZlRHF1eGZrOE85QzVZN3hwZVhleHdwYklo?= =?utf-8?B?OWVlZnJWYk51U3N0TXFMRWRQU2p5S1dybTVnd1QzZ2RySWd4TDFYNkYyQmsw?= =?utf-8?B?VXV1a1JXQ2pnT0FQSEFzU2RqMHdKeG9MSU1nTllwMWNqUTM1bGpGcXo5dDgv?= =?utf-8?B?VS9IcFB2L20vYytTdzdBRzBCR2VoZUEzODhmRW9Ob2dWVzgyTm8zcmd6d0FY?= =?utf-8?B?Q3FudGRxbUxhcVAwcHRFZDFoV2k3dE9LL2dOWnljaFpvcGhJNHZlbU43Qnk2?= =?utf-8?B?Y3ZlZDBva2tIQnhQVEFBcDFjc3JVaS8wUHY1R0tKRTR4QjlGZGxhYmFlVUhK?= =?utf-8?B?VjZLSVQ0azU2cjJZUCtreFNHV29DQnpweGFiM0E4NDlRdTlxbWxPSlhUTUNS?= =?utf-8?B?a1NJRkFSQTl6d09aMUQ1dU5ETWppckV5N3pzdW1TcUd4ODk1ZW5LSUtYS1px?= =?utf-8?B?MEpHMUNQNEVEY3NNS2ZCenIrUk54NUlrQXFvQ0xjRnFuclJWREZlUHhENmNm?= =?utf-8?B?b3VkaSt6ZWV6VjZWZDZNZVNaU2R2QitRRUoyeFNwNjVKRmYrckl2UXd1eVZE?= =?utf-8?B?eEd6b3IrSlg0VU44ZXIwUmxyRktOTktzK2N2M0dGTThXWTEyZ1dLOEZUQ0hK?= =?utf-8?B?ektlTUdYSFg5cHBYd3l1aHBwYklHV2JjMXJNcmNDVldJWGtVWDBDOEd4dVJC?= =?utf-8?B?bE5CZWd1ZG95N0wxOTFoUndlV0RRRk0yZ0tjVDg4cXU1ajQ0cDd4amJWYnha?= =?utf-8?B?R1BxaUUzTmJMOXBsSmN3S0NQK2I2b1V3SW5aallWZFhsMUV3Mys1U3V5TUIr?= =?utf-8?B?TitaT2k5Q3ZPRjR3MVN2b1UxVGVEM0l3NTZ3WHNsRmt2Ky9pYk52UT09?= Content-Type: multipart/mixed; boundary="_002_OS0PR01MB57166BC3CAA873364A2CC07A94EF9OS0PR01MB5716jpnp_" 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: 1dded31a-cd0c-4ecf-745a-08da1dc8d2fa X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Apr 2022 03:42:39.6171 (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: fHn0WkyVkMPRIR+IWk1t50Cy/Zy6qJAsbA90kKmStPbc7QCvk1GTMbq0xHgFUSPgQViBNQ6ELs2grKVHdjK3JA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSBPR01MB3703 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_OS0PR01MB57166BC3CAA873364A2CC07A94EF9OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gRnJpZGF5LCBBcHJpbCA4LCAyMDIyIDU6MTQgUE0gaG91emouZm5zdEBmdWppdHN1LmNvbSA8 aG91emouZm5zdEBmdWppdHN1LmNvbT4gd3JvdGU6DQo+IE9uIFdlZG5lc2RheSwgQXByaWwgNiwg MjAyMiAxOjIwIFBNIEFtaXQgS2FwaWxhIDxhbWl0LmthcGlsYTE2QGdtYWlsLmNvbT4NCj4gd3Jv dGU6DQo+IA0KPiA+IEluIHRoaXMgZW1haWwsIEkgd291bGQgbGlrZSB0byBkaXNjdXNzIGFsbG93 aW5nIHN0cmVhbWluZyBsb2dpY2FsDQo+ID4gdHJhbnNhY3Rpb25zIChsYXJnZSBpbi1wcm9ncmVz cyB0cmFuc2FjdGlvbnMpIGJ5IGJhY2tncm91bmQgd29ya2Vycw0KPiA+IGFuZCBwYXJhbGxlbCBh cHBseSBpbiBnZW5lcmFsLiBUaGUgZ29hbCBvZiB0aGlzIHdvcmsgaXMgdG8gaW1wcm92ZSB0aGUN Cj4gPiBwZXJmb3JtYW5jZSBvZiB0aGUgYXBwbHkgd29yayBpbiBsb2dpY2FsIHJlcGxpY2F0aW9u Lg0KPiA+DQo+ID4gQ3VycmVudGx5LCBmb3IgbGFyZ2UgdHJhbnNhY3Rpb25zLCB0aGUgcHVibGlz aGVyIHNlbmRzIHRoZSBkYXRhIGluDQo+ID4gbXVsdGlwbGUgc3RyZWFtcyAoY2hhbmdlcyBkaXZp ZGVkIGludG8gY2h1bmtzIGRlcGVuZGluZyB1cG9uDQo+ID4gbG9naWNhbF9kZWNvZGluZ193b3Jr X21lbSksIGFuZCB0aGVuIG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUsIHRoZSBhcHBseQ0KPiA+IHdv cmtlciB3cml0ZXMgdGhlIGNoYW5nZXMgaW50byB0ZW1wb3JhcnkgZmlsZXMgYW5kIG9uY2UgaXQg cmVjZWl2ZXMNCj4gPiB0aGUgY29tbWl0LCBpdCByZWFkIGZyb20gdGhlIGZpbGUgYW5kIGFwcGx5 IHRoZSBlbnRpcmUgdHJhbnNhY3Rpb24uIFRvDQo+ID4gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ug b2Ygc3VjaCB0cmFuc2FjdGlvbnMsIHdlIGNhbiBpbnN0ZWFkIGFsbG93DQo+ID4gdGhlbSB0byBi ZSBhcHBsaWVkIHZpYSBiYWNrZ3JvdW5kIHdvcmtlcnMuIFRoZXJlIGNvdWxkIGJlIG11bHRpcGxl DQo+ID4gd2F5cyB0byBhY2hpZXZlIHRoaXM6DQo+ID4NCj4gPiBBcHByb2FjaC0xOiBBc3NpZ24g YSBuZXcgYmd3b3JrZXIgKGlmIGF2YWlsYWJsZSkgYXMgc29vbiBhcyB0aGUgeGFjdCdzDQo+ID4g Zmlyc3Qgc3RyZWFtIGNhbWUgYW5kIHRoZSBtYWluIGFwcGx5IHdvcmtlciB3aWxsIHNlbmQgY2hh bmdlcyB0byB0aGlzDQo+ID4gbmV3IHdvcmtlciB2aWEgc2hhcmVkIG1lbW9yeS4gV2Uga2VlcCB0 aGlzIHdvcmtlciBhc3NpZ25lZCB0aWxsIHRoZQ0KPiA+IHRyYW5zYWN0aW9uIGNvbW1pdCBjYW1l IGFuZCBhbHNvIHdhaXQgZm9yIHRoZSB3b3JrZXIgdG8gZmluaXNoIGF0DQo+ID4gY29tbWl0LiBU aGlzIHByZXNlcnZlcyBjb21taXQgb3JkZXJpbmcgYW5kIGF2b2lkIHdyaXRpbmcgdG8gYW5kDQo+ ID4gcmVhZGluZyBmcm9tIGZpbGUgaW4gbW9zdCBjYXNlcy4gV2Ugc3RpbGwgbmVlZCB0byBzcGls bCBpZiB0aGVyZSBpcyBubw0KPiA+IHdvcmtlciBhdmFpbGFibGUuIFdlIGFsc28gbmVlZCB0byBh bGxvdyBzdHJlYW1fc3RvcCB0byBjb21wbGV0ZSBieSB0aGUNCj4gPiBiYWNrZ3JvdW5kIHdvcmtl ciB0byBmaW5pc2ggaXQgdG8gYXZvaWQgZGVhZGxvY2tzIGJlY2F1c2UgVC0xJ3MNCj4gPiBjdXJy ZW50IHN0cmVhbSBvZiBjaGFuZ2VzIGNhbiB1cGRhdGUgcm93cyBpbiBjb25mbGljdGluZyBvcmRl ciB3aXRoDQo+ID4gVC0yJ3MgbmV4dCBzdHJlYW0gb2YgY2hhbmdlcy4NCj4gPg0KPiANCj4gQXR0 YWNoIHRoZSBQT0MgcGF0Y2ggZm9yIHRoZSBBcHByb2FjaC0xIG9mICJQZXJmb3JtIHN0cmVhbWlu ZyBsb2dpY2FsDQo+IHRyYW5zYWN0aW9ucyBieSBiYWNrZ3JvdW5kIHdvcmtlcnMiLiBUaGUgcGF0 Y2ggaXMgc3RpbGwgYSBXSVAgcGF0Y2ggYXMNCj4gdGhlcmUgYXJlIHNlcnZhbCBUT0RPIGl0ZW1z IGxlZnQsIGluY2x1ZGluZzoNCj4gDQo+ICogZXJyb3IgaGFuZGxpbmcgZm9yIGJnd29ya2VyDQo+ ICogc3VwcG9ydCBmb3IgU0tJUCB0aGUgdHJhbnNhY3Rpb24gaW4gYmd3b3JrZXINCj4gKiBoYW5k bGUgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBubyBtb3JlIHdvcmtlciBhdmFpbGFibGUNCj4gICAo bWlnaHQgbmVlZCBzcGlsbCB0aGUgZGF0YSB0byB0aGUgdGVtcCBmaWxlIGluIHRoaXMgY2FzZSkN Cj4gKiBzb21lIHBvdGVudGlhbCBidWdzDQo+IA0KPiBUaGUgb3JpZ2luYWwgcGF0Y2ggaXMgYm9y cm93ZWQgZnJvbSBhbiBvbGQgdGhyZWFkWzFdIGFuZCB3YXMgcmViYXNlZCBhbmQNCj4gZXh0ZW5k ZWQvY2xlYW5lZCBieSBtZS4gQ29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIGFyZSB3ZWxjb21lLg0K DQpBdHRhY2ggYSBuZXcgdmVyc2lvbiBwYXRjaCB3aGljaCBpbXByb3ZlZCB0aGUgZXJyb3IgaGFu ZGxpbmcgYW5kIGhhbmRsZWQgdGhlIGNhc2UNCndoZW4gdGhlcmUgaXMgbm8gbW9yZSB3b3JrZXIg YXZhaWxhYmxlICh3aWxsIHNwaWxsIHRoZSBkYXRhIHRvIHRoZSB0ZW1wIGZpbGUgaW4gdGhpcyBj YXNlKS4NCg0KQ3VycmVudGx5LCBpdCBzdGlsbCBkb2Vzbid0IHN1cHBvcnQgc2tpcCB0aGUgc3Ry ZWFtZWQgdHJhbnNhY3Rpb24gaW4gYmd3b3JrZXIsIGJlY2F1c2UNCmluIHRoaXMgYXBwcm9hY2gs IHdlIGRvbid0IGtub3cgdGhlIGxhc3QgbHNuIGZvciB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rpb24g YmVpbmcgYXBwbGllZCwNCnNvIGNhbm5vdCBnZXQgdGhlIGxzbiB0byBTS0lQLiBJIHdpbGwgdGhp bmsgbW9yZSBhYm91dCBpdCBhbmQga2VlcCB0ZXN0aW5nIHRoZSBwYXRjaC4NCg0KQmVzdCByZWdh cmRzLA0KSG91IHpqDQoNCg0KDQo= --_002_OS0PR01MB57166BC3CAA873364A2CC07A94EF9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v2-0001-Perform-streaming-logical-transactions-by-background.patch" Content-Description: v2-0001-Perform-streaming-logical-transactions-by-background.patch Content-Disposition: attachment; filename="v2-0001-Perform-streaming-logical-transactions-by-background.patch"; size=63863; creation-date="Thu, 14 Apr 2022 03:41:00 GMT"; modification-date="Thu, 14 Apr 2022 03:42:37 GMT" Content-Transfer-Encoding: base64 RnJvbSAxNjUxMjMwNjdlNjMzZWNjZjU3OGY5YTM3MzgxOWI4MDg5OTA0MGRkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IEZyaSwgOCBBcHIgMjAyMiAxMDozMDoyMyArMDgwMApTdWJqZWN0OiBbUEFUQ0hd IFBlcmZvcm0gc3RyZWFtaW5nIGxvZ2ljYWwgdHJhbnNhY3Rpb25zIGJ5IGJhY2tncm91bmQgd29y a2VycwoKQ3VycmVudGx5LCBmb3IgbGFyZ2UgdHJhbnNhY3Rpb25zLCB0aGUgcHVibGlzaGVyIHNl bmRzIHRoZSBkYXRhIGluIG11bHRpcGxlCnN0cmVhbXMgKGNoYW5nZXMgZGl2aWRlZCBpbnRvIGNo dW5rcyBkZXBlbmRpbmcgdXBvbiBsb2dpY2FsX2RlY29kaW5nX3dvcmtfbWVtKSwKYW5kIHRoZW4g b24gdGhlIHN1YnNjcmliZXItc2lkZSwgdGhlIGFwcGx5IHdvcmtlciB3cml0ZXMgdGhlIGNoYW5n ZXMgaW50bwp0ZW1wb3JhcnkgZmlsZXMgYW5kIG9uY2UgaXQgcmVjZWl2ZXMgdGhlIGNvbW1pdCwg aXQgcmVhZCBmcm9tIHRoZSBmaWxlIGFuZAphcHBseSB0aGUgZW50aXJlIHRyYW5zYWN0aW9uLiBU byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBzdWNoIHRyYW5zYWN0aW9ucywKd2UgY2FuIGlu c3RlYWQgYWxsb3cgdGhlbSB0byBiZSBhcHBsaWVkIHZpYSBiYWNrZ3JvdW5kIHdvcmtlcnMuCgpJ biB0aGlzIGFwcHJvYWNoLCB3ZSBhc3NpZ24gYSBuZXcgYmd3b3JrZXIgKGlmIGF2YWlsYWJsZSkg YXMgc29vbiBhcyB0aGUgeGFjdCdzCmZpcnN0IHN0cmVhbSBjYW1lIGFuZCB0aGUgbWFpbiBhcHBs eSB3b3JrZXIgd2lsbCBzZW5kIGNoYW5nZXMgdG8gdGhpcyBuZXcKd29ya2VyIHZpYSBzaGFyZWQg bWVtb3J5LiBUaGUgYmd3b3JrZXIgd2lsbCBkaXJlY3RseSBhcHBseSB0aGUgY2hhbmdlIGluc3Rl YWQKb2Ygd3JpdGluZyBpdCB0byB0ZW1wb3JhcnkgZmlsZXMuICBXZSBrZWVwIHRoaXMgd29ya2Vy IGFzc2lnbmVkIHRpbGwgdGhlCnRyYW5zYWN0aW9uIGNvbW1pdCBjYW1lIGFuZCBhbHNvIHdhaXQg Zm9yIHRoZSB3b3JrZXIgdG8gZmluaXNoIGF0IGNvbW1pdC4gVGhpcwpwcmVzZXJ2ZXMgY29tbWl0 IG9yZGVyaW5nIGFuZCBhdm9pZCB3cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gZmlsZSBpbiBt b3N0CmNhc2VzLiBXZSBzdGlsbCBuZWVkIHRvIHNwaWxsIGlmIHRoZXJlIGlzIG5vIHdvcmtlciBh dmFpbGFibGUuIFdlIGFsc28gbmVlZCB0bwphbGxvdyBzdHJlYW1fc3RvcCB0byBjb21wbGV0ZSBi eSB0aGUgYmFja2dyb3VuZCB3b3JrZXIgdG8gZmluaXNoIGl0IHRvIGF2b2lkCmRlYWRsb2NrcyBi ZWNhdXNlIFQtMSdzIGN1cnJlbnQgc3RyZWFtIG9mIGNoYW5nZXMgY2FuIHVwZGF0ZSByb3dzIGlu CmNvbmZsaWN0aW5nIG9yZGVyIHdpdGggVC0yJ3MgbmV4dCBzdHJlYW0gb2YgY2hhbmdlcy4KLS0t CiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgICAgICAgICAgIHwgICAgMyArCiBz cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgIHwgICA3MiArLQogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYyAgICB8ICAgMTAgKy0KIHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgICAgfCAgICA3ICstCiBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIHwgICAgNyArLQogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICB8IDEzOTUgKysrKysrKysrKysrKysr KysrKysrKysrLS0tCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMgICAg IHwgICAgMyArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCAgICAgIHwg ICAgNCArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oICAgICB8ICAg IDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmggICAgICAgICAgICB8ICAgIDIg Ky0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oICAgfCAgICA3ICst CiBzcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmggICAgICAgICAgICAgIHwgICAgMSArCiBz cmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjlfb25fZXJyb3IucGwgICAgIHwgICAyMiArLQogMTMg ZmlsZXMgY2hhbmdlZCwgMTM3NyBpbnNlcnRpb25zKCspLCAxNTcgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9iZ3dvcmtlci5jCmluZGV4IDMwNjgyYjYuLjE5NGEzNmIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2Jnd29ya2VyLmMKQEAgLTEyOCw2ICsxMjgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 CiAJfSwKIAl7CiAJCSJBcHBseVdvcmtlck1haW4iLCBBcHBseVdvcmtlck1haW4KKwl9LAorCXsK KwkJIkxvZ2ljYWxBcHBseUJnd01haW4iLCBMb2dpY2FsQXBwbHlCZ3dNYWluCiAJfQogfTsKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCmluZGV4IDZmMjViMmMu LjhhZjg4ZjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1 bmNoZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMK QEAgLTcyLDYgKzcyLDcgQEAgc3RhdGljIHZvaWQgbG9naWNhbHJlcF9sYXVuY2hlcl9vbmV4aXQo aW50IGNvZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9vbmV4 aXQoaW50IGNvZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9k ZXRhY2godm9pZCk7CiBzdGF0aWMgdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9jbGVhbnVwKExvZ2lj YWxSZXBXb3JrZXIgKndvcmtlcik7CitzdGF0aWMgdm9pZCBzdG9wX3dvcmtlcihMb2dpY2FsUmVw V29ya2VyICp3b3JrZXIpOwogCiBzdGF0aWMgYm9vbCBvbl9jb21taXRfbGF1bmNoZXJfd2FrZXVw ID0gZmFsc2U7CiAKQEAgLTIyNSw3ICsyMjYsNyBAQCBsb2dpY2FscmVwX3dvcmtlcl9maW5kKE9p ZCBzdWJpZCwgT2lkIHJlbGlkLCBib29sIG9ubHlfcnVubmluZykKIAkJTG9naWNhbFJlcFdvcmtl ciAqdyA9ICZMb2dpY2FsUmVwQ3R4LT53b3JrZXJzW2ldOwogCiAJCWlmICh3LT5pbl91c2UgJiYg dy0+c3ViaWQgPT0gc3ViaWQgJiYgdy0+cmVsaWQgPT0gcmVsaWQgJiYKLQkJCSghb25seV9ydW5u aW5nIHx8IHctPnByb2MpKQorCQkJKCFvbmx5X3J1bm5pbmcgfHwgdy0+cHJvYykgJiYgIXctPnN1 YndvcmtlcikKIAkJewogCQkJcmVzID0gdzsKIAkJCWJyZWFrOwpAQCAtMjYyLDkgKzI2Myw5IEBA IGxvZ2ljYWxyZXBfd29ya2Vyc19maW5kKE9pZCBzdWJpZCwgYm9vbCBvbmx5X3J1bm5pbmcpCiAv KgogICogU3RhcnQgbmV3IGFwcGx5IGJhY2tncm91bmQgd29ya2VyLCBpZiBwb3NzaWJsZS4KICAq Lwotdm9pZAorYm9vbAogbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE9pZCBkYmlkLCBPaWQgc3Vi aWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsIE9pZCB1c2VyaWQsCi0JCQkJCQkgT2lkIHJlbGlkKQor CQkJCQkJIE9pZCByZWxpZCwgZHNtX2hhbmRsZSBzdWJ3b3JrZXJfZHNtKQogewogCUJhY2tncm91 bmRXb3JrZXIgYmd3OwogCUJhY2tncm91bmRXb3JrZXJIYW5kbGUgKmJnd19oYW5kbGU7CkBAIC0z NTEsNyArMzUyLDcgQEAgcmV0cnk6CiAJaWYgKG5zeW5jd29ya2VycyA+PSBtYXhfc3luY193b3Jr ZXJzX3Blcl9zdWJzY3JpcHRpb24pCiAJewogCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3Jr ZXJMb2NrKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyoKQEAgLTM2NSw3 ICszNjYsNyBAQCByZXRyeToKIAkJCQkoZXJyY29kZShFUlJDT0RFX0NPTkZJR1VSQVRJT05fTElN SVRfRVhDRUVERUQpLAogCQkJCSBlcnJtc2coIm91dCBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdv cmtlciBzbG90cyIpLAogCQkJCSBlcnJoaW50KCJZb3UgbWlnaHQgbmVlZCB0byBpbmNyZWFzZSBt YXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzLiIpKSk7Ci0JCXJldHVybjsKKwkJcmV0dXJu IGZhbHNlOwogCX0KIAogCS8qIFByZXBhcmUgdGhlIHdvcmtlciBzbG90LiAqLwpAQCAtMzgwLDYg KzM4MSw3IEBAIHJldHJ5OgogCXdvcmtlci0+cmVsc3RhdGUgPSBTVUJSRUxfU1RBVEVfVU5LTk9X TjsKIAl3b3JrZXItPnJlbHN0YXRlX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogCXdvcmtlci0+ c3RyZWFtX2ZpbGVzZXQgPSBOVUxMOworCXdvcmtlci0+c3Vid29ya2VyID0gKHN1Yndvcmtlcl9k c20gIT0gRFNNX0hBTkRMRV9JTlZBTElEKTsKIAl3b3JrZXItPmxhc3RfbHNuID0gSW52YWxpZFhM b2dSZWNQdHI7CiAJVElNRVNUQU1QX05PQkVHSU4od29ya2VyLT5sYXN0X3NlbmRfdGltZSk7CiAJ VElNRVNUQU1QX05PQkVHSU4od29ya2VyLT5sYXN0X3JlY3ZfdGltZSk7CkBAIC0zOTcsMTkgKzM5 OSwzMSBAQCByZXRyeToKIAkJQkdXT1JLRVJfQkFDS0VORF9EQVRBQkFTRV9DT05ORUNUSU9OOwog CWJndy5iZ3dfc3RhcnRfdGltZSA9IEJnV29ya2VyU3RhcnRfUmVjb3ZlcnlGaW5pc2hlZDsKIAlz bnByaW50ZihiZ3cuYmd3X2xpYnJhcnlfbmFtZSwgQkdXX01BWExFTiwgInBvc3RncmVzIik7Ci0J c25wcmludGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiQXBwbHlXb3JrZXJN YWluIik7CisKKwlpZiAoc3Vid29ya2VyX2RzbSA9PSBEU01fSEFORExFX0lOVkFMSUQpCisJCXNu cHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwgIkFwcGx5V29ya2VyTWFp biIpOworCWVsc2UKKwkJc25wcmludGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVO LCAiTG9naWNhbEFwcGx5Qmd3TWFpbiIpOworCisKIAlpZiAoT2lkSXNWYWxpZChyZWxpZCkpCiAJ CXNucHJpbnRmKGJndy5iZ3dfbmFtZSwgQkdXX01BWExFTiwKIAkJCQkgImxvZ2ljYWwgcmVwbGlj YXRpb24gd29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUgc3luYyAldSIsIHN1YmlkLCByZWxpZCk7 Ci0JZWxzZQorCWVsc2UgaWYgKHN1Yndvcmtlcl9kc20gPT0gRFNNX0hBTkRMRV9JTlZBTElEKQog CQlzbnByaW50ZihiZ3cuYmd3X25hbWUsIEJHV19NQVhMRU4sCiAJCQkJICJsb2dpY2FsIHJlcGxp Y2F0aW9uIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1Iiwgc3ViaWQpOworCWVsc2UKKwkJc25w cmludGYoYmd3LmJnd19uYW1lLCBCR1dfTUFYTEVOLAorCQkJCSAibG9naWNhbCByZXBsaWNhdGlv biBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiAldSIsIHN1YmlkKTsKIAlzbnByaW50Zihi Z3cuYmd3X3R5cGUsIEJHV19NQVhMRU4sICJsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciIpOwog CiAJYmd3LmJnd19yZXN0YXJ0X3RpbWUgPSBCR1dfTkVWRVJfUkVTVEFSVDsKIAliZ3cuYmd3X25v dGlmeV9waWQgPSBNeVByb2NQaWQ7CiAJYmd3LmJnd19tYWluX2FyZyA9IEludDMyR2V0RGF0dW0o c2xvdCk7CiAKKwlpZiAoc3Vid29ya2VyX2RzbSAhPSBEU01fSEFORExFX0lOVkFMSUQpCisJCW1l bWNweShiZ3cuYmd3X2V4dHJhLCAmc3Vid29ya2VyX2RzbSwgc2l6ZW9mKGRzbV9oYW5kbGUpKTsK KwogCWlmICghUmVnaXN0ZXJEeW5hbWljQmFja2dyb3VuZFdvcmtlcigmYmd3LCAmYmd3X2hhbmRs ZSkpCiAJewogCQkvKiBGYWlsZWQgdG8gc3RhcnQgd29ya2VyLCBzbyBjbGVhbiB1cCB0aGUgd29y a2VyIHNsb3QuICovCkBAIC00MjIsMTEgKzQzNiwxMyBAQCByZXRyeToKIAkJCQkoZXJyY29kZShF UlJDT0RFX0NPTkZJR1VSQVRJT05fTElNSVRfRVhDRUVERUQpLAogCQkJCSBlcnJtc2coIm91dCBv ZiBiYWNrZ3JvdW5kIHdvcmtlciBzbG90cyIpLAogCQkJCSBlcnJoaW50KCJZb3UgbWlnaHQgbmVl ZCB0byBpbmNyZWFzZSBtYXhfd29ya2VyX3Byb2Nlc3Nlcy4iKSkpOwotCQlyZXR1cm47CisJCXJl dHVybiBmYWxzZTsKIAl9CiAKIAkvKiBOb3cgd2FpdCB1bnRpbCBpdCBhdHRhY2hlcy4gKi8KIAlX YWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2god29ya2VyLCBnZW5lcmF0aW9uLCBiZ3dfaGFu ZGxlKTsKKworCXJldHVybiB0cnVlOwogfQogCiAvKgpAQCAtNDM3LDcgKzQ1Myw2IEBAIHZvaWQK IGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQpCiB7CiAJTG9naWNh bFJlcFdvcmtlciAqd29ya2VyOwotCXVpbnQxNgkJZ2VuZXJhdGlvbjsKIAogCUxXTG9ja0FjcXVp cmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CiAKQEAgLTQ1MCw2ICs0NjUsMTgg QEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCkKIAkJcmV0dXJu OwogCX0KIAorCXN0b3Bfd29ya2VyKHdvcmtlcik7CisKKwlMV0xvY2tSZWxlYXNlKExvZ2ljYWxS ZXBXb3JrZXJMb2NrKTsKK30KKworc3RhdGljIHZvaWQKK3N0b3Bfd29ya2VyKExvZ2ljYWxSZXBX b3JrZXIgKndvcmtlcikKK3sKKwl1aW50MTYJCWdlbmVyYXRpb247CisKKwlBc3NlcnQoTFdMb2Nr SGVsZEJ5TWUoTG9naWNhbFJlcFdvcmtlckxvY2spKTsKKwogCS8qCiAJICogUmVtZW1iZXIgd2hp Y2ggZ2VuZXJhdGlvbiB3YXMgb3VyIHdvcmtlciBzbyB3ZSBjYW4gY2hlY2sgaWYgd2hhdCB3ZSBz ZWUKIAkgKiBpcyBzdGlsbCB0aGUgc2FtZSBvbmUuCkBAIC01MjMsOCArNTUwLDYgQEAgbG9naWNh bHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCkKIAogCQlMV0xvY2tBY3F1aXJl KExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwogCX0KLQotCUxXTG9ja1JlbGVhc2Uo TG9naWNhbFJlcFdvcmtlckxvY2spOwogfQogCiAvKgpAQCAtNjAwLDYgKzYyNSwyOCBAQCBsb2dp Y2FscmVwX3dvcmtlcl9hdHRhY2goaW50IHNsb3QpCiBzdGF0aWMgdm9pZAogbG9naWNhbHJlcF93 b3JrZXJfZGV0YWNoKHZvaWQpCiB7CisJLyoKKwkgKiBJZiB3ZSBhcmUgdGhlIG1haW4gYXBwbHkg d29ya2VyLCBzdG9wIGFsbCB0aGUgc3ViIGFwcGx5IHdvcmtlcnMgd2UKKwkgKiBzdGFydGVkIGJl Zm9yZS4KKwkgKi8KKwlpZiAoIU15TG9naWNhbFJlcFdvcmtlci0+c3Vid29ya2VyKQorCXsKKwkJ TGlzdAkgKndvcmtlcnM7CisJCUxpc3RDZWxsICpsYzsKKworCQlMV0xvY2tBY3F1aXJlKExvZ2lj YWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOworCisJCXdvcmtlcnMgPSBsb2dpY2FscmVwX3dv cmtlcnNfZmluZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB0cnVlKTsKKwkJZm9yZWFjaChs Yywgd29ya2VycykKKwkJeworCQkJTG9naWNhbFJlcFdvcmtlciAqdyA9IChMb2dpY2FsUmVwV29y a2VyICopIGxmaXJzdChsYyk7CisJCQlpZiAody0+c3Vid29ya2VyKQorCQkJCXN0b3Bfd29ya2Vy KHcpOworCQl9CisKKwkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CisJfQor CiAJLyogQmxvY2sgY29uY3VycmVudCBhY2Nlc3MuICovCiAJTFdMb2NrQWNxdWlyZShMb2dpY2Fs UmVwV29ya2VyTG9jaywgTFdfRVhDTFVTSVZFKTsKIApAQCAtNjIyLDYgKzY2OSw3IEBAIGxvZ2lj YWxyZXBfd29ya2VyX2NsZWFudXAoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKQogCXdvcmtlci0+ dXNlcmlkID0gSW52YWxpZE9pZDsKIAl3b3JrZXItPnN1YmlkID0gSW52YWxpZE9pZDsKIAl3b3Jr ZXItPnJlbGlkID0gSW52YWxpZE9pZDsKKwl3b3JrZXItPnN1YndvcmtlciA9IGZhbHNlOwogfQog CiAvKgpAQCAtODY5LDcgKzkxNyw3IEBAIEFwcGx5TGF1bmNoZXJNYWluKERhdHVtIG1haW5fYXJn KQogCQkJCQl3YWl0X3RpbWUgPSB3YWxfcmV0cmlldmVfcmV0cnlfaW50ZXJ2YWw7CiAKIAkJCQkJ bG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKHN1Yi0+ZGJpZCwgc3ViLT5vaWQsIHN1Yi0+bmFtZSwK LQkJCQkJCQkJCQkJIHN1Yi0+b3duZXIsIEludmFsaWRPaWQpOworCQkJCQkJCQkJCQkgc3ViLT5v d25lciwgSW52YWxpZE9pZCwgRFNNX0hBTkRMRV9JTlZBTElEKTsKIAkJCQl9CiAJCQl9CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCmluZGV4IDBlMzhlZmYuLjI2MTk3 MGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYwpAQCAtMTA2OSw3 ICsxMDY5LDcgQEAgUmVwbGljYXRpb25PcmlnaW5FeGl0Q2xlYW51cChpbnQgY29kZSwgRGF0dW0g YXJnKQogICogd2l0aCByZXBsb3JpZ2luX3Nlc3Npb25fcmVzZXQoKS4KICAqLwogdm9pZAotcmVw bG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpCityZXBsb3JpZ2luX3Nlc3Np b25fc2V0dXAoUmVwT3JpZ2luSWQgbm9kZSwgYm9vbCBhY3F1aXJlKQogewogCXN0YXRpYyBib29s IHJlZ2lzdGVyZWRfY2xlYW51cDsKIAlpbnQJCQlpOwpAQCAtMTExMSw3ICsxMTExLDExIEBAIHJl cGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlKQogCQlpZiAoY3Vyc3RhdGUt PnJvaWRlbnQgIT0gbm9kZSkKIAkJCWNvbnRpbnVlOwogCi0JCWVsc2UgaWYgKGN1cnN0YXRlLT5h Y3F1aXJlZF9ieSAhPSAwKQorCQkvKgorCQkgKiBXZSBhbGxvdyB0aGUgYXBwbHkgd29ya2VyIHRv IGdldCB0aGUgc2xvdCB3aGljaCBpcyBhY3F1aXJlZCBieSBpdHMKKwkJICogbGVhZGVyIHByb2Nl c3MuCisJCSAqLworCQllbHNlIGlmIChjdXJzdGF0ZS0+YWNxdWlyZWRfYnkgIT0gMCAmJiBhY3F1 aXJlKQogCQl7CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVD VF9JTl9VU0UpLApAQCAtMTMyMiw3ICsxMzI2LDcgQEAgcGdfcmVwbGljYXRpb25fb3JpZ2luX3Nl c3Npb25fc2V0dXAoUEdfRlVOQ1RJT05fQVJHUykKIAogCW5hbWUgPSB0ZXh0X3RvX2NzdHJpbmco KHRleHQgKikgRGF0dW1HZXRQb2ludGVyKFBHX0dFVEFSR19EQVRVTSgwKSkpOwogCW9yaWdpbiA9 IHJlcGxvcmlnaW5fYnlfbmFtZShuYW1lLCBmYWxzZSk7Ci0JcmVwbG9yaWdpbl9zZXNzaW9uX3Nl dHVwKG9yaWdpbik7CisJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbiwgdHJ1ZSk7CiAK IAlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luOwogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggZmY4NTEzZS4uMDQwOWZkZSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtMTEzOCwxNCArMTEzOCwxMSBAQCBsb2dp Y2FscmVwX3dyaXRlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBvdXQsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKIC8qCiAgKiBSZWFkIFNUUkVBTSBDT01NSVQgZnJvbSB0aGUgb3V0cHV0IHN0cmVh bS4KICAqLwotVHJhbnNhY3Rpb25JZAordm9pZAogbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9jb21t aXQoU3RyaW5nSW5mbyBpbiwgTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKQogewot CVRyYW5zYWN0aW9uSWQgeGlkOwogCXVpbnQ4CQlmbGFnczsKIAotCXhpZCA9IHBxX2dldG1zZ2lu dChpbiwgNCk7Ci0KIAkvKiByZWFkIGZsYWdzICh1bnVzZWQgZm9yIG5vdykgKi8KIAlmbGFncyA9 IHBxX2dldG1zZ2J5dGUoaW4pOwogCkBAIC0xMTU2LDggKzExNTMsNiBAQCBsb2dpY2FscmVwX3Jl YWRfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwQ29tbWl0RGF0YSAqY29t bWl0X2RhdGEpCiAJY29tbWl0X2RhdGEtPmNvbW1pdF9sc24gPSBwcV9nZXRtc2dpbnQ2NChpbik7 CiAJY29tbWl0X2RhdGEtPmVuZF9sc24gPSBwcV9nZXRtc2dpbnQ2NChpbik7CiAJY29tbWl0X2Rh dGEtPmNvbW1pdHRpbWUgPSBwcV9nZXRtc2dpbnQ2NChpbik7Ci0KLQlyZXR1cm4geGlkOwogfQog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5 bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKaW5kZXgg NDljZWVjMy4uMWY0ZDRkMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC90YWJsZXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Rh Ymxlc3luYy5jCkBAIC01NjgsNyArNTY4LDggQEAgcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19mb3Jf YXBwbHkoWExvZ1JlY1B0ciBjdXJyZW50X2xzbikKIAkJCQkJCQkJCQkJCSBNeVN1YnNjcmlwdGlv bi0+b2lkLAogCQkJCQkJCQkJCQkJIE15U3Vic2NyaXB0aW9uLT5uYW1lLAogCQkJCQkJCQkJCQkJ IE15TG9naWNhbFJlcFdvcmtlci0+dXNlcmlkLAotCQkJCQkJCQkJCQkJIHJzdGF0ZS0+cmVsaWQp OworCQkJCQkJCQkJCQkJIHJzdGF0ZS0+cmVsaWQsCisJCQkJCQkJCQkJCQkgRFNNX0hBTkRMRV9J TlZBTElEKTsKIAkJCQkJCWhlbnRyeS0+bGFzdF9zdGFydF90aW1lID0gbm93OwogCQkJCQl9CiAJ CQkJfQpAQCAtMTI3NSw3ICsxMjc2LDcgQEAgTG9naWNhbFJlcFN5bmNUYWJsZVN0YXJ0KFhMb2dS ZWNQdHIgKm9yaWdpbl9zdGFydHBvcykKIAkJICogdGltZSB0aGlzIHRhYmxlc3luYyB3YXMgbGF1 bmNoZWQuCiAJCSAqLwogCQlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fYnlfbmFtZShvcmlnaW5uYW1l LCBmYWxzZSk7Ci0JCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCk7CisJCXJlcGxv cmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCwgdHJ1ZSk7CiAJCXJlcGxvcmlnaW5fc2Vzc2lv bl9vcmlnaW4gPSBvcmlnaW5pZDsKIAkJKm9yaWdpbl9zdGFydHBvcyA9IHJlcGxvcmlnaW5fc2Vz c2lvbl9nZXRfcHJvZ3Jlc3MoZmFsc2UpOwogCkBAIC0xMzg2LDcgKzEzODcsNyBAQCBMb2dpY2Fs UmVwU3luY1RhYmxlU3RhcnQoWExvZ1JlY1B0ciAqb3JpZ2luX3N0YXJ0cG9zKQogCQkJCQkJICAg dHJ1ZSAvKiBnbyBiYWNrd2FyZCAqLyAsIHRydWUgLyogV0FMIGxvZyAqLyApOwogCQlVbmxvY2tS ZWxhdGlvbk9pZChSZXBsaWNhdGlvbk9yaWdpblJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2sp OwogCi0JCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCk7CisJCXJlcGxvcmlnaW5f c2Vzc2lvbl9zZXR1cChvcmlnaW5pZCwgdHJ1ZSk7CiAJCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmln aW4gPSBvcmlnaW5pZDsKIAl9CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv d29ya2VyLmMKaW5kZXggOTE4MWQzZS4uNWZmY2ZkMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3dvcmtlci5jCkBAIC0yMiw3ICsyMiwyMyBAQAogICogU1RSRUFNRUQgVFJBTlNB Q1RJT05TCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFN0cmVhbWVkIHRyYW5zYWN0aW9u cyAobGFyZ2UgdHJhbnNhY3Rpb25zIGV4Y2VlZGluZyBhIG1lbW9yeSBsaW1pdCBvbiB0aGUKLSAq IHVwc3RyZWFtKSBhcmUgbm90IGFwcGxpZWQgaW1tZWRpYXRlbHksIGJ1dCBpbnN0ZWFkLCB0aGUg ZGF0YSBpcyB3cml0dGVuCisgKiB1cHN0cmVhbSkgYXJlIGFwcGxpZWQgdmlhIG9uZSBvZiB0d28g YXBwcm9hY2hlcy4KKyAqCisgKiAxKSBTZXBhcmF0ZSBiYWNrZ3JvdW5kIHdvcmtlcnMKKyAqCisg KiBBc3NpZ24gYSBuZXcgYmd3b3JrZXIgKGlmIGF2YWlsYWJsZSkgYXMgc29vbiBhcyB0aGUgeGFj dCdzIGZpcnN0IHN0cmVhbSBjYW1lCisgKiBhbmQgdGhlIG1haW4gYXBwbHkgd29ya2VyIHdpbGwg c2VuZCBjaGFuZ2VzIHRvIHRoaXMgbmV3IHdvcmtlciB2aWEgc2hhcmVkCisgKiBtZW1vcnkuIFdl IGtlZXAgdGhpcyB3b3JrZXIgYXNzaWduZWQgdGlsbCB0aGUgdHJhbnNhY3Rpb24gY29tbWl0IGNh bWUgYW5kCisgKiBhbHNvIHdhaXQgZm9yIHRoZSB3b3JrZXIgdG8gZmluaXNoIGF0IGNvbW1pdC4g VGhpcyBwcmVzZXJ2ZXMgY29tbWl0IG9yZGVyaW5nCisgKiBhbmQgYXZvaWQgd3JpdGluZyB0byBh bmQgcmVhZGluZyBmcm9tIGZpbGUgaW4gbW9zdCBjYXNlcy4gV2Ugc3RpbGwgbmVlZCB0bworICog c3BpbGwgaWYgdGhlcmUgaXMgbm8gd29ya2VyIGF2YWlsYWJsZS4gV2UgYWxzbyBuZWVkIHRvIGFs bG93IHN0cmVhbV9zdG9wIHRvCisgKiBjb21wbGV0ZSBieSB0aGUgYmFja2dyb3VuZCB3b3JrZXIg dG8gZmluaXNoIGl0IHRvIGF2b2lkIGRlYWRsb2NrcyBiZWNhdXNlCisgKiBULTEncyBjdXJyZW50 IHN0cmVhbSBvZiBjaGFuZ2VzIGNhbiB1cGRhdGUgcm93cyBpbiBjb25mbGljdGluZyBvcmRlciB3 aXRoCisgKiBULTIncyBuZXh0IHN0cmVhbSBvZiBjaGFuZ2VzLgorICoKKyAqIDIpIFdyaXRlIHRv IHRlbXBvcmFyeSBmaWxlcyBhbmQgYXBwbHkgd2hlbiB0aGUgZmluYWwgY29tbWl0IGFycml2ZXMK KyAqCisgKiBJZiBubyB3b3JrZXIgaXMgYXZhaWxhYmxlIHRvIGhhbmRsZSBzdHJlYW1lZCB0cmFu c2FjdGlvbiwgd2Ugd3JpdGUgdGhlIGRhdGEKICAqIHRvIHRlbXBvcmFyeSBmaWxlcyBhbmQgdGhl biBhcHBsaWVkIGF0IG9uY2Ugd2hlbiB0aGUgZmluYWwgY29tbWl0IGFycml2ZXMuCiAgKgogICog VW5saWtlIHRoZSByZWd1bGFyIChub24tc3RyZWFtZWQpIGNhc2UsIGhhbmRsaW5nIHN0cmVhbWVk IHRyYW5zYWN0aW9ucyBoYXMKQEAgLTE3NCwxMSArMTkwLDE1IEBACiAjaW5jbHVkZSAicmV3cml0 ZS9yZXdyaXRlSGFuZGxlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmZmlsZS5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc20uaCIKICNpbmNsdWRl ICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9y YWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdl L3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX21xLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9zaG1fdG9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCiAjaW5jbHVkZSAidGNv cC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1 aWx0aW5zLmgiCkBAIC0xOTgsNiArMjE4LDU3IEBACiAKICNkZWZpbmUgTkFQVElNRV9QRVJfQ1lD TEUgMTAwMAkvKiBtYXggc2xlZXAgdGltZSBiZXR3ZWVuIGN5Y2xlcyAoMXMpICovCiAKKyNkZWZp bmUgUEdfTE9HSUNBTF9BUFBMWV9TSE1fTUFHSUMgMHg3OWZiMjQ0NyAvLyBUT0RPIENvbnNpZGVy IGNoYW5nZQorCit0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbFN0YXRlCit7CisJc2xvY2tfdAltdXRl eDsKKwlib29sCWF0dGFjaGVkOworCWJvb2wJcmVhZHk7CisJYm9vbAlmaW5pc2hlZDsKKwlib29s CWZhaWxlZDsKKwlPaWQJCXN1YmlkOworCU9pZAkJc3RyZWFtX3hpZDsKKwl1aW50MzIJbjsKK30g UGFyYWxsZWxTdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgV29ya2VyU3RhdGUKK3sKKwlUcmFuc2Fj dGlvbklkCQkJIHhpZDsKKwlCYWNrZ3JvdW5kV29ya2VySGFuZGxlCSpoYW5kbGU7CisJc2htX21x X2hhbmRsZQkJCSptcV9oYW5kbGU7CisJZHNtX3NlZ21lbnQJCQkJKmRzbV9zZWc7CisJUGFyYWxs ZWxTdGF0ZSB2b2xhdGlsZQkqcHN0YXRlOworfSBXb3JrZXJTdGF0ZTsKKworLyogQXBwbHkgd29y a2VycyBoYXNoIHRhYmxlIChpbml0aWFsaXplZCBvbiBmaXJzdCB1c2UpICovCitzdGF0aWMgSFRB QiAqQXBwbHlXb3JrZXJzSGFzaCA9IE5VTEw7CitzdGF0aWMgV29ya2VyU3RhdGUgKipBcHBseVdv cmtlcnNJZGxlTGlzdCA9IE5VTEw7CitzdGF0aWMgTGlzdCAqQXBwbHlXb3JrZXJzTGlzdCA9IE5J TDsKK3N0YXRpYyB1aW50MzIgcG9vbF9zaXplID0gMTA7IC8qIE1heENvbm5lY3Rpb25zIGRlZmF1 bHQ/ICovCitzdGF0aWMgdWludDMyIG53b3JrZXJzID0gMDsKK3N0YXRpYyB1aW50MzIgbmZyZWV3 b3JrZXJzID0gMDsKKworLyogRmllbGRzIHZhbGlkIG9ubHkgZm9yIGFwcGx5IGJhY2tncm91bmQg d29ya2VycyAqLworYm9vbCBpc0xvZ2ljYWxBcHBseVdvcmtlciA9IGZhbHNlOwordm9sYXRpbGUg UGFyYWxsZWxTdGF0ZSAqTXlQYXJhbGxlbFN0YXRlID0gTlVMTDsKK3N0YXRpYyBMaXN0ICpzdWJ4 YWN0bGlzdCA9IE5JTDsKKworLyogV29ya2VyIHNldHVwIGFuZCBpbnRlcmFjdGlvbnMgKi8KK3N0 YXRpYyB2b2lkIHNldHVwX2RzbShXb3JrZXJTdGF0ZSAqd3N0YXRlKTsKK3N0YXRpYyBib29sIHNl dHVwX2JhY2tncm91bmRfd29ya2VyKFdvcmtlclN0YXRlICp3c3RhdGUpOworCitzdGF0aWMgdm9p ZCB3YWl0X2Zvcl93b3JrZXIoV29ya2VyU3RhdGUgKndzdGF0ZSk7CitzdGF0aWMgdm9pZCB3YWl0 X2Zvcl93b3JrZXJfdG9fZmluaXNoKFdvcmtlclN0YXRlICp3c3RhdGUpOworc3RhdGljIHZvaWQg c2VuZF9kYXRhX3RvX3dvcmtlcihXb3JrZXJTdGF0ZSAqd3N0YXRlLCBTaXplIG5ieXRlcywKKwkJ CQkJCQkJY29uc3Qgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBXb3JrZXJTdGF0ZSAqZmluZF9vcl9z dGFydF93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgc3RhcnQpOworc3RhdGljIGJvb2wg dHJhbnNhY3Rpb25fYXBwbGllZF9pbl9iZ3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCk7CitzdGF0 aWMgdm9pZCBjaGVja193b3JrZXJzX3N0YXR1cyh2b2lkKTsKKworc3RhdGljIHVpbnQzMiBuY2hh bmdlcyA9IDA7CisKIHR5cGVkZWYgc3RydWN0IEZsdXNoUG9zaXRpb24KIHsKIAlkbGlzdF9ub2Rl CW5vZGU7CkBAIC0yNjAsNiArMzMxLDkgQEAgc3RhdGljIFhMb2dSZWNQdHIgcmVtb3RlX2ZpbmFs X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogc3RhdGljIGJvb2wgaW5fc3RyZWFtZWRfdHJhbnNh Y3Rpb24gPSBmYWxzZTsKIAogc3RhdGljIFRyYW5zYWN0aW9uSWQgc3RyZWFtX3hpZCA9IEludmFs aWRUcmFuc2FjdGlvbklkOworc3RhdGljIFdvcmtlclN0YXRlICpzdHJlYW1fYXBwbHlfd29ya2Vy ID0gTlVMTDsKKworI2RlZmluZSBhcHBseWluZ19jaGFuZ2VzX2luX2Jnd29ya2VyKCkgKHN0cmVh bV9hcHBseV93b3JrZXIgIT0gTlVMTCkKIAogLyoKICAqIFdlIGVuYWJsZSBza2lwcGluZyBhbGwg ZGF0YSBtb2RpZmljYXRpb24gY2hhbmdlcyAoSU5TRVJULCBVUERBVEUsIGV0Yy4pIGZvcgpAQCAt NDI4LDQxICs1MDIsODQgQEAgZW5kX3JlcGxpY2F0aW9uX3N0ZXAodm9pZCkKIC8qCiAgKiBIYW5k bGUgc3RyZWFtZWQgdHJhbnNhY3Rpb25zLgogICoKLSAqIElmIGluIHN0cmVhbWluZyBtb2RlIChy ZWNlaXZpbmcgYSBibG9jayBvZiBzdHJlYW1lZCB0cmFuc2FjdGlvbiksIHdlCi0gKiBzaW1wbHkg cmVkaXJlY3QgaXQgdG8gYSBmaWxlIGZvciB0aGUgcHJvcGVyIHRvcGxldmVsIHRyYW5zYWN0aW9u LgorICogRm9yIHRoZSBtYWluIGFwcGx5IHdvcmtlciwgaWYgaW4gc3RyZWFtaW5nIG1vZGUgKHJl Y2VpdmluZyBhIGJsb2NrIG9mCisgKiBzdHJlYW1lZCB0cmFuc2FjdGlvbiksIHdlIHNlbmQgdGhl IGRhdGEgdG8gdGhlIGJhY2tncm91bmQgd29ya2VyLgorICoKKyAqIEZvciB0aGUgYmFja2dyb3Vu ZCB3b3JrZXIsIGRlZmluZSBhIHNhdmVwb2ludCBpZiBuZXcgc3VidHJhbnNhY3Rpb24gd2FzCisg KiBzdGFydGVkLgogICoKICAqIFJldHVybnMgdHJ1ZSBmb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb25z LCBmYWxzZSBvdGhlcndpc2UgKHJlZ3VsYXIgbW9kZSkuCiAgKi8KIHN0YXRpYyBib29sCiBoYW5k bGVfc3RyZWFtZWRfdHJhbnNhY3Rpb24oTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJ bmZvIHMpCiB7Ci0JVHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNhY3Rpb25JZCBjdXJyZW50X3hp ZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCiAJLyogbm90IGluIHN0cmVhbWluZyBtb2RlICov Ci0JaWYgKCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKKwlpZiAoIWluX3N0cmVhbWVkX3RyYW5z YWN0aW9uICYmICFpc0xvZ2ljYWxBcHBseVdvcmtlcikKIAkJcmV0dXJuIGZhbHNlOwogCi0JQXNz ZXJ0KHN0cmVhbV9mZCAhPSBOVUxMKTsKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoc3Ry ZWFtX3hpZCkpOwogCiAJLyoKIAkgKiBXZSBzaG91bGQgaGF2ZSByZWNlaXZlZCBYSUQgb2YgdGhl IHN1YnhhY3QgYXMgdGhlIGZpcnN0IHBhcnQgb2YgdGhlCiAJICogbWVzc2FnZSwgc28gZXh0cmFj dCBpdC4KIAkgKi8KLQl4aWQgPSBwcV9nZXRtc2dpbnQocywgNCk7CisJY3VycmVudF94aWQgPSBw cV9nZXRtc2dpbnQocywgNCk7CiAKLQlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpCisJ aWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChjdXJyZW50X3hpZCkpCiAJCWVyZXBvcnQoRVJST1Is CiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAogCQkJCSBlcnJtc2df aW50ZXJuYWwoImludmFsaWQgdHJhbnNhY3Rpb24gSUQgaW4gc3RyZWFtZWQgcmVwbGljYXRpb24g dHJhbnNhY3Rpb24iKSkpOwogCi0JLyogQWRkIHRoZSBuZXcgc3VieGFjdCB0byB0aGUgYXJyYXkg KHVubGVzcyBhbHJlYWR5IHRoZXJlKS4gKi8KLQlzdWJ4YWN0X2luZm9fYWRkKHhpZCk7CisJaWYg KGlzTG9naWNhbEFwcGx5V29ya2VyKQorCXsKKwkJLyoKKwkJICogSW5zaWRlIGxvZ2ljYWwgYXBw bHkgd29ya2VyIHdlIGNhbiBmaWd1cmUgb3V0IHRoYXQgbmV3CisJCSAqIHN1YnRyYW5zYWN0aW9u IHdhcyBzdGFydGVkIGlmIG5ldyBjaGFuZ2UgYXJyaXZlZCB3aXRoIGRpZmZlcmVudCB4aWQuCisJ CSAqIEluIHRoYXQgY2FzZSB3ZSBjYW4gZGVmaW5lIG5hbWVkIHNhdmVwb2ludCwgc28gdGhhdCB3 ZSB3ZXJlIGFibGUgdG8KKwkJICogY29tbWl0L3JvbGxiYWNrIGl0IHNlcGFyYXRlbHkgbGF0ZXIu CisJCSAqCisJCSAqIFNwZWNpYWwgY2FzZSBpcyBpZiB0aGUgZmlyc3QgY2hhbmdlIGNvbWVzIGZy b20gc3VidHJhbnNhY3Rpb24sIHRoZW4KKwkJICogd2UgY2hlY2sgdGhhdCBjdXJyZW50X3hpZCBk aWZmZXJzIGZyb20gc3RyZWFtX3hpZC4KKwkJICovCisJCWlmIChjdXJyZW50X3hpZCAhPSBzdHJl YW1feGlkICYmCisJCQkhbGlzdF9tZW1iZXJfaW50KHN1YnhhY3RsaXN0LCAoaW50KSBjdXJyZW50 X3hpZCkpCisJCXsKKwkJCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCQkJY2hhciAqc3BuYW1lID0g KGNoYXIgKikgcGFsbG9jKDY0ICogc2l6ZW9mKGNoYXIpKTsKKwkJCXNwcmludGYoc3BuYW1lLCAi c2F2ZXBvaW50X2Zvcl94aWRfJXUiLCBjdXJyZW50X3hpZCk7CisKKwkJCWVsb2coTE9HLCAiW0Fw cGx5IEJHVyAjJXVdIGRlZmluaW5nIHNhdmVwb2ludCAlcyIsIE15UGFyYWxsZWxTdGF0ZS0+biwg c3BuYW1lKTsKKworCQkJRGVmaW5lU2F2ZXBvaW50KHNwbmFtZSk7CisKKwkJCUNvbW1pdFRyYW5z YWN0aW9uQ29tbWFuZCgpOworCisJCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBw bHlDb250ZXh0KTsKKwkJCXN1YnhhY3RsaXN0ID0gbGFwcGVuZF9pbnQoc3VieGFjdGxpc3QsIChp bnQpIGN1cnJlbnRfeGlkKTsKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCQl9 CisJfQorCWVsc2UgaWYgKGFwcGx5aW5nX2NoYW5nZXNfaW5fYmd3b3JrZXIoKSkKKwl7CisJCS8q CisJCSAqIElmIHdlIGRlY2lkZWQgdG8gYXBwbHkgdGhlIGNoYW5nZXMgb2YgdGhpcyB0cmFuc2Fj dGlvbiBpbiBhCisJCSAqIGJnd29ya2VyLCBwYXNzIHRoZSBkYXRhIHRvIHRoZSB3b3JrZXIuCisJ CSAqLworCQlzZW5kX2RhdGFfdG9fd29ya2VyKHN0cmVhbV9hcHBseV93b3JrZXIsIHMtPmxlbiwg cy0+ZGF0YSk7CisJCW5jaGFuZ2VzICs9IDE7CisJfQorCWVsc2UKKwl7CisJCS8qIEFkZCB0aGUg bmV3IHN1YnhhY3QgdG8gdGhlIGFycmF5ICh1bmxlc3MgYWxyZWFkeSB0aGVyZSkuICovCisJCXN1 YnhhY3RfaW5mb19hZGQoY3VycmVudF94aWQpOwogCi0JLyogd3JpdGUgdGhlIGNoYW5nZSB0byB0 aGUgY3VycmVudCBmaWxlICovCi0Jc3RyZWFtX3dyaXRlX2NoYW5nZShhY3Rpb24sIHMpOworCQkv KiB3cml0ZSB0aGUgY2hhbmdlIHRvIHRoZSBjdXJyZW50IGZpbGUgKi8KKwkJc3RyZWFtX3dyaXRl X2NoYW5nZShhY3Rpb24sIHMpOworCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiAhaXNMb2dp Y2FsQXBwbHlXb3JrZXI7CiB9CiAKIC8qCkBAIC04OTksNyArMTAxNiw5IEBAIGFwcGx5X2hhbmRs ZV9wcmVwYXJlX2ludGVybmFsKExvZ2ljYWxSZXBQcmVwYXJlZFR4bkRhdGEgKnByZXBhcmVfZGF0 YSkKIAkgKiBCZWdpblRyYW5zYWN0aW9uQmxvY2sgaXMgbmVjZXNzYXJ5IHRvIGJhbGFuY2UgdGhl IEVuZFRyYW5zYWN0aW9uQmxvY2sKIAkgKiBjYWxsZWQgd2l0aGluIHRoZSBQcmVwYXJlVHJhbnNh Y3Rpb25CbG9jayBiZWxvdy4KIAkgKi8KLQlCZWdpblRyYW5zYWN0aW9uQmxvY2soKTsKKwlpZiAo IUlzVHJhbnNhY3Rpb25CbG9jaygpKQorCQlCZWdpblRyYW5zYWN0aW9uQmxvY2soKTsKKwogCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOyAvKiBDb21wbGV0ZXMgdGhlIHByZWNlZGluZyBCZWdp biBjb21tYW5kLiAqLwogCiAJLyoKQEAgLTk3Nyw2ICsxMDk2LDM1IEBAIGFwcGx5X2hhbmRsZV9j b21taXRfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQogCWNoYXIJCWdpZFtHSURTSVpFXTsKIAogCWxv Z2ljYWxyZXBfcmVhZF9jb21taXRfcHJlcGFyZWQocywgJnByZXBhcmVfZGF0YSk7CisKKwkvKiBD aGVjayBpZiB3ZSBoYXZlIHByZXBhcmVkIHRyYW5zYWN0aW9uIGluIGFub3RoZXIgYmd3b3JrZXIg Ki8KKwlpZiAodHJhbnNhY3Rpb25fYXBwbGllZF9pbl9iZ3dvcmtlcihwcmVwYXJlX2RhdGEueGlk KSkKKwl7CisJCWVsb2coREVCVUcxLCAicmVjZWl2ZWQgY29tbWl0IGZvciBzdHJlYW1lZCB0cmFu c2FjdGlvbiAldSIsIHByZXBhcmVfZGF0YS54aWQpOworCisJCS8qIFNlbmQgY29tbWl0IG1lc3Nh Z2UgKi8KKwkJc2VuZF9kYXRhX3RvX3dvcmtlcihzdHJlYW1fYXBwbHlfd29ya2VyLCBzLT5sZW4s IHMtPmRhdGEpOworCisJCS8qIE5vdGlmeSB3b3JrZXIsIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCB0 aGlzIHhhY3QgKi8KKwkJd2FpdF9mb3Jfd29ya2VyX3RvX2ZpbmlzaChzdHJlYW1fYXBwbHlfd29y a2VyKTsKKworCQllbG9nKExPRywgImFkZGluZyBmaW5pc2hlZCBhcHBseSB3b3JrZXIgIyV1IGZv ciB4aWQgJXUgdG8gdGhlIGlkbGUgbGlzdCIsCisJCQkgc3RyZWFtX2FwcGx5X3dvcmtlci0+cHN0 YXRlLT5uLCBzdHJlYW1fYXBwbHlfd29ya2VyLT54aWQpOworCQlBcHBseVdvcmtlcnNJZGxlTGlz dFtuZnJlZXdvcmtlcnMrK10gPSBzdHJlYW1fYXBwbHlfd29ya2VyOworCisJCXBnc3RhdF9yZXBv cnRfc3RhdChmYWxzZSk7CisKKwkJc3RvcmVfZmx1c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVu ZF9sc24pOworCisJCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCisJCXBnc3RhdF9y ZXBvcnRfYWN0aXZpdHkoU1RBVEVfSURMRSwgTlVMTCk7CisKKwkJc3RyZWFtX2FwcGx5X3dvcmtl ciA9IE5VTEw7CisKKwkJcmV0dXJuOworCX0KKwogCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hh Y3QocHJlcGFyZV9kYXRhLnhpZCwgcHJlcGFyZV9kYXRhLmNvbW1pdF9sc24pOwogCiAJLyogQ29t cHV0ZSBHSUQgZm9yIHR3b19waGFzZSB0cmFuc2FjdGlvbnMuICovCkBAIC0xMDIwLDYgKzExNjgs MjcgQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmluZ0luZm8gcykKIAljaGFy CQlnaWRbR0lEU0laRV07CiAKIAlsb2dpY2FscmVwX3JlYWRfcm9sbGJhY2tfcHJlcGFyZWQocywg JnJvbGxiYWNrX2RhdGEpOworCisJLyogQ2hlY2sgaWYgd2UgYXJlIHByb2Nlc3NpbmcgdGhlIHBy ZXBhcmVkIHRyYW5zYWN0aW9uIGluIGEgYmd3b3JrZXIgKi8KKwlpZiAodHJhbnNhY3Rpb25fYXBw bGllZF9pbl9iZ3dvcmtlcihyb2xsYmFja19kYXRhLnhpZCkpCisJeworCQlzZW5kX2RhdGFfdG9f d29ya2VyKHN0cmVhbV9hcHBseV93b3JrZXIsIHMtPmxlbiwgcy0+ZGF0YSk7CisKKwkJLyogTm90 aWZ5IHdvcmtlciwgdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgeGFjdCAqLworCQl3YWl0X2Zv cl93b3JrZXJfdG9fZmluaXNoKHN0cmVhbV9hcHBseV93b3JrZXIpOworCisJCWVsb2coTE9HLCAi cm9sbGJhY2sgcHJlcGFyZWQgc3RyZWFtaW5nIG9mIHhpZCAldSIsIHJvbGxiYWNrX2RhdGEueGlk KTsKKworCQlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2UpOworCisJCXN0b3JlX2ZsdXNoX3Bvc2l0 aW9uKHJvbGxiYWNrX2RhdGEucm9sbGJhY2tfZW5kX2xzbik7CisKKwkJaW5fcmVtb3RlX3RyYW5z YWN0aW9uID0gZmFsc2U7CisJCXN0cmVhbV9hcHBseV93b3JrZXIgPSBOVUxMOworCisJCXJldHVy bjsKKwl9CisKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHJvbGxiYWNrX2RhdGEueGlk LCByb2xsYmFja19kYXRhLnJvbGxiYWNrX2VuZF9sc24pOwogCiAJLyogQ29tcHV0ZSBHSUQgZm9y IHR3b19waGFzZSB0cmFuc2FjdGlvbnMuICovCkBAIC0xMDY0LDExICsxMjMzLDEyNyBAQCBhcHBs eV9oYW5kbGVfcm9sbGJhY2tfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQogfQogCiAvKgotICogSGFu ZGxlIFNUUkVBTSBQUkVQQVJFLgorICogTG9vayB1cCB3b3JrZXIgaW5zaWRlIEFwcGx5V29ya2Vy c0hhc2ggZm9yIHJlcXVlc3RlZCB4aWQuCiAgKgotICogTG9naWMgaXMgaW4gdHdvIHBhcnRzOgot ICogMS4gUmVwbGF5IGFsbCB0aGUgc3Bvb2xlZCBvcGVyYXRpb25zCi0gKiAyLiBNYXJrIHRoZSB0 cmFuc2FjdGlvbiBhcyBwcmVwYXJlZAorICogSWYgc3RhcnQgZmxhZyBpcyB0cnVlLCB0cnkgdG8g c3RhcnQgYSBuZXcgd29ya2VyIGlmIG5vdCBmb3VuZCBpbiBoYXNoIHRhYmxlLgorICovCitzdGF0 aWMgV29ya2VyU3RhdGUgKgorZmluZF9vcl9zdGFydF93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQs IGJvb2wgc3RhcnQpCit7CisJYm9vbCBmb3VuZDsKKwlXb3JrZXJTdGF0ZSAqZW50cnkgPSBOVUxM OworCisJaWYgKCFzdGFydCAmJiBBcHBseVdvcmtlcnNIYXNoID09IE5VTEwpCisJCXJldHVybiBO VUxMOworCisJLyogRmlyc3QgdGltZSB0aHJvdWdoLCBpbml0aWFsaXplIGFwcGx5IHdvcmtlcnMg aGFzaHRhYmxlICovCisJaWYgKEFwcGx5V29ya2Vyc0hhc2ggPT0gTlVMTCkKKwl7CisJCUhBU0hD VEwJCWN0bDsKKworCQlNZW1TZXQoJmN0bCwgMCwgc2l6ZW9mKGN0bCkpOworCQljdGwua2V5c2l6 ZSA9IHNpemVvZihUcmFuc2FjdGlvbklkKTsKKwkJY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihXb3Jr ZXJTdGF0ZSk7CisJCWN0bC5oY3h0ID0gQXBwbHlDb250ZXh0OyAvKiBBbGxvY2F0ZSBBcHBseVdv cmtlcnNIYXNoIGluIHRoZSBBcHBseUNvbnRleHQgKi8KKwkJQXBwbHlXb3JrZXJzSGFzaCA9IGhh c2hfY3JlYXRlKCJsb2dpY2FsIGFwcGx5IHdvcmtlcnMgaGFzaCIsIDgsCisJCQkJCQkJCQkgJmN0 bCwKKwkJCQkJCQkJCSBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTIHwgSEFTSF9DT05URVhUKTsKKwl9 CisKKwlBc3NlcnQoQXBwbHlXb3JrZXJzSGFzaCAhPSBOVUxMKTsKKworCS8qCisJICogRmluZCBl bnRyeSBmb3IgcmVxdWVzdGVkIHRyYW5zYWN0aW9uLgorCSAqLworCWVudHJ5ID0gaGFzaF9zZWFy Y2goQXBwbHlXb3JrZXJzSGFzaCwgJnhpZCwgSEFTSF9GSU5ELCAmZm91bmQpOworCisJaWYgKCFm b3VuZCAmJiBzdGFydCkKKwl7CisJCS8qIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB3b3JrZXIg aW4gdGhlIGlkbGUgbGlzdCwgdGhlbiB0YWtlIG9uZS4gKi8KKwkJaWYgKG5mcmVld29ya2VycyA+ IDApCisJCXsKKwkJCUFzc2VydChBcHBseVdvcmtlcnNJZGxlTGlzdCAhPSBOVUxMKTsKKworCQkJ ZW50cnkgPSBBcHBseVdvcmtlcnNJZGxlTGlzdFtuZnJlZXdvcmtlcnMgLSAxXTsKKwkJCWlmICgh aGFzaF91cGRhdGVfaGFzaF9rZXkoQXBwbHlXb3JrZXJzSGFzaCwKKwkJCQkJCQkJCSAgKHZvaWQg KikgZW50cnksCisJCQkJCQkJCQkgICh2b2lkICopICZ4aWQpKQorCQkJCWVsb2coRVJST1IsICJj b3VsZCBub3QgcmVhc3NpZ24gYXBwbHkgd29ya2VyICMldSBlbnRyeSBmcm9tIHhpZCAldSB0byB4 aWQgJXUiLAorCQkJCQkJCQkJCQkJCWVudHJ5LT5wc3RhdGUtPm4sIGVudHJ5LT54aWQsIHhpZCk7 CisKKwkJCWVudHJ5LT54aWQgPSB4aWQ7CisJCQllbnRyeS0+cHN0YXRlLT5maW5pc2hlZCA9IGZh bHNlOworCQkJZW50cnktPnBzdGF0ZS0+c3RyZWFtX3hpZCA9IHhpZDsKKworCQkJQXBwbHlXb3Jr ZXJzSWRsZUxpc3RbLS1uZnJlZXdvcmtlcnNdID0gTlVMTDsKKwkJfQorCQllbHNlCisJCXsKKwkJ CS8qIE5vIGVudHJ5IGluIGhhc2ggYW5kIG5vIGlkbGUgd29ya2Vycy4gQ3JlYXRlIGEgbmV3IG9u ZS4gKi8KKwkJCWVudHJ5ID0gaGFzaF9zZWFyY2goQXBwbHlXb3JrZXJzSGFzaCwgJnhpZCwgSEFT SF9FTlRFUiwgJmZvdW5kKTsKKwkJCWVudHJ5LT54aWQgPSB4aWQ7CisKKwkJCWlmICghc2V0dXBf YmFja2dyb3VuZF93b3JrZXIoZW50cnkpKQorCQkJeworCQkJCS8qCisJCQkJICogSWYgdGhlcmUg aXMgbm8gbW9yZSB3b3JrZXIgY2FuIGJlIGxhdW5jaGVkIGhlcmUsIHJlbW92ZSB0aGUKKwkJCQkg KiBlbnRyeSBpbiBoYXNoIHRhYmxlLgorCQkJCSAqLworCQkJCWhhc2hfc2VhcmNoKEFwcGx5V29y a2Vyc0hhc2gsICZ4aWQsIEhBU0hfUkVNT1ZFLCAmZm91bmQpOworCisJCQkJcmV0dXJuIE5VTEw7 CisJCQl9CisKKwkJCWlmIChud29ya2VycyA9PSBwb29sX3NpemUpCisJCQl7CisJCQkJQXBwbHlX b3JrZXJzSWRsZUxpc3QgPSByZXBhbGxvYyhBcHBseVdvcmtlcnNJZGxlTGlzdCwgcG9vbF9zaXpl ICsgMTApOworCQkJCXBvb2xfc2l6ZSArPSAxMDsKKwkJCX0KKwkJfQorCX0KKwllbHNlIGlmICgh Zm91bmQgJiYgIXN0YXJ0KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf SU5TVUZGSUNJRU5UX1JFU09VUkNFUyksCisJCQkJZXJybXNnKCJjb3VsZCBub3QgZmluZCBsb2dp Y2FsIGFwcGx5IHdvcmtlciBmb3IgeGlkICV1IiwgeGlkKSkpOworCWVsc2UKKwkJZWxvZyhERUJV RzUsICJ0aGVyZSBpcyBhbiBleGlzdGluZyBsb2dpY2FsIGFwcGx5IHdvcmtlciBmb3IgeGlkICV1 IiwgeGlkKTsKKworCXJldHVybiBlbnRyeTsKK30KKworc3RhdGljIHZvaWQKK3NlcmlhbGl6ZV9z dHJlYW1fcHJlcGFyZShMb2dpY2FsUmVwUHJlcGFyZWRUeG5EYXRhICpwcmVwYXJlX2RhdGEpCit7 CisJLyogUmVwbGF5IGFsbCB0aGUgc3Bvb2xlZCBvcGVyYXRpb25zLiAqLworCWFwcGx5X3Nwb29s ZWRfbWVzc2FnZXMocHJlcGFyZV9kYXRhLT54aWQsIHByZXBhcmVfZGF0YS0+cHJlcGFyZV9sc24p OworCisJLyogTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQuICovCisJYXBwbHlfaGFu ZGxlX3ByZXBhcmVfaW50ZXJuYWwocHJlcGFyZV9kYXRhKTsKKworCUNvbW1pdFRyYW5zYWN0aW9u Q29tbWFuZCgpOworCisJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKKworCXN0b3JlX2ZsdXNo X3Bvc2l0aW9uKHByZXBhcmVfZGF0YS0+ZW5kX2xzbik7CisKKwlpbl9yZW1vdGVfdHJhbnNhY3Rp b24gPSBmYWxzZTsKKworCS8qIHVubGluayB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5n ZXMgYW5kIHN1YnhhY3QgaW5mby4gKi8KKwlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxS ZXBXb3JrZXItPnN1YmlkLCBwcmVwYXJlX2RhdGEtPnhpZCk7CisKKwkvKiBQcm9jZXNzIGFueSB0 YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLworCXByb2Nl c3Nfc3luY2luZ190YWJsZXMocHJlcGFyZV9kYXRhLT5lbmRfbHNuKTsKKworCS8qCisJICogU2lt aWxhciB0byBwcmVwYXJlIGNhc2UsIHRoZSBzdWJza2lwbHNuIGNvdWxkIGJlIGxlZnQgaW4gYSBj YXNlIG9mCisJICogc2VydmVyIGNyYXNoIGJ1dCBpdCdzIG9rYXkuIFNlZSB0aGUgY29tbWVudHMg aW4gYXBwbHlfaGFuZGxlX3ByZXBhcmUoKS4KKwkgKi8KKwlzdG9wX3NraXBwaW5nX2NoYW5nZXMo KTsKKwljbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24ocHJlcGFyZV9kYXRhLT5wcmVwYXJlX2xz bik7Cit9CisKKy8qCisgKiBIYW5kbGUgU1RSRUFNIFBSRVBBUkUuCiAgKi8KIHN0YXRpYyB2b2lk CiBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQpAQCAtMTA4OSwzNCAr MTM3NCw1NyBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogCWxv Z2ljYWxyZXBfcmVhZF9zdHJlYW1fcHJlcGFyZShzLCAmcHJlcGFyZV9kYXRhKTsKIAlzZXRfYXBw bHlfZXJyb3JfY29udGV4dF94YWN0KHByZXBhcmVfZGF0YS54aWQsIHByZXBhcmVfZGF0YS5wcmVw YXJlX2xzbik7CiAKLQllbG9nKERFQlVHMSwgInJlY2VpdmVkIHByZXBhcmUgZm9yIHN0cmVhbWVk IHRyYW5zYWN0aW9uICV1IiwgcHJlcGFyZV9kYXRhLnhpZCk7CisJLyoKKwkgKiBJZiB3ZSBhcmUg aW4gYSBiZ3dvcmtlciwganVzdCBwcmVwYXJlIHRoZSB0cmFuc2FjdGlvbi4KKwkgKi8KKwlpZiAo aXNMb2dpY2FsQXBwbHlXb3JrZXIpCisJeworCQllbG9nKExPRywgInJlY2VpdmVkIHByZXBhcmUg Zm9yIHN0cmVhbWVkIHRyYW5zYWN0aW9uICV1IiwgcHJlcGFyZV9kYXRhLnhpZCk7CiAKLQkvKiBS ZXBsYXkgYWxsIHRoZSBzcG9vbGVkIG9wZXJhdGlvbnMuICovCi0JYXBwbHlfc3Bvb2xlZF9tZXNz YWdlcyhwcmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOworCQkvKiBN YXJrIHRoZSB0cmFuc2FjdGlvbiBhcyBwcmVwYXJlZC4gKi8KKwkJYXBwbHlfaGFuZGxlX3ByZXBh cmVfaW50ZXJuYWwoJnByZXBhcmVfZGF0YSk7CiAKLQkvKiBNYXJrIHRoZSB0cmFuc2FjdGlvbiBh cyBwcmVwYXJlZC4gKi8KLQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9k YXRhKTsKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKLQlDb21taXRUcmFuc2FjdGlv bkNvbW1hbmQoKTsKKwkJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKIAotCXBnc3RhdF9yZXBv cnRfc3RhdChmYWxzZSk7CisJCS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBz eW5jaHJvbml6ZWQgaW4gcGFyYWxsZWwuICovCisJCXByb2Nlc3Nfc3luY2luZ190YWJsZXMocHJl cGFyZV9kYXRhLmVuZF9sc24pOwogCi0Jc3RvcmVfZmx1c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRh LmVuZF9sc24pOworCQljbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24ocHJlcGFyZV9kYXRhLnBy ZXBhcmVfbHNuKTsKIAotCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCQlsaXN0X2Zy ZWUoc3VieGFjdGxpc3QpOworCQlzdWJ4YWN0bGlzdCA9IE5JTDsKKwl9CiAKLQkvKiB1bmxpbmsg dGhlIGZpbGVzIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8uICovCi0J c3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgcHJlcGFyZV9k YXRhLnhpZCk7CisJLyoKKwkgKiBJZiB3ZSBhcmUgaW4gbWFpbiBhcHBseSB3b3JrZXIsIGNoZWNr IGlmIHdlIGFyZSBwcm9jZXNzaW5nIHRoaXMKKwkgKiB0cmFuc2FjdGlvbiBpbiBhIGJnd29ya2Vy LgorCSAqLworCWVsc2UgaWYgKHRyYW5zYWN0aW9uX2FwcGxpZWRfaW5fYmd3b3JrZXIocHJlcGFy ZV9kYXRhLnhpZCkpCisJeworCQlzZW5kX2RhdGFfdG9fd29ya2VyKHN0cmVhbV9hcHBseV93b3Jr ZXIsIHMtPmxlbiwgcy0+ZGF0YSk7CisJCXdhaXRfZm9yX3dvcmtlcihzdHJlYW1fYXBwbHlfd29y a2VyKTsKIAotCS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6 ZWQgaW4gcGFyYWxsZWwuICovCi0JcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhwcmVwYXJlX2RhdGEu ZW5kX2xzbik7CisJCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CisJCXN0b3JlX2ZsdXNoX3Bv c2l0aW9uKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKKworCQkvKgorCQkgKiBTaW1pbGFyIHRvIHBy ZXBhcmUgY2FzZSwgdGhlIHN1YnNraXBsc24gY291bGQgYmUgbGVmdCBpbiBhIGNhc2Ugb2YKKwkJ ICogc2VydmVyIGNyYXNoIGJ1dCBpdCdzIG9rYXkuIFNlZSB0aGUgY29tbWVudHMgaW4gYXBwbHlf aGFuZGxlX3ByZXBhcmUoKS4KKwkJICovCisJCXN0b3Bfc2tpcHBpbmdfY2hhbmdlcygpOworCX0K IAogCS8qCi0JICogU2ltaWxhciB0byBwcmVwYXJlIGNhc2UsIHRoZSBzdWJza2lwbHNuIGNvdWxk IGJlIGxlZnQgaW4gYSBjYXNlIG9mCi0JICogc2VydmVyIGNyYXNoIGJ1dCBpdCdzIG9rYXkuIFNl ZSB0aGUgY29tbWVudHMgaW4gYXBwbHlfaGFuZGxlX3ByZXBhcmUoKS4KKwkgKiBJZiB3ZSBhcmUg aW4gbWFpbiBhcHBseSB3b3JrZXIgYW5kIHRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbiBzZXJpYWxp emVkCisJICogdG8gZmlsZSwgcmVwbGF5IGFsbCB0aGUgc3Bvb2xlZCBvcGVyYXRpb25zLgogCSAq LwotCXN0b3Bfc2tpcHBpbmdfY2hhbmdlcygpOwotCWNsZWFyX3N1YnNjcmlwdGlvbl9za2lwX2xz bihwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOworCWVsc2UKKwkJc2VyaWFsaXplX3N0cmVhbV9w cmVwYXJlKCZwcmVwYXJlX2RhdGEpOworCisJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7 CisJc3RyZWFtX2FwcGx5X3dvcmtlciA9IE5VTEw7CiAKIAlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5 KFNUQVRFX0lETEUsIE5VTEwpOwogCkBAIC0xMTQzLDE5ICsxNDUxLDkgQEAgYXBwbHlfaGFuZGxl X29yaWdpbihTdHJpbmdJbmZvIHMpCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgiT1JJR0lOIG1lc3Nh Z2Ugc2VudCBvdXQgb2Ygb3JkZXIiKSkpOwogfQogCi0vKgotICogSGFuZGxlIFNUUkVBTSBTVEFS VCBtZXNzYWdlLgotICovCiBzdGF0aWMgdm9pZAotYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChT dHJpbmdJbmZvIHMpCitzZXJpYWxpemVfc3RyZWFtX3N0YXJ0KGJvb2wgZmlyc3Rfc2VnbWVudCkK IHsKLQlib29sCQlmaXJzdF9zZWdtZW50OwotCi0JaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9u KQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFU SU9OKSwKLQkJCQkgZXJybXNnX2ludGVybmFsKCJkdXBsaWNhdGUgU1RSRUFNIFNUQVJUIG1lc3Nh Z2UiKSkpOwotCiAJLyoKIAkgKiBTdGFydCBhIHRyYW5zYWN0aW9uIG9uIHN0cmVhbSBzdGFydCwg dGhpcyB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbW1pdHRlZAogCSAqIG9uIHRoZSBzdHJlYW0gc3Rv cCB1bmxlc3MgaXQgaXMgYSB0YWJsZXN5bmMgd29ya2VyIGluIHdoaWNoIGNhc2UgaXQKQEAgLTEx NjUsMTkgKzE0NjMsNiBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0luZm8gcykK IAkgKi8KIAliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CiAKLQkvKiBub3RpZnkgaGFuZGxlIG1l dGhvZHMgd2UncmUgcHJvY2Vzc2luZyBhIHJlbW90ZSB0cmFuc2FjdGlvbiAqLwotCWluX3N0cmVh bWVkX3RyYW5zYWN0aW9uID0gdHJ1ZTsKLQotCS8qIGV4dHJhY3QgWElEIG9mIHRoZSB0b3AtbGV2 ZWwgdHJhbnNhY3Rpb24gKi8KLQlzdHJlYW1feGlkID0gbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9z dGFydChzLCAmZmlyc3Rfc2VnbWVudCk7Ci0KLQlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHN0 cmVhbV94aWQpKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9D T0xfVklPTEFUSU9OKSwKLQkJCQkgZXJybXNnX2ludGVybmFsKCJpbnZhbGlkIHRyYW5zYWN0aW9u IElEIGluIHN0cmVhbWVkIHJlcGxpY2F0aW9uIHRyYW5zYWN0aW9uIikpKTsKLQotCXNldF9hcHBs eV9lcnJvcl9jb250ZXh0X3hhY3Qoc3RyZWFtX3hpZCwgSW52YWxpZFhMb2dSZWNQdHIpOwotCiAJ LyoKIAkgKiBJbml0aWFsaXplIHRoZSB3b3JrZXIncyBzdHJlYW1fZmlsZXNldCBpZiB3ZSBoYXZl bid0IHlldC4gVGhpcyB3aWxsIGJlCiAJICogdXNlZCBmb3IgdGhlIGVudGlyZSBkdXJhdGlvbiBv ZiB0aGUgd29ya2VyIHNvIGNyZWF0ZSBpdCBpbiBhIHBlcm1hbmVudApAQCAtMTIwNCwyMyArMTQ4 OSw4MyBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0luZm8gcykKIAkvKiBpZiB0 aGlzIGlzIG5vdCB0aGUgZmlyc3Qgc2VnbWVudCwgb3BlbiBleGlzdGluZyBzdWJ4YWN0IGZpbGUg Ki8KIAlpZiAoIWZpcnN0X3NlZ21lbnQpCiAJCXN1YnhhY3RfaW5mb19yZWFkKE15TG9naWNhbFJl cFdvcmtlci0+c3ViaWQsIHN0cmVhbV94aWQpOwotCi0JcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShT VEFURV9SVU5OSU5HLCBOVUxMKTsKLQotCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9CiAKIC8q Ci0gKiBIYW5kbGUgU1RSRUFNIFNUT1AgbWVzc2FnZS4KKyAqIEhhbmRsZSBTVFJFQU0gU1RBUlQg bWVzc2FnZS4KICAqLwogc3RhdGljIHZvaWQKLWFwcGx5X2hhbmRsZV9zdHJlYW1fc3RvcChTdHJp bmdJbmZvIHMpCithcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0luZm8gcykKIHsKLQlp ZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQorCWJvb2wJCWZpcnN0X3NlZ21lbnQ7CisKKwlp ZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNv ZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAotCQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNU UkVBTSBTVE9QIG1lc3NhZ2Ugd2l0aG91dCBTVFJFQU0gU1RBUlQiKSkpOworCQkJCSBlcnJtc2df aW50ZXJuYWwoImR1cGxpY2F0ZSBTVFJFQU0gU1RBUlQgbWVzc2FnZSIpKSk7CisKKwkvKiBub3Rp ZnkgaGFuZGxlIG1ldGhvZHMgd2UncmUgcHJvY2Vzc2luZyBhIHJlbW90ZSB0cmFuc2FjdGlvbiAq LworCWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gdHJ1ZTsKKworCS8qIGV4dHJhY3QgWElEIG9m IHRoZSB0b3AtbGV2ZWwgdHJhbnNhY3Rpb24gKi8KKwlzdHJlYW1feGlkID0gbG9naWNhbHJlcF9y ZWFkX3N0cmVhbV9zdGFydChzLCAmZmlyc3Rfc2VnbWVudCk7CisKKwlpZiAoIVRyYW5zYWN0aW9u SWRJc1ZhbGlkKHN0cmVhbV94aWQpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnX2ludGVybmFsKCJpbnZhbGlk IHRyYW5zYWN0aW9uIElEIGluIHN0cmVhbWVkIHJlcGxpY2F0aW9uIHRyYW5zYWN0aW9uIikpKTsK KworCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3Qoc3RyZWFtX3hpZCwgSW52YWxpZFhMb2dS ZWNQdHIpOworCisJaWYgKGlzTG9naWNhbEFwcGx5V29ya2VyKQorCXsKKwkJLyogSWYgd2UgYXJl IGluIGEgYmd3b3JrZXIsIGJlZ2luIHRoZSB0cmFuc2FjdGlvbiAqLworCQltYXliZV9yZXJlYWRf c3Vic2NyaXB0aW9uKCk7CisKKwkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJQmVnaW5U cmFuc2FjdGlvbkJsb2NrKCk7CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCXJl dHVybjsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFyZSBpbiBtYWluIGFwcGx5IHdvcmtlciwgY2hl Y2sgaWYgdGhlcmUgaXMgYW55IGZyZWUgYmd3b3JrZXIKKwkgKiB3ZSBjYW4gdXNlIHRvIHByb2Nl c3MgdGhpcyB0cmFuc2FjdGlvbi4KKwkgKi8KKwlzdHJlYW1fYXBwbHlfd29ya2VyID0gZmluZF9v cl9zdGFydF93b3JrZXIoc3RyZWFtX3hpZCwgZmlyc3Rfc2VnbWVudCk7CisKKwlpZiAoYXBwbHlp bmdfY2hhbmdlc19pbl9iZ3dvcmtlcigpKQorCXsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBmcmVl IHdvcmtlciBvciB3ZSBhbHJlYWR5IHN0YXJ0ZWQgdG8gYXBwbHkgdGhpcworCQkgKiB0cmFuc2Fj dGlvbiBpbiBiZ3dvcmtlciwgd2UgcGFzcyB0aGUgZGF0YSB0byB3b3JrZXIuCisJCSAqLworCQlp ZiAoZmlyc3Rfc2VnbWVudCkKKwkJCXNlbmRfZGF0YV90b193b3JrZXIoc3RyZWFtX2FwcGx5X3dv cmtlciwgcy0+bGVuLCBzLT5kYXRhKTsKKworCQluY2hhbmdlcyA9IDA7CiAKKwkJU3BpbkxvY2tB Y3F1aXJlKCZzdHJlYW1fYXBwbHlfd29ya2VyLT5wc3RhdGUtPm11dGV4KTsKKwkJc3RyZWFtX2Fw cGx5X3dvcmtlci0+cHN0YXRlLT5yZWFkeSA9IGZhbHNlOworCQlTcGluTG9ja1JlbGVhc2UoJnN0 cmVhbV9hcHBseV93b3JrZXItPnBzdGF0ZS0+bXV0ZXgpOworCisJCWVsb2coTE9HLCAic3RhcnRp bmcgc3RyZWFtaW5nIG9mIHhpZCAldSIsIHN0cmVhbV94aWQpOworCX0KKworCS8qCisJICogSWYg bm8gd29ya2VyIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGZpcnN0IHN0cmVhbSBzdGFydCwgd2Ugc3Rh cnQgdG8KKwkgKiBzZXJpYWxpemUgYWxsIHRoZSBjaGFuZ2VzIG9mIHRoZSB0cmFuc2FjdGlvbi4K KwkgKi8KKwllbHNlCisJCXNlcmlhbGl6ZV9zdHJlYW1fc3RhcnQoZmlyc3Rfc2VnbWVudCk7CisK KwlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX1JVTk5JTkcsIE5VTEwpOworfQorCitzdGF0 aWMgdm9pZAorc2VyaWFsaXplX3N0cmVhbV9zdG9wKCkKK3sKIAkvKgogCSAqIENsb3NlIHRoZSBm aWxlIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzLCBhbmQgc2VyaWFsaXplIGluZm9ybWF0aW9uIGFi b3V0CiAJICogc3VieGFjdHMgZm9yIHRoZSB0b3BsZXZlbCB0cmFuc2FjdGlvbi4KQEAgLTEyMzQs MzUgKzE1NzksNDQgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9zdG9wKFN0cmluZ0luZm8gcykKIAkv KiBDb21taXQgdGhlIHBlci1zdHJlYW0gdHJhbnNhY3Rpb24gKi8KIAlDb21taXRUcmFuc2FjdGlv bkNvbW1hbmQoKTsKIAotCWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gZmFsc2U7Ci0KIAkvKiBS ZXNldCBwZXItc3RyZWFtIGNvbnRleHQgKi8KIAlNZW1vcnlDb250ZXh0UmVzZXQoTG9naWNhbFN0 cmVhbWluZ0NvbnRleHQpOwotCi0JcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBO VUxMKTsKLQlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKIH0KIAogLyoKLSAqIEhh bmRsZSBTVFJFQU0gYWJvcnQgbWVzc2FnZS4KKyAqIEhhbmRsZSBTVFJFQU0gU1RPUCBtZXNzYWdl LgogICovCiBzdGF0aWMgdm9pZAotYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZv IHMpCithcHBseV9oYW5kbGVfc3RyZWFtX3N0b3AoU3RyaW5nSW5mbyBzKQogewotCVRyYW5zYWN0 aW9uSWQgeGlkOwotCVRyYW5zYWN0aW9uSWQgc3VieGlkOwotCi0JaWYgKGluX3N0cmVhbWVkX3Ry YW5zYWN0aW9uKQorCWlmICghaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVyZXBvcnQoRVJS T1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAotCQkJCSBlcnJt c2dfaW50ZXJuYWwoIlNUUkVBTSBBQk9SVCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUT1AiKSkp OworCQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBTVE9QIG1lc3NhZ2Ugd2l0aG91dCBTVFJF QU0gU1RBUlQiKSkpOwogCi0JbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9ydChzLCAmeGlkLCAm c3VieGlkKTsKKwlpZiAoYXBwbHlpbmdfY2hhbmdlc19pbl9iZ3dvcmtlcigpKQorCXsKKwkJd2Fp dF9mb3Jfd29ya2VyKHN0cmVhbV9hcHBseV93b3JrZXIpOwogCi0JLyoKLQkgKiBJZiB0aGUgdHdv IFhJRHMgYXJlIHRoZSBzYW1lLCBpdCdzIGluIGZhY3QgYWJvcnQgb2YgdG9wbGV2ZWwgeGFjdCwg c28KLQkgKiBqdXN0IGRlbGV0ZSB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGluZm8uCi0JICov CisJCWVsb2coTE9HLCAic3RvcHBlZCBzdHJlYW1pbmcgb2YgeGlkICV1LCAldSBjaGFuZ2VzIHN0 cmVhbWVkIiwgc3RyZWFtX3hpZCwgbmNoYW5nZXMpOworCX0KKwllbHNlCisJCXNlcmlhbGl6ZV9z dHJlYW1fc3RvcCgpOworCisJaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSBmYWxzZTsKKwlzdHJl YW1fYXBwbHlfd29ya2VyID0gTlVMTDsKKworCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVf SURMRSwgTlVMTCk7CisJcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKCk7Cit9CisKK3N0 YXRpYyB2b2lkCitzZXJpYWxpemVfc3RyZWFtX2Fib3J0KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFu c2FjdGlvbklkIHN1YnhpZCkKK3sKKwkvKgorCSAqIElmIHRoZSB0d28gWElEcyBhcmUgdGhlIHNh bWUsIGl0J3MgaW4gZmFjdCBhYm9ydCBvZiB0b3BsZXZlbCB4YWN0LCBzbworCSAqIGp1c3QgZGVs ZXRlIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgaW5mby4KKwkgKi8KIAlpZiAoeGlkID09IHN1 YnhpZCkKIAl7CiAJCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3QoeGlkLCBJbnZhbGlkWExv Z1JlY1B0cik7CkBAIC0xMzQwLDggKzE2OTQsMTE4IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fYWJv cnQoU3RyaW5nSW5mbyBzKQogCQllbmRfcmVwbGljYXRpb25fc3RlcCgpOwogCQlDb21taXRUcmFu c2FjdGlvbkNvbW1hbmQoKTsKIAl9Cit9CiAKLQlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2lu Zm8oKTsKKy8qCisgKiBIYW5kbGUgU1RSRUFNIEFCT1JUIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2 b2lkCithcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKK3sKKwlUcmFuc2Fj dGlvbklkIHhpZDsKKwlUcmFuc2FjdGlvbklkIHN1YnhpZDsKKworCWlmIChpbl9zdHJlYW1lZF90 cmFuc2FjdGlvbikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RP Q09MX1ZJT0xBVElPTiksCisJCQkJIGVycm1zZ19pbnRlcm5hbCgiU1RSRUFNIENPTU1JVCBtZXNz YWdlIHdpdGhvdXQgU1RSRUFNIFNUT1AiKSkpOworCisJbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9h Ym9ydChzLCAmeGlkLCAmc3VieGlkKTsKKworCWlmIChpc0xvZ2ljYWxBcHBseVdvcmtlcikKKwl7 CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCWVy cm1zZygiW0FwcGx5IEJHVyAjJXVdIGFib3J0aW5nIGN1cnJlbnQgdHJhbnNhY3Rpb24geGlkPSV1 LCBzdWJ4aWQ9JXUiLAorCQkJCU15UGFyYWxsZWxTdGF0ZS0+biwgR2V0Q3VycmVudFRyYW5zYWN0 aW9uSWRJZkFueSgpLCBHZXRDdXJyZW50U3ViVHJhbnNhY3Rpb25JZCgpKSkpOworCisJCS8qCisJ CSAqIElmIHRoZSB0d28gWElEcyBhcmUgdGhlIHNhbWUsIGl0J3MgaW4gZmFjdCBhYm9ydCBvZiB0 b3BsZXZlbCB4YWN0LAorCQkgKiBzbyBqdXN0IGZyZWUgdGhlIHN1YnhhY3RsaXN0LgorCQkgKi8K KwkJaWYgKHN1YnhpZCA9PSB4aWQpCisJCXsKKwkJCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hh Y3Qoc3VieGlkLCBJbnZhbGlkWExvZ1JlY1B0cik7CisKKwkJCUFib3J0Q3VycmVudFRyYW5zYWN0 aW9uKCk7CisKKwkJCUVuZFRyYW5zYWN0aW9uQmxvY2soZmFsc2UpOworCQkJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisKKwkJCWxpc3RfZnJlZShzdWJ4YWN0bGlzdCk7CisJCQlzdWJ4YWN0 bGlzdCA9IE5JTDsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBPSywgc28gaXQncyBh IHN1YnhhY3QuIFJvbGxiYWNrIHRvIHRoZSBzYXZlcG9pbnQuCisJCQkgKgorCQkJICogV2UgYWxz byBuZWVkIHRvIHJlYWQgdGhlIHN1YnhhY3RsaXN0LCBkZXRlcm1pbmUgdGhlIG9mZnNldAorCQkJ ICogdHJhY2tlZCBmb3IgdGhlIHN1YnhhY3QsIGFuZCB0cnVuY2F0ZSB0aGUgbGlzdC4KKwkJCSAq LworCQkJaW50CQlpOworCQkJYm9vbAlmb3VuZCA9IGZhbHNlOworCQkJY2hhciAqc3BuYW1lID0g KGNoYXIgKikgcGFsbG9jKDY0ICogc2l6ZW9mKGNoYXIpKTsKKworCQkJc2V0X2FwcGx5X2Vycm9y X2NvbnRleHRfeGFjdChzdWJ4aWQsIEludmFsaWRYTG9nUmVjUHRyKTsKKworCQkJc3ByaW50Zihz cG5hbWUsICJzYXZlcG9pbnRfZm9yX3hpZF8ldSIsIHN1YnhpZCk7CisKKwkJCWVyZXBvcnQoTE9H LAorCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJZXJybXNnKCJbQXBwbHkg QkdXICMldV0gcm9sbGluZyBiYWNrIHRvIHNhdmVwb2ludCAlcyIsIE15UGFyYWxsZWxTdGF0ZS0+ biwgc3BuYW1lKSkpOworCisJCQlmb3IoaSA9IGxpc3RfbGVuZ3RoKHN1YnhhY3RsaXN0KSAtIDE7 IGkgPj0gMDsgaS0tKQorCQkJeworCQkJCXhpZCA9IChUcmFuc2FjdGlvbklkKSBsaXN0X250aF9p bnQoc3VieGFjdGxpc3QsIGkpOworCQkJCWlmICh4aWQgPT0gc3VieGlkKQorCQkJCXsKKwkJCQkJ Zm91bmQgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChmb3VuZCkK KwkJCXsKKwkJCQllbG9nKExPRywgInJvbGxlZCBiYWNrIHRvIHNhdmVwb2ludCAlcyIsIHNwbmFt ZSk7CisJCQkJUm9sbGJhY2tUb1NhdmVwb2ludChzcG5hbWUpOworCQkJCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworCQkJCXN1YnhhY3RsaXN0ID0gbGlzdF90cnVuY2F0ZShzdWJ4YWN0bGlz dCwgaSArIDEpOworCQkJfQorCisJCQlwZnJlZShzcG5hbWUpOworCQl9CisKKwkJcmVzZXRfYXBw bHlfZXJyb3JfY29udGV4dF9pbmZvKCk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhcmUgaW4gbWFp biBhcHBseSB3b3JrZXIsIGNoZWNrIGlmIHdlIGFyZSBwcm9jZXNzaW5nIHRoaXMKKwkgKiB0cmFu c2FjdGlvbiBpbiBhIGJnd29ya2VyLgorCSAqLworCWVsc2UgaWYgKHRyYW5zYWN0aW9uX2FwcGxp ZWRfaW5fYmd3b3JrZXIoeGlkKSkKKwl7CisJCXNlbmRfZGF0YV90b193b3JrZXIoc3RyZWFtX2Fw cGx5X3dvcmtlciwgcy0+bGVuLCBzLT5kYXRhKTsKKworCQlpZiAoc3VieGlkID09IHhpZCkKKwkJ eworCQkJd2FpdF9mb3Jfd29ya2VyX3RvX2ZpbmlzaChzdHJlYW1fYXBwbHlfd29ya2VyKTsKKwor CQkJZWxvZyhMT0csICJhZGRpbmcgZmluaXNoZWQgYXBwbHkgd29ya2VyICMldSBmb3IgeGlkICV1 IHRvIHRoZSBpZGxlIGxpc3QiLAorCQkJCSBzdHJlYW1fYXBwbHlfd29ya2VyLT5wc3RhdGUtPm4s IHN0cmVhbV9hcHBseV93b3JrZXItPnhpZCk7CisKKwkJCUFwcGx5V29ya2Vyc0lkbGVMaXN0W25m cmVld29ya2VycysrXSA9IHN0cmVhbV9hcHBseV93b3JrZXI7CisJCX0KKwkJZWxzZQorCQkJd2Fp dF9mb3Jfd29ya2VyKHN0cmVhbV9hcHBseV93b3JrZXIpOworCX0KKworCS8qCisJICogV2UgYXJl IGluIG1haW4gYXBwbHkgd29ya2VyIGFuZCB0aGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gc2VyaWFs aXplZAorCSAqIHRvIGZpbGUuCisJICovCisJZWxzZQorCQlzZXJpYWxpemVfc3RyZWFtX2Fib3J0 KHhpZCwgc3VieGlkKTsKIH0KIAogLyoKQEAgLTE0NjQsNDAgKzE5MjgsNiBAQCBhcHBseV9zcG9v bGVkX21lc3NhZ2VzKFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIH0KIAogLyoK LSAqIEhhbmRsZSBTVFJFQU0gQ09NTUlUIG1lc3NhZ2UuCi0gKi8KLXN0YXRpYyB2b2lkCi1hcHBs eV9oYW5kbGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCi17Ci0JVHJhbnNhY3Rpb25JZCB4 aWQ7Ci0JTG9naWNhbFJlcENvbW1pdERhdGEgY29tbWl0X2RhdGE7Ci0KLQlpZiAoaW5fc3RyZWFt ZWRfdHJhbnNhY3Rpb24pCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9Q Uk9UT0NPTF9WSU9MQVRJT04pLAotCQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBDT01NSVQg bWVzc2FnZSB3aXRob3V0IFNUUkVBTSBTVE9QIikpKTsKLQotCXhpZCA9IGxvZ2ljYWxyZXBfcmVh ZF9zdHJlYW1fY29tbWl0KHMsICZjb21taXRfZGF0YSk7Ci0Jc2V0X2FwcGx5X2Vycm9yX2NvbnRl eHRfeGFjdCh4aWQsIGNvbW1pdF9kYXRhLmNvbW1pdF9sc24pOwotCi0JZWxvZyhERUJVRzEsICJy ZWNlaXZlZCBjb21taXQgZm9yIHN0cmVhbWVkIHRyYW5zYWN0aW9uICV1IiwgeGlkKTsKLQotCWFw cGx5X3Nwb29sZWRfbWVzc2FnZXMoeGlkLCBjb21taXRfZGF0YS5jb21taXRfbHNuKTsKLQotCWFw cGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoJmNvbW1pdF9kYXRhKTsKLQotCS8qIHVubGluayB0 aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1YnhhY3QgaW5mbyAqLwotCXN0 cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7Ci0KLQkv KiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFs bGVsLiAqLwotCXByb2Nlc3Nfc3luY2luZ190YWJsZXMoY29tbWl0X2RhdGEuZW5kX2xzbik7Ci0K LQlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEUsIE5VTEwpOwotCi0JcmVzZXRfYXBw bHlfZXJyb3JfY29udGV4dF9pbmZvKCk7Ci19Ci0KLS8qCiAgKiBIZWxwZXIgZnVuY3Rpb24gZm9y IGFwcGx5X2hhbmRsZV9jb21taXQgYW5kIGFwcGx5X2hhbmRsZV9zdHJlYW1fY29tbWl0LgogICov CiBzdGF0aWMgdm9pZApAQCAtMjQ0Niw2ICsyODc2LDEwNiBAQCBhcHBseV9oYW5kbGVfdHJ1bmNh dGUoU3RyaW5nSW5mbyBzKQogCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9CiAKKy8qCisgKiBI YW5kbGUgU1RSRUFNIENPTU1JVCBtZXNzYWdlLgorICovCitzdGF0aWMgdm9pZAorYXBwbHlfaGFu ZGxlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBzKQoreworCUxvZ2ljYWxSZXBDb21taXREYXRh IGNvbW1pdF9kYXRhOworCVRyYW5zYWN0aW9uSWQgeGlkOworCisJaWYgKGluX3N0cmVhbWVkX3Ry YW5zYWN0aW9uKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9D T0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnX2ludGVybmFsKCJTVFJFQU0gQ09NTUlUIG1lc3Nh Z2Ugd2l0aG91dCBTVFJFQU0gU1RPUCIpKSk7CisKKwl4aWQgPSBwcV9nZXRtc2dpbnQocywgNCk7 CisJbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9jb21taXQocywgJmNvbW1pdF9kYXRhKTsKKworCWVs b2coREVCVUcxLCAicmVjZWl2ZWQgY29tbWl0IGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIs IHhpZCk7CisKKwlpZiAoaXNMb2dpY2FsQXBwbHlXb3JrZXIpCisJeworCQkvKgorCQkgKiBJZiB3 ZSBhcmUgaW4gYSBiZ3dvcmtlciwgZmluaXNoIHRoZSB0cmFuc2FjdGlvbi4KKwkJICovCisKKwkJ c2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdCh4aWQsIGNvbW1pdF9kYXRhLmNvbW1pdF9sc24p OworCisJCS8qCisJCSAqIFVwZGF0ZSBvcmlnaW4gc3RhdGUgc28gd2UgY2FuIHJlc3RhcnQgc3Ry ZWFtaW5nIGZyb20gY29ycmVjdAorCQkgKiBwb3NpdGlvbiBpbiBjYXNlIG9mIGNyYXNoLgorCQkg Ki8KKwkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc24gPSBjb21taXRfZGF0YS5lbmRfbHNu OworCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX3RpbWVzdGFtcCA9IGNvbW1pdF9kYXRhLmNv bW1pdHRpbWU7CisKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJRW5kVHJhbnNh Y3Rpb25CbG9jayhmYWxzZSk7CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCXBn c3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CisKKwkJbGlzdF9mcmVlKHN1YnhhY3RsaXN0KTsKKwkJ c3VieGFjdGxpc3QgPSBOSUw7CisKKwkJLyoKKwkJICogVGhlIHRyYW5zYWN0aW9uIGlzIGVpdGhl ciBub24tZW1wdHkgb3Igc2tpcHBlZCwgc28gd2UgY2xlYXIgdGhlCisJCSAqIHN1YnNraXBsc24u CisJCSAqLworCQljbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24oY29tbWl0X2RhdGEuY29tbWl0 X2xzbik7CisKKwkJLyogUHJvY2VzcyBhbnkgdGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9u aXplZCBpbiBwYXJhbGxlbC4gKi8KKwkJcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhjb21taXRfZGF0 YS5lbmRfbHNuKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFyZSBpbiBtYWluIGFwcGx5IHdvcmtl ciwgY2hlY2sgaWYgd2UgYXJlIHByb2Nlc3NpbmcgdGhpcworCSAqIHRyYW5zYWN0aW9uIGluIGEg Ymd3b3JrZXIuCisJICovCisJZWxzZSBpZiAodHJhbnNhY3Rpb25fYXBwbGllZF9pbl9iZ3dvcmtl cih4aWQpKQorCXsKKwkJLyogU2VuZCBjb21taXQgbWVzc2FnZSAqLworCQlzZW5kX2RhdGFfdG9f d29ya2VyKHN0cmVhbV9hcHBseV93b3JrZXIsIHMtPmxlbiwgcy0+ZGF0YSk7CisKKwkJLyogTm90 aWZ5IHdvcmtlciwgdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgeGFjdCAqLworCQl3YWl0X2Zv cl93b3JrZXJfdG9fZmluaXNoKHN0cmVhbV9hcHBseV93b3JrZXIpOworCisJCWVsb2coTE9HLCAi YWRkaW5nIGZpbmlzaGVkIGFwcGx5IHdvcmtlciAjJXUgZm9yIHhpZCAldSB0byB0aGUgaWRsZSBs aXN0IiwKKwkJCSBzdHJlYW1fYXBwbHlfd29ya2VyLT5wc3RhdGUtPm4sIHN0cmVhbV9hcHBseV93 b3JrZXItPnhpZCk7CisKKwkJQXBwbHlXb3JrZXJzSWRsZUxpc3RbbmZyZWV3b3JrZXJzKytdID0g c3RyZWFtX2FwcGx5X3dvcmtlcjsKKworCQlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2UpOworCisJ CXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKGNvbW1pdF9kYXRhLmVuZF9sc24pOworCisJCXN0b3Bfc2tp cHBpbmdfY2hhbmdlcygpOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBJZiB3ZSBhcmUgaW4g bWFpbiBhcHBseSB3b3JrZXIgYW5kIHRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbgorCQkgKiBzZXJp YWxpemVkIHRvIGZpbGUsIHJlcGxheSBhbGwgdGhlIHNwb29sZWQgb3BlcmF0aW9ucy4KKwkJICov CisJCWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoeGlkLCBjb21taXRfZGF0YS5jb21taXRfbHNuKTsK KworCQlhcHBseV9oYW5kbGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7CisKKwkJLyog dW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcyBhbmQgc3VieGFjdCBpbmZv ICovCisJCXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhp ZCk7CisKKwkJLyogUHJvY2VzcyBhbnkgdGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXpl ZCBpbiBwYXJhbGxlbC4gKi8KKwkJcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhjb21taXRfZGF0YS5l bmRfbHNuKTsKKwl9CisKKwlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEUsIE5VTEwp OworCisJcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKCk7CisKKwlzdHJlYW1fYXBwbHlf d29ya2VyID0gTlVMTDsKK30KIAogLyoKICAqIExvZ2ljYWwgcmVwbGljYXRpb24gcHJvdG9jb2wg bWVzc2FnZSBkaXNwYXRjaGVyLgpAQCAtMjUxMiw2ICszMDQyLDcgQEAgYXBwbHlfZGlzcGF0Y2go U3RyaW5nSW5mbyBzKQogCQkJYnJlYWs7CiAKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFN X1NUQVJUOgorCQkJZWxvZyhMT0csICJMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1NUQVJUIik7CiAJ CQlhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KHMpOwogCQkJYnJlYWs7CiAKQEAgLTI2NzYsNiAr MzIwNyw4IEBAIExvZ2ljYWxSZXBBcHBseUxvb3AoWExvZ1JlY1B0ciBsYXN0X3JlY2VpdmVkKQog CS8qIG1hcmsgYXMgaWRsZSwgYmVmb3JlIHN0YXJ0aW5nIHRvIGxvb3AgKi8KIAlwZ3N0YXRfcmVw b3J0X2FjdGl2aXR5KFNUQVRFX0lETEUsIE5VTEwpOwogCisJQXBwbHlXb3JrZXJzSWRsZUxpc3Qg PSBwYWxsb2Moc2l6ZW9mKFdvcmtlclN0YXRlICopICogcG9vbF9zaXplKTsKKwogCS8qCiAJICog UHVzaCBhcHBseSBlcnJvciBjb250ZXh0IGNhbGxiYWNrLiBGaWVsZHMgd2lsbCBiZSBmaWxsZWQg d2hpbGUgYXBwbHlpbmcKIAkgKiBhIGNoYW5nZS4KQEAgLTI3OTcsNiArMzMzMCw5IEBAIExvZ2lj YWxSZXBBcHBseUxvb3AoWExvZ1JlY1B0ciBsYXN0X3JlY2VpdmVkKQogCiAJCQkvKiBQcm9jZXNz IGFueSB0YWJsZSBzeW5jaHJvbml6YXRpb24gY2hhbmdlcy4gKi8KIAkJCXByb2Nlc3Nfc3luY2lu Z190YWJsZXMobGFzdF9yZWNlaXZlZCk7CisKKwkJCS8qIENoZWNrIHRoZSBzdGF0dXMgb2YgYmd3 b3JrZXJzICovCisJCQljaGVja193b3JrZXJzX3N0YXR1cygpOwogCQl9CiAKIAkJLyogQ2xlYW51 cCB0aGUgbWVtb3J5LiAqLwpAQCAtMzQ2OCw2ICs0MDA0LDcgQEAgVHdvUGhhc2VUcmFuc2FjdGlv bkdpZChPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCBjaGFyICpnaWQsIGludCBzemdpZCkK IAlzbnByaW50ZihnaWQsIHN6Z2lkLCAicGdfZ2lkXyV1XyV1Iiwgc3ViaWQsIHhpZCk7CiB9CiAK KwogLyoKICAqIEV4ZWN1dGUgdGhlIGluaXRpYWwgc3luYyB3aXRoIGVycm9yIGhhbmRsaW5nLiBE aXNhYmxlIHRoZSBzdWJzY3JpcHRpb24sCiAgKiBpZiBpdCdzIHJlcXVpcmVkLgpAQCAtMzY4Nyw3 ICs0MjI0LDcgQEAgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCQlvcmlnaW5pZCA9 IHJlcGxvcmlnaW5fYnlfbmFtZShvcmlnaW5uYW1lLCB0cnVlKTsKIAkJaWYgKCFPaWRJc1ZhbGlk KG9yaWdpbmlkKSkKIAkJCW9yaWdpbmlkID0gcmVwbG9yaWdpbl9jcmVhdGUob3JpZ2lubmFtZSk7 Ci0JCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCk7CisJCXJlcGxvcmlnaW5fc2Vz c2lvbl9zZXR1cChvcmlnaW5pZCwgdHJ1ZSk7CiAJCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4g PSBvcmlnaW5pZDsKIAkJb3JpZ2luX3N0YXJ0cG9zID0gcmVwbG9yaWdpbl9zZXNzaW9uX2dldF9w cm9ncmVzcyhmYWxzZSk7CiAJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwpAQCAtMzg1OCw2 ICs0Mzk1LDE0IEBAIG1heWJlX3N0YXJ0X3NraXBwaW5nX2NoYW5nZXMoWExvZ1JlY1B0ciBmaW5p c2hfbHNuKQogCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhza2lwX3hhY3RfZmluaXNoX2xzbikpKTsK IH0KIAorCisvKgorICogVE9ETyBDdXJyZW50bHksIHdlIGNhbm5vdCBza2lwIHN0cmVhbWluZyB0 cmFuc2FjdGlvbiBpbiBzZXBhcmF0ZSB3b3JrZXIKKyAqIGJlY2F1c2UgZm9yIG5vdyB0aGUgc3Ry ZWFtaW5nIHRyYW5zYWN0aW9uIGNvdWxkIHJlcG9ydCBlcnJvciBiZWZvcmUKKyAqIHJlY2Vpdmlu ZyBTVFJFQU0gQ09NTUlULCBzbyB3ZSBjYW5ub3QgZ2V0IHRoZSBsYXN0IExTTiB3aGljaCBpcyB1 c2VkIHRvCisgKiBpbnZva2UgbWF5YmVfc3RhcnRfc2tpcHBpbmdfY2hhbmdlcy4KKyAqLworCiAv KgogICogU3RvcCBza2lwcGluZyBjaGFuZ2VzIGJ5IHJlc2V0dGluZyBza2lwX3hhY3RfZmluaXNo X2xzbiBpZiBlbmFibGVkLgogICovCkBAIC00MDI4LDMgKzQ1NzMsNjEzIEBAIHJlc2V0X2FwcGx5 X2Vycm9yX2NvbnRleHRfaW5mbyh2b2lkKQogCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5yZW1v dGVfYXR0bnVtID0gLTE7CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChJbnZhbGlkVHJh bnNhY3Rpb25JZCwgSW52YWxpZFhMb2dSZWNQdHIpOwogfQorCisvKiBBcHBseSBCYWNrZ3JvdW5k IFdvcmtlciBtYWluIGxvb3AgKi8KK3N0YXRpYyB2b2lkCitMb2dpY2FsQXBwbHlCZ3dMb29wKHNo bV9tcV9oYW5kbGUgKm1xaCwgdm9sYXRpbGUgUGFyYWxsZWxTdGF0ZSAqcHN0KQoreworCXNobV9t cV9yZXN1bHQJCSBzaG1xX3JlczsKKwlQR1BST0MJCQkJKnJlZ2lzdHJhbnQ7CisJRXJyb3JDb250 ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlyZWdpc3RyYW50ID0gQmFja2VuZFBpZEdldFBy b2MoTXlCZ3dvcmtlckVudHJ5LT5iZ3dfbm90aWZ5X3BpZCk7CisJU2V0TGF0Y2goJnJlZ2lzdHJh bnQtPnByb2NMYXRjaCk7CisKKwkvKgorCSAqIFB1c2ggYXBwbHkgZXJyb3IgY29udGV4dCBjYWxs YmFjay4gRmllbGRzIHdpbGwgYmUgZmlsbGVkIGR1cmluZworCSAqIGFwcGx5aW5nIGEgY2hhbmdl LgorCSAqLworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gYXBwbHlfZXJyb3JfY2FsbGJhY2s7CisJ ZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRl eHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwlmb3IgKDs7KQorCXsKKwkJdm9pZCAqZGF0YTsK KwkJU2l6ZSAgbGVuOworCQlTdHJpbmdJbmZvRGF0YSBzOworCQlNZW1vcnlDb250ZXh0CW9sZGN0 eDsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIEVuc3VyZSB3ZSBhcmUgcmVh ZGluZyB0aGUgZGF0YSBpbnRvIG91ciBtZW1vcnkgY29udGV4dC4gKi8KKwkJb2xkY3R4ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5TWVzc2FnZUNvbnRleHQpOworCisJCXNobXFfcmVzID0g c2htX21xX3JlY2VpdmUobXFoLCAmbGVuLCAmZGF0YSwgZmFsc2UpOworCisJCWlmIChzaG1xX3Jl cyAhPSBTSE1fTVFfU1VDQ0VTUykKKwkJCWJyZWFrOworCisJCWlmIChsZW4gPT0gMCkKKwkJewor CQkJZWxvZyhMT0csICJbQXBwbHkgQkdXICMldV0gZ290IHplcm8tbGVuZ3RoIG1lc3NhZ2UsIHN0 b3BwaW5nIiwgcHN0LT5uKTsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UKKwkJeworCQkJcy5jdXJz b3IgPSAwOworCQkJcy5tYXhsZW4gPSAtMTsKKwkJCXMuZGF0YSA9IChjaGFyICopIGRhdGE7CisJ CQlzLmxlbiA9IGxlbjsKKworCQkJLyoKKwkJCSAqIFdlIHVzZSBmaXJzdCBieXRlIG9mIG1lc3Nh Z2UgZm9yIGFkZGl0aW9uYWwgY29tbXVuaWNhdGlvbiBiZXR3ZWVuCisJCQkgKiBtYWluIExvZ2lj YWwgcmVwbGljYXRpb24gd29ya2VyIGFuZCBBcHBseSBCR1dvcmtlcnMsIHNvIGlmIGl0CisJCQkg KiBkaWZmZXJzIGZyb20gJ3cnLCB0aGVuIHByb2Nlc3MgaXQgZmlyc3QuCisJCQkgKi8KKwkJCXN3 aXRjaCAocHFfZ2V0bXNnYnl0ZSgmcykpCisJCQl7CisJCQkJLyogU3RyZWFtIHN0b3AgKi8KKwkJ CQljYXNlICdFJzoKKwkJCQl7CisJCQkJCVNwaW5Mb2NrQWNxdWlyZSgmcHN0LT5tdXRleCk7CisJ CQkJCXBzdC0+cmVhZHkgPSB0cnVlOworCQkJCQlTcGluTG9ja1JlbGVhc2UoJnBzdC0+bXV0ZXgp OworCQkJCQlTZXRMYXRjaCgmcmVnaXN0cmFudC0+cHJvY0xhdGNoKTsKKworCQkJCQlpbl9zdHJl YW1lZF90cmFuc2FjdGlvbiA9IGZhbHNlOworCisJCQkJCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHko U1RBVEVfSURMRSwgTlVMTCk7CisKKwkJCQkJZWxvZyhMT0csICJbQXBwbHkgQkdXICMldV0gZW5k ZWQgcHJvY2Vzc2luZyBzdHJlYW1pbmcgY2h1bmssIgorCQkJCQkJCSAgIndhaXRpbmcgb24gc2ht X21xX3JlY2VpdmUiLCBwc3QtPm4pOworCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQkvKiBG aW5pc2hlZCBwcm9jZXNzaW5nIHhhY3QgKi8KKwkJCQljYXNlICdGJzoKKwkJCQl7CisJCQkJCWVs b2coTE9HLCAiW0FwcGx5IEJHVyAjJXVdIGZpbmlzaGVkIHByb2Nlc3NpbmcgeGFjdCAldSIsIHBz dC0+biwgc3RyZWFtX3hpZCk7CisKKwkJCQkJU3BpbkxvY2tBY3F1aXJlKCZwc3QtPm11dGV4KTsK KwkJCQkJcHN0LT5maW5pc2hlZCA9IHRydWU7CisJCQkJCVNwaW5Mb2NrUmVsZWFzZSgmcHN0LT5t dXRleCk7CisKKwkJCQkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CisKKwkJCQkJY29u dGludWU7CisJCQkJfQorCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJfQorCisJCQlwcV9n ZXRtc2dpbnQ2NCgmcyk7IC8vIFJlYWQgTFNOIGluZm8KKwkJCXBxX2dldG1zZ2ludDY0KCZzKTsg Ly8gVE9ETyBEbyB3ZSBuZWVkIHRvIHByb2Nlc3MgaXQgaGVyZSBhZ2FpbiBzb21laG93PworCQkJ cHFfZ2V0bXNnaW50NjQoJnMpOworCisJCQkvKgorCQkJICogTWFrZSBzdXJlIHRoZSBoYW5kbGUg YXBwbHlfZGlzcGF0Y2ggbWV0aG9kcyBhcmUgYXdhcmUgd2UncmUgaW4gYSByZW1vdGUKKwkJCSAq IHRyYW5zYWN0aW9uLgorCQkJICovCisJCQlpbl9yZW1vdGVfdHJhbnNhY3Rpb24gPSB0cnVlOwor CisJCQllbG9nKERFQlVHNSwgIltBcHBseSBCR1cgIyV1XSBhcHBseWluZyBkaXNwYXRjaCBmb3Ig YWN0aW9uPSVzIiwKKwkJCQkJCQkJCXBzdC0+biwgKGNoYXIgKikgJnMuZGF0YVtzLmN1cnNvcl0p OworCQkJYXBwbHlfZGlzcGF0Y2goJnMpOworCisJCQlpZiAoQ29uZmlnUmVsb2FkUGVuZGluZykK KwkJCXsKKwkJCQlDb25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7CisJCQkJUHJvY2Vzc0NvbmZp Z0ZpbGUoUEdDX1NJR0hVUCk7CisJCQl9CisJCX0KKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3R4KTsKKwkJTWVtb3J5Q29udGV4dFJlc2V0KEFwcGx5TWVzc2FnZUNvbnRleHQpOworCX0K KworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKKwlNZW1vcnlDb250 ZXh0UmVzZXQoQXBwbHlDb250ZXh0KTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFj ayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKKworCVNw aW5Mb2NrQWNxdWlyZSgmcHN0LT5tdXRleCk7CisJcHN0LT5maW5pc2hlZCA9IHRydWU7CisJU3Bp bkxvY2tSZWxlYXNlKCZwc3QtPm11dGV4KTsKKworCWVsb2coTE9HLCAiW0FwcGx5IEJHVyAjJXVd IGV4aXRpbmciLCBwc3QtPm4pOworCisJLyogU2lnbmFsIG1haW4gcHJvY2VzcyB0aGF0IHdlIGFy ZSBkb25lLiAqLworCVNldExhdGNoKCZyZWdpc3RyYW50LT5wcm9jTGF0Y2gpOworfQorCisvKgor ICogU2V0IHRoZSBmYWlsZWQgZmxhZyBzbyB0aGF0IHRoZSBtYWluIGFwcGx5IHdvcmtlciBjYW4g cmVhbGl6ZSB3ZSBoYXZlCisgKiBzaHV0ZG93bi4KKyAqLworc3RhdGljIHZvaWQKK0FwcGx5Qmd3 U2h1dGRvd24oaW50IGNvZGUsIERhdHVtIGFyZykKK3sKKwlTcGluTG9ja0FjcXVpcmUoJk15UGFy YWxsZWxTdGF0ZS0+bXV0ZXgpOworCU15UGFyYWxsZWxTdGF0ZS0+ZmFpbGVkID0gdHJ1ZTsKKwlT cGluTG9ja1JlbGVhc2UoJk15UGFyYWxsZWxTdGF0ZS0+bXV0ZXgpOworCisJZHNtX2RldGFjaCgo ZHNtX3NlZ21lbnQgKikgRGF0dW1HZXRQb2ludGVyKGFyZykpOworfQorCisvKgorICogQXBwbHkg QmFja2dyb3VuZCBXb3JrZXIgZW50cnkgcG9pbnQKKyAqLwordm9pZAorTG9naWNhbEFwcGx5Qmd3 TWFpbihEYXR1bSBtYWluX2FyZykKK3sKKwl2b2xhdGlsZSBQYXJhbGxlbFN0YXRlICpwc3Q7CisK Kwlkc21faGFuZGxlCQkJaGFuZGxlOworCWRzbV9zZWdtZW50CQkJKnNlZzsKKwlzaG1fdG9jCQkJ CSp0b2M7CisJc2htX21xCQkJCSptcTsKKwlzaG1fbXFfaGFuZGxlCQkqbXFoOworCU1lbW9yeUNv bnRleHQJCSBvbGRjb250ZXh0OworCVJlcE9yaWdpbklkCQkJb3JpZ2luaWQ7CisJaW50CQkJd29y a2VyX3Nsb3QgPSBEYXR1bUdldEludDMyKG1haW5fYXJnKTsKKwljaGFyCQlvcmlnaW5uYW1lW05B TUVEQVRBTEVOXTsKKworCS8qIEF0dGFjaCB0byBzbG90ICovCisJbG9naWNhbHJlcF93b3JrZXJf YXR0YWNoKHdvcmtlcl9zbG90KTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlD b250ZXh0KTsKKworCS8qIExvYWQgdGhlIHN1YnNjcmlwdGlvbiBpbnRvIHBlcnNpc3RlbnQgbWVt b3J5IGNvbnRleHQuICovCisJQXBwbHlDb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRv cE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJICJBcHBseUNvbnRleHQiLAorCQkJCQkJCQkJCSBB TExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCS8qCisJICogSW5pdCB0aGUgQXBwbHlNZXNzYWdl Q29udGV4dCB3aGljaCB3ZSBjbGVhbiB1cCBhZnRlciBlYWNoIHJlcGxpY2F0aW9uCisJICogcHJv dG9jb2wgbWVzc2FnZS4KKwkgKi8KKwlBcHBseU1lc3NhZ2VDb250ZXh0ID0gQWxsb2NTZXRDb250 ZXh0Q3JlYXRlKEFwcGx5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSJBcHBseU1lc3NhZ2VDb250ZXh0 IiwKKwkJCQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJaXNMb2dpY2FsQXBw bHlXb3JrZXIgPSB0cnVlOworCisJLyogU2V0dXAgc2lnbmFsIGhhbmRsaW5nICovCisJcHFzaWdu YWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVsb2FkKTsKKwlwcXNpZ25hbChTSUdU RVJNLCBkaWUpOworCUJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOworCisJLyoKKwkg KiBDb25uZWN0IHRvIHRoZSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4KKwkgKgorCSAq IFRoZSBiYWNrZW5kIHRoYXQgcmVnaXN0ZXJlZCB0aGlzIHdvcmtlciBwYXNzZWQgdXMgdGhlIElE IG9mIGEgc2hhcmVkCisJICogbWVtb3J5IHNlZ21lbnQgdG8gd2hpY2ggd2UgbXVzdCBhdHRhY2gg Zm9yIGZ1cnRoZXIgaW5zdHJ1Y3Rpb25zLiAgSW4KKwkgKiBvcmRlciB0byBhdHRhY2ggdG8gZHlu YW1pYyBzaGFyZWQgbWVtb3J5LCB3ZSBuZWVkIGEgcmVzb3VyY2Ugb3duZXIuCisJICogT25jZSB3 ZSd2ZSBtYXBwZWQgdGhlIHNlZ21lbnQgaW4gb3VyIGFkZHJlc3Mgc3BhY2UsIGF0dGFjaCB0byB0 aGUgdGFibGUKKwkgKiBvZiBjb250ZW50cyBzbyB3ZSBjYW4gbG9jYXRlIHRoZSB2YXJpb3VzIGRh dGEgc3RydWN0dXJlcyB3ZSdsbCBuZWVkIHRvCisJICogZmluZCB3aXRoaW4gdGhlIHNlZ21lbnQu CisJICovCisJQ3VycmVudFJlc291cmNlT3duZXIgPSBSZXNvdXJjZU93bmVyQ3JlYXRlKE5VTEws ICJMb2dpY2FsIGFwcGx5IHdvcmtlciIpOworCW1lbWNweSgmaGFuZGxlLCBNeUJnd29ya2VyRW50 cnktPmJnd19leHRyYSwgc2l6ZW9mKGRzbV9oYW5kbGUpKTsKKwlzZWcgPSBkc21fYXR0YWNoKGhh bmRsZSk7CisJaWYgKHNlZyA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2co InVuYWJsZSB0byBtYXAgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQiKSkpOworCXRvYyA9 IHNobV90b2NfYXR0YWNoKFBHX0xPR0lDQUxfQVBQTFlfU0hNX01BR0lDLCBkc21fc2VnbWVudF9h ZGRyZXNzKHNlZykpOworCWlmICh0b2MgPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkg ZXJybXNnKCJiYWQgbWFnaWMgbnVtYmVyIGluIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50 IikpKTsKKworCWJlZm9yZV9zaG1lbV9leGl0KEFwcGx5Qmd3U2h1dGRvd24sIFBvaW50ZXJHZXRE YXR1bShzZWcpKTsKKworCS8qCisJICogQWNxdWlyZSBhIHdvcmtlciBudW1iZXIuCisJICoKKwkg KiBCeSBjb252ZW50aW9uLCB0aGUgcHJvY2VzcyByZWdpc3RlcmluZyB0aGlzIGJhY2tncm91bmQg d29ya2VyIHNob3VsZAorCSAqIGhhdmUgc3RvcmVkIHRoZSBjb250cm9sIHN0cnVjdHVyZSBhdCBr ZXkgMC4gIFdlIGxvb2sgdXAgdGhhdCBrZXkgdG8KKwkgKiBmaW5kIGl0LiAgT3VyIHdvcmtlciBu dW1iZXIgZ2l2ZXMgb3VyIGlkZW50aXR5OiB0aGVyZSBtYXkgYmUganVzdCBvbmUKKwkgKiB3b3Jr ZXIgaW52b2x2ZWQgaW4gdGhpcyBwYXJhbGxlbCBvcGVyYXRpb24sIG9yIHRoZXJlIG1heSBiZSBt YW55LgorCSAqLworCXBzdCA9IHNobV90b2NfbG9va3VwKHRvYywgMCwgZmFsc2UpOworCU15UGFy YWxsZWxTdGF0ZSA9IHBzdDsKKworCVNwaW5Mb2NrQWNxdWlyZSgmcHN0LT5tdXRleCk7CisJcHN0 LT5hdHRhY2hlZCA9IHRydWU7CisJU3BpbkxvY2tSZWxlYXNlKCZwc3QtPm11dGV4KTsKKworCS8q CisJICogQXR0YWNoIHRvIHRoZSBtZXNzYWdlIHF1ZXVlLgorCSAqLworCW1xID0gc2htX3RvY19s b29rdXAodG9jLCAxLCBmYWxzZSk7CisJc2htX21xX3NldF9yZWNlaXZlcihtcSwgTXlQcm9jKTsK KwltcWggPSBzaG1fbXFfYXR0YWNoKG1xLCBzZWcsIE5VTEwpOworCisJLyogQ29ubmVjdCB0byBv dXIgZGF0YWJhc2UuICovCisJQmFja2dyb3VuZFdvcmtlckluaXRpYWxpemVDb25uZWN0aW9uQnlP aWQoTXlMb2dpY2FsUmVwV29ya2VyLT5kYmlkLAorCQkJCQkJCQkJCQkgIE15TG9naWNhbFJlcFdv cmtlci0+dXNlcmlkLAorCQkJCQkJCQkJCQkgIDApOworCisJLyoKKwkgKiBTZXQgdGhlIGNsaWVu dCBlbmNvZGluZyB0byB0aGUgZGF0YWJhc2UgZW5jb2RpbmcsIHNpbmNlIHRoYXQgaXMgd2hhdAor CSAqIHRoZSBsZWFkZXIgd2lsbCBleHBlY3QuCisJICovCisJU2V0Q2xpZW50RW5jb2RpbmcoR2V0 RGF0YWJhc2VFbmNvZGluZygpKTsKKworCXN0cmVhbV94aWQgPSBwc3QtPnN0cmVhbV94aWQ7CisK KwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsKKworCU15U3Vic2NyaXB0aW9uID0gR2V0U3Vic2NyaXB0 aW9uKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHRydWUpOworCWlmICghTXlTdWJzY3JpcHRp b24pCisJeworCQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9u IGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1IHdpbGwgbm90ICIKKwkJCQkJCSJzdGFy dCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIHJlbW92ZWQgZHVyaW5nIHN0YXJ0dXAiLAor CQkJCQkJTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCkpKTsKKwkJcHJvY19leGl0KDApOworCX0K KworCU15U3Vic2NyaXB0aW9uVmFsaWQgPSB0cnVlOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjb250ZXh0KTsKKworCS8qIFNldHVwIHN5bmNocm9ub3VzIGNvbW1pdCBhY2NvcmRpbmcgdG8g dGhlIHVzZXIncyB3aXNoZXMgKi8KKwlTZXRDb25maWdPcHRpb24oInN5bmNocm9ub3VzX2NvbW1p dCIsIE15U3Vic2NyaXB0aW9uLT5zeW5jY29tbWl0LAorCQkJCQlQR0NfQkFDS0VORCwgUEdDX1Nf T1ZFUlJJREUpOworCisJLyogS2VlcCB1cyBpbmZvcm1lZCBhYm91dCBzdWJzY3JpcHRpb24gY2hh bmdlcy4gKi8KKwlDYWNoZVJlZ2lzdGVyU3lzY2FjaGVDYWxsYmFjayhTVUJTQ1JJUFRJT05PSUQs CisJCQkJCQkJCSAgc3Vic2NyaXB0aW9uX2NoYW5nZV9jYiwKKwkJCQkJCQkJICAoRGF0dW0pIDAp OworCisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKiBTZXR1cCByZXBsaWNhdGlv biBvcmlnaW4gdHJhY2tpbmcuICovCisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlzbnBy aW50ZihvcmlnaW5uYW1lLCBzaXplb2Yob3JpZ2lubmFtZSksICJwZ18ldSIsIE15U3Vic2NyaXB0 aW9uLT5vaWQpOworCW9yaWdpbmlkID0gcmVwbG9yaWdpbl9ieV9uYW1lKG9yaWdpbm5hbWUsIHRy dWUpOworCWlmICghT2lkSXNWYWxpZChvcmlnaW5pZCkpCisJCW9yaWdpbmlkID0gcmVwbG9yaWdp bl9jcmVhdGUob3JpZ2lubmFtZSk7CisJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlk LCBmYWxzZSk7CisJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiA9IG9yaWdpbmlkOworCUNvbW1p dFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgb3JpZ2luIG5h bWUgaW4gbG9uZy1saXZlZCBjb250ZXh0IGZvciBlcnJvciBjb250ZXh0CisJICogbWVzc2FnZS4K KwkgKi8KKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcub3JpZ2luX25hbWUgPSBNZW1vcnlDb250 ZXh0U3RyZHVwKEFwcGx5Q29udGV4dCwKKwkJCQkJCQkJCQkJCQkJCSAgIG9yaWdpbm5hbWUpOwor CisJLyoKKwkgKiBJbmRpY2F0ZSB0aGF0IHdlJ3JlIGZ1bGx5IGluaXRpYWxpemVkIGFuZCByZWFk eSB0byBiZWdpbiB0aGUgbWFpbiBwYXJ0CisJICogb2YgdGhlIHBhcmFsbGVsIG9wZXJhdGlvbi4K KwkgKgorCSAqIE9uY2Ugd2Ugc2lnbmFsIHRoYXQgd2UncmUgcmVhZHksIHRoZSB1c2VyIGJhY2tl bmQgaXMgZW50aXRsZWQgdG8gYXNzdW1lCisJICogdGhhdCBvdXIgb25fZHNtX2RldGFjaCBjYWxs YmFja3Mgd2lsbCBmaXJlIGJlZm9yZSB3ZSBkaXNjb25uZWN0IGZyb20KKwkgKiB0aGUgc2hhcmVk IG1lbW9yeSBzZWdtZW50IGFuZCBleGl0LiAgR2VuZXJhbGx5LCB0aGF0IG1lYW5zIHdlIG11c3Qg aGF2ZQorCSAqIGF0dGFjaGVkIHRvIGFsbCByZWxldmFudCBkeW5hbWljIHNoYXJlZCBtZW1vcnkg ZGF0YSBzdHJ1Y3R1cmVzIGJ5IG5vdy4KKwkgKi8KKwlTcGluTG9ja0FjcXVpcmUoJnBzdC0+bXV0 ZXgpOworCXBzdC0+cmVhZHkgPSB0cnVlOworCVNwaW5Mb2NrUmVsZWFzZSgmcHN0LT5tdXRleCk7 CisKKwllbG9nKExPRywgIltBcHBseSBCR1cgIyV1XSBzdGFydGVkIiwgcHN0LT5uKTsKKworCVBH X1RSWSgpOworCXsKKwkJTG9naWNhbEFwcGx5Qmd3TG9vcChtcWgsIHBzdCk7CisJfQorCVBHX0NB VENIKCk7CisJeworCQkvKgorCQkgKiBSZXBvcnQgdGhlIHdvcmtlciBmYWlsZWQgd2hpbGUgYXBw bHlpbmcgc3RyZWFtaW5nIHRyYW5zYWN0aW9uCisJCSAqIGNoYW5nZXMuIEFib3J0IHRoZSBjdXJy ZW50IHRyYW5zYWN0aW9uIHNvIHRoYXQgdGhlIHN0YXRzIG1lc3NhZ2UgaXMKKwkJICogc2VudCBp biBhbiBpZGxlIHN0YXRlLgorCQkgKi8KKwkJQWJvcnRPdXRPZkFueVRyYW5zYWN0aW9uKCk7CisJ CXBnc3RhdF9yZXBvcnRfc3Vic2NyaXB0aW9uX2Vycm9yKE15U3Vic2NyaXB0aW9uLT5vaWQsIGZh bHNlKTsKKworCQlQR19SRV9USFJPVygpOworCX0KKwlQR19FTkRfVFJZKCk7CisKKwkvKgorCSAq IFdlJ3JlIGRvbmUuICBFeHBsaWNpdGx5IGRldGFjaCB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50 IHNvIHRoYXQgd2UKKwkgKiBkb24ndCBnZXQgYSByZXNvdXJjZSBsZWFrIHdhcm5pbmcgYXQgY29t bWl0IHRpbWUuICBUaGlzIHdpbGwgZmlyZSBhbnkKKwkgKiBvbl9kc21fZGV0YWNoIGNhbGxiYWNr cyB3ZSd2ZSByZWdpc3RlcmVkLCBhcyB3ZWxsLiAgT25jZSB0aGF0J3MgZG9uZSwKKwkgKiB3ZSBj YW4gZ28gYWhlYWQgYW5kIGV4aXQuCisJICovCisJZHNtX2RldGFjaChzZWcpOworCXByb2NfZXhp dCgwKTsKK30KKworLyoKKyAqIFNldCB1cCBhIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50 LgorICoKKyAqIFdlIHNldCB1cCBhIGNvbnRyb2wgcmVnaW9uIHRoYXQgY29udGFpbnMgYSBQYXJh bGxlbFN0YXRlLAorICogcGx1cyBvbmUgcmVnaW9uIHBlciBtZXNzYWdlIHF1ZXVlLiBUaGVyZSBh cmUgYXMgbWFueSBtZXNzYWdlIHF1ZXVlcyBhcworICogdGhlIG51bWJlciBvZiB3b3JrZXJzLgor ICovCitzdGF0aWMgdm9pZAorc2V0dXBfZHNtKFdvcmtlclN0YXRlICp3c3RhdGUpCit7CisJc2ht X3RvY19lc3RpbWF0b3IJIGU7CisJaW50CQkJCQkgdG9jX2tleSA9IDA7CisJU2l6ZQkJCQkgc2Vn c2l6ZTsKKwlkc21fc2VnbWVudAkJCSpzZWc7CisJc2htX3RvYwkJCQkqdG9jOworCVBhcmFsbGVs U3RhdGUJCSpwc3Q7CisJc2htX21xCQkJCSptcTsKKwlpbnQ2NAkJCQkgcXVldWVfc2l6ZSA9IDE2 MDAwMDAwMDsgLyogMTYgTUIgZm9yIG5vdyAqLworCisJLyogRW5zdXJlIGEgdmFsaWQgcXVldWUg c2l6ZS4gKi8KKwlpZiAocXVldWVfc2l6ZSA8IDAgfHwgKCh1aW50NjQpIHF1ZXVlX3NpemUpIDwg c2htX21xX21pbmltdW1fc2l6ZSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJxdWV1ZSBzaXplIG11 c3QgYmUgYXQgbGVhc3QgJXp1IGJ5dGVzIiwKKwkJCQkJCXNobV9tcV9taW5pbXVtX3NpemUpKSk7 CisJaWYgKHF1ZXVlX3NpemUgIT0gKChTaXplKSBxdWV1ZV9zaXplKSkKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkg ZXJybXNnKCJxdWV1ZSBzaXplIG92ZXJmbG93cyBzaXplX3QiKSkpOworCisJLyoKKwkgKiBFc3Rp bWF0ZSBob3cgbXVjaCBzaGFyZWQgbWVtb3J5IHdlIG5lZWQuCisJICoKKwkgKiBCZWNhdXNlIHRo ZSBUT0MgbWFjaGluZXJ5IG1heSBjaG9vc2UgdG8gaW5zZXJ0IHBhZGRpbmcgb2Ygb2RkbHktc2l6 ZWQKKwkgKiByZXF1ZXN0cywgd2UgbXVzdCBlc3RpbWF0ZSBlYWNoIGNodW5rIHNlcGFyYXRlbHku CisJICoKKwkgKiBXZSBuZWVkIG9uZSBrZXkgdG8gcmVnaXN0ZXIgdGhlIGxvY2F0aW9uIG9mIHRo ZSBoZWFkZXIsIGFuZCB3ZSBuZWVkCisJICogbndvcmtlcnMga2V5cyB0byB0cmFjayB0aGUgbG9j YXRpb25zIG9mIHRoZSBtZXNzYWdlIHF1ZXVlcy4KKwkgKi8KKwlzaG1fdG9jX2luaXRpYWxpemVf ZXN0aW1hdG9yKCZlKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZlLCBzaXplb2YoUGFyYWxs ZWxTdGF0ZSkpOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJmUsIChTaXplKSBxdWV1ZV9zaXpl KTsKKworCXNobV90b2NfZXN0aW1hdGVfa2V5cygmZSwgMSArIDEpOworCXNlZ3NpemUgPSBzaG1f dG9jX2VzdGltYXRlKCZlKTsKKworCS8qIENyZWF0ZSB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50 IGFuZCBlc3RhYmxpc2ggYSB0YWJsZSBvZiBjb250ZW50cy4gKi8KKwlzZWcgPSBkc21fY3JlYXRl KHNobV90b2NfZXN0aW1hdGUoJmUpLCAwKTsKKwl0b2MgPSBzaG1fdG9jX2NyZWF0ZShQR19MT0dJ Q0FMX0FQUExZX1NITV9NQUdJQywgZHNtX3NlZ21lbnRfYWRkcmVzcyhzZWcpLAorCQkJCQkJIHNl Z3NpemUpOworCisJLyogU2V0IHVwIHRoZSBoZWFkZXIgcmVnaW9uLiAqLworCXBzdCA9IHNobV90 b2NfYWxsb2NhdGUodG9jLCBzaXplb2YoUGFyYWxsZWxTdGF0ZSkpOworCVNwaW5Mb2NrSW5pdCgm cHN0LT5tdXRleCk7CisJcHN0LT5hdHRhY2hlZCA9IGZhbHNlOworCXBzdC0+cmVhZHkgPSBmYWxz ZTsKKwlwc3QtPmZpbmlzaGVkID0gZmFsc2U7CisJcHN0LT5mYWlsZWQgPSBmYWxzZTsKKwlwc3Qt PnN1YmlkID0gTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZDsKKwlwc3QtPnN0cmVhbV94aWQgPSBz dHJlYW1feGlkOworCXBzdC0+biA9IG53b3JrZXJzICsgMTsKKworCXNobV90b2NfaW5zZXJ0KHRv YywgdG9jX2tleSsrLCBwc3QpOworCisJLyogU2V0IHVwIG9uZSBtZXNzYWdlIHF1ZXVlIHBlciB3 b3JrZXIsIHBsdXMgb25lLiAqLworCW1xID0gc2htX21xX2NyZWF0ZShzaG1fdG9jX2FsbG9jYXRl KHRvYywgKFNpemUpIHF1ZXVlX3NpemUpLAorCQkJCQkJKFNpemUpIHF1ZXVlX3NpemUpOworCXNo bV90b2NfaW5zZXJ0KHRvYywgdG9jX2tleSsrLCBtcSk7CisJc2htX21xX3NldF9zZW5kZXIobXEs IE15UHJvYyk7CisKKwkvKiBBdHRhY2ggdGhlIHF1ZXVlcy4gKi8KKwl3c3RhdGUtPm1xX2hhbmRs ZSA9IHNobV9tcV9hdHRhY2gobXEsIHNlZywgd3N0YXRlLT5oYW5kbGUpOworCisJLyogUmV0dXJu IHJlc3VsdHMgdG8gY2FsbGVyLiAqLworCXdzdGF0ZS0+ZHNtX3NlZyA9IHNlZzsKKwl3c3RhdGUt PnBzdGF0ZSA9IHBzdDsKK30KKworLyoKKyAqIFJlZ2lzdGVyIGJhY2tncm91bmQgd29ya2Vycy4K KyAqLworc3RhdGljIGJvb2wKK3NldHVwX2JhY2tncm91bmRfd29ya2VyKFdvcmtlclN0YXRlICp3 c3RhdGUpCit7CisJTWVtb3J5Q29udGV4dAkJb2xkY29udGV4dDsKKwlib29sCQkJCWxhdW5jaGVk OworCisJZWxvZyhMT0csICJzZXR0aW5nIHVwIGFwcGx5IHdvcmtlciAjJXUiLCBud29ya2VycyAr IDEpOworCisJLyoKKwkgKiBUT0NIRUNLOiBXZSBuZWVkIHRoZSB3b3JrZXJfc3RhdGUgb2JqZWN0 IGFuZCB0aGUgYmFja2dyb3VuZCB3b3JrZXIgaGFuZGxlcyB0bworCSAqIHdoaWNoIGl0IHBvaW50 cyB0byBiZSBhbGxvY2F0ZWQgaW4gVG9wTWVtb3J5Q29udGV4dCByYXRoZXIgdGhhbgorCSAqIEFw cGx5TWVzc2FnZUNvbnRleHQ7IG90aGVyd2lzZSwgdGhleSdsbCBiZSBkZXN0cm95ZWQgYmVmb3Jl IHRoZSBvbl9kc21fZGV0YWNoCisJICogaG9va3MgcnVuLgorCSAqLworCW9sZGNvbnRleHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CisKKwlzZXR1cF9kc20od3N0 YXRlKTsKKworCWxhdW5jaGVkID0gbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE15TG9naWNhbFJl cFdvcmtlci0+ZGJpZCwKKwkJCQkJCQkJCQlNeVN1YnNjcmlwdGlvbi0+b2lkLAorCQkJCQkJCQkJ CU15U3Vic2NyaXB0aW9uLT5uYW1lLAorCQkJCQkJCQkJCU15TG9naWNhbFJlcFdvcmtlci0+dXNl cmlkLAorCQkJCQkJCQkJCUludmFsaWRPaWQsCisJCQkJCQkJCQkJZHNtX3NlZ21lbnRfaGFuZGxl KHdzdGF0ZS0+ZHNtX3NlZykpOworCisJLyogQWxsIGRvbmUuICovCisJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOworCisJaWYgKGxhdW5jaGVkKQorCXsKKwkJLyogV2FpdCBmb3Ig d29ya2VyIHRvIGJlY29tZSByZWFkeS4gKi8KKwkJd2FpdF9mb3Jfd29ya2VyKHdzdGF0ZSk7CisK KwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNvbnRleHQpOworCQlB cHBseVdvcmtlcnNMaXN0ID0gbGFwcGVuZChBcHBseVdvcmtlcnNMaXN0LCB3c3RhdGUpOworCQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkJbndvcmtlcnMgKz0gMTsKKwl9 CisKKwlyZXR1cm4gbGF1bmNoZWQ7Cit9CisKKy8qCisgKiBTZW5kIHRoZSBkYXRhIHRvIHdvcmtl ciB2aWEgc2hhcmVkLW1lbW9yeSBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQKK3NlbmRfZGF0YV90 b193b3JrZXIoV29ya2VyU3RhdGUgKndzdGF0ZSwgU2l6ZSBuYnl0ZXMsIGNvbnN0IHZvaWQgKmRh dGEpCit7CisJc2htX21xX3Jlc3VsdCByZXN1bHQ7CisKKwlyZXN1bHQgPSBzaG1fbXFfc2VuZCh3 c3RhdGUtPm1xX2hhbmRsZSwgbmJ5dGVzLCBkYXRhLCBmYWxzZSwgdHJ1ZSk7CisKKwlpZiAocmVz dWx0ICE9IFNITV9NUV9TVUNDRVNTKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coImNv dWxkIG5vdCBzZW5kIHR1cGxlIHRvIHNoYXJlZC1tZW1vcnkgcXVldWUiKSkpOworfQorCitzdGF0 aWMgdm9pZAord2FpdF9mb3Jfd29ya2VyKFdvcmtlclN0YXRlICp3c3RhdGUpCit7CisJYm9vbCBy ZXN1bHQgPSBmYWxzZTsKKwljaGFyIGFjdGlvbiA9ICdFJzsKKworCS8qIE5vdGlmeSB3b3JrZXIg dGhhdCB3ZSByZWNlaXZlZCBTVFJFQU0gU1RPUCAqLworCXNlbmRfZGF0YV90b193b3JrZXIod3N0 YXRlLCAxLCAmYWN0aW9uKTsKKworCWZvciAoOzspCisJeworCQlib29sIHJlYWR5OworCQlib29s IGZhaWxlZDsKKworCQkvKiBJZiB0aGUgd29ya2VyIGlzIHJlYWR5LCB3ZSBoYXZlIHN1Y2NlZWRl ZC4gKi8KKwkJU3BpbkxvY2tBY3F1aXJlKCZ3c3RhdGUtPnBzdGF0ZS0+bXV0ZXgpOworCQlyZWFk eSA9IHdzdGF0ZS0+cHN0YXRlLT5yZWFkeTsKKwkJZmFpbGVkID0gd3N0YXRlLT5wc3RhdGUtPmZh aWxlZDsKKwkJU3BpbkxvY2tSZWxlYXNlKCZ3c3RhdGUtPnBzdGF0ZS0+bXV0ZXgpOworCisJCWlm IChyZWFkeSkKKwkJeworCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyog SWYgYW55IHdvcmtlcnMgKG9yIHRoZSBwb3N0bWFzdGVyKSBoYXZlIGRpZWQsIHdlIGhhdmUgZmFp bGVkLiAqLworCQlpZiAoZmFpbGVkKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUo RVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2co IkJhY2tncm91bmQgd29ya2VyICV1IGZhaWxlZCB0byBhcHBseSB0cmFuc2FjdGlvbiAldSIsCisJ CQkJCQkJd3N0YXRlLT5wc3RhdGUtPm4sIHdzdGF0ZS0+eGlkKSkpOworCisJCS8qIFdhaXQgdG8g YmUgc2lnbmFsbGVkLiAqLworCQlXYWl0TGF0Y2goTXlMYXRjaCwgV0xfTEFUQ0hfU0VUIHwgV0xf RVhJVF9PTl9QTV9ERUFUSCwgMCwKKwkJCQkJCQlXQUlUX0VWRU5UX0xPR0lDQUxfQVBQTFlfV09S S0VSX1JFQURZKTsKKworCQkvKiBSZXNldCB0aGUgbGF0Y2ggc28gd2UgZG9uJ3Qgc3Bpbi4gKi8K KwkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKworCQkvKiBBbiBpbnRlcnJ1cHQgbWF5IGhhdmUgb2Nj dXJyZWQgd2hpbGUgd2Ugd2VyZSB3YWl0aW5nLiAqLworCQlDSEVDS19GT1JfSU5URVJSVVBUUygp OworCX0KKworCWlmICghcmVzdWx0KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyksCisJCQkJIGVycm1zZygib25lIG9yIG1vcmUg YmFja2dyb3VuZCB3b3JrZXJzIGZhaWxlZCB0byBzdGFydCIpKSk7Cit9CisKK3N0YXRpYyB2b2lk Cit3YWl0X2Zvcl93b3JrZXJfdG9fZmluaXNoKFdvcmtlclN0YXRlICp3c3RhdGUpCit7CisJY2hh ciBhY3Rpb24gPSAnRic7CisKKwkvKiBOb3RpZnkgd29ya2VyIHRoYXQgdGhlIHN0cmVhbWluZyB0 cmFuc2FjdGlvbiBoYXMgZmluaXNoZWQgKi8KKwlzZW5kX2RhdGFfdG9fd29ya2VyKHdzdGF0ZSwg MSwgJmFjdGlvbik7CisKKwllbG9nKExPRywgIndhaXRpbmcgZm9yIGFwcGx5IHdvcmtlciAjJXUg dG8gZmluaXNoIHByb2Nlc3NpbmcgeGlkICV1IiwKKwkJCQkJCQkJCQl3c3RhdGUtPnBzdGF0ZS0+ biwgd3N0YXRlLT54aWQpOworCisJZm9yICg7OykKKwl7CisJCWJvb2wgZmluaXNoZWQ7CisJCWJv b2wgZmFpbGVkOworCisJCS8qIElmIHRoZSB3b3JrZXIgaXMgZmluaXNoZWQsIHdlIGhhdmUgc3Vj Y2VlZGVkLiAqLworCQlTcGluTG9ja0FjcXVpcmUoJndzdGF0ZS0+cHN0YXRlLT5tdXRleCk7CisJ CWZpbmlzaGVkID0gd3N0YXRlLT5wc3RhdGUtPmZpbmlzaGVkOworCQlmYWlsZWQgPSB3c3RhdGUt PnBzdGF0ZS0+ZmFpbGVkOworCQlTcGluTG9ja1JlbGVhc2UoJndzdGF0ZS0+cHN0YXRlLT5tdXRl eCk7CisKKwkJaWYgKGZhaWxlZCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVS UkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJybXNnKCJC YWNrZ3JvdW5kIHdvcmtlciAldSBmYWlsZWQgdG8gYXBwbHkgdHJhbnNhY3Rpb24gJXUiLAorCQkJ CQkJCXdzdGF0ZS0+cHN0YXRlLT5uLCB3c3RhdGUtPnhpZCkpKTsKKworCQlpZiAoZmluaXNoZWQp CisJCXsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogVE9ETy4gV291bGQgaXQgYmUgYmV0 dGVyIHRvIHVzZSBDb25kaXRpb25WYXJpYWJsZSBpbnN0ZWFkIG9mCisJCSAqIFdhaXQvUmVzZXQg TGF0Y2ggaGVyZT8KKwkJICovCisKKwkJLyogV2FpdCB0byBiZSBzaWduYWxsZWQuICovCisJCVdh aXRMYXRjaChNeUxhdGNoLCBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRILCAwLAor CQkJCQkJCVdBSVRfRVZFTlRfTE9HSUNBTF9BUFBMWV9XT1JLRVJfUkVBRFkpOworCisJCS8qIFJl c2V0IHRoZSBsYXRjaCBzbyB3ZSBkb24ndCBzcGluLiAqLworCQlSZXNldExhdGNoKE15TGF0Y2gp OworCisJCS8qIEFuIGludGVycnVwdCBtYXkgaGF2ZSBvY2N1cnJlZCB3aGlsZSB3ZSB3ZXJlIHdh aXRpbmcuICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJfQorfQorCisvKgorICogQ2hl Y2sgaWYgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBiZWluZyBwcm9jZXNzZWQgaW4gYSBi Z3dvcmtlci4KKyAqLworc3RhdGljIGJvb2wKK3RyYW5zYWN0aW9uX2FwcGxpZWRfaW5fYmd3b3Jr ZXIoVHJhbnNhY3Rpb25JZCB4aWQpCit7CisJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQp IHx8IGlzTG9naWNhbEFwcGx5V29ya2VyIHx8CisJCUFwcGx5V29ya2Vyc0hhc2ggPT0gTlVMTCkK KwkJcmV0dXJuIGZhbHNlOworCisJc3RyZWFtX2FwcGx5X3dvcmtlciA9IGZpbmRfb3Jfc3RhcnRf d29ya2VyKHhpZCwgZmFsc2UpOworCisJcmV0dXJuIHN0cmVhbV9hcHBseV93b3JrZXIgIT0gTlVM TDsKK30KKworLyoKKyAqIENoZWNrIHRoZSBzdGF0dXMgb2Ygd29ya2VycyBhbmQgcmVwb3J0IGFu IGVycm9yIGlmIGFueSBiZ3dvcmtlciBleGl0CisgKiB1bmV4cGVjdGVkbHkuCisgKi8KK3N0YXRp YyB2b2lkCitjaGVja193b3JrZXJzX3N0YXR1cyh2b2lkKQoreworCUxpc3RDZWxsICpsYzsKKwor CWZvcmVhY2gobGMsIEFwcGx5V29ya2Vyc0xpc3QpCisJeworCQlXb3JrZXJTdGF0ZSAqd3N0YXRl ID0gKFdvcmtlclN0YXRlICopIGxmaXJzdChsYyk7CisKKwkJaWYgKHdzdGF0ZS0+cHN0YXRlLT5m YWlsZWQpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9O T1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJIGVycm1zZygiQmFja2dyb3VuZCB3b3Jr ZXIgJXUgZXhpdGVkIHVuZXhwZWN0ZWRseSIsCisJCQkJCQkJd3N0YXRlLT5wc3RhdGUtPm4pKSk7 CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVu dC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCmluZGV4IDg3YzE1 YjkuLjI0YTZmYWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRf ZXZlbnQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKQEAg LTM4OCw2ICszODgsOSBAQCBwZ3N0YXRfZ2V0X3dhaXRfaXBjKFdhaXRFdmVudElQQyB3KQogCQlj YXNlIFdBSVRfRVZFTlRfSEFTSF9HUk9XX0JVQ0tFVFNfUkVJTlNFUlQ6CiAJCQlldmVudF9uYW1l ID0gIkhhc2hHcm93QnVja2V0c1JlaW5zZXJ0IjsKIAkJCWJyZWFrOworCQljYXNlIFdBSVRfRVZF TlRfTE9HSUNBTF9BUFBMWV9XT1JLRVJfUkVBRFk6CisJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxB cHBseVdvcmtlclJlYWR5IjsKKwkJCWJyZWFrOwogCQljYXNlIFdBSVRfRVZFTlRfTE9HSUNBTF9T WU5DX0RBVEE6CiAJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxTeW5jRGF0YSI7CiAJCQlicmVhazsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggYTc3MWFiOC4uMDExNjg2 NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTI0Myw4ICsyNDMs MTAgQEAgZXh0ZXJuIFRyYW5zYWN0aW9uSWQgbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9zdGFydChT dHJpbmdJbmZvIGluLAogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fc3RvcChT dHJpbmdJbmZvIG91dCk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3N0cmVhbV9jb21t aXQoU3RyaW5nSW5mbyBvdXQsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCQkgICBY TG9nUmVjUHRyIGNvbW1pdF9sc24pOwotZXh0ZXJuIFRyYW5zYWN0aW9uSWQgbG9naWNhbHJlcF9y ZWFkX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBvdXQsCitleHRlcm4gVHJhbnNhY3Rpb25JZCBs b2dpY2FscmVwX3JlYWRfc3RyZWFtX2NvbW1pdF9vbGQoU3RyaW5nSW5mbyBvdXQsCiAJCQkJCQkJ CQkJCQkgICBMb2dpY2FsUmVwQ29tbWl0RGF0YSAqY29tbWl0X2RhdGEpOworZXh0ZXJuIHZvaWQg bG9naWNhbHJlcF9yZWFkX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBvdXQsCisJCQkJCQkJCQkJ ICBMb2dpY2FsUmVwQ29tbWl0RGF0YSAqY29tbWl0X2RhdGEpOwogZXh0ZXJuIHZvaWQgbG9naWNh bHJlcF93cml0ZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlk LAogCQkJCQkJCQkJCSAgVHJhbnNhY3Rpb25JZCBzdWJ4aWQpOwogZXh0ZXJuIHZvaWQgbG9naWNh bHJlcF9yZWFkX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIGluLCBUcmFuc2FjdGlvbklkICp4aWQs CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmggYi9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgKaW5kZXggY2QxYjZlOC4uM2Ji MzUxMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5o CisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaApAQCAtMTMsNiAr MTMsNyBAQAogI2RlZmluZSBMT0dJQ0FMV09SS0VSX0gKIAogZXh0ZXJuIHZvaWQgQXBwbHlXb3Jr ZXJNYWluKERhdHVtIG1haW5fYXJnKTsKK2V4dGVybiB2b2lkIExvZ2ljYWxBcHBseUJnd01haW4o RGF0dW0gbWFpbl9hcmcpOwogCiBleHRlcm4gYm9vbCBJc0xvZ2ljYWxXb3JrZXIodm9pZCk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vb3JpZ2luLmgKaW5kZXggMTRkNWM0OS4uMWVkNTFiYyAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vb3JpZ2luLmgKQEAgLTUzLDcgKzUzLDcgQEAgZXh0ZXJuIFhMb2dSZWNQdHIgcmVw bG9yaWdpbl9nZXRfcHJvZ3Jlc3MoUmVwT3JpZ2luSWQgbm9kZSwgYm9vbCBmbHVzaCk7CiAKIGV4 dGVybiB2b2lkIHJlcGxvcmlnaW5fc2Vzc2lvbl9hZHZhbmNlKFhMb2dSZWNQdHIgcmVtb3RlX2Nv bW1pdCwKIAkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbG9jYWxfY29tbWl0KTsKLWV4dGVybiB2b2lk IHJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlKTsKK2V4dGVybiB2b2lk IHJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlLCBib29sIGFjcXVpcmUp OwogZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3Jlc2V0KHZvaWQpOwogZXh0ZXJuIFhM b2dSZWNQdHIgcmVwbG9yaWdpbl9zZXNzaW9uX2dldF9wcm9ncmVzcyhib29sIGZsdXNoKTsKIApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggYi9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAppbmRleCA0NDg1ZDRlLi40 ZDExYTEzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJu YWwuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaApAQCAt NjAsNiArNjAsOCBAQCB0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVwV29ya2VyCiAJICovCiAJRmls ZVNldCAgICAqc3RyZWFtX2ZpbGVzZXQ7CiAKKwlib29sCQlzdWJ3b3JrZXI7CisKIAkvKiBTdGF0 cy4gKi8KIAlYTG9nUmVjUHRyCWxhc3RfbHNuOwogCVRpbWVzdGFtcFR6IGxhc3Rfc2VuZF90aW1l OwpAQCAtODQsOCArODYsOSBAQCBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2go aW50IHNsb3QpOwogZXh0ZXJuIExvZ2ljYWxSZXBXb3JrZXIgKmxvZ2ljYWxyZXBfd29ya2VyX2Zp bmQoT2lkIHN1YmlkLCBPaWQgcmVsaWQsCiAJCQkJCQkJCQkJCQlib29sIG9ubHlfcnVubmluZyk7 CiBleHRlcm4gTGlzdCAqbG9naWNhbHJlcF93b3JrZXJzX2ZpbmQoT2lkIHN1YmlkLCBib29sIG9u bHlfcnVubmluZyk7Ci1leHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRi aWQsIE9pZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwKLQkJCQkJCQkJCSBPaWQgdXNlcmlk LCBPaWQgcmVsaWQpOworZXh0ZXJuIGJvb2wgbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE9pZCBk YmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCisJCQkJCQkJCQkgT2lkIHVzZXJp ZCwgT2lkIHJlbGlkLAorCQkJCQkJCQkJIGRzbV9oYW5kbGUgc3Vid29ya2VyX2RzbSk7CiBleHRl cm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJlbGlkKTsKIGV4 dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cChPaWQgc3ViaWQsIE9pZCByZWxpZCk7 CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl93YWtldXBfcHRyKExvZ2ljYWxSZXBXb3Jr ZXIgKndvcmtlcik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50Lmgg Yi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKaW5kZXggYjU3OGUyZS4uZDUwODFkOSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCisrKyBiL3NyYy9pbmNs dWRlL3V0aWxzL3dhaXRfZXZlbnQuaApAQCAtMTA1LDYgKzEwNSw3IEBAIHR5cGVkZWYgZW51bQog CVdBSVRfRVZFTlRfSEFTSF9HUk9XX0JVQ0tFVFNfQUxMT0NBVEUsCiAJV0FJVF9FVkVOVF9IQVNI X0dST1dfQlVDS0VUU19FTEVDVCwKIAlXQUlUX0VWRU5UX0hBU0hfR1JPV19CVUNLRVRTX1JFSU5T RVJULAorCVdBSVRfRVZFTlRfTE9HSUNBTF9BUFBMWV9XT1JLRVJfUkVBRFksCiAJV0FJVF9FVkVO VF9MT0dJQ0FMX1NZTkNfREFUQSwKIAlXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19TVEFURV9DSEFO R0UsCiAJV0FJVF9FVkVOVF9NUV9JTlRFUk5BTCwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNj cmlwdGlvbi90LzAyOV9vbl9lcnJvci5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyOV9v bl9lcnJvci5wbAppbmRleCBlOGI5MDRiLi44YjI0MjExIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9z dWJzY3JpcHRpb24vdC8wMjlfb25fZXJyb3IucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9u L3QvMDI5X29uX2Vycm9yLnBsCkBAIC0xNTksMTggKzE1OSwyMiBAQCBDT01NSVQgUFJFUEFSRUQg J2d0eCc7CiB0ZXN0X3NraXBfbHNuKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwK IAkiKDMsIE5VTEwpIiwgIjMiLCAidGVzdCBza2lwcGluZyBwcmVwYXJlIGFuZCBjb21taXQgcHJl cGFyZWQgIik7CiAKKyMgVE9ETywgaWYgYXBwbHkgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIGluIGJh Y2tncm91bmQgd29ya2VyLCB3ZSBjYW5ub3QgZ2V0IHRoZQorIyBmaW5hbCBMU04gYmVmb3JlIHJl Y2VpdmluZyBTVFJFQU0gQ09NTUlULCBzbyB3ZSBjYW5ub3QgZ2V0IHRoZSBjb3JyZWN0IExTTiB0 bworIyBTS0lQIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uIFRlbXBvcmFyaWx5IGNvbW1lbnQg b3V0IHRoaXMgdGVzdGNhc2UKKwogIyBUZXN0IGZvciBTVFJFQU0gQ09NTUlULiBJbnNlcnQgZW5v dWdoIHJvd3MgdG8gdGJsIHRvIGV4Y2VlZCB0aGUgNjRrQgogIyBsaW1pdCwgYWxzbyByYWlzaW5n IGFuIGVycm9yIG9uIHRoZSBzdWJzY3JpYmVyIGR1cmluZyBhcHBseWluZyBzcG9vbGVkCiAjIGNo YW5nZXMgZm9yIHRoZSBzYW1lIHJlYXNvbi4gVGhlbiBza2lwIHRoZSB0cmFuc2FjdGlvbi4KLSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsCi0JcXFbCi1CRUdJTjsKLUlO U0VSVCBJTlRPIHRibCBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsIDEwMDAwKSBzKGkpOwotQ09NTUlUOwotXSk7Ci10ZXN0X3NraXBfbHNuKCRub2RlX3B1Ymxp c2hlciwgJG5vZGVfc3Vic2NyaWJlciwgIig0LCBtZDUoNDo6dGV4dCkpIiwKLQkiNCIsICJ0ZXN0 IHNraXBwaW5nIHN0cmVhbS1jb21taXQiKTsKKyMgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo CisjIAkncG9zdGdyZXMnLAorIyAJcXFbCisjIEJFR0lOOworIyBJTlNFUlQgSU5UTyB0YmwgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkgcyhpKTsK KyMgQ09NTUlUOworIyBdKTsKKyMgdGVzdF9za2lwX2xzbigkbm9kZV9wdWJsaXNoZXIsICRub2Rl X3N1YnNjcmliZXIsICIoNCwgbWQ1KDQ6OnRleHQpKSIsCisjIAkiNCIsICJ0ZXN0IHNraXBwaW5n IHN0cmVhbS1jb21taXQiKTsKIAogJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAogCSJTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0cyIp OwotLSAKMi43LjIud2luZG93cy4xCgo= --_002_OS0PR01MB57166BC3CAA873364A2CC07A94EF9OS0PR01MB5716jpnp_--