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 1o8duu-0006c1-Ra for pgsql-hackers@arkaria.postgresql.org; Tue, 05 Jul 2022 08:28:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1o8dut-0002DY-5b for pgsql-hackers@arkaria.postgresql.org; Tue, 05 Jul 2022 08:28:19 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o8dus-0002BR-6w for pgsql-hackers@lists.postgresql.org; Tue, 05 Jul 2022 08:28:18 +0000 Received: from esa16.fujitsucc.c3s2.iphmx.com ([216.71.158.33]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o8dun-0000o5-FM for pgsql-hackers@lists.postgresql.org; Tue, 05 Jul 2022 08:28:17 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1657009694; x=1688545694; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=jmdLemW9PNYovKUMXqKWXfNZh5dPeJMFaH+N9T9FhmM=; b=AJnHKlABW26TVLRbXp50NWm460uu/HBWsdvB2Gjdqv8ZV+Jht9K/qACQ b6wClO4QOvKL+9MlOrmlWwwJd0qK6Ylu2aLVq9HJNcQF67Cw2zjtOqAGN 3CAqRhMEYKCXvo6sWxs/pd0tUHa61QIrgdqM+zoYGcMYCvReCPyG57FZr GcQNQldHeZ14kk+Utv2lBZp9WYJgBeyC5VFOmspY2DlshHjXi9vT4szuA L9hPFurnwBf5OCVqzAGeyHuTmLcrGvJkvNvfbYUDIagmxcATimPSkLWsd N0CSL8HK9OO1IBK0ZAZXApSrYTJSi1me5sOu1cRpJIqBuqAjI6VRTY34u Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10398"; a="59566764" X-IronPort-AV: E=Sophos;i="5.92,245,1650898800"; d="scan'208,223";a="59566764" Received: from mail-tycjpn01lp2173.outbound.protection.outlook.com (HELO JPN01-TYC-obe.outbound.protection.outlook.com) ([104.47.23.173]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 17:28:09 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jx68l5UFiKpMTNgM22AQ2FIn71Pj+Q4dZC/9Hf/2ZKKub6zW1GYPTKxLeeIQYXfWsNKfmanfvO03M1fTcsk6E4eLYec+c0shPsGLz+kos5+tMVTknMZzAvyQrxJyKpGt2PjmC7wZphQix10lD4sDaORNLPnNq/LqgLeNtZTlsN6fFZ6XnUQcs71ZK/qBbGEpmySOJPlyGn8bnZxy7d128BWdTjT7O1ikrvywe7YfUEL4VDh0EXQUGd+fqnUGfsTiZNVoKCu+TWFHdTp5iNjs2RpgV1surc3W7/3HFyGwVaTSBxM0negoS7XZTxlZuXaXIAhpYAK2pQyCyUPRtGkpoQ== 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=fdmUiYVfiHwcafzurdrFfJCsS3AGd5U3oK5QWEl6CHY=; b=jzCWKRx47+r/lHxhL37smhi+OoRY+4E/I+fhma+7tBHsqhaNXCvZ+/dMO41IzSqpv5b5ieBGoA3Xf270V3sN9Lfec/p8UT5Mjs7MY1BD+0hHF3jDK1pqV/YGgdm9EvXMwOpVcysRC7aecvhxW17WrPtulkO7CeRp9Jz3czJrbGbJTy6vvHsl6Ci+LxK3VmZ5V2WkG6uB9pSRsCzcCBXKNehXHc+MUsLxL+T9deQnWf6oa9P7sJQ90DWn3li7QyLe6lrj50vLRXNpBiCMo2IO3TQ6Uvge3UPL0FcjOl9J47kgMN8njIEpFzCiqAOigyQ9QkFOC55X7hLo0Xwxo32J9w== 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=fdmUiYVfiHwcafzurdrFfJCsS3AGd5U3oK5QWEl6CHY=; b=h4d1T9aL6u/DdHRkY4PPcGx7NA4BrwW8SVeoi3iosCdCk0L87YpO2pU2VD/5lqva2CvJKOXok6uAHgkOYg5XgVvOSFwJ/mm1IX3TAPj6/uD59PSzqqWKqX3PCmSJ0ykYne4ZOdsoIUY6Ycb1d6EtYuDTcB026mwDZViEx5VR31k= Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com (2603:1096:604:bb::12) by OS3PR01MB10056.jpnprd01.prod.outlook.com (2603:1096:604:1df::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.14; Tue, 5 Jul 2022 08:28:05 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::c943:3fe1:8fba:a589]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::c943:3fe1:8fba:a589%2]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 08:28:05 +0000 From: "houzj.fnst@fujitsu.com" To: Amit Kapila CC: Masahiko Sawada , Japin Li , Alvaro Herrera , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers , Zheng Li Subject: RE: Support logical replication of DDLs Thread-Topic: Support logical replication of DDLs Thread-Index: AQHYJz33Pggarn88u0G0lS13R7uLfKy9TlgAgAVZmgCAAA2xAIABMlkAgACE3QCAAKgDAIAAduOAgABm6oCABIs+AIACG98AgBfo2QCABsLLgIAyhVqAgBOd9QCAAOYWgIAAPoOAgAUH2oCABQvawIAPYMWAgAHJ99CAAn9yAIAAPzmAgAQqm4CAA6XiQIACJNSQgAsCywCAAPmNAIAAalXwgAAWjQCACT8UwA== Date: Tue, 5 Jul 2022 08:28:05 +0000 Message-ID: References: <202203162206.7spggyktx63e@alvherre.pgsql> In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: =?utf-8?B?TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2Uw?= =?utf-8?B?NTBfQWN0aW9uSWQ9NGZjMjFkOTMtYjVhNy00ZmM0LTk5ZTUtNDlmZTA0MmIx?= =?utf-8?B?ZTJmO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX0NvbnRlbnRCaXRzPTA7TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5?= =?utf-8?B?LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfRW5hYmxlZD10cnVlO01TSVBfTGFi?= =?utf-8?B?ZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRmZWNlMDUwX01ldGhv?= =?utf-8?B?ZD1TdGFuZGFyZDtNU0lQX0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1hYjRk?= =?utf-8?B?LTNiMGY0ZmVjZTA1MF9OYW1lPUZVSklUU1UtUkVTVFJJQ1RFRO+/ou++gA==?= =?utf-8?B?776LO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX1NldERhdGU9MjAyMi0wNy0wNVQwODowMDoxOFo7TVNJUF9MYWJl?= =?utf-8?B?bF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfU2l0ZUlk?= =?utf-8?Q?=3Da19f121d-81e1-4858-a9d8-736e267fd4c7;?= 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: 927b373a-9a45-4344-3e97-08da5e604870 x-ms-traffictypediagnostic: OS3PR01MB10056:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: s86TAsoyfEOMbZ5NSCjqWBku3FKWAc6BteWYL1aDPR7bwM4Zcwm6C+hWJd99tF8GMM0hnVfvJ/7/IIdq2YpiiS70cs8q+DzQUtQBUBGKFlLANHEXYnpVU6SKi/JYquf+Y2UDagwqmIkRTsaa6sJudPKBHrrUJTmiMh2mXFZ8HywMg7RWoXVz83/e5ccnd0JXqmEB9EAHoArvbyNDSn7Hd9tpOTPAVT8e+S67Rh/mYncveNf6YoFRqHnPkrCCxnVaGbT7xMLBfHf48Jh0/8rV+HZCwE0YU08IJOAQ/4bQDyuq2nOz0MdddBHUreJPjb1wmB9OhDiQA1npjelYUyCRikIYR+XoUTSGO8sUfYuhejKZRWe7IxRUbmWkSt1tWFcYScVSC9CKTfENdfmPSLiQi3Z0MxPYyb4Ln0JiD3V8je7i27JLcoiC/u928X3hCwq6VutctT/5obhX5pcBTjCptm0t18Mgf1K5mLZ1S6/wg5LV8wue3H/c1yBUq0VclDakC18e2iRjSFsPCidquIuvk7pKh1gRVOnSqXZCCIt/vawaVCV+UQuGfxactOh/lRTsMyRfx2e1+MOh7QyfIfPHAxiCGX6CbMPjMHQ5042LXRQDuNftJWVrpjVVp+qQcAYEp9yobj53EpcWrZiA+Z464l+v6hPHlnWZHLQHbThCYoUGtGNYTZS5lzy+e95efdrBduGAwcGE0WUzCyAS4oIAmAF6UVuyDjhXIBQ2E/5ktU1JZDZ2YeEUv8rW1KTtf9lxRSna6h+zVB0fPzzRDeUomo8buuqEQjhU6wm4x+qDoX61tTzEADmkAoLXgaGu5LhxtTCo08zicskK6haCL5o1o3ho1vciGHtJng6kSVmxCH2sxHPAu3G0LrX/r9uoWxNb//Z7R93sxOkaCJQEBDmn2Q== 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:(13230016)(4636009)(136003)(346002)(376002)(39860400002)(366004)(396003)(316002)(66946007)(66476007)(4326008)(478600001)(76116006)(66556008)(66446008)(64756008)(6916009)(19627235002)(54906003)(41300700001)(6506007)(122000001)(966005)(8676002)(71200400001)(55016003)(2906002)(5660300002)(7696005)(52536014)(8936002)(33656002)(86362001)(85182001)(38100700002)(82960400001)(38070700005)(9686003)(186003)(26005)(83380400001)(53546011)(99936003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?YjZoMENIcmg3ZnVhbUgvdThuUTk1Z1hscWI4TVExTmFMckt0SXQvTm1haDZ4?= =?utf-8?B?ZUFySGVXSGxOcGtwNHltTWdzR21YYlg3WUJiaHc1dkJpWFN2TzhVd1Eyb3Ur?= =?utf-8?B?SEhYODY1cmRUWER2TXV0RklLb3dtNkJ6b2FnOVZRUGU4SnYxUVdGK1VQaHFK?= =?utf-8?B?OEJJcmZnTml1NFJJcHBQaFhiTExJRERhOEo1L0IxR2h0b0xRZndKcEl3R0pI?= =?utf-8?B?RW91a2dBUjBrWDQvaUQ2VGtIZ2srbGtqODA0a3ZnU0tPT2dFU1kwcHU4U2Ju?= =?utf-8?B?YTJkbFRmb1hwem1rN0lka2pSN1dVa05Sb1Qwc3pSVjhTc1RZUDBKOU9NdEho?= =?utf-8?B?UTFxaFJVWEd5WXRycEtqckd5R2VtUXZlTFBVVEFOZmkxVlpFenNnKy9nUGQ3?= =?utf-8?B?NE1sMWp6a2ZtTlhsWldtTkovUTUwZzFjeWNJTWpiK3Q3L1Rua05rVUhJaDd3?= =?utf-8?B?c3RzaGZtd01WLzhrbWhRczhwS3Zyc3VQVUsrNmp0NUtjMWpmdzNIWEpHdkFk?= =?utf-8?B?SUFjUUdZYkgxbVhubFFlLzZlK0tQQ0prTWZ2MVN2ekpHWXArcHZWcG4vQ1FZ?= =?utf-8?B?RkIrY05jcGZZWFJURzVjeGFPUERwYkhBYSt3UFZRNzhubHh2dHdnOVBRODN0?= =?utf-8?B?b3U0OHhFWEYyNFRXZDdlMDB5bE9ZZGM0bjZrZnVMSXpGbm16VjZLcS9udHg4?= =?utf-8?B?RTg1M0hRUHJzK3VESUNVTUJpKytnTnhTOGcvbE1JUW93eERjYmtMUzZLOC81?= =?utf-8?B?a0RKK0tJRXVVYURFdENMaEMzbVFMSVBmVzF0VFZ6WUFSU2RqOTJQY2JNY2dC?= =?utf-8?B?UlFDd0xweHZpalA0Vk1FUWVZSFo3dnZjQ2MxdC9pM2YzSEIrV3A5ZDFwYTll?= =?utf-8?B?TDBCdk9RTFBXWG02cC9TMHNOYlprRm5XWHpQM2ZicmlyNzkycE1PS1VndlZ1?= =?utf-8?B?NWd3QzFLdU8rOVFzbWQya1BEbHRmMzNXMW04MWpiaHlLcXpGRlg3RTlld0Rz?= =?utf-8?B?RXZzNm0ySWJRZkVzNnZGdkhNWWNXWWJpbVRyYW9ibUFGODgvajBnRCtsaStZ?= =?utf-8?B?SkdHRVdmUm56cFdTbW9mUWV3UG1nNXFFU1BGUDFHTzgwNUczYzB4Zy9JSExv?= =?utf-8?B?aEJRNHRnOU9nM1BtM3ZzeGVaU0JYUzFSS2NJVVc2VU1VU1dqekN5dllKNDho?= =?utf-8?B?SkxYVGtsZlpCcUFseU9HMW1zTzB3SXFCaE11OEpKZHhqZlZ1ejVhTVJxQU9G?= =?utf-8?B?OCtnR0UvWVQ1R1lCVGt4NWtyTXJDQjdsOFlzL1ZMSW84eEdUUUxkdmViaTRX?= =?utf-8?B?RG5vSXA2Wm0wNDJPOXJickVOWGphS2lhVjZvTldhV0IwSSt0K2RYb0hzbmRC?= =?utf-8?B?MDcxdmo4RkJmY3VDWjN3T1RuTW5veDZZcDlLYXZ4S2NuVWFsTkNLYUFLcHNU?= =?utf-8?B?ZU5XWHJ2OUJNN1ozSUhkZUYzQVBzdFcxYTlEMUhRUUxiazczaVdDVWhpaWFN?= =?utf-8?B?cXh2Yzg0TkVHS2lxdjdOcmhodmdaZ0xHblJUUWJDa2paMlpLUUpGNksvNy9D?= =?utf-8?B?bldvNzB1dzdvN0RvMFgxVHJhd3B0TGI2Qm0xTk9HdVdtd3NNK00wWVAwdVZG?= =?utf-8?B?cC9UR1VmNmZYaDZDRGZZSUQ4cVg2eHZZODZLUmxVMzJDOWV2Q1NXSi92aVBt?= =?utf-8?B?OERBOUpWYWdSdUFmN1dmeFBKYURuQ29KSFZqUzh4QSs5dVRSOEVlVzdQZ1Jl?= =?utf-8?B?b2g1ZUxraDc3cldJem9HWitHenRhZm1OVFRyeFBCZ1gyZ3BPcGk2aHcvZ0dI?= =?utf-8?B?QjVwY2RLK2tPVkpNS2JyVk9ield6VE5WM0RQNWIvcEJuQjZldi9kTk5uVGNo?= =?utf-8?B?aWN0U04zcWs3R1phWkJxbGEyRGJtSm85UXZXdzJySFNmbUZLMGZucmNTTFdP?= =?utf-8?B?NjJWMi94d2pnS2ZKZVAyL1NGaXNVY0pDMnhNbW9pdjZjMVhOUVFPTGlxTHFa?= =?utf-8?B?VjZEUmwvdTRORms0TnRwTGhYS2JKbHNsTEM2c1R3UGlLVitwVkZVOGdRQnFK?= =?utf-8?B?ajgzMUlMMm91N2YxVG1SRDFqWklzMnRBYmRqZk90Vm1OcHR3WmxsWnlJRWhI?= =?utf-8?Q?LrA1jHKWP7LN9fzdczOleTych?= Content-Type: multipart/mixed; boundary="_005_OS0PR01MB5716D3B79A607B547F2AB90D94819OS0PR01MB5716jpnp_" 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: 927b373a-9a45-4344-3e97-08da5e604870 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Jul 2022 08:28:05.1064 (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: VP+LBHu6yJK8NhV8neiP+9Y8RzlumyqKBe6ieaJc2y3Ru8rxLuyW7cVAXm15WnZ/9yNu61JCN+OonPyHRTEEyQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS3PR01MB10056 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_005_OS0PR01MB5716D3B79A607B547F2AB90D94819OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gV2VkbmVzZGF5LCBKdW5lIDI5LCAyMDIyIDY6NDggUE0gQW1pdCBLYXBpbGEgPGFtaXQua2Fw aWxhMTZAZ21haWwuY29tPiB3cm90ZToNCj4gDQo+IE9uIFdlZCwgSnVuIDI5LCAyMDIyIGF0IDM6 MjQgUE0gaG91emouZm5zdEBmdWppdHN1LmNvbQ0KPiA8aG91emouZm5zdEBmdWppdHN1LmNvbT4g d3JvdGU6DQo+ID4NCj4gPiBPbiBXZWRuZXNkYXksIEp1bmUgMjksIDIwMjIgMTE6MDcgQU0gQW1p dCBLYXBpbGENCj4gPGFtaXQua2FwaWxhMTZAZ21haWwuY29tPiB3cm90ZToNCj4gPiA+DQo+ID4g PiBPbiBUdWUsIEp1biAyOCwgMjAyMiBhdCA1OjQzIFBNIEFtaXQgS2FwaWxhDQo+ID4gPiA8YW1p dC5rYXBpbGExNkBnbWFpbC5jb20+DQo+ID4gPiB3cm90ZToNCj4gPiA+ID4NCj4gPiA+ID4gNS4N Cj4gPiA+ID4gK3N0YXRpYyBPYmpUcmVlICoNCj4gPiA+ID4gK2RlcGFyc2VfQ3JlYXRlU3RtdChP aWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkNCj4gPiA+ID4gew0KPiA+ID4gPiAuLi4NCj4g PiA+ID4gKyB0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIs IDApOyBpZg0KPiA+ID4gPiArIChub2RlLT50YWJsZXNwYWNlbmFtZSkgYXBwZW5kX3N0cmluZ19v YmplY3QodG1wLCAidGFibGVzcGFjZSIsDQo+ID4gPiA+ICsgbm9kZS0+dGFibGVzcGFjZW5hbWUp OyBlbHNlIHsgYXBwZW5kX251bGxfb2JqZWN0KHRtcCwNCj4gPiA+ID4gKyBub2RlLT4idGFibGVz cGFjZSIpOw0KPiA+ID4gPiArIGFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFs c2UpOyB9DQo+ID4gPiA+ICsgYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgInRhYmxl c3BhY2UiLCB0bXApOw0KPiA+ID4gPiAuLi4NCj4gPiA+ID4gfQ0KPiA+ID4gPg0KPiA+ID4gPiBX aHkgZG8gd2UgbmVlZCB0byBhcHBlbmQgdGhlIG9iamVjdHMgKHRhYmxlc3BhY2UsIHdpdGggY2xh dXNlLA0KPiA+ID4gPiBldGMuKSB3aGVuIHRoZXkgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBhY3R1 YWwgQ1JFQVRFIFRBQkxFDQo+ID4gPiA+IHN0YXRlbWVudD8gVGhlIHJlYXNvbiB0byBhc2sgdGhp cyBpcyB0aGF0IHRoaXMgbWFrZXMgdGhlIHN0cmluZw0KPiA+ID4gPiB0aGF0IHdlIHdhbnQgdG8g c2VuZCBkb3duc3RyZWFtIG11Y2ggbG9uZ2VyIHRoYW4gdGhlIGFjdHVhbA0KPiA+ID4gPiBzdGF0 ZW1lbnQgZ2l2ZW4gYnkgdGhlIHVzZXIgb24gdGhlIHB1Ymxpc2hlci4NCj4gPiA+ID4NCj4gPiA+ DQo+ID4gPiBBZnRlciB0aGlua2luZyBzb21lIG1vcmUgb24gdGhpcywgaXQgc2VlbXMgdGhlIHVz ZXIgbWF5IHdhbnQgdG8NCj4gPiA+IG9wdGlvbmFsbHkgY2hhbmdlIHNvbWUgb2YgdGhlc2UgYXR0 cmlidXRlcywgZm9yIGV4YW1wbGUsIG9uIHRoZQ0KPiA+ID4gc3Vic2NyaWJlciwgaXQgbWF5IHdh bnQgdG8gYXNzb2NpYXRlIHRoZSB0YWJsZSB3aXRoIGEgZGlmZmVyZW50DQo+ID4gPiB0YWJsZXNw YWNlLiBJIHRoaW5rIHRvIGFkZHJlc3MgdGhhdCB3ZSBjYW4gYXBwZW5kIHRoZXNlIGFkZGl0aW9u YWwNCj4gPiA+IGF0dHJpYnV0ZXMgb3B0aW9uYWxseSwgc2F5IHZpYSBhbiBhZGRpdGlvbmFsIHBh cmFtZXRlcg0KPiA+ID4gKGFwcGVuZF9hbGxfb3B0aW9ucy9hcHBlbmRfYWxsX2F0dHJpYnV0ZXMg b3Igc29tZXRoaW5nIGxpa2UgdGhhdCkgaW4NCj4gZXhwb3NlZCBBUElzIGxpa2UgZGVwYXJzZV91 dGlsaXR5X2NvbW1hbmQoKS4NCj4gPg0KPiA+IEkgYWdyZWUgYW5kIHdpbGwgcmVzZWFyY2ggdGhp cyBwYXJ0Lg0KPiA+DQo+IA0KPiBPa2F5LCBub3RlIHRoYXQgc2ltaWxhciBoYW5kbGluZyB3b3Vs ZCBiZSByZXF1aXJlZCBhdCBvdGhlciBwbGFjZXMgbGlrZQ0KPiBkZXBhcnNlX0NvbHVtbkRlZi4g RmV3IG90aGVyIGNvbW1lbnRzIG9uDQo+IHY5LTAwMDEtRnVuY3Rpb25zLXRvLWRlcGFyc2UtRERM LWNvbW1hbmRzLg0KPiANCj4gMS4NCj4gK3N0YXRpYyBPYmpFbGVtICpuZXdfYm9vbF9vYmplY3Qo Ym9vbCB2YWx1ZSk7IHN0YXRpYyBPYmpFbGVtDQo+ICsqbmV3X3N0cmluZ19vYmplY3QoY2hhciAq dmFsdWUpOyBzdGF0aWMgT2JqRWxlbQ0KPiArKm5ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZh bHVlKTsgc3RhdGljIE9iakVsZW0NCj4gKypuZXdfYXJyYXlfb2JqZWN0KExpc3QgKmFycmF5KTsg c3RhdGljIE9iakVsZW0NCj4gKypuZXdfaW50ZWdlcl9vYmplY3QoaW50NjQgdmFsdWUpOyBzdGF0 aWMgT2JqRWxlbQ0KPiArKm5ld19mbG9hdF9vYmplY3QoZmxvYXQ4IHZhbHVlKTsNCj4gDQo+IEhl cmUsIG5ld19vYmplY3Rfb2JqZWN0KCkgc2VlbXMgdG8gYmUgZGVjbGFyZWQgb3V0LW9mLW9yZGVy IChub3QgaW4gc3luYyB3aXRoDQo+IGl0cyBvcmRlciBvZiBkZWZpbml0aW9uKS4gU2ltaWxhcmx5 LCBzZWUgYWxsIG90aGVyIGFwcGVuZF8qIGZ1bmN0aW9ucy4NCg0KQ2hhbmdlZC4NCg0KPiAyLiBU aGUgZnVuY3Rpb24gcHJpbnRUeXBtb2QgaW4gZGRsX2RlcGFyc2UuYyBhcHBlYXJzIHRvIGJlIHRo ZSBzYW1lIGFzIHRoZQ0KPiBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gZm9ybWF0X3R5 cGUuYy4gSWYgc28sIGlzbid0IGl0IGJldHRlciB0byBoYXZlIGENCj4gc2luZ2xlIGNvcHkgb2Yg dGhhdCBmdW5jdGlvbj8NCg0KQ2hhbmdlZC4NCg0KPiAzLiBBcyBJIHBvaW50ZWQgb3V0IHllc3Rl cmRheSwgdGhlcmUgaXMgc29tZSBzaW1pbGFyaXR5IGJldHdlZW4NCj4gZm9ybWF0X3R5cGVfZXh0 ZW5kZWQgYW5kIGZvcm1hdF90eXBlX2RldGFpbGVkLiBDYW4gd2UgdHJ5IHRvIGV4dHJhY3QNCj4g Y29tbW9uIGZ1bmN0aW9uYWxpdHk/IElmIHRoaXMgaXMgZmVhc2libGUsIGl0IGlzIGJldHRlciB0 byBkbyB0aGlzIGFzIGEgc2VwYXJhdGUNCj4gcGF0Y2guIEFsc28sIHRoaXMgY2FuIG9idmlhdGUg dGhlIG5lZWQgdG8gZXhwb3NlIHByaW50VHlwbW9kIGZyb20NCj4gZm9ybWF0X3R5cGUuYy4gSSBh bSBub3QgcmVhbGx5IHN1cmUgaWYgdGhpcyB3aWxsIGJlIGJldHRlciB0aGFuIHRoZSBjdXJyZW50 IG9uZSBvcg0KPiBub3QgYnV0IGl0IHNlZW1zIHdvcnRoIHRyeWluZy4NCg0KSXQgc2VlbXMgdGhl IG1haW4gbG9naWMgaW4gdGhlIHR3byBmdW5jdGlvbnMgaXMgYSBiaXQgZGlmZmVyZW50LiBGb3IN CmZvcm1hdF90eXBlX2RldGFpbGVkLCB3ZSBhbHdheXMgdHJ5IHRvIHNjaGVtYSBxdWFsaWZ5IGJv dGggdGhlIHVzZXItZGVmaW5lZCBhbmQNCmJ1aWx0LWluIHR5cGUgZXhjZXB0IGZvciBzb21lIHNw ZWNpYWwgdHlwZSh0aW1lIC4uKSB3aGljaCB3ZSBjYW5ub3Qgc2NoZW1hDQpxdWFsaWZ5LiBCdXQg aW4gZm9ybWF0X3R5cGVfZXh0ZW5kZWQsIHdlIGRvbid0IHRyeSB0byBzY2hlbWEgcXVhbGlmeSB0 aGUNCmJ1aWx0LWluIHR5cGUuIEJ1dCBJIHdpbGwgcmVzZWFyY2ggYSBiaXQgbW9yZSBhYm91dCB0 aGlzLg0KDQo+IDQuDQo+IG5ld19vYmp0cmVlX1ZBKCkNCj4gew0KPiAuLi4NCj4gc3dpdGNoICh0 eXBlKQ0KPiArIHsNCj4gKyBjYXNlIE9ialR5cGVCb29sOg0KPiArIGVsZW0gPSBuZXdfYm9vbF9v YmplY3QodmFfYXJnKGFyZ3MsIGludCkpOyBicmVhazsgY2FzZSBPYmpUeXBlU3RyaW5nOg0KPiAr IGVsZW0gPSBuZXdfc3RyaW5nX29iamVjdCh2YV9hcmcoYXJncywgY2hhciAqKSk7IGJyZWFrOyBj YXNlDQo+ICsgT2JqVHlwZU9iamVjdDoNCj4gKyBlbGVtID0gbmV3X29iamVjdF9vYmplY3QodmFf YXJnKGFyZ3MsIE9ialRyZWUgKikpOyBicmVhazsgY2FzZQ0KPiArIE9ialR5cGVBcnJheToNCj4g KyBlbGVtID0gbmV3X2FycmF5X29iamVjdCh2YV9hcmcoYXJncywgTGlzdCAqKSk7IGJyZWFrOyBj YXNlDQo+ICsgT2JqVHlwZUludGVnZXI6DQo+ICsgZWxlbSA9IG5ld19pbnRlZ2VyX29iamVjdCh2 YV9hcmcoYXJncywgaW50NjQpKTsgYnJlYWs7IGNhc2UNCj4gKyBPYmpUeXBlRmxvYXQ6DQo+ICsg ZWxlbSA9IG5ld19mbG9hdF9vYmplY3QodmFfYXJnKGFyZ3MsIGRvdWJsZSkpOyBicmVhazsgY2Fz ZQ0KPiArIE9ialR5cGVOdWxsOg0KPiArIC8qIE51bGwgcGFyYW1zIGRvbid0IGhhdmUgYSB2YWx1 ZSAob2J2aW91c2x5KSAqLyBlbGVtID0NCj4gKyBuZXdfbnVsbF9vYmplY3QoKTsNCj4gLi4uDQo+ IA0KPiBJIGZlZWwgaGVyZSBPYmpUeXBlJ3Mgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdGhlIHNhbWUg b3JkZXIgYXMgdGhleSBhcmUgZGVmaW5lZCBpbg0KPiBPYmpUeXBlLg0KDQpDaGFuZ2VkLg0KDQo+ IDUuIFRoZXJlIGFwcGVhcnMgdG8gYmUgY29tbW9uIGNvZGUgYW1vbmcgbm9kZV8qX29iamVjdCgp IGZ1bmN0aW9ucy4NCj4gQ2FuIHdlIGp1c3QgaGF2ZSBvbmUgZnVuY3Rpb24gaW5zdGVhZCBuZXdf b2JqZWN0KE9ialR5cGUsIHZvaWQgKnZhbCk/DQo+IEluIHRoZSBmdW5jdGlvbiBiYXNlZCBvbiB0 eXBlLCB3ZSBjYW4gdHlwZWNhc3QgdGhlIHZhbHVlLiBJcyB0aGVyZSBhIHJlYXNvbiB3aHkNCj4g dGhhdCB3b24ndCBiZSBiZXR0ZXIgdGhhbiBjdXJyZW50IG9uZT8NCg0KSSB0cmllZCB0byBleHRy YWN0IHNvbWUgY29tbW9uIGNvZGUgaW50byBhIG5ldyBmdW5jdGlvbiBuZXdfb2JqZWN0KE9ialR5 cGUsDQpjaGFyICpuYW1lKS4gSSBkaWRuJ3QgdXNlICd2b2lkIConIGFzIHVzZXIgY291bGQgcGFz cyBhIHdyb25nIHR5cGUgb2YgdmFsdWUgd2hpY2gNCndlIGNhbm5vdCBkZXRlY3Qgd2hpY2ggc2Vl bXMgYSBsaXR0bGUgdW5zYWZlLg0KDQo+IDYuDQo+IGRlcGFyc2VfQ29sdW1uRGVmKCkNCj4gew0K PiAuLi4NCj4gLyogQ29tcG9zaXRlIHR5cGVzIHVzZSBhIHNsaWdodGx5IHNpbXBsZXIgZm9ybWF0 IHN0cmluZyAqLw0KPiArIGlmIChjb21wb3NpdGUpDQo+ICsgY29sdW1uID0gbmV3X29ianRyZWVf VkEoIiV7bmFtZX1JICV7Y29sdHlwZX1UICV7Y29sbGF0aW9ufXMiLCAzLA0KPiArICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImNvbHVtbiIsICJuYW1lIiwgT2JqVHlwZVN0cmluZywNCj4gKyBjb2xk ZWYtPmNvbG5hbWUsICJjb2x0eXBlIiwgT2JqVHlwZU9iamVjdCwgbmV3X29ianRyZWVfZm9yX3R5 cGUodHlwaWQsDQo+ICsgdHlwbW9kKSk7IGVsc2UgY29sdW1uID0gbmV3X29ianRyZWVfVkEoIiV7 bmFtZX1JICV7Y29sdHlwZX1UDQo+ICsgJXtkZWZhdWx0fXMNCj4gJXtub3RfbnVsbH1zICV7Y29s bGF0aW9ufXMiLA0KPiArIDMsDQo+ICsgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwN Cj4gKyAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFtZSwgImNvbHR5cGUiLCBP YmpUeXBlT2JqZWN0LA0KPiArIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGlkLCB0eXBtb2QpKTsN Cj4gLi4uDQo+IH0NCj4gDQo+IFRvIGF2b2lkIHVzaW5nIHRoZSBzYW1lIGFyZ3VtZW50cywgd2Ug Y2FuIGRlZmluZSBmbXRzdHIgZm9yIGNvbXBvc2l0ZSBhbmQNCj4gbm9uLWNvbXBvc2l0ZSB0eXBl cyBhcyB0aGUgcGF0Y2ggaXMgZG9pbmcgaW4gZGVwYXJzZV9DcmVhdGVTdG10KCkuDQoNCkNoYW5n ZWQuDQoNCj4gNy4gSXQgaXMgbm90IGNsZWFyIGZyb20gY29tbWVudHMgb3Igb3RoZXJ3aXNlIHdo YXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yDQo+IGRlZmF1bHQgZm9ybWF0IHN0cmluZyBpbiBm dW5jdGlvbnMgbGlrZQ0KPiBkZXBhcnNlX0NvbHVtbkRlZigpIG9yIGRlcGFyc2VfQ3JlYXRlU3Rt dCgpLg0KDQpJIHRoaW5rIGl0IHdhcyBpbnRlbmRlZCB0byBwdXQgbW9zdCBvZiB0aGUgbW9kaWZp YWJsZSBwYXJ0IGluIGRlZmF1bHQgZm9ybWF0DQpzdHJpbmcgc28gdGhhdCB1c2VyIGNhbiBjaGFu Z2Ugd2hhdCB0aGV5IHdhbnQgdXNpbmcganNvbiBmdW5jdGlvbi4gQnV0IEkgdGhpbmsNCndlIGNv dWxkIGltcHJvdmUsIG1heWJlIGJ5IHBhc3NpbmcgYSBwYXJhbWV0ZXIgd2hpY2ggZGVjaWRlIHdo ZXRoZXIgdG8ga2VlcA0KdGhlc2Uga2V5d29yZHMgaW4gZGVmYXVsdCBmb3JtYXQgc3RyaW5nLiBJ IHdpbGwgcmVzZWFyY2ggdGhpcy4NCg0KPiA4Lg0KPiArICogRklYTUUgLS0tIGFjdHVhbGx5LCB3 aGF0IGFib3V0IGRlZmF1bHQgdmFsdWVzPw0KPiArICovDQo+ICtzdGF0aWMgT2JqVHJlZSAqDQo+ ICtkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250 ZXh0LCBDb2x1bW5EZWYNCj4gKypjb2xkZWYpDQo+IA0KPiBJIHRoaW5rIHdlIG5lZWQgdG8gaGFu ZGxlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGlzIEZJWE1FLg0KDQpDaGFuZ2VkLg0KDQpBdHRhY2gg dGhlIG5ldyB2ZXJzaW9uIHBhdGNoIHdoaWNoIGFkZHJlc3MgdGhlIGFib3ZlDQpjb21tZW50cyBh bmQgY29tbWVudHMgZnJvbSBbMV1bMl0uDQoNCkkgaGF2ZW4ndCBhZGRyZXNzZWQgdGhlIGxhdGVz dCBjb21tZW50cyBmcm9tIFZpZ25lc2hbM10sDQpJIHdpbGwgaW52ZXN0aWdhdGUgaXQuDQoNClsx XSBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBQTRlSzFLODhTTW9CcSUz RERSQTRYVS1GM0ZHNnF5ekNqR01NS3NQcGNSQlBSY3JFTHJ3JTQwbWFpbC5nbWFpbC5jb20NClsy XSBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBTERhTm0zckVBX3ptbkRN T0NUN05xSzRhQWZmaEFnb29MZjhyWGpVTiUzRFl3QThBU0Z3JTQwbWFpbC5nbWFpbC5jb20NClsz XSBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBTERhTm0ybkZQTXhVbyUz RDB6UlVVQS12M19lUndSWSUyQmlpNW5uR19QVSUyQjZqVDd0YTlkQSU0MG1haWwuZ21haWwuY29t DQoNCkJlc3QgcmVnYXJkcywNCkhvdSB6ag0K --_005_OS0PR01MB5716D3B79A607B547F2AB90D94819OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v11-0004-Test-cases-for-DDL-replication.patch" Content-Description: v11-0004-Test-cases-for-DDL-replication.patch Content-Disposition: attachment; filename="v11-0004-Test-cases-for-DDL-replication.patch"; size=23037; creation-date="Tue, 05 Jul 2022 08:25:00 GMT"; modification-date="Tue, 05 Jul 2022 08:28:02 GMT" Content-Transfer-Encoding: base64 RnJvbSBiMjU5MjBhODIxM2UzOGRlOWViOGJiMDk2YmRjMjlkNjRmM2U5NDgyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthbWljaGkgT3N1bWkgPG9zdW1pLnRha2FtaWNoaUBmdWpp dHN1LmNvbT4KRGF0ZTogV2VkLCAxNSBKdW4gMjAyMiAwOTo0NTo0MiArMDAwMApTdWJqZWN0OiBb UEFUQ0ggNC80XSBUZXN0IGNhc2VzIGZvciBEREwgcmVwbGljYXRpb24KCkF1dGhvcjogVGFrYW1p Y2hpIE9zdW1pCi0tLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlv bi5wbCB8IDQxNCArKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDE0 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAz Ml9kZGxfcmVwbGljYXRpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u OTRkZThlZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9k ZGxfcmVwbGljYXRpb24ucGwKQEAgLTAsMCArMSw0MTQgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBSZWdyZXNzaW9uIHRlc3Rz IGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uIG9mIERETHMKKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fy bmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVy LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c3RhcnQ7CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVh bWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRkZGwg PSAiQ1JFQVRFIFRBQkxFIHRlc3RfcmVwKGlkIGludCBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFy LCB2YWx1ZSBpbnRlZ2VyKTsiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgJGRkbCk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdGVzdF9yZXAgVkFMVUVTICgxLCAnZGF0YTEnLCAxKTsiKTsKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3Ry ID0gJG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIG15 cHViIEZPUiBBTEwgVEFCTEVTIHdpdGggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0 ZSwgZGRsJyk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki Q1JFQVRFIFNVQlNDUklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIn IFBVQkxJQ0FUSU9OIG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5bmNocm9uaXplZCB0aGUg dGFibGUuCisjIFRoaXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFuZCBiZWxvdyBmcm9tIGJl aW5nIGV4ZWN1dGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiskbm9kZV9zdWJzY3Jp YmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VMRUNUIENPVU5UKDEpID0g MCBGUk9NIHBnX3N1YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3JzdWJzdGF0ZSBOT1QgSU4g KCdzJywgJ3InKSBBTkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJlZ2NsYXNzIgorKTsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgy LCAnZGF0YTInLCAyLCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGM0ID0gMjsiKTsKK2lz KCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIHdoZXJlIGlkID0gMjsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRlc3RfcmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBE Uk9QIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFRZUEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBB TFRFUiB2YWx1ZSBUWVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMsICdkYXRhMycsICczJyk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgRlJPTSB0ZXN0X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQUxURVIgdGVzdF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUg ZGVmYXVsdCB2YWx1ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBzdWJzY3JpYmVyIG5vZGUu Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVz dF9yZXAgQUxURVIgQ09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28nIik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNCwgJ2RhdGE0 Jyk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgdmFsdWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7Iik7CitpcygkcmVzdWx0 LCAnZm9vJywgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsK KworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBk b24ndCBoYXZlIHRoZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVmaW5lZC4KKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRF UiBDT0xVTU4gdmFsdWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRhNScpOyIpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVl IElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7CitpcygkcmVzdWx0LCBxKHQp LCAnQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1vdmUgdGhlIGV4aXN0aW5n IHJlY29yZCB0aGF0IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitteSAoJHN0ZG91dCwgJHN0 ZGVycik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBG Uk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBTRVQgTk9UIE5V TEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxV RVMgKDYsICdkYXRhNicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAg c3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVy ciA9fiAvRVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVlXCIgb2YgcmVsYXRpb24g XCJ0ZXN0X3JlcFwiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFp bGVkIHRvIHJlcGxpY2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwiOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIERST1Ag Tk9UIE5VTEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CisjIEluc2VydCBzYW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4gVGhpcyBmYWlsZWQgYmVm b3JlIGJ1dCBub3cgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNiwgJ2RhdGE2Jyk7Iik7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgdmFsdWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNjsiKTsKK2lzKCRyZXN1 bHQsIHEodCksICJBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBOVUxMIHJlcGxpY2F0ZWQi KTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBVTkxPR0dFRDsn KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxV RVMgKDcsICdkYXRhNycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDc7Iik7Citp cygkcmVzdWx0LCBxcSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxPR0dFRCByZXBsaWNhdGVk Jyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIExPR0dFRDsnKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMg KDgsICdkYXRhOCcsICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDg7Iik7Citpcygk cmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQgcmVwbGljYXRlZCcpOwor CisjIFRlc3QgQ1JFQVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEgaW50LCBiIHZhcmNoYXIp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3Vs dCwgcXEoMSksICdDUkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFsdWVzICgxLCAnYScpIik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1w IHZhbHVlcyAoMiwgJ2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMiksICdETUwg Q2hhbmdlcyB0byB0bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJ TkhFUklUUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAyIChjMyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFMVUVTICgxLCAnYScsIDEp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAyJzsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxpY2F0ZWQnKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBmcm9tIHRtcDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBzb21lIGRh dGEgdG8gaW5oZXJpdGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKworIyBUZXN0IENSRUFURSBU QUJMRSBMSUtFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRF IFRBQkxFIHRtcDMgKGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVTICgxLCAxLCAnYScpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g dG1wMzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUgZGF0YSB0byBhIHRhYmxl IGRlZmluZWQgd2l0aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBUZXN0IERST1AgVEFCTEUK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDApLCAnVEFCTEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0IENSRUFURSBVTkxPR0dF RCBUQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBV TkxPR0dFRCBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJs ZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFU RSBVTkxPR0dFRCBUQUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcgZGF0YSB0byB1bmxvZ2dl ZCB0YWJsZSBpcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRF IFRBQkxFIElGIE5PVCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVz dWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIGRhdGEg dG8gYSB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1Qg RVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2 ZSB0aGUgdGFibGUgb24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwgYW5kIGlmIHdlIHN1Y2Nl ZWQKKyMgaW4gcmVwbGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMg dG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBU ZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0 ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciwgYnV0 IG5vdCBvbiB0aGUgc3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlk IGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwg J0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JF QVRFIFRBQkxFIHdpdGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRFIFwiQ1wiKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFM VUVTICgnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY29sbGF0aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVS RSB0YWJsZV9uYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShDKSwgJ0NSRUFURSBUQUJM RSB3aXRoIGNvbGxhdGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0 aCBuYW1lZCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJtdXN0IGJlIGJpZ2dlciB0 aGFuIDEwXCIgQ0hFQ0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwK KwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQp OworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRl cyBjaGVjayBjb25zdHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwIi8KKyAgb3IgZGllICJm YWlsZWQgdG8gcmVwbGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIp OworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25zdHJhaW50 cy4KKyMgTk9UIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5PVCBOVUxMKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIs CisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJy LAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxs IHZhbHVlIGluIGNvbHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgbm90LW51 bGwgY29uc3RyYWludC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5vbiBudWxsIGNv bnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwgY29uc3RyYWludAorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlk IGludCwgbmFtZSB0ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5VTEwgRlJPTSB0bXA7Iik7 CitpcygkcmVzdWx0LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5VTEwgY29uc3RyYWludCBy ZXBsaWNhdGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBwcm9kdWN0X2Ft ZSB0ZXh0LCBwcmljZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycsIC0xMDApOyIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZv ciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfcHJpY2VfY2hl Y2siLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sgY29uc3RyYWludCI7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7 CisKKyMgREVGQVVMVAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNS RUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQgJ2ZvbycpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBuYW1lIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwgIkNSRUFURSBUQUJMRSB3 aXRoIGRlZmF1bHQgdmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5JUVVFIGNvbnN0cmFpbnQK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1w IChpZCBpbnQgVU5JUVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3Ag PT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRz dGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVz IHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVw bGljYXRlIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFBSSU1BUlkgS0VZ Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdi YXInKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBc JHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3Br ZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFyeSBrZXkgYXQgY3JlYXRp bmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag VEFCTEUgdG1wOyIpOworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUsIEVYQ0xVREUgVVNJTkcg Z2lzdCAoYyBXSVRIICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAo JzwoMSwgMSksIDE+Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRlcnIgPX4gL0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1 c2lvbiBjb25zdHJhaW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJl cGxpY2F0ZSBFWENMVURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsKKworIyBSRUZFUkVOQ0VT Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHBy b2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMSwg J2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHByb2R1Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBS SU1BUlkgS0VZLCBwcm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSkiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBWQUxVRVMgKDEsIDEwKSIs CisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJy LAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBpbnNl cnQgb3IgdXBkYXRlIG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0 cmFpbnQgIm9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBs aWNhdGUgUkVGRVJFTkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1Y3QiKTsKKworIyBERUZF UlJBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZB TFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hlY2sgb2YgZGVmZXJyYWJs ZSBjbGF1c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVVBEQVRF IHRtcCBTRVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUgYSB0ZXN0IHRoYXQgc2hv dWxkIGZhaWwgZm9yIElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1bHQpCiskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1wIFNFVCBpZCA9 IGlkICsgMTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsKK0RFTEVURSBG Uk9NIHRtcCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJvcl9zdG9wID0+IDAsIHN0 ZGVyciA9PiBcJHN0ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3Br ZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJSQUJMRSBhdCBjcmVhdGlu ZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXA7Iik7CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgTk9U IERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMg KDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlk ID0gaWQgKyAxOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJy ID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAv RVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0 bXBfcGtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBOT1QgREVGRVJSQUJMRSBh dCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQgSU5JVElBTExZIERFRkVS UkVECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVELCBu YW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNo ZWNrIG9mIGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRl IGEgdGVzdCB0aGF0IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkgREVGRVJSRUQKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRt cCBTRVQgaWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7 CitERUxFVEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVz dCBDUkVBVEUgVEFCTEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdlIHdpbGwgc2V0IHR3byBj aGVja3MgYW5kIGNvbmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQgZmFpbCByZXNwZWN0aXZl bHkuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFC TEUgdG1wIChwcmljZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBDSEVDSyAoZGlzY291bnRl ZF9wcmljZSA+IDAgQU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAwLCAwKTsiLAorCQkJCQkg ICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJ ICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3Ig cmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAg b3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKGZpcnN0IGNvbmRp dGlvbikgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwKKwkJCQkJICAgb25fZXJy b3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91 dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9u ICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAi ZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNvbmQgY29uZGl0aW9uKSBh dCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgV0lUSCBzdHJvcmFn ZV9wYXJhbWV0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdG1wIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4MCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBn X2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+ IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rk b3V0KTsKKyRzdGRvdXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3IgZGllICJmYWlsZWQgdG8g cmVwbGljYXRlIHN0b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9wYXJhbWV0ZXIgcmVwbGlj YXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgKGNyZWF0aW5nIGEg dGFibGVzcGFjZSBpcyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0aGUgZGlyZWN0b3JpZXMg Zm9yIHRoZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitteSAoJGJhc2VkaXIsICR0 YWJsZXNwYWNlX2Rpcik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlzaGVyLT5iYXNlZGlyOwor JHRhYmxlc3BhY2VfZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOworbWtkaXIoJHRhYmxlc3Bh Y2VfZGlyKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEVTUEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKyRiYXNl ZGlyID0gJG5vZGVfc3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFz ZWRpci90YmxzcGNfc3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIpOworJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBM T0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkgVEFCTEVTUEFDRSBteXRi bHNwYzsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAn Q1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRF IFRBQkxFIE9GIChjcmVhdGluZyBhIHR5cGUgaXMgbm90IHJlcGxpY2F0ZWQpCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXl0eXBlIEFTIChpZCBp bnQsIG5hbWUgdGV4dCwgYWdlIGludCk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIG15dHlwZSBBUyAoaWQgaW50LCBuYW1lIHRleHQsIGFn ZSBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRSB0bXAgT0YgbXl0eXBlOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdiYXInKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsi KTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOwor CitwYXNzICJEREwgcmVwbGljYXRpb24gdGVzdHMgcGFzc2VkOiI7CisKKyRub2RlX3N1YnNjcmli ZXItPnN0b3A7Ciskbm9kZV9wdWJsaXNoZXItPnN0b3A7CisKK2RvbmVfdGVzdGluZygpOwotLSAK MS44LjMuMQoK --_005_OS0PR01MB5716D3B79A607B547F2AB90D94819OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v11-0001-Functions-to-deparse-DDL-commands.patch" Content-Description: v11-0001-Functions-to-deparse-DDL-commands.patch Content-Disposition: attachment; filename="v11-0001-Functions-to-deparse-DDL-commands.patch"; size=135065; creation-date="Tue, 05 Jul 2022 08:25:00 GMT"; modification-date="Tue, 05 Jul 2022 08:28:03 GMT" Content-Transfer-Encoding: base64 RnJvbSBlNzk3OTBmNGVhY2JhNzcxZWE2MzMzZDY3ZjUyY2JkODI3ZTNmM2UxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IEZyaSwgMjcgTWF5IDIwMjIgMTM6NDc6MDUgKzA4MDAKU3ViamVjdDogW1BBVENI XSBGdW5jdGlvbnMgdG8gZGVwYXJzZSBEREwgY29tbWFuZHMuCgpUaGlzIHBhdGNoIHByb3ZpZGVz IEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hpY2ggY2FuCmxhdGVyIGJl IHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1kZWZpbmVkIHNwcmludGYt bGlrZQpleHBhbnNpb24uIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8gYWxsb3cg Zm9yIG1hY2hpbmUtZWRpdGluZyBvZgp0aGUgY29tbWFuZHMsIGJ5IHJlcGxhY2luZyBjZXJ0YWlu IG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KCk11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGluIHRo ZSBvdXRwdXQgYmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5c3RlbQpjYXRhbG9ncywgbm90IGZy b20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMgaW1wb3NzaWJsZSB0byByZWxpYWJs eQpjb25zdHJ1Y3QgYSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5lLiBvbmUgbm90IGRlcGVu ZGVudCBvbiBzZWFyY2hfcGF0aApldGMpIGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ugbm9kZS4K ClRoaXMgcHJvdmlkZXMgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBEREwgc3RhdGVt ZW50cy4gQ3VycmVudGx5LAp0aGlzIHByb3ZpZGVzIHN1cHBvcnQgZm9yOgoKQ1JFQVRFL0FMVEVS L0RST1AgVEFCTEUgKCopCkNSRUFURS9BTFRFUi9EUk9QIFNFUVVFTkNFCkNSRUFURS9BTFRFUi9E Uk9QIFNDSEVNQQpDUkVBVEUvRFJPUCBJTkRFWAoKKCopIE5vdGUgdGhhdCBzb21lIHJlY2VudGx5 IGludHJvZHVjZWQgRERMcyhlLmcuIERETHMgcmVsYXRlZCB0bwpQQVJUSVRJT05FRCBUQUJMRSkg YXJlIHVuc3VwcG9ydGVkLiBXZSBjYW4gZXh0ZW5kIGl0IGFzIHdlIG5lZWQgbW9yZQpmdW5jdGlv bmFsaXR5IGZvciBEREwgcmVwbGljYXRpb24uCgooKikgTm90ZSB0aGF0LCBmb3IgQVRUQUNIL0RF VEFDSCBQQVJUSVRJT04sIHdlIGhhdmVuJ3QgYWRkZWQgZXh0cmEgbG9naWMgb24Kc3Vic2NyaWJl ciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHRhYmxlIG9uIHB1Ymxpc2hlciBpcyBhIFBB UlRJVElPTkVEClRBQkxFIHdoaWxlIHRoZSB0YXJnZXQgdGFibGUgb24gc3ViY3JpYmVyIHNpZGUg aXMgTk9STUFMIHRhYmxlLiBXZSB3aWxsCnJlc2VhcmNoIHRoaXMgbW9yZSBhbmQgaW1wcm92ZSB0 aGlzIGxhdGVyLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlICAgICAgIHwgICAg MiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jICB8IDM0MTMgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29u LmMgICAgIHwgIDc2MyArKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAg ICAgfCAgIDM0ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgIHwgICAxNyAr LQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgfCAgICAzICstCiBzcmMvYmFj a2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgICB8ICAgMjIgKy0KIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQgICAgIHwgICAgNiArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5j ZS5oICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oICAgICAgfCAg IDI0ICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggIHwgICAgMSArCiBzcmMv aW5jbHVkZS91dGlscy9idWlsdGlucy5oICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdXRp bHMvcnVsZXV0aWxzLmggICAgICAgfCAgICA1ICsKIDEzIGZpbGVzIGNoYW5nZWQsIDQyNzcgaW5z ZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9qc29uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS90Y29w L2RkbF9kZXBhcnNlLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmls ZSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IDQ4ZjczNDguLjE3MWRmYjIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL01ha2VmaWxlCkBAIC0yOSw2ICsyOSw4IEBAIE9CSlMgPSBcCiAJY29weXRv Lm8gXAogCWNyZWF0ZWFzLm8gXAogCWRiY29tbWFuZHMubyBcCisJZGRsX2RlcGFyc2UubyBcCisJ ZGRsX2pzb24ubyBcCiAJZGVmaW5lLm8gXAogCWRpc2NhcmQubyBcCiAJZHJvcGNtZHMubyBcCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5iNmI1NGY3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYwpAQCAtMCwwICsxLDM0MTMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IGRkbF9kZXBhcnNlLmMKKyAqCSAgRnVuY3Rpb25zIHRvIGNvbnZlcnQgdXRpbGl0eSBjb21tYW5k cyB0byBtYWNoaW5lLXBhcnNlYWJsZQorICoJICByZXByZXNlbnRhdGlvbgorICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBOT1RFUworICoKKyAqIFRoaXMgaXMgaW50 ZW5kZWQgdG8gcHJvdmlkZSBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdo aWNoIGNhbgorICogbGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3 ZWxsLWRlZmluZWQgc3ByaW50Zi1saWtlCisgKiBleHBhbnNpb24uICBUaGVzZSBKU09OIG9iamVj dHMgYXJlIGludGVuZGVkIHRvIGFsbG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKKyAqIHRoZSBj b21tYW5kcywgYnkgcmVwbGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgor ICoKKyAqIE11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBvdXRwdXQgYmxvYiBhY3R1YWxs eSBjb21lcyBmcm9tIHN5c3RlbQorICogY2F0YWxvZ3MsIG5vdCBmcm9tIHRoZSBjb21tYW5kIHBh cnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkKKyAqIGNvbnN0cnVjdCBh IGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBub3QgZGVwZW5kZW50IG9uIHNlYXJj aF9wYXRoCisgKiBldGMpIGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ugbm9kZS4KKyAqCisgKiBJ REVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisj aW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X2NsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2RlcGVuZC5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX25h bWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRl ICJjb21tYW5kcy9zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIK KyNpbmNsdWRlICJsaWIvaWxpc3QuaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNp bmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgi CisjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgInJld3JpdGUvcmV3 cml0ZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0 aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1dGls cy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0 aWxzL3JlbC5oIgorI2luY2x1ZGUgInV0aWxzL3J1bGV1dGlscy5oIgorI2luY2x1ZGUgInV0aWxz L3N5c2NhY2hlLmgiCisKKworLyoKKyAqIEJlZm9yZSB0aGV5IGFyZSB0dXJuZWQgaW50byBKU09O QiByZXByZXNlbnRhdGlvbiwgZWFjaCBjb21tYW5kIGlzCisgKiByZXByZXNlbnRlZCBhcyBhbiBv YmplY3QgdHJlZSwgdXNpbmcgdGhlIHN0cnVjdHMgYmVsb3cuCisgKi8KK3R5cGVkZWYgZW51bQor eworCU9ialR5cGVOdWxsLAorCU9ialR5cGVCb29sLAorCU9ialR5cGVTdHJpbmcsCisJT2JqVHlw ZUFycmF5LAorCU9ialR5cGVJbnRlZ2VyLAorCU9ialR5cGVGbG9hdCwKKwlPYmpUeXBlT2JqZWN0 Cit9IE9ialR5cGU7CisKK3R5cGVkZWYgc3RydWN0IE9ialRyZWUKK3sKKwlzbGlzdF9oZWFkCXBh cmFtczsKKwlpbnQJCQludW1QYXJhbXM7Cit9IE9ialRyZWU7CisKK3R5cGVkZWYgc3RydWN0IE9i akVsZW0KK3sKKwljaGFyCSAgICpuYW1lOworCU9ialR5cGUJCW9ianR5cGU7CisKKwl1bmlvbgor CXsKKwkJYm9vbAkJYm9vbGVhbjsKKwkJY2hhcgkgICAqc3RyaW5nOworCQlpbnQ2NAkJaW50ZWdl cjsKKwkJZmxvYXQ4CQlmbHQ7CisJCU9ialRyZWUJICAgKm9iamVjdDsKKwkJTGlzdAkgICAqYXJy YXk7CisJfSB2YWx1ZTsKKwlzbGlzdF9ub2RlCW5vZGU7Cit9IE9iakVsZW07CisKK3N0YXRpYyBP YmpFbGVtICpuZXdfb2JqZWN0KE9ialR5cGUgdHlwZSwgY2hhciAqbmFtZSk7CitzdGF0aWMgT2Jq RWxlbSAqbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFsdWUpOworc3RhdGljIHZvaWQgYXBw ZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUpOworc3RhdGljIHZvaWQg YXBwZW5kX2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGJvb2wgdmFsdWUp Oworc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAq bmFtZSwgY2hhciAqdmFsdWUpOworc3RhdGljIHZvaWQgYXBwZW5kX29iamVjdF9vYmplY3QoT2Jq VHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgT2JqVHJlZSAqdmFsdWUpOworc3RhdGljIHZvaWQgYXBw ZW5kX2FycmF5X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBMaXN0ICphcnJheSk7 CitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUs IE9iakVsZW0gKmVsZW0pOworc3RhdGljIEpzb25iVmFsdWUgKm9ianRyZWVfdG9fanNvbmJfcmVj KE9ialRyZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUpOworc3RhdGljIHZvaWQgZm9y bWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkgT2lk ICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkgYm9vbCAq dHlwYXJyYXkpOworc3RhdGljIGNvbnN0IGNoYXIgKnN0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5 cGUgb2JqdHlwZSk7CisKK3N0YXRpYyBjaGFyICpSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVs YXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLAorCQkJCQkJCQkJICBMaXN0ICpkcGNvbnRleHQs IExpc3QgKipleHBycyk7CisKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ2Fj aGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJf dGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DeWNsZShPYmpUcmVl ICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7Citz dGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KE9ialRyZWUgKnBh cmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfTWludmFsdWUoT2JqVHJlZSAqcGFyZW50LCBG b3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGlu ZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NYXh2YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf c2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKmRlcGFyc2VfU2VxX1N0YXJ0d2l0aChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVu Y2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRl cGFyc2VfU2VxX1Jlc3RhcnQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlX2RhdGEg c2VxZGF0YSk7CisKKy8qCisgKiBTaW1pbGFyIHRvIGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNl cHQgd2UgcmV0dXJuIGVhY2ggYml0IG9mIGluZm9ybWF0aW9uCisgKiBzZXBhcmF0ZWx5OgorICoK KyAqIC0gbnNwaWQgaXMgdGhlIHNjaGVtYSBPSUQuICBGb3IgY2VydGFpbiBTUUwtc3RhbmRhcmQg dHlwZXMgd2hpY2ggaGF2ZSB3ZWlyZAorICogICB0eXBtb2QgcnVsZXMsIHdlIHJldHVybiBJbnZh bGlkT2lkOyBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gbm90IHNjaGVtYS0KKyAqICAgcXVhbGlmeSB0 aGUgbmFtZSBub3IgYWRkIHF1b3RlcyB0byB0aGUgdHlwZSBuYW1lIGluIHRoaXMgY2FzZS4KKyAq CisgKiAtIHR5cGVuYW1lIGlzIHNldCB0byB0aGUgdHlwZSBuYW1lLCB3aXRob3V0IHF1b3Rlcwor ICoKKyAqIC0gdHlwbW9kIGlzIHNldCB0byB0aGUgdHlwZW1vZCwgaWYgYW55LCBhcyBhIHN0cmlu ZyB3aXRoIHBhcmVucworICoKKyAqIC0gdHlwYXJyYXkgaW5kaWNhdGVzIHdoZXRoZXIgW11zIG11 c3QgYmUgYWRkZWQKKyAqCisgKiBXZSBkb24ndCB0cnkgdG8gZGVjb2RlIHR5cGUgbmFtZXMgdG8g dGhlaXIgc3RhbmRhcmQtbWFuZGF0ZWQgbmFtZXMsIGV4Y2VwdAorICogaW4gdGhlIGNhc2VzIG9m IHR5cGVzIHdpdGggdW51c3VhbCB0eXBtb2QgcnVsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitmb3Jt YXRfdHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCisJCQkJCSBPaWQg Km5zcGlkLCBjaGFyICoqdHlwbmFtZSwgY2hhciAqKnR5cGVtb2RzdHIsCisJCQkJCSBib29sICp0 eXBhcnJheSkKK3sKKwlIZWFwVHVwbGUJCXR1cGxlOworCUZvcm1fcGdfdHlwZQl0eXBlZm9ybTsK KwlPaWQJCQkJYXJyYXlfYmFzZV90eXBlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQ RU9JRCwgT2JqZWN0SWRHZXREYXR1bSh0eXBlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZCh0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlICV1 IiwgdHlwZV9vaWQpOworCisJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVw bGUpOworCisJLyoKKwkgKiBDaGVjayBpZiBpdCdzIGEgcmVndWxhciAodmFyaWFibGUgbGVuZ3Ro KSBhcnJheSB0eXBlLiAgQXMgYWJvdmUsCisJICogZml4ZWQtbGVuZ3RoIGFycmF5IHR5cGVzIHN1 Y2ggYXMgIm5hbWUiIHNob3VsZG4ndCBnZXQgZGVjb25zdHJ1Y3RlZC4KKwkgKi8KKwlhcnJheV9i YXNlX3R5cGUgPSB0eXBlZm9ybS0+dHlwZWxlbTsKKworCWlmIChJc1RydWVBcnJheVR5cGUodHlw ZWZvcm0pICYmCisJCXR5cGVmb3JtLT50eXBzdG9yYWdlICE9IFRZUFNUT1JBR0VfUExBSU4pCisJ eworCQkvKiBTd2l0Y2ggb3VyIGF0dGVudGlvbiB0byB0aGUgYXJyYXkgZWxlbWVudCB0eXBlICov CisJCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisJCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZ UEVPSUQsIE9iamVjdElkR2V0RGF0dW0oYXJyYXlfYmFzZV90eXBlKSk7CisJCWlmICghSGVhcFR1 cGxlSXNWYWxpZCh0dXBsZSkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgdHlwZSAldSIsIHR5cGVfb2lkKTsKKworCQl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdF VFNUUlVDVCh0dXBsZSk7CisJCXR5cGVfb2lkID0gYXJyYXlfYmFzZV90eXBlOworCQkqdHlwYXJy YXkgPSB0cnVlOworCX0KKwllbHNlCisJCSp0eXBhcnJheSA9IGZhbHNlOworCisJLyoKKwkgKiBT cGVjaWFsLWNhc2UgY3JvY2sgZm9yIHR5cGVzIHdpdGggc3RyYW5nZSB0eXBtb2QgcnVsZXMgd2hl cmUgd2UgcHV0CisJICogdHlwbW9kIGF0IHRoZSBtaWRkbGUgb2YgbmFtZShlLmcuIFRJTUUoNikg d2l0aCB0aW1lIHpvbmUgKS4gV2UgY2Fubm90CisJICogc2NoZW1hLXF1YWxpZnkgbm9yIGFkZCBx dW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGVzZSBjYXNlcy4KKwkgKi8KKwlpZiAodHlwZV9v aWQgPT0gSU5URVJWQUxPSUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRVNUQU1QT0lEIHx8CisJCXR5 cGVfb2lkID09IFRJTUVTVEFNUFRaT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVPSUQgfHwKKwkJ dHlwZV9vaWQgPT0gVElNRVRaT0lEKQorCXsKKwkJc3dpdGNoICh0eXBlX29pZCkKKwkJeworCQkJ Y2FzZSBJTlRFUlZBTE9JRDoKKwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIklOVEVSVkFMIik7CisJ CQkJYnJlYWs7CisJCQljYXNlIFRJTUVTVEFNUFRaT0lEOgorCQkJCWlmICh0eXBlbW9kIDwgMCkK KwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAgV0lUSCBUSU1FIFpPTkUiKTsKKwkJ CQllbHNlCisJCQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBhZGRlZCBieSB0eXBtb2QuICov CisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIik7CisJCQkJYnJlYWs7CisJCQlj YXNlIFRJTUVTVEFNUE9JRDoKKwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCIpOwor CQkJCWJyZWFrOworCQkJY2FzZSBUSU1FVFpPSUQ6CisJCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJ CQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUgV0lUSCBUSU1FIFpPTkUiKTsKKwkJCQllbHNlCisJ CQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBhZGRlZCBieSB0eXBtb2RlLiAqLworCQkJCQkq dHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRU9JRDoK KwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCQlicmVhazsKKwkJfQorCQkqbnNw aWQgPSBJbnZhbGlkT2lkOworCisJCWlmICh0eXBlbW9kID49IDApCisJCQkqdHlwZW1vZHN0ciA9 IHByaW50VHlwbW9kKCIiLCB0eXBlbW9kLCB0eXBlZm9ybS0+dHlwbW9kb3V0KTsKKwkJZWxzZQor CQkJKnR5cGVtb2RzdHIgPSBwc3RyZHVwKCIiKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUp OworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBObyBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgaXMg cmVxdWlyZWQgZm9yIG90aGVyIHR5cGVzLCBzbyBnZXQgdGhlIHR5cGUKKwkgKiBuYW1lIGFuZCBz Y2hlbWEgZGlyZWN0bHkgZnJvbSB0aGUgY2F0YWxvZy4KKwkgKi8KKwkqbnNwaWQgPSB0eXBlZm9y bS0+dHlwbmFtZXNwYWNlOworCSp0eXBuYW1lID0gcHN0cmR1cChOYW1lU3RyKHR5cGVmb3JtLT50 eXBuYW1lKSk7CisKKwlpZiAodHlwZW1vZCA+PSAwKQorCQkqdHlwZW1vZHN0ciA9IHByaW50VHlw bW9kKCIiLCB0eXBlbW9kLCB0eXBlZm9ybS0+dHlwbW9kb3V0KTsKKwllbHNlCisJCSp0eXBlbW9k c3RyID0gcHN0cmR1cCgiIik7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworfQorCisvKgor ICogT2J0YWluIHRoZSBkZXBhcnNlZCBkZWZhdWx0IHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29sdW1u IG9mIHRoZSBnaXZlbiB0YWJsZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIHNldCBhIGNvcnJl Y3QgZGVwYXJzZSBjb250ZXh0LgorICovCitzdGF0aWMgY2hhciAqCitSZWxhdGlvbkdldENvbHVt bkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLCBMaXN0ICpkcGNvbnRleHQs CisJCQkJCQkgTGlzdCAqKmV4cHJzKQoreworCU5vZGUgKmRlZnZhbDsKKwljaGFyICpkZWZzdHI7 CisKKwlkZWZ2YWwgPSBidWlsZF9jb2x1bW5fZGVmYXVsdChyZWwsIGF0dG5vKTsKKwlkZWZzdHIg PSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBkcGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisK KwkvKiBDb2xsZWN0IHRoZSBleHByZXNzaW9uIGZvciBsYXRlciByZXBsaWNhdGlvbiBzYWZldHkg Y2hlY2tzICovCisJaWYgKGV4cHJzKQorCQkqZXhwcnMgPSBsYXBwZW5kKCpleHBycywgZGVmdmFs KTsKKworCXJldHVybiBkZWZzdHI7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3Qg dHJlZSB0byBzdG9yZSBwYXJhbWV0ZXIgdmFsdWVzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitu ZXdfb2JqdHJlZSh2b2lkKQoreworCU9ialRyZWUJKnBhcmFtczsKKworCXBhcmFtcyA9IHBhbGxv YyhzaXplb2YoT2JqVHJlZSkpOworCXBhcmFtcy0+bnVtUGFyYW1zID0gMDsKKwlzbGlzdF9pbml0 KCZwYXJhbXMtPnBhcmFtcyk7CisKKwlyZXR1cm4gcGFyYW1zOworfQorCisvKgorICogQWxsb2Nh dGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdz IHZlcnNpb24uCisgKgorICogVGhlICJmbXQiIGFyZ3VtZW50IGlzIHVzZWQgdG8gYXBwZW5kIGFz IGEgImZtdCIgZWxlbWVudCBpbiB0aGUgb3V0cHV0IGJsb2IuCisgKiBudW1vYmpzIGluZGljYXRl cyB0aGUgbnVtYmVyIG9mIGV4dHJhIGVsZW1lbnRzIHRvIGFwcGVuZDsgZm9yIGVhY2ggb25lLCBh CisgKiBuYW1lIChzdHJpbmcpLCB0eXBlIChmcm9tIHRoZSBPYmpUeXBlIGVudW0pIGFuZCB2YWx1 ZSBtdXN0IGJlIHN1cHBsaWVkLiAgVGhlCisgKiB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB0eXBlIGdp dmVuOyBmb3IgaW5zdGFuY2UsIE9ialR5cGVJbnRlZ2VyIHJlcXVpcmVzIGFuCisgKiBpbnQ2NCwg T2JqVHlwZVN0cmluZyByZXF1aXJlcyBhIGNoYXIgKiwgT2JqVHlwZUFycmF5IHJlcXVpcmVzIGEg bGlzdCAob2YKKyAqIE9iakVsZW0pLCBPYmpUeXBlT2JqZWN0IHJlcXVpcmVzIGFuIE9ialRyZWUs IGFuZCBzbyBvbi4gIEVhY2ggZWxlbWVudCB0eXBlICoKKyAqIG11c3QgbWF0Y2ggdGhlIGNvbnZl cnNpb24gc3BlY2lmaWVyIGdpdmVuIGluIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBkZXNjcmliZWQK KyAqIGluIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLCBxLnYuCisgKgorICogTm90ZSB3ZSBk b24ndCBoYXZlIHRoZSBsdXh1cnkgb2Ygc3ByaW50Zi1saWtlIGNvbXBpbGVyIHdhcm5pbmdzIGZv cgorICogbWFsZm9ybWVkIGFyZ3VtZW50IGxpc3RzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitu ZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLikKK3sKKwlPYmpUcmVlCSp0 cmVlOworCXZhX2xpc3QJCWFyZ3M7CisJaW50CQkJaTsKKworCS8qIFNldCB1cCB0aGUgdG9wbGV2 ZWwgb2JqZWN0IGFuZCBpdHMgImZtdCIgKi8KKwl0cmVlID0gbmV3X29ianRyZWUoKTsKKwlhcHBl bmRfc3RyaW5nX29iamVjdCh0cmVlLCAiZm10IiwgZm10KTsKKworCS8qIEFuZCBwcm9jZXNzIHRo ZSBnaXZlbiB2YXJhcmdzICovCisJdmFfc3RhcnQoYXJncywgbnVtb2Jqcyk7CisJZm9yIChpID0g MDsgaSA8IG51bW9ianM7IGkrKykKKwl7CisJCWNoYXIJICAgKm5hbWU7CisJCU9ialR5cGUJCXR5 cGU7CisJCU9iakVsZW0JICAgKmVsZW07CisKKwkJbmFtZSA9IHZhX2FyZyhhcmdzLCBjaGFyICop OworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIE9ialR5cGUpOworCQllbGVtID0gbmV3X29iamVjdCh0 eXBlLCBOVUxMKTsKKworCQkvKgorCQkgKiBGb3IgYWxsIG90aGVyIHBhcmFtIHR5cGVzIHRoZXJl IG11c3QgYmUgYSB2YWx1ZSBpbiB0aGUgdmFyYXJncy4KKwkJICogRmV0Y2ggaXQgYW5kIGFkZCB0 aGUgZnVsbHkgZm9ybWVkIHN1Ym9iamVjdCBpbnRvIHRoZSBtYWluIG9iamVjdC4KKwkJICovCisJ CXN3aXRjaCAodHlwZSkKKwkJeworCQkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJCQkvKiBOdWxsIHBh cmFtcyBkb24ndCBoYXZlIGEgdmFsdWUgKG9idmlvdXNseSkgKi8KKwkJCQlicmVhazsKKwkJCWNh c2UgT2JqVHlwZUJvb2w6CisJCQkJZWxlbS0+dmFsdWUuYm9vbGVhbiA9IHZhX2FyZyhhcmdzLCBp bnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJCWVsZW0tPnZhbHVl LnN0cmluZyA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpU eXBlQXJyYXk6CisJCQkJZWxlbS0+dmFsdWUuYXJyYXkgPSB2YV9hcmcoYXJncywgTGlzdCAqKTsK KwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQkJZWxlbS0+dmFsdWUuaW50 ZWdlciA9IHZhX2FyZyhhcmdzLCBpbnQ2NCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVG bG9hdDoKKwkJCQllbGVtLT52YWx1ZS5mbHQgPSB2YV9hcmcoYXJncywgZG91YmxlKTsKKwkJCQli cmVhazsKKwkJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCQllbGVtLT52YWx1ZS5vYmplY3QgPSB2 YV9hcmcoYXJncywgT2JqVHJlZSAqKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxv ZyhFUlJPUiwgImludmFsaWQgT2JqVHJlZSBlbGVtZW50IHR5cGUgJWQiLCB0eXBlKTsKKwkJfQor CisJCWVsZW0tPm5hbWUgPSBuYW1lOworCQlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgZWxl bSk7CisJfQorCisJdmFfZW5kKGFyZ3MpOworCXJldHVybiB0cmVlOworfQorCisvKiBBbGxvY2F0 ZSBhIG5ldyBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3QoT2JqVHlw ZSB0eXBlLCBjaGFyICpuYW1lKQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFyYW0gPSBwYWxs b2MwKHNpemVvZihPYmpFbGVtKSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCXBhcmFtLT5vYmp0 eXBlID0gdHlwZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyogQXBwZW5kIGEgTlVMTCBvYmpl Y3QgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUg KnRyZWUsIGNoYXIgKm5hbWUpCit7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIG5ld19v YmplY3QoT2JqVHlwZU51bGwsIG5hbWUpKTsKK30KKworLyogQXBwZW5kIGEgYm9vbGVhbiBwYXJh bWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Jvb2xfb2JqZWN0KE9ialRy ZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGJvb2wgdmFsdWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisK KwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUJvb2wsIG5hbWUpOworCXBhcmFtLT52YWx1ZS5i b29sZWFuID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30K KworLyoKKyAqIEFwcGVuZCBhIHN0cmluZyBwYXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0 aWMgdm9pZAorYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwg Y2hhciAqdmFsdWUpCit7CisJT2JqRWxlbQkgICAqcGFyYW07CisKKwlBc3NlcnQobmFtZSk7CisJ cGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIG5hbWUpOworCXBhcmFtLT52YWx1ZS5z dHJpbmcgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQor CisvKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgcGFyYW1ldGVyICovCitzdGF0aWMgT2JqRWxlbSAq CituZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsK KworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBOVUxMKTsKKwlwYXJhbS0+dmFs dWUub2JqZWN0ID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qIEFwcGVuZCBhbiBv YmplY3QgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9vYmplY3Rf b2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIE9ialRyZWUgKnZhbHVlKQoreworCU9i akVsZW0JKnBhcmFtOworCisJQXNzZXJ0KG5hbWUpOworCXBhcmFtID0gbmV3X29iamVjdChPYmpU eXBlT2JqZWN0LCBuYW1lKTsKKwlwYXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisJYXBwZW5k X3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyogQXBwZW5kIGFuIGFycmF5IHBh cmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfYXJyYXlfb2JqZWN0KE9i alRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIExpc3QgKmFycmF5KQoreworCU9iakVsZW0JKnBhcmFt OworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVBcnJheSwgbmFtZSk7CisJcGFyYW0tPnZh bHVlLmFycmF5ID0gYXJyYXk7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsK K30KKworLyogQXBwZW5kIGEgcHJlYWxsb2NhdGVkIHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0 YXRpYyBpbmxpbmUgdm9pZAorYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9i akVsZW0gKmVsZW0pCit7CisJc2xpc3RfcHVzaF9oZWFkKCZ0cmVlLT5wYXJhbXMsICZlbGVtLT5u b2RlKTsKKwl0cmVlLT5udW1QYXJhbXMrKzsKK30KKworLyoKKyAqIEhlbHBlciBmb3Igb2JqdHJl ZV90b19qc29uYjogcHJvY2VzcyBhbiBpbmRpdmlkdWFsIGVsZW1lbnQgZnJvbSBhbiBvYmplY3Qg b3IKKyAqIGFuIGFycmF5IGludG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4KKyAqLworc3RhdGlj IHZvaWQKK29ianRyZWVfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBP YmpFbGVtICpvYmplY3QsCisJCQkJCQkgSnNvbmJJdGVyYXRvclRva2VuIGVsZW1fdG9rZW4pCit7 CisJTGlzdENlbGwgICAqY2VsbDsKKwlKc29uYlZhbHVlCXZhbDsKKworCXN3aXRjaCAob2JqZWN0 LT5vYmp0eXBlKQorCXsKKwkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJCXZhbC50eXBlID0gamJ2TnVs bDsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVh azsKKworCQljYXNlIE9ialR5cGVTdHJpbmc6CisJCQl2YWwudHlwZSA9IGpidlN0cmluZzsKKwkJ CXZhbC52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmplY3QtPnZhbHVlLnN0cmluZyk7CisJCQl2 YWwudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPnZhbHVlLnN0cmluZzsKKwkJCXB1c2hKc29uYlZh bHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5 cGVJbnRlZ2VyOgorCQkJdmFsLnR5cGUgPSBqYnZOdW1lcmljOworCQkJdmFsLnZhbC5udW1lcmlj ID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXROdW1lcmljKERpcmVjdEZ1bmN0aW9uQ2FsbDEoaW50 OF9udW1lcmljLAorCQkJCQkJCQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVz aEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNh c2UgT2JqVHlwZUZsb2F0OgorCQkJdmFsLnR5cGUgPSBqYnZOdW1lcmljOworCQkJdmFsLnZhbC5u dW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXROdW1lcmljKERpcmVjdEZ1bmN0aW9uQ2Fs bDEoZmxvYXQ4X251bWVyaWMsCisJCQkJCQkJCQkJCQkJb2JqZWN0LT52YWx1ZS5pbnRlZ2VyKSk7 CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBPYmpUeXBlQm9vbDoKKwkJCXZhbC50eXBlID0gamJ2Qm9vbDsKKwkJCXZhbC52 YWwuYm9vbGVhbiA9IG9iamVjdC0+dmFsdWUuYm9vbGVhbjsKKwkJCXB1c2hKc29uYlZhbHVlKCZz dGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVPYmpl Y3Q6CisJCQkvKiByZWN1cnNpdmVseSBhZGQgdGhlIG9iamVjdCBpbnRvIHRoZSBleGlzdGluZyBw YXJzZSBzdGF0ZSAqLworCQkJb2JqdHJlZV90b19qc29uYl9yZWMob2JqZWN0LT52YWx1ZS5vYmpl Y3QsIHN0YXRlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUFycmF5OgorCQkJcHVzaEpz b25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwpOworCQkJZm9yZWFjaChjZWxs LCBvYmplY3QtPnZhbHVlLmFycmF5KQorCQkJeworCQkJCU9iakVsZW0gICAqZWxlbSA9IGxmaXJz dChjZWxsKTsKKworCQkJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgZWxlbSwgV0pC X0VMRU0pOworCQkJfQorCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX0FSUkFZLCBO VUxMKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25p emVkIG9iamVjdCB0eXBlICVkIiwgb2JqZWN0LT5vYmp0eXBlKTsKKwkJCWJyZWFrOworCX0KK30K KworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIG9ianRyZWVfdG9fanNvbmIKKyAqLworc3Rh dGljIEpzb25iVmFsdWUgKgorb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNv bmJQYXJzZVN0YXRlICpzdGF0ZSkKK3sKKwlzbGlzdF9pdGVyCWl0ZXI7CisKKwlwdXNoSnNvbmJW YWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJc2xpc3RfZm9yZWFjaChp dGVyLCAmdHJlZS0+cGFyYW1zKQorCXsKKwkJT2JqRWxlbQkqb2JqZWN0ID0gc2xpc3RfY29udGFp bmVyKE9iakVsZW0sIG5vZGUsIGl0ZXIuY3VyKTsKKwkJSnNvbmJWYWx1ZQlrZXk7CisKKwkJLyog UHVzaCB0aGUga2V5IGZpcnN0ICovCisJCWtleS50eXBlID0gamJ2U3RyaW5nOworCQlrZXkudmFs LnN0cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0LT5uYW1lKTsKKwkJa2V5LnZhbC5zdHJpbmcudmFs ID0gb2JqZWN0LT5uYW1lOworCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9LRVksICZrZXkp OworCisJCS8qIFRoZW4gcHJvY2VzcyB0aGUgdmFsdWUgYWNjb3JkaW5nIHRvIGl0cyB0eXBlICov CisJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgb2JqZWN0LCBXSkJfVkFMVUUpOwor CX0KKworCXJldHVybiBwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxM KTsKK30KKworLyoKKyAqIENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4gT2Jq VHJlZS4KKyAqLworc3RhdGljIEpzb25iICoKK29ianRyZWVfdG9fanNvbmIoT2JqVHJlZSAqdHJl ZSkKK3sKKwlKc29uYlZhbHVlICp2YWx1ZTsKKworCXZhbHVlID0gb2JqdHJlZV90b19qc29uYl9y ZWModHJlZSwgTlVMTCk7CisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsKK30KKwor LyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIgdHlw bW9kKQoreworCU9ialRyZWUJKnR5cGVQYXJhbTsKKwlPaWQJCQl0eXBuc3BpZDsKKwljaGFyCSAg ICp0eXBuc3A7CisJY2hhcgkgICAqdHlwZW5hbWUgPSBOVUxMOworCWNoYXIJICAgKnR5cG1vZHN0 cjsKKwlib29sCQl0eXBhcnJheTsKKworCWZvcm1hdF90eXBlX2RldGFpbGVkKHR5cGVJZCwgdHlw bW9kLAorCQkJCQkJICZ0eXBuc3BpZCwgJnR5cGVuYW1lLCAmdHlwbW9kc3RyLCAmdHlwYXJyYXkp OworCisJaWYgKCFPaWRJc1ZhbGlkKHR5cG5zcGlkKSkKKwkJdHlwbnNwID0gcHN0cmR1cCgiIik7 CisJZWxzZQorCQl0eXBuc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcCh0eXBuc3BpZCk7 CisKKwkvKiBXZSBkb24ndCB1c2UgbmV3X29ianRyZWVfVkEgaGVyZSBiZWNhdXNlIHR5cGVzIGRv bid0IGhhdmUgYSAiZm10IiAqLworCXR5cGVQYXJhbSA9IG5ld19vYmp0cmVlKCk7CisJYXBwZW5k X3N0cmluZ19vYmplY3QodHlwZVBhcmFtLCAic2NoZW1hbmFtZSIsIHR5cG5zcCk7CisJYXBwZW5k X3N0cmluZ19vYmplY3QodHlwZVBhcmFtLCAidHlwZW5hbWUiLCB0eXBlbmFtZSk7CisJYXBwZW5k X3N0cmluZ19vYmplY3QodHlwZVBhcmFtLCAidHlwbW9kIiwgdHlwbW9kc3RyKTsKKwlhcHBlbmRf Ym9vbF9vYmplY3QodHlwZVBhcmFtLCAidHlwYXJyYXkiLCB0eXBhcnJheSk7CisKKwlyZXR1cm4g dHlwZVBhcmFtOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31EIGFu ZCAle31PIGVsZW1lbnRzCisgKgorICogRWxlbWVudHMgInNjaGVtYW5hbWUiIGFuZCAib2JqbmFt ZSIgYXJlIHNldC4gIElmIHRoZSBuYW1lc3BhY2UgT0lECisgKiBjb3JyZXNwb25kcyB0byBhIHRl bXAgc2NoZW1hLCB0aGF0J3Mgc2V0IHRvICJwZ190ZW1wIi4KKyAqCisgKiBUaGUgZGlmZmVyZW5j ZSBiZXR3ZWVuIHRob3NlIHR3byBlbGVtZW50IHR5cGVzIGlzIHdoZXRoZXIgdGhlIG9iam5hbWUg d2lsbAorICogYmUgcXVvdGVkIGFzIGFuIGlkZW50aWZpZXIgb3Igbm90LCB3aGljaCBpcyBub3Qg c29tZXRoaW5nIHRoYXQgdGhpcyByb3V0aW5lCisgKiBjb25jZXJucyBpdHNlbGYgd2l0aDsgdGhh dCB3aWxsIGJlIHVwIHRvIHRoZSBleHBhbmQgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShPaWQgbnNwaWQsIGNoYXIgKm5hbWUpCit7CisJ T2JqVHJlZQkqcXVhbGlmaWVkOworCWNoYXIJICAgKm5hbWVzcGFjZTsKKworCS8qCisJICogV2Ug ZG9uJ3QgdXNlIG5ld19vYmp0cmVlX1ZBIGhlcmUgYmVjYXVzZSB0aGVzZSBuYW1lcyBkb24ndCBo YXZlIGEgImZtdCIKKwkgKi8KKwlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZSgpOworCWlmIChpc0Fu eVRlbXBOYW1lc3BhY2UobnNwaWQpKQorCQluYW1lc3BhY2UgPSBwc3RyZHVwKCJwZ190ZW1wIik7 CisJZWxzZQorCQluYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUobnNwaWQpOworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHF1YWxpZmllZCwgInNjaGVtYW5hbWUiLCBuYW1lc3BhY2UpOworCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHF1YWxpZmllZCwgIm9iam5hbWUiLCBwc3RyZHVwKG5hbWUpKTsK KworCXJldHVybiBxdWFsaWZpZWQ7Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5lIHRvIHNl dHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMsIHdpdGggdGhlIG9iamVjdCBzcGVjaWZpZWQKKyAq IGJ5IGNsYXNzSWQvb2JqSWQKKyAqCisgKiBFbGVtZW50cyAic2NoZW1hbmFtZSIgYW5kICJvYmpu YW1lIiBhcmUgc2V0LiAgSWYgdGhlIG9iamVjdCBpcyBhIHRlbXBvcmFyeQorICogb2JqZWN0LCB0 aGUgc2NoZW1hIG5hbWUgaXMgc2V0IHRvICJwZ190ZW1wIi4KKyAqLworc3RhdGljIE9ialRyZWUg KgorbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQp Cit7CisJT2JqVHJlZQkqcXVhbGlmaWVkOworCVJlbGF0aW9uCWNhdGFsb2c7CisJSGVhcFR1cGxl CWNhdG9iajsKKwlEYXR1bQkJb2JqbnNwOworCURhdHVtCQlvYmpuYW1lOworCUF0dHJOdW1iZXIJ QW51bV9uYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJQXR0ck51bWJlcglBbnVt X29pZCA9IGdldF9vYmplY3RfYXR0bnVtX29pZChjbGFzc0lkKTsKKwlib29sCQlpc251bGw7CisK KwljYXRhbG9nID0gdGFibGVfb3BlbihjbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJY2F0 b2JqID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBBbnVtX29pZCwgb2JqZWN0 SWQpOworCWlmICghY2F0b2JqKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3Igb2JqZWN0ICV1IG9mIGNhdGFsb2cgXCIlc1wiIiwKKwkJCSBvYmplY3RJZCwgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUoY2F0YWxvZykpOworCUFudW1fbmFtZSA9IGdldF9vYmplY3RfYXR0bnVt X25hbWUoY2xhc3NJZCk7CisJQW51bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1l c3BhY2UoY2xhc3NJZCk7CisKKwlvYmpuc3AgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVtX25h bWVzcGFjZSwgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAgJmlzbnVsbCk7CisJ aWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgTlVMTCBuYW1lc3BhY2UiKTsK KwlvYmpuYW1lID0gaGVhcF9nZXRhdHRyKGNhdG9iaiwgQW51bV9uYW1lLCBSZWxhdGlvbkdldERl c2NyKGNhdGFsb2cpLAorCQkJCQkJICAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhF UlJPUiwgInVuZXhwZWN0ZWQgTlVMTCBuYW1lIik7CisKKwlxdWFsaWZpZWQgPSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUoRGF0dW1HZXRPYmplY3RJZChvYmpuc3ApLAorCQkJCQkJCQkJCSBOYW1l U3RyKCpEYXR1bUdldE5hbWUob2JqbmFtZSkpKTsKKwl0YWJsZV9jbG9zZShjYXRhbG9nLCBBY2Nl c3NTaGFyZUxvY2spOworCisJcmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIFJldHVybiB0 aGUgZ2l2ZW4gb2JqZWN0IHR5cGUgYXMgYSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFy ICoKK3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKK3sKKwlzd2l0Y2ggKG9i anR5cGUpCisJeworCQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6CisJCQlyZXR1cm4gIkFHR1JFR0FU RSI7CisJCWNhc2UgT0JKRUNUX0NBU1Q6CisJCQlyZXR1cm4gIkNBU1QiOworCQljYXNlIE9CSkVD VF9DT0xVTU46CisJCQlyZXR1cm4gIkNPTFVNTiI7CisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoK KwkJCXJldHVybiAiQ09MTEFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJCXJl dHVybiAiQ09OVkVSU0lPTiI7CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQkJcmV0dXJuICJE QVRBQkFTRSI7CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJCXJldHVybiAiRE9NQUlOIjsKKwkJ Y2FzZSBPQkpFQ1RfRVZFTlRfVFJJR0dFUjoKKwkJCXJldHVybiAiRVZFTlQgVFJJR0dFUiI7CisJ CWNhc2UgT0JKRUNUX0VYVEVOU0lPTjoKKwkJCXJldHVybiAiRVhURU5TSU9OIjsKKwkJY2FzZSBP QkpFQ1RfRkRXOgorCQkJcmV0dXJuICJGT1JFSUdOIERBVEEgV1JBUFBFUiI7CisJCWNhc2UgT0JK RUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJcmV0dXJuICJTRVJWRVIiOworCQljYXNlIE9CSkVDVF9G T1JFSUdOX1RBQkxFOgorCQkJcmV0dXJuICJGT1JFSUdOIFRBQkxFIjsKKwkJY2FzZSBPQkpFQ1Rf RlVOQ1RJT046CisJCQlyZXR1cm4gIkZVTkNUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJ CQlyZXR1cm4gIklOREVYIjsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQlyZXR1cm4gIkxB TkdVQUdFIjsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJCQlyZXR1cm4gIkxBUkdFIE9C SkVDVCI7CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6CisJCQlyZXR1cm4gIk1BVEVSSUFMSVpFRCBW SUVXIjsKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXJldHVybiAiT1BFUkFUT1IgQ0xBU1Mi OworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCXJldHVybiAiT1BFUkFUT1IiOworCQljYXNl IE9CSkVDVF9PUEZBTUlMWToKKwkJCXJldHVybiAiT1BFUkFUT1IgRkFNSUxZIjsKKwkJY2FzZSBP QkpFQ1RfUk9MRToKKwkJCXJldHVybiAiUk9MRSI7CisJCWNhc2UgT0JKRUNUX1JVTEU6CisJCQly ZXR1cm4gIlJVTEUiOworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZXR1cm4gIlNDSEVNQSI7 CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQkJcmV0dXJuICJTRVFVRU5DRSI7CisJCWNhc2Ug T0JKRUNUX1RBQkxFOgorCQkJcmV0dXJuICJUQUJMRSI7CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BB Q0U6CisJCQlyZXR1cm4gIlRBQkxFU1BBQ0UiOworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJ cmV0dXJuICJUUklHR0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJcmV0 dXJuICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIjsKKwkJLyoKKwkJY2FzZSBPQkpFQ1RfVFND T05GSUdfTUFQUElORzoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiBNQVBQ SU5HIjsKKwkJKi8KKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJcmV0dXJuICJURVhU IFNFQVJDSCBESUNUSU9OQVJZIjsKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQlyZXR1cm4g IlRFWFQgU0VBUkNIIFBBUlNFUiI7CisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCQlyZXR1 cm4gIlRFWFQgU0VBUkNIIFRFTVBMQVRFIjsKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCXJldHVy biAiVFlQRSI7CisJCWNhc2UgT0JKRUNUX1VTRVJfTUFQUElORzoKKwkJCXJldHVybiAiVVNFUiBN QVBQSU5HIjsKKwkJY2FzZSBPQkpFQ1RfVklFVzoKKwkJCXJldHVybiAiVklFVyI7CisKKwkJZGVm YXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG9ianR5 cGUpOworCX0KK30KKworLyoKKyAqIFJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9m IHRoZSBnaXZlbiBSRUxQRVJTSVNURU5DRSB2YWx1ZQorICovCitzdGF0aWMgY2hhciAqCitnZXRf cGVyc2lzdGVuY2Vfc3RyKGNoYXIgcGVyc2lzdGVuY2UpCit7CisJc3dpdGNoIChwZXJzaXN0ZW5j ZSkKKwl7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfVEVNUDoKKwkJCXJldHVybiAiVEVNUE9SQVJZ IjsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRDoKKwkJCXJldHVybiAiVU5MT0dHRUQi OworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVDoKKwkJCXJldHVybiAiIjsKKwkJZGVm YXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHBlcnNpc3RlbmNlIG1hcmtpbmcgJWMi LCBwZXJzaXN0ZW5jZSk7CisJCQlyZXR1cm4gIiI7CQkvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICov CisJfQorfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbklkZW50aXR5KE9pZCBz ZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAg ICp0bXA7CisJT2JqVHJlZQkgICAqaWRlbnQ7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJUmVs YXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZv cm07CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisKKwlpZiAoYWx0ZXJfdGFibGUp CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5X3R5cGV9cyAle3NlcV9kZWZpbml0 aW9uOiB9cyIsIDApOworCWVsc2UKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHlf dHlwZX1zICggJXtzZXFfZGVmaW5pdGlvbjogfXMgKSIsIDApOworCisJaWYgKCFPaWRJc1ZhbGlk KHNlcXJlbGlkKSkKKwl7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFs c2UpOworCQlyZXR1cm4gdG1wOworCX0KKworCWlmIChhbHRlcl90YWJsZSkKKwkJaWRlbnQgPSBu ZXdfb2JqdHJlZV9WQSgiU0VUIEdFTkVSQVRFRCAle29wdGlvbn1zIiwgMCk7CisJZWxzZQorCQlp ZGVudCA9IG5ld19vYmp0cmVlX1ZBKCJHRU5FUkFURUQgJXtvcHRpb259cyBBUyBJREVOVElUWSIs IDApOworCisJaWYgKGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50LCAib3B0aW9uIiwgIkFMV0FZUyIpOworCWVsc2UgaWYg KGlkZW50aXR5ID09ICBBVFRSSUJVVEVfSURFTlRJVFlfQllfREVGQVVMVCkKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QoaWRlbnQsICJvcHRpb24iLCAiQlkgREVGQVVMVCIpOworCWVsc2UKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KGlkZW50LCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcCwgImlkZW50aXR5X3R5cGUiLCBpZGVudCk7CisKKwlyZWwgPSB0YWJsZV9v cGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBT ZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELCBzZXFyZWxpZCk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHNlcXVlbmNlICV1IiwKKwkJCSBzZXFyZWxpZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2Vx dWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1 ZXMoc2VxcmVsaWQpOworCisJLyogZGVmaW5pdGlvbiBlbGVtZXRzICovCisJZWxlbXMgPSBsYXBw ZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DYWNoZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkp OworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoTlVMTCwgc2VxZm9y bSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0lu Y3JlbWVudEJ5KE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5k KGVsZW1zLCBkZXBhcnNlX1NlcV9NaW52YWx1ZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkp OworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoTlVMTCwgc2Vx Zm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2Vx X1N0YXJ0d2l0aChOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVu ZChlbGVtcywgZGVwYXJzZV9TZXFfUmVzdGFydChOVUxMLCBzZXFkYXRhKSk7CisJLyogd2UgcHVy cG9zZWZ1bGx5IGRvIG5vdCBlbWl0IE9XTkVEIEJZIGhlcmUgKi8KKworCWFwcGVuZF9hcnJheV9v YmplY3QodG1wLCAic2VxX2RlZmluaXRpb24iLCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWws IFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHRtcDsKK30KKworLyoKKyAqIGRlcGFyc2Vf Q29sdW1uRGVmCisgKgkJU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxFIGRlcGFyc2luZworICoK KyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRoaW4gYSByZWd1bGFyIChub24gdHlwZWQp IHRhYmxlIGNyZWF0aW9uLgorICoKKyAqIE5PVCBOVUxMIGNvbnN0cmFpbnRzIGluIHRoZSBjb2x1 bW4gZGVmaW5pdGlvbiBhcmUgZW1pdHRlZCBkaXJlY3RseSBpbiB0aGUKKyAqIGNvbHVtbiBkZWZp bml0aW9uIGJ5IHRoaXMgcm91dGluZTsgb3RoZXIgY29uc3RyYWludHMgbXVzdCBiZSBlbWl0dGVk CisgKiBlbHNld2hlcmUgKHRoZSBpbmZvIGluIHRoZSBwYXJzZSBub2RlIGlzIGluY29tcGxldGUg YW55d2F5LikKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRp b24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgYm9vbCBjb21wb3NpdGUsCisJCQkJICBDb2x1 bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKQoreworCU9ialRyZWUJ KmNvbHVtbjsKKwlPYmpUcmVlCSp0bXA7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlk KHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRy Rm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlwbW9kOworCU9pZAkJCXR5cGNvbGxhdGlv bjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWNoYXIJICAgKmZt dHN0cjsKKworCS8qCisJICogSW5oZXJpdGVkIGNvbHVtbnMgd2l0aG91dCBsb2NhbCBkZWZpbml0 aW9ucyBtdXN0IG5vdCBiZSBlbWl0dGVkLiBYWFggLS0KKwkgKiBtYXliZSBpdCBpcyB1c2VmdWwg dG8gaGF2ZSB0aGVtIHdpdGggInByZXNlbnQgPSBmYWxzZSIgb3Igc29tZSBzdWNoPworCSAqLwor CWlmICghY29sZGVmLT5pc19sb2NhbCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhdHRyVHVwID0gU2Vh cmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5kIGNhY2hl IGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uICV1IiwKKwkJCSBjb2xkZWYtPmNv bG5hbWUsIHJlbGlkKTsKKwlhdHRyRm9ybSA9IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNU KGF0dHJUdXApOworCisJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKHJlbGlkLCBhdHRyRm9ybS0+YXR0 bnVtLAorCQkJCQkJICAmdHlwaWQsICZ0eXBtb2QsICZ0eXBjb2xsYXRpb24pOworCisJLyogQ29t cG9zaXRlIHR5cGVzIHVzZSBhIHNsaWdodGx5IHNpbXBsZXIgZm9ybWF0IHN0cmluZyAqLworCWlm IChjb21wb3NpdGUpCisJCWZtdHN0ciA9ICIle25hbWV9SSAle2NvbHR5cGV9VCAle2NvbGxhdGlv bn1zIjsKKwllbHNlCisJCWZtdHN0ciA9ICIle25hbWV9SSAle2NvbHR5cGV9VCAle2NvbXByZXNz aW9ufXMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zICV7Y29sbGF0aW9ufXMgIgorCQkJCSAiJXtn ZW5lcmF0ZWRfY29sdW1ufXMgJXtpZGVudGl0eV9jb2x1bW59cyI7CisKKwljb2x1bW4gPSBuZXdf b2JqdHJlZV9WQShmbXRzdHIsIDMsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJ CQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJCQkJImNv bHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGlk LCB0eXBtb2QpKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgMCk7CisJaWYgKGNvbGRlZi0+ Y29tcHJlc3Npb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImNvbXByZXNzaW9uX21l dGhvZCIsIGNvbGRlZi0+Y29tcHJlc3Npb24pOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29i amVjdCh0bXAsICJjb21wcmVzc2lvbl9tZXRob2QiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwg ImNvbXByZXNzaW9uIiwgdG1wKTsKKworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRFICV7 bmFtZX1EIiwgMCk7CisJaWYgKE9pZElzVmFsaWQodHlwY29sbGF0aW9uKSkKKwl7CisJCU9ialRy ZWUgKmNvbGxuYW1lOworCisJCWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgIHR5cGNvbGxhdGlvbik7CisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIm5hbWUiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVj dF9vYmplY3QoY29sdW1uLCAiY29sbGF0aW9uIiwgdG1wKTsKKworCWlmICghY29tcG9zaXRlKQor CXsKKwkJT2lkCXNlcXJlbGlkID0gSW52YWxpZE9pZDsKKworCQkvKgorCQkgKiBFbWl0IGEgTk9U IE5VTEwgZGVjbGFyYXRpb24gaWYgbmVjZXNzYXJ5LiAgTm90ZSB0aGF0IHdlIGNhbm5vdCB0cnVz dAorCQkgKiBwZ19hdHRyaWJ1dGUuYXR0bm90bnVsbCBoZXJlLCBiZWNhdXNlIHRoYXQgYml0IGlz IGFsc28gc2V0IHdoZW4KKwkJICogcHJpbWFyeSBrZXlzIGFyZSBzcGVjaWZpZWQ7IGFuZCB3ZSBt dXN0IG5vdCBlbWl0IGEgTk9UIE5VTEwKKwkJICogY29uc3RyYWludCBpbiB0aGF0IGNhc2UsIHVu bGVzcyBleHBsaWNpdGVseSBzcGVjaWZpZWQuICBUaGVyZWZvcmUsCisJCSAqIHdlIHNjYW4gdGhl IGxpc3Qgb2YgY29uc3RyYWludHMgYXR0YWNoZWQgdG8gdGhpcyBjb2x1bW4gdG8gZGV0ZXJtaW5l CisJCSAqIHdoZXRoZXIgd2UgbmVlZCB0byBlbWl0IGFueXRoaW5nLgorCQkgKiAoRm9ydHVuYXRl bHksIE5PVCBOVUxMIGNvbnN0cmFpbnRzIGNhbm5vdCBiZSB0YWJsZSBjb25zdHJhaW50cy4pCisJ CSAqCisJCSAqIEluIHRoZSBBTFRFUiBUQUJMRSBjYXNlcywgd2UgYWxzbyBhZGQgYSBOT1QgTlVM TCBpZiB0aGUgY29sRGVmIGlzCisJCSAqIG1hcmtlZCBpc19ub3RfbnVsbC4KKwkJICovCisJCXNh d19ub3RudWxsID0gZmFsc2U7CisJCWZvcmVhY2goY2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykK KwkJeworCQkJQ29uc3RyYWludCAqY29uc3RyID0gKENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwp OworCisJCQlpZiAoY29uc3RyLT5jb250eXBlID09IENPTlNUUl9OT1ROVUxMKQorCQkJCXNhd19u b3RudWxsID0gdHJ1ZTsKKwkJfQorCQlpZiAoaXNfYWx0ZXIgJiYgY29sZGVmLT5pc19ub3RfbnVs bCkKKwkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKworCQlpZiAoc2F3X25vdG51bGwpCisJCQlhcHBl bmRfc3RyaW5nX29iamVjdChjb2x1bW4sICJub3RfbnVsbCIsICJOT1QgTlVMTCIpOworCQllbHNl CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChjb2x1bW4sICJub3RfbnVsbCIsICIiKTsKKworCQl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVGQVVMVCAle2RlZmF1bHR9cyIsIDApOworCQlpZiAoYXR0 ckZvcm0tPmF0dGhhc2RlZikKKwkJeworCQkJY2hhciAqZGVmc3RyOworCisJCQlkZWZzdHIgPSBS ZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJ CQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cCwgImRlZmF1bHQiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVj dCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4s ICJkZWZhdWx0IiwgdG1wKTsKKworCQkvKiBJREVOVElUWSBDT0xVTU4gKi8KKwkJaWYgKGNvbGRl Zi0+aWRlbnRpdHkpCisJCXsKKwkJCU9pZAlhdHRubyA9IGdldF9hdHRudW0ocmVsaWQsIGNvbGRl Zi0+Y29sbmFtZSk7CisJCQlzZXFyZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UocmVsaWQsIGF0 dG5vLCBmYWxzZSk7CisJCX0KKworCQl0bXAgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcXJl bGlkLCBjb2xkZWYtPmlkZW50aXR5LCBpc19hbHRlcik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGNvbHVtbiwgImlkZW50aXR5X2NvbHVtbiIsIHRtcCk7CisKKwkJLyogR0VORVJBVEVEIENPTFVN TiBFWFBSRVNTSU9OICovCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJHRU5FUkFURUQgQUxXQVlT IEFTICV7Z2VuZXJhdGlvbl9leHByfXMgU1RPUkVEIiwgMCk7CisJCWlmIChjb2xkZWYtPmdlbmVy YXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCkKKwkJeworCQkJY2hhciAqZGVmc3Ry OworCisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJG b3JtLT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisJCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXAsICJnZW5lcmF0aW9uX2V4cHIiLCBkZWZzdHIpOworCQl9CisJCWVs c2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgImdlbmVyYXRlZF9jb2x1bW4iLCB0bXApOworCX0K KworCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8q CisgKiBkZXBhcnNlX0NvbHVtbkRlZl9UeXBlZAorICoJCVN1YnJvdXRpbmUgZm9yIENSRUFURSBU QUJMRSBPRiBkZXBhcnNpbmcKKyAqCisgKiBEZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUgd2l0aGlu IGEgdHlwZWQgdGFibGUgY3JlYXRpb24uCVRoaXMgaXMgc2ltcGxlcgorICogdGhhbiB0aGUgcmVn dWxhciBjYXNlLCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gZW1pdCB0aGUgdHlwZSBkZWNsYXJh dGlvbiwKKyAqIGNvbGxhdGlvbiwgb3IgZGVmYXVsdC4gIEhlcmUgd2Ugb25seSByZXR1cm4gc29t ZXRoaW5nIGlmIHRoZSBjb2x1bW4gaXMgYmVpbmcKKyAqIGRlY2xhcmVkIE5PVCBOVUxMLgorICoK KyAqIEFzIGluIGRlcGFyc2VfQ29sdW1uRGVmLCBhbnkgb3RoZXIgY29uc3RyYWludCBpcyBwcm9j ZXNzZWQgZWxzZXdoZXJlLgorICoKKyAqIEZJWE1FIC0tLSBhY3R1YWxseSwgd2hhdCBhYm91dCBk ZWZhdWx0IHZhbHVlcz8KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWZf dHlwZWQoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgQ29sdW1uRGVmICpjb2xk ZWYpCit7CisJT2JqVHJlZQkqY29sdW1uID0gTlVMTDsKKwlPYmpUcmVlCSp0bXA7CisJT2lkCQkJ cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsK KwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlw bW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2Vs bCAgICpjZWxsOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29s ZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2co RVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiBy ZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAo Rm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlw bW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9k LCAmdHlwY29sbGF0aW9uKTsKKworCS8qCisJICogU2VhcmNoIGZvciBhIE5PVCBOVUxMIGRlY2xh cmF0aW9uLiAgQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5kaW5n IGEgY29uc3RyYWludCBvbiB0aGUgY29sdW1uIHJhdGhlciB0aGFuIGNvbGRlZi0+aXNfbm90X251 bGwuCisJICogKFRoaXMgcm91dGluZSBpcyBuZXZlciB1c2VkIGZvciBBTFRFUiBjYXNlcy4pCisJ ICovCisJc2F3X25vdG51bGwgPSBmYWxzZTsKKwlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3Ry YWludHMpCisJeworCQlDb25zdHJhaW50ICpjb25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3Qo Y2VsbCk7CisKKwkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJewor CQkJc2F3X25vdG51bGwgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXNhd19u b3RudWxsICYmICFhdHRyRm9ybS0+YXR0aGFzZGVmKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKGF0 dHJUdXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwljb2x1bW4gPSBuZXdfb2JqdHJlZV9WQSgi JXtuYW1lfUkgV0lUSCBPUFRJT05TICV7ZGVmYXVsdH1zICV7bm90X251bGx9cyIsIDIsCisJCQkJ CQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJCQkibmFtZSIsIE9ialR5 cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFtZSk7CisKKwlpZiAoc2F3X25vdG51bGwpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNvbHVtbiwgIm5vdF9udWxsIiwgIk5PVCBOVUxMIik7CisJZWxzZQor CQlhcHBlbmRfc3RyaW5nX29iamVjdChjb2x1bW4sICJub3RfbnVsbCIsICIiKTsKKworCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJERUZBVUxUICV7ZGVmYXVsdH1zIiwgMCk7CisJaWYgKGF0dHJGb3Jt LT5hdHRoYXNkZWYpCisJeworCQljaGFyICpkZWZzdHI7CisKKwkJZGVmc3RyID0gUmVsYXRpb25H ZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCSAg ZHBjb250ZXh0LCBOVUxMKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJkZWZhdWx0 IiwgZGVmc3RyKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICJkZWZhdWx0IiwgdG1w KTsKKworCS8qCisJICogR2VuZXJhdGVkIGNvbHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdHlw ZWQgdGFibGVzLCBzbyB3ZSBhcmUgZG9uZS4KKwkgKi8KKworCVJlbGVhc2VTeXNDYWNoZShhdHRy VHVwKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisgKiBkZXBhcnNlVGFibGVFbGVtZW50 cworICoJCVN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcKKyAqCisgKiBEZWFs IHdpdGggYWxsIHRoZSB0YWJsZSBlbGVtZW50cyAoY29sdW1ucyBhbmQgY29uc3RyYWludHMpLgor ICoKKyAqIE5vdGUgd2UgaWdub3JlIGNvbnN0cmFpbnRzIGluIHRoZSBwYXJzZSBub2RlIGhlcmU7 IHRoZXkgYXJlIGV4dHJhY3RlZCBmcm9tCisgKiBzeXN0ZW0gY2F0YWxvZ3MgaW5zdGVhZC4KKyAq Lworc3RhdGljIExpc3QgKgorZGVwYXJzZVRhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24s IExpc3QgKnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29udGV4dCwKKwkJCQkJIGJvb2wgdHlwZWQs IGJvb2wgY29tcG9zaXRlKQoreworCUxpc3QJICAgKmVsZW1lbnRzID0gTklMOworCUxpc3RDZWxs ICAgKmxjOworCisJZm9yZWFjaChsYywgdGFibGVFbGVtZW50cykKKwl7CisJCU5vZGUJICAgKmVs dCA9IChOb2RlICopIGxmaXJzdChsYyk7CisKKwkJc3dpdGNoIChub2RlVGFnKGVsdCkpCisJCXsK KwkJCWNhc2UgVF9Db2x1bW5EZWY6CisJCQkJeworCQkJCQlPYmpUcmVlCSAgICp0cmVlOworCisJ CQkJCXRyZWUgPSB0eXBlZCA/CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChyZWxhdGlv biwgZHBjb250ZXh0LAorCQkJCQkJCQkJCQkJKENvbHVtbkRlZiAqKSBlbHQpIDoKKwkJCQkJCWRl cGFyc2VfQ29sdW1uRGVmKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBjb21wb3Np dGUsIChDb2x1bW5EZWYgKikgZWx0LAorCQkJCQkJCQkJCSAgZmFsc2UsIE5VTEwpOworCQkJCQlp ZiAodHJlZSAhPSBOVUxMKQorCQkJCQl7CisJCQkJCQlPYmpFbGVtCSpjb2x1bW47CisKKwkJCQkJ CWNvbHVtbiA9IG5ld19vYmplY3Rfb2JqZWN0KHRyZWUpOworCQkJCQkJZWxlbWVudHMgPSBsYXBw ZW5kKGVsZW1lbnRzLCBjb2x1bW4pOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2Fz ZSBUX0NvbnN0cmFpbnQ6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1Is ICJpbnZhbGlkIG5vZGUgdHlwZSAlZCIsIG5vZGVUYWcoZWx0KSk7CisJCX0KKwl9CisKKwlyZXR1 cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBvYnRhaW5Db25zdHJhaW50cworICoJCVN1YnJvdXRp bmUgZm9yIENSRUFURSBUQUJMRS9DUkVBVEUgRE9NQUlOIGRlcGFyc2luZworICoKKyAqIEdpdmVu IGEgdGFibGUgT0lEIG9yIGRvbWFpbiBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWludHMgYW5kIGFw cGVuZCB0aGVtIHRvCisgKiB0aGUgZ2l2ZW4gZWxlbWVudHMgbGlzdC4gIFRoZSB1cGRhdGVkIGxp c3QgaXMgcmV0dXJuZWQuCisgKgorICogVGhpcyB3b3JrcyBmb3IgdHlwZWQgdGFibGVzLCByZWd1 bGFyIHRhYmxlcywgYW5kIGRvbWFpbnMuCisgKgorICogTm90ZSB0aGF0IENPTlNUUkFJTlRfRk9S RUlHTiBjb25zdHJhaW50cyBhcmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBMaXN0ICoK K29idGFpbkNvbnN0cmFpbnRzKExpc3QgKmVsZW1lbnRzLCBPaWQgcmVsYXRpb25JZCwgT2lkIGRv bWFpbklkKQoreworCVJlbGF0aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7CisJU3lzU2Nh bkRlc2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVwbGU7CisJT2JqVHJlZQkqdG1wOworCisJLyogb25s eSBvbmUgbWF5IGJlIHZhbGlkICovCisJQXNzZXJ0KE9pZElzVmFsaWQocmVsYXRpb25JZCkgXiBP aWRJc1ZhbGlkKGRvbWFpbklkKSk7CisKKwkvKgorCSAqIHNjYW4gcGdfY29uc3RyYWludCB0byBm ZXRjaCBhbGwgY29uc3RyYWludHMgbGlua2VkIHRvIHRoZSBnaXZlbgorCSAqIHJlbGF0aW9uLgor CSAqLworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1No YXJlTG9jayk7CisJaWYgKE9pZElzVmFsaWQocmVsYXRpb25JZCkpCisJeworCQlTY2FuS2V5SW5p dCgma2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShyZWxhdGlvbklk KSk7CisJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVsaWRU eXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKwll bHNlCisJeworCQlBc3NlcnQoT2lkSXNWYWxpZChkb21haW5JZCkpOworCQlTY2FuS2V5SW5pdCgm a2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29udHlwaWQsCisJCQkJCUJURXF1YWxTdHJh dGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShkb21haW5JZCkpOwor CQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFR5cGlkSW5kZXhJ ZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisKKwkvKgorCSAqIEZvciBl YWNoIGNvbnN0cmFpbnQsIGFkZCBhIG5vZGUgdG8gdGhlIGxpc3Qgb2YgdGFibGUgZWxlbWVudHMu ICBJbgorCSAqIHRoZXNlIG5vZGVzIHdlIGluY2x1ZGUgbm90IG9ubHkgdGhlIHByaW50YWJsZSBp bmZvcm1hdGlvbiAoImZtdCIpLCBidXQKKwkgKiBhbHNvIHNlcGFyYXRlIGF0dHJpYnV0ZXMgdG8g aW5kaWNhdGUgdGhlIHR5cGUgb2YgY29uc3RyYWludCwgZm9yCisJICogYXV0b21hdGljIHByb2Nl c3NpbmcuCisJICovCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9n ZXRuZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb25zdHJGb3JtOworCQlj aGFyCSAgICpjb250eXBlOworCisJCWNvbnN0ckZvcm0gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBH RVRTVFJVQ1QodHVwbGUpOworCisJCXN3aXRjaCAoY29uc3RyRm9ybS0+Y29udHlwZSkKKwkJewor CQkJY2FzZSBDT05TVFJBSU5UX0NIRUNLOgorCQkJCWNvbnR5cGUgPSAiY2hlY2siOworCQkJCWJy ZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0ZPUkVJR046CisJCQkJY29udGludWU7CS8qIG5vdCBo ZXJlICovCisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250eXBlID0gInByaW1h cnkga2V5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklRVUU6CisJCQkJY29u dHlwZSA9ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1RSSUdHRVI6 CisJCQkJY29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlO VF9FWENMVVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJCWJyZWFrOworCQkJ ZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0cmFpbnQgdHlwZSIp OworCQl9CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJlIG5vdCBwYXJ0IG9m IHRoZSBwcmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0byBwcm9ncmFtbWF0 aWNhbGx5IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1vbmcKKwkJICogZGlm ZmVyZW50IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBtaWdodCBiZSB1c2Vm dWwgdG8gYWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRjLgorCQkgKi8KKwkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMi LAorCQkJCQkJCSA0LAorCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb25zdHJhaW50 IiwKKwkJCQkJCQkgImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBlLAorCQkJCQkJICJu YW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihjb25zdHJGb3JtLT5jb25uYW1lKSwKKwkJCQkJ CQkgImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBwZ19nZXRfY29uc3RyYWlu dGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJGb3JtLT5vaWQpKTsKKwkJZWxlbWVudHMgPSBsYXBw ZW5kKGVsZW1lbnRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlzeXN0YWJsZV9l bmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKGNvblJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CXJldHVybiBlbGVtZW50czsKK30KKworLyoKKyAqIGRlcGFyc2UgdGhlIE9OIENPTU1NSVQgLi4u IGNsYXVzZSBmb3IgQ1JFQVRFIC4uLiBURU1QT1JBUlkgLi4uCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKQoreworCU9i alRyZWUJICAgKnRtcDsKKworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPTiBDT01NSVQgJXtvbl9j b21taXRfdmFsdWV9cyIsIDApOworCXN3aXRjaCAob3B0aW9uKQorCXsKKwkJY2FzZSBPTkNPTU1J VF9EUk9QOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAib25fY29tbWl0X3ZhbHVlIiwg IkRST1AiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfREVMRVRFX1JPV1M6CisJCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJvbl9jb21taXRfdmFsdWUiLCAiREVMRVRFIFJPV1Mi KTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfUFJFU0VSVkVfUk9XUzoKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcCwgIm9uX2NvbW1pdF92YWx1ZSIsICJQUkVTRVJWRSBST1dTIik7 CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX05PT1A6CisJCQlhcHBlbmRfbnVsbF9vYmpl Y3QodG1wLCAib25fY29tbWl0X3ZhbHVlIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAi cHJlc2VudCIsIGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiB0bXA7Cit9CisKKy8q CisgKiBEZXBhcnNlIERlZkVsZW1zLCBhcyB1c2VkIGUuZy4gYnkgQUxURVIgQ09MVU1OIC4uLiBT RVQsIGludG8gYSBsaXN0IG9mIFNFVAorICogKC4uLikgIG9yIFJFU0VUICguLi4pIGNvbnRlbnRz LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwg Ym9vbCBpc19yZXNldCkKK3sKKwlPYmpUcmVlCSAgICpzZXQ7CisJT2JqVHJlZQkgICAqb3B0bmFt ZTsKKworCWlmIChlbGVtLT5kZWZuYW1lc3BhY2UgIT0gTlVMTCkKKwkJb3B0bmFtZSA9IG5ld19v Ymp0cmVlX1ZBKCIle3NjaGVtYX1JLiV7bGFiZWx9SSIsIDEsCisJCQkJCQkJCSAic2NoZW1hIiwg T2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZXNwYWNlKTsKKwllbHNlCisJCW9wdG5hbWUgPSBu ZXdfb2JqdHJlZV9WQSgiJXtsYWJlbH1JIiwgMCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChv cHRuYW1lLCAibGFiZWwiLCBlbGVtLT5kZWZuYW1lKTsKKworCWlmIChpc19yZXNldCkKKwkJc2V0 ID0gbmV3X29ianRyZWVfVkEoIiV7bGFiZWx9cyIsIDApOworCWVsc2UKKwkJc2V0ID0gbmV3X29i anRyZWVfVkEoIiV7bGFiZWx9cyA9ICV7dmFsdWV9TCIsIDEsCisJCQkJCQkJICJ2YWx1ZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJ CQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHNldCwgImxhYmVsIiwgb3B0bmFtZSk7CisJcmV0dXJuIHNldDsKK30K KworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3Vi Y21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpU cmVlCSp0bXA7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVzZXRP cHRpb25zOworCisJaWYgKGlzX3Jlc2V0KQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg Q09MVU1OICV7Y29sdW1ufUkgUkVTRVQgKCV7b3B0aW9uczosIH1zKSIsIDApOworCWVsc2UKKwkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCAoJXtvcHRp b25zOiwgfXMpIiwgMCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJjb2x1bW4iLCBz dWJjbWQtPm5hbWUpOworCisJZm9yZWFjaChjZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7 CisJCURlZkVsZW0JICAgKmVsZW07CisJCU9ialRyZWUJICAgKnNldDsKKworCQllbGVtID0gKERl ZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNf cmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdChzZXQpKTsK Kwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIm9wdGlvbnMiLCBzZXRzKTsKKworCXJl dHVybiB0bXA7Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQgKC4u LikKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFsdGVyVGFi bGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3RDZWxsICAgKmNl bGw7CisJT2JqVHJlZQkqdG1wOworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09 IEFUX1Jlc2V0UmVsT3B0aW9uczsKKworCWlmIChpc19yZXNldCkKKwkJdG1wID0gbmV3X29ianRy ZWVfVkEoIlJFU0VUICgle29wdGlvbnM6LCB9cykiLCAwKTsKKwllbHNlCisJCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJTRVQgKCV7b3B0aW9uczosIH1zKSIsIDApOworCisJZm9yZWFjaChjZWxsLCAo TGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0JICAgKmVsZW07CisJCU9ialRyZWUJ ICAgKnNldDsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBk ZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBu ZXdfb2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwg Im9wdGlvbnMiLCBzZXRzKTsKKworCXJldHVybiB0bXA7Cit9CisKKy8qCisgKiBkZXBhcnNlX0lu aFJlbGF0aW9ucworICoJCURlcGFyc2UgdGhlIGluaGVyaXRzIHJlbGF0aW9ucworICoKKyAqIEdp dmVuIGEgdGFibGUgT0lELCByZXR1cm4gYSBzY2hlbWEgcXVhbGlmaWVkIHRhYmxlIGxpc3QgcmVw cmVzZW50aW5nCisgKiB0aGUgcGFyZW50IHRhYmxlcy4KKyAqLworc3RhdGljIExpc3QgKgorZGVw YXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKQoreworCUxpc3QJICAgKnBhcmVudHMgPSBO SUw7CisJUmVsYXRpb24JaW5oUmVsOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEg a2V5OworCUhlYXBUdXBsZQl0dXBsZTsKKworCWluaFJlbCA9IHRhYmxlX29wZW4oSW5oZXJpdHNS ZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXksCisJCQkJ QW51bV9wZ19pbmhlcml0c19pbmhyZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZf T0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3Rh YmxlX2JlZ2luc2NhbihpbmhSZWwsIEluaGVyaXRzUmVsaWRTZXFub0luZGV4SWQsCisJCQkJCQkJ ICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxl ID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlPYmpUcmVlCSpwYXJlbnQ7CisJCUZv cm1fcGdfaW5oZXJpdHMgZm9ybUluaCA9IChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QodHVw bGUpOworCisJCXBhcmVudCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCSBmb3JtSW5oLT5pbmhwYXJlbnQpOworCQlwYXJlbnRzID0g bGFwcGVuZChwYXJlbnRzLCBuZXdfb2JqZWN0X29iamVjdChwYXJlbnQpKTsKKwl9CisKKwlzeXN0 YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKGluaFJlbCwgUm93RXhjbHVzaXZlTG9j ayk7CisKKwlyZXR1cm4gcGFyZW50czsKK30KKworc3RhdGljIGNoYXIgKgorUmVsYXRpb25HZXRQ YXJ0aXRpb25Cb3VuZChPaWQgcmVsaWQpCit7CisJRGF0dW0JCWRlcGFyc2VkOworCURhdHVtCQli b3VuZERhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwl0dXBsZSA9 IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIHJlbGlkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo dHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24g JXUiLAorCQkJIHJlbGlkKTsKKworCWJvdW5kRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVMT0lE LCB0dXBsZSwKKwkJCQkJCQkJIEFudW1fcGdfY2xhc3NfcmVscGFydGJvdW5kLAorCQkJCQkJCQkg JmlzbnVsbCk7CisKKwlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIs CisJCQkJCQkJCSAgIENTdHJpbmdHZXRUZXh0RGF0dW0oVGV4dERhdHVtR2V0Q1N0cmluZyhib3Vu ZERhdHVtKSksCisJCQkJCQkJCSAgIHJlbGlkKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7 CisKKwlyZXR1cm4gVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCk7Cit9CisKKy8qCisgKiBS ZXR1cm4gYW4gaW5kZXggZGVmaW5pdGlvbiwgc3BsaXQgaW4gc2V2ZXJhbCBwaWVjZXMuCisgKgor ICogVGhlcmUgaXMgYSBodWdlIGxvdCBvZiBjb2RlIHRoYXQncyBhIGR1cGUgb2YgcGdfZ2V0X2lu ZGV4ZGVmX3dvcmtlciwgYnV0CisgKiBjb250cm9sIGZsb3cgaXMgZGlmZmVyZW50IGVub3VnaCB0 aGF0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBrZWVwaW5nIHRoZW0KKyAqIHRvZ2V0aGVyLgorICov CitzdGF0aWMgdm9pZAorcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAor CQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJCQkJCSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJ CSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJCSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCSBj aGFyICoqd2hlcmVDbGF1c2UpCit7CisJSGVhcFR1cGxlCWh0X2lkeDsKKwlIZWFwVHVwbGUJaHRf aWR4cmVsOworCUhlYXBUdXBsZQlodF9hbTsKKwlGb3JtX3BnX2luZGV4IGlkeHJlYzsKKwlGb3Jt X3BnX2NsYXNzIGlkeHJlbHJlYzsKKwlGb3JtX3BnX2FtCWFtcmVjOworCUluZGV4QW1Sb3V0aW5l ICphbXJvdXRpbmU7CisJTGlzdAkgICAqaW5kZXhwcnM7CisJTGlzdENlbGwgICAqaW5kZXhwcl9p dGVtOworCUxpc3QJICAgKmNvbnRleHQ7CisJT2lkCQkJaW5kcmVsaWQ7CisJaW50CQkJa2V5bm87 CisJRGF0dW0JCWluZGNvbGxEYXR1bTsKKwlEYXR1bQkJaW5kY2xhc3NEYXR1bTsKKwlEYXR1bQkJ aW5kb3B0aW9uRGF0dW07CisJYm9vbAkJaXNudWxsOworCW9pZHZlY3RvciAgKmluZGNvbGxhdGlv bjsKKwlvaWR2ZWN0b3IgICppbmRjbGFzczsKKwlpbnQydmVjdG9yICppbmRvcHRpb247CisJU3Ry aW5nSW5mb0RhdGEgZGVmaW5pdGlvbkJ1ZjsKKwljaGFyCSAgICpzZXA7CisKKwkvKgorCSAqIEZl dGNoIHRoZSBwZ19pbmRleCB0dXBsZSBieSB0aGUgT2lkIG9mIHRoZSBpbmRleAorCSAqLworCWh0 X2lkeCA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVtKGluZGV4 cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4KSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4ICV1IiwgaW5kZXhyZWxpZCk7CisJaWR4cmVj ID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChodF9pZHgpOworCisJaW5kcmVsaWQgPSBpZHhy ZWMtPmluZHJlbGlkOworCUFzc2VydChpbmRleHJlbGlkID09IGlkeHJlYy0+aW5kZXhyZWxpZCk7 CisKKwkvKiBNdXN0IGdldCBpbmRjb2xsYXRpb24sIGluZGNsYXNzLCBhbmQgaW5kb3B0aW9uIHRo ZSBoYXJkIHdheSAqLworCWluZGNvbGxEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElE LCBodF9pZHgsCisJCQkJCQkJCSAgIEFudW1fcGdfaW5kZXhfaW5kY29sbGF0aW9uLCAmaXNudWxs KTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY29sbGF0aW9uID0gKG9pZHZlY3RvciAqKSBEYXR1 bUdldFBvaW50ZXIoaW5kY29sbERhdHVtKTsKKworCWluZGNsYXNzRGF0dW0gPSBTeXNDYWNoZUdl dEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJQW51bV9wZ19pbmRleF9pbmRjbGFz cywgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNsYXNzID0gKG9pZHZlY3RvciAq KSBEYXR1bUdldFBvaW50ZXIoaW5kY2xhc3NEYXR1bSk7CisKKwlpbmRvcHRpb25EYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQkgQW51bV9wZ19pbmRl eF9pbmRvcHRpb24sICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRvcHRpb24gPSAo aW50MnZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kb3B0aW9uRGF0dW0pOworCisJLyoKKwkg KiBGZXRjaCB0aGUgcGdfY2xhc3MgdHVwbGUgb2YgdGhlIGluZGV4IHJlbGF0aW9uCisJICovCisJ aHRfaWR4cmVsID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShpbmRl eHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeHJlbCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsIGluZGV4cmVsaWQpOwor CWlkeHJlbHJlYyA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1QoaHRfaWR4cmVsKTsKKworCisJ LyoKKwkgKiBGZXRjaCB0aGUgcGdfYW0gdHVwbGUgb2YgdGhlIGluZGV4JyBhY2Nlc3MgbWV0aG9k CisJICovCisJaHRfYW0gPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0dW0o aWR4cmVscmVjLT5yZWxhbSkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9hbSkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwKKwkJ CSBpZHhyZWxyZWMtPnJlbGFtKTsKKwlhbXJlYyA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoaHRf YW0pOworCisJLyoKKwkgKiBHZXQgdGhlIGluZGV4IGV4cHJlc3Npb25zLCBpZiBhbnkuICAoTk9U RTogd2UgZG8gbm90IHVzZSB0aGUgcmVsY2FjaGUKKwkgKiB2ZXJzaW9ucyBvZiB0aGUgZXhwcmVz c2lvbnMgYW5kIHByZWRpY2F0ZSwgYmVjYXVzZSB3ZSB3YW50IHRvIGRpc3BsYXkKKwkgKiBub24t Y29uc3QtZm9sZGVkIGV4cHJlc3Npb25zLikKKwkgKi8KKwlpZiAoIWhlYXBfYXR0aXNudWxsKGh0 X2lkeCwgQW51bV9wZ19pbmRleF9pbmRleHBycywgTlVMTCkpCisJeworCQlEYXR1bQkJZXhwcnNE YXR1bTsKKwkJYm9vbAkJaXNudWxsOworCQljaGFyCSAgICpleHByc1N0cmluZzsKKworCQlleHBy c0RhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCSBB bnVtX3BnX2luZGV4X2luZGV4cHJzLCAmaXNudWxsKTsKKwkJQXNzZXJ0KCFpc251bGwpOworCQll eHByc1N0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcoZXhwcnNEYXR1bSk7CisJCWluZGV4cHJz ID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsKKwkJcGZyZWUoZXhwcnNTdHJp bmcpOworCX0KKwllbHNlCisJCWluZGV4cHJzID0gTklMOworCisJaW5kZXhwcl9pdGVtID0gbGlz dF9oZWFkKGluZGV4cHJzKTsKKworCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKGdldF9y ZWxfbmFtZShpbmRyZWxpZCksIGluZHJlbGlkKTsKKworCWluaXRTdHJpbmdJbmZvKCZkZWZpbml0 aW9uQnVmKTsKKworCS8qIG91dHB1dCBpbmRleCBBTSAqLworCSppbmRleF9hbSA9IHBzdHJkdXAo cXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGFtcmVjLT5hbW5hbWUpKSk7CisKKwkvKiBGZXRjaCB0 aGUgaW5kZXggQU0ncyBBUEkgc3RydWN0ICovCisJYW1yb3V0aW5lID0gR2V0SW5kZXhBbVJvdXRp bmUoYW1yZWMtPmFtaGFuZGxlcik7CisKKwkvKgorCSAqIE91dHB1dCBpbmRleCBkZWZpbml0aW9u LiAgTm90ZSB0aGUgb3V0ZXIgcGFyZW5zIG11c3QgYmUgc3VwcGxpZWQgYnkKKwkgKiBjYWxsZXIu CisJICovCisJc2VwID0gIiI7CisJZm9yIChrZXlubyA9IDA7IGtleW5vIDwgaWR4cmVjLT5pbmRu YXR0czsga2V5bm8rKykKKwl7CisJCUF0dHJOdW1iZXIJYXR0bnVtID0gaWR4cmVjLT5pbmRrZXku dmFsdWVzW2tleW5vXTsKKwkJaW50MTYJCW9wdCA9IGluZG9wdGlvbi0+dmFsdWVzW2tleW5vXTsK KwkJT2lkCQkJa2V5Y29sdHlwZTsKKwkJT2lkCQkJa2V5Y29sY29sbGF0aW9uOworCQlPaWQJCQlp bmRjb2xsOworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHNlcCk7 CisJCXNlcCA9ICIsICI7CisKKwkJaWYgKGF0dG51bSAhPSAwKQorCQl7CisJCQkvKiBTaW1wbGUg aW5kZXggY29sdW1uICovCisJCQljaGFyCSAgICphdHRuYW1lOworCQkJaW50MzIJCWtleWNvbHR5 cG1vZDsKKworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1lKGluZHJlbGlkLCBhdHRudW0sIGZhbHNl KTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHF1b3RlX2lkZW50 aWZpZXIoYXR0bmFtZSkpOworCQkJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKGluZHJlbGlkLCBhdHRu dW0sCisJCQkJCQkJCSAgJmtleWNvbHR5cGUsICZrZXljb2x0eXBtb2QsCisJCQkJCQkJCSAgJmtl eWNvbGNvbGxhdGlvbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBleHByZXNzaW9uYWwgaW5k ZXggKi8KKwkJCU5vZGUJICAgKmluZGV4a2V5OworCQkJY2hhcgkgICAqc3RyOworCisJCQlpZiAo aW5kZXhwcl9pdGVtID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInRvbyBmZXcgZW50cmllcyBp biBpbmRleHBycyBsaXN0Iik7CisJCQlpbmRleGtleSA9IChOb2RlICopIGxmaXJzdChpbmRleHBy X2l0ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5leHQoaW5kZXhwcnMsIGluZGV4cHJfaXRlbSk7 CisJCQkvKiBEZXBhcnNlICovCisJCQlzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oaW5kZXhrZXks IGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkJCS8qIE5lZWQgcGFyZW5zIGlmIGl0J3Mgbm90 IGEgYmFyZSBmdW5jdGlvbiBjYWxsICovCisJCQlpZiAoaW5kZXhrZXkgJiYgSXNBKGluZGV4a2V5 LCBGdW5jRXhwcikgJiYKKwkJCQkoKEZ1bmNFeHByICopIGluZGV4a2V5KS0+ZnVuY2Zvcm1hdCA9 PSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZp bml0aW9uQnVmLCBzdHIpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmRlZmluaXRp b25CdWYsICIoJXMpIiwgc3RyKTsKKworCQkJa2V5Y29sdHlwZSA9IGV4cHJUeXBlKGluZGV4a2V5 KTsKKwkJCWtleWNvbGNvbGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oaW5kZXhrZXkpOworCQl9CisK KwkJLyogQWRkIGNvbGxhdGlvbiwgZXZlbiBpZiBkZWZhdWx0ICovCisJCWluZGNvbGwgPSBpbmRj b2xsYXRpb24tPnZhbHVlc1trZXlub107CisJCWlmIChPaWRJc1ZhbGlkKGluZGNvbGwpKQorCQkJ YXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiBDT0xMQVRFICVzIiwKKwkJCQkJCQkg Z2VuZXJhdGVfY29sbGF0aW9uX25hbWUoKGluZGNvbGwpKSk7CisKKwkJLyogQWRkIHRoZSBvcGVy YXRvciBjbGFzcyBuYW1lLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJZ2V0X29wY2xhc3NfbmFtZShp bmRjbGFzcy0+dmFsdWVzW2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmluaXRpb25CdWYpOworCisJ CS8qIEFkZCBvcHRpb25zIGlmIHJlbGV2YW50ICovCisJCWlmIChhbXJvdXRpbmUtPmFtY2Fub3Jk ZXIpCisJCXsKKwkJCS8qIGlmIGl0IHN1cHBvcnRzIHNvcnQgb3JkZXJpbmcsIHJlcG9ydCBERVND IGFuZCBOVUxMUyBvcHRzICovCisJCQlpZiAob3B0ICYgSU5ET1BUSU9OX0RFU0MpCisJCQl7CisJ CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBERVNDIik7CisJCQkJ LyogTlVMTFMgRklSU1QgaXMgdGhlIGRlZmF1bHQgaW4gdGhpcyBjYXNlICovCisJCQkJaWYgKCEo b3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBMQVNUIik7CisJCQl9CisJCQllbHNlCisJCQl7CisJ CQkJaWYgKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBGSVJTVCIpOworCQkJfQorCQl9CisKKwkJ LyogWFhYIGV4Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJlOyBkbyB3ZSBuZWVkIGFueXRoaW5nPyAq LworCX0KKwkqZGVmaW5pdGlvbiA9IGRlZmluaXRpb25CdWYuZGF0YTsKKworCS8qIG91dHB1dCBy ZWxvcHRpb25zICovCisJKnJlbG9wdGlvbnMgPSBmbGF0dGVuX3JlbG9wdGlvbnMoaW5kZXhyZWxp ZCk7CisKKwkvKiBvdXRwdXQgdGFibGVzcGFjZSAqLworCXsKKwkJT2lkCQkJdGJsc3BjOworCisJ CXRibHNwYyA9IGdldF9yZWxfdGFibGVzcGFjZShpbmRleHJlbGlkKTsKKwkJaWYgKE9pZElzVmFs aWQodGJsc3BjKSkKKwkJCSp0YWJsZXNwYWNlID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKGdl dF90YWJsZXNwYWNlX25hbWUodGJsc3BjKSkpOworCQllbHNlCisJCQkqdGFibGVzcGFjZSA9IE5V TEw7CisJfQorCisJLyogcmVwb3J0IGluZGV4IHByZWRpY2F0ZSwgaWYgYW55ICovCisJaWYgKCFo ZWFwX2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVMTCkpCisJewor CQlOb2RlCSAgICpub2RlOworCQlEYXR1bQkJcHJlZERhdHVtOworCQlib29sCQlpc251bGw7CisJ CWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJLyogQ29udmVydCB0ZXh0IHN0cmluZyB0byBub2Rl IHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lk eCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhfaW5kcHJlZCwgJmlzbnVsbCk7CisJCUFzc2VydCgh aXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJlZERhdHVtKTsK KwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsKKwkJcGZyZWUocHJl ZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAqLworCQkqd2hlcmVDbGF1c2UgPQorCQkJZGVwYXJz ZV9leHByZXNzaW9uKG5vZGUsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJfQorCWVsc2UKKwkJ KndoZXJlQ2xhdXNlID0gTlVMTDsKKworCS8qIENsZWFuIHVwICovCisJUmVsZWFzZVN5c0NhY2hl KGh0X2lkeCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeHJlbCk7CisJUmVsZWFzZVN5c0NhY2hl KGh0X2FtKTsKKworCS8qIGFsbCBkb25lICovCit9CisKKy8qCisgKiBkZXBhcnNlX0luZGV4U3Rt dAorICoJCWRlcGFyc2UgYW4gSW5kZXhTdG10CisgKgorICogR2l2ZW4gYW4gaW5kZXggT0lEIGFu ZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJl cHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBJZiB0aGUgaW5kZXggY29y cmVzcG9uZHMgdG8gYSBjb25zdHJhaW50LCBOVUxMIGlzIHJldHVybmVkLgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0luZGV4U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJl ZSkKK3sKKwlJbmRleFN0bXQgICpub2RlID0gKEluZGV4U3RtdCAqKSBwYXJzZXRyZWU7CisJT2Jq VHJlZQkgICAqaW5kZXhTdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlSZWxhdGlvbglpZHhyZWw7 CisJUmVsYXRpb24JaGVhcHJlbDsKKwljaGFyCSAgICppbmRleF9hbTsKKwljaGFyCSAgICpkZWZp bml0aW9uOworCWNoYXIJICAgKnJlbG9wdGlvbnM7CisJY2hhcgkgICAqdGFibGVzcGFjZTsKKwlj aGFyCSAgICp3aGVyZUNsYXVzZTsKKworCWlmIChub2RlLT5wcmltYXJ5IHx8IG5vZGUtPmlzY29u c3RyYWludCkKKwl7CisJCS8qCisJCSAqIGluZGV4ZXMgZm9yIFBSSU1BUlkgS0VZIGFuZCBvdGhl ciBjb25zdHJhaW50cyBhcmUgb3V0cHV0CisJCSAqIHNlcGFyYXRlbHk7IHJldHVybiBlbXB0eSBo ZXJlLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWR4cmVsID0gcmVsYXRpb25fb3Bl bihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwloZWFwcmVsID0gcmVsYXRpb25fb3Blbihp ZHhyZWwtPnJkX2luZGV4LT5pbmRyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXBnX2dldF9p bmRleGRlZl9kZXRhaWxlZChvYmplY3RJZCwKKwkJCQkJCQkgJmluZGV4X2FtLCAmZGVmaW5pdGlv biwgJnJlbG9wdGlvbnMsCisJCQkJCQkJICZ0YWJsZXNwYWNlLCAmd2hlcmVDbGF1c2UpOworCisJ aW5kZXhTdG10ID0KKwkJbmV3X29ianRyZWVfVkEoIkNSRUFURSAle3VuaXF1ZX1zIElOREVYICV7 Y29uY3VycmVudGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgIgorCQkJCQkgICAiT04g JXt0YWJsZX1EIFVTSU5HICV7aW5kZXhfYW19cyAoJXtkZWZpbml0aW9ufXMpICIKKwkJCQkJICAg IiV7d2l0aH1zICV7dGFibGVzcGFjZX1zICV7d2hlcmVfY2xhdXNlfXMiLAorCQkJCQkgICA2LAor CQkJCQkgICAidW5pcXVlIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+dW5pcXVlID8gIlVOSVFVRSIg OiAiIiwKKwkJCQkJICAgImNvbmN1cnJlbnRseSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCSAgIG5v ZGUtPmNvbmN1cnJlbnQgPyAiQ09OQ1VSUkVOVExZIiA6ICIiLAorCQkJCQkgICAiaWZfbm90X2V4 aXN0cyIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNU UyIgOiAiIiwKKwkJCQkJICAgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShpZHhyZWwpLAorCQkJCQkgICAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsIGRl ZmluaXRpb24sCisJCQkJCSAgICJpbmRleF9hbSIsIE9ialR5cGVTdHJpbmcsIGluZGV4X2FtKTsK KworCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShoZWFwcmVsLT5yZF9yZWwtPnJlbG5h bWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcHJlbCkpOwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgInRhYmxlIiwgdG1wKTsKKworCS8qIHJl bG9wdGlvbnMgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCAoJXtvcHRzfXMpIiwgMCk7 CisJaWYgKHJlbG9wdGlvbnMpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIm9wdHMiLCBy ZWxvcHRpb25zKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50Iiwg ZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgIndpdGgiLCB0bXApOwor CisJLyogdGFibGVzcGFjZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUQUJMRVNQQUNFICV7 dGFibGVzcGFjZX1zIiwgMCk7CisJaWYgKHRhYmxlc3BhY2UpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcCwgInRhYmxlc3BhY2UiLCB0YWJsZXNwYWNlKTsKKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGlu ZGV4U3RtdCwgInRhYmxlc3BhY2UiLCB0bXApOworCisJLyogV0hFUkUgY2xhdXNlICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIldIRVJFICV7d2hlcmV9cyIsIDApOworCWlmICh3aGVyZUNsYXVz ZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAid2hlcmUiLCB3aGVyZUNsYXVzZSk7CisJ ZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBl bmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICJ3aGVyZV9jbGF1c2UiLCB0bXApOworCisJdGFi bGVfY2xvc2UoaWR4cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCXRhYmxlX2Nsb3NlKGhlYXByZWws IEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gaW5kZXhTdG10OworfQorCisvKgorICogZGVw YXJzZV9DcmVhdGVTdG10CisgKgkJRGVwYXJzZSBhIENyZWF0ZVN0bXQgKENSRUFURSBUQUJMRSkK KyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTdG10ICpub2RlID0gKENyZWF0ZVN0bXQg KikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJ ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJT2JqVHJlZQkqY3Jl YXRlU3RtdDsKKwlPYmpUcmVlCSp0bXA7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpj ZWxsOworCWNoYXIJICAgKmZtdHN0cjsKKworCS8qCisJICogVHlwZWQgdGFibGVzIHVzZSBhIHNs aWdodGx5IGRpZmZlcmVudCBmb3JtYXQgc3RyaW5nOiB3ZSBtdXN0IG5vdCBwdXQKKwkgKiB0YWJs ZV9lbGVtZW50cyB3aXRoIHBhcmVudHMgZGlyZWN0bHkgaW4gdGhlIGZtdCBzdHJpbmcsIGJlY2F1 c2UgaWYKKwkgKiB0aGVyZSBhcmUgbm8gb3B0aW9ucyB0aGUgcGFyZW5zIG11c3Qgbm90IGJlIGVt aXR0ZWQ7IGFuZCBhbHNvLCB0eXBlZAorCSAqIHRhYmxlcyBkbyBub3QgYWxsb3cgZm9yIGluaGVy aXRhbmNlLgorCSAqLworCWlmIChub2RlLT5vZlR5cGVuYW1lKQorCQlmbXRzdHIgPSAiQ1JFQVRF ICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgIgor CQkJIk9GICV7b2ZfdHlwZX1UICV7dGFibGVfZWxlbWVudHN9cyAiCisJCQkiJXtwYXJ0aXRpb25f Ynl9cyAle2FjY2Vzc19tZXRob2R9cyAiCisJCQkiJXt3aXRoX2NsYXVzZX1zICV7b25fY29tbWl0 fXMgJXt0YWJsZXNwYWNlfXMiOworCWVsc2UgaWYgKG5vZGUtPnBhcnRib3VuZCkKKwkJZm10c3Ry ID0gIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVu dGl0eX1EICIKKwkJCSJQQVJUSVRJT04gT0YgJXtwYXJlbnRfaWRlbnRpdHl9RCAle3RhYmxlX2Vs ZW1lbnRzfXMgIgorCQkJIiV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgIgorCQkJ IiV7d2l0aF9jbGF1c2V9cyAle29uX2NvbW1pdH1zICV7dGFibGVzcGFjZX1zICV7cGFydGl0aW9u X2JvdW5kfXMiOworCWVsc2UKKwkJZm10c3RyID0gIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFC TEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICIKKwkJCSIoJXt0YWJsZV9lbGVtZW50 czosIH1zKSAle2luaGVyaXRzfXMgIgorCQkJIiV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0 aG9kfXMgIgorCQkJIiV7d2l0aF9jbGF1c2V9cyAle29uX2NvbW1pdH1zICV7dGFibGVzcGFjZX1z IjsKKworCWNyZWF0ZVN0bXQgPQorCQluZXdfb2JqdHJlZV9WQShmbXRzdHIsIDEsCisJCQkJCSAg ICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCSAgIGdldF9wZXJzaXN0ZW5jZV9z dHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpKTsKKworCXRtcCA9IG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJ CSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisJYXBwZW5kX29iamVjdF9v YmplY3QoY3JlYXRlU3RtdCwgImlkZW50aXR5IiwgdG1wKTsKKworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGNyZWF0ZVN0bXQsICJpZl9ub3RfZXhpc3RzIiwKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhp c3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250 ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmpl Y3RJZCk7CisKKwlpZiAobm9kZS0+b2ZUeXBlbmFtZSB8fCBub2RlLT5wYXJ0Ym91bmQpCisJewor CQlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogV2UgY2FuJ3QgcHV0IHRh YmxlIGVsZW1lbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nIGFzIGFuIGFycmF5CisJCSAq IHN1cnJvdW5kZWQgYnkgcGFyZW5zIGhlcmUsIGJlY2F1c2UgYW4gZW1wdHkgY2xhdXNlIHdvdWxk IGNhdXNlIGEKKwkJICogc3ludGF4IGVycm9yLiAgVGhlcmVmb3JlLCB3ZSB1c2UgYW4gaW5kaXJl Y3Rpb24gZWxlbWVudCBhbmQgc2V0CisJCSAqIHByZXNlbnQ9ZmFsc2Ugd2hlbiB0aGVyZSBhcmUg bm8gZWxlbWVudHMuCisJCSAqLworCQlpZiAobm9kZS0+b2ZUeXBlbmFtZSkKKwkJeworCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgInRhYmxlX2tpbmQiLCAidHlwZWQiKTsKKwor CQkJdG1wID0gbmV3X29ianRyZWVfZm9yX3R5cGUocmVsYXRpb24tPnJkX3JlbC0+cmVsb2Z0eXBl LCAtMSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAib2ZfdHlwZSIsIHRt cCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMaXN0CSAqcGFyZW50czsKKwkJCU9iakVsZW0JICpl bGVtOworCisJCQlwYXJlbnRzID0gZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpOworCQkJ ZWxlbSA9IChPYmpFbGVtICopIGxpbml0aWFsKHBhcmVudHMpOworCisJCQlBc3NlcnQobGlzdF9s ZW5ndGgocGFyZW50cykgPT0gMSk7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0 bXQsICJ0YWJsZV9raW5kIiwgInBhcnRpdGlvbiIpOworCisJCQlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVTdG10LCAicGFyZW50X2lkZW50aXR5IiwKKwkJCQkJCQkJIGVsZW0tPnZhbHVlLm9i amVjdCk7CisJCX0KKworCQl0YWJsZWVsdHMgPSBkZXBhcnNlVGFibGVFbGVtZW50cyhyZWxhdGlv biwgbm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJIHRydWUsCQkvKiB0eXBl ZCB0YWJsZSAqLworCQkJCQkJCQkJCSBmYWxzZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8KKwkJdGFi bGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxpZE9p ZCk7CisJCWlmICh0YWJsZWVsdHMgPT0gTklMKQorCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIiIs IDEsCisJCQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBmYWxzZSk7CisJCWVsc2UKKwkJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIoJXtlbGVtZW50czosIH1zKSIsIDEsCisJCQkJCQkJCSAi ZWxlbWVudHMiLCBPYmpUeXBlQXJyYXksIHRhYmxlZWx0cyk7CisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNyZWF0ZVN0bXQsICJ0YWJsZV9lbGVtZW50cyIsIHRtcCk7CisJfQorCWVsc2UKKwl7CisJ CUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCQkvKgorCQkgKiBUaGVyZSBpcyBubyBuZWVk IHRvIHByb2Nlc3MgTElLRSBjbGF1c2VzIHNlcGFyYXRlbHk7IHRoZXkgaGF2ZQorCQkgKiBhbHJl YWR5IGJlZW4gdHJhbnNmb3JtZWQgaW50byBjb2x1bW5zIGFuZCBjb25zdHJhaW50cy4KKwkJICov CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICJ0YWJsZV9raW5kIiwgInBsYWlu Iik7CisKKwkJLyoKKwkJICogUHJvY2VzcyB0YWJsZSBlbGVtZW50czogY29sdW1uIGRlZmluaXRp b25zIGFuZCBjb25zdHJhaW50cy4JT25seQorCQkgKiB0aGUgY29sdW1uIGRlZmluaXRpb25zIGFy ZSBvYnRhaW5lZCBmcm9tIHRoZSBwYXJzZSBub2RlIGl0c2VsZi4JVG8KKwkJICogZ2V0IGNvbnN0 cmFpbnRzIHdlIHJlbHkgb24gcGdfY29uc3RyYWludCwgYmVjYXVzZSB0aGUgcGFyc2Ugbm9kZQor CQkgKiBtaWdodCBiZSBtaXNzaW5nIHNvbWUgdGhpbmdzIHN1Y2ggYXMgdGhlIG5hbWUgb2YgdGhl IGNvbnN0cmFpbnRzLgorCQkgKi8KKwkJdGFibGVlbHRzID0gZGVwYXJzZVRhYmxlRWxlbWVudHMo cmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSBmYWxzZSwJ CS8qIG5vdCB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSBmYWxzZSk7CS8qIG5vdCBjb21wb3Np dGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJ ZCwgSW52YWxpZE9pZCk7CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTdG10LCAidGFi bGVfZWxlbWVudHMiLCB0YWJsZWVsdHMpOworCisJCS8qCisJCSAqIEFkZCBpbmhlcml0YW5jZSBz cGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9mCisJCSAqIHBh cmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkgbGFjayB0aGUgYWN0 dWFsCisJCSAqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJlbGF0aW9ucy4gIFJhdGhl ciB0aGFuIHRyeWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUgaW5mb3JtYXRp b24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1vcmUgYWNjdXJhdGUgYW5kIGNv bnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkgKi8KKwkJdG1wID0gbmV3 X29ianRyZWVfVkEoIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAwKTsKKwkJaWYgKGxpc3Rf bGVuZ3RoKG5vZGUtPmluaFJlbGF0aW9ucykgPiAwKQorCQkJYXBwZW5kX2FycmF5X29iamVjdCh0 bXAsICJwYXJlbnRzIiwgZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpKTsKKwkJZWxzZQor CQl7CisJCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAicGFyZW50cyIpOworCQkJYXBwZW5kX2Jv b2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJCX0KKwkJYXBwZW5kX29iamVjdF9v YmplY3QoY3JlYXRlU3RtdCwgImluaGVyaXRzIiwgdG1wKTsKKwl9CisKKwl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsIDApOworCWlmIChub2RlLT50YWJs ZXNwYWNlbmFtZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAidGFibGVzcGFjZSIsIG5v ZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1w LCAidGFibGVzcGFjZSIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZh bHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgInRhYmxlc3BhY2Ui LCB0bXApOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIm9uX2NvbW1pdCIs CisJCQkJCQkgZGVwYXJzZV9PbkNvbW1pdENsYXVzZShub2RlLT5vbmNvbW1pdCkpOworCisJLyog Rk9SIFZBTFVFUyBjbGF1c2UgKi8KKwlpZiAobm9kZS0+cGFydGJvdW5kKQorCXsKKwkJLyoKKwkJ ICogR2V0IHBnX2NsYXNzLnJlbHBhcnRib3VuZC4gV2UgY2Fubm90IHVzZSBwYXJ0Ym91bmQgaW4g dGhlCisJCSAqIHBhcnNldHJlZSBkaXJlY3RseSBhcyBpdCdzIHRoZSBvcmlnaW5hbCBwYXJ0Ym91 bmQgZXhwcmVzc2lvbgorCQkgKiB3aGljaCBoYXZlbid0IGJlZW4gdHJhbnNmb3JtZWQuCisJCSAq LworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAicGFydGl0aW9uX2JvdW5kIiwK KwkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChvYmplY3RJZCkpOworCX0KKworCS8q IFBBUlRJVElPTiBCWSBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFSVElUSU9O IEJZICV7ZGVmaW5pdGlvbn1zIiwgMCk7CisJaWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQg PT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w LCAiZGVmaW5pdGlvbiIsIHBnX2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShvYmplY3RJZCkpOworCWVs c2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXAsICJkZWZpbml0aW9uIik7CisJCWFwcGVu ZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0 X29iamVjdChjcmVhdGVTdG10LCAicGFydGl0aW9uX2J5IiwgdG1wKTsKKworCS8qIFVTSU5HIGNs YXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIs IDApOworCWlmIChub2RlLT5hY2Nlc3NNZXRob2QpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cCwgImFjY2Vzc19tZXRob2QiLCBub2RlLT5hY2Nlc3NNZXRob2QpOworCWVsc2UKKwl7CisJCWFw cGVuZF9udWxsX29iamVjdCh0bXAsICJhY2Nlc3NfbWV0aG9kIik7CisJCWFwcGVuZF9ib29sX29i amVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChj cmVhdGVTdG10LCAiYWNjZXNzX21ldGhvZCIsIHRtcCk7CisKKwkvKiBXSVRIIGNsYXVzZSAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIICgle3dpdGg6LCB9cykiLCAwKTsKKwlsaXN0ID0g TklMOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJT2JqVHJlZQkgICAq dG1wMjsKKwkJRGVmRWxlbQkqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCXRt cDIgPSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcDIpKTsKKwl9CisKKwlpZiAobGlzdCkKKwkJYXBwZW5kX2Fy cmF5X29iamVjdCh0bXAsICJ3aXRoIiwgbGlzdCk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZVN0bXQsICJ3aXRoX2NsYXVzZSIsIHRtcCk7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwg QWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTdG10OworfQorCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0FsdGVyT3duZXJTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9k ZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT3duZXJTdG10ICpub2RlID0gKEFsdGVyT3duZXJTdG10 ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpvd25lclN0bXQ7CisJY2hhcgkgICAqZm10Owor CisJZm10ID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fXMgT1dORVIgVE8gJSV7bmV3 b3duZXJ9SSIsCisJCQkJICAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqZWN0VHlwZSkpOwor CW93bmVyU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMCk7CisJYXBwZW5kX3N0cmluZ19vYmpl Y3Qob3duZXJTdG10LCAibmV3b3duZXIiLAorCQkJCQkJIGdldF9yb2xlc3BlY19uYW1lKG5vZGUt Pm5ld293bmVyKSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChvd25lclN0bXQsICJpZGVudGl0 eSIsCisJCQkJCQkgZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKSk7CisKKwlyZXR1 cm4gb3duZXJTdG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbmFtZVN0bXQo T2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVuYW1lU3RtdCAq bm9kZSA9IChSZW5hbWVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpyZW5hbWVTdG10 OworCisJLyoKKwkgKiBJbiBhIEFMVEVSIC4uIFJFTkFNRSBjb21tYW5kLCB3ZSBkb24ndCBoYXZl IHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZQorCSAqIG9iamVjdCBpbiBzeXN0ZW0gY2F0YWxvZ3M6 IHNpbmNlIHdlIGluc3BlY3QgdGhlbSBhZnRlciB0aGUgY29tbWFuZCBoYXMKKwkgKiBleGVjdXRl ZCwgdGhlIG9sZCBuYW1lIGlzIGFscmVhZHkgZ29uZS4gIFRoZXJlZm9yZSwgd2UgZXh0cmFjdCBp dCBmcm9tCisJICogdGhlIHBhcnNlIG5vZGUuICBOb3RlIHdlIHN0aWxsIGV4dHJhY3QgdGhlIHNj aGVtYSBuYW1lIGZyb20gdGhlIGNhdGFsb2cKKwkgKiAoaXQgbWlnaHQgbm90IGJlIHByZXNlbnQg aW4gdGhlIHBhcnNlIG5vZGUpOyBpdCBjYW5ub3QgcG9zc2libHkgaGF2ZQorCSAqIGNoYW5nZWQg YW55d2F5LgorCSAqLworCXN3aXRjaCAobm9kZS0+cmVuYW1lVHlwZSkKKwl7CisJCWNhc2UgT0JK RUNUX1NDSEVNQToKKwkJCXsKKwkJCQlyZW5hbWVTdG10ID0KKwkJCQkJbmV3X29ianRyZWVfVkEo IkFMVEVSIFNDSEVNQSAle2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJ CQkJICAgMCk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgImlkZW50aXR5 Iiwgbm9kZS0+c3VibmFtZSk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2co RVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG5vZGUtPnJlbmFtZVR5cGUpOwor CX0KKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICJuZXduYW1lIiwgbm9kZS0+ bmV3bmFtZSk7CisKKwlyZXR1cm4gcmVuYW1lU3RtdDsKK30KKworc3RhdGljIGlubGluZSBPYmpF bGVtICoKK2RlcGFyc2VfU2VxX0NhY2hlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5j ZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKnRtcDsKKwljaGFy CSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRf Rk9STUFULCBzZXFkYXRhLT5zZXFjYWNoZSk7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9 ICJTRVQgQ0FDSEUgJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJDQUNIRSAle3ZhbHVlfXMi OworCisJdG1wID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAiY2FjaGUiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0 cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QodG1wKTsKK30KKworc3RhdGljIGlubGlu ZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0N5Y2xlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19z ZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKnRtcDsK KwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgJXtub31z IENZQ0xFIjsKKwllbHNlCisJCWZtdCA9ICIle25vfXMgQ1lDTEUiOworCisJdG1wID0gbmV3X29i anRyZWVfVkEoZm10LAorCQkJCQkJIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJjeWNsZSIsCisJCQkJCQkgIm5vIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBzZXFkYXRhLT5z ZXFjeWNsZSA/ICIiIDogIk5PIik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHRtcCk7Cit9 CisKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShPYmpU cmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkK K3sKKwlPYmpUcmVlCSAgICp0bXA7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsK KworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1z IjsKKwllbHNlCisJCWZtdCA9ICJJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9 IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxaW5jcmVtZW50KTsKKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQShmbXQsCisJCQkJCQkgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInNlcWluY3JlbWVudCIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1w c3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QodG1wKTsKK30KKworc3RhdGljIGlubGlu ZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01pbnZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9w Z19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKnRt cDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxl KQorCQlmbXQgPSAiU0VUIE1JTlZBTFVFICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAiTUlO VkFMVUUgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2Vx ZGF0YS0+c2VxbWluKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQShmbXQsCisJCQkJCQkgMiwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1pbnZhbHVlIiwKKwkJCQkJCSAidmFsdWUi LCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0bXAp OworfQorCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfTWF4dmFsdWUoT2Jq VHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUp Cit7CisJT2JqVHJlZQkgICAqdG1wOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7 CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zIjsK KwllbHNlCisJCWZtdCA9ICJNQVhWQUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmlu dGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtYXgpOworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KGZtdCwKKwkJCQkJCSAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWF4dmFs dWUiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5l d19vYmplY3Rfb2JqZWN0KHRtcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBh cnNlX1NlcV9TdGFydHdpdGgoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRh dGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqdG1wOworCWNoYXIJICAgKnRt cHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQg U1RBUlQgV0lUSCAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIlNUQVJUIFdJVEggJXt2YWx1 ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vxc3Rh cnQpOworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwKKwkJCQkJCSAyLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RhcnQiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJp bmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHRtcCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9SZXN0YXJ0KE9ialRyZWUgKnBhcmVudCwg Rm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpCit7CisJT2JqVHJlZQkgICAqdG1wOworCWNo YXIJICAgKnRtcHN0cjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0 YS0+bGFzdF92YWx1ZSk7CisJdG1wID0gbmV3X29ianRyZWVfVkEoIlJFU1RBUlQgJXt2YWx1ZX1z IiwKKwkJCQkJCSAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVzdGFydCIs CisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QodG1wKTsKK30KKworLyoKKyAqIGRlcGFyc2VfQ3JlYXRlU2NoZW1hU3RtdAor ICoJCWRlcGFyc2UgYSBDcmVhdGVTY2hlbWFTdG10CisgKgorICogR2l2ZW4gYSBzY2hlbWEgT0lE IGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAq IHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBOb3RlIHdlIGRvbid0 IG91dHB1dCB0aGUgc2NoZW1hIGVsZW1lbnRzIGdpdmVuIGluIHRoZSBjcmVhdGlvbiBjb21tYW5k LgorICogVGhleSBtdXN0IGJlIG91dHB1dCBzZXBhcmF0ZWx5LgkgKEluIHRoZSBjdXJyZW50IGlt cGxlbWVudGF0aW9uLAorICogQ3JlYXRlU2NoZW1hQ29tbWFuZCBwYXNzZXMgdGhlbSBiYWNrIHRv IFByb2Nlc3NVdGlsaXR5LCB3aGljaCB3aWxsIGxlYWQgdG8KKyAqIHRoaXMgZmlsZSBpZiBhcHBy b3ByaWF0ZS4pCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2NoZW1hU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTY2hlbWFTdG10ICpu b2RlID0gKENyZWF0ZVNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJKmNyZWF0ZVNj aGVtYTsKKwlPYmpUcmVlCSphdXRoOworCisJY3JlYXRlU2NoZW1hID0KKwkJbmV3X29ianRyZWVf VkEoIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0 aW9ufXMiLAorCQkJCQkgICAyLAorCQkJCQkgICAibmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUt PnNjaGVtYW5hbWUsCisJCQkJCSAgICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJICAgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKwlhdXRo ID0gbmV3X29ianRyZWVfVkEoIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIs IDApOworCWlmIChub2RlLT5hdXRocm9sZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYXV0aCwg ImF1dGhvcml6YXRpb25fcm9sZSIsCisJCQkJCQkJIGdldF9yb2xlc3BlY19uYW1lKG5vZGUtPmF1 dGhyb2xlKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KGF1dGgsICJhdXRob3Jp emF0aW9uX3JvbGUiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KGF1dGgsICJwcmVzZW50IiwgZmFs c2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTY2hlbWEsICJhdXRob3JpemF0 aW9uIiwgYXV0aCk7CisKKwlyZXR1cm4gY3JlYXRlU2NoZW1hOworfQorCitzdGF0aWMgT2JqRWxl bSAqCitkZXBhcnNlX1NlcV9Pd25lZEJ5KE9ialRyZWUgKnBhcmVudCwgT2lkIHNlcXVlbmNlSWQs IGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkqb3duZWRieSA9IE5VTEw7CisJUmVsYXRp b24JZGVwUmVsOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5c1szXTsKKwlI ZWFwVHVwbGUgICB0dXBsZTsKKworCWRlcFJlbCA9IHRhYmxlX29wZW4oRGVwZW5kUmVsYXRpb25J ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgma2V5c1swXSwKKwkJCQlBbnVtX3Bn X2RlcGVuZF9jbGFzc2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJ CQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uUmVsYXRpb25JZCkpOworCVNjYW5LZXlJbml0KCZr ZXlzWzFdLAorCQkJCUFudW1fcGdfZGVwZW5kX29iamlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51 bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKHNlcXVlbmNlSWQpKTsKKwlTY2Fu S2V5SW5pdCgma2V5c1syXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9vYmpzdWJpZCwKKwkJCQlCVEVx dWFsU3RyYXRlZ3lOdW1iZXIsIEZfSU5UNEVRLAorCQkJCUludDMyR2V0RGF0dW0oMCkpOworCisJ c2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihkZXBSZWwsIERlcGVuZERlcGVuZGVySW5kZXhJZCwg dHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDMsIGtleXMpOworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlk KHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlPaWQJCSBvd25lcklkOwor CQlGb3JtX3BnX2RlcGVuZCBkZXBmb3JtOworCQlPYmpUcmVlCSp0bXA7CisJCWNoYXIJICAgKmNv bG5hbWU7CisKKwkJZGVwZm9ybSA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNUKHR1cGxlKTsK KworCQkvKiBvbmx5IGNvbnNpZGVyIEFVVE8gZGVwZW5kZW5jaWVzIG9uIHBnX2NsYXNzICovCisJ CWlmIChkZXBmb3JtLT5kZXB0eXBlICE9IERFUEVOREVOQ1lfQVVUTykKKwkJCWNvbnRpbnVlOwor CQlpZiAoZGVwZm9ybS0+cmVmY2xhc3NpZCAhPSBSZWxhdGlvblJlbGF0aW9uSWQpCisJCQljb250 aW51ZTsKKwkJaWYgKGRlcGZvcm0tPnJlZm9ianN1YmlkIDw9IDApCisJCQljb250aW51ZTsKKwor CQlvd25lcklkID0gZGVwZm9ybS0+cmVmb2JqaWQ7CisJCWNvbG5hbWUgPSBnZXRfYXR0bmFtZShv d25lcklkLCBkZXBmb3JtLT5yZWZvYmpzdWJpZCwgZmFsc2UpOworCQlpZiAoY29sbmFtZSA9PSBO VUxMKQorCQkJY29udGludWU7CisKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFJlbGF0aW9uUmVsYXRpb25JZCwgb3duZXJJZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cCwgImF0dHJuYW1lIiwgY29sbmFtZSk7CisJCW93bmVkYnkgPSBuZXdfb2JqdHJlZV9WQSgiT1dO RUQgQlkgJXtvd25lcn1EIiwKKwkJCQkJCQkJIDIsCisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgIm93bmVkIiwKKwkJCQkJCQkJICJvd25lciIsIE9ialR5cGVPYmplY3QsIHRtcCk7 CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwlyZWxhdGlvbl9jbG9zZShkZXBSZWws IEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gb3duZXIgY29sdW1u LCBlbWl0IGFuIGVtcHR5IE9XTkVEIEJZIGVsZW1lbnQsIHNldCB1cCBzbworCSAqIHRoYXQgaXQg d29uJ3QgcHJpbnQgYW55dGhpbmcuCisJICovCisJaWYgKCFvd25lZGJ5KQorCQkvKiBYWFggdGhp cyBzaG91bGRuJ3QgaGFwcGVuIC4uLiAqLworCQlvd25lZGJ5ID0gbmV3X29ianRyZWVfVkEoIk9X TkVEIEJZICV7b3duZXJ9RCIsCisJCQkJCQkJCSAzLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJvd25lZCIsCisJCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlTnVsbCwKKwkJCQkJ CQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGZhbHNlKTsKKwlyZXR1cm4gbmV3X29iamVjdF9v YmplY3Qob3duZWRieSk7Cit9CisKKy8qIGRlcGFyc2VfQ3JlYXRlU2VxU3RtdAorICogCWRlcGFy c2UgYSBDcmVhdGVTZXFTdG10CisgKgorICogCUdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCB0aGUg cGFyc2V0cmVlIHRoYXQgY3JlYXRlIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogCXJlcHJlc2Vu dGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9DcmVhdGVTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRy ZWUJKmNyZWF0ZVNlcTsKKwlPYmpUcmVlCSp0bXA7CisJUmVsYXRpb24JcmVsYXRpb247CisJRm9y bV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJRm9y bV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVw bGU7CisJQ3JlYXRlU2VxU3RtdCAqY3JlYXRlU2VxU3RtdCA9IChDcmVhdGVTZXFTdG10ICopIHBh cnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQg c2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4g ZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoY3JlYXRlU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQly ZXR1cm4gTlVMTDsKKworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsK KworCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7 CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBP YmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1 cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1 IiwKKwkJCSBvYmplY3RJZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNU UlVDVChzZXF0dXBsZSk7CisKKwljcmVhdGVTZXEgPQorCQluZXdfb2JqdHJlZV9WQSgiQ1JFQVRF ICV7cGVyc2lzdGVuY2V9cyBTRVFVRU5DRSAle2lkZW50aXR5fUQgIgorCQkJCQkgICAiJXtkZWZp bml0aW9uOiB9cyIsCisJCQkJCSAgIDEsCisJCQkJCSAgICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVT dHJpbmcsCisJCQkJCSAgIGdldF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVs cGVyc2lzdGVuY2UpKTsKKworCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlv bi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHJlbGF0aW9uKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU2VxLCAiaWRlbnRp dHkiLCB0bXApOworCisJLyogZGVmaW5pdGlvbiBlbGVtZXRzICovCisJZWxlbXMgPSBsYXBwZW5k KGVsZW1zLCBkZXBhcnNlX1NlcV9DYWNoZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJ ZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShjcmVhdGVTZXEsIHNlcWZv cm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9JbmNyZW1l bnRCeShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1z LCBkZXBhcnNlX1NlcV9NaW52YWx1ZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxl bXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShjcmVhdGVTZXEsIHNlcWZv cm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9TdGFydHdp dGgoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywg ZGVwYXJzZV9TZXFfUmVzdGFydChjcmVhdGVTZXEsIHNlcWRhdGEpKTsKKwkvKiB3ZSBwdXJwb3Nl ZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCisJYXBwZW5kX2FycmF5X29iamVj dChjcmVhdGVTZXEsICJkZWZpbml0aW9uIiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBS b3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVM b2NrKTsKKworCXJldHVybiBjcmVhdGVTZXE7Cit9CisKKy8qCisgKiBkZXBhcnNlX0FsdGVyU2Vx U3RtdAorICoJZGVwYXJzZSBhbiBBbHRlclNlcVN0bXQKKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNl IE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUK KyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJT2JqVHJlZQkJKmFsdGVyU2VxOworCU9ialRyZWUJCSp0bXA7CisJUmVsYXRpb24JIHJlbGF0 aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCUxpc3QJICAgKmVsZW1zID0g TklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJl bGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQWx0ZXJTZXFTdG10ICphbHRlclNl cVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2Ug Zm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9y CisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoYWx0ZXJT ZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJc2VxZGF0YSA9IGdldF9z ZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9i amVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxh dGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29w eTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXNlcWZvcm0g PSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKworCWFsdGVyU2VxID0K KwkJbmV3X29ianRyZWVfVkEoIkFMVEVSIFNFUVVFTkNFICV7aWRlbnRpdHl9RCAle2RlZmluaXRp b246IH1zIiwgMCk7CisJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5y ZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cmVsYXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclNlcSwgImlkZW50aXR5Iiwg dG1wKTsKKworCWZvcmVhY2goY2VsbCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlKS0+b3B0 aW9ucykKKwl7CisJCURlZkVsZW0gKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJ CU9iakVsZW0gKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjYWNoZSIp ID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DYWNoZShhbHRlclNlcSwgc2VxZm9ybSwg ZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImN5Y2xlIikgPT0gMCkK KwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0N5Y2xlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7 CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0gMCkKKwkJ CW5ld2VsbSA9IGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxz ZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWludmFsdWUiKSA9PSAwKQor CQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWludmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNl KTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJtYXh2YWx1ZSIpID09IDApCisJ CQluZXdlbG0gPSBkZXBhcnNlX1NlcV9NYXh2YWx1ZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2Up OworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkKKwkJCW5l d2VsbSA9IGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOwor CQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RhcnQiKSA9PSAwKQorCQkJbmV3 ZWxtID0gZGVwYXJzZV9TZXFfUmVzdGFydChhbHRlclNlcSwgc2VxZGF0YSk7CisJCWVsc2UgaWYg KHN0cmNtcChlbGVtLT5kZWZuYW1lLCAib3duZWRfYnkiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9TZXFfT3duZWRCeShhbHRlclNlcSwgb2JqZWN0SWQsIGZhbHNlKTsKKwkJZWxzZQorCQkJ ZWxvZyhFUlJPUiwgImludmFsaWQgc2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVmbmFtZSk7 CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCWFwcGVuZF9hcnJh eV9vYmplY3QoYWx0ZXJTZXEsICJkZWZpbml0aW9uIiwgZWxlbXMpOworCisJdGFibGVfY2xvc2Uo cmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNz U2hhcmVMb2NrKTsKKworCXJldHVybiBhbHRlclNlcTsKK30KKworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9BbHRlclRhYmxlU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJl ZQkgICAqYWx0ZXJUYWJsZVN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCU9ialRyZWUJICAgKnRt cDI7CisJTGlzdAkgICAqZHBjb250ZXh0OworCVJlbGF0aW9uCXJlbDsKKwlMaXN0CSAgICpzdWJj bWRzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJY2hhcgkgICAqZm10c3RyOworCWNvbnN0 IGNoYXIgKnJlbHR5cGU7CisJYm9vbAkJaXN0eXBlID0gZmFsc2U7CisJTGlzdAkgICAqZXhwcnMg PSBOSUw7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9BbHRlclRhYmxlKTsKKworCXJlbCA9 IHJlbGF0aW9uX29wZW4oY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpLAorCQkJCQkJCQkJY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQpOworCisJc3dp dGNoIChyZWwtPnJkX3JlbC0+cmVsa2luZCkKKwl7CisJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoK KwkJY2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFOgorCQkJcmVsdHlwZSA9ICJUQUJMRSI7 CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0lOREVYOgorCQljYXNlIFJFTEtJTkRfUEFSVElU SU9ORURfSU5ERVg6CisJCQlyZWx0eXBlID0gIklOREVYIjsKKwkJCWJyZWFrOworCQljYXNlIFJF TEtJTkRfVklFVzoKKwkJCXJlbHR5cGUgPSAiVklFVyI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxL SU5EX0NPTVBPU0lURV9UWVBFOgorCQkJcmVsdHlwZSA9ICJUWVBFIjsKKwkJCWlzdHlwZSA9IHRy dWU7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0ZPUkVJR05fVEFCTEU6CisJCQlyZWx0eXBl ID0gIkZPUkVJR04gVEFCTEUiOworCQkJYnJlYWs7CisKKwkJLyogVE9ETyBzdXBwb3J0IGZvciBw YXJ0aXRpb25lZCB0YWJsZSAqLworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBl Y3RlZCByZWxraW5kICVkIiwgcmVsLT5yZF9yZWwtPnJlbGtpbmQpOworCQkJcmVsdHlwZSA9IE5V TEw7OworCX0KKworCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1EICUl e3N1YmNtZHM6LCB9cyIsIHJlbHR5cGUpOworCWFsdGVyVGFibGVTdG10ID0gbmV3X29ianRyZWVf VkEoZm10c3RyLCAwKTsKKworCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWwtPnJk X3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShy ZWwpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclRhYmxlU3RtdCwgImlkZW50aXR5Iiwg dG1wKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVyVGFibGUuc3ViY21kcykKKwl7CisJ CUNvbGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVkQVRTdWJjbWQgKikgbGZpcnN0KGNl bGwpOworCQlBbHRlclRhYmxlQ21kCSpzdWJjbWQgPSAoQWx0ZXJUYWJsZUNtZCAqKSBzdWItPnBh cnNldHJlZTsKKwkJT2JqVHJlZQkgICAqdHJlZTsKKworCQlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0 ZXJUYWJsZUNtZCkpOworCisJCXN3aXRjaCAoc3ViY21kLT5zdWJ0eXBlKQorCQl7CisJCQljYXNl IEFUX0FkZENvbHVtbjoKKwkJCWNhc2UgQVRfQWRkQ29sdW1uUmVjdXJzZToKKwkJCQkvKiBYWFgg bmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCUFzc2VydChJ c0Eoc3ViY21kLT5kZWYsIENvbHVtbkRlZikpOworCQkJCXRyZWUgPSBkZXBhcnNlX0NvbHVtbkRl ZihyZWwsIGRwY29udGV4dCwgZmFsc2UsCisJCQkJCQkJCQkJIChDb2x1bW5EZWYgKikgc3ViY21k LT5kZWYsIHRydWUsICZleHBycyk7CisJCQkJZm10c3RyID0gcHNwcmludGYoIkFERCAlcyAlJXtk ZWZpbml0aW9ufXMiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIp OworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJhZGQgY29sdW1uIiwKKwkJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9i alR5cGVPYmplY3QsIHRyZWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4Q29u c3RyYWludDoKKwkJCQl7CisJCQkJCUluZGV4U3RtdCAgKmlzdG10OworCQkJCQlSZWxhdGlvbglp ZHg7CisJCQkJCWNvbnN0IGNoYXIgKmlkeG5hbWU7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1 Yi0+YWRkcmVzcy5vYmplY3RJZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRl eFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJ CUFzc2VydChpc3RtdC0+aXNjb25zdHJhaW50ICYmIGlzdG10LT51bmlxdWUpOworCisJCQkJCWlk eCA9IHJlbGF0aW9uX29wZW4oaXN0bXQtPmluZGV4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJ CQlpZHhuYW1lID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KTsKKworCQkJCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50X3R5cGV9 cyBVU0lORyBJTkRFWCAlaW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJl ZH1zIiwKKwkJCQkJCQkJCQkgNCwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFp bnQgdXNpbmcgaW5kZXgiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9j b25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkgImNvbnN0cmFpbnRfdHlwZSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGlzdG10LT5wcmltYXJ5ID8gIlBSSU1BUlkgS0VZ IiA6ICJVTklRVUUiLAorCQkJCQkJCQkJCSAiaW5kZXhfbmFtZSIsIE9ialR5cGVTdHJpbmcsIGlk eG5hbWUpOworCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImRlZmVycmFibGUiLCBp c3RtdC0+ZGVmZXJyYWJsZSA/CisJCQkJCQkJCQkJICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJS QUJMRSIpOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJpbml0X2RlZmVycmVkIiwg aXN0bXQtPmluaXRkZWZlcnJlZCA/CisJCQkJCQkJCQkJICJJTklUSUFMTFkgREVGRVJSRUQiIDog IklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgsIEFj Y2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1JlQWRkSW5k ZXg6CisJCQljYXNlIEFUX1JlQWRkQ29uc3RyYWludDoKKwkJCWNhc2UgQVRfUmVBZGRDb21tZW50 OgorCQkJY2FzZSBBVF9SZXBsYWNlUmVsT3B0aW9uczoKKwkJCQkvKiBTdWJ0eXBlcyB1c2VkIGZv ciBpbnRlcm5hbCBvcGVyYXRpb25zOyBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9BZGRDb2x1bW5Ub1ZpZXc6CisJCQkJLyogQ1JFQVRFIE9SIFJFUExBQ0Ug VklFVyAtLSBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9D b2x1bW5EZWZhdWx0OgorCQkJCWlmIChzdWJjbWQtPmRlZiA9PSBOVUxMKQorCQkJCXsKKwkJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgREVGQVVM VCIsCisJCQkJCQkJCQkJIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZGVmYXVsdCIp OworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlMaXN0CSAgICpkcGNvbnRleHQ7CisJCQkJ CUhlYXBUdXBsZQlhdHRydHVwOworCQkJCQlBdHRyTnVtYmVyCWF0dG5vOworCisJCQkJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgREVGQVVMVCAle2Rl ZmluaXRpb259cyIsCisJCQkJCQkJCQkJIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBk ZWZhdWx0Iik7CisKKwkJCQkJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQocmVs KSk7CisJCQkJCWF0dHJ0dXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUoUmVsYXRpb25HZXRSZWxp ZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlhdHRubyA9ICgoRm9ybV9wZ19hdHRyaWJ1dGUp IEdFVFNUUlVDVChhdHRydHVwKSktPmF0dG51bTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wLCAiZGVmaW5pdGlvbiIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChy ZWwsIGF0dG5vLCBkcGNvbnRleHQsIE5VTEwpKTsKKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGF0dHJ0 dXApOworCQkJCX0KKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJjb2x1bW4iLCBzdWJj bWQtPm5hbWUpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE5vdE51bGw6CisJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9UIE5V TEwiLAorCQkJCQkJCQkJIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Agbm90IG51bGwi KTsKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJjb2x1bW4iLCBzdWJjbWQtPm5hbWUp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE5vdE51bGw6CisJCQkJdG1wID0gbmV3X29i anRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBOT1QgTlVMTCIsCisJCQkJCQkJ CQkgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IG5vdCBudWxsIik7CisJCQkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wLCAiY29sdW1uIiwgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9Ecm9wRXhwcmVzc2lvbjoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNTSU9OICV7aWZfbm90X2V4aXN0c31z IiwKKwkJCQkJCQkJCSAyLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbm90IG51bGwiLAor CQkJCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdWJj bWQtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIjogIiIpOworCQkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcCwgImNvbHVtbiIsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfU2V0U3RhdGlzdGljczoKKwkJCQl7CisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIElu dGVnZXIpKTsKKwkJCQkJaWYgKHN1YmNtZC0+bmFtZSkKKwkJCQkJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9 biIsCisJCQkJCQkJCQkJCSAzLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RhdGlzdGlj cyIsCisJCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAor CQkJCQkJCQkJCQkgInN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJCQkJCQkJIGlu dFZhbCgoSW50ZWdlciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQllbHNlCisJCQkJCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufW4gU0VUIFNUQVRJU1RJQ1MgJXtz dGF0aXN0aWNzfW4iLAorCQkJCQkJCQkJCQkgMywgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0 IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVJbnRlZ2VyLCBzdWJj bWQtPm51bSwKKwkJCQkJCQkJCQkJICJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJCQkJ CQkJCQkJCSBpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJfQorCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX1NldE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0T3B0aW9uczoK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJ CQkJCSAgZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9TZXRTdG9yYWdlOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmlu ZykpOworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBT RVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsCisJCQkJCQkJCQkgMywgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAic2V0IHN0b3JhZ2UiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUsCisJCQkJCQkJCQkgInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ CQkJIHN0clZhbCgoU3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfU2V0Q29tcHJlc3Npb246CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5n KSk7CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNF VCBDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1zIiwKKwkJCQkJCQkJCSAzLCAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgY29tcHJlc3Npb24iLAorCQkJCQkJCQkJICJjb2x1bW4i LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkgImNvbXByZXNzaW9uX21l dGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyVmFsKChTdHJpbmcgKikgc3ViY21k LT5kZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29sdW1uUmVjdXJzZToKKwkJ CWNhc2UgQVRfRHJvcENvbHVtbjoKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiRFJPUCAlcyAlJXtj b2x1bW59SSAlJXtjYXNjYWRlfXMiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDog IkNPTFVNTiIpOworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbHVtbiIsCisJCQkJCQkJCQkgImNvbHVt biIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJdG1wMiA9IG5ld19vYmp0cmVl X1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJCSAgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgc3Vi Y21kLT5iZWhhdmlvcik7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiY2FzY2FkZSIs IHRtcDIpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXg6CisJCQkJeworCQkJ CQlPaWQJCQlpZHhPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUluZGV4U3RtdCAg KmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCWNvbnN0IGNoYXIgKmlkeG5hbWU7CisJ CQkJCU9pZAkJCWNvbnN0ck9pZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRl eFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJ CWlmICghaXN0bXQtPmlzY29uc3RyYWludCkKKwkJCQkJCWJyZWFrOworCisJCQkJCWlkeCA9IHJl bGF0aW9uX29wZW4oaWR4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCQlpZHhuYW1lID0gUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KTsKKworCQkJCQljb25zdHJPaWQgPSBnZXRfcmVsYXRp b25fY29uc3RyYWludF9vaWQoCisJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwgaWR4 bmFtZSwgZmFsc2UpOworCisJCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RSQUlO VCAle25hbWV9SSAle2RlZmluaXRpb259cyIsCisJCQkJCQkJCQkJIDMsICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3Ry aW5nLCBpZHhuYW1lLAorCQkJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkp OworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZENvbnN0cmFpbnQ6CisJCQljYXNlIEFUX0FkZENv bnN0cmFpbnRSZWN1cnNlOgorCQkJCXsKKwkJCQkJLyogWFhYIG5lZWQgdG8gc2V0IHRoZSAicmVj dXJzZSIgYml0IHNvbWV3aGVyZT8gKi8KKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRy ZXNzLm9iamVjdElkOworCQkJCQlib29sCQlpc251bGw7CisJCQkJCUhlYXBUdXBsZQl0dXA7CisJ CQkJCURhdHVtCQl2YWw7CisJCQkJCUNvbnN0cmFpbnQgKmNvbnN0cjsKKworCQkJCQlBc3NlcnQo SXNBKHN1YmNtZC0+ZGVmLCBDb25zdHJhaW50KSk7CisJCQkJCWNvbnN0ciA9ICBjYXN0Tm9kZShD b25zdHJhaW50LCBzdWJjbWQtPmRlZik7CisKKwkJCQkJaWYgKCFjb25zdHItPnNraXBfdmFsaWRh dGlvbikKKwkJCQkJeworCQkJCQkJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwgT2Jq ZWN0SWRHZXREYXR1bShjb25zdHJPaWQpKTsKKworCQkJCQkJaWYgKEhlYXBUdXBsZUlzVmFsaWQo dHVwKSkKKwkJCQkJCXsKKwkJCQkJCQljaGFyCSAgICpjb25iaW47CisKKwkJCQkJCQkvKiBGZXRj aCBjb25zdHJhaW50IGV4cHJlc3Npb24gaW4gcGFyc2V0cmVlIGZvcm0gKi8KKwkJCQkJCQl2YWwg PSBTeXNDYWNoZUdldEF0dHIoQ09OU1RST0lELCB0dXAsCisJCQkJCQkJCQkJCQkgIEFudW1fcGdf Y29uc3RyYWludF9jb25iaW4sICZpc251bGwpOworCisJCQkJCQkJaWYgKCFpc251bGwpCisJCQkJ CQkJeworCQkJCQkJCQljb25iaW4gPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbCk7CisJCQkJCQkJ CWV4cHJzID0gbGFwcGVuZChleHBycywgc3RyaW5nVG9Ob2RlKGNvbmJpbikpOworCQkJCQkJCX0K KworCQkJCQkJCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlv bn1zIiwKKwkJCQkJCQkJCQkgMywgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFp bnQiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25h bWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJPaWQp KTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29uc3RyYWludDoKKwkJ CQl7CisJCQkJCU9pZAkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlD b25zdHJhaW50ICpjID0gKENvbnN0cmFpbnQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJLyogaWYg bm8gY29uc3RyYWludCB3YXMgYWx0ZXJlZCwgc2lsZW50bHkgc2tpcCBpdCAqLworCQkJCQlpZiAo IU9pZElzVmFsaWQoY29uc3RyT2lkKSkKKwkJCQkJCWJyZWFrOworCisJCQkJCUFzc2VydChJc0Eo YywgQ29uc3RyYWludCkpOworCQkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09OU1RS QUlOVCAle25hbWV9SSAle2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cyIsCisJCQkJCQkJ CQkJIDIsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbnN0cmFpbnQiLAorCQkJCQkJ CQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lk KSk7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImRlZmVycmFibGUiLCBjLT5kZWZl cnJhYmxlID8KKwkJCQkJCQkJCQkgIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIik7CisJ CQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImluaXRfZGVmZXJyZWQiLCBjLT5pbml0ZGVm ZXJyZWQgPworCQkJCQkJCQkJCSAiSU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1N RURJQVRFIik7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0 cmFpbnRSZWN1cnNlOgorCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0cmFpbnQ6CisJCQkJdG1wID0g bmV3X29ianRyZWVfVkEoIlZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkiLCAyLAor CQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZhbGlkYXRlIGNvbnN0cmFpbnQiLAor CQkJCQkJCQkJICJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29uc3RyYWludFJlY3Vyc2U6CisJCQljYXNlIEFU X0Ryb3BDb25zdHJhaW50OgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QIENPTlNUUkFJ TlQgJXtjb25zdHJhaW50fUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImRyb3AgY29uc3RyYWludCIsCisJCQkJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5n LCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlw ZToKKwkJCQl7CisJCQkJCVR1cGxlRGVzYyB0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwp OworCQkJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQ7CisJCQkJCUNvbHVtbkRlZgkgICAqZGVmOwor CisJCQkJCWF0dCA9ICYodHVwZGVzYy0+YXR0cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkIC0g MV0pOworCQkJCQlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3NlcnQo SXNBKGRlZiwgQ29sdW1uRGVmKSk7CisKKwkJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVz ICUle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUgJSV7ZGF0YXR5cGV9VCAlJXtjb2xsYXRpb259cyAl cyIsCisJCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIsCisJCQkJCQkJ CQkgIGlzdHlwZSA/ICIle2Nhc2NhZGV9cyIgOiAiJXt1c2luZ31zIik7CisKKwkJCQkJdG1wID0g bmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJhbHRlciBjb2x1bW4gdHlwZSIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3Ry aW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCQkvKiBhZGQgdGhlIFRZUEUgY2xhdXNlICovCisJCQkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgImRhdGF0eXBlIiwKKwkJCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3R5cGUoYXR0LT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJCSAgYXR0LT5hdHR0 eXBtb2QpKTsKKworCQkJCQkvKiBhZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVkICovCisJ CQkJCXRtcDIgPSBuZXdfb2JqdHJlZV9WQSgiQ09MTEFURSAle25hbWV9RCIsIDApOworCQkJCQlp ZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikpCisJCQkJCXsKKwkJCQkJCU9ialRyZWUg KmNvbGxuYW1lOworCisJCQkJCQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJICAgYXR0LT5hdHRjb2xsYXRp b24pOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wMiwgIm5hbWUiLCBjb2xsbmFtZSk7 CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcDIsICJwcmVz ZW50IiwgZmFsc2UpOworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICJjb2xsYXRpb24i LCB0bXAyKTsKKworCQkJCQkvKiBpZiBub3QgYSBjb21wb3NpdGUgdHlwZSwgYWRkIHRoZSBVU0lO RyBjbGF1c2UgKi8KKwkJCQkJaWYgKCFpc3R5cGUpCisJCQkJCXsKKwkJCQkJCS8qCisJCQkJCQkg KiBJZiB0aGVyZSdzIGEgVVNJTkcgY2xhdXNlLCB0cmFuc2Zvcm1BbHRlclRhYmxlU3RtdAorCQkJ CQkJICogcmFuIGl0IHRocm91Z2ggdHJhbnNmb3JtRXhwciBhbmQgc3RvcmVkIHRoZQorCQkJCQkJ ICogcmVzdWx0aW5nIG5vZGUgaW4gY29va2VkX2RlZmF1bHQsIHdoaWNoIHdlIGNhbiB1c2UKKwkJ CQkJCSAqIGhlcmUuCisJCQkJCQkgKi8KKwkJCQkJCXRtcDIgPSBuZXdfb2JqdHJlZV9WQSgiVVNJ TkcgJXtleHByZXNzaW9ufXMiLCAwKTsKKwkJCQkJCWlmIChkZWYtPnJhd19kZWZhdWx0KQorCQkJ CQkJeworCQkJCQkJCURhdHVtCWRlcGFyc2VkOworCQkJCQkJCWNoYXIgICAqZGVmZXhwcjsKKwor CQkJCQkJCWV4cHJzID0gbGFwcGVuZChleHBycywgZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJCQkJ CQkJZGVmZXhwciA9IG5vZGVUb1N0cmluZyhkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJCQlk ZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCisJCQkJCQkJCQkJCQkJ CSAgIENTdHJpbmdHZXRUZXh0RGF0dW0oZGVmZXhwciksCisJCQkJCQkJCQkJCQkJCSAgIFJlbGF0 aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wMiwgImV4 cHJlc3Npb24iLAorCQkJCQkJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsK KwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wMiwgInBy ZXNlbnQiLCBmYWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICJ1c2luZyIs IHRtcDIpOworCQkJCQl9CisKKwkJCQkJLyogaWYgaXQncyBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQg dGhlIENBU0NBREUgY2xhdXNlICovCisJCQkJCWlmIChpc3R5cGUpCisJCQkJCXsKKwkJCQkJCXRt cDIgPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDApOworCQkJCQkJaWYgKHN1YmNtZC0+YmVo YXZpb3IgIT0gRFJPUF9DQVNDQURFKQorCQkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAyLCAi cHJlc2VudCIsIGZhbHNlKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgImNhc2Nh ZGUiLCB0bXAyKTsKKwkJCQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCX0KKwkJCQlicmVhazsKKworI2lmZGVmIFRPRE9M SVNUCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uR2VuZXJpY09wdGlvbnM6CisJCQkJdG1wID0gZGVw YXJzZV9GZHdPcHRpb25zKChMaXN0ICopIHN1YmNtZC0+ZGVmLAorCQkJCQkJCQkJCSBzdWJjbWQt Pm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFUX0NoYW5nZU93bmVyOgorCQkJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPV05FUiBUTyAle293bmVyfUkiLAorCQkJCQkJCQkJIDIs ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNoYW5nZSBvd25lciIsCisJCQkJCQkJCQkgIm93bmVy IiwgIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgZ2V0X3JvbGVzcGVjX25hbWUoc3ViY21kLT5u ZXdvd25lcikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0NsdXN0ZXJPbjoKKwkJCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiQ0xVU1RFUiBPTiAle2luZGV4fUkiLCAyLAorCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImNsdXN0ZXIgb24iLAorCQkJCQkJCQkJICJpbmRleCIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJv cENsdXN0ZXI6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIlNFVCBXSVRIT1VUIENMVVNURVIi LCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3aXRob3V0IGNsdXN0 ZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRMb2dnZWQ6CisJCQkJdG1wID0gbmV3 X29ianRyZWVfVkEoIlNFVCBMT0dHRUQiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgInNldCBsb2dnZWQiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRVbkxvZ2dl ZDoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFVOTE9HR0VEIiwgMSwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdW5sb2dnZWQiKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9Ecm9wT2lkczoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEhP VVQgT0lEUyIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGhv dXQgb2lkcyIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRBY2Nlc3NNZXRob2Q6CisJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIlNFVCBBQ0NFU1MgTUVUSE9EICV7YWNjZXNzX21ldGhvZH1J IiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgYWNjZXNzIG1ldGhv ZCIsCisJCQkJCQkJCQkgImFjY2Vzc19tZXRob2QiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5h bWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRUYWJsZVNwYWNlOgorCQkJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJTRVQgVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsIDIsCisJCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHRhYmxlc3BhY2UiLAorCQkJCQkJCQkJICJ0 YWJsZXNwYWNlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9TZXRSZWxPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNldFJlbE9wdGlvbnM6CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QoCisJCQkJCQkJ CQkgIGRlcGFyc2VfUmVsU2V0T3B0aW9ucyhzdWJjbWQpKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfRW5hYmxlVHJpZzoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdH RVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVu YWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlQWx3YXlzVHJpZzoKKwkJ CQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIEFMV0FZUyBUUklHR0VSICV7dHJpZ2dlcn1J IiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgYWx3YXlzIHRy aWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1l KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSZXBsaWNhVHJpZzoKKwkJCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJFUExJQ0EgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJlcGxpY2EgdHJpZ2dl ciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnOgorCQkJCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIi LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0VuYWJsZVRyaWdBbGw6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VS IEFMTCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdn ZXIgYWxsIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdBbGw6CisJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiBBTEwiLCAxLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnVXNlcjoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiRU5BQkxFIFRSSUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiZW5hYmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rp c2FibGVUcmlnVXNlcjoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VS IFVTRVIiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgdHJp Z2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUnVsZToKKwkJCQl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RW5hYmxlQWx3YXlzUnVsZToKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIEFMV0FZ UyBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJl bmFibGUgYWx3YXlzIHJ1bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSZXBsaWNhUnVsZToK KwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJFUExJQ0EgUlVMRSAle3J1bGV9SSIs IDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJlcGxpY2EgcnVs ZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVSdWxlOgorCQkJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJESVNBQkxFIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImRpc2FibGUgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBPYmpUeXBlU3RyaW5n LCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluaGVyaXQ6CisJ CQkJdG1wID0gbmV3X29ianRyZWVfVkEoIklOSEVSSVQgJXtwYXJlbnR9RCIsCisJCQkJCQkJCQkg MiwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiaW5oZXJpdCIsCisJCQkJCQkJCQkgInBhcmVudCIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJl bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElk KSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcEluaGVyaXQ6CisJCQkJdG1wID0gbmV3 X29ianRyZWVfVkEoIk5PIElOSEVSSVQgJXtwYXJlbnR9RCIsCisJCQkJCQkJCQkgMiwgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBpbmhlcml0IiwKKwkJCQkJCQkJCSAicGFyZW50IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRp b25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRPZjoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiT0YgJXt0eXBlX29mfVQiLAorCQkJCQkJCQkJIDIsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImFkZCBvZiIsCisJCQkJCQkJCQkgInR5cGVfb2YiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl90eXBlKHN1Yi0+YWRkcmVzcy5vYmplY3RJZCwgLTEpKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9Ecm9wT2Y6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIk5P VCBPRiIsCisJCQkJCQkJCQkgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAibm90IG9mIik7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfUmVwbGljYUlkZW50aXR5OgorCQkJCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJSRVBMSUNBIElERU5USVRZICV7aWRlbnR9cyIsIDEsCisJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAicmVwbGljYSBpZGVudGl0eSIpOworCQkJCXN3aXRjaCAoKChS ZXBsaWNhSWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ZGVmKS0+aWRlbnRpdHlfdHlwZSkKKwkJCQl7 CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9ERUZBVUxUOgorCQkJCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wLCAiaWRlbnQiLCAiREVGQVVMVCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNh c2UgUkVQTElDQV9JREVOVElUWV9GVUxMOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w LCAiaWRlbnQiLCAiRlVMTCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVO VElUWV9OT1RISU5HOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiaWRlbnQiLCAi Tk9USElORyIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9JTkRF WDoKKwkJCQkJCXRtcDIgPSBuZXdfb2JqdHJlZV9WQSgiVVNJTkcgSU5ERVggJXtpbmRleH1JIiwg MSwKKwkJCQkJCQkJCQkJICAiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQkgICgo UmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPm5hbWUpOworCQkJCQkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wLCAiaWRlbnQiLCB0bXAyKTsKKwkJCQkJCWJyZWFrOworCQkJCX0K KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSb3dTZWN1cml0eToKKwkJCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWSIsIDEsCisJCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJvdyBzZWN1cml0eSIpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX0Rpc2FibGVSb3dTZWN1cml0eToKKwkJCQl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiRElTQUJMRSBST1cgTEVWRUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImRpc2FibGUgcm93IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisjaWZk ZWYgVE9ET0xJU1QKKwkJCWNhc2UgQVRfR2VuZXJpY09wdGlvbnM6CisJCQkJdG1wID0gZGVwYXJz ZV9GZHdPcHRpb25zKChMaXN0ICopIHN1YmNtZC0+ZGVmLCBOVUxMKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKyNl bmRpZgorCQkJY2FzZSBBVF9BdHRhY2hQYXJ0aXRpb246CisJCQkJdG1wID0gbmV3X29ianRyZWVf VkEoIkFUVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCAle3BhcnRpdGlvbl9i b3VuZH1zIiwKKwkJCQkJCQkJCSAzLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhdHRhY2ggcGFy dGl0aW9uIiwKKwkJCQkJCQkJCSAicGFydGl0aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpLAorCQkJCQkJCQkJInBh cnRpdGlvbl9ib3VuZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQlSZWxhdGlvbkdldFBhcnRp dGlvbkJvdW5kKHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisJCQljYXNl IEFUX0RldGFjaFBhcnRpdGlvbjoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBB UlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIiwKKwkJCQkJCQkJCSAyLCAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJkZXRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCSAicGFydGl0aW9uX2lk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mu b2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9uRmluYWxp emU6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRp b25faWRlbnRpdHl9RCBGSU5BTElaRSIsCisJCQkJCQkJCQkgMiwgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiZGV0YWNoIHBhcnRpdGlvbiBmaW5hbGl6ZSIsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9p ZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNz Lm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0FkZElkZW50aXR5OgorCQkJCXsK KwkJCQkJQXR0ck51bWJlcglhdHRudW07CisJCQkJCU9pZAkJCXNlcV9yZWxpZDsKKwkJCQkJT2Jq VHJlZQkqc2VxZGVmOworCQkJCQlDb2x1bW5EZWYgICpjb2xkZWYgPSAoQ29sdW1uRGVmICopIHN1 YmNtZC0+ZGVmOworCisJCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtj b2x1bW59SSBBREQgJXtpZGVudGl0eV9jb2x1bW59cyIsCisJCQkJCQkJCQkJIDIsICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImFkZCBpZGVudGl0eSIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWF0dG51bSA9IGdldF9hdHRudW0oUmVs YXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlzZXFfcmVsaWQgPSBnZXRJ ZGVudGl0eVNlcXVlbmNlKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCB0cnVlKTsKKwkJ CQkJc2VxZGVmID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFfcmVsaWQsIGNvbGRlZi0+aWRl bnRpdHksIGZhbHNlKTsKKworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICJpZGVudGl0 eV9jb2x1bW4iLCBzZXFkZWYpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0 SWRlbnRpdHk6CisJCQkJeworCQkJCQlEZWZFbGVtCSpkZWZlbDsKKwkJCQkJY2hhcgkJaWRlbnRp dHkgPSAwOworCQkJCQlPYmpUcmVlCSAgICpzZXFkZWY7CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVt OworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisKKworCQkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgQ09MVU1OICV7Y29sdW1ufUkgJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkJCSAyLCAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSAiY29sdW1u IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlpZiAoc3ViY21kLT5kZWYp CisJCQkJCXsKKwkJCQkJCUxpc3QJICAgKmRlZiA9IChMaXN0ICopIHN1YmNtZC0+ZGVmOworCisJ CQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBMaXN0KSk7CisKKwkJCQkJCWRlZmVsID0gbGlu aXRpYWxfbm9kZShEZWZFbGVtLCBkZWYpOworCQkJCQkJaWRlbnRpdHkgPSBkZWZHZXRJbnQzMihk ZWZlbCk7CisJCQkJCX0KKworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVs aWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1 ZW5jZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisJCQkJCXNlcWRlZiA9 IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBpZGVudGl0eSwgdHJ1ZSk7CisKKwkJ CQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiZGVmaW5pdGlvbiIsIHNlcWRlZik7CisKKwkJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJ CQkJCWJyZWFrOworCQkJCX0KKwkJCWNhc2UgQVRfRHJvcElkZW50aXR5OgorCQkJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIElERU5USVRZICV7aWZf bm90X2V4aXN0c31zIiwKKwkJCQkJCQkJCSAzLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9w IGlkZW50aXR5IiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lLAorCQkJCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJ CSBzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKwkJ CWRlZmF1bHQ6CisJCQkJZWxvZyhXQVJOSU5HLCAidW5zdXBwb3J0ZWQgYWx0ZXIgdGFibGUgc3Vi dHlwZSAlZCIsCisJCQkJCSBzdWJjbWQtPnN1YnR5cGUpOworCQkJCWJyZWFrOworCQl9CisKKwkJ LyoKKwkJICogV2UgZG9uJ3Qgc3VwcG9ydCByZXBsaWNhdGluZyBBTFRFUiBUQUJMRSB3aGljaCBj b250YWlucyB2b2xhdGlsZQorCQkgKiBmdW5jdGlvbnMgYmVjYXVzZSBJdCdzIHBvc3NpYmxlIHRo ZSBmdW5jdGlvbnMgY29udGFpbiBEREwvRE1MIGluCisJCSAqIHdoaWNoIGNhc2UgdGhlc2Ugb3Bl cnRpb25zIHdpbGwgYmUgZXhlY3V0ZWQgdHdpY2UgYW5kIGNhdXNlCisJCSAqIGR1cGxpY2F0ZSBk YXRhLiBJbiBhZGRpdGlvbiwgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSB0YWJsZXMgYmVpbmcK KwkJICogYWNjZXNzZWQgYnkgdGhlc2UgRERML0RNTCBhcmUgcHVibGlzaGVkIG9yIG5vdC4gU28g YmxpbmRseSBhbGxvd2luZworCQkgKiBzdWNoIGZ1bmN0aW9ucyBjYW4gYWxsb3cgdW5pbnRlbmRl ZCBjbGF1c2VzIGxpa2UgdGhlIHRhYmxlcyBhY2Nlc3NlZAorCQkgKiBpbiB0aG9zZSBmdW5jdGlv bnMgbWF5IG5vdCBldmVuIGV4aXN0IG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUuCisJCSAqLworCQlp ZiAoY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoKE5vZGUgKikgZXhwcnMpKQorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAor CQkJCQkgZXJybXNnKCJBTFRFUiBUQUJMRSBjb21tYW5kIHVzaW5nIHZvbGF0aWxlIGZ1bmN0aW9u IGNhbm5vdCBiZSByZXBsaWNhdGVkIikpKTsKKworCQkvKgorCQkgKiBDbGVhbiB0aGUgbGlzdCBh cyB3ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGVyZSBpcyBubyB2b2xhdGlsZQorCQkgKiBmdW5jdGlv bi4KKwkJICovCisJCWxpc3RfZnJlZShleHBycyk7CisJCWV4cHJzID0gTklMOworCX0KKworCXRh YmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWlmIChsaXN0X2xlbmd0aChzdWJj bWRzKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJU YWJsZVN0bXQsICJzdWJjbWRzIiwgc3ViY21kcyk7CisJcmV0dXJuIGFsdGVyVGFibGVTdG10Owor fQorCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBvZiBzaW1wbGUgY29tbWFuZHMuCisgKgorICog VGhpcyBmdW5jdGlvbiBzaG91bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vzc1V0 aWxpdHlTbG93LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX3NpbXBsZV9jb21tYW5k KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpw YXJzZXRyZWU7CisJT2JqVHJlZQkgICAqY29tbWFuZDsKKworCUFzc2VydChjbWQtPnR5cGUgPT0g U0NUX1NpbXBsZSk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPnBhcnNldHJlZTsKKwlvYmplY3RJZCA9 IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKworCS8qIFRoaXMgc3dpdGNoIG5lZWRz IHRvIGhhbmRsZSBldmVyeXRoaW5nIHRoYXQgUHJvY2Vzc1V0aWxpdHlTbG93IGRvZXMgKi8KKwlz d2l0Y2ggKG5vZGVUYWcocGFyc2V0cmVlKSkKKwl7CisJCWNhc2UgVF9DcmVhdGVTY2hlbWFTdG10 OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlU2NoZW1hU3RtdChvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVTdG10OgorCQkJY29tbWFuZCA9IGRl cGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9DcmVhdGVTZXFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChv YmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlclNlcVN0bXQ6 CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJPd25lclN0bXQ6CisJCQljb21tYW5kID0gZGVw YXJzZV9BbHRlck93bmVyU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfUmVuYW1lU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX1Jl bmFtZVN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisK KwkJY2FzZSBUX0luZGV4U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0luZGV4U3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQljb21tYW5kID0g TlVMTDsKKwkJCWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNv bW1hbmQ6ICVkIiwKKwkJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKwl9CisKKwlyZXR1 cm4gY29tbWFuZDsKK30KKworY2hhciAqCitkZXBhcnNlX2Ryb3Bfc2VxdWVuY2UoY29uc3QgY2hh ciAqb2JqaWRlbnRpdHksIERyb3BCZWhhdmlvciBiZWhhdmlvcikKK3sKKwlTdHJpbmdJbmZvRGF0 YSAgc3RyOworCWNoYXIJCSAgICpjb21tYW5kOworCU9ialRyZWUJCSpzdG10LCAqc3RtdDI7CisJ Y2hhcgkJICAgKmZtdDsKKwlKc29uYgkJICAqanNvbmI7CisKKwlpbml0U3RyaW5nSW5mbygmc3Ry KTsKKwlmbXQgPSBwc3ByaW50ZigiRFJPUCBTRVFVRU5DRSBJRiBFWElTVFMgJSV7b2JqaWRlbnRp dHl9cyAlJXtjYXNjYWRlfXMiKTsKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAib2Jq aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJb2JqaWRlbnRpdHkpOworCXN0bXQyID0g bmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJCSJwcmVzZW50IiwgT2JqVHlwZUJv b2wsIGJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3Rt dCwgImNhc2NhZGUiLCBzdG10Mik7CisJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHN0bXQpOwor CWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIDEyOCk7CisKKwly ZXR1cm4gY29tbWFuZDsKK30KKworY2hhciAqCitkZXBhcnNlX2Ryb3Bfc2NoZW1hKGNvbnN0IGNo YXIgKm9iamlkZW50aXR5LCBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpCit7CisJU3RyaW5nSW5mb0Rh dGEgIHN0cjsKKwljaGFyCQkgICAqY29tbWFuZDsKKwlPYmpUcmVlCQkqc3RtdCwgKnN0bXQyOwor CWNoYXIJCSAgICpmbXQ7CisJSnNvbmIJCSAgKmpzb25iOworCisJaW5pdFN0cmluZ0luZm8oJnN0 cik7CisJZm10ID0gcHNwcmludGYoIkRST1AgU0NIRU1BIElGIEVYSVNUUyAlJXtvYmppZGVudGl0 eX1zICUle2Nhc2NhZGV9cyIpOworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJvYmpp ZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQlvYmppZGVudGl0eSk7CisJc3RtdDIgPSBu ZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBlQm9v bCwgYmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10 LCAiY2FzY2FkZSIsIHN0bXQyKTsKKwlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIoc3RtdCk7CisJ Y29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgMTI4KTsKKworCXJl dHVybiBjb21tYW5kOworfQorCitjaGFyICoKK2RlcGFyc2VfZHJvcF9pbmRleChjb25zdCBjaGFy ICpvYmppZGVudGl0eSwgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKQoreworCVN0cmluZ0luZm9EYXRh ICBzdHI7CisJY2hhcgkJICAgKmNvbW1hbmQ7CisJT2JqVHJlZQkJICAgKnN0bXQsICpzdG10MjsK KwljaGFyCQkgICAqZm10OworCUpzb25iCQkgICAqanNvbmI7CisKKwlpbml0U3RyaW5nSW5mbygm c3RyKTsKKwlmbXQgPSBwc3ByaW50ZigiRFJPUCBJTkRFWCBJRiBFWElTVFMgJSV7b2JqaWRlbnRp dHl9cyAlJXtjYXNjYWRlfXMiKTsKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAib2Jq aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBvYmppZGVudGl0eSk7CisJc3RtdDIg PSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBl Qm9vbCwgYmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChz dG10LCAiY2FzY2FkZSIsIHN0bXQyKTsKKwlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIoc3RtdCk7 CisJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgMTI4KTsKKwor CXJldHVybiBjb21tYW5kOworfQorCitjaGFyICoKK2RlcGFyc2VfZHJvcF90YWJsZShjb25zdCBj aGFyICpvYmppZGVudGl0eSwgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKQoreworCVN0cmluZ0luZm9E YXRhICBzdHI7CisJY2hhcgkJICAgKmNvbW1hbmQ7CisJT2JqVHJlZQkJICAgKnN0bXQsICpzdG10 MjsKKwljaGFyCQkgICAqZm10OworCUpzb25iCQkgICAqanNvbmI7CisKKwlpbml0U3RyaW5nSW5m bygmc3RyKTsKKwlmbXQgPSBwc3ByaW50ZigiRFJPUCBUQUJMRSBJRiBFWElTVFMgJSV7b2JqaWRl bnRpdHl9cyAlJXtjYXNjYWRlfXMiKTsKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAi b2JqaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBvYmppZGVudGl0eSk7CisJc3Rt dDIgPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJInByZXNlbnQiLCBPYmpU eXBlQm9vbCwgYmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKTsKKwlhcHBlbmRfb2JqZWN0X29iamVj dChzdG10LCAiY2FzY2FkZSIsIHN0bXQyKTsKKwlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIoc3Rt dCk7CisJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgMTI4KTsK KworCXJldHVybiBjb21tYW5kOworfQorCitjaGFyICoKK2RlcGFyc2VfdXRpbGl0eV9jb21tYW5k KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPdmVycmlkZVNlYXJjaFBhdGggKm92ZXJyaWRl UGF0aDsKKwlNZW1vcnlDb250ZXh0CW9sZGN4dDsKKwlNZW1vcnlDb250ZXh0CXRtcGN4dDsKKwlP YmpUcmVlCQkgICAqdHJlZTsKKwljaGFyCQkgICAqY29tbWFuZDsKKwlTdHJpbmdJbmZvRGF0YSAg c3RyOworCisJLyoKKwkgKiBBbGxvY2F0ZSBldmVyeXRoaW5nIGRvbmUgYnkgdGhlIGRlcGFyc2lu ZyByb3V0aW5lcyBpbnRvIGEgdGVtcCBjb250ZXh0LAorCSAqIHRvIGF2b2lkIGhhdmluZyB0byBz cHJpbmtsZSB0aGVtIHdpdGggbWVtb3J5IGhhbmRsaW5nIGNvZGU7IGJ1dCBhbGxvY2F0ZQorCSAq IHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBiZWZvcmUgc3dpdGNoaW5nLgorCSAqLworCWluaXRTdHJp bmdJbmZvKCZzdHIpOworCXRtcGN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVt b3J5Q29udGV4dCwKKwkJCQkJCQkJICAgImRlcGFyc2UgY3R4IiwKKwkJCQkJCQkJICAgQUxMT0NT RVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpF LAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOworCW9sZGN4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyh0bXBjeHQpOworCisJLyoKKwkgKiBNYW55IHJvdXRpbmVzIHVuZGVy bHlpbmcgdGhpcyBvbmUgd2lsbCBpbnZva2UgcnVsZXV0aWxzLmMgZnVuY3Rpb25hbGl0eQorCSAq IGluIG9yZGVyIHRvIG9idGFpbiBkZXBhcnNlZCB2ZXJzaW9ucyBvZiBleHByZXNzaW9ucy4gIElu IHN1Y2ggcmVzdWx0cywKKwkgKiB3ZSB3YW50IGFsbCBvYmplY3QgbmFtZXMgdG8gYmUgcXVhbGlm aWVkLCBzbyB0aGF0IHJlc3VsdHMgYXJlICJwb3J0YWJsZSIKKwkgKiB0byBlbnZpcm9ubWVudHMg d2l0aCBkaWZmZXJlbnQgc2VhcmNoX3BhdGggc2V0dGluZ3MuICBSYXRoZXIgdGhhbiBpbmplY3QK KwkgKiB3aGF0IHdvdWxkIGJlIHJlcGV0aXRpdmUgY2FsbHMgdG8gb3ZlcnJpZGUgc2VhcmNoIHBh dGggYWxsIG92ZXIgdGhlCisJICogcGxhY2UsIHdlIGRvIGl0IGNlbnRyYWxseSBoZXJlLgorCSAq LworCW92ZXJyaWRlUGF0aCA9IEdldE92ZXJyaWRlU2VhcmNoUGF0aChDdXJyZW50TWVtb3J5Q29u dGV4dCk7CisJb3ZlcnJpZGVQYXRoLT5zY2hlbWFzID0gTklMOworCW92ZXJyaWRlUGF0aC0+YWRk Q2F0YWxvZyA9IGZhbHNlOworCW92ZXJyaWRlUGF0aC0+YWRkVGVtcCA9IHRydWU7CisJUHVzaE92 ZXJyaWRlU2VhcmNoUGF0aChvdmVycmlkZVBhdGgpOworCisJc3dpdGNoIChjbWQtPnR5cGUpCisJ eworCQljYXNlIFNDVF9TaW1wbGU6CisJCQl0cmVlID0gZGVwYXJzZV9zaW1wbGVfY29tbWFuZChj bWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyVGFibGU6CisJCQl0cmVlID0gZGVwYXJz ZV9BbHRlclRhYmxlU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVS Uk9SLCAidW5leHBlY3RlZCBkZXBhcnNlIG5vZGUgdHlwZSAlZCIsIGNtZC0+dHlwZSk7CisJfQor CisJUG9wT3ZlcnJpZGVTZWFyY2hQYXRoKCk7CisKKwlpZiAodHJlZSkKKwl7CisJCUpzb25iICpq c29uYjsKKworCQlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIodHJlZSk7CisJCWNvbW1hbmQgPSBK c29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIDEyOCk7CisJfQorCWVsc2UKKwkJY29t bWFuZCA9IE5VTEw7CisKKwkvKgorCSAqIENsZWFuIHVwLiAgTm90ZSB0aGF0IHNpbmNlIHdlIGNy ZWF0ZWQgdGhlIFN0cmluZ0luZm8gaW4gdGhlIGNhbGxlcidzCisJICogY29udGV4dCwgdGhlIG91 dHB1dCBzdHJpbmcgaXMgbm90IGRlbGV0ZWQgaGVyZS4KKwkgKi8KKwlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7CisKKwlyZXR1cm4g Y29tbWFuZDsKK30KKworLyoKKyAqIEdpdmVuIGEgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGEg SlNPTiByZXByZXNlbnRhdGlvbiBvZiBpdC4KKyAqCisgKiBUaGUgY29tbWFuZCBpcyBleHBhbmRl ZCBmdWxseSwgc28gdGhhdCB0aGVyZSBhcmUgbm8gYW1iaWd1aXRpZXMgZXZlbiBpbiB0aGUKKyAq IGZhY2Ugb2Ygc2VhcmNoX3BhdGggY2hhbmdlcy4KKyAqLworRGF0dW0KK2RkbF9kZXBhcnNlX3Rv X2pzb24oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQgPSAoQ29s bGVjdGVkQ29tbWFuZCAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKwljaGFyCQkgICAqY29tbWFu ZDsKKworCWNvbW1hbmQgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQpOworCisJaWYgKGNv bW1hbmQpCisJCVBHX1JFVFVSTl9URVhUX1AoQ1N0cmluZ0dldFRleHREYXR1bShjb21tYW5kKSk7 CisJZWxzZQorCQlQR19SRVRVUk5fTlVMTCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZGRsX2pzb24uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1NjRmMQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKQEAgLTAsMCArMSw3NjMgQEAKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9qc29uLmMKKyAqCSAgSlNPTiBjb2RlIHJlbGF0 ZWQgdG8gRERMIGNvbW1hbmQgZGVwYXJzaW5nCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs aWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9qc29uLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3Rn cmVzLmgiCisKKyNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgorI2luY2x1ZGUgInV0aWxzL2J1 aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKworCisvKgorICogQ29udmVyc2lv biBzcGVjaWZpZXIsIGl0IGRldGVybWluZXMgaG93IHdlIGV4cGFuZCB0aGUganNvbiBlbGVtZW50 IGludG8KKyAqIHN0cmluZy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJU3BlY1R5cGVuYW1lLAor CVNwZWNPcGVyYXRvcm5hbWUsCisJU3BlY0RvdHRlZE5hbWUsCisJU3BlY1N0cmluZywKKwlTcGVj TnVtYmVyLAorCVNwZWNTdHJpbmdMaXRlcmFsLAorCVNwZWNJZGVudGlmaWVyLAorCVNwZWNSb2xl Cit9IGNvbnZTcGVjaWZpZXI7CisKKy8qCisgKiBBIHRlcm5hcnkgdmFsdWUgd2hpY2ggcmVwcmVz ZW50cyBhIGJvb2xlYW4gdHlwZSBKc29uYlZhbHVlLgorICovCit0eXBlZGVmIGVudW0KK3sKKwl0 dl9hYnNlbnQsCisJdHZfdHJ1ZSwKKwl0dl9mYWxzZQorfSB0cml2YWx1ZTsKKworc3RhdGljIGJv b2wgZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gb3V0LCBjaGFyICpwYXJhbSwK KwkJCQkJCSBKc29uYlZhbHVlICpqc29udmFsLCBjb252U3BlY2lmaWVyIHNwZWNpZmllciwKKwkJ CQkJCSBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZXhwYW5kX2pzb25iX2FycmF5KFN0 cmluZ0luZm8gb3V0LCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29uYXJyLCBj aGFyICphcnJheXNlcCwKKwkJCQkgICBjb252U3BlY2lmaWVyIHNwZWNpZmllciwgY29uc3QgY2hh ciAqZm10KTsKK3N0YXRpYyB2b2lkIGZtdHN0cl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOwor Y2hhciAqZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcoY2hhciAqanNvbmIpOworCisvKgorICog R2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZl biBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2Qm9v bCwgYW4gZXJyb3IgaXMgcmFpc2VkLiBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwgdHZfYWJzZW50 IGlzIHJldHVybmVkOyBvdGhlcndpc2UgcmV0dXJuIHRoZSBhY3R1YWwgdHJpdmFsdWUuCisgKi8K K3N0YXRpYyB0cml2YWx1ZQorZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFp bmVyICpjb250YWluZXIsIGNoYXIgKmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNv bmJWYWx1ZSAqdmFsdWU7CisJdHJpdmFsdWUJcmVzdWx0OworCisJa2V5LnR5cGUgPSBqYnZTdHJp bmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4g PSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIo Y29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBO VUxMKQorCQlyZXR1cm4gdHZfYWJzZW50OworCWlmICh2YWx1ZS0+dHlwZSAhPSBqYnZCb29sKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0eXBlIGJvb2xl YW4iLAorCQkJCQkJa2V5bmFtZSkpKTsKKwlyZXN1bHQgPSB2YWx1ZS0+dmFsLmJvb2xlYW4gPyB0 dl90cnVlIDogdHZfZmFsc2U7CisJcGZyZWUodmFsdWUpOworCisJcmV0dXJuIHJlc3VsdDsKK30K KworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpzb25iVmFsdWUgd2l0 aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEgdHlwZSBvdGhlciB0 aGFuIGpidlN0cmluZywgYW4gZXJyb3IgaXMgcmFpc2VkLiAgSWYgaXQgZG9lc24ndAorICogZXhp c3QsIGFuIGVycm9yIGlzIHJhaXNlZCBpZiBtaXNzaW5nX29rOyBvdGhlcndpc2UgcmV0dXJuIE5V TEwuCisgKgorICogSWYgaXQgZXhpc3RzIGFuZCBpcyBhIHN0cmluZywgYSBmcmVzaGx5IHBhbGxv YydlZCBjb3B5IGlzIHJldHVybmVkLgorICoKKyAqIElmICpsZW5ndGggaXMgbm90IE5VTEwsIGl0 IGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjaGFyICoK K2ZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIs IGNoYXIgKmtleW5hbWUsCisJCQkJCQkJICBib29sIG1pc3Npbmdfb2ssIGludCAqbGVuZ3RoKQor eworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNoYXIJICAgKnN0cjsK KworCS8qIFhYWCB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIG9iamVjdCwgbm90IGFuIGFycmF5ICov CisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1l OworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRK c29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwg JmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJeworCQlpZiAobWlzc2luZ19vaykKKwkJCXJl dHVybiBOVUxMOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgZWxlbWVudCBcIiVzXCIg aW4ganNvbiBvYmplY3QiLCBrZXluYW1lKSkpOworCX0KKworCXN0ciA9IHBuc3RyZHVwKHZhbHVl LT52YWwuc3RyaW5nLnZhbCwgdmFsdWUtPnZhbC5zdHJpbmcubGVuKTsKKwlpZiAobGVuZ3RoKQor CQkqbGVuZ3RoID0gdmFsdWUtPnZhbC5zdHJpbmcubGVuOworCXBmcmVlKHZhbHVlKTsKKwlyZXR1 cm4gc3RyOworfQorCisjZGVmaW5lIEFEVkFOQ0VfUEFSU0VfUE9JTlRFUihwdHIsZW5kX3B0cikg XAorCWRvIHsgXAorCQlpZiAoKysocHRyKSA+PSAoZW5kX3B0cikpIFwKKwkJCWVyZXBvcnQoRVJS T1IsIFwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksIFwK KwkJCQkJIGVycm1zZygidW50ZXJtaW5hdGVkIGZvcm1hdCBzcGVjaWZpZXIiKSkpOyBcCisJfSB3 aGlsZSAoMCkKKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIHBnX2V2ZW50X3RyaWdnZXJf ZXhwYW5kX2NvbW1hbmQKKyAqCisgKiBGaW5kIHRoZSAiZm10IiBlbGVtZW50IGluIHRoZSBnaXZl biBjb250YWluZXIsIGFuZCBleHBhbmQgaXQgaW50byB0aGUKKyAqIHByb3ZpZGVkIFN0cmluZ0lu Zm8uCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfZm10X3JlY3Vyc2l2ZShKc29uYkNvbnRhaW5l ciAqY29udGFpbmVyLCBTdHJpbmdJbmZvIG91dCkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29u YlZhbHVlICp2YWx1ZTsKKwljb25zdCBjaGFyICpjcDsKKwljb25zdCBjaGFyICpzdGFydF9wdHI7 CisJY29uc3QgY2hhciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47CisKKwlzdGFydF9wdHIgPSBmaW5k X3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihjb250YWluZXIsICJmbXQiLCBmYWxzZSwgJmxlbik7 CisJZW5kX3B0ciA9IHN0YXJ0X3B0ciArIGxlbjsKKworCWZvciAoY3AgPSBzdGFydF9wdHI7IGNw IDwgZW5kX3B0cjsgY3ArKykKKwl7CisJCWNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyOworCQlib29s CQlpc19hcnJheTsKKwkJY2hhcgkgICAqcGFyYW0gPSBOVUxMOworCQljaGFyCSAgICphcnJheXNl cCA9IE5VTEw7CisKKwkJaWYgKCpjcCAhPSAnJScpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9D aGFyTWFjcm8ob3V0LCAqY3ApOworCQkJY29udGludWU7CisJCX0KKworCQlpc19hcnJheSA9IGZh bHNlOworCisJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisKKwkJLyogRWFz eSBjYXNlOiAlJSBvdXRwdXRzIGEgc2luZ2xlICUgKi8KKwkJaWYgKCpjcCA9PSAnJScpCisJCXsK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8ob3V0LCAqY3ApOworCQkJY29udGludWU7CisJ CX0KKworCQkvKgorCQkgKiBTY2FuIHRoZSBtYW5kYXRvcnkgZWxlbWVudCBuYW1lLiAgQWxsb3cg Zm9yIGFuIGFycmF5IHNlcGFyYXRvcgorCQkgKiAod2hpY2ggbWF5IGJlIHRoZSBlbXB0eSBzdHJp bmcpIHRvIGJlIHNwZWNpZmllZCBhZnRlciBjb2xvbi4KKwkJICovCisJCWlmICgqY3AgPT0gJ3sn KQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBwYXJidWY7CisJCQlTdHJpbmdJbmZvRGF0YSBhcnJh eXNlcGJ1ZjsKKwkJCVN0cmluZ0luZm8JYXBwZW5kVG87CisKKwkJCWluaXRTdHJpbmdJbmZvKCZw YXJidWYpOworCQkJYXBwZW5kVG8gPSAmcGFyYnVmOworCisJCQlBRFZBTkNFX1BBUlNFX1BPSU5U RVIoY3AsIGVuZF9wdHIpOworCQkJZm9yICg7IGNwIDwgZW5kX3B0cjspCisJCQl7CisJCQkJaWYg KCpjcCA9PSAnOicpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBmb3VuZCBhcnJheSBzZXBhcmF0 b3IgZGVsaW1pdGVyOyBlbGVtZW50IG5hbWUgaXMgbm93CisJCQkJCSAqIGNvbXBsZXRlLCBzdGFy dCBmaWxsaW5nIHRoZSBzZXBhcmF0b3IuCisJCQkJCSAqLworCQkJCQlpbml0U3RyaW5nSW5mbygm YXJyYXlzZXBidWYpOworCQkJCQlhcHBlbmRUbyA9ICZhcnJheXNlcGJ1ZjsKKwkJCQkJaXNfYXJy YXkgPSB0cnVlOworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJ CQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlpZiAoKmNwID09ICd9JykKKwkJCQl7CisJCQkJCUFE VkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGFwcGVuZFRvLCAqY3ApOworCQkJCUFEVkFOQ0Vf UEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQl9CisJCQlwYXJhbSA9IHBhcmJ1Zi5kYXRh OworCQkJaWYgKGlzX2FycmF5KQorCQkJCWFycmF5c2VwID0gYXJyYXlzZXBidWYuZGF0YTsKKwkJ fQorCQlpZiAocGFyYW0gPT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3Npbmcg Y29udmVyc2lvbiBuYW1lIGluIGNvbnZlcnNpb24gc3BlY2lmaWVyIikpKTsKKworCQlzd2l0Y2gg KCpjcCkKKwkJeworCQkJY2FzZSAnSSc6CisJCQkJc3BlY2lmaWVyID0gU3BlY0lkZW50aWZpZXI7 CisJCQkJYnJlYWs7CisJCQljYXNlICdEJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjRG90dGVkTmFt ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3MnOgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmc7 CisJCQkJYnJlYWs7CisJCQljYXNlICdMJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjU3RyaW5nTGl0 ZXJhbDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1QnOgorCQkJCXNwZWNpZmllciA9IFNwZWNUeXBl bmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ08nOgorCQkJCXNwZWNpZmllciA9IFNwZWNPcGVy YXRvcm5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICduJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVj TnVtYmVyOworCQkJCWJyZWFrOworCQkJY2FzZSAnUic6CisJCQkJc3BlY2lmaWVyID0gU3BlY1Jv bGU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co ImludmFsaWQgY29udmVyc2lvbiBzcGVjaWZpZXIgXCIlY1wiIiwgKmNwKSkpOworCQl9CisKKwkJ LyoKKwkJICogT2J0YWluIHRoZSBlbGVtZW50IHRvIGJlIGV4cGFuZGVkLgorCQkgKi8KKwkJa2V5 LnR5cGUgPSBqYnZTdHJpbmc7CisJCWtleS52YWwuc3RyaW5nLnZhbCA9IHBhcmFtOworCQlrZXku dmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ocGFyYW0pOworCisJCXZhbHVlID0gZmluZEpzb25iVmFs dWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgSkJfRk9CSkVDVCwgJmtleSk7CisKKwkJLyogVmFs aWRhdGUgdGhhdCB3ZSBnb3QgYW4gYXJyYXkgaWYgdGhlIGZvcm1hdCBzdHJpbmcgc3BlY2lmaWVk IG9uZS4gKi8KKworCQkvKiBBbmQgZmluYWxseSBwcmludCBvdXQgdGhlIGRhdGEgKi8KKwkJaWYg KGlzX2FycmF5KQorCQkJZXhwYW5kX2pzb25iX2FycmF5KG91dCwgcGFyYW0sIHZhbHVlLCBhcnJh eXNlcCwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCQllbHNlCisJCQlleHBhbmRfb25lX2pzb25i X2VsZW1lbnQob3V0LCBwYXJhbSwgdmFsdWUsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwl9Cit9 CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGFuIGlkZW50aWZpZXIuICBUaGUgdmFs dWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29u dmFsX2lkZW50aWZpZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJ Y2hhcgkgICAqc3RyOworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2U3RyaW5nKTsKKwor CXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLAorCQkJCSAgIGpzb252YWwt PnZhbC5zdHJpbmcubGVuKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRl bnRpZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2 YWx1ZSBhcyBhIGRvdC1zZXBhcmF0ZWQtbmFtZS4gIFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUK KyAqIG9iamVjdCBhbmQgbXVzdCBjb250YWluIGVsZW1lbnRzICJzY2hlbWFuYW1lIiAob3B0aW9u YWwpLCAib2JqbmFtZSIKKyAqIChtYW5kYXRvcnkpLCAiYXR0cm5hbWUiIChvcHRpb25hbCkuICBE b3VibGUgcXVvdGVzIGFyZSBhZGRlZCB0byBlYWNoIGVsZW1lbnQKKyAqIGFzIG5lY2Vzc2FyeSwg YW5kIGRvdCBzZXBhcmF0b3JzIHdoZXJlIG5lZWRlZC4KKyAqCisgKiBPbmUgZGF5IHdlIG1pZ2h0 IG5lZWQgYSAiY2F0YWxvZyIgZWxlbWVudCBhcyB3ZWxsLCBidXQgbm8gY3VycmVudCB1c2UgY2Fz ZQorICogbmVlZHMgdGhhdC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX2RvdHRl ZG5hbWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAq c3RyOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFs LmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJaWYg KHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmll cihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29u YmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJIm9iam5hbWUi LCBmYWxzZSwgTlVMTCk7CisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHF1b3RlX2lkZW50 aWZpZXIoc3RyKSk7CisJcGZyZWUoc3RyKTsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25i Y29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkiYXR0cm5hbWUi LCB0cnVlLCBOVUxMKTsKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIu JXMiLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KK30KKworLyoK KyAqIGV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSB0eXBlIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lk CitleHBhbmRfanNvbnZhbF90eXBlbmFtZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNv bnZhbCkKK3sKKwljaGFyCSAgICpzY2hlbWEgPSBOVUxMOworCWNoYXIJICAgKnR5cGVuYW1lOwor CWNoYXIJICAgKnR5cG1vZHN0cjsKKwl0cml2YWx1ZQlpc19hcnJheTsKKwljaGFyCSAgICphcnJh eV9kZWNvcjsKKworCS8qCisJICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWluZyB0aGUgb3V0cHV0 IG5hbWUgaWYgdGhlIHNjaGVtYSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRoZSBlbXB0eSBzdHJp bmcgb3IgTlVMTDsgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMKKwkgKiBp cyB0aGF0IGluIHRoZSBsYXR0ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4gdGhlIGZvcm1l ciB3ZSBkb24ndC4KKwkgKiBUaGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBzcGVjaWFsIHR5cG1v ZCBuZWVkcywgc3VjaCBhcyBpbnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNlZSBmb3JtYXRf dHlwZV9kZXRhaWxlZCksIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcKKwkgKiBmb3Ig dGhlIHNjaGVtYSBuYW1lIHRvIGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRoYXQgcmVxdWly ZSBxdW90ZXMKKwkgKiBidXQgYXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1c2VyIHNjaGVtYS4K KwkgKi8KKworCXNjaGVtYSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwt PnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwp OworCXR5cGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFs LmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgInR5cGVuYW1lIiwgZmFsc2UsIE5VTEwpOworCXR5 cG1vZHN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5h cnkuZGF0YSwKKwkJCQkJCQkJCQkJICAidHlwbW9kIiwgdHJ1ZSwgTlVMTCk7CisJaXNfYXJyYXkg PSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAor CQkJCQkJCQkJCSAgICJ0eXBhcnJheSIpOworCXN3aXRjaCAoaXNfYXJyYXkpCisJeworCQlkZWZh dWx0OgorCQljYXNlIHR2X2Fic2VudDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJtaXNzaW5n IHR5cGFycmF5IGVsZW1lbnQiKSkpOworCQkJYnJlYWs7CisJCWNhc2UgdHZfdHJ1ZToKKwkJCWFy cmF5X2RlY29yID0gIltdIjsKKwkJCWJyZWFrOworCQljYXNlIHR2X2ZhbHNlOgorCQkJYXJyYXlf ZGVjb3IgPSAiIjsKKwkJCWJyZWFrOworCX0KKworCWlmIChzY2hlbWEgPT0gTlVMTCkKKwkJYXBw ZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzJXMiLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIodHlw ZW5hbWUpLAorCQkJCQkJIHR5cG1vZHN0ciA/IHR5cG1vZHN0ciA6ICIiLAorCQkJCQkJIGFycmF5 X2RlY29yKTsKKworCS8qIFNwZWNpYWwgdHlwbW9kIG5lZWRzICovCisJZWxzZSBpZiAoc2NoZW1h WzBdID09ICdcMCcpCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyVzIiwKKwkJCQkJCSB0 eXBlbmFtZSwKKwkJCQkJCSB0eXBtb2RzdHIgPyB0eXBtb2RzdHIgOiAiIiwKKwkJCQkJCSBhcnJh eV9kZWNvcik7CisJZWxzZQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiVzJXMlcyIsCisJ CQkJCQkgcXVvdGVfaWRlbnRpZmllcihzY2hlbWEpLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIo dHlwZW5hbWUpLAorCQkJCQkJIHR5cG1vZHN0ciA/IHR5cG1vZHN0ciA6ICIiLAorCQkJCQkJIGFy cmF5X2RlY29yKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYW4gb3BlcmF0 b3IgbmFtZQorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoU3RyaW5n SW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJc3Ry ID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRh LAorCQkJCQkJCQkJCSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJLyogc2NoZW1hIG1pZ2h0 IGJlIE5VTEwgb3IgZW1wdHkgKi8KKwlpZiAoc3RyICE9IE5VTEwgJiYgc3RyWzBdICE9ICdcMCcp CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsK KworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5h cnkuZGF0YSwKKwkJCQkJCQkJCQkib2JqbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKGJ1Ziwgc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUg YXMgYSBzdHJpbmcuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBvZgorICog dHlwZSBvYmplY3QuICBJbiB0aGUgbGF0dGVyIGNhc2UgaXQgbXVzdCBjb250YWluIGEgImZtdCIg ZWxlbWVudCB3aGljaCB3aWxsCisgKiBiZSByZWN1cnNpdmVseSBleHBhbmRlZDsgYWxzbywgaWYg dGhlIG9iamVjdCBjb250YWlucyBhbiBlbGVtZW50ICJwcmVzZW50IgorICogYW5kIGl0IGlzIHNl dCB0byBmYWxzZSwgdGhlIGV4cGFuc2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLgorICoKKyAqIFJl dHVybnMgZmFsc2UgaWYgbm8gYWN0dWFsIGV4cGFuc2lvbiB3YXMgbWFkZSBkdWUgdG8gdGhlICJw cmVzZW50IiBmbGFnCisgKiBiZWluZyBzZXQgdG8gImZhbHNlIi4KKyAqLworc3RhdGljIGJvb2wK K2V4cGFuZF9qc29udmFsX3N0cmluZyhTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZh bCkKK3sKKwlpZiAoanNvbnZhbC0+dHlwZSA9PSBqYnZTdHJpbmcpCisJeworCQlhcHBlbmRCaW5h cnlTdHJpbmdJbmZvKGJ1ZiwganNvbnZhbC0+dmFsLnN0cmluZy52YWwsCisJCQkJCQkJICAganNv bnZhbC0+dmFsLnN0cmluZy5sZW4pOworCX0KKwllbHNlIGlmIChqc29udmFsLT50eXBlID09IGpi dkJpbmFyeSkKKwl7CisJCXRyaXZhbHVlCXByZXNlbnQ7CisKKwkJcHJlc2VudCA9IGZpbmRfYm9v bF9pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJ CSAgInByZXNlbnQiKTsKKwkJLyoKKwkJICogSWYgInByZXNlbnQiIGlzIHNldCB0byBmYWxzZSwg dGhpcyBlbGVtZW50IGV4cGFuZHMgdG8gZW1wdHk7CisJCSAqIG90aGVyd2lzZSAoZWl0aGVyIHRy dWUgb3IgYWJzZW50KSwgZmFsbCB0aHJvdWdoIHRvIGV4cGFuZCAiZm10Ii4KKwkJICovCisJCWlm IChwcmVzZW50ID09IHR2X2ZhbHNlKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWV4cGFuZF9mbXRf cmVjdXJzaXZlKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwgYnVmKTsKKwl9CisJcmV0dXJuIHRy dWU7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgc3RyaW5nIGxpdGVyYWwK KyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3N0cmxpdChTdHJpbmdJbmZvIGJ1Ziwg SnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyICAgKnN0cjsKKwlTdHJpbmdJbmZvRGF0YSBk cWRlbGltOworCXN0YXRpYyBjb25zdCBjaGFyIGRxc3VmZml4ZXNbXSA9ICJfWFlaWllYXyI7CisJ aW50ICAgICAgICAgZHFuZXh0Y2hhciA9IDA7CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFsLT52 YWwuc3RyaW5nLnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCisJLyogZWFzeSBjYXNl OiBpZiB0aGVyZSBhcmUgbm8gJyBhbmQgbm8gXCwganVzdCB1c2UgYSBzaW5nbGUgcXVvdGUgKi8K KwlpZiAoc3RyY2hyKHN0ciwgJ1wnJykgPT0gTlVMTCAmJgorCQlzdHJjaHIoc3RyLCAnXFwnKSA9 PSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICInJXMnIiwgc3RyKTsKKwkJcGZy ZWUoc3RyKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE90aGVyd2lzZSBuZWVkIHRvIGZpbmQgYSB1 c2VmdWwgZG9sbGFyLXF1b3RlIGRlbGltaXRlciAqLworCWluaXRTdHJpbmdJbmZvKCZkcWRlbGlt KTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkcWRlbGltLCAiJCIpOworCXdoaWxlIChzdHJz dHIoc3RyLCBkcWRlbGltLmRhdGEpICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cigmZHFkZWxpbSwgZHFzdWZmaXhlc1tkcW5leHRjaGFyKytdKTsKKwkJZHFuZXh0Y2hhciAlPSBz aXplb2YoZHFzdWZmaXhlcykgLSAxOworCX0KKwkvKiBhZGQgdHJhaWxpbmcgJCAqLworCWFwcGVu ZFN0cmluZ0luZm9DaGFyKCZkcWRlbGltLCAnJCcpOworCisJLyogQW5kIGZpbmFsbHkgcHJvZHVj ZSB0aGUgcXVvdGVkIGxpdGVyYWwgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8gKi8KKwlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJXMlcyIsIGRxZGVsaW0uZGF0YSwgc3RyLCBkcWRlbGltLmRh dGEpOworCXBmcmVlKGRxZGVsaW0uZGF0YSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4 cGFuZCBhIGpzb24gdmFsdWUgYXMgYW4gaW50ZWdlciBxdWFudGl0eQorICovCitzdGF0aWMgdm9p ZAorZXhwYW5kX2pzb252YWxfbnVtYmVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29u dmFsKQoreworCWNoYXIgKnN0cmRhdHVtOworCisJc3RyZGF0dW0gPSBEYXR1bUdldENTdHJpbmco RGlyZWN0RnVuY3Rpb25DYWxsMShudW1lcmljX291dCwKKwkJCQkJCQkJCQkJCSAgIE51bWVyaWNH ZXREYXR1bShqc29udmFsLT52YWwubnVtZXJpYykpKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1Ziwgc3RyZGF0dW0pOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHJv bGUgbmFtZS4gIElmIHRoZSBpc19wdWJsaWMgZWxlbWVudCBpcyBzZXQgdG8KKyAqIHRydWUsIFBV QkxJQyBpcyBleHBhbmRlZCAobm8gcXVvdGVzKTsgb3RoZXJ3aXNlLCBleHBhbmQgdGhlIGdpdmVu IHJvbGUgbmFtZSwKKyAqIHF1b3RpbmcgYXMgYW4gaWRlbnRpZmllci4KKyAqLworc3RhdGljIHZv aWQKK2V4cGFuZF9qc29udmFsX3JvbGUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252 YWwpCit7CisJdHJpdmFsdWUJaXNfcHVibGljOworCisJaXNfcHVibGljID0gZmluZF9ib29sX2lu X2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJImlz X3B1YmxpYyIpOworCWlmIChpc19wdWJsaWMgPT0gdHZfdHJ1ZSkKKwkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsICJQVUJMSUMiKTsKKwllbHNlCisJeworCQljaGFyICpyb2xlbmFtZTsKKwor CQlyb2xlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5i aW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJCSAicm9sZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHJvbGVuYW1lKSk7CisJ fQorfQorCisvKgorICogRXhwYW5kIG9uZSBqc29uIGVsZW1lbnQgaW50byB0aGUgb3V0cHV0IFN0 cmluZ0luZm8gYWNjb3JkaW5nIHRvIHRoZQorICogY29udmVyc2lvbiBzcGVjaWZpZXIuICBUaGUg ZWxlbWVudCB0eXBlIGlzIHZhbGlkYXRlZCwgYW5kIGFuIGVycm9yIGlzIHJhaXNlZAorICogaWYg aXQgZG9lc24ndCBtYXRjaCB3aGF0IHdlIGV4cGVjdCBmb3IgdGhlIGNvbnZlcnNpb24gc3BlY2lm aWVyLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8gYWN0dWFsIGV4cGFuc2lvbiB3YXMgbWFk ZSAoZHVlIHRvIHRoZSAicHJlc2VudCIgZmxhZworICogYmVpbmcgc2V0IHRvICJmYWxzZSIgaW4g Zm9ybWF0dGVkIHN0cmluZyBleHBhbnNpb24pLgorICovCitzdGF0aWMgYm9vbAorZXhwYW5kX29u ZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gb3V0LCBjaGFyICpwYXJhbSwgSnNvbmJWYWx1ZSAq anNvbnZhbCwKKwkJCQkJCSBjb252U3BlY2lmaWVyIHNwZWNpZmllciwgY29uc3QgY2hhciAqZm10 KQoreworCWJvb2wgcmVzdWx0ID0gdHJ1ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJj b250ZXh0OworCisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNldHVwIGFu IGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZtdCkKKwl7CisJCXNxbGVycmNv bnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7CisJCXNxbGVycmNvbnRleHQu YXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3JfY29u dGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0OworCX0K KworCWlmICghanNvbnZhbCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBu b3QgZm91bmQiLCBwYXJhbSkpKTsKKworCXN3aXRjaCAoc3BlY2lmaWVyKQorCXsKKwkJY2FzZSBT cGVjSWRlbnRpZmllcjoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZykKKwkJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBmb3IgJSVJIGVsZW1l bnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJ CWV4cGFuZF9qc29udmFsX2lkZW50aWZpZXIob3V0LCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgU3BlY0RvdHRlZE5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkp CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUl RCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUp KSk7CisJCQlleHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1lKG91dCwganNvbnZhbCk7CisJCQlicmVh azsKKworCQljYXNlIFNwZWNTdHJpbmc6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZTdHJp bmcgJiYKKwkJCQlqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ CQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBvciBvYmplY3QgZm9yICUlcyBlbGVtZW50 IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQly ZXN1bHQgPSBleHBhbmRfanNvbnZhbF9zdHJpbmcob3V0LCBqc29udmFsKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgU3BlY1N0cmluZ0xpdGVyYWw6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZT dHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcg Zm9yICUlTCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwt PnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9zdHJsaXQob3V0LCBqc29udmFsKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgU3BlY1R5cGVuYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2 QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0 IGZvciAlJVQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFs LT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfdHlwZW5hbWUob3V0LCBqc29udmFsKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgU3BlY09wZXJhdG9ybmFtZToKKwkJCWlmIChqc29udmFsLT50eXBl ICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09O IG9iamVjdCBmb3IgJSVPIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwg anNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX29wZXJhdG9yKG91dCwganNvbnZh bCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNOdW1iZXI6CisJCQlpZiAoanNvbnZhbC0+dHlw ZSAhPSBqYnZOdW1lcmljKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpT T04gbnVtZXJpYyBmb3IgJSVuIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJh bSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX251bWJlcihvdXQsIGpzb252 YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjUm9sZToKKwkJCWlmIChqc29udmFsLT50eXBl ICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09O IG9iamVjdCBmb3IgJSVSIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwg anNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3JvbGUob3V0LCBqc29udmFsKTsK KwkJCWJyZWFrOworCX0KKworCWlmIChmbXQpCisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSBzcWxl cnJjb250ZXh0LnByZXZpb3VzOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEl0ZXJh dGUgb24gdGhlIGVsZW1lbnRzIG9mIGEgSlNPTiBhcnJheSwgZXhwYW5kaW5nIGVhY2ggb25lIGlu dG8gdGhlIG91dHB1dAorICogU3RyaW5nSW5mbyBwZXIgdGhlIGdpdmVuIGNvbnZlcnNpb24gc3Bl Y2lmaWVyLCBzZXBhcmF0ZWQgYnkgdGhlIGdpdmVuCisgKiBzZXBhcmF0b3IuCisgKi8KK3N0YXRp YyB2b2lkCitleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBvdXQsIGNoYXIgKnBhcmFtLAor CQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLCBjb252U3BlY2lmaWVy IHNwZWNpZmllciwKKwkJCQkgICBjb25zdCBjaGFyICpmbXQpCit7CisJRXJyb3JDb250ZXh0Q2Fs bGJhY2sgc3FsZXJyY29udGV4dDsKKwlKc29uYkNvbnRhaW5lciAqY29udGFpbmVyOworCUpzb25i SXRlcmF0b3IgICppdDsKKwlKc29uYlZhbHVlCXY7CisJaW50CQkJdHlwZTsKKwlzaXplX3QJCWFy cmF5c2VwbGVuOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4g YSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFjayAqLwor CWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2Nh bGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29u dGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3Rh Y2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoanNvbmFyci0+dHlwZSAhPSBqYnZCaW5h cnkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNPTiBh cnJheSIsIHBhcmFtKSkpOworCisJY29udGFpbmVyID0ganNvbmFyci0+dmFsLmJpbmFyeS5kYXRh OworCWlmICgoY29udGFpbmVyLT5oZWFkZXIgJiBKQl9GQVJSQVkpID09IDApCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkp OworCisJYXJyYXlzZXBsZW4gPSBzdHJsZW4oYXJyYXlzZXApOworCisJaXQgPSBKc29uYkl0ZXJh dG9ySW5pdChjb250YWluZXIpOworCXdoaWxlICgodHlwZSA9IEpzb25iSXRlcmF0b3JOZXh0KCZp dCwgJnYsIHRydWUpKSAhPSBXSkJfRE9ORSkKKwl7CisJCXN3aXRjaCAodHlwZSkKKwkJeworCQkJ Y2FzZSBXSkJfRUxFTToKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKG91dCwgYXJyYXlzZXApOworCisJCQkJaWYgKGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudChv dXQsIHBhcmFtLCAmdiwgc3BlY2lmaWVyLCBOVUxMKSkKKwkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJ CQllbHNlCisJCQkJeworCQkJCQlpZiAoIWZpcnN0KQorCQkJCQl7CisJCQkJCQkvKiByZW1vdmUg dGhlIGFycmF5IHNlcGFyYXRvciAqLworCQkJCQkJb3V0LT5sZW4gLT0gYXJyYXlzZXBsZW47CisJ CQkJCQlvdXQtPmRhdGFbb3V0LT5sZW5dID0gJ1wwJzsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVh azsKKwkJfQorCX0KKworCWlmIChmbXQpCisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSBzcWxlcnJj b250ZXh0LnByZXZpb3VzOworfQorCitjaGFyICoKK2RkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5n KGNoYXIgKmpzb25fc3RyKQoreworCURhdHVtCQlkOworCUpzb25iCSAgICpqc29uYjsKKwlTdHJp bmdJbmZvIG91dCA9IChTdHJpbmdJbmZvKSBwYWxsb2MwKHNpemVvZihTdHJpbmdJbmZvRGF0YSkp OworCisJaW5pdFN0cmluZ0luZm8ob3V0KTsKKworCWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKGpz b25iX2luLAorCQkJCQkJCVBvaW50ZXJHZXREYXR1bShqc29uX3N0cikpOworCWpzb25iID0gKEpz b25iICopIERhdHVtR2V0UG9pbnRlcihkKTsKKworCWV4cGFuZF9mbXRfcmVjdXJzaXZlKCZqc29u Yi0+cm9vdCwgb3V0KTsKKworCXJldHVybiBvdXQtPmRhdGE7Cit9CisKKy8qLS0tLS0tCisgKiBS ZXR1cm5zIGEgZm9ybWF0dGVkIHN0cmluZyBmcm9tIGEgSlNPTiBvYmplY3QuCisgKgorICogVGhl IHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBlbGVtZW50IG5hbWVkICJmbXQiICh3aGljaCBtdXN0IGJl IGEgc3RyaW5nKS4KKyAqIFRoaXMgZm9ybWF0IHN0cmluZyBtYXkgY29udGFpbiB6ZXJvIG9yIG1v cmUgJS1lc2NhcGVzLCB3aGljaCBjb25zaXN0IG9mIGFuCisgKiBlbGVtZW50IG5hbWUgZW5jbG9z ZWQgaW4geyB9LCBwb3NzaWJseSBmb2xsb3dlZCBieSBhIGNvbnZlcnNpb24gbW9kaWZpZXIsCisg KiBmb2xsb3dlZCBieSBhIGNvbnZlcnNpb24gc3BlY2lmaWVyLglQb3NzaWJsZSBjb252ZXJzaW9u IHNwZWNpZmllcnMgYXJlOgorICoKKyAqICUJCWV4cGFuZCB0byBhIGxpdGVyYWwgJS4KKyAqIEkJ CWV4cGFuZCBhcyBhIHNpbmdsZSwgbm9uLXF1YWxpZmllZCBpZGVudGlmaWVyCisgKiBECQlleHBh bmQgYXMgYSBwb3NzaWJseS1xdWFsaWZpZWQgaWRlbnRpZmllcgorICogVAkJZXhwYW5kIGFzIGEg dHlwZSBuYW1lCisgKiBPCQlleHBhbmQgYXMgYW4gb3BlcmF0b3IgbmFtZQorICogTAkJZXhwYW5k IGFzIGEgc3RyaW5nIGxpdGVyYWwgKHF1b3RlIHVzaW5nIHNpbmdsZSBxdW90ZXMpCisgKiBzCQll eHBhbmQgYXMgYSBzaW1wbGUgc3RyaW5nIChubyBxdW90aW5nKQorICogbgkJZXhwYW5kIGFzIGEg c2ltcGxlIG51bWJlciAobm8gcXVvdGluZykKKyAqIFIJCWV4cGFuZCBhcyBhIHJvbGUgbmFtZSAo cG9zc2libHkgcXVvdGVkIG5hbWUsIG9yIFBVQkxJQykKKyAqCisgKiBUaGUgZWxlbWVudCBuYW1l IG1heSBoYXZlIGFuIG9wdGlvbmFsIHNlcGFyYXRvciBzcGVjaWZpY2F0aW9uIHByZWNlZGVkCisg KiBieSBhIGNvbG9uLglJdHMgcHJlc2VuY2UgaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgaXMg ZXhwZWN0ZWQgdG8gYmUKKyAqIGFuIGFycmF5OyB0aGUgc3BlY2lmaWVkIHNlcGFyYXRvciBpcyB1 c2VkIHRvIGpvaW4gdGhlIGFycmF5IGVsZW1lbnRzLgorICotLS0tLS0KKyAqLworRGF0dW0KK2Rk bF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdGV4dAkgICAq anNvbiA9IFBHX0dFVEFSR19URVhUX1AoMCk7CisJY2hhcgkgICAqanNvbl9zdHI7CisKKwlqc29u X3N0ciA9IFRleHREYXR1bUdldENTdHJpbmcoanNvbik7CisKKwlQR19SRVRVUk5fVEVYVF9QKENT dHJpbmdHZXRUZXh0RGF0dW0oZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcoanNvbl9zdHIpKSk7 Cit9CisKKy8qCisgKiBFcnJvciBjb250ZXh0IGNhbGxiYWNrIGZvciBKU09OIGZvcm1hdCBzdHJp bmcgZXhwYW5zaW9uLgorICoKKyAqIFBvc3NpYmxlIGltcHJvdmVtZW50OiBpbmRpY2F0ZSB3aGlj aCBlbGVtZW50IHdlJ3JlIGV4cGFuZGluZywgaWYgYXBwbGljYWJsZQorICovCitzdGF0aWMgdm9p ZAorZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZykKK3sKKwllcnJjb250ZXh0KCJ3aGls ZSBleHBhbmRpbmcgZm9ybWF0IHN0cmluZyBcIiVzXCIiLCAoY2hhciAqKSBhcmcpOworCit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvc2VxdWVuY2UuYwppbmRleCBkZGYyMTliLi5jZTE2MjA2IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3NlcXVlbmNlLmMKQEAgLTE2OTksNiArMTY5OSw0MCBAQCBwcm9jZXNzX293bmVkX2J5KFJlbGF0 aW9uIHNlcXJlbCwgTGlzdCAqb3duZWRfYnksIGJvb2wgZm9yX2lkZW50aXR5KQogCQlyZWxhdGlv bl9jbG9zZSh0YWJsZXJlbCwgTm9Mb2NrKTsKIH0KIAorLyoKKyAqIFJldHVybiBzZXF1ZW5jZSBw YXJhbWV0ZXJzLCBkZXRhaWxlZAorICovCitGb3JtX3BnX3NlcXVlbmNlX2RhdGEKK2dldF9zZXF1 ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpCit7CisJQnVmZmVyICAgICAgYnVmOworCVNlcVRh YmxlICAgIGVsbTsKKwlSZWxhdGlvbiAgICBzZXFyZWw7CisJSGVhcFR1cGxlRGF0YSBzZXF0dXBs ZTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBy ZXRTZXE7CisKKwlyZXRTZXEgPSBwYWxsb2Moc2l6ZW9mKEZvcm1EYXRhX3BnX3NlcXVlbmNlX2Rh dGEpKTsKKworCS8qIG9wZW4gYW5kIEFjY2Vzc1NoYXJlTG9jayBzZXF1ZW5jZSAqLworCWluaXRf c2VxdWVuY2Uoc2VxdWVuY2VJZCwgJmVsbSwgJnNlcXJlbCk7CisKKwlpZiAocGdfY2xhc3NfYWNs Y2hlY2soc2VxdWVuY2VJZCwgR2V0VXNlcklkKCksCisJCQlBQ0xfU0VMRUNUIHwgQUNMX1VQREFU RSB8IEFDTF9VU0FHRSkgIT0gQUNMQ0hFQ0tfT0spCisJCWVyZXBvcnQoRVJST1IsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJCSBlcnJtc2coInBl cm1pc3Npb24gZGVuaWVkIGZvciBzZXF1ZW5jZSAlcyIsCisJCQkJCQkJUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUoc2VxcmVsKSkpKTsKKworCXNlcSA9IHJlYWRfc2VxX3R1cGxlKHNlcXJlbCwgJmJ1 ZiwgJnNlcXR1cGxlKTsKKworCW1lbWNweShyZXRTZXEsIHNlcSwgc2l6ZW9mKEZvcm1EYXRhX3Bn X3NlcXVlbmNlX2RhdGEpKTsKKworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsKKwlyZWxhdGlv bl9jbG9zZShzZXFyZWwsIE5vTG9jayk7CisKKwlyZXR1cm4gcmV0U2VxOworfQogCiAvKgogICog UmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMgaW4gYSBsaXN0IG9mIHRoZSBmb3JtIGNyZWF0ZWQg YnkgdGhlIHBhcnNlci4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21k cy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggMmRlMGViYS4uZWU0 ODQ3MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTUxODksMTEgKzUxODksMTIgQEAg QVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIAkJCQkJCQkJ CSAgY3VyX3Bhc3MsIGNvbnRleHQpOwogCQkJQXNzZXJ0KGNtZCAhPSBOVUxMKTsKIAkJCWlmIChy ZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQotCQkJCUFU RXhlY0F0dGFjaFBhcnRpdGlvbih3cXVldWUsIHJlbCwgKFBhcnRpdGlvbkNtZCAqKSBjbWQtPmRl ZiwKLQkJCQkJCQkJCSAgY29udGV4dCk7CisJCQkJYWRkcmVzcyA9IEFURXhlY0F0dGFjaFBhcnRp dGlvbih3cXVldWUsIHJlbCwKKwkJCQkJCQkJCQkJCShQYXJ0aXRpb25DbWQgKikgY21kLT5kZWYs CisJCQkJCQkJCQkJCQljb250ZXh0KTsKIAkJCWVsc2UKLQkJCQlBVEV4ZWNBdHRhY2hQYXJ0aXRp b25JZHgod3F1ZXVlLCByZWwsCi0JCQkJCQkJCQkJICgoUGFydGl0aW9uQ21kICopIGNtZC0+ZGVm KS0+bmFtZSk7CisJCQkJYWRkcmVzcyA9IEFURXhlY0F0dGFjaFBhcnRpdGlvbklkeCh3cXVldWUs IHJlbCwKKwkJCQkJCQkJCQkJCSAgICgoUGFydGl0aW9uQ21kICopIGNtZC0+ZGVmKS0+bmFtZSk7 CiAJCQlicmVhazsKIAkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb246CiAJCQljbWQgPSBBVFBhcnNl VHJhbnNmb3JtQ21kKHdxdWV1ZSwgdGFiLCByZWwsIGNtZCwgZmFsc2UsIGxvY2ttb2RlLApAQCAt NTIwMSwxMiArNTIwMiwxMiBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxl SW5mbyAqdGFiLAogCQkJQXNzZXJ0KGNtZCAhPSBOVUxMKTsKIAkJCS8qIEFUUHJlcENtZCBlbnN1 cmVzIGl0IG11c3QgYmUgYSB0YWJsZSAqLwogCQkJQXNzZXJ0KHJlbC0+cmRfcmVsLT5yZWxraW5k ID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpOwotCQkJQVRFeGVjRGV0YWNoUGFydGl0aW9u KHdxdWV1ZSwgdGFiLCByZWwsCi0JCQkJCQkJCSAgKChQYXJ0aXRpb25DbWQgKikgY21kLT5kZWYp LT5uYW1lLAotCQkJCQkJCQkgICgoUGFydGl0aW9uQ21kICopIGNtZC0+ZGVmKS0+Y29uY3VycmVu dCk7CisJCQlhZGRyZXNzID0gQVRFeGVjRGV0YWNoUGFydGl0aW9uKHdxdWV1ZSwgdGFiLCByZWws CisJCQkJCQkJCQkJCSgoUGFydGl0aW9uQ21kICopIGNtZC0+ZGVmKS0+bmFtZSwKKwkJCQkJCQkJ CQkJKChQYXJ0aXRpb25DbWQgKikgY21kLT5kZWYpLT5jb25jdXJyZW50KTsKIAkJCWJyZWFrOwog CQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbkZpbmFsaXplOgotCQkJQVRFeGVjRGV0YWNoUGFydGl0 aW9uRmluYWxpemUocmVsLCAoKFBhcnRpdGlvbkNtZCAqKSBjbWQtPmRlZiktPm5hbWUpOworCQkJ YWRkcmVzcyA9IEFURXhlY0RldGFjaFBhcnRpdGlvbkZpbmFsaXplKHJlbCwgKChQYXJ0aXRpb25D bWQgKikgY21kLT5kZWYpLT5uYW1lKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgkJCQkvKiBvb3Bz ICovCiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGFsdGVyIHRhYmxlIHR5cGU6ICVkIiwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMKaW5kZXggMDYwZmQ3ZS4uNmFmMjI1NyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRl ICJ1dGlscy9udW1lcmljLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAotc3RhdGlj IGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lk IHR5cG1vZG91dCk7CiAKIAogLyoKQEAgLTM2Nyw3ICszNjYsNyBAQCBmb3JtYXRfdHlwZV93aXRo X3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKQogLyoKICAqIEFkZCB0eXBtb2Qg ZGVjb3JhdGlvbiB0byB0aGUgYmFzaWMgdHlwZSBuYW1lCiAgKi8KLXN0YXRpYyBjaGFyICoKK2No YXIgKgogcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQg dHlwbW9kb3V0KQogewogCWNoYXIJICAgKnJlczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpp bmRleCAyNmNmNGZhLi4zNTQxMmY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQv cnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC00 ODcsOCArNDg3LDYgQEAgc3RhdGljIHZvaWQgZ2V0X2Zyb21fY2xhdXNlX2NvbGRlZmxpc3QoUmFu Z2VUYmxGdW5jdGlvbiAqcnRmdW5jLAogCQkJCQkJCQkJICAgZGVwYXJzZV9jb250ZXh0ICpjb250 ZXh0KTsKIHN0YXRpYyB2b2lkIGdldF90YWJsZXNhbXBsZV9kZWYoVGFibGVTYW1wbGVDbGF1c2Ug KnRhYmxlc2FtcGxlLAogCQkJCQkJCQlkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwotc3RhdGlj IHZvaWQgZ2V0X29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcywgT2lkIGFjdHVhbF9kYXRhdHlwZSwK LQkJCQkJCQkgU3RyaW5nSW5mbyBidWYpOwogc3RhdGljIE5vZGUgKnByb2Nlc3NJbmRpcmVjdGlv bihOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgcHJp bnRTdWJzY3JpcHRzKFN1YnNjcmlwdGluZ1JlZiAqc2JzcmVmLCBkZXBhcnNlX2NvbnRleHQgKmNv bnRleHQpOwogc3RhdGljIGNoYXIgKmdldF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCk7CkBAIC01 MDIsNyArNTAwLDYgQEAgc3RhdGljIGNoYXIgKmdlbmVyYXRlX29wZXJhdG9yX25hbWUoT2lkIG9w ZXJpZCwgT2lkIGFyZzEsIE9pZCBhcmcyKTsKIHN0YXRpYyB2b2lkIGFkZF9jYXN0X3RvKFN0cmlu Z0luZm8gYnVmLCBPaWQgdHlwaWQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX3F1YWxpZmllZF90 eXBlX25hbWUoT2lkIHR5cGlkKTsKIHN0YXRpYyB0ZXh0ICpzdHJpbmdfdG9fdGV4dChjaGFyICpz dHIpOwotc3RhdGljIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpOwogc3RhdGlj IHZvaWQgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpOwog c3RhdGljIHZvaWQgZ2V0X2pzb25fcGF0aF9zcGVjKE5vZGUgKnBhdGhfc3BlYywgZGVwYXJzZV9j b250ZXh0ICpjb250ZXh0LAogCQkJCQkJCSAgIGJvb2wgc2hvd2ltcGxpY2l0KTsKQEAgLTE4OTAs NiArMTg4NywxMiBAQCBwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5zKE9pZCByZWxpZCwgYm9vbCBw cmV0dHkpCiAJcmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwgcHJldHR5Rmxh Z3MsIHRydWUsIGZhbHNlKTsKIH0KIAorY2hhciAqCitwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUo T2lkIHJlbGlkKQoreworCXJldHVybiBwZ19nZXRfcGFydGtleWRlZl93b3JrZXIocmVsaWQsIDAs IGZhbHNlLCBmYWxzZSk7Cit9CisKIC8qCiAgKiBJbnRlcm5hbCB3b3JraG9yc2UgdG8gZGVjb21w aWxlIGEgcGFydGl0aW9uIGtleSBkZWZpbml0aW9uLgogICovCkBAIC0yMTQzLDYgKzIxNDYsMTUg QEAgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiB9CiAKIC8qCisg KiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmV0dXJucyBkZWZpbml0aW9uIG9mIGEgQ09OU1RSQUlO VCBjb21tYW5kCisgKi8KK2NoYXIgKgorcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1w bGUoT2lkIGNvbnN0cmFpbnRJZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X2NvbnN0cmFpbnRkZWZfd29y a2VyKGNvbnN0cmFpbnRJZCwgZmFsc2UsIDAsIGZhbHNlKTsKK30KKworLyoKICAqIEludGVybmFs IHZlcnNpb24gdGhhdCByZXR1cm5zIGEgZnVsbCBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJ TlQgY29tbWFuZAogICovCiBjaGFyICoKQEAgLTEyMDE3LDcgKzEyMDI5LDcgQEAgZ2V0X3RhYmxl c2FtcGxlX2RlZihUYWJsZVNhbXBsZUNsYXVzZSAqdGFibGVzYW1wbGUsIGRlcGFyc2VfY29udGV4 dCAqY29udGV4dCkKICAqIGFjdHVhbF9kYXRhdHlwZS4gIChJZiB5b3UgZG9uJ3Qgd2FudCB0aGlz IGJlaGF2aW9yLCBqdXN0IHBhc3MKICAqIEludmFsaWRPaWQgZm9yIGFjdHVhbF9kYXRhdHlwZS4p CiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBP aWQgYWN0dWFsX2RhdGF0eXBlLAogCQkJCSBTdHJpbmdJbmZvIGJ1ZikKIHsKQEAgLTEyNzk3LDcg KzEyODA5LDcgQEAgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlv bnMpCiAvKgogICogR2VuZXJhdGUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcgYSByZWxhdGlvbidz IHJlbG9wdGlvbnMsIG9yIE5VTEwgaWYgbm9uZS4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAq CiBmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKQogewogCWNoYXIJICAgKnJlc3VsdCA9IE5V TEw7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBhNzdiMjkzLi5mMGRiODM2IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExODg2LDQgKzExODg2LDEwIEBACiAgIHByb3JldHR5cGUg PT4gJ2J5dGVhJywgcHJvYXJndHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnkn LAogICBwcm9zcmMgPT4gJ2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBv aWQgPT4gJzQ2NDInLCBkZXNjciA9PiAnZGRsIGRlcGFyc2UnLAorICBwcm9uYW1lID0+ICdkZGxf ZGVwYXJzZV90b19qc29uJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ ICdwZ19kZGxfY29tbWFuZCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicgfSwKK3sg b2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2pzb24gdG8gc3RyaW5nJywKKyAgcHJvbmFtZSA9PiAn ZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJv YXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5k JyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKaW5kZXggOWRhMjMwMC4uMjg3NTEwNiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAorKysgYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9zZXF1ZW5jZS5oCkBAIC01NCw2ICs1NCw3IEBAIHR5cGVkZWYgc3RydWN0IHhs X3NlcV9yZWMKIGV4dGVybiBpbnQ2NCBuZXh0dmFsX2ludGVybmFsKE9pZCByZWxpZCwgYm9vbCBj aGVja19wZXJtaXNzaW9ucyk7CiBleHRlcm4gRGF0dW0gbmV4dHZhbChQR19GVU5DVElPTl9BUkdT KTsKIGV4dGVybiBMaXN0ICpzZXF1ZW5jZV9vcHRpb25zKE9pZCByZWxpZCk7CitleHRlcm4gRm9y bV9wZ19zZXF1ZW5jZV9kYXRhIGdldF9zZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpOwog CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUs IENyZWF0ZVNlcVN0bXQgKnN0bXQpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJTZXF1ZW5j ZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAqc3RtdCk7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBh cnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmYTg3MgotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApAQCAtMCwwICsxLDI0 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5oCisgKgorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhl IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2Rl cGFyc2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIERETF9ERVBBUlNF X0gKKyNkZWZpbmUgRERMX0RFUEFSU0VfSAorCisjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0aWxp dHkuaCIKKworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENv bW1hbmQgKmNtZCk7CitleHRlcm4gY2hhciAqZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcoY2hh ciAqanNvbmIpOworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZHJvcF90YWJsZShjb25zdCBjaGFyICpv YmppZGVudGl0eSwgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKTsKK2V4dGVybiBjaGFyICpkZXBhcnNl X2Ryb3Bfc2VxdWVuY2UoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIERyb3BCZWhhdmlvciBiZWhh dmlvcik7CitleHRlcm4gY2hhciAqZGVwYXJzZV9kcm9wX3NjaGVtYShjb25zdCBjaGFyICpvYmpp ZGVudGl0eSwgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKTsKK2V4dGVybiBjaGFyICpkZXBhcnNlX2Ry b3BfaW5kZXgoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIERyb3BCZWhhdmlvciBiZWhhdmlvcik7 CisKKyNlbmRpZgkJLyogRERMX0RFUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dGNvcC9kZXBhcnNlX3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5 LmgKaW5kZXggOTRkZTEzZC4uYjUzMjk0YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9k ZXBhcnNlX3V0aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5o CkBAIC02Miw2ICs2Miw3IEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewog CQkJT2lkCQkJb2JqZWN0SWQ7CiAJCQlPaWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsK IAkJCUxpc3QJICAgKnN1YmNtZHM7CiAJCX0JCQlhbHRlclRhYmxlOwogCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMu aAppbmRleCAyMjFjM2U2Li44NWE2MmExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9i dWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKQEAgLTExOCw2ICsx MTgsNyBAQCBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfZXh0ZW5kZWQoT2lkIHR5cGVfb2lkLCBp bnQzMiB0eXBlbW9kLCBiaXRzMTYgZmxhZ3MpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2Jl KE9pZCB0eXBlX29pZCk7CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKE9p ZCB0eXBlX29pZCk7CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfd2l0aF90eXBlbW9kKE9pZCB0 eXBlX29pZCwgaW50MzIgdHlwZW1vZCk7CitleHRlcm4gY2hhciAqcHJpbnRUeXBtb2QoY29uc3Qg Y2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KTsKIAogZXh0ZXJuIGlu dDMyIHR5cGVfbWF4aW11bV9zaXplKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oIGIvc3JjL2luY2x1ZGUvdXRp bHMvcnVsZXV0aWxzLmgKaW5kZXggN2Q0ODk3MS4uNDQyZDFlZCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxz LmgKQEAgLTI2LDkgKzI2LDExIEBAIGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZfY29sdW1u cyhPaWQgaW5kZXhyZWxpZCwgYm9vbCBwcmV0dHkpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9xdWVy eWRlZihRdWVyeSAqcXVlcnksIGJvb2wgcHJldHR5KTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9w YXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAq cGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxlKE9pZCByZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0 X3BhcnRjb25zdHJkZWZfc3RyaW5nKE9pZCBwYXJ0aXRpb25JZCwgY2hhciAqYWxpYXNuYW1lKTsK IAogZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFp bnRJZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUo T2lkIGNvbnN0cmFpbnRJZCk7CiBleHRlcm4gY2hhciAqZGVwYXJzZV9leHByZXNzaW9uKE5vZGUg KmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJYm9vbCBmb3JjZXByZWZpeCwgYm9vbCBz aG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFyc2VfY29udGV4dF9mb3IoY29uc3QgY2hh ciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDEsNiArNDMsOSBAQCBleHRlcm4gTGlzdCAq c2VsZWN0X3J0YWJsZV9uYW1lc19mb3JfZXhwbGFpbihMaXN0ICpydGFibGUsCiBleHRlcm4gY2hh ciAqZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoT2lkIGNvbGxpZCk7CiBleHRlcm4gY2hhciAqZ2Vu ZXJhdGVfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzKTsKIGV4dGVybiBjaGFyICpnZXRfcmFuZ2Vf cGFydGJvdW5kX3N0cmluZyhMaXN0ICpib3VuZF9kYXR1bXMpOworZXh0ZXJuIHZvaWQgZ2V0X29w Y2xhc3NfbmFtZShPaWQgb3BjbGFzcywgT2lkIGFjdHVhbF9kYXRhdHlwZSwKKwkJCQkJCQkgIFN0 cmluZ0luZm8gYnVmKTsKK2V4dGVybiBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlk KTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX3N0cmluZyhPaWQgc3Rh dGV4dGlkKTsKIAotLSAKMi43LjIud2luZG93cy4xCgo= --_005_OS0PR01MB5716D3B79A607B547F2AB90D94819OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v11-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Description: v11-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch Content-Disposition: attachment; filename="v11-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch"; size=15170; creation-date="Tue, 05 Jul 2022 08:25:00 GMT"; modification-date="Tue, 05 Jul 2022 08:28:03 GMT" Content-Transfer-Encoding: base64 RnJvbSBlOWRhN2EwYWM1NWM2MDI3Njg3ZjhhYWRhZmYyNzBkZjEzNDFkZWEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjkgSnVuIDIwMjIgMTc6MDQ6MzIgKzA4MDAKU3ViamVjdDogW1BBVENI XSBTdXBwb3J0IENSRUFURSBUQUJMRSBBUyBTRUxFQ1QgSU5UTwoKVGhlIG1haW4gaWRlYSBvZiBy ZXBsaWNhdGluZyB0aGUgQ1JFQVRFIFRBQkxFIEFTIGlzIHRoYXQgd2UgZGVwcmFzZSB0aGUgQ1JF QVRFClRBQkxFIEFTIGludG8gYSBzaW1wbGUgQ1JFQVRFIFRBQkxFKHdpdGhvdXQgc3VicXVlcnkp IGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQKYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIGFuZCBiZWZv cmUgd3JpdGluZyBkYXRhIGludG8gdGhlIHRhYmxlIGFuZCByZXBsaWNhdGUKdGhlIGluY29taW5n IHdyaXRlcyBsYXRlciBhcyBub3JtYWwgSU5TRVJUcy4gSW4gdGhpcyBhcHBvcmFjaCwgd2UgZG9u J3QgZXhlY3V0ZQp0aGUgc3VicXVlcnkgb24gc3Vic2NyaWJlciBzbyB0aGF0IGRvbid0IG5lZWQg dG8gbWFrZSBzdXJlIGFsbCB0aGUgb2JqZWN0cwpyZWZlcmVuY2VkIGluIHRoZSBzdWJxdWVyeSBh bHNvIGV4aXN0cyBpbiBzdWJzY3JpYmVyLiBBbmQgVGhpcyBhcHByb2FjaCB3b3Jrcwpmb3IgYWxs IGtpbmQgb2YgY29tbWFuZHMoZS5nLiBDUkFFVEUgVEFCTEUgQVMgW1NFTEVDVF1bRVhFQ1VURV1b VkFMVUVTXSkKCkludHJvZHVjaW5nIGEgbmV3IHR5cGUgb2YgZXZlbnQgdHJpZ2dlciAidGFibGVf aW5pdF93cml0ZSIuIHdoaWNoIHdvdWxkIGJlIGZpcmVkCmZvciBDUkVBVEUgVEFCTEUgQVMvU0VM RUNUIElOVE8gYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIGFuZApiZWZvcmUgYW55IG90aGVyIG1v ZGlmaWNhdGlvbi4gd2UgZGVwYXJzZSB0aGUgY29tbWFuZCBpbiB0aGUgdGFibGVfaW5pdF93cml0 ZSBldmVudAp0cmlnZ2VyIGFuZCBXQUwgbG9nIHRoZSBkZXBhcnNlZCBqc29uIHN0cmluZy4gVGhl IHdhbHNlbmRlciB3aWxsIHNlbmQgdGhlCnN0cmluZyB0byBzdWJzY3JpYmVyLiBBbmQgaW5jb21p bmcgSU5TRVJUcyB3aWxsIGFsc28gYmUgcmVwbGljYXRlZC4KLS0tCiBzcmMvYmFja2VuZC9jb21t YW5kcy9jcmVhdGVhcy5jICAgICAgICB8ICAxMCArKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYyAgICAgfCAgMTggKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jICAgfCAxNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAgOSArKwogc3JjL2JhY2tlbmQvdGNv cC91dGlsaXR5LmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv ZXZ0Y2FjaGUuYyAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAg ICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oICAgfCAg IDQgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgfCAgIDkgKy0KIHNy Yy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAgICAgICAgIHwgICAzICstCiAxMCBmaWxlcyBj aGFuZ2VkLCAyMjYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3Jl YXRlYXMuYwppbmRleCA5YWJiYjZiLi45ODllODk0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMK QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgogI2luY2x1 ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVhdGVhcy5oIgor I2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJjb21tYW5kcy9t YXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1ZGUgImNvbW1h bmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rhc19pbnRlcm5h bChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3UXVlcnkoaW50 b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFuZENvdW50ZXJJ bmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUgdHJpZ2dlciBm b3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28KKwkJICogdGhh dCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5IGNyZWF0ZWQg dGFibGUgaW4KKwkJICogdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlFdmVudFRyaWdn ZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFkZHIpOworCX0K IAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNl LmMKaW5kZXggMmIzMzQ2OC4uOWZkYTJlOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5j CkBAIC0zMTkxLDYgKzMxOTEsMjEgQEAgZGVwYXJzZV9BbHRlclRhYmxlU3RtdChDb2xsZWN0ZWRD b21tYW5kICpjbWQpCiAJcmV0dXJuIGFsdGVyVGFibGVTdG10OwogfQogCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sK KwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpwYXJzZXRyZWU7CisKKwlBc3NlcnQoY21kLT50 eXBlID09IFNDVF9DcmVhdGVUYWJsZUFzKTsKKworCXBhcnNldHJlZSA9IGNtZC0+ZC5jdGFzLnJl YWxfY3JlYXRlOworCW9iamVjdElkID0gY21kLT5kLmN0YXMuYWRkcmVzcy5vYmplY3RJZDsKKwor CXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7Cit9CisKKwog LyoKICAqIEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgogICoKQEAgLTMzODEs NiArMzM5Niw5IEBAIGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNt ZCkKIAkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKIAkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyVGFibGVT dG10KGNtZCk7CiAJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKKwkJCXRyZWUg PSBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KGNtZCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoK IAkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGRlcGFyc2Ugbm9kZSB0eXBlICVkIiwgY21kLT50 eXBlKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2Vy LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXggNWQ2M2FhZi4u ZTljYjg4NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMTMzLDcgKzEz Myw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCWlm IChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfc3RhcnQiKSAhPSAwICYmCiAJ CXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9lbmQiKSAhPSAwICYmCiAJCXN0 cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpICE9IDAgJiYKLQkJc3RyY21wKHN0bXQt PmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwKQorCQlzdHJjbXAoc3RtdC0+ZXZlbnRu YW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDAgJiYKKwkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwg InRhYmxlX2luaXRfd3JpdGUiKSAhPSAwKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2Rl KEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNnKCJ1bnJlY29nbml6ZWQgZXZlbnQg bmFtZSBcIiVzXCIiLApAQCAtMTU5LDcgKzE2MCw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVh dGVFdmVudFRyaWdTdG10ICpzdG10KQogCS8qIFZhbGlkYXRlIHRhZyBsaXN0LCBpZiBhbnkuICov CiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfc3RhcnQiKSA9PSAw IHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfZW5kIikgPT0gMCB8 fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCkKKwkJIHN0cmNt cChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpID09IDAgfHwKKwkJIHN0cmNtcChzdG10LT5l dmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKIAkJJiYgdGFncyAhPSBOVUxMKQog CQl2YWxpZGF0ZV9kZGxfdGFncygidGFnIiwgdGFncyk7CiAJZWxzZSBpZiAoc3RyY21wKHN0bXQt PmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSA9PSAwCkBAIC01ODUsNyArNTg3LDggQEAgRXZl bnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFyc2V0cmVlLAogCQlkYmd0YWcgPSBDcmVhdGVD b21tYW5kVGFnKHBhcnNldHJlZSk7CiAJCWlmIChldmVudCA9PSBFVlRfRERMQ29tbWFuZFN0YXJ0 IHx8CiAJCQlldmVudCA9PSBFVlRfRERMQ29tbWFuZEVuZCB8fAotCQkJZXZlbnQgPT0gRVZUX1NR TERyb3ApCisJCQlldmVudCA9PSBFVlRfU1FMRHJvcCB8fAorCQkJZXZlbnQgPT0gRVZUX1RhYmxl SW5pdFdyaXRlKQogCQl7CiAJCQlpZiAoIWNvbW1hbmRfdGFnX2V2ZW50X3RyaWdnZXJfb2soZGJn dGFnKSkKIAkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBjb21tYW5kIHRhZyBcIiVzXCIiLCBH ZXRDb21tYW5kVGFnTmFtZShkYmd0YWcpKTsKQEAgLTg2OCw2ICs4NzEsMTYzIEBAIEV2ZW50VHJp Z2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNv bikKIAlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwogfQogCisKKy8qCisgKiBFdmVudFRyaWdn ZXJUYWJsZUluaXRXcml0ZVN0YXJ0CisgKiAgICAgUHJlcGFyZSB0byByZWNlaXZlIGRhdGEgb24g YW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVUIElOVE8gY29tbWFuZCBhYm91dAorICogICAgIHRvIGJl IGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRDb21t YW5kICpjb21tYW5kOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qg c2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2Vy U3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbklu aGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCWNvbW1hbmQgPSBwYWxsb2Moc2l6ZW9m KENvbGxlY3RlZENvbW1hbmQpKTsKKworCWNvbW1hbmQtPnR5cGUgPSBTQ1RfQ3JlYXRlVGFibGVB czsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVhdGluZ19leHRlbnNpb247CisJY29tbWFu ZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRkcmVzczsKKwljb21tYW5kLT5kLmN0 YXMucmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3Qo cGFyc2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVudCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0 ZS0+Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29t bWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKwor LyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kCisgKgkJRmluaXNoIHVwIHNhdmlu ZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElOVE8gY29tbWFuZC4KKyAqCisgKiBGSVhNRSB0 aGlzIEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUgcG9zc2liaWxpdHkgdGhhdCBhbiB4YWN0L3N1 YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0aHJvdWdoLiAgUHJvYmFibHkgaXQncyBiZXN0 IHRvIGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZlbnRUcmlnZ2VycygpIHRvIGZpeCB0aGlzLgor ICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCh2b2lkKQoreworCUNvbGxl Y3RlZENvbW1hbmQgKnBhcmVudDsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRl eHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxl Y3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCXBhcmVudCA9IGN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBhcmVudDsKKworCXBmcmVlKGN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOworCisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFy c2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSBjcmVhdGUg Y29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJs ZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkJCQlyZWxwZXJzaXN0Owor CUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNoYXIgICAJCQkgICAqanNvbl9zdHJpbmc7CisK KwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJu b3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwljbWQgPSBjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCUFzc2VydChjbWQpOworCisJcmVscGVy c2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElk KTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3Nl IHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgorCSAqCisJICogV2Ugd2ls bCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQg dGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2Ny aWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5 IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCSAqIHJld3JpdGUgbWVz c2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLworCWlmIChyZWxwZXJzaXN0 ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7 CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBk ZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9j b21tYW5kKGNtZCk7CisKKwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJTG9nTG9naWNhbERE TE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQsIERDVF9T aW1wbGVDbWQsCisJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7 CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgorICogRmlyZSB0YWJs ZV9pbml0X3Jld3JpdGUgdHJpZ2dlcnMuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5p dFdyaXRlKE5vZGUgKnJlYWxfY3JlYXRlLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCit7CisJTGlz dAkgICAqcnVubGlzdDsKKwlFdmVudFRyaWdnZXJEYXRhIHRyaWdkYXRhOworCUNvbGxlY3RlZENv bW1hbmQgKmNvbW1hbmQ7CisKKwkvKgorCSAqIFNlZSBFdmVudFRyaWdnZXJERExDb21tYW5kU3Rh cnQgZm9yIGEgZGlzY3Vzc2lvbiBhYm91dCB3aHkgZXZlbnQKKwkgKiB0cmlnZ2VycyBhcmUgZGlz YWJsZWQgaW4gc2luZ2xlIHVzZXIgbW9kZS4KKwkgKi8KKwlpZiAoIUlzVW5kZXJQb3N0bWFzdGVy KQorCQlyZXR1cm47CisKKwkvKgorCSAqIEFsc28gZG8gbm90aGluZyBpZiBvdXIgc3RhdGUgaXNu J3Qgc2V0IHVwLCB3aGljaCBpdCB3b24ndCBiZSBpZiB0aGVyZQorCSAqIHdlcmVuJ3QgYW55IHJl bGV2YW50IGV2ZW50IHRyaWdnZXJzIGF0IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBEREwKKwkg KiBjb21tYW5kLiAgVGhpcyB0ZXN0IG1pZ2h0IHRoZXJlZm9yZSBzZWVtIG9wdGlvbmFsLCBidXQg aXQncworCSAqICpuZWNlc3NhcnkqLCBiZWNhdXNlIEV2ZW50VHJpZ2dlckNvbW1vblNldHVwIG1p Z2h0IGZpbmQgdHJpZ2dlcnMgdGhhdAorCSAqIGRpZG4ndCBleGlzdCBhdCB0aGUgdGltZSB0aGUg Y29tbWFuZCBzdGFydGVkLgorCSAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlKQor CQlyZXR1cm47CisKKwkvKiBEbyBub3RoaW5nIGlmIG5vIGNvbW1hbmQgd2FzIGNvbGxlY3RlZC4g Ki8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpCisJCXJl dHVybjsKKworCWNvbW1hbmQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21t YW5kOworCisJcnVubGlzdCA9IEV2ZW50VHJpZ2dlckNvbW1vblNldHVwKGNvbW1hbmQtPnBhcnNl dHJlZSwKKwkJCQkJCQkJCSAgRVZUX1RhYmxlSW5pdFdyaXRlLAorCQkJCQkJCQkJICAidGFibGVf aW5pdF93cml0ZSIsCisJCQkJCQkJCQkgICZ0cmlnZGF0YSk7CisJaWYgKHJ1bmxpc3QgPT0gTklM KQorCQlyZXR1cm47CisKKwkvKiBTZXQgdGhlIHJlYWwgQ3JlYXRlVGFibGUgc3RhdG1lbnQgYW5k IG9iamVjdCBhZGRyZXNzICovCisJY29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRlID0gcmVhbF9j cmVhdGU7CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBhZGRyZXNzOworCisJLyogUnVuIHRo ZSB0cmlnZ2Vycy4gKi8KKwlFdmVudFRyaWdnZXJJbnZva2UocnVubGlzdCwgJnRyaWdkYXRhKTsK KworCS8qIENsZWFudXAuICovCisJbGlzdF9mcmVlKHJ1bmxpc3QpOworCisJLyoKKwkgKiBNYWtl IHN1cmUgYW55dGhpbmcgdGhlIGV2ZW50IHRyaWdnZXJzIGRpZCB3aWxsIGJlIHZpc2libGUgdG8g dGhlIG1haW4KKwkgKiBjb21tYW5kLgorCSAqLworCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7 Cit9CisKIC8qCiAgKiBJbnZva2UgZWFjaCBldmVudCB0cmlnZ2VyIGluIGEgbGlzdCBvZiBldmVu dCB0cmlnZ2Vycy4KICAqLwpAQCAtMTE0OCw3ICsxMzA4LDggQEAgdHJhY2tEcm9wcGVkT2JqZWN0 c05lZWRlZCh2b2lkKQogCSAqLwogCXJldHVybiBsaXN0X2xlbmd0aChFdmVudENhY2hlTG9va3Vw KEVWVF9TUUxEcm9wKSkgPiAwIHx8CiAJCWxpc3RfbGVuZ3RoKEV2ZW50Q2FjaGVMb29rdXAoRVZU X1RhYmxlUmV3cml0ZSkpID4gMCB8fAotCQlsaXN0X2xlbmd0aChFdmVudENhY2hlTG9va3VwKEVW VF9ERExDb21tYW5kRW5kKSkgPiAwOworCQlsaXN0X2xlbmd0aChFdmVudENhY2hlTG9va3VwKEVW VF9ERExDb21tYW5kRW5kKSkgPiAwIHx8CisJCWxpc3RfbGVuZ3RoKEV2ZW50Q2FjaGVMb29rdXAo RVZUX1RhYmxlSW5pdFdyaXRlKSkgPiAwOwogfQogCiAvKgpAQCAtMTg3Miw2ICsyMDMzLDcgQEAg cGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWNhc2Ug U0NUX0FsdGVyT3BGYW1pbHk6CiAJCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgogCQkJY2FzZSBT Q1RfQWx0ZXJUU0NvbmZpZzoKKwkJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQkJewogCQkJ CQljaGFyCSAgICppZGVudGl0eTsKIAkJCQkJY2hhcgkgICAqdHlwZTsKQEAgLTE4ODksNiArMjA1 MSw4IEBAIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CQkJCQlhZGRyID0gY21kLT5kLmNyZWF0ZW9wYy5hZGRyZXNzOwogCQkJCQllbHNlIGlmIChjbWQt PnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCiAJCQkJCQlhZGRyID0gY21kLT5kLmF0c2NmZy5h ZGRyZXNzOworCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCisJ CQkJCQlhZGRyID0gY21kLT5kLmN0YXMuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkgKiBJZiBh biBvYmplY3Qgd2FzIGRyb3BwZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IDEyZDRiMmUuLmZmNzU5OTkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC05NjYsNiArOTY2LDExIEBA IENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25T dG10ICpzdG10KQogCQkJQ01EVEFHX0FMVEVSX0lOREVYCiAJCX07CiAKKwkJQ29tbWFuZFRhZwlp bml0X2NvbW1hbmRzW10gPSB7CisJCQlDTURUQUdfQ1JFQVRFX1RBQkxFX0FTLAorCQkJQ01EVEFH X1NFTEVDVF9JTlRPCisJCX07CisKIAkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9lbmQgZXZl bnQgdHJpZ2dlciAqLwogCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29tbWFu ZF9lbmQiLCBlbmRfY29tbWFuZHMsCiAJCQkJCQkJCQkgbGVuZ3Rob2YoZW5kX2NvbW1hbmRzKSwg bXlzZWxmLCBwdWJvaWQpOwpAQCAtOTc3LDYgKzk4MiwxMCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQ YXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJLyogQ3Jl YXRlIHRoZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGlj YUV2ZW50VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCiAJCQkJCQkJ CQkgbGVuZ3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBD cmVhdGUgdGhlIHRhYmxlX2luaXRfd3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExS ZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9pbml0X3dyaXRlIiwgaW5pdF9jb21tYW5kcywKKwkJ CQkJCQkJCSBsZW5ndGhvZihpbml0X2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOwogCX0KIAog CXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IDZh NWJjZGUuLjRkMDAzZGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisr KyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNjY1LDggKzE2NjUsMTAgQEAgUHJv Y2Vzc1V0aWxpdHlTbG93KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQlicmVhazsKIAogCQkJY2Fz ZSBUX0NyZWF0ZVRhYmxlQXNTdG10OgorCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3Rh cnQocGFyc2V0cmVlKTsKIAkJCQlhZGRyZXNzID0gRXhlY0NyZWF0ZVRhYmxlQXMocHN0YXRlLCAo Q3JlYXRlVGFibGVBc1N0bXQgKikgcGFyc2V0cmVlLAogCQkJCQkJCQkJCQlwYXJhbXMsIHF1ZXJ5 RW52LCBxYyk7CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQoKTsKIAkJCQlicmVh azsKIAogCQkJY2FzZSBUX1JlZnJlc2hNYXRWaWV3U3RtdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRj YWNoZS5jCmluZGV4IGY3ZjcxNjUuLjdmYjhjYjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL2V2dGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2Fj aGUuYwpAQCAtMTY3LDYgKzE2Nyw4IEBAIEJ1aWxkRXZlbnRUcmlnZ2VyQ2FjaGUodm9pZCkKIAkJ CWV2ZW50ID0gRVZUX1NRTERyb3A7CiAJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwgInRhYmxl X3Jld3JpdGUiKSA9PSAwKQogCQkJZXZlbnQgPSBFVlRfVGFibGVSZXdyaXRlOworCQllbHNlIGlm IChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKKwkJCWV2ZW50ID0g RVZUX1RhYmxlSW5pdFdyaXRlOwogCQllbHNlCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKaW5kZXggMTNhNDcwYi4uOWI4MThiOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CkBAIC0xMTkwMSw0ICsxMTkwMSw3IEBACiB7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmln Z2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAogICBwcm9uYW1lID0+ ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVu dF90cmlnZ2VyJywKICAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25f ZGVwYXJzZV90YWJsZV9yZXdyaXRlJyB9LAoreyBvaWQgPT4gJzQ2NDcnLCBkZXNjciA9PiAndHJp Z2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSBpbml0JywKKyAgcHJvbmFtZSA9PiAn cHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZl bnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9u X2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuaAppbmRleCBmZDJlZTdmLi5hOWUwZjcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5oCkBAIC01NSw2ICs1NSwxMCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJERExD b21tYW5kRW5kKE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJTUUxE cm9wKE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZVJld3Jp dGUoTm9kZSAqcGFyc2V0cmVlLCBPaWQgdGFibGVPaWQsIGludCByZWFzb24pOwogCitleHRlcm4g dm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7Citl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpwYXJzZXRyZWUsIE9i amVjdEFkZHJlc3MgYWRkcmVzcyk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRX cml0ZUVuZCh2b2lkKTsKKwogZXh0ZXJuIGJvb2wgRXZlbnRUcmlnZ2VyQmVnaW5Db21wbGV0ZVF1 ZXJ5KHZvaWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRW5kQ29tcGxldGVRdWVyeSh2b2lk KTsKIGV4dGVybiBib29sIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNv cC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCBiNTMyOTRiLi4zZDI5NGEwIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3Av ZGVwYXJzZV91dGlsaXR5LmgKQEAgLTI5LDcgKzI5LDggQEAgdHlwZWRlZiBlbnVtIENvbGxlY3Rl ZENvbW1hbmRUeXBlCiAJU0NUX0FsdGVyT3BGYW1pbHksCiAJU0NUX0FsdGVyRGVmYXVsdFByaXZp bGVnZXMsCiAJU0NUX0NyZWF0ZU9wQ2xhc3MsCi0JU0NUX0FsdGVyVFNDb25maWcKKwlTQ1RfQWx0 ZXJUU0NvbmZpZywKKwlTQ1RfQ3JlYXRlVGFibGVBcwogfSBDb2xsZWN0ZWRDb21tYW5kVHlwZTsK IAogLyoKQEAgLTEwMSw2ICsxMDIsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFu ZAogCQl7CiAJCQlPYmplY3RUeXBlCW9ianR5cGU7CiAJCX0JCQlkZWZwcml2czsKKworCQlzdHJ1 Y3QKKwkJeworCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQkJTm9kZQkJICpyZWFsX2NyZWF0 ZTsKKwkJfQkJCWN0YXM7CiAJfQkJCWQ7CiAKIAlzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZCAqcGFy ZW50OwkvKiB3aGVuIG5lc3RlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0 Y2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKaW5kZXggZGRiNjdhNi4uMWU2 NDgzMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAorKysgYi9zcmMv aW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCkBAIC0yMiw3ICsyMiw4IEBAIHR5cGVkZWYgZW51bQog CUVWVF9ERExDb21tYW5kU3RhcnQsCiAJRVZUX0RETENvbW1hbmRFbmQsCiAJRVZUX1NRTERyb3As Ci0JRVZUX1RhYmxlUmV3cml0ZQorCUVWVF9UYWJsZVJld3JpdGUsCisJRVZUX1RhYmxlSW5pdFdy aXRlCiB9IEV2ZW50VHJpZ2dlckV2ZW50OwogCiB0eXBlZGVmIHN0cnVjdAotLSAKMi43LjIud2lu ZG93cy4xCgo= --_005_OS0PR01MB5716D3B79A607B547F2AB90D94819OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v11-0002-Support-DDL-replication.patch" Content-Description: v11-0002-Support-DDL-replication.patch Content-Disposition: attachment; filename="v11-0002-Support-DDL-replication.patch"; size=128609; creation-date="Tue, 05 Jul 2022 08:25:00 GMT"; modification-date="Tue, 05 Jul 2022 08:28:04 GMT" Content-Transfer-Encoding: base64 RnJvbSA0MDkwODljMmZmMDY3NGEzOGUyMjJlNDkxNzY3N2E5ZDRkYzk2YjE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjEgSnVuIDIwMjIgMTc6NDE6MjcgKzA4MDAKU3ViamVjdDogW1BBVENI XSBTdXBwb3J0IERETCByZXBsaWNhdGlvbi4KClRvIHN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLCB3 ZSB1c2UgZXZlbnQgdHJpZ2dlciBhbmQgRERMIGRlcGFyc2luZwpmYWNpbGl0aWVzLiBXaGlsZSBj cmVhdGluZyBhIHB1YmxpY2F0aW9uLCB3ZSByZWdpc3RlciBhIGNvbW1hbmQgZW5kCnRyaWdnZXIg dGhhdCBkZXBhcnNlcyB0aGUgRERMIGFzIGEgSlNPTiBibG9iLCBhbmQgV0FMIGxvZ3MgaXQuIFRo ZSBldmVudAp0cmlnZ2VyIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBhdCB0aGUgdGltZSBvZiBk cm9wIHB1YmxpY2F0aW9uLiBUaGUKV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQgc2VuZHMg aXQgZG93bnN0cmVhbSBzaW1pbGFyIHRvIG90aGVyIERNTApjb21tYW5kcy4gVGhlIHN1YnNjcmli ZXIgdGhlbiBjb252ZXJ0cyBKU09OIGJhY2sgdG8gdGhlIERETCBjb21tYW5kIHN0cmluZwphbmQg ZXhlY3V0ZXMgaXQuIEluIHRoZSBzdWJzY3JpYmVyLCB3ZSBhbHNvIGFkZCB0aGUgbmV3bHkgYWRk ZWQgcmVsIHRvCnBnX3N1YnNjcmlwdGlvbl9yZWwgc28gdGhhdCB0aGUgRE1MIGNoYW5nZXMgb24g dGhlIG5ldyB0YWJsZSBjYW4gYmUKcmVwbGljYXRlZCB3aXRob3V0IGhhdmluZyB0byBtYW51YWxs eSBydW4KIkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJMSUNBVElPTiIuCgpUaGlz IGlzIGEgUE9DIHBhdGNoIHRvIHNob3cgaG93IHVzaW5nIGV2ZW50IHRyaWdnZXJzIGFuZCBEREwg ZGVwYXJzaW5nCmZhY2lsaXRpZXMgd2UgY2FuIGltcGxlbWVudCBEREwgcmVwbGljYXRpb24uIFNv LCB0aGUgaW1wbGVtZW50YXRpb24gaXMKcmVzdHJpY3RlZCB0byBDUkVBVEUgVEFCTEUvQUxURVIg VEFCTEUvRFJPUCBUQUJMRSBjb21tYW5kcy4KCi0gRm9yIG5vbi1yZXdyaXRlIEFMVEVSIFtUQUJM RXxTRVFVRU5DRXxTQ0hFTUFdIGNvbW1hbmQgYW5kCi0gICAgIENSRUFURSBbVEFCTEV8U0VRVUVO Q0V8U0NIRU1BfElOREVYXSBjb21tYW5kOgp3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGF0IGRkbF9j b21tYW5kX2VuZCBldmVudCB0cmlnZ2VyIGFuZCBXQUwgbG9nIHRoZQpkZXBhcnNlZCBqc29uIHN0 cmluZy4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNlbmRzIGl0IHRvCnN1YnNj cmliZXIgaWYgdGhlIGNyZWF0ZWQvYWx0ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQuIEl0IHN1cHBv cnRzIG1vc3Qgb2YKQUxURVIgVEFCTEUgY29tbWFuZCBleGNlcHQgc29tZSBjb21tYW5kcyhEREwg cmVsYXRlZCB0byBQQVJUSVRJT05FRCBUQUJMRQouLi4pIHRoYXQgaW50cm9kdWNlZCByZWNlbnRs eSB3aGljaCBoYXZlbid0IGJlZW4gc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50CmRkbF9kZXBhcnNl ciwgd2Ugd2lsbCBzdXBwb3J0IHRoYXQgbGF0ZXIuCgpOb3RlIHRoYXQgdGhlIHJlcGxpY2F0aW9u IGZvciBBTFRFUiBJTkRFWCBjb21tYW5kIGlzIHN0aWxsIHVuZGVyCnByb2dyZXNzLgoKLSBGb3Ig RFJPUCBbVEFCTEV8U0VRVUVOQ0V8U0NIRU1BfElOREVYXToKVGhlICdjb21tYW5kIHN0YXJ0JyBl dmVudCBoYW5kbGVyIGxvZ3MgYSBkZGwgbWVzc2FnZSB3aXRoIHRoZSByZWxpZHMgb2YKdGhlIHRh YmxlcyB0aGF0IGFyZSBkcm9wcGVkIHdoaWNoIHRoZSBvdXRwdXQgcGx1Z2luIChwZ291dHB1dCkg c3RvcmVzIGluCml0cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSBhZnRlciB2ZXJpZnlpbmcgdGhh dCBpdCBpcyBmb3IgYSB0YWJsZSB0aGF0IGlzCnBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uLiBMYXRl ciB0aGUgJ2NvbW1hbmQgZW5kJyBldmVudCBoYW5kbGVyIHNlbmRzIHRoZQphY3R1YWwgZHJvcCBt ZXNzYWdlLiBQZ291dHB1dCBvbiByZWNlaXZpbmcgdGhlIGNvbW1hbmQgZW5kLCBvbmx5IHNlbmRz IG91dAp0aGUgZHJvcCBjb21tYW5kIG9ubHkgaWYgaXQgaXMgZm9yIG9uZSBvZiB0aGUgcmVsaWRz IG1hcmtlZCBmb3IgZGVsZXRpbmcuClRoZSByZWFzb24gd2UgaGF2ZSB0byBkbyB0aGlzIGlzIGJl Y2F1c2UsIG9uY2UgdGhlIGxvZ2ljYWwgZGVjb2RlcgpyZWNlaXZlcyB0aGUgJ2NvbW1hbmQgZW5k JyBtZXNzYWdlLCAgdGhlIHJlbGlkIG9mIHRoZSB0YWJsZSBpcyBubyBsb25nZXIKdmFsaWQgYXMg aXQgaGFzIGJlZW4gZGVsZXRlZCBhcyBwYXJ0IG9mIGludmFsaWRhdGlvbnMgcmVjZWl2ZWQgZm9y IHRoZQpkcm9wIHRhYmxlIGNvbW1hbmQuIEl0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byB2ZXJp ZnkgaWYgdGhlIHRhYmxlIGlzCnBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uIGxpc3Qgb3Igbm90LiBU byBtYWtlIHRoaXMgcG9zc2libGUsIEkgaGF2ZSBhZGRlZAp0d28gbW9yZSBlbGVtZW50cyB0byB0 aGUgZGRsIHhsb2cgYW5kIGRkbCBtZXNzYWdlLCAocmVsaWQgYW5kIGNtZHR5cGUpLgoKV2UgY291 bGQgaGF2ZSBhbHNvIGhhbmRsZWQgYWxsIHRoaXMgb24gdGhlIHN1YnNjcmliZXIgc2lkZSBhcyB3 ZWxsLCBidXQKdGhhdCB3b3VsZCBtZWFuIHNlbmRpbmcgc3B1cmlvdXMgZGRsIG1lc3NhZ2VzIGZv ciB0YWJsZXMgdGhhdCBhcmUgbm90IHBhcnQKb2YgdGhlIHB1YmxpY2F0aW9uLgoKLSBGb3IgdGFi bGVfcmV3cml0ZSBBTFRFUiBUQUJMRSBjb21tYW5kOgooQUxURVIgQ09MVU1OIFRZUEUsIEFERCBD T0xVTU4gREVGQVVMVCwgU0VUIExPR0dFRCwgU0VUIEFDQ0VTUyBNRVRIT0QpCgp3ZSBkZXBhcnNl IHRoZSBjb21tYW5kIGFuZCBXQUwgbG9nIHRoZSBkZXBhcnNlZCBqc29uIHN0cmluZyBhdAp0YWJs ZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIuIFRoZSBXQUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFu ZCBzZW5kcyBpdCB0bwpzdWJzY3JpYmVyIGlmIHRoZSBhbHRlcmVkIHRhYmxlIGlzIHB1Ymxpc2hl ZC4gVGhlbiwgdGhlIFdBTFNlbmRlciB3aWxsCmNvbnZlcnQgdGhlIHVwY29taW5nIHJld3JpdGUg SU5TRVJUcyB0byBVUERBVEVzIGFuZCBzZW5kIHRoZW0gdG8Kc3Vic2NyaWJlciBzbyB0aGF0IHRo ZSBkYXRhIGJldHdlZW4gcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGNhbiBhbHdheXMgYmUKY29u c2lzdGVudC4gTm90ZSB0aGF0IHRoZSB0YWJsZXMgdGhhdCBwdWJsaXNoIHJld3JpdGUgZGRsIG11 c3QgaGF2ZSBhCnJlcGxpY2EgaWRlbnRpdHkgY29uZmlndXJlZCBpbiBvcmRlciB0byBiZSBhYmxl IHRvIHJlcGxpY2F0ZSB0aGUgdXBjb21pbmcKcmV3cml0ZSBVUERBVEVzLgoKV2UgZG8gdGhpcyB3 YXkgYmVjYXVzZSBvZiB0d28gcmVhc29uOgooMSkgVGhlIGRhdGEgYmVmb3JlIHRoZSByZXdyaXRl IGRkbCBjb3VsZCBhbHJlYWR5IGJlIGRpZmZlcmVudCBhbW9uZwpwdWJsaXNoZXIgYW5kIHN1YnNj cmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEgZGF0YSBpbiBzdWJzY3JpYmVyIHdoaWNoCmRv ZXNuJ3QgZXhpc3QgaW4gcHVibGlzaGVyIGFsc28gZ2V0IHJld3JpdHRlbiwgd2UgbmVlZCB0byBs ZXQgdGhlCnN1YnNjcmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0ZSBkZGwgdG8gcmV3 cml0ZSBhbGwgdGhlIGRhdGEgYXQKZmlyc3QuCgooMikgdGhlIGRhdGEgYWZ0ZXIgZXhlY3V0aW5n IHJld3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZlcmVudCBhbW9uZwpwdWJsaXNoZXIgYW5kIHN1YnNj cmliZXIoZHVlIHRvIGRpZmZlcmVudCBmdW5jdGlvbnMvb3BlcmF0b3JzIHVzZWQgZHVyaW5nCnJl d3JpdGUpLCBzbyB3ZSBuZWVkIHRvIHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRvIGtl ZXAgdGhlIGRhdGEKY29uc2lzdGVudC4KClRPIElNUFJPVkU6ClRoaXMgYXBwcm9hY2ggY291bGQg YmUgaW1wcm92ZWQgYnkgbGV0dGluZyB0aGUgc3Vic2NyaWJlciB0cnkgdG8gdXBkYXRlCnRoZSBl eHRyYSBkYXRhIGl0c2VsZiBpbnN0ZWFkIG9mIGRvaW5nIGZ1bGx5IHJld3JpdGUgZGRsIGFuZCB1 c2UgdGhlCnVwY29taW5nIHJld3JpdGUgVVBEQVRFcyB0byByZXdyaXRlIHRoZSByZXN0IGRhdGEu IFRvIGFjaGlldmUgdGhpcywgd2UKY291bGQgbW9kaWZ5IHRoZSBkZXBhcnNlZCBqc29uIHN0cmlu ZyB0byB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIHJld3JpdGUKcGFydCBhbmQgYWRkIHNvbWUgbG9n aWMgaW4gc3Vic2NyaWJlciB0byB1cGRhdGUgdGhlIGV4dHJhIGRhdGEuCkJlc2lkZXMsIHdlIG1h eSBub3QgbmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdlcyBmb3IgYWxsIHR5cGUgb2YgcmV3cml0 ZQpkZGwsIGZvciBleGFtcGxlLCBpdCBzZWVtcyBmaW5lIHRvIHNraXAgc2VuZGluZyByZXdyaXRl IGNoYW5nZXMgZm9yIEFMVEVSClRBQkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEgaW4gdGhlIHRh YmxlIGRvZXNuJ3QgYWN0dWFsbHkgYmUgY2hhbmdlZC4gV2UKY291bGQgdXNlIHRoZSBkZXBhcnNl ciBhbmQgZXZlbnQgdHJpZ2dlciB0byBmaWx0ZXIgdGhlc2UgZGRscyBhbmQgc2tpcApzZW5kaW5n IHJld3JpdGUgY2hhbmdlcyBmb3IgdGhlbS4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvTWFrZWZpbGUgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvbG9naWNhbGRkbG1zZ2Rlc2MuYyB8ICA1MiArKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9ybWdyLmMgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3Bn X3B1YmxpY2F0aW9uLmMgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmMgICAgICAgICAgICB8IDIyNCArKysrKysrKysrKysrLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgICAgICAgICAgfCAxMDAgKysrKysrCiBzcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgICB8ICAgMiArLQogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgICAgfCAgIDEgKwogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMgICAgfCAgODYgKysrKysr CiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jICAgICAgICB8ICA0MSAr KysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jICAgICAgIHwgIDkz ICsrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICAgICAg fCAgNTIgKysrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVy LmMgfCAxMzkgKysrKysrKystCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtl ci5jICAgICAgICB8IDIzMiArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v cGdvdXRwdXQvcGdvdXRwdXQuYyAgICAgfCAxOTIgKysrKysrKysrKystCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC91 dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAyNyArLQogc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ193 YWxkdW1wL3JtZ3JkZXNjLmMgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wc3Fs L2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTcgKy0KIHNyYy9pbmNsdWRl L2FjY2Vzcy9ybWdybGlzdC5oICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICAgIHwgICA5ICsKIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCAgICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRl L2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmggICAgICAgICAgICB8ICA2MCArKysrCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCAgICAgICAgICB8ICAgNyArLQogc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oICAgICAgICAgfCAgMjcgKysKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCAgICAgICAgIHwgIDM5ICsrKwogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCAgICAgICAgICAgICAgfCAgIDYgKy0KIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0ICAgICAgIHwgMzg4ICsrKysr KysrKysrKy0tLS0tLS0tLS0tLQogMzMgZmlsZXMgY2hhbmdlZCwgMTU5NSBpbnNlcnRpb25zKCsp LCAyMTcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNz L3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaAoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9NYWtlZmlsZQppbmRleCBmODhkNzJmLi5iOGUyOWU4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBAIE9CSlMgPSBcCiAJaGFzaGRlc2MubyBc CiAJaGVhcGRlc2MubyBcCiAJbG9naWNhbG1zZ2Rlc2MubyBcCisJbG9naWNhbGRkbG1zZ2Rlc2Mu byBcCiAJbXhhY3RkZXNjLm8gXAogCW5idGRlc2MubyBcCiAJcmVsbWFwZGVzYy5vIFwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFkZWU1MgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCkBAIC0wLDAgKzEs NTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGxvZ2ljYWxkZGxtc2dkZXNjLmMKKyAq CSAgcm1nciBkZXNjcmlwdG9yIHJvdXRpbmVzIGZvciByZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1l c3NhZ2UuYworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxNS0yMDIyLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgor ICoJICBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKwordm9pZAorbG9naWNhbGRkbG1zZ19kZXNj KFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKK3sKKwljaGFyCSAgICpy ZWMgPSBYTG9nUmVjR2V0RGF0YShyZWNvcmQpOworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldElu Zm8ocmVjb3JkKSAmIH5YTFJfSU5GT19NQVNLOworCisJaWYgKGluZm8gPT0gWExPR19MT0dJQ0FM X0RETF9NRVNTQUdFKQorCXsKKwkJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqeGxyZWMgPSAoeGxf bG9naWNhbF9kZGxfbWVzc2FnZSAqKSByZWM7CisJCWNoYXIJICAgKnByZWZpeCA9IHhscmVjLT5t ZXNzYWdlOworCQljaGFyCSAgICptZXNzYWdlID0geGxyZWMtPm1lc3NhZ2UgKyB4bHJlYy0+cHJl Zml4X3NpemU7CisJCWNoYXIJICAgKnNlcCA9ICIiOworCisJCUFzc2VydChwcmVmaXhbeGxyZWMt PnByZWZpeF9zaXplXSAhPSAnXDAnKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInByZWZp eCBcIiVzXCI7IHBheWxvYWQgKCV6dSBieXRlcyk6ICIsCisJCQkJCQkgcHJlZml4LCB4bHJlYy0+ bWVzc2FnZV9zaXplKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJyZWxpZCAldSBjbWR0eXBl ICV1IiwgeGxyZWMtPnJlbGlkLCB4bHJlYy0+Y21kdHlwZSk7CisJCS8qIFdyaXRlIG1lc3NhZ2Ug cGF5bG9hZCBhcyBhIHNlcmllcyBvZiBoZXggYnl0ZXMgKi8KKwkJZm9yIChpbnQgY250ID0gMDsg Y250IDwgeGxyZWMtPm1lc3NhZ2Vfc2l6ZTsgY250KyspCisJCXsKKwkJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiJXMlMDJYIiwgc2VwLCAodW5zaWduZWQgY2hhcikgbWVzc2FnZVtjbnRdKTsKKwkJ CXNlcCA9ICIgIjsKKwkJfQorCX0KK30KKworY29uc3QgY2hhciAqCitsb2dpY2FsZGRsbXNnX2lk ZW50aWZ5KHVpbnQ4IGluZm8pCit7CisJaWYgKChpbmZvICYgflhMUl9JTkZPX01BU0spID09IFhM T0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJcmV0dXJuICJEREwgTUVTU0FHRSI7CisKKwlyZXR1 cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3Iu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYwppbmRleCA4ZWQ2OTI0Li4zMTJm MTE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcm1nci5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j bHVkZSAiZm1nci5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4u aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vZGVjb2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1 ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9wZ19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5j CmluZGV4IGMzNjVkZTMuLjk4OWM0OWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv cGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmMKQEAgLTEwMDUsNiArMTAwNSw3IEBAIEdldFB1YmxpY2F0aW9uKE9pZCBwdWJpZCkKIAlwdWIt PnB1YmFjdGlvbnMucHVidXBkYXRlID0gcHViZm9ybS0+cHVidXBkYXRlOwogCXB1Yi0+cHViYWN0 aW9ucy5wdWJkZWxldGUgPSBwdWJmb3JtLT5wdWJkZWxldGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1 YnRydW5jYXRlID0gcHViZm9ybS0+cHVidHJ1bmNhdGU7CisJcHViLT5wdWJhY3Rpb25zLnB1YmRk bCA9IHB1YmZvcm0tPnB1YmRkbDsKIAlwdWItPnB1YnZpYXJvb3QgPSBwdWJmb3JtLT5wdWJ2aWFy b290OwogCiAJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmln Z2VyLmMKaW5kZXggZjQ2Zjg2NC4uNWQ2M2FhZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuYwpAQCAtMzcsOCArMzcsMTEgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJwYXJzZXIvcGFyc2VfZnVuYy5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUg InJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdl LmgiCiAjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKICNpbmNsdWRlICJ0Y29wL3V0 aWxpdHkuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCiAjaW5jbHVkZSAidXRpbHMv YWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9ldnRj YWNoZS5oIgpAQCAtMTUzOSw2ICsxNTQyLDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0 KE5vZGUgKnBhcnNldHJlZSkKIAogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5jbGFzc0lkID0gUmVs YXRpb25SZWxhdGlvbklkOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCA9IEludmFs aWRPaWQ7CisJY29tbWFuZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgPSBmYWxzZTsKIAljb21tYW5k LT5kLmFsdGVyVGFibGUuc3ViY21kcyA9IE5JTDsKIAljb21tYW5kLT5wYXJzZXRyZWUgPSBjb3B5 T2JqZWN0KHBhcnNldHJlZSk7CiAKQEAgLTE1NzIsNyArMTU3Niw3IEBAIEV2ZW50VHJpZ2dlckFs dGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQpCiAgKiBpbnRlcm5hbGx5LCBzbyB0aGF0J3MgYWxs IHRoYXQgdGhpcyBjb2RlIG5lZWRzIHRvIGhhbmRsZSBhdCB0aGUgbW9tZW50LgogICovCiB2b2lk Ci1FdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVj dEFkZHJlc3MgYWRkcmVzcykKK0V2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5v ZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBib29sIHJld3JpdGUpCiB7CiAJTWVt b3J5Q29udGV4dCBvbGRjeHQ7CiAJQ29sbGVjdGVkQVRTdWJjbWQgKm5ld3N1YjsKQEAgLTE1OTIs NiArMTU5Niw3IEBAIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1 YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQogCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7 CiAJbmV3c3ViLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHN1YmNtZCk7CiAKKwljdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSBy ZXdyaXRlOwogCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0 ZXJUYWJsZS5zdWJjbWRzID0KIAkJbGFwcGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1 cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcywgbmV3c3ViKTsKIApAQCAtMjE3OSwz ICsyMTg0LDIyMCBAQCBzdHJpbmdpZnlfYWRlZnByaXZzX29ianR5cGUoT2JqZWN0VHlwZSBvYmp0 eXBlKQogCiAJcmV0dXJuICI/Pz8iOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiB9CisK Ky8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0CisgKgorICogRGVw YXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9u X2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlFdmVudFRy aWdnZXJEYXRhICp0cmlnZGF0YTsKKwljaGFyCQkqY29tbWFuZCA9IHBzcHJpbnRmKCJEcm9wIHRh YmxlIGNvbW1hbmQgc3RhcnQiKTsKKwlEcm9wU3RtdAkqc3RtdDsKKwlMaXN0Q2VsbAkqY2VsbDE7 CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1Is ICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwl0cmlnZGF0YSA9IChF dmVudFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKKwlzdG10CSA9IChEcm9wU3RtdCAq KSB0cmlnZGF0YS0+cGFyc2V0cmVlOworCisJLyogZXh0cmFjdCB0aGUgcmVsaWQgZnJvbSB0aGUg cGFyc2UgdHJlZSAqLworCWZvcmVhY2goY2VsbDEsIHN0bXQtPm9iamVjdHMpCisJeworCQljaGFy CXJlbHBlcnNpc3Q7CisJCU5vZGUJKm9iamVjdCA9IGxmaXJzdChjZWxsMSk7CisJCU9iamVjdEFk ZHJlc3MgYWRkcmVzczsKKwkJUmVsYXRpb24gcmVsYXRpb24gPSBOVUxMOworCisJCWFkZHJlc3Mg PSBnZXRfb2JqZWN0X2FkZHJlc3Moc3RtdC0+cmVtb3ZlVHlwZSwKKwkJCQkJCQkJCSBvYmplY3Qs CisJCQkJCQkJCQkgJnJlbGF0aW9uLAorCQkJCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCisJ CQkJCQkJCQkgdHJ1ZSk7CisKKwkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoYWRk cmVzcy5vYmplY3RJZCk7CisKKwkJLyoKKwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9y IGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4K KwkJICoKKwkJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVz IHNvIHRoYXQgdW5sb2dnZWQKKwkJICogdGFibGVzIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFs dGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcworCQkgKiBtYWtlcyBpdCBwb3NzaWJs ZSB0byBkaXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlCisJCSAq IGluY29taW5nIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgor CQkgKi8KKwkJaWYgKHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJeworCQkJ dGFibGVfY2xvc2UocmVsYXRpb24sIE5vTG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCUxv Z0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgYWRkcmVzcy5vYmplY3RJZCwgRENUX1RhYmxl RHJvcFN0YXJ0LAorCQkJCQkJCSBjb21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKworCQlp ZiAocmVsYXRpb24pCisJCQl0YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwl9CisJcmV0 dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFy c2VfdGFibGVfcmV3cml0ZQorICoKKyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSByZXdyaXRlIGNv bW1hbmQgYW5kIGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVf cmV3cml0ZShQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJCQkJcmVscGVyc2lzdDsKKwlDb2xs ZWN0ZWRDb21tYW5kICAgKmNtZDsKKwljaGFyCQkJICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFD QUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVk IGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCUFzc2VydChjbWQgJiYgY21kLT5kLmFsdGVyVGFi bGUucmV3cml0ZSk7CisKKwlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQu YWx0ZXJUYWJsZS5vYmplY3RJZCk7CisKKwkvKgorCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9n IGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJs ZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxl cyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxlcworCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFs dGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxl IHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21p bmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkg Ki8KKwlpZiAocmVscGVyc2lzdCA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQlyZXR1cm4gUG9p bnRlckdldERhdHVtKE5VTEwpOworCisJLyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdB TCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNhbWUuICovCisJanNvbl9zdHJpbmcg PSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQpOworCisJaWYgKGpzb25fc3RyaW5nICE9IE5V TEwpCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLmFsdGVyVGFibGUu b2JqZWN0SWQsIERDVF9UYWJsZUFsdGVyLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3RybGVuKGpz b25fc3RyaW5nKSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKwor LyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kCisgKgorICogRGVwYXJz ZSB0aGUgZGRsIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2Rl cGFyc2VfZGRsX2NvbW1hbmRfZW5kKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTGlzdENlbGwgICAq bGM7CisJc2xpc3RfaXRlciAgaXRlcjsKKwlEZXBhcnNlZENvbW1hbmRUeXBlIHR5cGU7CisJT2lk IHJlbGlkOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9n KEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJZm9yZWFj aChsYywgY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kTGlzdCkKKwl7CisJCWNoYXIJ CQkJcmVscGVyc2lzdDsKKwkJQ29sbGVjdGVkQ29tbWFuZCAgICpjbWQgPSBsZmlyc3QobGMpOwor CQljaGFyCQkJICAgKmpzb25fc3RyaW5nOworCisJCS8qIFJld3JpdGUgRERMIGhhcyBiZWVuIGhh bmRsZWQgaW4gdGFibGVfcmV3cml0ZSB0cmlnZ2VyICovCisJCWlmIChjbWQtPmQuYWx0ZXJUYWJs ZS5yZXdyaXRlKQorCQkJY29udGludWU7CisKKwkJaWYgKGNtZC0+dHlwZSA9PSBTQ1RfU2ltcGxl ICYmCisJCQkhT2lkSXNWYWxpZChjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQpKQorCQkJ Y29udGludWU7CisKKwkJaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUYWJsZSkKKwkJeworCQkJ cmVsaWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZDsKKwkJCXR5cGUgPSBEQ1RfVGFibGVB bHRlcjsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE9ubHkgU0NUX1NpbXBsZSBmb3Igbm93ICov CisJCQlyZWxpZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKwkJCXR5cGUgPSBE Q1RfU2ltcGxlQ21kOworCQl9CisKKwkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2Uo cmVsaWQpOworCisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5k cyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJ CSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0 IHVubG9nZ2VkIHRhYmxlcworCQkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9u IHRoZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkJICogcG9zc2libGUgdG8gZGly ZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCQkg KiByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJ CWlmIChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCQljb250aW51ZTsKKwor CQkvKgorCQkgKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxv dyBkZWNvZGluZyBvZiB0aGUKKwkJICogc2FtZS4KKwkJICovCisJCWpzb25fc3RyaW5nID0gZGVw YXJzZV91dGlsaXR5X2NvbW1hbmQoY21kKTsKKworCQlpZiAoanNvbl9zdHJpbmcgPT0gTlVMTCkK KwkJCWNvbnRpbnVlOworCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgcmVsaWQs IHR5cGUsIGpzb25fc3RyaW5nLAorCQkJCQkJCSBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisJ fQorCisJc2xpc3RfZm9yZWFjaChpdGVyLCAmKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+U1FM RHJvcExpc3QpKQorCXsKKwkJdm9sYXRpbGUgU1FMRHJvcE9iamVjdCAqb2JqOworCQlEcm9wU3Rt dAkJCSAgICpzdG10OworCQlFdmVudFRyaWdnZXJEYXRhIAkgICAqdHJpZ2RhdGE7CisJCWNoYXIJ CQkJICAgKmNvbW1hbmQ7CisKKwkJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2lu Zm8tPmNvbnRleHQ7CisJCXN0bXQJID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7 CisKKwkJb2JqID0gc2xpc3RfY29udGFpbmVyKFNRTERyb3BPYmplY3QsIG5leHQsIGl0ZXIuY3Vy KTsKKworCQlpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJ0YWJsZSIsIDUpID09IDApCisJ CXsKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfdGFibGUob2JqLT5vYmppZGVudGl0eSwgc3Rt dC0+YmVoYXZpb3IpOworCisJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIG9iai0+ YWRkcmVzcy5vYmplY3RJZCwgRENUX1RhYmxlRHJvcEVuZCwKKwkJCQkJCQkJIGNvbW1hbmQsIHN0 cmxlbihjb21tYW5kKSArIDEpOworCQl9CisJCWVsc2UgaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0 eXBlLCAic2VxdWVuY2UiLCA4KSA9PSAwKQorCQl7CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9w X3NlcXVlbmNlKG9iai0+b2JqaWRlbnRpdHksIHN0bXQtPmJlaGF2aW9yKTsKKworCQkJTG9nTG9n aWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQsIERDVF9PYmpl Y3REcm9wLAorCQkJCQkJCQkgY29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisJCX0KKwkJ ZWxzZSBpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJzY2hlbWEiLCA2KSA9PSAwKQorCQl7 CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX3NjaGVtYShvYmotPm9iamlkZW50aXR5LCBzdG10 LT5iZWhhdmlvcik7CisKKwkJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgb2JqLT5h ZGRyZXNzLm9iamVjdElkLCBEQ1RfT2JqZWN0RHJvcCwKKwkJCQkJCQkJIGNvbW1hbmQsIHN0cmxl bihjb21tYW5kKSArIDEpOworCQl9CisJCWVsc2UgaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBl LCAiaW5kZXgiLCA2KSA9PSAwKQorCQl7CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2luZGV4 KG9iai0+b2JqaWRlbnRpdHksIHN0bXQtPmJlaGF2aW9yKTsKKworCQkJTG9nTG9naWNhbERETE1l c3NhZ2UoImRlcGFyc2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQsIERDVF9PYmplY3REcm9wLAor CQkJCQkJCQkgY29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisJCX0KKworCX0KKworCXJl dHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5jCmluZGV4IDhlNjQ1NzQuLjEyZDRiMmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1 YmxpY2F0aW9uY21kcy5jCkBAIC0zNywxMCArMzcsMTIgQEAKICNpbmNsdWRlICJjb21tYW5kcy9w dWJsaWNhdGlvbmNtZHMuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2Fk bWluLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9k ZUZ1bmNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUgInBh cnNlci9wYXJzZV9jb2xsYXRlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgi CisjaW5jbHVkZSAicGFyc2VyL3BhcnNlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgog I2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC05NSw2 ICs5Nyw3IEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAog CXB1YmFjdGlvbnMtPnB1YnVwZGF0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHViZGVsZXRlID0g dHJ1ZTsKIAlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJcHViYWN0aW9ucy0+cHVi ZGRsID0gZmFsc2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAKIAkv KiBQYXJzZSBvcHRpb25zICovCkBAIC0xNDEsNiArMTQ0LDggQEAgcGFyc2VfcHVibGljYXRpb25f b3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9 IHRydWU7CiAJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidHJ1bmNhdGUiKSA9PSAw KQogCQkJCQlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJCQkJZWxzZSBpZiAoc3Ry Y21wKHB1Ymxpc2hfb3B0LCAiZGRsIikgPT0gMCkKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRsID0g dHJ1ZTsKIAkJCQllbHNlCiAJCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9TWU5UQVhfRVJST1IpLApAQCAtNzQ5LDYgKzc1NCw1MyBAQCBDaGVja1B1YlJlbGF0aW9u Q29sdW1uTGlzdChMaXN0ICp0YWJsZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogfQogCiAv KgorICogQ3JlYXRlIGV2ZW50IHRyaWdnZXIgd2hpY2ggaXMgdXNlZCBmb3IgRERMIHJlcGxpY2F0 aW9uLgorICovCitzdGF0aWMgdm9pZAorQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcihjaGFy ICpldmVudG5hbWUsIENvbW1hbmRUYWcgKmNvbW1hbmRzLAorCQkJCQkJCSBpbnQgbmNvbW1hbmRz LCBPYmplY3RBZGRyZXNzIHB1YmFkZHJlc3MsCisJCQkJCQkJIE9pZCBwdWJvaWQpCit7CisJaW50 CQkJCQlpOworCUxpc3QJCQkgICAqdGFncyA9IE5JTDsKKwlPaWQJCQkJCXRyaWdnZXJfaWQ7CisJ T2JqZWN0QWRkcmVzcwkJcmVmZXJlbmNlZDsKKwlDcmVhdGVFdmVudFRyaWdTdG10ICpkZGxfdHJp Z2dlcjsKKwljaGFyCQkJCXRyaWdnZXJfbmFtZVtOQU1FREFUQUxFTl07CisJY2hhcgkJCQl0cmln Z2VyX2Z1bmNfbmFtZVtOQU1FREFUQUxFTl07CisJc3RhdGljIGNvbnN0IGNoYXIgICAqdHJpZ2dl cl9uYW1lX3ByZWZpeCA9ICJwZ19kZXBhcnNlX3RyaWdfJXNfJXUiOworCXN0YXRpYyBjb25zdCBj aGFyICAgKnRyaWdnZXJfZnVuY19wcmVmaXggPSAicHVibGljYXRpb25fZGVwYXJzZV8lcyI7CisK KwlkZGxfdHJpZ2dlciA9IG1ha2VOb2RlKENyZWF0ZUV2ZW50VHJpZ1N0bXQpOworCisJc25wcmlu dGYodHJpZ2dlcl9uYW1lLCBzaXplb2YodHJpZ2dlcl9uYW1lKSwgdHJpZ2dlcl9uYW1lX3ByZWZp eCwKKwkJCSBldmVudG5hbWUsIHB1Ym9pZCk7CisJc25wcmludGYodHJpZ2dlcl9mdW5jX25hbWUs IHNpemVvZih0cmlnZ2VyX2Z1bmNfbmFtZSksIHRyaWdnZXJfZnVuY19wcmVmaXgsCisJCQkgZXZl bnRuYW1lKTsKKworCWRkbF90cmlnZ2VyLT50cmlnbmFtZSA9IHBzdHJkdXAodHJpZ2dlcl9uYW1l KTsKKwlkZGxfdHJpZ2dlci0+ZXZlbnRuYW1lID0gZXZlbnRuYW1lOworCWRkbF90cmlnZ2VyLT5m dW5jbmFtZSA9IFN5c3RlbUZ1bmNOYW1lKHRyaWdnZXJfZnVuY19uYW1lKTsKKworCWZvciAoaSA9 IDA7IGkgPCBuY29tbWFuZHM7IGkrKykKKwl7CisJCVN0cmluZyAqdGFnID0gbWFrZVN0cmluZyhw c3RyZHVwKEdldENvbW1hbmRUYWdOYW1lKGNvbW1hbmRzW2ldKSkpOworCQl0YWdzID0gbGFwcGVu ZCh0YWdzLCB0YWcpOworCX0KKworCWRkbF90cmlnZ2VyLT53aGVuY2xhdXNlID0gbGlzdF9tYWtl MShtYWtlRGVmRWxlbSgidGFnIiwgKE5vZGUgKikgdGFncywgLTEpKTsKKworCXRyaWdnZXJfaWQg PSBDcmVhdGVFdmVudFRyaWdnZXIoZGRsX3RyaWdnZXIpOworCisJLyoKKwkgKiBSZWdpc3RlciB0 aGUgZXZlbnQgdHJpZ2dlcnMgYXMgaW50ZXJuYWxseSBkZXBlbmRlbnQgb24gdGhlCisJICogcHVi bGljYXRpb24uCisJICovCisJT2JqZWN0QWRkcmVzc1NldChyZWZlcmVuY2VkLCBFdmVudFRyaWdn ZXJSZWxhdGlvbklkLCB0cmlnZ2VyX2lkKTsKKwlyZWNvcmREZXBlbmRlbmN5T24oJnJlZmVyZW5j ZWQsICZwdWJhZGRyZXNzLCBERVBFTkRFTkNZX0lOVEVSTkFMKTsKK30KKworLyoKICAqIENyZWF0 ZSBuZXcgcHVibGljYXRpb24uCiAgKi8KIE9iamVjdEFkZHJlc3MKQEAgLTgyMCw2ICs4NzIsOCBA QCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9u U3RtdCAqc3RtdCkKIAkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGVsZXRlKTsKIAl2YWx1 ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0KIAkJQm9vbEdldERhdHVt KHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOworCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1 YmRkbCAtIDFdID0KKwkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRsKTsKIAl2YWx1ZXNb QW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ2aWFyb290IC0gMV0gPQogCQlCb29sR2V0RGF0dW0ocHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwogCkBAIC04ODIsNiArOTM2LDQ5IEBAIENyZWF0ZVB1 YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10 KQogCQl9CiAJfQogCisJLyoKKwkgKiBDcmVhdGUgYW4gZXZlbnQgdHJpZ2dlciB0byBhbGxvdyBs b2dnaW5nIG9mIERETCBzdGF0ZW1lbnRzLgorCSAqCisJICogVE9ETzogV2UgbmVlZCB0byBmaW5k IGEgYmV0dGVyIHN5bnRheCB0byBhbGxvdyByZXBsaWNhdGlvbiBvZiBEREwKKwkgKiBzdGF0ZW1l bnRzLgorCSAqCisJICogWFhYOiBUaGlzIGNvZGUgaXMganVzdCB0byBzaG93IHRoZSByZXBsaWNh dGlvbiBvZiBDUkVBVEUvQUxURVIvRFJPUAorCSAqIFRBQkxFIHdvcmtzLiBXZSBuZWVkIHRvIGVu aGFuY2UgdGhpcyBvbmNlIHRoZSBhcHByb2FjaCBmb3IgRERMCisJICogcmVwbGljYXRpb24gaXMg ZmluYWxpemVkLgorCSAqLworCWlmIChwdWJhY3Rpb25zLnB1YmRkbCkKKwl7CisJCUNvbW1hbmRU YWcJc3RhcnRfY29tbWFuZHNbXSA9IHtDTURUQUdfRFJPUF9UQUJMRX07CisJCUNvbW1hbmRUYWcJ cmV3cml0ZV9jb21tYW5kc1tdID0ge0NNRFRBR19BTFRFUl9UQUJMRX07CisKKwkJQ29tbWFuZFRh ZwllbmRfY29tbWFuZHNbXSA9IHsKKwkJCUNNRFRBR19EUk9QX1RBQkxFLAorCQkJQ01EVEFHX0NS RUFURV9UQUJMRSwKKwkJCUNNRFRBR19BTFRFUl9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfU0VR VUVOQ0UsCisJCQlDTURUQUdfQUxURVJfU0VRVUVOQ0UsCisJCQlDTURUQUdfRFJPUF9TRVFVRU5D RSwKKwkJCUNNRFRBR19DUkVBVEVfU0NIRU1BLAorCQkJQ01EVEFHX0FMVEVSX1NDSEVNQSwKKwkJ CUNNRFRBR19EUk9QX1NDSEVNQSwKKwkJCUNNRFRBR19DUkVBVEVfSU5ERVgsCisJCQlDTURUQUdf RFJPUF9JTkRFWCwKKwkJCUNNRFRBR19BTFRFUl9JTkRFWAorCQl9OworCisJCS8qIENyZWF0ZSB0 aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2 ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwgZW5kX2NvbW1hbmRzLAorCQkJCQkJCQkJIGxl bmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhl IGRkbF9jb21tYW5kX3N0YXJ0IGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2 ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfc3RhcnQiLCBzdGFydF9jb21tYW5kcywKKwkJCQkJCQkJ CSBsZW5ndGhvZihzdGFydF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVh dGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNh RXZlbnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKKwkJCQkJCQkJ CSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCX0KKwogCXRh YmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlJbnZva2VPYmplY3RQb3N0Q3Jl YXRlSG9vayhQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1Ym9pZCwgMCk7CkBAIC0xMDIyLDYgKzEx MTksOSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVy UHVibGljYXRpb25TdG10ICpzdG10LAogCiAJCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1 YnRydW5jYXRlIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CiAJ CXJlcGxhY2VzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IHRydWU7CisK KwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPSBCb29sR2V0RGF0dW0o cHViYWN0aW9ucy5wdWJkZGwpOworCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRk bCAtIDFdID0gdHJ1ZTsKIAl9CiAKIAlpZiAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2 ZW4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IGVlNDg0NzAuLmRkY2NlM2YgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC01MjE5LDcgKzUyMTksNyBAQCBBVEV4ZWNDbWQoTGlz dCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCSAqIFJlcG9ydCB0aGUgc3ViY29t bWFuZCB0byBpbnRlcmVzdGVkIGV2ZW50IHRyaWdnZXJzLgogCSAqLwogCWlmIChjbWQpCi0JCUV2 ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcyk7 CisJCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRk cmVzcywgdGFiLT5yZXdyaXRlKTsKIAogCS8qCiAJICogQnVtcCB0aGUgY29tbWFuZCBjb3VudGVy IHRvIGVuc3VyZSB0aGUgbmV4dCBzdWJjb21tYW5kIGluIHRoZSBzZXF1ZW5jZQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggYzRlMmZkZS4uZjNlZWI2NyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBA IG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMgPSBc CiAJZGVjb2RlLm8gXAorCWRkbG1lc3NhZ2Uub1wKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8g XAogCWxvZ2ljYWxmdW5jcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvZGRsbWVzc2FnZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZGxtZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5MzUyMwot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVz c2FnZS5jCkBAIC0wLDAgKzEsODYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbG1l c3NhZ2UuYworICoJICBMb2dpY2FsIERETCBtZXNzYWdlcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJ RklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdl LmMKKyAqCisgKiBOT1RFUworICoKKyAqIExvZ2ljYWwgRERMIG1lc3NhZ2VzIGFsbG93IFhMT0cg bG9nZ2luZyBvZiBEREwgY29tbWFuZCBzdHJpbmdzIHRoYXQKKyAqIGdldCBwYXNzZWQgdG8gdGhl IGxvZ2ljYWwgZGVjb2RpbmcgcGx1Z2luLiBJbiBub3JtYWwgWExPRyBwcm9jZXNzaW5nIHRoZXkK KyAqIGFyZSBzYW1lIGFzIE5PT1AuCisgKgorICogVW5saWtlIGdlbmVyaWMgbG9naWNhbCBtZXNz YWdlcywgdGhlc2UgRERMIG1lc3NhZ2VzIGhhdmUgb25seSB0cmFuc2FjdGlvbmFsCisgKiBtb2Rl Lk5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwgYXJlIHRyYW5zYWN0aW9uYWwuCisg KgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQg d2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4gdXNpbmcgaW4gYSBzYW1lIHdheSBh cyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNzYWdlIGNhcnJpZXMgcHJlZml4IHRv IGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBkZWNvZGluZworICogcGx1Z2lucy4g VGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBjYXJlIHRvIHVzZSB1bmlxdWUgcHJl Zml4LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZvciBleGFtcGxlIHRvIHVzZSB0aGUg bmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisK KyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNs dWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgi CisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCisj aW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2Rk bG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisvKgorICogV3JpdGUg bG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhMb2cuCisgKi8KK1hMb2dSZWNQdHIK K0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBh cnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlLCBzaXpl X3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlIHhscmVjOworCisJLyoKKwkgKiBF bnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHRyYW5zYWN0aW9uIGlkLgorCSAqLworCUFzc2VydChJc1Ry YW5zYWN0aW9uU3RhdGUoKSk7CisJR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKKworCXhscmVj LmRiSWQgPSBNeURhdGFiYXNlSWQ7CisJLyogdHJhaWxpbmcgemVybyBpcyBjcml0aWNhbDsgc2Vl IGxvZ2ljYWxkZGxtc2dfZGVzYyAqLworCXhscmVjLnByZWZpeF9zaXplID0gc3RybGVuKHByZWZp eCkgKyAxOworCXhscmVjLm1lc3NhZ2Vfc2l6ZSA9IHNpemU7CisJeGxyZWMucmVsaWQgPSByZWxp ZDsKKwl4bHJlYy5jbWR0eXBlID0gY21kdHlwZTsKKworCVhMb2dCZWdpbkluc2VydCgpOworCVhM b2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBTaXplT2ZMb2dpY2FsRERMTWVzc2FnZSk7 CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgcHJlZml4KSwgeGxyZWMucHJl Zml4X3NpemUpOworCVhMb2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShjaGFyICosIG1lc3NhZ2Up LCBzaXplKTsKKworCS8qIGFsbG93IG9yaWdpbiBmaWx0ZXJpbmcgKi8KKwlYTG9nU2V0UmVjb3Jk RmxhZ3MoWExPR19JTkNMVURFX09SSUdJTik7CisKKwlyZXR1cm4gWExvZ0luc2VydChSTV9MT0dJ Q0FMRERMTVNHX0lELCBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpOworfQorCisvKgorICogUmVk byBpcyBiYXNpY2FsbHkganVzdCBub29wIGZvciBsb2dpY2FsIGRlY29kaW5nIGRkbCBtZXNzYWdl cy4KKyAqLwordm9pZAorbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3Jk KQoreworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAmIH5YTFJfSU5GT19N QVNLOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQllbG9nKFBB TklDLCAibG9naWNhbGRkbG1zZ19yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUiLCBpbmZvKTsKKwor CS8qIFRoaXMgaXMgb25seSBpbnRlcmVzdGluZyBmb3IgbG9naWNhbCBkZWNvZGluZywgc2VlIGRl Y29kZS5jLiAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9kZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKaW5k ZXggYWEyNDI3Yi4uMjU1YjBlYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2Rl Y29kZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2Rl Y29kZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgog I2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNjA0LDYgKzYwNSw0NiBAQCBsb2dp Y2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZm ZXIgKmJ1ZikKIH0KIAogLyoKKyAqIEhhbmRsZSBybWdyIExPR0lDQUxERExNU0dfSUQgcmVjb3Jk cyBmb3IgRGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KKyAqLwordm9pZAorbG9naWNh bGRkbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVm ZmVyICpidWYpCit7CisJU25hcEJ1aWxkICAqYnVpbGRlciA9IGN0eC0+c25hcHNob3RfYnVpbGRl cjsKKwlYTG9nUmVhZGVyU3RhdGUgKnIgPSBidWYtPnJlY29yZDsKKwlUcmFuc2FjdGlvbklkIHhp ZCA9IFhMb2dSZWNHZXRYaWQocik7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyKSAm IH5YTFJfSU5GT19NQVNLOworCVJlcE9yaWdpbklkIG9yaWdpbl9pZCA9IFhMb2dSZWNHZXRPcmln aW4ocik7CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqbWVzc2FnZTsKKworCWlmIChpbmZvICE9 IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgUk1f TE9HSUNBTERETE1TR19JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZvKTsKKworCVJlb3JkZXJCdWZm ZXJQcm9jZXNzWGlkKGN0eC0+cmVvcmRlciwgWExvZ1JlY0dldFhpZChyKSwgYnVmLT5vcmlncHRy KTsKKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBzbmFwc2hvdCBvciB3ZSBhcmUganVzdCBm YXN0LWZvcndhcmRpbmcsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgaW4gZGVjb2RpbmcgZGRsIG1l c3NhZ2VzLgorCSAqLworCWlmIChTbmFwQnVpbGRDdXJyZW50U3RhdGUoYnVpbGRlcikgPCBTTkFQ QlVJTERfRlVMTF9TTkFQU0hPVCB8fAorCQljdHgtPmZhc3RfZm9yd2FyZCkKKwkJcmV0dXJuOwor CisJbWVzc2FnZSA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIFhMb2dSZWNHZXREYXRhKHIp OworCisJaWYgKG1lc3NhZ2UtPmRiSWQgIT0gY3R4LT5zbG90LT5kYXRhLmRhdGFiYXNlIHx8CisJ CUZpbHRlckJ5T3JpZ2luKGN0eCwgb3JpZ2luX2lkKSkKKwkJcmV0dXJuOworCisJaWYgKFNuYXBC dWlsZFByb2Nlc3NDaGFuZ2UoYnVpbGRlciwgeGlkLCBidWYtPm9yaWdwdHIpKQorCQlSZW9yZGVy QnVmZmVyUXVldWVERExNZXNzYWdlKGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPmVuZHB0ciwKKwkJ CQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlLCAvKiBmaXJzdCBwYXJ0IG9mIG1lc3NhZ2UgaXMgcHJl Zml4ICovCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZV9zaXplLAorCQkJCQkJCQkJIG1lc3Nh Z2UtPm1lc3NhZ2UgKyBtZXNzYWdlLT5wcmVmaXhfc2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdlLT5y ZWxpZCwgbWVzc2FnZS0+Y21kdHlwZSk7Cit9CisKKy8qCiAgKiBDb25zb2xpZGF0ZWQgY29tbWl0 IHJlY29yZCBoYW5kbGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZm9ybSBvZiBjb21taXQKICAq IHJlY29yZHMuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9sb2dpY2FsLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwpp bmRleCA2MjVhN2Y0Li45ODk2OWM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2xvZ2ljYWwuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlv bi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVk ZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5o IgpAQCAtNzMsNiArNzQsMTAgQEAgc3RhdGljIHZvaWQgdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9y ZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogc3RhdGljIHZvaWQgbWVz c2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFs LAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0 IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3Jk ZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCSAgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkgIE9pZCByZWxp ZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9z aXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyogc3RyZWFtaW5nIGNhbGxiYWNrcyAqLwog c3RhdGljIHZvaWQgc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKQEAgLTkwLDYgKzk1LDExIEBAIHN0YXRpYyB2b2lkIHN0 cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuCiBzdGF0aWMgdm9pZCBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJC dWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgIFhMb2dSZWNQ dHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkJCSAgY29uc3QgY2hh ciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0 aWMgdm9pZCBzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hl LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9s c24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgT2lkIHJlbGlk LCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJIFNpemUgbWVzc2FnZV9z aXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV90cnVuY2F0ZV9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJ CQkJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sIFJlb3JkZXJC dWZmZXJDaGFuZ2UgKmNoYW5nZSk7CiAKQEAgLTIxOCw2ICsyMjgsNyBAQCBTdGFydHVwRGVjb2Rp bmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAljdHgtPnJlb3JkZXItPmFw cGx5X3RydW5jYXRlID0gdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPmNvbW1p dCA9IGNvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+bWVzc2FnZSA9IG1lc3NhZ2Vf Y2Jfd3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPmRkbG1lc3NhZ2UgPSBkZGxtZXNzYWdlX2NiX3dy YXBwZXI7CiAKIAkvKgogCSAqIFRvIHN1cHBvcnQgc3RyZWFtaW5nLCB3ZSByZXF1aXJlIHN0YXJ0 L3N0b3AvYWJvcnQvY29tbWl0L2NoYW5nZQpAQCAtMjM0LDYgKzI0NSw3IEBAIFN0YXJ0dXBEZWNv ZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCQkoY3R4LT5jYWxsYmFj a3Muc3RyZWFtX2NvbW1pdF9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFt X2NoYW5nZV9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX21lc3NhZ2Vf Y2IgIT0gTlVMTCkgfHwKKwkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdlX2NiICE9 IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fdHJ1bmNhdGVfY2IgIT0gTlVMTCk7 CiAKIAkvKgpAQCAtMjUxLDYgKzI2Myw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAq b3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2NvbW1pdCA9IHN0 cmVhbV9jb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9jaGFuZ2UgPSBz dHJlYW1fY2hhbmdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fbWVzc2FnZSA9 IHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5zdHJlYW1fZGRsbWVz c2FnZSA9IHN0cmVhbV9kZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJl YW1fdHJ1bmNhdGUgPSBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAogCkBAIC0xMjIxLDYg KzEyMzQsNDQgQEAgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiB9CiAKIHN0YXRpYyB2b2lkCitkZGxtZXNzYWdlX2NiX3dyYXBw ZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJICBY TG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJl bGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSAgU2l6ZSBtZXNzYWdlX3Np emUsCisJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNhbGxiYWNrU3Rh dGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlBc3NlcnQo IWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCWlmIChjdHgtPmNhbGxiYWNrcy5kZGxtZXNzYWdlX2Ni ID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRoZSBl cnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxiYWNr X25hbWUgPSAiZGRsbWVzc2FnZSI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9s c247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNr OworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2 aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJj YWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMg PSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFs aWRUcmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwor CS8qIGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tz LmRkbG1lc3NhZ2VfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLCBjbWR0 eXBlLAorCQkJCQkJCQkgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJy b3IgY29udGV4dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5w cmV2aW91czsKK30KKworc3RhdGljIHZvaWQKIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3Jk ZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQlYTG9nUmVjUHRy IGZpcnN0X2xzbikKIHsKQEAgLTE1MzYsNiArMTU4Nyw0OCBAQCBzdHJlYW1fbWVzc2FnZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9CiAK IHN0YXRpYyB2b2lkCitzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIg KmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2Fn ZV9sc24sCisJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENv bW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCSBj b25zdCBjaGFyICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNh Y2hlLT5wcml2YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlF cnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0X2Zv cndhcmQpOworCisJLyogV2UncmUgb25seSBzdXBwb3NlZCB0byBjYWxsIHRoaXMgd2hlbiBzdHJl YW1pbmcgaXMgc3VwcG9ydGVkLiAqLworCUFzc2VydChjdHgtPnN0cmVhbWluZyk7CisKKwkvKiB0 aGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsICovCisJaWYgKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9k ZGxtZXNzYWdlX2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBp bmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0 YXRlLmNhbGxiYWNrX25hbWUgPSAic3RyZWFtX2RkbG1lc3NhZ2UiOworCXN0YXRlLnJlcG9ydF9s b2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0X3Bs dWdpbl9lcnJvcl9jYWxsYmFjazsKKwllcnJjYWxsYmFjay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7 CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2Nv bnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRlICovCisJ Y3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsKKwljdHgtPndyaXRlX3hpZCA9IHR4biAhPSBOVUxM ID8gdHhuLT54aWQgOiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwljdHgtPndyaXRlX2xvY2F0aW9u ID0gbWVzc2FnZV9sc247CisKKwkvKiBkbyB0aGUgYWN0dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sg Ki8KKwljdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsbWVzc2FnZV9jYihjdHgsIHR4biwgbWVzc2Fn ZV9sc24sIHByZWZpeCwgcmVsaWQsCisJCQkJCQkJCQkJY21kdHlwZSwgbWVzc2FnZV9zaXplLCBt ZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVycm9yX2Nv bnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30KKworc3RhdGljIHZvaWQKIHN0 cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25z W10sCiAJCQkJCQkgICBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggZmY4NTEzZS4uZWFlYzAzMSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtNjQwLDggKzY0MCw4IEBAIGxvZ2lj YWxyZXBfcmVhZF90cnVuY2F0ZShTdHJpbmdJbmZvIGluLAogICovCiB2b2lkCiBsb2dpY2FscmVw X3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVj UHRyIGxzbiwKLQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwg U2l6ZSBzeiwKLQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKQorCQkJCQkJIGJvb2wgdHJhbnNh Y3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIg Km1lc3NhZ2UpCiB7CiAJdWludDgJCWZsYWdzID0gMDsKIApAQCAtNjYzLDYgKzY2Myw1MiBAQCBs b2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlk LCBYTG9nUmVjUHRyIGxzbiwKIH0KIAogLyoKKyAqIFJlYWQgRERMIE1FU1NBR0UgZnJvbSBzdHJl YW0KKyAqLworY2hhciAqCitsb2dpY2FscmVwX3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGlu LCBYTG9nUmVjUHRyICpsc24sCisJCQkJCQkgICBjb25zdCBjaGFyICoqcHJlZml4LAorCQkJCQkJ ICAgU2l6ZSAqc3opCit7CisJdWludDggZmxhZ3M7CisJY2hhciAqbXNnOworCisJLy9UT0RPIGRv dWJsZSBjaGVjayB3aGVuIGRvIHdlIG5lZWQgdG8gZ2V0IFRyYW5zYWN0aW9uSWQuCisKKwlmbGFn cyA9IHBxX2dldG1zZ2ludChpbiwgMSk7CisJaWYgKGZsYWdzICE9IDApCisJCWVsb2coRVJST1Is ICJ1bnJlY29nbml6ZWQgZmxhZ3MgJXUgaW4gZGRsIG1lc3NhZ2UiLCBmbGFncyk7CisJKmxzbiA9 IHBxX2dldG1zZ2ludDY0KGluKTsKKwkqcHJlZml4ID0gcHFfZ2V0bXNnc3RyaW5nKGluKTsKKwkq c3ogPSBwcV9nZXRtc2dpbnQoaW4sIDQpOworCW1zZyA9IChjaGFyICopIHBxX2dldG1zZ2J5dGVz KGluLCAqc3opOworCisJcmV0dXJuIG1zZzsKK30KKworLyoKKyAqIFdyaXRlIERETCBNRVNTQUdF IHRvIHN0cmVhbQorICovCit2b2lkCitsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3RyaW5n SW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQljb25z dCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJdWludDgJ CWZsYWdzID0gMDsKKworCXBxX3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NB R0UpOworCisJLyogdHJhbnNhY3Rpb24gSUQgKGlmIG5vdCB2YWxpZCwgd2UncmUgbm90IHN0cmVh bWluZykgKi8KKwlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwkJcHFfc2VuZGludDMy KG91dCwgeGlkKTsKKworCXBxX3NlbmRpbnQ4KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2NChv dXQsIGxzbik7CisJcHFfc2VuZHN0cmluZyhvdXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMyKG91 dCwgc3opOworCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6KTsKK30KKworLyoKICAqIFdy aXRlIHJlbGF0aW9uIGRlc2NyaXB0aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCiB2b2lk CkBAIC0xMjE4LDYgKzEyNjQsOCBAQCBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2FsUmVw TXNnVHlwZSBhY3Rpb24pCiAJCQlyZXR1cm4gIlRZUEUiOwogCQljYXNlIExPR0lDQUxfUkVQX01T R19NRVNTQUdFOgogCQkJcmV0dXJuICJNRVNTQUdFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0df RERMTUVTU0FHRToKKwkJCXJldHVybiAiRERMIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfQkVH SU5fUFJFUEFSRToKIAkJCXJldHVybiAiQkVHSU4gUFJFUEFSRSI7CiAJCWNhc2UgTE9HSUNBTF9S RVBfTVNHX1BSRVBBUkU6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVv cmRlcmJ1ZmZlci5jCmluZGV4IDhkYTVmOTAuLjM0NmUxOWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC05NCw2ICs5NCw3IEBACiAj aW5jbHVkZSAibGliL2JpbmFyeWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3Jk ZXJidWZmZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCkBAIC01MTIsNiArNTEz LDE0IEBAIFJlb3JkZXJCdWZmZXJSZXR1cm5DaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3Jk ZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEubXNnLm1lc3Nh Z2UpOwogCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTlVMTDsKIAkJCWJyZWFrOworCQlj YXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJaWYgKGNoYW5nZS0+ZGF0 YS5kZGxtc2cucHJlZml4ICE9IE5VTEwpCisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1zZy5w cmVmaXgpOworCQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBOVUxMOworCQkJaWYgKGNo YW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0 YS5kZGxtc2cubWVzc2FnZSk7CisJCQljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgPSBOVUxM OworCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoK IAkJCWlmIChjaGFuZ2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucykKIAkJCQlwZnJlZShjaGFu Z2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucyk7CkBAIC04NjcsNiArODc2LDM2IEBAIFJlb3Jk ZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlk LAogfQogCiAvKgorICogQSB0cmFuc2FjdGlvbmFsIERETCBtZXNzYWdlIGlzIHF1ZXVlZCB0byBi ZSBwcm9jZXNzZWQgdXBvbiBjb21taXQuCisgKi8KK3ZvaWQKK1Jlb3JkZXJCdWZmZXJRdWV1ZURE TE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCSBY TG9nUmVjUHRyIGxzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCSBTaXplIG1lc3NhZ2Vf c2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSwKKwkJCQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENv bW1hbmRUeXBlIGNtZHR5cGUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVJlb3Jk ZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsKKworCUFzc2VydCh4aWQgIT0gSW52YWxpZFRyYW5zYWN0 aW9uSWQpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhyYi0+Y29udGV4 dCk7CisKKwljaGFuZ2UgPSBSZW9yZGVyQnVmZmVyR2V0Q2hhbmdlKHJiKTsKKwljaGFuZ2UtPmFj dGlvbiA9IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOworCWNoYW5nZS0+ZGF0YS5k ZGxtc2cucHJlZml4ID0gcHN0cmR1cChwcmVmaXgpOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cucmVs aWQgPSByZWxpZDsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUgPSBjbWR0eXBlOworCWNo YW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplID0gbWVzc2FnZV9zaXplOworCWNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZSA9IHBhbGxvYyhtZXNzYWdlX3NpemUpOworCW1lbWNweShjaGFu Z2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsIG1lc3NhZ2UsIG1lc3NhZ2Vfc2l6ZSk7CisKKwlSZW9y ZGVyQnVmZmVyUXVldWVDaGFuZ2UocmIsIHhpZCwgbHNuLCBjaGFuZ2UsIGZhbHNlKTsKKworCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoKICAqIEFzc2VydFRYTkxz bk9yZGVyCiAgKgkJVmVyaWZ5IExTTiBvcmRlcmluZyBvZiB0cmFuc2FjdGlvbiBsaXN0cyBpbiB0 aGUgcmVvcmRlcmJ1ZmZlcgogICoKQEAgLTE5NTgsNiArMTk5NywyOSBAQCBSZW9yZGVyQnVmZmVy QXBwbHlNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9 CiAKIC8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhOIGZv ciBhcHBseWluZyB0aGUgRERMIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorUmVv cmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAorCQkJCQkJCSBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UsIGJvb2wgc3Ry ZWFtaW5nKQoreworCWlmIChzdHJlYW1pbmcpCisJCXJiLT5zdHJlYW1fZGRsbWVzc2FnZShyYiwg dHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4LAor CQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0 YS5kZGxtc2cuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9z aXplLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsKKwllbHNlCisJCXJi LT5kZGxtZXNzYWdlKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEu ZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJCQkJ ICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRs bXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsK K30KKworLyoKICAqIEZ1bmN0aW9uIHRvIHN0b3JlIHRoZSBjb21tYW5kIGlkIGFuZCBzbmFwc2hv dCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CiAgKiBzdHJlYW0gc28gdGhhdCB3ZSBjYW4gcmV1 c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGluZyB0aGUgbmV4dCBzdHJlYW0uCiAgKi8KQEAgLTIzMzUs NiArMjM5NywxMCBAQCBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTihSZW9yZGVyQnVmZmVyICpyYiwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKHJi LCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKIAkJCQkJYnJlYWs7CiAKKwkJCQljYXNlIFJFT1JE RVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlERExN ZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKKwkJCQkJYnJlYWs7CisKIAkJCQlj YXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQkJCS8qIEV4ZWN1dGUg dGhlIGludmFsaWRhdGlvbiBtZXNzYWdlcyBsb2NhbGx5ICovCiAJCQkJCVJlb3JkZXJCdWZmZXJF eGVjdXRlSW52YWxpZGF0aW9ucyhjaGFuZ2UtPmRhdGEuaW52YWwubmludmFsaWRhdGlvbnMsCkBA IC0zNzEwLDYgKzM3NzYsNDAgQEAgUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZUNoYW5nZShSZW9yZGVy QnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiAJCQkJYnJlYWs7CiAJCQl9CisJ CWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJY2hhcgkg ICAqZGF0YTsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRs bXNnLnByZWZpeCkgKyAxOworCisJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEu ZGRsbXNnLm1lc3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihPaWQpICsg c2l6ZW9mKGludCkgKyBzaXplb2YoU2l6ZSk7CisJCQkJUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZVJl c2VydmUocmIsIHN6KTsKKworCQkJCWRhdGEgPSAoKGNoYXIgKikgcmItPm91dGJ1ZikgKyBzaXpl b2YoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UpOworCisJCQkJLyogbWlnaHQgaGF2ZSBiZWVuIHJl YWxsb2NhdGVkIGFib3ZlICovCisJCQkJb25kaXNrID0gKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdl ICopIHJiLT5vdXRidWY7CisKKwkJCQkvKiB3cml0ZSB0aGUgcHJlZml4LCByZWxpZCBhbmQgY21k dHlwZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJnByZWZpeF9zaXpl LCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShk YXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEg Kz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsbXNnLmNt ZHR5cGUsIHNpemVvZihpbnQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCW1lbWNw eShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgcHJlZml4X3NpemUp OworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisKKwkJCQkvKiB3cml0ZSB0aGUgbWVzc2FnZSBp bmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxt c2cubWVzc2FnZV9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUp OworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsCisJCQkJCSAg IGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplKTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplOworCisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgUkVP UkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCXsKIAkJCQljaGFyCSAgICpkYXRh OwpAQCAtNDAyNCw2ICs0MTI0LDE1IEBAIFJlb3JkZXJCdWZmZXJDaGFuZ2VTaXplKFJlb3JkZXJC dWZmZXJDaGFuZ2UgKmNoYW5nZSkKIAogCQkJCWJyZWFrOwogCQkJfQorCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplID0g c3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KSArIDE7CisKKwkJCQlzeiArPSBwcmVm aXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplICsKKwkJCQkJc2l6ZW9m KFNpemUpICsgc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KTsKKworCQkJ CWJyZWFrOworCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046 CiAJCQl7CiAJCQkJc3ogKz0gc2l6ZW9mKFNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UpICoKQEAg LTQyODIsOCArNDM5MSw3IEBAIFJlb3JkZXJCdWZmZXJSZXN0b3JlQ2hhbmdlKFJlb3JkZXJCdWZm ZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJLyogcmVhZCBwcmVmaXggKi8KIAkJ CQltZW1jcHkoJnByZWZpeF9zaXplLCBkYXRhLCBzaXplb2YoU2l6ZSkpOwogCQkJCWRhdGEgKz0g c2l6ZW9mKFNpemUpOwotCQkJCWNoYW5nZS0+ZGF0YS5tc2cucHJlZml4ID0gTWVtb3J5Q29udGV4 dEFsbG9jKHJiLT5jb250ZXh0LAotCQkJCQkJCQkJCQkJCQkJIHByZWZpeF9zaXplKTsKKwkJCQlj aGFuZ2UtPmRhdGEubXNnLnByZWZpeCA9IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+Y29udGV4dCwg cHJlZml4X3NpemUpOwogCQkJCW1lbWNweShjaGFuZ2UtPmRhdGEubXNnLnByZWZpeCwgZGF0YSwg cHJlZml4X3NpemUpOwogCQkJCUFzc2VydChjaGFuZ2UtPmRhdGEubXNnLnByZWZpeFtwcmVmaXhf c2l6ZSAtIDFdID09ICdcMCcpOwogCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CkBAIC00Mjk5LDYg KzQ0MDcsMzMgQEAgUmVvcmRlckJ1ZmZlclJlc3RvcmVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAogCQkJCWJyZWFrOwogCQkJfQorCQljYXNlIFJFT1JE RVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXpl OworCisJCQkJLyogcmVhZCBwcmVmaXggKi8KKwkJCQltZW1jcHkoJnByZWZpeF9zaXplLCBkYXRh LCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweSgm Y2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwgZGF0YSwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEg Kz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUs IGRhdGEsIHNpemVvZihpbnQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCWNoYW5n ZS0+ZGF0YS5kZGxtc2cucHJlZml4ID0gTWVtb3J5Q29udGV4dEFsbG9jKHJiLT5jb250ZXh0LCBw cmVmaXhfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4LCBkYXRh LCBwcmVmaXhfc2l6ZSk7CisJCQkJQXNzZXJ0KGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4W3By ZWZpeF9zaXplIC0gMV0gPT0gJ1wwJyk7CisJCQkJZGF0YSArPSBwcmVmaXhfc2l6ZTsKKworCQkJ CS8qIHJlYWQgdGhlIG1lc3NhZ2UgKi8KKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5tc2cubWVz c2FnZV9zaXplLCBkYXRhLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUp OworCQkJCWNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSA9IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+ Y29udGV4dCwKKwkJCQkJCQkJCQkJCQkJCSAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUp OworCQkJCW1lbWNweShjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UsIGRhdGEsCisJCQkJCSAgIGNo YW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5t c2cubWVzc2FnZV9zaXplOworCisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZG RVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCXsKIAkJCQlTaXplCQlpbnZhbF9zaXplID0gc2l6 ZW9mKFNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UpICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3dvcmtlci5jCmluZGV4IDM4ZTNiMWMuLjJjNjY3YmIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMTU2LDYgKzE1Niw3IEBACiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0 aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgInBhcnNlci9hbmFseXplLmgiCiAjaW5jbHVk ZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlci5oIgogI2luY2x1ZGUg InBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCkBAIC0xNzksNyArMTgwLDEwIEBACiAjaW5jbHVkZSAi c3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5jbHVk ZSAidGNvcC9wcXVlcnkuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAi dGNvcC91dGlsaXR5LmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9jYXRjYWNoZS5oIgpAQCAtMjQ2Myw2ICsyNDY3 LDIzMCBAQCBhcHBseV9oYW5kbGVfdHJ1bmNhdGUoU3RyaW5nSW5mbyBzKQogCWVuZF9yZXBsaWNh dGlvbl9zdGVwKCk7CiB9CiAKKy8qIFJlbW92ZSB0aGUgZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhl IGNvbW1hbmQgKi8KK3N0YXRpYyB2b2lkCitwcmVwcm9jZXNzX2NyZWF0ZV90YWJsZShSYXdTdG10 ICpjb21tYW5kKQoreworCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKworCWNvbW1hbmRUYWcgPSBD cmVhdGVDb21tYW5kVGFnKChOb2RlICopY29tbWFuZCk7CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcp CisJeworCQljYXNlIENNRFRBR19DUkVBVEVfVEFCTEVfQVM6CisJCWNhc2UgQ01EVEFHX1NFTEVD VF9JTlRPOgorCQkJeworCQkJCUNyZWF0ZVRhYmxlQXNTdG10ICpjYXN0bXQgPSAoQ3JlYXRlVGFi bGVBc1N0bXQgKikgY29tbWFuZC0+c3RtdDsKKwkJCQlpZiAoY2FzdG10LT5vYmp0eXBlID09IE9C SkVDVF9UQUJMRSkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRhdGEg cG9wdWxhdGlvbiB0byBhdm9pZCBkYXRhCisJCQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEgc2hv dWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0aGUKKwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQuCisJ CQkJCSAqLworCQkJCQljYXN0bXQtPmludG8tPnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9 CisJCQlicmVhazsKKwkJY2FzZSBDTURUQUdfU0VMRUNUOgorCQkJeworCQkJCVNlbGVjdFN0bXQg KnNzdG10ID0gKFNlbGVjdFN0bXQgKikgY29tbWFuZC0+c3RtdDsKKworCQkJCWlmIChzc3RtdC0+ aW50b0NsYXVzZSAhPSBOVUxMKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tpcHBp bmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5jeS4g RGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5z dGVhZC4KKwkJCQkJICovCisJCQkJCXNzdG10LT5pbnRvQ2xhdXNlLT5za2lwRGF0YSA9IHRydWU7 CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisv KgorICogSGFuZGxlIENSRUFURSBUQUJMRSBjb21tYW5kCisgKgorICogQ2FsbCBBZGRTdWJzY3Jp cHRpb25SZWxTdGF0ZSBmb3IgQ1JFQVRFIFRBQkVMIGNvbW1hbmQgdG8gc2V0IHRoZSByZWxzdGF0 ZSB0bworICogU1VCUkVMX1NUQVRFX1JFQURZIHNvIERNTCBjaGFuZ2VzIG9uIHRoaXMgbmV3IHRh YmxlIGNhbiBiZSByZXBsaWNhdGVkIHdpdGhvdXQKKyAqIGhhdmluZyB0byBtYW51YWxseSBydW4g ImFsdGVyIHN1YnNjcmlwdGlvbiAuLi4gcmVmcmVzaCBwdWJsaWNhdGlvbiIKKyAqLworc3RhdGlj IHZvaWQKK2hhbmRsZV9jcmVhdGVfdGFibGUoUmF3U3RtdCAqY29tbWFuZCkKK3sKKwlDb21tYW5k VGFnCWNvbW1hbmRUYWc7CisJUmFuZ2VWYXIJICpydiA9IE5VTEw7CisJT2lkCQkJcmVsaWQ7CisJ T2lkCQkJcmVsbmFtZXNwYWNlID0gSW52YWxpZE9pZDsKKwljaGFyIAkJICpzY2hlbWFuYW1lID0g TlVMTDsKKwljaGFyCQkgKnJlbG5hbWUgPSBOVUxMOworCisJY29tbWFuZFRhZyA9IENyZWF0ZUNv bW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJewor CQljYXNlIENNRFRBR19DUkVBVEVfVEFCTEU6CisJCQl7CisJCQkJQ3JlYXRlU3RtdCAqY3N0bXQg PSAoQ3JlYXRlU3RtdCAqKSBjb21tYW5kLT5zdG10OworCQkJCXJ2ID0gY3N0bXQtPnJlbGF0aW9u OworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKKwlpZiAoIXJ2 KQorCQlyZXR1cm47CisKKwlzY2hlbWFuYW1lID0gcnYtPnNjaGVtYW5hbWU7CisJcmVsbmFtZSA9 IHJ2LT5yZWxuYW1lOworCisJaWYgKHNjaGVtYW5hbWUgIT0gTlVMTCkKKwkJcmVsbmFtZXNwYWNl ID0gZ2V0X25hbWVzcGFjZV9vaWQoc2NoZW1hbmFtZSwgZmFsc2UpOworCisJaWYgKHJlbG5hbWVz cGFjZSAhPSBJbnZhbGlkT2lkKQorCQlyZWxpZCA9IGdldF9yZWxuYW1lX3JlbGlkKHJlbG5hbWUs IHJlbG5hbWVzcGFjZSk7CisJZWxzZQorCQlyZWxpZCA9IFJlbG5hbWVHZXRSZWxpZChyZWxuYW1l KTsKKworCWlmIChyZWxpZCAhPSBJbnZhbGlkT2lkKQorCXsKKwkJQWRkU3Vic2NyaXB0aW9uUmVs U3RhdGUoTXlTdWJzY3JpcHRpb24tPm9pZCwgcmVsaWQsCisJCQkJCQkJCVNVQlJFTF9TVEFURV9S RUFEWSwKKwkJCQkJCQkJSW52YWxpZFhMb2dSZWNQdHIpOworCQllcmVwb3J0KERFQlVHMSwKKwkJ CQkoZXJybXNnX2ludGVybmFsKCJ0YWJsZSBcIiVzXCIgYWRkZWQgdG8gc3Vic2NyaXB0aW9uIFwi JXNcIiIsCisJCQkJCQkJCSByZWxuYW1lLCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVfZGRsKFN0cmluZ0luZm8gcykKK3sKKwlYTG9n UmVjUHRyIGxzbjsKKwljb25zdCBjaGFyICpwcmVmaXggPSBOVUxMOworCWNoYXIgKm1lc3NhZ2Ug PSBOVUxMOworCWNoYXIJICAgKmRkbF9jb21tYW5kOworCVNpemUJCXN6OworCUxpc3QJICAgKnBh cnNldHJlZV9saXN0OworCUxpc3RDZWxsICAgKnBhcnNldHJlZV9pdGVtOworCURlc3RSZWNlaXZl ciAqcmVjZWl2ZXI7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCWNvbnN0IGNoYXIgKnNh dmVfZGVidWdfcXVlcnlfc3RyaW5nID0gZGVidWdfcXVlcnlfc3RyaW5nOworCisJbWVzc2FnZSA9 IGxvZ2ljYWxyZXBfcmVhZF9kZGxtZXNzYWdlKHMsICZsc24sICZwcmVmaXgsICZzeik7CisKKwkv KiBNYWtlIHN1cmUgd2UgYXJlIGluIGEgdHJhbnNhY3Rpb24gY29tbWFuZCAqLworCWJlZ2luX3Jl cGxpY2F0aW9uX3N0ZXAoKTsKKworCWRkbF9jb21tYW5kID0gZGRsX2RlcGFyc2VfanNvbl90b19z dHJpbmcobWVzc2FnZSk7CisJZGVidWdfcXVlcnlfc3RyaW5nID0gZGRsX2NvbW1hbmQ7CisKKwkv KiBEZXN0Tm9uZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiAqLworCXJlY2VpdmVyID0gQ3JlYXRl RGVzdFJlY2VpdmVyKERlc3ROb25lKTsKKwlwYXJzZXRyZWVfbGlzdCA9IHBnX3BhcnNlX3F1ZXJ5 KGRkbF9jb21tYW5kKTsKKworCWZvcmVhY2gocGFyc2V0cmVlX2l0ZW0sIHBhcnNldHJlZV9saXN0 KQorCXsKKwkJTGlzdAkgICAqcGxhbnRyZWVfbGlzdDsKKwkJTGlzdAkgICAqcXVlcnl0cmVlX2xp c3Q7CisJCVJhd1N0bXQJICAgKmNvbW1hbmQgPSAoUmF3U3RtdCAqKSBsZmlyc3QocGFyc2V0cmVl X2l0ZW0pOworCQlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisJCU1lbW9yeUNvbnRleHQgcGVyX3Bh cnNldHJlZV9jb250ZXh0ID0gTlVMTDsKKwkJUG9ydGFsCQlwb3J0YWw7CisJCWJvb2wJCSBzbmFw c2hvdF9zZXQgPSBmYWxzZTsKKworCQljb21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9k ZSAqKSBjb21tYW5kKTsKKworCQkvKiBJZiB3ZSBnb3QgYSBjYW5jZWwgc2lnbmFsIGluIHBhcnNp bmcgb3IgcHJpb3IgY29tbWFuZCwgcXVpdCAqLworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwor CisJCS8qIFJlbW92ZSBkYXRhIHBvcHVsYXRpb24gZnJvbSB0aGUgY29tbWFuZCAqLworCQlwcmVw cm9jZXNzX2NyZWF0ZV90YWJsZShjb21tYW5kKTsKKworCQkvKgorCQkgKiBTZXQgdXAgYSBzbmFw c2hvdCBpZiBwYXJzZSBhbmFseXNpcy9wbGFubmluZyB3aWxsIG5lZWQgb25lLgorCQkgKi8KKwkJ aWYgKGFuYWx5emVfcmVxdWlyZXNfc25hcHNob3QoY29tbWFuZCkpCisJCXsKKwkJCVB1c2hBY3Rp dmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCQkJc25hcHNob3Rfc2V0ID0g dHJ1ZTsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRvIHRoZSB3b3JrIGZvciBlYWNoIHBhcnNldHJl ZSBpbiBhIHNob3J0LWxpdmVkIGNvbnRleHQsIHRvCisJCSAqIGxpbWl0IHRoZSBtZW1vcnkgdXNl ZCB3aGVuIHRoZXJlIGFyZSBtYW55IGNvbW1hbmRzIGluIHRoZSBzdHJpbmcuCisJCSAqLworCQlw ZXJfcGFyc2V0cmVlX2NvbnRleHQgPQorCQkJQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRN ZW1vcnlDb250ZXh0LAorCQkJCQkJCQkgICJleGVjdXRlX3NxbF9zdHJpbmcgcGVyLXN0YXRlbWVu dCBjb250ZXh0IiwKKwkJCQkJCQkJICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwkJb2xkY29u dGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCisJ CXF1ZXJ5dHJlZV9saXN0ID0gcGdfYW5hbHl6ZV9hbmRfcmV3cml0ZV9maXhlZHBhcmFtcyhjb21t YW5kLAorCQkJCQkJCQkJCQkJCQkJZGRsX2NvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlOVUxMLCAw LCBOVUxMKTsKKworCQlwbGFudHJlZV9saXN0ID0gcGdfcGxhbl9xdWVyaWVzKHF1ZXJ5dHJlZV9s aXN0LCBkZGxfY29tbWFuZCwgMCwgTlVMTCk7CisKKwkJLyogRG9uZSB3aXRoIHRoZSBzbmFwc2hv dCB1c2VkIGZvciBwYXJzaW5nL3BsYW5uaW5nICovCisJCWlmIChzbmFwc2hvdF9zZXQpCisJCQlQ b3BBY3RpdmVTbmFwc2hvdCgpOworCisJCXBvcnRhbCA9IENyZWF0ZVBvcnRhbCgibG9naWNhbCBy ZXBsaWNhdGlvbiIsIHRydWUsIHRydWUpOworCisJCS8qCisJCSAqIFdlIGRvbid0IGhhdmUgdG8g Y29weSBhbnl0aGluZyBpbnRvIHRoZSBwb3J0YWwsIGJlY2F1c2UgZXZlcnl0aGluZworCQkgKiB3 ZSBhcmUgcGFzc2luZyBoZXJlIGlzIGluIEFwcGx5TWVzc2FnZUNvbnRleHQgb3IgdGhlCisJCSAq IHBlcl9wYXJzZXRyZWVfY29udGV4dCwgYW5kIHNvIHdpbGwgb3V0bGl2ZSB0aGUgcG9ydGFsIGFu eXdheS4KKwkJICovCisJCVBvcnRhbERlZmluZVF1ZXJ5KHBvcnRhbCwKKwkJCQkJCSAgTlVMTCwK KwkJCQkJCSAgZGRsX2NvbW1hbmQsCisJCQkJCQkgIGNvbW1hbmRUYWcsCisJCQkJCQkgIHBsYW50 cmVlX2xpc3QsCisJCQkJCQkgIE5VTEwpOworCisJCS8qCisJCSAqIFN0YXJ0IHRoZSBwb3J0YWwu ICBObyBwYXJhbWV0ZXJzIGhlcmUuCisJCSAqLworCQlQb3J0YWxTdGFydChwb3J0YWwsIE5VTEws IDAsIEludmFsaWRTbmFwc2hvdCk7CisKKwkJLyoKKwkJICogU3dpdGNoIGJhY2sgdG8gdHJhbnNh Y3Rpb24gY29udGV4dCBmb3IgZXhlY3V0aW9uLgorCQkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOworCisJCSh2b2lkKSBQb3J0YWxSdW4ocG9ydGFsLAorCQkJCQkJIEZF VENIX0FMTCwKKwkJCQkJCSB0cnVlLAorCQkJCQkJIHRydWUsCisJCQkJCQkgcmVjZWl2ZXIsCisJ CQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkgTlVMTCk7CisKKwkJUG9ydGFsRHJvcChwb3J0YWwsIGZh bHNlKTsKKworCQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworCisJCS8qCisJCSAqIFRhYmxl IGNyZWF0ZWQgYnkgRERMIHJlcGxpY2F0aW9uIChkYXRhYmFzZSBsZXZlbCkgaXMgYXV0b21hdGlj YWxseQorCQkgKiBhZGRlZCB0byB0aGUgc3Vic2NyaXB0aW9uIGhlcmUuCisJCSAqLworCQloYW5k bGVfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOworCisJCS8qIE5vdyB3ZSBtYXkgZHJvcCB0aGUgcGVy LXBhcnNldHJlZSBjb250ZXh0LCBpZiBvbmUgd2FzIGNyZWF0ZWQuICovCisJCU1lbW9yeUNvbnRl eHREZWxldGUocGVyX3BhcnNldHJlZV9jb250ZXh0KTsKKwl9CisKKwlkZWJ1Z19xdWVyeV9zdHJp bmcgPSBzYXZlX2RlYnVnX3F1ZXJ5X3N0cmluZzsKKwllbmRfcmVwbGljYXRpb25fc3RlcCgpOwor fQorCiAKIC8qCiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9uIHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0 Y2hlci4KQEAgLTI1MjgsNiArMjc1NiwxMCBAQCBhcHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMp CiAJCQkgKi8KIAkJCWJyZWFrOwogCisJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0U6 CisJCQlhcHBseV9oYW5kbGVfZGRsKHMpOworCQkJYnJlYWs7CisKIAkJY2FzZSBMT0dJQ0FMX1JF UF9NU0dfU1RSRUFNX1NUQVJUOgogCQkJYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChzKTsKIAkJ CWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdv dXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5k ZXggMmNiY2E0YS4uNGNiMDlmOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v cGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1 dC9wZ291dHB1dC5jCkBAIC01NCw2ICs1NCwxMSBAQCBzdGF0aWMgdm9pZCBwZ291dHB1dF9tZXNz YWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAogCQkJCQkJCSBib29sIHRyYW5zYWN0aW9u YWwsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJCQkJCQkgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVz c2FnZSk7CitzdGF0aWMgdm9pZCBwZ291dHB1dF9kZGxtZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwKKwkJCQkJCQkJUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1l c3NhZ2VfbHNuLAorCQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwKKwkJCQkJ CQkJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQlTaXplIHN6LCBjb25zdCBj aGFyICptZXNzYWdlKTsKIHN0YXRpYyBib29sIHBnb3V0cHV0X29yaWdpbl9maWx0ZXIoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkgICBSZXBPcmlnaW5JZCBvcmlnaW5faWQp Owogc3RhdGljIHZvaWQgcGdvdXRwdXRfYmVnaW5fcHJlcGFyZV90eG4oTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4LApAQCAtMjU2LDYgKzI2MSw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQo T3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+Y2hhbmdlX2NiID0gcGdvdXRwdXRfY2hh bmdlOwogCWNiLT50cnVuY2F0ZV9jYiA9IHBnb3V0cHV0X3RydW5jYXRlOwogCWNiLT5tZXNzYWdl X2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwljYi0+ZGRsbWVzc2FnZV9jYiA9IHBnb3V0cHV0X2Rk bG1lc3NhZ2U7CiAJY2ItPmNvbW1pdF9jYiA9IHBnb3V0cHV0X2NvbW1pdF90eG47CiAKIAljYi0+ YmVnaW5fcHJlcGFyZV9jYiA9IHBnb3V0cHV0X2JlZ2luX3ByZXBhcmVfdHhuOwpAQCAtMjcyLDYg KzI3OCw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpj YikKIAljYi0+c3RyZWFtX2NvbW1pdF9jYiA9IHBnb3V0cHV0X3N0cmVhbV9jb21taXQ7CiAJY2It PnN0cmVhbV9jaGFuZ2VfY2IgPSBwZ291dHB1dF9jaGFuZ2U7CiAJY2ItPnN0cmVhbV9tZXNzYWdl X2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwljYi0+c3RyZWFtX2RkbG1lc3NhZ2VfY2IgPSBwZ291 dHB1dF9kZGxtZXNzYWdlOwogCWNiLT5zdHJlYW1fdHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90cnVu Y2F0ZTsKIAkvKiB0cmFuc2FjdGlvbiBzdHJlYW1pbmcgLSB0d28tcGhhc2UgY29tbWl0ICovCiAJ Y2ItPnN0cmVhbV9wcmVwYXJlX2NiID0gcGdvdXRwdXRfc3RyZWFtX3ByZXBhcmVfdHhuOwpAQCAt NDA3LDYgKzQxNCw3IEBAIHBnb3V0cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpvcHQsCiAKIAkvKiBUaGlzIHBsdWdpbiB1c2VzIGJp bmFyeSBwcm90b2NvbC4gKi8KIAlvcHQtPm91dHB1dF90eXBlID0gT1VUUFVUX1BMVUdJTl9CSU5B UllfT1VUUFVUOworCW9wdC0+cmVjZWl2ZV9yZXdyaXRlcyA9IHRydWU7CiAKIAkvKgogCSAqIFRo aXMgaXMgcmVwbGljYXRpb24gc3RhcnQgYW5kIG5vdCBzbG90IGluaXRpYWxpemF0aW9uLgpAQCAt NDgwLDYgKzQ4OCw3IEBAIHBnb3V0cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpvcHQsCiAKIAkJLyogSW5pdCBwdWJsaWNhdGlvbiBz dGF0ZS4gKi8KIAkJZGF0YS0+cHVibGljYXRpb25zID0gTklMOworCQlkYXRhLT5kZWxldGVkX3Jl bGlkcyA9IE5JTDsKIAkJcHVibGljYXRpb25zX3ZhbGlkID0gZmFsc2U7CiAJCUNhY2hlUmVnaXN0 ZXJTeXNjYWNoZUNhbGxiYWNrKFBVQkxJQ0FUSU9OT0lELAogCQkJCQkJCQkJICBwdWJsaWNhdGlv bl9pbnZhbGlkYXRpb25fY2IsCkBAIC0xMzYyLDkgKzEzNzEsMjIgQEAgcGdvdXRwdXRfY2hhbmdl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCVJl b3JkZXJCdWZmZXJDaGFuZ2VUeXBlIGFjdGlvbiA9IGNoYW5nZS0+YWN0aW9uOwogCVR1cGxlVGFi bGVTbG90ICpvbGRfc2xvdCA9IE5VTEw7CiAJVHVwbGVUYWJsZVNsb3QgKm5ld19zbG90ID0gTlVM TDsKKwlib29sCQkJdGFibGVfcmV3cml0ZSA9IGZhbHNlOwogCiAJdXBkYXRlX3JlcGxpY2F0aW9u X3Byb2dyZXNzKGN0eCwgZmFsc2UpOwogCisJLyoKKwkgKiBGb3IgaGVhcCByZXdyaXRlcywgd2Ug bWlnaHQgbmVlZCB0byByZXBsaWNhdGUgdGhlbSBpZiB0aGUgcmV3cml0dGVuCisJICogdGFibGUg cHVibGlzaGVzIHJld3JpdGUgZGRsIG1lc3NhZ2UuIFNvIGdldCB0aGUgYWN0dWFsIHJlbGF0aW9u IGhlcmUgYW5kCisJICogY2hlY2sgdGhlIHB1YmFjdGlvbiBsYXRlci4KKwkgKi8KKwlpZiAocmVs YXRpb24tPnJkX3JlbC0+cmVscmV3cml0ZSkKKwl7CisJCXRhYmxlX3Jld3JpdGUgPSB0cnVlOwor CQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxhdGlvbi0+cmRfcmVsLT5yZWxy ZXdyaXRlKTsKKwkJdGFyZ2V0cmVsID0gcmVsYXRpb247CisJfQorCiAJaWYgKCFpc19wdWJsaXNo YWJsZV9yZWxhdGlvbihyZWxhdGlvbikpCiAJCXJldHVybjsKIApAQCAtMTM5OCw2ICsxNDIwLDEz IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKIAkJCUFzc2VydChmYWxzZSk7CiAJfQogCisJLyoKKwkgKiBXZSBkb24n dCBwdWJsaXNoIHRhYmxlIHJld3JpdGUgY2hhbmdlIHVubGVzcyB3ZSBwdWJsaXNoIHRoZSByZXdy aXRlIGRkbAorCSAqIG1lc3NhZ2UuCisJICovCisJaWYgKHRhYmxlX3Jld3JpdGUgJiYgIXJlbGVu dHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJcmV0dXJuOworCiAJLyogQXZvaWQgbGVha2luZyBt ZW1vcnkgYnkgdXNpbmcgYW5kIHJlc2V0dGluZyBvdXIgb3duIGNvbnRleHQgKi8KIAlvbGQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oZGF0YS0+Y29udGV4dCk7CiAKQEAgLTE0MjcsOCArMTQ1Niw4 IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKIAkJCX0KIAogCQkJLyogQ2hlY2sgcm93IGZpbHRlciAqLwotCQkJaWYg KCFwZ291dHB1dF9yb3dfZmlsdGVyKHRhcmdldHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRy eSwKLQkJCQkJCQkJCSAmYWN0aW9uKSkKKwkJCWlmICghdGFibGVfcmV3cml0ZSAmJgorCQkJCSFw Z291dHB1dF9yb3dfZmlsdGVyKHRhcmdldHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwg JmFjdGlvbikpCiAJCQkJYnJlYWs7CiAKIAkJCS8qCkBAIC0xNDQ4LDggKzE0NzcsMTkgQEAgcGdv dXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAogCQkJbWF5YmVfc2VuZF9zY2hlbWEoY3R4LCBjaGFuZ2UsIHJlbGF0aW9uLCByZWxl bnRyeSk7CiAKIAkJCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOwotCQkJbG9n aWNhbHJlcF93cml0ZV9pbnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwK LQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnktPmNvbHVtbnMpOworCisJCQkvKgorCQkJ ICogQ29udmVydCB0aGUgcmV3cml0ZSBpbnNlcnRzIHRvIHVwZGF0ZXMgc28gdGhhdCB0aGUgc3Vi c2NyaWJlcgorCQkJICogY2FuIHJlcGxheSBpdC4gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBzdXJl IHRoZSBkYXRhIGJldHdlZW4KKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBpcyBjb25z aXN0ZW50LgorCQkJICovCisJCQlpZiAodGFibGVfcmV3cml0ZSkKKwkJCQlsb2dpY2FscmVwX3dy aXRlX3VwZGF0ZShjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsCisJCQkJCQkJCQkJTlVMTCwgbmV3 X3Nsb3QsIGRhdGEtPmJpbmFyeSwKKwkJCQkJCQkJCQlyZWxlbnRyeS0+Y29sdW1ucyk7CisJCQll bHNlCisJCQkJbG9naWNhbHJlcF93cml0ZV9pbnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVs LCBuZXdfc2xvdCwKKwkJCQkJCQkJCQlkYXRhLT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsK IAkJCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBSRU9S REVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFOgpAQCAtMTU3OSw2ICsxNjE5LDkgQEAgcGdvdXRwdXRf Y2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LAogCQlhbmNlc3RvciA9IE5VTEw7CiAJfQogCisJaWYgKHRhYmxlX3Jld3JpdGUpCisJCVJlbGF0 aW9uQ2xvc2UocmVsYXRpb24pOworCiAJLyogQ2xlYW51cCAqLwogCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGQpOwogCU1lbW9yeUNvbnRleHRSZXNldChkYXRhLT5jb250ZXh0KTsKQEAgLTE2NTYs OCArMTY5OSw4IEBAIHBnb3V0cHV0X3RydW5jYXRlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiBzdGF0aWMgdm9pZAogcGdvdXRwdXRfbWVzc2Fn ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKLQkJ CQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFy ICpwcmVmaXgsIFNpemUgc3osCi0JCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCisJCQkJIFhMb2dS ZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKKwkJCQkgY29uc3QgY2hhciAq cHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKQogewogCVBHT3V0cHV0RGF0YSAq ZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CiAJVHJh bnNhY3Rpb25JZCB4aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKQEAgLTE2OTcsNiArMTc0MCwx MzcgQEAgcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKIAlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOwogfQogCitz dGF0aWMgdm9pZAorcGdvdXRwdXRfZGRsbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwK KwkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSwKKwkJCQkJU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlQR091dHB1 dERhdGEgKmRhdGEgPSAoUEdPdXRwdXREYXRhICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRl OworCVBHT3V0cHV0VHhuRGF0YSAqdHhuZGF0YSA9IChQR091dHB1dFR4bkRhdGEgKikgdHhuLT5v dXRwdXRfcGx1Z2luX3ByaXZhdGU7CisJUmVsYXRpb24JcmVsYXRpb24gPSBOVUxMOworCVRyYW5z YWN0aW9uSWQgeGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJUmVsYXRpb25TeW5jRW50cnkg KnJlbGVudHJ5OworCisJLyoKKwkgKiBSZW1lbWJlciB0aGUgeGlkIGZvciB0aGUgbWVzc2FnZSBp biBzdHJlYW1pbmcgbW9kZS4gU2VlCisJICogcGdvdXRwdXRfY2hhbmdlLgorCSAqLworCWlmIChp bl9zdHJlYW1pbmcpCisJCXhpZCA9IHR4bi0+eGlkOworCisJc3dpdGNoIChjbWR0eXBlKQorCXsK KwkJY2FzZSBEQ1RfVGFibGVEcm9wU3RhcnQ6CisJCQkvKgorCQkJICogT24gRFJPUCBzdGFydCwg YWRkIHRoZSByZWxpZCB0byBhIGRlbGV0ZWRfcmVsaWQgbGlzdCBpZiB0aGUKKwkJCSAqIHJlbGlk IGlzIHBhcnQgb2YgYSBwdWJsaWNhdGlvbiB0aGF0IHN1cHBvcnRzIGRkbCBwdWJsaWNhdGlvbi4g V2UKKwkJCSAqIG5lZWQgdGhpcyBiZWNhdXNlIG9uIERST1AgZW5kLCB0aGUgcmVsaWQgd2lsbCBu byBsb25nZXIgYmUKKwkJCSAqIHZhbGlkLiBMYXRlciBvbiBEcm9wIGVuZCwgdmVyaWZ5IHRoYXQg dGhlIGRyb3AgaXMgZm9yIGEgcmVsaWQKKwkJCSAqIHRoYXQgaXMgb24gdGhlIGRlbGV0ZWRfcmlk IGxpc3QsIGFuZCBvbmx5IHRoZW4gc2VuZCB0aGUgZGRsCisJCQkgKiBtZXNzYWdlLgorCQkJICov CisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisKKwkJCUFzc2Vy dChyZWxhdGlvbik7CisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxh dGlvbik7CisKKwkJCWlmIChyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwpCisJCQkJZGF0YS0+ ZGVsZXRlZF9yZWxpZHMgPSBsYXBwZW5kX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQp OworCisJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCXJldHVybjsKKwkJY2FzZSBEQ1Rf VGFibGVEcm9wRW5kOgorCQkJaWYgKCFsaXN0X21lbWJlcl9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxp ZHMsIHJlbGlkKSkKKwkJCQlyZXR1cm47CisJCQllbHNlCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxp ZHMgPSBsaXN0X2RlbGV0ZV9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKwkJCWJy ZWFrOworCQljYXNlIERDVF9UYWJsZUFsdGVyOgorCQkJLyoKKwkJCSAqIEZvciB0YWJsZSByZXdy aXRlIGRkbCwgd2UgZmlyc3Qgc2VuZCB0aGUgb3JpZ2luYWwgZGRsIG1lc3NhZ2UgdG8KKwkJCSAq IHN1YnNjcmliZXIsIHRoZW4gY29udmVydCB0aGUgdXBjb21pbmcgcmV3cml0ZSBJTlNFUlQgdG8g VVBEQVRFIGFuZAorCQkJICogc2VuZCB0aGVtIHRvIHN1YnNjcmliZXIgc28gdGhhdCB0aGUgZGF0 YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQKKwkJCSAqIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZSBj b25zaXN0ZW50LgorCQkJICoKKwkJCSAqIFdlIGRvIHRoaXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJl YXNvbjoKKwkJCSAqCisJCQkgKiAoMSkgVGhlIGRhdGEgYmVmb3JlIHRoZSByZXdyaXRlIGRkbCBj b3VsZCBhbHJlYWR5IGJlIGRpZmZlcmVudCBhbW9uZworCQkJICogcHVibGlzaGVyIGFuZCBzdWJz Y3JpYmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRhdGEgaW4gc3Vic2NyaWJlcgorCQkJICog d2hpY2ggZG9lc24ndCBleGlzdCBpbiBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBu ZWVkIHRvIGxldAorCQkJICogdGhlIHN1YnNjcmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3 cml0ZSBkZGwgdG8gcmV3cml0ZSBhbGwgdGhlCisJCQkgKiBkYXRhIGF0IGZpcnN0LgorCQkJICoK KwkJCSAqICgyKSB0aGUgZGF0YSBhZnRlciBleGVjdXRpbmcgcmV3cml0ZSBkZGwgY291bGQgYmUg ZGlmZmVyZW50IGFtb25nCisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIoZHVlIHRvIGRp ZmZlcmVudCBmdW5jdGlvbnMvb3BlcmF0b3JzIHVzZWQKKwkJCSAqIGR1cmluZyByZXdyaXRlKSwg c28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhlIHJld3JpdGUgVVBEQVRFcyB0byBrZWVwCisJCQkg KiB0aGUgZGF0YSBjb25zaXN0ZW50LgorCQkJICoKKwkJCSAqIFRPIElNUFJPVkU6IFdlIGNvdWxk IGltcHJvdmUgdGhpcyBieSBsZXR0aW5nIHRoZSBzdWJzY3JpYmVyIG9ubHkKKwkJCSAqIHJld3Jp dGUgdGhlIGV4dHJhIGRhdGEgaW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGFuZCB1c2Ug dGhlCisJCQkgKiB1cGNvbWluZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBk YXRhLiBCZXNpZGVzLCB3ZSBtYXkKKwkJCSAqIG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFu Z2VzIGZvciBhbGwgdHlwZSBvZiByZXdyaXRlIGRkbCwgZm9yCisJCQkgKiBleGFtcGxlLCBpdCBz ZWVtcyBmaW5lIHRvIHNraXAgc2VuZGluZyByZXdyaXRlIGNoYW5nZXMgZm9yIEFMVEVSCisJCQkg KiBUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBkYXRhIGluIHRoZSB0YWJsZSBkb2Vzbid0IGFjdHVh bGx5IGJlCisJCQkgKiBjaGFuZ2VkLgorCQkJICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRH ZXRSZWxhdGlvbihyZWxpZCk7CisJCQlBc3NlcnQocmVsYXRpb24pOworCisJCQlyZWxlbnRyeSA9 IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCS8qCisJCQkgKiBTa2lw IHNlbmRpbmcgdGhpcyBkZGwgaWYgd2UgZG9uJ3QgcHVibGlzaCBkZGwgbWVzc2FnZSBvciB0aGUg ZGRsCisJCQkgKiBuZWVkIHRvIGJlIHB1Ymxpc2hlZCB2aWEgaXRzIHJvb3QgcmVsYXRpb24uCisJ CQkgKi8KKwkJCWlmICghcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsIHx8CisJCQkJcmVsZW50 cnktPnB1Ymxpc2hfYXNfcmVsaWQgIT0gcmVsaWQpCisJCQl7CisJCQkJUmVsYXRpb25DbG9zZShy ZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSBEQ1RfU2lt cGxlQ21kOgorCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJ CQlpZiAocmVsYXRpb24gPT0gTlVMTCkKKwkJCQlicmVhazsKKworCQkJcmVsZW50cnkgPSBnZXRf cmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJh Y3Rpb25zLnB1YmRkbCkKKwkJCXsKKwkJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQly ZXR1cm47CisJCQl9CisKKwkJCWJyZWFrOworCQljYXNlIERDVF9PYmplY3REcm9wOgorCQkJLyog ZG8gbm90aGluZyAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5z dXBwb3J0ZWQgdHlwZSAlZCIsIGNtZHR5cGUpOworCQkJYnJlYWs7CisJfQorCisJLyogU2VuZCBC RUdJTiBpZiB3ZSBoYXZlbid0IHlldCAqLworCWlmICh0eG5kYXRhICYmICF0eG5kYXRhLT5zZW50 X2JlZ2luX3R4bikKKwkJcGdvdXRwdXRfc2VuZF9iZWdpbihjdHgsIHR4bik7CisKKwlPdXRwdXRQ bHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKKwlsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3Nh Z2UoY3R4LT5vdXQsCisJCQkJCQkJCXhpZCwKKwkJCQkJCQkJbWVzc2FnZV9sc24sCisJCQkJCQkJ CXByZWZpeCwKKwkJCQkJCQkJc3osCisJCQkJCQkJCW1lc3NhZ2UpOworCU91dHB1dFBsdWdpbldy aXRlKGN0eCwgdHJ1ZSk7CisKKwlpZiAocmVsYXRpb24pCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRp b24pOworfQorCiAvKgogICogQ3VycmVudGx5IHdlIGFsd2F5cyBmb3J3YXJkLgogICovCkBAIC0x OTc0LDcgKzIxNDgsOCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBS ZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnktPnNjaGVtYV9zZW50ID0gZmFsc2U7CiAJCWVudHJ5 LT5zdHJlYW1lZF90eG5zID0gTklMOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJpbnNlcnQgPSBl bnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPQotCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVs ZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJCWVudHJ5LT5w dWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0KKwkJ CWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwogCQllbnRyeS0+bmV3X3Nsb3QgPSBO VUxMOwogCQllbnRyeS0+b2xkX3Nsb3QgPSBOVUxMOwogCQltZW1zZXQoZW50cnktPmV4cHJzdGF0 ZSwgMCwgc2l6ZW9mKGVudHJ5LT5leHByc3RhdGUpKTsKQEAgLTIwMzIsNiArMjIwNyw3IEBAIGdl dF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQog CQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlv bnMucHViZGVsZXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0g ZmFsc2U7CisJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwogCiAJCS8qCiAJCSAq IFR1cGxlIHNsb3RzIGNsZWFudXBzLiAoV2lsbCBiZSByZWJ1aWx0IGxhdGVyIGlmIG5lZWRlZCku CkBAIC0yMTQ1LDYgKzIzMjEsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpk YXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUg fD0gcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJk ZWxldGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9u cy5wdWJ0cnVuY2F0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGU7CisJCQkJZW50cnkt PnB1YmFjdGlvbnMucHViZGRsICAgIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZGw7CiAKIAkJCQkv KgogCQkJCSAqIFdlIHdhbnQgdG8gcHVibGlzaCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3Qg YW5jZXN0b3IKQEAgLTIzMzAsNiArMjUwNyw3IEBAIHJlbF9zeW5jX2NhY2hlX3B1YmxpY2F0aW9u X2NiKERhdHVtIGFyZywgaW50IGNhY2hlaWQsIHVpbnQzMiBoYXNodmFsdWUpCiAJewogCQllbnRy eS0+cmVwbGljYXRlX3ZhbGlkID0gZmFsc2U7CiAJfQorCiB9CiAKIC8qIFNlbmQgUmVwbGljYXRp b24gb3JpZ2luICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dl cnMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCmluZGV4IDUxYjNmZGMu LjdkNjBhYWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCkBAIC0zMyw2ICszMyw3 IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfdHlwZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RyaWdnZXIuaCIKKyNpbmNsdWRlICJjb21t YW5kcy9ldmVudF90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNp bmNsdWRlICJleGVjdXRvci9zcGkuaCIKICNpbmNsdWRlICJsaWIvaWxpc3QuaCIKQEAgLTQwLDYg KzQxLDcgQEAKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29lcmNlLmgiCiAjaW5jbHVkZSAicGFy c2VyL3BhcnNlX3JlbGF0aW9uLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNs dWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggZjUwMmRmOS4uNTljMzBkMCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9yZWxjYWNoZS5jCkBAIC01NjI3LDYgKzU2MjcsNyBAQCBSZWxhdGlvbkJ1aWxkUHVibGlj YXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRlc2MpCiAJ CXB1YmRlc2MtPnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAkJ cHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZWxldGUgfD0gcHViZm9ybS0+cHViZGVsZXRlOwogCQlw dWJkZXNjLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1YmZvcm0tPnB1YnRydW5jYXRlOwor CQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRkbCB8PSBwdWJmb3JtLT5wdWJkZGw7CiAKIAkJLyoK IAkJICogQ2hlY2sgaWYgYWxsIGNvbHVtbnMgcmVmZXJlbmNlZCBpbiB0aGUgZmlsdGVyIGV4cHJl c3Npb24gYXJlIHBhcnQKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IGM4NzFjYjcuLmFlN2NhNWUgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuYwpAQCAtMzg2Niw2ICszODY2LDcgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQs IGludCAqbnVtUHVibGljYXRpb25zKQogCWludAkJCWlfcHVidXBkYXRlOwogCWludAkJCWlfcHVi ZGVsZXRlOwogCWludAkJCWlfcHVidHJ1bmNhdGU7CisJaW50CQkJaV9wdWJkZGw7CiAJaW50CQkJ aV9wdWJ2aWFyb290OwogCWludAkJCWksCiAJCQkJbnR1cHM7CkBAIC0zODgxLDIzICszODgyLDI5 IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykK IAlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKIAogCS8qIEdldCB0aGUgcHVibGljYXRpb25zLiAq LwotCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDEzMDAwMCkKKwlpZiAoZm91dC0+cmVtb3Rl VmVyc2lvbiA+PSAxNTAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LAogCQkJCQkJICAi U0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCSAgInAucHVib3du ZXIsICIKLQkJCQkJCSAgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUs IHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBwLnB1YnZpYXJvb3QgIgorCQkJCQkJICAicC5w dWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVi dHJ1bmNhdGUsIHAucHViZGRsLCBwLnB1YnZpYXJvb3QgIgorCQkJCQkJICAiRlJPTSBwZ19wdWJs aWNhdGlvbiBwIik7CisJZWxzZSBpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxMzAwMDApCisJ CWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LAorCQkJCQkJICAiU0VMRUNUIHAudGFibGVvaWQsIHAu b2lkLCBwLnB1Ym5hbWUsICIKKwkJCQkJCSAgInAucHVib3duZXIsICIKKwkJCQkJCSAgInAucHVi YWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRy dW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRkbCwgcC5wdWJ2aWFyb290ICIKIAkJCQkJCSAgIkZST00g cGdfcHVibGljYXRpb24gcCIpOwogCWVsc2UgaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTEw MDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwKIAkJCQkJCSAgIlNFTEVDVCBwLnRhYmxl b2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkgICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkg ICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwg cC5wdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCisJCQkJCQkgICJwLnB1YmFsbHRh YmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0 ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJICAiRlJP TSBwZ19wdWJsaWNhdGlvbiBwIik7CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwK IAkJCQkJCSAgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkg ICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkgICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAu cHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1 YnZpYXJvb3QgIgorCQkJCQkJICAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVw ZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRk bCwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCiAJCQkJCQkgICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAi KTsKIAogCXJlcyA9IEV4ZWN1dGVTcWxRdWVyeShmb3V0LCBxdWVyeS0+ZGF0YSwgUEdSRVNfVFVQ TEVTX09LKTsKQEAgLTM5MTMsNiArMzkyMCw3IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpm b3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlpX3B1YnVwZGF0ZSA9IFBRZm51bWJlcihyZXMs ICJwdWJ1cGRhdGUiKTsKIAlpX3B1YmRlbGV0ZSA9IFBRZm51bWJlcihyZXMsICJwdWJkZWxldGUi KTsKIAlpX3B1YnRydW5jYXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnRydW5jYXRlIik7CisJaV9w dWJkZGwgPSBQUWZudW1iZXIocmVzLCAicHViZGRsIik7CiAJaV9wdWJ2aWFyb290ID0gUFFmbnVt YmVyKHJlcywgInB1YnZpYXJvb3QiKTsKIAogCXB1YmluZm8gPSBwZ19tYWxsb2MobnR1cHMgKiBz aXplb2YoUHVibGljYXRpb25JbmZvKSk7CkBAIC0zOTM2LDYgKzM5NDQsOCBAQCBnZXRQdWJsaWNh dGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJCQkoc3RyY21wKFBR Z2V0dmFsdWUocmVzLCBpLCBpX3B1YmRlbGV0ZSksICJ0IikgPT0gMCk7CiAJCXB1YmluZm9baV0u cHVidHJ1bmNhdGUgPQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJ0cnVuY2F0 ZSksICJ0IikgPT0gMCk7CisJCXB1YmluZm9baV0ucHViZGRsID0KKwkJCShzdHJjbXAoUFFnZXR2 YWx1ZShyZXMsIGksIGlfcHViZGRsKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ2aWFy b290ID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidmlhcm9vdCksICJ0Iikg PT0gMCk7CiAKQEAgLTQwMTUsNiArNDAyNSwxNSBAQCBkdW1wUHVibGljYXRpb24oQXJjaGl2ZSAq Zm91dCwgY29uc3QgUHVibGljYXRpb25JbmZvICpwdWJpbmZvKQogCQlmaXJzdCA9IGZhbHNlOwog CX0KIAorCWlmIChwdWJpbmZvLT5wdWJkZGwpCisJeworCQlpZiAoIWZpcnN0KQorCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIocXVlcnksICIsICIpOworCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1 ZXJ5LCAiZGRsIik7CisJCWZpcnN0ID0gZmFsc2U7CisJfQorCiAJYXBwZW5kUFFFeHBCdWZmZXJT dHIocXVlcnksICInIik7CiAKIAlpZiAocHViaW5mby0+cHVidmlhcm9vdCkKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmlu ZGV4IDFkMjFjMjkuLjY5Yjk0YWUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaApAQCAtNjIwLDYgKzYyMCw3IEBAIHR5 cGVkZWYgc3RydWN0IF9QdWJsaWNhdGlvbkluZm8KIAlib29sCQlwdWJkZWxldGU7CiAJYm9vbAkJ cHVidHJ1bmNhdGU7CiAJYm9vbAkJcHVidmlhcm9vdDsKKwlib29sCQlwdWJkZGw7CiB9IFB1Ymxp Y2F0aW9uSW5mbzsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVz Yy5jIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKaW5kZXggNmI4YzE3Yi4uNzkyZjQz OCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKKysrIGIvc3JjL2Jp bi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb21t YW5kcy9zZXF1ZW5jZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVz c2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgogI2luY2x1ZGUgInJtZ3Jk ZXNjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5ZGVmcy5oIgpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCA4OGQ5 MmEwLi44YjljOWE1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9z cmMvYmluL3BzcWwvZGVzY3JpYmUuYwpAQCAtNjA0Nyw3ICs2MDQ3LDcgQEAgbGlzdFB1YmxpY2F0 aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCVBRRXhwQnVmZmVyRGF0YSBidWY7CiAJUEdyZXN1 bHQgICAqcmVzOwogCXByaW50UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7Ci0Jc3RhdGljIGNv bnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OworCXN0YXRpYyBjb25zdCBib29sIHRyYW5z bGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CiAKIAlpZiAocHNldC5zdmVyc2lvbiA8IDEwMDAwMCkK IAl7CkBAIC02MDgyLDYgKzYwODIsMTAgQEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpw YXR0ZXJuKQogCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAiLFxuICBwdWJ2aWFy b290IEFTIFwiJXNcIiIsCiAJCQkJCQkgIGdldHRleHRfbm9vcCgiVmlhIHJvb3QiKSk7CisJaWYg KHBzZXQuc3ZlcnNpb24gPj0gMTQwMDAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJ CQkJICAiLFxuICBwdWJkZGwgQVMgXCIlc1wiIiwKKwkJCQkJCSAgZ2V0dGV4dF9ub29wKCJERExz IikpOwogCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCSAiXG5GUk9NIHBnX2Nh dGFsb2cucGdfcHVibGljYXRpb25cbiIpOwpAQCAtNjE2OSw2ICs2MTczLDcgQEAgZGVzY3JpYmVQ dWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlQR3Jlc3VsdCAgICpyZXM7CiAJYm9v bAkJaGFzX3B1YnRydW5jYXRlOwogCWJvb2wJCWhhc19wdWJ2aWFyb290OworCWJvb2wJCWhhc19w dWJkZGw7CiAKIAlQUUV4cEJ1ZmZlckRhdGEgdGl0bGU7CiAJcHJpbnRUYWJsZUNvbnRlbnQgY29u dDsKQEAgLTYxODUsNiArNjE5MCw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIg KnBhdHRlcm4pCiAKIAloYXNfcHVidHJ1bmNhdGUgPSAocHNldC5zdmVyc2lvbiA+PSAxMTAwMDAp OwogCWhhc19wdWJ2aWFyb290ID0gKHBzZXQuc3ZlcnNpb24gPj0gMTMwMDAwKTsKKwloYXNfcHVi ZGRsID0gIChwc2V0LnN2ZXJzaW9uID49IDE1MDAwMCk7CiAKIAlpbml0UFFFeHBCdWZmZXIoJmJ1 Zik7CiAKQEAgLTYxOTgsNiArNjIwNCw5IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNo YXIgKnBhdHRlcm4pCiAJaWYgKGhhc19wdWJ2aWFyb290KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmYnVmLAogCQkJCQkJCSAiLCBwdWJ2aWFyb290Iik7CisJaWYgKGhhc19wdWJkZGwpCisJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJCQkJCQkJICIsIHB1YmRkbCIpOwogCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0 aW9uXG4iKTsKIApAQCAtNjI0Niw2ICs2MjU1LDggQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29u c3QgY2hhciAqcGF0dGVybikKIAkJCW5jb2xzKys7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJ CW5jb2xzKys7CisJCWlmIChoYXNfcHViZGRsKQorCQkJbmNvbHMrKzsKIAogCQlpbml0UFFFeHBC dWZmZXIoJnRpdGxlKTsKIAkJcHJpbnRmUFFFeHBCdWZmZXIoJnRpdGxlLCBfKCJQdWJsaWNhdGlv biAlcyIpLCBwdWJuYW1lKTsKQEAgLTYyNjAsNiArNjI3MSw4IEBAIGRlc2NyaWJlUHVibGljYXRp b25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBn ZXR0ZXh0X25vb3AoIlRydW5jYXRlcyIpLCB0cnVlLCBhbGlnbik7CiAJCWlmIChoYXNfcHVidmlh cm9vdCkKIAkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiVmlhIHJv b3QiKSwgdHJ1ZSwgYWxpZ24pOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRI ZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiRERMcyIpLCB0cnVlLCBhbGlnbik7CiAKIAkJcHJp bnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCAyKSwgZmFsc2UsIGZhbHNl KTsKIAkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCAzKSwgZmFs c2UsIGZhbHNlKTsKQEAgLTYyNzAsNiArNjI4Myw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNv bnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1 ZShyZXMsIGksIDcpLCBmYWxzZSwgZmFsc2UpOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlw cmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDgpLCBmYWxzZSwgZmFs c2UpOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdl dHZhbHVlKHJlcywgaSwgOSksIGZhbHNlLCBmYWxzZSk7CiAKIAkJaWYgKCFwdWJhbGx0YWJsZXMp CiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKaW5kZXggOWE3NDcyMS4uOWRlM2I4ZiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3JtZ3JsaXN0LmgKQEAgLTQ3LDMgKzQ3LDQgQEAgUEdfUk1HUihSTV9DT01NSVRfVFNfSUQsICJD b21taXRUcyIsIGNvbW1pdF90c19yZWRvLCBjb21taXRfdHNfZGVzYywgY29tbWl0X3RzX2kKIFBH X1JNR1IoUk1fUkVQTE9SSUdJTl9JRCwgIlJlcGxpY2F0aW9uT3JpZ2luIiwgcmVwbG9yaWdpbl9y ZWRvLCByZXBsb3JpZ2luX2Rlc2MsIHJlcGxvcmlnaW5faWRlbnRpZnksIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpCiBQR19STUdSKFJNX0dFTkVSSUNfSUQsICJHZW5lcmljIiwgZ2VuZXJpY19yZWRv LCBnZW5lcmljX2Rlc2MsIGdlbmVyaWNfaWRlbnRpZnksIE5VTEwsIE5VTEwsIGdlbmVyaWNfbWFz aywgTlVMTCkKIFBHX1JNR1IoUk1fTE9HSUNBTE1TR19JRCwgIkxvZ2ljYWxNZXNzYWdlIiwgbG9n aWNhbG1zZ19yZWRvLCBsb2dpY2FsbXNnX2Rlc2MsIGxvZ2ljYWxtc2dfaWRlbnRpZnksIE5VTEws IE5VTEwsIE5VTEwsIGxvZ2ljYWxtc2dfZGVjb2RlKQorUEdfUk1HUihSTV9MT0dJQ0FMRERMTVNH X0lELCAiTG9naWNhbERETE1lc3NhZ2UiLCBsb2dpY2FsZGRsbXNnX3JlZG8sIGxvZ2ljYWxkZGxt c2dfZGVzYywgbG9naWNhbGRkbG1zZ19pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgbG9naWNh bGRkbG1zZ19kZWNvZGUpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBmMGRiODM2Li4xM2E0 NzBiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExODkyLDQgKzExODkyLDEzIEBACiB7 IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdqc29uIHRvIHN0cmluZycsCiAgIHByb25hbWUgPT4g J2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCiAgIHBy b2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFu ZCcgfSwKK3sgb2lkID0+ICc0NjQ0JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5k IGRlcGFyc2UnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5k X2VuZCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAn JywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZCcgfSwKK3sg b2lkID0+ICc0NjQ1JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2Ug c3RhcnQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0 YXJ0JywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcn LCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQnIH0sCit7 IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNl IHRhYmxlIHJld3JpdGUnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxl X3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMg PT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJyB9LAog XQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCmluZGV4IDQ4MjA1YmEuLjYwNmMwMDkg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAorKysgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKQEAgLTU0LDYgKzU0LDkgQEAgQ0FU QUxPRyhwZ19wdWJsaWNhdGlvbiw2MTA0LFB1YmxpY2F0aW9uUmVsYXRpb25JZCkKIAogCS8qIHRy dWUgaWYgcGFydGl0aW9uIGNoYW5nZXMgYXJlIHB1Ymxpc2hlZCB1c2luZyByb290IHNjaGVtYSAq LwogCWJvb2wJCXB1YnZpYXJvb3Q7CisKKwkvKiB0cnVlIGlmIHRhYmxlIGNyZWF0aW9ucyBhcmUg cHVibGlzaGVkICovCisJYm9vbAkJcHViZGRsOwogfSBGb3JtRGF0YV9wZ19wdWJsaWNhdGlvbjsK IAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzIsNiArNzUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQ dWJsaWNhdGlvbkFjdGlvbnMKIAlib29sCQlwdWJ1cGRhdGU7CiAJYm9vbAkJcHViZGVsZXRlOwog CWJvb2wJCXB1YnRydW5jYXRlOworCWJvb2wJCXB1YmRkbDsKIH0gUHVibGljYXRpb25BY3Rpb25z OwogCiB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkRlc2MKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuaAppbmRleCAxMDA5MWMzLi5mZDJlZTdmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5oCkBAIC03MSw3ICs3MSw4IEBAIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNv bGxlY3RTaW1wbGVDb21tYW5kKE9iamVjdEFkZHJlc3MgYWRkcmVzcywKIGV4dGVybiB2b2lkIEV2 ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQg RXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCk7CiBleHRlcm4gdm9pZCBF dmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsCi0JCQkJCQkJ CQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MpOworCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBh ZGRyZXNzLAorCQkJCQkJCQkJCQkJYm9vbCByZXdyaXRlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJp Z2dlckFsdGVyVGFibGVFbmQodm9pZCk7CiAKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxl Y3RHcmFudChJbnRlcm5hbEdyYW50ICppc3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNz YWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThkY2E4NgotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaApAQCAtMCww ICsxLDYwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGRkbG1lc3NhZ2UuaAorICoJICAgRXhw b3J0cyBmcm9tIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogQ29weXJp Z2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAq IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaAorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpZm5kZWYgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisjZGVmaW5lIFBHX0xPR0lD QUxfRERMX01FU1NBR0VfSAorCisjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJh Y2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgorI2luY2x1 ZGUgIm5vZGVzL25vZGVzLmgiCisKKworLyoKKyAqIFN1cHBvcnQgZm9yIGtlZXBpbmcgdHJhY2sg b2YgZGVwYXJzZWQgY29tbWFuZHMuCisgKi8KK3R5cGVkZWYgZW51bSBEZXBhcnNlZENvbW1hbmRU eXBlCit7CisJRENUX1NpbXBsZUNtZCwKKwlEQ1RfVGFibGVEcm9wU3RhcnQsCisJRENUX1RhYmxl RHJvcEVuZCwKKwlEQ1RfVGFibGVBbHRlciwKKwlEQ1RfT2JqZWN0Q3JlYXRlLAorCURDVF9PYmpl Y3REcm9wCit9IERlcGFyc2VkQ29tbWFuZFR5cGU7CisKKy8qCisgKiBHZW5lcmljIGxvZ2ljYWwg ZGVjb2RpbmcgRERMIG1lc3NhZ2Ugd2FsIHJlY29yZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeGxf bG9naWNhbF9kZGxfbWVzc2FnZQoreworCU9pZAkJCQkJCWRiSWQ7CQkJLyogZGF0YWJhc2UgT2lk IGVtaXR0ZWQgZnJvbSAqLworCVNpemUJCQkJCXByZWZpeF9zaXplOwkvKiBsZW5ndGggb2YgcHJl Zml4ICovCisJT2lkCQkJCQkJcmVsaWQ7CQkJLyogaWQgb2YgdGhlIHRhYmxlICovCisJRGVwYXJz ZWRDb21tYW5kVHlwZQkJY21kdHlwZTsJCS8qIHR5cGUgb2Ygc3FsIGNvbW1hbmQgKi8KKwlTaXpl CQkJCQltZXNzYWdlX3NpemU7CSAgLyogc2l6ZSBvZiB0aGUgbWVzc2FnZSAqLworCisJLyoKKwkg KiBwYXlsb2FkLCBpbmNsdWRpbmcgbnVsbC10ZXJtaW5hdGVkIHByZWZpeCBvZiBsZW5ndGggcHJl Zml4X3NpemUKKwkgKi8KKwljaGFyCQltZXNzYWdlW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9 IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2U7CisKKyNkZWZpbmUgU2l6ZU9mTG9naWNhbERETE1lc3Nh Z2UJKG9mZnNldG9mKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UsIG1lc3NhZ2UpKQorCitleHRlcm4g WExvZ1JlY1B0ciBMb2dMb2dpY2FsRERMTWVzc2FnZShjb25zdCBjaGFyICpwcmVmaXgsIE9pZCBy ZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJICAgY29uc3QgY2hh ciAqZGRsX21lc3NhZ2UsIHNpemVfdCBzaXplKTsKKworLyogUk1HUiBBUEkqLworI2RlZmluZSBY TE9HX0xPR0lDQUxfRERMX01FU1NBR0UJMHgwMAordm9pZAkJbG9naWNhbGRkbG1zZ19yZWRvKFhM b2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK3ZvaWQJCWxvZ2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJ bmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOworY29uc3QgY2hhciAqbG9naWNhbGRk bG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29k ZS5oCmluZGV4IDc0MWJmNjUuLjQyN2E3YjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL2RlY29kZS5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCkBA IC0yNyw2ICsyNyw3IEBAIGV4dGVybiB2b2lkIGhlYXAyX2RlY29kZShMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCB4YWN0X2Rl Y29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7 CiBleHRlcm4gdm9pZCBzdGFuZGJ5X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs IFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBsb2dpY2FsbXNnX2RlY29kZShM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CitleHRl cm4gdm9pZCBsb2dpY2FsZGRsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs IFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiAKIGV4dGVybiB2b2lkIExvZ2ljYWxEZWNvZGluZ1By b2Nlc3NSZWNvcmQoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkJCSBYTG9n UmVhZGVyU3RhdGUgKnJlY29yZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9sb2dpY2FscHJvdG8uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5o CmluZGV4IGE3NzFhYjguLjJhYmNjYjggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2xvZ2ljYWxwcm90by5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxw cm90by5oCkBAIC02MSw2ICs2MSw3IEBAIHR5cGVkZWYgZW51bSBMb2dpY2FsUmVwTXNnVHlwZQog CUxPR0lDQUxfUkVQX01TR19SRUxBVElPTiA9ICdSJywKIAlMT0dJQ0FMX1JFUF9NU0dfVFlQRSA9 ICdZJywKIAlMT0dJQ0FMX1JFUF9NU0dfTUVTU0FHRSA9ICdNJywKKwlMT0dJQ0FMX1JFUF9NU0df RERMTUVTU0FHRSA9ICdMJywKIAlMT0dJQ0FMX1JFUF9NU0dfQkVHSU5fUFJFUEFSRSA9ICdiJywK IAlMT0dJQ0FMX1JFUF9NU0dfUFJFUEFSRSA9ICdQJywKIAlMT0dJQ0FMX1JFUF9NU0dfQ09NTUlU X1BSRVBBUkVEID0gJ0snLApAQCAtMjI5LDcgKzIzMCwxMSBAQCBleHRlcm4gdm9pZCBsb2dpY2Fs cmVwX3dyaXRlX3RydW5jYXRlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIGV4 dGVybiBMaXN0ICpsb2dpY2FscmVwX3JlYWRfdHJ1bmNhdGUoU3RyaW5nSW5mbyBpbiwKIAkJCQkJ CQkJCSAgYm9vbCAqY2FzY2FkZSwgYm9vbCAqcmVzdGFydF9zZXFzKTsKIGV4dGVybiB2b2lkIGxv Z2ljYWxyZXBfd3JpdGVfbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQs IFhMb2dSZWNQdHIgbHNuLAotCQkJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hh ciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKKwkJCQkJCQkJCSBib29s IHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCSBTaXplIHN6LCBj b25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfZGRsbWVz c2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAor CQkJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2Fn ZSk7CitleHRlcm4gY2hhciAqbG9naWNhbHJlcF9yZWFkX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBp biwgWExvZ1JlY1B0ciAqbHNuLCBjb25zdCBjaGFyICoqcHJlZml4LCBTaXplICpzeik7CiBleHRl cm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3JlbChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25J ZCB4aWQsCiAJCQkJCQkJCSBSZWxhdGlvbiByZWwsIEJpdG1hcHNldCAqY29sdW1ucyk7CiBleHRl cm4gTG9naWNhbFJlcFJlbGF0aW9uICpsb2dpY2FscmVwX3JlYWRfcmVsKFN0cmluZ0luZm8gaW4p OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCmluZGV4IDUzOWRjOGUuLjkz M2QyOTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4u aAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKQEAgLTg5LDYg Kzg5LDE4IEBAIHR5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IpIChzdHJ1Y3Qg TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKm1lc3Nh Z2UpOwogCiAvKgorICogQ2FsbGVkIGZvciB0aGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2Fn ZXMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IpIChzdHJ1 Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJ CQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgICBPaWQgcmVsaWQsCisJCQkJ CQkJCQkJICAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCSAgIFNpemUg bWVzc2FnZV9zaXplLAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCisvKgog ICogRmlsdGVyIGNoYW5nZXMgYnkgb3JpZ2luLgogICovCiB0eXBlZGVmIGJvb2wgKCpMb2dpY2Fs RGVjb2RlRmlsdGVyQnlPcmlnaW5DQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsCkBAIC0yMDAsNiArMjEyLDE5IEBAIHR5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJl YW1NZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4CiAJCQkJCQkJ CQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qCisgKiBDYWxsYmFjayBmb3Igc3RyZWFt aW5nIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzIGZyb20gaW4tcHJvZ3Jlc3MKKyAqIHRy YW5zYWN0aW9ucy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZVN0cmVhbURETE1l c3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJ CQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2Fn ZV9sc24sCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCQkJIE9p ZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJ CQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVz c2FnZSk7CisKKy8qCiAgKiBDYWxsYmFjayBmb3Igc3RyZWFtaW5nIHRydW5jYXRlcyBmcm9tIGlu LXByb2dyZXNzIHRyYW5zYWN0aW9ucy4KICAqLwogdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29k ZVN0cmVhbVRydW5jYXRlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApA QCAtMjE5LDYgKzI0NCw3IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1dFBsdWdpbkNhbGxiYWNrcwog CUxvZ2ljYWxEZWNvZGVUcnVuY2F0ZUNCIHRydW5jYXRlX2NiOwogCUxvZ2ljYWxEZWNvZGVDb21t aXRDQiBjb21taXRfY2I7CiAJTG9naWNhbERlY29kZU1lc3NhZ2VDQiBtZXNzYWdlX2NiOworCUxv Z2ljYWxEZWNvZGVERExNZXNzYWdlQ0IgZGRsbWVzc2FnZV9jYjsKIAlMb2dpY2FsRGVjb2RlRmls dGVyQnlPcmlnaW5DQiBmaWx0ZXJfYnlfb3JpZ2luX2NiOwogCUxvZ2ljYWxEZWNvZGVTaHV0ZG93 bkNCIHNodXRkb3duX2NiOwogCkBAIC0yMzcsNiArMjYzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0 cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9naWNhbERlY29kZVN0cmVhbUNvbW1pdENCIHN0cmVhbV9j b21taXRfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2VfY2I7 CiAJTG9naWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZV9jYjsKKwlMb2dp Y2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCIHN0cmVhbV9kZGxtZXNzYWdlX2NiOwogCUxvZ2lj YWxEZWNvZGVTdHJlYW1UcnVuY2F0ZUNCIHN0cmVhbV90cnVuY2F0ZV9jYjsKIH0gT3V0cHV0UGx1 Z2luQ2FsbGJhY2tzOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291 dHB1dC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAppbmRleCBlYWZlZGQ2 Li44ZWJjYzEyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5o CisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKQEAgLTI1LDYgKzI1LDcg QEAgdHlwZWRlZiBzdHJ1Y3QgUEdPdXRwdXREYXRhCiAJdWludDMyCQlwcm90b2NvbF92ZXJzaW9u OwogCUxpc3QJICAgKnB1YmxpY2F0aW9uX25hbWVzOwogCUxpc3QJICAgKnB1YmxpY2F0aW9uczsK KwlMaXN0CSAgICpkZWxldGVkX3JlbGlkczsKIAlib29sCQliaW5hcnk7CiAJYm9vbAkJc3RyZWFt aW5nOwogCWJvb2wJCW1lc3NhZ2VzOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vcmVvcmRlcmJ1ZmZlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZl ci5oCmluZGV4IDRhMDFmODcuLmRlNTgwMzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Jlb3JkZXJidWZmZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9y ZGVyYnVmZmVyLmgKQEAgLTExLDYgKzExLDggQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2Rl dGFpbHMuaCIKICNpbmNsdWRlICJsaWIvaWxpc3QuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5o IgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJzdG9yYWdl L3NpbnZhbC5oIgogI2luY2x1ZGUgInV0aWxzL2hzZWFyY2guaCIKICNpbmNsdWRlICJ1dGlscy9y ZWxjYWNoZS5oIgpAQCAtNTYsNiArNTgsNyBAQCB0eXBlZGVmIGVudW0gUmVvcmRlckJ1ZmZlckNo YW5nZVR5cGUKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5TRVJULAogCVJFT1JERVJfQlVGRkVS X0NIQU5HRV9VUERBVEUsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RFTEVURSwKKwlSRU9SREVS X0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfTUVTU0FH RSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OLAogCVJFT1JERVJfQlVGRkVS X0NIQU5HRV9JTlRFUk5BTF9TTkFQU0hPVCwKQEAgLTEzMCw2ICsxMzMsMTYgQEAgdHlwZWRlZiBz dHJ1Y3QgUmVvcmRlckJ1ZmZlckNoYW5nZQogCQkJY2hhcgkgICAqbWVzc2FnZTsKIAkJfQkJCW1z ZzsKIAorCQkvKiBEREwgTWVzc2FnZS4gKi8KKwkJc3RydWN0CisJCXsKKwkJCWNoYXIJICAgKnBy ZWZpeDsKKwkJCVNpemUJCW1lc3NhZ2Vfc2l6ZTsKKwkJCWNoYXIJICAgKm1lc3NhZ2U7CisJCQlP aWQJCQlyZWxpZDsKKwkJCURlcGFyc2VkQ29tbWFuZFR5cGUJY21kdHlwZTsKKwkJfQkJCWRkbG1z ZzsKKwogCQkvKiBOZXcgc25hcHNob3QsIHNldCB3aGVuIGFjdGlvbiA9PSAqX0lOVEVSTkFMX1NO QVBTSE9UICovCiAJCVNuYXBzaG90CXNuYXBzaG90OwogCkBAIC00MzAsNiArNDQzLDE2IEBAIHR5 cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwK IAkJCQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osCiAJCQkJCQkJCQkJY29uc3Qg Y2hhciAqbWVzc2FnZSk7CiAKKy8qIERETCBtZXNzYWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwor dHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlckRETE1lc3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIg KnJiLAorCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgICBY TG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwK KwkJCQkJCQkJCQkgICBPaWQgcmVsaWQsCisJCQkJCQkJCQkJICAgRGVwYXJzZWRDb21tYW5kVHlw ZSBjbWR0eXBlLAorCQkJCQkJCQkJCSAgIFNpemUgc3osCisJCQkJCQkJCQkJICAgY29uc3QgY2hh ciAqbWVzc2FnZSk7CisKIC8qIGJlZ2luIHByZXBhcmUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0 eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyQmVnaW5QcmVwYXJlQ0IpIChSZW9yZGVyQnVmZmVy ICpyYiwKIAkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4bik7CkBAIC00OTYsNiArNTE5 LDE3IEBAIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1NZXNzYWdlQ0IpICgKIAkJ CQkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osCiAJCQkJCQkJCQkJCSAgY29u c3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qIHN0cmVhbSBEREwgbWVzc2FnZSBjYWxsYmFjayBzaWdu YXR1cmUgKi8KK3R5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0Ip ICgKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyICpyYiwKKwkJCQkJCQkJCQkJCSBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJ CQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJCQkgT2lkIHJlbGlkLAor CQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkJCSBT aXplIHN6LAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKiBzdHJlYW0g dHJ1bmNhdGUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVm ZmVyU3RyZWFtVHJ1bmNhdGVDQikgKAogCQkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyICpyYiwK QEAgLTU0MSw2ICs1NzUsNyBAQCBzdHJ1Y3QgUmVvcmRlckJ1ZmZlcgogCVJlb3JkZXJCdWZmZXJB cHBseVRydW5jYXRlQ0IgYXBwbHlfdHJ1bmNhdGU7CiAJUmVvcmRlckJ1ZmZlckNvbW1pdENCIGNv bW1pdDsKIAlSZW9yZGVyQnVmZmVyTWVzc2FnZUNCIG1lc3NhZ2U7CisJUmVvcmRlckJ1ZmZlckRE TE1lc3NhZ2VDQiBkZGxtZXNzYWdlOwogCiAJLyoKIAkgKiBDYWxsYmFja3MgdG8gYmUgY2FsbGVk IHdoZW4gc3RyZWFtaW5nIGEgdHJhbnNhY3Rpb24gYXQgcHJlcGFyZSB0aW1lLgpAQCAtNTYwLDYg KzU5NSw3IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJUmVvcmRlckJ1ZmZlclN0cmVhbUNvbW1p dENCIHN0cmVhbV9jb21taXQ7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbUNoYW5nZUNCIHN0cmVhbV9j aGFuZ2U7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZTsKKwlS ZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCIHN0cmVhbV9kZGxtZXNzYWdlOwogCVJlb3Jk ZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNCIHN0cmVhbV90cnVuY2F0ZTsKIAogCS8qCkBAIC02MzUs NiArNjcxLDkgQEAgZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlclF1ZXVlQ2hhbmdlKFJlb3JkZXJC dWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZU1l c3NhZ2UoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLCBTbmFwc2hvdCBzbmFwc2hvdCwg WExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJCQkgIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hh ciAqcHJlZml4LAogCQkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVz c2FnZSk7CitleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKFJlb3JkZXJC dWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJIGNvbnN0 IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIg Km1lc3NhZ2UsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlKTsKIGV4dGVy biB2b2lkIFJlb3JkZXJCdWZmZXJDb21taXQoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklk LAogCQkJCQkJCQlYTG9nUmVjUHRyIGNvbW1pdF9sc24sIFhMb2dSZWNQdHIgZW5kX2xzbiwKIAkJ CQkJCQkJVGltZXN0YW1wVHogY29tbWl0X3RpbWUsIFJlcE9yaWdpbklkIG9yaWdpbl9pZCwgWExv Z1JlY1B0ciBvcmlnaW5fbHNuKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4IDYw YWNiZDEuLmQ1MzRjYmYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNx bC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApAQCAtNTk2OSw5 ICs1OTY5LDkgQEAgTGlzdCBvZiBzY2hlbWFzCiAoMCByb3dzKQogCiBcZFJwICJuby5zdWNoLnB1 YmxpY2F0aW9uIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNh dGlvbnMKLSBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyBO YW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCiAoMCByb3dzKQogCiBcZFJzICJuby5zdWNoLnN1YnNjcmlwdGlvbiIKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggMjc0YjM3ZC4uMDliMTRlMCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKQEAgLTMwLDIwICszMCwy MCBAQCBFUlJPUjogIGNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25zCiBMSU5FIDE6IC4u LnViX3h4eCBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9ICd0cnVlJywgcHVibGlz aF92aS4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF4KIFxkUnAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgICBOYW1lICAgICAgICB8ICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKLSB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8 ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0 cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCisg dGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IGYgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwg ZgogKDIgcm93cykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFNFVCAocHVi bGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlJyk7CiBcZFJwCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAg ICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRl c3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9k ZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAg ICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgIHwgZgorIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgICAgfCBmICAgICAgICB8IGYKICgyIHJvd3MpCiAKIC0tLSBhZGRpbmcgdGFibGVzCkBAIC04 NywxMCArODcsMTAgQEAgUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIC0tIHNob3VsZCBiZSBh YmxlIHRvIGFkZCBzY2hlbWEgdG8gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0 OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAi cHVibGljLnRlc3RwdWJfdGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC05OSwyMCArOTks MjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGRyb3Agc2No ZW1hIGZyb20gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZm9ydGFibGUgRFJPUCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRl c3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0 cHViX3RibDEiCiAKIC0tIHNob3VsZCBiZSBhYmxlIHRvIHNldCBzY2hlbWEgdG8gJ0ZPUiBUQUJM RScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgU0VUIEFM TCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxl Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0IgogCkBAIC0x MzQsMTAgKzEzNCwxMCBAQCBFUlJPUjogIHJlbGF0aW9uICJ0ZXN0cHViX25vcGsiIGlzIG5vdCBw YXJ0IG9mIHRoZSBwdWJsaWNhdGlvbgogLS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0IHRhYmxlIHRv IHNjaGVtYSBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEg U0VUIFRBQkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1h Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3Jz Y2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2No ZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgog CkBAIC0xNTksMTAgKzE1OSwxMCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9yYWxs dGFibGVzIgogCiBcZFJwKyB0ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcworICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBm CiAoMSByb3cpCiAKIERST1AgVEFCTEUgdGVzdHB1Yl90YmwyOwpAQCAtMTc0LDE5ICsxNzQsMTkg QEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIzIEZPUiBUQUJMRSB0ZXN0cHViX3RibDM7CiBD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjQgRk9SIFRBQkxFIE9OTFkgdGVzdHB1Yl90YmwzOwog UkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMwotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl czoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMyIKICAgICAicHVibGljLnRlc3RwdWJfdGJsM2Ei CiAKIFxkUnArIHRlc3RwdWI0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViNAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWI0CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJf dGJsMyIKIApAQCAtMjA3LDEwICsyMDcsMTAgQEAgVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQg YSA9IDE7CiAtLSBvbmx5IHBhcmVudCBpcyBsaXN0ZWQgYXMgYmVpbmcgaW4gcHVibGljYXRpb24s IG5vdCB0aGUgcGFydGl0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBB REQgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBcZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3BhcnRlZCIKIApAQCAtMjIz LDEwICsyMjMsMTAgQEAgQUxURVIgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQgREVUQUNIIFBBUlRJVElP TiB0ZXN0cHViX3BhcnRlZDE7CiBVUERBVEUgdGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0gMTsKIEFM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ycGFydGVkIFNFVCAocHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QgPSB0cnVlKTsKIFxkUnArIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCB0CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCB0ICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcGFydGVkIgogCkBAIC0yNTUsMTAgKzI1 NSwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1YjUgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwgdGVzdHB1Yl9yZl90Ymwy IFdIRVJFIChjIDw+ICd0ZXN0JyBBTkQgZCA8IDUpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7 CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9y Zl90YmwyIiBXSEVSRSAoKGMgPD4gJ3Rlc3QnOjp0ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTI3MSwx MCArMjcxLDEwIEBAIFRhYmxlczoKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgQUREIFRB QkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDEwMDAgQU5EIGUgPCAyMDAwKTsKIFxkUnAr IHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIK ICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkg QU5EIChkIDwgNSkpCkBAIC0yOTAsMTAgKzI5MCwxMCBAQCBQdWJsaWNhdGlvbnM6CiAKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWI1IERST1AgVEFCTEUgdGVzdHB1Yl9yZl90YmwyOwogXGRScCsg dGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgog ICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoKGUgPiAxMDAwKSBBTkQgKGUgPCAy MDAwKSkKQEAgLTMwMSwxMCArMzAxLDEwIEBAIFRhYmxlczoKIC0tIHJlbW92ZSB0ZXN0cHViX3Jm X3RibDEgYW5kIGFkZCB0ZXN0cHViX3JmX3RibDMgYWdhaW4gKGFub3RoZXIgV0hFUkUgZXhwcmVz c2lvbikKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3Ri bDMgV0hFUkUgKGUgPiAzMDAgQU5EIGUgPCA1MDApOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgog VGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoKGUgPiAzMDApIEFO RCAoZSA8IDUwMCkpCiAKQEAgLTMzNywxMCArMzM3LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3Nh Z2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3N5bnRheDEgRk9SIFRB QkxFIHRlc3RwdWJfcmZfdGJsMSwgT05MWSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPCA5OTkp IFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwog XGRScCsgdGVzdHB1Yl9zeW50YXgxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfc3ludGF4MQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Ymxp Yy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFIChl IDwgOTk5KQpAQCAtMzUwLDEwICszNTAsMTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAn RVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfc3ludGF4MiBGT1IgVEFCTEUgdGVz dHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1IFdIRVJFICho IDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNz YWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4MgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDIKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDIKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJ0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1 Yl9yZl90Ymw1IiBXSEVSRSAoaCA8IDk5OSkKQEAgLTY3NiwxMCArNjc2LDEwIEBAIENSRUFURSBQ VUJMSUNBVElPTiB0ZXN0cHViX3RhYmxlX2lucyBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdHJ1 bmNhdGUnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX3RhYmxlX2lucyBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChhKTsJCS0tIG9rCiBcZFJw KyB0ZXN0cHViX3RhYmxlX2lucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfdGFibGVfaW5zCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX3RhYmxlX2lucworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Ymxp Yy50ZXN0cHViX3RibDUiIChhKQogCkBAIC04MjEsMTAgKzgyMSwxMCBAQCBDUkVBVEUgVEFCTEUg dGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhIGludCwgYiBpbnQsIGMgaW50LCBQUklNQVJZIEtF WSAoYSxjKSk7CiBBTFRFUiBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgUkVQTElDQSBJ REVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnNfcGtleTsKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90aF9maWx0ZXJzIEFERCBUQUJMRSB0ZXN0cHViX3RibF9i b3RoX2ZpbHRlcnMgKGEsYykgV0hFUkUgKGMgIT0gMSk7CiBcZFJwKyB0ZXN0cHViX2JvdGhfZmls dGVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9i b3RoX2ZpbHRlcnMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Jv dGhfZmlsdGVycworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3Ri bF9ib3RoX2ZpbHRlcnMiIChhLCBjKSBXSEVSRSAoYyA8PiAxKQogCkBAIC0xMDI5LDEwICsxMDI5 LDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRlc3RwdWJfdGJsMSIgaXMgYWxyZWFkeSBtZW1iZXIg b2YgcHVibGljYXRpb24gInRlc3RwdWJfZm9ydGJsCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3J0YmwgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMTsKIEVSUk9SOiAgcHVibGljYXRpb24gInRl c3RwdWJfZm9ydGJsIiBhbHJlYWR5IGV4aXN0cwogXGRScCsgdGVzdHB1Yl9mb3J0YmwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGJsCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YmwKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiAgICAgInB1Ymxp Yy50ZXN0cHViX3RibDEiCkBAIC0xMDcwLDEwICsxMDcwLDEwIEBAIFB1YmxpY2F0aW9uczoKICAg ICAidGVzdHB1Yl9mb3J0YmwiCiAKIFxkUnArIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiAgICAgInB1YmxpYy50ZXN0 cHViX3RibDEiCkBAIC0xMTUxLDEwICsxMTUxLDEwIEBAIFJFVk9LRSBDUkVBVEUgT04gREFUQUJB U0UgcmVncmVzc2lvbiBGUk9NIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBEUk9QIFRBQkxF IHRlc3RwdWJfcGFydGVkOwogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDE7CiBcZFJwKyB0ZXN0cHVi X2RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9kZWZhdWx0CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBm ICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gZmFpbCAtIG11c3QgYmUgb3du ZXIgb2YgcHVibGljYXRpb24KQEAgLTExNjQsMjAgKzExNjQsMjAgQEAgRVJST1I6ICBtdXN0IGJl IG93bmVyIG9mIHB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAogUkVTRVQgUk9MRTsKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVsdCBSRU5BTUUgVE8gdGVzdHB1Yl9mb287CiBcZFJw IHRlc3RwdWJfZm9vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICBOYW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSB0ZXN0cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNh dGlvbnMKKyAgICBOYW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHRlc3RwdWJfZm9vIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAg IHwgZgogKDEgcm93KQogCiAtLSByZW5hbWUgYmFjayB0byBrZWVwIHRoZSByZXN0IHNpbXBsZQog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb28gUkVOQU1FIFRPIHRlc3RwdWJfZGVmYXVsdDsK IEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVsdCBPV05FUiBUTyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIyOwogXGRScCB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgICBOYW1l ICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwdWJfZGVm YXVsdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgICBO YW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMiB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAg ICB8IGYKICgxIHJvdykKIAogLS0gYWRkaW5nIHNjaGVtYXMgYW5kIHRhYmxlcwpAQCAtMTE5Mywx OSArMTE5MywxOSBAQCBDUkVBVEUgVEFCTEUgIkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hF TUEiKGlkIGludCk7CiBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUg UFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEZPUiBBTEwgVEFCTEVTIElOIFNDSEVNQSBw dWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWIyX2ZvcnNjaGVtYSBGT1IgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBw dWJfdGVzdDIsIHB1Yl90ZXN0MzsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJf dGVzdDIiCkBAIC0xMjE5LDQ0ICsxMjE5LDQ0IEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHVi Nl9mb3JzY2hlbWEgRk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1BICJDVVJSRU5UX1NDSEVNQSIsCiBD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBGT1IgVEFCTEUgIkNVUlJFTlRfU0NI RU1BIi4iQ1VSUkVOVF9TQ0hFTUEiOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnAr IHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1h czoKICAgICAicHVibGljIgogCiBcZFJwKyB0ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjRfZm9yc2NoZW1hCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogCiBcZFJw KyB0ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWI2 X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWI2X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViNl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi Q1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRh YmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxl CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEuQ1VSUkVOVF9TQ0hF TUEiCiAKQEAgLTEyOTAsMTAgKzEyOTAsMTAgQEAgRVJST1I6ICBzY2hlbWEgInRlc3RwdWJfdmll dyIgZG9lcyBub3QgZXhpc3QKIC0tIGRyb3BwaW5nIHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxlY3Qg dGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlvbgogRFJPUCBTQ0hFTUEgcHViX3Rlc3QzOwogXGRScCsg dGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFz OgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzMDEsMjAgKzEzMDEsMjAg QEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHJlbmFtaW5nIHRoZSBzY2hlbWEgc2hvdWxkIHJl ZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlvbgogQUxURVIgU0NIRU1BIHB1Yl90ZXN0MSBS RU5BTUUgdG8gcHViX3Rlc3QxX3JlbmFtZWQ7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MV9yZW5h bWVkIgogICAgICJwdWJfdGVzdDIiCiAKIEFMVEVSIFNDSEVNQSBwdWJfdGVzdDFfcmVuYW1lZCBS RU5BTUUgdG8gcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90 ZXN0MiIKQEAgLTEzMjIsMTAgKzEzMjIsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIGFs dGVyIHB1YmxpY2F0aW9uIGFkZCBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2Zv cnNjaGVtYSBBREQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1 YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAg ICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzMzQsMTAgKzEzMzQsMTAgQEAgVGFi bGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBB REQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2No ZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFf Zm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJw dWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzNDYsMTAgKzEzNDYsMTAgQEAgVGFibGVz IGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQg QUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogRVJST1I6ICBzY2hlbWEgInB1Yl90ZXN0 MSIgaXMgYWxyZWFkeSBtZW1iZXIgb2YgcHVibGljYXRpb24gInRlc3RwdWIxX2ZvcnNjaGVtYSIK IFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzU3LDEwICsx MzU3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBkcm9w IHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgQUxMIFRB QkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAg LTEzNjgsMTAgKzEzNjgsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0 MjsKIEVSUk9SOiAgdGFibGVzIGZyb20gc2NoZW1hICJwdWJfdGVzdDIiIGFyZSBub3QgcGFydCBv ZiB0aGUgcHVibGljYXRpb24KIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xMzc5LDI5 ICsxMzc5LDI5IEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViMV9mb3JzY2hlbWEgRFJPUCBBTEwgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2No ZW1hOwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0 CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogLS0gZHJvcCBhbGwgc2NoZW1hcwogQUxURVIg UFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEg cHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiAo MSByb3cpCiAKIC0tIGFsdGVyIHB1YmxpY2F0aW9uIHNldCBtdWx0aXBsZSBzY2hlbWEKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEg cHViX3Rlc3QxLCBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAg ICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHVi X3Rlc3QyIgpAQCAtMTQxMCwxMCArMTQxMCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVN QSBub25fZXhpc3RlbnRfc2NoZW1hOwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hl bWEiIGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rl c3QyIgpAQCAtMTQyMiwxMCArMTQyMiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVt b3ZpbmcgdGhlIGR1cGxpY2F0ZSBzY2hlbWFzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9m b3JzY2hlbWEgU0VUIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QxOwog XGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBz Y2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1MDQsMTggKzE1MDQsMTggQEAgU0VUIGNs aWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIz X2ZvcnNjaGVtYTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViM19m b3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjNfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjNfZm9yc2NoZW1hIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBc ZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTUyNSwyMCArMTUyNSwyMCBAQCBDUkVBVEUg UFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUgRk9SIEFMTCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MQogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGVfZm9y c2NoZW1hIEZPUiBUQUJMRSBwdWJfdGVzdDIudGJsMSwgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHVi X3Rlc3QxOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfZm9yc2No ZW1hX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVi X3Rlc3QyLnRibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIFxk UnArIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlczoKICAgICAicHViX3Rlc3QyLnRibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgotLSAK Mi43LjIud2luZG93cy4xCgo= --_005_OS0PR01MB5716D3B79A607B547F2AB90D94819OS0PR01MB5716jpnp_--