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 1o3cqu-0003f8-Sf for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Jun 2022 12:19:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1o3cqt-000824-PW for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Jun 2022 12:19:27 +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 1o3cqs-00081n-Ve for pgsql-hackers@lists.postgresql.org; Tue, 21 Jun 2022 12:19:27 +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 1o3cqp-0001Q3-GY for pgsql-hackers@lists.postgresql.org; Tue, 21 Jun 2022 12:19:26 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1655813964; x=1687349964; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=Zh/otKBfKPELtY1s8GX5e4IZi5T5eKgdjwz45ywr5WA=; b=eYwDPc8mjrBnjEgRbwqnOx1igAYwh0JPd061QqyeHGFh/fpVusy2uKcz F+pd23OwFErS6TE6jQRJTzmMe2pxxhqUKLmHlt+JBr00oIyQbUzihgyXA mS9l6780Tnjg9WhWyUJWD6sddUp+Nte+UgV8N5kBH5N3rakHF1B5ynMM4 fZRm4sPPs3WjTLrPtgF0vQDTiib9AcrwOr4EDEMNOT/Q5JI2zW/KgGz6M qVXzU0SuTi+baCWLRxo2yhK5zPr5BmPZXTQKFriivQqEErvE4u1ETuS0i s9UUdA48TWgT7p115ej2ATH+rk1Zdk0z/FLT3Ek3Jpz31cvJv0zn5Nabh w==; X-IronPort-AV: E=McAfee;i="6400,9594,10384"; a="58514493" X-IronPort-AV: E=Sophos;i="5.92,209,1650898800"; d="scan'208,223";a="58514493" Received: from mail-tycjpn01lp2175.outbound.protection.outlook.com (HELO JPN01-TYC-obe.outbound.protection.outlook.com) ([104.47.23.175]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jun 2022 21:19:19 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hsfgBYgDWwUQRycT4UKeqxm5l2WDjd7X3DWmjj8CdoT6W/ugX3ylcwMYbQT1ptrMNHwevsolL3o+QByF0c6zpUvz2wt7jqLF6Jsmi5rtKPX/v+i4PQfmz1eFxfqgkjp59UBJ49WK8a/XehqEtpB1QGA7YY5xx0GTfGOSPsGVSw6KfIB9BA5TjYMKhDYT5Y9e+MTJQVLJuLGa8fJb5dSXjo8nNPb10kp1e2YlTAAOg3wx6stFndkLLr9NZ1HzUQ6OigLDcDkuSOuoVDXek3iioVyl7yNH36E+JnbeFWGjUOVW7LXhwTkBuG9pIW/FBxosQT/SaFjfuRobqRTdBUOKiw== 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=O2WH1vd7vXzItO1lgauGLJwimuQJJVoR0i40k5YjP+M=; b=Q1M4wNg6kFvbxliWKRv8zt2MXDVpioCSDGMB//Fq36lImzdlV1PW7v/3FMlpIcw479iwLuAprjGY5JFZfOfoocTpgUCI+lN0tBdA+G5TTMoHoBYeZ9fIwloIb2w5rWab2fzo3ICU9wnSEftHrFutY4u2zl0Rhym0y+mWfrJ8owAw0R41yS25JXV3gWR826ONPwuGODlcX8JBSAbzfxecONZR9kLYSGNrHeM1ewzwUrub9zk+3c3rP3lZQiAshB2QVTI9Rmt5FTsdcmnfiKuStCrImpgnd15C1sTnbxUpgdDtYsi3eAhLhcOK+Kpu1q8swyvm2poL78fz20EB8YWRzQ== 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=O2WH1vd7vXzItO1lgauGLJwimuQJJVoR0i40k5YjP+M=; b=kXefHVTkDLvHuJALMMhVOT9fxsrOegnPppRwCLVHp53ZjWwp7zdwXuO5nVHE/lvK/Gob2J4sr95WFgikFTLINVyWZzKYAcWXA2oGaY/xrzVk9J/JSvIOhA8iVNFj460uRfrChm2tMFW8b7oM0fXqxLMJr+i8QvsbJ4+RKBtZ2JI= Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com (2603:1096:604:bb::12) by OSAPR01MB3284.jpnprd01.prod.outlook.com (2603:1096:604:4::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.16; Tue, 21 Jun 2022 12:19:15 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::e5d7:143b:6e55:80f9]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::e5d7:143b:6e55:80f9%7]) with mapi id 15.20.5353.022; Tue, 21 Jun 2022 12:19:15 +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+AIACG98AgBfo2QCABsLLgIAyhVqAgBOd9QCAAOYWgIAAPoOAgAUH2oCABQvawIAPYMWAgAHJ99CAAn9yAIAAPzmAgAQqm4CAA6XiQIACJNSQ Date: Tue, 21 Jun 2022 12:19:15 +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: 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: f12a9b76-5ca4-44aa-4b42-08da538041e2 x-ms-traffictypediagnostic: OSAPR01MB3284:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: SEkcin6r90/qRg17SLSCBib/2lwqesRoEOr/s7K5ez0OjY4yv4CLqCBuDRLTXpxnPaVzVIwkfruEDt8OULTjVp+u6ig9SBlP46VPfWK9bbeN2WokAqSy4N0cxcZzdFl4mamm3XLvvOi3J1P03dBTt7tEj6l+J3YKqrCdr5D+NYyZWSlGOiB8v/ghGeRSX0oVgX5HzQmbD0XL5cj3Tyz/OW1uBeuDFS06zSX0ssl/pVe38EYKJ/Jey3GfKAU9/xm1nj0/jtjz1rUWcPXOYv4S5SkZWrXc4LIldHytAdFewkKYjwe+0680F9a/GO+CsI1teUM1iw2+GzZgKP5vMtjUu25mPS3AlV9aQqFY0esEo+4+Gm0yFSPs/uL6qRcHrwHt5vBCHLc8RBDENhjrh/ihIUnIYHs/CZDb6zb7y1jTk+JNg2ysdINwNnCoNjxzglq7KBPOL/7MZY1iiMJVG5lutxpfeya1WCE090ONc4a47e4tgG+a25cLroqIJtFenZtyR4XRwA7vcqoncuQlky4YlZrXlBXk/P2mZRAl1y2L4ef30qp/T3RME5l0hX8kadHtPI7ZZDUf4LQ7U3yPlnj05EsJj6nWGSqElnvEy3OTITtv0SJ8u0iV/KF6vFr+6Mv9b2y1msJIzxVyBu139AhApcY7J6SMf4IbylvAKmeNYaKbXpteHzyG85eLWLvsyEwMClSWHwfL1o6g3aA3/DyXMebF5mDlMeRqZhusjS5yfOjy0pOd87XBl+fKvTkxIYF27mvZw8mhKXXh9ta14ytYEXTtTbe+Z6rX5C2htJT8Br0= 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)(39860400002)(366004)(396003)(376002)(136003)(346002)(86362001)(33656002)(85182001)(4326008)(55016003)(8676002)(5660300002)(52536014)(66446008)(8936002)(478600001)(38070700005)(66476007)(71200400001)(966005)(66556008)(66946007)(2906002)(54906003)(316002)(76116006)(6916009)(64756008)(6506007)(7696005)(99936003)(26005)(53546011)(9686003)(186003)(82960400001)(41300700001)(38100700002)(83380400001)(122000001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?a2NnQ1p0djBxdHpTUTdkRnUweXM0Z3FsaWZ5ejJrZFZOWDh5V0pObm1DMjlR?= =?utf-8?B?aGhwcFlFN0FBc1VkZVdOeVZYREwzSjhxRlZndWlDVjJqcTdENVF2U1ZkNkl0?= =?utf-8?B?TjlqbGpwditvMHc5OXNXT3J0cmhqbjg2UFVDY09lOUFsdVRVNzZRRTJRWG5x?= =?utf-8?B?cjV6QTRzNHltZDM2bmJaZ1BURHdqRnlXSXVqajNaMHVCZ1czQ3ZZRittZWNV?= =?utf-8?B?L3hubEJabW5NZnhoVUNBT2NxZHIvd0ppV1ZrNGQ5VGxsRHVOOVMwWTlGVjVL?= =?utf-8?B?LzRjbEwrUitGalRocjBsWERPZmNUT1VWTVg0bU44Tml0L1ZvMjZMdFdHVjFO?= =?utf-8?B?MU91c0VuR0hqcUdMUDIyQ0hGQ1ZrOFBFRlVyWFcvV0NoVHArc1EzZVM4djJQ?= =?utf-8?B?eG9qbkpDT1lQMFJndEtoSURHRlNoT2FYU0g1aXUzTlVoRFEyZTNMOWRXdWU5?= =?utf-8?B?cWZZNzBTeVIxcitHUEU1b0s2b2IwVE9uSWtBd083V1BCSXZzVDZNNk9aZm8z?= =?utf-8?B?VnNuU1lJdHBRcHYydFBnMVZGMGdOeTJWUEZhaTBIRGk0TThjSXo0R3ZNSHA4?= =?utf-8?B?QmpOcHZVN2N2WGZ6eUp0SnZ2R3Z0UHhBbVJsNDlrOEpFOHJWMVJSbEEyUVNm?= =?utf-8?B?Z2dsZzUxcm5qRjNDNWFkcnhtSG1jVThHRDJJZjZKQTdkWlZWNWUvc0gzYzRo?= =?utf-8?B?VENaOFl6WDdBQUg1TFo1c0d0SS9EeEVKK0JXdmd5ek1YeWFQbzNMZGpocE1O?= =?utf-8?B?NzVlMzJCbzcraG4vSllLM2ZHR05LVERybHoxVzIyVEcrcHI3NkRhVS8wRnB0?= =?utf-8?B?VmpDQXZQS1VrRTFEOE1ING9YUlIzc0d5TjdRVSs4V1BwREtxeGJKRXAxVlk4?= =?utf-8?B?VHc0cW1SM0pOWWFQLzV2VUlHVU5DNjZpYy93cEx3M2RMRm9xMnYwMGFFelFr?= =?utf-8?B?Ylk4WTNEcHdVL0RPb29CMDc1R3R0ZkVYQm9RQ1p3KzNqK2J2N0NBdll3dGJY?= =?utf-8?B?alZvWnJqOWwzMzZ2M0drb2hHbzNBbWowNThLeGFhSHJRWS95TE5IUWdrbzVH?= =?utf-8?B?S1RiYmFDNVA4LzdkNE1xaFo5dGw0ZlhGTU1yMVNkaGpaT1l2TzZHcEZvZWZM?= =?utf-8?B?bHNiRDJGZEdqRGtDVzJhZVM2ckZ6NzJqaXRkRXNQbFF4U2VVUHlzYzYzUytB?= =?utf-8?B?R2dmMmxtVkVhdXJnc2g0TyszMTQvc1FrdC90cExqTVFJWVRQYmpsaXQ2Yjl6?= =?utf-8?B?OThXTkcyOWdraEJXTEhDeGwzNnRmZ1ArMnFxSDQrbElEREFNWDNFTGdhWDFi?= =?utf-8?B?Tm5ob3VOTjdsZSttakdvaVVEYVNPWW01ZUd6OExuS2xHdDh1Z2JYbTRMNWM5?= =?utf-8?B?UjhqczR2ZXdUQ01QZE0wc1pncVlTaXcvU20wZ0xPN3p2dm8xbkFJYXdLY2VG?= =?utf-8?B?UUxjZUs5MjhEeFU4ZnhDRUxVai9sZlJTaldRQ20rN2d4QzZsZ3d4SEtXQ3RH?= =?utf-8?B?ZGY0Rnp3b0hlRzloNm9vUVpZa3psR0k1V1hRODRwNVdNUGtsRWdUYXRSalBu?= =?utf-8?B?anBRNTIyL3RqMndxelZTVW5hZk9veVlseEtrWG1Xek14R04vNmdLQkc3WnB1?= =?utf-8?B?endLdFFiTXEzcnI2T3ZVdy8yTUVJZkpZN2t4aEk1V0VXbExiK0dHTVFGSnNO?= =?utf-8?B?Rm9VMEJDRDU1MUgraEE4UDlXWDVhNmRRTjlIWlBuTnBlbDVPdi9ENy8vVDBn?= =?utf-8?B?UEkycTBRNTRudE1kcUNpMTl5WWNPWXZNTmxDWGxTcW5VNVE5dzFHSG8yeTJ3?= =?utf-8?B?c0o2a2NvcytQQTlDdTBYMTBwTDc3RTk3a2F0MlRuSzY4TFZJRHRmNmR6NEV5?= =?utf-8?B?Sk1kYWE1ZlZQVVpJZDVyR3U0Z2dZREVua1NEa1FUdmlzRlNGMUdVRWIzakRT?= =?utf-8?B?eWx4bzlXRjlISjRKeVBEQ2xCKzB3RzZiWUVvQTBSdTBweEFDUzJwZVZDN1cy?= =?utf-8?B?ZUtHZTVTc3FQd3hhSHJEUURtc1ZZQ0NqTXZxMXp4Ukw1Yjl4dTJBNmNHWGdF?= =?utf-8?B?eG4wSU5xM2tRV1UrVXpNT3Mvb1dVTXVMdTVMa3R1OS9EWmVkRFZPWlFvRnJM?= =?utf-8?B?NkhNL3VkRi8wU2ZUT1k3Q3ZqellTWVB3dk43MlQ5K0JmcGRNb2lzcFMrT1FB?= =?utf-8?B?QXVPY0JOQkVsY0VqWFl5S2theVNvWjJkKzhxbHdHL2ZRcVhCY3dLcW4xNnUx?= =?utf-8?B?emJBUjZtQjZBbkFKKzBzRjVrS2dPblhyUGNLZ3BtMzZ4QWQwZFc4VnZGZEVN?= =?utf-8?B?M0xESVYvbnZVSUpPZktUZTBRZko0bWpJUG5xb1AyaVQxRWVpMG83QT09?= Content-Type: multipart/mixed; boundary="_005_OS0PR01MB5716B1526C2EDA66907E733B94B39OS0PR01MB5716jpnp_" 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: f12a9b76-5ca4-44aa-4b42-08da538041e2 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Jun 2022 12:19:15.2302 (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: z1vnpdv/cDLPserle/vtyJnVwHb+tsogNTB+Div8RWn5wuAtg7tCovkFQFiu9UKq5COJ1XRdq/M+cxvAcCEtKw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSAPR01MB3284 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_005_OS0PR01MB5716B1526C2EDA66907E733B94B39OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gTW9uZGF5LCBKdW5lIDIwLCAyMDIyIDExOjMyIEFNIGhvdXpqLmZuc3RAZnVqaXRzdS5jb20g PGhvdXpqLmZuc3RAZnVqaXRzdS5jb20+IHdyb3RlOg0KPiANCj4gT24gU2F0dXJkYXksIEp1bmUg MTgsIDIwMjIgMzozOCBBTSBaaGVuZyBMaSA8emhlbmdsaTEwQGdtYWlsLmNvbT4gd3JvdGU6DQo+ ID4gT24gV2VkLCBKdW4gMTUsIDIwMjIgYXQgMTI6MDAgQU0gQW1pdCBLYXBpbGEgPGFtaXQua2Fw aWxhMTZAZ21haWwuY29tPg0KPiA+IHdyb3RlOg0KPiA+ID4NCj4gPiA+IE9uIFdlZCwgSnVuIDE1 LCAyMDIyIGF0IDU6NDQgQU0gWmhlbmcgTGkgPHpoZW5nbGkxMEBnbWFpbC5jb20+IHdyb3RlOg0K PiA+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiBXaGlsZSBJIGFncmVlIHRoYXQgdGhlIGRlcGFyc2Vy IGlzIG5lZWRlZCB0byBoYW5kbGUgdGhlIHBvdGVudGlhbA0KPiA+ID4gPiBzeW50YXggZGlmZmVy ZW5jZXMgYmV0d2VlbiB0aGUgcHViL3N1YiwgSSB0aGluayBpdCdzIG9ubHkgcmVsZXZhbnQNCj4g PiA+ID4gZm9yIHRoZSB1c2UgY2FzZXMgd2hlcmUgb25seSBhIHN1YnNldCBvZiB0YWJsZXMgaW4g dGhlIGRhdGFiYXNlIGFyZQ0KPiA+ID4gPiByZXBsaWNhdGVkLiBGb3Igb3RoZXIgdXNlIGNhc2Vz IHdoZXJlIGFsbCB0YWJsZXMsIGZ1bmN0aW9ucyBhbmQNCj4gPiA+ID4gb3RoZXIgb2JqZWN0cyBu ZWVkIHRvIGJlIHJlcGxpY2F0ZWQsIChmb3IgZXhhbXBsZSwgY3JlYXRpbmcgYQ0KPiA+ID4gPiBs b2dpY2FsIHJlcGxpY2EgZm9yIG1ham9yIHZlcnNpb24gdXBncmFkZSkgdGhlcmUgd29uJ3QgYmUg YW55IHN5bnRheA0KPiA+ID4gPiBkaWZmZXJlbmNlIHRvIGhhbmRsZSBhbmQgdGhlIHNjaGVtYXMg YXJlIHN1cHBvc2VkIHRvIG1hdGNoIGV4YWN0bHkNCj4gPiA+ID4gYmV0d2VlbiB0aGUgcHViL3N1 Yi4gSW4gb3RoZXIgd29yZHMgdGhlIHVzZXIgc2Vla3MgdG8gY3JlYXRlIGFuDQo+ID4gPiA+IGlk ZW50aWNhbCByZXBsaWNhIG9mIHRoZSBzb3VyY2UgZGF0YWJhc2UgYW5kIHRoZSBERExzIHNob3Vs ZCBiZQ0KPiA+ID4gPiByZXBsaWNhdGVkIGFzIGlzIGluIHRoaXMgY2FzZS4NCj4gPiA+ID4NCj4g PiA+DQo+ID4gPiBJIHRoaW5rIGV2ZW4gZm9yIGRhdGFiYXNlLWxldmVsIHJlcGxpY2F0aW9uIHdl IGNhbid0IGFzc3VtZSB0aGF0DQo+ID4gPiBzb3VyY2UgYW5kIHRhcmdldCB3aWxsIGFsd2F5cyBo YXZlIHRoZSBzYW1lIGRhdGEgaW4gd2hpY2ggY2FzZSAiQ3JlYXRlDQo+ID4gPiBUYWJsZSBBcyAu LiIsICJBbHRlciBUYWJsZSAuLiAiIGtpbmQgb2Ygc3RhdGVtZW50cyBjYW4ndCBiZSByZXBsaWNh dGVkDQo+ID4gPiBhcyBpdCBpcyBiZWNhdXNlIHRoYXQgY2FuIGxlYWQgdG8gZGlmZmVyZW50IHJl c3VsdHMuDQo+ID4gIkNyZWF0ZSBUYWJsZSBBcyAuLiIgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IHNl dHRpbmcgdGhlIHNraXBEYXRhIGZsYWcgb2YgdGhlDQo+ID4gc3RhdGVtZW50IHBhcnNldHJlZWUg YmVmb3JlIHJlcGxheToNCj4gPg0KPiA+IC8qDQo+ID4gKiBGb3JjZSBza2lwcGluZyBkYXRhIHBv cHVsYXRpb24gdG8gYXZvaWQgZGF0YSBpbmNvbnNpc3RlbmN5Lg0KPiA+ICogRGF0YSBzaG91bGQg YmUgcmVwbGljYXRlZCBmcm9tIHRoZSBwdWJsaXNoZXIgaW5zdGVhZC4NCj4gPiAqLw0KPiA+IGNh c3RtdC0+aW50by0+c2tpcERhdGEgPSB0cnVlOw0KPiA+DQo+ID4gIkFsdGVyIFRhYmxlIC4uICIg dGhhdCByZXdyaXRlcyB3aXRoIHZvbGF0aWxlIGV4cHJlc3Npb25zIGNhbiBhbHNvIGJlIGhhbmRs ZWQNCj4gPiB3aXRob3V0IGFueSBzeW50YXggY2hhbmdlLCBieSBlbmFibGluZyB0aGUgdGFibGUg cmV3cml0ZSByZXBsaWNhdGlvbiBhbmQNCj4gPiBjb252ZXJ0aW5nIHRoZSByZXdyaXRlIGluc2Vy dHMgdG8gdXBkYXRlcy4gWkoncyBwYXRjaCBpbnRyb2R1Y2VkIHRoaXMgc29sdXRpb24uDQo+ID4g SSd2ZSBhbHNvIGFkb3B0ZWQgdGhpcyBhcHByb2FjaCBpbiBteSBsYXRlc3QgcGF0Y2gNCj4gPiAw MDEyLVN1cHBvcnQtcmVwbGljYXRpb24tb2YtQUxURVItVEFCTEUtY29tbWFuZHMtdGhhdC1yZXcu cGF0Y2gNCj4gPg0KPiA+ID4gVGhlIG90aGVyIHBvaW50DQo+ID4gPiBpcyB0b21vcnJvdyB3ZSBj YW4gZXh0ZW5kIHRoZSBkYXRhYmFzZSBsZXZlbCBvcHRpb24vc3ludGF4IHRvIGV4Y2x1ZGUNCj4g PiA+IGEgZmV3IG9iamVjdHMgKHNvbWV0aGluZyBsaWtlIFsxXSkgYXMgd2VsbCBpbiB3aGljaCBj YXNlIHdlIGFnYWluIG5lZWQNCj4gPiA+IHRvIGZpbHRlciBhdCB0aGUgcHVibGlzaGVyIGxldmVs DQo+ID4NCj4gPiBJIHRoaW5rIGZvciBzdWNoIGNhc2VzIGl0J3Mgbm90IGZ1bGwgZGF0YWJhc2Ug cmVwbGljYXRpb24gYW5kIHdlIGNvdWxkIHRyZWF0IGl0IGFzDQo+ID4gdGFibGUgbGV2ZWwgRERM IHJlcGxpY2F0aW9uLCBpLmUuIHVzZSB0aGUgdGhlIGRlcGFyc2VyIGZvcm1hdC4NCj4gDQo+IEhp LA0KPiANCj4gSGVyZSBhcmUgc29tZSBwb2ludHMgaW4gbXkgbWluZCBhYm91dCB0aGUgdHdvIGFw cHJvYWNoZXMgZGlzY3Vzc2VkIGhlcmUuDQo+IA0KPiAxKSBzZWFyY2hfcGF0Y2ggdnMgc2NoZW1h IHF1YWxpZnkNCj4gDQo+IEFnYWluLCBJIHN0aWxsIHRoaW5rIGl0IHdpbGwgYnJpbmcgbW9yZSBm bGV4aWJpbGl0eSBhbmQgc2VjdXJpdHkgYnkgc2NoZW1hIHF1YWxpZnkgdGhlDQo+IG9iamVjdHMg aW4gRERMIGNvbW1hbmQgYXMgbWVudGlvbmVkIGJlZm9yZVsxXS4NCj4gDQo+IEJlc2lkZXMsIGEg c2NoZW1hIHF1YWxpZmllZCBEREwgaXMgYWxzbyBtb3JlIGFwcHJvcHJpYXRlIGZvciBvdGhlciB1 c2UNCj4gY2FzZXMoZS5nLiBhIHRhYmxlLWxldmVsIHJlcGxpY2F0aW9uKS4gQXMgaXQncyBwb3Nz aWJsZSB0aGUgc2NoZW1hIGlzIGRpZmZlcmVudA0KPiBiZXR3ZWVuIHB1Yi9zdWIgYW5kIGl0J3Mg ZWFzeSB0byBjYXVzZSB1bmV4cGVjdGVkIGFuZCB1bmRldGVjdGFibGUgZmFpbHVyZSBpZg0KPiB3 ZSBqdXN0IGxvZyB0aGUgc2VhcmNoX3BhdGguDQo+IA0KPiBJdCBtYWtlcyBtb3JlIHNlbnNlIHRv IG1lIHRvIGhhdmUgdGhlIHNhbWUgc3R5bGUgV0FMIGxvZyhzY2hlbWEgcXVhbGlmaWVkKQ0KPiBm b3INCj4gYm90aCBkYXRhYmFzZSBsZXZlbCBvciB0YWJsZSBsZXZlbCByZXBsaWNhdGlvbiBhcyBp dCB3aWxsIGJyaW5nIG1vcmUNCj4gZmxleGliaWxpdHkuDQo+IA0KPiANCj4gPiAiQ3JlYXRlIFRh YmxlIEFzIC4uIiBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgc2V0dGluZyB0aGUgc2tpcERhdGEgZmxh ZyBvZiB0aGUNCj4gPiBzdGF0ZW1lbnQgcGFyc2V0cmVlZSBiZWZvcmUgcmVwbGF5Og0KPiANCj4g MikgQWJvdXQgdGhlIGhhbmRsaW5nIG9mIENSRUFURSBUQUJMRSBBUzoNCj4gDQo+IEkgdGhpbmsg aXQncyBub3QgYSBhcHByb3ByaWF0ZSBhcHByb2FjaCB0byBzZXQgdGhlIHNraXBkYXRhIGZsYWcg b24gc3Vic2NyaWJlcg0KPiBhcyBpdCBjYW5ub3QgaGFuZGxlIEVYRUNVVEUgY29tbWFuZCBpbiBD VEFTLg0KPiANCj4gQ1JFQVRFIFRBQkxFIHE1X3ByZXBfcmVzdWx0cyBBUyBFWEVDVVRFIHE1KDIw MCwgJ0RUQUFBQScpOw0KPiANCj4gVGhlIFByZXBhcmVkIHN0YXRlbWVudCBpcyBhIHRlbXBvcmFy eSBvYmplY3Qgd2hpY2ggd2UgZG9uJ3QgcmVwbGljYXRlLiBTbyBpZg0KPiB5b3UgZGlyZWN0bHkg ZXhlY3V0ZSB0aGUgb3JpZ2luYWwgU1FMIG9uIHN1YnNjcmliZXIsIGV2ZW4gaWYgeW91IHNldCBz a2lwZGF0YQ0KPiBpdCB3aWxsIGZhaWwuDQo+IA0KPiBJIHRoaW5rIGl0IGRpZmZpY3VsdCB0byBt YWtlIHRoaXMgd29yayBhcyB5b3UgbmVlZCBoYW5kbGUgdGhlIGNyZWF0ZS9kcm9wIG9mDQo+IHRo aXMgcHJlcGFyZWQgc3RhdGVtZW50LiBBbmQgZXZlbiBpZiB3ZSBleHRlbmRlZCBzdWJzY3JpYmVy J3MgY29kZSB0byBtYWtlIGl0DQo+IHdvcmssIGl0IGRvZXNuJ3Qgc2VlbXMgbGlrZSBhIHN0YW5k YXJkIGFuZCBlbGVnYW50IGFwcHJvYWNoLg0KPiANCj4gDQo+ID4gIkFsdGVyIFRhYmxlIC4uICIg dGhhdCByZXdyaXRlcyB3aXRoIHZvbGF0aWxlIGV4cHJlc3Npb25zIGNhbiBhbHNvIGJlIGhhbmRs ZWQNCj4gPiB3aXRob3V0IGFueSBzeW50YXggY2hhbmdlLCBieSBlbmFibGluZyB0aGUgdGFibGUg cmV3cml0ZSByZXBsaWNhdGlvbiBhbmQNCj4gPiBjb252ZXJ0aW5nIHRoZSByZXdyaXRlIGluc2Vy dHMgdG8gdXBkYXRlcy4gWkoncyBwYXRjaCBpbnRyb2R1Y2VkIHRoaXMgc29sdXRpb24uDQo+IA0K PiAzKSBBYm91dCB0aGUgaGFuZGxpbmcgb2YgQUxURVIgVEFCTEUgcmV3cml0ZS4NCj4gDQo+IFRo ZSBhcHByb2FjaCBJIHByb3Bvc2VkIGJlZm9yZSBpcyBiYXNlZCBvbiB0aGUgZXZlbnQgdHJpZ2dl ciArIGRlcGFyc2VyDQo+IGFwcHJvYWNoLiBXZSB3ZXJlIGFibGUgdG8gaW1wcm92ZSB0aGF0IGFw cHJvYWNoIGFzIHdlIGRvbid0IG5lZWQgdG8NCj4gcmVwbGljYXRlDQo+IHRoZSByZXdyaXRlIGlu IG1hbnkgY2FzZXMuIEZvciBleGFtcGxlOiB3ZSBkb24ndCBuZWVkIHRvIHJlcGxpY2F0ZSByZXdy aXRlIGRtbA0KPiBpZiB0aGVyZSBpcyBubyB2b2xhdGlsZS9tdXRhYmxlIGZ1bmN0aW9uLiBXZSBz aG91bGQgY2hlY2sgYW5kIGZpbHRlciB0aGVzZSBjYXNlDQo+IGF0IHB1Ymxpc2hlciAoZS5nLiB2 aWEgZGVwYXJzZXIpIGluc3RlYWQgb2YgY2hlY2tpbmcgdGhhdCBhdCBzdWJzY3JpYmVyLg0KPiAN Cj4gQmVzaWRlcywgYXMgZGlzY3Vzc2VkLCB3ZSBuZWVkIHRvIGdpdmUgd2FybmluZyBvciBlcnJv ciBmb3IgdGhlIGNhc2VzIHdoZW4gRERMDQo+IGNvbnRhaW5zIHZvbGF0aWxlIGZ1bmN0aW9uIHdo aWNoIHdvdWxkIGJlIGV4ZWN1dGVkWzJdLiBXZSBzaG91bGQgY2hlY2sgdGhpcyBhdA0KPiBwdWJs aXNoZXIgYXMgd2VsbCh2aWEgZGVwYXJzZXIpLg0KPiANCj4gDQo+ID4gSSB0aGluayBmb3Igc3Vj aCBjYXNlcyBpdCdzIG5vdCBmdWxsIGRhdGFiYXNlIHJlcGxpY2F0aW9uIGFuZCB3ZSBjb3VsZCB0 cmVhdCBpdCBhcw0KPiA+IHRhYmxlIGxldmVsIERETCByZXBsaWNhdGlvbiwgaS5lLiB1c2UgdGhl IHRoZSBkZXBhcnNlciBmb3JtYXQuDQo+IA0KPiA0KSBJIHRoaW5rIHRoZSBwb2ludCBjb3VsZCBi ZSB0aGF0IHdlIHNob3VsZCBtYWtlIHRoZSBXQUwgbG9nIGZvcm1hdA0KPiBleHRlbmRhYmxlDQo+ IHNvIHRoYXQgd2UgY2FuIGV4dGVuZCBpdCB0byBzdXBwb3J0IG1vcmUgdXNlZnVsIGZlYXR1cmUo dGFibGUgZmlsdGVyL3NjaGVtYQ0KPiBtYXBzL0RETCBmaWx0ZXIpLiBJZiB3ZSBqdXN0IFdBTCBs b2cgdGhlIG9yaWdpbmFsIFNRTCwgaXQgc2VlbXMgaXQncyBkaWZmaWN1bHQNCj4gdG8gZXh0ZW5k IGl0IGluIHRoZSBmdXR1cmUgPw0KDQpBdHRhY2ggdGhlIG5ldyB2ZXJzaW9uIHBhdGNoIHNldCB3 aGljaCBhZGRlZCBzdXBwb3J0IGZvciBDUkVBVEUvRFJPUC9BVEVSDQpTZXF1ZW5jZSBhbmQgQ1JF QVRFL0RST1AgU2NoZW1hIGRkbCBjb21tYW5kcyB3aGljaCBhcmUgcHJvdmlkZWQgYnkgQWppbg0K Q2hlcmlhbiBvZmYgbGlzdC4NCg0KVGhlIG5ldyB2ZXJzaW9uIHBhdGNoIHdpbGwgYWxzbyBjaGVj ayBmdW5jdGlvbidzIHZvbGF0aWxpdHlbMV0gaW4gQUxURVIgVEFCTEUNCmNvbW1hbmQuIElmIGFu eSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBpcyB2b2xhdGlsZSwgd2UgcmVwb3J0IGFuIEVSUk9S Lg0KV2hldGhlciBXQVJOSU5HIGlzIGJldHRlciB0byBiZSB1c2VkIGhlcmUgaXMgc3RpbGwgdW5k ZXIgY29uc2lkZXJhdGlvbi4NCg0KWzFdIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3Nh Z2UtaWQvQ0FBNGVLMUpWeW5Gc2olMkJtY1JXajlzZXdSMnlOVXM2THVOeEowZU4tZ05KODNvS2NV T1ElNDBtYWlsLmdtYWlsLmNvbQ0KDQpCZXN0IHJlZ2FyZHMsDQpIb3UgemoNCg0KDQo= --_005_OS0PR01MB5716B1526C2EDA66907E733B94B39OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v9-0002-Support-DDL-replication.patch" Content-Description: v9-0002-Support-DDL-replication.patch Content-Disposition: attachment; filename="v9-0002-Support-DDL-replication.patch"; size=126644; creation-date="Tue, 21 Jun 2022 12:16:00 GMT"; modification-date="Tue, 21 Jun 2022 12:19:11 GMT" Content-Transfer-Encoding: base64 RnJvbSBjZTljNTQ1NDJiM2M5MGJiZDEyNWY3YzIwY2U4OTEyOGMwMDg5YTg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjEgSnVuIDIwMjIgMTc6NDE6MjcgKzA4MDAKU3ViamVjdDogW1BBVENI XSBTdXBwb3J0IERETCByZXBsaWNhdGlvbi4KClRvIHN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLCB3 ZSB1c2UgZXZlbnQgdHJpZ2dlciBhbmQgRERMIGRlcGFyc2luZwpmYWNpbGl0aWVzLiBXaGlsZSBj cmVhdGluZyBhIHB1YmxpY2F0aW9uLCB3ZSByZWdpc3RlciBhIGNvbW1hbmQgZW5kCnRyaWdnZXIg dGhhdCBkZXBhcnNlcyB0aGUgRERMIGFzIGEgSlNPTiBibG9iLCBhbmQgV0FMIGxvZ3MgaXQuIFRo ZSBldmVudAp0cmlnZ2VyIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBhdCB0aGUgdGltZSBvZiBk cm9wIHB1YmxpY2F0aW9uLiBUaGUKV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQgc2VuZHMg aXQgZG93bnN0cmVhbSBzaW1pbGFyIHRvIG90aGVyIERNTApjb21tYW5kcy4gVGhlIHN1YnNjcmli ZXIgdGhlbiBjb252ZXJ0cyBKU09OIGJhY2sgdG8gdGhlIERETCBjb21tYW5kIHN0cmluZwphbmQg ZXhlY3V0ZXMgaXQuIEluIHRoZSBzdWJzY3JpYmVyLCB3ZSBhbHNvIGFkZCB0aGUgbmV3bHkgYWRk ZWQgcmVsIHRvCnBnX3N1YnNjcmlwdGlvbl9yZWwgc28gdGhhdCB0aGUgRE1MIGNoYW5nZXMgb24g dGhlIG5ldyB0YWJsZSBjYW4gYmUKcmVwbGljYXRlZCB3aXRob3V0IGhhdmluZyB0byBtYW51YWxs eSBydW4KIkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJMSUNBVElPTiIuCgpUaGlz IGlzIGEgUE9DIHBhdGNoIHRvIHNob3cgaG93IHVzaW5nIGV2ZW50IHRyaWdnZXJzIGFuZCBEREwg ZGVwYXJzaW5nCmZhY2lsaXRpZXMgd2UgY2FuIGltcGxlbWVudCBEREwgcmVwbGljYXRpb24uIFNv LCB0aGUgaW1wbGVtZW50YXRpb24gaXMKcmVzdHJpY3RlZCB0byBDUkVBVEUgVEFCTEUvQUxURVIg VEFCTEUvRFJPUCBUQUJMRSBjb21tYW5kcy4KCi0gRm9yIG5vbi1yZXdyaXRlIEFMVEVSIFtUQUJM RXxTRVFVRU5DRV0gY29tbWFuZCBhbmQKLSAgICAgQ1JFQVRFIFtUQUJMRXxTRVFVRU5DRXxTQ0hF TUFdIGNvbW1hbmQ6CndlIGRlcGFyc2UgdGhlIGNvbW1hbmQgYXQgZGRsX2NvbW1hbmRfZW5kIGV2 ZW50IHRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlCmRlcGFyc2VkIGpzb24gc3RyaW5nLiBUaGUgV0FM U2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQgc2VuZHMgaXQgdG8Kc3Vic2NyaWJlciBpZiB0aGUg Y3JlYXRlZC9hbHRlcmVkIHRhYmxlIGlzIHB1Ymxpc2hlZC4gSXQgc3VwcG9ydHMgbW9zdCBvZgpB TFRFUiBUQUJMRSBjb21tYW5kIGV4Y2VwdCBzb21lIGNvbW1hbmRzKERETCByZWxhdGVkIHRvIFBB UlRJVElPTkVEIFRBQkxFCi4uLikgdGhhdCBpbnRyb2R1Y2VkIHJlY2VudGx5IHdoaWNoIGhhdmVu J3QgYmVlbiBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQKZGRsX2RlcGFyc2VyLCB3ZSB3aWxsIHN1 cHBvcnQgdGhhdCBsYXRlci4KCk5vdGUgdGhhdCB0aGUgcmVwbGljYXRpb24gZm9yIEFMVEVSIFND SEVNQSBjb21tYW5kIGlzIHN0aWxsIHVuZGVyCnByb2dyZXNzLgoKLSBGb3IgRFJPUCBbVEFCTEV8 U0VRVUVOQ0V8U0NIRU1BXToKVGhlICdjb21tYW5kIHN0YXJ0JyBldmVudCBoYW5kbGVyIGxvZ3Mg YSBkZGwgbWVzc2FnZSB3aXRoIHRoZSByZWxpZHMgb2YKdGhlIHRhYmxlcyB0aGF0IGFyZSBkcm9w cGVkIHdoaWNoIHRoZSBvdXRwdXQgcGx1Z2luIChwZ291dHB1dCkgc3RvcmVzIGluCml0cyBpbnRl cm5hbCBkYXRhIHN0cnVjdHVyZSBhZnRlciB2ZXJpZnlpbmcgdGhhdCBpdCBpcyBmb3IgYSB0YWJs ZSB0aGF0IGlzCnBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uLiBMYXRlciB0aGUgJ2NvbW1hbmQgZW5k JyBldmVudCBoYW5kbGVyIHNlbmRzIHRoZQphY3R1YWwgZHJvcCBtZXNzYWdlLiBQZ291dHB1dCBv biByZWNlaXZpbmcgdGhlIGNvbW1hbmQgZW5kLCBvbmx5IHNlbmRzIG91dAp0aGUgZHJvcCBjb21t YW5kIG9ubHkgaWYgaXQgaXMgZm9yIG9uZSBvZiB0aGUgcmVsaWRzIG1hcmtlZCBmb3IgZGVsZXRp bmcuClRoZSByZWFzb24gd2UgaGF2ZSB0byBkbyB0aGlzIGlzIGJlY2F1c2UsIG9uY2UgdGhlIGxv Z2ljYWwgZGVjb2RlcgpyZWNlaXZlcyB0aGUgJ2NvbW1hbmQgZW5kJyBtZXNzYWdlLCAgdGhlIHJl bGlkIG9mIHRoZSB0YWJsZSBpcyBubyBsb25nZXIKdmFsaWQgYXMgaXQgaGFzIGJlZW4gZGVsZXRl ZCBhcyBwYXJ0IG9mIGludmFsaWRhdGlvbnMgcmVjZWl2ZWQgZm9yIHRoZQpkcm9wIHRhYmxlIGNv bW1hbmQuIEl0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byB2ZXJpZnkgaWYgdGhlIHRhYmxlIGlz CnBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uIGxpc3Qgb3Igbm90LiBUbyBtYWtlIHRoaXMgcG9zc2li bGUsIEkgaGF2ZSBhZGRlZAp0d28gbW9yZSBlbGVtZW50cyB0byB0aGUgZGRsIHhsb2cgYW5kIGRk bCBtZXNzYWdlLCAocmVsaWQgYW5kIGNtZHR5cGUpLgoKV2UgY291bGQgaGF2ZSBhbHNvIGhhbmRs ZWQgYWxsIHRoaXMgb24gdGhlIHN1YnNjcmliZXIgc2lkZSBhcyB3ZWxsLCBidXQKdGhhdCB3b3Vs ZCBtZWFuIHNlbmRpbmcgc3B1cmlvdXMgZGRsIG1lc3NhZ2VzIGZvciB0YWJsZXMgdGhhdCBhcmUg bm90IHBhcnQKb2YgdGhlIHB1YmxpY2F0aW9uLgoKLSBGb3IgdGFibGVfcmV3cml0ZSBBTFRFUiBU QUJMRSBjb21tYW5kOgooQUxURVIgQ09MVU1OIFRZUEUsIEFERCBDT0xVTU4gREVGQVVMVCwgU0VU IExPR0dFRCwgU0VUIEFDQ0VTUyBNRVRIT0QpCgp3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGFuZCBX QUwgbG9nIHRoZSBkZXBhcnNlZCBqc29uIHN0cmluZyBhdAp0YWJsZV9yZXdyaXRlIGV2ZW50IHRy aWdnZXIuIFRoZSBXQUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFuZCBzZW5kcyBpdCB0bwpzdWJz Y3JpYmVyIGlmIHRoZSBhbHRlcmVkIHRhYmxlIGlzIHB1Ymxpc2hlZC4gVGhlbiwgdGhlIFdBTFNl bmRlciB3aWxsCmNvbnZlcnQgdGhlIHVwY29taW5nIHJld3JpdGUgSU5TRVJUcyB0byBVUERBVEVz IGFuZCBzZW5kIHRoZW0gdG8Kc3Vic2NyaWJlciBzbyB0aGF0IHRoZSBkYXRhIGJldHdlZW4gcHVi bGlzaGVyIGFuZCBzdWJzY3JpYmVyIGNhbiBhbHdheXMgYmUKY29uc2lzdGVudC4gTm90ZSB0aGF0 IHRoZSB0YWJsZXMgdGhhdCBwdWJsaXNoIHJld3JpdGUgZGRsIG11c3QgaGF2ZSBhCnJlcGxpY2Eg aWRlbnRpdHkgY29uZmlndXJlZCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHJlcGxpY2F0ZSB0aGUg dXBjb21pbmcKcmV3cml0ZSBVUERBVEVzLgoKV2UgZG8gdGhpcyB3YXkgYmVjYXVzZSBvZiB0d28g cmVhc29uOgooMSkgVGhlIGRhdGEgYmVmb3JlIHRoZSByZXdyaXRlIGRkbCBjb3VsZCBhbHJlYWR5 IGJlIGRpZmZlcmVudCBhbW9uZwpwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIuIFRvIG1ha2Ugc3Vy ZSB0aGUgZXh0cmEgZGF0YSBpbiBzdWJzY3JpYmVyIHdoaWNoCmRvZXNuJ3QgZXhpc3QgaW4gcHVi bGlzaGVyIGFsc28gZ2V0IHJld3JpdHRlbiwgd2UgbmVlZCB0byBsZXQgdGhlCnN1YnNjcmliZXIg ZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0ZSBkZGwgdG8gcmV3cml0ZSBhbGwgdGhlIGRhdGEg YXQKZmlyc3QuCgooMikgdGhlIGRhdGEgYWZ0ZXIgZXhlY3V0aW5nIHJld3JpdGUgZGRsIGNvdWxk IGJlIGRpZmZlcmVudCBhbW9uZwpwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIoZHVlIHRvIGRpZmZl cmVudCBmdW5jdGlvbnMvb3BlcmF0b3JzIHVzZWQgZHVyaW5nCnJld3JpdGUpLCBzbyB3ZSBuZWVk IHRvIHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRvIGtlZXAgdGhlIGRhdGEKY29uc2lz dGVudC4KClRPIElNUFJPVkU6ClRoaXMgYXBwcm9hY2ggY291bGQgYmUgaW1wcm92ZWQgYnkgbGV0 dGluZyB0aGUgc3Vic2NyaWJlciB0cnkgdG8gdXBkYXRlCnRoZSBleHRyYSBkYXRhIGl0c2VsZiBp bnN0ZWFkIG9mIGRvaW5nIGZ1bGx5IHJld3JpdGUgZGRsIGFuZCB1c2UgdGhlCnVwY29taW5nIHJl d3JpdGUgVVBEQVRFcyB0byByZXdyaXRlIHRoZSByZXN0IGRhdGEuIFRvIGFjaGlldmUgdGhpcywg d2UKY291bGQgbW9kaWZ5IHRoZSBkZXBhcnNlZCBqc29uIHN0cmluZyB0byB0ZW1wb3JhcmlseSBy ZW1vdmUgdGhlIHJld3JpdGUKcGFydCBhbmQgYWRkIHNvbWUgbG9naWMgaW4gc3Vic2NyaWJlciB0 byB1cGRhdGUgdGhlIGV4dHJhIGRhdGEuCkJlc2lkZXMsIHdlIG1heSBub3QgbmVlZCB0byBzZW5k IHJld3JpdGUgY2hhbmdlcyBmb3IgYWxsIHR5cGUgb2YgcmV3cml0ZQpkZGwsIGZvciBleGFtcGxl LCBpdCBzZWVtcyBmaW5lIHRvIHNraXAgc2VuZGluZyByZXdyaXRlIGNoYW5nZXMgZm9yIEFMVEVS ClRBQkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEgaW4gdGhlIHRhYmxlIGRvZXNuJ3QgYWN0dWFs bHkgYmUgY2hhbmdlZC4gV2UKY291bGQgdXNlIHRoZSBkZXBhcnNlciBhbmQgZXZlbnQgdHJpZ2dl ciB0byBmaWx0ZXIgdGhlc2UgZGRscyBhbmQgc2tpcApzZW5kaW5nIHJld3JpdGUgY2hhbmdlcyBm b3IgdGhlbS4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgICAgICAg ICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rl c2MuYyB8ICA1MiArKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMgICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgICAg ICAgICAgICB8IDE2OCArKysrKysrKystCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlv bmNtZHMuYyAgICAgICAgICB8ICA5NyArKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL01ha2VmaWxlICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2RkbG1lc3NhZ2UuYyAgICB8ICA4NiArKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvZGVjb2RlLmMgICAgICAgIHwgIDQxICsrKwogc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9sb2dpY2FsLmMgICAgICAgfCAgOTMgKysrKysrCiBzcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgICAgICAgICB8ICA1MiArKystCiBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyB8IDEzOSArKysrKysrKy0KIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICAgIHwgMjMyICsrKysr KysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jICAg ICB8IDE5MiArKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5j ICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMg ICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAg ICAgICAgICAgICAgIHwgIDI3ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oICAgICAgICAg ICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYyAgICAg ICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BzcWwvZGVzY3JpYmUuYyAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAxNyArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmggICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAg ICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bi5oICAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3Nh Z2UuaCAgICAgICAgICAgIHwgIDYwICsrKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29k ZS5oICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2lj YWxwcm90by5oICAgICAgICAgIHwgICA3ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRw dXRfcGx1Z2luLmggICAgICAgICB8ICAyNyArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdv dXRwdXQuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVv cmRlcmJ1ZmZlci5oICAgICAgICAgfCAgMzkgKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BzcWwub3V0ICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9wdWJsaWNhdGlvbi5vdXQgICAgICAgfCAzODggKysrKysrKysrKysrLS0tLS0tLS0tLS0tCiAz MyBmaWxlcyBjaGFuZ2VkLCAxNTM2IGluc2VydGlvbnMoKyksIDIxNyBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1z Z2Rlc2MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvZGRsbWVzc2FnZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vZGRsbWVzc2FnZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCmluZGV4IGY4 OGQ3MmYuLmI4ZTI5ZTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9N YWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKQEAgLTE5 LDYgKzE5LDcgQEAgT0JKUyA9IFwKIAloYXNoZGVzYy5vIFwKIAloZWFwZGVzYy5vIFwKIAlsb2dp Y2FsbXNnZGVzYy5vIFwKKwlsb2dpY2FsZGRsbXNnZGVzYy5vIFwKIAlteGFjdGRlc2MubyBcCiAJ bmJ0ZGVzYy5vIFwKIAlyZWxtYXBkZXNjLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1n cmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi44MWRlZTUyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKQEAgLTAsMCArMSw1MiBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogbG9naWNhbGRkbG1zZ2Rlc2MuYworICoJICBybWdyIGRlc2NyaXB0b3Igcm91 dGluZXMgZm9yIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVz c2FnZS5oIgorCit2b2lkCitsb2dpY2FsZGRsbXNnX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dS ZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCWNoYXIJICAgKnJlYyA9IFhMb2dSZWNHZXREYXRhKHJl Y29yZCk7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZP X01BU0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJeworCQl4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlICp4bHJlYyA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICop IHJlYzsKKwkJY2hhcgkgICAqcHJlZml4ID0geGxyZWMtPm1lc3NhZ2U7CisJCWNoYXIJICAgKm1l c3NhZ2UgPSB4bHJlYy0+bWVzc2FnZSArIHhscmVjLT5wcmVmaXhfc2l6ZTsKKwkJY2hhcgkgICAq c2VwID0gIiI7CisKKwkJQXNzZXJ0KHByZWZpeFt4bHJlYy0+cHJlZml4X3NpemVdICE9ICdcMCcp OworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAicHJlZml4IFwiJXNcIjsgcGF5bG9hZCAoJXp1 IGJ5dGVzKTogIiwKKwkJCQkJCSBwcmVmaXgsIHhscmVjLT5tZXNzYWdlX3NpemUpOworCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgInJlbGlkICV1IGNtZHR5cGUgJXUiLCB4bHJlYy0+cmVsaWQsIHhs cmVjLT5jbWR0eXBlKTsKKwkJLyogV3JpdGUgbWVzc2FnZSBwYXlsb2FkIGFzIGEgc2VyaWVzIG9m IGhleCBieXRlcyAqLworCQlmb3IgKGludCBjbnQgPSAwOyBjbnQgPCB4bHJlYy0+bWVzc2FnZV9z aXplOyBjbnQrKykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyUwMlgiLCBzZXAs ICh1bnNpZ25lZCBjaGFyKSBtZXNzYWdlW2NudF0pOworCQkJc2VwID0gIiAiOworCQl9CisJfQor fQorCitjb25zdCBjaGFyICoKK2xvZ2ljYWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5mbykKK3sK KwlpZiAoKGluZm8gJiB+WExSX0lORk9fTUFTSykgPT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdF KQorCQlyZXR1cm4gIkRETCBNRVNTQUdFIjsKKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcm1nci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vcm1nci5jCmluZGV4IDhlZDY5MjQuLjMxMmYxMTcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9ybWdyLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVk ZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInJlcGxpY2F0 aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2lu LmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9z cmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggOGM3ZmNhNi4uMjBiZjhj MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpAQCAtMTAwNSw2ICsxMDA1LDcg QEAgR2V0UHVibGljYXRpb24oT2lkIHB1YmlkKQogCXB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGUg PSBwdWJmb3JtLT5wdWJ1cGRhdGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IHB1YmZv cm0tPnB1YmRlbGV0ZTsKIAlwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBwdWJmb3JtLT5w dWJ0cnVuY2F0ZTsKKwlwdWItPnB1YmFjdGlvbnMucHViZGRsID0gcHViZm9ybS0+cHViZGRsOwog CXB1Yi0+cHVidmlhcm9vdCA9IHB1YmZvcm0tPnB1YnZpYXJvb3Q7CiAKIAlSZWxlYXNlU3lzQ2Fj aGUodHVwKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCA0NjQyNTI3Li5j M2Q5YWFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0zNyw4ICszNywx MSBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9mdW5j LmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJ0Y29wL2Rl cGFyc2VfdXRpbGl0eS5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInRj b3AvZGRsX2RlcGFyc2UuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2V2dGNhY2hlLmgiCkBAIC0xNTQwLDYgKzE1 NDMsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQogCiAJ Y29tbWFuZC0+ZC5hbHRlclRhYmxlLmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CiAJY29t bWFuZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkID0gSW52YWxpZE9pZDsKKwljb21tYW5kLT5kLmFs dGVyVGFibGUucmV3cml0ZSA9IGZhbHNlOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRz ID0gTklMOwogCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKIApA QCAtMTU3Myw3ICsxNTc3LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmpl Y3RJZCkKICAqIGludGVybmFsbHksIHNvIHRoYXQncyBhbGwgdGhhdCB0aGlzIGNvZGUgbmVlZHMg dG8gaGFuZGxlIGF0IHRoZSBtb21lbnQuCiAgKi8KIHZvaWQKLUV2ZW50VHJpZ2dlckNvbGxlY3RB bHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQorRXZl bnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRy ZXNzIGFkZHJlc3MsIGJvb2wgcmV3cml0ZSkKIHsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlD b2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOwpAQCAtMTU5Myw2ICsxNTk3LDcgQEAgRXZlbnRUcmln Z2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFk ZHJlc3MpCiAJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKIAluZXdzdWItPnBhcnNldHJlZSA9 IGNvcHlPYmplY3Qoc3ViY21kKTsKIAorCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVu dENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CiAJY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPQogCQls YXBwZW5kKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJU YWJsZS5zdWJjbWRzLCBuZXdzdWIpOwogCkBAIC0yMTgwLDMgKzIxODUsMTY0IEBAIHN0cmluZ2lm eV9hZGVmcHJpdnNfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpCiAKIAlyZXR1cm4gIj8/PyI7 CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIH0KKworLyoKKyAqIHB1YmxpY2F0aW9uX2Rl cGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgY29tbWFuZCBh bmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9z dGFydChQR19GVU5DVElPTl9BUkdTKQoreworCUV2ZW50VHJpZ2dlckRhdGEgKnRyaWdkYXRhOwor CWNoYXIJCSpjb21tYW5kID0gcHNwcmludGYoIkRyb3AgdGFibGUgY29tbWFuZCBzdGFydCIpOwor CURyb3BTdG10CSpzdG10OworCUxpc3RDZWxsCSpjZWxsMTsKKworCWlmICghQ0FMTEVEX0FTX0VW RU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0 cmlnZ2VyIG1hbmFnZXIiKTsKKworCXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNp bmZvLT5jb250ZXh0OworCXN0bXQJID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7 CisKKwkvKiBleHRyYWN0IHRoZSByZWxpZCBmcm9tIHRoZSBwYXJzZSB0cmVlICovCisJZm9yZWFj aChjZWxsMSwgc3RtdC0+b2JqZWN0cykKKwl7CisJCU5vZGUJKm9iamVjdCA9IGxmaXJzdChjZWxs MSk7CisJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJUmVsYXRpb24gcmVsYXRpb24gPSBOVUxM OworCisJCWFkZHJlc3MgPSBnZXRfb2JqZWN0X2FkZHJlc3Moc3RtdC0+cmVtb3ZlVHlwZSwKKwkJ CQkJCQkJCSBvYmplY3QsCisJCQkJCQkJCQkgJnJlbGF0aW9uLAorCQkJCQkJCQkJIEFjY2Vzc0V4 Y2x1c2l2ZUxvY2ssCisJCQkJCQkJCQkgdHJ1ZSk7CisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJk ZXBhcnNlIiwgYWRkcmVzcy5vYmplY3RJZCwgRENUX1RhYmxlRHJvcFN0YXJ0LAorCQkJCQkJCSBj b21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKworCQlpZiAocmVsYXRpb24pCisJCQl0YWJs ZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwl9CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShO VUxMKTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZQorICoK KyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSByZXdyaXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAq LworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZShQR19GVU5DVElPTl9B UkdTKQoreworCUNvbGxlY3RlZENvbW1hbmQgKmNtZDsKKwljaGFyICAgICAgICAqanNvbl9zdHJp bmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJS T1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwljbWQgPSBjdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCisJQXNzZXJ0KGNtZCAmJiBj bWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlKTsKKworCS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5k IGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25f c3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kKTsKKworCWlmIChqc29uX3N0cmlu ZyAhPSBOVUxMKQorCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ZC5hbHRl clRhYmxlLm9iamVjdElkLCBEQ1RfVGFibGVBbHRlciwKKwkJCQkJCQkganNvbl9zdHJpbmcsIHN0 cmxlbihqc29uX3N0cmluZykgKyAxKTsKKworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7 Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZAorICoKKyAq IERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNh dGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKQoreworCUxpc3RD ZWxsICAgKmxjOworCXNsaXN0X2l0ZXIgIGl0ZXI7CisJRGVwYXJzZWRDb21tYW5kVHlwZSB0eXBl OworCU9pZCByZWxpZDsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkK KwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKwor CWZvcmVhY2gobGMsIGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QpCisJewor CQlDb2xsZWN0ZWRDb21tYW5kICpjbWQgPSBsZmlyc3QobGMpOworCQljaGFyICAgICAgICAgICAg ICpqc29uX3N0cmluZzsKKworCQkvKiBSZXdyaXRlIERETCBoYXMgYmVlbiBoYW5kbGVkIGluIHRh YmxlX3Jld3JpdGUgdHJpZ2dlciAqLworCQlpZiAoY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSkK KwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX1NpbXBsZSAmJgorCQkJIU9p ZElzVmFsaWQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkKSkKKwkJCWNvbnRpbnVlOwor CisJCS8qCisJCSAqIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFs bG93IGRlY29kaW5nIG9mIHRoZQorCQkgKiBzYW1lLgorCQkgKi8KKwkJanNvbl9zdHJpbmcgPSBk ZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQpOworCisJCWlmIChqc29uX3N0cmluZyA9PSBOVUxM KQorCQkJY29udGludWU7CisKKwkJaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUYWJsZSkKKwkJ eworCQkJcmVsaWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZDsKKwkJCXR5cGUgPSBEQ1Rf VGFibGVBbHRlcjsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE9ubHkgU0NUX1NpbXBsZSBmb3Ig bm93ICovCisJCQlyZWxpZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKwkJCXR5 cGUgPSBEQ1RfU2ltcGxlQ21kOworCQl9CisKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFy c2UiLCByZWxpZCwgdHlwZSwganNvbl9zdHJpbmcsCisJCQkJCQkJIHN0cmxlbihqc29uX3N0cmlu ZykgKyAxKTsKKwl9CisKKwlzbGlzdF9mb3JlYWNoKGl0ZXIsICYoY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5TUUxEcm9wTGlzdCkpCisJeworCQl2b2xhdGlsZSBTUUxEcm9wT2JqZWN0ICpvYmo7 CisJCURyb3BTdG10CQkJICAgKnN0bXQ7CisJCUV2ZW50VHJpZ2dlckRhdGEgCSAgICp0cmlnZGF0 YTsKKwkJY2hhcgkJCQkgICAqY29tbWFuZDsKKworCQl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJE YXRhICopIGZjaW5mby0+Y29udGV4dDsKKwkJc3RtdAkgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEt PnBhcnNldHJlZTsKKworCQlvYmogPSBzbGlzdF9jb250YWluZXIoU1FMRHJvcE9iamVjdCwgbmV4 dCwgaXRlci5jdXIpOworCisJCWlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgInRhYmxlIiwg NSkgPT0gMCkKKwkJeworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF90YWJsZShvYmotPm9iamlk ZW50aXR5LCBzdG10LT5iZWhhdmlvcik7CisKKwkJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBh cnNlIiwgb2JqLT5hZGRyZXNzLm9iamVjdElkLCBEQ1RfVGFibGVEcm9wRW5kLAorCQkJCQkJCQkg Y29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisJCX0KKwkJZWxzZSBpZiAoc3RybmNtcChv YmotPm9iamVjdHR5cGUsICJzZXF1ZW5jZSIsIDgpID09IDApCisJCXsKKwkJCWNvbW1hbmQgPSBk ZXBhcnNlX2Ryb3Bfc2VxdWVuY2Uob2JqLT5vYmppZGVudGl0eSwgc3RtdC0+YmVoYXZpb3IpOwor CisJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIG9iai0+YWRkcmVzcy5vYmplY3RJ ZCwgRENUX09iamVjdERyb3AsCisJCQkJCQkJCSBjb21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAx KTsKKwkJfQorCQllbHNlIGlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgInNjaGVtYSIsIDYp ID09IDApCisJCXsKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3Bfc2NoZW1hKG9iai0+b2JqaWRl bnRpdHksIHN0bXQtPmJlaGF2aW9yKTsKKworCQkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFy c2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQsIERDVF9PYmplY3REcm9wLAorCQkJCQkJCQkgY29t bWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisJCX0KKworCX0KKworCXJldHVybiBQb2ludGVy R2V0RGF0dW0oTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJs aWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmlu ZGV4IDhlNjQ1NzQuLmMzNmI4YTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1 YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21k cy5jCkBAIC0zNywxMCArMzcsMTIgQEAKICNpbmNsdWRlICJjb21tYW5kcy9wdWJsaWNhdGlvbmNt ZHMuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5j bHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAj aW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9j b2xsYXRlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCisjaW5jbHVkZSAi cGFyc2VyL3BhcnNlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInV0 aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC05NSw2ICs5Nyw3IEBAIHBh cnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCXB1YmFjdGlvbnMt PnB1YnVwZGF0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsKIAlwdWJh Y3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJcHViYWN0aW9ucy0+cHViZGRsID0gZmFsc2U7 CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAKIAkvKiBQYXJzZSBvcHRp b25zICovCkBAIC0xNDEsNiArMTQ0LDggQEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQYXJz ZVN0YXRlICpwc3RhdGUsCiAJCQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJCQkJ ZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidHJ1bmNhdGUiKSA9PSAwKQogCQkJCQlwdWJh Y3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hf b3B0LCAiZGRsIikgPT0gMCkKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRsID0gdHJ1ZTsKIAkJCQll bHNlCiAJCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhf RVJST1IpLApAQCAtNzQ5LDYgKzc1NCw1MyBAQCBDaGVja1B1YlJlbGF0aW9uQ29sdW1uTGlzdChM aXN0ICp0YWJsZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogfQogCiAvKgorICogQ3JlYXRl IGV2ZW50IHRyaWdnZXIgd2hpY2ggaXMgdXNlZCBmb3IgRERMIHJlcGxpY2F0aW9uLgorICovCitz dGF0aWMgdm9pZAorQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcihjaGFyICpldmVudG5hbWUs IENvbW1hbmRUYWcgKmNvbW1hbmRzLAorCQkJCQkJCSBpbnQgbmNvbW1hbmRzLCBPYmplY3RBZGRy ZXNzIHB1YmFkZHJlc3MsCisJCQkJCQkJIE9pZCBwdWJvaWQpCit7CisJaW50CQkJCQlpOworCUxp c3QJCQkgICAqdGFncyA9IE5JTDsKKwlPaWQJCQkJCXRyaWdnZXJfaWQ7CisJT2JqZWN0QWRkcmVz cwkJcmVmZXJlbmNlZDsKKwlDcmVhdGVFdmVudFRyaWdTdG10ICpkZGxfdHJpZ2dlcjsKKwljaGFy CQkJCXRyaWdnZXJfbmFtZVtOQU1FREFUQUxFTl07CisJY2hhcgkJCQl0cmlnZ2VyX2Z1bmNfbmFt ZVtOQU1FREFUQUxFTl07CisJc3RhdGljIGNvbnN0IGNoYXIgICAqdHJpZ2dlcl9uYW1lX3ByZWZp eCA9ICJwZ19kZXBhcnNlX3RyaWdfJXNfJXUiOworCXN0YXRpYyBjb25zdCBjaGFyICAgKnRyaWdn ZXJfZnVuY19wcmVmaXggPSAicHVibGljYXRpb25fZGVwYXJzZV8lcyI7CisKKwlkZGxfdHJpZ2dl ciA9IG1ha2VOb2RlKENyZWF0ZUV2ZW50VHJpZ1N0bXQpOworCisJc25wcmludGYodHJpZ2dlcl9u YW1lLCBzaXplb2YodHJpZ2dlcl9uYW1lKSwgdHJpZ2dlcl9uYW1lX3ByZWZpeCwKKwkJCSBldmVu dG5hbWUsIHB1Ym9pZCk7CisJc25wcmludGYodHJpZ2dlcl9mdW5jX25hbWUsIHNpemVvZih0cmln Z2VyX2Z1bmNfbmFtZSksIHRyaWdnZXJfZnVuY19wcmVmaXgsCisJCQkgZXZlbnRuYW1lKTsKKwor CWRkbF90cmlnZ2VyLT50cmlnbmFtZSA9IHBzdHJkdXAodHJpZ2dlcl9uYW1lKTsKKwlkZGxfdHJp Z2dlci0+ZXZlbnRuYW1lID0gZXZlbnRuYW1lOworCWRkbF90cmlnZ2VyLT5mdW5jbmFtZSA9IFN5 c3RlbUZ1bmNOYW1lKHRyaWdnZXJfZnVuY19uYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBuY29t bWFuZHM7IGkrKykKKwl7CisJCVN0cmluZyAqdGFnID0gbWFrZVN0cmluZyhwc3RyZHVwKEdldENv bW1hbmRUYWdOYW1lKGNvbW1hbmRzW2ldKSkpOworCQl0YWdzID0gbGFwcGVuZCh0YWdzLCB0YWcp OworCX0KKworCWRkbF90cmlnZ2VyLT53aGVuY2xhdXNlID0gbGlzdF9tYWtlMShtYWtlRGVmRWxl bSgidGFnIiwgKE5vZGUgKikgdGFncywgLTEpKTsKKworCXRyaWdnZXJfaWQgPSBDcmVhdGVFdmVu dFRyaWdnZXIoZGRsX3RyaWdnZXIpOworCisJLyoKKwkgKiBSZWdpc3RlciB0aGUgZXZlbnQgdHJp Z2dlcnMgYXMgaW50ZXJuYWxseSBkZXBlbmRlbnQgb24gdGhlCisJICogcHVibGljYXRpb24uCisJ ICovCisJT2JqZWN0QWRkcmVzc1NldChyZWZlcmVuY2VkLCBFdmVudFRyaWdnZXJSZWxhdGlvbklk LCB0cmlnZ2VyX2lkKTsKKwlyZWNvcmREZXBlbmRlbmN5T24oJnJlZmVyZW5jZWQsICZwdWJhZGRy ZXNzLCBERVBFTkRFTkNZX0lOVEVSTkFMKTsKK30KKworLyoKICAqIENyZWF0ZSBuZXcgcHVibGlj YXRpb24uCiAgKi8KIE9iamVjdEFkZHJlc3MKQEAgLTgyMCw2ICs4NzIsOCBAQCBDcmVhdGVQdWJs aWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkK IAkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGVsZXRlKTsKIAl2YWx1ZXNbQW51bV9wZ19w dWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0KIAkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMu cHVidHJ1bmNhdGUpOworCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbCAtIDFdID0K KwkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRsKTsKIAl2YWx1ZXNbQW51bV9wZ19wdWJs aWNhdGlvbl9wdWJ2aWFyb290IC0gMV0gPQogCQlCb29sR2V0RGF0dW0ocHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QpOwogCkBAIC04ODIsNiArOTM2LDQ2IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBh cnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQl9CiAJfQog CisJLyoKKwkgKiBDcmVhdGUgYW4gZXZlbnQgdHJpZ2dlciB0byBhbGxvdyBsb2dnaW5nIG9mIERE TCBzdGF0ZW1lbnRzLgorCSAqCisJICogVE9ETzogV2UgbmVlZCB0byBmaW5kIGEgYmV0dGVyIHN5 bnRheCB0byBhbGxvdyByZXBsaWNhdGlvbiBvZiBEREwKKwkgKiBzdGF0ZW1lbnRzLgorCSAqCisJ ICogWFhYOiBUaGlzIGNvZGUgaXMganVzdCB0byBzaG93IHRoZSByZXBsaWNhdGlvbiBvZiBDUkVB VEUvQUxURVIvRFJPUAorCSAqIFRBQkxFIHdvcmtzLiBXZSBuZWVkIHRvIGVuaGFuY2UgdGhpcyBv bmNlIHRoZSBhcHByb2FjaCBmb3IgRERMCisJICogcmVwbGljYXRpb24gaXMgZmluYWxpemVkLgor CSAqLworCWlmIChwdWJhY3Rpb25zLnB1YmRkbCkKKwl7CisJCUNvbW1hbmRUYWcJc3RhcnRfY29t bWFuZHNbXSA9IHtDTURUQUdfRFJPUF9UQUJMRX07CisJCUNvbW1hbmRUYWcJcmV3cml0ZV9jb21t YW5kc1tdID0ge0NNRFRBR19BTFRFUl9UQUJMRX07CisKKwkJQ29tbWFuZFRhZwllbmRfY29tbWFu ZHNbXSA9IHsKKwkJCUNNRFRBR19EUk9QX1RBQkxFLAorCQkJQ01EVEFHX0NSRUFURV9UQUJMRSwK KwkJCUNNRFRBR19BTFRFUl9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfU0VRVUVOQ0UsCisJCQlD TURUQUdfQUxURVJfU0VRVUVOQ0UsCisJCQlDTURUQUdfRFJPUF9TRVFVRU5DRSwKKwkJCUNNRFRB R19DUkVBVEVfU0NIRU1BLAorCQkJQ01EVEFHX0FMVEVSX1NDSEVNQSwKKwkJCUNNRFRBR19EUk9Q X1NDSEVNQQorCQl9OworCisJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRy aWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5k IiwgZW5kX2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2Vs ZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX3N0YXJ0IGV2ZW50IHRy aWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfc3Rh cnQiLCBzdGFydF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihzdGFydF9jb21tYW5kcyks IG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQg dHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRl IiwgcmV3cml0ZV9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRz KSwgbXlzZWxmLCBwdWJvaWQpOworCX0KKwogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZl TG9jayk7CiAKIAlJbnZva2VPYmplY3RQb3N0Q3JlYXRlSG9vayhQdWJsaWNhdGlvblJlbGF0aW9u SWQsIHB1Ym9pZCwgMCk7CkBAIC0xMDIyLDYgKzExMTYsOSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0 aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCiAJ CXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPSBCb29sR2V0RGF0 dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CiAJCXJlcGxhY2VzW0FudW1fcGdfcHVibGljYXRp b25fcHVidHJ1bmNhdGUgLSAxXSA9IHRydWU7CisKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRp b25fcHViZGRsIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGwpOworCQlyZXBs YWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbCAtIDFdID0gdHJ1ZTsKIAl9CiAKIAlpZiAo cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5j CmluZGV4IDJkZTBlYmEuLjc0MTA4YjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC01 MjE4LDcgKzUyMTgsNyBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5m byAqdGFiLAogCSAqIFJlcG9ydCB0aGUgc3ViY29tbWFuZCB0byBpbnRlcmVzdGVkIGV2ZW50IHRy aWdnZXJzLgogCSAqLwogCWlmIChjbWQpCi0JCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxl U3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcyk7CisJCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRl clRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcywgdGFiLT5yZXdyaXRlKTsKIAogCS8q CiAJICogQnVtcCB0aGUgY29tbWFuZCBjb3VudGVyIHRvIGVuc3VyZSB0aGUgbmV4dCBzdWJjb21t YW5kIGluIHRoZSBzZXF1ZW5jZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZp bGUKaW5kZXggYzRlMmZkZS4uZjNlZWI2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChz cmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMgPSBcCiAJZGVjb2RlLm8gXAorCWRkbG1lc3NhZ2Uu b1wKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXAogCWxvZ2ljYWxmdW5jcy5vIFwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5MzUyMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCkBAIC0wLDAgKzEsODYgQEAKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbG1lc3NhZ2UuYworICoJICBMb2dpY2FsIERETCBt ZXNzYWdlcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBOT1RFUworICoKKyAqIExv Z2ljYWwgRERMIG1lc3NhZ2VzIGFsbG93IFhMT0cgbG9nZ2luZyBvZiBEREwgY29tbWFuZCBzdHJp bmdzIHRoYXQKKyAqIGdldCBwYXNzZWQgdG8gdGhlIGxvZ2ljYWwgZGVjb2RpbmcgcGx1Z2luLiBJ biBub3JtYWwgWExPRyBwcm9jZXNzaW5nIHRoZXkKKyAqIGFyZSBzYW1lIGFzIE5PT1AuCisgKgor ICogVW5saWtlIGdlbmVyaWMgbG9naWNhbCBtZXNzYWdlcywgdGhlc2UgRERMIG1lc3NhZ2VzIGhh dmUgb25seSB0cmFuc2FjdGlvbmFsCisgKiBtb2RlLk5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBv c3RncmVTUUwgYXJlIHRyYW5zYWN0aW9uYWwuCisgKgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBh cnQgb2YgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgd2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGlu ZyBwbHVnaW4gdXNpbmcgaW4gYSBzYW1lIHdheSBhcyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBF dmVyeSBtZXNzYWdlIGNhcnJpZXMgcHJlZml4IHRvIGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRp ZmZlcmVudCBkZWNvZGluZworICogcGx1Z2lucy4gVGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFr ZSBleHRyYSBjYXJlIHRvIHVzZSB1bmlxdWUgcHJlZml4LAorICogZ29vZCBvcHRpb25zIHNlZW1z IHRvIGJlIGZvciBleGFtcGxlIHRvIHVzZSB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoK KyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisj aW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgor I2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNh bC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgorCisvKgorICogV3JpdGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2Fn ZSBpbnRvIFhMb2cuCisgKi8KK1hMb2dSZWNQdHIKK0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0 IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJ CQkJCSBjb25zdCBjaGFyICptZXNzYWdlLCBzaXplX3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2Rk bF9tZXNzYWdlIHhscmVjOworCisJLyoKKwkgKiBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHRyYW5z YWN0aW9uIGlkLgorCSAqLworCUFzc2VydChJc1RyYW5zYWN0aW9uU3RhdGUoKSk7CisJR2V0Q3Vy cmVudFRyYW5zYWN0aW9uSWQoKTsKKworCXhscmVjLmRiSWQgPSBNeURhdGFiYXNlSWQ7CisJLyog dHJhaWxpbmcgemVybyBpcyBjcml0aWNhbDsgc2VlIGxvZ2ljYWxkZGxtc2dfZGVzYyAqLworCXhs cmVjLnByZWZpeF9zaXplID0gc3RybGVuKHByZWZpeCkgKyAxOworCXhscmVjLm1lc3NhZ2Vfc2l6 ZSA9IHNpemU7CisJeGxyZWMucmVsaWQgPSByZWxpZDsKKwl4bHJlYy5jbWR0eXBlID0gY21kdHlw ZTsKKworCVhMb2dCZWdpbkluc2VydCgpOworCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJnhs cmVjLCBTaXplT2ZMb2dpY2FsRERMTWVzc2FnZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0 aWZ5KGNoYXIgKiwgcHJlZml4KSwgeGxyZWMucHJlZml4X3NpemUpOworCVhMb2dSZWdpc3RlckRh dGEodW5jb25zdGlmeShjaGFyICosIG1lc3NhZ2UpLCBzaXplKTsKKworCS8qIGFsbG93IG9yaWdp biBmaWx0ZXJpbmcgKi8KKwlYTG9nU2V0UmVjb3JkRmxhZ3MoWExPR19JTkNMVURFX09SSUdJTik7 CisKKwlyZXR1cm4gWExvZ0luc2VydChSTV9MT0dJQ0FMRERMTVNHX0lELCBYTE9HX0xPR0lDQUxf RERMX01FU1NBR0UpOworfQorCisvKgorICogUmVkbyBpcyBiYXNpY2FsbHkganVzdCBub29wIGZv ciBsb2dpY2FsIGRlY29kaW5nIGRkbCBtZXNzYWdlcy4KKyAqLwordm9pZAorbG9naWNhbGRkbG1z Z19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCXVpbnQ4CQlpbmZvID0gWExvZ1Jl Y0dldEluZm8ocmVjb3JkKSAmIH5YTFJfSU5GT19NQVNLOworCisJaWYgKGluZm8gIT0gWExPR19M T0dJQ0FMX0RETF9NRVNTQUdFKQorCQllbG9nKFBBTklDLCAibG9naWNhbGRkbG1zZ19yZWRvOiB1 bmtub3duIG9wIGNvZGUgJXUiLCBpbmZvKTsKKworCS8qIFRoaXMgaXMgb25seSBpbnRlcmVzdGlu ZyBmb3IgbG9naWNhbCBkZWNvZGluZywgc2VlIGRlY29kZS5jLiAqLworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKaW5kZXggYWEyNDI3Yi4uMjU1YjBlYiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCkBAIC0zNiw2ICszNiw3IEBACiAj aW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJv bC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0 aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdp bi5oIgpAQCAtNjA0LDYgKzYwNSw0NiBAQCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKIH0KIAogLyoKKyAqIEhhbmRs ZSBybWdyIExPR0lDQUxERExNU0dfSUQgcmVjb3JkcyBmb3IgRGVjb2RlUmVjb3JkSW50b1Jlb3Jk ZXJCdWZmZXIoKS4KKyAqLwordm9pZAorbG9naWNhbGRkbG1zZ19kZWNvZGUoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpCit7CisJU25hcEJ1aWxkICAq YnVpbGRlciA9IGN0eC0+c25hcHNob3RfYnVpbGRlcjsKKwlYTG9nUmVhZGVyU3RhdGUgKnIgPSBi dWYtPnJlY29yZDsKKwlUcmFuc2FjdGlvbklkIHhpZCA9IFhMb2dSZWNHZXRYaWQocik7CisJdWlu dDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyKSAmIH5YTFJfSU5GT19NQVNLOworCVJlcE9yaWdp bklkIG9yaWdpbl9pZCA9IFhMb2dSZWNHZXRPcmlnaW4ocik7CisJeGxfbG9naWNhbF9kZGxfbWVz c2FnZSAqbWVzc2FnZTsKKworCWlmIChpbmZvICE9IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkK KwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgUk1fTE9HSUNBTERETE1TR19JRCByZWNvcmQgdHlw ZTogJXUiLCBpbmZvKTsKKworCVJlb3JkZXJCdWZmZXJQcm9jZXNzWGlkKGN0eC0+cmVvcmRlciwg WExvZ1JlY0dldFhpZChyKSwgYnVmLT5vcmlncHRyKTsKKworCS8qCisJICogSWYgd2UgZG9uJ3Qg aGF2ZSBzbmFwc2hvdCBvciB3ZSBhcmUganVzdCBmYXN0LWZvcndhcmRpbmcsIHRoZXJlIGlzIG5v CisJICogcG9pbnQgaW4gZGVjb2RpbmcgZGRsIG1lc3NhZ2VzLgorCSAqLworCWlmIChTbmFwQnVp bGRDdXJyZW50U3RhdGUoYnVpbGRlcikgPCBTTkFQQlVJTERfRlVMTF9TTkFQU0hPVCB8fAorCQlj dHgtPmZhc3RfZm9yd2FyZCkKKwkJcmV0dXJuOworCisJbWVzc2FnZSA9ICh4bF9sb2dpY2FsX2Rk bF9tZXNzYWdlICopIFhMb2dSZWNHZXREYXRhKHIpOworCisJaWYgKG1lc3NhZ2UtPmRiSWQgIT0g Y3R4LT5zbG90LT5kYXRhLmRhdGFiYXNlIHx8CisJCUZpbHRlckJ5T3JpZ2luKGN0eCwgb3JpZ2lu X2lkKSkKKwkJcmV0dXJuOworCisJaWYgKFNuYXBCdWlsZFByb2Nlc3NDaGFuZ2UoYnVpbGRlciwg eGlkLCBidWYtPm9yaWdwdHIpKQorCQlSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKGN0eC0+ cmVvcmRlciwgeGlkLCBidWYtPmVuZHB0ciwKKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlLCAv KiBmaXJzdCBwYXJ0IG9mIG1lc3NhZ2UgaXMgcHJlZml4ICovCisJCQkJCQkJCQkgbWVzc2FnZS0+ bWVzc2FnZV9zaXplLAorCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2UgKyBtZXNzYWdlLT5wcmVm aXhfc2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdlLT5yZWxpZCwgbWVzc2FnZS0+Y21kdHlwZSk7Cit9 CisKKy8qCiAgKiBDb25zb2xpZGF0ZWQgY29tbWl0IHJlY29yZCBoYW5kbGluZyBiZXR3ZWVuIHRo ZSBkaWZmZXJlbnQgZm9ybSBvZiBjb21taXQKICAqIHJlY29yZHMuCiAgKgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwppbmRleCA2MjVhN2Y0Li45ODk2OWM3IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwpAQCAtMzMsNiArMzMsNyBA QAogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJw Z3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgog I2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNzMsNiArNzQsMTAgQEAgc3RhdGlj IHZvaWQgdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLAogc3RhdGljIHZvaWQgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZm ZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJICAgWExvZ1JlY1B0ciBt ZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnBy ZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZv aWQgZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCisJCQkJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hh ciAqcHJlZml4LAorCQkJCQkJCQkgIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0 eXBlLAorCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsK IAogLyogc3RyZWFtaW5nIGNhbGxiYWNrcyAqLwogc3RhdGljIHZvaWQgc3RyZWFtX3N0YXJ0X2Ni X3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKQEAg LTkwLDYgKzk1LDExIEBAIHN0YXRpYyB2b2lkIHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcihSZW9y ZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuCiBzdGF0aWMgdm9pZCBzdHJl YW1fbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAJCQkJCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNh Y3Rpb25hbCwKIAkJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6 ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBzdHJlYW1fZGRsbWVzc2FnZV9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJ CQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIg KnByZWZpeCwKKwkJCQkJCQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5 cGUsCisJCQkJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsK IHN0YXRpYyB2b2lkIHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNh Y2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywg UmVsYXRpb24gcmVsYXRpb25zW10sIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSk7CiAKQEAg LTIxOCw2ICsyMjgsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVn aW5fb3B0aW9ucywKIAljdHgtPnJlb3JkZXItPmFwcGx5X3RydW5jYXRlID0gdHJ1bmNhdGVfY2Jf d3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPmNvbW1pdCA9IGNvbW1pdF9jYl93cmFwcGVyOwogCWN0 eC0+cmVvcmRlci0+bWVzc2FnZSA9IG1lc3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgtPnJlb3JkZXIt PmRkbG1lc3NhZ2UgPSBkZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAKIAkvKgogCSAqIFRvIHN1cHBv cnQgc3RyZWFtaW5nLCB3ZSByZXF1aXJlIHN0YXJ0L3N0b3AvYWJvcnQvY29tbWl0L2NoYW5nZQpA QCAtMjM0LDYgKzI0NSw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3Bs dWdpbl9vcHRpb25zLAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2NvbW1pdF9jYiAhPSBOVUxM KSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2NoYW5nZV9jYiAhPSBOVUxMKSB8fAogCQko Y3R4LT5jYWxsYmFja3Muc3RyZWFtX21lc3NhZ2VfY2IgIT0gTlVMTCkgfHwKKwkJKGN0eC0+Y2Fs bGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdlX2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNr cy5zdHJlYW1fdHJ1bmNhdGVfY2IgIT0gTlVMTCk7CiAKIAkvKgpAQCAtMjUxLDYgKzI2Myw3IEBA IFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0 eC0+cmVvcmRlci0+c3RyZWFtX2NvbW1pdCA9IHN0cmVhbV9jb21taXRfY2Jfd3JhcHBlcjsKIAlj dHgtPnJlb3JkZXItPnN0cmVhbV9jaGFuZ2UgPSBzdHJlYW1fY2hhbmdlX2NiX3dyYXBwZXI7CiAJ Y3R4LT5yZW9yZGVyLT5zdHJlYW1fbWVzc2FnZSA9IHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXI7 CisJY3R4LT5yZW9yZGVyLT5zdHJlYW1fZGRsbWVzc2FnZSA9IHN0cmVhbV9kZGxtZXNzYWdlX2Ni X3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fdHJ1bmNhdGUgPSBzdHJlYW1fdHJ1bmNh dGVfY2Jfd3JhcHBlcjsKIAogCkBAIC0xMjIxLDYgKzEyMzQsNDQgQEAgbWVzc2FnZV9jYl93cmFw cGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9CiAKIHN0 YXRpYyB2b2lkCitkZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJ CQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNt ZHR5cGUsCisJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCSAgY29uc3QgY2hhciAqbWVz c2FnZSkKK3sKKwlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9k YXRhOworCUxvZ2ljYWxFcnJvckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2Fs bGJhY2sgZXJyY2FsbGJhY2s7CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCWlm IChjdHgtPmNhbGxiYWNrcy5kZGxtZXNzYWdlX2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8q IFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3Rh dGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxiYWNrX25hbWUgPSAiZGRsbWVzc2FnZSI7CisJc3Rh dGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sg PSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNrOworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lk ICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7 CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQg c3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMgPSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0g dHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFsaWRUcmFuc2FjdGlvbklkOworCWN0eC0+d3Jp dGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKworCS8qIGRvIHRoZSBhY3R1YWwgd29yazogY2Fs bCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tzLmRkbG1lc3NhZ2VfY2IoY3R4LCB0eG4sIG1l c3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLCBjbWR0eXBlLAorCQkJCQkJCQkgbWVzc2FnZV9zaXpl LCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVycm9y X2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30KKworc3RhdGljIHZvaWQK IHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQkJCQlYTG9nUmVjUHRyIGZpcnN0X2xzbikKIHsKQEAgLTE1MzYsNiAr MTU4Nyw0OCBAQCBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hl LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9CiAKIHN0YXRpYyB2b2lkCitzdHJlYW1fZGRsbWVz c2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCisJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJIGNvbnN0IGNoYXIg KnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJ IFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKQoreworCUxv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5wcml2YXRlX2RhdGE7CisJTG9naWNh bEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxs YmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQpOworCisJLyogV2UncmUgb25seSBz dXBwb3NlZCB0byBjYWxsIHRoaXMgd2hlbiBzdHJlYW1pbmcgaXMgc3VwcG9ydGVkLiAqLworCUFz c2VydChjdHgtPnN0cmVhbWluZyk7CisKKwkvKiB0aGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsICov CisJaWYgKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdlX2NiID09IE5VTEwpCisJCXJl dHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0 YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxiYWNrX25hbWUgPSAic3RyZWFt X2RkbG1lc3NhZ2UiOworCXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCWVy cmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsKKwllcnJj YWxsYmFjay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBl cnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7 CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsK KwljdHgtPndyaXRlX3hpZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlkVHJhbnNh Y3Rpb25JZDsKKwljdHgtPndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkvKiBkbyB0 aGUgYWN0dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5zdHJlYW1f ZGRsbWVzc2FnZV9jYihjdHgsIHR4biwgbWVzc2FnZV9sc24sIHByZWZpeCwgcmVsaWQsCisJCQkJ CQkJCQkJY21kdHlwZSwgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJy b3IgY29udGV4dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5w cmV2aW91czsKK30KKworc3RhdGljIHZvaWQKIHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJl b3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkgICBpbnQg bnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sCiAJCQkJCQkgICBSZW9yZGVyQnVmZmVy Q2hhbmdlICpjaGFuZ2UpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Byb3RvLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5k ZXggZmY4NTEzZS4uZWFlYzAzMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9wcm90by5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJv dG8uYwpAQCAtNjQwLDggKzY0MCw4IEBAIGxvZ2ljYWxyZXBfcmVhZF90cnVuY2F0ZShTdHJpbmdJ bmZvIGluLAogICovCiB2b2lkCiBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBv dXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKLQkJCQkJCSBib29sIHRyYW5z YWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKLQkJCQkJCSBjb25zdCBjaGFy ICptZXNzYWdlKQorCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4 LAorCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJdWludDgJCWZsYWdz ID0gMDsKIApAQCAtNjYzLDYgKzY2Myw1MiBAQCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3Ry aW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKIH0KIAogLyoK KyAqIFJlYWQgRERMIE1FU1NBR0UgZnJvbSBzdHJlYW0KKyAqLworY2hhciAqCitsb2dpY2FscmVw X3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sCisJCQkJCQkg ICBjb25zdCBjaGFyICoqcHJlZml4LAorCQkJCQkJICAgU2l6ZSAqc3opCit7CisJdWludDggZmxh Z3M7CisJY2hhciAqbXNnOworCisJLy9UT0RPIGRvdWJsZSBjaGVjayB3aGVuIGRvIHdlIG5lZWQg dG8gZ2V0IFRyYW5zYWN0aW9uSWQuCisKKwlmbGFncyA9IHBxX2dldG1zZ2ludChpbiwgMSk7CisJ aWYgKGZsYWdzICE9IDApCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgZmxhZ3MgJXUgaW4g ZGRsIG1lc3NhZ2UiLCBmbGFncyk7CisJKmxzbiA9IHBxX2dldG1zZ2ludDY0KGluKTsKKwkqcHJl Zml4ID0gcHFfZ2V0bXNnc3RyaW5nKGluKTsKKwkqc3ogPSBwcV9nZXRtc2dpbnQoaW4sIDQpOwor CW1zZyA9IChjaGFyICopIHBxX2dldG1zZ2J5dGVzKGluLCAqc3opOworCisJcmV0dXJuIG1zZzsK K30KKworLyoKKyAqIFdyaXRlIERETCBNRVNTQUdFIHRvIHN0cmVhbQorICovCit2b2lkCitsb2dp Y2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlk LCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNv bnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJdWludDgJCWZsYWdzID0gMDsKKworCXBxX3NlbmRieXRl KG91dCwgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0UpOworCisJLyogdHJhbnNhY3Rpb24gSUQg KGlmIG5vdCB2YWxpZCwgd2UncmUgbm90IHN0cmVhbWluZykgKi8KKwlpZiAoVHJhbnNhY3Rpb25J ZElzVmFsaWQoeGlkKSkKKwkJcHFfc2VuZGludDMyKG91dCwgeGlkKTsKKworCXBxX3NlbmRpbnQ4 KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2NChvdXQsIGxzbik7CisJcHFfc2VuZHN0cmluZyhv dXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMyKG91dCwgc3opOworCXBxX3NlbmRieXRlcyhvdXQs IG1lc3NhZ2UsIHN6KTsKK30KKworLyoKICAqIFdyaXRlIHJlbGF0aW9uIGRlc2NyaXB0aW9uIHRv IHRoZSBvdXRwdXQgc3RyZWFtLgogICovCiB2b2lkCkBAIC0xMjE4LDYgKzEyNjQsOCBAQCBsb2dp Y2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24pCiAJCQlyZXR1cm4g IlRZUEUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19NRVNTQUdFOgogCQkJcmV0dXJuICJNRVNT QUdFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FHRToKKwkJCXJldHVybiAiRERM IjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfQkVHSU5fUFJFUEFSRToKIAkJCXJldHVybiAiQkVH SU4gUFJFUEFSRSI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkU6CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IDhkYTVmOTAu LjM0NmUxOWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVv cmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRl cmJ1ZmZlci5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAibGliL2JpbmFyeWhlYXAuaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJy ZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9zbG90LmgiCkBAIC01MTIsNiArNTEzLDE0IEBAIFJlb3JkZXJCdWZmZXJSZXR1cm5D aGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwKIAkJ CQlwZnJlZShjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UpOwogCQkJY2hhbmdlLT5kYXRhLm1zZy5t ZXNzYWdlID0gTlVMTDsKIAkJCWJyZWFrOworCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9E RExNRVNTQUdFOgorCQkJaWYgKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ICE9IE5VTEwpCisJ CQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgpOworCQkJY2hhbmdlLT5kYXRhLmRk bG1zZy5wcmVmaXggPSBOVUxMOworCQkJaWYgKGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSAh PSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSk7CisJCQljaGFu Z2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgPSBOVUxMOworCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRF Ul9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCWlmIChjaGFuZ2UtPmRhdGEuaW52YWwu aW52YWxpZGF0aW9ucykKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9u cyk7CkBAIC04NjcsNiArODc2LDM2IEBAIFJlb3JkZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRl ckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogfQogCiAvKgorICogQSB0cmFuc2FjdGlv bmFsIERETCBtZXNzYWdlIGlzIHF1ZXVlZCB0byBiZSBwcm9jZXNzZWQgdXBvbiBjb21taXQuCisg Ki8KK3ZvaWQKK1Jlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIs IFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCSBYTG9nUmVjUHRyIGxzbiwgY29uc3QgY2hhciAq cHJlZml4LAorCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSwK KwkJCQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUpCit7CisJTWVt b3J5Q29udGV4dCBvbGRjb250ZXh0OworCVJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsKKwor CUFzc2VydCh4aWQgIT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCisJb2xkY29udGV4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhyYi0+Y29udGV4dCk7CisKKwljaGFuZ2UgPSBSZW9yZGVyQnVm ZmVyR2V0Q2hhbmdlKHJiKTsKKwljaGFuZ2UtPmFjdGlvbiA9IFJFT1JERVJfQlVGRkVSX0NIQU5H RV9ERExNRVNTQUdFOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ID0gcHN0cmR1cChwcmVm aXgpOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQgPSByZWxpZDsKKwljaGFuZ2UtPmRhdGEu ZGRsbXNnLmNtZHR5cGUgPSBjbWR0eXBlOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9z aXplID0gbWVzc2FnZV9zaXplOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSA9IHBhbGxv YyhtZXNzYWdlX3NpemUpOworCW1lbWNweShjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsIG1l c3NhZ2UsIG1lc3NhZ2Vfc2l6ZSk7CisKKwlSZW9yZGVyQnVmZmVyUXVldWVDaGFuZ2UocmIsIHhp ZCwgbHNuLCBjaGFuZ2UsIGZhbHNlKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250 ZXh0KTsKK30KKworLyoKICAqIEFzc2VydFRYTkxzbk9yZGVyCiAgKgkJVmVyaWZ5IExTTiBvcmRl cmluZyBvZiB0cmFuc2FjdGlvbiBsaXN0cyBpbiB0aGUgcmVvcmRlcmJ1ZmZlcgogICoKQEAgLTE5 NTgsNiArMTk5NywyOSBAQCBSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKFJlb3JkZXJCdWZmZXIg KnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9CiAKIC8qCisgKiBIZWxwZXIgZnVuY3Rpb24g Zm9yIFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhOIGZvciBhcHBseWluZyB0aGUgRERMIG1lc3NhZ2Uu CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorUmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShS ZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCSBSZW9yZGVy QnVmZmVyQ2hhbmdlICpjaGFuZ2UsIGJvb2wgc3RyZWFtaW5nKQoreworCWlmIChzdHJlYW1pbmcp CisJCXJiLT5zdHJlYW1fZGRsbWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkg IGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4LAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1z Zy5yZWxpZCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwKKwkJCQkJCQkg IGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRh LmRkbG1zZy5tZXNzYWdlKTsKKwllbHNlCisJCXJiLT5kZGxtZXNzYWdlKHJiLCB0eG4sIGNoYW5n ZS0+bHNuLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgY2hh bmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0 eXBlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICAg Y2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsKK30KKworLyoKICAqIEZ1bmN0aW9uIHRvIHN0 b3JlIHRoZSBjb21tYW5kIGlkIGFuZCBzbmFwc2hvdCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50 CiAgKiBzdHJlYW0gc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGluZyB0 aGUgbmV4dCBzdHJlYW0uCiAgKi8KQEAgLTIzMzUsNiArMjM5NywxMCBAQCBSZW9yZGVyQnVmZmVy UHJvY2Vzc1RYTihSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJ CQlSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsK IAkJCQkJYnJlYWs7CiAKKwkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdF OgorCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3Ry ZWFtaW5nKTsKKwkJCQkJYnJlYWs7CisKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9J TlZBTElEQVRJT046CiAJCQkJCS8qIEV4ZWN1dGUgdGhlIGludmFsaWRhdGlvbiBtZXNzYWdlcyBs b2NhbGx5ICovCiAJCQkJCVJlb3JkZXJCdWZmZXJFeGVjdXRlSW52YWxpZGF0aW9ucyhjaGFuZ2Ut PmRhdGEuaW52YWwubmludmFsaWRhdGlvbnMsCkBAIC0zNzEwLDYgKzM3NzYsNDAgQEAgUmVvcmRl ckJ1ZmZlclNlcmlhbGl6ZUNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAogCiAJCQkJYnJlYWs7CiAJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdF X0RETE1FU1NBR0U6CisJCQl7CisJCQkJY2hhcgkgICAqZGF0YTsKKwkJCQlTaXplCQlwcmVmaXhf c2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCkgKyAxOworCisJCQkJc3og Kz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSArCisJCQkJ CXNpemVvZihTaXplKSArIHNpemVvZihPaWQpICsgc2l6ZW9mKGludCkgKyBzaXplb2YoU2l6ZSk7 CisJCQkJUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZVJlc2VydmUocmIsIHN6KTsKKworCQkJCWRhdGEg PSAoKGNoYXIgKikgcmItPm91dGJ1ZikgKyBzaXplb2YoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2Up OworCisJCQkJLyogbWlnaHQgaGF2ZSBiZWVuIHJlYWxsb2NhdGVkIGFib3ZlICovCisJCQkJb25k aXNrID0gKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlICopIHJiLT5vdXRidWY7CisKKwkJCQkvKiB3 cml0ZSB0aGUgcHJlZml4LCByZWxpZCBhbmQgY21kdHlwZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8K KwkJCQltZW1jcHkoZGF0YSwgJnByZWZpeF9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEg Kz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5y ZWxpZCwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5 KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsIHNpemVvZihpbnQpKTsKKwkJCQlk YXRhICs9IHNpemVvZihpbnQpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNn LnByZWZpeCwKKwkJCQkJICAgcHJlZml4X3NpemUpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7 CisKKwkJCQkvKiB3cml0ZSB0aGUgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQlt ZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplLCBzaXplb2YoU2l6 ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2Ut PmRhdGEuZGRsbXNnLm1lc3NhZ2UsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2Fn ZV9zaXplKTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplOwor CisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURB VElPTjoKIAkJCXsKIAkJCQljaGFyCSAgICpkYXRhOwpAQCAtNDAyNCw2ICs0MTI0LDE1IEBAIFJl b3JkZXJCdWZmZXJDaGFuZ2VTaXplKFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSkKIAogCQkJ CWJyZWFrOwogCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgor CQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxtc2cu cHJlZml4KSArIDE7CisKKwkJCQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGxt c2cubWVzc2FnZV9zaXplICsKKwkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKFNpemUpICsgc2l6 ZW9mKE9pZCkgKyBzaXplb2YoaW50KTsKKworCQkJCWJyZWFrOworCQkJfQogCQljYXNlIFJFT1JE RVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQl7CiAJCQkJc3ogKz0gc2l6ZW9mKFNo YXJlZEludmFsaWRhdGlvbk1lc3NhZ2UpICoKQEAgLTQyODIsOCArNDM5MSw3IEBAIFJlb3JkZXJC dWZmZXJSZXN0b3JlQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJCQkJLyogcmVhZCBwcmVmaXggKi8KIAkJCQltZW1jcHkoJnByZWZpeF9zaXplLCBkYXRh LCBzaXplb2YoU2l6ZSkpOwogCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOwotCQkJCWNoYW5nZS0+ ZGF0YS5tc2cucHJlZml4ID0gTWVtb3J5Q29udGV4dEFsbG9jKHJiLT5jb250ZXh0LAotCQkJCQkJ CQkJCQkJCQkJIHByZWZpeF9zaXplKTsKKwkJCQljaGFuZ2UtPmRhdGEubXNnLnByZWZpeCA9IE1l bW9yeUNvbnRleHRBbGxvYyhyYi0+Y29udGV4dCwgcHJlZml4X3NpemUpOwogCQkJCW1lbWNweShj aGFuZ2UtPmRhdGEubXNnLnByZWZpeCwgZGF0YSwgcHJlZml4X3NpemUpOwogCQkJCUFzc2VydChj aGFuZ2UtPmRhdGEubXNnLnByZWZpeFtwcmVmaXhfc2l6ZSAtIDFdID09ICdcMCcpOwogCQkJCWRh dGEgKz0gcHJlZml4X3NpemU7CkBAIC00Mjk5LDYgKzQ0MDcsMzMgQEAgUmVvcmRlckJ1ZmZlclJl c3RvcmVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAog CQkJCWJyZWFrOwogCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdF OgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplOworCisJCQkJLyogcmVhZCBwcmVmaXggKi8K KwkJCQltZW1jcHkoJnByZWZpeF9zaXplLCBkYXRhLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEg Kz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwg ZGF0YSwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5 KCZjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsIGRhdGEsIHNpemVvZihpbnQpKTsKKwkJCQlk YXRhICs9IHNpemVvZihpbnQpOworCQkJCWNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ID0gTWVt b3J5Q29udGV4dEFsbG9jKHJiLT5jb250ZXh0LCBwcmVmaXhfc2l6ZSk7CisJCQkJbWVtY3B5KGNo YW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4LCBkYXRhLCBwcmVmaXhfc2l6ZSk7CisJCQkJQXNzZXJ0 KGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4W3ByZWZpeF9zaXplIC0gMV0gPT0gJ1wwJyk7CisJ CQkJZGF0YSArPSBwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHJlYWQgdGhlIG1lc3NhZ2UgKi8KKwkJ CQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplLCBkYXRhLCBzaXplb2YoU2l6 ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCWNoYW5nZS0+ZGF0YS5tc2cubWVz c2FnZSA9IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+Y29udGV4dCwKKwkJCQkJCQkJCQkJCQkJCSAg Y2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCW1lbWNweShjaGFuZ2UtPmRhdGEu bXNnLm1lc3NhZ2UsIGRhdGEsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXpl KTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOworCisJCQkJYnJl YWs7CisJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJ CXsKIAkJCQlTaXplCQlpbnZhbF9zaXplID0gc2l6ZW9mKFNoYXJlZEludmFsaWRhdGlvbk1lc3Nh Z2UpICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDM4ZTNi MWMuLjJjNjY3YmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv d29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpA QCAtMTU2LDYgKzE1Niw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9k ZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1 ZGUgInBhcnNlci9hbmFseXplLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9z dG1hc3Rlci9iZ3dvcmtlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCkBA IC0xNzksNyArMTgwLDEwIEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRl ICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNsdWRl ICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5jbHVkZSAi dXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGls cy9jYXRjYWNoZS5oIgpAQCAtMjQ2Myw2ICsyNDY3LDIzMCBAQCBhcHBseV9oYW5kbGVfdHJ1bmNh dGUoU3RyaW5nSW5mbyBzKQogCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9CiAKKy8qIFJlbW92 ZSB0aGUgZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KK3N0YXRpYyB2b2lkCitw cmVwcm9jZXNzX2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNvbW1hbmRUYWcJ Y29tbWFuZFRhZzsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICopY29t bWFuZCk7CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVBVEVf VEFCTEVfQVM6CisJCWNhc2UgQ01EVEFHX1NFTEVDVF9JTlRPOgorCQkJeworCQkJCUNyZWF0ZVRh YmxlQXNTdG10ICpjYXN0bXQgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgY29tbWFuZC0+c3RtdDsK KwkJCQlpZiAoY2FzdG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwkJCQl7CisJCQkJCS8q CisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBhdm9pZCBkYXRhCisJ CQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0aGUK KwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQljYXN0bXQtPmludG8t PnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDTURUQUdf U0VMRUNUOgorCQkJeworCQkJCVNlbGVjdFN0bXQgKnNzdG10ID0gKFNlbGVjdFN0bXQgKikgY29t bWFuZC0+c3RtdDsKKworCQkJCWlmIChzc3RtdC0+aW50b0NsYXVzZSAhPSBOVUxMKQorCQkJCXsK KwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lk IGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBm cm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCXNzdG10 LT5pbnRvQ2xhdXNlLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogSGFuZGxlIENSRUFURSBUQUJMRSBj b21tYW5kCisgKgorICogQ2FsbCBBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZSBmb3IgQ1JFQVRFIFRB QkVMIGNvbW1hbmQgdG8gc2V0IHRoZSByZWxzdGF0ZSB0bworICogU1VCUkVMX1NUQVRFX1JFQURZ IHNvIERNTCBjaGFuZ2VzIG9uIHRoaXMgbmV3IHRhYmxlIGNhbiBiZSByZXBsaWNhdGVkIHdpdGhv dXQKKyAqIGhhdmluZyB0byBtYW51YWxseSBydW4gImFsdGVyIHN1YnNjcmlwdGlvbiAuLi4gcmVm cmVzaCBwdWJsaWNhdGlvbiIKKyAqLworc3RhdGljIHZvaWQKK2hhbmRsZV9jcmVhdGVfdGFibGUo UmF3U3RtdCAqY29tbWFuZCkKK3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisJUmFuZ2VWYXIJ ICpydiA9IE5VTEw7CisJT2lkCQkJcmVsaWQ7CisJT2lkCQkJcmVsbmFtZXNwYWNlID0gSW52YWxp ZE9pZDsKKwljaGFyIAkJICpzY2hlbWFuYW1lID0gTlVMTDsKKwljaGFyCQkgKnJlbG5hbWUgPSBO VUxMOworCisJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7 CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVBVEVfVEFCTEU6 CisJCQl7CisJCQkJQ3JlYXRlU3RtdCAqY3N0bXQgPSAoQ3JlYXRlU3RtdCAqKSBjb21tYW5kLT5z dG10OworCQkJCXJ2ID0gY3N0bXQtPnJlbGF0aW9uOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQlicmVhazsKKwl9CisKKwlpZiAoIXJ2KQorCQlyZXR1cm47CisKKwlzY2hlbWFuYW1l ID0gcnYtPnNjaGVtYW5hbWU7CisJcmVsbmFtZSA9IHJ2LT5yZWxuYW1lOworCisJaWYgKHNjaGVt YW5hbWUgIT0gTlVMTCkKKwkJcmVsbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9vaWQoc2NoZW1h bmFtZSwgZmFsc2UpOworCisJaWYgKHJlbG5hbWVzcGFjZSAhPSBJbnZhbGlkT2lkKQorCQlyZWxp ZCA9IGdldF9yZWxuYW1lX3JlbGlkKHJlbG5hbWUsIHJlbG5hbWVzcGFjZSk7CisJZWxzZQorCQly ZWxpZCA9IFJlbG5hbWVHZXRSZWxpZChyZWxuYW1lKTsKKworCWlmIChyZWxpZCAhPSBJbnZhbGlk T2lkKQorCXsKKwkJQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUoTXlTdWJzY3JpcHRpb24tPm9pZCwg cmVsaWQsCisJCQkJCQkJCVNVQlJFTF9TVEFURV9SRUFEWSwKKwkJCQkJCQkJSW52YWxpZFhMb2dS ZWNQdHIpOworCQllcmVwb3J0KERFQlVHMSwKKwkJCQkoZXJybXNnX2ludGVybmFsKCJ0YWJsZSBc IiVzXCIgYWRkZWQgdG8gc3Vic2NyaXB0aW9uIFwiJXNcIiIsCisJCQkJCQkJCSByZWxuYW1lLCBN eVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCithcHBseV9oYW5k bGVfZGRsKFN0cmluZ0luZm8gcykKK3sKKwlYTG9nUmVjUHRyIGxzbjsKKwljb25zdCBjaGFyICpw cmVmaXggPSBOVUxMOworCWNoYXIgKm1lc3NhZ2UgPSBOVUxMOworCWNoYXIJICAgKmRkbF9jb21t YW5kOworCVNpemUJCXN6OworCUxpc3QJICAgKnBhcnNldHJlZV9saXN0OworCUxpc3RDZWxsICAg KnBhcnNldHJlZV9pdGVtOworCURlc3RSZWNlaXZlciAqcmVjZWl2ZXI7CisJTWVtb3J5Q29udGV4 dCBvbGRjb250ZXh0OworCWNvbnN0IGNoYXIgKnNhdmVfZGVidWdfcXVlcnlfc3RyaW5nID0gZGVi dWdfcXVlcnlfc3RyaW5nOworCisJbWVzc2FnZSA9IGxvZ2ljYWxyZXBfcmVhZF9kZGxtZXNzYWdl KHMsICZsc24sICZwcmVmaXgsICZzeik7CisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIGEgdHJh bnNhY3Rpb24gY29tbWFuZCAqLworCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKworCWRkbF9j b21tYW5kID0gZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcobWVzc2FnZSk7CisJZGVidWdfcXVl cnlfc3RyaW5nID0gZGRsX2NvbW1hbmQ7CisKKwkvKiBEZXN0Tm9uZSBmb3IgbG9naWNhbCByZXBs aWNhdGlvbiAqLworCXJlY2VpdmVyID0gQ3JlYXRlRGVzdFJlY2VpdmVyKERlc3ROb25lKTsKKwlw YXJzZXRyZWVfbGlzdCA9IHBnX3BhcnNlX3F1ZXJ5KGRkbF9jb21tYW5kKTsKKworCWZvcmVhY2go cGFyc2V0cmVlX2l0ZW0sIHBhcnNldHJlZV9saXN0KQorCXsKKwkJTGlzdAkgICAqcGxhbnRyZWVf bGlzdDsKKwkJTGlzdAkgICAqcXVlcnl0cmVlX2xpc3Q7CisJCVJhd1N0bXQJICAgKmNvbW1hbmQg PSAoUmF3U3RtdCAqKSBsZmlyc3QocGFyc2V0cmVlX2l0ZW0pOworCQlDb21tYW5kVGFnCWNvbW1h bmRUYWc7CisJCU1lbW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0ID0gTlVMTDsKKwkJ UG9ydGFsCQlwb3J0YWw7CisJCWJvb2wJCSBzbmFwc2hvdF9zZXQgPSBmYWxzZTsKKworCQljb21t YW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCQkvKiBJZiB3 ZSBnb3QgYSBjYW5jZWwgc2lnbmFsIGluIHBhcnNpbmcgb3IgcHJpb3IgY29tbWFuZCwgcXVpdCAq LworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIFJlbW92ZSBkYXRhIHBvcHVsYXRp b24gZnJvbSB0aGUgY29tbWFuZCAqLworCQlwcmVwcm9jZXNzX2NyZWF0ZV90YWJsZShjb21tYW5k KTsKKworCQkvKgorCQkgKiBTZXQgdXAgYSBzbmFwc2hvdCBpZiBwYXJzZSBhbmFseXNpcy9wbGFu bmluZyB3aWxsIG5lZWQgb25lLgorCQkgKi8KKwkJaWYgKGFuYWx5emVfcmVxdWlyZXNfc25hcHNo b3QoY29tbWFuZCkpCisJCXsKKwkJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNu YXBzaG90KCkpOworCQkJc25hcHNob3Rfc2V0ID0gdHJ1ZTsKKwkJfQorCisJCS8qCisJCSAqIFdl IGRvIHRoZSB3b3JrIGZvciBlYWNoIHBhcnNldHJlZSBpbiBhIHNob3J0LWxpdmVkIGNvbnRleHQs IHRvCisJCSAqIGxpbWl0IHRoZSBtZW1vcnkgdXNlZCB3aGVuIHRoZXJlIGFyZSBtYW55IGNvbW1h bmRzIGluIHRoZSBzdHJpbmcuCisJCSAqLworCQlwZXJfcGFyc2V0cmVlX2NvbnRleHQgPQorCQkJ QWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkgICJl eGVjdXRlX3NxbF9zdHJpbmcgcGVyLXN0YXRlbWVudCBjb250ZXh0IiwKKwkJCQkJCQkJICBBTExP Q1NFVF9ERUZBVUxUX1NJWkVTKTsKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCisJCXF1ZXJ5dHJlZV9saXN0ID0gcGdfYW5hbHl6 ZV9hbmRfcmV3cml0ZV9maXhlZHBhcmFtcyhjb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJZGRsX2Nv bW1hbmQsCisJCQkJCQkJCQkJCQkJCQlOVUxMLCAwLCBOVUxMKTsKKworCQlwbGFudHJlZV9saXN0 ID0gcGdfcGxhbl9xdWVyaWVzKHF1ZXJ5dHJlZV9saXN0LCBkZGxfY29tbWFuZCwgMCwgTlVMTCk7 CisKKwkJLyogRG9uZSB3aXRoIHRoZSBzbmFwc2hvdCB1c2VkIGZvciBwYXJzaW5nL3BsYW5uaW5n ICovCisJCWlmIChzbmFwc2hvdF9zZXQpCisJCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCisJCXBv cnRhbCA9IENyZWF0ZVBvcnRhbCgibG9naWNhbCByZXBsaWNhdGlvbiIsIHRydWUsIHRydWUpOwor CisJCS8qCisJCSAqIFdlIGRvbid0IGhhdmUgdG8gY29weSBhbnl0aGluZyBpbnRvIHRoZSBwb3J0 YWwsIGJlY2F1c2UgZXZlcnl0aGluZworCQkgKiB3ZSBhcmUgcGFzc2luZyBoZXJlIGlzIGluIEFw cGx5TWVzc2FnZUNvbnRleHQgb3IgdGhlCisJCSAqIHBlcl9wYXJzZXRyZWVfY29udGV4dCwgYW5k IHNvIHdpbGwgb3V0bGl2ZSB0aGUgcG9ydGFsIGFueXdheS4KKwkJICovCisJCVBvcnRhbERlZmlu ZVF1ZXJ5KHBvcnRhbCwKKwkJCQkJCSAgTlVMTCwKKwkJCQkJCSAgZGRsX2NvbW1hbmQsCisJCQkJ CQkgIGNvbW1hbmRUYWcsCisJCQkJCQkgIHBsYW50cmVlX2xpc3QsCisJCQkJCQkgIE5VTEwpOwor CisJCS8qCisJCSAqIFN0YXJ0IHRoZSBwb3J0YWwuICBObyBwYXJhbWV0ZXJzIGhlcmUuCisJCSAq LworCQlQb3J0YWxTdGFydChwb3J0YWwsIE5VTEwsIDAsIEludmFsaWRTbmFwc2hvdCk7CisKKwkJ LyoKKwkJICogU3dpdGNoIGJhY2sgdG8gdHJhbnNhY3Rpb24gY29udGV4dCBmb3IgZXhlY3V0aW9u LgorCQkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJCSh2b2lk KSBQb3J0YWxSdW4ocG9ydGFsLAorCQkJCQkJIEZFVENIX0FMTCwKKwkJCQkJCSB0cnVlLAorCQkJ CQkJIHRydWUsCisJCQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkgTlVM TCk7CisKKwkJUG9ydGFsRHJvcChwb3J0YWwsIGZhbHNlKTsKKworCQlDb21tYW5kQ291bnRlcklu Y3JlbWVudCgpOworCisJCS8qCisJCSAqIFRhYmxlIGNyZWF0ZWQgYnkgRERMIHJlcGxpY2F0aW9u IChkYXRhYmFzZSBsZXZlbCkgaXMgYXV0b21hdGljYWxseQorCQkgKiBhZGRlZCB0byB0aGUgc3Vi c2NyaXB0aW9uIGhlcmUuCisJCSAqLworCQloYW5kbGVfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOwor CisJCS8qIE5vdyB3ZSBtYXkgZHJvcCB0aGUgcGVyLXBhcnNldHJlZSBjb250ZXh0LCBpZiBvbmUg d2FzIGNyZWF0ZWQuICovCisJCU1lbW9yeUNvbnRleHREZWxldGUocGVyX3BhcnNldHJlZV9jb250 ZXh0KTsKKwl9CisKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBzYXZlX2RlYnVnX3F1ZXJ5X3N0cmlu ZzsKKwllbmRfcmVwbGljYXRpb25fc3RlcCgpOworfQorCiAKIC8qCiAgKiBMb2dpY2FsIHJlcGxp Y2F0aW9uIHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0Y2hlci4KQEAgLTI1MjgsNiArMjc1NiwxMCBA QCBhcHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpCiAJCQkgKi8KIAkJCWJyZWFrOwogCisJCWNh c2UgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0U6CisJCQlhcHBseV9oYW5kbGVfZGRsKHMpOwor CQkJYnJlYWs7CisKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1NUQVJUOgogCQkJYXBw bHlfaGFuZGxlX3N0cmVhbV9zdGFydChzKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggOGRlYWU1Ny4uMzMxOTQ5YyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC01NCw2ICs1NCwx MSBAQCBzdGF0aWMgdm9pZCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwKIAkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLAogCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJ CQkJCQkgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBwZ291dHB1 dF9kZGxtZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQljb25zdCBj aGFyICpwcmVmaXgsIE9pZCByZWxpZCwKKwkJCQkJCQkJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0 eXBlLAorCQkJCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyBib29s IHBnb3V0cHV0X29yaWdpbl9maWx0ZXIoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJ CQkJCQkgICBSZXBPcmlnaW5JZCBvcmlnaW5faWQpOwogc3RhdGljIHZvaWQgcGdvdXRwdXRfYmVn aW5fcHJlcGFyZV90eG4oTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApAQCAtMjU2LDYgKzI2 MSw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikK IAljYi0+Y2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT50cnVuY2F0ZV9jYiA9IHBn b3V0cHV0X3RydW5jYXRlOwogCWNiLT5tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwlj Yi0+ZGRsbWVzc2FnZV9jYiA9IHBnb3V0cHV0X2RkbG1lc3NhZ2U7CiAJY2ItPmNvbW1pdF9jYiA9 IHBnb3V0cHV0X2NvbW1pdF90eG47CiAKIAljYi0+YmVnaW5fcHJlcGFyZV9jYiA9IHBnb3V0cHV0 X2JlZ2luX3ByZXBhcmVfdHhuOwpAQCAtMjcyLDYgKzI3OCw3IEBAIF9QR19vdXRwdXRfcGx1Z2lu X2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+c3RyZWFtX2NvbW1pdF9jYiA9 IHBnb3V0cHV0X3N0cmVhbV9jb21taXQ7CiAJY2ItPnN0cmVhbV9jaGFuZ2VfY2IgPSBwZ291dHB1 dF9jaGFuZ2U7CiAJY2ItPnN0cmVhbV9tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwlj Yi0+c3RyZWFtX2RkbG1lc3NhZ2VfY2IgPSBwZ291dHB1dF9kZGxtZXNzYWdlOwogCWNiLT5zdHJl YW1fdHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAkvKiB0cmFuc2FjdGlvbiBzdHJl YW1pbmcgLSB0d28tcGhhc2UgY29tbWl0ICovCiAJY2ItPnN0cmVhbV9wcmVwYXJlX2NiID0gcGdv dXRwdXRfc3RyZWFtX3ByZXBhcmVfdHhuOwpAQCAtNDA3LDYgKzQxNCw3IEBAIHBnb3V0cHV0X3N0 YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpv cHQsCiAKIAkvKiBUaGlzIHBsdWdpbiB1c2VzIGJpbmFyeSBwcm90b2NvbC4gKi8KIAlvcHQtPm91 dHB1dF90eXBlID0gT1VUUFVUX1BMVUdJTl9CSU5BUllfT1VUUFVUOworCW9wdC0+cmVjZWl2ZV9y ZXdyaXRlcyA9IHRydWU7CiAKIAkvKgogCSAqIFRoaXMgaXMgcmVwbGljYXRpb24gc3RhcnQgYW5k IG5vdCBzbG90IGluaXRpYWxpemF0aW9uLgpAQCAtNDgwLDYgKzQ4OCw3IEBAIHBnb3V0cHV0X3N0 YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpv cHQsCiAKIAkJLyogSW5pdCBwdWJsaWNhdGlvbiBzdGF0ZS4gKi8KIAkJZGF0YS0+cHVibGljYXRp b25zID0gTklMOworCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IE5JTDsKIAkJcHVibGljYXRpb25z X3ZhbGlkID0gZmFsc2U7CiAJCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxiYWNrKFBVQkxJQ0FU SU9OT0lELAogCQkJCQkJCQkJICBwdWJsaWNhdGlvbl9pbnZhbGlkYXRpb25fY2IsCkBAIC0xMzYy LDkgKzEzNzEsMjIgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCVJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlIGFjdGlv biA9IGNoYW5nZS0+YWN0aW9uOwogCVR1cGxlVGFibGVTbG90ICpvbGRfc2xvdCA9IE5VTEw7CiAJ VHVwbGVUYWJsZVNsb3QgKm5ld19zbG90ID0gTlVMTDsKKwlib29sCQkJdGFibGVfcmV3cml0ZSA9 IGZhbHNlOwogCiAJdXBkYXRlX3JlcGxpY2F0aW9uX3Byb2dyZXNzKGN0eCwgZmFsc2UpOwogCisJ LyoKKwkgKiBGb3IgaGVhcCByZXdyaXRlcywgd2UgbWlnaHQgbmVlZCB0byByZXBsaWNhdGUgdGhl bSBpZiB0aGUgcmV3cml0dGVuCisJICogdGFibGUgcHVibGlzaGVzIHJld3JpdGUgZGRsIG1lc3Nh Z2UuIFNvIGdldCB0aGUgYWN0dWFsIHJlbGF0aW9uIGhlcmUgYW5kCisJICogY2hlY2sgdGhlIHB1 YmFjdGlvbiBsYXRlci4KKwkgKi8KKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0ZSkK Kwl7CisJCXRhYmxlX3Jld3JpdGUgPSB0cnVlOworCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRS ZWxhdGlvbihyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKTsKKwkJdGFyZ2V0cmVsID0gcmVs YXRpb247CisJfQorCiAJaWYgKCFpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihyZWxhdGlvbikpCiAJ CXJldHVybjsKIApAQCAtMTM5OCw2ICsxNDIwLDEzIEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCUFzc2VydChm YWxzZSk7CiAJfQogCisJLyoKKwkgKiBXZSBkb24ndCBwdWJsaXNoIHRhYmxlIHJld3JpdGUgY2hh bmdlIHVubGVzcyB3ZSBwdWJsaXNoIHRoZSByZXdyaXRlIGRkbAorCSAqIG1lc3NhZ2UuCisJICov CisJaWYgKHRhYmxlX3Jld3JpdGUgJiYgIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJ cmV0dXJuOworCiAJLyogQXZvaWQgbGVha2luZyBtZW1vcnkgYnkgdXNpbmcgYW5kIHJlc2V0dGlu ZyBvdXIgb3duIGNvbnRleHQgKi8KIAlvbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZGF0YS0+ Y29udGV4dCk7CiAKQEAgLTE0MjcsOCArMTQ1Niw4IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCX0KIAogCQkJ LyogQ2hlY2sgcm93IGZpbHRlciAqLwotCQkJaWYgKCFwZ291dHB1dF9yb3dfZmlsdGVyKHRhcmdl dHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwKLQkJCQkJCQkJCSAmYWN0aW9uKSkKKwkJ CWlmICghdGFibGVfcmV3cml0ZSAmJgorCQkJCSFwZ291dHB1dF9yb3dfZmlsdGVyKHRhcmdldHJl bCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwgJmFjdGlvbikpCiAJCQkJYnJlYWs7CiAKIAkJ CS8qCkBAIC0xNDQ4LDggKzE0NzcsMTkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJbWF5YmVfc2VuZF9zY2hl bWEoY3R4LCBjaGFuZ2UsIHJlbGF0aW9uLCByZWxlbnRyeSk7CiAKIAkJCU91dHB1dFBsdWdpblBy ZXBhcmVXcml0ZShjdHgsIHRydWUpOwotCQkJbG9naWNhbHJlcF93cml0ZV9pbnNlcnQoY3R4LT5v dXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKLQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVs ZW50cnktPmNvbHVtbnMpOworCisJCQkvKgorCQkJICogQ29udmVydCB0aGUgcmV3cml0ZSBpbnNl cnRzIHRvIHVwZGF0ZXMgc28gdGhhdCB0aGUgc3Vic2NyaWJlcgorCQkJICogY2FuIHJlcGxheSBp dC4gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGJldHdlZW4KKwkJCSAqIHB1 Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBpcyBjb25zaXN0ZW50LgorCQkJICovCisJCQlpZiAodGFi bGVfcmV3cml0ZSkKKwkJCQlsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShjdHgtPm91dCwgeGlkLCB0 YXJnZXRyZWwsCisJCQkJCQkJCQkJTlVMTCwgbmV3X3Nsb3QsIGRhdGEtPmJpbmFyeSwKKwkJCQkJ CQkJCQlyZWxlbnRyeS0+Y29sdW1ucyk7CisJCQllbHNlCisJCQkJbG9naWNhbHJlcF93cml0ZV9p bnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKKwkJCQkJCQkJCQlkYXRh LT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKIAkJCU91dHB1dFBsdWdpbldyaXRlKGN0eCwg dHJ1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFOgpA QCAtMTU3OSw2ICsxNjE5LDkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQlhbmNlc3RvciA9IE5VTEw7CiAJfQog CisJaWYgKHRhYmxlX3Jld3JpdGUpCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCiAJLyog Q2xlYW51cCAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGQpOwogCU1lbW9yeUNvbnRleHRS ZXNldChkYXRhLT5jb250ZXh0KTsKQEAgLTE2NTYsOCArMTY5OSw4IEBAIHBnb3V0cHV0X3RydW5j YXRlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog CiBzdGF0aWMgdm9pZAogcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKLQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwg Ym9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osCi0JCQkJIGNv bnN0IGNoYXIgKm1lc3NhZ2UpCisJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJh bnNhY3Rpb25hbCwKKwkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFy ICptZXNzYWdlKQogewogCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4 LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CiAJVHJhbnNhY3Rpb25JZCB4aWQgPSBJbnZhbGlkVHJh bnNhY3Rpb25JZDsKQEAgLTE2OTcsNiArMTc0MCwxMzcgQEAgcGdvdXRwdXRfbWVzc2FnZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlPdXRwdXRQ bHVnaW5Xcml0ZShjdHgsIHRydWUpOwogfQogCitzdGF0aWMgdm9pZAorcGdvdXRwdXRfZGRsbWVz c2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK KwkJCQkJWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBP aWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJU2l6ZSBzeiwgY29u c3QgY2hhciAqbWVzc2FnZSkKK3sKKwlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRwdXREYXRh ICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVBHT3V0cHV0VHhuRGF0YSAqdHhuZGF0 YSA9IChQR091dHB1dFR4bkRhdGEgKikgdHhuLT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CisJUmVs YXRpb24JcmVsYXRpb24gPSBOVUxMOworCVRyYW5zYWN0aW9uSWQgeGlkID0gSW52YWxpZFRyYW5z YWN0aW9uSWQ7CisJUmVsYXRpb25TeW5jRW50cnkgKnJlbGVudHJ5OworCisJLyoKKwkgKiBSZW1l bWJlciB0aGUgeGlkIGZvciB0aGUgbWVzc2FnZSBpbiBzdHJlYW1pbmcgbW9kZS4gU2VlCisJICog cGdvdXRwdXRfY2hhbmdlLgorCSAqLworCWlmIChpbl9zdHJlYW1pbmcpCisJCXhpZCA9IHR4bi0+ eGlkOworCisJc3dpdGNoIChjbWR0eXBlKQorCXsKKwkJY2FzZSBEQ1RfVGFibGVEcm9wU3RhcnQ6 CisJCQkvKgorCQkJICogT24gRFJPUCBzdGFydCwgYWRkIHRoZSByZWxpZCB0byBhIGRlbGV0ZWRf cmVsaWQgbGlzdCBpZiB0aGUKKwkJCSAqIHJlbGlkIGlzIHBhcnQgb2YgYSBwdWJsaWNhdGlvbiB0 aGF0IHN1cHBvcnRzIGRkbCBwdWJsaWNhdGlvbi4gV2UKKwkJCSAqIG5lZWQgdGhpcyBiZWNhdXNl IG9uIERST1AgZW5kLCB0aGUgcmVsaWQgd2lsbCBubyBsb25nZXIgYmUKKwkJCSAqIHZhbGlkLiBM YXRlciBvbiBEcm9wIGVuZCwgdmVyaWZ5IHRoYXQgdGhlIGRyb3AgaXMgZm9yIGEgcmVsaWQKKwkJ CSAqIHRoYXQgaXMgb24gdGhlIGRlbGV0ZWRfcmlkIGxpc3QsIGFuZCBvbmx5IHRoZW4gc2VuZCB0 aGUgZGRsCisJCQkgKiBtZXNzYWdlLgorCQkJICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRH ZXRSZWxhdGlvbihyZWxpZCk7CisKKwkJCUFzc2VydChyZWxhdGlvbik7CisJCQlyZWxlbnRyeSA9 IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmIChyZWxlbnRyeS0+ cHViYWN0aW9ucy5wdWJkZGwpCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsYXBwZW5kX29p ZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpOworCisJCQlSZWxhdGlvbkNsb3NlKHJlbGF0 aW9uKTsKKwkJCXJldHVybjsKKwkJY2FzZSBEQ1RfVGFibGVEcm9wRW5kOgorCQkJaWYgKCFsaXN0 X21lbWJlcl9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKSkKKwkJCQlyZXR1cm47CisJ CQllbHNlCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsaXN0X2RlbGV0ZV9vaWQoZGF0YS0+ ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKwkJCWJyZWFrOworCQljYXNlIERDVF9UYWJsZUFsdGVy OgorCQkJLyoKKwkJCSAqIEZvciB0YWJsZSByZXdyaXRlIGRkbCwgd2UgZmlyc3Qgc2VuZCB0aGUg b3JpZ2luYWwgZGRsIG1lc3NhZ2UgdG8KKwkJCSAqIHN1YnNjcmliZXIsIHRoZW4gY29udmVydCB0 aGUgdXBjb21pbmcgcmV3cml0ZSBJTlNFUlQgdG8gVVBEQVRFIGFuZAorCQkJICogc2VuZCB0aGVt IHRvIHN1YnNjcmliZXIgc28gdGhhdCB0aGUgZGF0YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQKKwkJ CSAqIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZSBjb25zaXN0ZW50LgorCQkJICoKKwkJCSAqIFdl IGRvIHRoaXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKwkJCSAqCisJCQkgKiAoMSkgVGhl IGRhdGEgYmVmb3JlIHRoZSByZXdyaXRlIGRkbCBjb3VsZCBhbHJlYWR5IGJlIGRpZmZlcmVudCBh bW9uZworCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4 dHJhIGRhdGEgaW4gc3Vic2NyaWJlcgorCQkJICogd2hpY2ggZG9lc24ndCBleGlzdCBpbiBwdWJs aXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBuZWVkIHRvIGxldAorCQkJICogdGhlIHN1YnNj cmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0ZSBkZGwgdG8gcmV3cml0ZSBhbGwgdGhl CisJCQkgKiBkYXRhIGF0IGZpcnN0LgorCQkJICoKKwkJCSAqICgyKSB0aGUgZGF0YSBhZnRlciBl eGVjdXRpbmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50IGFtb25nCisJCQkgKiBwdWJs aXNoZXIgYW5kIHN1YnNjcmliZXIoZHVlIHRvIGRpZmZlcmVudCBmdW5jdGlvbnMvb3BlcmF0b3Jz IHVzZWQKKwkJCSAqIGR1cmluZyByZXdyaXRlKSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhl IHJld3JpdGUgVVBEQVRFcyB0byBrZWVwCisJCQkgKiB0aGUgZGF0YSBjb25zaXN0ZW50LgorCQkJ ICoKKwkJCSAqIFRPIElNUFJPVkU6IFdlIGNvdWxkIGltcHJvdmUgdGhpcyBieSBsZXR0aW5nIHRo ZSBzdWJzY3JpYmVyIG9ubHkKKwkJCSAqIHJld3JpdGUgdGhlIGV4dHJhIGRhdGEgaW5zdGVhZCBv ZiBkb2luZyBmdWxseSByZXdyaXRlIGFuZCB1c2UgdGhlCisJCQkgKiB1cGNvbWluZyByZXdyaXRl IFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBCZXNpZGVzLCB3ZSBtYXkKKwkJCSAq IG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZSBvZiByZXdyaXRl IGRkbCwgZm9yCisJCQkgKiBleGFtcGxlLCBpdCBzZWVtcyBmaW5lIHRvIHNraXAgc2VuZGluZyBy ZXdyaXRlIGNoYW5nZXMgZm9yIEFMVEVSCisJCQkgKiBUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBk YXRhIGluIHRoZSB0YWJsZSBkb2Vzbid0IGFjdHVhbGx5IGJlCisJCQkgKiBjaGFuZ2VkLgorCQkJ ICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisJCQlBc3Nl cnQocmVsYXRpb24pOworCisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCBy ZWxhdGlvbik7CisKKwkJCS8qCisJCQkgKiBTa2lwIHNlbmRpbmcgdGhpcyBkZGwgaWYgd2UgZG9u J3QgcHVibGlzaCBkZGwgbWVzc2FnZSBvciB0aGUgZGRsCisJCQkgKiBuZWVkIHRvIGJlIHB1Ymxp c2hlZCB2aWEgaXRzIHJvb3QgcmVsYXRpb24uCisJCQkgKi8KKwkJCWlmICghcmVsZW50cnktPnB1 YmFjdGlvbnMucHViZGRsIHx8CisJCQkJcmVsZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgIT0gcmVs aWQpCisJCQl7CisJCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJ fQorCisJCQlicmVhazsKKwkJY2FzZSBEQ1RfU2ltcGxlQ21kOgorCQkJcmVsYXRpb24gPSBSZWxh dGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlpZiAocmVsYXRpb24gPT0gTlVMTCkKKwkJ CQlicmVhazsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRp b24pOworCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJCXsKKwkJCQlS ZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWJyZWFrOwor CQljYXNlIERDVF9PYmplY3REcm9wOgorCQkJLyogZG8gbm90aGluZyAqLworCQkJYnJlYWs7CisJ CWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgdHlwZSAlZCIsIGNtZHR5cGUp OworCQkJYnJlYWs7CisJfQorCisJLyogU2VuZCBCRUdJTiBpZiB3ZSBoYXZlbid0IHlldCAqLwor CWlmICh0eG5kYXRhICYmICF0eG5kYXRhLT5zZW50X2JlZ2luX3R4bikKKwkJcGdvdXRwdXRfc2Vu ZF9iZWdpbihjdHgsIHR4bik7CisKKwlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVl KTsKKwlsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoY3R4LT5vdXQsCisJCQkJCQkJCXhpZCwK KwkJCQkJCQkJbWVzc2FnZV9sc24sCisJCQkJCQkJCXByZWZpeCwKKwkJCQkJCQkJc3osCisJCQkJ CQkJCW1lc3NhZ2UpOworCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CisKKwlpZiAocmVs YXRpb24pCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworfQorCiAvKgogICogQ3VycmVudGx5 IHdlIGFsd2F5cyBmb3J3YXJkLgogICovCkBAIC0xOTgyLDcgKzIxNTYsOCBAQCBnZXRfcmVsX3N5 bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnkt PnNjaGVtYV9zZW50ID0gZmFsc2U7CiAJCWVudHJ5LT5zdHJlYW1lZF90eG5zID0gTklMOwogCQll bnRyeS0+cHViYWN0aW9ucy5wdWJpbnNlcnQgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUg PQotCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVi dHJ1bmNhdGUgPSBmYWxzZTsKKwkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5 LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0KKwkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9 IGZhbHNlOwogCQllbnRyeS0+bmV3X3Nsb3QgPSBOVUxMOwogCQllbnRyeS0+b2xkX3Nsb3QgPSBO VUxMOwogCQltZW1zZXQoZW50cnktPmV4cHJzdGF0ZSwgMCwgc2l6ZW9mKGVudHJ5LT5leHByc3Rh dGUpKTsKQEAgLTIwNDAsNiArMjIxNSw3IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERh dGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRh dGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZmFsc2U7CiAJCWVu dHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gZmFsc2U7CisJCWVudHJ5LT5wdWJhY3Rpb25z LnB1YmRkbCA9IGZhbHNlOwogCiAJCS8qCiAJCSAqIFR1cGxlIHNsb3RzIGNsZWFudXBzLiAoV2ls bCBiZSByZWJ1aWx0IGxhdGVyIGlmIG5lZWRlZCkuCkBAIC0yMTUzLDYgKzIzMjksNyBAQCBnZXRf cmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJ CQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0 ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1 YmRlbGV0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWItPnB1YmFj dGlvbnMucHVidHJ1bmNhdGU7CisJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsICAgIHw9IHB1 Yi0+cHViYWN0aW9ucy5wdWJkZGw7CiAKIAkJCQkvKgogCQkJCSAqIFdlIHdhbnQgdG8gcHVibGlz aCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3QgYW5jZXN0b3IKQEAgLTIzMzgsNiArMjUxNSw3 IEBAIHJlbF9zeW5jX2NhY2hlX3B1YmxpY2F0aW9uX2NiKERhdHVtIGFyZywgaW50IGNhY2hlaWQs IHVpbnQzMiBoYXNodmFsdWUpCiAJewogCQllbnRyeS0+cmVwbGljYXRlX3ZhbGlkID0gZmFsc2U7 CiAJfQorCiB9CiAKIC8qIFNlbmQgUmVwbGljYXRpb24gb3JpZ2luICovCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9yaV90cmlnZ2Vycy5jCmluZGV4IDUxYjNmZGMuLjdkNjBhYWMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9yaV90cmlnZ2Vycy5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19v cGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNvbW1h bmRzL3RyaWdnZXIuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCiAjaW5j bHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9zcGkuaCIKICNp bmNsdWRlICJsaWIvaWxpc3QuaCIKQEAgLTQwLDYgKzQxLDcgQEAKICNpbmNsdWRlICJwYXJzZXIv cGFyc2VfY29lcmNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCiAj aW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNs dWRlICJ1dGlscy9kYXR1bS5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv cmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggMGU4 ZmRhOS4uMjdkZTQ3NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2Fj aGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCkBAIC01NjI3LDYg KzU2MjcsNyBAQCBSZWxhdGlvbkJ1aWxkUHVibGljYXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0aW9u LCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRlc2MpCiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHVidXBk YXRlIHw9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZWxl dGUgfD0gcHViZm9ybS0+cHViZGVsZXRlOwogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YnRydW5j YXRlIHw9IHB1YmZvcm0tPnB1YnRydW5jYXRlOworCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRk bCB8PSBwdWJmb3JtLT5wdWJkZGw7CiAKIAkJLyoKIAkJICogQ2hlY2sgaWYgYWxsIGNvbHVtbnMg cmVmZXJlbmNlZCBpbiB0aGUgZmlsdGVyIGV4cHJlc3Npb24gYXJlIHBhcnQKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmlu ZGV4IDdjYzljNzIuLjAzMGQ0OTEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtMzg2Nyw2ICszODY3LDcgQEAg Z2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCWlu dAkJCWlfcHVidXBkYXRlOwogCWludAkJCWlfcHViZGVsZXRlOwogCWludAkJCWlfcHVidHJ1bmNh dGU7CisJaW50CQkJaV9wdWJkZGw7CiAJaW50CQkJaV9wdWJ2aWFyb290OwogCWludAkJCWksCiAJ CQkJbnR1cHM7CkBAIC0zODgyLDIzICszODgzLDI5IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZl ICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsK IAogCS8qIEdldCB0aGUgcHVibGljYXRpb25zLiAqLwotCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9u ID49IDEzMDAwMCkKKwlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNTAwMDApCiAJCWFwcGVu ZFBRRXhwQnVmZmVyKHF1ZXJ5LAogCQkJCQkJICAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBw LnB1Ym5hbWUsICIKIAkJCQkJCSAgInAucHVib3duZXIsICIKLQkJCQkJCSAgInAucHViYWxsdGFi bGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRl LCBwLnB1YnZpYXJvb3QgIgorCQkJCQkJICAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBw LnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIHAucHViZGRsLCBwLnB1YnZp YXJvb3QgIgorCQkJCQkJICAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CisJZWxzZSBpZiAoZm91 dC0+cmVtb3RlVmVyc2lvbiA+PSAxMzAwMDApCisJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LAor CQkJCQkJICAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKKwkJCQkJCSAg InAucHVib3duZXIsICIKKwkJCQkJCSAgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5w dWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRkbCwg cC5wdWJ2aWFyb290ICIKIAkJCQkJCSAgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCWVsc2Ug aWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTEwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlcihx dWVyeSwKIAkJCQkJCSAgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJ CQkJCQkgICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkgICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNl cnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVi dmlhcm9vdCAiCisJCQkJCQkgICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBk YXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIGZhbHNl IEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJICAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAJZWxz ZQogCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwKIAkJCQkJCSAgIlNFTEVDVCBwLnRhYmxlb2lk LCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkgICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkgICJw LnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFs c2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgorCQkJCQkJICAicC5wdWJh bGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFT IHB1YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRkbCwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCiAJ CQkJCQkgICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAogCXJlcyA9IEV4ZWN1dGVTcWxRdWVy eShmb3V0LCBxdWVyeS0+ZGF0YSwgUEdSRVNfVFVQTEVTX09LKTsKQEAgLTM5MTQsNiArMzkyMSw3 IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykK IAlpX3B1YnVwZGF0ZSA9IFBRZm51bWJlcihyZXMsICJwdWJ1cGRhdGUiKTsKIAlpX3B1YmRlbGV0 ZSA9IFBRZm51bWJlcihyZXMsICJwdWJkZWxldGUiKTsKIAlpX3B1YnRydW5jYXRlID0gUFFmbnVt YmVyKHJlcywgInB1YnRydW5jYXRlIik7CisJaV9wdWJkZGwgPSBQUWZudW1iZXIocmVzLCAicHVi ZGRsIik7CiAJaV9wdWJ2aWFyb290ID0gUFFmbnVtYmVyKHJlcywgInB1YnZpYXJvb3QiKTsKIAog CXB1YmluZm8gPSBwZ19tYWxsb2MobnR1cHMgKiBzaXplb2YoUHVibGljYXRpb25JbmZvKSk7CkBA IC0zOTM3LDYgKzM5NDUsOCBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpu dW1QdWJsaWNhdGlvbnMpCiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YmRlbGV0 ZSksICJ0IikgPT0gMCk7CiAJCXB1YmluZm9baV0ucHVidHJ1bmNhdGUgPQogCQkJKHN0cmNtcChQ UWdldHZhbHVlKHJlcywgaSwgaV9wdWJ0cnVuY2F0ZSksICJ0IikgPT0gMCk7CisJCXB1YmluZm9b aV0ucHViZGRsID0KKwkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGRsKSwgInQi KSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ2aWFyb290ID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1 ZShyZXMsIGksIGlfcHVidmlhcm9vdCksICJ0IikgPT0gMCk7CiAKQEAgLTQwMTYsNiArNDAyNiwx NSBAQCBkdW1wUHVibGljYXRpb24oQXJjaGl2ZSAqZm91dCwgY29uc3QgUHVibGljYXRpb25JbmZv ICpwdWJpbmZvKQogCQlmaXJzdCA9IGZhbHNlOwogCX0KIAorCWlmIChwdWJpbmZvLT5wdWJkZGwp CisJeworCQlpZiAoIWZpcnN0KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsICIp OworCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiZGRsIik7CisJCWZpcnN0ID0gZmFs c2U7CisJfQorCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICInIik7CiAKIAlpZiAocHVi aW5mby0+cHVidmlhcm9vdCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgg Yi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDFkMjFjMjkuLjY5Yjk0YWUgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXAuaApAQCAtNjIwLDYgKzYyMCw3IEBAIHR5cGVkZWYgc3RydWN0IF9QdWJsaWNhdGlvbklu Zm8KIAlib29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7CiAJYm9vbAkJcHVidmlh cm9vdDsKKwlib29sCQlwdWJkZGw7CiB9IFB1YmxpY2F0aW9uSW5mbzsKIAogLyoKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3Jt Z3JkZXNjLmMKaW5kZXggNmI4YzE3Yi4uNzkyZjQzOCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ193 YWxkdW1wL3JtZ3JkZXNjLmMKKysrIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKQEAg LTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgogI2luY2x1ZGUg ImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgi CisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL29yaWdpbi5oIgogI2luY2x1ZGUgInJtZ3JkZXNjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9z dGFuZGJ5ZGVmcy5oIgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMv YmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCBkMWFlNjk5Li43MTcxNzY4IDEwMDY0NAotLS0gYS9z cmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpAQCAt NjA1MCw3ICs2MDUwLDcgQEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQog CVBRRXhwQnVmZmVyRGF0YSBidWY7CiAJUEdyZXN1bHQgICAqcmVzOwogCXByaW50UXVlcnlPcHQg bXlvcHQgPSBwc2V0LnBvcHQ7Ci0Jc3RhdGljIGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNb XSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2V9OworCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CiAK IAlpZiAocHNldC5zdmVyc2lvbiA8IDEwMDAwMCkKIAl7CkBAIC02MDg1LDYgKzYwODUsMTAgQEAg bGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQlhcHBlbmRQUUV4cEJ1ZmZl cigmYnVmLAogCQkJCQkJICAiLFxuICBwdWJ2aWFyb290IEFTIFwiJXNcIiIsCiAJCQkJCQkgIGdl dHRleHRfbm9vcCgiVmlhIHJvb3QiKSk7CisJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTQwMDAwKQor CQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJICAiLFxuICBwdWJkZGwgQVMgXCIlc1wi IiwKKwkJCQkJCSAgZ2V0dGV4dF9ub29wKCJERExzIikpOwogCiAJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmJ1ZiwKIAkJCQkJCSAiXG5GUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25cbiIpOwpA QCAtNjE3Miw2ICs2MTc2LDcgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0 dGVybikKIAlQR3Jlc3VsdCAgICpyZXM7CiAJYm9vbAkJaGFzX3B1YnRydW5jYXRlOwogCWJvb2wJ CWhhc19wdWJ2aWFyb290OworCWJvb2wJCWhhc19wdWJkZGw7CiAKIAlQUUV4cEJ1ZmZlckRhdGEg dGl0bGU7CiAJcHJpbnRUYWJsZUNvbnRlbnQgY29udDsKQEAgLTYxODgsNiArNjE5Myw3IEBAIGRl c2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAKIAloYXNfcHVidHJ1bmNh dGUgPSAocHNldC5zdmVyc2lvbiA+PSAxMTAwMDApOwogCWhhc19wdWJ2aWFyb290ID0gKHBzZXQu c3ZlcnNpb24gPj0gMTMwMDAwKTsKKwloYXNfcHViZGRsID0gIChwc2V0LnN2ZXJzaW9uID49IDE1 MDAwMCk7CiAKIAlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CiAKQEAgLTYyMDEsNiArNjIwNyw5IEBA IGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJaWYgKGhhc19wdWJ2 aWFyb290KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJCSAiLCBwdWJ2aWFy b290Iik7CisJaWYgKGhhc19wdWJkZGwpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJ CQkJCQkJICIsIHB1YmRkbCIpOwogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkg IlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4iKTsKIApAQCAtNjI0OSw2ICs2MjU4 LDggQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCW5jb2xz Kys7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCW5jb2xzKys7CisJCWlmIChoYXNfcHViZGRs KQorCQkJbmNvbHMrKzsKIAogCQlpbml0UFFFeHBCdWZmZXIoJnRpdGxlKTsKIAkJcHJpbnRmUFFF eHBCdWZmZXIoJnRpdGxlLCBfKCJQdWJsaWNhdGlvbiAlcyIpLCBwdWJuYW1lKTsKQEAgLTYyNjMs NiArNjI3NCw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJ CQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIlRydW5jYXRlcyIpLCB0 cnVlLCBhbGlnbik7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCXByaW50VGFibGVBZGRIZWFk ZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiVmlhIHJvb3QiKSwgdHJ1ZSwgYWxpZ24pOworCQlpZiAo aGFzX3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgi RERMcyIpLCB0cnVlLCBhbGlnbik7CiAKIAkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0 dmFsdWUocmVzLCBpLCAyKSwgZmFsc2UsIGZhbHNlKTsKIAkJcHJpbnRUYWJsZUFkZENlbGwoJmNv bnQsIFBRZ2V0dmFsdWUocmVzLCBpLCAzKSwgZmFsc2UsIGZhbHNlKTsKQEAgLTYyNzMsNiArNjI4 Niw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmlu dFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDcpLCBmYWxzZSwgZmFsc2Up OwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFn ZXR2YWx1ZShyZXMsIGksIDgpLCBmYWxzZSwgZmFsc2UpOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJ CXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgOSksIGZhbHNlLCBm YWxzZSk7CiAKIAkJaWYgKCFwdWJhbGx0YWJsZXMpCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9ybWdybGlzdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKaW5k ZXggOWE3NDcyMS4uOWRlM2I4ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3Js aXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKQEAgLTQ3LDMgKzQ3LDQg QEAgUEdfUk1HUihSTV9DT01NSVRfVFNfSUQsICJDb21taXRUcyIsIGNvbW1pdF90c19yZWRvLCBj b21taXRfdHNfZGVzYywgY29tbWl0X3RzX2kKIFBHX1JNR1IoUk1fUkVQTE9SSUdJTl9JRCwgIlJl cGxpY2F0aW9uT3JpZ2luIiwgcmVwbG9yaWdpbl9yZWRvLCByZXBsb3JpZ2luX2Rlc2MsIHJlcGxv cmlnaW5faWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCiBQR19STUdSKFJNX0dFTkVS SUNfSUQsICJHZW5lcmljIiwgZ2VuZXJpY19yZWRvLCBnZW5lcmljX2Rlc2MsIGdlbmVyaWNfaWRl bnRpZnksIE5VTEwsIE5VTEwsIGdlbmVyaWNfbWFzaywgTlVMTCkKIFBHX1JNR1IoUk1fTE9HSUNB TE1TR19JRCwgIkxvZ2ljYWxNZXNzYWdlIiwgbG9naWNhbG1zZ19yZWRvLCBsb2dpY2FsbXNnX2Rl c2MsIGxvZ2ljYWxtc2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxtc2dfZGVj b2RlKQorUEdfUk1HUihSTV9MT0dJQ0FMRERMTVNHX0lELCAiTG9naWNhbERETE1lc3NhZ2UiLCBs b2dpY2FsZGRsbXNnX3JlZG8sIGxvZ2ljYWxkZGxtc2dfZGVzYywgbG9naWNhbGRkbG1zZ19pZGVu dGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbGRkbG1zZ19kZWNvZGUpCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdAppbmRleCA4YWE2MzZjLi5iYjk4YzE3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKQEAgLTExODkwLDQgKzExODkwLDEzIEBACiB7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdq c29uIHRvIHN0cmluZycsCiAgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5k JywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCiAgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3Jj ID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcgfSwKK3sgb2lkID0+ICc0NjQ0JywgZGVz Y3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UnLAorICBwcm9uYW1lID0+ICdw dWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50 X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9k ZXBhcnNlX2RkbF9jb21tYW5kX2VuZCcgfSwKK3sgb2lkID0+ICc0NjQ1JywgZGVzY3IgPT4gJ3Ry aWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2Ugc3RhcnQnLAorICBwcm9uYW1lID0+ICdwdWJs aWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0JywgcHJvcmV0dHlwZSA9PiAnZXZlbnRf dHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2Rl cGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQnIH0sCit7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0 cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAorICBwcm9uYW1l ID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdl dmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRp b25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5oCmluZGV4IDQ4MjA1YmEuLjYwNmMwMDkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmgKQEAgLTU0LDYgKzU0LDkgQEAgQ0FUQUxPRyhwZ19wdWJsaWNhdGlvbiw2MTA0LFB1 YmxpY2F0aW9uUmVsYXRpb25JZCkKIAogCS8qIHRydWUgaWYgcGFydGl0aW9uIGNoYW5nZXMgYXJl IHB1Ymxpc2hlZCB1c2luZyByb290IHNjaGVtYSAqLwogCWJvb2wJCXB1YnZpYXJvb3Q7CisKKwkv KiB0cnVlIGlmIHRhYmxlIGNyZWF0aW9ucyBhcmUgcHVibGlzaGVkICovCisJYm9vbAkJcHViZGRs OwogfSBGb3JtRGF0YV9wZ19wdWJsaWNhdGlvbjsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAt NzIsNiArNzUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkFjdGlvbnMKIAlib29sCQlw dWJ1cGRhdGU7CiAJYm9vbAkJcHViZGVsZXRlOwogCWJvb2wJCXB1YnRydW5jYXRlOworCWJvb2wJ CXB1YmRkbDsKIH0gUHVibGljYXRpb25BY3Rpb25zOwogCiB0eXBlZGVmIHN0cnVjdCBQdWJsaWNh dGlvbkRlc2MKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu aCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAppbmRleCAxMDA5MWMzLi5m ZDJlZTdmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgK KysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCkBAIC03MSw3ICs3MSw4 IEBAIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RTaW1wbGVDb21tYW5kKE9iamVjdEFk ZHJlc3MgYWRkcmVzcywKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChO b2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlk KE9pZCBvYmplY3RJZCk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJs ZVN1YmNtZChOb2RlICpzdWJjbWQsCi0JCQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3Mp OworCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAorCQkJCQkJCQkJCQkJYm9vbCBy ZXdyaXRlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVFbmQodm9pZCk7CiAK IGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RHcmFudChJbnRlcm5hbEdyYW50ICppc3Rt dCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmggYi9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYThkY2E4NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL2RkbG1lc3NhZ2UuaApAQCAtMCwwICsxLDYwIEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqIGRkbG1lc3NhZ2UuaAorICoJICAgRXhwb3J0cyBmcm9tIHJlcGxpY2F0aW9uL2xvZ2lj YWwvZGRsbWVzc2FnZS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2Rk bG1lc3NhZ2UuaAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdfTE9HSUNBTF9E RExfTUVTU0FHRV9ICisjZGVmaW5lIFBHX0xPR0lDQUxfRERMX01FU1NBR0VfSAorCisjaW5jbHVk ZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRl ICJhY2Nlc3MveGxvZ3JlYWRlci5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisKKworLyoK KyAqIFN1cHBvcnQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZGVwYXJzZWQgY29tbWFuZHMuCisgKi8K K3R5cGVkZWYgZW51bSBEZXBhcnNlZENvbW1hbmRUeXBlCit7CisJRENUX1NpbXBsZUNtZCwKKwlE Q1RfVGFibGVEcm9wU3RhcnQsCisJRENUX1RhYmxlRHJvcEVuZCwKKwlEQ1RfVGFibGVBbHRlciwK KwlEQ1RfT2JqZWN0Q3JlYXRlLAorCURDVF9PYmplY3REcm9wCit9IERlcGFyc2VkQ29tbWFuZFR5 cGU7CisKKy8qCisgKiBHZW5lcmljIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2Ugd2FsIHJl Y29yZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeGxfbG9naWNhbF9kZGxfbWVzc2FnZQoreworCU9p ZAkJCQkJCWRiSWQ7CQkJLyogZGF0YWJhc2UgT2lkIGVtaXR0ZWQgZnJvbSAqLworCVNpemUJCQkJ CXByZWZpeF9zaXplOwkvKiBsZW5ndGggb2YgcHJlZml4ICovCisJT2lkCQkJCQkJcmVsaWQ7CQkJ LyogaWQgb2YgdGhlIHRhYmxlICovCisJRGVwYXJzZWRDb21tYW5kVHlwZQkJY21kdHlwZTsJCS8q IHR5cGUgb2Ygc3FsIGNvbW1hbmQgKi8KKwlTaXplCQkJCQltZXNzYWdlX3NpemU7CSAgLyogc2l6 ZSBvZiB0aGUgbWVzc2FnZSAqLworCisJLyoKKwkgKiBwYXlsb2FkLCBpbmNsdWRpbmcgbnVsbC10 ZXJtaW5hdGVkIHByZWZpeCBvZiBsZW5ndGggcHJlZml4X3NpemUKKwkgKi8KKwljaGFyCQltZXNz YWdlW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2U7CisK KyNkZWZpbmUgU2l6ZU9mTG9naWNhbERETE1lc3NhZ2UJKG9mZnNldG9mKHhsX2xvZ2ljYWxfZGRs X21lc3NhZ2UsIG1lc3NhZ2UpKQorCitleHRlcm4gWExvZ1JlY1B0ciBMb2dMb2dpY2FsRERMTWVz c2FnZShjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBj bWR0eXBlLAorCQkJCQkJCQkJICAgY29uc3QgY2hhciAqZGRsX21lc3NhZ2UsIHNpemVfdCBzaXpl KTsKKworLyogUk1HUiBBUEkqLworI2RlZmluZSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UJMHgw MAordm9pZAkJbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK3Zv aWQJCWxvZ2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpy ZWNvcmQpOworY29uc3QgY2hhciAqbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKTsK KworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaCBi L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCmluZGV4IDc0MWJmNjUuLjQyN2E3Yjkg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCisrKyBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCkBAIC0yNyw2ICsyNyw3IEBAIGV4dGVybiB2b2lk IGhlYXAyX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZm ZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCB4YWN0X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBzdGFuZGJ5X2RlY29k ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBl eHRlcm4gdm9pZCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs IFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CitleHRlcm4gdm9pZCBsb2dpY2FsZGRsbXNnX2RlY29k ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiAK IGV4dGVybiB2b2lkIExvZ2ljYWxEZWNvZGluZ1Byb2Nlc3NSZWNvcmQoTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4LAogCQkJCQkJCQkJCSBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCBiL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCmluZGV4IGE3NzFhYjguLjJhYmNjYjggMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCisrKyBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCkBAIC02MSw2ICs2MSw3IEBAIHR5 cGVkZWYgZW51bSBMb2dpY2FsUmVwTXNnVHlwZQogCUxPR0lDQUxfUkVQX01TR19SRUxBVElPTiA9 ICdSJywKIAlMT0dJQ0FMX1JFUF9NU0dfVFlQRSA9ICdZJywKIAlMT0dJQ0FMX1JFUF9NU0dfTUVT U0FHRSA9ICdNJywKKwlMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FHRSA9ICdMJywKIAlMT0dJQ0FM X1JFUF9NU0dfQkVHSU5fUFJFUEFSRSA9ICdiJywKIAlMT0dJQ0FMX1JFUF9NU0dfUFJFUEFSRSA9 ICdQJywKIAlMT0dJQ0FMX1JFUF9NU0dfQ09NTUlUX1BSRVBBUkVEID0gJ0snLApAQCAtMjI5LDcg KzIzMCwxMSBAQCBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3RydW5jYXRlKFN0cmluZ0lu Zm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIGV4dGVybiBMaXN0ICpsb2dpY2FscmVwX3JlYWRf dHJ1bmNhdGUoU3RyaW5nSW5mbyBpbiwKIAkJCQkJCQkJCSAgYm9vbCAqY2FzY2FkZSwgYm9vbCAq cmVzdGFydF9zZXFzKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfbWVzc2FnZShTdHJp bmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAotCQkJCQkJCQkJ IGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBj aGFyICptZXNzYWdlKTsKKwkJCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIg KnByZWZpeCwKKwkJCQkJCQkJCSBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVy biB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfZGRsbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNh Y3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZp eCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gY2hhciAqbG9naWNhbHJl cF9yZWFkX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBpbiwgWExvZ1JlY1B0ciAqbHNuLCBjb25zdCBj aGFyICoqcHJlZml4LCBTaXplICpzeik7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3Jl bChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCSBSZWxhdGlvbiBy ZWwsIEJpdG1hcHNldCAqY29sdW1ucyk7CiBleHRlcm4gTG9naWNhbFJlcFJlbGF0aW9uICpsb2dp Y2FscmVwX3JlYWRfcmVsKFN0cmluZ0luZm8gaW4pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0 cHV0X3BsdWdpbi5oCmluZGV4IDUzOWRjOGUuLjkzM2QyOTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9vdXRwdXRfcGx1Z2luLmgKQEAgLTg5LDYgKzg5LDE4IEBAIHR5cGVkZWYgdm9pZCAoKkxv Z2ljYWxEZWNvZGVNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCiAvKgorICogQ2FsbGVkIGZvciB0 aGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZXMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkxv Z2ljYWxEZWNvZGVERExNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LAorCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgICBY TG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwK KwkJCQkJCQkJCQkgICBPaWQgcmVsaWQsCisJCQkJCQkJCQkJICAgRGVwYXJzZWRDb21tYW5kVHlw ZSBjbWR0eXBlLAorCQkJCQkJCQkJCSAgIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCQkJCSAg IGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCisvKgogICogRmlsdGVyIGNoYW5nZXMgYnkgb3JpZ2lu LgogICovCiB0eXBlZGVmIGJvb2wgKCpMb2dpY2FsRGVjb2RlRmlsdGVyQnlPcmlnaW5DQikgKHN0 cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCkBAIC0yMDAsNiArMjEyLDE5IEBAIHR5 cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4CiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSk7 CiAKIC8qCisgKiBDYWxsYmFjayBmb3Igc3RyZWFtaW5nIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1l c3NhZ2VzIGZyb20gaW4tcHJvZ3Jlc3MKKyAqIHRyYW5zYWN0aW9ucy4KKyAqLwordHlwZWRlZiB2 b2lkICgqTG9naWNhbERlY29kZVN0cmVhbURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAor CQkJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29uc3Qg Y2hhciAqcHJlZml4LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBEZXBh cnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUs CisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKKy8qCiAgKiBDYWxsYmFjayBm b3Igc3RyZWFtaW5nIHRydW5jYXRlcyBmcm9tIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4KICAq LwogdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZVN0cmVhbVRydW5jYXRlQ0IpIChzdHJ1Y3Qg TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApAQCAtMjE5LDYgKzI0NCw3IEBAIHR5cGVkZWYg c3RydWN0IE91dHB1dFBsdWdpbkNhbGxiYWNrcwogCUxvZ2ljYWxEZWNvZGVUcnVuY2F0ZUNCIHRy dW5jYXRlX2NiOwogCUxvZ2ljYWxEZWNvZGVDb21taXRDQiBjb21taXRfY2I7CiAJTG9naWNhbERl Y29kZU1lc3NhZ2VDQiBtZXNzYWdlX2NiOworCUxvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IgZGRs bWVzc2FnZV9jYjsKIAlMb2dpY2FsRGVjb2RlRmlsdGVyQnlPcmlnaW5DQiBmaWx0ZXJfYnlfb3Jp Z2luX2NiOwogCUxvZ2ljYWxEZWNvZGVTaHV0ZG93bkNCIHNodXRkb3duX2NiOwogCkBAIC0yMzcs NiArMjYzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9naWNh bERlY29kZVN0cmVhbUNvbW1pdENCIHN0cmVhbV9jb21taXRfY2I7CiAJTG9naWNhbERlY29kZVN0 cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2VfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbU1lc3Nh Z2VDQiBzdHJlYW1fbWVzc2FnZV9jYjsKKwlMb2dpY2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNC IHN0cmVhbV9kZGxtZXNzYWdlX2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1UcnVuY2F0ZUNCIHN0 cmVhbV90cnVuY2F0ZV9jYjsKIH0gT3V0cHV0UGx1Z2luQ2FsbGJhY2tzOwogCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oIGIvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vcGdvdXRwdXQuaAppbmRleCBlYWZlZGQ2Li44ZWJjYzEyIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3Bnb3V0cHV0LmgKQEAgLTI1LDYgKzI1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUEdPdXRwdXRE YXRhCiAJdWludDMyCQlwcm90b2NvbF92ZXJzaW9uOwogCUxpc3QJICAgKnB1YmxpY2F0aW9uX25h bWVzOwogCUxpc3QJICAgKnB1YmxpY2F0aW9uczsKKwlMaXN0CSAgICpkZWxldGVkX3JlbGlkczsK IAlib29sCQliaW5hcnk7CiAJYm9vbAkJc3RyZWFtaW5nOwogCWJvb2wJCW1lc3NhZ2VzOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCmluZGV4IDRhMDFmODcuLmRlNTgwMzUg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAorKysg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKQEAgLTExLDYgKzExLDgg QEAKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJsaWIvaWxp c3QuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2Rk bG1lc3NhZ2UuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbC5oIgogI2luY2x1ZGUgInV0aWxz L2hzZWFyY2guaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgpAQCAtNTYsNiArNTgsNyBA QCB0eXBlZGVmIGVudW0gUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUKIAlSRU9SREVSX0JVRkZFUl9D SEFOR0VfSU5TRVJULAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9VUERBVEUsCiAJUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX0RFTEVURSwKKwlSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRSwK IAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfTUVTU0FHRSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0Vf SU5WQUxJREFUSU9OLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9TTkFQU0hPVCwK QEAgLTEzMCw2ICsxMzMsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlckNoYW5nZQog CQkJY2hhcgkgICAqbWVzc2FnZTsKIAkJfQkJCW1zZzsKIAorCQkvKiBEREwgTWVzc2FnZS4gKi8K KwkJc3RydWN0CisJCXsKKwkJCWNoYXIJICAgKnByZWZpeDsKKwkJCVNpemUJCW1lc3NhZ2Vfc2l6 ZTsKKwkJCWNoYXIJICAgKm1lc3NhZ2U7CisJCQlPaWQJCQlyZWxpZDsKKwkJCURlcGFyc2VkQ29t bWFuZFR5cGUJY21kdHlwZTsKKwkJfQkJCWRkbG1zZzsKKwogCQkvKiBOZXcgc25hcHNob3QsIHNl dCB3aGVuIGFjdGlvbiA9PSAqX0lOVEVSTkFMX1NOQVBTSE9UICovCiAJCVNuYXBzaG90CXNuYXBz aG90OwogCkBAIC00MzAsNiArNDQzLDE2IEBAIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJN ZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQljb25zdCBjaGFyICpwcmVm aXgsIFNpemUgc3osCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qIERETCBt ZXNzYWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZl ckRETE1lc3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCSAgIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJ CQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgICBPaWQgcmVsaWQsCisJ CQkJCQkJCQkJICAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCSAgIFNp emUgc3osCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8qIGJlZ2luIHBy ZXBhcmUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVy QmVnaW5QcmVwYXJlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQkJIFJlb3JkZXJC dWZmZXJUWE4gKnR4bik7CkBAIC00OTYsNiArNTE5LDE3IEBAIHR5cGVkZWYgdm9pZCAoKlJlb3Jk ZXJCdWZmZXJTdHJlYW1NZXNzYWdlQ0IpICgKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVm aXgsIFNpemUgc3osCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qIHN0 cmVhbSBEREwgbWVzc2FnZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5cGVkZWYgdm9pZCAoKlJl b3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0IpICgKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVm ZmVyICpyYiwKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJ CQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVm aXgsCisJCQkJCQkJCQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFu ZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkJCSBTaXplIHN6LAorCQkJCQkJCQkJCQkJIGNvbnN0 IGNoYXIgKm1lc3NhZ2UpOworCiAvKiBzdHJlYW0gdHJ1bmNhdGUgY2FsbGJhY2sgc2lnbmF0dXJl ICovCiB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVDQikgKAogCQkJ CQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyICpyYiwKQEAgLTU0MSw2ICs1NzUsNyBAQCBzdHJ1Y3Qg UmVvcmRlckJ1ZmZlcgogCVJlb3JkZXJCdWZmZXJBcHBseVRydW5jYXRlQ0IgYXBwbHlfdHJ1bmNh dGU7CiAJUmVvcmRlckJ1ZmZlckNvbW1pdENCIGNvbW1pdDsKIAlSZW9yZGVyQnVmZmVyTWVzc2Fn ZUNCIG1lc3NhZ2U7CisJUmVvcmRlckJ1ZmZlckRETE1lc3NhZ2VDQiBkZGxtZXNzYWdlOwogCiAJ LyoKIAkgKiBDYWxsYmFja3MgdG8gYmUgY2FsbGVkIHdoZW4gc3RyZWFtaW5nIGEgdHJhbnNhY3Rp b24gYXQgcHJlcGFyZSB0aW1lLgpAQCAtNTYwLDYgKzU5NSw3IEBAIHN0cnVjdCBSZW9yZGVyQnVm ZmVyCiAJUmVvcmRlckJ1ZmZlclN0cmVhbUNvbW1pdENCIHN0cmVhbV9jb21taXQ7CiAJUmVvcmRl ckJ1ZmZlclN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2U7CiAJUmVvcmRlckJ1ZmZlclN0cmVh bU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZTsKKwlSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2Fn ZUNCIHN0cmVhbV9kZGxtZXNzYWdlOwogCVJlb3JkZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNCIHN0 cmVhbV90cnVuY2F0ZTsKIAogCS8qCkBAIC02MzUsNiArNjcxLDkgQEAgZXh0ZXJuIHZvaWQgUmVv cmRlckJ1ZmZlclF1ZXVlQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwKIGV4 dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqLCBUcmFu c2FjdGlvbklkLCBTbmFwc2hvdCBzbmFwc2hvdCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJCQkg IGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCQkJICBTaXpl IG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBSZW9yZGVy QnVmZmVyUXVldWVERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwgWExv Z1JlY1B0ciBsc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdl X3NpemUsCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIE9pZCByZWxpZCwgRGVwYXJz ZWRDb21tYW5kVHlwZSBjbWR0eXBlKTsKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJDb21taXQo UmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLAogCQkJCQkJCQlYTG9nUmVjUHRyIGNvbW1p dF9sc24sIFhMb2dSZWNQdHIgZW5kX2xzbiwKIAkJCQkJCQkJVGltZXN0YW1wVHogY29tbWl0X3Rp bWUsIFJlcE9yaWdpbklkIG9yaWdpbl9pZCwgWExvZ1JlY1B0ciBvcmlnaW5fbHNuKTsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4IDYwYWNiZDEuLmQ1MzRjYmYgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wc3FsLm91dApAQCAtNTk2OSw5ICs1OTY5LDkgQEAgTGlzdCBvZiBzY2hlbWFz CiAoMCByb3dzKQogCiBcZFJwICJuby5zdWNoLnB1YmxpY2F0aW9uIgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSBOYW1lIHwgT3duZXIgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCiAoMCByb3dzKQogCiBcZFJzICJuby5z dWNoLnN1YnNjcmlwdGlvbiIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5v dXQKaW5kZXggMjc0YjM3ZC4uMDliMTRlMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w dWJsaWNhdGlvbi5vdXQKQEAgLTMwLDIwICszMCwyMCBAQCBFUlJPUjogIGNvbmZsaWN0aW5nIG9y IHJlZHVuZGFudCBvcHRpb25zCiBMSU5FIDE6IC4uLnViX3h4eCBXSVRIIChwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCA9ICd0cnVlJywgcHVibGlzaF92aS4uLgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIFxkUnAKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0 aW9ucwotICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYK LSB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1Ymxp Y2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAg IHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDIgcm93cykKIAogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1Yl9kZWZhdWx0IFNFVCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVs ZXRlJyk7CiBcZFJwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHBpYl9pbnNf dHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgorIHRlc3RwdWJf ZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgyIHJv d3MpCiAKIC0tLSBhZGRpbmcgdGFibGVzCkBAIC04NywxMCArODcsMTAgQEAgUkVTRVQgY2xpZW50 X21pbl9tZXNzYWdlczsKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGFkZCBzY2hlbWEgdG8gJ0ZPUiBU QUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQURE IEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRh YmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxl CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CkBAIC05OSwyMCArOTksMjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoK IC0tIHNob3VsZCBiZSBhYmxlIHRvIGRyb3Agc2NoZW1hIGZyb20gJ0ZPUiBUQUJMRScgcHVibGlj YXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRFJPUCBBTEwgVEFCTEVT IElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCiAKIC0tIHNob3VsZCBiZSBh YmxlIHRvIHNldCBzY2hlbWEgdG8gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgU0VUIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0 OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0IgogCkBAIC0xMzQsMTAgKzEzNCwxMCBAQCBFUlJPUjogIHJl bGF0aW9uICJ0ZXN0cHViX25vcGsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbgogLS0g c2hvdWxkIGJlIGFibGUgdG8gc2V0IHRhYmxlIHRvIHNjaGVtYSBwdWJsaWNhdGlvbgogQUxURVIg UFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgU0VUIFRBQkxFIHB1Yl90ZXN0LnRlc3RwdWJf bm9wazsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogCkBAIC0xNTksMTAgKzE1OSwxMCBAQCBQdWJs aWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9yYWxsdGFibGVzIgogCiBcZFJwKyB0ZXN0cHViX2Zv cmFsbHRhYmxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2ZvcmFsbHRhYmxlcworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIERST1AgVEFCTEUgdGVz dHB1Yl90YmwyOwpAQCAtMTc0LDE5ICsxNzQsMTkgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3Rw dWIzIEZPUiBUQUJMRSB0ZXN0cHViX3RibDM7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjQg Rk9SIFRBQkxFIE9OTFkgdGVzdHB1Yl90YmwzOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsK IFxkUnArIHRlc3RwdWIzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJs MyIKICAgICAicHVibGljLnRlc3RwdWJfdGJsM2EiCiAKIFxkUnArIHRlc3RwdWI0Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0CisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMyIKIApAQCAtMjA3LDEwICsyMDcsMTAg QEAgVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiAtLSBvbmx5IHBhcmVudCBpcyBs aXN0ZWQgYXMgYmVpbmcgaW4gcHVibGljYXRpb24sIG5vdCB0aGUgcGFydGl0aW9uCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBBREQgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBc ZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1 YmxpYy50ZXN0cHViX3BhcnRlZCIKIApAQCAtMjIzLDEwICsyMjMsMTAgQEAgQUxURVIgVEFCTEUg dGVzdHB1Yl9wYXJ0ZWQgREVUQUNIIFBBUlRJVElPTiB0ZXN0cHViX3BhcnRlZDE7CiBVUERBVEUg dGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0gMTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y cGFydGVkIFNFVCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKIFxkUnArIHRl c3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCB0ICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRl c3RwdWJfcGFydGVkIgogCkBAIC0yNTUsMTAgKzI1NSwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNz YWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjUgRk9SIFRBQkxFIHRl c3RwdWJfcmZfdGJsMSwgdGVzdHB1Yl9yZl90YmwyIFdIRVJFIChjIDw+ICd0ZXN0JyBBTkQgZCA8 IDUpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2Vz OwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9y Zl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwyIiBXSEVSRSAoKGMgPD4gJ3Rlc3Qn Ojp0ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTI3MSwxMCArMjcxLDEwIEBAIFRhYmxlczoKIAogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjUgQUREIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAo ZSA+IDEwMDAgQU5EIGUgPCAyMDAwKTsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJs MiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0yOTAsMTAgKzI5 MCwxMCBAQCBQdWJsaWNhdGlvbnM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IERST1Ag VEFCTEUgdGVzdHB1Yl9yZl90YmwyOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgog ICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90Ymwz IiBXSEVSRSAoKGUgPiAxMDAwKSBBTkQgKGUgPCAyMDAwKSkKQEAgLTMwMSwxMCArMzAxLDEwIEBA IFRhYmxlczoKIC0tIHJlbW92ZSB0ZXN0cHViX3JmX3RibDEgYW5kIGFkZCB0ZXN0cHViX3JmX3Ri bDMgYWdhaW4gKGFub3RoZXIgV0hFUkUgZXhwcmVzc2lvbikKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPiAzMDAgQU5EIGUgPCA1 MDApOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1 Yl9yZl90YmwzIiBXSEVSRSAoKGUgPiAzMDApIEFORCAoZSA8IDUwMCkpCiAKQEAgLTMzNywxMCAr MzM3LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViX3N5bnRheDEgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwgT05MWSB0 ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7 CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50YXgxCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MQot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1 YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFIChlIDwgOTk5KQpAQCAtMzUwLDEwICszNTAsMTAg QEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWJfc3ludGF4MiBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3Nj aGVtYTEudGVzdHB1Yl9yZl90Ymw1IFdIRVJFIChoIDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2lu c2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4 MgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5 bnRheDIKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRh eDIKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgog ICAgICJ0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1IiBXSEVSRSAoaCA8IDk5OSkK QEAgLTY3NiwxMCArNjc2LDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3RhYmxlX2lu cyBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdHJ1bmNhdGUnKTsKIFJFU0VUIGNsaWVudF9taW5f bWVzc2FnZXM7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX3RhYmxlX2lucyBBREQgVEFCTEUg dGVzdHB1Yl90Ymw1IChhKTsJCS0tIG9rCiBcZFJwKyB0ZXN0cHViX3RhYmxlX2lucwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfdGFibGVfaW5zCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3RhYmxlX2lucworICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDUiIChhKQogCkBAIC04 MjEsMTAgKzgyMSwxMCBAQCBDUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChh IGludCwgYiBpbnQsIGMgaW50LCBQUklNQVJZIEtFWSAoYSxjKSk7CiBBTFRFUiBUQUJMRSB0ZXN0 cHViX3RibF9ib3RoX2ZpbHRlcnMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHVi X3RibF9ib3RoX2ZpbHRlcnNfcGtleTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90aF9m aWx0ZXJzIEFERCBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEsYykgV0hFUkUgKGMg IT0gMSk7CiBcZFJwKyB0ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycworICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMiIChhLCBjKSBXSEVS RSAoYyA8PiAxKQogCkBAIC0xMDI5LDEwICsxMDI5LDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRl c3RwdWJfdGJsMSIgaXMgYWxyZWFkeSBtZW1iZXIgb2YgcHVibGljYXRpb24gInRlc3RwdWJfZm9y dGJsCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YmwgRk9SIFRBQkxFIHRlc3RwdWJf dGJsMTsKIEVSUk9SOiAgcHVibGljYXRpb24gInRlc3RwdWJfZm9ydGJsIiBhbHJlYWR5IGV4aXN0 cwogXGRScCsgdGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGJsCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9mb3J0YmwKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJf dGVzdC50ZXN0cHViX25vcGsiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCkBAIC0xMDcwLDEw ICsxMDcwLDEwIEBAIFB1YmxpY2F0aW9uczoKICAgICAidGVzdHB1Yl9mb3J0YmwiCiAKIFxkUnAr IHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50 ZXN0cHViX25vcGsiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCkBAIC0xMTUxLDEwICsxMTUx LDEwIEBAIFJFVk9LRSBDUkVBVEUgT04gREFUQUJBU0UgcmVncmVzc2lvbiBGUk9NIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlcjI7CiBEUk9QIFRBQkxFIHRlc3RwdWJfcGFydGVkOwogRFJPUCBUQUJM RSB0ZXN0cHViX3RibDE7CiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgx IHJvdykKIAogLS0gZmFpbCAtIG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRpb24KQEAgLTExNjQs MjAgKzExNjQsMjAgQEAgRVJST1I6ICBtdXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0aW9uIHRlc3Rw dWJfZGVmYXVsdAogUkVTRVQgUk9MRTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVs dCBSRU5BTUUgVE8gdGVzdHB1Yl9mb287CiBcZFJwIHRlc3RwdWJfZm9vCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICBO YW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2ZvbyB8IHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICBOYW1lICAgICB8ICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwdWJfZm9vIHwgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSByZW5hbWUg YmFjayB0byBrZWVwIHRoZSByZXN0IHNpbXBsZQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9m b28gUkVOQU1FIFRPIHRlc3RwdWJfZGVmYXVsdDsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJf ZGVmYXVsdCBPV05FUiBUTyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogXGRScCB0ZXN0cHVi X2RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExp c3Qgb2YgcHVibGljYXRpb25zCi0gICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwdWJfZGVmYXVsdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlcjIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHB1Yl9kZWZhdWx0IHwgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyMiB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWRkaW5n IHNjaGVtYXMgYW5kIHRhYmxlcwpAQCAtMTE5MywxOSArMTE5MywxOSBAQCBDUkVBVEUgVEFCTEUg IkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEiKGlkIGludCk7CiBTRVQgY2xpZW50X21p bl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2No ZW1hIEZPUiBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9m b3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1 Yl90ZXN0MSIKIAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIyX2ZvcnNjaGVtYSBGT1IgQUxM IFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDIsIHB1Yl90ZXN0MzsKIFxkUnAr IHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1h czoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMjE5LDQ0ICsxMjE5LDQ0 IEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNl9mb3JzY2hlbWEgRk9SIEFMTCBUQUJMRVMg SU4gU0NIRU1BICJDVVJSRU5UX1NDSEVNQSIsCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9m b3J0YWJsZSBGT1IgVEFCTEUgIkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEiOwogUkVT RVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYg ICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHVibGljIgogCiBcZFJwKyB0 ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjRfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogCiBcZFJwKyB0ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgog ICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1Ymxp YyIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAiQ1VSUkVOVF9TQ0hFTUEuQ1VSUkVOVF9TQ0hFTUEiCiAKQEAgLTEyOTAsMTAgKzEyOTAsMTAg QEAgRVJST1I6ICBzY2hlbWEgInRlc3RwdWJfdmlldyIgZG9lcyBub3QgZXhpc3QKIC0tIGRyb3Bw aW5nIHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlvbgog RFJPUCBTQ0hFTUEgcHViX3Rlc3QzOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1 Yl90ZXN0MiIKQEAgLTEzMDEsMjAgKzEzMDEsMjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0t IHJlbmFtaW5nIHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNh dGlvbgogQUxURVIgU0NIRU1BIHB1Yl90ZXN0MSBSRU5BTUUgdG8gcHViX3Rlc3QxX3JlbmFtZWQ7 CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MV9yZW5hbWVkIgogICAgICJwdWJfdGVzdDIiCiAKIEFM VEVSIFNDSEVNQSBwdWJfdGVzdDFfcmVuYW1lZCBSRU5BTUUgdG8gcHViX3Rlc3QxOwogXGRScCsg dGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFz OgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzMjIsMTAgKzEzMjIsMTAg QEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIGFsdGVyIHB1YmxpY2F0aW9uIGFkZCBzY2hlbWEK IEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxMIFRBQkxFUyBJTiBT Q0hFTUEgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0 MiIKQEAgLTEzMzQsMTAgKzEzMzQsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgbm9u X2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBk b2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIK QEAgLTEzNDYsMTAgKzEzNDYsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rl c3QxOwogRVJST1I6ICBzY2hlbWEgInB1Yl90ZXN0MSIgaXMgYWxyZWFkeSBtZW1iZXIgb2YgcHVi bGljYXRpb24gInRlc3RwdWIxX2ZvcnNjaGVtYSIKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNj aGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hl bWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgog ICAgICJwdWJfdGVzdDIiCkBAIC0xMzU3LDEwICsxMzU3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBkcm9wIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjFfZm9yc2NoZW1hIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QyOwog XGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBz Y2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTEzNjgsMTAgKzEzNjgsMTAgQEAgVGFibGVz IGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9Q IEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIEVSUk9SOiAgdGFibGVzIGZyb20gc2No ZW1hICJwdWJfdGVzdDIiIGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIFxkUnArIHRl c3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QxIgogCkBAIC0xMzc5LDI5ICsxMzc5LDI5IEBAIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBBTEwgVEFC TEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwogRVJST1I6ICBzY2hlbWEgIm5vbl9l eGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3Jz Y2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2No ZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIK IAogLS0gZHJvcCBhbGwgc2NoZW1hcwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2No ZW1hIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFf Zm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGFsdGVyIHB1YmxpY2F0 aW9uIHNldCBtdWx0aXBsZSBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNj aGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDI7CiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQxMCwxMCArMTQxMCwx MCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9y c2NoZW1hIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwogRVJS T1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0 ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQyMiwxMCArMTQyMiwxMCBA QCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVtb3ZpbmcgdGhlIGR1cGxpY2F0ZSBzY2hlbWFz CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIEFMTCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2No ZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAK QEAgLTE1MDQsMTggKzE1MDQsMTggQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1In OwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYTsKIFJFU0VUIGNsaWVudF9t aW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK ICgxIHJvdykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hIFNFVCBBTEwg VEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApA QCAtMTUyNSwyMCArMTUyNSwyMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hl bWFfZm9ydGFibGUgRk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MQogQ1JFQVRFIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hIEZPUiBUQUJMRSBwdWJfdGVzdDIu dGJsMSwgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogUkVTRVQgY2xpZW50X21pbl9t ZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QyLnRibDEiCiBUYWJsZXMgZnJvbSBz Y2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIFxkUnArIHRlc3RwdWJfZm9ydGFibGVfZm9yc2No ZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRh YmxlX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y dGFibGVfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QyLnRi bDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgotLSAKMi43LjIud2luZG93cy4xCgo= --_005_OS0PR01MB5716B1526C2EDA66907E733B94B39OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v9-0001-Functions-to-deparse-DDL-commands.patch" Content-Description: v9-0001-Functions-to-deparse-DDL-commands.patch Content-Disposition: attachment; filename="v9-0001-Functions-to-deparse-DDL-commands.patch"; size=105428; creation-date="Tue, 21 Jun 2022 12:16:00 GMT"; modification-date="Tue, 21 Jun 2022 12:19:12 GMT" Content-Transfer-Encoding: base64 RnJvbSBmMGQ4ZGMyNmQ1NjhjNWI3M2Y3ZWQ5ZDFkOGQ5ZDRlYjAxNTVkMzhiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IEZyaSwgMjcgTWF5IDIwMjIgMTM6NDc6MDUgKzA4MDAKU3ViamVjdDogW1BBVENI XSBGdW5jdGlvbnMgdG8gZGVwYXJzZSBEREwgY29tbWFuZHMuCgpUaGlzIHBhdGNoIHByb3ZpZGVz IEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hpY2ggY2FuCmxhdGVyIGJl IHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1kZWZpbmVkIHNwcmludGYt bGlrZQpleHBhbnNpb24uIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8gYWxsb3cg Zm9yIG1hY2hpbmUtZWRpdGluZyBvZgp0aGUgY29tbWFuZHMsIGJ5IHJlcGxhY2luZyBjZXJ0YWlu IG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KCk11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGluIHRo ZSBvdXRwdXQgYmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5c3RlbQpjYXRhbG9ncywgbm90IGZy b20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMgaW1wb3NzaWJsZSB0byByZWxpYWJs eQpjb25zdHJ1Y3QgYSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5lLiBvbmUgbm90IGRlcGVu ZGVudCBvbiBzZWFyY2hfcGF0aApldGMpIGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ugbm9kZS4K ClRoaXMgcHJvdmlkZXMgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBEREwgc3RhdGVt ZW50cy4gQ3VycmVudGx5LAp0aGlzIHByb3ZpZGVzIHN1cHBvcnQgZm9yOgoKQ1JFQVRFL0FMVEVS L0RST1AgVEFCTEUgKCopCkNSRUFURS9BTFRFUi9EUk9QIFNFUVVFTkNFCkNSRUFURS9EUk9QIFND SEVNQQoKKCopIE5vdGUgdGhhdCBzb21lIHJlY2VudGx5IGludHJvZHVjZWQgRERMcyhlLmcuIERE THMgcmVsYXRlZCB0bwpQQVJUSVRJT05FRCBUQUJMRSkgYXJlIHVuc3VwcG9ydGVkLiBXZSBjYW4g ZXh0ZW5kIGl0IGFzIHdlIG5lZWQgbW9yZQpmdW5jdGlvbmFsaXR5IGZvciBEREwgcmVwbGljYXRp b24uCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgICAgICB8ICAgIDIgKwogc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyB8IDI2MzYgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jICAgIHwg IDc0OSArKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgIHwgICAz NCArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgIHwgICAgOSArCiBzcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgIHwgICAgNyArLQogc3JjL2luY2x1ZGUvY29tbWFu ZHMvc2VxdWVuY2UuaCAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5o ICAgICB8ICAgMTIgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCB8ICAgIDEg Kwogc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmggICAgICB8ICAgIDEgKwogMTAgZmlsZXMg Y2hhbmdlZCwgMzQ1MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IDQ4 ZjczNDguLjE3MWRmYjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxl CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCkBAIC0yOSw2ICsyOSw4IEBAIE9C SlMgPSBcCiAJY29weXRvLm8gXAogCWNyZWF0ZWFzLm8gXAogCWRiY29tbWFuZHMubyBcCisJZGRs X2RlcGFyc2UubyBcCisJZGRsX2pzb24ubyBcCiAJZGVmaW5lLm8gXAogCWRpc2NhcmQubyBcCiAJ ZHJvcGNtZHMubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi43YjE4MGJkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpAQCAtMCwwICsxLDI2MzYgQEAKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIGRkbF9kZXBhcnNlLmMKKyAqCSAgRnVuY3Rpb25zIHRvIGNvbnZlcnQg dXRpbGl0eSBjb21tYW5kcyB0byBtYWNoaW5lLXBhcnNlYWJsZQorICoJICByZXByZXNlbnRhdGlv bgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBOT1RFUworICoK KyAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBE REwgY29tbWFuZHMsIHdoaWNoIGNhbgorICogbGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxh aW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQgc3ByaW50Zi1saWtlCisgKiBleHBhbnNpb24uICBU aGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRvIGFsbG93IGZvciBtYWNoaW5lLWVkaXRp bmcgb2YKKyAqIHRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGlu IHRoZSBvYmplY3RzLgorICoKKyAqIE11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBvdXRw dXQgYmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5c3RlbQorICogY2F0YWxvZ3MsIG5vdCBmcm9t IHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkK KyAqIGNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBub3QgZGVw ZW5kZW50IG9uIHNlYXJjaF9wYXRoCisgKiBldGMpIGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ug bm9kZS4KKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy9k ZGxfZGVwYXJzZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorCisjaW5jbHVkZSAiYWNj ZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAiYWNjZXNz L3JlbGF0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2F0dHJpYnV0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29u c3RyYWludC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19pbmhlcml0cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlw ZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3Nl cXVlbmNlLmgiCisjaW5jbHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVkZSAib3B0aW1pemVyL29w dGltaXplci5oIgorI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKKyNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVk ZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRl ICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1ZGUgInV0 aWxzL3J1bGV1dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisKKworLyoKKyAq IEJlZm9yZSB0aGV5IGFyZSB0dXJuZWQgaW50byBKU09OQiByZXByZXNlbnRhdGlvbiwgZWFjaCBj b21tYW5kIGlzCisgKiByZXByZXNlbnRlZCBhcyBhbiBvYmplY3QgdHJlZSwgdXNpbmcgdGhlIHN0 cnVjdHMgYmVsb3cuCisgKi8KK3R5cGVkZWYgZW51bQoreworCU9ialR5cGVOdWxsLAorCU9ialR5 cGVCb29sLAorCU9ialR5cGVTdHJpbmcsCisJT2JqVHlwZUFycmF5LAorCU9ialR5cGVJbnRlZ2Vy LAorCU9ialR5cGVGbG9hdCwKKwlPYmpUeXBlT2JqZWN0Cit9IE9ialR5cGU7CisKK3R5cGVkZWYg c3RydWN0IE9ialRyZWUKK3sKKwlzbGlzdF9oZWFkCXBhcmFtczsKKwlpbnQJCQludW1QYXJhbXM7 Cit9IE9ialRyZWU7CisKK3R5cGVkZWYgc3RydWN0IE9iakVsZW0KK3sKKwljaGFyCSAgICpuYW1l OworCU9ialR5cGUJCW9ianR5cGU7CisKKwl1bmlvbgorCXsKKwkJYm9vbAkJYm9vbGVhbjsKKwkJ Y2hhcgkgICAqc3RyaW5nOworCQlpbnQ2NAkJaW50ZWdlcjsKKwkJZmxvYXQ4CQlmbHQ7CisJCU9i alRyZWUJICAgKm9iamVjdDsKKwkJTGlzdAkgICAqYXJyYXk7CisJfSB2YWx1ZTsKKwlzbGlzdF9u b2RlCW5vZGU7Cit9IE9iakVsZW07CisKK3N0YXRpYyBPYmpFbGVtICpuZXdfbnVsbF9vYmplY3Qo dm9pZCk7CitzdGF0aWMgT2JqRWxlbSAqbmV3X2Jvb2xfb2JqZWN0KGJvb2wgdmFsdWUpOworc3Rh dGljIE9iakVsZW0gKm5ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVlKTsKK3N0YXRpYyBPYmpF bGVtICpuZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgT2JqRWxlbSAq bmV3X2FycmF5X29iamVjdChMaXN0ICphcnJheSk7CitzdGF0aWMgT2JqRWxlbSAqbmV3X2ludGVn ZXJfb2JqZWN0KGludDY0IHZhbHVlKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfZmxvYXRfb2JqZWN0 KGZsb2F0OCB2YWx1ZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfbnVsbF9vYmplY3QoT2JqVHJlZSAq dHJlZSwgY2hhciAqbmFtZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfYm9vbF9vYmplY3QoT2JqVHJl ZSAqdHJlZSwgY2hhciAqbmFtZSwgYm9vbCB2YWx1ZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfc3Ry aW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSk7CitzdGF0 aWMgdm9pZCBhcHBlbmRfb2JqZWN0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBP YmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUg KnRyZWUsIGNoYXIgKm5hbWUsIExpc3QgKmFycmF5KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBl bmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxlbSk7CitzdGF0aWMg SnNvbmJWYWx1ZSAqb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJz ZVN0YXRlICpzdGF0ZSk7CitzdGF0aWMgdm9pZCBmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlw ZV9vaWQsIGludDMyIHR5cGVtb2QsCisJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwbmFtZSwg Y2hhciAqKnR5cGVtb2RzdHIsCisJCQkJCSBib29sICp0eXBhcnJheSk7CitzdGF0aWMgY2hhciAq cHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9k b3V0KTsKKworc3RhdGljIGNoYXIgKlJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiBy ZWwsIEF0dHJOdW1iZXIgYXR0bm8sCisJCQkJCQkJCQkgIExpc3QgKmRwY29udGV4dCwgTGlzdCAq KmV4cHJzKTsKKworLyoKKyAqIFNpbWlsYXIgdG8gZm9ybWF0X3R5cGVfaW50ZXJuYWwsIGV4Y2Vw dCB3ZSByZXR1cm4gZWFjaCBiaXQgb2YgaW5mb3JtYXRpb24KKyAqIHNlcGFyYXRlbHk6CisgKgor ICogLSBuc3BpZCBpcyB0aGUgc2NoZW1hIE9JRC4gIEZvciBjZXJ0YWluIFNRTC1zdGFuZGFyZCB0 eXBlcyB3aGljaCBoYXZlIHdlaXJkCisgKiAgIHR5cG1vZCBydWxlcywgd2UgcmV0dXJuIEludmFs aWRPaWQ7IGNhbGxlciBpcyBleHBlY3RlZCB0byBub3Qgc2NoZW1hLQorICogICBxdWFsaWZ5IHRo ZSBuYW1lIG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUgaW4gdGhpcyBjYXNlLgorICoK KyAqIC0gdHlwZW5hbWUgaXMgc2V0IHRvIHRoZSB0eXBlIG5hbWUsIHdpdGhvdXQgcXVvdGVzCisg KgorICogLSB0eXBtb2QgaXMgc2V0IHRvIHRoZSB0eXBlbW9kLCBpZiBhbnksIGFzIGEgc3RyaW5n IHdpdGggcGFyZW5zCisgKgorICogLSB0eXBhcnJheSBpbmRpY2F0ZXMgd2hldGhlciBbXXMgbXVz dCBiZSBhZGRlZAorICoKKyAqIFdlIGRvbid0IHRyeSB0byBkZWNvZGUgdHlwZSBuYW1lcyB0byB0 aGVpciBzdGFuZGFyZC1tYW5kYXRlZCBuYW1lcywgZXhjZXB0CisgKiBpbiB0aGUgY2FzZXMgb2Yg dHlwZXMgd2l0aCB1bnVzdWFsIHR5cG1vZCBydWxlcy4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1h dF90eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKKwkJCQkJIE9pZCAq bnNwaWQsIGNoYXIgKip0eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJIGJvb2wgKnR5 cGFycmF5KQoreworCUhlYXBUdXBsZQl0dXBsZTsKKwlGb3JtX3BnX3R5cGUgdHlwZWZvcm07CisJ T2lkCQkJYXJyYXlfYmFzZV90eXBlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9J RCwgT2JqZWN0SWRHZXREYXR1bSh0eXBlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0 dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlICV1Iiwg dHlwZV9vaWQpOworCisJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUp OworCisJLyoKKwkgKiBTcGVjaWFsLWNhc2UgY3JvY2sgZm9yIHR5cGVzIHdpdGggc3RyYW5nZSB0 eXBtb2QgcnVsZXMuCisJICovCisJaWYgKHR5cGVfb2lkID09IElOVEVSVkFMT0lEIHx8CisJCXR5 cGVfb2lkID09IFRJTUVTVEFNUE9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FU1RBTVBUWk9JRCB8 fAorCQl0eXBlX29pZCA9PSBUSU1FT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVUWk9JRCkKKwl7 CisJCSp0eXBhcnJheSA9IGZhbHNlOworCitwZWN1bGlhcl90eXBtb2Q6CisJCXN3aXRjaCAodHlw ZV9vaWQpCisJCXsKKwkJCWNhc2UgSU5URVJWQUxPSUQ6CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVw KCJJTlRFUlZBTCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKKwkJCQlp ZiAodHlwZW1vZCA8IDApCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIFdJVEgg VElNRSBaT05FIik7CisJCQkJZWxzZQorCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFN UCIpOworCQkJCWJyZWFrOworCQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBhZGRlZCBieSB0 eXBtb2QsIHNvIGZhbGwgdGhyb3VnaCAqLworCQkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQkJKnR5 cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRVRa T0lEOgorCQkJCWlmICh0eXBlbW9kIDwgMCkKKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1F IFdJVEggVElNRSBaT05FIik7CisJCQkJZWxzZQorCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJ TUUiKTsKKwkJCQlicmVhazsKKwkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkg dHlwbW9kZSwgc28gZmFsbCB0aHJvdWdoICovCisJCQljYXNlIFRJTUVPSUQ6CisJCQkJKnR5cG5h bWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQkJYnJlYWs7CisJCX0KKwkJKm5zcGlkID0gSW52YWxp ZE9pZDsKKworCQlpZiAodHlwZW1vZCA+PSAwKQorCQkJKnR5cGVtb2RzdHIgPSBwcmludFR5cG1v ZCgiIiwgdHlwZW1vZCwgdHlwZWZvcm0tPnR5cG1vZG91dCk7CisJCWVsc2UKKwkJCSp0eXBlbW9k c3RyID0gcHN0cmR1cCgiIik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKwkJcmV0dXJu OworCX0KKworCS8qCisJICogQ2hlY2sgaWYgaXQncyBhIHJlZ3VsYXIgKHZhcmlhYmxlIGxlbmd0 aCkgYXJyYXkgdHlwZS4gIEFzIGFib3ZlLAorCSAqIGZpeGVkLWxlbmd0aCBhcnJheSB0eXBlcyBz dWNoIGFzICJuYW1lIiBzaG91bGRuJ3QgZ2V0IGRlY29uc3RydWN0ZWQuCisJICovCisJYXJyYXlf YmFzZV90eXBlID0gdHlwZWZvcm0tPnR5cGVsZW07CisKKwlpZiAoYXJyYXlfYmFzZV90eXBlICE9 IEludmFsaWRPaWQgJiYKKwkJdHlwZWZvcm0tPnR5cHN0b3JhZ2UgIT0gJ3AnKQorCXsKKwkJLyog U3dpdGNoIG91ciBhdHRlbnRpb24gdG8gdGhlIGFycmF5IGVsZW1lbnQgdHlwZSAqLworCQlSZWxl YXNlU3lzQ2FjaGUodHVwbGUpOworCQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBP YmplY3RJZEdldERhdHVtKGFycmF5X2Jhc2VfdHlwZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHVwbGUpKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUg JXUiLCB0eXBlX29pZCk7CisKKwkJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1Qo dHVwbGUpOworCQl0eXBlX29pZCA9IGFycmF5X2Jhc2VfdHlwZTsKKwkJKnR5cGFycmF5ID0gdHJ1 ZTsKKworCQkvKgorCQkgKiBJZiBpdCdzIGFuIGFycmF5IG9mIG9uZSBvZiB0aGUgdHlwZXMgd2l0 aCBzcGVjaWFsIHR5cG1vZCBydWxlcywKKwkJICogaGF2ZSB0aGUgZWxlbWVudCB0eXBlIGJlIHBy b2Nlc3NlZCBhcyBhYm92ZSwgYnV0IG5vdyB3aXRoIHR5cGFycmF5CisJCSAqIHNldCB0byB0cnVl LgorCQkgKi8KKwkJaWYgKHR5cGVfb2lkID09IElOVEVSVkFMT0lEIHx8CisJCQl0eXBlX29pZCA9 PSBUSU1FU1RBTVBUWk9JRCB8fAorCQkJdHlwZV9vaWQgPT0gVElNRVNUQU1QT0lEIHx8CisJCQl0 eXBlX29pZCA9PSBUSU1FVFpPSUQgfHwKKwkJCXR5cGVfb2lkID09IFRJTUVPSUQpCisJCQlnb3Rv IHBlY3VsaWFyX3R5cG1vZDsKKwl9CisJZWxzZQorCQkqdHlwYXJyYXkgPSBmYWxzZTsKKworCSpu c3BpZCA9IHR5cGVmb3JtLT50eXBuYW1lc3BhY2U7CisJKnR5cG5hbWUgPSBwc3RyZHVwKE5hbWVT dHIodHlwZWZvcm0tPnR5cG5hbWUpKTsKKworCWlmICh0eXBlbW9kID49IDApCisJCSp0eXBlbW9k c3RyID0gcHJpbnRUeXBtb2QoIiIsIHR5cGVtb2QsIHR5cGVmb3JtLT50eXBtb2RvdXQpOworCWVs c2UKKwkJKnR5cGVtb2RzdHIgPSBwc3RyZHVwKCIiKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBs ZSk7Cit9CisKKy8qCisgKiBBZGQgdHlwbW9kIGRlY29yYXRpb24gdG8gdGhlIGJhc2ljIHR5cGUg bmFtZQorICovCitzdGF0aWMgY2hhciAqCitwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1l LCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpCit7CisJY2hhcgkgICAqcmVzOworCisJLyog U2hvdWxkbid0IGJlIGNhbGxlZCBpZiB0eXBtb2QgaXMgLTEgKi8KKwlBc3NlcnQodHlwbW9kID49 IDApOworCisJaWYgKHR5cG1vZG91dCA9PSBJbnZhbGlkT2lkKQorCXsKKwkJLyogRGVmYXVsdCBi ZWhhdmlvcjoganVzdCBwcmludCB0aGUgaW50ZWdlciB0eXBtb2Qgd2l0aCBwYXJlbnMgKi8KKwkJ cmVzID0gcHNwcmludGYoIiVzKCVkKSIsIHR5cG5hbWUsIChpbnQpIHR5cG1vZCk7CisJfQorCWVs c2UKKwl7CisJCS8qIFVzZSB0aGUgdHlwZS1zcGVjaWZpYyB0eXBtb2RvdXQgcHJvY2VkdXJlICov CisJCWNoYXIJICAgKnRtc3RyOworCisJCXRtc3RyID0gRGF0dW1HZXRDU3RyaW5nKE9pZEZ1bmN0 aW9uQ2FsbDEodHlwbW9kb3V0LAorCQkJCQkJCQkJCQkJIEludDMyR2V0RGF0dW0odHlwbW9kKSkp OworCQlyZXMgPSBwc3ByaW50ZigiJXMlcyIsIHR5cG5hbWUsIHRtc3RyKTsKKwl9CisKKwlyZXR1 cm4gcmVzOworfQorCisvKgorICogT2J0YWluIHRoZSBkZXBhcnNlZCBkZWZhdWx0IHZhbHVlIGZv ciB0aGUgZ2l2ZW4gY29sdW1uIG9mIHRoZSBnaXZlbiB0YWJsZS4KKyAqCisgKiBDYWxsZXIgbXVz dCBoYXZlIHNldCBhIGNvcnJlY3QgZGVwYXJzZSBjb250ZXh0LgorICovCitzdGF0aWMgY2hhciAq CitSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5v LCBMaXN0ICpkcGNvbnRleHQsCisJCQkJCQkgTGlzdCAqKmV4cHJzKQoreworCU5vZGUgKmRlZnZh bDsKKwljaGFyICpkZWZzdHI7CisKKwlkZWZ2YWwgPSBidWlsZF9jb2x1bW5fZGVmYXVsdChyZWws IGF0dG5vKTsKKwlkZWZzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBkcGNvbnRleHQs IGZhbHNlLCBmYWxzZSk7CisKKwkvKiBDb2xsZWN0IHRoZSBleHByZXNzaW9uIGZvciBsYXRlciBy ZXBsaWNhdGlvbiBzYWZldHkgY2hlY2tzICovCisJaWYgKGV4cHJzKQorCQkqZXhwcnMgPSBsYXBw ZW5kKCpleHBycywgZGVmdmFsKTsKKworCXJldHVybiBkZWZzdHI7Cit9CisKKy8qCisgKiBBbGxv Y2F0ZSBhIG5ldyBvYmplY3QgdHJlZSB0byBzdG9yZSBwYXJhbWV0ZXIgdmFsdWVzLgorICovCitz dGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZSh2b2lkKQoreworCU9ialRyZWUgICAgKnBhcmFt czsKKworCXBhcmFtcyA9IHBhbGxvYyhzaXplb2YoT2JqVHJlZSkpOworCXBhcmFtcy0+bnVtUGFy YW1zID0gMDsKKwlzbGlzdF9pbml0KCZwYXJhbXMtPnBhcmFtcyk7CisKKwlyZXR1cm4gcGFyYW1z OworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1l dGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24uCisgKgorICogVGhlICJmbXQiIGFyZ3VtZW50 IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEgImZtdCIgZWxlbWVudCBpbiB0aGUgb3V0cHV0IGJsb2Iu CisgKiBudW1vYmpzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGV4dHJhIGVsZW1lbnRzIHRvIGFw cGVuZDsgZm9yIGVhY2ggb25lLCBhCisgKiBuYW1lIChzdHJpbmcpLCB0eXBlIChmcm9tIHRoZSBP YmpUeXBlIGVudW0pIGFuZCB2YWx1ZSBtdXN0IGJlIHN1cHBsaWVkLiAgVGhlCisgKiB2YWx1ZSBt dXN0IG1hdGNoIHRoZSB0eXBlIGdpdmVuOyBmb3IgaW5zdGFuY2UsIE9ialR5cGVJbnRlZ2VyIHJl cXVpcmVzIGFuCisgKiBpbnQ2NCwgT2JqVHlwZVN0cmluZyByZXF1aXJlcyBhIGNoYXIgKiwgT2Jq VHlwZUFycmF5IHJlcXVpcmVzIGEgbGlzdCAob2YKKyAqIE9iakVsZW0pLCBPYmpUeXBlT2JqZWN0 IHJlcXVpcmVzIGFuIE9ialRyZWUsIGFuZCBzbyBvbi4gIEVhY2ggZWxlbWVudCB0eXBlICoKKyAq IG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVyIGdpdmVuIGluIHRoZSBmb3JtYXQg c3RyaW5nLCBhcyBkZXNjcmliZWQKKyAqIGluIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLCBx LnYuCisgKgorICogTm90ZSB3ZSBkb24ndCBoYXZlIHRoZSBsdXh1cnkgb2Ygc3ByaW50Zi1saWtl IGNvbXBpbGVyIHdhcm5pbmdzIGZvcgorICogbWFsZm9ybWVkIGFyZ3VtZW50IGxpc3RzLgorICov CitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpz LC4uLikKK3sKKwlPYmpUcmVlICAgICp0cmVlOworCXZhX2xpc3QJCWFyZ3M7CisJaW50CQkJaTsK KworCS8qIFNldCB1cCB0aGUgdG9wbGV2ZWwgb2JqZWN0IGFuZCBpdHMgImZtdCIgKi8KKwl0cmVl ID0gbmV3X29ianRyZWUoKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmVlLCAiZm10IiwgZm10 KTsKKworCS8qIEFuZCBwcm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdzICovCisJdmFfc3RhcnQoYXJn cywgbnVtb2Jqcyk7CisJZm9yIChpID0gMDsgaSA8IG51bW9ianM7IGkrKykKKwl7CisJCWNoYXIJ ICAgKm5hbWU7CisJCU9ialR5cGUJCXR5cGU7CisJCU9iakVsZW0JICAgKmVsZW07CisKKwkJbmFt ZSA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIE9ialR5cGUp OworCisJCS8qCisJCSAqIEZvciBhbGwgb3RoZXIgcGFyYW0gdHlwZXMgdGhlcmUgbXVzdCBiZSBh IHZhbHVlIGluIHRoZSB2YXJhcmdzLgorCQkgKiBGZXRjaCBpdCBhbmQgYWRkIHRoZSBmdWxseSBm b3JtZWQgc3Vib2JqZWN0IGludG8gdGhlIG1haW4gb2JqZWN0LgorCQkgKi8KKwkJc3dpdGNoICh0 eXBlKQorCQl7CisJCQljYXNlIE9ialR5cGVCb29sOgorCQkJCWVsZW0gPSBuZXdfYm9vbF9vYmpl Y3QodmFfYXJnKGFyZ3MsIGludCkpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlU3RyaW5n OgorCQkJCWVsZW0gPSBuZXdfc3RyaW5nX29iamVjdCh2YV9hcmcoYXJncywgY2hhciAqKSk7CisJ CQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkJZWxlbSA9IG5ld19vYmplY3Rf b2JqZWN0KHZhX2FyZyhhcmdzLCBPYmpUcmVlICopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2Jq VHlwZUFycmF5OgorCQkJCWVsZW0gPSBuZXdfYXJyYXlfb2JqZWN0KHZhX2FyZyhhcmdzLCBMaXN0 ICopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQkJZWxlbSA9IG5l d19pbnRlZ2VyX29iamVjdCh2YV9hcmcoYXJncywgaW50NjQpKTsKKwkJCQlicmVhazsKKwkJCWNh c2UgT2JqVHlwZUZsb2F0OgorCQkJCWVsZW0gPSBuZXdfZmxvYXRfb2JqZWN0KHZhX2FyZyhhcmdz LCBkb3VibGUpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZU51bGw6CisJCQkJLyogTnVs bCBwYXJhbXMgZG9uJ3QgaGF2ZSBhIHZhbHVlIChvYnZpb3VzbHkpICovCisJCQkJZWxlbSA9IG5l d19udWxsX29iamVjdCgpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9S LCAiaW52YWxpZCBPYmpUcmVlIGVsZW1lbnQgdHlwZSAlZCIsIHR5cGUpOworCQl9CisKKwkJZWxl bS0+bmFtZSA9IG5hbWU7CisJCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBlbGVtKTsKKwl9 CisKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHRyZWU7Cit9CisKKy8qIEFsbG9jYXRlIGEgbmV3 IHBhcmFtZXRlciB3aXRoIGEgTlVMTCB2YWx1ZSAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X251 bGxfb2JqZWN0KHZvaWQpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlwYXJhbSA9IHBhbGxv YzAoc2l6ZW9mKE9iakVsZW0pKTsKKworCXBhcmFtLT5uYW1lID0gTlVMTDsKKwlwYXJhbS0+b2Jq dHlwZSA9IE9ialR5cGVOdWxsOworCisJcmV0dXJuIHBhcmFtOworfQorCisvKiBBcHBlbmQgYSBO VUxMIG9iamVjdCB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfbnVsbF9vYmplY3Qo T2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKworCXBh cmFtID0gbmV3X251bGxfb2JqZWN0KCk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCWFwcGVuZF9w cmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qIEFsbG9jYXRlIGEgbmV3IGJvb2xl YW4gcGFyYW1ldGVyICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfYm9vbF9vYmplY3QoYm9vbCB2 YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKworCXBhcmFtID0gcGFsbG9jMChzaXplb2Yo T2JqRWxlbSkpOworCXBhcmFtLT5uYW1lID0gTlVMTDsKKwlwYXJhbS0+b2JqdHlwZSA9IE9ialR5 cGVCb29sOworCXBhcmFtLT52YWx1ZS5ib29sZWFuID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07 Cit9CisKKy8qIEFwcGVuZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGlj IHZvaWQKK2FwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBib29s IHZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJcGFyYW0gPSBuZXdfYm9vbF9vYmpl Y3QodmFsdWUpOworCXBhcmFtLT5uYW1lID0gbmFtZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3Qo dHJlZSwgcGFyYW0pOworfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBzdHJpbmcgb2JqZWN0ICovCitz dGF0aWMgT2JqRWxlbSAqCituZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSkKK3sKKwlPYmpF bGVtICAgICpwYXJhbTsKKworCUFzc2VydCh2YWx1ZSk7CisKKwlwYXJhbSA9IHBhbGxvYzAoc2l6 ZW9mKE9iakVsZW0pKTsKKwlwYXJhbS0+bmFtZSA9IE5VTEw7CisJcGFyYW0tPm9ianR5cGUgPSBP YmpUeXBlU3RyaW5nOworCXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKworCXJldHVybiBw YXJhbTsKK30KKworLyoKKyAqIEFwcGVuZCBhIHN0cmluZyBwYXJhbWV0ZXIgdG8gYSB0cmVlLgor ICovCitzdGF0aWMgdm9pZAorYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hh ciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbQkgICAqcGFyYW07CisKKwlBc3NlcnQo bmFtZSk7CisJcGFyYW0gPSBuZXdfc3RyaW5nX29iamVjdCh2YWx1ZSk7CisJcGFyYW0tPm5hbWUg PSBuYW1lOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKK3N0YXRp YyBPYmpFbGVtICoKK25ld19pbnRlZ2VyX29iamVjdChpbnQ2NCB2YWx1ZSkKK3sKKwlPYmpFbGVt CSAgICpwYXJhbTsKKworCXBhcmFtID0gcGFsbG9jMChzaXplb2YoT2JqRWxlbSkpOworCXBhcmFt LT5uYW1lID0gTlVMTDsKKwlwYXJhbS0+b2JqdHlwZSA9IE9ialR5cGVJbnRlZ2VyOworCXBhcmFt LT52YWx1ZS5pbnRlZ2VyID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKK3N0YXRpYyBP YmpFbGVtICoKK25ld19mbG9hdF9vYmplY3QoZmxvYXQ4IHZhbHVlKQoreworCU9iakVsZW0JICAg KnBhcmFtOworCisJcGFyYW0gPSBwYWxsb2MwKHNpemVvZihPYmpFbGVtKSk7CisJcGFyYW0tPm5h bWUgPSBOVUxMOworCXBhcmFtLT5vYmp0eXBlID0gT2JqVHlwZUZsb2F0OworCXBhcmFtLT52YWx1 ZS5mbHQgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyogQWxsb2NhdGUgYSBuZXcg b2JqZWN0IHBhcmFtZXRlciAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdF9vYmplY3Qo T2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlwYXJhbSA9IHBhbGxv YzAoc2l6ZW9mKE9iakVsZW0pKTsKKwlwYXJhbS0+bmFtZSA9IE5VTEw7CisJcGFyYW0tPm9ianR5 cGUgPSBPYmpUeXBlT2JqZWN0OworCXBhcmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsKKworCXJl dHVybiBwYXJhbTsKK30KKworLyogQXBwZW5kIGFuIG9iamVjdCBwYXJhbWV0ZXIgdG8gYSB0cmVl ICovCitzdGF0aWMgdm9pZAorYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hh ciAqbmFtZSwgT2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlBc3Nl cnQobmFtZSk7CisJcGFyYW0gPSBuZXdfb2JqZWN0X29iamVjdCh2YWx1ZSk7CisJcGFyYW0tPm5h bWUgPSBuYW1lOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8q IEFsbG9jYXRlIGEgbmV3IGFycmF5IHBhcmFtZXRlciAqLworc3RhdGljIE9iakVsZW0gKgorbmV3 X2FycmF5X29iamVjdChMaXN0ICphcnJheSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKworCXBh cmFtID0gcGFsbG9jMChzaXplb2YoT2JqRWxlbSkpOworCXBhcmFtLT5uYW1lID0gTlVMTDsKKwlw YXJhbS0+b2JqdHlwZSA9IE9ialR5cGVBcnJheTsKKwlwYXJhbS0+dmFsdWUuYXJyYXkgPSBhcnJh eTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyogQXBwZW5kIGFuIGFycmF5IHBhcmFtZXRlciB0 byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRy ZWUsIGNoYXIgKm5hbWUsIExpc3QgKmFycmF5KQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJ cGFyYW0gPSBuZXdfYXJyYXlfb2JqZWN0KGFycmF5KTsKKwlwYXJhbS0+bmFtZSA9IG5hbWU7CisJ YXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyogQXBwZW5kIGEgcHJl YWxsb2NhdGVkIHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYXBw ZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVsZW0pCit7CisJc2xp c3RfcHVzaF9oZWFkKCZ0cmVlLT5wYXJhbXMsICZlbGVtLT5ub2RlKTsKKwl0cmVlLT5udW1QYXJh bXMrKzsKK30KKworLyoKKyAqIEhlbHBlciBmb3Igb2JqdHJlZV90b19qc29uYjogcHJvY2VzcyBh biBpbmRpdmlkdWFsIGVsZW1lbnQgZnJvbSBhbiBvYmplY3Qgb3IKKyAqIGFuIGFycmF5IGludG8g dGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfdG9fanNv bmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpFbGVtICpvYmplY3QsCisJCQkJ CQkgSnNvbmJJdGVyYXRvclRva2VuIGVsZW1fdG9rZW4pCit7CisJTGlzdENlbGwgICAqY2VsbDsK KwlKc29uYlZhbHVlCXZhbDsKKworCXN3aXRjaCAob2JqZWN0LT5vYmp0eXBlKQorCXsKKwkJY2Fz ZSBPYmpUeXBlTnVsbDoKKwkJCXZhbC50eXBlID0gamJ2TnVsbDsKKwkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVT dHJpbmc6CisJCQl2YWwudHlwZSA9IGpidlN0cmluZzsKKwkJCXZhbC52YWwuc3RyaW5nLmxlbiA9 IHN0cmxlbihvYmplY3QtPnZhbHVlLnN0cmluZyk7CisJCQl2YWwudmFsLnN0cmluZy52YWwgPSBv YmplY3QtPnZhbHVlLnN0cmluZzsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tl biwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJdmFsLnR5 cGUgPSBqYnZOdW1lcmljOworCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0 dW1HZXROdW1lcmljKERpcmVjdEZ1bmN0aW9uQ2FsbDEoaW50OF9udW1lcmljLAorCQkJCQkJCQkJ CQkJCW9iamVjdC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBl bGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJ dmFsLnR5cGUgPSBqYnZOdW1lcmljOworCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJ CQkJRGF0dW1HZXROdW1lcmljKERpcmVjdEZ1bmN0aW9uQ2FsbDEoZmxvYXQ4X251bWVyaWMsCisJ CQkJCQkJCQkJCQkJb2JqZWN0LT52YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlQm9v bDoKKwkJCXZhbC50eXBlID0gamJ2Qm9vbDsKKwkJCXZhbC52YWwuYm9vbGVhbiA9IG9iamVjdC0+ dmFsdWUuYm9vbGVhbjsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZh bCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkvKiByZWN1cnNpdmVs eSBhZGQgdGhlIG9iamVjdCBpbnRvIHRoZSBleGlzdGluZyBwYXJzZSBzdGF0ZSAqLworCQkJb2Jq dHJlZV90b19qc29uYl9yZWMob2JqZWN0LT52YWx1ZS5vYmplY3QsIHN0YXRlKTsKKwkJCWJyZWFr OworCisJCWNhc2UgT2JqVHlwZUFycmF5OgorCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf QkVHSU5fQVJSQVksIE5VTEwpOworCQkJZm9yZWFjaChjZWxsLCBvYmplY3QtPnZhbHVlLmFycmF5 KQorCQkJeworCQkJCU9iakVsZW0gICAqZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQkJCW9ianRy ZWVfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgZWxlbSwgV0pCX0VMRU0pOworCQkJfQorCQkJcHVz aEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX0FSUkFZLCBOVUxMKTsKKwkJCWJyZWFrOworCisJ CWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG9iamVjdCB0eXBlICVkIiwg b2JqZWN0LT5vYmp0eXBlKTsKKwkJCWJyZWFrOworCX0KK30KKworLyoKKyAqIFJlY3Vyc2l2ZSBo ZWxwZXIgZm9yIG9ianRyZWVfdG9fanNvbmIKKyAqLworc3RhdGljIEpzb25iVmFsdWUgKgorb2Jq dHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSkK K3sKKwlzbGlzdF9pdGVyCWl0ZXI7CisKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJ Tl9PQkpFQ1QsIE5VTEwpOworCisJc2xpc3RfZm9yZWFjaChpdGVyLCAmdHJlZS0+cGFyYW1zKQor CXsKKwkJT2JqRWxlbSAgICAqb2JqZWN0ID0gc2xpc3RfY29udGFpbmVyKE9iakVsZW0sIG5vZGUs IGl0ZXIuY3VyKTsKKwkJSnNvbmJWYWx1ZQlrZXk7CisKKwkJLyogUHVzaCB0aGUga2V5IGZpcnN0 ICovCisJCWtleS50eXBlID0gamJ2U3RyaW5nOworCQlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJs ZW4ob2JqZWN0LT5uYW1lKTsKKwkJa2V5LnZhbC5zdHJpbmcudmFsID0gb2JqZWN0LT5uYW1lOwor CQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9LRVksICZrZXkpOworCisJCS8qIFRoZW4gcHJv Y2VzcyB0aGUgdmFsdWUgYWNjb3JkaW5nIHRvIGl0cyB0eXBlICovCisJCW9ianRyZWVfdG9fanNv bmJfZWxlbWVudChzdGF0ZSwgb2JqZWN0LCBXSkJfVkFMVUUpOworCX0KKworCXJldHVybiBwdXNo SnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKK30KKworLyoKKyAqIENy ZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4gT2JqVHJlZS4KKyAqLworc3RhdGlj IEpzb25iICoKK29ianRyZWVfdG9fanNvbmIoT2JqVHJlZSAqdHJlZSkKK3sKKwlKc29uYlZhbHVl ICp2YWx1ZTsKKworCXZhbHVlID0gb2JqdHJlZV90b19qc29uYl9yZWModHJlZSwgTlVMTCk7CisJ cmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsKK30KKworLyoKKyAqIEEgaGVscGVyIHJv dXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3 X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIgdHlwbW9kKQoreworCU9ialRyZWUg ICAgKnR5cGVQYXJhbTsKKwlPaWQJCQl0eXBuc3BpZDsKKwljaGFyCSAgICp0eXBuc3A7CisJY2hh cgkgICAqdHlwZW5hbWUgPSBOVUxMOworCWNoYXIJICAgKnR5cG1vZHN0cjsKKwlib29sCQl0eXBh cnJheTsKKworCWZvcm1hdF90eXBlX2RldGFpbGVkKHR5cGVJZCwgdHlwbW9kLAorCQkJCQkJICZ0 eXBuc3BpZCwgJnR5cGVuYW1lLCAmdHlwbW9kc3RyLCAmdHlwYXJyYXkpOworCisJaWYgKCFPaWRJ c1ZhbGlkKHR5cG5zcGlkKSkKKwkJdHlwbnNwID0gcHN0cmR1cCgiIik7CisJZWxzZSBpZiAoaXNB bnlUZW1wTmFtZXNwYWNlKHR5cG5zcGlkKSkKKwkJdHlwbnNwID0gcHN0cmR1cCgicGdfdGVtcCIp OworCWVsc2UKKwkJdHlwbnNwID0gZ2V0X25hbWVzcGFjZV9uYW1lKHR5cG5zcGlkKTsKKworCS8q IFdlIGRvbid0IHVzZSBuZXdfb2JqdHJlZV9WQSBoZXJlIGJlY2F1c2UgdHlwZXMgZG9uJ3QgaGF2 ZSBhICJmbXQiICovCisJdHlwZVBhcmFtID0gbmV3X29ianRyZWUoKTsKKwlhcHBlbmRfc3RyaW5n X29iamVjdCh0eXBlUGFyYW0sICJzY2hlbWFuYW1lIiwgdHlwbnNwKTsKKwlhcHBlbmRfc3RyaW5n X29iamVjdCh0eXBlUGFyYW0sICJ0eXBlbmFtZSIsIHR5cGVuYW1lKTsKKwlhcHBlbmRfc3RyaW5n X29iamVjdCh0eXBlUGFyYW0sICJ0eXBtb2QiLCB0eXBtb2RzdHIpOworCWFwcGVuZF9ib29sX29i amVjdCh0eXBlUGFyYW0sICJ0eXBhcnJheSIsIHR5cGFycmF5KTsKKworCXJldHVybiB0eXBlUGFy YW07Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5lIHRvIHNldHVwICV7fUQgYW5kICV7fU8g ZWxlbWVudHMKKyAqCisgKiBFbGVtZW50cyAic2NoZW1hbmFtZSIgYW5kICJvYmpuYW1lIiBhcmUg c2V0LiAgSWYgdGhlIG5hbWVzcGFjZSBPSUQKKyAqIGNvcnJlc3BvbmRzIHRvIGEgdGVtcCBzY2hl bWEsIHRoYXQncyBzZXQgdG8gInBnX3RlbXAiLgorICoKKyAqIFRoZSBkaWZmZXJlbmNlIGJldHdl ZW4gdGhvc2UgdHdvIGVsZW1lbnQgdHlwZXMgaXMgd2hldGhlciB0aGUgb2JqbmFtZSB3aWxsCisg KiBiZSBxdW90ZWQgYXMgYW4gaWRlbnRpZmllciBvciBub3QsIHdoaWNoIGlzIG5vdCBzb21ldGhp bmcgdGhhdCB0aGlzIHJvdXRpbmUKKyAqIGNvbmNlcm5zIGl0c2VsZiB3aXRoOyB0aGF0IHdpbGwg YmUgdXAgdG8gdGhlIGV4cGFuZCBmdW5jdGlvbi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKE9pZCBuc3BpZCwgY2hhciAqbmFtZSkKK3sKKwlPYmpUcmVl ICAgICpxdWFsaWZpZWQ7CisJY2hhcgkgICAqbmFtZXNwYWNlOworCisJLyoKKwkgKiBXZSBkb24n dCB1c2UgbmV3X29ianRyZWVfVkEgaGVyZSBiZWNhdXNlIHRoZXNlIG5hbWVzIGRvbid0IGhhdmUg YSAiZm10IgorCSAqLworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlKCk7CisJaWYgKGlzQW55VGVt cE5hbWVzcGFjZShuc3BpZCkpCisJCW5hbWVzcGFjZSA9IHBzdHJkdXAoInBnX3RlbXAiKTsKKwll bHNlCisJCW5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZShuc3BpZCk7CisJYXBwZW5kX3N0 cmluZ19vYmplY3QocXVhbGlmaWVkLCAic2NoZW1hbmFtZSIsIG5hbWVzcGFjZSk7CisJYXBwZW5k X3N0cmluZ19vYmplY3QocXVhbGlmaWVkLCAib2JqbmFtZSIsIHBzdHJkdXAobmFtZSkpOworCisJ cmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAg JXt9RCBhbmQgJXt9TyBlbGVtZW50cywgd2l0aCB0aGUgb2JqZWN0IHNwZWNpZmllZAorICogYnkg Y2xhc3NJZC9vYmpJZAorICoKKyAqIEVsZW1lbnRzICJzY2hlbWFuYW1lIiBhbmQgIm9iam5hbWUi IGFyZSBzZXQuICBJZiB0aGUgb2JqZWN0IGlzIGEgdGVtcG9yYXJ5CisgKiBvYmplY3QsIHRoZSBz Y2hlbWEgbmFtZSBpcyBzZXQgdG8gInBnX3RlbXAiLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJZCkKK3sK KwlPYmpUcmVlICAgICpxdWFsaWZpZWQ7CisJUmVsYXRpb24JY2F0YWxvZzsKKwlIZWFwVHVwbGUJ Y2F0b2JqOworCURhdHVtCQlvYmpuc3A7CisJRGF0dW0JCW9iam5hbWU7CisJQXR0ck51bWJlcglB bnVtX25hbWU7CisJQXR0ck51bWJlcglBbnVtX25hbWVzcGFjZTsKKwlBdHRyTnVtYmVyCUFudW1f b2lkID0gZ2V0X29iamVjdF9hdHRudW1fb2lkKGNsYXNzSWQpOworCWJvb2wJCWlzbnVsbDsKKwor CWNhdGFsb2cgPSB0YWJsZV9vcGVuKGNsYXNzSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwljYXRv YmogPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhdGFsb2csIEFudW1fb2lkLCBvYmplY3RJ ZCk7CisJaWYgKCFjYXRvYmopCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBvYmplY3QgJXUgb2YgY2F0YWxvZyBcIiVzXCIiLAorCQkJIG9iamVjdElkLCBSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShjYXRhbG9nKSk7CisJQW51bV9uYW1lID0gZ2V0X29iamVjdF9hdHRudW1f bmFtZShjbGFzc0lkKTsKKwlBbnVtX25hbWVzcGFjZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWVz cGFjZShjbGFzc0lkKTsKKworCW9iam5zcCA9IGhlYXBfZ2V0YXR0cihjYXRvYmosIEFudW1fbmFt ZXNwYWNlLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAorCQkJCQkJICAmaXNudWxsKTsKKwlp ZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBOVUxMIG5hbWVzcGFjZSIpOwor CW9iam5hbWUgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVtX25hbWUsIFJlbGF0aW9uR2V0RGVz Y3IoY2F0YWxvZyksCisJCQkJCQkgICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVS Uk9SLCAidW5leHBlY3RlZCBOVUxMIG5hbWUiKTsKKworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShEYXR1bUdldE9iamVjdElkKG9iam5zcCksCisJCQkJCQkJCQkJIE5hbWVT dHIoKkRhdHVtR2V0TmFtZShvYmpuYW1lKSkpOworCXRhYmxlX2Nsb3NlKGNhdGFsb2csIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcXVhbGlmaWVkOworfQorCisvKgorICogUmV0dXJuIHRo ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFJFTFBFUlNJU1RFTkNFIHZhbHVl CisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9wZXJzaXN0ZW5jZV9zdHIoY2hhciBwZXJzaXN0ZW5j ZSkKK3sKKwlzd2l0Y2ggKHBlcnNpc3RlbmNlKQorCXsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9U RU1QOgorCQkJcmV0dXJuICJURU1QT1JBUlkiOworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1VOTE9H R0VEOgorCQkJcmV0dXJuICJVTkxPR0dFRCI7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfUEVSTUFO RU5UOgorCQkJcmV0dXJuICIiOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0 ZWQgcGVyc2lzdGVuY2UgbWFya2luZyAlYyIsIHBlcnNpc3RlbmNlKTsKKwkJCXJldHVybiAiIjsJ CS8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKwl9Cit9CisKKy8qCisgKiBkZXBhcnNlX0NvbHVt bkRlZgorICoJCVN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcKKyAqCisgKiBE ZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUgd2l0aGluIGEgcmVndWxhciAobm9uIHR5cGVkKSB0YWJs ZSBjcmVhdGlvbi4KKyAqCisgKiBOT1QgTlVMTCBjb25zdHJhaW50cyBpbiB0aGUgY29sdW1uIGRl ZmluaXRpb24gYXJlIGVtaXR0ZWQgZGlyZWN0bHkgaW4gdGhlCisgKiBjb2x1bW4gZGVmaW5pdGlv biBieSB0aGlzIHJvdXRpbmU7IG90aGVyIGNvbnN0cmFpbnRzIG11c3QgYmUgZW1pdHRlZAorICog ZWxzZXdoZXJlICh0aGUgaW5mbyBpbiB0aGUgcGFyc2Ugbm9kZSBpcyBpbmNvbXBsZXRlIGFueXdh eS4pCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJl bGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG9zaXRlLAorCQkJCSAgQ29sdW1uRGVm ICpjb2xkZWYsIGJvb2wgaXNfYWx0ZXIsIExpc3QgKipleHBycykKK3sKKwlPYmpUcmVlICAgICpj b2x1bW47CisJT2JqVHJlZSAgICAqdG1wOworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxp ZChyZWxhdGlvbik7CisJSGVhcFR1cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0 ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRp b247CisJYm9vbAkJc2F3X25vdG51bGw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qCisJICog SW5oZXJpdGVkIGNvbHVtbnMgd2l0aG91dCBsb2NhbCBkZWZpbml0aW9ucyBtdXN0IG5vdCBiZSBl bWl0dGVkLiBYWFggLS0KKwkgKiBtYXliZSBpdCBpcyB1c2VmdWwgdG8gaGF2ZSB0aGVtIHdpdGgg InByZXNlbnQgPSBmYWxzZSIgb3Igc29tZSBzdWNoPworCSAqLworCWlmICghY29sZGVmLT5pc19s b2NhbCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhdHRyVHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1l KHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHRyVHVw KSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5kIGNhY2hlIGVudHJ5IGZvciBjb2x1bW4g XCIlc1wiIG9mIHJlbGF0aW9uICV1IiwKKwkJCSBjb2xkZWYtPmNvbG5hbWUsIHJlbGlkKTsKKwlh dHRyRm9ybSA9IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHJUdXApOworCisJZ2V0 X2F0dHR5cGV0eXBtb2Rjb2xsKHJlbGlkLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJICAmdHlw aWQsICZ0eXBtb2QsICZ0eXBjb2xsYXRpb24pOworCisJLyogQ29tcG9zaXRlIHR5cGVzIHVzZSBh IHNsaWdodGx5IHNpbXBsZXIgZm9ybWF0IHN0cmluZyAqLworCWlmIChjb21wb3NpdGUpCisJCWNv bHVtbiA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSAle2NvbHR5cGV9VCAle2NvbGxhdGlvbn1z IiwKKwkJCQkJCQkJMywKKwkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwK KwkJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJCQkJ CSJjb2x0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUo dHlwaWQsIHR5cG1vZCkpOworCWVsc2UKKwkJY29sdW1uID0gbmV3X29ianRyZWVfVkEoIiV7bmFt ZX1JICV7Y29sdHlwZX1UICV7ZGVmYXVsdH1zICV7bm90X251bGx9cyAle2NvbGxhdGlvbn1zIiwK KwkJCQkJCQkJMywKKwkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJ CQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJCQkJCSJj b2x0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUodHlw aWQsIHR5cG1vZCkpOworCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkNPTExBVEUgJXtuYW1lfUQi LCAwKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBjb2xsYXRpb24pKQorCXsKKwkJT2JqVHJlZSAqY29s bG5hbWU7CisKKwkJY29sbG5hbWUgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0 aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJICAgdHlwY29sbGF0aW9uKTsKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wLCAibmFtZSIsIGNvbGxuYW1lKTsKKwl9CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVj dChjb2x1bW4sICJjb2xsYXRpb24iLCB0bXApOworCisJaWYgKCFjb21wb3NpdGUpCisJeworCQkv KgorCQkgKiBFbWl0IGEgTk9UIE5VTEwgZGVjbGFyYXRpb24gaWYgbmVjZXNzYXJ5LiAgTm90ZSB0 aGF0IHdlIGNhbm5vdCB0cnVzdAorCQkgKiBwZ19hdHRyaWJ1dGUuYXR0bm90bnVsbCBoZXJlLCBi ZWNhdXNlIHRoYXQgYml0IGlzIGFsc28gc2V0IHdoZW4KKwkJICogcHJpbWFyeSBrZXlzIGFyZSBz cGVjaWZpZWQ7IGFuZCB3ZSBtdXN0IG5vdCBlbWl0IGEgTk9UIE5VTEwKKwkJICogY29uc3RyYWlu dCBpbiB0aGF0IGNhc2UsIHVubGVzcyBleHBsaWNpdGVseSBzcGVjaWZpZWQuICBUaGVyZWZvcmUs CisJCSAqIHdlIHNjYW4gdGhlIGxpc3Qgb2YgY29uc3RyYWludHMgYXR0YWNoZWQgdG8gdGhpcyBj b2x1bW4gdG8gZGV0ZXJtaW5lCisJCSAqIHdoZXRoZXIgd2UgbmVlZCB0byBlbWl0IGFueXRoaW5n LgorCQkgKiAoRm9ydHVuYXRlbHksIE5PVCBOVUxMIGNvbnN0cmFpbnRzIGNhbm5vdCBiZSB0YWJs ZSBjb25zdHJhaW50cy4pCisJCSAqCisJCSAqIEluIHRoZSBBTFRFUiBUQUJMRSBjYXNlcywgd2Ug YWxzbyBhZGQgYSBOT1QgTlVMTCBpZiB0aGUgY29sRGVmIGlzCisJCSAqIG1hcmtlZCBpc19ub3Rf bnVsbC4KKwkJICovCisJCXNhd19ub3RudWxsID0gZmFsc2U7CisJCWZvcmVhY2goY2VsbCwgY29s ZGVmLT5jb25zdHJhaW50cykKKwkJeworCQkJQ29uc3RyYWludCAqY29uc3RyID0gKENvbnN0cmFp bnQgKikgbGZpcnN0KGNlbGwpOworCisJCQlpZiAoY29uc3RyLT5jb250eXBlID09IENPTlNUUl9O T1ROVUxMKQorCQkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKwkJfQorCQlpZiAoaXNfYWx0ZXIgJiYg Y29sZGVmLT5pc19ub3RfbnVsbCkKKwkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKworCQlpZiAoc2F3 X25vdG51bGwpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChjb2x1bW4sICJub3RfbnVsbCIsICJO T1QgTlVMTCIpOworCQllbHNlCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChjb2x1bW4sICJub3Rf bnVsbCIsICIiKTsKKworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVGQVVMVCAle2RlZmF1bHR9 cyIsIDApOworCQlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikKKwkJeworCQkJY2hhciAqZGVmc3Ry OworCisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJG b3JtLT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcCwgImRlZmF1bHQiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJ CWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChjb2x1bW4sICJkZWZhdWx0IiwgdG1wKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2Fj aGUoYXR0clR1cCk7CisKKwlyZXR1cm4gY29sdW1uOworfQorCisvKgorICogZGVwYXJzZV9Db2x1 bW5EZWZfVHlwZWQKKyAqCQlTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUgT0YgZGVwYXJzaW5n CisgKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHR5cGVkIHRhYmxlIGNy ZWF0aW9uLglUaGlzIGlzIHNpbXBsZXIKKyAqIHRoYW4gdGhlIHJlZ3VsYXIgY2FzZSwgYmVjYXVz ZSB3ZSBkb24ndCBoYXZlIHRvIGVtaXQgdGhlIHR5cGUgZGVjbGFyYXRpb24sCisgKiBjb2xsYXRp b24sIG9yIGRlZmF1bHQuICBIZXJlIHdlIG9ubHkgcmV0dXJuIHNvbWV0aGluZyBpZiB0aGUgY29s dW1uIGlzIGJlaW5nCisgKiBkZWNsYXJlZCBOT1QgTlVMTC4KKyAqCisgKiBBcyBpbiBkZXBhcnNl X0NvbHVtbkRlZiwgYW55IG90aGVyIGNvbnN0cmFpbnQgaXMgcHJvY2Vzc2VkIGVsc2V3aGVyZS4K KyAqCisgKiBGSVhNRSAtLS0gYWN0dWFsbHksIHdoYXQgYWJvdXQgZGVmYXVsdCB2YWx1ZXM/Cisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uRGVmX3R5cGVkKFJlbGF0aW9uIHJl bGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIENvbHVtbkRlZiAqY29sZGVmKQoreworCU9ialRyZWUg ICAgKmNvbHVtbiA9IE5VTEw7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0 aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsK KwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlwbW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwli b29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJYXR0clR1cCA9IFNlYXJj aFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNoZSBl bnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5jb2xu YW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChh dHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0dG51 bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9uKTsKKworCS8qCisJICog U2VhcmNoIGZvciBhIE5PVCBOVUxMIGRlY2xhcmF0aW9uLiAgQXMgaW4gZGVwYXJzZV9Db2x1bW5E ZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5kaW5nIGEgY29uc3RyYWludCBvbiB0aGUgY29sdW1uIHJh dGhlciB0aGFuIGNvbGRlZi0+aXNfbm90X251bGwuCisJICogKFRoaXMgcm91dGluZSBpcyBuZXZl ciB1c2VkIGZvciBBTFRFUiBjYXNlcy4pCisJICovCisJc2F3X25vdG51bGwgPSBmYWxzZTsKKwlm b3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJeworCQlDb25zdHJhaW50ICpjb25z dHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKGNvbnN0ci0+Y29udHlw ZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJeworCQkJc2F3X25vdG51bGwgPSB0cnVlOworCQkJYnJl YWs7CisJCX0KKwl9CisKKwlpZiAoc2F3X25vdG51bGwpCisJCWNvbHVtbiA9IG5ld19vYmp0cmVl X1ZBKCIle25hbWV9SSBXSVRIIE9QVElPTlMgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJjb2x1bW5fbm90bnVsbCIsCisJCQkJCQkJCSJuYW1lIiwgT2JqVHlw ZVN0cmluZywgY29sZGVmLT5jb2xuYW1lKTsKKworCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsK KworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisgKiBkZXBhcnNlVGFibGVFbGVtZW50cworICoJ CVN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcKKyAqCisgKiBEZWFsIHdpdGgg YWxsIHRoZSB0YWJsZSBlbGVtZW50cyAoY29sdW1ucyBhbmQgY29uc3RyYWludHMpLgorICoKKyAq IE5vdGUgd2UgaWdub3JlIGNvbnN0cmFpbnRzIGluIHRoZSBwYXJzZSBub2RlIGhlcmU7IHRoZXkg YXJlIGV4dHJhY3RlZCBmcm9tCisgKiBzeXN0ZW0gY2F0YWxvZ3MgaW5zdGVhZC4KKyAqLworc3Rh dGljIExpc3QgKgorZGVwYXJzZVRhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3Qg KnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29udGV4dCwKKwkJCQkJIGJvb2wgdHlwZWQsIGJvb2wg Y29tcG9zaXRlKQoreworCUxpc3QJICAgKmVsZW1lbnRzID0gTklMOworCUxpc3RDZWxsICAgKmxj OworCisJZm9yZWFjaChsYywgdGFibGVFbGVtZW50cykKKwl7CisJCU5vZGUJICAgKmVsdCA9IChO b2RlICopIGxmaXJzdChsYyk7CisKKwkJc3dpdGNoIChub2RlVGFnKGVsdCkpCisJCXsKKwkJCWNh c2UgVF9Db2x1bW5EZWY6CisJCQkJeworCQkJCQlPYmpUcmVlCSAgICp0cmVlOworCisJCQkJCXRy ZWUgPSB0eXBlZCA/CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChyZWxhdGlvbiwgZHBj b250ZXh0LAorCQkJCQkJCQkJCQkJKENvbHVtbkRlZiAqKSBlbHQpIDoKKwkJCQkJCWRlcGFyc2Vf Q29sdW1uRGVmKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBjb21wb3NpdGUsIChD b2x1bW5EZWYgKikgZWx0LAorCQkJCQkJCQkJCSAgZmFsc2UsIE5VTEwpOworCQkJCQlpZiAodHJl ZSAhPSBOVUxMKQorCQkJCQl7CisJCQkJCQlPYmpFbGVtICAgICpjb2x1bW47CisKKwkJCQkJCWNv bHVtbiA9IG5ld19vYmplY3Rfb2JqZWN0KHRyZWUpOworCQkJCQkJZWxlbWVudHMgPSBsYXBwZW5k KGVsZW1lbnRzLCBjb2x1bW4pOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBU X0NvbnN0cmFpbnQ6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJp bnZhbGlkIG5vZGUgdHlwZSAlZCIsIG5vZGVUYWcoZWx0KSk7CisJCX0KKwl9CisKKwlyZXR1cm4g ZWxlbWVudHM7Cit9CisKKy8qCisgKiBvYnRhaW5Db25zdHJhaW50cworICoJCVN1YnJvdXRpbmUg Zm9yIENSRUFURSBUQUJMRS9DUkVBVEUgRE9NQUlOIGRlcGFyc2luZworICoKKyAqIEdpdmVuIGEg dGFibGUgT0lEIG9yIGRvbWFpbiBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWludHMgYW5kIGFwcGVu ZCB0aGVtIHRvCisgKiB0aGUgZ2l2ZW4gZWxlbWVudHMgbGlzdC4gIFRoZSB1cGRhdGVkIGxpc3Qg aXMgcmV0dXJuZWQuCisgKgorICogVGhpcyB3b3JrcyBmb3IgdHlwZWQgdGFibGVzLCByZWd1bGFy IHRhYmxlcywgYW5kIGRvbWFpbnMuCisgKgorICogTm90ZSB0aGF0IENPTlNUUkFJTlRfRk9SRUlH TiBjb25zdHJhaW50cyBhcmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK29i dGFpbkNvbnN0cmFpbnRzKExpc3QgKmVsZW1lbnRzLCBPaWQgcmVsYXRpb25JZCwgT2lkIGRvbWFp bklkKQoreworCVJlbGF0aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7CisJU3lzU2NhbkRl c2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVwbGU7CisJT2JqVHJlZSAgICAqdG1wOworCisJLyogb25s 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 cmVlICAgICp0bXA7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVz ZXRPcHRpb25zOworCisJaWYgKGlzX3Jlc2V0KQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgUkVTRVQgKCV7b3B0aW9uczosIH1zKSIsIDApOworCWVsc2UK KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCAoJXtv cHRpb25zOiwgfXMpIiwgMCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJjb2x1bW4i LCBzdWJjbWQtPm5hbWUpOworCisJZm9yZWFjaChjZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRlZikK Kwl7CisJCURlZkVsZW0JICAgKmVsZW07CisJCU9ialRyZWUJICAgKnNldDsKKworCQllbGVtID0g KERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwg aXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdChzZXQp KTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIm9wdGlvbnMiLCBzZXRzKTsKKwor CXJldHVybiB0bXA7Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQg KC4uLikKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFsdGVy VGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3RDZWxsICAg KmNlbGw7CisJT2JqVHJlZSAgICAqdG1wOworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0 eXBlID09IEFUX1Jlc2V0UmVsT3B0aW9uczsKKworCWlmIChpc19yZXNldCkKKwkJdG1wID0gbmV3 X29ianRyZWVfVkEoIlJFU0VUICgle29wdGlvbnM6LCB9cykiLCAwKTsKKwllbHNlCisJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJTRVQgKCV7b3B0aW9uczosIH1zKSIsIDApOworCisJZm9yZWFjaChj ZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0JICAgKmVsZW07CisJCU9i alRyZWUJICAgKnNldDsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlz ZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChz ZXRzLCBuZXdfb2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KHRtcCwgIm9wdGlvbnMiLCBzZXRzKTsKKworCXJldHVybiB0bXA7Cit9CisKKy8qCisgKiBkZXBh cnNlX0NyZWF0ZVN0bXQKKyAqCQlEZXBhcnNlIGEgQ3JlYXRlU3RtdCAoQ1JFQVRFIFRBQkxFKQor ICoKKyAqIEdpdmVuIGEgdGFibGUgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTdG10KE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVN0bXQgKm5vZGUgPSAoQ3JlYXRlU3RtdCAq KSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElk LCBBY2Nlc3NTaGFyZUxvY2spOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlPYmpUcmVlICAgICpj cmVhdGVTdG10OworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxs ICAgKmNlbGw7CisJY2hhcgkgICAqZm10c3RyOworCisJLyoKKwkgKiBUeXBlZCB0YWJsZXMgdXNl IGEgc2xpZ2h0bHkgZGlmZmVyZW50IGZvcm1hdCBzdHJpbmc6IHdlIG11c3Qgbm90IHB1dAorCSAq IHRhYmxlX2VsZW1lbnRzIHdpdGggcGFyZW50cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmluZywg YmVjYXVzZSBpZgorCSAqIHRoZXJlIGFyZSBubyBvcHRpb25zIHRoZSBwYXJlbnMgbXVzdCBub3Qg YmUgZW1pdHRlZDsgYW5kIGFsc28sIHR5cGVkCisJICogdGFibGVzIGRvIG5vdCBhbGxvdyBmb3Ig aW5oZXJpdGFuY2UuCisJICovCisJaWYgKG5vZGUtPm9mVHlwZW5hbWUpCisJCWZtdHN0ciA9ICJD UkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9 RCAiCisJCQkiT0YgJXtvZl90eXBlfVQgJXt0YWJsZV9lbGVtZW50c31zICIKKwkJCSIle3dpdGhf Y2xhdXNlfXMgJXtvbl9jb21taXR9cyAle3RhYmxlc3BhY2V9cyI7CisJZWxzZQorCQlmbXRzdHIg PSAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50 aXR5fUQgIgorCQkJIigle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAiCisJCQki JXt3aXRoX2NsYXVzZX1zICV7b25fY29tbWl0fXMgJXt0YWJsZXNwYWNlfXMiOworCisJY3JlYXRl U3RtdCA9CisJCW5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMSwKKwkJCQkJICAgInBlcnNpc3RlbmNl IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJICAgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+ cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkpOworCisJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVT dG10LCAiaWRlbnRpdHkiLCB0bXApOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3Rt dCwgImlmX25vdF9leGlzdHMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9U IEVYSVNUUyIgOiAiIik7CisKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSwKKwkJCQkJCQkJCW9iamVjdElkKTsKKworCWlm IChub2RlLT5vZlR5cGVuYW1lKQorCXsKKwkJTGlzdAkgICAqdGFibGVlbHRzID0gTklMOworCisJ CS8qCisJCSAqIFdlIGNhbid0IHB1dCB0YWJsZSBlbGVtZW50cyBkaXJlY3RseSBpbiB0aGUgZm10 IHN0cmluZyBhcyBhbiBhcnJheQorCQkgKiBzdXJyb3VuZGVkIGJ5IHBhcmVucyBoZXJlLCBiZWNh dXNlIGFuIGVtcHR5IGNsYXVzZSB3b3VsZCBjYXVzZSBhCisJCSAqIHN5bnRheCBlcnJvci4gIFRo ZXJlZm9yZSwgd2UgdXNlIGFuIGluZGlyZWN0aW9uIGVsZW1lbnQgYW5kIHNldAorCQkgKiBwcmVz ZW50PWZhbHNlIHdoZW4gdGhlcmUgYXJlIG5vIGVsZW1lbnRzLgorCQkgKi8KKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgInRhYmxlX2tpbmQiLCAidHlwZWQiKTsKKworCQl0bXAg PSBuZXdfb2JqdHJlZV9mb3JfdHlwZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxvZnR5cGUsIC0xKTsK KwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIm9mX3R5cGUiLCB0bXApOworCisJ CXRhYmxlZWx0cyA9IGRlcGFyc2VUYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBub2RlLT50YWJsZUVs dHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgdHJ1ZSwJCS8qIHR5cGVkIHRhYmxlICovCisJCQkJ CQkJCQkJIGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5D b25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKwkJaWYgKHRhYmxl ZWx0cyA9PSBOSUwpCisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMSwKKwkJCQkJCQkJICJw cmVzZW50IiwgT2JqVHlwZUJvb2wsIGZhbHNlKTsKKwkJZWxzZQorCQkJdG1wID0gbmV3X29ianRy ZWVfVkEoIigle2VsZW1lbnRzOiwgfXMpIiwgMSwKKwkJCQkJCQkJICJlbGVtZW50cyIsIE9ialR5 cGVBcnJheSwgdGFibGVlbHRzKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwg InRhYmxlX2VsZW1lbnRzIiwgdG1wKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqdGFibGVl bHRzID0gTklMOworCisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyBMSUtF IGNsYXVzZXMgc2VwYXJhdGVseTsgdGhleSBoYXZlCisJCSAqIGFscmVhZHkgYmVlbiB0cmFuc2Zv cm1lZCBpbnRvIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzLgorCQkgKi8KKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QoY3JlYXRlU3RtdCwgInRhYmxlX2tpbmQiLCAicGxhaW4iKTsKKworCQkvKgorCQkg KiBQcm9jZXNzIHRhYmxlIGVsZW1lbnRzOiBjb2x1bW4gZGVmaW5pdGlvbnMgYW5kIGNvbnN0cmFp bnRzLglPbmx5CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJlIG9idGFpbmVkIGZyb20g dGhlIHBhcnNlIG5vZGUgaXRzZWxmLglUbworCQkgKiBnZXQgY29uc3RyYWludHMgd2UgcmVseSBv biBwZ19jb25zdHJhaW50LCBiZWNhdXNlIHRoZSBwYXJzZSBub2RlCisJCSAqIG1pZ2h0IGJlIG1p c3Npbmcgc29tZSB0aGluZ3Mgc3VjaCBhcyB0aGUgbmFtZSBvZiB0aGUgY29uc3RyYWludHMuCisJ CSAqLworCQl0YWJsZWVsdHMgPSBkZXBhcnNlVGFibGVFbGVtZW50cyhyZWxhdGlvbiwgbm9kZS0+ dGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJIGZhbHNlLAkJLyogbm90IHR5cGVkIHRh YmxlICovCisJCQkJCQkJCQkJIGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVs dHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsK KworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNyZWF0ZVN0bXQsICJ0YWJsZV9lbGVtZW50cyIsIHRh YmxlZWx0cyk7CisKKwkJLyoKKwkJICogQWRkIGluaGVyaXRhbmNlIHNwZWNpZmljYXRpb24uICBX ZSBjYW5ub3Qgc2ltcGx5IHNjYW4gdGhlIGxpc3Qgb2YKKwkJICogcGFyZW50cyBmcm9tIHRoZSBw YXJzZXIgbm9kZSwgYmVjYXVzZSB0aGF0IG1heSBsYWNrIHRoZSBhY3R1YWwKKwkJICogcXVhbGlm aWVkIG5hbWVzIG9mIHRoZSBwYXJlbnQgcmVsYXRpb25zLiAgUmF0aGVyIHRoYW4gdHJ5aW5nIHRv CisJCSAqIHJlLXJlc29sdmUgdGhlbSBmcm9tIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgcGFyc2Ug bm9kZSwgaXQgc2VlbXMKKwkJICogbW9yZSBhY2N1cmF0ZSBhbmQgY29udmVuaWVudCB0byBncmFi IGl0IGZyb20gcGdfaW5oZXJpdHMuCisJCSAqLworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5I RVJJVFMgKCV7cGFyZW50czosIH1EKSIsIDApOworCQlpZiAobGlzdF9sZW5ndGgobm9kZS0+aW5o UmVsYXRpb25zKSA+IDApCisJCXsKKwkJCUxpc3QJICAgKnBhcmVudHMgPSBOSUw7CisJCQlSZWxh dGlvbglpbmhSZWw7CisJCQlTeXNTY2FuRGVzYyBzY2FuOworCQkJU2NhbktleURhdGEga2V5Owor CQkJSGVhcFR1cGxlCXR1cGxlOworCisJCQlpbmhSZWwgPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVs YXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkJCVNjYW5LZXlJbml0KCZrZXksCisJCQkJ CQlBbnVtX3BnX2luaGVyaXRzX2luaHJlbGlkLAorCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVy LCBGX09JREVRLAorCQkJCQkJT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCisJCQlzY2Fu ID0gc3lzdGFibGVfYmVnaW5zY2FuKGluaFJlbCwgSW5oZXJpdHNSZWxpZFNlcW5vSW5kZXhJZCwK KwkJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisKKwkJCXdoaWxlIChIZWFwVHVwbGVJ c1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJCQl7CisJCQkJT2JqVHJl ZSAgICAqcGFyZW50OworCQkJCUZvcm1fcGdfaW5oZXJpdHMgZm9ybUluaCA9IChGb3JtX3BnX2lu aGVyaXRzKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCQkJcGFyZW50ID0gbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgZm9ybUluaC0+ aW5ocGFyZW50KTsKKwkJCQlwYXJlbnRzID0gbGFwcGVuZChwYXJlbnRzLCBuZXdfb2JqZWN0X29i amVjdChwYXJlbnQpKTsKKwkJCX0KKworCQkJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwkJCXRh YmxlX2Nsb3NlKGluaFJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkJCWFwcGVuZF9hcnJheV9v YmplY3QodG1wLCAicGFyZW50cyIsIHBhcmVudHMpOworCQl9CisJCWVsc2UKKwkJeworCQkJYXBw ZW5kX251bGxfb2JqZWN0KHRtcCwgInBhcmVudHMiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0 bXAsICJwcmVzZW50IiwgZmFsc2UpOworCQl9CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZVN0bXQsICJpbmhlcml0cyIsIHRtcCk7CisJfQorCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRB QkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAwKTsKKwlpZiAobm9kZS0+dGFibGVzcGFjZW5hbWUp CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgInRhYmxlc3BhY2UiLCBub2RlLT50YWJsZXNw YWNlbmFtZSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcCwgInRhYmxlc3Bh Y2UiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICJ0YWJsZXNwYWNlIiwgdG1wKTsKKwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICJvbl9jb21taXQiLAorCQkJCQkJIGRl cGFyc2VfT25Db21taXRDbGF1c2Uobm9kZS0+b25jb21taXQpKTsKKworCS8qIFdJVEggY2xhdXNl ICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIldJVEggKCV7d2l0aDosIH1zKSIsIDApOworCWxp c3QgPSBOSUw7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlPYmpUcmVl CSAgICp0bXAyOworCQlEZWZFbGVtCSpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisK KwkJdG1wMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wMikpOworCX0KKworCWlmIChsaXN0KQorCQlhcHBl bmRfYXJyYXlfb2JqZWN0KHRtcCwgIndpdGgiLCBsaXN0KTsKKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qo Y3JlYXRlU3RtdCwgIndpdGhfY2xhdXNlIiwgdG1wKTsKKworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0 aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGNyZWF0ZVN0bXQ7Cit9CisKK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9DYWNoZShPYmpUcmVlICpwYXJlbnQsIEZv cm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSkKK3sKKyAgICBPYmpUcmVlICAgICp0bXA7CisgICAgY2hh ciAgICAgICAqdG1wc3RyOworCisgICAgdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBz ZXFkYXRhLT5zZXFjYWNoZSk7CisgICAgdG1wID0gbmV3X29ianRyZWVfVkEoIkNBQ0hFICV7dmFs dWV9cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgMiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhY2hlIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworICAgIHJldHVybiBuZXdf b2JqZWN0X29iamVjdCh0bXApOworfQorCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJz ZV9TZXFfQ3ljbGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEpCit7 CisgICAgT2JqVHJlZSAgICAqdG1wOworCisgICAgdG1wID0gbmV3X29ianRyZWVfVkEoIiV7bm99 cyBDWUNMRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgMiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImN5Y2xlIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAibm8iLCBPYmpUeXBlU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAg IHNlcWRhdGEtPnNlcWN5Y2xlID8gIiIgOiAiTk8iKTsKKyAgICByZXR1cm4gbmV3X29iamVjdF9v YmplY3QodG1wKTsKK30KKworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0lu Y3JlbWVudEJ5KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhKQorewor ICAgIE9ialRyZWUgICAgKnRtcDsKKyAgICBjaGFyICAgICAgICp0bXBzdHI7CisKKyAgICB0bXBz dHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWluY3JlbWVudCk7CisgICAg dG1wID0gbmV3X29ianRyZWVfVkEoIklOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiLAorICAgICAgICAg ICAgICAgICAgICAgICAgIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJzZXFpbmNyZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ2 YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisgICAgcmV0dXJuIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NaW52 YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSkKK3sKKyAgICBP YmpUcmVlICAgICp0bXA7CisgICAgY2hhciAgICAgICAqdG1wc3RyOworCisgICAgdG1wc3RyID0g cHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtaW4pOworICAgIHRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJNSU5WQUxVRSAle3ZhbHVlfXMiLAorICAgICAgICAgICAgICAgICAgICAgICAg IDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJt aW52YWx1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIiwgT2JqVHlwZVN0cmlu ZywgdG1wc3RyKTsKKyAgICByZXR1cm4gbmV3X29iamVjdF9vYmplY3QodG1wKTsKK30KKworc3Rh dGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01heHZhbHVlKE9ialRyZWUgKnBhcmVu dCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhKQoreworICAgIE9ialRyZWUgICAgKnRtcDsKKyAg ICBjaGFyICAgICAgICp0bXBzdHI7CisKKyAgICB0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JN QVQsIHNlcWRhdGEtPnNlcW1heCk7CisgICAgdG1wID0gbmV3X29ianRyZWVfVkEoIk1BWFZBTFVF ICV7dmFsdWV9cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgMiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1heHZhbHVlIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworICAgIHJl dHVybiBuZXdfb2JqZWN0X29iamVjdCh0bXApOworfQorCitzdGF0aWMgaW5saW5lIE9iakVsZW0g KgorZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5j ZSBzZXFkYXRhKQoreworICAgIE9ialRyZWUgICAgKnRtcDsKKyAgICBjaGFyICAgICAgICp0bXBz dHI7CisKKyAgICB0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcXN0 YXJ0KTsKKyAgICB0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RBUlQgV0lUSCAle3ZhbHVlfXMiLAor ICAgICAgICAgICAgICAgICAgICAgICAgIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdGFydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg InZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKyAgICByZXR1cm4gbmV3X29iamVjdF9v YmplY3QodG1wKTsKK30KKworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX1Jl c3RhcnQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YSkKK3sK KyAgICBPYmpUcmVlICAgICp0bXA7CisgICAgY2hhciAgICAgICAqdG1wc3RyOworCisgICAgdG1w c3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5sYXN0X3ZhbHVlKTsKKyAgICB0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiUkVTVEFSVCAle3ZhbHVlfXMiLAorICAgICAgICAgICAgICAg ICAgICAgICAgIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJyZXN0YXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiLCBPYmpU eXBlU3RyaW5nLCB0bXBzdHIpOworICAgIHJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0bXApOwor fQorCisvKgorICogZGVwYXJzZV9DcmVhdGVTY2hlbWFTdG10CisgKgkJZGVwYXJzZSBhIENyZWF0 ZVNjaGVtYVN0bXQKKyAqCisgKiBHaXZlbiBhIHNjaGVtYSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUg dGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBj cmVhdGlvbiBjb21tYW5kLgorICoKKyAqIE5vdGUgd2UgZG9uJ3Qgb3V0cHV0IHRoZSBzY2hlbWEg ZWxlbWVudHMgZ2l2ZW4gaW4gdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKiBUaGV5IG11c3QgYmUg b3V0cHV0IHNlcGFyYXRlbHkuCSAoSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sCisgKiBD cmVhdGVTY2hlbWFDb21tYW5kIHBhc3NlcyB0aGVtIGJhY2sgdG8gUHJvY2Vzc1V0aWxpdHksIHdo aWNoIHdpbGwgbGVhZCB0bworICogdGhpcyBmaWxlIGlmIGFwcHJvcHJpYXRlLikKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTY2hlbWFTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVNjaGVtYVN0bXQgKm5vZGUgPSAoQ3JlYXRlU2NoZW1h U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqY3JlYXRlU2NoZW1hOworCU9ialRyZWUg ICAgKmF1dGg7CisKKwljcmVhdGVTY2hlbWEgPQorCQluZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFND SEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1dGhvcml6YXRpb259cyIsCisJCQkJ CSAgIDIsCisJCQkJCSAgICJuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c2NoZW1hbmFtZSwK KwkJCQkJICAgImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkgICBub2RlLT5p Zl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCWF1dGggPSBuZXdfb2JqdHJl ZV9WQSgiQVVUSE9SSVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwgMCk7CisJaWYgKG5v ZGUtPmF1dGhyb2xlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChhdXRoLCAiYXV0aG9yaXphdGlv bl9yb2xlIiwKKwkJCQkJCQkgZ2V0X3JvbGVzcGVjX25hbWUobm9kZS0+YXV0aHJvbGUpKTsKKwll bHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QoYXV0aCwgImF1dGhvcml6YXRpb25fcm9sZSIp OworCQlhcHBlbmRfYm9vbF9vYmplY3QoYXV0aCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVNjaGVtYSwgImF1dGhvcml6YXRpb24iLCBhdXRoKTsK KworCXJldHVybiBjcmVhdGVTY2hlbWE7Cit9CisKK3N0YXRpYyBPYmpFbGVtICoKK2RlcGFyc2Vf U2VxX093bmVkQnkoT2JqVHJlZSAqcGFyZW50LCBPaWQgc2VxdWVuY2VJZCkKK3sKKyAgICBPYmpU cmVlICAgICpvd25lZGJ5ID0gTlVMTDsKKyAgICBSZWxhdGlvbiAgICBkZXBSZWw7CisgICAgU3lz U2NhbkRlc2Mgc2NhbjsKKyAgICBTY2FuS2V5RGF0YSBrZXlzWzNdOworICAgIEhlYXBUdXBsZSAg IHR1cGxlOworCisgICAgZGVwUmVsID0gdGFibGVfb3BlbihEZXBlbmRSZWxhdGlvbklkLCBBY2Nl c3NTaGFyZUxvY2spOworICAgIFNjYW5LZXlJbml0KCZrZXlzWzBdLAorICAgICAgICAgICAgICAg IEFudW1fcGdfZGVwZW5kX2NsYXNzaWQsCisgICAgICAgICAgICAgICAgQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorICAgICAgICAgICAgICAgIE9iamVjdElkR2V0RGF0dW0oUmVsYXRp b25SZWxhdGlvbklkKSk7CisgICAgU2NhbktleUluaXQoJmtleXNbMV0sCisgICAgICAgICAgICAg ICAgQW51bV9wZ19kZXBlbmRfb2JqaWQsCisgICAgICAgICAgICAgICAgQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorICAgICAgICAgICAgICAgIE9iamVjdElkR2V0RGF0dW0oc2VxdWVu Y2VJZCkpOworICAgIFNjYW5LZXlJbml0KCZrZXlzWzJdLAorICAgICAgICAgICAgICAgIEFudW1f cGdfZGVwZW5kX29ianN1YmlkLAorICAgICAgICAgICAgICAgIEJURXF1YWxTdHJhdGVneU51bWJl ciwgRl9JTlQ0RVEsCisgICAgICAgICAgICAgICAgSW50MzJHZXREYXR1bSgwKSk7CisKKyAgICBz Y2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGRlcFJlbCwgRGVwZW5kRGVwZW5kZXJJbmRleElkLCB0 cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMywga2V5cyk7CisgICAg d2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkK KyAgICB7CisgICAgICAgIE9pZCAgICAgICAgIG93bmVySWQ7CisgICAgICAgIEZvcm1fcGdfZGVw ZW5kIGRlcGZvcm07CisgICAgICAgIE9ialRyZWUgICAgKnRtcDsKKyAgICAgICAgY2hhciAgICAg ICAqY29sbmFtZTsKKworICAgICAgICBkZXBmb3JtID0gKEZvcm1fcGdfZGVwZW5kKSBHRVRTVFJV Q1QodHVwbGUpOworCisgICAgICAgIC8qIG9ubHkgY29uc2lkZXIgQVVUTyBkZXBlbmRlbmNpZXMg b24gcGdfY2xhc3MgKi8KKyAgICAgICAgaWYgKGRlcGZvcm0tPmRlcHR5cGUgIT0gREVQRU5ERU5D WV9BVVRPKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChkZXBmb3JtLT5yZWZj bGFzc2lkICE9IFJlbGF0aW9uUmVsYXRpb25JZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg ICAgICBpZiAoZGVwZm9ybS0+cmVmb2Jqc3ViaWQgPD0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVl OworCisgICAgICAgIG93bmVySWQgPSBkZXBmb3JtLT5yZWZvYmppZDsKKyAgICAgICAgY29sbmFt ZSA9IGdldF9hdHRuYW1lKG93bmVySWQsIGRlcGZvcm0tPnJlZm9ianN1YmlkLCBmYWxzZSk7Cisg ICAgICAgIGlmIChjb2xuYW1lID09IE5VTEwpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg ICAgICB0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklk LCBvd25lcklkKTsKKyAgICAgICAgYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiYXR0cm5hbWUi LCBjb2xuYW1lKTsKKyAgICAgICAgb3duZWRieSA9IG5ld19vYmp0cmVlX1ZBKCJPV05FRCBCWSAl e293bmVyfUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm93bmVyIiwgT2JqVHlwZU9iamVj dCwgdG1wKTsKKyAgICB9CisKKyAgICBzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworICAgIHJlbGF0 aW9uX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworICAgIC8qCisgICAgICogSWYg dGhlcmUncyBubyBvd25lciBjb2x1bW4sIGVtaXQgYW4gZW1wdHkgT1dORUQgQlkgZWxlbWVudCwg c2V0IHVwIHNvCisgICAgICogdGhhdCBpdCB3b24ndCBwcmludCBhbnl0aGluZy4KKyAgICAgKi8K KyAgICBpZiAoIW93bmVkYnkpCisgICAgICAgIC8qIFhYWCB0aGlzIHNob3VsZG4ndCBoYXBwZW4g Li4uICovCisgICAgICAgIG93bmVkYnkgPSBuZXdfb2JqdHJlZV9WQSgiT1dORUQgQlkgJXtvd25l cn1EIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm93bmVkIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvd25lciIsIE9ialR5cGVOdWxsLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFs c2UpOworICAgIHJldHVybiBuZXdfb2JqZWN0X29iamVjdChvd25lZGJ5KTsKK30KKworLyogZGVw YXJzZV9DcmVhdGVTZXFTdG10CisgKiAJZGVwYXJzZSBhIENyZWF0ZVNlcVN0bXQKKyAqCisgKiAJ R2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGUgaXQsIHJl dHVybiBhbiBPYmpUcmVlCisgKiAJcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVNlcVN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZQkqY3JlYXRlU2VxOworCU9ialRyZWUJKnRt cDsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1No YXJlTG9jayk7CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEgPSBnZXRfc2VxdWVuY2Vf dmFsdWVzKG9iamVjdElkKTsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlGb3JtX3BnX3NlcXVl bmNlIHNlcWZvcm07CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKworCXJl bCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlz ZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVj dElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAor CQkJIG9iamVjdElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNU KHNlcXR1cGxlKTsKKworCWNyZWF0ZVNlcSA9IAorCQluZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7 cGVyc2lzdGVuY2V9cyBTRVFVRU5DRSAle2lkZW50aXR5fUQgIgorCQkJCQkgICAiJXtkZWZpbml0 aW9uOiB9cyIsCisJCQkJCSAgIDEsCisJCQkJCSAgICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJp bmcsCisJCQkJCSAgIGdldF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVy c2lzdGVuY2UpKTsKKworCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+ cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbGF0aW9uKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU2VxLCAiaWRlbnRpdHki LCB0bXApOworCisJLyogZGVmaW5pdGlvbiBlbGVtZXRzICovCisJZWxlbXMgPSBsYXBwZW5kKGVs ZW1zLCBkZXBhcnNlX1NlcV9DYWNoZShjcmVhdGVTZXEsIHNlcWZvcm0pKTsKKwllbGVtcyA9IGxh cHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0N5Y2xlKGNyZWF0ZVNlcSwgc2VxZm9ybSkpOworCWVs ZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoY3JlYXRlU2VxLCBz ZXFmb3JtKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NaW52YWx1ZShj cmVhdGVTZXEsIHNlcWZvcm0pKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2Vx X01heHZhbHVlKGNyZWF0ZVNlcSwgc2VxZm9ybSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywg ZGVwYXJzZV9TZXFfU3RhcnR3aXRoKGNyZWF0ZVNlcSwgc2VxZm9ybSkpOworCWVsZW1zID0gbGFw cGVuZChlbGVtcywgZGVwYXJzZV9TZXFfUmVzdGFydChjcmVhdGVTZXEsIHNlcWRhdGEpKTsKKwkv KiB3ZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCisJYXBwZW5k X2FycmF5X29iamVjdChjcmVhdGVTZXEsICJkZWZpbml0aW9uIiwgZWxlbXMpOworCisJdGFibGVf Y2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwg QWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTZXE7Cit9CisKKy8qCisgKiBkZXBh cnNlX0FsdGVyU2VxU3RtdAorICoJZGVwYXJzZSBhbiBBbHRlclNlcVN0bXQKKyAqCisgKiBHaXZl biBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUpCit7CisJT2JqVHJlZQkJKmFsdGVyU2VxOworCU9ialRyZWUJCSp0bXA7CisJUmVs YXRpb24JIHJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YTsKKwlMaXN0CSAgICplbGVtcyA9IE5J TDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlSZWxh dGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOworCisJc2VxZGF0YSA9IGdldF9zZXF1ZW5j ZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5jZVJlbGF0aW9u SWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShT RVFSRUxJRCwKKwkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciBzZXF1ZW5jZSAldSIsCisJCQkgb2JqZWN0SWQpOworCisJc2VxZm9ybSA9IChG b3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCisJYWx0ZXJTZXEgPQorCQlu ZXdfb2JqdHJlZV9WQSgiQUxURVIgU0VRVUVOQ0UgJXtpZGVudGl0eX1EICV7ZGVmaW5pdGlvbjog fXMiLCAwKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3Jl bC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxh dGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU2VxLCAiaWRlbnRpdHkiLCB0bXAp OworCisJZm9yZWFjaChjZWxsLCAoKEFsdGVyU2VxU3RtdCAqKSBwYXJzZXRyZWUpLT5vcHRpb25z KQorCXsKKwkJRGVmRWxlbSAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2Jq RWxlbSAqbmV3ZWxtOworCisJCWlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImNhY2hlIikgPT0g MCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0NhY2hlKGFsdGVyU2VxLCBzZXFmb3JtKTsKKwkJ ZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjeWNsZSIpID09IDApCisJCQluZXdlbG0g PSBkZXBhcnNlX1NlcV9DeWNsZShhbHRlclNlcSwgc2VxZm9ybSk7CisJCWVsc2UgaWYgKHN0cmNt cChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2Vf U2VxX0luY3JlbWVudEJ5KGFsdGVyU2VxLCBzZXFmb3JtKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVs ZW0tPmRlZm5hbWUsICJtaW52YWx1ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9N aW52YWx1ZShhbHRlclNlcSwgc2VxZm9ybSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZu YW1lLCAibWF4dmFsdWUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWF4dmFsdWUo YWx0ZXJTZXEsIHNlcWZvcm0pOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0 YXJ0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChhbHRlclNlcSwg c2VxZm9ybSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAicmVzdGFydCIpID09 IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9SZXN0YXJ0KGFsdGVyU2VxLCBzZXFkYXRhKTsK KwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJvd25lZF9ieSIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1NlcV9Pd25lZEJ5KGFsdGVyU2VxLCBvYmplY3RJZCk7CisJCWVsc2UK KwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHNlcXVlbmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRlZm5h bWUpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9CisKKwlhcHBlbmRf YXJyYXlfb2JqZWN0KGFsdGVyU2VxLCAiZGVmaW5pdGlvbiIsIGVsZW1zKTsKKworCXRhYmxlX2Ns b3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gYWx0ZXJTZXE7Cit9CisKK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9i alRyZWUJICAgKmFsdGVyVGFibGVTdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlPYmpUcmVlCSAg ICp0bXAyOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlSZWxhdGlvbglyZWw7CisJTGlzdAkgICAq c3ViY21kcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWNoYXIJICAgKmZtdHN0cjsKKwlj b25zdCBjaGFyICpyZWx0eXBlOworCWJvb2wJCWlzdHlwZSA9IGZhbHNlOworCUxpc3QJICAgKmV4 cHJzID0gTklMOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUYWJsZSk7CisKKwly ZWwgPSByZWxhdGlvbl9vcGVuKGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkLCBBY2Nlc3NTaGFy ZUxvY2spOworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCWNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKTsKKwor CXN3aXRjaCAocmVsLT5yZF9yZWwtPnJlbGtpbmQpCisJeworCQljYXNlIFJFTEtJTkRfUkVMQVRJ T046CisJCQlyZWx0eXBlID0gIlRBQkxFIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfSU5E RVg6CisJCQlyZWx0eXBlID0gIklOREVYIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfVklF VzoKKwkJCXJlbHR5cGUgPSAiVklFVyI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0NPTVBP U0lURV9UWVBFOgorCQkJcmVsdHlwZSA9ICJUWVBFIjsKKwkJCWlzdHlwZSA9IHRydWU7CisJCQli cmVhazsKKwkJY2FzZSBSRUxLSU5EX0ZPUkVJR05fVEFCTEU6CisJCQlyZWx0eXBlID0gIkZPUkVJ R04gVEFCTEUiOworCQkJYnJlYWs7CisKKwkJLyogVE9ETyBzdXBwb3J0IGZvciBwYXJ0aXRpb25l ZCB0YWJsZSAqLworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCByZWxr aW5kICVkIiwgcmVsLT5yZF9yZWwtPnJlbGtpbmQpOworCQkJcmVsdHlwZSA9IE5VTEw7OworCX0K KworCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1EICUle3N1YmNtZHM6 LCB9cyIsIHJlbHR5cGUpOworCWFsdGVyVGFibGVTdG10ID0gbmV3X29ianRyZWVfVkEoZm10c3Ry LCAwKTsKKworCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWwtPnJkX3JlbC0+cmVs bmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChhbHRlclRhYmxlU3RtdCwgImlkZW50aXR5IiwgdG1wKTsKKwor CWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVyVGFibGUuc3ViY21kcykKKwl7CisJCUNvbGxlY3Rl ZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVkQVRTdWJjbWQgKikgbGZpcnN0KGNlbGwpOworCQlB bHRlclRhYmxlQ21kCSpzdWJjbWQgPSAoQWx0ZXJUYWJsZUNtZCAqKSBzdWItPnBhcnNldHJlZTsK KwkJT2JqVHJlZQkgICAqdHJlZTsKKworCQlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJUYWJsZUNt ZCkpOworCisJCXN3aXRjaCAoc3ViY21kLT5zdWJ0eXBlKQorCQl7CisJCQljYXNlIEFUX0FkZENv bHVtbjoKKwkJCWNhc2UgQVRfQWRkQ29sdW1uUmVjdXJzZToKKwkJCQkvKiBYWFggbmVlZCB0byBz ZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCUFzc2VydChJc0Eoc3ViY21k LT5kZWYsIENvbHVtbkRlZikpOworCQkJCXRyZWUgPSBkZXBhcnNlX0NvbHVtbkRlZihyZWwsIGRw Y29udGV4dCwgZmFsc2UsCisJCQkJCQkJCQkJIChDb2x1bW5EZWYgKikgc3ViY21kLT5kZWYsIHRy dWUsICZleHBycyk7CisJCQkJZm10c3RyID0gcHNwcmludGYoIkFERCAlcyAlJXtkZWZpbml0aW9u fXMiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIpOworCQkJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVT dHJpbmcsICJhZGQgY29sdW1uIiwKKwkJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVPYmpl Y3QsIHRyZWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4Q29uc3RyYWludDoK KwkJCQl7CisJCQkJCUluZGV4U3RtdCAgKmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJ CWNvbnN0IGNoYXIgKmlkeG5hbWU7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVz cy5vYmplY3RJZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRleFN0bXQpKTsK KwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCUFzc2VydChp c3RtdC0+aXNjb25zdHJhaW50ICYmIGlzdG10LT51bmlxdWUpOworCisJCQkJCWlkeCA9IHJlbGF0 aW9uX29wZW4oaXN0bXQtPmluZGV4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCQlpZHhuYW1l ID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KTsKKworCQkJCQl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50X3R5cGV9cyBVU0lORyBJ TkRFWCAlaW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zIiwKKwkJ CQkJCQkJCQkgNCwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQgdXNpbmcg aW5kZXgiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50 X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkgImNvbnN0cmFpbnRfdHlwZSIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkJCQkJIGlzdG10LT5wcmltYXJ5ID8gIlBSSU1BUlkgS0VZIiA6ICJVTklR VUUiLAorCQkJCQkJCQkJCSAiaW5kZXhfbmFtZSIsIE9ialR5cGVTdHJpbmcsIGlkeG5hbWUpOwor CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImRlZmVycmFibGUiLCBpc3RtdC0+ZGVm ZXJyYWJsZSA/CisJCQkJCQkJCQkJICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIpOwor CQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJpbml0X2RlZmVycmVkIiwgaXN0bXQtPmlu aXRkZWZlcnJlZCA/CisJCQkJCQkJCQkJICJJTklUSUFMTFkgREVGRVJSRUQiIDogIklOSVRJQUxM WSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJl TG9jayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1JlQWRkSW5kZXg6CisJCQlj YXNlIEFUX1JlQWRkQ29uc3RyYWludDoKKwkJCWNhc2UgQVRfUmVBZGRDb21tZW50OgorCQkJY2Fz ZSBBVF9SZXBsYWNlUmVsT3B0aW9uczoKKwkJCQkvKiBTdWJ0eXBlcyB1c2VkIGZvciBpbnRlcm5h bCBvcGVyYXRpb25zOyBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9BZGRDb2x1bW5Ub1ZpZXc6CisJCQkJLyogQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyAtLSBu b3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Db2x1bW5EZWZh dWx0OgorCQkJCWlmIChzdWJjbWQtPmRlZiA9PSBOVUxMKQorCQkJCXsKKwkJCQkJdG1wID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgREVGQVVMVCIsCisJCQkJ CQkJCQkJIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZGVmYXVsdCIpOworCQkJCX0K KwkJCQllbHNlCisJCQkJeworCQkJCQlMaXN0CSAgICpkcGNvbnRleHQ7CisJCQkJCUhlYXBUdXBs ZQlhdHRydHVwOworCQkJCQlBdHRyTnVtYmVyCWF0dG5vOworCisJCQkJCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgREVGQVVMVCAle2RlZmluaXRpb259 cyIsCisJCQkJCQkJCQkJIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBkZWZhdWx0Iik7 CisKKwkJCQkJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJ CWF0dHJ0dXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBz dWJjbWQtPm5hbWUpOworCQkJCQlhdHRubyA9ICgoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVD VChhdHRydHVwKSktPmF0dG51bTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiZGVm aW5pdGlvbiIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWwsIGF0dG5v LCBkcGNvbnRleHQsIE5VTEwpKTsKKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGF0dHJ0dXApOworCQkJ CX0KKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJjb2x1bW4iLCBzdWJjbWQtPm5hbWUp OworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE5vdE51bGw6CisJCQkJdG1wID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9UIE5VTEwiLAorCQkJ CQkJCQkJIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Agbm90IG51bGwiKTsKKwkJCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJjb2x1bW4iLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX1NldE5vdE51bGw6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBOT1QgTlVMTCIsCisJCQkJCQkJCQkgMSwgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IG5vdCBudWxsIik7CisJCQkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wLCAiY29sdW1uIiwgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9TZXRTdGF0aXN0aWNzOgorCQkJCXsKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwg SW50ZWdlcikpOworCQkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29s dW1ufUkgU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNzfW4iLAorCQkJCQkJCQkJCSAzLCAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJCQkJICJjb2x1bW4i LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJICJzdGF0aXN0aWNzIiwg T2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJIGludFZhbCgoSW50ZWdlciAqKSBzdWJjbWQtPmRl ZikpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0T3B0aW9uczoKKwkJCWNh c2UgQVRfUmVzZXRPcHRpb25zOgorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KAorCQkJCQkJCQkJICBkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoc3ViY21k KSkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFN0b3JhZ2U6CisJCQkJQXNzZXJ0KElz QShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVS IENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVE9SQUdFICV7c3RvcmFnZX1zIiwKKwkJCQkJCQkJCSAz LCAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RvcmFnZSIsCisJCQkJCQkJCQkgImNvbHVt biIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCSAic3RvcmFnZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyVmFsKChTdHJpbmcgKikgc3ViY21kLT5kZWYpKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29sdW1uUmVjdXJzZToKKwkJCWNhc2UgQVRf RHJvcENvbHVtbjoKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiRFJPUCAlcyAlJXtjb2x1bW59SSAl JXtjYXNjYWRlfXMiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIp OworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbHVtbiIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5 cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJdG1wMiA9IG5ld19vYmp0cmVlX1ZBKCJDQVND QURFIiwgMSwKKwkJCQkJCQkJCSAgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgc3ViY21kLT5iZWhh dmlvcik7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiY2FzY2FkZSIsIHRtcDIpOwor CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXg6CisJCQkJeworCQkJCQlPaWQJCQlp ZHhPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUluZGV4U3RtdCAgKmlzdG10Owor CQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCWNvbnN0IGNoYXIgKmlkeG5hbWU7CisJCQkJCU9pZAkJ CWNvbnN0ck9pZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRleFN0bXQpKTsK KwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCWlmICghaXN0 bXQtPmlzY29uc3RyYWludCkKKwkJCQkJCWJyZWFrOworCisJCQkJCWlkeCA9IHJlbGF0aW9uX29w ZW4oaWR4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCQlpZHhuYW1lID0gUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUoaWR4KTsKKworCQkJCQljb25zdHJPaWQgPSBnZXRfcmVsYXRpb25fY29uc3Ry YWludF9vaWQoCisJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwgaWR4bmFtZSwgZmFs c2UpOworCisJCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9 SSAle2RlZmluaXRpb259cyIsCisJCQkJCQkJCQkJIDMsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImFkZCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBpZHhu YW1lLAorCQkJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJ IHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOworCQkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCQkJ CQlyZWxhdGlvbl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFr OworCisJCQljYXNlIEFUX0FkZENvbnN0cmFpbnQ6CisJCQljYXNlIEFUX0FkZENvbnN0cmFpbnRS ZWN1cnNlOgorCQkJCXsKKwkJCQkJLyogWFhYIG5lZWQgdG8gc2V0IHRoZSAicmVjdXJzZSIgYml0 IHNvbWV3aGVyZT8gKi8KKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVj dElkOworCQkJCQlib29sCQlpc251bGw7CisJCQkJCUhlYXBUdXBsZQl0dXA7CisJCQkJCURhdHVt CQl2YWw7CisJCQkJCUNvbnN0cmFpbnQgKmNvbnN0cjsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNt ZC0+ZGVmLCBDb25zdHJhaW50KSk7CisJCQkJCWNvbnN0ciA9ICBjYXN0Tm9kZShDb25zdHJhaW50 LCBzdWJjbWQtPmRlZik7CisKKwkJCQkJaWYgKCFjb25zdHItPnNraXBfdmFsaWRhdGlvbikKKwkJ CQkJeworCQkJCQkJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwgT2JqZWN0SWRHZXRE YXR1bShjb25zdHJPaWQpKTsKKworCQkJCQkJaWYgKEhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJ CQkJCXsKKwkJCQkJCQljaGFyCSAgICpjb25iaW47CisKKwkJCQkJCQkvKiBGZXRjaCBjb25zdHJh aW50IGV4cHJlc3Npb24gaW4gcGFyc2V0cmVlIGZvcm0gKi8KKwkJCQkJCQl2YWwgPSBTeXNDYWNo ZUdldEF0dHIoQ09OU1RST0lELCB0dXAsCisJCQkJCQkJCQkJCQkgIEFudW1fcGdfY29uc3RyYWlu dF9jb25iaW4sICZpc251bGwpOworCisJCQkJCQkJaWYgKCFpc251bGwpCisJCQkJCQkJeworCQkJ CQkJCQljb25iaW4gPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbCk7CisJCQkJCQkJCWV4cHJzID0g bGFwcGVuZChleHBycywgc3RyaW5nVG9Ob2RlKGNvbmJpbikpOworCQkJCQkJCX0KKworCQkJCQkJ CVJlbGVhc2VTeXNDYWNoZSh0dXApOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJdG1wID0gbmV3 X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwKKwkJ CQkJCQkJCQkgMywgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJ CQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3Ry T2lkKSwKKwkJCQkJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ CSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJPaWQpKTsKKwkJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJ fQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29uc3RyYWludDoKKwkJCQl7CisJCQkJ CU9pZAkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlDb25zdHJhaW50 ICpjID0gKENvbnN0cmFpbnQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJLyogaWYgbm8gY29uc3Ry YWludCB3YXMgYWx0ZXJlZCwgc2lsZW50bHkgc2tpcCBpdCAqLworCQkJCQlpZiAoIU9pZElzVmFs aWQoY29uc3RyT2lkKSkKKwkJCQkJCWJyZWFrOworCisJCQkJCUFzc2VydChJc0EoYywgQ29uc3Ry YWludCkpOworCQkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09OU1RSQUlOVCAle25h bWV9SSAle2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cyIsCisJCQkJCQkJCQkJIDIsICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSAibmFt ZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSk7CisJCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImRlZmVycmFibGUiLCBjLT5kZWZlcnJhYmxlID8K KwkJCQkJCQkJCQkgIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIik7CisJCQkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcCwgImluaXRfZGVmZXJyZWQiLCBjLT5pbml0ZGVmZXJyZWQgPwor CQkJCQkJCQkJCSAiSU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7 CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0cmFpbnRSZWN1 cnNlOgorCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0cmFpbnQ6CisJCQkJdG1wID0gbmV3X29ianRy ZWVfVkEoIlZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkiLCAyLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZhbGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJ ICJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9Ecm9wQ29uc3RyYWludFJlY3Vyc2U6CisJCQljYXNlIEFUX0Ryb3BDb25z dHJhaW50OgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QIENPTlNUUkFJTlQgJXtjb25z dHJhaW50fUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgY29u c3RyYWludCIsCisJCQkJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlwZToKKwkJCQl7 CisJCQkJCVR1cGxlRGVzYyB0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCQkJCQlG b3JtX3BnX2F0dHJpYnV0ZSBhdHQ7CisJCQkJCUNvbHVtbkRlZgkgICAqZGVmOworCisJCQkJCWF0 dCA9ICYodHVwZGVzYy0+YXR0cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkIC0gMV0pOworCQkJ CQlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3NlcnQoSXNBKGRlZiwg Q29sdW1uRGVmKSk7CisKKwkJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzICUle2NvbHVt bn1JIFNFVCBEQVRBIFRZUEUgJSV7ZGF0YXR5cGV9VCAlJXtjb2xsYXRpb259cyAlcyIsCisJCQkJ CQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIsCisJCQkJCQkJCQkgIGlzdHlw ZSA/ICIle2Nhc2NhZGV9cyIgOiAiJXt1c2luZ31zIik7CisKKwkJCQkJdG1wID0gbmV3X29ianRy ZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhbHRl ciBjb2x1bW4gdHlwZSIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJj bWQtPm5hbWUpOworCQkJCQkvKiBhZGQgdGhlIFRZUEUgY2xhdXNlICovCisJCQkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcCwgImRhdGF0eXBlIiwKKwkJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3R5cGUoYXR0LT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJCSAgYXR0LT5hdHR0eXBtb2QpKTsK KworCQkJCQkvKiBhZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVkICovCisJCQkJCXRtcDIg PSBuZXdfb2JqdHJlZV9WQSgiQ09MTEFURSAle25hbWV9RCIsIDApOworCQkJCQlpZiAoT2lkSXNW YWxpZChhdHQtPmF0dGNvbGxhdGlvbikpCisJCQkJCXsKKwkJCQkJCU9ialRyZWUgKmNvbGxuYW1l OworCisJCQkJCQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRp b25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJICAgYXR0LT5hdHRjb2xsYXRpb24pOworCQkJ CQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wMiwgIm5hbWUiLCBjb2xsbmFtZSk7CisJCQkJCX0K KwkJCQkJZWxzZQorCQkJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcDIsICJwcmVzZW50IiwgZmFs c2UpOworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICJjb2xsYXRpb24iLCB0bXAyKTsK KworCQkJCQkvKiBpZiBub3QgYSBjb21wb3NpdGUgdHlwZSwgYWRkIHRoZSBVU0lORyBjbGF1c2Ug Ki8KKwkJCQkJaWYgKCFpc3R5cGUpCisJCQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBJZiB0aGVy ZSdzIGEgVVNJTkcgY2xhdXNlLCB0cmFuc2Zvcm1BbHRlclRhYmxlU3RtdAorCQkJCQkJICogcmFu IGl0IHRocm91Z2ggdHJhbnNmb3JtRXhwciBhbmQgc3RvcmVkIHRoZQorCQkJCQkJICogcmVzdWx0 aW5nIG5vZGUgaW4gY29va2VkX2RlZmF1bHQsIHdoaWNoIHdlIGNhbiB1c2UKKwkJCQkJCSAqIGhl cmUuCisJCQkJCQkgKi8KKwkJCQkJCXRtcDIgPSBuZXdfb2JqdHJlZV9WQSgiVVNJTkcgJXtleHBy ZXNzaW9ufXMiLCAwKTsKKwkJCQkJCWlmIChkZWYtPnJhd19kZWZhdWx0KQorCQkJCQkJeworCQkJ CQkJCURhdHVtCWRlcGFyc2VkOworCQkJCQkJCWNoYXIgICAqZGVmZXhwcjsKKworCQkJCQkJCWV4 cHJzID0gbGFwcGVuZChleHBycywgZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJCQkJCQkJZGVmZXhw ciA9IG5vZGVUb1N0cmluZyhkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJCQlkZXBhcnNlZCA9 IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCisJCQkJCQkJCQkJCQkJCSAgIENTdHJp bmdHZXRUZXh0RGF0dW0oZGVmZXhwciksCisJCQkJCQkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVs aWQocmVsKSk7CisJCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wMiwgImV4cHJlc3Npb24i LAorCQkJCQkJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwkJCQkJCX0K KwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wMiwgInByZXNlbnQiLCBm YWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICJ1c2luZyIsIHRtcDIpOwor CQkJCQl9CisKKwkJCQkJLyogaWYgaXQncyBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhlIENBU0NB REUgY2xhdXNlICovCisJCQkJCWlmIChpc3R5cGUpCisJCQkJCXsKKwkJCQkJCXRtcDIgPSBuZXdf b2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDApOworCQkJCQkJaWYgKHN1YmNtZC0+YmVoYXZpb3IgIT0g RFJPUF9DQVNDQURFKQorCQkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAyLCAicHJlc2VudCIs IGZhbHNlKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgImNhc2NhZGUiLCB0bXAy KTsKKwkJCQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCQkJCX0KKwkJCQlicmVhazsKKworI2lmZGVmIFRPRE9MSVNUCisJCQlj YXNlIEFUX0FsdGVyQ29sdW1uR2VuZXJpY09wdGlvbnM6CisJCQkJdG1wID0gZGVwYXJzZV9GZHdP cHRpb25zKChMaXN0ICopIHN1YmNtZC0+ZGVmLAorCQkJCQkJCQkJCSBzdWJjbWQtPm5hbWUpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFUX0NoYW5nZU93bmVyOgorCQkJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJPV05FUiBUTyAle293bmVyfUkiLAorCQkJCQkJCQkJIDIsICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImNoYW5nZSBvd25lciIsCisJCQkJCQkJCQkgIm93bmVyIiwgIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJCQkgZ2V0X3JvbGVzcGVjX25hbWUoc3ViY21kLT5uZXdvd25lcikp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0NsdXN0ZXJPbjoKKwkJCQl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiQ0xVU1RFUiBPTiAle2luZGV4fUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImNsdXN0ZXIgb24iLAorCQkJCQkJCQkJICJpbmRleCIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENsdXN0ZXI6 CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIlNFVCBXSVRIT1VUIENMVVNURVIiLCAxLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3aXRob3V0IGNsdXN0ZXIiKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRMb2dnZWQ6CisJCQkJdG1wID0gbmV3X29ianRyZWVf VkEoIlNFVCBMT0dHRUQiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNl dCBsb2dnZWQiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRVbkxvZ2dlZDoKKwkJCQl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFVOTE9HR0VEIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJzZXQgdW5sb2dnZWQiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworLyoKK3JlbW92 ZWQgZmVhdHVyZQorCQkJY2FzZSBBVF9BZGRPaWRzUmVjdXJzZToKKwkJCWNhc2UgQVRfQWRkT2lk czoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEggT0lEUyIsIDEsCisJCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGggb2lkcyIpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOwor Ki8KKwkJCWNhc2UgQVRfRHJvcE9pZHM6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIlNFVCBX SVRIT1VUIE9JRFMiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3 aXRob3V0IG9pZHMiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0QWNjZXNzTWV0aG9kOgor CQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgQUNDRVNTIE1FVEhPRCAle2FjY2Vzc19tZXRo b2R9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGFjY2VzcyBt ZXRob2QiLAorCQkJCQkJCQkJICJhY2Nlc3NfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywgc3ViY21k LT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0VGFibGVTcGFjZToKKwkJCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiU0VUIFRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAyLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB0YWJsZXNwYWNlIiwKKwkJCQkJCQkJ CSAidGFibGVzcGFjZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfU2V0UmVsT3B0aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRSZWxPcHRpb25z OgorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KAorCQkJ CQkJCQkJICBkZXBhcnNlX1JlbFNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0VuYWJsZVRyaWc6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBU UklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJlbmFibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZUFsd2F5c1RyaWc6 CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBBTFdBWVMgVFJJR0dFUiAle3RyaWdn ZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIGFsd2F5 cyB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGljYVRyaWc6CisJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSRVBMSUNBIFRSSUdHRVIgJXt0cmlnZ2VyfUki LCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByZXBsaWNhIHRy aWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1l KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZzoKKwkJCQl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmln Z2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9FbmFibGVUcmlnQWxsOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJ R0dFUiBBTEwiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0 cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnQWxsOgor CQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgYWxsIik7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZ1VzZXI6CisJCQkJdG1wID0gbmV3X29ianRy ZWVfVkEoIkVOQUJMRSBUUklHR0VSIFVTRVIiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9EaXNhYmxlVHJpZ1VzZXI6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJ R0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxl IHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJ1bGU6CisJ CQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcnVsZSIsCisJCQkJCQkJCQkgInJ1 bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0VuYWJsZUFsd2F5c1J1bGU6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBB TFdBWVMgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiZW5hYmxlIGFsd2F5cyBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGljYVJ1 bGU6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSRVBMSUNBIFJVTEUgJXtydWxl fUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByZXBsaWNh IHJ1bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlUnVsZToKKwkJCQl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiRElTQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJkaXNhYmxlIHJ1bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0 cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmhlcml0 OgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTkhFUklUICV7cGFyZW50fUQiLAorCQkJCQkJ CQkJIDIsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImluaGVyaXQiLAorCQkJCQkJCQkJICJwYXJl bnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmpl Y3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BJbmhlcml0OgorCQkJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJOTyBJTkhFUklUICV7cGFyZW50fUQiLAorCQkJCQkJCQkJIDIsICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaW5oZXJpdCIsCisJCQkJCQkJCQkgInBhcmVudCIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJl bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElk KSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkT2Y6CisJCQkJdG1wID0gbmV3X29ianRy ZWVfVkEoIk9GICV7dHlwZV9vZn1UIiwKKwkJCQkJCQkJCSAyLCAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJhZGQgb2YiLAorCQkJCQkJCQkJICJ0eXBlX29mIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShzdWItPmFkZHJlc3Mub2JqZWN0SWQsIC0xKSk7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE9mOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJOT1QgT0YiLAorCQkJCQkJCQkJIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgIm5vdCBvZiIp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1JlcGxpY2FJZGVudGl0eToKKwkJCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiUkVQTElDQSBJREVOVElUWSAle2lkZW50fXMiLCAxLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInJlcGxpY2EgaWRlbnRpdHkiKTsKKwkJCQlzd2l0Y2gg KCgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPmlkZW50aXR5X3R5cGUpCisJ CQkJeworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfREVGQVVMVDoKKwkJCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcCwgImlkZW50IiwgIkRFRkFVTFQiKTsKKwkJCQkJCWJyZWFrOworCQkJ CQljYXNlIFJFUExJQ0FfSURFTlRJVFlfRlVMTDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcCwgImlkZW50IiwgIkZVTEwiKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0Ff SURFTlRJVFlfTk9USElORzoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImlkZW50 IiwgIk5PVEhJTkciKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlf SU5ERVg6CisJCQkJCQl0bXAyID0gbmV3X29ianRyZWVfVkEoIlVTSU5HIElOREVYICV7aW5kZXh9 SSIsIDEsCisJCQkJCQkJCQkJCSAgImluZGV4IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJ ICAoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5uYW1lKTsKKwkJCQkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgImlkZW50IiwgdG1wMik7CisJCQkJCQlicmVhazsKKwkJ CQl9CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUm93U2VjdXJpdHk6CisJCQkJdG1w ID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlUm93U2VjdXJpdHk6CisJCQkJdG1wID0gbmV3X29i anRyZWVfVkEoIkRJU0FCTEUgUk9XIExFVkVMIFNFQ1VSSVRZIiwgMSwKKwkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHJvdyBzZWN1cml0eSIpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOwor I2lmZGVmIFRPRE9MSVNUCisJCQljYXNlIEFUX0dlbmVyaWNPcHRpb25zOgorCQkJCXRtcCA9IGRl cGFyc2VfRmR3T3B0aW9ucygoTGlzdCAqKSBzdWJjbWQtPmRlZiwgTlVMTCk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7 CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhXQVJOSU5HLCAidW5zdXBwb3J0ZWQgYWx0 ZXIgdGFibGUgc3VidHlwZSAlZCIsCisJCQkJCSBzdWJjbWQtPnN1YnR5cGUpOworCQkJCWJyZWFr OworCQl9CisKKwkJLyoKKwkJICogV2UgZG9uJ3Qgc3VwcG9ydCByZXBsaWNhdGluZyBBTFRFUiBU QUJMRSB3aGljaCBjb250YWlucyB2b2xhdGlsZQorCQkgKiBmdW5jdGlvbnMgYmVjYXVzZSBJdCdz IHBvc3NpYmxlIHRoZSBmdW5jdGlvbnMgY29udGFpbiBEREwvRE1MIGluCisJCSAqIHdoaWNoIGNh c2UgdGhlc2Ugb3BlcnRpb25zIHdpbGwgYmUgZXhlY3V0ZWQgdHdpY2UgYW5kIGNhdXNlCisJCSAq IGR1cGxpY2F0ZSBkYXRhLiBJbiBhZGRpdGlvbiwgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSB0 YWJsZXMgYmVpbmcKKwkJICogYWNjZXNzZWQgYnkgdGhlc2UgRERML0RNTCBhcmUgcHVibGlzaGVk IG9yIG5vdC4gU28gYmxpbmRseSBhbGxvd2luZworCQkgKiBzdWNoIGZ1bmN0aW9ucyBjYW4gYWxs b3cgdW5pbnRlbmRlZCBjbGF1c2VzIGxpa2UgdGhlIHRhYmxlcyBhY2Nlc3NlZAorCQkgKiBpbiB0 aG9zZSBmdW5jdGlvbnMgbWF5IG5vdCBldmVuIGV4aXN0IG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUu CisJCSAqLworCQlpZiAoY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoKE5vZGUgKikgZXhwcnMp KQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9T VVBQT1JURUQpLAorCQkJCQkgZXJybXNnKCJBTFRFUiBUQUJMRSBjb21tYW5kIHVzaW5nIHZvbGF0 aWxlIGZ1bmN0aW9uIGNhbm5vdCBiZSByZXBsaWNhdGVkIikpKTsKKworCQkvKgorCQkgKiBDbGVh biB0aGUgbGlzdCBhcyB3ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGVyZSBpcyBubyB2b2xhdGlsZQor CQkgKiBmdW5jdGlvbi4KKwkJICovCisJCWxpc3RfZnJlZShleHBycyk7CisJCWV4cHJzID0gTklM OworCX0KKworCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWlmIChsaXN0 X2xlbmd0aChzdWJjbWRzKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWFwcGVuZF9hcnJheV9v YmplY3QoYWx0ZXJUYWJsZVN0bXQsICJzdWJjbWRzIiwgc3ViY21kcyk7CisJcmV0dXJuIGFsdGVy VGFibGVTdG10OworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBvZiBzaW1wbGUgY29tbWFu ZHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRsZWQg aW4gUHJvY2Vzc1V0aWxpdHlTbG93LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX3Np bXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZDsK KwlOb2RlCSAgICpwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqY29tbWFuZDsKKworCUFzc2VydChj bWQtPnR5cGUgPT0gU0NUX1NpbXBsZSk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPnBhcnNldHJlZTsK KwlvYmplY3RJZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKworCS8qIFRoaXMg c3dpdGNoIG5lZWRzIHRvIGhhbmRsZSBldmVyeXRoaW5nIHRoYXQgUHJvY2Vzc1V0aWxpdHlTbG93 IGRvZXMgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGFyc2V0cmVlKSkKKwl7CisJCWNhc2UgVF9DcmVh dGVTY2hlbWFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlU2NoZW1hU3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVTdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9DcmVhdGVTZXFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3Jl YXRlU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9B bHRlclNlcVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclNlcVN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJY29tbWFuZCA9IE5VTEw7 CisJCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwKKwkJCQkgKGludCkg bm9kZVRhZyhwYXJzZXRyZWUpKTsKKwl9CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworY2hhciAq CitkZXBhcnNlX2Ryb3Bfc2VxdWVuY2UoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIERyb3BCZWhh dmlvciBiZWhhdmlvcikKK3sKKyAgICBTdHJpbmdJbmZvRGF0YSAgc3RyOworICAgIGNoYXIgICAg ICAgICAgICpjb21tYW5kOworICAgIE9ialRyZWUgICAgICAgICpzdG10LCAqc3RtdDI7CisgICAg Y2hhciAgICAgICAgICAgKmZtdDsKKyAgICBKc29uYiAgICAgICAgICAqanNvbmI7CisKKyAgICBp bml0U3RyaW5nSW5mbygmc3RyKTsKKyAgICBmbXQgPSBwc3ByaW50ZigiRFJPUCBTRVFVRU5DRSBJ RiBFWElTVFMgJSV7b2JqaWRlbnRpdHl9cyAlJXtjYXNjYWRlfXMiKTsKKyAgICBzdG10ID0gbmV3 X29ianRyZWVfVkEoZm10LCAxLCAib2JqaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorICAgICAg ICAgICAgICAgICAgICAgICAgICBvYmppZGVudGl0eSk7CisgICAgc3RtdDIgPSBuZXdfb2JqdHJl ZV9WQSgiQ0FTQ0FERSIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZXNlbnQi LCBPYmpUeXBlQm9vbCwgYmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKTsKKyAgICBhcHBlbmRfb2Jq ZWN0X29iamVjdChzdG10LCAiY2FzY2FkZSIsIHN0bXQyKTsKKyAgICBqc29uYiA9IG9ianRyZWVf dG9fanNvbmIoc3RtdCk7CisgICAgY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29u Yi0+cm9vdCwgMTI4KTsKKworICAgIHJldHVybiBjb21tYW5kOworfQorCitjaGFyICoKK2RlcGFy c2VfZHJvcF9zY2hlbWEoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIERyb3BCZWhhdmlvciBiZWhh dmlvcikKK3sKKyAgICBTdHJpbmdJbmZvRGF0YSAgc3RyOworICAgIGNoYXIgICAgICAgICAgICpj b21tYW5kOworICAgIE9ialRyZWUgICAgICAgICpzdG10LCAqc3RtdDI7CisgICAgY2hhciAgICAg ICAgICAgKmZtdDsKKyAgICBKc29uYiAgICAgICAgICAqanNvbmI7CisKKyAgICBpbml0U3RyaW5n SW5mbygmc3RyKTsKKyAgICBmbXQgPSBwc3ByaW50ZigiRFJPUCBTQ0hFTUEgSUYgRVhJU1RTICUl e29iamlkZW50aXR5fXMgJSV7Y2FzY2FkZX1zIik7CisgICAgc3RtdCA9IG5ld19vYmp0cmVlX1ZB KGZtdCwgMSwgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgb2JqaWRlbnRpdHkpOworICAgIHN0bXQyID0gbmV3X29ianRyZWVfVkEoIkNBU0NB REUiLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmVzZW50IiwgT2JqVHlwZUJv b2wsIGJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CisgICAgYXBwZW5kX29iamVjdF9vYmplY3Qo c3RtdCwgImNhc2NhZGUiLCBzdG10Mik7CisgICAganNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHN0 bXQpOworICAgIGNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIDEy OCk7CisKKyAgICByZXR1cm4gY29tbWFuZDsKK30KKworY2hhciAqCitkZXBhcnNlX2Ryb3BfdGFi bGUoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIERyb3BCZWhhdmlvciBiZWhhdmlvcikKK3sKKwlT dHJpbmdJbmZvRGF0YSAgc3RyOworCWNoYXIgICAgICAgICAgICpjb21tYW5kOworCU9ialRyZWUJ CSAgICpzdG10LCAqc3RtdDI7CisJY2hhcgkJICAgKmZtdDsKKwlKc29uYgkJICAgKmpzb25iOwor CisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisJZm10ID0gcHNwcmludGYoIkRST1AgVEFCTEUgSUYg RVhJU1RTICUle29iamlkZW50aXR5fXMgJSV7Y2FzY2FkZX1zIik7CisJc3RtdCA9IG5ld19vYmp0 cmVlX1ZBKGZtdCwgMSwgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgb2Jq aWRlbnRpdHkpOworCXN0bXQyID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJ CSJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CisJYXBw ZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgImNhc2NhZGUiLCBzdG10Mik7CisJanNvbmIgPSBvYmp0 cmVlX3RvX2pzb25iKHN0bXQpOworCWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNv bmItPnJvb3QsIDEyOCk7CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworY2hhciAqCitkZXBhcnNl X3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT3ZlcnJpZGVTZWFy Y2hQYXRoICpvdmVycmlkZVBhdGg7CisJTWVtb3J5Q29udGV4dAlvbGRjeHQ7CisJTWVtb3J5Q29u dGV4dAl0bXBjeHQ7CisJT2JqVHJlZQkJICAgKnRyZWU7CisJY2hhcgkJICAgKmNvbW1hbmQ7CisJ U3RyaW5nSW5mb0RhdGEgIHN0cjsKKworCS8qCisJICogQWxsb2NhdGUgZXZlcnl0aGluZyBkb25l IGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBhIHRlbXAgY29udGV4dCwKKwkgKiB0byBh dm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRoIG1lbW9yeSBoYW5kbGluZyBjb2RlOyBi dXQgYWxsb2NhdGUKKwkgKiB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYmVmb3JlIHN3aXRjaGluZy4K KwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwl0bXBjeHQgPSBBbGxvY1NldENvbnRleHRD cmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgICJkZXBhcnNlIGN0eCIsCisJ CQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRf REVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9NQVhTSVpFKTsK KwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0KTsKKworCS8qCisJICogTWFu eSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52b2tlIHJ1bGV1dGlscy5jIGZ1 bmN0aW9uYWxpdHkKKwkgKiBpbiBvcmRlciB0byBvYnRhaW4gZGVwYXJzZWQgdmVyc2lvbnMgb2Yg ZXhwcmVzc2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsCisJICogd2Ugd2FudCBhbGwgb2JqZWN0IG5h bWVzIHRvIGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFibGUiCisJICog dG8gZW52aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdzLiAgUmF0 aGVyIHRoYW4gaW5qZWN0CisJICogd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNhbGxzIHRvIG92 ZXJyaWRlIHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZQorCSAqIHBsYWNlLCB3ZSBkbyBpdCBjZW50 cmFsbHkgaGVyZS4KKwkgKi8KKwlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNlYXJjaFBhdGgo Q3VycmVudE1lbW9yeUNvbnRleHQpOworCW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9IE5JTDsKKwlv dmVycmlkZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKKwlvdmVycmlkZVBhdGgtPmFkZFRlbXAg PSB0cnVlOworCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsKKworCXN3aXRj aCAoY21kLT50eXBlKQorCXsKKwkJY2FzZSBTQ1RfU2ltcGxlOgorCQkJdHJlZSA9IGRlcGFyc2Vf c2ltcGxlX2NvbW1hbmQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRlclRhYmxlOgor CQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoY21kKTsKKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQiLCBj bWQtPnR5cGUpOworCX0KKworCVBvcE92ZXJyaWRlU2VhcmNoUGF0aCgpOworCisJaWYgKHRyZWUp CisJeworCQlKc29uYiAqanNvbmI7CisKKwkJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHRyZWUp OworCQljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCAxMjgpOwor CX0KKwllbHNlCisJCWNvbW1hbmQgPSBOVUxMOworCisJLyoKKwkgKiBDbGVhbiB1cC4gIE5vdGUg dGhhdCBzaW5jZSB3ZSBjcmVhdGVkIHRoZSBTdHJpbmdJbmZvIGluIHRoZSBjYWxsZXIncworCSAq IGNvbnRleHQsIHRoZSBvdXRwdXQgc3RyaW5nIGlzIG5vdCBkZWxldGVkIGhlcmUuCisJICovCisJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBj eHQpOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIENvbGxlY3RlZENv bW1hbmQsIHJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgaXQuCisgKgorICogVGhlIGNv bW1hbmQgaXMgZXhwYW5kZWQgZnVsbHksIHNvIHRoYXQgdGhlcmUgYXJlIG5vIGFtYmlndWl0aWVz IGV2ZW4gaW4gdGhlCisgKiBmYWNlIG9mIHNlYXJjaF9wYXRoIGNoYW5nZXMuCisgKi8KK0RhdHVt CitkZGxfZGVwYXJzZV90b19qc29uKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQ29sbGVjdGVkQ29t bWFuZCAqY21kID0gKENvbGxlY3RlZENvbW1hbmQgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisJ Y2hhcgkJICAgKmNvbW1hbmQ7CisKKwljb21tYW5kID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQo Y21kKTsKKworCWlmIChjb21tYW5kKQorCQlQR19SRVRVUk5fVEVYVF9QKENTdHJpbmdHZXRUZXh0 RGF0dW0oY29tbWFuZCkpOworCWVsc2UKKwkJUEdfUkVUVVJOX05VTEwoKTsKK30KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9kZGxfanNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZWQxOGYK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCkBAIC0w LDAgKzEsNzQ5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfanNvbi5jCisgKgkg IEpTT04gY29kZSByZWxhdGVkIHRvIERETCBjb21tYW5kIGRlcGFyc2luZworICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMv YmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKKyNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisKKwor dHlwZWRlZiBlbnVtCit7CisJU3BlY1R5cGVuYW1lLAorCVNwZWNPcGVyYXRvcm5hbWUsCisJU3Bl Y0RvdHRlZE5hbWUsCisJU3BlY1N0cmluZywKKwlTcGVjTnVtYmVyLAorCVNwZWNTdHJpbmdMaXRl cmFsLAorCVNwZWNJZGVudGlmaWVyLAorCVNwZWNSb2xlCit9IGNvbnZTcGVjaWZpZXI7CisKK3R5 cGVkZWYgZW51bQoreworCXR2X2Fic2VudCwKKwl0dl90cnVlLAorCXR2X2ZhbHNlCit9IHRyaXZh bHVlOworCitzdGF0aWMgYm9vbCBleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBv dXQsIGNoYXIgKnBhcmFtLAorCQkJCQkJIEpzb25iVmFsdWUgKmpzb252YWwsIGNvbnZTcGVjaWZp ZXIgc3BlY2lmaWVyLAorCQkJCQkJIGNvbnN0IGNoYXIgKmZtdCk7CitzdGF0aWMgdm9pZCBleHBh bmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBvdXQsIGNoYXIgKnBhcmFtLAorCQkJCSAgIEpzb25i VmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLAorCQkJCSAgIGNvbnZTcGVjaWZpZXIgc3Bl Y2lmaWVyLCBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZm10c3RyX2Vycm9yX2NhbGxi YWNrKHZvaWQgKmFyZyk7CitjaGFyICpkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhjaGFyICpq c29uYik7CisKK3N0YXRpYyB0cml2YWx1ZQorZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpz b25iQ29udGFpbmVyICpjb250YWluZXIsIGNoYXIgKmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlr ZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJdHJpdmFsdWUJcmVzdWx0OworCisJa2V5LnR5cGUg PSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0 cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21D b250YWluZXIoY29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2 YWx1ZSA9PSBOVUxMKQorCQlyZXR1cm4gdHZfYWJzZW50OworCWlmICh2YWx1ZS0+dHlwZSAhPSBq YnZCb29sKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0 eXBlIGJvb2xlYW4iLAorCQkJCQkJa2V5bmFtZSkpKTsKKwlyZXN1bHQgPSB2YWx1ZS0+dmFsLmJv b2xlYW4gPyB0dl90cnVlIDogdHZfZmFsc2U7CisJcGZyZWUodmFsdWUpOworCisJcmV0dXJuIHJl c3VsdDsKK30KKworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpzb25i VmFsdWUgd2l0aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEgdHlw ZSBvdGhlciB0aGFuIGpidlN0cmluZywgYW4gZXJyb3IgaXMgcmFpc2VkLiAgSWYgaXQgZG9lc24n dAorICogZXhpc3QsIGFuIGVycm9yIGlzIHJhaXNlZCBpZiBtaXNzaW5nX29rOyBvdGhlcndpc2Ug cmV0dXJuIE5VTEwuCisgKgorICogSWYgaXQgZXhpc3RzIGFuZCBpcyBhIHN0cmluZywgYSBmcmVz aGx5IHBhbGxvYydlZCBjb3B5IGlzIHJldHVybmVkLgorICoKKyAqIElmICpsZW5ndGggaXMgbm90 IE5VTEwsIGl0IGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRp YyBjaGFyICoKK2ZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpj b250YWluZXIsIGNoYXIgKmtleW5hbWUsCisJCQkJCQkJICBib29sIG1pc3Npbmdfb2ssIGludCAq bGVuZ3RoKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNoYXIJ ICAgKnN0cjsKKworCS8qIFhYWCB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIG9iamVjdCwgbm90IGFu IGFycmF5ICovCisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwg PSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1 ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJf Rk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJeworCQlpZiAobWlzc2luZ19v aykKKwkJCXJldHVybiBOVUxMOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgZWxlbWVu dCBcIiVzXCIgaW4ganNvbiBvYmplY3QiLCBrZXluYW1lKSkpOworCX0KKworCXN0ciA9IHBuc3Ry ZHVwKHZhbHVlLT52YWwuc3RyaW5nLnZhbCwgdmFsdWUtPnZhbC5zdHJpbmcubGVuKTsKKwlpZiAo bGVuZ3RoKQorCQkqbGVuZ3RoID0gdmFsdWUtPnZhbC5zdHJpbmcubGVuOworCXBmcmVlKHZhbHVl KTsKKwlyZXR1cm4gc3RyOworfQorCisjZGVmaW5lIEFEVkFOQ0VfUEFSU0VfUE9JTlRFUihwdHIs ZW5kX3B0cikgXAorCWRvIHsgXAorCQlpZiAoKysocHRyKSA+PSAoZW5kX3B0cikpIFwKKwkJCWVy ZXBvcnQoRVJST1IsIFwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksIFwKKwkJCQkJIGVycm1zZygidW50ZXJtaW5hdGVkIGZvcm1hdCBzcGVjaWZpZXIiKSkp OyBcCisJfSB3aGlsZSAoMCkKKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIHBnX2V2ZW50 X3RyaWdnZXJfZXhwYW5kX2NvbW1hbmQKKyAqCisgKiBGaW5kIHRoZSAiZm10IiBlbGVtZW50IGlu IHRoZSBnaXZlbiBjb250YWluZXIsIGFuZCBleHBhbmQgaXQgaW50byB0aGUKKyAqIHByb3ZpZGVk IFN0cmluZ0luZm8uCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfZm10X3JlY3Vyc2l2ZShKc29u YkNvbnRhaW5lciAqY29udGFpbmVyLCBTdHJpbmdJbmZvIG91dCkKK3sKKwlKc29uYlZhbHVlCWtl eTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwljb25zdCBjaGFyICpjcDsKKwljb25zdCBjaGFyICpz dGFydF9wdHI7CisJY29uc3QgY2hhciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47CisKKwlzdGFydF9w dHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihjb250YWluZXIsICJmbXQiLCBmYWxz ZSwgJmxlbik7CisJZW5kX3B0ciA9IHN0YXJ0X3B0ciArIGxlbjsKKworCWZvciAoY3AgPSBzdGFy dF9wdHI7IGNwIDwgZW5kX3B0cjsgY3ArKykKKwl7CisJCWNvbnZTcGVjaWZpZXIgc3BlY2lmaWVy OworCQlib29sCQlpc19hcnJheTsKKwkJY2hhcgkgICAqcGFyYW0gPSBOVUxMOworCQljaGFyCSAg ICphcnJheXNlcCA9IE5VTEw7CisKKwkJaWYgKCpjcCAhPSAnJScpCisJCXsKKwkJCWFwcGVuZFN0 cmluZ0luZm9DaGFyTWFjcm8ob3V0LCAqY3ApOworCQkJY29udGludWU7CisJCX0KKworCQlpc19h cnJheSA9IGZhbHNlOworCisJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisK KwkJLyogRWFzeSBjYXNlOiAlJSBvdXRwdXRzIGEgc2luZ2xlICUgKi8KKwkJaWYgKCpjcCA9PSAn JScpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8ob3V0LCAqY3ApOworCQkJY29u dGludWU7CisJCX0KKworCQkvKgorCQkgKiBTY2FuIHRoZSBtYW5kYXRvcnkgZWxlbWVudCBuYW1l LiAgQWxsb3cgZm9yIGFuIGFycmF5IHNlcGFyYXRvcgorCQkgKiAod2hpY2ggbWF5IGJlIHRoZSBl bXB0eSBzdHJpbmcpIHRvIGJlIHNwZWNpZmllZCBhZnRlciBjb2xvbi4KKwkJICovCisJCWlmICgq Y3AgPT0gJ3snKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBwYXJidWY7CisJCQlTdHJpbmdJbmZv RGF0YSBhcnJheXNlcGJ1ZjsKKwkJCVN0cmluZ0luZm8JYXBwZW5kVG87CisKKwkJCWluaXRTdHJp bmdJbmZvKCZwYXJidWYpOworCQkJYXBwZW5kVG8gPSAmcGFyYnVmOworCisJCQlBRFZBTkNFX1BB UlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJZm9yICg7IGNwIDwgZW5kX3B0cjspCisJCQl7 CisJCQkJaWYgKCpjcCA9PSAnOicpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBmb3VuZCBhcnJh eSBzZXBhcmF0b3IgZGVsaW1pdGVyOyBlbGVtZW50IG5hbWUgaXMgbm93CisJCQkJCSAqIGNvbXBs ZXRlLCBzdGFydCBmaWxsaW5nIHRoZSBzZXBhcmF0b3IuCisJCQkJCSAqLworCQkJCQlpbml0U3Ry aW5nSW5mbygmYXJyYXlzZXBidWYpOworCQkJCQlhcHBlbmRUbyA9ICZhcnJheXNlcGJ1ZjsKKwkJ CQkJaXNfYXJyYXkgPSB0cnVlOworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9w dHIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlpZiAoKmNwID09ICd9JykKKwkJCQl7 CisJCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJCWJyZWFrOwor CQkJCX0KKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGFwcGVuZFRvLCAqY3ApOworCQkJ CUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQl9CisJCQlwYXJhbSA9IHBh cmJ1Zi5kYXRhOworCQkJaWYgKGlzX2FycmF5KQorCQkJCWFycmF5c2VwID0gYXJyYXlzZXBidWYu ZGF0YTsKKwkJfQorCQlpZiAocGFyYW0gPT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2co Im1pc3NpbmcgY29udmVyc2lvbiBuYW1lIGluIGNvbnZlcnNpb24gc3BlY2lmaWVyIikpKTsKKwor CQlzd2l0Y2ggKCpjcCkKKwkJeworCQkJY2FzZSAnSSc6CisJCQkJc3BlY2lmaWVyID0gU3BlY0lk ZW50aWZpZXI7CisJCQkJYnJlYWs7CisJCQljYXNlICdEJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVj RG90dGVkTmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3MnOgorCQkJCXNwZWNpZmllciA9IFNw ZWNTdHJpbmc7CisJCQkJYnJlYWs7CisJCQljYXNlICdMJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVj U3RyaW5nTGl0ZXJhbDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1QnOgorCQkJCXNwZWNpZmllciA9 IFNwZWNUeXBlbmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ08nOgorCQkJCXNwZWNpZmllciA9 IFNwZWNPcGVyYXRvcm5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICduJzoKKwkJCQlzcGVjaWZp ZXIgPSBTcGVjTnVtYmVyOworCQkJCWJyZWFrOworCQkJY2FzZSAnUic6CisJCQkJc3BlY2lmaWVy ID0gU3BlY1JvbGU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ CSBlcnJtc2coImludmFsaWQgY29udmVyc2lvbiBzcGVjaWZpZXIgXCIlY1wiIiwgKmNwKSkpOwor CQl9CisKKwkJLyoKKwkJICogT2J0YWluIHRoZSBlbGVtZW50IHRvIGJlIGV4cGFuZGVkLgorCQkg Ki8KKwkJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJCWtleS52YWwuc3RyaW5nLnZhbCA9IHBhcmFt OworCQlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ocGFyYW0pOworCisJCXZhbHVlID0gZmlu ZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgSkJfRk9CSkVDVCwgJmtleSk7CisK KwkJLyogVmFsaWRhdGUgdGhhdCB3ZSBnb3QgYW4gYXJyYXkgaWYgdGhlIGZvcm1hdCBzdHJpbmcg c3BlY2lmaWVkIG9uZS4gKi8KKworCQkvKiBBbmQgZmluYWxseSBwcmludCBvdXQgdGhlIGRhdGEg Ki8KKwkJaWYgKGlzX2FycmF5KQorCQkJZXhwYW5kX2pzb25iX2FycmF5KG91dCwgcGFyYW0sIHZh bHVlLCBhcnJheXNlcCwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCQllbHNlCisJCQlleHBhbmRf b25lX2pzb25iX2VsZW1lbnQob3V0LCBwYXJhbSwgdmFsdWUsIHNwZWNpZmllciwgc3RhcnRfcHRy KTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGFuIGlkZW50aWZpZXIu ICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQKK2V4 cGFuZF9qc29udmFsX2lkZW50aWZpZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252 YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2U3Ry aW5nKTsKKworCXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLAorCQkJCSAg IGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg cXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOworfQorCisvKgorICogRXhwYW5k IGEganNvbiB2YWx1ZSBhcyBhIGRvdC1zZXBhcmF0ZWQtbmFtZS4gIFRoZSB2YWx1ZSBtdXN0IGJl IG9mIHR5cGUKKyAqIG9iamVjdCBhbmQgbXVzdCBjb250YWluIGVsZW1lbnRzICJzY2hlbWFuYW1l IiAob3B0aW9uYWwpLCAib2JqbmFtZSIKKyAqIChtYW5kYXRvcnkpLCAiYXR0cm5hbWUiIChvcHRp b25hbCkuICBEb3VibGUgcXVvdGVzIGFyZSBhZGRlZCB0byBlYWNoIGVsZW1lbnQKKyAqIGFzIG5l Y2Vzc2FyeSwgYW5kIGRvdCBzZXBhcmF0b3JzIHdoZXJlIG5lZWRlZC4KKyAqCisgKiBPbmUgZGF5 IHdlIG1pZ2h0IG5lZWQgYSAiY2F0YWxvZyIgZWxlbWVudCBhcyB3ZWxsLCBidXQgbm8gY3VycmVu dCB1c2UgY2FzZQorICogbmVlZHMgdGhhdC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29u dmFsX2RvdHRlZG5hbWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJ Y2hhcgkgICAqc3RyOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNv bnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVM TCk7CisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVf aWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9CisKKwlzdHIgPSBmaW5kX3N0cmlu Z19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJ Im9iam5hbWUiLCBmYWxzZSwgTlVMTCk7CisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHF1 b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJcGZyZWUoc3RyKTsKKworCXN0ciA9IGZpbmRfc3RyaW5n X2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQki YXR0cm5hbWUiLCB0cnVlLCBOVUxMKTsKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5m byhidWYsICIuJXMiLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0K K30KKworLyoKKyAqIGV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSB0eXBlIG5hbWUuCisgKi8KK3N0 YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF90eXBlbmFtZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJW YWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzY2hlbWEgPSBOVUxMOworCWNoYXIJICAgKnR5 cGVuYW1lOworCWNoYXIJICAgKnR5cG1vZHN0cjsKKwl0cml2YWx1ZQlpc19hcnJheTsKKwljaGFy CSAgICphcnJheV9kZWNvcjsKKworCS8qCisJICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWluZyB0 aGUgb3V0cHV0IG5hbWUgaWYgdGhlIHNjaGVtYSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRoZSBl bXB0eSBzdHJpbmcgb3IgTlVMTDsgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gY2Fz ZXMKKwkgKiBpcyB0aGF0IGluIHRoZSBsYXR0ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4g dGhlIGZvcm1lciB3ZSBkb24ndC4KKwkgKiBUaGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBzcGVj aWFsIHR5cG1vZCBuZWVkcywgc3VjaCBhcyBpbnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNl ZSBmb3JtYXRfdHlwZV9kZXRhaWxlZCksIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcK KwkgKiBmb3IgdGhlIHNjaGVtYSBuYW1lIHRvIGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRo YXQgcmVxdWlyZSBxdW90ZXMKKwkgKiBidXQgYXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1c2Vy IHNjaGVtYS4KKwkgKi8KKworCXNjaGVtYSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVy KGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAic2NoZW1hbmFtZSIsIHRy dWUsIE5VTEwpOworCXR5cGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNv bnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgInR5cGVuYW1lIiwgZmFsc2UsIE5V TEwpOworCXR5cG1vZHN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwt PnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAidHlwbW9kIiwgdHJ1ZSwgTlVMTCk7CisJ aXNfYXJyYXkgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFy eS5kYXRhLAorCQkJCQkJCQkJCSAgICJ0eXBhcnJheSIpOworCXN3aXRjaCAoaXNfYXJyYXkpCisJ eworCQlkZWZhdWx0OgorCQljYXNlIHR2X2Fic2VudDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNn KCJtaXNzaW5nIHR5cGFycmF5IGVsZW1lbnQiKSkpOworCQkJYnJlYWs7CisJCWNhc2UgdHZfdHJ1 ZToKKwkJCWFycmF5X2RlY29yID0gIltdIjsKKwkJCWJyZWFrOworCQljYXNlIHR2X2ZhbHNlOgor CQkJYXJyYXlfZGVjb3IgPSAiIjsKKwkJCWJyZWFrOworCX0KKworCWlmIChzY2hlbWEgPT0gTlVM TCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzJXMiLAorCQkJCQkJIHF1b3RlX2lkZW50 aWZpZXIodHlwZW5hbWUpLAorCQkJCQkJIHR5cG1vZHN0ciA/IHR5cG1vZHN0ciA6ICIiLAorCQkJ CQkJIGFycmF5X2RlY29yKTsKKwllbHNlIGlmIChzY2hlbWFbMF0gPT0gJ1wwJykKKwkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIlcyVzJXMiLAorCQkJCQkJIHR5cGVuYW1lLAorCQkJCQkJIHR5cG1v ZHN0ciA/IHR5cG1vZHN0ciA6ICIiLAorCQkJCQkJIGFycmF5X2RlY29yKTsKKwllbHNlCisJCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuJXMlcyVzIiwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVy KHNjaGVtYSksCisJCQkJCQkgcXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSksCisJCQkJCQkgdHlw bW9kc3RyID8gdHlwbW9kc3RyIDogIiIsCisJCQkJCQkgYXJyYXlfZGVjb3IpOworfQorCisvKgor ICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhbiBvcGVyYXRvciBuYW1lCisgKi8KK3N0YXRpYyB2 b2lkCitleHBhbmRfanNvbnZhbF9vcGVyYXRvcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAq anNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29u YmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5h bWUiLCB0cnVlLCBOVUxMKTsKKwkvKiBzY2hlbWEgbWlnaHQgYmUgTlVMTCBvciBlbXB0eSAqLwor CWlmIChzdHIgIT0gTlVMTCAmJiBzdHJbMF0gIT0gJ1wwJykKKwkJYXBwZW5kU3RyaW5nSW5mbyhi dWYsICIlcy4iLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCisJc3RyID0gZmluZF9zdHJpbmdf aW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJv YmpuYW1lIiwgZmFsc2UsIE5VTEwpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHIp OworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHN0cmluZy4gIFRoZSB2YWx1 ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG9mCisgKiB0eXBlIG9iamVjdC4gIEluIHRoZSBs YXR0ZXIgY2FzZSBpdCBtdXN0IGNvbnRhaW4gYSAiZm10IiBlbGVtZW50IHdoaWNoIHdpbGwKKyAq IGJlIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkOyBhbHNvLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGFu IGVsZW1lbnQgInByZXNlbnQiCisgKiBhbmQgaXQgaXMgc2V0IHRvIGZhbHNlLCB0aGUgZXhwYW5z aW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcuCisgKgorICogUmV0dXJucyBmYWxzZSBpZiBubyBhY3R1 YWwgZXhwYW5zaW9uIHdhcyBtYWRlIGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5n IHNldCB0byAiZmFsc2UiLgorICovCitzdGF0aWMgYm9vbAorZXhwYW5kX2pzb252YWxfc3RyaW5n KFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWlmIChqc29udmFsLT50 eXBlID09IGpidlN0cmluZykKKwl7CisJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oYnVmLCBqc29u dmFsLT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkgICBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7 CisJfQorCWVsc2UgaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2QmluYXJ5KQorCXsKKwkJdHJpdmFs dWUJcHJlc2VudDsKKworCQlwcmVzZW50ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpz b252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAicHJlc2VudCIpOworCQkvKgor CQkgKiBJZiAicHJlc2VudCIgaXMgc2V0IHRvIGZhbHNlLCB0aGlzIGVsZW1lbnQgZXhwYW5kcyB0 byBlbXB0eTsKKwkJICogb3RoZXJ3aXNlIChlaXRoZXIgdHJ1ZSBvciBhYnNlbnQpLCBmYWxsIHRo cm91Z2ggdG8gZXhwYW5kICJmbXQiLgorCQkgKi8KKwkJaWYgKHByZXNlbnQgPT0gdHZfZmFsc2Up CisJCQlyZXR1cm4gZmFsc2U7CisKKwkJZXhwYW5kX2ZtdF9yZWN1cnNpdmUoanNvbnZhbC0+dmFs LmJpbmFyeS5kYXRhLCBidWYpOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEV4cGFu ZCBhIGpzb24gdmFsdWUgYXMgYSBzdHJpbmcgbGl0ZXJhbAorICovCitzdGF0aWMgdm9pZAorZXhw YW5kX2pzb252YWxfc3RybGl0KFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQor eworCWNoYXIgICAqc3RyOworCVN0cmluZ0luZm9EYXRhIGRxZGVsaW07CisJc3RhdGljIGNvbnN0 IGNoYXIgZHFzdWZmaXhlc1tdID0gIl9YWVpaWVhfIjsKKwlpbnQgICAgICAgICBkcW5leHRjaGFy ID0gMDsKKworCXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFs LT52YWwuc3RyaW5nLmxlbik7CisKKwkvKiBlYXN5IGNhc2U6IGlmIHRoZXJlIGFyZSBubyAnIGFu ZCBubyBcLCBqdXN0IHVzZSBhIHNpbmdsZSBxdW90ZSAqLworCWlmIChzdHJjaHIoc3RyLCAnXCcn KSA9PSBOVUxMICYmCisJCXN0cmNocihzdHIsICdcXCcpID09IE5VTEwpCisJeworCQlhcHBlbmRT dHJpbmdJbmZvKGJ1ZiwgIiclcyciLCBzdHIpOworCQlwZnJlZShzdHIpOworCQlyZXR1cm47CisJ fQorCisJLyogT3RoZXJ3aXNlIG5lZWQgdG8gZmluZCBhIHVzZWZ1bCBkb2xsYXItcXVvdGUgZGVs aW1pdGVyICovCisJaW5pdFN0cmluZ0luZm8oJmRxZGVsaW0pOworCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmRxZGVsaW0sICIkIik7CisJd2hpbGUgKHN0cnN0cihzdHIsIGRxZGVsaW0uZGF0YSkg IT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRlbGltLCBkcXN1ZmZpeGVz W2RxbmV4dGNoYXIrK10pOworCQlkcW5leHRjaGFyICU9IHNpemVvZihkcXN1ZmZpeGVzKSAtIDE7 CisJfQorCS8qIGFkZCB0cmFpbGluZyAkICovCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVs aW0sICckJyk7CisKKwkvKiBBbmQgZmluYWxseSBwcm9kdWNlIHRoZSBxdW90ZWQgbGl0ZXJhbCBp bnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyAqLworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMl cyVzIiwgZHFkZWxpbS5kYXRhLCBzdHIsIGRxZGVsaW0uZGF0YSk7CisJcGZyZWUoZHFkZWxpbS5k YXRhKTsKKwlwZnJlZShzdHIpOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBh biBpbnRlZ2VyIHF1YW50aXR5CisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9udW1i ZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhciAqc3RyZGF0 dW07CisKKwlzdHJkYXR1bSA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKG51 bWVyaWNfb3V0LAorCQkJCQkJCQkJCQkJICAgTnVtZXJpY0dldERhdHVtKGpzb252YWwtPnZhbC5u dW1lcmljKSkpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHJkYXR1bSk7Cit9CisK Ky8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgcm9sZSBuYW1lLiAgSWYgdGhlIGlzX3B1 YmxpYyBlbGVtZW50IGlzIHNldCB0bworICogdHJ1ZSwgUFVCTElDIGlzIGV4cGFuZGVkIChubyBx dW90ZXMpOyBvdGhlcndpc2UsIGV4cGFuZCB0aGUgZ2l2ZW4gcm9sZSBuYW1lLAorICogcXVvdGlu ZyBhcyBhbiBpZGVudGlmaWVyLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfcm9s ZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwl0cml2YWx1ZQlpc19w dWJsaWM7CisKKwlpc19wdWJsaWMgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZh bC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkiaXNfcHVibGljIik7CisJaWYgKGlzX3B1 YmxpYyA9PSB0dl90cnVlKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlBVQkxJQyIp OworCWVsc2UKKwl7CisJCWNoYXIgKnJvbGVuYW1lOworCisJCXJvbGVuYW1lID0gZmluZF9zdHJp bmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJ CQkJICJyb2xlbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhi dWYsIHF1b3RlX2lkZW50aWZpZXIocm9sZW5hbWUpKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQg b25lIGpzb24gZWxlbWVudCBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBhY2NvcmRpbmcgdG8g dGhlCisgKiBjb252ZXJzaW9uIHNwZWNpZmllci4gIFRoZSBlbGVtZW50IHR5cGUgaXMgdmFsaWRh dGVkLCBhbmQgYW4gZXJyb3IgaXMgcmFpc2VkCisgKiBpZiBpdCBkb2Vzbid0IG1hdGNoIHdoYXQg d2UgZXhwZWN0IGZvciB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIuCisgKgorICogUmV0dXJucyBm YWxzZSBpZiBubyBhY3R1YWwgZXhwYW5zaW9uIHdhcyBtYWRlIChkdWUgdG8gdGhlICJwcmVzZW50 IiBmbGFnCisgKiBiZWluZyBzZXQgdG8gImZhbHNlIiBpbiBmb3JtYXR0ZWQgc3RyaW5nIGV4cGFu c2lvbikuCisgKi8KK3N0YXRpYyBib29sCitleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5n SW5mbyBvdXQsIGNoYXIgKnBhcmFtLCBKc29uYlZhbHVlICpqc29udmFsLAorCQkJCQkJIGNvbnZT cGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpCit7CisJYm9vbCByZXN1bHQgPSB0 cnVlOworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisKKwkvKiBJZiB3ZSB3 ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQgY2Fs bGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3FsZXJyY29udGV4dC5jYWxsYmFjayA9IGZtdHN0 cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29udGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJ CXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCQllcnJvcl9j b250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisJfQorCisJaWYgKCFqc29udmFsKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIG5vdCBmb3VuZCIsIHBhcmFtKSkpOwor CisJc3dpdGNoIChzcGVjaWZpZXIpCisJeworCQljYXNlIFNwZWNJZGVudGlmaWVyOgorCQkJaWYg KGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co ImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUkgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJ CQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfaWRlbnRp ZmllcihvdXQsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjRG90dGVkTmFtZToK KwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkg ZXJybXNnKCJleHBlY3RlZCBKU09OIG9iamVjdCBmb3IgJSVEIGVsZW1lbnQgXCIlc1wiLCBnb3Qg JWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFs X2RvdHRlZG5hbWUob3V0LCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmlu ZzoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZyAmJgorCQkJCWpzb252YWwtPnR5 cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpT T04gc3RyaW5nIG9yIG9iamVjdCBmb3IgJSVzIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJ CQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCXJlc3VsdCA9IGV4cGFuZF9qc29udmFs X3N0cmluZyhvdXQsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nTGl0 ZXJhbDoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBmb3IgJSVMIGVsZW1lbnQgXCIlc1wi LCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9q c29udmFsX3N0cmxpdChvdXQsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjVHlw ZW5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAor CQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlVCBlbGVtZW50IFwiJXNc IiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRf anNvbnZhbF90eXBlbmFtZShvdXQsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVj T3BlcmF0b3JuYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJU8gZWxlbWVu dCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJ ZXhwYW5kX2pzb252YWxfb3BlcmF0b3Iob3V0LCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNh c2UgU3BlY051bWJlcjoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBudW1lcmljIGZvciAlJW4gZWxl bWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOwor CQkJZXhwYW5kX2pzb252YWxfbnVtYmVyKG91dCwganNvbnZhbCk7CisJCQlicmVhazsKKworCQlj YXNlIFNwZWNSb2xlOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJVIgZWxlbWVu dCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJ ZXhwYW5kX2pzb252YWxfcm9sZShvdXQsIGpzb252YWwpOworCQkJYnJlYWs7CisJfQorCisJaWYg KGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7CisK KwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogSXRlcmF0ZSBvbiB0aGUgZWxlbWVudHMgb2Yg YSBKU09OIGFycmF5LCBleHBhbmRpbmcgZWFjaCBvbmUgaW50byB0aGUgb3V0cHV0CisgKiBTdHJp bmdJbmZvIHBlciB0aGUgZ2l2ZW4gY29udmVyc2lvbiBzcGVjaWZpZXIsIHNlcGFyYXRlZCBieSB0 aGUgZ2l2ZW4KKyAqIHNlcGFyYXRvci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29uYl9h cnJheShTdHJpbmdJbmZvIG91dCwgY2hhciAqcGFyYW0sCisJCQkJICAgSnNvbmJWYWx1ZSAqanNv bmFyciwgY2hhciAqYXJyYXlzZXAsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCSAgIGNv bnN0IGNoYXIgKmZtdCkKK3sKKwlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJjb250ZXh0Owor CUpzb25iQ29udGFpbmVyICpjb250YWluZXI7CisJSnNvbmJJdGVyYXRvciAgKml0OworCUpzb25i VmFsdWUJdjsKKwlpbnQJCQl0eXBlOworCXNpemVfdAkJYXJyYXlzZXBsZW47CisJYm9vbAkJZmly c3QgPSB0cnVlOworCisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNldHVw IGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZtdCkKKwl7CisJCXNxbGVy cmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7CisJCXNxbGVycmNvbnRl eHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3Jf Y29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0Owor CX0KKworCWlmIChqc29uYXJyLT50eXBlICE9IGpidkJpbmFyeSkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJy bXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwlj b250YWluZXIgPSBqc29uYXJyLT52YWwuYmluYXJ5LmRhdGE7CisJaWYgKChjb250YWluZXItPmhl YWRlciAmIEpCX0ZBUlJBWSkgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwi JXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwlhcnJheXNlcGxlbiA9IHN0 cmxlbihhcnJheXNlcCk7CisKKwlpdCA9IEpzb25iSXRlcmF0b3JJbml0KGNvbnRhaW5lcik7CisJ d2hpbGUgKCh0eXBlID0gSnNvbmJJdGVyYXRvck5leHQoJml0LCAmdiwgdHJ1ZSkpICE9IFdKQl9E T05FKQorCXsKKwkJc3dpdGNoICh0eXBlKQorCQl7CisJCQljYXNlIFdKQl9FTEVNOgorCQkJCWlm ICghZmlyc3QpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcob3V0LCBhcnJheXNlcCk7CisK KwkJCQlpZiAoZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KG91dCwgcGFyYW0sICZ2LCBzcGVjaWZp ZXIsIE5VTEwpKQorCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlm ICghZmlyc3QpCisJCQkJCXsKKwkJCQkJCS8qIHJlbW92ZSB0aGUgYXJyYXkgc2VwYXJhdG9yICov CisJCQkJCQlvdXQtPmxlbiAtPSBhcnJheXNlcGxlbjsKKwkJCQkJCW91dC0+ZGF0YVtvdXQtPmxl bl0gPSAnXDAnOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZt dCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7Cit9CisK K2NoYXIgKgorZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcoY2hhciAqanNvbl9zdHIpCit7CisJ RGF0dW0JCWQ7CisJSnNvbmIJICAgKmpzb25iOworCVN0cmluZ0luZm8gb3V0ID0gKFN0cmluZ0lu Zm8pIHBhbGxvYzAoc2l6ZW9mKFN0cmluZ0luZm9EYXRhKSk7CisKKwlpbml0U3RyaW5nSW5mbyhv dXQpOworCisJZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sCisJCQkJCQkJUG9pbnRl ckdldERhdHVtKGpzb25fc3RyKSk7CisJanNvbmIgPSAoSnNvbmIgKikgRGF0dW1HZXRQb2ludGVy KGQpOworCisJZXhwYW5kX2ZtdF9yZWN1cnNpdmUoJmpzb25iLT5yb290LCBvdXQpOworCisJcmV0 dXJuIG91dC0+ZGF0YTsKK30KKworLyotLS0tLS0KKyAqIFJldHVybnMgYSBmb3JtYXR0ZWQgc3Ry aW5nIGZyb20gYSBKU09OIG9iamVjdC4KKyAqCisgKiBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgdGhl IGVsZW1lbnQgbmFtZWQgImZtdCIgKHdoaWNoIG11c3QgYmUgYSBzdHJpbmcpLgorICogVGhpcyBm b3JtYXQgc3RyaW5nIG1heSBjb250YWluIHplcm8gb3IgbW9yZSAlLWVzY2FwZXMsIHdoaWNoIGNv bnNpc3Qgb2YgYW4KKyAqIGVsZW1lbnQgbmFtZSBlbmNsb3NlZCBpbiB7IH0sIHBvc3NpYmx5IGZv bGxvd2VkIGJ5IGEgY29udmVyc2lvbiBtb2RpZmllciwKKyAqIGZvbGxvd2VkIGJ5IGEgY29udmVy c2lvbiBzcGVjaWZpZXIuCVBvc3NpYmxlIGNvbnZlcnNpb24gc3BlY2lmaWVycyBhcmU6CisgKgor ICogJQkJZXhwYW5kIHRvIGEgbGl0ZXJhbCAlLgorICogSQkJZXhwYW5kIGFzIGEgc2luZ2xlLCBu b24tcXVhbGlmaWVkIGlkZW50aWZpZXIKKyAqIEQJCWV4cGFuZCBhcyBhIHBvc3NpYmx5LXF1YWxp ZmllZCBpZGVudGlmaWVyCisgKiBUCQlleHBhbmQgYXMgYSB0eXBlIG5hbWUKKyAqIE8JCWV4cGFu ZCBhcyBhbiBvcGVyYXRvciBuYW1lCisgKiBMCQlleHBhbmQgYXMgYSBzdHJpbmcgbGl0ZXJhbCAo cXVvdGUgdXNpbmcgc2luZ2xlIHF1b3RlcykKKyAqIHMJCWV4cGFuZCBhcyBhIHNpbXBsZSBzdHJp bmcgKG5vIHF1b3RpbmcpCisgKiBuCQlleHBhbmQgYXMgYSBzaW1wbGUgbnVtYmVyIChubyBxdW90 aW5nKQorICogUgkJZXhwYW5kIGFzIGEgcm9sZSBuYW1lIChwb3NzaWJseSBxdW90ZWQgbmFtZSwg b3IgUFVCTElDKQorICoKKyAqIFRoZSBlbGVtZW50IG5hbWUgbWF5IGhhdmUgYW4gb3B0aW9uYWwg c2VwYXJhdG9yIHNwZWNpZmljYXRpb24gcHJlY2VkZWQKKyAqIGJ5IGEgY29sb24uCUl0cyBwcmVz ZW5jZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBleHBlY3RlZCB0byBiZQorICogYW4g YXJyYXk7IHRoZSBzcGVjaWZpZWQgc2VwYXJhdG9yIGlzIHVzZWQgdG8gam9pbiB0aGUgYXJyYXkg ZWxlbWVudHMuCisgKi0tLS0tLQorICovCitEYXR1bQorZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1h bmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICpqc29uID0gUEdfR0VUQVJHX1RFWFRf UCgwKTsKKwljaGFyCSAgICpqc29uX3N0cjsKKworCWpzb25fc3RyID0gVGV4dERhdHVtR2V0Q1N0 cmluZyhqc29uKTsKKworCVBHX1JFVFVSTl9URVhUX1AoQ1N0cmluZ0dldFRleHREYXR1bShkZGxf ZGVwYXJzZV9qc29uX3RvX3N0cmluZyhqc29uX3N0cikpKTsKK30KKworLyoKKyAqIEVycm9yIGNv bnRleHQgY2FsbGJhY2sgZm9yIEpTT04gZm9ybWF0IHN0cmluZyBleHBhbnNpb24uCisgKgorICog UG9zc2libGUgaW1wcm92ZW1lbnQ6IGluZGljYXRlIHdoaWNoIGVsZW1lbnQgd2UncmUgZXhwYW5k aW5nLCBpZiBhcHBsaWNhYmxlCisgKi8KK3N0YXRpYyB2b2lkCitmbXRzdHJfZXJyb3JfY2FsbGJh Y2sodm9pZCAqYXJnKQoreworCWVycmNvbnRleHQoIndoaWxlIGV4cGFuZGluZyBmb3JtYXQgc3Ry aW5nIFwiJXNcIiIsIChjaGFyICopIGFyZyk7CisKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3NlcXVlbmNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmlu ZGV4IGRkZjIxOWIuLmNlMTYyMDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Nl cXVlbmNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMTY5OSw2 ICsxNjk5LDQwIEBAIHByb2Nlc3Nfb3duZWRfYnkoUmVsYXRpb24gc2VxcmVsLCBMaXN0ICpvd25l ZF9ieSwgYm9vbCBmb3JfaWRlbnRpdHkpCiAJCXJlbGF0aW9uX2Nsb3NlKHRhYmxlcmVsLCBOb0xv Y2spOwogfQogCisvKgorICogUmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMsIGRldGFpbGVkCisg Ki8KK0Zvcm1fcGdfc2VxdWVuY2VfZGF0YQorZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVu Y2VJZCkKK3sKKwlCdWZmZXIgICAgICBidWY7CisJU2VxVGFibGUgICAgZWxtOworCVJlbGF0aW9u ICAgIHNlcXJlbDsKKwlIZWFwVHVwbGVEYXRhIHNlcXR1cGxlOworCUZvcm1fcGdfc2VxdWVuY2Vf ZGF0YSBzZXE7CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHJldFNlcTsKKworCXJldFNlcSA9IHBh bGxvYyhzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJLyogb3BlbiBhbmQg QWNjZXNzU2hhcmVMb2NrIHNlcXVlbmNlICovCisJaW5pdF9zZXF1ZW5jZShzZXF1ZW5jZUlkLCAm ZWxtLCAmc2VxcmVsKTsKKworCWlmIChwZ19jbGFzc19hY2xjaGVjayhzZXF1ZW5jZUlkLCBHZXRV c2VySWQoKSwKKwkJCUFDTF9TRUxFQ1QgfCBBQ0xfVVBEQVRFIHwgQUNMX1VTQUdFKSAhPSBBQ0xD SEVDS19PSykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJ Q0lFTlRfUFJJVklMRUdFKSwKKwkJCQkJIGVycm1zZygicGVybWlzc2lvbiBkZW5pZWQgZm9yIHNl cXVlbmNlICVzIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzZXFyZWwpKSkpOwor CisJc2VxID0gcmVhZF9zZXFfdHVwbGUoc2VxcmVsLCAmYnVmLCAmc2VxdHVwbGUpOworCisJbWVt Y3B5KHJldFNlcSwgc2VxLCBzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJ VW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCXJlbGF0aW9uX2Nsb3NlKHNlcXJlbCwgTm9Mb2Nr KTsKKworCXJldHVybiByZXRTZXE7Cit9CiAKIC8qCiAgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1l dGVycyBpbiBhIGxpc3Qgb2YgdGhlIGZvcm0gY3JlYXRlZCBieSB0aGUgcGFyc2VyLgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IGMzOTM3YTYuLjJjNGJjZGMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcnVsZXV0aWxzLmMKQEAgLTIxNDMsNiArMjE0MywxNSBAQCBwZ19nZXRfY29uc3RyYWludGRl Zl9leHQoUEdfRlVOQ1RJT05fQVJHUykKIH0KIAogLyoKKyAqIEludGVybmFsIHZlcnNpb24gdGhh dCByZXR1cm5zIGRlZmluaXRpb24gb2YgYSBDT05TVFJBSU5UIGNvbW1hbmQKKyAqLworY2hhciAq CitwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKQor eworCXJldHVybiBwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxz ZSwgMCwgZmFsc2UpOworfQorCisvKgogICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMg YSBmdWxsIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBjb21tYW5kCiAgKi8KIGNoYXIg KgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggODdhYTU3MS4uOGFhNjM2YyAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0CkBAIC0xMTg4NCw1ICsxMTg4NCwxMCBAQAogICBwcm9uYW1lID0+ICdi cmluX21pbm1heF9tdWx0aV9zdW1tYXJ5X3NlbmQnLCBwcm92b2xhdGlsZSA9PiAncycsCiAgIHBy b3JldHR5cGUgPT4gJ2J5dGVhJywgcHJvYXJndHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRp X3N1bW1hcnknLAogICBwcm9zcmMgPT4gJ2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcg fSwKLQoreyBvaWQgPT4gJzQ2NDInLCBkZXNjciA9PiAnZGRsIGRlcGFyc2UnLAorICBwcm9uYW1l ID0+ICdkZGxfZGVwYXJzZV90b19qc29uJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2Fy Z3R5cGVzID0+ICdwZ19kZGxfY29tbWFuZCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfdG9fanNv bicgfSwKK3sgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2pzb24gdG8gc3RyaW5nJywKKyAgcHJv bmFtZSA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0 JywKKyAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX2V4cGFu ZF9jb21tYW5kJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVu Y2UuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKaW5kZXggOWRhMjMwMC4uMjg3 NTEwNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAorKysgYi9z cmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCkBAIC01NCw2ICs1NCw3IEBAIHR5cGVkZWYg c3RydWN0IHhsX3NlcV9yZWMKIGV4dGVybiBpbnQ2NCBuZXh0dmFsX2ludGVybmFsKE9pZCByZWxp ZCwgYm9vbCBjaGVja19wZXJtaXNzaW9ucyk7CiBleHRlcm4gRGF0dW0gbmV4dHZhbChQR19GVU5D VElPTl9BUkdTKTsKIGV4dGVybiBMaXN0ICpzZXF1ZW5jZV9vcHRpb25zKE9pZCByZWxpZCk7Citl eHRlcm4gRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIGdldF9zZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVl bmNlSWQpOwogCiBleHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVTZXF1ZW5jZShQYXJzZVN0YXRl ICpwc3RhdGUsIENyZWF0ZVNlcVN0bXQgKnN0bXQpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0 ZXJTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAqc3RtdCk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90Y29w L2RkbF9kZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzYzU1 ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApAQCAt MCwwICsxLDEyIEBACisjaWZuZGVmIERETF9ERVBBUlNFX0gKKyNkZWZpbmUgRERMX0RFUEFSU0Vf SAorCisjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKKworZXh0ZXJuIGNoYXIgKmRl cGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCk7CitleHRlcm4gY2hh ciAqZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcoY2hhciAqanNvbmIpOworZXh0ZXJuIGNoYXIg KmRlcGFyc2VfZHJvcF90YWJsZShjb25zdCBjaGFyICpvYmppZGVudGl0eSwgRHJvcEJlaGF2aW9y IGJlaGF2aW9yKTsKK2V4dGVybiBjaGFyICpkZXBhcnNlX2Ryb3Bfc2VxdWVuY2UoY29uc3QgY2hh ciAqb2JqaWRlbnRpdHksIERyb3BCZWhhdmlvciBiZWhhdmlvcik7CitleHRlcm4gY2hhciAqZGVw YXJzZV9kcm9wX3NjaGVtYShjb25zdCBjaGFyICpvYmppZGVudGl0eSwgRHJvcEJlaGF2aW9yIGJl aGF2aW9yKTsKKworI2VuZGlmCQkvKiBERExfREVQQVJTRV9IICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNl X3V0aWxpdHkuaAppbmRleCA5NGRlMTNkLi5iNTMyOTRiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91 dGlsaXR5LmgKQEAgLTYyLDYgKzYyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFu ZAogCQl7CiAJCQlPaWQJCQlvYmplY3RJZDsKIAkJCU9pZAkJCWNsYXNzSWQ7CisJCQlib29sCQly ZXdyaXRlOwogCQkJTGlzdAkgICAqc3ViY21kczsKIAkJfQkJCWFsdGVyVGFibGU7CiAKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv cnVsZXV0aWxzLmgKaW5kZXggN2Q0ODk3MS4uNDY3ZGU3YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvcnVsZXV0aWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgK QEAgLTI5LDYgKzI5LDcgQEAgZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMo T2lkIHJlbGlkLCBib29sIHByZXR0eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRjb25zdHJk ZWZfc3RyaW5nKE9pZCBwYXJ0aXRpb25JZCwgY2hhciAqYWxpYXNuYW1lKTsKIAogZXh0ZXJuIGNo YXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFpbnRJZCk7CitleHRl cm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNvbnN0cmFp bnRJZCk7CiBleHRlcm4gY2hhciAqZGVwYXJzZV9leHByZXNzaW9uKE5vZGUgKmV4cHIsIExpc3Qg KmRwY29udGV4dCwKIAkJCQkJCQkJYm9vbCBmb3JjZXByZWZpeCwgYm9vbCBzaG93aW1wbGljaXQp OwogZXh0ZXJuIExpc3QgKmRlcGFyc2VfY29udGV4dF9mb3IoY29uc3QgY2hhciAqYWxpYXNuYW1l LCBPaWQgcmVsaWQpOwotLSAKMi43LjIud2luZG93cy4xCgo= --_005_OS0PR01MB5716B1526C2EDA66907E733B94B39OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v9-0003-support-CREATE-TABLE-ASSELECT-INTO.patch" Content-Description: v9-0003-support-CREATE-TABLE-ASSELECT-INTO.patch Content-Disposition: attachment; filename="v9-0003-support-CREATE-TABLE-ASSELECT-INTO.patch"; size=14481; creation-date="Tue, 21 Jun 2022 12:16:00 GMT"; modification-date="Tue, 21 Jun 2022 12:19:13 GMT" Content-Transfer-Encoding: base64 RnJvbSBjYTExMGVlMjIwNmZkOWVhNDM4YjlkNmU0Y2QxNDIxM2VhODg4YTExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjEgSnVuIDIwMjIgMTY6Mjg6MjIgKzA4MDAKU3ViamVjdDogW1BBVENI XSBzdXBwb3J0IENSRUFURSBUQUJMRSBBU1NFTEVDVCBJTlRPCgpUaGUgbWFpbiBpZGVhIG9mIHJl cGxpY2F0aW5nIHRoZSBDUkVBVEUgVEFCTEUgQVMgaXMgdGhhdCB3ZSBkZXByYXNlIHRoZSBDUkVB VEUKVEFCTEUgQVMgaW50byBhIHNpbXBsZSBDUkVBVEUgVEFCTEUod2l0aG91dCBzdWJxdWVyeSkg Y29tbWFuZCBhbmQgV0FMIGxvZyBpdAphZnRlciBjcmVhdGluZyB0aGUgdGFibGUgYW5kIGJlZm9y ZSB3cml0aW5nIGRhdGEgaW50byB0aGUgdGFibGUgYW5kIHJlcGxpY2F0ZQp0aGUgaW5jb21pbmcg d3JpdGVzIGxhdGVyIGFzIG5vcm1hbCBJTlNFUlRzLiBJbiB0aGlzIGFwcG9yYWNoLCB3ZSBkb24n dCBleGVjdXRlCnRoZSBzdWJxdWVyeSBvbiBzdWJzY3JpYmVyIHNvIHRoYXQgZG9uJ3QgbmVlZCB0 byBtYWtlIHN1cmUgYWxsIHRoZSBvYmplY3RzCnJlZmVyZW5jZWQgaW4gdGhlIHN1YnF1ZXJ5IGFs c28gZXhpc3RzIGluIHN1YnNjcmliZXIuIEFuZCBUaGlzIGFwcHJvYWNoIHdvcmtzCmZvciBhbGwg a2luZCBvZiBjb21tYW5kcyhlLmcuIENSQUVURSBUQUJMRSBBUyBbU0VMRUNUXVtFWEVDVVRFXVtW QUxVRVNdKQoKSW50cm9kdWNpbmcgYSBuZXcgdHlwZSBvZiBldmVudCB0cmlnZ2VyICJ0YWJsZV9p bml0X3dyaXRlIi4gd2hpY2ggd291bGQgYmUgZmlyZWQKZm9yIENSRUFURSBUQUJMRSBBUy9TRUxF Q1QgSU5UTyBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgYW5kCmJlZm9yZSBhbnkgb3RoZXIgbW9k aWZpY2F0aW9uLiB3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGluIHRoZSB0YWJsZV9pbml0X3dyaXRl IGV2ZW50CnRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3RyaW5nLiBUaGUg d2Fsc2VuZGVyIHdpbGwgc2VuZCB0aGUKc3RyaW5nIHRvIHN1YnNjcmliZXIuIEFuZCBpbmNvbWlu ZyBJTlNFUlRzIHdpbGwgYWxzbyBiZSByZXBsaWNhdGVkLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2NyZWF0ZWFzLmMgICAgICAgIHwgIDEwICsrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYyAgICAgfCAgMTggKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jICAgfCAxNTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAgOSArKwogc3JjL2JhY2tlbmQvdGNv cC91dGlsaXR5LmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv ZXZ0Y2FjaGUuYyAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAg ICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oICAgfCAg IDQgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgfCAgIDkgKy0KIHNy Yy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAgICAgICAgIHwgICAzICstCiAxMCBmaWxlcyBj aGFuZ2VkLCAyMDcgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3Jl YXRlYXMuYwppbmRleCA5YWJiYjZiLi45ODllODk0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMK QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgogI2luY2x1 ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVhdGVhcy5oIgor I2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJjb21tYW5kcy9t YXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1ZGUgImNvbW1h bmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rhc19pbnRlcm5h bChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3UXVlcnkoaW50 b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFuZENvdW50ZXJJ bmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUgdHJpZ2dlciBm b3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28KKwkJICogdGhh dCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5IGNyZWF0ZWQg dGFibGUgaW4KKwkJICogdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlFdmVudFRyaWdn ZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFkZHIpOworCX0K IAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNl LmMKaW5kZXggZDg1M2Q0MS4uOTRkM2FhYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5j CkBAIC0yNDM5LDYgKzI0MzksMjEgQEAgcmVtb3ZlZCBmZWF0dXJlCiAJcmV0dXJuIGFsdGVyVGFi bGVTdG10OwogfQogCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10 KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpw YXJzZXRyZWU7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9DcmVhdGVUYWJsZUFzKTsKKwor CXBhcnNldHJlZSA9IGNtZC0+ZC5jdGFzLnJlYWxfY3JlYXRlOworCW9iamVjdElkID0gY21kLT5k LmN0YXMuYWRkcmVzcy5vYmplY3RJZDsKKworCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7Cit9CisKKwogLyoKICAqIEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2lt cGxlIGNvbW1hbmRzLgogICoKQEAgLTI1OTUsNiArMjYxMCw5IEBAIGRlcGFyc2VfdXRpbGl0eV9j b21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKIAkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKIAkJ CXRyZWUgPSBkZXBhcnNlX0FsdGVyVGFibGVTdG10KGNtZCk7CiAJCQlicmVhazsKKwkJY2FzZSBT Q1RfQ3JlYXRlVGFibGVBczoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KGNt ZCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGRl cGFyc2Ugbm9kZSB0eXBlICVkIiwgY21kLT50eXBlKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVu dF90cmlnZ2VyLmMKaW5kZXggYzNkOWFhYS4uYjNmMWI5YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuYwpAQCAtMTMzLDcgKzEzMyw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVh dGVFdmVudFRyaWdTdG10ICpzdG10KQogCWlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRs X2NvbW1hbmRfc3RhcnQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxf Y29tbWFuZF9lbmQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJv cCIpICE9IDAgJiYKLQkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAh PSAwKQorCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDAgJiYK KwkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSAhPSAwKQogCQll cmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkg ZXJybXNnKCJ1bnJlY29nbml6ZWQgZXZlbnQgbmFtZSBcIiVzXCIiLApAQCAtMTU5LDcgKzE2MCw4 IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCS8qIFZh bGlkYXRlIHRhZyBsaXN0LCBpZiBhbnkuICovCiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1l LCAiZGRsX2NvbW1hbmRfc3RhcnQiKSA9PSAwIHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1l LCAiZGRsX2NvbW1hbmRfZW5kIikgPT0gMCB8fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwg InNxbF9kcm9wIikgPT0gMCkKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIp ID09IDAgfHwKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikg PT0gMCkKIAkJJiYgdGFncyAhPSBOVUxMKQogCQl2YWxpZGF0ZV9kZGxfdGFncygidGFnIiwgdGFn cyk7CiAJZWxzZSBpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSA9 PSAwCkBAIC01ODYsNyArNTg4LDggQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFy c2V0cmVlLAogCQlkYmd0YWcgPSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CiAJCWlmIChl dmVudCA9PSBFVlRfRERMQ29tbWFuZFN0YXJ0IHx8CiAJCQlldmVudCA9PSBFVlRfRERMQ29tbWFu ZEVuZCB8fAotCQkJZXZlbnQgPT0gRVZUX1NRTERyb3ApCisJCQlldmVudCA9PSBFVlRfU1FMRHJv cCB8fAorCQkJZXZlbnQgPT0gRVZUX1RhYmxlSW5pdFdyaXRlKQogCQl7CiAJCQlpZiAoIWNvbW1h bmRfdGFnX2V2ZW50X3RyaWdnZXJfb2soZGJndGFnKSkKIAkJCQllbG9nKEVSUk9SLCAidW5leHBl Y3RlZCBjb21tYW5kIHRhZyBcIiVzXCIiLCBHZXRDb21tYW5kVGFnTmFtZShkYmd0YWcpKTsKQEAg LTg2OSw2ICs4NzIsMTQ0IEBAIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRy ZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNvbikKIAlDb21tYW5kQ291bnRlckluY3JlbWVudCgp OwogfQogCisKKy8qCisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0CisgKiAgICAg UHJlcGFyZSB0byByZWNlaXZlIGRhdGEgb24gYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVUIElOVE8g Y29tbWFuZCBhYm91dAorICogICAgIHRvIGJlIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRy aWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKK3sKKwlNZW1vcnlDb250 ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyogaWdub3JlIGlm IGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICov CisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsK KworCWNvbW1hbmQgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKworCWNvbW1h bmQtPnR5cGUgPSBTQ1RfQ3JlYXRlVGFibGVBczsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBj cmVhdGluZ19leHRlbnNpb247CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2Jq ZWN0QWRkcmVzczsKKwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1h bmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVu dCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2 ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdy aXRlRW5kCisgKgkJRmluaXNoIHVwIHNhdmluZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElO VE8gY29tbWFuZC4KKyAqCisgKiBGSVhNRSB0aGlzIEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUg cG9zc2liaWxpdHkgdGhhdCBhbiB4YWN0L3N1YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0 aHJvdWdoLiAgUHJvYmFibHkgaXQncyBiZXN0IHRvIGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZl bnRUcmlnZ2VycygpIHRvIGZpeCB0aGlzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUlu aXRXcml0ZUVuZCh2b2lkKQoreworCUNvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsKKworCS8qIGln bm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNh YmxlZCAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKwor CXBhcmVudCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBhcmVu dDsKKworCXBmcmVlKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOwor CisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKK30K KworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERl cGFyc2UgdGhlIGRkbCB0YWJsZSBjcmVhdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1 bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kOworCWNoYXIgICAgICAgICpqc29uX3N0cmluZzsK KworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwg Im5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCWNtZCA9IGN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJQXNzZXJ0KGNtZCk7CisKKwkvKiBE ZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBv ZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNt ZCk7CisKKwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJTG9nTG9naWNhbERETE1lc3NhZ2Uo ImRlcGFyc2UiLCBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQsIERDVF9TaW1wbGVDbWQs CisJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisKKwlyZXR1 cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgorICogRmlyZSB0YWJsZV9pbml0X3Jl d3JpdGUgdHJpZ2dlcnMuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlKE5v ZGUgKnJlYWxfY3JlYXRlLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCit7CisJTGlzdAkgICAqcnVu bGlzdDsKKwlFdmVudFRyaWdnZXJEYXRhIHRyaWdkYXRhOworCUNvbGxlY3RlZENvbW1hbmQgKmNv bW1hbmQ7CisKKwkvKgorCSAqIFNlZSBFdmVudFRyaWdnZXJERExDb21tYW5kU3RhcnQgZm9yIGEg ZGlzY3Vzc2lvbiBhYm91dCB3aHkgZXZlbnQKKwkgKiB0cmlnZ2VycyBhcmUgZGlzYWJsZWQgaW4g c2luZ2xlIHVzZXIgbW9kZS4KKwkgKi8KKwlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQorCQlyZXR1 cm47CisKKwkvKgorCSAqIEFsc28gZG8gbm90aGluZyBpZiBvdXIgc3RhdGUgaXNuJ3Qgc2V0IHVw LCB3aGljaCBpdCB3b24ndCBiZSBpZiB0aGVyZQorCSAqIHdlcmVuJ3QgYW55IHJlbGV2YW50IGV2 ZW50IHRyaWdnZXJzIGF0IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBEREwKKwkgKiBjb21tYW5k LiAgVGhpcyB0ZXN0IG1pZ2h0IHRoZXJlZm9yZSBzZWVtIG9wdGlvbmFsLCBidXQgaXQncworCSAq ICpuZWNlc3NhcnkqLCBiZWNhdXNlIEV2ZW50VHJpZ2dlckNvbW1vblNldHVwIG1pZ2h0IGZpbmQg dHJpZ2dlcnMgdGhhdAorCSAqIGRpZG4ndCBleGlzdCBhdCB0aGUgdGltZSB0aGUgY29tbWFuZCBz dGFydGVkLgorCSAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlKQorCQlyZXR1cm47 CisKKwljb21tYW5kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsK KworCXJ1bmxpc3QgPSBFdmVudFRyaWdnZXJDb21tb25TZXR1cChjb21tYW5kLT5wYXJzZXRyZWUs CisJCQkJCQkJCQkgIEVWVF9UYWJsZUluaXRXcml0ZSwKKwkJCQkJCQkJCSAgInRhYmxlX2luaXRf d3JpdGUiLAorCQkJCQkJCQkJICAmdHJpZ2RhdGEpOworCWlmIChydW5saXN0ID09IE5JTCkKKwkJ cmV0dXJuOworCisJLyogU2V0IHRoZSByZWFsIENyZWF0ZVRhYmxlIHN0YXRtZW50IGFuZCBvYmpl Y3QgYWRkcmVzcyAqLworCWNvbW1hbmQtPmQuY3Rhcy5yZWFsX2NyZWF0ZSA9IHJlYWxfY3JlYXRl OworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNzID0gYWRkcmVzczsKKworCS8qIFJ1biB0aGUgdHJp Z2dlcnMuICovCisJRXZlbnRUcmlnZ2VySW52b2tlKHJ1bmxpc3QsICZ0cmlnZGF0YSk7CisKKwkv KiBDbGVhbnVwLiAqLworCWxpc3RfZnJlZShydW5saXN0KTsKKworCS8qCisJICogTWFrZSBzdXJl IGFueXRoaW5nIHRoZSBldmVudCB0cmlnZ2VycyBkaWQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBt YWluCisJICogY29tbWFuZC4KKwkgKi8KKwlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworfQor CiAvKgogICogSW52b2tlIGVhY2ggZXZlbnQgdHJpZ2dlciBpbiBhIGxpc3Qgb2YgZXZlbnQgdHJp Z2dlcnMuCiAgKi8KQEAgLTExNDksNyArMTI5MCw4IEBAIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVk ZWQodm9pZCkKIAkgKi8KIAlyZXR1cm4gbGlzdF9sZW5ndGgoRXZlbnRDYWNoZUxvb2t1cChFVlRf U1FMRHJvcCkpID4gMCB8fAogCQlsaXN0X2xlbmd0aChFdmVudENhY2hlTG9va3VwKEVWVF9UYWJs ZVJld3JpdGUpKSA+IDAgfHwKLQkJbGlzdF9sZW5ndGgoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERM Q29tbWFuZEVuZCkpID4gMDsKKwkJbGlzdF9sZW5ndGgoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERM Q29tbWFuZEVuZCkpID4gMCB8fAorCQlsaXN0X2xlbmd0aChFdmVudENhY2hlTG9va3VwKEVWVF9U YWJsZUluaXRXcml0ZSkpID4gMDsKIH0KIAogLyoKQEAgLTE4NzMsNiArMjAxNSw3IEBAIHBnX2V2 ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQljYXNlIFNDVF9B bHRlck9wRmFtaWx5OgogCQkJY2FzZSBTQ1RfQ3JlYXRlT3BDbGFzczoKIAkJCWNhc2UgU0NUX0Fs dGVyVFNDb25maWc6CisJCQljYXNlIFNDVF9DcmVhdGVUYWJsZUFzOgogCQkJCXsKIAkJCQkJY2hh cgkgICAqaWRlbnRpdHk7CiAJCQkJCWNoYXIJICAgKnR5cGU7CkBAIC0xODkwLDYgKzIwMzMsOCBA QCBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQkJ YWRkciA9IGNtZC0+ZC5jcmVhdGVvcGMuYWRkcmVzczsKIAkJCQkJZWxzZSBpZiAoY21kLT50eXBl ID09IFNDVF9BbHRlclRTQ29uZmlnKQogCQkJCQkJYWRkciA9IGNtZC0+ZC5hdHNjZmcuYWRkcmVz czsKKwkJCQkJZWxzZSBpZiAoY21kLT50eXBlID09IFNDVF9BbHRlclRTQ29uZmlnKQorCQkJCQkJ YWRkciA9IGNtZC0+ZC5jdGFzLmFkZHJlc3M7CiAKIAkJCQkJLyoKIAkJCQkJICogSWYgYW4gb2Jq ZWN0IHdhcyBkcm9wcGVkIGluIHRoZSBzYW1lIGNvbW1hbmQgd2UgbWF5IGVuZApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCBjMzZiOGE3Li5lZGE1OTk1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtOTYzLDYgKzk2MywxMSBAQCBDcmVh dGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAq c3RtdCkKIAkJCUNNRFRBR19EUk9QX1NDSEVNQQogCQl9OwogCisJCUNvbW1hbmRUYWcJaW5pdF9j b21tYW5kc1tdID0geworCQkJQ01EVEFHX0NSRUFURV9UQUJMRV9BUywKKwkJCUNNRFRBR19TRUxF Q1RfSU5UTworCQl9OworCiAJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRy aWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5k IiwgZW5kX2NvbW1hbmRzLAogCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2Vs ZiwgcHVib2lkKTsKQEAgLTk3NCw2ICs5NzksMTAgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VT dGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCS8qIENyZWF0ZSB0 aGUgdGFibGVfcmV3cml0ZSBldmVudCB0cmlnZ2VyICovCiAJCUNyZWF0ZURETFJlcGxpY2FFdmVu dFRyaWdnZXIoInRhYmxlX3Jld3JpdGUiLCByZXdyaXRlX2NvbW1hbmRzLAogCQkJCQkJCQkJIGxl bmd0aG9mKHJld3JpdGVfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRl IHRoZSB0YWJsZV9pbml0X3dyaXRlIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGlj YUV2ZW50VHJpZ2dlcigidGFibGVfaW5pdF93cml0ZSIsIGluaXRfY29tbWFuZHMsCisJCQkJCQkJ CQkgbGVuZ3Rob2YoaW5pdF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKIAl9CiAKIAl0YWJs ZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dGNvcC91dGlsaXR5LmMgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCA2YTViY2Rl Li40ZDAwM2RlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9z cmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtMTY2NSw4ICsxNjY1LDEwIEBAIFByb2Nlc3NV dGlsaXR5U2xvdyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgVF9D cmVhdGVUYWJsZUFzU3RtdDoKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KHBh cnNldHJlZSk7CiAJCQkJYWRkcmVzcyA9IEV4ZWNDcmVhdGVUYWJsZUFzKHBzdGF0ZSwgKENyZWF0 ZVRhYmxlQXNTdG10ICopIHBhcnNldHJlZSwKIAkJCQkJCQkJCQkJcGFyYW1zLCBxdWVyeUVudiwg cWMpOworCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKCk7CiAJCQkJYnJlYWs7CiAK IAkJCWNhc2UgVF9SZWZyZXNoTWF0Vmlld1N0bXQ6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9ldnRjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUu YwppbmRleCAzYTljOWYwLi40NjdjZDY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9ldnRjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMK QEAgLTE2Nyw2ICsxNjcsOCBAQCBCdWlsZEV2ZW50VHJpZ2dlckNhY2hlKHZvaWQpCiAJCQlldmVu dCA9IEVWVF9TUUxEcm9wOwogCQllbHNlIGlmIChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9yZXdy aXRlIikgPT0gMCkKIAkJCWV2ZW50ID0gRVZUX1RhYmxlUmV3cml0ZTsKKwkJZWxzZSBpZiAoc3Ry Y21wKGV2dGV2ZW50LCAidGFibGVfaW5pdF93cml0ZSIpID09IDApCisJCQlldmVudCA9IEVWVF9U YWJsZUluaXRXcml0ZTsKIAkJZWxzZQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CmluZGV4IGJiOThjMTcuLjVmZTI4YzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAt MTE4OTksNCArMTE4OTksNyBAQAogeyBvaWQgPT4gJzQ2NDYnLCBkZXNjciA9PiAndHJpZ2dlciBm b3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSByZXdyaXRlJywKICAgcHJvbmFtZSA9PiAncHVi bGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJp Z2dlcicsCiAgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFy c2VfdGFibGVfcmV3cml0ZScgfSwKK3sgb2lkID0+ICc0NjQ3JywgZGVzY3IgPT4gJ3RyaWdnZXIg Zm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUgaW5pdCcsCisgIHByb25hbWUgPT4gJ3B1Ymxp Y2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3Ry aWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBh cnNlX3RhYmxlX2luaXRfd3JpdGUnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2Vy LmgKaW5kZXggZmQyZWU3Zi4uYTllMGY3MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuaApAQCAtNTUsNiArNTUsMTAgQEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRERMQ29tbWFu ZEVuZChOb2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyU1FMRHJvcChO b2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVSZXdyaXRlKE5v ZGUgKnBhcnNldHJlZSwgT2lkIHRhYmxlT2lkLCBpbnQgcmVhc29uKTsKIAorZXh0ZXJuIHZvaWQg RXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChOb2RlICpwYXJzZXRyZWUpOworZXh0ZXJu IHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPYmplY3RB ZGRyZXNzIGFkZHJlc3MpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVF bmQodm9pZCk7CisKIGV4dGVybiBib29sIEV2ZW50VHJpZ2dlckJlZ2luQ29tcGxldGVRdWVyeSh2 b2lkKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckVuZENvbXBsZXRlUXVlcnkodm9pZCk7CiBl eHRlcm4gYm9vbCB0cmFja0Ryb3BwZWRPYmplY3RzTmVlZGVkKHZvaWQpOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVw YXJzZV91dGlsaXR5LmgKaW5kZXggYjUzMjk0Yi4uM2QyOTRhMCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFy c2VfdXRpbGl0eS5oCkBAIC0yOSw3ICsyOSw4IEBAIHR5cGVkZWYgZW51bSBDb2xsZWN0ZWRDb21t YW5kVHlwZQogCVNDVF9BbHRlck9wRmFtaWx5LAogCVNDVF9BbHRlckRlZmF1bHRQcml2aWxlZ2Vz LAogCVNDVF9DcmVhdGVPcENsYXNzLAotCVNDVF9BbHRlclRTQ29uZmlnCisJU0NUX0FsdGVyVFND b25maWcsCisJU0NUX0NyZWF0ZVRhYmxlQXMKIH0gQ29sbGVjdGVkQ29tbWFuZFR5cGU7CiAKIC8q CkBAIC0xMDEsNiArMTAyLDEyIEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJ ewogCQkJT2JqZWN0VHlwZQlvYmp0eXBlOwogCQl9CQkJZGVmcHJpdnM7CisKKwkJc3RydWN0CisJ CXsKKwkJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJCU5vZGUJCSAqcmVhbF9jcmVhdGU7CisJ CX0JCQljdGFzOwogCX0JCQlkOwogCiAJc3RydWN0IENvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsJ Lyogd2hlbiBuZXN0ZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hl LmggYi9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCmluZGV4IGRkYjY3YTYuLjFlNjQ4MzEg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKKysrIGIvc3JjL2luY2x1 ZGUvdXRpbHMvZXZ0Y2FjaGUuaApAQCAtMjIsNyArMjIsOCBAQCB0eXBlZGVmIGVudW0KIAlFVlRf RERMQ29tbWFuZFN0YXJ0LAogCUVWVF9ERExDb21tYW5kRW5kLAogCUVWVF9TUUxEcm9wLAotCUVW VF9UYWJsZVJld3JpdGUKKwlFVlRfVGFibGVSZXdyaXRlLAorCUVWVF9UYWJsZUluaXRXcml0ZQog fSBFdmVudFRyaWdnZXJFdmVudDsKIAogdHlwZWRlZiBzdHJ1Y3QKLS0gCjIuNy4yLndpbmRvd3Mu MQoK --_005_OS0PR01MB5716B1526C2EDA66907E733B94B39OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v9-0004-Test-cases-for-DDL-replication.patch" Content-Description: v9-0004-Test-cases-for-DDL-replication.patch Content-Disposition: attachment; filename="v9-0004-Test-cases-for-DDL-replication.patch"; size=23037; creation-date="Tue, 21 Jun 2022 12:16:00 GMT"; modification-date="Tue, 21 Jun 2022 12:19:14 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_OS0PR01MB5716B1526C2EDA66907E733B94B39OS0PR01MB5716jpnp_--