Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rB8TS-009a07-AC for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Dec 2023 07:07:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rB8TO-00FSFb-Hs for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Dec 2023 07:07:02 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rB8TO-00FSFM-01 for pgsql-hackers@lists.postgresql.org; Thu, 07 Dec 2023 07:07:02 +0000 Received: from esa.hc2186-20.iphmx.com ([68.232.157.143]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rB8TK-00AWA1-4n for pgsql-hackers@lists.postgresql.org; Thu, 07 Dec 2023 07:07:01 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=ebay.com; i=@ebay.com; q=dns/txt; s=ebaycorp; t=1701932818; x=1733468818; h=from:to:cc:subject:date:message-id:mime-version; bh=8NqUk/+HBrIuXebYDVgSQNTiap2U3NJMLuF5DEFmEHs=; b=ZuCpXwDcSfGl6zK6kotBa0TsxBKdZyaBlVg84GZWVs+qGc73sIlmqDrJ HwJDvtiduY8kOS/9fk8rAyPIDw4F+IWQiSzEgG0kUFSgJ551lzqaz0RIG uau81gsrHNmnPNKt2Up6Qyj1tZVSuRUaK4ly/QG9g4U+7CJHK7ssy57CV 0=; X-IronPort-RemoteIP: 216.113.162.88 X-IronPort-MID: 235424291 X-IronPort-Reputation: 3.7 X-IronPort-Listener: OutboundMail X-IronPort-SenderGroup: Vontu_to_CES_Outbound X-IronPort-MailFlowPolicy: $Vontu_to_CES_Outbound X-EBay-Corp: Yes X-IronPort-AV: E=Sophos;i="6.04,256,1695711600"; d="scan'208,217";a="235424291" Received: from lvs-dlpoutbound.corp.ebay.com (HELO lvs-ipatom-003.corp.ebay.com) ([216.113.162.88]) by esa1.hc2186-20.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Dec 2023 23:06:54 -0800 X-ATOM: Processed_By_ATOM X-IronPort-Trust: True Received: from mail-dm6nam10lp2101.outbound.protection.outlook.com (HELO NAM10-DM6-obe.outbound.protection.outlook.com) ([104.47.58.101]) by atom.corp.ebay.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Dec 2023 23:06:53 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CtEOlK2QupT8N4jqmjle/GVFjmMQPjnwvRLXZfroY1++7e9NrMSv25iqb+K0eMXAVOGkexItsJT93oM4XwzJhiAnpWn0ljr1p+0nCxkozqvkwqtu2Z6tfK0ZKE4evyxZ8n1bryYcVlSVTiHbiUrJdKXl+ummb64Vu3V6Nzr1nac6ALvFG0PiEaXwPg4BZYLYFLumL6YF/9Y4VRE6IcrsycRiJuhOv+Njgj5oGcR2KEocT7MNiMRHnxmxaFNqo+Wh7zJ0MqFDcFkfk/CSloQWsRhFp6YhIzko8bZ5ri4Tp2RZ6KOJVEAuXHhT4VG8ynEXFj9N588p0C4lySMWQvqX8Q== 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=uign1Z8MTebB+4DK5KCSGn5Dr0tJaXhzhyi5Z/LyzH0=; b=QCp+IWP6yd5AQuy+XUVCfqhd1ArHR8DNPCXycV0casz8hEjM5AvEX+A4N2MPL77JlQaXYqmQD8oyvNw8E9Wip+vzCODh0OVK/mQ6I5lgZvr7UhnHMdbphlmZLCjnZtcg0QRhRd4jJpKQvr1co9faG81dZwyEExRQdNEpuLncCJ5VKfKiM/4AWqBETRAaEth1vT6kd6FYHqC6V2fUIDbc4aHLgVmf4KBMWo7QRG98VM3hw/3la3YgD/LdmMU94JGdKp8iEmoWBpFDkoOOoczGwE2oG0unSc6bGCZ4fiheVbzGn7YBSbekTTLnplyLSaJf/kxSaERomfeTEFnZHLjXug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ebay.com; dmarc=pass action=none header.from=ebay.com; dkim=pass header.d=ebay.com; arc=none Received: from IA1PR07MB9829.namprd07.prod.outlook.com (2603:10b6:208:457::10) by DS7PR07MB7687.namprd07.prod.outlook.com (2603:10b6:5:2d1::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.27; Thu, 7 Dec 2023 07:06:51 +0000 Received: from IA1PR07MB9829.namprd07.prod.outlook.com ([fe80::33a8:71fc:16ab:95cb]) by IA1PR07MB9829.namprd07.prod.outlook.com ([fe80::33a8:71fc:16ab:95cb%6]) with mapi id 15.20.7068.025; Thu, 7 Dec 2023 07:06:51 +0000 From: "Li, Yong" To: PostgreSQL Hackers CC: "Shyrabokau, Anton" , "Debnath, Shawn" Subject: Proposal to add page headers to SLRU pages Thread-Topic: Proposal to add page headers to SLRU pages Thread-Index: AQHaKNss5mPje/mnaE2h8Du+MbQszg== Date: Thu, 7 Dec 2023 07:06:50 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US 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=ebay.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: IA1PR07MB9829:EE_|DS7PR07MB7687:EE_ x-ms-office365-filtering-correlation-id: 7da182ce-6719-4dd5-bc9c-08dbf6f31601 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ZZhnzrRq+GOVl0fTYc394LTkuUSWVt7nZSwJI0+FPq1aC/alIH+gBljsI5NSm1Y4+9iHvy6XAHBNalzrTQEKmlK8O67iLG92Q4BvIB5Nq1zsuq4hOLLGy5FXJR15Nz/Whi1+jhcjLvFcYvwhtOsD/QIotZ7vNqw09IsNBr4SqNlAZGibICgcRUUOvJz0jbX6V5r6BglcUaacDSP4wjopk25iP37hMK1LEHSqDL2aLte6lRYraNZF67WxgWDSLeciFYXY8ERXhrLgm9Oxpf40QU3gRZ6wel7PJKj8MpcB/5RrEM0zaaxIEMQe9iw0nrDk+d+HEZRSjaNvo2emZta0wL9XKMzpeCUH/+Rz+Ce5jy7gTxdkCOx5VV0WNC69bUFRegyY4UC8dRQc9O0PMA/aZCxNMobYOCYBZSDx2Us84Y4g7WntSQ98cjqZdaqIAe3rXDHtVN+eNEZ9BMYHFUXWxUIyqrYBuBAb9ybsLmwcUkFgzaPLUfhv1NwEeBWKT+NNljhMbf/SMiCF8WKzV8eQN8qHbHeO7V29FVDFmUxp+DSrEi33FWcEbPJLHFSRIJcNDstzFLy+FaVxc94H5iKsILn4636uJ7a81Rj1ufQ8zCiYxfgA6B/aFt9uG5Eb+1g91YSxB78u0GvXgX45UPPw+Q== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:IA1PR07MB9829.namprd07.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(136003)(366004)(346002)(376002)(39860400002)(396003)(230922051799003)(186009)(1800799012)(451199024)(64100799003)(166002)(7696005)(6506007)(107886003)(26005)(122000001)(38100700002)(55016003)(41300700001)(82960400001)(71200400001)(9686003)(83380400001)(76116006)(316002)(6916009)(66946007)(66556008)(66476007)(54906003)(64756008)(66446008)(10290500003)(478600001)(966005)(99936003)(86362001)(5660300002)(2906002)(4326008)(3613699003)(52536014)(8936002)(33656002)(8676002)(38070700009);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?x0ICwc9HLcc5orCQcvREFx5D0KSHR7tZ5fv3K6D2HEZKEpCBesApl1XGVx2B?= =?us-ascii?Q?W4o0EwaPokYRLS9Aebs0ArwfD2G9ILZhsY7bIj6EjhPGSYqHWAm0AfgHbodo?= =?us-ascii?Q?WtSLLq7gaLxctqPoxyUVCEX2iShPHPger43DLvgUSfzdbyFXYgneW1YD3Fi8?= =?us-ascii?Q?Ofili7uk83Rt40mwW+Iv/IgXZLcZJtEOTcQfWFJmJm5okPRNccDnYD4fDJAx?= =?us-ascii?Q?Sq34ABdDC4hjfNbbVVTkQyFsUflFDHA+FcHKTWiHUl4RlCfW5DGkSfTo5u7A?= =?us-ascii?Q?DbQmlOw865z+r8m8jDIpwZ0LdyYLrteA+LL4sAPlJ7bgQAm87lkYhlGsFGD4?= =?us-ascii?Q?WhxIR1N6e1BbmGrGDxZEGdnHwxtoi1UUlBupx857m+HwWg9lPPBuBXCZXrKc?= =?us-ascii?Q?5J+loOcDhwxKfbi9hUCDkIvFKETdlNSHYe6lbB0vfKJZ4LAJtyISEfuYNoxG?= =?us-ascii?Q?BQ/ZEiqiabbMnsr+X7Z/n6Jgddl/MI135UplcikaqOOJTmIbd6oa63pt4u1a?= =?us-ascii?Q?Z8bC3m+RUoKCO+RsIiWOe1rjgDL+xzRbgdQ5UQcTsrLD6xpVkoejTjlpHiM8?= =?us-ascii?Q?pjD3Bv6WR5vfwKf4If2IVsRSiOg+eJjRzpED8eSADMdU1cg/W4LypENGlJFx?= =?us-ascii?Q?CdGO386u6bYfYkyomzfCZ3IGtQGlJ7VckMtbYwkN3MD9z3UHrVByfhNJKdSo?= =?us-ascii?Q?Eh9FuQXKUgQ184y0mBxMDt608ZIAQNaYXcsGS8XaZ+T5goMqEfdc6K5G7B+1?= =?us-ascii?Q?rjnPUZm3pjJC4weXC3qrRBbyRFxAHac/sFlYLGPu2ZWOtvbVOS+n66NzwAoL?= =?us-ascii?Q?lblt9WPBI01uHY3Yiw/FbKx1HLTpjCRVLx6kJP7n1RyZ2ye6ZepkhHuo88U6?= =?us-ascii?Q?rVhNZRPzOnDYHl/2661JaaVrjIq5+Qu7Js5DSK4QlvURHeja/CTbfYuN6Wf3?= =?us-ascii?Q?cZrWLOr/V3hjG83ZqDnzxlIU5n0P4V0GjpxQRa47teTpK5/Lfr1lH2l7kB1X?= =?us-ascii?Q?LvABpVvCVs9gOzTwi5iHjFGH4Aa2VbraZxTgUs3zfk72RcwHwI4S3z/z+J2v?= =?us-ascii?Q?NBCyT+kXV9SaZswszKVjj7+tTCu0WZF0BIa2uHejrsS0irAcD/vyqpDidhD2?= =?us-ascii?Q?AqVXpcHc9YT92bif2BJE6+8u2VNpNb1aArM4jRryzK/y6U68Y8NpUbCktQzN?= =?us-ascii?Q?aWDw7qIWoPtu19JxEKh9jUt1aATuKydHRVhapzscCUNBKiElsCiNxONGy4Tj?= =?us-ascii?Q?4xiyNg2yxqMxyBAXvQRwmZp2DgrO1TbHzI3/qeqaKJ3PZBDGBjswJPNJppiu?= =?us-ascii?Q?+zXhZjLfKNu7fMwdk3EtzGrTEs7pIGM6zDv/zoa9mVBq1mtAfWENli8ILrkg?= =?us-ascii?Q?Lp2DEgrIpniG7i+DDExSzLGtlPGX5xkofzwFVnEuD0x+YDAGayWjxHPXI6OL?= =?us-ascii?Q?rDVqb5/Uecl9uSHT5IHls6yDZTmMxdaOnhkIMQCnWwxDtJo+qoYsjD4Wrobh?= =?us-ascii?Q?Xr3zLPWMchdUNX2ZyGdZd4EYNbboJFc0Q/w2XTbGkkcL0efbEidX50FmVuQR?= =?us-ascii?Q?7X1O2EhcZD8Qofu0+EA3CxSyekO5goh0ErK3Cwq4?= Content-Type: multipart/mixed; boundary="_004_IA1PR07MB982925731C4C0B38DC8F2F7FB98BAIA1PR07MB9829namp_" MIME-Version: 1.0 X-OriginatorOrg: ebay.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: IA1PR07MB9829.namprd07.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7da182ce-6719-4dd5-bc9c-08dbf6f31601 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Dec 2023 07:06:50.9242 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46326bff-9928-41a0-baca-17c16c94ea99 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: mZRydksa6AF+FQUpCitNTX9S5PE2C6rxjAFf83hBke+X+HKUQYTcV8MV3VHAFtcn X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR07MB7687 X-CFilter: Scanned lvs2 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_IA1PR07MB982925731C4C0B38DC8F2F7FB98BAIA1PR07MB9829namp_ Content-Type: multipart/alternative; boundary="_000_IA1PR07MB982925731C4C0B38DC8F2F7FB98BAIA1PR07MB9829namp_" --_000_IA1PR07MB982925731C4C0B38DC8F2F7FB98BAIA1PR07MB9829namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi all, PostgreSQL currently maintains several data structures in the SLRU cache. = The current SLRU pages do not have any header, so it is impossible to check= sum a page and verify its integrity. It is very difficult to debug issues = caused by corrupted SLRU pages. Also, without a page header, page LSN is t= racked in an ad-hoc fashion using LSN groups, which requires additional dat= a structure in the shared memory. At eBay, we are building on the patch sh= ared by Rishu Bagga in [1], which adds the standard PageHeaderData to each = SLRU page. We believe that adding the standard page header to each SLRU pa= ge is the correct approach for the long run. It adds a checksum to each SL= RU page, tracks page LSN as if it is a standard page and eases future page = enhancements. The enclosed patch changes the address calculation logic for all 7 SLRUs in= the following 6 files: src/backend/access/transam/clog.c src/backend/access/transam/commit_ts.c src/backend/access/transam/multixact.c src/backend/access/transam/subtrans.c src/backend/commands/async.c src/backend/storage/lmgr/predicate.c The patch enables page checksum with changes to the following 2 files: src/backend/access/transam/slru.c src/bin/pg_checksums/pg_checksums.c The patch removes the group LSNs defined for each SLRU cache. See changes t= o: src/include/access/slru.h The patch adds a few helper macros in the following files: src/backend/storage/page/bufpage.c src/include/storage/bufpage.h The patch updates some test cases: src/bin/pg_resetwal/t/001_basic.pl src/test/modules/test_slru/test_slru.c I am still working on patching the pg_upgrade. Just love to hear your thou= ghts on the idea and the current patch. Discussed with: Anton Shyrabokau and Shawn Debnath [1] https://www.postgresql.org/message-id/flat/EFAAC0BE-27E9-4186-B925-79B7= C696D5AC%40amazon.com Regards, Yong --_000_IA1PR07MB982925731C4C0B38DC8F2F7FB98BAIA1PR07MB9829namp_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hi al= l,

 = ;

Postg= reSQL currently maintains several data structures in the SLRU cache.  = The current SLRU pages do not have any header, so it is impossible to check= sum a page and verify its integrity.  It is very difficult to debug issues caused by corrupted SLRU pages.  Al= so, without a page header, page LSN is tracked in an ad-hoc fashion using L= SN groups, which requires additional data structure in the shared memory.&n= bsp; At eBay, we are building on the patch shared by Rishu Bagga = in [1], which adds th= e standard PageHeaderData to each SLRU page.  We believe that adding t= he standard page header to each SLRU page is the correct approach for the long run.  It adds a checksum to each= SLRU page, tracks page LSN as if it is a standard page and eases future pa= ge enhancements.

 = ;

The e= nclosed patch changes the address calculation logic for all 7 SLRUs in the = following 6 files:

src/b= ackend/access/transam/clog.c

src/b= ackend/access/transam/commit_ts.c

src/b= ackend/access/transam/multixact.c

src/b= ackend/access/transam/subtrans.c

src/b= ackend/commands/async.c

src/b= ackend/storage/lmgr/predicate.c

 = ;

The p= atch enables page checksum with changes to the following 2 files:

src/b= ackend/access/transam/slru.c

src/b= in/pg_checksums/pg_checksums.c

 = ;

The p= atch removes the group LSNs defined for each SLRU cache. See changes to:

src/i= nclude/access/slru.h

 = ;

The p= atch adds a few helper macros in the following files:

src/b= ackend/storage/page/bufpage.c

src/i= nclude/storage/bufpage.h

 = ;

The p= atch updates some test cases:

src/b= in/pg_resetwal/t/001_basic.pl

src/t= est/modules/test_slru/test_slru.c

=  

I am still working on patching the pg_upgrade.  Just love to= hear your thoughts on the idea and the current patch.

 = ;

 = ;

Discuss= ed with: Anton Shyrabokau and Shawn Debnath

&n= bsp;

[1] https://www.postgresql= .org/message-id/flat/EFAAC0BE-27E9-4186-B925-79B7C696D5AC%40amazon.com

 

 

Regards,

Yong

 

 

--_000_IA1PR07MB982925731C4C0B38DC8F2F7FB98BAIA1PR07MB9829namp_-- --_004_IA1PR07MB982925731C4C0B38DC8F2F7FB98BAIA1PR07MB9829namp_ Content-Type: application/octet-stream; name="slru_add_page_header.patch" Content-Description: slru_add_page_header.patch Content-Disposition: attachment; filename="slru_add_page_header.patch"; size=44418; creation-date="Thu, 07 Dec 2023 07:04:34 GMT"; modification-date="Thu, 07 Dec 2023 07:04:34 GMT" Content-Transfer-Encoding: base64 IHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyAgICAgIHwgIDUyICsrKysrKysrLS0t LS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMgfCAgMjYgKysrKyst LS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIHwgIDU5ICsrKysrKysr KystLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMgICAgICB8IDExMyAr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3N1YnRyYW5zLmMgIHwgIDEyICsrLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMg ICAgICAgICAgIHwgIDI3ICsrKystLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGlj YXRlLmMgICB8ICAxNiArKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYyAg ICAgfCAgMjUgKysrKysrKysKIHNyYy9iaW4vcGdfY2hlY2tzdW1zL3BnX2NoZWNrc3Vtcy5jICAg IHwgICA5ICsrKwogc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwMV9iYXNpYy5wbCAgICAgfCAgIDYg Ky0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmggICAgICAgICAgICAgIHwgIDE1ICstLS0tCiBz cmMvaW5jbHVkZS9zdG9yYWdlL2J1ZnBhZ2UuaCAgICAgICAgICB8ICAgNyArKwogc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1LmMgfCAgMTMgKystLQogMTMgZmlsZXMgY2hhbmdl ZCwgMTk3IGluc2VydGlvbnMoKyksIDE4MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9jbG9nLmMKaW5kZXggY2M2MGVhYjFlMi4uNjM5YmI5MGExYyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL2Nsb2cuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgInBnX3RyYWNlLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAic3RvcmFn ZS9idWZwYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9zeW5jLmgiCiAKQEAgLTU5LDcgKzYwLDcgQEAKIC8qIFdlIG5lZWQgdHdvIGJpdHMgcGVyIHhh Y3QsIHNvIGZvdXIgeGFjdHMgZml0IGluIGEgYnl0ZSAqLwogI2RlZmluZSBDTE9HX0JJVFNfUEVS X1hBQ1QJMgogI2RlZmluZSBDTE9HX1hBQ1RTX1BFUl9CWVRFIDQKLSNkZWZpbmUgQ0xPR19YQUNU U19QRVJfUEFHRSAoQkxDS1NaICogQ0xPR19YQUNUU19QRVJfQllURSkKKyNkZWZpbmUgQ0xPR19Y QUNUU19QRVJfUEFHRSAoQ2FwYWNpdHlPZlBhZ2VDb250ZW50cyAqIENMT0dfWEFDVFNfUEVSX0JZ VEUpCiAjZGVmaW5lIENMT0dfWEFDVF9CSVRNQVNLCSgoMSA8PCBDTE9HX0JJVFNfUEVSX1hBQ1Qp IC0gMSkKIAogCkBAIC03NywxMyArNzgsNiBAQCBUcmFuc2FjdGlvbklkVG9QYWdlKFRyYW5zYWN0 aW9uSWQgeGlkKQogI2RlZmluZSBUcmFuc2FjdGlvbklkVG9CeXRlKHhpZCkJKFRyYW5zYWN0aW9u SWRUb1BnSW5kZXgoeGlkKSAvIENMT0dfWEFDVFNfUEVSX0JZVEUpCiAjZGVmaW5lIFRyYW5zYWN0 aW9uSWRUb0JJbmRleCh4aWQpCSgoeGlkKSAlIChUcmFuc2FjdGlvbklkKSBDTE9HX1hBQ1RTX1BF Ul9CWVRFKQogCi0vKiBXZSBzdG9yZSB0aGUgbGF0ZXN0IGFzeW5jIExTTiBmb3IgZWFjaCBncm91 cCBvZiB0cmFuc2FjdGlvbnMgKi8KLSNkZWZpbmUgQ0xPR19YQUNUU19QRVJfTFNOX0dST1VQCTMy CS8qIGtlZXAgdGhpcyBhIHBvd2VyIG9mIDIgKi8KLSNkZWZpbmUgQ0xPR19MU05TX1BFUl9QQUdF CShDTE9HX1hBQ1RTX1BFUl9QQUdFIC8gQ0xPR19YQUNUU19QRVJfTFNOX0dST1VQKQotCi0jZGVm aW5lIEdldExTTkluZGV4KHNsb3RubywgeGlkKQkoKHNsb3RubykgKiBDTE9HX0xTTlNfUEVSX1BB R0UgKyBcCi0JKCh4aWQpICUgKFRyYW5zYWN0aW9uSWQpIENMT0dfWEFDVFNfUEVSX1BBR0UpIC8g Q0xPR19YQUNUU19QRVJfTFNOX0dST1VQKQotCiAvKgogICogVGhlIG51bWJlciBvZiBzdWJ0cmFu c2FjdGlvbnMgYmVsb3cgd2hpY2ggd2UgY29uc2lkZXIgdG8gYXBwbHkgY2xvZyBncm91cAogICog dXBkYXRlIG9wdGltaXphdGlvbi4gIFRlc3RpbmcgcmV2ZWFscyB0aGF0IHRoZSBudW1iZXIgaGln aGVyIHRoYW4gdGhpcyBjYW4KQEAgLTEwMSw3ICs5NSw3IEBAIHN0YXRpYyBTbHJ1Q3RsRGF0YSBY YWN0Q3RsRGF0YTsKIAogc3RhdGljIGludAlaZXJvQ0xPR1BhZ2UoaW50NjQgcGFnZW5vLCBib29s IHdyaXRlWGxvZyk7CiBzdGF0aWMgYm9vbCBDTE9HUGFnZVByZWNlZGVzKGludDY0IHBhZ2UxLCBp bnQ2NCBwYWdlMik7Ci1zdGF0aWMgdm9pZCBXcml0ZVplcm9QYWdlWGxvZ1JlYyhpbnQ2NCBwYWdl bm8pOworc3RhdGljIFhMb2dSZWNQdHIgV3JpdGVaZXJvUGFnZVhsb2dSZWMoaW50NjQgcGFnZW5v KTsKIHN0YXRpYyB2b2lkIFdyaXRlVHJ1bmNhdGVYbG9nUmVjKGludDY0IHBhZ2VubywgVHJhbnNh Y3Rpb25JZCBvbGRlc3RYYWN0LAogCQkJCQkJCQkgT2lkIG9sZGVzdFhhY3REYik7CiBzdGF0aWMg dm9pZCBUcmFuc2FjdGlvbklkU2V0UGFnZVN0YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5z dWJ4aWRzLApAQCAtNTgzLDggKzU3Nyw5IEBAIFRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoVHJh bnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNuLCBpCiAJY2hh cgkgICAqYnl0ZXB0cjsKIAljaGFyCQlieXRldmFsOwogCWNoYXIJCWN1cnZhbDsKKwlQYWdlICAg ICAgICBwYWdlID0gWGFjdEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOwogCi0JYnl0 ZXB0ciA9IFhhY3RDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGJ5dGVubzsKKwli eXRlcHRyID0gUGFnZUdldENvbnRlbnRzKHBhZ2UpICsgYnl0ZW5vOwogCWN1cnZhbCA9ICgqYnl0 ZXB0ciA+PiBic2hpZnQpICYgQ0xPR19YQUNUX0JJVE1BU0s7CiAKIAkvKgpAQCAtNjEzLDcgKzYw OCw3IEBAIFRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0 YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNuLCBpCiAJKmJ5dGVwdHIgPSBieXRldmFsOwogCiAJ LyoKLQkgKiBVcGRhdGUgdGhlIGdyb3VwIExTTiBpZiB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGlv biBMU04gaXMgaGlnaGVyLgorCSAqIFVwZGF0ZSB0aGUgcGFnZSBMU04gaWYgdGhlIHRyYW5zYWN0 aW9uIGNvbXBsZXRpb24gTFNOIGlzIGhpZ2hlci4KIAkgKgogCSAqIE5vdGU6IGxzbiB3aWxsIGJl IGludmFsaWQgd2hlbiBzdXBwbGllZCBkdXJpbmcgSW5SZWNvdmVyeSBwcm9jZXNzaW5nLAogCSAq IHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbCB0byBhdm9pZCBMU04gdXBk YXRlcyBkdXJpbmcKQEAgLTYyMiwxMCArNjE3LDggQEAgVHJhbnNhY3Rpb25JZFNldFN0YXR1c0Jp dChUcmFuc2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24sIGkK IAkgKi8KIAlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQobHNuKSkKIAl7Ci0JCWludAkJCWxzbmlu ZGV4ID0gR2V0TFNOSW5kZXgoc2xvdG5vLCB4aWQpOwotCi0JCWlmIChYYWN0Q3RsLT5zaGFyZWQt Pmdyb3VwX2xzbltsc25pbmRleF0gPCBsc24pCi0JCQlYYWN0Q3RsLT5zaGFyZWQtPmdyb3VwX2xz bltsc25pbmRleF0gPSBsc247CisJCWlmIChQYWdlR2V0TFNOKHBhZ2UpIDwgbHNuKQorCQkJUGFn ZVNldExTTihwYWdlLCBsc24pOwogCX0KIH0KIApAQCAtNjUxLDE5ICs2NDQsMTkgQEAgVHJhbnNh Y3Rpb25JZEdldFN0YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciAqbHNuKQogCWlu dAkJCWJ5dGVubyA9IFRyYW5zYWN0aW9uSWRUb0J5dGUoeGlkKTsKIAlpbnQJCQlic2hpZnQgPSBU cmFuc2FjdGlvbklkVG9CSW5kZXgoeGlkKSAqIENMT0dfQklUU19QRVJfWEFDVDsKIAlpbnQJCQlz bG90bm87Ci0JaW50CQkJbHNuaW5kZXg7CisJUGFnZSAgICAgICAgcGFnZTsKIAljaGFyCSAgICpi eXRlcHRyOwogCVhpZFN0YXR1cwlzdGF0dXM7CiAKIAkvKiBsb2NrIGlzIGFjcXVpcmVkIGJ5IFNp bXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5ICovCiAKIAlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFn ZV9SZWFkT25seShYYWN0Q3RsLCBwYWdlbm8sIHhpZCk7Ci0JYnl0ZXB0ciA9IFhhY3RDdGwtPnNo YXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGJ5dGVubzsKKwlwYWdlID0gWGFjdEN0bC0+c2hh cmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOworCWJ5dGVwdHIgPSBQYWdlR2V0Q29udGVudHMocGFn ZSkgKyBieXRlbm87CiAKIAlzdGF0dXMgPSAoKmJ5dGVwdHIgPj4gYnNoaWZ0KSAmIENMT0dfWEFD VF9CSVRNQVNLOwogCi0JbHNuaW5kZXggPSBHZXRMU05JbmRleChzbG90bm8sIHhpZCk7Ci0JKmxz biA9IFhhY3RDdGwtPnNoYXJlZC0+Z3JvdXBfbHNuW2xzbmluZGV4XTsKKwkqbHNuID0gUGFnZUdl dExTTihwYWdlKTsKIAogCUxXTG9ja1JlbGVhc2UoWGFjdFNMUlVMb2NrKTsKIApAQCAtNjk4LDE0 ICs2OTEsMTQgQEAgQ0xPR1NobWVtQnVmZmVycyh2b2lkKQogU2l6ZQogQ0xPR1NobWVtU2l6ZSh2 b2lkKQogewotCXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoQ0xPR1NobWVtQnVmZmVycygpLCBD TE9HX0xTTlNfUEVSX1BBR0UpOworCXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoQ0xPR1NobWVt QnVmZmVycygpKTsKIH0KIAogdm9pZAogQ0xPR1NobWVtSW5pdCh2b2lkKQogewogCVhhY3RDdGwt PlBhZ2VQcmVjZWRlcyA9IENMT0dQYWdlUHJlY2VkZXM7Ci0JU2ltcGxlTHJ1SW5pdChYYWN0Q3Rs LCAiWGFjdCIsIENMT0dTaG1lbUJ1ZmZlcnMoKSwgQ0xPR19MU05TX1BFUl9QQUdFLAorCVNpbXBs ZUxydUluaXQoWGFjdEN0bCwgIlhhY3QiLCBDTE9HU2htZW1CdWZmZXJzKCksCiAJCQkJICBYYWN0 U0xSVUxvY2ssICJwZ194YWN0IiwgTFdUUkFOQ0hFX1hBQ1RfQlVGRkVSLAogCQkJCSAgU1lOQ19I QU5ETEVSX0NMT0csIGZhbHNlKTsKIAlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFhhY3RDdGws IENMT0dfWEFDVFNfUEVSX1BBR0UpOwpAQCAtNzQ3LDExICs3NDAsMTcgQEAgc3RhdGljIGludAog WmVyb0NMT0dQYWdlKGludDY0IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpCiB7CiAJaW50CQkJc2xv dG5vOworCVBhZ2UgCQlwYWdlOworCVhMb2dSZWNQdHIgIGxzbiA9IDA7CiAKIAlzbG90bm8gPSBT aW1wbGVMcnVaZXJvUGFnZShYYWN0Q3RsLCBwYWdlbm8pOworCXBhZ2UgPSBYYWN0Q3RsLT5zaGFy ZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CiAKIAlpZiAod3JpdGVYbG9nKQotCQlXcml0ZVplcm9Q YWdlWGxvZ1JlYyhwYWdlbm8pOworCXsKKwkJbHNuID0gV3JpdGVaZXJvUGFnZVhsb2dSZWMocGFn ZW5vKTsKKwkJUGFnZVNldExTTihwYWdlLCBsc24pOworCX0KIAogCXJldHVybiBzbG90bm87CiB9 CkBAIC04MDcsMTIgKzgwNiwxMiBAQCBUcmltQ0xPRyh2b2lkKQogCQljaGFyCSAgICpieXRlcHRy OwogCiAJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKFhhY3RDdGwsIHBhZ2VubywgZmFsc2Us IHhpZCk7Ci0JCWJ5dGVwdHIgPSBYYWN0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10g KyBieXRlbm87CisJCWJ5dGVwdHIgPSBQYWdlR2V0Q29udGVudHMoWGFjdEN0bC0+c2hhcmVkLT5w YWdlX2J1ZmZlcltzbG90bm9dKSArIGJ5dGVubzsKIAogCQkvKiBaZXJvIHNvLWZhci11bnVzZWQg cG9zaXRpb25zIGluIHRoZSBjdXJyZW50IGJ5dGUgKi8KIAkJKmJ5dGVwdHIgJj0gKDEgPDwgYnNo aWZ0KSAtIDE7CiAJCS8qIFplcm8gdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgKi8KLQkJTWVtU2V0KGJ5 dGVwdHIgKyAxLCAwLCBCTENLU1ogLSBieXRlbm8gLSAxKTsKKwkJTWVtU2V0KGJ5dGVwdHIgKyAx LCAwLCBDYXBhY2l0eU9mUGFnZUNvbnRlbnRzIC0gYnl0ZW5vIC0gMSk7CiAKIAkJWGFjdEN0bC0+ c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOwogCX0KQEAgLTgzNiw3ICs4MzUsNiBA QCBDaGVja1BvaW50Q0xPRyh2b2lkKQogCVRSQUNFX1BPU1RHUkVTUUxfQ0xPR19DSEVDS1BPSU5U X0RPTkUodHJ1ZSk7CiB9CiAKLQogLyoKICAqIE1ha2Ugc3VyZSB0aGF0IENMT0cgaGFzIHJvb20g Zm9yIGEgbmV3bHktYWxsb2NhdGVkIFhJRC4KICAqCkBAIC05NTgsMTIgKzk1NiwxMiBAQCBDTE9H UGFnZVByZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMikKIC8qCiAgKiBXcml0ZSBhIFpF Uk9QQUdFIHhsb2cgcmVjb3JkCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgWExvZ1JlY1B0cgog V3JpdGVaZXJvUGFnZVhsb2dSZWMoaW50NjQgcGFnZW5vKQogewogCVhMb2dCZWdpbkluc2VydCgp OwogCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgKCZwYWdlbm8pLCBzaXplb2YocGFnZW5vKSk7 Ci0JKHZvaWQpIFhMb2dJbnNlcnQoUk1fQ0xPR19JRCwgQ0xPR19aRVJPUEFHRSk7CisJcmV0dXJu IFhMb2dJbnNlcnQoUk1fQ0xPR19JRCwgQ0xPR19aRVJPUEFHRSk7CiB9CiAKIC8qCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCmluZGV4IDdjNjQyZjdiNTkuLjNmMDFmMTBkZjUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCkBAIC0zMSw2ICszMSw3IEBA CiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUg InBnX3RyYWNlLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9zaG1lbS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRp bHMvc25hcG1nci5oIgpAQCAtNjMsNyArNjQsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb21taXRUaW1l c3RhbXBFbnRyeQogCQkJCQkJCQkJc2l6ZW9mKFJlcE9yaWdpbklkKSkKIAogI2RlZmluZSBDT01N SVRfVFNfWEFDVFNfUEVSX1BBR0UgXAotCShCTENLU1ogLyBTaXplT2ZDb21taXRUaW1lc3RhbXBF bnRyeSkKKwkoQ2FwYWNpdHlPZlBhZ2VDb250ZW50cyAvIFNpemVPZkNvbW1pdFRpbWVzdGFtcEVu dHJ5KQogCiAKIC8qCkBAIC0xMjAsNyArMTIxLDcgQEAgc3RhdGljIGludAlaZXJvQ29tbWl0VHNQ YWdlKGludDY0IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwogc3RhdGljIGJvb2wgQ29tbWl0VHNQ YWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKIHN0YXRpYyB2b2lkIEFjdGl2 YXRlQ29tbWl0VHModm9pZCk7CiBzdGF0aWMgdm9pZCBEZWFjdGl2YXRlQ29tbWl0VHModm9pZCk7 Ci1zdGF0aWMgdm9pZCBXcml0ZVplcm9QYWdlWGxvZ1JlYyhpbnQ2NCBwYWdlbm8pOworc3RhdGlj IFhMb2dSZWNQdHIgV3JpdGVaZXJvUGFnZVhsb2dSZWMoaW50NjQgcGFnZW5vKTsKIHN0YXRpYyB2 b2lkIFdyaXRlVHJ1bmNhdGVYbG9nUmVjKGludDY0IHBhZ2VubywgVHJhbnNhY3Rpb25JZCBvbGRl c3RYaWQpOwogCiAvKgpAQCAtMjU0LDExICsyNTUsMTIgQEAgVHJhbnNhY3Rpb25JZFNldENvbW1p dFRzKFRyYW5zYWN0aW9uSWQgeGlkLCBUaW1lc3RhbXBUeiB0cywKIAlDb21taXRUaW1lc3RhbXBF bnRyeSBlbnRyeTsKIAogCUFzc2VydChUcmFuc2FjdGlvbklkSXNOb3JtYWwoeGlkKSk7CisJQXNz ZXJ0KHhpZCA9PSBzbG90bm8gKiBDT01NSVRfVFNfWEFDVFNfUEVSX1BBR0UgKyBlbnRyeW5vKTsK IAogCWVudHJ5LnRpbWUgPSB0czsKIAllbnRyeS5ub2RlaWQgPSBub2RlaWQ7CiAKLQltZW1jcHko Q29tbWl0VHNDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArCisJbWVtY3B5KFBhZ2VH ZXRDb250ZW50cyhDb21taXRUc0N0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dKSArCiAJ CSAgIFNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5ICogZW50cnlubywKIAkJICAgJmVudHJ5LCBT aXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSk7CiB9CkBAIC0zMzcsNyArMzM5LDcgQEAgVHJhbnNh Y3Rpb25JZEdldENvbW1pdFRzRGF0YShUcmFuc2FjdGlvbklkIHhpZCwgVGltZXN0YW1wVHogKnRz LAogCS8qIGxvY2sgaXMgYWNxdWlyZWQgYnkgU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkgKi8K IAlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShDb21taXRUc0N0bCwgcGFnZW5v LCB4aWQpOwogCW1lbWNweSgmZW50cnksCi0JCSAgIENvbW1pdFRzQ3RsLT5zaGFyZWQtPnBhZ2Vf YnVmZmVyW3Nsb3Rub10gKworCQkgICBQYWdlR2V0Q29udGVudHMoQ29tbWl0VHNDdGwtPnNoYXJl ZC0+cGFnZV9idWZmZXJbc2xvdG5vXSkgKwogCQkgICBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRy eSAqIGVudHJ5bm8sCiAJCSAgIFNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5KTsKIApAQCAtNTE1 LDcgKzUxNyw3IEBAIENvbW1pdFRzU2htZW1CdWZmZXJzKHZvaWQpCiBTaXplCiBDb21taXRUc1No bWVtU2l6ZSh2b2lkKQogewotCXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoQ29tbWl0VHNTaG1l bUJ1ZmZlcnMoKSwgMCkgKworCXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoQ29tbWl0VHNTaG1l bUJ1ZmZlcnMoKSkgKwogCQlzaXplb2YoQ29tbWl0VGltZXN0YW1wU2hhcmVkKTsKIH0KIApAQCAt NTI5LDcgKzUzMSw3IEBAIENvbW1pdFRzU2htZW1Jbml0KHZvaWQpCiAJYm9vbAkJZm91bmQ7CiAK IAlDb21taXRUc0N0bC0+UGFnZVByZWNlZGVzID0gQ29tbWl0VHNQYWdlUHJlY2VkZXM7Ci0JU2lt cGxlTHJ1SW5pdChDb21taXRUc0N0bCwgIkNvbW1pdFRzIiwgQ29tbWl0VHNTaG1lbUJ1ZmZlcnMo KSwgMCwKKwlTaW1wbGVMcnVJbml0KENvbW1pdFRzQ3RsLCAiQ29tbWl0VHMiLCBDb21taXRUc1No bWVtQnVmZmVycygpLAogCQkJCSAgQ29tbWl0VHNTTFJVTG9jaywgInBnX2NvbW1pdF90cyIsCiAJ CQkJICBMV1RSQU5DSEVfQ09NTUlUVFNfQlVGRkVSLAogCQkJCSAgU1lOQ19IQU5ETEVSX0NPTU1J VF9UUywKQEAgLTU4MiwxMSArNTg0LDE3IEBAIHN0YXRpYyBpbnQKIFplcm9Db21taXRUc1BhZ2Uo aW50NjQgcGFnZW5vLCBib29sIHdyaXRlWGxvZykKIHsKIAlpbnQJCQlzbG90bm87CisJUGFnZSAJ CXBhZ2U7CisJWExvZ1JlY1B0ciAgbHNuID0gMDsKIAogCXNsb3RubyA9IFNpbXBsZUxydVplcm9Q YWdlKENvbW1pdFRzQ3RsLCBwYWdlbm8pOworCXBhZ2UgPSBDb21taXRUc0N0bC0+c2hhcmVkLT5w YWdlX2J1ZmZlcltzbG90bm9dOwogCiAJaWYgKHdyaXRlWGxvZykKLQkJV3JpdGVaZXJvUGFnZVhs b2dSZWMocGFnZW5vKTsKKwl7CisJCWxzbiA9IFdyaXRlWmVyb1BhZ2VYbG9nUmVjKHBhZ2Vubyk7 CisJCVBhZ2VTZXRMU04ocGFnZSwgbHNuKTsKKwl9CiAKIAlyZXR1cm4gc2xvdG5vOwogfQpAQCAt OTQ2LDEyICs5NTQsMTIgQEAgQ29tbWl0VHNQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0 IHBhZ2UyKQogLyoKICAqIFdyaXRlIGEgWkVST1BBR0UgeGxvZyByZWNvcmQKICAqLwotc3RhdGlj IHZvaWQKK3N0YXRpYyBYTG9nUmVjUHRyCiBXcml0ZVplcm9QYWdlWGxvZ1JlYyhpbnQ2NCBwYWdl bm8pCiB7CiAJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAo JnBhZ2VubyksIHNpemVvZihwYWdlbm8pKTsKLQkodm9pZCkgWExvZ0luc2VydChSTV9DT01NSVRf VFNfSUQsIENPTU1JVF9UU19aRVJPUEFHRSk7CisJcmV0dXJuIFhMb2dJbnNlcnQoUk1fQ09NTUlU X1RTX0lELCBDT01NSVRfVFNfWkVST1BBR0UpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9tdWx0aXhhY3QuYwppbmRleCBkYjM0MjNmMTJlLi5lZGM1NmE3NjNlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtODMsNiArODMsNyBAQAogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnX3RyYWNlLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rl ci9hdXRvdmFjdXVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUg InN0b3JhZ2UvcHJvYy5oIgpAQCAtMTA2LDcgKzEwNyw3IEBACiAgKi8KIAogLyogV2UgbmVlZCBm b3VyIGJ5dGVzIHBlciBvZmZzZXQgKi8KLSNkZWZpbmUgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BB R0UgKEJMQ0tTWiAvIHNpemVvZihNdWx0aVhhY3RPZmZzZXQpKQorI2RlZmluZSBNVUxUSVhBQ1Rf T0ZGU0VUU19QRVJfUEFHRSAoQ2FwYWNpdHlPZlBhZ2VDb250ZW50cyAvIHNpemVvZihNdWx0aVhh Y3RPZmZzZXQpKQogCiAjZGVmaW5lIE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKHhpZCkgXAogCSgo eGlkKSAvIChNdWx0aVhhY3RPZmZzZXQpIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFKQpAQCAt MTM4LDcgKzEzOSw3IEBACiAvKiBzaXplIGluIGJ5dGVzIG9mIGEgY29tcGxldGUgZ3JvdXAgKi8K ICNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQX1NJWkUgXAogCShzaXplb2YoVHJhbnNhY3Rp b25JZCkgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVAgKyBNVUxUSVhBQ1RfRkxB R0JZVEVTX1BFUl9HUk9VUCkKLSNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFH RSAoQkxDS1NaIC8gTVVMVElYQUNUX01FTUJFUkdST1VQX1NJWkUpCisjZGVmaW5lIE1VTFRJWEFD VF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKENhcGFjaXR5T2ZQYWdlQ29udGVudHMgLyBNVUxUSVhB Q1RfTUVNQkVSR1JPVVBfU0laRSkKICNkZWZpbmUgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UJ XAogCShNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFICogTVVMVElYQUNUX01FTUJFUlNf UEVSX01FTUJFUkdST1VQKQogCkBAIC0zNjYsNyArMzY3LDcgQEAgc3RhdGljIGJvb2wgTXVsdGlY YWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFjdE9mZnNldCBib3VuZGFyeSwKIAkJCQkJCQkJCSBN dWx0aVhhY3RPZmZzZXQgc3RhcnQsIHVpbnQzMiBkaXN0YW5jZSk7CiBzdGF0aWMgYm9vbCBTZXRP ZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXApOwogc3RhdGljIGJvb2wgZmluZF9tdWx0 aXhhY3Rfc3RhcnQoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCAqcmVzdWx0KTsK LXN0YXRpYyB2b2lkIFdyaXRlTVplcm9QYWdlWGxvZ1JlYyhpbnQ2NCBwYWdlbm8sIHVpbnQ4IGlu Zm8pOworc3RhdGljIFhMb2dSZWNQdHIgV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKGludDY0IHBhZ2Vu bywgdWludDggaW5mbyk7CiBzdGF0aWMgdm9pZCBXcml0ZU1UcnVuY2F0ZVhsb2dSZWMoT2lkIG9s ZGVzdE11bHRpREIsCiAJCQkJCQkJCSAgTXVsdGlYYWN0SWQgc3RhcnRUcnVuY09mZiwKIAkJCQkJ CQkJICBNdWx0aVhhY3RJZCBlbmRUcnVuY09mZiwKQEAgLTg4NCw3ICs4ODUsNyBAQCBSZWNvcmRO ZXdNdWx0aVhhY3QoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCBvZmZzZXQsCiAJ ICogdGFrZSB0aGUgdHJvdWJsZSB0byBnZW5lcmFsaXplIHRoZSBzbHJ1LmMgZXJyb3IgcmVwb3J0 aW5nIGNvZGUuCiAJICovCiAJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zm c2V0Q3RsLCBwYWdlbm8sIHRydWUsIG11bHRpKTsKLQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0 ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOworCW9m ZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgUGFnZUdldENvbnRlbnRzKE11bHRpWGFjdE9mZnNl dEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dKTsKIAlvZmZwdHIgKz0gZW50cnlubzsK IAogCSpvZmZwdHIgPSBvZmZzZXQ7CkBAIC05MjEsMTIgKzkyMiwxMiBAQCBSZWNvcmROZXdNdWx0 aVhhY3QoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCBvZmZzZXQsCiAJCX0KIAog CQltZW1iZXJwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKQotCQkJKE11bHRpWGFjdE1lbWJlckN0bC0+ c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgbWVtYmVyb2ZmKTsKKwkJCShQYWdlR2V0Q29u dGVudHMoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10pICsg bWVtYmVyb2ZmKTsKIAogCQkqbWVtYmVycHRyID0gbWVtYmVyc1tpXS54aWQ7CiAKIAkJZmxhZ3Nw dHIgPSAodWludDMyICopCi0JCQkoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVm ZmVyW3Nsb3Rub10gKyBmbGFnc29mZik7CisJCQkoUGFnZUdldENvbnRlbnRzKE11bHRpWGFjdE1l bWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dKSArIGZsYWdzb2ZmKTsKIAogCQlm bGFnc3ZhbCA9ICpmbGFnc3B0cjsKIAkJZmxhZ3N2YWwgJj0gfigoKDEgPDwgTVhBQ1RfTUVNQkVS X0JJVFNfUEVSX1hBQ1QpIC0gMSkgPDwgYnNoaWZ0KTsKQEAgLTEzNDgsNyArMTM0OSw3IEBAIHJl dHJ5OgogCWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkobXVsdGkpOwogCiAJc2xv dG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUs IG11bHRpKTsKLQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0 bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOworCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZz ZXQgKikgUGFnZUdldENvbnRlbnRzKE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1 ZmZlcltzbG90bm9dKTsKIAlvZmZwdHIgKz0gZW50cnlubzsKIAlvZmZzZXQgPSAqb2ZmcHRyOwog CkBAIC0xMzgxLDcgKzEzODIsNyBAQCByZXRyeToKIAkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2Vu bykKIAkJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFn ZW5vLCB0cnVlLCB0bXBNWGFjdCk7CiAKLQkJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBN dWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwkJb2ZmcHRy ID0gKE11bHRpWGFjdE9mZnNldCAqKSBQYWdlR2V0Q29udGVudHMoTXVsdGlYYWN0T2Zmc2V0Q3Rs LT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10pOwogCQlvZmZwdHIgKz0gZW50cnlubzsKIAkJ bmV4dE1YT2Zmc2V0ID0gKm9mZnB0cjsKIApAQCAtMTQyNCw3ICsxNDI1LDcgQEAgcmV0cnk6CiAJ CX0KIAogCQl4YWN0cHRyID0gKFRyYW5zYWN0aW9uSWQgKikKLQkJCShNdWx0aVhhY3RNZW1iZXJD dGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIG1lbWJlcm9mZik7CisJCQkoUGFnZUdl dENvbnRlbnRzKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9d KSArIG1lbWJlcm9mZik7CiAKIAkJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFjdHB0cikp CiAJCXsKQEAgLTE0MzUsNyArMTQzNiw3IEBAIHJldHJ5OgogCiAJCWZsYWdzb2ZmID0gTVhPZmZz ZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCk7CiAJCWJzaGlmdCA9IE1YT2Zmc2V0VG9GbGFnc0JpdFNo aWZ0KG9mZnNldCk7Ci0JCWZsYWdzcHRyID0gKHVpbnQzMiAqKSAoTXVsdGlYYWN0TWVtYmVyQ3Rs LT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBmbGFnc29mZik7CisJCWZsYWdzcHRyID0g KHVpbnQzMiAqKSAoUGFnZUdldENvbnRlbnRzKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5w YWdlX2J1ZmZlcltzbG90bm9dKSArIGZsYWdzb2ZmKTsKIAogCQlwdHJbdHJ1ZWxlbmd0aF0ueGlk ID0gKnhhY3RwdHI7CiAJCXB0clt0cnVlbGVuZ3RoXS5zdGF0dXMgPSAoKmZsYWdzcHRyID4+IGJz aGlmdCkgJiBNWEFDVF9NRU1CRVJfWEFDVF9CSVRNQVNLOwpAQCAtMTgzNCw4ICsxODM1LDggQEAg TXVsdGlYYWN0U2htZW1TaXplKHZvaWQpCiAJCQkgbXVsX3NpemUoc2l6ZW9mKE11bHRpWGFjdElk KSAqIDIsIE1heE9sZGVzdFNsb3QpKQogCiAJc2l6ZSA9IFNIQVJFRF9NVUxUSVhBQ1RfU1RBVEVf U0laRTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2ltcGxlTHJ1U2htZW1TaXplKE5VTV9NVUxU SVhBQ1RPRkZTRVRfQlVGRkVSUywgMCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVM cnVTaG1lbVNpemUoTlVNX01VTFRJWEFDVE1FTUJFUl9CVUZGRVJTLCAwKSk7CisJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFNpbXBsZUxydVNobWVtU2l6ZShOVU1fTVVMVElYQUNUT0ZGU0VUX0JVRkZF UlMpKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2ltcGxlTHJ1U2htZW1TaXplKE5VTV9NVUxU SVhBQ1RNRU1CRVJfQlVGRkVSUykpOwogCiAJcmV0dXJuIHNpemU7CiB9CkBAIC0xODUxLDE0ICsx ODUyLDE0IEBAIE11bHRpWGFjdFNobWVtSW5pdCh2b2lkKQogCU11bHRpWGFjdE1lbWJlckN0bC0+ UGFnZVByZWNlZGVzID0gTXVsdGlYYWN0TWVtYmVyUGFnZVByZWNlZGVzOwogCiAJU2ltcGxlTHJ1 SW5pdChNdWx0aVhhY3RPZmZzZXRDdGwsCi0JCQkJICAiTXVsdGlYYWN0T2Zmc2V0IiwgTlVNX01V TFRJWEFDVE9GRlNFVF9CVUZGRVJTLCAwLAorCQkJCSAgIk11bHRpWGFjdE9mZnNldCIsIE5VTV9N VUxUSVhBQ1RPRkZTRVRfQlVGRkVSUywKIAkJCQkgIE11bHRpWGFjdE9mZnNldFNMUlVMb2NrLCAi cGdfbXVsdGl4YWN0L29mZnNldHMiLAogCQkJCSAgTFdUUkFOQ0hFX01VTFRJWEFDVE9GRlNFVF9C VUZGRVIsCiAJCQkJICBTWU5DX0hBTkRMRVJfTVVMVElYQUNUX09GRlNFVCwKIAkJCQkgIGZhbHNl KTsKIAlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKE11bHRpWGFjdE9mZnNldEN0bCwgTVVMVElY QUNUX09GRlNFVFNfUEVSX1BBR0UpOwogCVNpbXBsZUxydUluaXQoTXVsdGlYYWN0TWVtYmVyQ3Rs LAotCQkJCSAgIk11bHRpWGFjdE1lbWJlciIsIE5VTV9NVUxUSVhBQ1RNRU1CRVJfQlVGRkVSUywg MCwKKwkJCQkgICJNdWx0aVhhY3RNZW1iZXIiLCBOVU1fTVVMVElYQUNUTUVNQkVSX0JVRkZFUlMs CiAJCQkJICBNdWx0aVhhY3RNZW1iZXJTTFJVTG9jaywgInBnX211bHRpeGFjdC9tZW1iZXJzIiwK IAkJCQkgIExXVFJBTkNIRV9NVUxUSVhBQ1RNRU1CRVJfQlVGRkVSLAogCQkJCSAgU1lOQ19IQU5E TEVSX01VTFRJWEFDVF9NRU1CRVIsCkBAIC0xOTMzLDExICsxOTM0LDE3IEBAIHN0YXRpYyBpbnQK IFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKGludDY0IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpCiB7 CiAJaW50CQkJc2xvdG5vOworCVBhZ2UgCQlwYWdlOworCVhMb2dSZWNQdHIgIGxzbiA9IDA7CiAK IAlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2Vubyk7 CisJcGFnZSA9IE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9d OwogCiAJaWYgKHdyaXRlWGxvZykKLQkJV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKHBhZ2VubywgWExP R19NVUxUSVhBQ1RfWkVST19PRkZfUEFHRSk7CisJeworCQlsc24gPSBXcml0ZU1aZXJvUGFnZVhs b2dSZWMocGFnZW5vLCBYTE9HX01VTFRJWEFDVF9aRVJPX09GRl9QQUdFKTsKKwkJUGFnZVNldExT TihwYWdlLCBsc24pOworCX0KIAogCXJldHVybiBzbG90bm87CiB9CkBAIC0xOTQ5LDExICsxOTU2 LDE3IEBAIHN0YXRpYyBpbnQKIFplcm9NdWx0aVhhY3RNZW1iZXJQYWdlKGludDY0IHBhZ2Vubywg Ym9vbCB3cml0ZVhsb2cpCiB7CiAJaW50CQkJc2xvdG5vOworCVBhZ2UgCQlwYWdlOworCVhMb2dS ZWNQdHIgIGxzbiA9IDA7CiAKIAlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShNdWx0aVhhY3RN ZW1iZXJDdGwsIHBhZ2Vubyk7CisJcGFnZSA9IE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5w YWdlX2J1ZmZlcltzbG90bm9dOwogCiAJaWYgKHdyaXRlWGxvZykKLQkJV3JpdGVNWmVyb1BhZ2VY bG9nUmVjKHBhZ2VubywgWExPR19NVUxUSVhBQ1RfWkVST19NRU1fUEFHRSk7CisJeworCQlsc24g PSBXcml0ZU1aZXJvUGFnZVhsb2dSZWMocGFnZW5vLCBYTE9HX01VTFRJWEFDVF9aRVJPX01FTV9Q QUdFKTsKKwkJUGFnZVNldExTTihwYWdlLCBsc24pOworCX0KIAogCXJldHVybiBzbG90bm87CiB9 CkBAIC0yMDcxLDEwICsyMDg0LDEwIEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAkJTXVsdGlYYWN0 T2Zmc2V0ICpvZmZwdHI7CiAKIAkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0 T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIG5leHRNWGFjdCk7Ci0JCW9mZnB0ciA9IChNdWx0aVhh Y3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Ru b107CisJCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgUGFnZUdldENvbnRlbnRzKE11bHRp WGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dKTsKIAkJb2ZmcHRyICs9 IGVudHJ5bm87CiAKLQkJTWVtU2V0KG9mZnB0ciwgMCwgQkxDS1NaIC0gKGVudHJ5bm8gKiBzaXpl b2YoTXVsdGlYYWN0T2Zmc2V0KSkpOworCQlNZW1TZXQob2ZmcHRyLCAwLCBDYXBhY2l0eU9mUGFn ZUNvbnRlbnRzIC0gKGVudHJ5bm8gKiBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkpOwogCiAJCU11 bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOwogCX0K QEAgLTIxMDQsOSArMjExNyw5IEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAkJbWVtYmVyb2ZmID0g TVhPZmZzZXRUb01lbWJlck9mZnNldChvZmZzZXQpOwogCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFk UGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIHBhZ2VubywgdHJ1ZSwgb2Zmc2V0KTsKIAkJeGlkcHRy ID0gKFRyYW5zYWN0aW9uSWQgKikKLQkJCShNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFn ZV9idWZmZXJbc2xvdG5vXSArIG1lbWJlcm9mZik7CisJCQkoUGFnZUdldENvbnRlbnRzKE11bHRp WGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dKSArIG1lbWJlcm9mZik7 CiAKLQkJTWVtU2V0KHhpZHB0ciwgMCwgQkxDS1NaIC0gbWVtYmVyb2ZmKTsKKwkJTWVtU2V0KHhp ZHB0ciwgMCwgQ2FwYWNpdHlPZlBhZ2VDb250ZW50cyAtIG1lbWJlcm9mZik7CiAKIAkJLyoKIAkJ ICogTm90ZTogd2UgZG9uJ3QgbmVlZCB0byB6ZXJvIG91dCB0aGUgZmxhZyBiaXRzIGluIHRoZSBy ZW1haW5pbmcKQEAgLTI3NTgsNyArMjc3MSw3IEBAIGZpbmRfbXVsdGl4YWN0X3N0YXJ0KE11bHRp WGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3VsdCkKIAogCS8qIGxvY2sgaXMgYWNx dWlyZWQgYnkgU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkgKi8KIAlzbG90bm8gPSBTaW1wbGVM cnVSZWFkUGFnZV9SZWFkT25seShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgbXVsdGkpOwot CW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQt PnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBQYWdl R2V0Q29udGVudHMoTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Ru b10pOwogCW9mZnB0ciArPSBlbnRyeW5vOwogCW9mZnNldCA9ICpvZmZwdHI7CiAJTFdMb2NrUmVs ZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayk7CkBAIC0zMTkyLDEyICszMjA1LDEyIEBAIE11 bHRpWGFjdE9mZnNldFByZWNlZGVzKE11bHRpWGFjdE9mZnNldCBvZmZzZXQxLCBNdWx0aVhhY3RP ZmZzZXQgb2Zmc2V0MikKICAqIFdyaXRlIGFuIHhsb2cgcmVjb3JkIHJlZmxlY3RpbmcgdGhlIHpl cm9pbmcgb2YgZWl0aGVyIGEgTUVNQkVScyBvcgogICogT0ZGU0VUcyBwYWdlIChpbmZvIHNob3dz IHdoaWNoKQogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIFhMb2dSZWNQdHIKIFdyaXRlTVplcm9Q YWdlWGxvZ1JlYyhpbnQ2NCBwYWdlbm8sIHVpbnQ4IGluZm8pCiB7CiAJWExvZ0JlZ2luSW5zZXJ0 KCk7CiAJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAoJnBhZ2VubyksIHNpemVvZihwYWdlbm8p KTsKLQkodm9pZCkgWExvZ0luc2VydChSTV9NVUxUSVhBQ1RfSUQsIGluZm8pOworCXJldHVybiBY TG9nSW5zZXJ0KFJNX01VTFRJWEFDVF9JRCwgaW5mbyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9zbHJ1LmMKaW5kZXggN2EzNzFkOTAzNC4uZDdmM2RlZWE3ZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3NscnUuYwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRp bHMuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNs dWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9zaG1lbS5oIgogCkBAIC0xNTQsMTMgKzE1NSwxMyBAQCB0eXBlZGVmIGVudW0K IAlTTFJVX1dSSVRFX0ZBSUxFRCwKIAlTTFJVX0ZTWU5DX0ZBSUxFRCwKIAlTTFJVX0NMT1NFX0ZB SUxFRCwKKwlTTFJVX0RBVEFfQ09SUlVQVEVELAogfSBTbHJ1RXJyb3JDYXVzZTsKIAogc3RhdGlj IFNscnVFcnJvckNhdXNlIHNscnVfZXJyY2F1c2U7CiBzdGF0aWMgaW50CXNscnVfZXJybm87CiAK IAotc3RhdGljIHZvaWQgU2ltcGxlTHJ1WmVyb0xTTnMoU2xydUN0bCBjdGwsIGludCBzbG90bm8p Owogc3RhdGljIHZvaWQgU2ltcGxlTHJ1V2FpdElPKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKTsK IHN0YXRpYyB2b2lkIFNscnVJbnRlcm5hbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3Ru bywgU2xydVdyaXRlQWxsIGZkYXRhKTsKIHN0YXRpYyBib29sIFNscnVQaHlzaWNhbFJlYWRQYWdl KFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGludCBzbG90bm8pOwpAQCAtMTc5LDcgKzE4MCw3 IEBAIHN0YXRpYyB2b2lkIFNscnVJbnRlcm5hbERlbGV0ZVNlZ21lbnQoU2xydUN0bCBjdGwsIGlu dDY0IHNlZ25vKTsKICAqLwogCiBTaXplCi1TaW1wbGVMcnVTaG1lbVNpemUoaW50IG5zbG90cywg aW50IG5sc25zKQorU2ltcGxlTHJ1U2htZW1TaXplKGludCBuc2xvdHMpCiB7CiAJU2l6ZQkJc3o7 CiAKQEAgLTE5Miw5ICsxOTMsNiBAQCBTaW1wbGVMcnVTaG1lbVNpemUoaW50IG5zbG90cywgaW50 IG5sc25zKQogCXN6ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihpbnQpKTsJLyogcGFnZV9s cnVfY291bnRbXSAqLwogCXN6ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihMV0xvY2tQYWRk ZWQpKTsJLyogYnVmZmVyX2xvY2tzW10gKi8KIAotCWlmIChubHNucyA+IDApCi0JCXN6ICs9IE1B WEFMSUdOKG5zbG90cyAqIG5sc25zICogc2l6ZW9mKFhMb2dSZWNQdHIpKTsJLyogZ3JvdXBfbHNu W10gKi8KLQogCXJldHVybiBCVUZGRVJBTElHTihzeikgKyBCTENLU1ogKiBuc2xvdHM7CiB9CiAK QEAgLTIwNCwxNCArMjAyLDEzIEBAIFNpbXBsZUxydVNobWVtU2l6ZShpbnQgbnNsb3RzLCBpbnQg bmxzbnMpCiAgKiBjdGw6IGFkZHJlc3Mgb2YgbG9jYWwgKHVuc2hhcmVkKSBjb250cm9sIHN0cnVj dHVyZS4KICAqIG5hbWU6IG5hbWUgb2YgU0xSVS4gIChUaGlzIGlzIHVzZXItdmlzaWJsZSwgcGlj ayB3aXRoIGNhcmUhKQogICogbnNsb3RzOiBudW1iZXIgb2YgcGFnZSBzbG90cyB0byB1c2UuCi0g KiBubHNuczogbnVtYmVyIG9mIExTTiBncm91cHMgcGVyIHBhZ2UgKHNldCB0byB6ZXJvIGlmIG5v dCByZWxldmFudCkuCiAgKiBjdGxsb2NrOiBMV0xvY2sgdG8gdXNlIHRvIGNvbnRyb2wgYWNjZXNz IHRvIHRoZSBzaGFyZWQgY29udHJvbCBzdHJ1Y3R1cmUuCiAgKiBzdWJkaXI6IFBHREFUQS1yZWxh dGl2ZSBzdWJkaXJlY3RvcnkgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzLgogICogdHJhbmNo ZV9pZDogTFdMb2NrIHRyYW5jaGUgSUQgdG8gdXNlIGZvciB0aGUgU0xSVSdzIHBlci1idWZmZXIg TFdMb2Nrcy4KICAqIHN5bmNfaGFuZGxlcjogd2hpY2ggc2V0IG9mIGZ1bmN0aW9ucyB0byB1c2Ug dG8gaGFuZGxlIHN5bmMgcmVxdWVzdHMKICAqLwogdm9pZAotU2ltcGxlTHJ1SW5pdChTbHJ1Q3Rs IGN0bCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5zbG90cywgaW50IG5sc25zLAorU2ltcGxlTHJ1 SW5pdChTbHJ1Q3RsIGN0bCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5zbG90cywKIAkJCSAgTFdM b2NrICpjdGxsb2NrLCBjb25zdCBjaGFyICpzdWJkaXIsIGludCB0cmFuY2hlX2lkLAogCQkJICBT eW5jUmVxdWVzdEhhbmRsZXIgc3luY19oYW5kbGVyLCBib29sIGxvbmdfc2VnbWVudF9uYW1lcykK IHsKQEAgLTIxOSw3ICsyMTYsNyBAQCBTaW1wbGVMcnVJbml0KFNscnVDdGwgY3RsLCBjb25zdCBj aGFyICpuYW1lLCBpbnQgbnNsb3RzLCBpbnQgbmxzbnMsCiAJYm9vbAkJZm91bmQ7CiAKIAlzaGFy ZWQgPSAoU2xydVNoYXJlZCkgU2htZW1Jbml0U3RydWN0KG5hbWUsCi0JCQkJCQkJCQkJICBTaW1w bGVMcnVTaG1lbVNpemUobnNsb3RzLCBubHNucyksCisJCQkJCQkJCQkJICBTaW1wbGVMcnVTaG1l bVNpemUobnNsb3RzKSwKIAkJCQkJCQkJCQkgICZmb3VuZCk7CiAKIAlpZiAoIUlzVW5kZXJQb3N0 bWFzdGVyKQpAQCAtMjM2LDcgKzIzMyw2IEBAIFNpbXBsZUxydUluaXQoU2xydUN0bCBjdGwsIGNv bnN0IGNoYXIgKm5hbWUsIGludCBuc2xvdHMsIGludCBubHNucywKIAkJc2hhcmVkLT5Db250cm9s TG9jayA9IGN0bGxvY2s7CiAKIAkJc2hhcmVkLT5udW1fc2xvdHMgPSBuc2xvdHM7Ci0JCXNoYXJl ZC0+bHNuX2dyb3Vwc19wZXJfcGFnZSA9IG5sc25zOwogCiAJCXNoYXJlZC0+Y3VyX2xydV9jb3Vu dCA9IDA7CiAKQEAgLTI2MSwxMiArMjU3LDYgQEAgU2ltcGxlTHJ1SW5pdChTbHJ1Q3RsIGN0bCwg Y29uc3QgY2hhciAqbmFtZSwgaW50IG5zbG90cywgaW50IG5sc25zLAogCQlzaGFyZWQtPmJ1ZmZl cl9sb2NrcyA9IChMV0xvY2tQYWRkZWQgKikgKHB0ciArIG9mZnNldCk7CiAJCW9mZnNldCArPSBN QVhBTElHTihuc2xvdHMgKiBzaXplb2YoTFdMb2NrUGFkZGVkKSk7CiAKLQkJaWYgKG5sc25zID4g MCkKLQkJewotCQkJc2hhcmVkLT5ncm91cF9sc24gPSAoWExvZ1JlY1B0ciAqKSAocHRyICsgb2Zm c2V0KTsKLQkJCW9mZnNldCArPSBNQVhBTElHTihuc2xvdHMgKiBubHNucyAqIHNpemVvZihYTG9n UmVjUHRyKSk7Ci0JCX0KLQogCQlwdHIgKz0gQlVGRkVSQUxJR04ob2Zmc2V0KTsKIAkJZm9yIChz bG90bm8gPSAwOyBzbG90bm8gPCBuc2xvdHM7IHNsb3RubysrKQogCQl7CkBAIC0yODEsNyArMjcx LDcgQEAgU2ltcGxlTHJ1SW5pdChTbHJ1Q3RsIGN0bCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5z bG90cywgaW50IG5sc25zLAogCQl9CiAKIAkJLyogU2hvdWxkIGZpdCB0byBlc3RpbWF0ZWQgc2ht ZW0gc2l6ZSAqLwotCQlBc3NlcnQocHRyIC0gKGNoYXIgKikgc2hhcmVkIDw9IFNpbXBsZUxydVNo bWVtU2l6ZShuc2xvdHMsIG5sc25zKSk7CisJCUFzc2VydChwdHIgLSAoY2hhciAqKSBzaGFyZWQg PD0gU2ltcGxlTHJ1U2htZW1TaXplKG5zbG90cykpOwogCX0KIAllbHNlCiAJCUFzc2VydChmb3Vu ZCk7CkBAIC0zMjMsMTEgKzMxMyw4IEBAIFNpbXBsZUxydVplcm9QYWdlKFNscnVDdGwgY3RsLCBp bnQ2NCBwYWdlbm8pCiAJc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOwogCVNscnVS ZWNlbnRseVVzZWQoc2hhcmVkLCBzbG90bm8pOwogCi0JLyogU2V0IHRoZSBidWZmZXIgdG8gemVy b2VzICovCi0JTWVtU2V0KHNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSwgMCwgQkxDS1NaKTsK LQotCS8qIFNldCB0aGUgTFNOcyBmb3IgdGhpcyBuZXcgcGFnZSB0byB6ZXJvICovCi0JU2ltcGxl THJ1WmVyb0xTTnMoY3RsLCBzbG90bm8pOworICAgIC8qIEluaXRpYWxpemUgdGhlIHBhZ2UuICov CisJUGFnZUluaXRTTFJVKHNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSwgQkxDS1NaLCAwKTsK IAogCS8qIEFzc3VtZSB0aGlzIHBhZ2UgaXMgbm93IHRoZSBsYXRlc3QgYWN0aXZlIHBhZ2UgKi8K IAlzaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKQEAgLTMzOCwyNiArMzI1LDYg QEAgU2ltcGxlTHJ1WmVyb1BhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubykKIAlyZXR1cm4g c2xvdG5vOwogfQogCi0vKgotICogWmVybyBhbGwgdGhlIExTTnMgd2Ugc3RvcmUgZm9yIHRoaXMg c2xydSBwYWdlLgotICoKLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBlYWNoIHRpbWUgd2UgY3Jl YXRlIGEgbmV3IHBhZ2UsIGFuZCBlYWNoIHRpbWUgd2UgcmVhZAotICogaW4gYSBwYWdlIGZyb20g ZGlzayBpbnRvIGFuIGV4aXN0aW5nIGJ1ZmZlci4gIChTdWNoIGFuIG9sZCBwYWdlIGNhbm5vdAot ICogaGF2ZSBhbnkgaW50ZXJlc3RpbmcgTFNOcywgc2luY2Ugd2UnZCBoYXZlIGZsdXNoZWQgdGhl bSBiZWZvcmUgd3JpdGluZwotICogdGhlIHBhZ2UgaW4gdGhlIGZpcnN0IHBsYWNlLikKLSAqCi0g KiBUaGlzIGFzc3VtZXMgdGhhdCBJbnZhbGlkWExvZ1JlY1B0ciBpcyBiaXR3aXNlLWFsbC0wLgot ICovCi1zdGF0aWMgdm9pZAotU2ltcGxlTHJ1WmVyb0xTTnMoU2xydUN0bCBjdGwsIGludCBzbG90 bm8pCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKLQotCWlmIChzaGFyZWQt Pmxzbl9ncm91cHNfcGVyX3BhZ2UgPiAwKQotCQlNZW1TZXQoJnNoYXJlZC0+Z3JvdXBfbHNuW3Ns b3RubyAqIHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZV0sIDAsCi0JCQkgICBzaGFyZWQtPmxz bl9ncm91cHNfcGVyX3BhZ2UgKiBzaXplb2YoWExvZ1JlY1B0cikpOwotfQotCiAvKgogICogV2Fp dCBmb3IgYW55IGFjdGl2ZSBJL08gb24gYSBwYWdlIHNsb3QgdG8gZmluaXNoLiAgKFRoaXMgZG9l cyBub3QKICAqIGd1YXJhbnRlZSB0aGF0IG5ldyBJL08gaGFzbid0IGJlZW4gc3RhcnRlZCBiZWZv cmUgd2UgcmV0dXJuLCB0aG91Z2guCkBAIC00NzgsOSArNDQ1LDYgQEAgU2ltcGxlTHJ1UmVhZFBh Z2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgYm9vbCB3cml0ZV9vaywKIAkJLyogRG8gdGhl IHJlYWQgKi8KIAkJb2sgPSBTbHJ1UGh5c2ljYWxSZWFkUGFnZShjdGwsIHBhZ2Vubywgc2xvdG5v KTsKIAotCQkvKiBTZXQgdGhlIExTTnMgZm9yIHRoaXMgbmV3bHkgcmVhZC1pbiBwYWdlIHRvIHpl cm8gKi8KLQkJU2ltcGxlTHJ1WmVyb0xTTnMoY3RsLCBzbG90bm8pOwotCiAJCS8qIFJlLWFjcXVp cmUgY29udHJvbCBsb2NrIGFuZCB1cGRhdGUgcGFnZSBzdGF0ZSAqLwogCQlMV0xvY2tBY3F1aXJl KHNoYXJlZC0+Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7CiAKQEAgLTc0MCw3ICs3MDQsNyBA QCBTbHJ1UGh5c2ljYWxSZWFkUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBpbnQgc2xv dG5vKQogCQllcmVwb3J0KExPRywKIAkJCQkoZXJybXNnKCJmaWxlIFwiJXNcIiBkb2Vzbid0IGV4 aXN0LCByZWFkaW5nIGFzIHplcm9lcyIsCiAJCQkJCQlwYXRoKSkpOwotCQlNZW1TZXQoc2hhcmVk LT5wYWdlX2J1ZmZlcltzbG90bm9dLCAwLCBCTENLU1opOworCQlQYWdlSW5pdFNMUlUoc2hhcmVk LT5wYWdlX2J1ZmZlcltzbG90bm9dLCBCTENLU1osIDApOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAK QEAgLTc2Myw2ICs3MjcsMTMgQEAgU2xydVBoeXNpY2FsUmVhZFBhZ2UoU2xydUN0bCBjdGwsIGlu dDY0IHBhZ2VubywgaW50IHNsb3RubykKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAorCWlmICghUGFn ZUlzVmVyaWZpZWRFeHRlbmRlZChzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10sIHBhZ2Vubywg UElWX1JFUE9SVF9TVEFUKSkKKwl7CisJCXNscnVfZXJyY2F1c2UgPSBTTFJVX0RBVEFfQ09SUlVQ VEVEOworCQlzbHJ1X2Vycm5vID0gMDsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogCXJldHVybiB0 cnVlOwogfQogCkBAIC03ODksNiArNzYwLDggQEAgU2xydVBoeXNpY2FsV3JpdGVQYWdlKFNscnVD dGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGludCBzbG90bm8sIFNscnVXcml0ZUFsbCBmZGF0YSkKIAlv ZmZfdAkJb2Zmc2V0ID0gcnBhZ2VubyAqIEJMQ0tTWjsKIAljaGFyCQlwYXRoW01BWFBHUEFUSF07 CiAJaW50CQkJZmQgPSAtMTsKKwlQYWdlCQlwYWdlID0gc2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90 bm9dOworCVhMb2dSZWNQdHIJbHNuOwogCiAJLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9m IHdyaXR0ZW4gcGFnZXMgKi8KIAlwZ3N0YXRfY291bnRfc2xydV9wYWdlX3dyaXR0ZW4oc2hhcmVk LT5zbHJ1X3N0YXRzX2lkeCk7CkBAIC03OTgsNDEgKzc3MSwxOCBAQCBTbHJ1UGh5c2ljYWxXcml0 ZVBhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgaW50IHNsb3RubywgU2xydVdyaXRlQWxs IGZkYXRhKQogCSAqIHdyaXRlIG91dCBkYXRhIGJlZm9yZSBhc3NvY2lhdGVkIFdBTCByZWNvcmRz LiAgVGhpcyBpcyB0aGUgc2FtZSBhY3Rpb24KIAkgKiBwZXJmb3JtZWQgZHVyaW5nIEZsdXNoQnVm ZmVyKCkgaW4gdGhlIG1haW4gYnVmZmVyIG1hbmFnZXIuCiAJICovCi0JaWYgKHNoYXJlZC0+Z3Jv dXBfbHNuICE9IE5VTEwpCisJbHNuID0gUGFnZUdldExTTihwYWdlKTsKKwlpZiAoIVhMb2dSZWNQ dHJJc0ludmFsaWQobHNuKSkKIAl7CiAJCS8qCi0JCSAqIFdlIG11c3QgZGV0ZXJtaW5lIHRoZSBs YXJnZXN0IGFzeW5jLWNvbW1pdCBMU04gZm9yIHRoZSBwYWdlLiBUaGlzCi0JCSAqIGlzIGEgYml0 IHRlZGlvdXMsIGJ1dCBzaW5jZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBpcyBhIHNsb3cgcGF0aAot CQkgKiBhbnl3YXksIGl0IHNlZW1zIGJldHRlciB0byBkbyB0aGlzIGhlcmUgdGhhbiB0byBtYWlu dGFpbiBhIHBlci1wYWdlCi0JCSAqIExTTiB2YXJpYWJsZSAod2hpY2gnZCBuZWVkIGFuIGV4dHJh IGNvbXBhcmlzb24gaW4gdGhlCi0JCSAqIHRyYW5zYWN0aW9uLWNvbW1pdCBwYXRoKS4KKwkJICog QXMgbm90ZWQgYWJvdmUsIGVsb2coRVJST1IpIGlzIG5vdCBhY2NlcHRhYmxlIGhlcmUsIHNvIGlm CisJCSAqIFhMb2dGbHVzaCB3ZXJlIHRvIGZhaWwsIHdlIG11c3QgUEFOSUMuICBUaGlzIGlzbid0 IG11Y2ggb2YgYQorCQkgKiByZXN0cmljdGlvbiBiZWNhdXNlIFhMb2dGbHVzaCBpcyBqdXN0IGFi b3V0IGFsbCBjcml0aWNhbAorCQkgKiBzZWN0aW9uIGFueXdheSwgYnV0IGxldCdzIG1ha2Ugc3Vy ZS4KIAkJICovCi0JCVhMb2dSZWNQdHIJbWF4X2xzbjsKLQkJaW50CQkJbHNuaW5kZXgsCi0JCQkJ CWxzbm9mZjsKLQotCQlsc25pbmRleCA9IHNsb3RubyAqIHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJf cGFnZTsKLQkJbWF4X2xzbiA9IHNoYXJlZC0+Z3JvdXBfbHNuW2xzbmluZGV4KytdOwotCQlmb3Ig KGxzbm9mZiA9IDE7IGxzbm9mZiA8IHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZTsgbHNub2Zm KyspCi0JCXsKLQkJCVhMb2dSZWNQdHIJdGhpc19sc24gPSBzaGFyZWQtPmdyb3VwX2xzbltsc25p bmRleCsrXTsKLQotCQkJaWYgKG1heF9sc24gPCB0aGlzX2xzbikKLQkJCQltYXhfbHNuID0gdGhp c19sc247Ci0JCX0KLQotCQlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQobWF4X2xzbikpCi0JCXsK LQkJCS8qCi0JCQkgKiBBcyBub3RlZCBhYm92ZSwgZWxvZyhFUlJPUikgaXMgbm90IGFjY2VwdGFi bGUgaGVyZSwgc28gaWYKLQkJCSAqIFhMb2dGbHVzaCB3ZXJlIHRvIGZhaWwsIHdlIG11c3QgUEFO SUMuICBUaGlzIGlzbid0IG11Y2ggb2YgYQotCQkJICogcmVzdHJpY3Rpb24gYmVjYXVzZSBYTG9n Rmx1c2ggaXMganVzdCBhYm91dCBhbGwgY3JpdGljYWwKLQkJCSAqIHNlY3Rpb24gYW55d2F5LCBi dXQgbGV0J3MgbWFrZSBzdXJlLgotCQkJICovCi0JCQlTVEFSVF9DUklUX1NFQ1RJT04oKTsKLQkJ CVhMb2dGbHVzaChtYXhfbHNuKTsKLQkJCUVORF9DUklUX1NFQ1RJT04oKTsKLQkJfQorCQlTVEFS VF9DUklUX1NFQ1RJT04oKTsKKwkJWExvZ0ZsdXNoKGxzbik7CisJCUVORF9DUklUX1NFQ1RJT04o KTsKIAl9CiAKIAkvKgpAQCAtODk5LDYgKzg0OSw4IEBAIFNscnVQaHlzaWNhbFdyaXRlUGFnZShT bHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEp CiAJCX0KIAl9CiAKKwlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHNoYXJlZC0+cGFnZV9idWZmZXJb c2xvdG5vXSwgcGFnZW5vKTsKKwogCWVycm5vID0gMDsKIAlwZ3N0YXRfcmVwb3J0X3dhaXRfc3Rh cnQoV0FJVF9FVkVOVF9TTFJVX1dSSVRFKTsKIAlpZiAocGdfcHdyaXRlKGZkLCBzaGFyZWQtPnBh Z2VfYnVmZmVyW3Nsb3Rub10sIEJMQ0tTWiwgb2Zmc2V0KSAhPSBCTENLU1opCkBAIC0xMDE5LDYg Kzk3MSwxMyBAQCBTbHJ1UmVwb3J0SU9FcnJvcihTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBU cmFuc2FjdGlvbklkIHhpZCkKIAkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IGNsb3NlIGZpbGUg XCIlc1wiOiAlbS4iLAogCQkJCQkJCSAgIHBhdGgpKSk7CiAJCQlicmVhazsKKwkJY2FzZSBTTFJV X0RBVEFfQ09SUlVQVEVEOgorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9EQVRBX0NPUlJVUFRFRCksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVz IG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKKwkJCQkJIGVycmRldGFpbCgiSW52YWxpZCBwYWdl IGZyb20gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkLiIsCisJCQkJCQkJICAgcGF0aCwgb2Zmc2V0 KSkpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBjYW4ndCBnZXQgaGVyZSwgd2UgdHJ1 c3QgKi8KIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgU2ltcGxlTHJ1IGVycm9yIGNhdXNl OiAlZCIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJhbnMuYwppbmRleCA2NDY3M2VhZWY2 Li4wZTA3MjgxOTc5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0 cmFucy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMKQEAgLTMy LDYgKzMyLDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc3VidHJhbnMuaCIKICNpbmNsdWRlICJhY2Nl c3MvdHJhbnNhbS5oIgogI2luY2x1ZGUgInBnX3RyYWNlLmgiCisjaW5jbHVkZSAic3RvcmFnZS9i dWZwYWdlLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogCiAKQEAgLTQ5LDcgKzUwLDcg QEAKICAqLwogCiAvKiBXZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIHhhY3QgKi8KLSNkZWZpbmUgU1VC VFJBTlNfWEFDVFNfUEVSX1BBR0UgKEJMQ0tTWiAvIHNpemVvZihUcmFuc2FjdGlvbklkKSkKKyNk ZWZpbmUgU1VCVFJBTlNfWEFDVFNfUEVSX1BBR0UgKENhcGFjaXR5T2ZQYWdlQ29udGVudHMgLyBz aXplb2YoVHJhbnNhY3Rpb25JZCkpCiAKIC8qCiAgKiBBbHRob3VnaCB3ZSByZXR1cm4gYW4gaW50 NjQgdGhlIGFjdHVhbCB2YWx1ZSBjYW4ndCBjdXJyZW50bHkgZXhjZWVkCkBAIC05Myw3ICs5NCw3 IEBAIFN1YlRyYW5zU2V0UGFyZW50KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFuc2FjdGlvbklkIHBh cmVudCkKIAlMV0xvY2tBY3F1aXJlKFN1YnRyYW5zU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7CiAK IAlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShTdWJUcmFuc0N0bCwgcGFnZW5vLCB0cnVlLCB4 aWQpOwotCXB0ciA9IChUcmFuc2FjdGlvbklkICopIFN1YlRyYW5zQ3RsLT5zaGFyZWQtPnBhZ2Vf YnVmZmVyW3Nsb3Rub107CisJcHRyID0gKFRyYW5zYWN0aW9uSWQgKikgUGFnZUdldENvbnRlbnRz KFN1YlRyYW5zQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10pOwogCXB0ciArPSBlbnRy eW5vOwogCiAJLyoKQEAgLTEzMyw3ICsxMzQsNyBAQCBTdWJUcmFuc0dldFBhcmVudChUcmFuc2Fj dGlvbklkIHhpZCkKIAkvKiBsb2NrIGlzIGFjcXVpcmVkIGJ5IFNpbXBsZUxydVJlYWRQYWdlX1Jl YWRPbmx5ICovCiAKIAlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShTdWJUcmFu c0N0bCwgcGFnZW5vLCB4aWQpOwotCXB0ciA9IChUcmFuc2FjdGlvbklkICopIFN1YlRyYW5zQ3Rs LT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJcHRyID0gKFRyYW5zYWN0aW9uSWQgKikg UGFnZUdldENvbnRlbnRzKFN1YlRyYW5zQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10p OwogCXB0ciArPSBlbnRyeW5vOwogCiAJcGFyZW50ID0gKnB0cjsKQEAgLTE5MywxNCArMTk0LDE0 IEBAIFN1YlRyYW5zR2V0VG9wbW9zdFRyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkKQogU2l6 ZQogU1VCVFJBTlNTaG1lbVNpemUodm9pZCkKIHsKLQlyZXR1cm4gU2ltcGxlTHJ1U2htZW1TaXpl KE5VTV9TVUJUUkFOU19CVUZGRVJTLCAwKTsKKwlyZXR1cm4gU2ltcGxlTHJ1U2htZW1TaXplKE5V TV9TVUJUUkFOU19CVUZGRVJTKTsKIH0KIAogdm9pZAogU1VCVFJBTlNTaG1lbUluaXQodm9pZCkK IHsKIAlTdWJUcmFuc0N0bC0+UGFnZVByZWNlZGVzID0gU3ViVHJhbnNQYWdlUHJlY2VkZXM7Ci0J U2ltcGxlTHJ1SW5pdChTdWJUcmFuc0N0bCwgIlN1YnRyYW5zIiwgTlVNX1NVQlRSQU5TX0JVRkZF UlMsIDAsCisJU2ltcGxlTHJ1SW5pdChTdWJUcmFuc0N0bCwgIlN1YnRyYW5zIiwgTlVNX1NVQlRS QU5TX0JVRkZFUlMsCiAJCQkJICBTdWJ0cmFuc1NMUlVMb2NrLCAicGdfc3VidHJhbnMiLAogCQkJ CSAgTFdUUkFOQ0hFX1NVQlRSQU5TX0JVRkZFUiwgU1lOQ19IQU5ETEVSX05PTkUsCiAJCQkJICBm YWxzZSk7CkBAIC0zMDUsNyArMzA2LDYgQEAgQ2hlY2tQb2ludFNVQlRSQU5TKHZvaWQpCiAJVFJB Q0VfUE9TVEdSRVNRTF9TVUJUUkFOU19DSEVDS1BPSU5UX0RPTkUodHJ1ZSk7CiB9CiAKLQogLyoK ICAqIE1ha2Ugc3VyZSB0aGF0IFNVQlRSQU5TIGhhcyByb29tIGZvciBhIG5ld2x5LWFsbG9jYXRl ZCBYSUQuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKaW5kZXggMjY0ZjI1YThmOS4uNmIxZmYwZjUxNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9hc3luYy5jCkBAIC0xNDAsNiArMTQwLDcgQEAKICNpbmNsdWRlICJsaWJwcS9s aWJwcS5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMu aCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIK QEAgLTE2Miw3ICsxNjMsNyBAQAogICogdGhhbiB0aGF0LCBzbyBjaGFuZ2VzIGluIHRoYXQgZGF0 YSBzdHJ1Y3R1cmUgd29uJ3QgYWZmZWN0IHVzZXItdmlzaWJsZQogICogcmVzdHJpY3Rpb25zLgog ICovCi0jZGVmaW5lIE5PVElGWV9QQVlMT0FEX01BWF9MRU5HVEgJKEJMQ0tTWiAtIE5BTUVEQVRB TEVOIC0gMTI4KQorI2RlZmluZSBOT1RJRllfUEFZTE9BRF9NQVhfTEVOR1RICShDYXBhY2l0eU9m UGFnZUNvbnRlbnRzIC0gTkFNRURBVEFMRU4gLSAxMjgpCiAKIC8qCiAgKiBTdHJ1Y3QgcmVwcmVz ZW50aW5nIGFuIGVudHJ5IGluIHRoZSBnbG9iYWwgbm90aWZ5IHF1ZXVlCkBAIC0zMTEsNyArMzEy LDcgQEAgc3RhdGljIFNscnVDdGxEYXRhIE5vdGlmeUN0bERhdGE7CiAKICNkZWZpbmUgTm90aWZ5 Q3RsCQkJCQkoJk5vdGlmeUN0bERhdGEpCiAjZGVmaW5lIFFVRVVFX1BBR0VTSVpFCQkJCUJMQ0tT WgotCisjZGVmaW5lIFFVRVVFX1BBR0VfQ0FQQUNJVFkJCQkoUVVFVUVfUEFHRVNJWkUgLSBNQVhB TElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSkpCiAjZGVmaW5lIFFVRVVFX0ZVTExfV0FSTl9JTlRF UlZBTAk1MDAwCS8qIHdhcm4gYXQgbW9zdCBvbmNlIGV2ZXJ5IDVzICovCiAKIC8qCkBAIC00OTIs NyArNDkzLDcgQEAgQXN5bmNTaG1lbVNpemUodm9pZCkKIAlzaXplID0gbXVsX3NpemUoTWF4QmFj a2VuZHMgKyAxLCBzaXplb2YoUXVldWVCYWNrZW5kU3RhdHVzKSk7CiAJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIG9mZnNldG9mKEFzeW5jUXVldWVDb250cm9sLCBiYWNrZW5kKSk7CiAKLQlzaXplID0g YWRkX3NpemUoc2l6ZSwgU2ltcGxlTHJ1U2htZW1TaXplKE5VTV9OT1RJRllfQlVGRkVSUywgMCkp OworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVTaG1lbVNpemUoTlVNX05PVElGWV9C VUZGRVJTKSk7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KQEAgLTU0MSw3ICs1NDIsNyBAQCBBc3luY1No bWVtSW5pdCh2b2lkKQogCSAqIG5hbWVzIGFyZSB1c2VkIGluIG9yZGVyIHRvIGF2b2lkIHdyYXBh cm91bmQuCiAJICovCiAJTm90aWZ5Q3RsLT5QYWdlUHJlY2VkZXMgPSBhc3luY1F1ZXVlUGFnZVBy ZWNlZGVzOwotCVNpbXBsZUxydUluaXQoTm90aWZ5Q3RsLCAiTm90aWZ5IiwgTlVNX05PVElGWV9C VUZGRVJTLCAwLAorCVNpbXBsZUxydUluaXQoTm90aWZ5Q3RsLCAiTm90aWZ5IiwgTlVNX05PVElG WV9CVUZGRVJTLAogCQkJCSAgTm90aWZ5U0xSVUxvY2ssICJwZ19ub3RpZnkiLCBMV1RSQU5DSEVf Tk9USUZZX0JVRkZFUiwKIAkJCQkgIFNZTkNfSEFORExFUl9OT05FLCB0cnVlKTsKIApAQCAtMTMw MSwxNCArMTMwMiwxNCBAQCBhc3luY1F1ZXVlQWR2YW5jZSh2b2xhdGlsZSBRdWV1ZVBvc2l0aW9u ICpwb3NpdGlvbiwgaW50IGVudHJ5TGVuZ3RoKQogCSAqIHdyaXR0ZW4gb3IgcmVhZC4KIAkgKi8K IAlvZmZzZXQgKz0gZW50cnlMZW5ndGg7Ci0JQXNzZXJ0KG9mZnNldCA8PSBRVUVVRV9QQUdFU0la RSk7CisJQXNzZXJ0KG9mZnNldCA8PSBRVUVVRV9QQUdFX0NBUEFDSVRZKTsKIAogCS8qCiAJICog SW4gYSBzZWNvbmQgc3RlcCBjaGVjayBpZiBhbm90aGVyIGVudHJ5IGNhbiBwb3NzaWJseSBiZSB3 cml0dGVuIHRvIHRoZQogCSAqIHBhZ2UuIElmIHNvLCBzdGF5IGhlcmUsIHdlIGhhdmUgcmVhY2hl ZCB0aGUgbmV4dCBwb3NpdGlvbi4gSWYgbm90LCB0aGVuCiAJICogd2UgbmVlZCB0byBtb3ZlIG9u IHRvIHRoZSBuZXh0IHBhZ2UuCiAJICovCi0JaWYgKG9mZnNldCArIFFVRVVFQUxJR04oQXN5bmNR dWV1ZUVudHJ5RW1wdHlTaXplKSA+IFFVRVVFX1BBR0VTSVpFKQorCWlmIChvZmZzZXQgKyBRVUVV RUFMSUdOKEFzeW5jUXVldWVFbnRyeUVtcHR5U2l6ZSkgPiBRVUVVRV9QQUdFX0NBUEFDSVRZKQog CXsKIAkJcGFnZW5vKys7CiAJCW9mZnNldCA9IDA7CkBAIC0xNDA4LDcgKzE0MDksNyBAQCBhc3lu Y1F1ZXVlQWRkRW50cmllcyhMaXN0Q2VsbCAqbmV4dE5vdGlmeSkKIAkJb2Zmc2V0ID0gUVVFVUVf UE9TX09GRlNFVChxdWV1ZV9oZWFkKTsKIAogCQkvKiBDaGVjayB3aGV0aGVyIHRoZSBlbnRyeSBy ZWFsbHkgZml0cyBvbiB0aGUgY3VycmVudCBwYWdlICovCi0JCWlmIChvZmZzZXQgKyBxZS5sZW5n dGggPD0gUVVFVUVfUEFHRVNJWkUpCisJCWlmIChvZmZzZXQgKyBxZS5sZW5ndGggPD0gUVVFVUVf UEFHRV9DQVBBQ0lUWSkKIAkJewogCQkJLyogT0ssIHNvIGFkdmFuY2UgbmV4dE5vdGlmeSBwYXN0 IHRoaXMgaXRlbSAqLwogCQkJbmV4dE5vdGlmeSA9IGxuZXh0KHBlbmRpbmdOb3RpZmllcy0+ZXZl bnRzLCBuZXh0Tm90aWZ5KTsKQEAgLTE0MjAsMTQgKzE0MjEsMTQgQEAgYXN5bmNRdWV1ZUFkZEVu dHJpZXMoTGlzdENlbGwgKm5leHROb3RpZnkpCiAJCQkgKiBvbmx5IGNoZWNrIGRib2lkIGFuZCBz aW5jZSBpdCB3b24ndCBtYXRjaCBhbnkgcmVhZGVyJ3MgZGF0YWJhc2UKIAkJCSAqIE9JRCwgdGhl eSB3aWxsIGlnbm9yZSB0aGlzIGVudHJ5IGFuZCBtb3ZlIG9uLgogCQkJICovCi0JCQlxZS5sZW5n dGggPSBRVUVVRV9QQUdFU0laRSAtIG9mZnNldDsKKwkJCXFlLmxlbmd0aCA9IFFVRVVFX1BBR0Vf Q0FQQUNJVFkgLSBvZmZzZXQ7CiAJCQlxZS5kYm9pZCA9IEludmFsaWRPaWQ7CiAJCQlxZS5kYXRh WzBdID0gJ1wwJzsJLyogZW1wdHkgY2hhbm5lbCAqLwogCQkJcWUuZGF0YVsxXSA9ICdcMCc7CS8q IGVtcHR5IHBheWxvYWQgKi8KIAkJfQogCiAJCS8qIE5vdyBjb3B5IHFlIGludG8gdGhlIHNoYXJl ZCBidWZmZXIgcGFnZSAqLwotCQltZW1jcHkoTm90aWZ5Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVy W3Nsb3Rub10gKyBvZmZzZXQsCisJCW1lbWNweShQYWdlR2V0Q29udGVudHMoTm90aWZ5Q3RsLT5z aGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10pICsgb2Zmc2V0LAogCQkJICAgJnFlLAogCQkJICAg cWUubGVuZ3RoKTsKIApAQCAtMTk0NywxMCArMTk0OCwxMCBAQCBhc3luY1F1ZXVlUmVhZEFsbE5v dGlmaWNhdGlvbnModm9pZCkKIAkJCWVsc2UKIAkJCXsKIAkJCQkvKiBmZXRjaCBhbGwgdGhlIHJl c3Qgb2YgdGhlIHBhZ2UgKi8KLQkJCQljb3B5c2l6ZSA9IFFVRVVFX1BBR0VTSVpFIC0gY3Vyb2Zm c2V0OworCQkJCWNvcHlzaXplID0gUVVFVUVfUEFHRV9DQVBBQ0lUWSAtIGN1cm9mZnNldDsKIAkJ CX0KLQkJCW1lbWNweShwYWdlX2J1ZmZlci5idWYgKyBjdXJvZmZzZXQsCi0JCQkJICAgTm90aWZ5 Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBjdXJvZmZzZXQsCisJCQltZW1jcHko UGFnZUdldENvbnRlbnRzKHBhZ2VfYnVmZmVyLmJ1ZikgKyBjdXJvZmZzZXQsCisJCQkJICAgUGFn ZUdldENvbnRlbnRzKE5vdGlmeUN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dKSArIGN1 cm9mZnNldCwKIAkJCQkgICBjb3B5c2l6ZSk7CiAJCQkvKiBSZWxlYXNlIGxvY2sgdGhhdCB3ZSBn b3QgZnJvbSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSgpICovCiAJCQlMV0xvY2tSZWxlYXNl KE5vdGlmeVNMUlVMb2NrKTsKQEAgLTIwMjEsNyArMjAyMiw3IEBAIGFzeW5jUXVldWVQcm9jZXNz UGFnZUVudHJpZXModm9sYXRpbGUgUXVldWVQb3NpdGlvbiAqY3VycmVudCwKIAkJaWYgKFFVRVVF X1BPU19FUVVBTCh0aGlzZW50cnksIHN0b3ApKQogCQkJYnJlYWs7CiAKLQkJcWUgPSAoQXN5bmNR dWV1ZUVudHJ5ICopIChwYWdlX2J1ZmZlciArIFFVRVVFX1BPU19PRkZTRVQodGhpc2VudHJ5KSk7 CisJCXFlID0gKEFzeW5jUXVldWVFbnRyeSAqKSAoUGFnZUdldENvbnRlbnRzKHBhZ2VfYnVmZmVy KSArIFFVRVVFX1BPU19PRkZTRVQodGhpc2VudHJ5KSk7CiAKIAkJLyoKIAkJICogQWR2YW5jZSAq Y3VycmVudCBvdmVyIHRoaXMgbWVzc2FnZSwgcG9zc2libHkgdG8gdGhlIG5leHQgcGFnZS4gQXMK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwppbmRleCBmZjhkZjdjMGJjLi4zOTEyOWJj ZTk4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCkBAIC0yMDQsNiArMjA0LDcg QEAKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3J0L3BnX2xmaW5kLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIKICNp bmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRl X2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgpAQCAtMzIyLDggKzMyMyw4 IEBAIHN0YXRpYyBTbHJ1Q3RsRGF0YSBTZXJpYWxTbHJ1Q3RsRGF0YTsKICNkZWZpbmUgU2VyaWFs U2xydUN0bAkJCSgmU2VyaWFsU2xydUN0bERhdGEpCiAKICNkZWZpbmUgU0VSSUFMX1BBR0VTSVpF CQkJQkxDS1NaCi0jZGVmaW5lIFNFUklBTF9FTlRSWVNJWkUJCQlzaXplb2YoU2VyQ29tbWl0U2Vx Tm8pCi0jZGVmaW5lIFNFUklBTF9FTlRSSUVTUEVSUEFHRQkoU0VSSUFMX1BBR0VTSVpFIC8gU0VS SUFMX0VOVFJZU0laRSkKKyNkZWZpbmUgU0VSSUFMX0VOVFJZU0laRQkJc2l6ZW9mKFNlckNvbW1p dFNlcU5vKQorI2RlZmluZSBTRVJJQUxfRU5UUklFU1BFUlBBR0UJKFNFUklBTF9QQUdFU0laRSAt IE1BWEFMSUdOKFNpemVPZlBhZ2VIZWFkZXJEYXRhKSAvIFNFUklBTF9FTlRSWVNJWkUpCiAKIC8q CiAgKiBTZXQgbWF4aW11bSBwYWdlcyBiYXNlZCBvbiB0aGUgbnVtYmVyIG5lZWRlZCB0byB0cmFj ayBhbGwgdHJhbnNhY3Rpb25zLgpAQCAtMzMzLDcgKzMzNCw3IEBAIHN0YXRpYyBTbHJ1Q3RsRGF0 YSBTZXJpYWxTbHJ1Q3RsRGF0YTsKICNkZWZpbmUgU2VyaWFsTmV4dFBhZ2UocGFnZSkgKCgocGFn ZSkgPj0gU0VSSUFMX01BWF9QQUdFKSA/IDAgOiAocGFnZSkgKyAxKQogCiAjZGVmaW5lIFNlcmlh bFZhbHVlKHNsb3RubywgeGlkKSAoKigoU2VyQ29tbWl0U2VxTm8gKikgXAotCShTZXJpYWxTbHJ1 Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBcCisJKFBhZ2VHZXRDb250ZW50cyhT ZXJpYWxTbHJ1Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10pICsgXAogCSgoKCh1aW50 MzIpICh4aWQpKSAlIFNFUklBTF9FTlRSSUVTUEVSUEFHRSkgKiBTRVJJQUxfRU5UUllTSVpFKSkp KQogCiAjZGVmaW5lIFNlcmlhbFBhZ2UoeGlkKQkoKCh1aW50MzIpICh4aWQpKSAvIFNFUklBTF9F TlRSSUVTUEVSUEFHRSkKQEAgLTc4NSwxMCArNzg2LDEzIEBAIFNlcmlhbFBhZ2VQcmVjZWRlc0xv Z2ljYWxseVVuaXRUZXN0cyh2b2lkKQogCSAqIHJlcXVpcmVzIGJ1cm5pbmcgfjJCIFhJRHMgaW4g c2luZ2xlLXVzZXIgbW9kZSwgYSBuZWdsaWdpYmxlCiAJICogcG9zc2liaWxpdHkuICBNb3Jlb3Zl ciwgaWYgaXQgZG9lcyBoYXBwZW4sIHRoZSBjb25zZXF1ZW5jZSB3b3VsZCBiZQogCSAqIG1pbGQs IG5hbWVseSBhIG5ldyB0cmFuc2FjdGlvbiBmYWlsaW5nIGluIFNpbXBsZUxydVJlYWRQYWdlKCku CisJICoKKwkgKiBOT1RFOiAgQWZ0ZXIgYWRkaW5nIHRoZSBwYWdlIGhlYWRlciwgdGhlIGRlZmVj dCBhZmZlY3RzIHR3byBwYWdlcy4KKwkgKiBXZSBub3cgYXNzZXJ0IGNvcnJlY3QgdHJlYXRtZW50 IG9mIGl0cyBzZWNvbmQgdG8gcHJpb3IgcGFnZS4KIAkgKi8KIAloZWFkUGFnZSA9IG9sZGVzdFBh Z2U7CiAJdGFyZ2V0UGFnZSA9IG5ld2VzdFBhZ2U7Ci0JQXNzZXJ0KFNlcmlhbFBhZ2VQcmVjZWRl c0xvZ2ljYWxseShoZWFkUGFnZSwgdGFyZ2V0UGFnZSAtIDEpKTsKKwlBc3NlcnQoU2VyaWFsUGFn ZVByZWNlZGVzTG9naWNhbGx5KGhlYWRQYWdlLCB0YXJnZXRQYWdlIC0gMikpOwogI2lmIDAKIAlB c3NlcnQoU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5KGhlYWRQYWdlLCB0YXJnZXRQYWdlKSk7 CiAjZW5kaWYKQEAgLTgwOCw3ICs4MTIsNyBAQCBTZXJpYWxJbml0KHZvaWQpCiAJICovCiAJU2Vy aWFsU2xydUN0bC0+UGFnZVByZWNlZGVzID0gU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5Owog CVNpbXBsZUxydUluaXQoU2VyaWFsU2xydUN0bCwgIlNlcmlhbCIsCi0JCQkJICBOVU1fU0VSSUFM X0JVRkZFUlMsIDAsIFNlcmlhbFNMUlVMb2NrLCAicGdfc2VyaWFsIiwKKwkJCQkgIE5VTV9TRVJJ QUxfQlVGRkVSUywgU2VyaWFsU0xSVUxvY2ssICJwZ19zZXJpYWwiLAogCQkJCSAgTFdUUkFOQ0hF X1NFUklBTF9CVUZGRVIsIFNZTkNfSEFORExFUl9OT05FLAogCQkJCSAgZmFsc2UpOwogI2lmZGVm IFVTRV9BU1NFUlRfQ0hFQ0tJTkcKQEAgLTEzNDgsNyArMTM1Miw3IEBAIFByZWRpY2F0ZUxvY2tT aG1lbVNpemUodm9pZCkKIAogCS8qIFNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcyBmb3IgU0xSVSB0 cmFja2luZyBvZiBvbGQgY29tbWl0dGVkIHhpZHMuICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUs IHNpemVvZihTZXJpYWxDb250cm9sRGF0YSkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1w bGVMcnVTaG1lbVNpemUoTlVNX1NFUklBTF9CVUZGRVJTLCAwKSk7CisJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIFNpbXBsZUxydVNobWVtU2l6ZShOVU1fU0VSSUFMX0JVRkZFUlMpKTsKIAogCXJldHVy biBzaXplOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2Uu YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMKaW5kZXggOWEzMDJkZGMzMC4u NGMwMDI0OTBhMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2Uu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvYnVmcGFnZS5jCkBAIC01OSw2ICs1OSwz MSBAQCBQYWdlSW5pdChQYWdlIHBhZ2UsIFNpemUgcGFnZVNpemUsIFNpemUgc3BlY2lhbFNpemUp CiAJLyogcC0+cGRfcHJ1bmVfeGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CQlkb25lIGJ5IGFi b3ZlIE1lbVNldCAqLwogfQogCisvKgorICogUGFnZUluaXRTTFJVCisgKgkJSW5pdGlhbGl6ZXMg dGhlIGNvbnRlbnRzIG9mIGFuIFNMUlUgcGFnZS4KKyAqCQlOb3RlIHRoYXQgd2UgZG9uJ3QgY2Fs Y3VsYXRlIGFuIGluaXRpYWwgY2hlY2tzdW0gaGVyZTsgdGhhdCdzIG5vdCBkb25lCisgKgkJdW50 aWwgaXQncyB0aW1lIHRvIHdyaXRlLgorICovCit2b2lkCitQYWdlSW5pdFNMUlUoUGFnZSBwYWdl LCBTaXplIHBhZ2VTaXplLCBTaXplIHNwZWNpYWxTaXplKQoreworCVBhZ2VIZWFkZXIJcCA9IChQ YWdlSGVhZGVyKSBwYWdlOworCisJc3BlY2lhbFNpemUgPSBNQVhBTElHTihzcGVjaWFsU2l6ZSk7 CisKKwlBc3NlcnQocGFnZVNpemUgPT0gQkxDS1NaKTsKKwlBc3NlcnQocGFnZVNpemUgPiBzcGVj aWFsU2l6ZSArIFNpemVPZlBhZ2VIZWFkZXJEYXRhKTsKKworCS8qIE1ha2Ugc3VyZSBhbGwgZmll bGRzIG9mIHBhZ2UgYXJlIHplcm8sIGFzIHdlbGwgYXMgdW51c2VkIHNwYWNlICovCisJTWVtU2V0 KHAsIDAsIHBhZ2VTaXplKTsKKworCXAtPnBkX2ZsYWdzID0gMDsKKwlwLT5wZF9sb3dlciA9IFNp emVPZlBhZ2VIZWFkZXJEYXRhOworCXAtPnBkX3VwcGVyID0gcGFnZVNpemUgLSBzcGVjaWFsU2l6 ZTsKKwlwLT5wZF9zcGVjaWFsID0gcGFnZVNpemUgLSBzcGVjaWFsU2l6ZTsKKwlQYWdlU2V0UGFn ZVNpemVBbmRWZXJzaW9uKHBhZ2UsIHBhZ2VTaXplLCBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lP Tik7Cit9CiAKIC8qCiAgKiBQYWdlSXNWZXJpZmllZEV4dGVuZGVkCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2NoZWNrc3Vtcy9wZ19jaGVja3N1bXMuYyBiL3NyYy9iaW4vcGdfY2hlY2tzdW1zL3Bn X2NoZWNrc3Vtcy5jCmluZGV4IDY1NDNkOWNlMDguLmNmYmMyMzk4NDMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfY2hlY2tzdW1zL3BnX2NoZWNrc3Vtcy5jCisrKyBiL3NyYy9iaW4vcGdfY2hlY2tz dW1zL3BnX2NoZWNrc3Vtcy5jCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlIDxkaXJlbnQu aD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSA8 dGltZS5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC01 ODksMTIgKzU5MCwyMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsKIAkJCXRv dGFsX3NpemUgPSBzY2FuX2RpcmVjdG9yeShEYXRhRGlyLCAiZ2xvYmFsIiwgdHJ1ZSk7CiAJCQl0 b3RhbF9zaXplICs9IHNjYW5fZGlyZWN0b3J5KERhdGFEaXIsICJiYXNlIiwgdHJ1ZSk7CisJCQl0 b3RhbF9zaXplICs9IHNjYW5fZGlyZWN0b3J5KERhdGFEaXIsICJwZ19jb21taXRfdHMiLCB0cnVl KTsKKwkJCXRvdGFsX3NpemUgKz0gc2Nhbl9kaXJlY3RvcnkoRGF0YURpciwgInBnX211bHRpeGFj dCIsIHRydWUpOworCQkJdG90YWxfc2l6ZSArPSBzY2FuX2RpcmVjdG9yeShEYXRhRGlyLCAicGdf c2VyaWFsIiwgdHJ1ZSk7CiAJCQl0b3RhbF9zaXplICs9IHNjYW5fZGlyZWN0b3J5KERhdGFEaXIs ICJwZ190YmxzcGMiLCB0cnVlKTsKKwkJCXRvdGFsX3NpemUgKz0gc2Nhbl9kaXJlY3RvcnkoRGF0 YURpciwgInBnX3hhY3QiLCB0cnVlKTsKIAkJfQogCiAJCSh2b2lkKSBzY2FuX2RpcmVjdG9yeShE YXRhRGlyLCAiZ2xvYmFsIiwgZmFsc2UpOwogCQkodm9pZCkgc2Nhbl9kaXJlY3RvcnkoRGF0YURp ciwgImJhc2UiLCBmYWxzZSk7CisJCSh2b2lkKSBzY2FuX2RpcmVjdG9yeShEYXRhRGlyLCAicGdf Y29tbWl0X3RzIiwgZmFsc2UpOworCQkodm9pZCkgc2Nhbl9kaXJlY3RvcnkoRGF0YURpciwgInBn X211bHRpeGFjdCIsIGZhbHNlKTsKKwkJKHZvaWQpIHNjYW5fZGlyZWN0b3J5KERhdGFEaXIsICJw Z19zZXJpYWwiLCBmYWxzZSk7CiAJCSh2b2lkKSBzY2FuX2RpcmVjdG9yeShEYXRhRGlyLCAicGdf dGJsc3BjIiwgZmFsc2UpOworCQkodm9pZCkgc2Nhbl9kaXJlY3RvcnkoRGF0YURpciwgInBnX3hh Y3QiLCBmYWxzZSk7CiAKIAkJaWYgKHNob3dwcm9ncmVzcykKIAkJCXByb2dyZXNzX3JlcG9ydCh0 cnVlKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwgYi9z cmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsCmluZGV4IDE4ZDA4ODJjYjEuLmFlNzQ4 MjhlNDQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwKKysr IGIvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwMV9iYXNpYy5wbApAQCAtMjA2LDcgKzIwNiw3IEBA IHB1c2ggQGNtZCwKICAgc3ByaW50ZigiJWQsJWQiLCBoZXgoJGZpbGVzWzBdKSA9PSAwID8gMyA6 IGhleCgkZmlsZXNbMF0pLCBoZXgoJGZpbGVzWy0xXSkpOwogCiBAZmlsZXMgPSBnZXRfc2xydV9m aWxlcygncGdfbXVsdGl4YWN0L29mZnNldHMnKTsKLSRtdWx0ID0gMzIgKiAkYmxja3N6IC8gNDsK KyRtdWx0ID0gMzIgKiAoJGJsY2tzeiAtIDI0KSAvIDQ7CiAjIC1tIGFyZ3VtZW50IGlzICJuZXcs b2xkIgogcHVzaCBAY21kLCAnLW0nLAogICBzcHJpbnRmKCIlZCwlZCIsCkBAIC0yMTQsMTEgKzIx NCwxMSBAQCBwdXNoIEBjbWQsICctbScsCiAJaGV4KCRmaWxlc1swXSkgPT0gMCA/IDEgOiBoZXgo JGZpbGVzWzBdICogJG11bHQpKTsKIAogQGZpbGVzID0gZ2V0X3NscnVfZmlsZXMoJ3BnX211bHRp eGFjdC9tZW1iZXJzJyk7Ci0kbXVsdCA9IDMyICogaW50KCRibGNrc3ogLyAyMCkgKiA0OworJG11 bHQgPSAzMiAqIGludCgoJGJsY2tzeiAtIDI0KSAvIDIwKSAqIDQ7CiBwdXNoIEBjbWQsICctTycs IChoZXgoJGZpbGVzWy0xXSkgKyAxKSAqICRtdWx0OwogCiBAZmlsZXMgPSBnZXRfc2xydV9maWxl cygncGdfeGFjdCcpOwotJG11bHQgPSAzMiAqICRibGNrc3ogKiA0OworJG11bHQgPSAzMiAqICgk Ymxja3N6IC0gMjQpICogNDsKIHB1c2ggQGNtZCwKICAgJy11JywgKGhleCgkZmlsZXNbMF0pID09 IDAgPyAzIDogaGV4KCRmaWxlc1swXSkgKiAkbXVsdCksCiAgICcteCcsICgoaGV4KCRmaWxlc1st MV0pICsgMSkgKiAkbXVsdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5o IGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaAppbmRleCAwOTFlMjIwMmM5Li4yNDczMzE2NmI4 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9zbHJ1LmgKQEAgLTY4LDE3ICs2OCw2IEBAIHR5cGVkZWYgc3RydWN0IFNscnVTaGFy ZWREYXRhCiAJaW50CQkgICAqcGFnZV9scnVfY291bnQ7CiAJTFdMb2NrUGFkZGVkICpidWZmZXJf bG9ja3M7CiAKLQkvKgotCSAqIE9wdGlvbmFsIGFycmF5IG9mIFdBTCBmbHVzaCBMU05zIGFzc29j aWF0ZWQgd2l0aCBlbnRyaWVzIGluIHRoZSBTTFJVCi0JICogcGFnZXMuICBJZiBub3QgemVyby9O VUxMLCB3ZSBtdXN0IGZsdXNoIFdBTCBiZWZvcmUgd3JpdGluZyBwYWdlcyAodHJ1ZQotCSAqIGZv ciBwZ194YWN0LCBmYWxzZSBmb3IgbXVsdGl4YWN0LCBwZ19zdWJ0cmFucywgcGdfbm90aWZ5KS4g IGdyb3VwX2xzbltdCi0JICogaGFzIGxzbl9ncm91cHNfcGVyX3BhZ2UgZW50cmllcyBwZXIgYnVm ZmVyIHNsb3QsIGVhY2ggY29udGFpbmluZyB0aGUKLQkgKiBoaWdoZXN0IExTTiBrbm93biBmb3Ig YSBjb250aWd1b3VzIGdyb3VwIG9mIFNMUlUgZW50cmllcyBvbiB0aGF0IHNsb3QncwotCSAqIHBh Z2UuCi0JICovCi0JWExvZ1JlY1B0ciAqZ3JvdXBfbHNuOwotCWludAkJCWxzbl9ncm91cHNfcGVy X3BhZ2U7Ci0KIAkvKi0tLS0tLS0tLS0KIAkgKiBXZSBtYXJrIGEgcGFnZSAibW9zdCByZWNlbnRs eSB1c2VkIiBieSBzZXR0aW5nCiAJICoJCXBhZ2VfbHJ1X2NvdW50W3Nsb3Rub10gPSArK2N1cl9s cnVfY291bnQ7CkBAIC0xNDcsOCArMTM2LDggQEAgdHlwZWRlZiBzdHJ1Y3QgU2xydUN0bERhdGEK IHR5cGVkZWYgU2xydUN0bERhdGEgKlNscnVDdGw7CiAKIAotZXh0ZXJuIFNpemUgU2ltcGxlTHJ1 U2htZW1TaXplKGludCBuc2xvdHMsIGludCBubHNucyk7Ci1leHRlcm4gdm9pZCBTaW1wbGVMcnVJ bml0KFNscnVDdGwgY3RsLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbnNsb3RzLCBpbnQgbmxzbnMs CitleHRlcm4gU2l6ZSBTaW1wbGVMcnVTaG1lbVNpemUoaW50IG5zbG90cyk7CitleHRlcm4gdm9p ZCBTaW1wbGVMcnVJbml0KFNscnVDdGwgY3RsLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbnNsb3Rz LAogCQkJCQkJICBMV0xvY2sgKmN0bGxvY2ssIGNvbnN0IGNoYXIgKnN1YmRpciwgaW50IHRyYW5j aGVfaWQsCiAJCQkJCQkgIFN5bmNSZXF1ZXN0SGFuZGxlciBzeW5jX2hhbmRsZXIsCiAJCQkJCQkg IGJvb2wgbG9uZ19zZWdtZW50X25hbWVzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmcGFnZS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmgKaW5kZXggNDI0ZWNi YTAyOC4uMjUxZDk1MjNmYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdl LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmgKQEAgLTIwMSw2ICsyMDEsNyBA QCB0eXBlZGVmIFBhZ2VIZWFkZXJEYXRhICpQYWdlSGVhZGVyOwogICogaGFuZGxpbmcgcGFnZXMu CiAgKi8KICNkZWZpbmUgUEdfUEFHRV9MQVlPVVRfVkVSU0lPTgkJNAorI2RlZmluZSBQR19TTFJV X1BBR0VfTEFZT1VUX1ZFUlNJT04JMQogI2RlZmluZSBQR19EQVRBX0NIRUNLU1VNX1ZFUlNJT04J MQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCkBAIC0yNTcsNiArMjU4LDExIEBAIFBhZ2VHZXRDb250ZW50cyhQYWdl IHBhZ2UpCiAJcmV0dXJuIChjaGFyICopIHBhZ2UgKyBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVy RGF0YSk7CiB9CiAKKy8qCisgKiBTcGFjZSBhdmFpbGFibGUgZm9yIHN0b3JpbmcgcGFnZSBjb250 ZW50cy4KKyAqLworI2RlZmluZSBTaXplT2ZQYWdlQ29udGVudHMJKEJMQ0tTWiAtIE1BWEFMSUdO KFNpemVPZlBhZ2VIZWFkZXJEYXRhKSkKKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWZ1bmN0 aW9ucyB0byBhY2Nlc3MgcGFnZSBzaXplIGluZm8KICAqIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ4 Niw2ICs0OTIsNyBAQCBTdGF0aWNBc3NlcnREZWNsKEJMQ0tTWiA9PSAoKEJMQ0tTWiAvIHNpemVv ZihzaXplX3QpKSAqIHNpemVvZihzaXplX3QpKSwKIAkJCQkgIkJMQ0tTWiBoYXMgdG8gYmUgYSBt dWx0aXBsZSBvZiBzaXplb2Yoc2l6ZV90KSIpOwogCiBleHRlcm4gdm9pZCBQYWdlSW5pdChQYWdl IHBhZ2UsIFNpemUgcGFnZVNpemUsIFNpemUgc3BlY2lhbFNpemUpOworZXh0ZXJuIHZvaWQgUGFn ZUluaXRTTFJVKFBhZ2UgcGFnZSwgU2l6ZSBwYWdlU2l6ZSwgU2l6ZSBzcGVjaWFsU2l6ZSk7CiBl eHRlcm4gYm9vbCBQYWdlSXNWZXJpZmllZEV4dGVuZGVkKFBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIg Ymxrbm8sIGludCBmbGFncyk7CiBleHRlcm4gT2Zmc2V0TnVtYmVyIFBhZ2VBZGRJdGVtRXh0ZW5k ZWQoUGFnZSBwYWdlLCBJdGVtIGl0ZW0sIFNpemUgc2l6ZSwKIAkJCQkJCQkJCQlPZmZzZXROdW1i ZXIgb2Zmc2V0TnVtYmVyLCBpbnQgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X3NscnUvdGVzdF9zbHJ1LmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS90ZXN0 X3NscnUuYwppbmRleCBkMGZiOTQ0NGU4Li5mZWExMmUwMDgwIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3Rfc2xydS90ZXN0X3NscnUuYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3Rfc2xydS90ZXN0X3NscnUuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9z bHJ1LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4u aCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCkBA IC03Niw4ICs3Nyw4IEBAIHRlc3Rfc2xydV9wYWdlX3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ VGVzdFNscnVDdGwtPnNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9WQUxJ RDsKIAogCS8qIHdyaXRlIGdpdmVuIGRhdGEgdG8gdGhlIHBhZ2UsIHVwIHRvIHRoZSBsaW1pdCBv ZiB0aGUgcGFnZSAqLwotCXN0cm5jcHkoVGVzdFNscnVDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJb c2xvdG5vXSwgZGF0YSwKLQkJCUJMQ0tTWiAtIDEpOworCXN0cm5jcHkoUGFnZUdldENvbnRlbnRz KFRlc3RTbHJ1Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10pLCBkYXRhLAorCQkJQ2Fw YWNpdHlPZlBhZ2VDb250ZW50cyAtIDEpOwogCiAJU2ltcGxlTHJ1V3JpdGVQYWdlKFRlc3RTbHJ1 Q3RsLCBzbG90bm8pOwogCUxXTG9ja1JlbGVhc2UoVGVzdFNMUlVMb2NrKTsKQEAgLTEwNCw3ICsx MDUsNyBAQCB0ZXN0X3NscnVfcGFnZV9yZWFkKFBHX0ZVTkNUSU9OX0FSR1MpCiAJTFdMb2NrQWNx dWlyZShUZXN0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJc2xvdG5vID0gU2ltcGxlTHJ1UmVh ZFBhZ2UoVGVzdFNscnVDdGwsIHBhZ2VubywKIAkJCQkJCQkgICB3cml0ZV9vaywgSW52YWxpZFRy YW5zYWN0aW9uSWQpOwotCWRhdGEgPSAoY2hhciAqKSBUZXN0U2xydUN0bC0+c2hhcmVkLT5wYWdl X2J1ZmZlcltzbG90bm9dOworCWRhdGEgPSAoY2hhciAqKSBQYWdlR2V0Q29udGVudHMoVGVzdFNs cnVDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSk7CiAJTFdMb2NrUmVsZWFzZShUZXN0 U0xSVUxvY2spOwogCiAJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoZGF0YSkpOwpA QCAtMTIyLDcgKzEyMyw3IEBAIHRlc3Rfc2xydV9wYWdlX3JlYWRvbmx5KFBHX0ZVTkNUSU9OX0FS R1MpCiAJCQkJCQkJCQkJcGFnZW5vLAogCQkJCQkJCQkJCUludmFsaWRUcmFuc2FjdGlvbklkKTsK IAlBc3NlcnQoTFdMb2NrSGVsZEJ5TWUoVGVzdFNMUlVMb2NrKSk7Ci0JZGF0YSA9IChjaGFyICop IFRlc3RTbHJ1Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJZGF0YSA9IChjaGFy ICopIFBhZ2VHZXRDb250ZW50cyhUZXN0U2xydUN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90 bm9dKTsKIAlMV0xvY2tSZWxlYXNlKFRlc3RTTFJVTG9jayk7CiAKIAlQR19SRVRVUk5fVEVYVF9Q KGNzdHJpbmdfdG9fdGV4dChkYXRhKSk7CkBAIC0yMDIsNyArMjAzLDcgQEAgdGVzdF9zbHJ1X3No bWVtX3JlcXVlc3Qodm9pZCkKIAkJcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2soKTsKIAogCS8qIHJl c2VydmUgc2hhcmVkIG1lbW9yeSBmb3IgdGhlIHRlc3QgU0xSVSAqLwotCVJlcXVlc3RBZGRpblNo bWVtU3BhY2UoU2ltcGxlTHJ1U2htZW1TaXplKE5VTV9URVNUX0JVRkZFUlMsIDApKTsKKwlSZXF1 ZXN0QWRkaW5TaG1lbVNwYWNlKFNpbXBsZUxydVNobWVtU2l6ZShOVU1fVEVTVF9CVUZGRVJTKSk7 CiB9CiAKIHN0YXRpYyBib29sCkBAIC0yMzgsNyArMjM5LDcgQEAgdGVzdF9zbHJ1X3NobWVtX3N0 YXJ0dXAodm9pZCkKIAogCVRlc3RTbHJ1Q3RsLT5QYWdlUHJlY2VkZXMgPSB0ZXN0X3NscnVfcGFn ZV9wcmVjZWRlc19sb2dpY2FsbHk7CiAJU2ltcGxlTHJ1SW5pdChUZXN0U2xydUN0bCwgIlRlc3RT TFJVIiwKLQkJCQkgIE5VTV9URVNUX0JVRkZFUlMsIDAsIFRlc3RTTFJVTG9jaywgc2xydV9kaXJf bmFtZSwKKwkJCQkgIE5VTV9URVNUX0JVRkZFUlMsIFRlc3RTTFJVTG9jaywgc2xydV9kaXJfbmFt ZSwKIAkJCQkgIHRlc3RfdHJhbmNoZV9pZCwgU1lOQ19IQU5ETEVSX05PTkUsIGxvbmdfc2VnbWVu dF9uYW1lcyk7CiB9CiAK --_004_IA1PR07MB982925731C4C0B38DC8F2F7FB98BAIA1PR07MB9829namp_--