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 1oxSbl-0006BH-SJ for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Nov 2022 12:42:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oxSbk-0002xk-Kg for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Nov 2022 12:42:36 +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 1oxSbj-0002xa-QJ for pgsql-hackers@lists.postgresql.org; Tue, 22 Nov 2022 12:42:36 +0000 Received: from esa14.fujitsucc.c3s2.iphmx.com ([68.232.156.101]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oxSbg-0001uD-Gf for pgsql-hackers@lists.postgresql.org; Tue, 22 Nov 2022 12:42:35 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1669120953; x=1700656953; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=UzxmqmQ4qIbMaHNwjzdgDhkKnPsk/XOHbr1Y3/itAis=; b=YEDmRhziC7e8tkrsKvdCTFgSJDTtUW48cpPz3tzS/fkSI/wfOpYtG6h7 LQuIRus/18vK/FFuNoQtp+/opNVznn5hRdpO8wMFK7FrzTvJAMxmtaKGV SOnAKdIskdI1LTi4hXY3kSRLJmHmnK0nMc7AphqY5fApX9vjiyqEvrSzT ZYYXLY7xgk2hUDntvEy29yv+mhHGPwEgSOl8l4cwQ6H+SiNESF4c7EcmA WGJ3BZAU3b4yo2zLR8Wx4tgy8U7+BsUpLXNZCmWEA+3mxmboF4UG6wxTj RwBpWQ+r7dA2AtcJ8g/1QiZsLOkH8MD5irAg+L2spQVygTjltxedX8Cfq Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="70397735" X-IronPort-AV: E=Sophos;i="5.96,184,1665414000"; d="scan'208,223";a="70397735" Received: from mail-os0jpn01lp2113.outbound.protection.outlook.com (HELO JPN01-OS0-obe.outbound.protection.outlook.com) ([104.47.23.113]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Nov 2022 21:42:29 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LN95gQH20sJFdIQe3FGnIk7nQBVAzwj/G6tR6bA1ppBYPkrNjoGfuk0Dxmkd8Ao+EIoNfr+UgsyODS2nmNxmb4iFxrVyxy4EysYIP4zUUfR0h5zY+2+iWlQsxi58Z8Prj/02okm3OohRQtF48ynVqCdL8HFPaScotUQzjOCh1lP0gtxk0/xgGdyQhXotpRS/i+KqJscgZwpYSnY2BwE4VeYfFgebpxoQ3WUltlV9mNUvnQjXBA57cDLRT9FxMVcY0WNiUNkKIh5ftszgB0FKkbb6eeaatq9bCVcfQWrhhP3ttj/e5rLbjs1Da/S+qFSDjyURL7FmkGDipPJrfhVfzQ== 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=j31OTHuylx+o8xz6XXqCnMC3gJlR1kdE71QrK8zEvgI=; b=SFoFlmflYEsPlsKFPEatB50juZDz7ydQJwrwyuC/a4fDXVMNr5vFkFNcon9sGJuvq0uhm8yiHONbJe16ZN28mtGMJU8IrSUcbb2btgC7knMjpY8zQTzv72hG5H8WfPSutNB6p05bncXp0SEEhm5SDDhcPKhk9vsEWxZuF2hXrL752z861zlyW4XJa7WIBBK/mIgMn9LT6FfIXjbnX5CbYu8g+mDWIin5SeY0kAeCwSFebv3sGcNizGR1dORHiFcyQAkcykjd98d4RMxEfjmvotbGa1ams5jpjbV67gfiY1lceGVI/yt7NfTLWUmARn3JfpXiudywS8ebK03PFWusvg== 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 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com (2603:1096:604:bb::12) by TYCPR01MB8679.jpnprd01.prod.outlook.com (2603:1096:400:15e::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.15; Tue, 22 Nov 2022 12:42:24 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::89a3:459e:492:7bcc]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::89a3:459e:492:7bcc%9]) with mapi id 15.20.5834.015; Tue, 22 Nov 2022 12:42:24 +0000 From: "houzj.fnst@fujitsu.com" To: Peter Smith CC: Amit Kapila , Masahiko Sawada , "wangw.fnst@fujitsu.com" , Dilip Kumar , "shiy.fnst@fujitsu.com" , PostgreSQL Hackers Subject: RE: Perform streaming logical transactions by background workers and parallel apply Thread-Topic: Perform streaming logical transactions by background workers and parallel apply Thread-Index: AQHYSXX5ZKpBKXxeUU2FhEhnmXQum6zlu9SQgAkSooCACBQ0gIABsTcwgAA1vECAAqHFgIAE/jVwgAXct9CAADkRgIALO/aAgAsRZICAB606AIAS+CyAgAAufICAAWQLgIABHxKAgAA3o4CAAeE3gIAJPr0AgAkxzACAAiJoAIAC0hUAgARvDICABQA2gIAAFvcAgAeBmICABO9ggIAJO+YAgABu1YCACQzpAIAJSy6AgAS+zICABq7mgIABSJUAgAAOtoCAACghoIAB8TqAgAqL+oCADJWRgIAGVm0AgAGAQICAAerMgIABYRWAgAgnZ+CAAXRdgIAGBUSQgAGFeoCAAFYagIABb5aggAGsWiCAATu3gIAEyyEAgABeLHCABFBngIAK5WIAgABrY4CABb89gIADiS0AgAEu2oCAAHBpgIADPWcAgAS/1gCADeB2AIAAPUnQgAEERACAABzggIAF+30AgAHyDYCAEzpGgIANkEmAgAI7xKCABhztAIAFv4zggABYqoCAABRMQIABvKAAgAS+5UCAAVlmEIACxK+AgAIepYCAAy1b4IABLamAgAB001A= Date: Tue, 22 Nov 2022 12:42:24 +0000 Message-ID: References: In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: =?utf-8?B?TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2Uw?= =?utf-8?B?NTBfQWN0aW9uSWQ9ZTIwMTIwZDUtZTgyNi00MWY5LWE5OGUtMmIzZTMzMjU5?= =?utf-8?B?ZmI0O01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX0NvbnRlbnRCaXRzPTA7TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5?= =?utf-8?B?LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfRW5hYmxlZD10cnVlO01TSVBfTGFi?= =?utf-8?B?ZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRmZWNlMDUwX01ldGhv?= =?utf-8?B?ZD1TdGFuZGFyZDtNU0lQX0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1hYjRk?= =?utf-8?B?LTNiMGY0ZmVjZTA1MF9OYW1lPUZVSklUU1UtUkVTVFJJQ1RFRO+/ou++gA==?= =?utf-8?B?776LO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX1NldERhdGU9MjAyMi0xMS0yMlQxMjoxNzo1Mlo7TVNJUF9MYWJl?= =?utf-8?B?bF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfU2l0ZUlk?= =?utf-8?Q?=3Da19f121d-81e1-4858-a9d8-736e267fd4c7;?= authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: OS0PR01MB5716:EE_|TYCPR01MB8679:EE_ x-ms-office365-filtering-correlation-id: 22a9869b-7db5-4ddc-8296-08dacc8701b8 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: SLEW5XoJeO1VodWwRBwLt+Jef+Oi4MhRkEQX21+biVChsBamRUMaqAZ5i6/pn/uBqYbNdoIDlveMOVIbVPbABQSVF6iLCakaSjqeb4QMNhcpJyHsG2aZfxQhplLLzI1CeXyzSMqskpesqm7o75doM0a1GPK5A1+he/F4e3HdckzdPtZ4EzhVVVxvGYDs8GGZ1pA9zr0Si7dEHin+B4FuX6pQfUyG7NXSSPCGv7TWRo3Ht+1FdV0fmc8+S+k9x6WEKdmVqhdOfy+6JbbGJRT5Md9t+4Ffoo46Wh+jgAbuJ6Ur6yKril3k0xb4a6XZHqL24D8LjpsNKZ4F4NLxDJCgb8hPZ0v/iDObvPUNEbl+CauT0MqAfB1UstHkKsUAJtcZSCkZRJUkiQSKMpu61YB3cvV3OY5SILGGwAuemNxgK/r2ny5WZsgpeI/HOj9cowJRZRSkrTgFlrph4HSn+AzUGXMGAo4Xbrs7H6Ku20a1qgSFo6KAlGc6jDmcXFftRvUTBT4lN2HFsAZms+r4MWcfYshNWXOTmnq9ayKgVoU/n1InYLL7Vnt7GxfhnTQDYHDNuale/LpFtbfVBmxGywcqoCxPACJ/TouO0fUX2wEBqH4i1z0n9PRgB5RBV6UwZlGM+zyLP/N39BwPkK3Xzy2oXEXupjH/EUwSRziJOsLZgXDVOfdcs46pYE0yYZSBBN6h4MhZZWYFV868qoAZLZPn8RpUs6njkKMQlBwH5Tyjh+d1rNji4PcUvSi5Mw/t0Rvy 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:(13230022)(4636009)(396003)(366004)(136003)(39860400002)(346002)(376002)(451199015)(1590799012)(38100700002)(26005)(99936003)(122000001)(52536014)(82960400001)(38070700005)(86362001)(55016003)(66556008)(7696005)(71200400001)(478600001)(6506007)(66946007)(76116006)(4326008)(64756008)(66446008)(8676002)(41300700001)(66476007)(316002)(83380400001)(5660300002)(186003)(2906002)(8936002)(33656002)(54906003)(30864003)(6916009)(9686003)(85182001)(1580799009)(21314003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZnJ1eWs5b0dDd3RxQkFyeGxXY1cvOGpZc0tJWEN1ejdiWEhVdUlsR2V0akh3?= =?utf-8?B?ZkUwdmJyWkdzSWRtL0JGaCt2cmdUREh0a0ZyZHI0R2piQjJRSmFvWE9LUjFx?= =?utf-8?B?Znd3UUpwZXRSR3c3NXg3WW9RYkw0WjlGM3lJNTJIV21aOU9HY1IwK3JVa1lp?= =?utf-8?B?RW1jU1FwdXkwSHdyNjBtN3hYMXJFQWRCRFZQL3VVWXdycUp2T2tsL0lqWXRF?= =?utf-8?B?YW50L25oUWFXQUp5U1R4Vk9iZkZ0d2s2U0RNdk1Qd0JRMHF0aWsxSTRrT09D?= =?utf-8?B?Tlphd1JDQzZNeWRvVzNTZlpNcXUwcXlGa0NYckptREdiT0J2bEJ5c3IrUjVU?= =?utf-8?B?N3Nob1Jjdks3Qm5ybENreUc2dTQvWEh2dmFLcHRCNktWRWYxbDhDWWJvRGZC?= =?utf-8?B?L0w3K3QxemkrWFBJdU1lMStoSFk4VHZRWGFGbVdTb1o0dnF5Zm0vVW1ER2tZ?= =?utf-8?B?VWptK0Q1enFUd0ZYdTFaZW9BWGt0eWIvRXVGbGlzaGY4b0dDMFY3Qk1pVzBu?= =?utf-8?B?VmYyZHh6YU54MVdwNGJnaTZCTWJJOWxab0lrNVpmOFRnaDdGNFlrNUJkdWJC?= =?utf-8?B?VTdPVmtDVVdFQkVIZzUwVVZCMldDTUh1bUx5S1lVR0RHME00RFQvZ0dGOEJh?= =?utf-8?B?T00yblhianMrQ0tMcWxMYWptZ0pRdnpCMEV5a04wOTd1R0wzM3pnZ3dXY2Zj?= =?utf-8?B?S3RtNnQ1MXoxcUdyOFM3cm1XMU5rK2IwRGJ5K0tpZ2U4dlhGQTI2dks3L2VS?= =?utf-8?B?TG5HMHJHOGpCNU01b0wvVms2WCtwclZqa1V0ZzBma3F4d3hINjh0cVBEZlky?= =?utf-8?B?ZHhvWlo2VTlBS2FXL0lHVW13L291blRwdHhUWVlkTHJyelpyVUx4TGh3VlV2?= =?utf-8?B?eE5mZ0U0Z2lEOStIQ3ppNVU5NVVLVWgvdkFpYTE3cXVaRnY4Uy8vNzdmWTAr?= =?utf-8?B?TkhsUDQrWFJWM1J5WENLYjZQKzNENWdGeWp2NUpwd2pSV3Zzei8zcVNEQUZE?= =?utf-8?B?Z1E3V3BXL2JrNUIweUdLNExRQ0FtaEtKNEVIVkZBTENLMGVNaXo1ZisrQjFn?= =?utf-8?B?OFJrN3BNZDdyUXk3RnVMbmt5N2ErYmo5UVIyR1ZpS0pROGNFZGRMQWUvUmht?= =?utf-8?B?TmRCeVVublBkQ0ZFODZSemExWHN4VGJBWXFvbjM4cVNTYW1vdXVqMEJzQnhY?= =?utf-8?B?WTBLRmJFandIZ0FabWFBbGtGZXJ6YldVVHMzcmlXUTFBYVR1aHNXalpyZG80?= =?utf-8?B?bVRqRTZUMXFENzBtYVFMaDBqWHVqb3lqb2R5cm51bVZMV1lKTU1UQmRiZFdz?= =?utf-8?B?V3ZxOXZCV1ZtbnVaQ1U1UGhVNGVTcXlxODJqUTgvTzlkai8rbGZ1RjhPOFRQ?= =?utf-8?B?ekh4NmR2QlZObUtTRWhqcmVnYk5nSEc4KzFpUW1aK1VCRHZ4RXNBVGxyQ29o?= =?utf-8?B?SW4zTlNPQnR0QTgzN2gxUktaV0JQOGNyeFNCSUdHZHpnRE1nRTV4UUFYdTN5?= =?utf-8?B?bWFSSXRuT2VYVlBSOHpHWDVaUXh5L2E3WTNYM0ZTQWhjQ3Y4d3g3K1JVMnEz?= =?utf-8?B?UDNldmZpWXRVRUdYVzUrakplQktoWU1NRlJWa2NaL3pkVkpvcitRdEZrV3ZZ?= =?utf-8?B?Y1dicUZpWlhZTW9QK2VzUENHWDZuZ2tneFhkV21PSzBaQzZmWlE4cG1vTWVi?= =?utf-8?B?WW43REgvMmp4dWNrU3ZaaFVNcVdpcWY2ODdaTDB4aGhKaDFqYitiK0VrcVg4?= =?utf-8?B?bExRRnNxVHQwdmJZSUJ3Y2VYSmw4bUR2SmhPT21ZeTNVbllRcnowbnVINnUv?= =?utf-8?B?bHEvZEYyV0NXV09vR1VBbmJCWEZubWwxNGdhczdJblZoSEowZzd4M2ZhenYx?= =?utf-8?B?U2hvUEd6THBUNk1xK2h5MjJ1bjI4Vys1OXpuSGVwVkJOMGdVbE1QZ2t3WTZ2?= =?utf-8?B?ekxlWDB0czEzVVYxL21hZVo5Uk1vQ2EyNkhJU1NCSlhRRFp0ZEJOOHg5WmRv?= =?utf-8?B?blNMU1h2bFkvRkE2eFViY25rNFVQTHAzQnM1S0ZCQXFhdlF0UnN1dUJUd2Vo?= =?utf-8?B?cUsrLy9zdWVXRG0wc2EvUjhHVHlndUtkOS8vVTZiaU1ZQlV1QStKMGloRm1n?= =?utf-8?Q?pyOIE3jbFL2HDi9yJ9s781+QF?= Content-Type: multipart/mixed; boundary="_005_OS0PR01MB5716339FF7CB759E751492CB940D9OS0PR01MB5716jpnp_" MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: BNZuxisHblrPnoYsZiXu+Bal/xkxajuvNUGLzZPXOtnlNfShzyhh0mcwlsvywNJIqFd8gg8n5hHvQfs8ONccAtQSZkpXegDvcaf7HV+3AH2rH5bzZ6orIv0s9ffBN4oV/kw6Y3ZaTsUljg2elNBqHnFkWjSplHq4aBgMY336MUIK6M6YUZIULkstvTDilKIR8RQOFinWOK6sOuIrvntoZVfOUtzECHDDvs8n6xfiKwR7x+BYwAxN4bdSQkLKFRxTpHyD0VWmsymPF1eYWInMyWFBYDCq71hrKA92+wFoEUENIePvcM39bisbKsqvb2UfBuanhgy6MJ4e2vPlZnmwfilhzjoarkBrbQOqs02Y5iPyh6+/ijAjOKBy4OT7kLRKWlxHj7guFpOAfoH9Y3hVL7R4DdLUHnlUP9VkY2v8U5QiTUmw71cOE+ll/Fvl5u/3V+hW58sNK1tbXCWilE3eTzqqZBINvMnGorHz+HwkpePCq6X1F4gahy9MCycEAOYoVGaCeI8uLBOmg0XhbbJS/+9XcolXoavpK9PILz2Dts+IXkApvgQY+wUTVzeaCe6XxQ+PtRQ6K5+f6oVs+2/VIy6I0dw54/skkRTOIup2l7wflqmYzVXskbT6ivbZAnoPyVdelG0bE3bF61O/w3F5GiyQksFUd9ATkrPxPDZQmKMXsKZnAclN14D9fHYOvtf7H4ms2XqDWOZBOiAQhRpJJxvyrbfWQx+z6W5Ffz1YiKxw88GrxVP8mFjBSK4z7E4tPLGhy7DbDSvgBxapTx7OB41NrimSBJLljg5lOO5liLsGkI7ud/QmUTtBlBpGPxbFPGykMyqLcdLViDS5v6jDUOHG6YEgnDmANrv7YdpW7+830gUhDXHGflCdGadigI8nhd3HENnTx6Hj8I0ggO+m8Q== 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: 22a9869b-7db5-4ddc-8296-08dacc8701b8 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Nov 2022 12:42:24.7397 (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: un+iLY0zbQCtq080L5MG2P/DCMu5UpWvDDtrABkjXoB/tQZTD1RmW+cttWWg4LSVC+cCj0aEi3Cfp0XbzX008A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB8679 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_005_OS0PR01MB5716339FF7CB759E751492CB940D9OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gVHVlcywgTm92ZW1iZXIgMjIsIDIwMjIgMTM6MjAgUE0gUGV0ZXIgU21pdGggPHNtaXRocGIy MjUwQGdtYWlsLmNvbT4gd3JvdGU6DQo+IFRoYW5rcyBmb3IgYWRkcmVzc2luZyBteSByZXZpZXcg Y29tbWVudHMgb24gdjQ3LTAwMDEuDQo+IA0KPiBIZXJlIGFyZSBteSByZXZpZXcgY29tbWVudHMg Zm9yIHY0OS0wMDAxLg0KDQpUaGFua3MgZm9yIHlvdXIgY29tbWVudHMuDQoNCj4gPT09PT09DQo+ IA0KPiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIu Yw0KPiANCj4gMS4gR0VORVJBTCAtIE5VTEwgY2hlY2tzDQo+IA0KPiBUaGVyZSBpcyBpbmNvbnNp c3RlbnQgTlVMTCBjaGVja2luZyBpbiB0aGUgcGF0Y2guDQo+IA0KPiBTb21ldGltZXMgaXQgaXMg bGlrZSAoIXdpbmZvKQ0KPiBTb21ldGltZXMgZXhwbGljaXQgTlVMTCBjaGVja3MgbGlrZSAgKHdp bmZvLT5tcV9oYW5kbGUgIT0gTlVMTCkNCj4gDQo+IChUaGF0IGlzIGp1c3Qgb25lIGV4YW1wbGUg LS0gdGhlcmUgYXJlIGRpZmZlcmVuY2VzIGluIG1hbnkgcGxhY2VzKQ0KPiANCj4gSXQgd291bGQg YmUgYmV0dGVyIHRvIHVzZSBhIGNvbnNpc3RlbnQgc3R5bGUgZXZlcnl3aGVyZS4NCg0KQ2hhbmdl ZC4NCg0KPiB+DQo+IA0KPiAyLiBHRU5FUkFMIC0gRXJyb3IgbWVzc2FnZSB3b3JrZXIgbmFtZQ0K PiANCj4gMmEuDQo+IEluIHdvcmtlci5jIGFsbCB0aGUgbWVzc2FnZXMgYXJlIG5vdyAibG9naWNh bCByZXBsaWNhdGlvbiBhcHBseSANCj4gd29ya2VyIiBvciAibG9naWNhbCByZXBsaWNhdGlvbiBw YXJhbGxlbCBhcHBseSB3b3JrZXIiIGV0YywgYnV0IGluIHRoZSANCj4gYXBwbHlwYXJhbGxlbC5j IHNvbWV0aW1lcyB0aGUgImxvZ2ljYWwgcmVwbGljYXRpb24iIHBhcnQgaXMgbWlzc2luZy4NCj4g SU1PIGFsbCB0aGUgbWVzc2FnZXMgaW4gdGhpcyBwYXRjaCBzaG91bGQgYmUgY29uc2lzdGVudGx5 IHdvcmRlZC4NCj4gDQo+IEkndmUgcmVwb3J0ZWQgc29tZSBvZiB0aGVtIGluIHRoZSBmb2xsb3dp bmcgY29tbWVudCBiZWxvdywgYnV0IHBsZWFzZSANCj4gc2VhcmNoIHRoZSB3aG9sZSBwYXRjaCBm b3IgYW55IEkgbWlnaHQgaGF2ZSBtaXNzZWQuDQoNClJlbmFtZSBMQSBhbmQgUEEgdG8gdGhlIGZv bGxvd2luZyBzdHlsZXM6DQpgYGANCkxBIC0+IGxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29y a2VyDQpQQSAtPiBsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBgYGAN Cg0KPiAyYi4NCj4gQ29uc2lkZXIgaWYgbWF5YmUgYWxsIG9mIHRoZXNlIG91Z2h0IHRvIGJlIGNh bGxpbmcgZ2V0X3dvcmtlcl9uYW1lKCkgDQo+IHdoaWNoIGlzIGN1cnJlbnRseSBzdGF0aWMgaW4g d29ya2VyLmMuIERvaW5nIHRoaXMgbWVhbnMgYW55IGZ1dHVyZSANCj4gY2hhbmdlcyB0byBnZXRf d29ya2VyX25hbWUgd29uJ3QgY2F1c2UgbW9yZSBpbmNvbnNpc3RlbmNpZXMuDQoNClRoZSBtb3N0 IGVycm9yIG1lc3NhZ2UgaW4gYXBwbHlwYXJhbGxlbHh4LmMgY2FuIG9ubHkgdXNlICJ4eCBwYXJh bGxlbCB3b3JrZXIiLA0Kc28gSSB0aGluayBpdCdzIGZpbmUgbm90IHRvIGNhbGwgZ2V0X3dvcmtl cl9uYW1lDQoNCj4gfn5+DQo+IA0KPiAzLiBGaWxlIGhlYWRlciBjb21tZW50DQo+IA0KPiArICog SURFTlRJRklDQVRJT04gDQo+ICsgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBs eXBhcmFsbGVsd29ya2VyLmMNCj4gDQo+IFRoZSB3b3JkICJJREVOVElGSUNBVElPTiIgc2hvdWxk IGJlIG9uIGEgc2VwYXJhdGUgbGluZSAoZm9yIA0KPiBjb25zaXN0ZW5jeSB3aXRoIGV2ZXJ5IG90 aGVyIFBHIHNvdXJjZSBmaWxlKQ0KDQpGaXhlZC4NCg0KPiB+DQo+IA0KPiA0Lg0KPiANCj4gKyAq IEluIG9yZGVyIGZvciBsbWdyIHRvIGRldGVjdCB0aGlzLCB3ZSBoYXZlIExBIGFjcXVpcmUgYSBz ZXNzaW9uIA0KPiArIGxvY2sgb24gdGhlDQo+ICsgKiByZW1vdGUgdHJhbnNhY3Rpb24gKGJ5IHBh X2xvY2tfc3RyZWFtKCkpIGFuZCBoYXZlIFBBIHdhaXQgb24gdGhlIA0KPiArIGxvY2sNCj4gYmVm b3JlDQo+ICsgKiB0cnlpbmcgdG8gcmVjZWl2ZSBtZXNzYWdlcy4gSW4gb3RoZXIgd29yZHMsIExB IGFjcXVpcmVzIHRoZSBsb2NrIA0KPiArIGJlZm9yZQ0KPiArICogc2VuZGluZyBTVFJFQU1fU1RP UCBhbmQgcmVsZWFzZXMgaXQgaWYgYWxyZWFkeSBhY3F1aXJlZCBiZWZvcmUgDQo+ICsgc2VuZGlu Zw0KPiArICogU1RSRUFNX1NUQVJULCBTVFJFQU1fQUJPUlQoZm9yIHRvcGxldmVsIHRyYW5zYWN0 aW9uKSwNCj4gU1RSRUFNX1BSRVBBUkUgYW5kDQo+ICsgKiBTVFJFQU1fQ09NTUlULiBGb3IgUEEs IGl0IGFsd2F5cyBuZWVkcyB0byBhY3F1aXJlIHRoZSBsb2NrIGFmdGVyDQo+IHByb2Nlc3NpbmcN Cj4gKyAqIFNUUkVBTV9TVE9QIGFuZCBTVFJFQU1fQUJPUlQoZm9yIHN1YnRyYW5zYWN0aW9uKSBh bmQgdGhlbiByZWxlYXNlDQo+ICsgKiBpbW1lZGlhdGVseSBhZnRlciBhY3F1aXJpbmcgaXQuIFRo YXQgd2F5LCB3aGVuIFBBIGlzIHdhaXRpbmcgZm9yIA0KPiArIExBLCB3ZSBjYW4NCj4gKyAqIGhh dmUgYSB3YWl0LWVkZ2UgZnJvbSBQQSB0byBMQSBpbiBsbWdyLCB3aGljaCB3aWxsIG1ha2UgYSBk ZWFkbG9jayANCj4gKyBpbiBsbWdyDQo+ICsgKiBsaWtlOg0KPiANCj4gTWlzc2luZyBzcGFjZXMg YmVmb3JlICcoJyBkZWxpYmVyYXRlPw0KDQpBZGRlZC4NCg0KPiB+fn4NCj4gDQo+IDUuIGdsb2Jh bHMNCj4gDQo+ICsvKg0KPiArICogSXMgdGhlcmUgYSBtZXNzYWdlIHNlbnQgYnkgcGFyYWxsZWwg YXBwbHkgd29ya2VyIHdoaWNoIHRoZSBsZWFkZXIgDQo+ICthcHBseQ0KPiArICogd29ya2VyIG5l ZWQgdG8gcmVjZWl2ZT8NCj4gKyAqLw0KPiArdm9sYXRpbGUgc2lnX2F0b21pY190IFBhcmFsbGVs QXBwbHlNZXNzYWdlUGVuZGluZyA9IGZhbHNlOw0KPiANCj4gU1VHR0VTVElPTg0KPiBJcyB0aGVy ZSBhIG1lc3NhZ2Ugc2VudCBieSBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0aGF0IHRoZSBsZWFk ZXIgDQo+IGFwcGx5IHdvcmtlciBuZWVkcyB0byByZWNlaXZlPw0KDQpDaGFuZ2VkLg0KDQo+IH5+ fg0KPiANCj4gNi4gcGFfZ2V0X2F2YWlsYWJsZV93b3JrZXINCj4gDQo+ICsvKg0KPiArICogZ2V0 IGFuIGF2YWlsYWJsZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZnJvbSB0aGUgd29ya2VyIHBvb2wu DQo+ICsgKi8NCj4gK3N0YXRpYyBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqDQo+ICtwYV9nZXRf YXZhaWxhYmxlX3dvcmtlcih2b2lkKQ0KPiANCj4gVXBwZXJjYXNlIGNvbW1lbnQNCg0KQ2hhbmdl ZC4NCg0KPiB+DQo+IA0KPiA3Lg0KPiANCj4gKyAvKg0KPiArICogV2UgZmlyc3QgdHJ5IHRvIGZy ZWUgdGhlIHdvcmtlciB0byBpbXByb3ZlIG91ciBjaGFuY2VzIG9mIGdldHRpbmcNCj4gKyAqIHRo ZSB3b3JrZXIuIE5vcm1hbGx5LCB3ZSBmcmVlIHRoZSB3b3JrZXIgYWZ0ZXIgZW5zdXJpbmcgdGhh dCB0aGUNCj4gKyAqIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBieSBwYXJhbGxlbCB3b3JrZXIg YnV0IGZvciByb2xsYmFja3MsIHdlDQo+ICsgKiBkb24ndCB3YWl0IGZvciB0aGUgdHJhbnNhY3Rp b24gdG8gZmluaXNoIHNvIGNhbid0IGZyZWUgdGhlIHdvcmtlcg0KPiArICogaW5mb3JtYXRpb24g aW1tZWRpYXRlbHkuDQo+ICsgKi8NCj4gDQo+IDdhLg0KPiAiV2UgZmlyc3QgdHJ5IHRvIGZyZWUg dGhlIHdvcmtlciB0byBpbXByb3ZlIG91ciBjaGFuY2VzIG9mIGdldHRpbmcgdGhlIHdvcmtlci4i DQo+IA0KPiBTVUdHRVNUSU9ODQo+IFdlIGZpcnN0IHRyeSB0byBmcmVlIHRoZSB3b3JrZXIgdG8g aW1wcm92ZSBvdXIgY2hhbmNlcyBvZiBmaW5kaW5nIG9uZSANCj4gdGhhdCBpcyBub3QgaW4gdXNl Lg0KPiANCj4gfg0KPiANCj4gN2IuDQo+ICJwYXJhbGxlbCB3b3JrZXIiIC0+ICJ0aGUgcGFyYWxs ZWwgd29ya2VyIg0KDQpDaGFuZ2VkLg0KDQo+IH5+fg0KPiANCj4gOC4gcGFfYWxsb2NhdGVfd29y a2VyDQo+IA0KPiArIC8qIFRyeSB0byBnZXQgYSBmcmVlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4g Ki8gd2luZm8gPSANCj4gKyBwYV9nZXRfYXZhaWxhYmxlX3dvcmtlcigpOw0KPiArDQo+IA0KPiBT VUdHRVNUSU9ODQo+IEZpcnN0LCB0cnkgdG8gZ2V0IGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGZy b20gdGhlIHBvb2wuDQoNCkNoYW5nZWQuDQoNCj4gfn5+DQo+IA0KPiA5LiBwYV9mcmVlX3dvcmtl cg0KPiANCj4gKyAqIFRoaXMgcmVtb3ZlcyB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGVudHJ5 IGZyb20gdGhlIGhhc2ggdGFibGUgDQo+ICsgc28gdGhhdCBpdA0KPiArICogY2FuJ3QgYmUgdXNl ZC4gVGhpcyBlaXRoZXIgc3RvcHMgdGhlIHdvcmtlciBhbmQgZnJlZSB0aGUgDQo+ICsgY29ycmVz cG9uZGluZyBpbmZvLA0KPiArICogaWYgdGhlcmUgYXJlIGVub3VnaCB3b3JrZXJzIGluIHRoZSBw b29sIG9yIGp1c3QgbWFya3MgaXQgYXZhaWxhYmxlIA0KPiArIGZvcg0KPiArICogcmV1c2UuDQo+ IA0KPiBCRUZPUkUNCj4gVGhpcyBlaXRoZXIgc3RvcHMgdGhlIHdvcmtlciBhbmQgZnJlZSB0aGUg Y29ycmVzcG9uZGluZyBpbmZvLCBpZiB0aGVyZSANCj4gYXJlIGVub3VnaCB3b3JrZXJzIGluIHRo ZSBwb29sIG9yIGp1c3QgbWFya3MgaXQgYXZhaWxhYmxlIGZvciByZXVzZS4NCj4gDQo+IFNVR0dF U1RJT04NCj4gSWYgdGhlcmUgYXJlIGVub3VnaCB3b3JrZXJzIGluIHRoZSBwb29sIGl0IHN0b3Bz IHRoZSB3b3JrZXIgYW5kIGZyZWVzIA0KPiB0aGUgY29ycmVzcG9uZGluZyBpbmZvLCBvdGhlcndp c2UgaXQganVzdCBtYXJrcyB0aGUgd29ya2VyIGFzIA0KPiBhdmFpbGFibGUgZm9yIHJldXNlLg0K DQpDaGFuZ2VkLg0KDQo+IH4NCj4gDQo+IDEwLg0KPiANCj4gKyAvKiBGcmVlIHRoZSBjb3JyZXNw b25kaW5nIGluZm8gaWYgdGhlIHdvcmtlciBleGl0ZWQgY2xlYW5seS4gKi8gaWYgDQo+ICsgKHdp bmZvLT5lcnJvcl9tcV9oYW5kbGUgPT0gTlVMTCkgeyBwYV9mcmVlX3dvcmtlcl9pbmZvKHdpbmZv KTsgDQo+ICsgcmV0dXJuIHRydWU7IH0NCj4gDQo+IElzIGl0IGNvcnJlY3QgdGhhdCB0aGlzIGJ5 cGFzc2VzIHRoZSByZW1vdmFsIGZyb20gdGhlIGhhc2ggdGFibGU/DQoNCkkgcmV0aGluayBhYm91 dCB0aGlzLCBpdCBzZWVtcyB1bm5lY2Vzc2FyeSB0byBmcmVlIHRoZSBpbmZvcm1hdGlvbiBoZXJl IGFzDQp3ZSBkb24ndCBleHBlY3QgdGhlIHdvcmtlciB0byBzdG9wIHVubGVzcyB0aGUgbGVhZGVy IGFzIHRoZW0gdG8gc3RvcC4NClNvLCBJIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGlzIGFuZCB3aWxs IHRoaW5rIGFib3V0IHRoaXMgaW4gbmV4dCB2ZXJzaW9uLg0KDQo+IH4NCj4gDQo+IDE0Lg0KPiAN Cj4gKyBjYXNlICdYJzogLyogVGVybWluYXRlLCBpbmRpY2F0aW5nIGNsZWFuIGV4aXQuICovIHsg DQo+ICsgc2htX21xX2RldGFjaCh3aW5mby0+ZXJyb3JfbXFfaGFuZGxlKTsNCj4gKyB3aW5mby0+ ZXJyb3JfbXFfaGFuZGxlID0gTlVMTDsNCj4gKyBicmVhazsNCj4gKyB9DQo+ICsgZGVmYXVsdDoN Cj4gDQo+IA0KPiBObyBuZWVkIGZvciB0aGUgeyB9IGhlcmUuDQoNCkNoYW5nZWQuDQoNCj4gfn5+ DQo+IA0KPiAxNi4gcGFfaW5pdF9hbmRfbGF1bmNoX3dvcmtlcg0KPiANCj4gKyAvKiBTZXR1cCBz aGFyZWQgbWVtb3J5LiAqLw0KPiArIGlmICghcGFfc2V0dXBfZHNtKHdpbmZvKSkNCj4gKyB7DQo+ ICsgTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOw0KPiArIHBmcmVlKHdpbmZvKTsN Cj4gKyByZXR1cm4gTlVMTDsNCj4gKyB9DQo+IA0KPiANCj4gV291bGRuJ3QgaXQgYmUgYmV0dGVy IHRvIGRvIHRoZSBwZnJlZSBiZWZvcmUgc3dpdGNoaW5nIGJhY2sgdG8gdGhlIG9sZGNvbnRleHQ/ DQoNCkkgdGhpbmsgZWl0aGVyIHN0eWxlIHNlZW1zIGZpbmUuDQoNCj4gfn5+DQo+IA0KPiAxNy4g cGFfc2VuZF9kYXRhDQo+IA0KPiArIC8qIFdhaXQgYmVmb3JlIHJldHJ5aW5nLiAqLw0KPiArIHJj ID0gV2FpdExhdGNoKE15TGF0Y2gsDQo+ICsgICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8 IFdMX0VYSVRfT05fUE1fREVBVEgsDQo+ICsgICAgU0hNX1NFTkRfUkVUUllfSU5URVJWQUxfTVMs DQo+ICsgICAgV0FJVF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRSk7 DQo+ICsNCj4gKyBpZiAocmMgJiBXTF9MQVRDSF9TRVQpDQo+ICsgew0KPiArIFJlc2V0TGF0Y2go TXlMYXRjaCk7DQo+ICsgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsNCj4gKyB9DQo+IA0KPiANCj4g SW5zdGVhZCBvZiBDSEVDS19GT1JfSU5URVJSVVBUUywgc2hvdWxkIHRoaXMgYmUgY2FsbGluZyB5 b3VyIG5ldyANCj4gZnVuY3Rpb24gUHJvY2Vzc1BhcmFsbGVsQXBwbHlJbnRlcnJ1cHRzPw0KDQpJ IHRob3VnaHQgdGhlIFByb2Nlc3NQYXJhbGxlbEFwcGx5SW50ZXJydXB0cyBpcyBpbnRlbmRlZCB0 byBiZSBpbnZva2VkIG9ubHkgaW4gbWFpbg0KbG9vcChMb2dpY2FsUGFyYWxsZWxBcHBseUxvb3Ap IHRvIG1ha2UgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBleGl0IGNsZWFubHkuDQoNCj4gfg0K PiANCj4gMTguDQo+IA0KPiArIGlmIChzdGFydFRpbWUgPT0gMCkNCj4gKyBzdGFydFRpbWUgPSBH ZXRDdXJyZW50VGltZXN0YW1wKCk7DQo+ICsgZWxzZSBpZiAoVGltZXN0YW1wRGlmZmVyZW5jZUV4 Y2VlZHMoc3RhcnRUaW1lLCANCj4gKyBHZXRDdXJyZW50VGltZXN0YW1wKCksDQo+ICsgU0hNX1NF TkRfVElNRU9VVF9NUykpDQo+ICsgZXJlcG9ydChFUlJPUiwNCj4gKyAoZXJyY29kZShFUlJDT0RF X0NPTk5FQ1RJT05fRkFJTFVSRSksDQo+ICsgZXJybXNnKCJ0ZXJtaW5hdGluZyBsb2dpY2FsIHJl cGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBkdWUgdG8NCj4gdGltZW91dCIpKSk7DQo+ IA0KPiANCj4gSSdkIHByZXZpb3VzbHkgY29tbWVudGVkIHRoYXQgdGhlIHRpbWVvdXQgY2FsY3Vs YXRpb24gc2VlbWVkIHdyb25nLg0KPiBIb3Utc2FuIHJlcGxpZWQgWzEsIzldICJzdGFydCBjb3Vu dGluZyBmcm9tIHRoZSBmaXJzdCBmYWlsdXJlIGxvb2tzIA0KPiBmaW5lIHRvIG1lLiIgYnV0IEkg YW0gbm90IHNvIHN1cmUgLSBlLmcuIElmIHRoZSB0aW1lb3V0IGlzIDEwcyB0aGVuIEkgDQo+IGV4 cGVjdCBpdCB0byBmYWlsIH4xMHMgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCwgbm90IDEx cyBhZnRlci4gSSANCj4ga25vdyBpdCdzIHBlZGFudGljLCBidXQgd2hlcmUncyB0aGUgaGFybSBp biBtYWtpbmcgdGhlIGNhbGN1bGF0aW9uIA0KPiByaWdodCBpbnN0ZWFkIG9mIGp1c3QgbmVhcmx5 IHJpZ2h0Pw0KPiANCj4gSU1PIHByb2JhYmx5IGFuIGVhc3kgZml4IGZvciB0aGlzIGlzIGxpa2U6 DQo+IA0KPiAjZGVmaW5lIFNITV9TRU5EX1JFVFJZX0lOVEVSVkFMX01TIDEwMDAgI2RlZmluZSBT SE1fU0VORF9USU1FT1VUX01TIA0KPiAoMTAwMDAgLSBTSE1fU0VORF9SRVRSWV9JTlRFUlZBTF9N UykNCg0KT0ssIEkgbW92ZWQgdGhlIHBsYWNlIG9mIHNldHRpbmcgc3RhcnRUaW1lIGJlZm9yZSB0 aGUgV2FpdExhdGNoLg0KDQo+IH5+fg0KPiANCj4gMjAuIHBhX3NhdmVwb2ludF9uYW1lDQo+IA0K PiArc3RhdGljIHZvaWQNCj4gK3BhX3NhdmVwb2ludF9uYW1lKE9pZCBzdWJvaWQsIFRyYW5zYWN0 aW9uSWQgeGlkLCBjaGFyICpzcG5hbWUsDQo+ICsgICBTaXplIHN6c3ApDQo+IA0KPiBVbm5lY2Vz c2FyeSB3cmFwcGluZz8NCg0KQ2hhbmdlZC4NCg0KPiA9PT09PT0NCj4gDQo+IHNyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMNCj4gDQo+IDIxLiByZXBsb3JpZ2luX3Nlc3Np b25fc2V0dXANCj4gDQo+ICsgKiBIb3dldmVyLCB3ZSBkbyBhbGxvdyBtdWx0aXBsZSBwcm9jZXNz ZXMgdG8gcG9pbnQgdG8gdGhlIHNhbWUgDQo+ICsgb3JpZ2luIHNsb3QNCj4gKyAqIGlmIHJlcXVl c3RlZCBieSB0aGUgY2FsbGVyIGJ5IHBhc3NpbmcgUElEIG9mIHRoZSBwcm9jZXNzIHRoYXQgaGFz IA0KPiArIGFscmVhZHkNCj4gKyAqIGFjcXVpcmVkIGl0LiBUaGlzIGlzIHRvIGFsbG93IHVzaW5n IHRoZSBzYW1lIG9yaWdpbiBieSBtdWx0aXBsZSANCj4gKyBwYXJhbGxlbA0KPiArICogYXBwbHkg cHJvY2Vzc2VzIHRoZSBwcm92aWRlZCB0aGV5IG1haW50YWluIGNvbW1pdCBvcmRlciwgZm9yIA0K PiArIGV4YW1wbGUsIGJ5DQo+ICsgKiBhbGxvd2luZyBvbmx5IG9uZSBwcm9jZXNzIHRvIGNvbW1p dCBhdCBhIHRpbWUuDQo+IA0KPiAyMWEuDQo+IEkgdGhvdWdodCB0aGUgY29tbWVudCBzaG91bGQg bWVudGlvbiB0aGlzIGlzIG9wdGlvbmFsIGFuZCB0aGUgc3BlY2lhbCANCj4gdmFsdWUgYWNxdWly ZWRfYnk9MCBtZWFucyBkb24ndCBkbyB0aGlzLg0KDQpBZGRlZC4NCg0KPiB+DQo+IA0KPiAyMWIu DQo+ICJ0aGUgcHJvdmlkZWQgdGhleSIgPz8gdHlwbz8NCg0KQ2hhbmdlZC4NCg0KPiA9PT09PT0N Cj4gDQo+IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMNCj4gDQo+ IDIyLiBwcm9jZXNzX3N5bmNpbmdfdGFibGVzDQo+IA0KPiAgcHJvY2Vzc19zeW5jaW5nX3RhYmxl cyhYTG9nUmVjUHRyIGN1cnJlbnRfbHNuKSAgew0KPiArIC8qDQo+ICsgKiBTa2lwIGZvciBwYXJh bGxlbCBhcHBseSB3b3JrZXJzIGFzIHRoZXkgZG9uJ3Qgb3BlcmF0ZSBvbiB0YWJsZXMgDQo+ICsg dGhhdA0KPiArICogYXJlIG5vdCBpbiByZWFkeSBzdGF0ZS4gU2VlIHBhX2Nhbl9zdGFydCgpIGFu ZA0KPiArICogc2hvdWxkX2FwcGx5X2NoYW5nZXNfZm9yX3JlbCgpLg0KPiArICovDQo+ICsgaWYg KGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQ0KPiArIHJldHVybjsNCj4gDQo+IFNVR0dFU1RJ T04gKHJlbW92ZSB0aGUgZG91YmxlIG5lZ2F0aXZlKSBTa2lwIGZvciBwYXJhbGxlbCBhcHBseSAN Cj4gd29ya2VycyBiZWNhdXNlIHRoZXkgb25seSBvcGVyYXRlIG9uIHRhYmxlcyB0aGF0IGFyZSBp biBhIFJFQURZIHN0YXRlLiANCj4gU2VlIHBhX2Nhbl9zdGFydCgpIGFuZCBzaG91bGRfYXBwbHlf Y2hhbmdlc19mb3JfcmVsKCkuDQoNCkNoYW5nZWQuDQoNCj4gPT09PT09DQo+IA0KPiBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jDQo+IA0KPiAyMy4gYXBwbHlfaGFuZGxl X3N0cmVhbV9zdG9wDQo+IA0KPiANCj4gUHJldmlvdXNseSBJIHN1Z2dlc3RlZCB0aGF0IHRoaXMg bG9jay91bmxvY2sgc2VlbXMgdG9vIHRyaWNreSBhbmQgDQo+IG5lZWRlZCBhIGNvbW1lbnQuIFRo ZSByZXBseSBbMSwjMTJdIHdhcyB0aGF0IHRoaXMgaXMgYWxyZWFkeSBkZXNjcmliZWQgDQo+IGF0 b3AgcGFyYWxsZWxhcHBseXdvcmtlci5jLiBPSywgYnV0IGluIHRoYXQgY2FzZSBtYXliZSBoZXJl IHRoZSANCj4gY29tbWVudCBjYW4ganVzdCByZWZlciB0byB0aGF0IGV4cGxhbmF0aW9uOg0KPiAN Cj4gU1VHR0VTVElPTg0KPiBSZWZlciB0byB0aGUgY29tbWVudHMgYXRvcCBhcHBseXBhcmFsbGVs d29ya2VyLmMgZm9yIHdoYXQgdGhpcyBsb2NrIA0KPiBhbmQgaW1tZWRpYXRlIHVubG9jayBpcyBk b2luZy4NCj4gDQo+IH5+fg0KPiANCj4gMjQuIGFwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQNCj4g DQo+ICsgaWYgDQo+ICsgKHBnX2F0b21pY19zdWJfZmV0Y2hfdTMyKCYoTXlQYXJhbGxlbFNoYXJl ZC0+cGVuZGluZ19zdHJlYW1fY291bnQpLA0KPiAxKSA9PSAwKQ0KPiArIHsNCj4gKyBwYV9sb2Nr X3N0cmVhbShNeVBhcmFsbGVsU2hhcmVkLT54aWQsIEFjY2Vzc1NoYXJlTG9jayk7IA0KPiArIHBh X3VubG9ja19zdHJlYW0oTXlQYXJhbGxlbFNoYXJlZC0+eGlkLCBBY2Nlc3NTaGFyZUxvY2spOyB9 DQo+IA0KPiBkaXR0byBjb21tZW50ICMyMw0KDQpJIGZlZWwgdGhlIHBsYWNlIGF0b3AgdGhlIGRl ZmluaXRpb24gb2YgcGFfbG9ja194eHggZnVuY3Rpb24gaXMgYSBiZXR0ZXIgcGxhY2UgdG8NCnB1 dCB0aGUgY29tbWVudHMsIHNvIGFkZGVkIHRoZXJlLiBVc2VyIGNhbiBjaGVjayBpdCB3aGVuIHJl YWRpbmcgdGhlIGxvY2sNCmZ1bmN0aW9ucy4NCg0KPiB+fn4NCj4gDQo+IDI1LiBhcHBseV93b3Jr ZXJfY2xlYW5fZXhpdA0KPiANCj4gK3ZvaWQNCj4gK2FwcGx5X3dvcmtlcl9jbGVhbl9leGl0KHZv aWQpDQo+ICt7DQo+ICsgLyogTm90aWZ5IHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHRoYXQgd2Ug aGF2ZSBleGl0ZWQgY2xlYW5seS4gKi8gIA0KPiAraWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtl cigpKSAgcHFfcHV0bWVzc2FnZSgnWCcsIE5VTEwsIDApOw0KPiArDQo+ICsgcHJvY19leGl0KDAp Ow0KPiArfQ0KPiANCj4gU29tZWhvdyBpdCBkb2Vzbid0IHNlZW0gcmlnaHQgdGhhdCB0aGUgUEEg d29ya2VyIHNlbmRpbmcgJ1gnIGlzIGhlcmUgDQo+IGluIHdvcmtlci5jLCB3aGlsZSB0aGUgTEEg d29ya2VyIHJlY2VpcHQgb2YgdGhpcyAnWCcgaXMgaW4gdGhlIG90aGVyIA0KPiBhcHBseXBhcmFs bGVsd29ya2VyLmMgbW9kdWxlLiBNYXliZSB0aGF0IG90aGVyIGZ1bmN0aW9uIA0KPiBIYW5kbGVQ YXJhbGxlbEFwcGx5TWVzc2FnZSBzaG91bGQgYWxzbyBiZSBoZXJlIGluIHdvcmtlci5jPw0KDQpJ IHRob3VnaHQgdGhlIGZ1bmN0aW9uIGFwcGx5X3dvcmtlcl9jbGVhbl9leGl0IGlzIHdpZGVseSB1 c2VkIGluIHdvcmtlci5jIGFuZA0KaXMgYSBjb21tb24gZnVuY3Rpb24gZm9yIGJvdGggbGVhZGVy L3BhcmFsbGVsIGFwcGx5IHdvcmtlcnMsIHNvIEkgcHV0IGl0IGluDQp3b3JrZXIuYy4gQnV0IEhh bmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlIGlzIGEgZnVuY3Rpb24gb25seSBmb3IgcGFyYWxsZWwN Cndvcmtlciwgc28gaXQgd291bGQgYmUgYmV0dGVyIHRvIHB1dCBpdCBpbiBhcHBseXBhcmFsbGVs d29ya2VyLmMuDQoNCj4gPT09PT09DQo+IA0KPiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190 YWJsZXMuYw0KPiANCj4gMjYuDQo+IA0KPiBAQCAtMjk1Nyw2ICsyOTU3LDE4IEBAIHN0cnVjdCBj b25maWdfaW50IENvbmZpZ3VyZU5hbWVzSW50W10gPQ0KPiAgIE5VTEwsDQo+ICAgfSwNCj4gICAm bWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uLA0KPiArIDIsIDAsIE1BWF9QQVJBTExF TF9XT1JLRVJfTElNSVQsDQo+ICsgTlVMTCwgTlVMTCwgTlVMTA0KPiArIH0sDQo+ICsNCj4gKyB7 DQo+ICsgeyJtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uIiwNCj4g KyBQR0NfU0lHSFVQLA0KPiArIFJFUExJQ0FUSU9OX1NVQlNDUklCRVJTLA0KPiArIGdldHRleHRf bm9vcCgiTWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgYXBwbHkgd29ya2VycyBwZXIgDQo+ICsg c3Vic2NyaXB0aW9uLiIpLCBOVUxMLCB9LCANCj4gKyAmbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtl cnNfcGVyX3N1YnNjcmlwdGlvbiwNCj4gICAyLCAwLCBNQVhfQkFDS0VORFMsDQo+ICAgTlVMTCwg TlVMTCwgTlVMTA0KPiANCj4gSXMgdGhpcyBjb3JyZWN0PyBEaWQgeW91IG1lYW4gdG8gY2hhbmdl IA0KPiBtYXhfc3luY193b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24sIE15IDFzdCBpbXByZXNzaW9u IGlzIHRoYXQgdGhlcmUgaGFzIA0KPiBiZWVuIHNvbWUgbWl4dXAgd2l0aCB0aGUgTUFYX1BBUkFM TEVMX1dPUktFUl9MSU1JVCBhbmQgTUFYX0JBQ0tFTkRTIG9yIA0KPiB0aGF0IHRoaXMgY2hhbmdl IHdhcyBhY2NpZGVudGFsbHkgbWFkZSB0byB0aGUgd3JvbmcgR1VDLg0KDQpGaXhlZC4NCg0KPiA9 PT09PT0NCj4gDQo+IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oDQo+ IA0KPiAyNy4gUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZA0KPiANCj4gKyAvKg0KPiArICogSW5k aWNhdGVzIHdoZXRoZXIgdGhlcmUgYXJlIHBlbmRpbmcgc3RyZWFtaW5nIGJsb2NrcyBpbiB0aGUg cXVldWUuIA0KPiArIFRoZQ0KPiArICogcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgY2hlY2sg aXQgYmVmb3JlIHN0YXJ0aW5nIHRvIHdhaXQuDQo+ICsgKi8NCj4gKyBwZ19hdG9taWNfdWludDMy IHBlbmRpbmdfc3RyZWFtX2NvdW50Ow0KPiANCj4gQSBiZXR0ZXIgbmFtZSBtaWdodCBiZSAnbl9w ZW5kaW5nX3N0cmVhbV9ibG9ja3MnLg0KDQpJIGFtIG5vdCBzdXJlIGlmIHRoZSBuYW1lIGxvb2tz IGJldHRlciwgc28gZGlkbuKAmXQgY2hhbmdlIHRoaXMuDQoNCj4gfg0KPiANCj4gMjguIGZ1bmN0 aW9uIG5hbWVzDQo+IA0KPiAgZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQg c3ViaWQsIE9pZCByZWxpZCk7DQo+ICtleHRlcm4gdm9pZCBsb2dpY2FscmVwX3BhcmFsbGVsX2Fw cGx5X3dvcmtlcl9zdG9wKGludCBzbG90X25vLCB1aW50MTYNCj4gZ2VuZXJhdGlvbik7DQo+ICBl eHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl93YWtldXAoT2lkIHN1YmlkLCBPaWQgcmVsaWQp OyAgZXh0ZXJuIA0KPiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cF9wdHIoTG9naWNhbFJl cFdvcmtlciAqd29ya2VyKTsNCj4gDQo+ICBleHRlcm4gaW50IGxvZ2ljYWxyZXBfc3luY193b3Jr ZXJfY291bnQoT2lkIHN1YmlkKTsNCj4gK2V4dGVybiBpbnQgbG9naWNhbHJlcF9wYXJhbGxlbF9h cHBseV93b3JrZXJfY291bnQoT2lkIHN1YmlkKTsNCj4gDQo+IFdvdWxkIGl0IGJlIGJldHRlciB0 byBjYWxsIHRob3NlIG5ldyBmdW5jdGlvbnMgdXNpbmcgc2ltaWxhciBzaG9ydGVyIA0KPiBuYW1l cyBhcyBkb25lIGVsc2V3aGVyZT8NCj4gDQo+IGxvZ2ljYWxyZXBfcGFyYWxsZWxfYXBwbHlfd29y a2VyX3N0b3AgLT4gbG9naWNhbHJlcF9wYV93b3JrZXJfc3RvcCANCj4gbG9naWNhbHJlcF9wYXJh bGxlbF9hcHBseV93b3JrZXJfY291bnQgLT4gbG9naWNhbHJlcF9wYV93b3JrZXJfY291bnQNCg0K Q2hhbmdlZC4NCg0KQXR0YWNoIG5ldyB2ZXJzaW9uIHBhdGNoIHdoaWNoIGFsc28gZml4ZWQgYW4g aW52YWxpZCBzaGFyZWQgbWVtb3J5IGFjY2VzcyBidWcNCmluIDAwMDIgcGF0Y2ggcmVwb3J0ZWQg YnkgS3Vyb2RhLVNhbiBvZmZsaXN0LiANCg0KQmVzdCByZWdhcmRzLA0KSG91IHpqDQo= --_005_OS0PR01MB5716339FF7CB759E751492CB940D9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v51-0004-Retry-to-apply-streaming-xact-only-in-apply-work.patch" Content-Description: v51-0004-Retry-to-apply-streaming-xact-only-in-apply-work.patch Content-Disposition: attachment; filename="v51-0004-Retry-to-apply-streaming-xact-only-in-apply-work.patch"; size=21133; creation-date="Tue, 22 Nov 2022 12:37:22 GMT"; modification-date="Tue, 22 Nov 2022 12:42:20 GMT" Content-Transfer-Encoding: base64 RnJvbSAyNTczZDNmZDY5ODlkMWE4NmY4NjVkMDVhN2IzNjMyMDllOGE4ZGQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIb3UgWmhpamllIDxob3V6ai5mbnN0QGNuLmZ1aml0c3UuY29t PgpEYXRlOiBNb24sIDIxIE5vdiAyMDIyIDIwOjE2OjE3ICswODAwClN1YmplY3Q6IFtQQVRDSCB2 NTEgNC80XSBSZXRyeSB0byBhcHBseSBzdHJlYW1pbmcgeGFjdCBvbmx5IGluIGFwcGx5IHdvcmtl cgoKV2hlbiB0aGUgc3Vic2NyaXB0aW9uIHBhcmFtZXRlciBpcyBzZXQgc3RyZWFtaW5nPXBhcmFs bGVsLCB0aGUgbG9naWMgdHJpZXMgdG8KYXBwbHkgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB1 c2luZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gSWYgdGhpcwpmYWlscyB0aGUgcGFyYWxsZWwg d29ya2VyIGV4aXRzIHdpdGggYW4gZXJyb3IuCgpJbiB0aGlzIGNhc2UsIHJldHJ5IGFwcGx5aW5n IHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdXNpbmcgdGhlIG5vcm1hbApzdHJlYW1pbmc9b24g bW9kZS4gVGhpcyBpcyBkb25lIHRvIGF2b2lkIGdldHRpbmcgY2F1Z2h0IGluIGEgbG9vcCBvZiB0 aGUgc2FtZQpyZXRyeSBlcnJvcnMuCgpBIG5ldyBmbGFnIGZpZWxkICJzdWJyZXRyeSIgaGFzIGJl ZW4gaW50cm9kdWNlZCB0byBjYXRhbG9nICJwZ19zdWJzY3JpcHRpb24iLgpJZiB0aGVyZSBhcmUg YW55IGFjdGl2ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGFuZCB0aGUgc3Vic2NyaWJlciBleGl0 cyB3aXRoIGFuCmVycm9yLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdHJ1ZSwgYW5kIHdoZW5ldmVy IHRoZSB0cmFuc2FjdGlvbiBpcyBhcHBsaWVkCnN1Y2Nlc3NmdWxseSwgdGhpcyBmbGFnIGlzIHJl c2V0IGZhbHNlLgpOb3csIHdoZW4gZGVjaWRpbmcgaG93IHRvIGFwcGx5IGEgc3RyZWFtaW5nIHRy YW5zYWN0aW9uLCB0aGUgbG9naWMgY2FuIGtub3cgaWYKdGhpcyB0cmFuc2FjdGlvbiBoYXMgcHJl dmlvdXNseSBmYWlsZWQgb3Igbm90IChieSBjaGVja2luZyB0aGUgInN1YnJldHJ5IgpmaWVsZCku Ci0tLQogZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgICAgICAgICAgICAgICAgICAgICAgICAg fCAgMTAgKysKIGRvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgICAgICAgICAg ICAgIHwgIDExICstCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbCAg ICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5jICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwg ICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9u Y21kcy5jICAgICAgICAgICAgfCAgIDEgKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlw YXJhbGxlbHdvcmtlci5jICAgICAgfCAgMzAgKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC93b3JrZXIuYyAgICAgICAgICAgfCAxODIgKysrKysrKysrKysrKysrLS0tLS0tCiBz cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSAr LQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCAgICAgICAgICAgICAgfCAg IDcgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggICAgICAgICAg fCAgIDIgKwogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbCAgICAgICAgICAg ICAgfCAgIDggKwogLi4uL3N1YnNjcmlwdGlvbi90LzAzMl9zdHJlYW1pbmdfcGFyYWxsZWxfYXBw bHkucGwgfCAgMTggKy0KIDEzIGZpbGVzIGNoYW5nZWQsIDIyMyBpbnNlcnRpb25zKCspLCA1OSBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2Rv Yy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCmluZGV4IDEzMDM2MWYuLjY5MTI1NzEgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jYXRhbG9n cy5zZ21sCkBAIC03OTQwLDYgKzc5NDAsMTYgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+ Jmx0O2l0ZXJhdGlvbiBjb3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKIAog ICAgICA8cm93PgogICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJh IHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+c3VicmV0cnk8 L3N0cnVjdGZpZWxkPiA8dHlwZT5ib29sPC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBh cmE+CisgICAgICAgVHJ1ZSBpZiBwcmV2aW91cyBjaGFuZ2UgZmFpbGVkIHRvIGJlIGFwcGxpZWQg d2hpbGUgdGhlcmUgd2VyZSBhbnkKKyAgICAgICBhY3RpdmUgcGFyYWxsZWwgYXBwbHkgd29ya2Vy cywgbmVjZXNzaXRhdGluZyBhIHJldHJ5LgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwv cm93PgorCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRy eSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgogICAgICAgIDxzdHJ1Y3RmaWVsZD5z dWJjb25uaW5mbzwvc3RydWN0ZmllbGQ+IDx0eXBlPnRleHQ8L3R5cGU+CiAgICAgICA8L3BhcmE+ CiAgICAgICA8cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0 aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCmluZGV4IGYz NjY3MTAuLjEzMTFmMzMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0 aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbApAQCAt MTUwMCwxMiArMTUwMCwxMSBAQCBDT05URVhUOiAgcHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3Ig cmVwbGljYXRpb24gb3JpZ2luICJwZ18xNjM5NSIgZHVyaW5nICJJTlNFUgogCiAgIDxwYXJhPgog ICAgV2hlbiB0aGUgc3RyZWFtaW5nIG1vZGUgaXMgPGxpdGVyYWw+cGFyYWxsZWw8L2xpdGVyYWw+ LCB0aGUgZmluaXNoIExTTiBvZgotICAgZmFpbGVkIHRyYW5zYWN0aW9ucyBtYXkgbm90IGJlIGxv Z2dlZC4gSW4gdGhhdCBjYXNlLCBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvCi0gICBjaGFuZ2UgdGhl IHN0cmVhbWluZyBtb2RlIHRvIDxsaXRlcmFsPm9uPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5vZmY8 L2xpdGVyYWw+IGFuZAotICAgY2F1c2UgdGhlIHNhbWUgY29uZmxpY3RzIGFnYWluIHNvIHRoZSBm aW5pc2ggTFNOIG9mIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gd2lsbAotICAgYmUgd3JpdHRlbiB0 byB0aGUgc2VydmVyIGxvZy4gRm9yIHRoZSB1c2FnZSBvZiBmaW5pc2ggTFNOLCBwbGVhc2UgcmVm ZXIgdG8gPGxpbmsKLSAgIGxpbmtlbmQ9InNxbC1hbHRlcnN1YnNjcmlwdGlvbiI+PGNvbW1hbmQ+ QUxURVIgU1VCU0NSSVBUSU9OIC4uLgotICAgU0tJUDwvY29tbWFuZD48L2xpbms+LgorICAgZmFp bGVkIHRyYW5zYWN0aW9ucyBtYXkgbm90IGJlIGxvZ2dlZC4gSW4gdGhhdCBjYXNlLCB0aGUgZmFp bGVkIHRyYW5zYWN0aW9uCisgICB3aWxsIGJlIHJldHJpZWQgaW4gPGxpdGVyYWw+c3RyZWFtaW5n ID0gb248L2xpdGVyYWw+IG1vZGUuIElmIGl0IGZhaWxzCisgICBhZ2FpbiwgdGhlIGZpbmlzaCBM U04gb2YgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlCisgICBz ZXJ2ZXIgbG9nLiBGb3IgdGhlIHVzYWdlIG9mIGZpbmlzaCBMU04sIHBsZWFzZSByZWZlciB0bwor ICAgPGxpbmsgbGlua2VuZD0ic3FsLWFsdGVyc3Vic2NyaXB0aW9uIj48Y29tbWFuZD5BTFRFUiBT VUJTQ1JJUFRJT04gLi4uIFNLSVA8L2NvbW1hbmQ+PC9saW5rPi4KICAgPC9wYXJhPgogIDwvc2Vj dDE+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5z Z21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwKaW5kZXggZjE3 M2EwOS4uNjRkNTgwMiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2Ny aXB0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNn bWwKQEAgLTI1MSw2ICsyNTEsMTEgQEAgQ1JFQVRFIFNVQlNDUklQVElPTiA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+c3Vic2NyaXB0aW9uX25hbWU8L3JlcGxhY2VhYmwKICAgICAgICAg ICB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuIE5vdGUgdGhhdCBpZiBhbiBlcnJvciBoYXBwZW5z IGluIGEKICAgICAgICAgICBwYXJhbGxlbCBhcHBseSB3b3JrZXIsIHRoZSBmaW5pc2ggTFNOIG9m IHRoZSByZW1vdGUgdHJhbnNhY3Rpb24KICAgICAgICAgICBtaWdodCBub3QgYmUgcmVwb3J0ZWQg aW4gdGhlIHNlcnZlciBsb2cuCisgICAgICAgICAgV2hlbiBhcHBseWluZyBzdHJlYW1pbmcgdHJh bnNhY3Rpb25zLCBpZiBhIGRlYWRsb2NrIGlzIGRldGVjdGVkLCB0aGUKKyAgICAgICAgICBwYXJh bGxlbCBhcHBseSB3b3JrZXIgd2lsbCBleGl0IHdpdGggYW4gZXJyb3IuIFRoZQorICAgICAgICAg IDxsaXRlcmFsPnBhcmFsbGVsPC9saXRlcmFsPiBtb2RlIGlzIGRpc3JlZ2FyZGVkIHdoZW4gcmV0 cnlpbmc7CisgICAgICAgICAgaW5zdGVhZCB0aGUgdHJhbnNhY3Rpb24gd2lsbCBiZSBhcHBsaWVk IHVzaW5nIDxsaXRlcmFsPm9uPC9saXRlcmFsPgorICAgICAgICAgIG1vZGUuCiAgICAgICAgICA8 L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5jIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uYwppbmRleCBhNTA2ZmMzLi43MjNiMTQxIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5jCisrKyBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmMKQEAgLTcxLDYgKzcxLDcgQEAgR2V0U3Vi c2NyaXB0aW9uKE9pZCBzdWJpZCwgYm9vbCBtaXNzaW5nX29rKQogCXN1Yi0+c3RyZWFtID0gc3Vi Zm9ybS0+c3Vic3RyZWFtOwogCXN1Yi0+dHdvcGhhc2VzdGF0ZSA9IHN1YmZvcm0tPnN1YnR3b3Bo YXNlc3RhdGU7CiAJc3ViLT5kaXNhYmxlb25lcnIgPSBzdWJmb3JtLT5zdWJkaXNhYmxlb25lcnI7 CisJc3ViLT5yZXRyeSA9IHN1YmZvcm0tPnN1YnJldHJ5OwogCiAJLyogR2V0IGNvbm5pbmZvICov CiAJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoU1VCU0NSSVBUSU9OT0lELApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IDJkODEwNGIuLmMyYzdkOGEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRh bG9nL3N5c3RlbV92aWV3cy5zcWwKQEAgLTEzMDEsNyArMTMwMSw3IEBAIFJFVk9LRSBBTEwgT04g cGdfcmVwbGljYXRpb25fb3JpZ2luX3N0YXR1cyBGUk9NIHB1YmxpYzsKIFJFVk9LRSBBTEwgT04g cGdfc3Vic2NyaXB0aW9uIEZST00gcHVibGljOwogR1JBTlQgU0VMRUNUIChvaWQsIHN1YmRiaWQs IHN1YnNraXBsc24sIHN1Ym5hbWUsIHN1Ym93bmVyLCBzdWJlbmFibGVkLAogICAgICAgICAgICAg ICBzdWJiaW5hcnksIHN1YnN0cmVhbSwgc3VidHdvcGhhc2VzdGF0ZSwgc3ViZGlzYWJsZW9uZXJy LAotICAgICAgICAgICAgICBzdWJzbG90bmFtZSwgc3Vic3luY2NvbW1pdCwgc3VicHVibGljYXRp b25zLCBzdWJvcmlnaW4pCisgICAgICAgICAgICAgIHN1YnJldHJ5LCBzdWJzbG90bmFtZSwgc3Vi c3luY2NvbW1pdCwgc3VicHVibGljYXRpb25zLCBzdWJvcmlnaW4pCiAgICAgT04gcGdfc3Vic2Ny aXB0aW9uIFRPIHB1YmxpYzsKIAogQ1JFQVRFIFZJRVcgcGdfc3RhdF9zdWJzY3JpcHRpb25fc3Rh dHMgQVMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwppbmRleCA5ZTRiNjc2 Li5iMDNlMzdjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25j bWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC02 OTEsNiArNjkxLDcgQEAgQ3JlYXRlU3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3Jl YXRlU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAkJCQkJIExPR0lDQUxSRVBfVFdPUEhBU0VfU1RB VEVfUEVORElORyA6CiAJCQkJCSBMT0dJQ0FMUkVQX1RXT1BIQVNFX1NUQVRFX0RJU0FCTEVEKTsK IAl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3ViZGlzYWJsZW9uZXJyIC0gMV0gPSBCb29s R2V0RGF0dW0ob3B0cy5kaXNhYmxlb25lcnIpOworCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlv bl9zdWJyZXRyeSAtIDFdID0gQm9vbEdldERhdHVtKGZhbHNlKTsKIAl2YWx1ZXNbQW51bV9wZ19z dWJzY3JpcHRpb25fc3ViY29ubmluZm8gLSAxXSA9CiAJCUNTdHJpbmdHZXRUZXh0RGF0dW0oY29u bmluZm8pOwogCWlmIChvcHRzLnNsb3RfbmFtZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKaW5kZXggN2E0MDZiOC4uM2E2 NTk5NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBh cmFsbGVsd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBs eXBhcmFsbGVsd29ya2VyLmMKQEAgLTIyNCw2ICsyMjQsMTcgQEAgcGFfY2FuX3N0YXJ0KFRyYW5z YWN0aW9uSWQgeGlkKQogCWlmICghQWxsVGFibGVzeW5jc1JlYWR5KCkpCiAJCXJldHVybiBmYWxz ZTsKIAorCS8qCisJICogRG9uJ3QgdXNlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgZm9yIHJldHJp ZXMsIGJlY2F1c2UgaXQgaXMgcG9zc2libGUKKwkgKiB0aGF0IGEgZGVhZGxvY2sgd2FzIGRldGVj dGVkIHRoZSBsYXN0IHRpbWUgd2UgdHJpZWQgdG8gYXBwbHkgYQorCSAqIHRyYW5zYWN0aW9uIHVz aW5nIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorCSAqLworCWlmIChNeVN1YnNjcmlwdGlvbi0+ cmV0cnkpCisJeworCQllbG9nKERFQlVHMSwgInBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgYXJlIG5v dCB1c2VkIGZvciByZXRyaWVzIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKIAlyZXR1cm4gdHJ1 ZTsKIH0KIApAQCAtMTQ5MiwzICsxNTAzLDIyIEBAIHBhX3VubG9ja190cmFuc2FjdGlvbihUcmFu c2FjdGlvbklkIHhpZCwgTE9DS01PREUgbG9ja21vZGUpCiAJVW5sb2NrQXBwbHlUcmFuc2FjdGlv bkZvclNlc3Npb24oTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkLAogCQkJCQkJCQkJIFBB UkFMTEVMX0FQUExZX0xPQ0tfWEFDVCwgbG9ja21vZGUpOwogfQorCisvKiBDaGVjayBpZiBhbnkg YWN0aXZlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuICovCitib29sCitwYV9oYXZlX2FjdGl2ZV93 b3JrZXIodm9pZCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIFBhcmFsbGVs QXBwbHlXb3JrZXJzTGlzdCkKKwl7CisJCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp0bXBfd2lu Zm87CisKKwkJdG1wX3dpbmZvID0gKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICopIGxmaXJzdChs Yyk7CisKKwkJaWYgKHRtcF93aW5mby0+aW5fdXNlKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJ cmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMK aW5kZXggMjdjNzZjOC4uNGUyMTZlYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3dvcmtlci5jCkBAIC00MTAsNyArNDEwLDcgQEAgc3RhdGljIHZvaWQgc2VuZF9mZWVkYmFjayhY TG9nUmVjUHRyIHJlY3Zwb3MsIGJvb2wgZm9yY2UsIGJvb2wgcmVxdWVzdFJlcGx5KTsKIAogc3Rh dGljIHZvaWQgc3RvcmVfZmx1c2hfcG9zaXRpb24oWExvZ1JlY1B0ciByZW1vdGVfbHNuKTsKIAot c3RhdGljIHZvaWQgRGlzYWJsZVN1YnNjcmlwdGlvbkFuZEV4aXQodm9pZCk7CitzdGF0aWMgdm9p ZCBEaXNhYmxlU3Vic2NyaXB0aW9uT25FcnJvcih2b2lkKTsKIAogc3RhdGljIHZvaWQgYXBwbHlf aGFuZGxlX2NvbW1pdF9pbnRlcm5hbChMb2dpY2FsUmVwQ29tbWl0RGF0YSAqY29tbWl0X2RhdGEp Owogc3RhdGljIHZvaWQgYXBwbHlfaGFuZGxlX2luc2VydF9pbnRlcm5hbChBcHBseUV4ZWN1dGlv bkRhdGEgKmVkYXRhLApAQCAtNDQ3LDYgKzQ0Nyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNl dF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8odm9pZCk7CiBzdGF0aWMgVHJhbnNBcHBseUFjdGlv biBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJ CQkJCQkJCSBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKndpbmZvKTsKIAorc3RhdGljIHZvaWQg c2V0X3N1YnNjcmlwdGlvbl9yZXRyeShib29sIHJldHJ5KTsKKwogLyoKICAqIFJldHVybiB0aGUg bmFtZSBvZiB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIuCiAgKi8KQEAgLTEwNDAsNiAr MTA0Miw5IEBAIGFwcGx5X2hhbmRsZV9jb21taXQoU3RyaW5nSW5mbyBzKQogCiAJYXBwbHlfaGFu ZGxlX2NvbW1pdF9pbnRlcm5hbCgmY29tbWl0X2RhdGEpOwogCisJLyogUmVzZXQgdGhlIHJldHJ5 IGZsYWcuICovCisJc2V0X3N1YnNjcmlwdGlvbl9yZXRyeShmYWxzZSk7CisKIAkvKiBQcm9jZXNz IGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwog CXByb2Nlc3Nfc3luY2luZ190YWJsZXMoY29tbWl0X2RhdGEuZW5kX2xzbik7CiAKQEAgLTExNDks NiArMTE1NCw5IEBAIGFwcGx5X2hhbmRsZV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAogCWluX3Jl bW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOwogCisJLyogUmVzZXQgdGhlIHJldHJ5IGZsYWcuICov CisJc2V0X3N1YnNjcmlwdGlvbl9yZXRyeShmYWxzZSk7CisKIAkvKiBQcm9jZXNzIGFueSB0YWJs ZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nf c3luY2luZ190YWJsZXMocHJlcGFyZV9kYXRhLmVuZF9sc24pOwogCkBAIC0xMjA1LDYgKzEyMTMs OSBAQCBhcHBseV9oYW5kbGVfY29tbWl0X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKIAlzdG9yZV9m bHVzaF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CiAJaW5fcmVtb3RlX3RyYW5zYWN0 aW9uID0gZmFsc2U7CiAKKwkvKiBSZXNldCB0aGUgcmV0cnkgZmxhZy4gKi8KKwlzZXRfc3Vic2Ny aXB0aW9uX3JldHJ5KGZhbHNlKTsKKwogCS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBi ZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFyYWxsZWwuICovCiAJcHJvY2Vzc19zeW5jaW5nX3RhYmxl cyhwcmVwYXJlX2RhdGEuZW5kX2xzbik7CiAKQEAgLTEyNjYsNiArMTI3Nyw5IEBAIGFwcGx5X2hh bmRsZV9yb2xsYmFja19wcmVwYXJlZChTdHJpbmdJbmZvIHMpCiAJc3RvcmVfZmx1c2hfcG9zaXRp b24ocm9sbGJhY2tfZGF0YS5yb2xsYmFja19lbmRfbHNuKTsKIAlpbl9yZW1vdGVfdHJhbnNhY3Rp b24gPSBmYWxzZTsKIAorCS8qIFJlc2V0IHRoZSByZXRyeSBmbGFnLiAqLworCXNldF9zdWJzY3Jp cHRpb25fcmV0cnkoZmFsc2UpOworCiAJLyogUHJvY2VzcyBhbnkgdGFibGVzIHRoYXQgYXJlIGJl aW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4gKi8KIAlwcm9jZXNzX3N5bmNpbmdfdGFibGVz KHJvbGxiYWNrX2RhdGEucm9sbGJhY2tfZW5kX2xzbik7CiAKQEAgLTEzOTEsNiArMTQwNSw5IEBA IGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZShTdHJpbmdJbmZvIHMpCiAJCQlicmVhazsKIAl9 CiAKKwkvKiBSZXNldCB0aGUgcmV0cnkgZmxhZy4gKi8KKwlzZXRfc3Vic2NyaXB0aW9uX3JldHJ5 KGZhbHNlKTsKKwogCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CiAKIAkvKiBQcm9jZXNzIGFu eSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwpAQCAt MTg4MCw2ICsxODk3LDEwIEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBz KQogCQkJYnJlYWs7CiAJfQogCisJLyogUmVzZXQgdGhlIHJldHJ5IGZsYWcuICovCisJaWYgKHRv cGxldmVsX3hhY3QpCisJCXNldF9zdWJzY3JpcHRpb25fcmV0cnkoZmFsc2UpOworCiAJcmVzZXRf YXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKCk7CiB9CiAKQEAgLTIxMjMsNiArMjE0NCw5IEBAIGFw cGx5X2hhbmRsZV9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gcykKIAkJCWJyZWFrOwogCX0KIAor CS8qIFJlc2V0IHRoZSByZXRyeSBmbGFnLiAqLworCXNldF9zdWJzY3JpcHRpb25fcmV0cnkoZmFs c2UpOworCiAJLyogUHJvY2VzcyBhbnkgdGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXpl ZCBpbiBwYXJhbGxlbC4gKi8KIAlwcm9jZXNzX3N5bmNpbmdfdGFibGVzKGNvbW1pdF9kYXRhLmVu ZF9sc24pOwogCkBAIC00MTkxLDIwICs0MjE1LDI4IEBAIHN0YXJ0X3RhYmxlX3N5bmMoWExvZ1Jl Y1B0ciAqb3JpZ2luX3N0YXJ0cG9zLCBjaGFyICoqbXlzbG90bmFtZSkKIAl9CiAJUEdfQ0FUQ0go KTsKIAl7CisJCS8qCisJCSAqIEVtaXQgdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCByZWNvdmVyIGZy b20gdGhlIGVycm9yIHN0YXRlIHRvIGFuIGlkbGUKKwkJICogc3RhdGUKKwkJICovCisJCUhPTERf SU5URVJSVVBUUygpOworCisJCUVtaXRFcnJvclJlcG9ydCgpOworCQlBYm9ydE91dE9mQW55VHJh bnNhY3Rpb24oKTsKKwkJRmx1c2hFcnJvclN0YXRlKCk7CisKKwkJUkVTVU1FX0lOVEVSUlVQVFMo KTsKKworCQkvKiBSZXBvcnQgdGhlIHdvcmtlciBmYWlsZWQgZHVyaW5nIHRhYmxlIHN5bmNocm9u aXphdGlvbiAqLworCQlwZ3N0YXRfcmVwb3J0X3N1YnNjcmlwdGlvbl9lcnJvcihNeVN1YnNjcmlw dGlvbi0+b2lkLCBmYWxzZSk7CisKIAkJaWYgKE15U3Vic2NyaXB0aW9uLT5kaXNhYmxlb25lcnIp Ci0JCQlEaXNhYmxlU3Vic2NyaXB0aW9uQW5kRXhpdCgpOwotCQllbHNlCi0JCXsKLQkJCS8qCi0J CQkgKiBSZXBvcnQgdGhlIHdvcmtlciBmYWlsZWQgZHVyaW5nIHRhYmxlIHN5bmNocm9uaXphdGlv bi4gQWJvcnQKLQkJCSAqIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHNvIHRoYXQgdGhlIHN0YXRz IG1lc3NhZ2UgaXMgc2VudCBpbiBhbgotCQkJICogaWRsZSBzdGF0ZS4KLQkJCSAqLwotCQkJQWJv cnRPdXRPZkFueVRyYW5zYWN0aW9uKCk7Ci0JCQlwZ3N0YXRfcmVwb3J0X3N1YnNjcmlwdGlvbl9l cnJvcihNeVN1YnNjcmlwdGlvbi0+b2lkLCBmYWxzZSk7CisJCQlEaXNhYmxlU3Vic2NyaXB0aW9u T25FcnJvcigpOwogCi0JCQlQR19SRV9USFJPVygpOwotCQl9CisJCS8qIFNldCB0aGUgcmV0cnkg ZmxhZy4gKi8KKwkJc2V0X3N1YnNjcmlwdGlvbl9yZXRyeSh0cnVlKTsKKworCQlhcHBseV93b3Jr ZXJfY2xlYW5fZXhpdCgpOwogCX0KIAlQR19FTkRfVFJZKCk7CiAKQEAgLTQyMjksMjAgKzQyNjEs MjcgQEAgc3RhcnRfYXBwbHkoWExvZ1JlY1B0ciBvcmlnaW5fc3RhcnRwb3MpCiAJfQogCVBHX0NB VENIKCk7CiAJeworCQkvKgorCQkgKiBFbWl0IHRoZSBlcnJvciBtZXNzYWdlLCBhbmQgcmVjb3Zl ciBmcm9tIHRoZSBlcnJvciBzdGF0ZSB0byBhbiBpZGxlCisJCSAqIHN0YXRlCisJCSAqLworCQlI T0xEX0lOVEVSUlVQVFMoKTsKKworCQlFbWl0RXJyb3JSZXBvcnQoKTsKKwkJQWJvcnRPdXRPZkFu eVRyYW5zYWN0aW9uKCk7CisJCUZsdXNoRXJyb3JTdGF0ZSgpOworCisJCVJFU1VNRV9JTlRFUlJV UFRTKCk7CisKKwkJLyogUmVwb3J0IHRoZSB3b3JrZXIgZmFpbGVkIHdoaWxlIGFwcGx5aW5nIGNo YW5nZXMgKi8KKwkJcGdzdGF0X3JlcG9ydF9zdWJzY3JpcHRpb25fZXJyb3IoTXlTdWJzY3JpcHRp b24tPm9pZCwKKwkJCQkJCQkJCQkgIWFtX3RhYmxlc3luY193b3JrZXIoKSk7CisKIAkJaWYgKE15 U3Vic2NyaXB0aW9uLT5kaXNhYmxlb25lcnIpCi0JCQlEaXNhYmxlU3Vic2NyaXB0aW9uQW5kRXhp dCgpOwotCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBSZXBvcnQgdGhlIHdvcmtlciBmYWlsZWQg d2hpbGUgYXBwbHlpbmcgY2hhbmdlcy4gQWJvcnQgdGhlCi0JCQkgKiBjdXJyZW50IHRyYW5zYWN0 aW9uIHNvIHRoYXQgdGhlIHN0YXRzIG1lc3NhZ2UgaXMgc2VudCBpbiBhbgotCQkJICogaWRsZSBz dGF0ZS4KLQkJCSAqLwotCQkJQWJvcnRPdXRPZkFueVRyYW5zYWN0aW9uKCk7Ci0JCQlwZ3N0YXRf cmVwb3J0X3N1YnNjcmlwdGlvbl9lcnJvcihNeVN1YnNjcmlwdGlvbi0+b2lkLCAhYW1fdGFibGVz eW5jX3dvcmtlcigpKTsKKwkJCURpc2FibGVTdWJzY3JpcHRpb25PbkVycm9yKCk7CiAKLQkJCVBH X1JFX1RIUk9XKCk7Ci0JCX0KKwkJLyogU2V0IHRoZSByZXRyeSBmbGFnLiAqLworCQlzZXRfc3Vi c2NyaXB0aW9uX3JldHJ5KHRydWUpOwogCX0KIAlQR19FTkRfVFJZKCk7CiB9CkBAIC00NTMwLDM5 ICs0NTY5LDIwIEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKIH0KIAogLyoKLSAq IEFmdGVyIGVycm9yIHJlY292ZXJ5LCBkaXNhYmxlIHRoZSBzdWJzY3JpcHRpb24gaW4gYSBuZXcg dHJhbnNhY3Rpb24KLSAqIGFuZCBleGl0IGNsZWFubHkuCisgKiBEaXNhYmxlIHRoZSBzdWJzY3Jp cHRpb24gaW4gYSBuZXcgdHJhbnNhY3Rpb24uCiAgKi8KIHN0YXRpYyB2b2lkCi1EaXNhYmxlU3Vi c2NyaXB0aW9uQW5kRXhpdCh2b2lkKQorRGlzYWJsZVN1YnNjcmlwdGlvbk9uRXJyb3Iodm9pZCkK IHsKLQkvKgotCSAqIEVtaXQgdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCByZWNvdmVyIGZyb20gdGhl IGVycm9yIHN0YXRlIHRvIGFuIGlkbGUKLQkgKiBzdGF0ZQotCSAqLwotCUhPTERfSU5URVJSVVBU UygpOwotCi0JRW1pdEVycm9yUmVwb3J0KCk7Ci0JQWJvcnRPdXRPZkFueVRyYW5zYWN0aW9uKCk7 Ci0JRmx1c2hFcnJvclN0YXRlKCk7Ci0KLQlSRVNVTUVfSU5URVJSVVBUUygpOwotCi0JLyogUmVw b3J0IHRoZSB3b3JrZXIgZmFpbGVkIGR1cmluZyBlaXRoZXIgdGFibGUgc3luY2hyb25pemF0aW9u IG9yIGFwcGx5ICovCi0JcGdzdGF0X3JlcG9ydF9zdWJzY3JpcHRpb25fZXJyb3IoTXlMb2dpY2Fs UmVwV29ya2VyLT5zdWJpZCwKLQkJCQkJCQkJCSAhYW1fdGFibGVzeW5jX3dvcmtlcigpKTsKLQog CS8qIERpc2FibGUgdGhlIHN1YnNjcmlwdGlvbiAqLwogCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5k KCk7CiAJRGlzYWJsZVN1YnNjcmlwdGlvbihNeVN1YnNjcmlwdGlvbi0+b2lkKTsKIAlDb21taXRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKIAotCS8qIE5vdGlmeSB0aGUgc3Vic2NyaXB0aW9uIGhhcyBi ZWVuIGRpc2FibGVkIGFuZCBleGl0ICovCisJLyogTm90aWZ5IHRoZSBzdWJzY3JpcHRpb24gaGFz IGJlZW4gZGlzYWJsZWQgKi8KIAllcmVwb3J0KExPRywKIAkJCWVycm1zZygic3Vic2NyaXB0aW9u IFwiJXNcIiBoYXMgYmVlbiBkaXNhYmxlZCBiZWNhdXNlIG9mIGFuIGVycm9yIiwKIAkJCQkgICBN eVN1YnNjcmlwdGlvbi0+bmFtZSkpOwotCi0JYXBwbHlfd29ya2VyX2NsZWFuX2V4aXQoKTsKIH0K IAogLyoKQEAgLTQ4NTgsMyArNDg3OCw3MSBAQCBhcHBseV93b3JrZXJfY2xlYW5fZXhpdCh2b2lk KQogCiAJcHJvY19leGl0KDApOwogfQorCisvKgorICogU2V0IHN1YnJldHJ5IG9mIHBnX3N1YnNj cmlwdGlvbiBjYXRhbG9nLgorICoKKyAqIElmIHJldHJ5IGlzIHRydWUsIHN1YnNjcmliZXIgaXMg YWJvdXQgdG8gZXhpdCB3aXRoIGFuIGVycm9yLiBPdGhlcndpc2UsIGl0CisgKiBtZWFucyB0aGF0 IHRoZSB0cmFuc2FjdGlvbiB3YXMgYXBwbGllZCBzdWNjZXNzZnVsbHkuCisgKi8KK3N0YXRpYyB2 b2lkCitzZXRfc3Vic2NyaXB0aW9uX3JldHJ5KGJvb2wgcmV0cnkpCit7CisJUmVsYXRpb24JcmVs OworCUhlYXBUdXBsZQl0dXA7CisJYm9vbAkJc3RhcnRlZF90eCA9IGZhbHNlOworCWJvb2wJCW51 bGxzW05hdHRzX3BnX3N1YnNjcmlwdGlvbl07CisJYm9vbAkJcmVwbGFjZXNbTmF0dHNfcGdfc3Vi c2NyaXB0aW9uXTsKKwlEYXR1bQkJdmFsdWVzW05hdHRzX3BnX3N1YnNjcmlwdGlvbl07CisKKwkv KiBGYXN0IHBhdGggLSBpZiBubyBzdGF0ZSBjaGFuZ2UgdGhlbiBub3RoaW5nIHRvIGRvICovCisJ aWYgKE15U3Vic2NyaXB0aW9uLT5yZXRyeSA9PSByZXRyeSkKKwkJcmV0dXJuOworCisJLyogRmFz dCBwYXRoIC0gc2tpcCBmb3IgcGFyYWxsZWwgYXBwbHkgd29ya2VycyAqLworCWlmIChhbV9wYXJh bGxlbF9hcHBseV93b3JrZXIoKSkKKwkJcmV0dXJuOworCisJLyogRmFzdCBwYXRoIC0gc2tpcCBz ZXQgcmV0cnkgaWYgbm8gYWN0aXZlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgKi8KKwlpZiAocmV0 cnkgJiYgIXBhX2hhdmVfYWN0aXZlX3dvcmtlcigpKQorCQlyZXR1cm47CisKKwlpZiAoIUlzVHJh bnNhY3Rpb25TdGF0ZSgpKQorCXsKKwkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJc3Rh cnRlZF90eCA9IHRydWU7CisJfQorCisJLyogTG9vayB1cCB0aGUgc3Vic2NyaXB0aW9uIGluIHRo ZSBjYXRhbG9nICovCisJcmVsID0gdGFibGVfb3BlbihTdWJzY3JpcHRpb25SZWxhdGlvbklkLCBS b3dFeGNsdXNpdmVMb2NrKTsKKwl0dXAgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNVQlNDUklQVElP Tk9JRCwKKwkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oTXlTdWJzY3JpcHRpb24tPm9pZCkpOwor CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJCWVsb2coRVJST1IsICJzdWJzY3JpcHRp b24gXCIlc1wiIGRvZXMgbm90IGV4aXN0IiwgTXlTdWJzY3JpcHRpb24tPm5hbWUpOworCisJTG9j a1NoYXJlZE9iamVjdChTdWJzY3JpcHRpb25SZWxhdGlvbklkLCBNeVN1YnNjcmlwdGlvbi0+b2lk LCAwLAorCQkJCQkgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qIEZvcm0gYSBuZXcgdHVwbGUuICov CisJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykpOworCW1lbXNldChudWxscywgZmFs c2UsIHNpemVvZihudWxscykpOworCW1lbXNldChyZXBsYWNlcywgZmFsc2UsIHNpemVvZihyZXBs YWNlcykpOworCisJLyogU2V0IHN1YnJldHJ5ICovCisJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0 aW9uX3N1YnJldHJ5IC0gMV0gPSBCb29sR2V0RGF0dW0ocmV0cnkpOworCXJlcGxhY2VzW0FudW1f cGdfc3Vic2NyaXB0aW9uX3N1YnJldHJ5IC0gMV0gPSB0cnVlOworCisJdHVwID0gaGVhcF9tb2Rp ZnlfdHVwbGUodHVwLCBSZWxhdGlvbkdldERlc2NyKHJlbCksIHZhbHVlcywgbnVsbHMsCisJCQkJ CQkJcmVwbGFjZXMpOworCisJLyogVXBkYXRlIHRoZSBjYXRhbG9nLiAqLworCUNhdGFsb2dUdXBs ZVVwZGF0ZShyZWwsICZ0dXAtPnRfc2VsZiwgdHVwKTsKKworCS8qIENsZWFudXAuICovCisJaGVh cF9mcmVldHVwbGUodHVwKTsKKwl0YWJsZV9jbG9zZShyZWwsIE5vTG9jayk7CisKKwlpZiAoc3Rh cnRlZF90eCkKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRl eCA1MTQxYTY2Li43NmUxMzVjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTQ1MDgsOCArNDUwOCw5IEBAIGdl dFN1YnNjcmlwdGlvbnMoQXJjaGl2ZSAqZm91dCkKIAludHVwcyA9IFBRbnR1cGxlcyhyZXMpOwog CiAJLyoKLQkgKiBHZXQgc3Vic2NyaXB0aW9uIGZpZWxkcy4gV2UgZG9uJ3QgaW5jbHVkZSBzdWJz a2lwbHNuIGluIHRoZSBkdW1wIGFzCi0JICogYWZ0ZXIgcmVzdG9yaW5nIHRoZSBkdW1wIHRoaXMg dmFsdWUgbWF5IG5vIGxvbmdlciBiZSByZWxldmFudC4KKwkgKiBHZXQgc3Vic2NyaXB0aW9uIGZp ZWxkcy4gV2UgZG9uJ3QgaW5jbHVkZSBzdWJza2lwbHNuIGFuZCBzdWJyZXRyeSBpbgorCSAqIHRo ZSBkdW1wIGFzIGFmdGVyIHJlc3RvcmluZyB0aGUgZHVtcCB0aGlzIHZhbHVlIG1heSBubyBsb25n ZXIgYmUKKwkgKiByZWxldmFudC4KIAkgKi8KIAlpX3RhYmxlb2lkID0gUFFmbnVtYmVyKHJlcywg InRhYmxlb2lkIik7CiAJaV9vaWQgPSBQUWZudW1iZXIocmVzLCAib2lkIik7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19zdWJzY3JpcHRpb24uaAppbmRleCAwMTZhZmJjLi5lYjc4YTMyIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgKQEAgLTg4LDYgKzg4LDExIEBAIENBVEFMT0cocGdf c3Vic2NyaXB0aW9uLDYxMDAsU3Vic2NyaXB0aW9uUmVsYXRpb25JZCkgQktJX1NIQVJFRF9SRUxB VElPTiBCS0lfUk9XCiAJYm9vbAkJc3ViZGlzYWJsZW9uZXJyOwkvKiBUcnVlIGlmIGEgd29ya2Vy IGVycm9yIHNob3VsZCBjYXVzZSB0aGUKIAkJCQkJCQkJCSAqIHN1YnNjcmlwdGlvbiB0byBiZSBk aXNhYmxlZCAqLwogCisJYm9vbAkJc3VicmV0cnkgQktJX0RFRkFVTFQoZik7CS8qIFRydWUgaWYg cHJldmlvdXMgY2hhbmdlIGZhaWxlZAorCQkJCQkJCQkJCQkgKiB0byBiZSBhcHBsaWVkIHdoaWxl IHRoZXJlIHdlcmUKKwkJCQkJCQkJCQkJICogYW55IGFjdGl2ZSBwYXJhbGxlbCBhcHBseQorCQkJ CQkJCQkJCQkgKiB3b3JrZXJzICovCisKICNpZmRlZiBDQVRBTE9HX1ZBUkxFTgkJCS8qIHZhcmlh YmxlLWxlbmd0aCBmaWVsZHMgc3RhcnQgaGVyZSAqLwogCS8qIENvbm5lY3Rpb24gc3RyaW5nIHRv IHRoZSBwdWJsaXNoZXIgKi8KIAl0ZXh0CQlzdWJjb25uaW5mbyBCS0lfRk9SQ0VfTk9UX05VTEw7 CkBAIC0xMzEsNiArMTM2LDggQEAgdHlwZWRlZiBzdHJ1Y3QgU3Vic2NyaXB0aW9uCiAJYm9vbAkJ ZGlzYWJsZW9uZXJyOwkvKiBJbmRpY2F0ZXMgaWYgdGhlIHN1YnNjcmlwdGlvbiBzaG91bGQgYmUK IAkJCQkJCQkJICogYXV0b21hdGljYWxseSBkaXNhYmxlZCBpZiBhIHdvcmtlciBlcnJvcgogCQkJ CQkJCQkgKiBvY2N1cnMgKi8KKwlib29sCQlyZXRyeTsJCQkvKiBJbmRpY2F0ZXMgaWYgcHJldmlv dXMgY2hhbmdlIGZhaWxlZCB0byBiZQorCQkJCQkJCQkgKiBhcHBsaWVkIHVzaW5nIGEgcGFyYWxs ZWwgYXBwbHkgd29ya2VyICovCiAJY2hhcgkgICAqY29ubmluZm87CQkvKiBDb25uZWN0aW9uIHN0 cmluZyB0byB0aGUgcHVibGlzaGVyICovCiAJY2hhcgkgICAqc2xvdG5hbWU7CQkvKiBOYW1lIG9m IHRoZSByZXBsaWNhdGlvbiBzbG90ICovCiAJY2hhcgkgICAqc3luY2NvbW1pdDsJCS8qIFN5bmNo cm9ub3VzIGNvbW1pdCBzZXR0aW5nIGZvciB3b3JrZXIgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vd29ya2VyX2ludGVybmFsLmgKaW5kZXggNzI1MGY3YS4uNmEyODZjNiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKQEAgLTI4OSw2ICsyODksOCBAQCBleHRl cm4gdm9pZCBwYV9sb2NrX3RyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBs b2NrbW9kZSk7CiBleHRlcm4gdm9pZCBwYV91bmxvY2tfc3RyZWFtKFRyYW5zYWN0aW9uSWQgeGlk LCBMT0NLTU9ERSBsb2NrbW9kZSk7CiBleHRlcm4gdm9pZCBwYV91bmxvY2tfdHJhbnNhY3Rpb24o VHJhbnNhY3Rpb25JZCB4aWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKIAorZXh0ZXJuIGJvb2wgcGFf aGF2ZV9hY3RpdmVfd29ya2VyKHZvaWQpOworCiAjZGVmaW5lIGlzUGFyYWxsZWxBcHBseVdvcmtl cih3b3JrZXIpICgod29ya2VyKS0+YXBwbHlfbGVhZGVyX3BpZCAhPSBJbnZhbGlkUGlkKQogCiBz dGF0aWMgaW5saW5lIGJvb2wKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAx NV9zdHJlYW0ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVfc3RyZWFtLnBsCmluZGV4 IDY1ZjQzZjAuLjY0YjJlZGIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAx NV9zdHJlYW0ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbApA QCAtODcsOCArODcsMTYgQEAgc3ViIHRlc3Rfc3RyZWFtaW5nCiAJCSdjaGVjayBleHRyYSBjb2x1 bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsKIAogCSMgVGVzdCB0aGUgc3RyZWFtaW5nIGlu IGJpbmFyeSBtb2RlCisJbXkgJG9sZHBpZCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBh cHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisJ KTsKIAkkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkJIkFMVEVSIFNV QlNDUklQVElPTiB0YXBfc3ViIFNFVCAoYmluYXJ5ID0gb24pIik7CisJJG5vZGVfcHVibGlzaGVy LT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQg RlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5h bWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKwkgICkKKwkgIG9yIGRpZQorCSAgIlRpbWVk IG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNV QlNDUklQVElPTiI7CiAKIAkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4K IAkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9zdHJlYW1pbmdfcGFyYWxsZWxfYXBwbHkucGwgYi9z cmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfc3RyZWFtaW5nX3BhcmFsbGVsX2FwcGx5LnBsCmlu ZGV4IDEwZWZkMmQuLmQ2MTFkYzIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAzMl9zdHJlYW1pbmdfcGFyYWxsZWxfYXBwbHkucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDMyX3N0cmVhbWluZ19wYXJhbGxlbF9hcHBseS5wbApAQCAtMjEsOSArMjEsOSBAQCAk bm9kZV9wdWJsaXNoZXItPnN0YXJ0OwogbXkgJG5vZGVfc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJlcicpOwogJG5vZGVfc3Vic2NyaWJlci0+aW5p dDsKIAotIyBDaGVjayBpZiBhbnkgc3RyZWFtaW5nIGNodW5rcyBhcmUgYXBwbGllZCB1c2luZyB0 aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiBXZQotIyBoYXZlIHRvIGxvb2sgZm9yIHRoZSBERUJV RzEgbG9nIG1lc3NhZ2VzIGFib3V0IHRoYXQsIHNvIGJ1bXAgdXAgdGhlIGxvZwotIyB2ZXJib3Np dHkuCisjIENoZWNrIGlmIGFueSBzdHJlYW1pbmcgY2h1bmtzIGFyZSBhcHBsaWVkIHVzaW5nIHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisjIEFuZCBjaGVjayBpZiB0aGUgcGFyYWxsZWwgYXBw bHkgd29ya2VyIGZhaWxlZCB0byBzdGFydC4gV2UgaGF2ZSB0byBsb29rIGZvcgorIyB0aGUgREVC VUcxIGxvZyBtZXNzYWdlcyBhYm91dCB0aGF0LCBzbyBidW1wIHVwIHRoZSBsb2cgdmVyYm9zaXR5 LgogJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJsb2df bWluX21lc3NhZ2VzID0gZGVidWcxIik7CiAKICRub2RlX3N1YnNjcmliZXItPnN0YXJ0OwpAQCAt ODksNiArODksMTIgQEAgJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAogCXFyL0VSUk9S OiAoIFtBLVowLTldKzopPyBkZWFkbG9jayBkZXRlY3RlZC8sCiAJJG9mZnNldCk7CiAKKyMgQ2hl Y2sgaWYgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpcyBub3Qgc3RhcnRlZCBiZWNhdXNlIHRo ZSBhYm92ZQorIyB0cmFuc2FjdGlvbiBmYWlsZWQgdG8gYmUgYXBwbGllZC4KKyRub2RlX3N1YnNj cmliZXItPndhaXRfZm9yX2xvZygKKwlxci9ERUJVRzogKCBbQS1aMC05XSs6KT8gcGFyYWxsZWwg YXBwbHkgd29ya2VycyBhcmUgbm90IHVzZWQgZm9yIHJldHJpZXMvLAorCSRvZmZzZXQpOworCiAj IERyb3AgdGhlIHVuaXF1ZSBpbmRleCBvbiB0aGUgc3Vic2NyaWJlciwgbm93IGl0IHdvcmtzLgog JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIElOREVYIGlkeF90 YWIiKTsKIApAQCAtMTM2LDYgKzE0MiwxMiBAQCAkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9s b2coCiAJcXIvRVJST1I6ICggW0EtWjAtOV0rOik/IGRlYWRsb2NrIGRldGVjdGVkLywKIAkkb2Zm c2V0KTsKIAorIyBDaGVjayBpZiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlzIG5vdCBzdGFy dGVkIGJlY2F1c2UgdGhlIGFib3ZlCisjIHRyYW5zYWN0aW9uIGZhaWxlZCB0byBiZSBhcHBsaWVk LgorJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAorCXFyL0RFQlVHOiAoIFtBLVowLTld KzopPyBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGFyZSBub3QgdXNlZCBmb3IgcmV0cmllcy8sCisJ JG9mZnNldCk7CisKICMgRHJvcCB0aGUgdW5pcXVlIGluZGV4IG9uIHRoZSBzdWJzY3JpYmVyLCBu b3cgaXQgd29ya3MuCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRS T1AgSU5ERVggaWR4X3RhYiIpOwogCi0tIAoyLjcuMi53aW5kb3dzLjEKCg== --_005_OS0PR01MB5716339FF7CB759E751492CB940D9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v51-0001-Perform-streaming-logical-transactions-by-parall.patch" Content-Description: v51-0001-Perform-streaming-logical-transactions-by-parall.patch Content-Disposition: attachment; filename="v51-0001-Perform-streaming-logical-transactions-by-parall.patch"; size=190857; creation-date="Tue, 22 Nov 2022 12:37:22 GMT"; modification-date="Tue, 22 Nov 2022 12:42:21 GMT" Content-Transfer-Encoding: base64 RnJvbSBhN2U1MGY0ODdiODc4NTY0NmNlZDFkMGM5MDgzYjc0NGQ3Zjk2M2IzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjAgQXByIDIwMjIgMTY6NDU6MDcgKzA4MDAKU3ViamVjdDogW1BBVENI IHY1MSAxLzRdIFBlcmZvcm0gc3RyZWFtaW5nIGxvZ2ljYWwgdHJhbnNhY3Rpb25zIGJ5IHBhcmFs bGVsCiB3b3JrZXJzCgpDdXJyZW50bHksIGZvciBsYXJnZSB0cmFuc2FjdGlvbnMsIHRoZSBwdWJs aXNoZXIgc2VuZHMgdGhlIGRhdGEgaW4gbXVsdGlwbGUKc3RyZWFtcyAoY2hhbmdlcyBkaXZpZGVk IGludG8gY2h1bmtzIGRlcGVuZGluZyB1cG9uIGxvZ2ljYWxfZGVjb2Rpbmdfd29ya19tZW0pLAph bmQgdGhlbiBvbiB0aGUgc3Vic2NyaWJlci1zaWRlLCB0aGUgYXBwbHkgd29ya2VyIHdyaXRlcyB0 aGUgY2hhbmdlcyBpbnRvCnRlbXBvcmFyeSBmaWxlcyBhbmQgb25jZSBpdCByZWNlaXZlcyB0aGUg Y29tbWl0LCBpdCByZWFkcyBmcm9tIHRob3NlIGZpbGVzIGFuZAphcHBsaWVzIHRoZSBlbnRpcmUg dHJhbnNhY3Rpb24uIFRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHN1Y2gKdHJhbnNhY3Rp b25zLCB3ZSBjYW4gaW5zdGVhZCBhbGxvdyB0aGVtIHRvIGJlIGFwcGxpZWQgdmlhIHBhcmFsbGVs IHdvcmtlcnMuCgpJbiB0aGlzIGFwcHJvYWNoLCB3ZSBhc3NpZ24gYSBuZXcgcGFyYWxsZWwgYXBw bHkgd29ya2VyIChpZiBhdmFpbGFibGUpIGFzCnNvb24gYXMgdGhlIHhhY3QncyBmaXJzdCBzdHJl YW0gaXMgcmVjZWl2ZWQgYW5kIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHdpbGwKc2VuZCBjaGFu Z2VzIHRvIHRoaXMgbmV3IHdvcmtlciB2aWEgc2hhcmVkIG1lbW9yeS4gVGhlIHBhcmFsbGVsIGFw cGx5IHdvcmtlcgp3aWxsIGRpcmVjdGx5IGFwcGx5IHRoZSBjaGFuZ2UgaW5zdGVhZCBvZiB3cml0 aW5nIGl0IHRvIHRlbXBvcmFyeSBmaWxlcy4gV2UKa2VlcCB0aGlzIHdvcmtlciBhc3NpZ25lZCB0 aWxsIHRoZSB0cmFuc2FjdGlvbiBjb21taXQgaXMgcmVjZWl2ZWQgYW5kIGFsc28gd2FpdApmb3Ig dGhlIHdvcmtlciB0byBmaW5pc2ggYXQgY29tbWl0LiBUaGlzIHByZXNlcnZlcyBjb21taXQgb3Jk ZXJpbmcgYW5kIGF2b2lkcwp3cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gZmlsZXMgaW4gbW9z dCBjYXNlcy4gV2Ugc3RpbGwgbmVlZCB0byBzcGlsbCBpZgp0aGVyZSBpcyBubyB3b3JrZXIgYXZh aWxhYmxlLgoKVGhpcyBwYXRjaCBhbHNvIGV4dGVuZHMgdGhlIFNVQlNDUklQVElPTiAnc3RyZWFt aW5nJyBwYXJhbWV0ZXIgc28gdGhhdCB0aGUgdXNlcgpjYW4gY29udHJvbCB3aGV0aGVyIHRvIGFw cGx5IHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gaW4gYSBwYXJhbGxlbCBhcHBseQp3b3JrZXIg b3Igc3BpbGwgdGhlIGNoYW5nZSB0byBkaXNrLiBUaGUgdXNlciBjYW4gc2V0IHRoZSBzdHJlYW1p bmcgcGFyYW1ldGVyIHRvCidvbi9vZmYnLCAncGFyYWxsZWwnLiBUaGUgcGFyYW1ldGVyIHZhbHVl ICdwYXJhbGxlbCcgbWVhbnMgdGhlIHN0cmVhbWluZyB3aWxsCmJlIGFwcGxpZWQgdmlhIGEgcGFy YWxsZWwgYXBwbHkgd29ya2VyLCBpZiBhdmFpbGFibGUuIFRoZSBwYXJhbWV0ZXIgdmFsdWUKJ29u JyBtZWFucyB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHdpbGwgYmUgc3BpbGxlZCB0byBkaXNr LiBUaGUgZGVmYXVsdCB2YWx1ZQppcyAnb2ZmJyAoc2FtZSBhcyBjdXJyZW50IGJlaGF2aW91ciku CgpJbiBhZGRpdGlvbiwgdGhlIHBhdGNoIGV4dGVuZHMgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24g U1RSRUFNX0FCT1JUIG1lc3NhZ2Ugc28KdGhhdCBhYm9ydF90aW1lIGFuZCBhYm9ydF9sc24gY2Fu IGFsc28gYmUgc2VudCB3aGljaCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlCnJlcGxpY2F0aW9u IG9yaWdpbiBpbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd2hlbiB0aGUgc3RyZWFtaW5nIHRyYW5z YWN0aW9uIGlzCmFib3J0ZWQuIEJlY2F1c2UgdGhpcyBtZXNzYWdlIGV4dGVuc2lvbiBpcyBuZWVk ZWQgdG8gc3VwcG9ydCBwYXJhbGxlbApzdHJlYW1pbmcsIHBhcmFsbGVsIHN0cmVhbWluZyBpcyBu b3Qgc3VwcG9ydGVkIGZvciBwdWJsaWNhdGlvbnMgb24gc2VydmVycyA8ClBHMTYuCi0tLQogZG9j L3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICst CiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg MjggKy0KIGRvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgICAgICAgICAgICAg IHwgICAyMSArLQogZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCAgICAgICAgICAgICAgICAg ICAgICAgfCAgICA1ICsKIGRvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAyOSArLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9u LnNnbWwgICAgICAgICAgfCAgIDI0ICstCiBkb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwg ICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hhY3QuYyAgICAgICAgICAgICAgICAgIHwgICAxMyArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9z dWJzY3JpcHRpb25jbWRzLmMgICAgICAgICAgICB8ICAgNjYgKy0KIHNyYy9iYWNrZW5kL2xpYnBx L3BxbXEuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCArLQogc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9iZ3dvcmtlci5jICAgICAgICAgICAgICAgICAgfCAgICAzICsKIC4uLi9saWJw cXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyAgICAgICAgICAgIHwgICAgNiArLQogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgICAgICAgfCAgICAxICsK IC4uLi9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYyAgICAgIHwgMTMy OCArKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZWNvZGUuYyAgICAgICAgICAgfCAgIDEwICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xhdW5jaGVyLmMgICAgICAgICB8ICAyMTcgKysrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9tZXNvbi5idWlsZCAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMgICAgICAgICAgIHwgICAyMiArLQogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICAgICAgICAgfCAgIDM3ICstCiBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyAgICB8ICAgMTAgKy0KIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgICAgICAgIHwgICAyNSAr LQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgICAgICAgfCAx MDM4ICsrKysrKysrKysrKy0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdv dXRwdXQuYyAgICAgICAgfCAgIDIyICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2ln bmFsLmMgICAgICAgICAgICAgICB8ICAgIDQgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xt Z3IuYyAgICAgICAgICAgICAgICAgICAgfCAgIDQ2ICsKIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50LmMgICAgICAgICAgICB8ICAgIDYgKwogc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2xvY2tmdW5jcy5jICAgICAgICAgICAgICAgICAgfCAgICA1ICstCiBzcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyAgICAgICAgICAgICAgICB8ICAgMTIgKwogc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlICAgICAgfCAgICAxICsKIHNy Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiAr LQogc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDIxICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oICAgICAgICAgICAg ICB8ICAgMjEgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaCAgICAg ICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIu aCAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3Rv LmggICAgICAgICAgICAgfCAgIDI4ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fs d29ya2VyLmggICAgICAgICAgICB8ICAgIDggKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3Jp Z2luLmggICAgICAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9wZ291dHB1dC5oICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Jlb3JkZXJidWZmZXIuaCAgICAgICAgICAgIHwgICAgNyArLQogc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCAgICAgICAgICB8ICAxNjEgKystCiBz cmMvaW5jbHVkZS9zdG9yYWdlL2xtZ3IuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUg Kwogc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDE3ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oICAgICAgICAgICAgICAg ICAgICAgfCAgICAyICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91 dCAgICAgICAgIHwgICA0NiArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vic2NyaXB0aW9uLnNx bCAgICAgICAgICAgICAgfCAgICA2ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCAgICAgICAgICAgICAgICAgICB8ICAgIDYgKwogNDkgZmlsZXMgY2hhbmdlZCwgMzAxOSBpbnNl cnRpb25zKCspLCAzNDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKCmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21s CmluZGV4IDllZDJiMDIuLjEzMDM2MWYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9n cy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCkBAIC03OTAzLDExICs3OTAz LDE2IEBAIFNDUkFNLVNIQS0yNTYkPHJlcGxhY2VhYmxlPiZsdDtpdGVyYXRpb24gY291bnQmZ3Q7 PC9yZXBsYWNlYWJsZT46PHJlcGxhY2VhYmxlPiZsCiAKICAgICAgPHJvdz4KICAgICAgIDxlbnRy eSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlv biI+Ci0gICAgICAgPHN0cnVjdGZpZWxkPnN1YnN0cmVhbTwvc3RydWN0ZmllbGQ+IDx0eXBlPmJv b2w8L3R5cGU+CisgICAgICAgPHN0cnVjdGZpZWxkPnN1YnN0cmVhbTwvc3RydWN0ZmllbGQ+IDx0 eXBlPmNoYXI8L3R5cGU+CiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4KLSAgICAgICBJZiB0 cnVlLCB0aGUgc3Vic2NyaXB0aW9uIHdpbGwgYWxsb3cgc3RyZWFtaW5nIG9mIGluLXByb2dyZXNz Ci0gICAgICAgdHJhbnNhY3Rpb25zCisgICAgICAgQ29udHJvbHMgaG93IHRvIGhhbmRsZSB0aGUg c3RyZWFtaW5nIG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9uczoKKyAgICAgICA8bGl0ZXJhbD5m PC9saXRlcmFsPiA9IGRpc2FsbG93IHN0cmVhbWluZyBvZiBpbi1wcm9ncmVzcyB0cmFuc2FjdGlv bnMsCisgICAgICAgPGxpdGVyYWw+dDwvbGl0ZXJhbD4gPSBzcGlsbCB0aGUgY2hhbmdlcyBvZiBp bi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgdG8KKyAgICAgICBkaXNrIGFuZCBhcHBseSBhdCBvbmNl IGFmdGVyIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gdGhlCisgICAgICAgcHVibGlz aGVyLAorICAgICAgIDxsaXRlcmFsPnA8L2xpdGVyYWw+ID0gYXBwbHkgY2hhbmdlcyBkaXJlY3Rs eSB1c2luZyBhIHBhcmFsbGVsIGFwcGx5CisgICAgICAgd29ya2VyIGlmIGF2YWlsYWJsZSAoc2Ft ZSBhcyAndCcgaWYgbm8gd29ya2VyIGlzIGF2YWlsYWJsZSkKICAgICAgIDwvcGFyYT48L2VudHJ5 PgogICAgICA8L3Jvdz4KIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIv ZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDI0YjE2MjQuLjI1M2ExZWEgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNn bWwKQEAgLTQ5NTIsNyArNDk1Miw4IEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8 bGlzdGl0ZW0+CiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNwZWNpZmllcyBtYXhpbXVtIG51bWJl ciBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlcnMuIFRoaXMgaW5jbHVkZXMKLSAgICAgICAg Ym90aCBhcHBseSB3b3JrZXJzIGFuZCB0YWJsZSBzeW5jaHJvbml6YXRpb24gd29ya2Vycy4KKyAg ICAgICAgbGVhZGVyIGFwcGx5IHdvcmtlcnMsIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMsIGFuZCB0 YWJsZSBzeW5jaHJvbml6YXRpb24KKyAgICAgICAgd29ya2Vycy4KICAgICAgICA8L3BhcmE+CiAg ICAgICAgPHBhcmE+CiAgICAgICAgIExvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VycyBhcmUgdGFr ZW4gZnJvbSB0aGUgcG9vbCBkZWZpbmVkIGJ5CkBAIC00OTkyLDYgKzQ5OTMsMzEgQEAgQU5ZIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJl cGxhY2VhYmxlIGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5 PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1tYXgtcGFyYWxsZWwtYXBwbHktd29ya2Vy cy1wZXItc3Vic2NyaXB0aW9uIiB4cmVmbGFiZWw9Im1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJz X3Blcl9zdWJzY3JpcHRpb24iPgorICAgICAgPHRlcm0+PHZhcm5hbWU+bWF4X3BhcmFsbGVsX2Fw cGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5 cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5tYXhfcGFy YWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uPC92YXJuYW1lPiBjb25maWd1cmF0 aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJt PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBNYXhpbXVtIG51bWJl ciBvZiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIHBlciBzdWJzY3JpcHRpb24uIFRoaXMKKyAgICAg ICAgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgcGFyYWxsZWxpc20gZm9yIHN0cmVh bWluZyBvZgorICAgICAgICBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgd2l0aCBzdWJzY3JpcHRp b24gcGFyYW1ldGVyCisgICAgICAgIDxsaXRlcmFsPnN0cmVhbWluZyA9IHBhcmFsbGVsPC9saXRl cmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBwYXJhbGxl bCBhcHBseSB3b3JrZXJzIGFyZSB0YWtlbiBmcm9tIHRoZSBwb29sIGRlZmluZWQgYnkKKyAgICAg ICAgPHZhcm5hbWU+bWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VyczwvdmFybmFtZT4uCisg ICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBp cyAyLiBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAgICAgIDxmaWxl bmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29t bWFuZAorICAgICAgICBsaW5lLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgIDwvc2VjdDI+ CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgYi9k b2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCmluZGV4IGY4NzU2MzguLmYzNjY3 MTAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbApAQCAtMTQ5Nyw2ICsxNDk3 LDE2IEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBv cmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAgICBtaWdodCBub3QgdmlvbGF0ZSBhbnkg Y29uc3RyYWludC4gIFRoaXMgY2FuIGVhc2lseSBtYWtlIHRoZSBzdWJzY3JpYmVyCiAgICBpbmNv bnNpc3RlbnQuCiAgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4gdGhlIHN0cmVhbWluZyBt b2RlIGlzIDxsaXRlcmFsPnBhcmFsbGVsPC9saXRlcmFsPiwgdGhlIGZpbmlzaCBMU04gb2YKKyAg IGZhaWxlZCB0cmFuc2FjdGlvbnMgbWF5IG5vdCBiZSBsb2dnZWQuIEluIHRoYXQgY2FzZSwgaXQg bWF5IGJlIG5lY2Vzc2FyeSB0bworICAgY2hhbmdlIHRoZSBzdHJlYW1pbmcgbW9kZSB0byA8bGl0 ZXJhbD5vbjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPiBhbmQKKyAgIGNhdXNl IHRoZSBzYW1lIGNvbmZsaWN0cyBhZ2FpbiBzbyB0aGUgZmluaXNoIExTTiBvZiB0aGUgZmFpbGVk IHRyYW5zYWN0aW9uIHdpbGwKKyAgIGJlIHdyaXR0ZW4gdG8gdGhlIHNlcnZlciBsb2cuIEZvciB0 aGUgdXNhZ2Ugb2YgZmluaXNoIExTTiwgcGxlYXNlIHJlZmVyIHRvIDxsaW5rCisgICBsaW5rZW5k PSJzcWwtYWx0ZXJzdWJzY3JpcHRpb24iPjxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4K KyAgIFNLSVA8L2NvbW1hbmQ+PC9saW5rPi4KKyAgPC9wYXJhPgogIDwvc2VjdDE+CiAKICA8c2Vj dDEgaWQ9ImxvZ2ljYWwtcmVwbGljYXRpb24tcmVzdHJpY3Rpb25zIj4KQEAgLTE2NzgsNyArMTY4 OCw4IEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBv cmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAgICBzdWJzY3JpcHRpb24uICBBIGRpc2Fi bGVkIHN1YnNjcmlwdGlvbiBvciBhIGNyYXNoZWQgc3Vic2NyaXB0aW9uIHdpbGwgaGF2ZQogICAg emVybyByb3dzIGluIHRoaXMgdmlldy4gIElmIHRoZSBpbml0aWFsIGRhdGEgc3luY2hyb25pemF0 aW9uIG9mIGFueQogICAgdGFibGUgaXMgaW4gcHJvZ3Jlc3MsIHRoZXJlIHdpbGwgYmUgYWRkaXRp b25hbCB3b3JrZXJzIGZvciB0aGUgdGFibGVzCi0gICBiZWluZyBzeW5jaHJvbml6ZWQuCisgICBi ZWluZyBzeW5jaHJvbml6ZWQuIE1vcmVvdmVyLCBpZiB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9u IGlzIGFwcGxpZWQgaW4KKyAgIHBhcmFsbGVsLCB0aGVyZSB3aWxsIGJlIGFkZGl0aW9uYWwgd29y a2Vycy4KICAgPC9wYXJhPgogIDwvc2VjdDE+CiAKQEAgLTE3ODQsOCArMTc5NSwxMiBAQCBDT05U RVhUOiAgcHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luICJwZ18x NjM5NSIgZHVyaW5nICJJTlNFUgogICAgdG8gdGhlIHN1YnNjcmliZXIsIHBsdXMgc29tZSByZXNl cnZlIGZvciB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiAgICA8dmFybmFtZT5tYXhfbG9naWNhbF9y ZXBsaWNhdGlvbl93b3JrZXJzPC92YXJuYW1lPiBtdXN0IGJlIHNldCB0byBhdCBsZWFzdAogICAg dGhlIG51bWJlciBvZiBzdWJzY3JpcHRpb25zLCBhZ2FpbiBwbHVzIHNvbWUgcmVzZXJ2ZSBmb3Ig dGhlIHRhYmxlCi0gICBzeW5jaHJvbml6YXRpb24uICBBZGRpdGlvbmFsbHkgdGhlIDx2YXJuYW1l Pm1heF93b3JrZXJfcHJvY2Vzc2VzPC92YXJuYW1lPgotICAgbWF5IG5lZWQgdG8gYmUgYWRqdXN0 ZWQgdG8gYWNjb21tb2RhdGUgZm9yIHJlcGxpY2F0aW9uIHdvcmtlcnMsIGF0IGxlYXN0CisgICBz eW5jaHJvbml6YXRpb24uIElmIHRoZSBzdWJzY3JpcHRpb24gcGFyYW1ldGVyIDxsaXRlcmFsPnN0 cmVhbWluZzwvbGl0ZXJhbD4KKyAgIGlzIHNldCB0byA8bGl0ZXJhbD5wYXJhbGxlbDwvbGl0ZXJh bD4sCisgICA8bGl0ZXJhbD5tYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzPC9saXRlcmFs PiBzaG91bGQgYmUgaW5jcmVhc2VkCisgICBhY2NvcmRpbmcgdG8gdGhlIGRlc2lyZWQgbnVtYmVy IG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuICBBZGRpdGlvbmFsbHkgdGhlCisgICA8dmFybmFt ZT5tYXhfd29ya2VyX3Byb2Nlc3NlczwvdmFybmFtZT4gbWF5IG5lZWQgdG8gYmUgYWRqdXN0ZWQg dG8KKyAgIGFjY29tbW9kYXRlIGZvciByZXBsaWNhdGlvbiB3b3JrZXJzLCBhdCBsZWFzdAogICAg KDx2YXJuYW1lPm1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM8L3Zhcm5hbWU+CiAgICAr IDxsaXRlcmFsPjE8L2xpdGVyYWw+KS4gIE5vdGUgdGhhdCBzb21lIGV4dGVuc2lvbnMgYW5kIHBh cmFsbGVsIHF1ZXJpZXMKICAgIGFsc28gdGFrZSB3b3JrZXIgc2xvdHMgZnJvbSA8dmFybmFtZT5t YXhfd29ya2VyX3Byb2Nlc3NlczwvdmFybmFtZT4uCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv bW9uaXRvcmluZy5zZ21sIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAppbmRleCBlMjQy NmY3Li40NzM0ZWMwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKQEAgLTE4NTEsNiArMTg1MSwxMSBAQCBw b3N0Z3JlcyAgIDI3MDkzICAwLjAgIDAuMCAgMzAwOTYgIDI3NTIgPyAgICAgICAgU3MgICAxMToz NCAgIDA6MDAgcG9zdGdyZXM6IHNlcgogICAgICAgPGVudHJ5PldhaXRpbmcgdG8gYWNxdWlyZSBh biBhZHZpc29yeSB1c2VyIGxvY2suPC9lbnRyeT4KICAgICAgPC9yb3c+CiAgICAgIDxyb3c+Cisg ICAgICA8ZW50cnk+PGxpdGVyYWw+YXBwbHl0cmFuc2FjdGlvbjwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgPGVudHJ5PldhaXRpbmcgdG8gYWNxdWlyZSBhIGxvY2sgb24gYSByZW1vdGUgdHJhbnNh Y3Rpb24gYmVpbmcgYXBwbGllZAorICAgICAgYnkgYSBsb2dpY2FsIHJlcGxpY2F0aW9uIHN1YnNj cmliZXIuPC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgIDxyb3c+CiAgICAgICA8ZW50cnk+PGxp dGVyYWw+ZXh0ZW5kPC9saXRlcmFsPjwvZW50cnk+CiAgICAgICA8ZW50cnk+V2FpdGluZyB0byBl eHRlbmQgYSByZWxhdGlvbi48L2VudHJ5PgogICAgICA8L3Jvdz4KZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9wcm90b2NvbC5zZ21sIGIvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwKaW5kZXgg NWZkZDQyOS4uYzZhMGU4MCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwKQEAgLTMxMDIsNyArMzEwMiw3IEBAIHBz cWwgImRibmFtZT1wb3N0Z3JlcyByZXBsaWNhdGlvbj1kYXRhYmFzZSIgLWMgIklERU5USUZZX1NZ U1RFTTsiCiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgogICAgICAgIFByb3RvY29sIHZl cnNpb24uIEN1cnJlbnRseSB2ZXJzaW9ucyA8bGl0ZXJhbD4xPC9saXRlcmFsPiwgPGxpdGVyYWw+ MjwvbGl0ZXJhbD4sCi0gICAgICAgYW5kIDxsaXRlcmFsPjM8L2xpdGVyYWw+IGFyZSBzdXBwb3J0 ZWQuCisgICAgICAgPGxpdGVyYWw+MzwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD40PC9saXRlcmFs PiBhcmUgc3VwcG9ydGVkLgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+CiAgICAgICAgVmVy c2lvbiA8bGl0ZXJhbD4yPC9saXRlcmFsPiBpcyBzdXBwb3J0ZWQgb25seSBmb3Igc2VydmVyIHZl cnNpb24gMTQKQEAgLTMxMTIsNiArMzExMiwxMSBAQCBwc3FsICJkYm5hbWU9cG9zdGdyZXMgcmVw bGljYXRpb249ZGF0YWJhc2UiIC1jICJJREVOVElGWV9TWVNURU07IgogICAgICAgIFZlcnNpb24g PGxpdGVyYWw+MzwvbGl0ZXJhbD4gaXMgc3VwcG9ydGVkIG9ubHkgZm9yIHNlcnZlciB2ZXJzaW9u IDE1CiAgICAgICAgYW5kIGFib3ZlLCBhbmQgaXQgYWxsb3dzIHN0cmVhbWluZyBvZiB0d28tcGhh c2UgY29tbWl0cy4KICAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIFZlcnNpb24g PGxpdGVyYWw+NDwvbGl0ZXJhbD4gaXMgc3VwcG9ydGVkIG9ubHkgZm9yIHNlcnZlciB2ZXJzaW9u IDE2CisgICAgICAgYW5kIGFib3ZlLCBhbmQgaXQgYWxsb3dzIHN0cmVhbXMgb2YgbGFyZ2UgaW4t cHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIHRvCisgICAgICAgYmUgYXBwbGllZCBpbiBwYXJhbGxlbC4K KyAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxpc3RlbnRyeT4KIApA QCAtNjg4Miw2ICs2ODg3LDI4IEBAIHBzcWwgImRibmFtZT1wb3N0Z3JlcyByZXBsaWNhdGlvbj1k YXRhYmFzZSIgLWMgIklERU5USUZZX1NZU1RFTTsiCiAgICAgICAgIDwvcGFyYT4KICAgICAgICA8 L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICAgPHRlcm0+SW50NjQgKFhMb2dSZWNQdHIpPC90ZXJtPgorICAgICAgIDxsaXN0aXRl bT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgTFNOIG9mIHRoZSBhYm9ydC4gVGhpcyBm aWVsZCBpcyBhdmFpbGFibGUgc2luY2UgcHJvdG9jb2wgdmVyc2lvbgorICAgICAgICAgNC4KKyAg ICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4K KworICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT5JbnQ2NCAoVGltZXN0YW1wVHop PC90ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBBYm9y dCB0aW1lc3RhbXAgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgdmFsdWUgaXMgaW4gbnVtYmVyCisg ICAgICAgICBvZiBtaWNyb3NlY29uZHMgc2luY2UgUG9zdGdyZVNRTCBlcG9jaCAoMjAwMC0wMS0w MSkuIFRoaXMgZmllbGQgaXMKKyAgICAgICAgIGF2YWlsYWJsZSBzaW5jZSBwcm90b2NvbCB2ZXJz aW9uIDQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJs aXN0ZW50cnk+CisKICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICAgPC9saXN0aXRlbT4KICAgIDwv dmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2Ny aXB0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbApp bmRleCBmOWExNzc2Li5mMTczYTA5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0 ZV9zdWJzY3JpcHRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3Jp cHRpb24uc2dtbApAQCAtMjI4LDEzICsyMjgsMjkgQEAgQ1JFQVRFIFNVQlNDUklQVElPTiA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c3Vic2NyaXB0aW9uX25hbWU8L3JlcGxhY2VhYmwK ICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICAg IDx0ZXJtPjxsaXRlcmFsPnN0cmVhbWluZzwvbGl0ZXJhbD4gKDx0eXBlPmJvb2xlYW48L3R5cGU+ KTwvdGVybT4KKyAgICAgICAgPHRlcm0+PGxpdGVyYWw+c3RyZWFtaW5nPC9saXRlcmFsPiAoPHR5 cGU+ZW51bTwvdHlwZT4pPC90ZXJtPgogICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICA8cGFy YT4KICAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciB0byBlbmFibGUgc3RyZWFtaW5nIG9mIGlu LXByb2dyZXNzIHRyYW5zYWN0aW9ucwotICAgICAgICAgIGZvciB0aGlzIHN1YnNjcmlwdGlvbi4g IEJ5IGRlZmF1bHQsIGFsbCB0cmFuc2FjdGlvbnMKLSAgICAgICAgICBhcmUgZnVsbHkgZGVjb2Rl ZCBvbiB0aGUgcHVibGlzaGVyIGFuZCBvbmx5IHRoZW4gc2VudCB0byB0aGUKLSAgICAgICAgICBz dWJzY3JpYmVyIGFzIGEgd2hvbGUuCisgICAgICAgICAgZm9yIHRoaXMgc3Vic2NyaXB0aW9uLiAg VGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPiwKKyAgICAgICAgICBt ZWFuaW5nIGFsbCB0cmFuc2FjdGlvbnMgYXJlIGZ1bGx5IGRlY29kZWQgb24gdGhlIHB1Ymxpc2hl ciBhbmQgb25seQorICAgICAgICAgIHRoZW4gc2VudCB0byB0aGUgc3Vic2NyaWJlciBhcyBhIHdo b2xlLgorICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiBz ZXQgdG8gPGxpdGVyYWw+b248L2xpdGVyYWw+LCB0aGUgaW5jb21pbmcgY2hhbmdlcyBhcmUgd3Jp dHRlbiB0bworICAgICAgICAgIHRlbXBvcmFyeSBmaWxlcyBhbmQgdGhlbiBhcHBsaWVkIG9ubHkg YWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgICAgICAgY29tbWl0dGVkIG9uIHRoZSBwdWJs aXNoZXIgYW5kIHJlY2VpdmVkIGJ5IHRoZSBzdWJzY3JpYmVyLgorICAgICAgICAgPC9wYXJhPgor CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiBzZXQgdG8gPGxpdGVyYWw+cGFyYWxsZWw8 L2xpdGVyYWw+LCBpbmNvbWluZyBjaGFuZ2VzIGFyZSBkaXJlY3RseQorICAgICAgICAgIGFwcGxp ZWQgdmlhIG9uZSBvZiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VycywgaWYgYXZhaWxhYmxlLiBJ ZiBubworICAgICAgICAgIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpcyBmcmVlIHRvIGhhbmRsZSBz dHJlYW1pbmcgdHJhbnNhY3Rpb25zIHRoZW4KKyAgICAgICAgICB0aGUgY2hhbmdlcyBhcmUgd3Jp dHRlbiB0byB0ZW1wb3JhcnkgZmlsZXMgYW5kIGFwcGxpZWQgYWZ0ZXIgdGhlCisgICAgICAgICAg dHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLiBOb3RlIHRoYXQgaWYgYW4gZXJyb3IgaGFwcGVucyBp biBhCisgICAgICAgICAgcGFyYWxsZWwgYXBwbHkgd29ya2VyLCB0aGUgZmluaXNoIExTTiBvZiB0 aGUgcmVtb3RlIHRyYW5zYWN0aW9uCisgICAgICAgICAgbWlnaHQgbm90IGJlIHJlcG9ydGVkIGlu IHRoZSBzZXJ2ZXIgbG9nLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xpc3RpdGVtPgog ICAgICAgIDwvdmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12 aWV3cy5zZ21sIGIvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCmluZGV4IDdjNzE2ZmUu Ljk2NDJhODAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKQEAgLTEzNjEsOCArMTM2MSw5IEBACiAg ICAgICAgPGxpdGVyYWw+dmlydHVhbHhpZDwvbGl0ZXJhbD4sCiAgICAgICAgPGxpdGVyYWw+c3Bl Y3Rva2VuPC9saXRlcmFsPiwKICAgICAgICA8bGl0ZXJhbD5vYmplY3Q8L2xpdGVyYWw+LAotICAg ICAgIDxsaXRlcmFsPnVzZXJsb2NrPC9saXRlcmFsPiwgb3IKLSAgICAgICA8bGl0ZXJhbD5hZHZp c29yeTwvbGl0ZXJhbD4uCisgICAgICAgPGxpdGVyYWw+dXNlcmxvY2s8L2xpdGVyYWw+LAorICAg ICAgIDxsaXRlcmFsPmFkdmlzb3J5PC9saXRlcmFsPiwgb3IKKyAgICAgICA8bGl0ZXJhbD5hcHBs eXRyYW5zYWN0aW9uPC9saXRlcmFsPi4KICAgICAgICAoU2VlIGFsc28gPHhyZWYgbGlua2VuZD0i d2FpdC1ldmVudC1sb2NrLXRhYmxlIi8+LikKICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8 L3Jvdz4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYwppbmRleCA4MDg2Yjg1Li4wMzBjNjNhIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCkBAIC0xNzEyLDYgKzE3MTIsNyBAQCBSZWNvcmRU cmFuc2FjdGlvbkFib3J0KGJvb2wgaXNTdWJYYWN0KQogCWludAkJCW5jaGlsZHJlbjsKIAlUcmFu c2FjdGlvbklkICpjaGlsZHJlbjsKIAlUaW1lc3RhbXBUeiB4YWN0X3RpbWU7CisJYm9vbAkJcmVw bG9yaWdpbjsKIAogCS8qCiAJICogSWYgd2UgaGF2ZW4ndCBiZWVuIGFzc2lnbmVkIGFuIFhJRCwg bm9ib2R5IHdpbGwgY2FyZSB3aGV0aGVyIHdlIGFib3J0ZWQKQEAgLTE3NDIsNiArMTc0MywxMyBA QCBSZWNvcmRUcmFuc2FjdGlvbkFib3J0KGJvb2wgaXNTdWJYYWN0KQogCQllbG9nKFBBTklDLCAi Y2Fubm90IGFib3J0IHRyYW5zYWN0aW9uICV1LCBpdCB3YXMgYWxyZWFkeSBjb21taXR0ZWQiLAog CQkJIHhpZCk7CiAKKwkvKgorCSAqIEFyZSB3ZSB1c2luZyB0aGUgcmVwbGljYXRpb24gb3JpZ2lu cyBmZWF0dXJlPyAgT3IsIGluIG90aGVyIHdvcmRzLCBhcmUKKwkgKiB3ZSByZXBsYXlpbmcgcmVt b3RlIGFjdGlvbnM/CisJICovCisJcmVwbG9yaWdpbiA9IChyZXBsb3JpZ2luX3Nlc3Npb25fb3Jp Z2luICE9IEludmFsaWRSZXBPcmlnaW5JZCAmJgorCQkJCSAgcmVwbG9yaWdpbl9zZXNzaW9uX29y aWdpbiAhPSBEb05vdFJlcGxpY2F0ZUlkKTsKKwogCS8qIEZldGNoIHRoZSBkYXRhIHdlIG5lZWQg Zm9yIHRoZSBhYm9ydCByZWNvcmQgKi8KIAlucmVscyA9IHNtZ3JHZXRQZW5kaW5nRGVsZXRlcyhm YWxzZSwgJnJlbHMpOwogCW5jaGlsZHJlbiA9IHhhY3RHZXRDb21taXR0ZWRDaGlsZHJlbigmY2hp bGRyZW4pOwpAQCAtMTc2NSw2ICsxNzczLDExIEBAIFJlY29yZFRyYW5zYWN0aW9uQWJvcnQoYm9v bCBpc1N1YlhhY3QpCiAJCQkJCSAgIE15WGFjdEZsYWdzLCBJbnZhbGlkVHJhbnNhY3Rpb25JZCwK IAkJCQkJICAgTlVMTCk7CiAKKwlpZiAocmVwbG9yaWdpbikKKwkJLyogTW92ZSBMU05zIGZvcndh cmQgZm9yIHRoaXMgcmVwbGljYXRpb24gb3JpZ2luICovCisJCXJlcGxvcmlnaW5fc2Vzc2lvbl9h ZHZhbmNlKHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fbHNuLAorCQkJCQkJCQkgICBYYWN0TGFz dFJlY0VuZCk7CisKIAkvKgogCSAqIFJlcG9ydCB0aGUgbGF0ZXN0IGFzeW5jIGFib3J0IExTTiwg c28gdGhhdCB0aGUgV0FMIHdyaXRlciBrbm93cyB0bwogCSAqIGZsdXNoIHRoaXMgYWJvcnQuIFRo ZXJlJ3Mgbm90aGluZyB0byBiZSBnYWluZWQgYnkgZGVsYXlpbmcgdGhpcywgc2luY2UKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwppbmRleCBkNjczNTU3Li45ZTRiNjc2IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC04NCw3ICs4NCw3IEBA IHR5cGVkZWYgc3RydWN0IFN1Yk9wdHMKIAlib29sCQljb3B5X2RhdGE7CiAJYm9vbAkJcmVmcmVz aDsKIAlib29sCQliaW5hcnk7Ci0JYm9vbAkJc3RyZWFtaW5nOworCWNoYXIJCXN0cmVhbWluZzsK IAlib29sCQl0d29waGFzZTsKIAlib29sCQlkaXNhYmxlb25lcnI7CiAJY2hhcgkgICAqb3JpZ2lu OwpAQCAtMTAwLDYgKzEwMCw2MiBAQCBzdGF0aWMgdm9pZCBjaGVja19kdXBsaWNhdGVzX2luX3B1 Ymxpc3QoTGlzdCAqcHVibGlzdCwgRGF0dW0gKmRhdHVtcyk7CiBzdGF0aWMgTGlzdCAqbWVyZ2Vf cHVibGljYXRpb25zKExpc3QgKm9sZHB1Ymxpc3QsIExpc3QgKm5ld3B1Ymxpc3QsIGJvb2wgYWRk cHViLCBjb25zdCBjaGFyICpzdWJuYW1lKTsKIHN0YXRpYyB2b2lkIFJlcG9ydFNsb3RDb25uZWN0 aW9uRXJyb3IoTGlzdCAqcnN0YXRlcywgT2lkIHN1YmlkLCBjaGFyICpzbG90bmFtZSwgY2hhciAq ZXJyKTsKIAorLyoKKyAqIEV4dHJhY3QgdGhlIHN0cmVhbWluZyBtb2RlIHZhbHVlIGZyb20gYSBE ZWZFbGVtLiAgVGhpcyBpcyBsaWtlCisgKiBkZWZHZXRCb29sZWFuKCkgYnV0IGFsc28gYWNjZXB0 cyB0aGUgc3BlY2lhbCB2YWx1ZSBvZiAicGFyYWxsZWwiLgorICovCitjaGFyCitkZWZHZXRTdHJl YW1pbmdNb2RlKERlZkVsZW0gKmRlZikKK3sKKwkvKgorCSAqIElmIG5vIHBhcmFtZXRlciB2YWx1 ZSBnaXZlbiwgYXNzdW1lICJ0cnVlIiBpcyBtZWFudC4KKwkgKi8KKwlpZiAoIWRlZi0+YXJnKQor CQlyZXR1cm4gU1VCU1RSRUFNX09OOworCisJLyoKKwkgKiBBbGxvdyAwLCAxLCAiZmFsc2UiLCAi dHJ1ZSIsICJvZmYiLCAib24iIG9yICJwYXJhbGxlbCIuCisJICovCisJc3dpdGNoIChub2RlVGFn KGRlZi0+YXJnKSkKKwl7CisJCWNhc2UgVF9JbnRlZ2VyOgorCQkJc3dpdGNoIChpbnRWYWwoZGVm LT5hcmcpKQorCQkJeworCQkJCWNhc2UgMDoKKwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9PRkY7CisJ CQkJY2FzZSAxOgorCQkJCQlyZXR1cm4gU1VCU1RSRUFNX09OOworCQkJCWRlZmF1bHQ6CisJCQkJ CS8qIG90aGVyd2lzZSwgZXJyb3Igb3V0IGJlbG93ICovCisJCQkJCWJyZWFrOworCQkJfQorCQkJ YnJlYWs7CisJCWRlZmF1bHQ6CisJCQl7CisJCQkJY2hhcgkgICAqc3ZhbCA9IGRlZkdldFN0cmlu ZyhkZWYpOworCisJCQkJLyoKKwkJCQkgKiBUaGUgc2V0IG9mIHN0cmluZ3MgYWNjZXB0ZWQgaGVy ZSBzaG91bGQgbWF0Y2ggdXAgd2l0aCB0aGUKKwkJCQkgKiBncmFtbWFyJ3Mgb3B0X2Jvb2xlYW5f b3Jfc3RyaW5nIHByb2R1Y3Rpb24uCisJCQkJICovCisJCQkJaWYgKHBnX3N0cmNhc2VjbXAoc3Zh bCwgImZhbHNlIikgPT0gMCB8fAorCQkJCQlwZ19zdHJjYXNlY21wKHN2YWwsICJvZmYiKSA9PSAw KQorCQkJCQlyZXR1cm4gU1VCU1RSRUFNX09GRjsKKwkJCQlpZiAocGdfc3RyY2FzZWNtcChzdmFs LCAidHJ1ZSIpID09IDAgfHwKKwkJCQkJcGdfc3RyY2FzZWNtcChzdmFsLCAib24iKSA9PSAwKQor CQkJCQlyZXR1cm4gU1VCU1RSRUFNX09OOworCQkJCWlmIChwZ19zdHJjYXNlY21wKHN2YWwsICJw YXJhbGxlbCIpID09IDApCisJCQkJCXJldHVybiBTVUJTVFJFQU1fUEFSQUxMRUw7CisJCQl9CisJ CQlicmVhazsKKwl9CisKKwllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5U QVhfRVJST1IpLAorCQkJIGVycm1zZygiJXMgcmVxdWlyZXMgYSBCb29sZWFuIHZhbHVlIG9yIFwi cGFyYWxsZWxcIiIsCisJCQkJCWRlZi0+ZGVmbmFtZSkpKTsKKwlyZXR1cm4gU1VCU1RSRUFNX09G RjsJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KK30KIAogLyoKICAqIENvbW1vbiBvcHRpb24g cGFyc2luZyBmdW5jdGlvbiBmb3IgQ1JFQVRFIGFuZCBBTFRFUiBTVUJTQ1JJUFRJT04gY29tbWFu ZHMuCkBAIC0xMzgsNyArMTk0LDcgQEAgcGFyc2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMoUGFyc2VT dGF0ZSAqcHN0YXRlLCBMaXN0ICpzdG10X29wdGlvbnMsCiAJaWYgKElzU2V0KHN1cHBvcnRlZF9v cHRzLCBTVUJPUFRfQklOQVJZKSkKIAkJb3B0cy0+YmluYXJ5ID0gZmFsc2U7CiAJaWYgKElzU2V0 KHN1cHBvcnRlZF9vcHRzLCBTVUJPUFRfU1RSRUFNSU5HKSkKLQkJb3B0cy0+c3RyZWFtaW5nID0g ZmFsc2U7CisJCW9wdHMtPnN0cmVhbWluZyA9IFNVQlNUUkVBTV9PRkY7CiAJaWYgKElzU2V0KHN1 cHBvcnRlZF9vcHRzLCBTVUJPUFRfVFdPUEhBU0VfQ09NTUlUKSkKIAkJb3B0cy0+dHdvcGhhc2Ug PSBmYWxzZTsKIAlpZiAoSXNTZXQoc3VwcG9ydGVkX29wdHMsIFNVQk9QVF9ESVNBQkxFX09OX0VS UikpCkBAIC0yNDEsNyArMjk3LDcgQEAgcGFyc2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMoUGFyc2VT dGF0ZSAqcHN0YXRlLCBMaXN0ICpzdG10X29wdGlvbnMsCiAJCQkJZXJyb3JDb25mbGljdGluZ0Rl ZkVsZW0oZGVmZWwsIHBzdGF0ZSk7CiAKIAkJCW9wdHMtPnNwZWNpZmllZF9vcHRzIHw9IFNVQk9Q VF9TVFJFQU1JTkc7Ci0JCQlvcHRzLT5zdHJlYW1pbmcgPSBkZWZHZXRCb29sZWFuKGRlZmVsKTsK KwkJCW9wdHMtPnN0cmVhbWluZyA9IGRlZkdldFN0cmVhbWluZ01vZGUoZGVmZWwpOwogCQl9CiAJ CWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR3b19waGFzZSIpID09IDApCiAJCXsK QEAgLTYyOSw3ICs2ODUsNyBAQCBDcmVhdGVTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRl LCBDcmVhdGVTdWJzY3JpcHRpb25TdG10ICpzdG10LAogCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlw dGlvbl9zdWJvd25lciAtIDFdID0gT2JqZWN0SWRHZXREYXR1bShvd25lcik7CiAJdmFsdWVzW0Fu dW1fcGdfc3Vic2NyaXB0aW9uX3N1YmVuYWJsZWQgLSAxXSA9IEJvb2xHZXREYXR1bShvcHRzLmVu YWJsZWQpOwogCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJiaW5hcnkgLSAxXSA9IEJv b2xHZXREYXR1bShvcHRzLmJpbmFyeSk7Ci0JdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1 YnN0cmVhbSAtIDFdID0gQm9vbEdldERhdHVtKG9wdHMuc3RyZWFtaW5nKTsKKwl2YWx1ZXNbQW51 bV9wZ19zdWJzY3JpcHRpb25fc3Vic3RyZWFtIC0gMV0gPSBDaGFyR2V0RGF0dW0ob3B0cy5zdHJl YW1pbmcpOwogCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJ0d29waGFzZXN0YXRlIC0g MV0gPQogCQlDaGFyR2V0RGF0dW0ob3B0cy50d29waGFzZSA/CiAJCQkJCSBMT0dJQ0FMUkVQX1RX T1BIQVNFX1NUQVRFX1BFTkRJTkcgOgpAQCAtMTA5OCw3ICsxMTU0LDcgQEAgQWx0ZXJTdWJzY3Jp cHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJ CQkJaWYgKElzU2V0KG9wdHMuc3BlY2lmaWVkX29wdHMsIFNVQk9QVF9TVFJFQU1JTkcpKQogCQkJ CXsKIAkJCQkJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0cmVhbSAtIDFdID0KLQkJ CQkJCUJvb2xHZXREYXR1bShvcHRzLnN0cmVhbWluZyk7CisJCQkJCQlDaGFyR2V0RGF0dW0ob3B0 cy5zdHJlYW1pbmcpOwogCQkJCQlyZXBsYWNlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJzdHJl YW0gLSAxXSA9IHRydWU7CiAJCQkJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9w cW1xLmMgYi9zcmMvYmFja2VuZC9saWJwcS9wcW1xLmMKaW5kZXggNGQwNDE1ZS4uNjM5ODQ1ZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEvcHFtcS5jCisrKyBiL3NyYy9iYWNrZW5kL2xp YnBxL3BxbXEuYwpAQCAtMTMsMTEgKzEzLDEzIEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgog CisjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIK ICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgImxpYnBxL3BxbXEuaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBs aWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAKQEAgLTE2Miw5ICsxNjQsMTkgQEAgbXFfcHV0bWVz c2FnZShjaGFyIG1zZ3R5cGUsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4pCiAJCXJlc3VsdCA9 IHNobV9tcV9zZW5kdihwcV9tcV9oYW5kbGUsIGlvdiwgMiwgdHJ1ZSwgdHJ1ZSk7CiAKIAkJaWYg KHBxX21xX3BhcmFsbGVsX2xlYWRlcl9waWQgIT0gMCkKLQkJCVNlbmRQcm9jU2lnbmFsKHBxX21x X3BhcmFsbGVsX2xlYWRlcl9waWQsCi0JCQkJCQkgICBQUk9DU0lHX1BBUkFMTEVMX01FU1NBR0Us Ci0JCQkJCQkgICBwcV9tcV9wYXJhbGxlbF9sZWFkZXJfYmFja2VuZF9pZCk7CisJCXsKKwkJCWlm IChJc0xvZ2ljYWxQYXJhbGxlbEFwcGx5V29ya2VyKCkpCisJCQkJU2VuZFByb2NTaWduYWwocHFf bXFfcGFyYWxsZWxfbGVhZGVyX3BpZCwKKwkJCQkJCQkgICBQUk9DU0lHX1BBUkFMTEVMX0FQUExZ X01FU1NBR0UsCisJCQkJCQkJICAgcHFfbXFfcGFyYWxsZWxfbGVhZGVyX2JhY2tlbmRfaWQpOwor CQkJZWxzZQorCQkJeworCQkJCUFzc2VydChJc1BhcmFsbGVsV29ya2VyKCkpOworCQkJCVNlbmRQ cm9jU2lnbmFsKHBxX21xX3BhcmFsbGVsX2xlYWRlcl9waWQsCisJCQkJCQkJICAgUFJPQ1NJR19Q QVJBTExFTF9NRVNTQUdFLAorCQkJCQkJCSAgIHBxX21xX3BhcmFsbGVsX2xlYWRlcl9iYWNrZW5k X2lkKTsKKwkJCX0KKwkJfQogCiAJCWlmIChyZXN1bHQgIT0gU0hNX01RX1dPVUxEX0JMT0NLKQog CQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMg Yi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKaW5kZXggMGQ3MmRlMi4uMmRmYTlh YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwpAQCAtMTI4LDYgKzEyOCw5IEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QKIAl9LAogCXsKIAkJIkFwcGx5V29ya2VyTWFpbiIsIEFwcGx5V29ya2Vy TWFpbgorCX0sCisJeworCQkiUGFyYWxsZWxBcHBseVdvcmtlck1haW4iLCBQYXJhbGxlbEFwcGx5 V29ya2VyTWFpbgogCX0KIH07CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbGlicHF3YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKaW5kZXggN2Y2OTdiMC4u MjI1ZGE4MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNl aXZlci9saWJwcXdhbHJlY2VpdmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGli cHF3YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKQEAgLTQ0Myw5ICs0NDMsOSBAQCBsaWJw cXJjdl9zdGFydHN0cmVhbWluZyhXYWxSZWNlaXZlckNvbm4gKmNvbm4sCiAJCWFwcGVuZFN0cmlu Z0luZm8oJmNtZCwgInByb3RvX3ZlcnNpb24gJyV1JyIsCiAJCQkJCQkgb3B0aW9ucy0+cHJvdG8u bG9naWNhbC5wcm90b192ZXJzaW9uKTsKIAotCQlpZiAob3B0aW9ucy0+cHJvdG8ubG9naWNhbC5z dHJlYW1pbmcgJiYKLQkJCVBRc2VydmVyVmVyc2lvbihjb25uLT5zdHJlYW1Db25uKSA+PSAxNDAw MDApCi0JCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIsIHN0cmVhbWluZyAnb24nIik7 CisJCWlmIChvcHRpb25zLT5wcm90by5sb2dpY2FsLnN0cmVhbWluZ19zdHIpCisJCQlhcHBlbmRT dHJpbmdJbmZvKCZjbWQsICIsIHN0cmVhbWluZyAnJXMnIiwKKwkJCQkJCQkgb3B0aW9ucy0+cHJv dG8ubG9naWNhbC5zdHJlYW1pbmdfc3RyKTsKIAogCQlpZiAob3B0aW9ucy0+cHJvdG8ubG9naWNh bC50d29waGFzZSAmJgogCQkJUFFzZXJ2ZXJWZXJzaW9uKGNvbm4tPnN0cmVhbUNvbm4pID49IDE1 MDAwMCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZp bGUgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCmluZGV4IGM0ZTJm ZGUuLjJkYzI1ZTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv TWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQpA QCAtMTUsNiArMTUsNyBAQCBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xv YmFsCiBvdmVycmlkZSBDUFBGTEFHUyA6PSAtSSQoc3JjZGlyKSAkKENQUEZMQUdTKQogCiBPQkpT ID0gXAorCWFwcGx5cGFyYWxsZWx3b3JrZXIubyBcCiAJZGVjb2RlLm8gXAogCWxhdW5jaGVyLm8g XAogCWxvZ2ljYWwubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmVjNDhhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwpAQCAtMCwwICsxLDEzMjggQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICogYXBwbHlwYXJhbGxlbHdvcmtlci5jCisgKgkgICBTdXBwb3J0IHJvdXRp bmVzIGZvciBhcHBseWluZyB4YWN0IGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlcgorICoKKyAqIENv cHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq CisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2FwcGx5cGFyYWxsZWx3b3JrZXIuYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5l cyB0aGF0IGFyZSBpbnRlbmRlZCB0byBzdXBwb3J0IHNldHRpbmcgdXAsIHVzaW5nLAorICogYW5k IHRlYXJpbmcgZG93biBhIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvLgorICoKKyAqIFJlZmVyIHRv IHRoZSBjb21tZW50cyBpbiB0aGUgZmlsZSBoZWFkZXIgb2YgbG9naWNhbC93b3JrZXIuYyB0byBz ZWUgbW9yZQorICogaW5mb3JtYXRpb24gYWJvdXQgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4KKyAq CisgKiBEZWFkbG9jay1kZXRlY3Rpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLQorICogU2luY2Ug dGhlIGRhdGFiYXNlIHN0cnVjdHVyZSAoc2NoZW1hIG9mIHN1YnNjcmlwdGlvbiB0YWJsZXMsIGV0 Yy4pIG9mCisgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgbWF5IGJlIGRpZmZlcmVudCwgYXBw bHlpbmcgdHJhbnNhY3Rpb25zIGluIHBhcmFsbGVsCisgKiBtb2RlIG9uIHRoZSBzdWJzY3JpYmVy IHNpZGUgbWF5IGNhdXNlIHNvbWUgZGVhZGxvY2sgcHJvYmxlbXMgdGhhdCBkbyBub3QKKyAqIG9j Y3VyIG9uIHRoZSBwdWJsaXNoZXIgc2lkZS4KKyAqCisgKiBTdXBwb3NlIGEgc3Vic2NyaWJlZCB0 YWJsZSBkb2VzIG5vdCBoYXZlIGEgdW5pcXVlIGtleSBvbiB0aGUgcHVibGlzaGVyIGFuZAorICog aGFzIGEgdW5pcXVlIGtleSBvbiB0aGUgc3Vic2NyaWJlci4KKyAqCisgKiAxKSBEZWFkbG9jayBi ZXR3ZWVuIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBhIHBhcmFsbGVsIGFwcGx5IHdvcmtl cgorICoKKyAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgKFBBKSBpcyBleGVjdXRpbmcgVFgt MSBhbmQgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIKKyAqIChMQSkgaXMgZXhlY3V0aW5nIFRYLTIg Y29uY3VycmVudGx5IG9uIHRoZSBzdWJzY3JpYmVyLiBOb3csIExBIGlzIHdhaXRpbmcKKyAqIGZv ciBQQSBiZWNhdXNlIG9mIHRoZSB1bmlxdWUga2V5IG9mIHRoZSBzdWJzY3JpYmVkIHRhYmxlIHdo aWxlIFBBIGlzIHdhaXRpbmcKKyAqIGZvciBMQSB0byBzZW5kIGZ1cnRoZXIgbWVzc2FnZXMuCisg KgorICogSW4gb3JkZXIgZm9yIGxtZ3IgdG8gZGV0ZWN0IHRoaXMsIHdlIGhhdmUgTEEgYWNxdWly ZSBhIHNlc3Npb24gbG9jayBvbiB0aGUKKyAqIHJlbW90ZSB0cmFuc2FjdGlvbiAoYnkgcGFfbG9j a19zdHJlYW0oKSkgYW5kIGhhdmUgUEEgd2FpdCBvbiB0aGUgbG9jayBiZWZvcmUKKyAqIHRyeWlu ZyB0byByZWNlaXZlIG1lc3NhZ2VzLiBJbiBvdGhlciB3b3JkcywgTEEgYWNxdWlyZXMgdGhlIGxv Y2sgYmVmb3JlCisgKiBzZW5kaW5nIFNUUkVBTV9TVE9QIGFuZCByZWxlYXNlcyBpdCBpZiBhbHJl YWR5IGFjcXVpcmVkIGJlZm9yZSBzZW5kaW5nCisgKiBTVFJFQU1fU1RBUlQsIFNUUkVBTV9BQk9S VCAoZm9yIHRvcGxldmVsIHRyYW5zYWN0aW9uKSwgU1RSRUFNX1BSRVBBUkUgYW5kCisgKiBTVFJF QU1fQ09NTUlULiBGb3IgUEEsIGl0IGFsd2F5cyBuZWVkcyB0byBhY3F1aXJlIHRoZSBsb2NrIGFm dGVyIHByb2Nlc3NpbmcKKyAqIFNUUkVBTV9TVE9QIGFuZCBTVFJFQU1fQUJPUlQgKGZvciBzdWJ0 cmFuc2FjdGlvbikgYW5kIHRoZW4gcmVsZWFzZQorICogaW1tZWRpYXRlbHkgYWZ0ZXIgYWNxdWly aW5nIGl0LiBUaGF0IHdheSwgd2hlbiBQQSBpcyB3YWl0aW5nIGZvciBMQSwgd2UgY2FuCisgKiBo YXZlIGEgd2FpdC1lZGdlIGZyb20gUEEgdG8gTEEgaW4gbG1nciwgd2hpY2ggd2lsbCBtYWtlIGEg ZGVhZGxvY2sgaW4gbG1ncgorICogbGlrZToKKyAqCisgKiBMQSAod2FpdGluZyB0byBhY3F1aXJl IHRoZSBsb2NrIG9uIHRoZSB1bmlxdWUgaW5kZXgpIC0+IFBBICh3YWl0aW5nIHRvCisgKiBhY3F1 aXJlIHRoZSBsb2NrIG9uIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24pIC0+IExBCisgKgorICogMikg RGVhZGxvY2sgYmV0d2VlbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgcGFyYWxsZWwgYXBw bHkgd29ya2VycworICoKKyAqIFRoaXMgc2NlbmFyaW8gaXMgc2ltaWxhciB0byB0aGUgZmlyc3Qg Y2FzZSBidXQgVFgtMSBhbmQgVFgtMiBhcmUgZXhlY3V0ZWQgYnkKKyAqIHR3byBwYXJhbGxlbCBh cHBseSB3b3JrZXJzIChQQS0xIGFuZCBQQS0yIHJlc3BlY3RpdmVseSkuIEluIHRoaXMgc2NlbmFy aW8sCisgKiBQQS0yIGlzIHdhaXRpbmcgZm9yIFBBLTEgdG8gY29tcGxldGUgaXRzIHRyYW5zYWN0 aW9uIHdoaWxlIFBBLTEgaXMgd2FpdGluZworICogZm9yIHN1YnNlcXVlbnQgaW5wdXQgZnJvbSBM QS4gQWxzbywgTEEgaXMgd2FpdGluZyBmb3IgUEEtMiB0byBjb21wbGV0ZSBpdHMKKyAqIHRyYW5z YWN0aW9uIGluIG9yZGVyIHRvIHByZXNlcnZlIHRoZSBjb21taXQgb3JkZXIuIFRoZXJlIGlzIGEg ZGVhZGxvY2sgYW1vbmcKKyAqIHRocmVlIHByb2Nlc3Nlcy4KKyAqCisgKiBJbiBvcmRlciBmb3Ig bG1nciB0byBkZXRlY3QgdGhpcywgd2UgaGF2ZSBQQSBhY3F1aXJlIGEgc2Vzc2lvbiBsb2NrIG9u IHRoZQorICogdHJhbnNhY3Rpb24gYmVpbmcgYXBwbGllZCBhbmQgaGF2ZSBMQSB3YWl0IG9uIHRo ZSBsb2NrIGJlZm9yZSBwcm9jZWVkaW5nIGluCisgKiB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFu ZHMuIFRoYXQgd2F5LCB3ZSBjYW4gaGF2ZSBhIHdhaXQtZWRnZSBmcm9tIExBIHRvIFBBCisgKiBp biBsbWdyLCB3aGljaCB3aWxsIG1ha2UgYSBkZWFkbG9jayBpbiBsbWdyIGxpa2U6CisgKgorICog TEEgKHdhaXRpbmcgdG8gYWNxdWlyZSB0aGUgbG9jYWwgdHJhbnNhY3Rpb24gbG9jaykgLT4gUEEt MSAod2FpdGluZyB0bworICogYWNxdWlyZSB0aGUgbG9jayBvbiB0aGUgdW5pcXVlIGluZGV4KSAt PiBQQS0yICh3YWl0aW5nIHRvIGFjcXVpcmUgdGhlIGxvY2sKKyAqIG9uIHRoZSByZW1vdGUgdHJh bnNhY3Rpb24pIC0+IExBCisgKgorICogT25lIG1pZ2h0IHRoaW5rIHdlIGNhbiB1c2UgWGFjdExv Y2tUYWJsZVdhaXQoKSwgYnV0IFhhY3RMb2NrVGFibGVXYWl0KCkKKyAqIGNvbnNpZGVycyBQUkVQ QVJFRCBUUkFOU0FDVElPTiBhcyBzdGlsbCBpbiBwcm9ncmVzcyB3aGljaCBtZWFucyB0aGUgbG9j aworICogd29uJ3QgYmUgcmVsZWFzZWQgZXZlbiBpZiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vy IHByZXBhcmVkIHRoZSB0cmFuc2FjdGlvbi4KKyAqCisgKiAzKSBkZWFkbG9jayB3aGVuIHRoZSBz aG1fbXEgYnVmZmVyIGlzIGZ1bGwKKyAqCisgKiBUaGUgc2NlbmFyaW8gd2hlcmUgTEEgaGFzIHRv IHdhaXQgaXMgd2hlbiB0aGUgc2htX21xIGJ1ZmZlciBpcyBmdWxsLiBJbiB0aGUKKyAqIGFib3Zl IHNjZW5hcmlvIChpZS4gUEEtMSBhbmQgUEEtMiBhcmUgZXhlY3V0aW5nIHRyYW5zYWN0aW9ucyBj b25jdXJyZW50bHkpLAorICogaWYgdGhlIHNobV9tcSBidWZmZXIgYmV0d2VlbiBMQSBhbmQgUEEt MiBpcyBmdWxsLCBMQSBoYXMgdG8gd2FpdCB0byBzZW5kCisgKiBtZXNzYWdlcywgYW5kIHRoaXMg d2FpdCBkb2Vzbid0IGFwcGVhciBpbiBsbWdyLgorICoKKyAqIFRvIHJlc29sdmUgdGhpcyBpc3N1 ZSwgd2UgdXNlIG5vbi1ibG9ja2luZyB3cml0ZSBhbmQgd2FpdCB3aXRoIGEgdGltZW91dC4gSWYK KyAqIHRpbWVvdXQgaXMgZXhjZWVkZWQsIHRoZSBMQSByZXBvcnRzIGFuIGVycm9yIGFuZCByZXN0 YXJ0cyBsb2dpY2FsCisgKiByZXBsaWNhdGlvbi4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisK KyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKKyNp bmNsdWRlICJsaWJwcS9wcW1xLmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9z dG1hc3Rlci9pbnRlcnJ1cHQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNo ZXIuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgiCisjaW5jbHVkZSAi cmVwbGljYXRpb24vb3JpZ2luLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vd29ya2VyX2ludGVy bmFsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xtZ3Iu aCIKKyNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidXRpbHMvaW52YWwuaCIK KyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgi CisKKyNkZWZpbmUgUEdfTE9HSUNBTF9BUFBMWV9TSE1fTUFHSUMgMHg3ODdjYTA2NworCisvKgor ICogRFNNIGtleXMgZm9yIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gIFVubGlrZSBvdGhlciBwYXJh bGxlbCBleGVjdXRpb24gY29kZSwKKyAqIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJv dXQgRFNNIGtleXMgY29uZmxpY3Rpbmcgd2l0aCBwbGFuX25vZGVfaWQgd2UKKyAqIGNhbiB1c2Ug c21hbGwgaW50ZWdlcnMuCisgKi8KKyNkZWZpbmUgUEFSQUxMRUxfQVBQTFlfS0VZX1NIQVJFRAkJ MQorI2RlZmluZSBQQVJBTExFTF9BUFBMWV9LRVlfTVEJCQkyCisjZGVmaW5lIFBBUkFMTEVMX0FQ UExZX0tFWV9FUlJPUl9RVUVVRQkzCisKKy8qIFF1ZXVlIHNpemUgb2YgRFNNLCAxNiBNQiBmb3Ig bm93LiAqLworI2RlZmluZSBEU01fUVVFVUVfU0laRQkoMTYgKiAxMDI0ICogMTAyNCkKKworLyoK KyAqIEVycm9yIHF1ZXVlIHNpemUgb2YgRFNNLiBJdCBpcyBkZXNpcmFibGUgdG8gbWFrZSBpdCBs YXJnZSBlbm91Z2ggdGhhdCBhCisgKiB0eXBpY2FsIEVycm9yUmVzcG9uc2UgY2FuIGJlIHNlbnQg d2l0aG91dCBibG9ja2luZy4gIFRoYXQgd2F5LCBhIHdvcmtlciB0aGF0CisgKiBlcnJvcnMgb3V0 IGNhbiB3cml0ZSB0aGUgd2hvbGUgbWVzc2FnZSBpbnRvIHRoZSBxdWV1ZSBhbmQgdGVybWluYXRl IHdpdGhvdXQKKyAqIHdhaXRpbmcgZm9yIHRoZSB1c2VyIGJhY2tlbmQuCisgKi8KKyNkZWZpbmUg RFNNX0VSUk9SX1FVRVVFX1NJWkUJCQkoMTYgKiAxMDI0KQorCisvKgorICogVGhlcmUgYXJlIHRo cmVlIGZpZWxkcyBpbiBlYWNoIG1lc3NhZ2UgcmVjZWl2ZWQgYnkgdGhlIHBhcmFsbGVsIGFwcGx5 CisgKiB3b3JrZXI6IHN0YXJ0X2xzbiwgZW5kX2xzbiBhbmQgc2VuZF90aW1lLiBCZWNhdXNlIHdl IGhhdmUgdXBkYXRlZCB0aGVzZQorICogc3RhdGlzdGljcyBpbiB0aGUgbGVhZGVyIGFwcGx5IHdv cmtlciwgd2UgY2FuIGlnbm9yZSB0aGVzZSBmaWVsZHMgaW4gdGhlCisgKiBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgKHNlZSBmdW5jdGlvbiBMb2dpY2FsUmVwQXBwbHlMb29wKS4KKyAqLworI2RlZmlu ZSBTSVpFX1NUQVRTX01FU1NBR0UgKDIgKiBzaXplb2YoWExvZ1JlY1B0cikgKyBzaXplb2YoVGlt ZXN0YW1wVHopKQorCisvKgorICogVGhlIHR5cGUgb2Ygc2Vzc2lvbi1sZXZlbCBsb2NrIG9uIGEg dHJhbnNhY3Rpb24gYmVpbmcgYXBwbGllZCBvbiBhIGxvZ2ljYWwKKyAqIHJlcGxpY2F0aW9uIHN1 YnNjcmliZXIuCisgKi8KKyNkZWZpbmUgUEFSQUxMRUxfQVBQTFlfTE9DS19TVFJFQU0JMAorI2Rl ZmluZSBQQVJBTExFTF9BUFBMWV9MT0NLX1hBQ1QJMQorCisvKgorICogSGFzaCB0YWJsZSBlbnRy eSB0byBtYXAgeGlkIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgc3RhdGUuCisgKi8KK3R5 cGVkZWYgc3RydWN0IFBhcmFsbGVsQXBwbHlXb3JrZXJFbnRyeQoreworCVRyYW5zYWN0aW9uSWQg eGlkOwkJCS8qIEhhc2gga2V5IC0tIG11c3QgYmUgZmlyc3QgKi8KKwlQYXJhbGxlbEFwcGx5V29y a2VySW5mbyAqd2luZm87Cit9IFBhcmFsbGVsQXBwbHlXb3JrZXJFbnRyeTsKKworLyogUGFyYWxs ZWwgYXBwbHkgd29ya2VycyBoYXNoIHRhYmxlIChpbml0aWFsaXplZCBvbiBmaXJzdCB1c2UpLiAq Lworc3RhdGljIEhUQUIgKlBhcmFsbGVsQXBwbHlXb3JrZXJzSGFzaCA9IE5VTEw7CisKKy8qCisg KiBBIGxpc3QgdG8gbWFpbnRhaW4gdGhlIGFjdGl2ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLiBU aGUgaW5mb3JtYXRpb24gZm9yCisgKiB0aGUgbmV3IHdvcmtlciBpcyBhZGRlZCB0byB0aGUgbGlz dCBhZnRlciBzdWNjZXNzZnVsbHkgbGF1bmNoaW5nIGl0LiBUaGUKKyAqIGxpc3QgZW50cnkgaXMg cmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbiBpZiB0aGVyZSBhcmUgYWxyZWFk eQorICogZW5vdWdoIHdvcmtlcnMgaW4gdGhlIHdvcmtlciBwb29sLiBGb3IgbW9yZSBpbmZvcm1h dGlvbiBhYm91dCB0aGUgd29ya2VyCisgKiBwb29sLCBzZWUgY29tbWVudHMgYXRvcCB3b3JrZXIu Yy4KKyAqLworc3RhdGljIExpc3QgKlBhcmFsbGVsQXBwbHlXb3JrZXJzTGlzdCA9IE5JTDsKKwor LyoKKyAqIEluZm9ybWF0aW9uIHNoYXJlZCBiZXR3ZWVuIGxlYWRlciBhcHBseSB3b3JrZXIgYW5k IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqLworUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAq TXlQYXJhbGxlbFNoYXJlZCA9IE5VTEw7CisKKy8qCisgKiBJcyB0aGVyZSBhIG1lc3NhZ2Ugc2Vu dCBieSBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0aGF0IHRoZSBsZWFkZXIgYXBwbHkKKyAqIHdv cmtlciBuZWVkcyB0byByZWNlaXZlPworICovCit2b2xhdGlsZSBzaWdfYXRvbWljX3QgUGFyYWxs ZWxBcHBseU1lc3NhZ2VQZW5kaW5nID0gZmFsc2U7CisKKy8qCisgKiBDYWNoZSB0aGUgcGFyYWxs ZWwgYXBwbHkgd29ya2VyIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBhcHBseWluZyB0aGUKKyAq IGN1cnJlbnQgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLiBJdCBpcyB1c2VkIHRvIHNhdmUgdGhlIGNv c3Qgb2Ygc2VhcmNoaW5nIHRoZQorICogaGFzaCB0YWJsZSB3aGVuIGFwcGx5aW5nIHRoZSBjaGFu Z2VzIGJldHdlZW4gU1RSRUFNX1NUQVJUIGFuZCBTVFJFQU1fU1RPUC4KKyAqLworUGFyYWxsZWxB cHBseVdvcmtlckluZm8gKnN0cmVhbV9hcHBseV93b3JrZXIgPSBOVUxMOworCisvKiBBIGxpc3Qg dG8gbWFpbnRhaW4gc3VidHJhbnNhY3Rpb25zLCBpZiBhbnkuICovCitMaXN0CSAgICpzdWJ4YWN0 bGlzdCA9IE5JTDsKKworc3RhdGljIGJvb2wgcGFfY2FuX3N0YXJ0KFRyYW5zYWN0aW9uSWQgeGlk KTsKK3N0YXRpYyBib29sIHBhX3NldHVwX2RzbShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2lu Zm8pOworc3RhdGljIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICpwYV9pbml0X2FuZF9sYXVuY2hf d29ya2VyKHZvaWQpOworc3RhdGljIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICpwYV9nZXRfYXZh aWxhYmxlX3dvcmtlcih2b2lkKTsKK3N0YXRpYyB2b2lkIHBhX2ZyZWVfd29ya2VyX2luZm8oUGFy YWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvKTsKK3N0YXRpYyBQYXJhbGxlbFRyYW5zU3RhdGUg cGFfZ2V0X3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCk7CisK Ky8qCisgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgT0sgdG8gc3RhcnQgYSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wKK3BhX2Nhbl9zdGFy dChUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlk KSk7CisKKwkvKgorCSAqIERvbid0IHN0YXJ0IGEgbmV3IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBp ZiB0aGUgc3Vic2NyaXB0aW9uIGlzIG5vdAorCSAqIHVzaW5nIHBhcmFsbGVsIHN0cmVhbWluZyBt b2RlLCBvciBpZiB0aGUgcHVibGlzaGVyIGRvZXMgbm90IHN1cHBvcnQKKwkgKiBwYXJhbGxlbCBh cHBseS4KKwkgKi8KKwlpZiAoIU15TG9naWNhbFJlcFdvcmtlci0+cGFyYWxsZWxfYXBwbHkpCisJ CXJldHVybiBmYWxzZTsKKworCS8qIE9ubHkgbGVhZGVyIGFwcGx5IHdvcmtlcnMgY2FuIHN0YXJ0 IHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuICovCisJaWYgKCFhbV9sZWFkZXJfYXBwbHlfd29ya2Vy KCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogRG9uJ3Qgc3RhcnQgYSBuZXcgcGFyYWxs ZWwgd29ya2VyIGlmIHVzZXIgaGFzIHNldCBza2lwbHNuIGFzIGl0J3MKKwkgKiBwb3NzaWJsZSB0 aGF0IHVzZXIgd2FudCB0byBza2lwIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uIEZvcgorCSAq IHN0cmVhbWluZyB0cmFuc2FjdGlvbiwgd2UgbmVlZCB0byBzcGlsbCB0aGUgdHJhbnNhY3Rpb24g dG8gZGlzayBzbyB0aGF0CisJICogd2UgY2FuIGdldCB0aGUgbGFzdCBMU04gb2YgdGhlIHRyYW5z YWN0aW9uIHRvIGp1ZGdlIHdoZXRoZXIgdG8gc2tpcAorCSAqIGJlZm9yZSBzdGFydGluZyB0byBh cHBseSB0aGUgY2hhbmdlLgorCSAqLworCWlmICghWExvZ1JlY1B0cklzSW52YWxpZChNeVN1YnNj cmlwdGlvbi0+c2tpcGxzbikpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogRm9yIHN0cmVh bWluZyB0cmFuc2FjdGlvbnMgdGhhdCBhcmUgYmVpbmcgYXBwbGllZCB1c2luZyBhIHBhcmFsbGVs CisJICogYXBwbHkgd29ya2VyLCB3ZSBjYW5ub3QgZGVjaWRlIHdoZXRoZXIgdG8gYXBwbHkgdGhl IGNoYW5nZSBmb3IgYQorCSAqIHJlbGF0aW9uIHRoYXQgaXMgbm90IGluIHRoZSBSRUFEWSBzdGF0 ZSAoc2VlCisJICogc2hvdWxkX2FwcGx5X2NoYW5nZXNfZm9yX3JlbCkgYXMgd2Ugd29uJ3Qga25v dyByZW1vdGVfZmluYWxfbHNuIGJ5IHRoYXQKKwkgKiB0aW1lLiBTbywgd2UgZG9uJ3Qgc3RhcnQg dGhlIG5ldyBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaW4gdGhpcyBjYXNlLgorCSAqLworCWlmICgh QWxsVGFibGVzeW5jc1JlYWR5KCkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOwor fQorCisvKgorICogR2V0IGFuIGF2YWlsYWJsZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZnJvbSB0 aGUgd29ya2VyIHBvb2wuCisgKi8KK3N0YXRpYyBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqCitw YV9nZXRfYXZhaWxhYmxlX3dvcmtlcih2b2lkKQoreworCUxpc3QJICAgKmFjdGl2ZV93b3JrZXJz ID0gbGlzdF9jb3B5KFBhcmFsbGVsQXBwbHlXb3JrZXJzTGlzdCk7CisJTGlzdENlbGwgICAqbGM7 CisKKwlmb3JlYWNoKGxjLCBhY3RpdmVfd29ya2VycykKKwl7CisJCVBhcmFsbGVsQXBwbHlXb3Jr ZXJJbmZvICp3aW5mbzsKKworCQl3aW5mbyA9IChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKSBs Zmlyc3QobGMpOworCisJCS8qCisJCSAqIFdlIGZpcnN0IHRyeSB0byBmcmVlIHRoZSB3b3JrZXIg dG8gaW1wcm92ZSBvdXIgY2hhbmNlcyBvZiBmaW5kaW5nCisJCSAqIG9uZSB0aGF0IGlzIG5vdCBp biB1c2UuIE5vcm1hbGx5LCB3ZSBmcmVlIHRoZSB3b3JrZXIgYWZ0ZXIgZW5zdXJpbmcKKwkJICog dGhhdCB0aGUgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIGJ5IHRoZSBwYXJhbGxlbCB3b3JrZXIg YnV0IGZvcgorCQkgKiByb2xsYmFja3MsIHdlIGRvbid0IHdhaXQgZm9yIHRoZSB0cmFuc2FjdGlv biB0byBmaW5pc2ggc28gY2FuJ3QgZnJlZQorCQkgKiB0aGUgd29ya2VyIGluZm9ybWF0aW9uIGlt bWVkaWF0ZWx5LgorCQkgKi8KKwkJaWYgKHBhX2ZyZWVfd29ya2VyKHdpbmZvLCB3aW5mby0+c2hh cmVkLT54aWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKCF3aW5mby0+aW5fdXNlKQorCQkJcmV0 dXJuIHdpbmZvOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogQWxsb2NhdGUgYSBw YXJhbGxlbCBhcHBseSB3b3JrZXIgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBzcGVjaWZpZWQg eGlkLgorICoKKyAqIFdlIGZpcnN0IHRyeSB0byBnZXQgYW4gYXZhaWxhYmxlIHdvcmtlciBmcm9t IHRoZSBwb29sLCBpZiBhbnkgYW5kIHRoZW4gdHJ5CisgKiB0byBsYXVuY2ggYSBuZXcgd29ya2Vy LiBPbiBzdWNjZXNzZnVsIGFsbG9jYXRpb24sIHJlbWVtYmVyIHRoZSB3b3JrZXIKKyAqIGluZm9y bWF0aW9uIGluIHRoZSBoYXNoIHRhYmxlIHNvIHRoYXQgd2UgY2FuIGdldCBpdCBsYXRlciBmb3Ig cHJvY2Vzc2luZyB0aGUKKyAqIHN0cmVhbWluZyBjaGFuZ2VzLgorICovCit2b2lkCitwYV9hbGxv Y2F0ZV93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQpCit7CisJYm9vbAkJZm91bmQ7CisJUGFyYWxs ZWxBcHBseVdvcmtlckluZm8gKndpbmZvID0gTlVMTDsKKwlQYXJhbGxlbEFwcGx5V29ya2VyRW50 cnkgKmVudHJ5OworCisJaWYgKCFwYV9jYW5fc3RhcnQoeGlkKSkKKwkJcmV0dXJuOworCisJLyog Rmlyc3QgdGltZSB0aHJvdWdoLCBpbml0aWFsaXplIGFwcGx5IHdvcmtlcnMgaGFzaHRhYmxlLiAq LworCWlmICghUGFyYWxsZWxBcHBseVdvcmtlcnNIYXNoKQorCXsKKwkJSEFTSENUTAkJY3RsOwor CisJCU1lbVNldCgmY3RsLCAwLCBzaXplb2YoY3RsKSk7CisJCWN0bC5rZXlzaXplID0gc2l6ZW9m KFRyYW5zYWN0aW9uSWQpOworCQljdGwuZW50cnlzaXplID0gc2l6ZW9mKFBhcmFsbGVsQXBwbHlX b3JrZXJFbnRyeSk7CisJCWN0bC5oY3h0ID0gQXBwbHlDb250ZXh0OworCisJCVBhcmFsbGVsQXBw bHlXb3JrZXJzSGFzaCA9IGhhc2hfY3JlYXRlKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVs IGFwcGx5IHdvcmtlcnMgaGFzaCIsCisJCQkJCQkJCQkJCSAgIDE2LCAmY3RsLAorCQkJCQkJCQkJ CQkgICBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTIHwgSEFTSF9DT05URVhUKTsKKwl9CisKKwkvKiBG aXJzdCwgdHJ5IHRvIGdldCBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBmcm9tIHRoZSBwb29sLiAq LworCXdpbmZvID0gcGFfZ2V0X2F2YWlsYWJsZV93b3JrZXIoKTsKKworCWlmICghd2luZm8pCisJ eworCQkvKiBUcnkgdG8gc3RhcnQgYSBuZXcgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiAqLworCQl3 aW5mbyA9IHBhX2luaXRfYW5kX2xhdW5jaF93b3JrZXIoKTsKKworCQlpZiAoIXdpbmZvKQorCQkJ cmV0dXJuOworCX0KKworCS8qIENyZWF0ZSBhbiBlbnRyeSBmb3IgdGhlIHJlcXVlc3RlZCB0cmFu c2FjdGlvbi4gKi8KKwllbnRyeSA9IGhhc2hfc2VhcmNoKFBhcmFsbGVsQXBwbHlXb3JrZXJzSGFz aCwgJnhpZCwgSEFTSF9FTlRFUiwgJmZvdW5kKTsKKwlpZiAoZm91bmQpCisJCWVsb2coRVJST1Is ICJoYXNoIHRhYmxlIGNvcnJ1cHRlZCIpOworCisJLyogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5 IGFyZWEuICovCisJU3BpbkxvY2tBY3F1aXJlKCZ3aW5mby0+c2hhcmVkLT5tdXRleCk7CisJd2lu Zm8tPnNoYXJlZC0+eGFjdF9zdGF0ZSA9IFBBUkFMTEVMX1RSQU5TX1VOS05PV047CisJd2luZm8t PnNoYXJlZC0+eGlkID0geGlkOworCVNwaW5Mb2NrUmVsZWFzZSgmd2luZm8tPnNoYXJlZC0+bXV0 ZXgpOworCisJd2luZm8tPmluX3VzZSA9IHRydWU7CisJZW50cnktPndpbmZvID0gd2luZm87CisJ ZW50cnktPnhpZCA9IHhpZDsKK30KKworLyoKKyAqIEZpbmQgdGhlIGFzc2lnbmVkIHdvcmtlciBm b3IgdGhlIGdpdmVuIHRyYW5zYWN0aW9uLCBpZiBhbnkuCisgKi8KK1BhcmFsbGVsQXBwbHlXb3Jr ZXJJbmZvICoKK3BhX2ZpbmRfd29ya2VyKFRyYW5zYWN0aW9uSWQgeGlkKQoreworCWJvb2wJCWZv dW5kOworCVBhcmFsbGVsQXBwbHlXb3JrZXJFbnRyeSAqZW50cnk7CisKKwlpZiAoIVRyYW5zYWN0 aW9uSWRJc1ZhbGlkKHhpZCkpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFQYXJhbGxlbEFwcGx5 V29ya2Vyc0hhc2gpCisJCXJldHVybiBOVUxMOworCisJLyogUmV0dXJuIHRoZSBjYWNoZWQgcGFy YWxsZWwgYXBwbHkgd29ya2VyIGlmIHZhbGlkLiAqLworCWlmIChzdHJlYW1fYXBwbHlfd29ya2Vy KQorCQlyZXR1cm4gc3RyZWFtX2FwcGx5X3dvcmtlcjsKKworCS8qIEZpbmQgYW4gZW50cnkgZm9y IHRoZSByZXF1ZXN0ZWQgdHJhbnNhY3Rpb24uICovCisJZW50cnkgPSBoYXNoX3NlYXJjaChQYXJh bGxlbEFwcGx5V29ya2Vyc0hhc2gsICZ4aWQsIEhBU0hfRklORCwgJmZvdW5kKTsKKwlpZiAoZm91 bmQpCisJeworCQkvKiBUaGUgd29ya2VyIG11c3Qgbm90IGhhdmUgZXhpdGVkLiAgKi8KKwkJQXNz ZXJ0KGVudHJ5LT53aW5mby0+aW5fdXNlKTsKKwkJcmV0dXJuIGVudHJ5LT53aW5mbzsKKwl9CisK KwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIE1ha2VzIHRoZSB3b3JrZXIgYXZhaWxhYmxlIGZv ciByZXVzZS4KKyAqCisgKiBUaGlzIHJlbW92ZXMgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBl bnRyeSBmcm9tIHRoZSBoYXNoIHRhYmxlIHNvIHRoYXQgaXQKKyAqIGNhbid0IGJlIHVzZWQuIElm IHRoZXJlIGFyZSBlbm91Z2ggd29ya2VycyBpbiB0aGUgcG9vbCwgaXQgc3RvcHMgdGhlIHdvcmtl cgorICogYW5kIGZyZWVzIHRoZSBjb3JyZXNwb25kaW5nIGluZm8uIE90aGVyd2lzZSBpdCBqdXN0 IG1hcmtzIHRoZSB3b3JrZXIgYXMKKyAqIGF2YWlsYWJsZSBmb3IgcmV1c2UuCisgKgorICogRm9y IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdvcmtlciBwb29sLCBzZWUgY29tbWVudHMgYXRv cCB3b3JrZXIuYy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHdvcmtlciBpcyBzdG9wcGVk LCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wKK3BhX2ZyZWVfd29ya2VyKFBhcmFsbGVsQXBw bHlXb3JrZXJJbmZvICp3aW5mbywgVHJhbnNhY3Rpb25JZCB4aWQpCit7CisJaW50CQkJbmFwcGx5 d29ya2VyczsKKworCUFzc2VydCghYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpOworCisJLyog V29ya2VyIGlzIGFscmVhZHkgYXZhaWxhYmxlIGZvciByZXVzZS4gKi8KKwlpZiAoIXdpbmZvLT5p bl91c2UpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogRG9uJ3QgZnJlZSB0aGUgd29ya2Vy IGlmIHRoZSB0cmFuc2FjdGlvbiBpbiB0aGUgd29ya2VyIGlzIHN0aWxsIGluCisJICogcHJvZ3Jl c3MuIFRoaXMgY291bGQgaGFwcGVuIGFzIHdlIGRvbid0IHdhaXQgZm9yIHRoZSBhcHBseSBvZiBy b2xsYmFjaworCSAqIHRvIGZpbmlzaC4KKwkgKi8KKwlpZiAocGFfZ2V0X3hhY3Rfc3RhdGUod2lu Zm8tPnNoYXJlZCkgIT0gUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQpCisJCXJldHVybiBmYWxzZTsK KworCWlmICghaGFzaF9zZWFyY2goUGFyYWxsZWxBcHBseVdvcmtlcnNIYXNoLCAmeGlkLCBIQVNI X1JFTU9WRSwgTlVMTCkpCisJCWVsb2coRVJST1IsICJoYXNoIHRhYmxlIGNvcnJ1cHRlZCIpOwor CisJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKKwluYXBw bHl3b3JrZXJzID0gbG9naWNhbHJlcF9wYV93b3JrZXJfY291bnQoTXlMb2dpY2FsUmVwV29ya2Vy LT5zdWJpZCk7CisJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CisKKwkvKiBT dG9wIHRoZSB3b3JrZXIgaWYgdGhlcmUgYXJlIGVub3VnaCB3b3JrZXJzIGluIHRoZSBwb29sLiAq LworCWlmIChuYXBwbHl3b3JrZXJzID4gKG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9z dWJzY3JpcHRpb24gLyAyKSkKKwl7CisJCWludAkJCXNsb3Rfbm87CisJCXVpbnQxNgkJZ2VuZXJh dGlvbjsKKworCQlTcGluTG9ja0FjcXVpcmUoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKwkJZ2Vu ZXJhdGlvbiA9IHdpbmZvLT5zaGFyZWQtPmxvZ2ljYWxyZXBfd29ya2VyX2dlbmVyYXRpb247CisJ CXNsb3Rfbm8gPSB3aW5mby0+c2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9zbG90X25vOworCQlT cGluTG9ja1JlbGVhc2UoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKworCQlsb2dpY2FscmVwX3Bh X3dvcmtlcl9zdG9wKHNsb3Rfbm8sIGdlbmVyYXRpb24pOworCisJCXBhX2ZyZWVfd29ya2VyX2lu Zm8od2luZm8pOworCisJCXJldHVybiB0cnVlOworCX0KKworCXdpbmZvLT5pbl91c2UgPSBmYWxz ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyogRnJlZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29y a2VyIGluZm9ybWF0aW9uLiAqLworc3RhdGljIHZvaWQKK3BhX2ZyZWVfd29ya2VyX2luZm8oUGFy YWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvKQoreworCUFzc2VydCh3aW5mbyk7CisKKwlpZiAo d2luZm8tPm1xX2hhbmRsZSkKKwkJc2htX21xX2RldGFjaCh3aW5mby0+bXFfaGFuZGxlKTsKKwor CWlmICh3aW5mby0+ZXJyb3JfbXFfaGFuZGxlKQorCQlzaG1fbXFfZGV0YWNoKHdpbmZvLT5lcnJv cl9tcV9oYW5kbGUpOworCisJaWYgKHdpbmZvLT5kc21fc2VnKQorCQlkc21fZGV0YWNoKHdpbmZv LT5kc21fc2VnKTsKKworCVBhcmFsbGVsQXBwbHlXb3JrZXJzTGlzdCA9IGxpc3RfZGVsZXRlX3B0 cihQYXJhbGxlbEFwcGx5V29ya2Vyc0xpc3QsCisJCQkJCQkJCQkJCSAgIHdpbmZvKTsKKworCXBm cmVlKHdpbmZvKTsKK30KKworLyoKKyAqIEludGVycnVwdCBoYW5kbGVyIGZvciBtYWluIGxvb3Bz IG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqLworc3RhdGljIHZvaWQKK1Byb2Nlc3NQYXJh bGxlbEFwcGx5SW50ZXJydXB0cyh2b2lkKQoreworCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisK KwlpZiAoU2h1dGRvd25SZXF1ZXN0UGVuZGluZykKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShl cnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGZvciBzdWJz Y3JpcHRpb24gXCIlc1wiIGhhcyBmaW5pc2hlZCIsCisJCQkJIE15U3Vic2NyaXB0aW9uLT5uYW1l KSkpOworCisJCWFwcGx5X3dvcmtlcl9jbGVhbl9leGl0KCk7CisJfQorCisJaWYgKENvbmZpZ1Jl bG9hZFBlbmRpbmcpCisJeworCQlDb25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7CisJCVByb2Nl c3NDb25maWdGaWxlKFBHQ19TSUdIVVApOworCX0KK30KKworLyogUGFyYWxsZWwgYXBwbHkgd29y a2VyIG1haW4gbG9vcC4gKi8KK3N0YXRpYyB2b2lkCitMb2dpY2FsUGFyYWxsZWxBcHBseUxvb3Ao c2htX21xX2hhbmRsZSAqbXFoKQoreworCXNobV9tcV9yZXN1bHQgc2htcV9yZXM7CisJRXJyb3JD b250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQgPSBDdXJy ZW50TWVtb3J5Q29udGV4dDsKKworCS8qCisJICogSW5pdCB0aGUgQXBwbHlNZXNzYWdlQ29udGV4 dCB3aGljaCB3ZSBjbGVhbiB1cCBhZnRlciBlYWNoIHJlcGxpY2F0aW9uCisJICogcHJvdG9jb2wg bWVzc2FnZS4KKwkgKi8KKwlBcHBseU1lc3NhZ2VDb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3Jl YXRlKEFwcGx5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSJBcHBseU1lc3NhZ2VDb250ZXh0IiwKKwkJ CQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJLyoKKwkgKiBQdXNoIGFwcGx5 IGVycm9yIGNvbnRleHQgY2FsbGJhY2suIEZpZWxkcyB3aWxsIGJlIGZpbGxlZCB3aGlsZSBhcHBs eWluZworCSAqIGEgY2hhbmdlLgorCSAqLworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gYXBwbHlf ZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0 YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwlmb3IgKDs7KQor CXsKKwkJdm9pZAkgICAqZGF0YTsKKwkJU2l6ZQkJbGVuOworCisJCVByb2Nlc3NQYXJhbGxlbEFw cGx5SW50ZXJydXB0cygpOworCisJCS8qIEVuc3VyZSB3ZSBhcmUgcmVhZGluZyB0aGUgZGF0YSBp bnRvIG91ciBtZW1vcnkgY29udGV4dC4gKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5 TWVzc2FnZUNvbnRleHQpOworCisJCXNobXFfcmVzID0gc2htX21xX3JlY2VpdmUobXFoLCAmbGVu LCAmZGF0YSwgdHJ1ZSk7CisKKwkJaWYgKHNobXFfcmVzID09IFNITV9NUV9TVUNDRVNTKQorCQl7 CisJCQlTdHJpbmdJbmZvRGF0YSBzOworCQkJaW50CQkJYzsKKworCQkJaWYgKGxlbiA9PSAwKQor CQkJCWJyZWFrOworCisJCQlzLmN1cnNvciA9IDA7CisJCQlzLm1heGxlbiA9IC0xOworCQkJcy5k YXRhID0gKGNoYXIgKikgZGF0YTsKKwkJCXMubGVuID0gbGVuOworCisJCQkvKgorCQkJICogVGhl IGZpcnN0IGJ5dGUgb2YgbWVzc2FnZXMgc2VudCBmcm9tIGxlYWRlciBhcHBseSB3b3JrZXIgdG8K KwkJCSAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgY2FuIG9ubHkgYmUgJ3cnLgorCQkJICovCisJ CQljID0gcHFfZ2V0bXNnYnl0ZSgmcyk7CisJCQlpZiAoYyAhPSAndycpCisJCQkJZWxvZyhFUlJP UiwgInVuZXhwZWN0ZWQgbWVzc2FnZSBcIiVjXCIiLCBjKTsKKworCQkJLyoKKwkJCSAqIElnbm9y ZSBzdGF0aXN0aWNzIGZpZWxkcyB0aGF0IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IHRoZSBsZWFkZXIK KwkJCSAqIGFwcGx5IHdvcmtlci4KKwkJCSAqLworCQkJcy5jdXJzb3IgKz0gU0laRV9TVEFUU19N RVNTQUdFOworCisJCQlhcHBseV9kaXNwYXRjaCgmcyk7CisKKwkJCU1lbW9yeUNvbnRleHRSZXNl dChBcHBseU1lc3NhZ2VDb250ZXh0KTsKKwkJfQorCQllbHNlIGlmIChzaG1xX3JlcyA9PSBTSE1f TVFfV09VTERfQkxPQ0spCisJCXsKKwkJCWludAkJCXJjOworCisJCQlpZiAoIWluX3N0cmVhbWVk X3RyYW5zYWN0aW9uKQorCQkJeworCQkJCS8qCisJCQkJICogSWYgd2UgZGlkbid0IGdldCBhbnkg dHJhbnNhY3Rpb25zIGZvciBhIHdoaWxlIHRoZXJlIG1pZ2h0CisJCQkJICogYmUgdW5jb25zdW1l ZCBpbnZhbGlkYXRpb24gbWVzc2FnZXMgaW4gdGhlIHF1ZXVlLCBjb25zdW1lCisJCQkJICogdGhl bSBub3cuCisJCQkJICovCisJCQkJQWNjZXB0SW52YWxpZGF0aW9uTWVzc2FnZXMoKTsKKwkJCQlt YXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKCk7CisJCQl9CisKKwkJCU1lbW9yeUNvbnRleHRSZXNl dChBcHBseU1lc3NhZ2VDb250ZXh0KTsKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQp OworCisJCQkvKiBXYWl0IGZvciBtb3JlIHdvcmsuICovCisJCQlyYyA9IFdhaXRMYXRjaChNeUxh dGNoLAorCQkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1f REVBVEgsCisJCQkJCQkgICAxMDAwTCwKKwkJCQkJCSAgIFdBSVRfRVZFTlRfTE9HSUNBTF9QQVJB TExFTF9BUFBMWV9NQUlOKTsKKworCQkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQkJeworCQkJ CVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQkJUHJvY2Vzc1BhcmFsbGVsQXBwbHlJbnRlcnJ1cHRz KCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlBc3NlcnQoc2htcV9yZXMgPT0gU0hNX01R X0RFVEFDSEVEKTsKKworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9P QkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coImxvc3QgY29u bmVjdGlvbiB0byB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIiKSkpOworCQl9 CisJfQorCisJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrLiAqLworCWVycm9yX2NvbnRl eHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjeHQpOworfQorCisvKgorICogTWFrZSBzdXJlIHRoZSBsZWFkZXIgYXBwbHkgd29ya2Vy IHRyaWVzIHRvIHJlYWQgZnJvbSBvdXIgZXJyb3IgcXVldWUgb25lIG1vcmUKKyAqIHRpbWUuIFRo aXMgZ3VhcmRzIGFnYWluc3QgdGhlIGNhc2Ugd2hlcmUgd2UgZXhpdCB1bmNsZWFubHkgd2l0aG91 dCBzZW5kaW5nCisgKiBhbiBFcnJvclJlc3BvbnNlLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHNvbWUg Y29kZSBjYWxscyBwcm9jX2V4aXQgZGlyZWN0bHkuCisgKi8KK3N0YXRpYyB2b2lkCitwYV9zaHV0 ZG93bihpbnQgY29kZSwgRGF0dW0gYXJnKQoreworCVNlbmRQcm9jU2lnbmFsKE15TG9naWNhbFJl cFdvcmtlci0+YXBwbHlfbGVhZGVyX3BpZCwKKwkJCQkgICBQUk9DU0lHX1BBUkFMTEVMX0FQUExZ X01FU1NBR0UsCisJCQkJICAgSW52YWxpZEJhY2tlbmRJZCk7CisKKwlkc21fZGV0YWNoKChkc21f c2VnbWVudCAqKSBEYXR1bUdldFBvaW50ZXIoYXJnKSk7Cit9CisKKy8qCisgKiBQYXJhbGxlbCBh cHBseSB3b3JrZXIgZW50cnkgcG9pbnQuCisgKi8KK3ZvaWQKK1BhcmFsbGVsQXBwbHlXb3JrZXJN YWluKERhdHVtIG1haW5fYXJnKQoreworCVBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKnNoYXJl ZDsKKwlkc21faGFuZGxlCWhhbmRsZTsKKwlkc21fc2VnbWVudCAqc2VnOworCXNobV90b2MgICAg KnRvYzsKKwlzaG1fbXEJICAgKm1xOworCXNobV9tcV9oYW5kbGUgKm1xaDsKKwlzaG1fbXFfaGFu ZGxlICplcnJvcl9tcWg7CisJUmVwT3JpZ2luSWQgb3JpZ2luaWQ7CisJaW50CQkJd29ya2VyX3Ns b3QgPSBEYXR1bUdldEludDMyKG1haW5fYXJnKTsKKwljaGFyCQlvcmlnaW5uYW1lW05BTUVEQVRB TEVOXTsKKworCS8qIFNldHVwIHNpZ25hbCBoYW5kbGluZy4gKi8KKwlwcXNpZ25hbChTSUdIVVAs IFNpZ25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQpOworCXBxc2lnbmFsKFNJR0lOVCwgU2lnbmFs SGFuZGxlckZvclNodXRkb3duUmVxdWVzdCk7CisJcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKKwlC YWNrZ3JvdW5kV29ya2VyVW5ibG9ja1NpZ25hbHMoKTsKKworCS8qCisJICogQXR0YWNoIHRvIHRo ZSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBmb3IgdGhlIHBhcmFsbGVsIGFwcGx5LCBh bmQKKwkgKiBmaW5kIGl0cyB0YWJsZSBvZiBjb250ZW50cy4KKwkgKgorCSAqIExpa2UgcGFyYWxs ZWwgcXVlcnksIHdlIGRvbid0IG5lZWQgcmVzb3VyY2Ugb3duZXIgYnkgdGhpcyB0aW1lLiBTZWUK KwkgKiBQYXJhbGxlbFdvcmtlck1haW4uCisJICovCisJbWVtY3B5KCZoYW5kbGUsIE15Qmd3b3Jr ZXJFbnRyeS0+Ymd3X2V4dHJhLCBzaXplb2YoZHNtX2hhbmRsZSkpOworCXNlZyA9IGRzbV9hdHRh Y2goaGFuZGxlKTsKKwlpZiAoIXNlZykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShF UlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJ1 bmFibGUgdG8gbWFwIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50IikpKTsKKworCXRvYyA9 IHNobV90b2NfYXR0YWNoKFBHX0xPR0lDQUxfQVBQTFlfU0hNX01BR0lDLCBkc21fc2VnbWVudF9h ZGRyZXNzKHNlZykpOworCWlmICghdG9jKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2co ImJhZCBtYWdpYyBudW1iZXIgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQiKSkpOwor CisJYmVmb3JlX3NobWVtX2V4aXQocGFfc2h1dGRvd24sIFBvaW50ZXJHZXREYXR1bShzZWcpKTsK KworCS8qIExvb2sgdXAgdGhlIHNoYXJlZCBpbmZvcm1hdGlvbi4gKi8KKwlzaGFyZWQgPSBzaG1f dG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9TSEFSRUQsIGZhbHNlKTsKKwlNeVBh cmFsbGVsU2hhcmVkID0gc2hhcmVkOworCisJLyoKKwkgKiBBdHRhY2ggdG8gdGhlIG1lc3NhZ2Ug cXVldWUuCisJICovCisJbXEgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0FQUExZX0tF WV9NUSwgZmFsc2UpOworCXNobV9tcV9zZXRfcmVjZWl2ZXIobXEsIE15UHJvYyk7CisJbXFoID0g c2htX21xX2F0dGFjaChtcSwgc2VnLCBOVUxMKTsKKworCS8qCisJICogUHJpbWFyeSBpbml0aWFs aXphdGlvbiBpcyBjb21wbGV0ZS4gTm93LCB3ZSBjYW4gYXR0YWNoIHRvIG91ciBzbG90LgorCSAq IFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgZG9lcyBub3Qg d3JpdGUgZGF0YSB0bworCSAqIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBxdWV1ZS4KKwkgKi8K Kwlsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2god29ya2VyX3Nsb3QpOworCisJU3BpbkxvY2tBY3F1 aXJlKCZNeVBhcmFsbGVsU2hhcmVkLT5tdXRleCk7CisJTXlQYXJhbGxlbFNoYXJlZC0+bG9naWNh bHJlcF93b3JrZXJfZ2VuZXJhdGlvbiA9IE15TG9naWNhbFJlcFdvcmtlci0+Z2VuZXJhdGlvbjsK KwlNeVBhcmFsbGVsU2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9zbG90X25vID0gd29ya2VyX3Ns b3Q7CisJU3BpbkxvY2tSZWxlYXNlKCZNeVBhcmFsbGVsU2hhcmVkLT5tdXRleCk7CisKKwkvKgor CSAqIEF0dGFjaCB0byB0aGUgZXJyb3IgcXVldWUuCisJICovCisJbXEgPSBzaG1fdG9jX2xvb2t1 cCh0b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9FUlJPUl9RVUVVRSwgZmFsc2UpOworCXNobV9tcV9z ZXRfc2VuZGVyKG1xLCBNeVByb2MpOworCWVycm9yX21xaCA9IHNobV9tcV9hdHRhY2gobXEsIHNl ZywgTlVMTCk7CisKKwlwcV9yZWRpcmVjdF90b19zaG1fbXEoc2VnLCBlcnJvcl9tcWgpOworCXBx X3NldF9wYXJhbGxlbF9sZWFkZXIoTXlMb2dpY2FsUmVwV29ya2VyLT5hcHBseV9sZWFkZXJfcGlk LAorCQkJCQkJICAgSW52YWxpZEJhY2tlbmRJZCk7CisKKwlNeUxvZ2ljYWxSZXBXb3JrZXItPmxh c3Rfc2VuZF90aW1lID0gTXlMb2dpY2FsUmVwV29ya2VyLT5sYXN0X3JlY3ZfdGltZSA9CisJCU15 TG9naWNhbFJlcFdvcmtlci0+cmVwbHlfdGltZSA9IDA7CisKKwlJbml0aWFsaXplQXBwbHlXb3Jr ZXIoKTsKKworCS8qIFNldHVwIHJlcGxpY2F0aW9uIG9yaWdpbiB0cmFja2luZy4gKi8KKwlTdGFy dFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVJlcGxpY2F0aW9uT3JpZ2luTmFtZUZvckxvZ2ljYWxS ZXAoTXlTdWJzY3JpcHRpb24tPm9pZCwgSW52YWxpZE9pZCwKKwkJCQkJCQkJCSAgIG9yaWdpbm5h bWUsIHNpemVvZihvcmlnaW5uYW1lKSk7CisJb3JpZ2luaWQgPSByZXBsb3JpZ2luX2J5X25hbWUo b3JpZ2lubmFtZSwgdHJ1ZSk7CisJaWYgKCFPaWRJc1ZhbGlkKG9yaWdpbmlkKSkKKwkJb3JpZ2lu aWQgPSByZXBsb3JpZ2luX2NyZWF0ZShvcmlnaW5uYW1lKTsKKworCS8qCisJICogVGhlIHBhcmFs bGVsIGFwcGx5IHdvcmtlciBkb2Vzbid0IG5lZWQgdG8gbW9ub3BvbGl6ZSB0aGlzIHJlcGxpY2F0 aW9uCisJICogb3JpZ2luIHdoaWNoIHdhcyBhbHJlYWR5IGFjcXVpcmVkIGJ5IGl0cyBsZWFkZXIg cHJvY2Vzcy4KKwkgKi8KKwlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIE15TG9n aWNhbFJlcFdvcmtlci0+YXBwbHlfbGVhZGVyX3BpZCk7CisJcmVwbG9yaWdpbl9zZXNzaW9uX29y aWdpbiA9IG9yaWdpbmlkOworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyoKKwkg KiBTZXR1cCBjYWxsYmFjayBmb3Igc3lzY2FjaGUgc28gdGhhdCB3ZSBrbm93IHdoZW4gc29tZXRo aW5nIGNoYW5nZXMgaW4KKwkgKiB0aGUgc3Vic2NyaXB0aW9uIHJlbGF0aW9uIHN0YXRlLgorCSAq LworCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxiYWNrKFNVQlNDUklQVElPTlJFTE1BUCwKKwkJ CQkJCQkJICBpbnZhbGlkYXRlX3N5bmNpbmdfdGFibGVfc3RhdGVzLAorCQkJCQkJCQkgIChEYXR1 bSkgMCk7CisKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBvcmlnaW4gbmFtZSBpbiBhIGxvbmctbGl2 ZWQgY29udGV4dCBmb3IgZXJyb3IgY29udGV4dAorCSAqIG1lc3NhZ2UuCisJICovCisJYXBwbHlf ZXJyb3JfY2FsbGJhY2tfYXJnLm9yaWdpbl9uYW1lID0gTWVtb3J5Q29udGV4dFN0cmR1cChBcHBs eUNvbnRleHQsCisJCQkJCQkJCQkJCQkJCQkgICBvcmlnaW5uYW1lKTsKKworCUxvZ2ljYWxQYXJh bGxlbEFwcGx5TG9vcChtcWgpOworCisJYXBwbHlfd29ya2VyX2NsZWFuX2V4aXQoKTsKK30KKwor LyoKKyAqIEhhbmRsZSByZWNlaXB0IG9mIGFuIGludGVycnVwdCBpbmRpY2F0aW5nIGEgcGFyYWxs ZWwgYXBwbHkgd29ya2VyIG1lc3NhZ2UuCisgKgorICogTm90ZTogdGhpcyBpcyBjYWxsZWQgd2l0 aGluIGEgc2lnbmFsIGhhbmRsZXIhIEFsbCB3ZSBjYW4gZG8gaXMgc2V0IGEgZmxhZworICogdGhh dCB3aWxsIGNhdXNlIHRoZSBuZXh0IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgdG8gaW52b2tlCisg KiBIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZXMoKS4KKyAqLwordm9pZAorSGFuZGxlUGFyYWxs ZWxBcHBseU1lc3NhZ2VJbnRlcnJ1cHQodm9pZCkKK3sKKwlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1 ZTsKKwlQYXJhbGxlbEFwcGx5TWVzc2FnZVBlbmRpbmcgPSB0cnVlOworCVNldExhdGNoKE15TGF0 Y2gpOworfQorCisvKgorICogSGFuZGxlIGEgc2luZ2xlIHByb3RvY29sIG1lc3NhZ2UgcmVjZWl2 ZWQgZnJvbSBhIHNpbmdsZSBwYXJhbGxlbCBhcHBseQorICogd29ya2VyLgorICovCitzdGF0aWMg dm9pZAorSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2UoUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KndpbmZvLCBTdHJpbmdJbmZvIG1zZykKK3sKKwljaGFyCQltc2d0eXBlOworCisJbXNndHlwZSA9 IHBxX2dldG1zZ2J5dGUobXNnKTsKKworCXN3aXRjaCAobXNndHlwZSkKKwl7CisJCWNhc2UgJ0Un OgkJCQkvKiBFcnJvclJlc3BvbnNlICovCisJCQl7CisJCQkJRXJyb3JEYXRhCWVkYXRhOworCisJ CQkJLyogUGFyc2UgRXJyb3JSZXNwb25zZS4gKi8KKwkJCQlwcV9wYXJzZV9lcnJvcm5vdGljZSht c2csICZlZGF0YSk7CisKKwkJCQkvKgorCQkJCSAqIElmIGRlc2lyZWQsIGFkZCBhIGNvbnRleHQg bGluZSB0byBzaG93IHRoYXQgdGhpcyBpcyBhCisJCQkJICogbWVzc2FnZSBwcm9wYWdhdGVkIGZy b20gYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuIE90aGVyd2lzZSwKKwkJCQkgKiBpdCBjYW4gc29t ZXRpbWVzIGJlIGNvbmZ1c2luZyB0byB1bmRlcnN0YW5kIHdoYXQgYWN0dWFsbHkKKwkJCQkgKiBo YXBwZW5lZC4KKwkJCQkgKi8KKwkJCQlpZiAoZWRhdGEuY29udGV4dCkKKwkJCQkJZWRhdGEuY29u dGV4dCA9IHBzcHJpbnRmKCIlc1xuJXMiLCBlZGF0YS5jb250ZXh0LAorCQkJCQkJCQkJCQkgXygi bG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIiKSk7CisJCQkJZWxzZQor CQkJCQllZGF0YS5jb250ZXh0ID0gcHN0cmR1cChfKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFs bGVsIGFwcGx5IHdvcmtlciIpKTsKKworCQkJCS8qCisJCQkJICogQ29udGV4dCBiZXlvbmQgdGhh dCBzaG91bGQgdXNlIHRoZSBlcnJvciBjb250ZXh0IGNhbGxiYWNrcworCQkJCSAqIHRoYXQgd2Vy ZSBpbiBlZmZlY3QgaW4gTG9naWNhbFJlcEFwcGx5TG9vcCgpLgorCQkJCSAqLworCQkJCWVycm9y X2NvbnRleHRfc3RhY2sgPSBhcHBseV9lcnJvcl9jb250ZXh0X3N0YWNrOworCisJCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJ VEVfU1RBVEUpLAorCQkJCQkJIGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBh cHBseSB3b3JrZXIgZXhpdGVkIGFibm9ybWFsbHkiKSwKKwkJCQkJCSBlcnJjb250ZXh0KCIlcyIs IGVkYXRhLmNvbnRleHQpKSk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBEb24ndCBuZWVkIHRvIGRv IGFueXRoaW5nIGFib3V0IE5vdGljZVJlc3BvbnNlIGFuZAorCQkJICogTm90aWZ5UmVzcG9uc2Ug YXMgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGRvZXNuJ3QgbmVlZAorCQkJICogdG8g c2VuZCBtZXNzYWdlcyB0byB0aGUgY2xpZW50LgorCQkJICovCisJCWNhc2UgJ04nOgorCQljYXNl ICdBJzoKKwkJCWJyZWFrOworCisJCWNhc2UgJ1gnOgkJCQkvKiBUZXJtaW5hdGUsIGluZGljYXRp bmcgY2xlYW4gZXhpdC4gKi8KKwkJCQlzaG1fbXFfZGV0YWNoKHdpbmZvLT5lcnJvcl9tcV9oYW5k bGUpOworCQkJCXdpbmZvLT5lcnJvcl9tcV9oYW5kbGUgPSBOVUxMOworCQkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBtZXNzYWdlIHR5cGUgcmVjZWl2 ZWQgZnJvbSBsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlcjogJWMgKG1l c3NhZ2UgbGVuZ3RoICVkIGJ5dGVzKSIsCisJCQkJIG1zZ3R5cGUsIG1zZy0+bGVuKTsKKwl9Cit9 CisKKy8qCisgKiBIYW5kbGUgYW55IHF1ZXVlZCBwcm90b2NvbCBtZXNzYWdlcyByZWNlaXZlZCBm cm9tIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuCisgKi8KK3ZvaWQKK0hhbmRsZVBhcmFsbGVsQXBw bHlNZXNzYWdlcyh2b2lkKQoreworCUxpc3RDZWxsICAgKmxjOworCU1lbW9yeUNvbnRleHQgb2xk Y29udGV4dDsKKworCXN0YXRpYyBNZW1vcnlDb250ZXh0IGhwYW1fY29udGV4dCA9IE5VTEw7CisK KwkvKgorCSAqIFRoaXMgaXMgaW52b2tlZCBmcm9tIFByb2Nlc3NJbnRlcnJ1cHRzKCksIGFuZCBz aW5jZSBzb21lIG9mIHRoZQorCSAqIGZ1bmN0aW9ucyBpdCBjYWxscyBjb250YWluIENIRUNLX0ZP Ul9JTlRFUlJVUFRTKCksIHRoZXJlIGlzIGEgcG90ZW50aWFsCisJICogZm9yIHJlY3Vyc2l2ZSBj YWxscyBpZiBtb3JlIHNpZ25hbHMgYXJlIHJlY2VpdmVkIHdoaWxlIHRoaXMgcnVucy4gSXQncwor CSAqIHVuY2xlYXIgdGhhdCByZWN1cnNpdmUgZW50cnkgd291bGQgYmUgc2FmZSwgYW5kIGl0IGRv ZXNuJ3Qgc2VlbSB1c2VmdWwKKwkgKiBldmVuIGlmIGl0IGlzIHNhZmUsIHNvIGxldCdzIGJsb2Nr IGludGVycnVwdHMgdW50aWwgZG9uZS4KKwkgKi8KKwlIT0xEX0lOVEVSUlVQVFMoKTsKKworCS8q CisJICogTW9yZW92ZXIsIEN1cnJlbnRNZW1vcnlDb250ZXh0IG1pZ2h0IGJlIHBvaW50aW5nIGFs bW9zdCBhbnl3aGVyZS4gV2UKKwkgKiBkb24ndCB3YW50IHRvIHJpc2sgbGVha2luZyBkYXRhIGlu dG8gbG9uZy1saXZlZCBjb250ZXh0cywgc28gbGV0J3MgZG8KKwkgKiBvdXIgd29yayBoZXJlIGlu IGEgcHJpdmF0ZSBjb250ZXh0IHRoYXQgd2UgY2FuIHJlc2V0IG9uIGVhY2ggdXNlLgorCSAqLwor CWlmICghaHBhbV9jb250ZXh0KQkvKiBmaXJzdCB0aW1lIHRocm91Z2g/ICovCisJCWhwYW1fY29u dGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJ CQkgIkhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlcyIsCisJCQkJCQkJCQkJCSBBTExPQ1NFVF9E RUZBVUxUX1NJWkVTKTsKKwllbHNlCisJCU1lbW9yeUNvbnRleHRSZXNldChocGFtX2NvbnRleHQp OworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhocGFtX2NvbnRleHQpOwor CisJUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nID0gZmFsc2U7CisKKwlmb3JlYWNoKGxjLCBQ YXJhbGxlbEFwcGx5V29ya2Vyc0xpc3QpCisJeworCQlzaG1fbXFfcmVzdWx0IHJlczsKKwkJU2l6 ZQkJbmJ5dGVzOworCQl2b2lkCSAgICpkYXRhOworCQlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAq d2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKikgbGZpcnN0KGxjKTsKKworCQlpZiAo IXdpbmZvLT5lcnJvcl9tcV9oYW5kbGUpCisJCQljb250aW51ZTsKKworCQlyZXMgPSBzaG1fbXFf cmVjZWl2ZSh3aW5mby0+ZXJyb3JfbXFfaGFuZGxlLCAmbmJ5dGVzLCAmZGF0YSwgdHJ1ZSk7CisK KwkJaWYgKHJlcyA9PSBTSE1fTVFfV09VTERfQkxPQ0spCisJCQljb250aW51ZTsKKwkJZWxzZSBp ZiAocmVzID09IFNITV9NUV9TVUNDRVNTKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBtc2c7CisK KwkJCWluaXRTdHJpbmdJbmZvKCZtc2cpOworCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbygmbXNn LCBkYXRhLCBuYnl0ZXMpOworCQkJSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2Uod2luZm8sICZt c2cpOworCQkJcGZyZWUobXNnLmRhdGEpOworCQl9CisJCWVsc2UKKwkJCWVyZXBvcnQoRVJST1Is CisJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUp LAorCQkJCQkgZXJybXNnKCJsb3N0IGNvbm5lY3Rpb24gdG8gdGhlIGxvZ2ljYWwgcmVwbGljYXRp b24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIikpKTsKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CisKKwkvKiBNaWdodCBhcyB3ZWxsIGNsZWFyIHRoZSBjb250ZXh0IG9u IG91ciB3YXkgb3V0ICovCisJTWVtb3J5Q29udGV4dFJlc2V0KGhwYW1fY29udGV4dCk7CisKKwlS RVNVTUVfSU5URVJSVVBUUygpOworfQorCisvKgorICogU2V0IHVwIGEgZHluYW1pYyBzaGFyZWQg bWVtb3J5IHNlZ21lbnQuCisgKgorICogV2Ugc2V0IHVwIGEgY29udHJvbCByZWdpb24gdGhhdCBj b250YWlucyBhIGZpeGVkLXNpemUgd29ya2VyIGluZm8KKyAqIChQYXJhbGxlbEFwcGx5V29ya2Vy U2hhcmVkKSwgYSBtZXNzYWdlIHF1ZXVlLCBhbmQgYW4gZXJyb3IgcXVldWUuCisgKgorICogUmV0 dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBib29s CitwYV9zZXR1cF9kc20oUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvKQoreworCXNobV90 b2NfZXN0aW1hdG9yIGU7CisJU2l6ZQkJc2Vnc2l6ZTsKKwlkc21fc2VnbWVudCAqc2VnOworCXNo bV90b2MgICAgKnRvYzsKKwlQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICpzaGFyZWQ7CisJc2ht X21xCSAgICptcTsKKwlTaXplCQlxdWV1ZV9zaXplID0gRFNNX1FVRVVFX1NJWkU7CisJU2l6ZQkJ ZXJyb3JfcXVldWVfc2l6ZSA9IERTTV9FUlJPUl9RVUVVRV9TSVpFOworCisJLyoKKwkgKiBFc3Rp bWF0ZSBob3cgbXVjaCBzaGFyZWQgbWVtb3J5IHdlIG5lZWQuCisJICoKKwkgKiBCZWNhdXNlIHRo ZSBUT0MgbWFjaGluZXJ5IG1heSBjaG9vc2UgdG8gaW5zZXJ0IHBhZGRpbmcgb2Ygb2RkbHktc2l6 ZWQKKwkgKiByZXF1ZXN0cywgd2UgbXVzdCBlc3RpbWF0ZSBlYWNoIGNodW5rIHNlcGFyYXRlbHku CisJICoKKwkgKiBXZSBuZWVkIG9uZSBrZXkgdG8gcmVnaXN0ZXIgdGhlIGxvY2F0aW9uIG9mIHRo ZSBoZWFkZXIsIGFuZCB0d28gb3RoZXIKKwkgKiBrZXlzIHRvIHRyYWNrIHRoZSBsb2NhdGlvbnMg b2YgdGhlIG1lc3NhZ2UgcXVldWUgYW5kIHRoZSBlcnJvciBtZXNzYWdlCisJICogcXVldWUuCisJ ICovCisJc2htX3RvY19pbml0aWFsaXplX2VzdGltYXRvcigmZSk7CisJc2htX3RvY19lc3RpbWF0 ZV9jaHVuaygmZSwgc2l6ZW9mKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQpKTsKKwlzaG1fdG9j X2VzdGltYXRlX2NodW5rKCZlLCBxdWV1ZV9zaXplKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5r KCZlLCBlcnJvcl9xdWV1ZV9zaXplKTsKKworCXNobV90b2NfZXN0aW1hdGVfa2V5cygmZSwgMyk7 CisJc2Vnc2l6ZSA9IHNobV90b2NfZXN0aW1hdGUoJmUpOworCisJLyogQ3JlYXRlIHRoZSBzaGFy ZWQgbWVtb3J5IHNlZ21lbnQgYW5kIGVzdGFibGlzaCBhIHRhYmxlIG9mIGNvbnRlbnRzLiAqLwor CXNlZyA9IGRzbV9jcmVhdGUoc2htX3RvY19lc3RpbWF0ZSgmZSksIDApOworCWlmICghc2VnKQor CQlyZXR1cm4gZmFsc2U7CisKKwl0b2MgPSBzaG1fdG9jX2NyZWF0ZShQR19MT0dJQ0FMX0FQUExZ X1NITV9NQUdJQywgZHNtX3NlZ21lbnRfYWRkcmVzcyhzZWcpLAorCQkJCQkJIHNlZ3NpemUpOwor CisJLyogU2V0IHVwIHRoZSBoZWFkZXIgcmVnaW9uLiAqLworCXNoYXJlZCA9IHNobV90b2NfYWxs b2NhdGUodG9jLCBzaXplb2YoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCkpOworCVNwaW5Mb2Nr SW5pdCgmc2hhcmVkLT5tdXRleCk7CisKKwlzaGFyZWQtPnhhY3Rfc3RhdGUgPSBQQVJBTExFTF9U UkFOU19VTktOT1dOOworCXBnX2F0b21pY19pbml0X3UzMigmKHNoYXJlZC0+cGVuZGluZ19zdHJl YW1fY291bnQpLCAwKTsKKworCXNobV90b2NfaW5zZXJ0KHRvYywgUEFSQUxMRUxfQVBQTFlfS0VZ X1NIQVJFRCwgc2hhcmVkKTsKKworCS8qIFNldCB1cCBtZXNzYWdlIHF1ZXVlIGZvciB0aGUgd29y a2VyLiAqLworCW1xID0gc2htX21xX2NyZWF0ZShzaG1fdG9jX2FsbG9jYXRlKHRvYywgcXVldWVf c2l6ZSksIHF1ZXVlX3NpemUpOworCXNobV90b2NfaW5zZXJ0KHRvYywgUEFSQUxMRUxfQVBQTFlf S0VZX01RLCBtcSk7CisJc2htX21xX3NldF9zZW5kZXIobXEsIE15UHJvYyk7CisKKwkvKiBBdHRh Y2ggdGhlIHF1ZXVlLiAqLworCXdpbmZvLT5tcV9oYW5kbGUgPSBzaG1fbXFfYXR0YWNoKG1xLCBz ZWcsIE5VTEwpOworCisJLyogU2V0IHVwIGVycm9yIHF1ZXVlIGZvciB0aGUgd29ya2VyLiAqLwor CW1xID0gc2htX21xX2NyZWF0ZShzaG1fdG9jX2FsbG9jYXRlKHRvYywgZXJyb3JfcXVldWVfc2l6 ZSksCisJCQkJCSAgIGVycm9yX3F1ZXVlX3NpemUpOworCXNobV90b2NfaW5zZXJ0KHRvYywgUEFS QUxMRUxfQVBQTFlfS0VZX0VSUk9SX1FVRVVFLCBtcSk7CisJc2htX21xX3NldF9yZWNlaXZlciht cSwgTXlQcm9jKTsKKworCS8qIEF0dGFjaCB0aGUgcXVldWUuICovCisJd2luZm8tPmVycm9yX21x X2hhbmRsZSA9IHNobV9tcV9hdHRhY2gobXEsIHNlZywgTlVMTCk7CisKKwkvKiBSZXR1cm4gcmVz dWx0cyB0byBjYWxsZXIuICovCisJd2luZm8tPmRzbV9zZWcgPSBzZWc7CisJd2luZm8tPnNoYXJl ZCA9IHNoYXJlZDsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogU3RhcnQgcGFyYWxsZWwg YXBwbHkgd29ya2VyIHByb2Nlc3MgYW5kIGFsbG9jYXRlIHNoYXJlZCBtZW1vcnkgZm9yIGl0Lgor ICovCitzdGF0aWMgUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKgorcGFfaW5pdF9hbmRfbGF1bmNo X3dvcmtlcih2b2lkKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlib29sCQlsYXVu Y2hlZDsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87CisKKwkvKgorCSAqIFRoZSB3 b3JrZXIgaW5mbyBjYW4gYmUgdXNlZCBmb3IgdGhlIGVudGlyZSBkdXJhdGlvbiBvZiB0aGUgd29y a2VyIHNvCisJICogY3JlYXRlIGl0IGluIGEgcGVybWFuZW50IGNvbnRleHQuCisJICovCisJb2xk Y29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNvbnRleHQpOworCisJd2luZm8g PSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKikgcGFsbG9jMChzaXplb2YoUGFyYWxsZWxBcHBs eVdvcmtlckluZm8pKTsKKworCS8qIFNldHVwIHNoYXJlZCBtZW1vcnkuICovCisJaWYgKCFwYV9z ZXR1cF9kc20od2luZm8pKQorCXsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCQlwZnJlZSh3aW5mbyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWxhdW5jaGVkID0gbG9n aWNhbHJlcF93b3JrZXJfbGF1bmNoKE15TG9naWNhbFJlcFdvcmtlci0+ZGJpZCwKKwkJCQkJCQkJ CQlNeVN1YnNjcmlwdGlvbi0+b2lkLAorCQkJCQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lLAor CQkJCQkJCQkJCU15TG9naWNhbFJlcFdvcmtlci0+dXNlcmlkLAorCQkJCQkJCQkJCUludmFsaWRP aWQsCisJCQkJCQkJCQkJZHNtX3NlZ21lbnRfaGFuZGxlKHdpbmZvLT5kc21fc2VnKSk7CisKKwlp ZiAobGF1bmNoZWQpCisJeworCQlQYXJhbGxlbEFwcGx5V29ya2Vyc0xpc3QgPSBsYXBwZW5kKFBh cmFsbGVsQXBwbHlXb3JrZXJzTGlzdCwgd2luZm8pOworCX0KKwllbHNlCisJeworCQlwYV9mcmVl X3dvcmtlcl9pbmZvKHdpbmZvKTsKKwkJd2luZm8gPSBOVUxMOworCX0KKworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCXJldHVybiB3aW5mbzsKK30KKworLyoKKyAqIFNl bmQgdGhlIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdmlhIHNo YXJlZC1tZW1vcnkKKyAqIHF1ZXVlLgorICovCit2b2lkCitwYV9zZW5kX2RhdGEoUGFyYWxsZWxB cHBseVdvcmtlckluZm8gKndpbmZvLCBTaXplIG5ieXRlcywgY29uc3Qgdm9pZCAqZGF0YSkKK3sK KwlpbnQJCQlyYzsKKwlzaG1fbXFfcmVzdWx0IHJlc3VsdDsKKwlUaW1lc3RhbXBUeiBzdGFydFRp bWUgPSAwOworCisJQXNzZXJ0KCFJc1RyYW5zYWN0aW9uU3RhdGUoKSk7CisKKyNkZWZpbmUgU0hN X1NFTkRfUkVUUllfSU5URVJWQUxfTVMgMTAwMAorI2RlZmluZSBTSE1fU0VORF9USU1FT1VUX01T CQkxMDAwMAorCisJZm9yICg7OykKKwl7CisJCXJlc3VsdCA9IHNobV9tcV9zZW5kKHdpbmZvLT5t cV9oYW5kbGUsIG5ieXRlcywgZGF0YSwgdHJ1ZSwgdHJ1ZSk7CisKKwkJaWYgKHJlc3VsdCA9PSBT SE1fTVFfU1VDQ0VTUykKKwkJCWJyZWFrOworCQllbHNlIGlmIChyZXN1bHQgPT0gU0hNX01RX0RF VEFDSEVEKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1Rf Tk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzZW5k IGRhdGEgdG8gc2hhcmVkLW1lbW9yeSBxdWV1ZSIpKSk7CisKKwkJQXNzZXJ0KHJlc3VsdCA9PSBT SE1fTVFfV09VTERfQkxPQ0spOworCisJCWlmIChzdGFydFRpbWUgPT0gMCkKKwkJCXN0YXJ0VGlt ZSA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKworCQkvKiBXYWl0IGJlZm9yZSByZXRyeWluZy4g Ki8KKwkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xf VElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCSAgIFNITV9TRU5EX1JFVFJZX0lO VEVSVkFMX01TLAorCQkJCQkgICBXQUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfU1RB VEVfQ0hBTkdFKTsKKworCQlpZiAocmMgJiBXTF9MQVRDSF9TRVQpCisJCXsKKwkJCVJlc2V0TGF0 Y2goTXlMYXRjaCk7CisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQl9CisKKwkJaWYgKFRp bWVzdGFtcERpZmZlcmVuY2VFeGNlZWRzKHN0YXJ0VGltZSwgR2V0Q3VycmVudFRpbWVzdGFtcCgp LAorCQkJCQkJCQkJICAgU0hNX1NFTkRfVElNRU9VVF9NUykpCisJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkoZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCisJCQkJCSBlcnJtc2co InRlcm1pbmF0aW5nIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGR1 ZSB0byB0aW1lb3V0IikpKTsKKwl9Cit9CisKKy8qCisgKiBXYWl0IHVudGlsIHRoZSBwYXJhbGxl bCBhcHBseSB3b3JrZXIncyB0cmFuc2FjdGlvbiBzdGF0ZSBoYXMgcmVhY2hlZCBvcgorICogZXhj ZWVkZWQgdGhlIGdpdmVuIHhhY3Rfc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitwYV93YWl0X2Zv cl94YWN0X3N0YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywKKwkJCQkJICAgUGFy YWxsZWxUcmFuc1N0YXRlIHhhY3Rfc3RhdGUpCit7CisJZm9yICg7OykKKwl7CisJCWlmICghd2lu Zm8tPmVycm9yX21xX2hhbmRsZSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVS UkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJybXNnKCJs b3N0IGNvbm5lY3Rpb24gdG8gdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkg d29ya2VyIikpKTsKKworCQkvKgorCQkgKiBTdG9wIGlmIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBo YXMgcmVhY2hlZCBvciBleGNlZWRlZCB0aGUgZ2l2ZW4KKwkJICogeGFjdF9zdGF0ZS4KKwkJICov CisJCWlmIChwYV9nZXRfeGFjdF9zdGF0ZSh3aW5mby0+c2hhcmVkKSA+PSB4YWN0X3N0YXRlKQor CQkJYnJlYWs7CisKKwkJLyogV2FpdCB0byBiZSBzaWduYWxsZWQuICovCisJCSh2b2lkKSBXYWl0 TGF0Y2goTXlMYXRjaCwKKwkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJ VF9PTl9QTV9ERUFUSCwKKwkJCQkJCSAxMEwsCisJCQkJCQkgV0FJVF9FVkVOVF9MT0dJQ0FMX1BB UkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRSk7CisKKwkJLyogUmVzZXQgdGhlIGxhdGNoIHNvIHdl IGRvbid0IHNwaW4uICovCisJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisKKwkJLyogQW4gaW50ZXJy dXB0IG1heSBoYXZlIG9jY3VycmVkIHdoaWxlIHdlIHdlcmUgd2FpdGluZy4gKi8KKwkJQ0hFQ0tf Rk9SX0lOVEVSUlVQVFMoKTsKKwl9Cit9CisKKy8qCisgKiBXYWl0IHVudGlsIHRoZSBwYXJhbGxl bCBhcHBseSB3b3JrZXIncyB0cmFuc2FjdGlvbiBmaW5pc2hlcy4KKyAqLwordm9pZAorcGFfd2Fp dF9mb3JfeGFjdF9maW5pc2goUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvKQoreworCS8q CisJICogV2FpdCB1bnRpbCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHNldCB0aGUgc3RhdGUg dG8KKwkgKiBQQVJBTExFTF9UUkFOU19TVEFSVEVEIHdoaWNoIG1lYW5zIGl0IGhhcyBhY3F1aXJl ZCB0aGUgdHJhbnNhY3Rpb24KKwkgKiBsb2NrLiBUaGlzIGlzIHRvIHByZXZlbnQgbGVhZGVyIGFw cGx5IHdvcmtlciBmcm9tIGFjcXVpcmluZyB0aGUKKwkgKiB0cmFuc2FjdGlvbiBsb2NrIGVhcmxp ZXIgdGhhbiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorCSAqLworCXBhX3dhaXRfZm9yX3hh Y3Rfc3RhdGUod2luZm8sIFBBUkFMTEVMX1RSQU5TX1NUQVJURUQpOworCisJLyoKKwkgKiBXYWl0 IGZvciB0aGUgdHJhbnNhY3Rpb24gbG9jayB0byBiZSByZWxlYXNlZC4gVGhpcyBpcyByZXF1aXJl ZCB0byBkZXRlY3QKKwkgKiBkZWFkbG9jayBhbW9uZyBsZWFkZXIgYW5kIHBhcmFsbGVsIGFwcGx5 IHdvcmtlcnMuIFNlZSBjb21tZW50cyBhdG9wIHRoaXMKKwkgKiBmaWxlLgorCSAqLworCXBhX2xv Y2tfdHJhbnNhY3Rpb24od2luZm8tPnNoYXJlZC0+eGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsK KwlwYV91bmxvY2tfdHJhbnNhY3Rpb24od2luZm8tPnNoYXJlZC0+eGlkLCBBY2Nlc3NFeGNsdXNp dmVMb2NrKTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHN0YXRlIGJlY29tZXMgUEFSQUxMRUxf VFJBTlNfRklOSVNIRUQgaW4gY2FzZSB0aGUgcGFyYWxsZWwKKwkgKiBhcHBseSB3b3JrZXIgZmFp bGVkIHdoaWxlIGFwcGx5aW5nIGNoYW5nZXMgY2F1c2luZyB0aGUgbG9jayB0byBiZQorCSAqIHJl bGVhc2VkLgorCSAqLworCWlmIChwYV9nZXRfeGFjdF9zdGF0ZSh3aW5mby0+c2hhcmVkKSAhPSBQ QVJBTExFTF9UUkFOU19GSU5JU0hFRCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShF UlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJs b3N0IGNvbm5lY3Rpb24gdG8gdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkg d29ya2VyIikpKTsKK30KKworLyoKKyAqIFNldCBhbiBlbnVtIGluZGljYXRpbmcgdGhlIHRyYW5z YWN0aW9uIHN0YXRlIGZvciB0aGUgZ2l2ZW4gcGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtlci4KKyAq Lwordm9pZAorcGFfc2V0X3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3No YXJlZCwKKwkJCQkgIFBhcmFsbGVsVHJhbnNTdGF0ZSB4YWN0X3N0YXRlKQoreworCVNwaW5Mb2Nr QWNxdWlyZSgmd3NoYXJlZC0+bXV0ZXgpOworCXdzaGFyZWQtPnhhY3Rfc3RhdGUgPSB4YWN0X3N0 YXRlOworCVNwaW5Mb2NrUmVsZWFzZSgmd3NoYXJlZC0+bXV0ZXgpOworfQorCisvKgorICogR2V0 IGFuIGVudW0gaW5kaWNhdGluZyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgZm9yIHRoZSBnaXZlbiBw YXJhbGxlbCBhcHBseQorICogd29ya2VyLgorICovCitzdGF0aWMgUGFyYWxsZWxUcmFuc1N0YXRl CitwYV9nZXRfeGFjdF9zdGF0ZShQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3c2hhcmVkKQor eworCVBhcmFsbGVsVHJhbnNTdGF0ZSB4YWN0X3N0YXRlOworCisJU3BpbkxvY2tBY3F1aXJlKCZ3 c2hhcmVkLT5tdXRleCk7CisJeGFjdF9zdGF0ZSA9IHdzaGFyZWQtPnhhY3Rfc3RhdGU7CisJU3Bp bkxvY2tSZWxlYXNlKCZ3c2hhcmVkLT5tdXRleCk7CisKKwlyZXR1cm4geGFjdF9zdGF0ZTsKK30K KworLyoKKyAqIEZvcm0gYSB1bmlxdWUgc2F2ZXBvaW50IG5hbWUgZm9yIHRoZSBzdHJlYW1pbmcg dHJhbnNhY3Rpb24uCisgKgorICogTm90ZSB0aGF0IGRpZmZlcmVudCBzdWJzY3JpcHRpb25zIGZv ciBwdWJsaWNhdGlvbnMgb24gZGlmZmVyZW50IG5vZGVzIGNhbgorICogcmVjZWl2ZSBzYW1lIHJl bW90ZSB4aWQsIHNvIHdlIG5lZWQgdG8gdXNlIHN1YnNjcmlwdGlvbiBpZCBhbG9uZyB3aXRoIGl0 LgorICoKKyAqIFJldHVybiB0aGUgbmFtZSBpbiB0aGUgc3VwcGxpZWQgYnVmZmVyLgorICovCitz dGF0aWMgdm9pZAorcGFfc2F2ZXBvaW50X25hbWUoT2lkIHN1Ym9pZCwgVHJhbnNhY3Rpb25JZCB4 aWQsIGNoYXIgKnNwbmFtZSwgU2l6ZSBzenNwKQoreworCXNucHJpbnRmKHNwbmFtZSwgc3pzcCwg InBnX3NwXyV1XyV1Iiwgc3Vib2lkLCB4aWQpOworfQorCisvKgorICogRGVmaW5lIGEgc2F2ZXBv aW50IGZvciBhIHN1YnhhY3QgaW4gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlmIG5lZWRlZC4KKyAq CisgKiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGNhbiBmaWd1cmUgb3V0IGlmIGEgbmV3IHN1 YnRyYW5zYWN0aW9uIHdhcworICogc3RhcnRlZCBieSBjaGVja2luZyBpZiB0aGUgbmV3IGNoYW5n ZSBhcnJpdmVkIHdpdGggYSBkaWZmZXJlbnQgeGlkLiBJbiB0aGF0CisgKiBjYXNlIGRlZmluZSBh IG5hbWVkIHNhdmVwb2ludCwgc28gdGhhdCB3ZSBhcmUgYWJsZSB0byByb2xsYmFjayB0byBpdAor ICogaWYgcmVxdWlyZWQuCisgKi8KK3ZvaWQKK3BhX3N0YXJ0X3N1YnRyYW5zKFRyYW5zYWN0aW9u SWQgY3VycmVudF94aWQsIFRyYW5zYWN0aW9uSWQgdG9wX3hpZCkKK3sKKwlpZiAoY3VycmVudF94 aWQgIT0gdG9wX3hpZCAmJgorCQkhbGlzdF9tZW1iZXJfeGlkKHN1YnhhY3RsaXN0LCBjdXJyZW50 X3hpZCkpCisJeworCQlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKwkJY2hhcgkJc3BuYW1lW05BTUVE QVRBTEVOXTsKKworCQlwYV9zYXZlcG9pbnRfbmFtZShNeVN1YnNjcmlwdGlvbi0+b2lkLCBjdXJy ZW50X3hpZCwKKwkJCQkJCSAgc3BuYW1lLCBzaXplb2Yoc3BuYW1lKSk7CisKKwkJZWxvZyhERUJV RzEsICJkZWZpbmluZyBzYXZlcG9pbnQgJXMgaW4gbG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxl bCBhcHBseSB3b3JrZXIiLCBzcG5hbWUpOworCisJCS8qIFdlIG11c3QgYmUgaW4gdHJhbnNhY3Rp b24gYmxvY2sgdG8gZGVmaW5lIHRoZSBTQVZFUE9JTlQuICovCisJCWlmICghSXNUcmFuc2FjdGlv bkJsb2NrKCkpCisJCXsKKwkJCWlmICghSXNUcmFuc2FjdGlvblN0YXRlKCkpCisJCQkJU3RhcnRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQkJQmVnaW5UcmFuc2FjdGlvbkJsb2NrKCk7CisJCQlD b21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJfQorCisJCURlZmluZVNhdmVwb2ludChzcG5h bWUpOworCisJCS8qCisJCSAqIENvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCBpcyBuZWVkZWQgdG8g c3RhcnQgYSBzdWJ0cmFuc2FjdGlvbiBhZnRlcgorCQkgKiBpc3N1aW5nIGEgU0FWRVBPSU5UIGlu c2lkZSBhIHRyYW5zYWN0aW9uIGJsb2NrIChzZWUKKwkJICogU3RhcnRTdWJUcmFuc2FjdGlvbigp KS4KKwkJICovCisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCW9sZGN0eCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BUcmFuc2FjdGlvbkNvbnRleHQpOworCQlzdWJ4YWN0bGlz dCA9IGxhcHBlbmRfeGlkKHN1YnhhY3RsaXN0LCBjdXJyZW50X3hpZCk7CisJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjdHgpOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBTVFJFQU0gQUJPUlQg bWVzc2FnZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiB3YXMgYXBwbGllZCBpbiBhIHBhcmFsbGVsCisg KiBhcHBseSB3b3JrZXIuCisgKi8KK3ZvaWQKK3BhX3N0cmVhbV9hYm9ydChMb2dpY2FsUmVwU3Ry ZWFtQWJvcnREYXRhICphYm9ydF9kYXRhKQoreworCVRyYW5zYWN0aW9uSWQgeGlkID0gYWJvcnRf ZGF0YS0+eGlkOworCVRyYW5zYWN0aW9uSWQgc3VieGlkID0gYWJvcnRfZGF0YS0+c3VieGlkOwor CisJLyoKKwkgKiBVcGRhdGUgb3JpZ2luIHN0YXRlIHNvIHdlIGNhbiByZXN0YXJ0IHN0cmVhbWlu ZyBmcm9tIGNvcnJlY3QgcG9zaXRpb24KKwkgKiBpbiBjYXNlIG9mIGNyYXNoLgorCSAqLworCXJl cGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fbHNuID0gYWJvcnRfZGF0YS0+YWJvcnRfbHNuOworCXJl cGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fdGltZXN0YW1wID0gYWJvcnRfZGF0YS0+YWJvcnRfdGlt ZTsKKworCS8qCisJICogSWYgdGhlIHR3byBYSURzIGFyZSB0aGUgc2FtZSwgaXQncyBpbiBmYWN0 IGFib3J0IG9mIHRvcGxldmVsIHhhY3QsIHNvCisJICoganVzdCBmcmVlIHRoZSBzdWJ4YWN0bGlz dC4KKwkgKi8KKwlpZiAoc3VieGlkID09IHhpZCkKKwl7CisJCS8qCisJCSAqIFJlbGVhc2UgdGhl IGxvY2sgYXMgd2UgbWlnaHQgYmUgcHJvY2Vzc2luZyBhbiBlbXB0eSBzdHJlYW1pbmcKKwkJICog dHJhbnNhY3Rpb24gaW4gd2hpY2ggY2FzZSB0aGUgbG9jayB3b24ndCBiZSByZWxlYXNlZCBkdXJp bmcKKwkJICogdHJhbnNhY3Rpb24gcm9sbGJhY2suCisJCSAqLworCQlwYV91bmxvY2tfdHJhbnNh Y3Rpb24oeGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCWxpc3RfZnJlZShzdWJ4YWN0bGlzdCk7 CisJCXN1YnhhY3RsaXN0ID0gTklMOworCisJCUFib3J0Q3VycmVudFRyYW5zYWN0aW9uKCk7CisK KwkJaWYgKElzVHJhbnNhY3Rpb25CbG9jaygpKQorCQl7CisJCQlFbmRUcmFuc2FjdGlvbkJsb2Nr KGZhbHNlKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQl9CisKKwkJcGdzdGF0 X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKKworCQlwYV9zZXRfeGFjdF9zdGF0 ZShNeVBhcmFsbGVsU2hhcmVkLCBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCk7CisJfQorCWVsc2UK Kwl7CisJCS8qIE9LLCBzbyBpdCdzIGEgc3VieGFjdC4gUm9sbGJhY2sgdG8gdGhlIHNhdmVwb2lu dC4gKi8KKwkJaW50CQkJaTsKKwkJY2hhcgkJc3BuYW1lW05BTUVEQVRBTEVOXTsKKworCQlwYV9z YXZlcG9pbnRfbmFtZShNeVN1YnNjcmlwdGlvbi0+b2lkLCBzdWJ4aWQsIHNwbmFtZSwgc2l6ZW9m KHNwbmFtZSkpOworCisJCWVsb2coREVCVUcxLCAicm9sbGluZyBiYWNrIHRvIHNhdmVwb2ludCAl cyBpbiBsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciIsIHNwbmFtZSk7 CisKKwkJLyoKKwkJICogU2VhcmNoIHRoZSBzdWJ4YWN0bGlzdCwgZGV0ZXJtaW5lIHRoZSBvZmZz ZXQgdHJhY2tlZCBmb3IgdGhlCisJCSAqIHN1YnhhY3QsIGFuZCB0cnVuY2F0ZSB0aGUgbGlzdC4K KwkJICoKKwkJICogTm90ZSB0aGF0IElmIGl0J3MgYW4gZW1wdHkgc3ViLXRyYW5zYWN0aW9uIHRo ZW4gd2Ugd2lsbCBub3QgZmluZCB0aGUKKwkJICogc3VieGlkIGhlcmUuCisJCSAqLworCQlmb3Ig KGkgPSBsaXN0X2xlbmd0aChzdWJ4YWN0bGlzdCkgLSAxOyBpID49IDA7IGktLSkKKwkJeworCQkJ VHJhbnNhY3Rpb25JZCB4aWRfdG1wID0gbGZpcnN0X3hpZChsaXN0X250aF9jZWxsKHN1YnhhY3Rs aXN0LCBpKSk7CisKKwkJCWlmICh4aWRfdG1wID09IHN1YnhpZCkKKwkJCXsKKwkJCQlSb2xsYmFj a1RvU2F2ZXBvaW50KHNwbmFtZSk7CisJCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJ CQkJc3VieGFjdGxpc3QgPSBsaXN0X3RydW5jYXRlKHN1YnhhY3RsaXN0LCBpICsgMSk7CisJCQkJ YnJlYWs7CisJCQl9CisJCX0KKworCQlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEVJ TlRSQU5TQUNUSU9OLCBOVUxMKTsKKwl9Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIHRv IGFjcXVpcmUgYW5kIHJlbGVhc2UgYSBsb2NrIGZvciBlYWNoIHN0cmVhbSBibG9jay4KKyAqCisg KiBTZXQgbG9ja3RhZ19maWVsZDQgdG8gUEFSQUxMRUxfQVBQTFlfTE9DS19TVFJFQU0gdG8gaW5k aWNhdGUgdGhhdCBpdCdzIGEKKyAqIHN0cmVhbSBsb2NrLgorICoKKyAqIFJlZmVyIHRvIHRoZSBj b21tZW50cyBhdG9wIGFwcGx5cGFyYWxsZWx3b3JrZXIuYyB0byBzZWUgaG93IHRoZSBzdHJlYW0g bG9jaworICogaXMgdXNlZC4KKyAqLwordm9pZAorcGFfbG9ja19zdHJlYW0oVHJhbnNhY3Rpb25J ZCB4aWQsIExPQ0tNT0RFIGxvY2ttb2RlKQoreworCUxvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vz c2lvbihNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQsCisJCQkJCQkJCSAgIFBBUkFMTEVM X0FQUExZX0xPQ0tfU1RSRUFNLCBsb2NrbW9kZSk7Cit9CisKK3ZvaWQKK3BhX3VubG9ja19zdHJl YW0oVHJhbnNhY3Rpb25JZCB4aWQsIExPQ0tNT0RFIGxvY2ttb2RlKQoreworCVVubG9ja0FwcGx5 VHJhbnNhY3Rpb25Gb3JTZXNzaW9uKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCwKKwkJ CQkJCQkJCSBQQVJBTExFTF9BUFBMWV9MT0NLX1NUUkVBTSwgbG9ja21vZGUpOworfQorCisvKgor ICogSGVscGVyIGZ1bmN0aW9ucyB0byBhY3F1aXJlIGFuZCByZWxlYXNlIGEgbG9jayBmb3IgZWFj aCBsb2NhbCB0cmFuc2FjdGlvbgorICogYXBwbHkuCisgKgorICogU2V0IGxvY2t0YWdfZmllbGQ0 IHRvIFBBUkFMTEVMX0FQUExZX0xPQ0tfWEFDVCB0byBpbmRpY2F0ZSB0aGF0IGl0J3MgYQorICog dHJhbnNhY3Rpb24gbG9jay4KKyAqCisgKiBOb3RlIHRoYXQgYWxsIHRoZSBjYWxsZXJzIG11c3Qg cGFzcyBhIHJlbW90ZSB0cmFuc2FjdGlvbiBJRCBpbnN0ZWFkIG9mIGEKKyAqIGxvY2FsIHRyYW5z YWN0aW9uIElEIGFzIHhpZC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBsb2NhbCB0cmFuc2FjdGlvbiBJ RCB3aWxsCisgKiBvbmx5IGJlIGFzc2lnbmVkIHdoaWxlIGFwcGx5aW5nIHRoZSBmaXJzdCBjaGFu Z2UgaW4gdGhlIHBhcmFsbGVsIGFwcGx5IGJ1dAorICogaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBm aXJzdCBjaGFuZ2UgaW4gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpcyBibG9ja2VkCisgKiBi eSBhIGNvbmN1cnJlbnRseSBleGVjdXRpbmcgdHJhbnNhY3Rpb24gaW4gYW5vdGhlciBwYXJhbGxl bCBhcHBseSB3b3JrZXIuIFdlCisgKiBjYW4gb25seSBjb21tdW5pY2F0ZSB0aGUgbG9jYWwgdHJh bnNhY3Rpb24gaWQgdG8gdGhlIGxlYWRlciBhZnRlciBhcHBseWluZworICogdGhlIGZpcnN0IGNo YW5nZSBzbyBpdCB3b24ndCBiZSBhYmxlIHRvIHdhaXQgYWZ0ZXIgc2VuZGluZyB0aGUgeGFjdCBm aW5pc2gKKyAqIGNvbW1hbmQgdXNpbmcgdGhpcyBsb2NrLgorICoKKyAqIFJlZmVyIHRvIHRoZSBj b21tZW50cyBhdG9wIGFwcGx5cGFyYWxsZWx3b3JrZXIuYyB0byBzZWUgaG93IHRoZSB0cmFuc2Fj dGlvbgorICogbG9jayBpcyB1c2VkLgorICovCit2b2lkCitwYV9sb2NrX3RyYW5zYWN0aW9uKFRy YW5zYWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9kZSkKK3sKKwlMb2NrQXBwbHlUcmFuc2Fj dGlvbkZvclNlc3Npb24oTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkLAorCQkJCQkJCQkg ICBQQVJBTExFTF9BUFBMWV9MT0NLX1hBQ1QsIGxvY2ttb2RlKTsKK30KKwordm9pZAorcGFfdW5s b2NrX3RyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9kZSkKK3sK KwlVbmxvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbihNeUxvZ2ljYWxSZXBXb3JrZXItPnN1 YmlkLCB4aWQsCisJCQkJCQkJCQkgUEFSQUxMRUxfQVBQTFlfTE9DS19YQUNULCBsb2NrbW9kZSk7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRleCAyY2MwYWM5 Li4zMDM1NTdkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2Rl Y29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAg LTY1Miw5ICs2NTIsMTAgQEAgRGVjb2RlQ29tbWl0KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmLAogCXsKIAkJZm9yIChpID0gMDsgaSA8IHBhcnNlZC0+ bnN1YnhhY3RzOyBpKyspCiAJCXsKLQkJCVJlb3JkZXJCdWZmZXJGb3JnZXQoY3R4LT5yZW9yZGVy LCBwYXJzZWQtPnN1YnhhY3RzW2ldLCBidWYtPm9yaWdwdHIpOworCQkJUmVvcmRlckJ1ZmZlckZv cmdldChjdHgtPnJlb3JkZXIsIHBhcnNlZC0+c3VieGFjdHNbaV0sIGJ1Zi0+b3JpZ3B0ciwKKwkJ CQkJCQkJY29tbWl0X3RpbWUpOwogCQl9Ci0JCVJlb3JkZXJCdWZmZXJGb3JnZXQoY3R4LT5yZW9y ZGVyLCB4aWQsIGJ1Zi0+b3JpZ3B0cik7CisJCVJlb3JkZXJCdWZmZXJGb3JnZXQoY3R4LT5yZW9y ZGVyLCB4aWQsIGJ1Zi0+b3JpZ3B0ciwgY29tbWl0X3RpbWUpOwogCiAJCXJldHVybjsKIAl9CkBA IC04MjIsMTAgKzgyMywxMSBAQCBEZWNvZGVBYm9ydChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZiwKIAkJZm9yIChpID0gMDsgaSA8IHBhcnNlZC0+bnN1 YnhhY3RzOyBpKyspCiAJCXsKIAkJCVJlb3JkZXJCdWZmZXJBYm9ydChjdHgtPnJlb3JkZXIsIHBh cnNlZC0+c3VieGFjdHNbaV0sCi0JCQkJCQkJICAgYnVmLT5yZWNvcmQtPkVuZFJlY1B0cik7CisJ CQkJCQkJICAgYnVmLT5yZWNvcmQtPkVuZFJlY1B0ciwgYWJvcnRfdGltZSk7CiAJCX0KIAotCQlS ZW9yZGVyQnVmZmVyQWJvcnQoY3R4LT5yZW9yZGVyLCB4aWQsIGJ1Zi0+cmVjb3JkLT5FbmRSZWNQ dHIpOworCQlSZW9yZGVyQnVmZmVyQWJvcnQoY3R4LT5yZW9yZGVyLCB4aWQsIGJ1Zi0+cmVjb3Jk LT5FbmRSZWNQdHIsCisJCQkJCQkgICBhYm9ydF90aW1lKTsKIAl9CiAKIAkvKiB1cGRhdGUgdGhl IGRlY29kaW5nIHN0YXRzICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2xhdW5jaGVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5j aGVyLmMKaW5kZXggNzM1OTRjNi4uMWY4ZWEwMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbGF1bmNoZXIuYwpAQCAtNTUsNiArNTUsNyBAQAogLyogR1VDIHZhcmlhYmxlcyAq LwogaW50CQkJbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycyA9IDQ7CiBpbnQJCQltYXhf c3luY193b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gPSAyOworaW50CQkJbWF4X3BhcmFsbGVsX2Fw cGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiA9IDI7CiAKIExvZ2ljYWxSZXBXb3JrZXIgKk15 TG9naWNhbFJlcFdvcmtlciA9IE5VTEw7CiAKQEAgLTE1Miw4ICsxNTMsMTAgQEAgZ2V0X3N1YnNj cmlwdGlvbl9saXN0KHZvaWQpCiAgKgogICogVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgY2xlYW5p bmcgdXAgdGhlIHNoYXJlZCBtZW1vcnkgaW4gY2FzZSB0aGUgd29ya2VyCiAgKiBmYWlscyB0byBh dHRhY2guCisgKgorICogUmV0dXJuIHdoZXRoZXIgdGhlIGF0dGFjaCB3YXMgc3VjY2Vzc2Z1bC4K ICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBib29sCiBXYWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJB dHRhY2goTG9naWNhbFJlcFdvcmtlciAqd29ya2VyLAogCQkJCQkJCSAgIHVpbnQxNiBnZW5lcmF0 aW9uLAogCQkJCQkJCSAgIEJhY2tncm91bmRXb3JrZXJIYW5kbGUgKmhhbmRsZSkKQEAgLTE2OSwx MSArMTcyLDExIEBAIFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaChMb2dpY2FsUmVwV29y a2VyICp3b3JrZXIsCiAKIAkJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdf U0hBUkVEKTsKIAotCQkvKiBXb3JrZXIgZWl0aGVyIGRpZWQgb3IgaGFzIHN0YXJ0ZWQ7IG5vIG5l ZWQgdG8gZG8gYW55dGhpbmcuICovCisJCS8qIFdvcmtlciBlaXRoZXIgZGllZCBvciBoYXMgc3Rh cnRlZC4gUmV0dXJuIGZhbHNlIGlmIGRpZWQuICovCiAJCWlmICghd29ya2VyLT5pbl91c2UgfHwg d29ya2VyLT5wcm9jKQogCQl7CiAJCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2Nr KTsKLQkJCXJldHVybjsKKwkJCXJldHVybiB3b3JrZXItPmluX3VzZTsKIAkJfQogCiAJCUxXTG9j a1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwpAQCAtMTg4LDcgKzE5MSw3IEBAIFdhaXRG b3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIsCiAJCQlp ZiAoZ2VuZXJhdGlvbiA9PSB3b3JrZXItPmdlbmVyYXRpb24pCiAJCQkJbG9naWNhbHJlcF93b3Jr ZXJfY2xlYW51cCh3b3JrZXIpOwogCQkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9j ayk7Ci0JCQlyZXR1cm47CisJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAogCQkvKgpAQCAtMjEwLDYg KzIxMyw4IEBAIFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaChMb2dpY2FsUmVwV29ya2Vy ICp3b3JrZXIsCiAvKgogICogV2Fsa3MgdGhlIHdvcmtlcnMgYXJyYXkgYW5kIHNlYXJjaGVzIGZv ciBvbmUgdGhhdCBtYXRjaGVzIGdpdmVuCiAgKiBzdWJzY3JpcHRpb24gaWQgYW5kIHJlbGlkLgor ICoKKyAqIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIg b3IgdGFibGUgc3luYyB3b3JrZXIuCiAgKi8KIExvZ2ljYWxSZXBXb3JrZXIgKgogbG9naWNhbHJl cF93b3JrZXJfZmluZChPaWQgc3ViaWQsIE9pZCByZWxpZCwgYm9vbCBvbmx5X3J1bm5pbmcpCkBA IC0yMjQsNiArMjI5LDEwIEBAIGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBPaWQg cmVsaWQsIGJvb2wgb25seV9ydW5uaW5nKQogCXsKIAkJTG9naWNhbFJlcFdvcmtlciAqdyA9ICZM b2dpY2FsUmVwQ3R4LT53b3JrZXJzW2ldOwogCisJCS8qIFNraXAgcGFyYWxsZWwgYXBwbHkgd29y a2Vycy4gKi8KKwkJaWYgKGlzUGFyYWxsZWxBcHBseVdvcmtlcih3KSkKKwkJCWNvbnRpbnVlOwor CiAJCWlmICh3LT5pbl91c2UgJiYgdy0+c3ViaWQgPT0gc3ViaWQgJiYgdy0+cmVsaWQgPT0gcmVs aWQgJiYKIAkJCSghb25seV9ydW5uaW5nIHx8IHctPnByb2MpKQogCQl7CkBAIC0yNjAsMTEgKzI2 OSwxMyBAQCBsb2dpY2FscmVwX3dvcmtlcnNfZmluZChPaWQgc3ViaWQsIGJvb2wgb25seV9ydW5u aW5nKQogfQogCiAvKgotICogU3RhcnQgbmV3IGFwcGx5IGJhY2tncm91bmQgd29ya2VyLCBpZiBw b3NzaWJsZS4KKyAqIFN0YXJ0IG5ldyBsb2dpY2FsIHJlcGxpY2F0aW9uIGJhY2tncm91bmQgd29y a2VyLCBpZiBwb3NzaWJsZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ug b24gZmFpbHVyZS4KICAqLwotdm9pZAorYm9vbAogbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE9p ZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsIE9pZCB1c2VyaWQsCi0JCQkJ CQkgT2lkIHJlbGlkKQorCQkJCQkJIE9pZCByZWxpZCwgZHNtX2hhbmRsZSBzdWJ3b3JrZXJfZHNt KQogewogCUJhY2tncm91bmRXb3JrZXIgYmd3OwogCUJhY2tncm91bmRXb3JrZXJIYW5kbGUgKmJn d19oYW5kbGU7CkBAIC0yNzMsNyArMjg0LDEyIEBAIGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChP aWQgZGJpZCwgT2lkIHN1YmlkLCBjb25zdCBjaGFyICpzdWJuYW1lLCBPaWQgdXNlcmlkLAogCWlu dAkJCXNsb3QgPSAwOwogCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciA9IE5VTEw7CiAJaW50CQkJ bnN5bmN3b3JrZXJzOworCWludAkJCW5wYXJhbGxlbGFwcGx5d29ya2VyczsKIAlUaW1lc3RhbXBU eiBub3c7CisJYm9vbAkJaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyID0gKHN1Yndvcmtlcl9kc20g IT0gRFNNX0hBTkRMRV9JTlZBTElEKTsKKworCS8qIFNhbml0eSBjaGVjayAtIHRhYmxlc3luYyB3 b3JrZXIgY2Fubm90IGJlIGEgc3Vid29ya2VyICovCisJQXNzZXJ0KCEoaXNfcGFyYWxsZWxfYXBw bHlfd29ya2VyICYmIE9pZElzVmFsaWQocmVsaWQpKSk7CiAKIAllcmVwb3J0KERFQlVHMSwKIAkJ CShlcnJtc2dfaW50ZXJuYWwoInN0YXJ0aW5nIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZv ciBzdWJzY3JpcHRpb24gXCIlc1wiIiwKQEAgLTM1MSw3ICszNjcsMjYgQEAgcmV0cnk6CiAJaWYg KE9pZElzVmFsaWQocmVsaWQpICYmIG5zeW5jd29ya2VycyA+PSBtYXhfc3luY193b3JrZXJzX3Bl cl9zdWJzY3JpcHRpb24pCiAJewogCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2Nr KTsKLQkJcmV0dXJuOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJbnBhcmFsbGVsYXBwbHl3b3Jr ZXJzID0gbG9naWNhbHJlcF9wYV93b3JrZXJfY291bnQoc3ViaWQpOworCisJLyoKKwkgKiBSZXR1 cm4gZmFsc2UgaWYgdGhlIG51bWJlciBvZiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIHJlYWNoZWQg dGhlIGxpbWl0CisJICogcGVyIHN1YnNjcmlwdGlvbi4KKwkgKi8KKwlpZiAoaXNfcGFyYWxsZWxf YXBwbHlfd29ya2VyICYmCisJCW5wYXJhbGxlbGFwcGx5d29ya2VycyA+PSBtYXhfcGFyYWxsZWxf YXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uKQorCXsKKwkJTFdMb2NrUmVsZWFzZShMb2dp Y2FsUmVwV29ya2VyTG9jayk7CisKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycmNvZGUoRVJSQ09E RV9DT05GSUdVUkFUSU9OX0xJTUlUX0VYQ0VFREVEKSwKKwkJCQkgZXJybXNnKCJvdXQgb2YgcGFy YWxsZWwgYXBwbHkgd29ya2VycyIpLAorCQkJCSBlcnJoaW50KCJZb3UgbWlnaHQgbmVlZCB0byBp bmNyZWFzZSBtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uLiIpKSk7 CisKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qCkBAIC0zNjUsNyArNDAwLDcgQEAgcmV0cnk6 CiAJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05GSUdVUkFUSU9OX0xJTUlUX0VYQ0VFREVEKSwKIAkJ CQkgZXJybXNnKCJvdXQgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgc2xvdHMiKSwKIAkJ CQkgZXJyaGludCgiWW91IG1pZ2h0IG5lZWQgdG8gaW5jcmVhc2UgbWF4X2xvZ2ljYWxfcmVwbGlj YXRpb25fd29ya2Vycy4iKSkpOwotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkv KiBQcmVwYXJlIHRoZSB3b3JrZXIgc2xvdC4gKi8KQEAgLTM4MCw2ICs0MTUsOCBAQCByZXRyeToK IAl3b3JrZXItPnJlbHN0YXRlID0gU1VCUkVMX1NUQVRFX1VOS05PV047CiAJd29ya2VyLT5yZWxz dGF0ZV9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAl3b3JrZXItPnN0cmVhbV9maWxlc2V0ID0g TlVMTDsKKwl3b3JrZXItPmFwcGx5X2xlYWRlcl9waWQgPSBpc19wYXJhbGxlbF9hcHBseV93b3Jr ZXIgPyBNeVByb2NQaWQgOiBJbnZhbGlkUGlkOworCXdvcmtlci0+cGFyYWxsZWxfYXBwbHkgPSBp c19wYXJhbGxlbF9hcHBseV93b3JrZXI7CiAJd29ya2VyLT5sYXN0X2xzbiA9IEludmFsaWRYTG9n UmVjUHRyOwogCVRJTUVTVEFNUF9OT0JFR0lOKHdvcmtlci0+bGFzdF9zZW5kX3RpbWUpOwogCVRJ TUVTVEFNUF9OT0JFR0lOKHdvcmtlci0+bGFzdF9yZWN2X3RpbWUpOwpAQCAtMzk3LDE5ICs0MzQs MzQgQEAgcmV0cnk6CiAJCUJHV09SS0VSX0JBQ0tFTkRfREFUQUJBU0VfQ09OTkVDVElPTjsKIAli Z3cuYmd3X3N0YXJ0X3RpbWUgPSBCZ1dvcmtlclN0YXJ0X1JlY292ZXJ5RmluaXNoZWQ7CiAJc25w cmludGYoYmd3LmJnd19saWJyYXJ5X25hbWUsIEJHV19NQVhMRU4sICJwb3N0Z3JlcyIpOwotCXNu cHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwgIkFwcGx5V29ya2VyTWFp biIpOworCisJaWYgKGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlcikKKwkJc25wcmludGYoYmd3LmJn d19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiUGFyYWxsZWxBcHBseVdvcmtlck1haW4iKTsK KwllbHNlCisJCXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwgIkFw cGx5V29ya2VyTWFpbiIpOworCiAJaWYgKE9pZElzVmFsaWQocmVsaWQpKQogCQlzbnByaW50Zihi Z3cuYmd3X25hbWUsIEJHV19NQVhMRU4sCiAJCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtl ciBmb3Igc3Vic2NyaXB0aW9uICV1IHN5bmMgJXUiLCBzdWJpZCwgcmVsaWQpOworCWVsc2UgaWYg KGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlcikKKwkJc25wcmludGYoYmd3LmJnd19uYW1lLCBCR1df TUFYTEVOLAorCQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIg Zm9yIHN1YnNjcmlwdGlvbiAldSIsIHN1YmlkKTsKIAllbHNlCiAJCXNucHJpbnRmKGJndy5iZ3df bmFtZSwgQkdXX01BWExFTiwKLQkJCQkgImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZvciBz dWJzY3JpcHRpb24gJXUiLCBzdWJpZCk7Ci0Jc25wcmludGYoYmd3LmJnd190eXBlLCBCR1dfTUFY TEVOLCAibG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIiKTsKKwkJCQkgImxvZ2ljYWwgcmVwbGlj YXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUiLCBzdWJpZCk7CisKKwlpZiAo aXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyKQorCQlzbnByaW50ZihiZ3cuYmd3X3R5cGUsIEJHV19N QVhMRU4sICJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIHdvcmtlciIpOworCWVsc2UKKwkJ c25wcmludGYoYmd3LmJnd190eXBlLCBCR1dfTUFYTEVOLCAibG9naWNhbCByZXBsaWNhdGlvbiB3 b3JrZXIiKTsKIAogCWJndy5iZ3dfcmVzdGFydF90aW1lID0gQkdXX05FVkVSX1JFU1RBUlQ7CiAJ Ymd3LmJnd19ub3RpZnlfcGlkID0gTXlQcm9jUGlkOwogCWJndy5iZ3dfbWFpbl9hcmcgPSBJbnQz MkdldERhdHVtKHNsb3QpOwogCisJaWYgKGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlcikKKwkJbWVt Y3B5KGJndy5iZ3dfZXh0cmEsICZzdWJ3b3JrZXJfZHNtLCBzaXplb2YoZHNtX2hhbmRsZSkpOwor CiAJaWYgKCFSZWdpc3RlckR5bmFtaWNCYWNrZ3JvdW5kV29ya2VyKCZiZ3csICZiZ3dfaGFuZGxl KSkKIAl7CiAJCS8qIEZhaWxlZCB0byBzdGFydCB3b3JrZXIsIHNvIGNsZWFuIHVwIHRoZSB3b3Jr ZXIgc2xvdC4gKi8KQEAgLTQyMiwzMyArNDc0LDIzIEBAIHJldHJ5OgogCQkJCShlcnJjb2RlKEVS UkNPREVfQ09ORklHVVJBVElPTl9MSU1JVF9FWENFRURFRCksCiAJCQkJIGVycm1zZygib3V0IG9m IGJhY2tncm91bmQgd29ya2VyIHNsb3RzIiksCiAJCQkJIGVycmhpbnQoIllvdSBtaWdodCBuZWVk IHRvIGluY3JlYXNlIG1heF93b3JrZXJfcHJvY2Vzc2VzLiIpKSk7Ci0JCXJldHVybjsKKwkJcmV0 dXJuIGZhbHNlOwogCX0KIAogCS8qIE5vdyB3YWl0IHVudGlsIGl0IGF0dGFjaGVzLiAqLwotCVdh aXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaCh3b3JrZXIsIGdlbmVyYXRpb24sIGJnd19oYW5k bGUpOworCXJldHVybiBXYWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2god29ya2VyLCBnZW5l cmF0aW9uLCBiZ3dfaGFuZGxlKTsKIH0KIAogLyoKLSAqIFN0b3AgdGhlIGxvZ2ljYWwgcmVwbGlj YXRpb24gd29ya2VyIGZvciBzdWJpZC9yZWxpZCwgaWYgYW55LCBhbmQgd2FpdCB1bnRpbAotICog aXQgZGV0YWNoZXMgZnJvbSB0aGUgc2xvdC4KKyAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHN0b3Ag dGhlIHdvcmtlciBhbmQgd2FpdCB1bnRpbCBpdCBkZXRhY2hlcyBmcm9tIHRoZQorICogc2xvdC4K ICAqLwotdm9pZAotbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCkK K3N0YXRpYyB2b2lkCitsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKExvZ2ljYWxSZXBX b3JrZXIgKndvcmtlciwgaW50IHNpZ25vKQogewotCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcjsK IAl1aW50MTYJCWdlbmVyYXRpb247CiAKLQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJM b2NrLCBMV19TSEFSRUQpOwotCi0Jd29ya2VyID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChzdWJp ZCwgcmVsaWQsIGZhbHNlKTsKLQotCS8qIE5vIHdvcmtlciwgbm90aGluZyB0byBkby4gKi8KLQlp ZiAoIXdvcmtlcikKLQl7Ci0JCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwot CQlyZXR1cm47Ci0JfQorCUFzc2VydChMV0xvY2tIZWxkQnlNZUluTW9kZShMb2dpY2FsUmVwV29y a2VyTG9jaywgTFdfU0hBUkVEKSk7CiAKIAkvKgogCSAqIFJlbWVtYmVyIHdoaWNoIGdlbmVyYXRp b24gd2FzIG91ciB3b3JrZXIgc28gd2UgY2FuIGNoZWNrIGlmIHdoYXQgd2Ugc2VlCkBAIC00ODYs MTAgKzUyOCw3IEBAIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQp CiAJCSAqIGRpZmZlcmVudCwgbWVhbmluZyB0aGF0IGEgZGlmZmVyZW50IHdvcmtlciBoYXMgdGFr ZW4gdGhlIHNsb3QuCiAJCSAqLwogCQlpZiAoIXdvcmtlci0+aW5fdXNlIHx8IHdvcmtlci0+Z2Vu ZXJhdGlvbiAhPSBnZW5lcmF0aW9uKQotCQl7Ci0JCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBX b3JrZXJMb2NrKTsKIAkJCXJldHVybjsKLQkJfQogCiAJCS8qIFdvcmtlciBoYXMgYXNzaWduZWQg cHJvYywgc28gaXQgaGFzIHN0YXJ0ZWQuICovCiAJCWlmICh3b3JrZXItPnByb2MpCkBAIC00OTcs NyArNTM2LDcgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCkK IAl9CiAKIAkvKiBOb3cgdGVybWluYXRlIHRoZSB3b3JrZXIgLi4uICovCi0Ja2lsbCh3b3JrZXIt PnByb2MtPnBpZCwgU0lHVEVSTSk7CisJa2lsbCh3b3JrZXItPnByb2MtPnBpZCwgc2lnbm8pOwog CiAJLyogLi4uIGFuZCB3YWl0IGZvciBpdCB0byBkaWUuICovCiAJZm9yICg7OykKQEAgLTUyMyw2 ICs1NjIsNTMgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCkK IAogCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwogCX0K K30KKworLyoKKyAqIFN0b3AgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZvciBzdWJp ZC9yZWxpZCwgaWYgYW55LgorICovCit2b2lkCitsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBz dWJpZCwgT2lkIHJlbGlkKQoreworCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcjsKKworCUxXTG9j a0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisKKwl3b3JrZXIgPSBs b2dpY2FscmVwX3dvcmtlcl9maW5kKHN1YmlkLCByZWxpZCwgZmFsc2UpOworCisJaWYgKHdvcmtl cikKKwl7CisJCUFzc2VydCghaXNQYXJhbGxlbEFwcGx5V29ya2VyKHdvcmtlcikpOworCQlsb2dp Y2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKHdvcmtlciwgU0lHVEVSTSk7CisJfQorCisJTFdM b2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Cit9CisKKy8qCisgKiBTdG9wIHRoZSBs b2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBjb3JyZXNwb25kaW5nIHRv IHRoZQorICogaW5wdXQgc2xvdCBudW1iZXIuCisgKgorICogTm9kZSB0aGF0IHRoZSBmdW5jdGlv biBzZW5kcyBTSUdJTlQgaW5zdGVhZCBvZiBTSUdURVJNIHRvIHRoZSBwYXJhbGxlbCBhcHBseQor ICogd29ya2VyIHNvIHRoYXQgdGhlIHdvcmtlciBleGl0cyBjbGVhbmx5LgorICovCit2b2lkCits b2dpY2FscmVwX3BhX3dvcmtlcl9zdG9wKGludCBzbG90X25vLCB1aW50MTYgZ2VuZXJhdGlvbikK K3sKKwlMb2dpY2FsUmVwV29ya2VyICp3b3JrZXI7CisKKwlBc3NlcnQoc2xvdF9ubyA+PSAwICYm IHNsb3Rfbm8gPCBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzKTsKKworCUxXTG9ja0Fj cXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisKKwl3b3JrZXIgPSAmTG9n aWNhbFJlcEN0eC0+d29ya2Vyc1tzbG90X25vXTsKKwlBc3NlcnQoaXNQYXJhbGxlbEFwcGx5V29y a2VyKHdvcmtlcikpOworCisJLyoKKwkgKiBPbmx5IHN0b3AgdGhlIHdvcmtlciBpZiB0aGUgZ2Vu ZXJhdGlvbiBtYXRjaGVzIGFuZCB0aGUgd29ya2VyIGlzIGFsaXZlLgorCSAqLworCWlmICh3b3Jr ZXItPmdlbmVyYXRpb24gPT0gZ2VuZXJhdGlvbiAmJiB3b3JrZXItPnByb2MpCisJCWxvZ2ljYWxy ZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwod29ya2VyLCBTSUdJTlQpOwogCiAJTFdMb2NrUmVsZWFz ZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CiB9CkBAIC01OTUsMTEgKzY4MSwzMiBAQCBsb2dpY2Fs cmVwX3dvcmtlcl9hdHRhY2goaW50IHNsb3QpCiB9CiAKIC8qCi0gKiBEZXRhY2ggdGhlIHdvcmtl ciAoY2xlYW5zIHVwIHRoZSB3b3JrZXIgaW5mbykuCisgKiBTdG9wIHRoZSBwYXJhbGxlbCBhcHBs eSB3b3JrZXJzIGlmIGFueSwgYW5kIGRldGFjaCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlcgorICog KGNsZWFucyB1cCB0aGUgd29ya2VyIGluZm8pLgogICovCiBzdGF0aWMgdm9pZAogbG9naWNhbHJl cF93b3JrZXJfZGV0YWNoKHZvaWQpCiB7CisJLyogU3RvcCB0aGUgcGFyYWxsZWwgYXBwbHkgd29y a2Vycy4gKi8KKwlpZiAoYW1fbGVhZGVyX2FwcGx5X3dvcmtlcigpKQorCXsKKwkJTGlzdAkgICAq d29ya2VyczsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVw V29ya2VyTG9jaywgTFdfU0hBUkVEKTsKKworCQl3b3JrZXJzID0gbG9naWNhbHJlcF93b3JrZXJz X2ZpbmQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgdHJ1ZSk7CisJCWZvcmVhY2gobGMsIHdv cmtlcnMpCisJCXsKKwkJCUxvZ2ljYWxSZXBXb3JrZXIgKncgPSAoTG9naWNhbFJlcFdvcmtlciAq KSBsZmlyc3QobGMpOworCisJCQlpZiAoaXNQYXJhbGxlbEFwcGx5V29ya2VyKHcpKQorCQkJCWxv Z2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwodywgU0lHVEVSTSk7CisJCX0KKworCQlMV0xv Y2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKKwl9CisKIAkvKiBCbG9jayBjb25jdXJy ZW50IGFjY2Vzcy4gKi8KIAlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19F WENMVVNJVkUpOwogCkBAIC02MjIsNiArNzI5LDggQEAgbG9naWNhbHJlcF93b3JrZXJfY2xlYW51 cChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIpCiAJd29ya2VyLT51c2VyaWQgPSBJbnZhbGlkT2lk OwogCXdvcmtlci0+c3ViaWQgPSBJbnZhbGlkT2lkOwogCXdvcmtlci0+cmVsaWQgPSBJbnZhbGlk T2lkOworCXdvcmtlci0+YXBwbHlfbGVhZGVyX3BpZCA9IEludmFsaWRQaWQ7CisJd29ya2VyLT5w YXJhbGxlbF9hcHBseSA9IGZhbHNlOwogfQogCiAvKgpAQCAtNjUzLDYgKzc2MiwxMyBAQCBsb2dp Y2FscmVwX3dvcmtlcl9vbmV4aXQoaW50IGNvZGUsIERhdHVtIGFyZykKIAlpZiAoTXlMb2dpY2Fs UmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCAhPSBOVUxMKQogCQlGaWxlU2V0RGVsZXRlQWxsKE15 TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQpOwogCisJLyoKKwkgKiBTZXNzaW9uIGxl dmVsIGxvY2tzIG1heSBiZSBhY3F1aXJlZCBvdXRzaWRlIG9mIGEgdHJhbnNhY3Rpb24gaW4gcGFy YWxsZWwKKwkgKiBhcHBseSBtb2RlIGFuZCB3aWxsIG5vdCBiZSByZWxlYXNlZCB3aGVuIHRoZSB3 b3JrZXIgdGVybWluYXRlcywgc28KKwkgKiBtYW51YWxseSByZWxlYXNlIGFsbCBsb2NrcyBiZWZv cmUgdGhlIHdvcmtlciBleGl0cy4KKwkgKi8KKwlMb2NrUmVsZWFzZUFsbChERUZBVUxUX0xPQ0tN RVRIT0QsIHRydWUpOworCiAJQXBwbHlMYXVuY2hlcldha2V1cCgpOwogfQogCkBAIC02ODEsNiAr Nzk3LDMzIEBAIGxvZ2ljYWxyZXBfc3luY193b3JrZXJfY291bnQoT2lkIHN1YmlkKQogfQogCiAv KgorICogQ291bnQgdGhlIG51bWJlciBvZiByZWdpc3RlcmVkIChidXQgbm90IG5lY2Vzc2FyaWx5 IHJ1bm5pbmcpIHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXJzIGZvciBhIHN1YnNjcmlwdGlvbi4K KyAqLworaW50Citsb2dpY2FscmVwX3BhX3dvcmtlcl9jb3VudChPaWQgc3ViaWQpCit7CisJaW50 CQkJaTsKKwlpbnQJCQlyZXMgPSAwOworCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lKExvZ2ljYWxS ZXBXb3JrZXJMb2NrKSk7CisKKwkvKgorCSAqIFNjYW4gYWxsIGF0dGFjaGVkIHBhcmFsbGVsIGFw cGx5IHdvcmtlcnMsIG9ubHkgY291bnRpbmcgdGhvc2Ugd2hpY2gKKwkgKiBoYXZlIHRoZSBnaXZl biBzdWJzY3JpcHRpb24gaWQuCisJICovCisJZm9yIChpID0gMDsgaSA8IG1heF9sb2dpY2FsX3Jl cGxpY2F0aW9uX3dvcmtlcnM7IGkrKykKKwl7CisJCUxvZ2ljYWxSZXBXb3JrZXIgKncgPSAmTG9n aWNhbFJlcEN0eC0+d29ya2Vyc1tpXTsKKworCQlpZiAody0+c3ViaWQgPT0gc3ViaWQgJiYgaXNQ YXJhbGxlbEFwcGx5V29ya2VyKHcpKQorCQkJcmVzKys7CisJfQorCisJcmV0dXJuIHJlczsKK30K KworLyoKICAqIEFwcGx5TGF1bmNoZXJTaG1lbVNpemUKICAqCQlDb21wdXRlIHNwYWNlIG5lZWRl ZCBmb3IgcmVwbGljYXRpb24gbGF1bmNoZXIgc2hhcmVkIG1lbW9yeQogICovCkBAIC04NjksNyAr MTAxMiw3IEBAIEFwcGx5TGF1bmNoZXJNYWluKERhdHVtIG1haW5fYXJnKQogCQkJCQl3YWl0X3Rp bWUgPSB3YWxfcmV0cmlldmVfcmV0cnlfaW50ZXJ2YWw7CiAKIAkJCQkJbG9naWNhbHJlcF93b3Jr ZXJfbGF1bmNoKHN1Yi0+ZGJpZCwgc3ViLT5vaWQsIHN1Yi0+bmFtZSwKLQkJCQkJCQkJCQkJIHN1 Yi0+b3duZXIsIEludmFsaWRPaWQpOworCQkJCQkJCQkJCQkgc3ViLT5vd25lciwgSW52YWxpZE9p ZCwgRFNNX0hBTkRMRV9JTlZBTElEKTsKIAkJCQl9CiAJCQl9CiAKQEAgLTk1Miw2ICsxMDk1LDEw IEBAIHBnX3N0YXRfZ2V0X3N1YnNjcmlwdGlvbihQR19GVU5DVElPTl9BUkdTKQogCQlpZiAoT2lk SXNWYWxpZChzdWJpZCkgJiYgd29ya2VyLnN1YmlkICE9IHN1YmlkKQogCQkJY29udGludWU7CiAK KwkJLyogU2tpcCBpZiB0aGlzIGlzIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyICovCisJCWlmIChp c1BhcmFsbGVsQXBwbHlXb3JrZXIoJndvcmtlcikpCisJCQljb250aW51ZTsKKwogCQl3b3JrZXJf cGlkID0gd29ya2VyLnByb2MtPnBpZDsKIAogCQl2YWx1ZXNbMF0gPSBPYmplY3RJZEdldERhdHVt KHdvcmtlci5zdWJpZCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5i dWlsZAppbmRleCA3NzM1ODNhLi4yNmJmYzBlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbWVzb24uYnVpbGQKQEAgLTEsNCArMSw1IEBACiBiYWNrZW5kX3NvdXJjZXMgKz0g ZmlsZXMoCisgICdhcHBseXBhcmFsbGVsd29ya2VyLmMnLAogICAnZGVjb2RlLmMnLAogICAnbGF1 bmNoZXIuYycsCiAgICdsb2dpY2FsLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9vcmlnaW4uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv b3JpZ2luLmMKaW5kZXggZjEzNGU0NC4uZjEzODM2YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL29yaWdpbi5jCkBAIC0xMDc1LDEyICsxMDc1LDIwIEBAIFJlcGxpY2F0aW9uT3Jp Z2luRXhpdENsZWFudXAoaW50IGNvZGUsIERhdHVtIGFyZykKICAqIGFycmF5IGRvZXNuJ3QgaGF2 ZSB0byBiZSBzZWFyY2hlZCB3aGVuIGNhbGxpbmcKICAqIHJlcGxvcmlnaW5fc2Vzc2lvbl9hZHZh bmNlKCkuCiAgKgotICogT2J2aW91c2x5IG9ubHkgb25lIHN1Y2ggY2FjaGVkIG9yaWdpbiBjYW4g ZXhpc3QgcGVyIHByb2Nlc3MgYW5kIHRoZSBjdXJyZW50CisgKiBOb3JtYWxseSBvbmx5IG9uZSBz dWNoIGNhY2hlZCBvcmlnaW4gY2FuIGV4aXN0IHBlciBwcm9jZXNzIGFuZCB0aGUgY3VycmVudAog ICogY2FjaGVkIHZhbHVlIGNhbiBvbmx5IGJlIHNldCBhZ2FpbiBhZnRlciB0aGUgcHJldmlvdXMg dmFsdWUgaXMgdG9ybiBkb3duCiAgKiB3aXRoIHJlcGxvcmlnaW5fc2Vzc2lvbl9yZXNldCgpLgor ICoKKyAqIEhvd2V2ZXIsIHdlIGRvIGFsbG93IG11bHRpcGxlIHByb2Nlc3NlcyB0byBwb2ludCB0 byB0aGUgc2FtZSBvcmlnaW4gc2xvdCBpZgorICogcmVxdWVzdGVkIGJ5IHRoZSBjYWxsZXIgYnkg cGFzc2luZyBQSUQgb2YgdGhlIHByb2Nlc3MgdGhhdCBoYXMgYWxyZWFkeQorICogYWNxdWlyZWQg aXQgYXMgYWNxdWlyZWRfYnkuIFRoaXMgaXMgdG8gYWxsb3cgbXVsdGlwbGUgcGFyYWxsZWwgYXBw bHkKKyAqIHByb2Nlc3NlcyB0byB1c2UgdGhlIHNhbWUgb3JpZ2luLCBwcm92aWRlZCB0aGV5IG1h aW50YWluIGNvbW1pdCBvcmRlciwgZm9yCisgKiBleGFtcGxlLCBieSBhbGxvd2luZyBvbmx5IG9u ZSBwcm9jZXNzIHRvIGNvbW1pdCBhdCBhIHRpbWUuIEZvciB0aGUgZmlyc3QKKyAqIHByb2Nlc3Mg cmVxdWVzdGluZyB0aGlzIG9yaWdpbiwgdGhlIGFjcXVpcmVkX2J5IHBhcmFtZXRlciBuZWVkcyB0 byBiZSBzZXQgdG8KKyAqIDAuCiAgKi8KIHZvaWQKLXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChS ZXBPcmlnaW5JZCBub2RlKQorcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5v ZGUsIGludCBhY3F1aXJlZF9ieSkKIHsKIAlzdGF0aWMgYm9vbCByZWdpc3RlcmVkX2NsZWFudXA7 CiAJaW50CQkJaTsKQEAgLTExMjIsNyArMTEzMCw3IEBAIHJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1 cChSZXBPcmlnaW5JZCBub2RlKQogCQlpZiAoY3Vyc3RhdGUtPnJvaWRlbnQgIT0gbm9kZSkKIAkJ CWNvbnRpbnVlOwogCi0JCWVsc2UgaWYgKGN1cnN0YXRlLT5hY3F1aXJlZF9ieSAhPSAwKQorCQll bHNlIGlmIChjdXJzdGF0ZS0+YWNxdWlyZWRfYnkgIT0gMCAmJiBhY3F1aXJlZF9ieSA9PSAwKQog CQl7CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9JTl9V U0UpLApAQCAtMTE1Myw3ICsxMTYxLDExIEBAIHJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBP cmlnaW5JZCBub2RlKQogCiAJQXNzZXJ0KHNlc3Npb25fcmVwbGljYXRpb25fc3RhdGUtPnJvaWRl bnQgIT0gSW52YWxpZFJlcE9yaWdpbklkKTsKIAotCXNlc3Npb25fcmVwbGljYXRpb25fc3RhdGUt PmFjcXVpcmVkX2J5ID0gTXlQcm9jUGlkOworCWlmIChhY3F1aXJlZF9ieSA9PSAwKQorCQlzZXNz aW9uX3JlcGxpY2F0aW9uX3N0YXRlLT5hY3F1aXJlZF9ieSA9IE15UHJvY1BpZDsKKwllbHNlIGlm IChzZXNzaW9uX3JlcGxpY2F0aW9uX3N0YXRlLT5hY3F1aXJlZF9ieSAhPSBhY3F1aXJlZF9ieSkK KwkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5kIHJlcGxpY2F0aW9uIHN0YXRlIHNsb3QgZm9y IHJlcGxpY2F0aW9uIG9yaWdpbiB3aXRoIE9JRCAldSB3aGljaCB3YXMgYWNxdWlyZWQgYnkgJWQi LAorCQkJIG5vZGUsIGFjcXVpcmVkX2J5KTsKIAogCUxXTG9ja1JlbGVhc2UoUmVwbGljYXRpb25P cmlnaW5Mb2NrKTsKIApAQCAtMTMzNyw3ICsxMzQ5LDcgQEAgcGdfcmVwbGljYXRpb25fb3JpZ2lu X3Nlc3Npb25fc2V0dXAoUEdfRlVOQ1RJT05fQVJHUykKIAogCW5hbWUgPSB0ZXh0X3RvX2NzdHJp bmcoKHRleHQgKikgRGF0dW1HZXRQb2ludGVyKFBHX0dFVEFSR19EQVRVTSgwKSkpOwogCW9yaWdp biA9IHJlcGxvcmlnaW5fYnlfbmFtZShuYW1lLCBmYWxzZSk7Ci0JcmVwbG9yaWdpbl9zZXNzaW9u X3NldHVwKG9yaWdpbik7CisJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbiwgMCk7CiAK IAlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luOwogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggZmY4NTEzZS4uZDYxNjBlNiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtMTE2MywxMCArMTE2MywxNCBAQCBsb2dp Y2FscmVwX3JlYWRfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwQ29tbWl0 RGF0YSAqY29tbWl0X2RhdGEpCiAvKgogICogV3JpdGUgU1RSRUFNIEFCT1JUIHRvIHRoZSBvdXRw dXQgc3RyZWFtLiBOb3RlIHRoYXQgeGlkIGFuZCBzdWJ4aWQgd2lsbCBiZQogICogc2FtZSBmb3Ig dGhlIHRvcC1sZXZlbCB0cmFuc2FjdGlvbiBhYm9ydC4KKyAqCisgKiBJZiB3cml0ZV9hYm9ydF9p bmZvIGlzIHRydWUsIHNlbmQgdGhlIGFib3J0X2xzbiBhbmQgYWJvcnRfdGltZSBmaWVsZHMsCisg KiBvdGhlcndpc2UgZG9uJ3QuCiAgKi8KIHZvaWQKIGxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFtX2Fi b3J0KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKLQkJCQkJCQkgIFRyYW5zYWN0 aW9uSWQgc3VieGlkKQorCQkJCQkJCSAgVHJhbnNhY3Rpb25JZCBzdWJ4aWQsIFhMb2dSZWNQdHIg YWJvcnRfbHNuLAorCQkJCQkJCSAgVGltZXN0YW1wVHogYWJvcnRfdGltZSwgYm9vbCB3cml0ZV9h Ym9ydF9pbmZvKQogewogCXBxX3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9B Qk9SVCk7CiAKQEAgLTExNzUsMTkgKzExNzksNDAgQEAgbG9naWNhbHJlcF93cml0ZV9zdHJlYW1f YWJvcnQoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogCS8qIHRyYW5zYWN0aW9u IElEICovCiAJcHFfc2VuZGludDMyKG91dCwgeGlkKTsKIAlwcV9zZW5kaW50MzIob3V0LCBzdWJ4 aWQpOworCisJaWYgKHdyaXRlX2Fib3J0X2luZm8pCisJeworCQlwcV9zZW5kaW50NjQob3V0LCBh Ym9ydF9sc24pOworCQlwcV9zZW5kaW50NjQob3V0LCBhYm9ydF90aW1lKTsKKwl9CiB9CiAKIC8q CiAgKiBSZWFkIFNUUkVBTSBBQk9SVCBmcm9tIHRoZSBvdXRwdXQgc3RyZWFtLgorICoKKyAqIElm IHJlYWRfYWJvcnRfaW5mbyBpcyB0cnVlLCByZWFkIHRoZSBhYm9ydF9sc24gYW5kIGFib3J0X3Rp bWUgZmllbGRzLAorICogb3RoZXJ3aXNlIGRvbid0LgogICovCiB2b2lkCi1sb2dpY2FscmVwX3Jl YWRfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gaW4sIFRyYW5zYWN0aW9uSWQgKnhpZCwKLQkJCQkJ CQkgVHJhbnNhY3Rpb25JZCAqc3VieGlkKQorbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9ydChT dHJpbmdJbmZvIGluLAorCQkJCQkJCSBMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhICphYm9ydF9k YXRhLAorCQkJCQkJCSBib29sIHJlYWRfYWJvcnRfaW5mbykKIHsKLQlBc3NlcnQoeGlkICYmIHN1 YnhpZCk7CisJQXNzZXJ0KGFib3J0X2RhdGEpOworCisJYWJvcnRfZGF0YS0+eGlkID0gcHFfZ2V0 bXNnaW50KGluLCA0KTsKKwlhYm9ydF9kYXRhLT5zdWJ4aWQgPSBwcV9nZXRtc2dpbnQoaW4sIDQp OwogCi0JKnhpZCA9IHBxX2dldG1zZ2ludChpbiwgNCk7Ci0JKnN1YnhpZCA9IHBxX2dldG1zZ2lu dChpbiwgNCk7CisJaWYgKHJlYWRfYWJvcnRfaW5mbykKKwl7CisJCWFib3J0X2RhdGEtPmFib3J0 X2xzbiA9IHBxX2dldG1zZ2ludDY0KGluKTsKKwkJYWJvcnRfZGF0YS0+YWJvcnRfdGltZSA9IHBx X2dldG1zZ2ludDY0KGluKTsKKwl9CisJZWxzZQorCXsKKwkJYWJvcnRfZGF0YS0+YWJvcnRfbHNu ID0gSW52YWxpZFhMb2dSZWNQdHI7CisJCWFib3J0X2RhdGEtPmFib3J0X3RpbWUgPSAwOworCX0K IH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVv cmRlcmJ1ZmZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVm ZmVyLmMKaW5kZXggMzFmNzM4MS4uZGVkNDZhOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKQEAgLTI4NDYsNyArMjg0Niw4IEBAIFJlb3Jk ZXJCdWZmZXJGaW5pc2hQcmVwYXJlZChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4 aWQsCiAgKiBkaXNrLgogICovCiB2b2lkCi1SZW9yZGVyQnVmZmVyQWJvcnQoUmVvcmRlckJ1ZmZl ciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKK1Jlb3JkZXJCdWZmZXJB Ym9ydChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNu LAorCQkJCSAgIFRpbWVzdGFtcFR6IGFib3J0X3RpbWUpCiB7CiAJUmVvcmRlckJ1ZmZlclRYTiAq dHhuOwogCkBAIC0yODU3LDYgKzI4NTgsOCBAQCBSZW9yZGVyQnVmZmVyQWJvcnQoUmVvcmRlckJ1 ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIAlpZiAodHhuID09 IE5VTEwpCiAJCXJldHVybjsKIAorCXR4bi0+eGFjdF90aW1lLmFib3J0X3RpbWUgPSBhYm9ydF90 aW1lOworCiAJLyogRm9yIHN0cmVhbWVkIHRyYW5zYWN0aW9ucyBub3RpZnkgdGhlIHJlbW90ZSBu b2RlIGFib3V0IHRoZSBhYm9ydC4gKi8KIAlpZiAocmJ0eG5faXNfc3RyZWFtZWQodHhuKSkKIAl7 CkBAIC0yOTMxLDcgKzI5MzQsOCBAQCBSZW9yZGVyQnVmZmVyQWJvcnRPbGQoUmVvcmRlckJ1ZmZl ciAqcmIsIFRyYW5zYWN0aW9uSWQgb2xkZXN0UnVubmluZ1hpZCkKICAqIHRvIHRoaXMgeGlkIG1p Z2h0IHJlLWNyZWF0ZSB0aGUgdHJhbnNhY3Rpb24gaW5jb21wbGV0ZWx5LgogICovCiB2b2lkCi1S ZW9yZGVyQnVmZmVyRm9yZ2V0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwg WExvZ1JlY1B0ciBsc24pCitSZW9yZGVyQnVmZmVyRm9yZ2V0KFJlb3JkZXJCdWZmZXIgKnJiLCBU cmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCVRpbWVzdGFtcFR6IGFib3J0 X3RpbWUpCiB7CiAJUmVvcmRlckJ1ZmZlclRYTiAqdHhuOwogCkBAIC0yOTQyLDYgKzI5NDYsOCBA QCBSZW9yZGVyQnVmZmVyRm9yZ2V0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhp ZCwgWExvZ1JlY1B0ciBsc24pCiAJaWYgKHR4biA9PSBOVUxMKQogCQlyZXR1cm47CiAKKwl0eG4t PnhhY3RfdGltZS5hYm9ydF90aW1lID0gYWJvcnRfdGltZTsKKwogCS8qIEZvciBzdHJlYW1lZCB0 cmFuc2FjdGlvbnMgbm90aWZ5IHRoZSByZW1vdGUgbm9kZSBhYm91dCB0aGUgYWJvcnQuICovCiAJ aWYgKHJidHhuX2lzX3N0cmVhbWVkKHR4bikpCiAJCXJiLT5zdHJlYW1fYWJvcnQocmIsIHR4biwg bHNuKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVz eW5jLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCmluZGV4 IDk0ZTgxM2EuLmRhZWVhNmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvdGFibGVzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90 YWJsZXN5bmMuYwpAQCAtMTQsNyArMTQsNyBAQAogICoJICBUaGUgaW5pdGlhbCBkYXRhIHN5bmNo cm9uaXphdGlvbiBpcyBkb25lIHNlcGFyYXRlbHkgZm9yIGVhY2ggdGFibGUsCiAgKgkgIGluIGEg c2VwYXJhdGUgYXBwbHkgd29ya2VyIHRoYXQgb25seSBmZXRjaGVzIHRoZSBpbml0aWFsIHNuYXBz aG90IGRhdGEKICAqCSAgZnJvbSB0aGUgcHVibGlzaGVyIGFuZCB0aGVuIHN5bmNocm9uaXplcyB0 aGUgcG9zaXRpb24gaW4gdGhlIHN0cmVhbSB3aXRoCi0gKgkgIHRoZSBtYWluIGFwcGx5IHdvcmtl ci4KKyAqCSAgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIuCiAgKgogICoJICBUaGVyZSBhcmUgc2V2 ZXJhbCByZWFzb25zIGZvciBkb2luZyB0aGUgc3luY2hyb25pemF0aW9uIHRoaXMgd2F5OgogICoJ ICAgLSBJdCBhbGxvd3MgdXMgdG8gcGFyYWxsZWxpemUgdGhlIGluaXRpYWwgZGF0YSBzeW5jaHJv bml6YXRpb24KQEAgLTE1Myw3ICsxNTMsNyBAQCBmaW5pc2hfc3luY193b3JrZXIodm9pZCkKIAkJ CQkJZ2V0X3JlbF9uYW1lKE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQpKSkpOwogCUNvbW1pdFRy YW5zYWN0aW9uQ29tbWFuZCgpOwogCi0JLyogRmluZCB0aGUgbWFpbiBhcHBseSB3b3JrZXIgYW5k IHNpZ25hbCBpdC4gKi8KKwkvKiBGaW5kIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBzaWdu YWwgaXQuICovCiAJbG9naWNhbHJlcF93b3JrZXJfd2FrZXVwKE15TG9naWNhbFJlcFdvcmtlci0+ c3ViaWQsIEludmFsaWRPaWQpOwogCiAJLyogU3RvcCBncmFjZWZ1bGx5ICovCkBAIC02MDksNyAr NjA5LDggQEAgcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19mb3JfYXBwbHkoWExvZ1JlY1B0ciBjdXJy ZW50X2xzbikKIAkJCQkJCQkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+b2lkLAogCQkJCQkJCQkJCQkJ IE15U3Vic2NyaXB0aW9uLT5uYW1lLAogCQkJCQkJCQkJCQkJIE15TG9naWNhbFJlcFdvcmtlci0+ dXNlcmlkLAotCQkJCQkJCQkJCQkJIHJzdGF0ZS0+cmVsaWQpOworCQkJCQkJCQkJCQkJIHJzdGF0 ZS0+cmVsaWQsCisJCQkJCQkJCQkJCQkgRFNNX0hBTkRMRV9JTlZBTElEKTsKIAkJCQkJCWhlbnRy eS0+bGFzdF9zdGFydF90aW1lID0gbm93OwogCQkJCQl9CiAJCQkJfQpAQCAtNjMwLDYgKzYzMSwx NCBAQCBwcm9jZXNzX3N5bmNpbmdfdGFibGVzX2Zvcl9hcHBseShYTG9nUmVjUHRyIGN1cnJlbnRf bHNuKQogdm9pZAogcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhYTG9nUmVjUHRyIGN1cnJlbnRfbHNu KQogeworCS8qCisJICogU2tpcCBmb3IgcGFyYWxsZWwgYXBwbHkgd29ya2VycyBiZWNhdXNlIHRo ZXkgb25seSBvcGVyYXRlIG9uIHRhYmxlcyB0aGF0CisJICogYXJlIGluIGEgUkVBRFkgc3RhdGUu IFNlZSBwYV9jYW5fc3RhcnQoKSBhbmQKKwkgKiBzaG91bGRfYXBwbHlfY2hhbmdlc19mb3JfcmVs KCkuCisJICovCisJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCQlyZXR1cm47CisK IAlpZiAoYW1fdGFibGVzeW5jX3dvcmtlcigpKQogCQlwcm9jZXNzX3N5bmNpbmdfdGFibGVzX2Zv cl9zeW5jKGN1cnJlbnRfbHNuKTsKIAllbHNlCkBAIC0xMjQ3LDcgKzEyNTYsNyBAQCBMb2dpY2Fs UmVwU3luY1RhYmxlU3RhcnQoWExvZ1JlY1B0ciAqb3JpZ2luX3N0YXJ0cG9zKQogCiAJLyoKIAkg KiBIZXJlIHdlIHVzZSB0aGUgc2xvdCBuYW1lIGluc3RlYWQgb2YgdGhlIHN1YnNjcmlwdGlvbiBu YW1lIGFzIHRoZQotCSAqIGFwcGxpY2F0aW9uX25hbWUsIHNvIHRoYXQgaXQgaXMgZGlmZmVyZW50 IGZyb20gdGhlIG1haW4gYXBwbHkgd29ya2VyLAorCSAqIGFwcGxpY2F0aW9uX25hbWUsIHNvIHRo YXQgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIsCiAJICogc28g dGhhdCBzeW5jaHJvbm91cyByZXBsaWNhdGlvbiBjYW4gZGlzdGluZ3Vpc2ggdGhlbS4KIAkgKi8K IAlMb2dSZXBXb3JrZXJXYWxSY3ZDb25uID0KQEAgLTEyOTUsNyArMTMwNCw3IEBAIExvZ2ljYWxS ZXBTeW5jVGFibGVTdGFydChYTG9nUmVjUHRyICpvcmlnaW5fc3RhcnRwb3MpCiAJCSAqIHRpbWUg dGhpcyB0YWJsZXN5bmMgd2FzIGxhdW5jaGVkLgogCQkgKi8KIAkJb3JpZ2luaWQgPSByZXBsb3Jp Z2luX2J5X25hbWUob3JpZ2lubmFtZSwgZmFsc2UpOwotCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0 dXAob3JpZ2luaWQpOworCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIDApOwog CQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJCSpvcmlnaW5fc3RhcnRw b3MgPSByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dyZXNzKGZhbHNlKTsKIApAQCAtMTQwNiw3 ICsxNDE1LDcgQEAgTG9naWNhbFJlcFN5bmNUYWJsZVN0YXJ0KFhMb2dSZWNQdHIgKm9yaWdpbl9z dGFydHBvcykKIAkJCQkJCSAgIHRydWUgLyogZ28gYmFja3dhcmQgKi8gLCB0cnVlIC8qIFdBTCBs b2cgKi8gKTsKIAkJVW5sb2NrUmVsYXRpb25PaWQoUmVwbGljYXRpb25PcmlnaW5SZWxhdGlvbklk LCBSb3dFeGNsdXNpdmVMb2NrKTsKIAotCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2lu aWQpOworCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIDApOwogCQlyZXBsb3Jp Z2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJfQogCWVsc2UKQEAgLTE0NjEsOCArMTQ3 MCw4IEBAIGNvcHlfdGFibGVfZG9uZToKIAlTcGluTG9ja1JlbGVhc2UoJk15TG9naWNhbFJlcFdv cmtlci0+cmVsbXV0ZXgpOwogCiAJLyoKLQkgKiBGaW5hbGx5LCB3YWl0IHVudGlsIHRoZSBtYWlu IGFwcGx5IHdvcmtlciB0ZWxscyB1cyB0byBjYXRjaCB1cCBhbmQgdGhlbgotCSAqIHJldHVybiB0 byBsZXQgTG9naWNhbFJlcEFwcGx5TG9vcCBkbyBpdC4KKwkgKiBGaW5hbGx5LCB3YWl0IHVudGls IHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHRlbGxzIHVzIHRvIGNhdGNoIHVwIGFuZAorCSAqIHRo ZW4gcmV0dXJuIHRvIGxldCBMb2dpY2FsUmVwQXBwbHlMb29wIGRvIGl0LgogCSAqLwogCXdhaXRf Zm9yX3dvcmtlcl9zdGF0ZV9jaGFuZ2UoU1VCUkVMX1NUQVRFX0NBVENIVVApOwogCXJldHVybiBz bG90bmFtZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29y a2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IGU0 OGEzZjUuLmEyMTMxNWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIu YwpAQCAtMjIsOCArMjIsNTQgQEAKICAqIFNUUkVBTUVEIFRSQU5TQUNUSU9OUwogICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgKiBTdHJlYW1lZCB0cmFuc2FjdGlvbnMgKGxhcmdlIHRyYW5zYWN0 aW9ucyBleGNlZWRpbmcgYSBtZW1vcnkgbGltaXQgb24gdGhlCi0gKiB1cHN0cmVhbSkgYXJlIG5v dCBhcHBsaWVkIGltbWVkaWF0ZWx5LCBidXQgaW5zdGVhZCwgdGhlIGRhdGEgaXMgd3JpdHRlbgot ICogdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCB0aGVuIGFwcGxpZWQgYXQgb25jZSB3aGVuIHRoZSBm aW5hbCBjb21taXQgYXJyaXZlcy4KKyAqIHVwc3RyZWFtKSBhcmUgYXBwbGllZCB1c2luZyBvbmUg b2YgdHdvIGFwcHJvYWNoZXM6CisgKgorICogMSkgUGFyYWxsZWwgYXBwbHkgd29ya2VycworICoK KyAqIElmIHN0cmVhbWluZyA9IHBhcmFsbGVsLCB3ZSBhc3NpZ24gYSBuZXcgcGFyYWxsZWwgYXBw bHkgd29ya2VyIChpZgorICogYXZhaWxhYmxlKSBhcyBzb29uIGFzIHRoZSB4YWN0J3MgZmlyc3Qg c3RyZWFtIGlzIHJlY2VpdmVkLiBUaGUgbGVhZGVyIGFwcGx5CisgKiB3b3JrZXIgd2lsbCBzZW5k IGNoYW5nZXMgdG8gdGhpcyBuZXcgd29ya2VyIHZpYSBzaGFyZWQgbWVtb3J5LiBXZSBrZWVwIHRo aXMKKyAqIHdvcmtlciBhc3NpZ25lZCB0aWxsIHRoZSB0cmFuc2FjdGlvbiBjb21taXQgaXMgcmVj ZWl2ZWQgYW5kIGFsc28gd2FpdCBmb3IKKyAqIHRoZSB3b3JrZXIgdG8gZmluaXNoIGF0IGNvbW1p dC4gVGhpcyBwcmVzZXJ2ZXMgY29tbWl0IG9yZGVyaW5nIGFuZCBhdm9pZHMKKyAqIGZpbGUgSS9P IGluIG1vc3QgY2FzZXMsIGFsdGhvdWdoIHdlIHN0aWxsIG5lZWQgdG8gc3BpbGwgdG8gYSBmaWxl IGlmIHRoZXJlCisgKiBpcyBubyB3b3JrZXIgYXZhaWxhYmxlLiBJdCBpcyBpbXBvcnRhbnQgdG8g bWFpbnRhaW4gY29tbWl0IG9yZGVyIHRvIGF2b2lkCisgKiBmYWlsdXJlcyBkdWUgdG8gKGEpIHRy YW5zYWN0aW9uIGRlcGVuZGVuY2llcywgc2F5IGlmIHdlIGluc2VydCBhIHJvdyBpbiB0aGUKKyAq IGZpcnN0IHRyYW5zYWN0aW9uIGFuZCB1cGRhdGUgaXQgaW4gdGhlIHNlY29uZCB0cmFuc2FjdGlv biB0aGVuIGFsbG93aW5nIHRvCisgKiBhcHBseSBib3RoIGluIHBhcmFsbGVsIGNhbiBsZWFkIHRv IGZhaWx1cmUgaW4gdGhlIHVwZGF0ZS4gKGIpIGRlYWRsb2NrcywKKyAqIGFsbG93aW5nIHRyYW5z YWN0aW9ucyB0aGF0IHVwZGF0ZSB0aGUgc2FtZSBzZXQgb2Ygcm93cy90YWJsZXMgaW4gb3Bwb3Np dGUKKyAqIG9yZGVyIHRvIGJlIGFwcGxpZWQgaW4gcGFyYWxsZWwgY2FuIGxlYWQgdG8gZGVhZGxv Y2tzLgorICoKKyAqIFdlIG1haW50YWluIGEgd29ya2VyIHBvb2wgdG8gYXZvaWQgcmVzdGFydGlu ZyB3b3JrZXJzIGZvciBlYWNoIHN0cmVhbWluZworICogdHJhbnNhY3Rpb24uIFdlIG1haW50YWlu IGVhY2ggd29ya2VyJ3MgaW5mb3JtYXRpb24gaW4gdGhlCisgKiBQYXJhbGxlbEFwcGx5V29ya2Vy c0xpc3QuIEFmdGVyIHN1Y2Nlc3NmdWxseSBsYXVuY2hpbmcgYSBuZXcgd29ya2VyLCBpdHMKKyAq IGluZm9ybWF0aW9uIGlzIGFkZGVkIHRvIHRoZSBQYXJhbGxlbEFwcGx5V29ya2Vyc0xpc3QuIE9u Y2UgdGhlIHdvcmtlcgorICogZmluaXNoZXMgYXBwbHlpbmcgdGhlIHRyYW5zYWN0aW9uLCB3ZSBt YXJrIGl0IGF2YWlsYWJsZSBmb3IgcmUtdXNlLiBOb3csCisgKiBiZWZvcmUgc3RhcnRpbmcgYSBu ZXcgd29ya2VyIHRvIGFwcGx5IHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24sIHdlIGNoZWNrCisg KiB0aGUgbGlzdCBmb3IgYW55IGF2YWlsYWJsZSB3b3JrZXIuIE5vdGUgdGhhdCB3ZSBtYWludGFp biBhIG1heGltdW0gb2YgaGFsZgorICogdGhlIG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Bl cl9zdWJzY3JpcHRpb24gd29ya2VycyBpbiB0aGUgcG9vbCBhbmQKKyAqIGFmdGVyIHRoYXQsIHdl IHNpbXBseSBleGl0IHRoZSB3b3JrZXIgYWZ0ZXIgYXBwbHlpbmcgdGhlIHRyYW5zYWN0aW9uLgor ICoKKyAqIFhYWCBUaGlzIHdvcmtlciBwb29sIHRocmVzaG9sZCBpcyBhIGJpdCBhcmJpdHJhcnkg YW5kIHdlIGNhbiBwcm92aWRlIGEgR1VDCisgKiB2YXJpYWJsZSBmb3IgdGhpcyBpbiB0aGUgZnV0 dXJlIGlmIHJlcXVpcmVkLgorICoKKyAqIFRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHdpbGwgY3Jl YXRlIHNlcGFyYXRlIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50CisgKiB3aGVuIGVhY2gg cGFyYWxsZWwgYXBwbHkgd29ya2VyIHN0YXJ0cy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBkZXNpZ24g aXMgdGhhdAorICogd2UgY2Fubm90IGNvdW50IGhvdyBtYW55IHdvcmtlcnMgd2lsbCBiZSBzdGFy dGVkLiBJdCBtYXkgYmUgcG9zc2libGUgdG8KKyAqIGFsbG9jYXRlIGVub3VnaCBzaGFyZWQgbWVt b3J5IGluIG9uZSBzZWdtZW50IGJhc2VkIG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZgorICogcGFy YWxsZWwgYXBwbHkgd29ya2VycyAobWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNj cmlwdGlvbiksIGJ1dCB0aGlzCisgKiB3b3VsZCB3YXN0ZSBtZW1vcnkgaWYgbm8gcHJvY2VzcyBp cyBhY3R1YWxseSBzdGFydGVkLgorICoKKyAqIFRoZSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2Vn bWVudCB3aWxsIGNvbnRhaW4gKGEpIGEgc2htX21xIHRoYXQgaXMgdXNlZCB0bworICogc2VuZCBj aGFuZ2VzIGluIHRoZSB0cmFuc2FjdGlvbiBmcm9tIGxlYWRlciBhcHBseSB3b3JrZXIgdG8gcGFy YWxsZWwgYXBwbHkKKyAqIHdvcmtlciAoYikgYW5vdGhlciBzaG1fbXEgdGhhdCBpcyB1c2VkIHRv IHNlbmQgZXJyb3JzIChhbmQgb3RoZXIgbWVzc2FnZXMKKyAqIHJlcG9ydGVkIHZpYSBlbG9nL2Vy ZXBvcnQpIGZyb20gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0byBsZWFkZXIgYXBwbHkKKyAq IHdvcmtlciAoYykgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGJlIHNoYXJlZCBhbW9uZyBwYXJh bGxlbCBhcHBseSB3b3JrZXJzCisgKiBhbmQgbGVhZGVyIGFwcGx5IHdvcmtlciAoaS5lLiBtZW1i ZXJzIG9mIFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQpLgorICoKKyAqIElmIG5vIHBhcmFsbGVs IGFwcGx5IHdvcmtlciBpcyBhdmFpbGFibGUgdG8gaGFuZGxlIHRoZSBzdHJlYW1lZCB0cmFuc2Fj dGlvbgorICogd2UgZm9sbG93IGFwcHJvYWNoIDIuCisgKgorICogMikgV3JpdGUgdG8gdGVtcG9y YXJ5IGZpbGVzIGFuZCBhcHBseSB3aGVuIHRoZSBmaW5hbCBjb21taXQgYXJyaXZlcwogICoKICAq IFVubGlrZSB0aGUgcmVndWxhciAobm9uLXN0cmVhbWVkKSBjYXNlLCBoYW5kbGluZyBzdHJlYW1l ZCB0cmFuc2FjdGlvbnMgaGFzCiAgKiB0byBoYW5kbGUgYWJvcnRzIG9mIGJvdGggdGhlIHRvcGxl dmVsIHRyYW5zYWN0aW9uIGFuZCBzdWJ0cmFuc2FjdGlvbnMuIFRoaXMKQEAgLTE1MCw2ICsxOTYs NyBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIKICNpbmNsdWRlICJleGVj dXRvci9ub2RlTW9kaWZ5VGFibGUuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAi bGlicHEvbGlicHEuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgImxp YnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKQEAgLTIxOSwyMCArMjY2 LDM5IEBAIHR5cGVkZWYgc3RydWN0IEFwcGx5RXhlY3V0aW9uRGF0YQogCVBhcnRpdGlvblR1cGxl Um91dGluZyAqcHJvdXRlOwkvKiBwYXJ0aXRpb24gcm91dGluZyBpbmZvICovCiB9IEFwcGx5RXhl Y3V0aW9uRGF0YTsKIAotLyogU3RydWN0IGZvciBzYXZpbmcgYW5kIHJlc3RvcmluZyBhcHBseSBl cnJjb250ZXh0IGluZm9ybWF0aW9uICovCi10eXBlZGVmIHN0cnVjdCBBcHBseUVycm9yQ2FsbGJh Y2tBcmcKKy8qCisgKiBXaGF0IGFjdGlvbiB0byB0YWtlIGZvciB0aGUgdHJhbnNhY3Rpb24uCisg KgorICogVFJBTlNfTEVBREVSX0FQUExZOgorICogVGhlIGFjdGlvbiBtZWFucyB0aGF0IHdlIGFy ZSBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgY2hhbmdlcyBvZiB0aGUKKyAqIHRyYW5z YWN0aW9uIGFyZSBhcHBsaWVkIGRpcmVjdGx5IGJ5IHRoZSB3b3JrZXIuCisgKgorICogVFJBTlNf TEVBREVSX1NFUklBTElaRToKKyAqIFRoZSBhY3Rpb24gbWVhbnMgdGhhdCB3ZSBhcmUgaW4gdGhl IGxlYWRlciBhcHBseSB3b3JrZXIgb3IgdGFibGUgc3luYyB3b3JrZXIuCisgKiBDaGFuZ2VzIGFy ZSB3cml0dGVuIHRvIHRlbXBvcmFyeSBmaWxlcyBhbmQgdGhlbiBhcHBsaWVkIHdoZW4gdGhlIGZp bmFsCisgKiBjb21taXQgYXJyaXZlcy4KKyAqCisgKiBUUkFOU19MRUFERVJfU0VORF9UT19QQVJB TExFTDoKKyAqIFRoZSBhY3Rpb24gbWVhbnMgdGhhdCB3ZSBhcmUgaW4gdGhlIGxlYWRlciBhcHBs eSB3b3JrZXIgYW5kIG5lZWQgdG8gc2VuZCB0aGUKKyAqIGNoYW5nZXMgdG8gdGhlIHBhcmFsbGVs IGFwcGx5IHdvcmtlci4KKyAqCisgKiBUUkFOU19QQVJBTExFTF9BUFBMWToKKyAqIFRoZSBhY3Rp b24gbWVhbnMgdGhhdCB3ZSBhcmUgaW4gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBhbmQgY2hh bmdlcyBvZiB0aGUKKyAqIHRyYW5zYWN0aW9uIGFyZSBhcHBsaWVkIGRpcmVjdGx5IGJ5IHRoZSB3 b3JrZXIuCisgKi8KK3R5cGVkZWYgZW51bQogewotCUxvZ2ljYWxSZXBNc2dUeXBlIGNvbW1hbmQ7 CS8qIDAgaWYgaW52YWxpZCAqLwotCUxvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqcmVsOworCS8qIFRo ZSBhY3Rpb24gZm9yIG5vbi1zdHJlYW1pbmcgdHJhbnNhY3Rpb25zLiAqLworCVRSQU5TX0xFQURF Ul9BUFBMWSwKIAotCS8qIFJlbW90ZSBub2RlIGluZm9ybWF0aW9uICovCi0JaW50CQkJcmVtb3Rl X2F0dG51bTsJLyogLTEgaWYgaW52YWxpZCAqLwotCVRyYW5zYWN0aW9uSWQgcmVtb3RlX3hpZDsK LQlYTG9nUmVjUHRyCWZpbmlzaF9sc247Ci0JY2hhcgkgICAqb3JpZ2luX25hbWU7Ci19IEFwcGx5 RXJyb3JDYWxsYmFja0FyZzsKKwkvKiBBY3Rpb25zIGZvciBzdHJlYW1pbmcgdHJhbnNhY3Rpb25z LiAqLworCVRSQU5TX0xFQURFUl9TRVJJQUxJWkUsCisJVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFS QUxMRUwsCisJVFJBTlNfUEFSQUxMRUxfQVBQTFkKK30gVHJhbnNBcHBseUFjdGlvbjsKIAotc3Rh dGljIEFwcGx5RXJyb3JDYWxsYmFja0FyZyBhcHBseV9lcnJvcl9jYWxsYmFja19hcmcgPQorLyog ZXJyY29udGV4dCB0cmFja2VyICovCitBcHBseUVycm9yQ2FsbGJhY2tBcmcgYXBwbHlfZXJyb3Jf Y2FsbGJhY2tfYXJnID0KIHsKIAkuY29tbWFuZCA9IDAsCiAJLnJlbCA9IE5VTEwsCkBAIC0yNDIs NyArMzA4LDkgQEAgc3RhdGljIEFwcGx5RXJyb3JDYWxsYmFja0FyZyBhcHBseV9lcnJvcl9jYWxs YmFja19hcmcgPQogCS5vcmlnaW5fbmFtZSA9IE5VTEwsCiB9OwogCi1zdGF0aWMgTWVtb3J5Q29u dGV4dCBBcHBseU1lc3NhZ2VDb250ZXh0ID0gTlVMTDsKK0Vycm9yQ29udGV4dENhbGxiYWNrICph cHBseV9lcnJvcl9jb250ZXh0X3N0YWNrID0gTlVMTDsKKworTWVtb3J5Q29udGV4dCBBcHBseU1l c3NhZ2VDb250ZXh0ID0gTlVMTDsKIE1lbW9yeUNvbnRleHQgQXBwbHlDb250ZXh0ID0gTlVMTDsK IAogLyogcGVyIHN0cmVhbSBjb250ZXh0IGZvciBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zICovCkBA IC0yNTEsMjcgKzMxOSwzNiBAQCBzdGF0aWMgTWVtb3J5Q29udGV4dCBMb2dpY2FsU3RyZWFtaW5n Q29udGV4dCA9IE5VTEw7CiBXYWxSZWNlaXZlckNvbm4gKkxvZ1JlcFdvcmtlcldhbFJjdkNvbm4g PSBOVUxMOwogCiBTdWJzY3JpcHRpb24gKk15U3Vic2NyaXB0aW9uID0gTlVMTDsKLXN0YXRpYyBi b29sIE15U3Vic2NyaXB0aW9uVmFsaWQgPSBmYWxzZTsKK2Jvb2wJCU15U3Vic2NyaXB0aW9uVmFs aWQgPSBmYWxzZTsKIAogYm9vbAkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CiBzdGF0 aWMgWExvZ1JlY1B0ciByZW1vdGVfZmluYWxfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CiAKIC8q IGZpZWxkcyB2YWxpZCBvbmx5IHdoZW4gcHJvY2Vzc2luZyBzdHJlYW1lZCB0cmFuc2FjdGlvbiAq Lwotc3RhdGljIGJvb2wgaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSBmYWxzZTsKK2Jvb2wJCWlu X3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gZmFsc2U7CiAKIHN0YXRpYyBUcmFuc2FjdGlvbklkIHN0 cmVhbV94aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAogLyoKKyAqIFRoZSBudW1iZXIgb2Yg Y2hhbmdlcyBhcHBsaWVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBkdXJpbmcgb25lIHN0cmVh bWluZworICogYmxvY2suCisgKi8KK3N0YXRpYyB1aW50MzIgcGFyYWxsZWxfc3RyZWFtX25jaGFu Z2VzID0gMDsKKworLyoKICAqIFdlIGVuYWJsZSBza2lwcGluZyBhbGwgZGF0YSBtb2RpZmljYXRp b24gY2hhbmdlcyAoSU5TRVJULCBVUERBVEUsIGV0Yy4pIGZvcgogICogdGhlIHN1YnNjcmlwdGlv biBpZiB0aGUgcmVtb3RlIHRyYW5zYWN0aW9uJ3MgZmluaXNoIExTTiBtYXRjaGVzIHRoZSBzdWJz a2lwbHNuLgogICogT25jZSB3ZSBzdGFydCBza2lwcGluZyBjaGFuZ2VzLCB3ZSBkb24ndCBzdG9w IGl0IHVudGlsIHdlIHNraXAgYWxsIGNoYW5nZXMgb2YKICAqIHRoZSB0cmFuc2FjdGlvbiBldmVu IGlmIHBnX3N1YnNjcmlwdGlvbiBpcyB1cGRhdGVkIGFuZCBNeVN1YnNjcmlwdGlvbi0+c2tpcGxz bgotICogZ2V0cyBjaGFuZ2VkIG9yIHJlc2V0IGR1cmluZyB0aGF0LiBBbHNvLCBpbiBzdHJlYW1p bmcgdHJhbnNhY3Rpb24gY2FzZXMsIHdlCi0gKiBkb24ndCBza2lwIHJlY2VpdmluZyBhbmQgc3Bv b2xpbmcgdGhlIGNoYW5nZXMgc2luY2Ugd2UgZGVjaWRlIHdoZXRoZXIgb3Igbm90CisgKiBnZXRz IGNoYW5nZWQgb3IgcmVzZXQgZHVyaW5nIHRoYXQuIEFsc28sIGluIHN0cmVhbWluZyB0cmFuc2Fj dGlvbiBjYXNlcyAoc3RyZWFtaW5nID0gb24pLAorICogd2UgZG9uJ3Qgc2tpcCByZWNlaXZpbmcg YW5kIHNwb29saW5nIHRoZSBjaGFuZ2VzIHNpbmNlIHdlIGRlY2lkZSB3aGV0aGVyIG9yIG5vdAog ICogdG8gc2tpcCBhcHBseWluZyB0aGUgY2hhbmdlcyB3aGVuIHN0YXJ0aW5nIHRvIGFwcGx5IGNo YW5nZXMuIFRoZSBzdWJza2lwbHNuIGlzCiAgKiBjbGVhcmVkIGFmdGVyIHN1Y2Nlc3NmdWxseSBz a2lwcGluZyB0aGUgdHJhbnNhY3Rpb24gb3IgYXBwbHlpbmcgbm9uLWVtcHR5CiAgKiB0cmFuc2Fj dGlvbi4gVGhlIGxhdHRlciBwcmV2ZW50cyB0aGUgbWlzdGFrZW5seSBzcGVjaWZpZWQgc3Vic2tp cGxzbiBmcm9tCi0gKiBiZWluZyBsZWZ0LgorICogYmVpbmcgbGVmdC4gTm90ZSB0aGF0IHdlIGNh bm5vdCBza2lwIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zIHdoZW4gdXNpbmcKKyAqIHBhcmFs bGVsIGFwcGx5IHdvcmtlcnMgYmVjYXVzZSB3ZSBjYW5ub3QgZ2V0IHRoZSBmaW5pc2ggTFNOIGJl Zm9yZSBhcHBseWluZworICogdGhlIGNoYW5nZXMuIFNvLCB3ZSBkb24ndCBzdGFydCBwYXJhbGxl bCBhcHBseSB3b3JrZXIgd2hlbiBmaW5pc2ggTFNOIGlzIHNldAorICogYnkgdGhlIHVzZXIuCiAg Ki8KIHN0YXRpYyBYTG9nUmVjUHRyIHNraXBfeGFjdF9maW5pc2hfbHNuID0gSW52YWxpZFhMb2dS ZWNQdHI7CiAjZGVmaW5lIGlzX3NraXBwaW5nX2NoYW5nZXMoKSAodW5saWtlbHkoIVhMb2dSZWNQ dHJJc0ludmFsaWQoc2tpcF94YWN0X2ZpbmlzaF9sc24pKSkKQEAgLTMyMSwxMyArMzk4LDggQEAg c3RhdGljIHZvaWQgc2VuZF9mZWVkYmFjayhYTG9nUmVjUHRyIHJlY3Zwb3MsIGJvb2wgZm9yY2Us IGJvb2wgcmVxdWVzdFJlcGx5KTsKIAogc3RhdGljIHZvaWQgc3RvcmVfZmx1c2hfcG9zaXRpb24o WExvZ1JlY1B0ciByZW1vdGVfbHNuKTsKIAotc3RhdGljIHZvaWQgbWF5YmVfcmVyZWFkX3N1YnNj cmlwdGlvbih2b2lkKTsKLQogc3RhdGljIHZvaWQgRGlzYWJsZVN1YnNjcmlwdGlvbkFuZEV4aXQo dm9pZCk7CiAKLS8qIHByb3RvdHlwZSBuZWVkZWQgYmVjYXVzZSBvZiBzdHJlYW1fY29tbWl0ICov Ci1zdGF0aWMgdm9pZCBhcHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpOwotCiBzdGF0aWMgdm9p ZCBhcHBseV9oYW5kbGVfY29tbWl0X2ludGVybmFsKExvZ2ljYWxSZXBDb21taXREYXRhICpjb21t aXRfZGF0YSk7CiBzdGF0aWMgdm9pZCBhcHBseV9oYW5kbGVfaW5zZXJ0X2ludGVybmFsKEFwcGx5 RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAJCQkJCQkJCQkJIFJlc3VsdFJlbEluZm8gKnJlbGluZm8s CkBAIC0zNjAsMTAgKzQzMiwyNiBAQCBzdGF0aWMgdm9pZCBzdG9wX3NraXBwaW5nX2NoYW5nZXMo dm9pZCk7CiBzdGF0aWMgdm9pZCBjbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24oWExvZ1JlY1B0 ciBmaW5pc2hfbHNuKTsKIAogLyogRnVuY3Rpb25zIGZvciBhcHBseSBlcnJvciBjYWxsYmFjayAq Lwotc3RhdGljIHZvaWQgYXBwbHlfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKTsKIHN0YXRpYyBp bmxpbmUgdm9pZCBzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KFRyYW5zYWN0aW9uSWQgeGlk LCBYTG9nUmVjUHRyIGxzbik7CiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRfYXBwbHlfZXJyb3Jf Y29udGV4dF9pbmZvKHZvaWQpOwogCitzdGF0aWMgVHJhbnNBcHBseUFjdGlvbiBnZXRfdHJhbnNh Y3Rpb25fYXBwbHlfYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCQkJCQkJCSBQYXJh bGxlbEFwcGx5V29ya2VySW5mbyAqKndpbmZvKTsKKworLyoKKyAqIFJldHVybiB0aGUgbmFtZSBv ZiB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFy ICoKK2dldF93b3JrZXJfbmFtZSh2b2lkKQoreworCWlmIChhbV90YWJsZXN5bmNfd29ya2VyKCkp CisJCXJldHVybiBfKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHRhYmxlIHN5bmNocm9uaXphdGlvbiB3 b3JrZXIiKTsKKwllbHNlIGlmIChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwkJcmV0dXJu IF8oImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIik7CisJZWxzZQor CQlyZXR1cm4gXygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIiKTsKK30KKwogLyoK ICAqIEZvcm0gdGhlIG9yaWdpbiBuYW1lIGZvciB0aGUgc3Vic2NyaXB0aW9uLgogICoKQEAgLTM5 MywxOSArNDgxLDQyIEBAIFJlcGxpY2F0aW9uT3JpZ2luTmFtZUZvckxvZ2ljYWxSZXAoT2lkIHN1 Ym9pZCwgT2lkIHJlbGlkLAogICoKICAqIFRoaXMgaXMgbWFpbmx5IG5lZWRlZCBmb3IgaW5pdGlh bCByZWxhdGlvbiBkYXRhIHN5bmMgYXMgdGhhdCBydW5zIGluCiAgKiBzZXBhcmF0ZSB3b3JrZXIg cHJvY2VzcyBydW5uaW5nIGluIHBhcmFsbGVsIGFuZCB3ZSBuZWVkIHNvbWUgd2F5IHRvIHNraXAK LSAqIGNoYW5nZXMgY29taW5nIHRvIHRoZSBtYWluIGFwcGx5IHdvcmtlciBkdXJpbmcgdGhlIHN5 bmMgb2YgYSB0YWJsZS4KKyAqIGNoYW5nZXMgY29taW5nIHRvIHRoZSBsZWFkZXIgYXBwbHkgd29y a2VyIGR1cmluZyB0aGUgc3luYyBvZiBhIHRhYmxlLgogICoKICAqIE5vdGUgd2UgbmVlZCB0byBk byBzbWFsbGVyIG9yIGVxdWFscyBjb21wYXJpc29uIGZvciBTWU5DRE9ORSBzdGF0ZSBiZWNhdXNl CiAgKiBpdCBtaWdodCBob2xkIHBvc2l0aW9uIG9mIGVuZCBvZiBpbml0aWFsIHNsb3QgY29uc2lz dGVudCBwb2ludCBXQUwKICAqIHJlY29yZCArIDEgKGllIHN0YXJ0IG9mIG5leHQgcmVjb3JkKSBh bmQgbmV4dCByZWNvcmQgY2FuIGJlIENPTU1JVCBvZgogICogdHJhbnNhY3Rpb24gd2UgYXJlIG5v dyBwcm9jZXNzaW5nICh3aGljaCBpcyB3aGF0IHdlIHNldCByZW1vdGVfZmluYWxfbHNuCiAgKiB0 byBpbiBhcHBseV9oYW5kbGVfYmVnaW4pLgorICoKKyAqIE5vdGUgdGhhdCBmb3Igc3RyZWFtaW5n IHRyYW5zYWN0aW9ucyB0aGF0IGFyZSBiZWluZyBhcHBsaWVkIGluIHRoZSBwYXJhbGxlbAorICog YXBwbHkgd29ya2VyLCB3ZSBkaXNhbGxvdyBhcHBseWluZyBjaGFuZ2VzIG9uIGEgdGFibGUgdGhh dCBpcyBub3QgaW4KKyAqIHRoZSBSRUFEWSBzdGF0ZSwgYmVjYXVzZSB3ZSBjYW5ub3QgZGVjaWRl IHdoZXRoZXIgdG8gYXBwbHkgdGhlIGNoYW5nZSBhcyB3ZQorICogd29uJ3Qga25vdyByZW1vdGVf ZmluYWxfbHNuIGJ5IHRoYXQgdGltZS4KKyAqCisgKiBXZSBhbHJlYWR5IGNoZWNrZWQgdGhpcyBp biBwYV9jYW5fc3RhcnQoKSBiZWZvcmUgYXNzaWduaW5nIHRoZQorICogc3RyZWFtaW5nIHRyYW5z YWN0aW9uIHRvIHRoZSBwYXJhbGxlbCB3b3JrZXIsIGJ1dCBpdCBhbHNvIG5lZWRzIHRvIGJlCisg KiBjaGVja2VkIGhlcmUgYmVjYXVzZSBpZiB0aGUgdXNlciBleGVjdXRlcyBBTFRFUiBTVUJTQ1JJ UFRJT04gLi4uIFJFRlJFU0gKKyAqIFBVQkxJQ0FUSU9OIGluIHBhcmFsbGVsLCB0aGUgbmV3IHRh YmxlIGNhbiBiZSBhZGRlZCB0byBwZ19zdWJzY3JpcHRpb25fcmVsCisgKiB3aGlsZSBhcHBseWlu ZyB0aGlzIHRyYW5zYWN0aW9uLgogICovCiBzdGF0aWMgYm9vbAogc2hvdWxkX2FwcGx5X2NoYW5n ZXNfZm9yX3JlbChMb2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlbCkKIHsKIAlpZiAoYW1fdGFibGVz eW5jX3dvcmtlcigpKQogCQlyZXR1cm4gTXlMb2dpY2FsUmVwV29ya2VyLT5yZWxpZCA9PSByZWwt PmxvY2FscmVsb2lkOworCWVsc2UgaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCXsK KwkJaWYgKHJlbC0+c3RhdGUgIT0gU1VCUkVMX1NUQVRFX1JFQURZKQorCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFU RSksCisJCQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJl cGxpY2F0aW9uIHdvcmtlciAqLworCQkJCQkgZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwi JXNcIiB3aWxsIHN0b3AiLAorCQkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1YnNjcmlwdGlv bi0+bmFtZSksCisJCQkJCSBlcnJkZXRhaWwoIkNhbm5vdCBoYW5kbGUgc3RyZWFtZWQgcmVwbGlj YXRpb24gdHJhbnNhY3Rpb25zIHVzaW5nIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgdW50aWwgYWxs IHRhYmxlcyBoYXZlIGJlZW4gc3luY2hyb25pemVkLiIpKSk7CisKKwkJcmV0dXJuIHRydWU7CisJ fQogCWVsc2UKIAkJcmV0dXJuIChyZWwtPnN0YXRlID09IFNVQlJFTF9TVEFURV9SRUFEWSB8fAog CQkJCShyZWwtPnN0YXRlID09IFNVQlJFTF9TVEFURV9TWU5DRE9ORSAmJgpAQCAtNDUxLDQzICs1 NjIsODcgQEAgZW5kX3JlcGxpY2F0aW9uX3N0ZXAodm9pZCkKIH0KIAogLyoKLSAqIEhhbmRsZSBz dHJlYW1lZCB0cmFuc2FjdGlvbnMuCisgKiBIYW5kbGUgc3RyZWFtZWQgdHJhbnNhY3Rpb25zIGZv ciBib3RoIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCB0aGUgcGFyYWxsZWwKKyAqIGFwcGx5 IHdvcmtlcnMuCisgKgorICogSW4gc3RyZWFtaW5nIGNhc2UgKHJlY2VpdmluZyBhIGJsb2NrIG9m IHN0cmVhbWVkIHRyYW5zYWN0aW9uKSwgZm9yIHNlcmlhbGl6ZQorICogbW9kZSwgc2ltcGx5IHJl ZGlyZWN0IGl0IHRvIGEgZmlsZSBmb3IgdGhlIHByb3BlciB0b3BsZXZlbCB0cmFuc2FjdGlvbiwg YW5kCisgKiBmb3IgcGFyYWxsZWwgbW9kZSwgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgd2lsbCBz ZW5kIHRoZSBjaGFuZ2VzIHRvIHBhcmFsbGVsCisgKiBhcHBseSB3b3JrZXJzIGFuZCB0aGUgcGFy YWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgZGVmaW5lIHNhdmVwb2ludHMgaWYKKyAqIG5lZWRlZC4g KExPR0lDQUxfUkVQX01TR19SRUxBVElPTiBvciBMT0dJQ0FMX1JFUF9NU0dfVFlQRSBjaGFuZ2Vz IHdpbGwgYmUKKyAqIGFwcGxpZWQgYnkgYm90aCBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBwYXJh bGxlbCBhcHBseSB3b3JrZXJzKS4KICAqCi0gKiBJZiBpbiBzdHJlYW1pbmcgbW9kZSAocmVjZWl2 aW5nIGEgYmxvY2sgb2Ygc3RyZWFtZWQgdHJhbnNhY3Rpb24pLCB3ZQotICogc2ltcGx5IHJlZGly ZWN0IGl0IHRvIGEgZmlsZSBmb3IgdGhlIHByb3BlciB0b3BsZXZlbCB0cmFuc2FjdGlvbi4KKyAq IEZvciBub24tc3RyZWFtZWQgdHJhbnNhY3Rpb25zLCByZXR1cm5zIGZhbHNlLgorICogRm9yIHN0 cmVhbWVkIHRyYW5zYWN0aW9ucywgcmV0dXJucyB0cnVlIGlmIGluIGxlYWRlciBhcHBseSB3b3Jr ZXIsIGZhbHNlCisgKiBvdGhlcndpc2UuCiAgKgotICogUmV0dXJucyB0cnVlIGZvciBzdHJlYW1l ZCB0cmFuc2FjdGlvbnMsIGZhbHNlIG90aGVyd2lzZSAocmVndWxhciBtb2RlKS4KKyAqIEV4Y2Vw dGlvbjogSWYgdGhlIG1lc3NhZ2UgYmVpbmcgcHJvY2Vzc2VkIGlzIExPR0lDQUxfUkVQX01TR19S RUxBVElPTgorICogb3IgTE9HSUNBTF9SRVBfTVNHX1RZUEUsIHJldHVybiBmYWxzZSBldmVuIGlm IHRoZSBtZXNzYWdlIG5lZWRzIHRvIGJlIHNlbnQKKyAqIHRvIGEgcGFyYWxsZWwgYXBwbHkgd29y a2VyLgogICovCiBzdGF0aWMgYm9vbAogaGFuZGxlX3N0cmVhbWVkX3RyYW5zYWN0aW9uKExvZ2lj YWxSZXBNc2dUeXBlIGFjdGlvbiwgU3RyaW5nSW5mbyBzKQogewotCVRyYW5zYWN0aW9uSWQgeGlk OworCVRyYW5zYWN0aW9uSWQgY3VycmVudF94aWQ7CisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOworCisJYXBwbHlfYWN0aW9u ID0gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbihzdHJlYW1feGlkLCAmd2luZm8pOwogCiAJ Lyogbm90IGluIHN0cmVhbWluZyBtb2RlICovCi0JaWYgKCFpbl9zdHJlYW1lZF90cmFuc2FjdGlv bikKKwlpZiAoYXBwbHlfYWN0aW9uID09IFRSQU5TX0xFQURFUl9BUFBMWSkKIAkJcmV0dXJuIGZh bHNlOwogCi0JQXNzZXJ0KHN0cmVhbV9mZCAhPSBOVUxMKTsKIAlBc3NlcnQoVHJhbnNhY3Rpb25J ZElzVmFsaWQoc3RyZWFtX3hpZCkpOwogCiAJLyoKIAkgKiBXZSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBYSUQgb2YgdGhlIHN1YnhhY3QgYXMgdGhlIGZpcnN0IHBhcnQgb2YgdGhlCiAJICogbWVzc2Fn ZSwgc28gZXh0cmFjdCBpdC4KIAkgKi8KLQl4aWQgPSBwcV9nZXRtc2dpbnQocywgNCk7CisJY3Vy cmVudF94aWQgPSBwcV9nZXRtc2dpbnQocywgNCk7CiAKLQlpZiAoIVRyYW5zYWN0aW9uSWRJc1Zh bGlkKHhpZCkpCisJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChjdXJyZW50X3hpZCkpCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAog CQkJCSBlcnJtc2dfaW50ZXJuYWwoImludmFsaWQgdHJhbnNhY3Rpb24gSUQgaW4gc3RyZWFtZWQg cmVwbGljYXRpb24gdHJhbnNhY3Rpb24iKSkpOwogCi0JLyogQWRkIHRoZSBuZXcgc3VieGFjdCB0 byB0aGUgYXJyYXkgKHVubGVzcyBhbHJlYWR5IHRoZXJlKS4gKi8KLQlzdWJ4YWN0X2luZm9fYWRk KHhpZCk7CisJc3dpdGNoIChhcHBseV9hY3Rpb24pCisJeworCQljYXNlIFRSQU5TX0xFQURFUl9T RVJJQUxJWkU6CisJCQlBc3NlcnQoc3RyZWFtX2ZkKTsKKworCQkJLyogQWRkIHRoZSBuZXcgc3Vi eGFjdCB0byB0aGUgYXJyYXkgKHVubGVzcyBhbHJlYWR5IHRoZXJlKS4gKi8KKwkJCXN1YnhhY3Rf aW5mb19hZGQoY3VycmVudF94aWQpOworCisJCQkvKiBXcml0ZSB0aGUgY2hhbmdlIHRvIHRoZSBj dXJyZW50IGZpbGUgKi8KKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoYWN0aW9uLCBzKTsKKwkJCXJl dHVybiB0cnVlOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJCQlB c3NlcnQod2luZm8pOworCisJCQlwYV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7 CisKKwkJCS8qCisJCQkgKiBYWFggVGhlIHB1Ymxpc2hlciBzaWRlIGRvZXNuJ3QgYWx3YXlzIHNl bmQgcmVsYXRpb24vdHlwZSB1cGRhdGUKKwkJCSAqIG1lc3NhZ2VzIGFmdGVyIHRoZSBzdHJlYW1p bmcgdHJhbnNhY3Rpb24sIHNvIGFsc28gdXBkYXRlIHRoZQorCQkJICogcmVsYXRpb24vdHlwZSBp biBsZWFkZXIgYXBwbHkgd29ya2VyLiBTZWUgZnVuY3Rpb24KKwkJCSAqIGNsZWFudXBfcmVsX3N5 bmNfY2FjaGUuCisJCQkgKi8KKwkJCXJldHVybiAoYWN0aW9uICE9IExPR0lDQUxfUkVQX01TR19S RUxBVElPTiAmJgorCQkJCQlhY3Rpb24gIT0gTE9HSUNBTF9SRVBfTVNHX1RZUEUpOworCisJCWNh c2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisJCQlwYXJhbGxlbF9zdHJlYW1fbmNoYW5nZXMgKz0g MTsKIAotCS8qIHdyaXRlIHRoZSBjaGFuZ2UgdG8gdGhlIGN1cnJlbnQgZmlsZSAqLwotCXN0cmVh bV93cml0ZV9jaGFuZ2UoYWN0aW9uLCBzKTsKKwkJCS8qIERlZmluZSBhIHNhdmVwb2ludCBmb3Ig YSBzdWJ4YWN0IGlmIG5lZWRlZC4gKi8KKwkJCXBhX3N0YXJ0X3N1YnRyYW5zKGN1cnJlbnRfeGlk LCBzdHJlYW1feGlkKTsKKwkJCXJldHVybiBmYWxzZTsKIAotCXJldHVybiB0cnVlOworCQlkZWZh dWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCXJldHVybiBmYWxzZTsJCS8qIHNpbGVuY2UgY29t cGlsZXIgd2FybmluZyAqLworCX0KIH0KIAogLyoKQEAgLTkyMyw4ICsxMDc4LDExIEBAIGFwcGx5 X2hhbmRsZV9wcmVwYXJlX2ludGVybmFsKExvZ2ljYWxSZXBQcmVwYXJlZFR4bkRhdGEgKnByZXBh cmVfZGF0YSkKIAkgKiBCZWdpblRyYW5zYWN0aW9uQmxvY2sgaXMgbmVjZXNzYXJ5IHRvIGJhbGFu Y2UgdGhlIEVuZFRyYW5zYWN0aW9uQmxvY2sKIAkgKiBjYWxsZWQgd2l0aGluIHRoZSBQcmVwYXJl VHJhbnNhY3Rpb25CbG9jayBiZWxvdy4KIAkgKi8KLQlCZWdpblRyYW5zYWN0aW9uQmxvY2soKTsK LQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsgLyogQ29tcGxldGVzIHRoZSBwcmVjZWRpbmcg QmVnaW4gY29tbWFuZC4gKi8KKwlpZiAoIUlzVHJhbnNhY3Rpb25CbG9jaygpKQorCXsKKwkJQmVn aW5UcmFuc2FjdGlvbkJsb2NrKCk7CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOyAvKiBD b21wbGV0ZXMgdGhlIHByZWNlZGluZyBCZWdpbiBjb21tYW5kLiAqLworCX0KIAogCS8qCiAJICog VXBkYXRlIG9yaWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFydCBzdHJlYW1pbmcgZnJvbSBjb3Jy ZWN0IHBvc2l0aW9uCkBAIC05OTMsNiArMTE1MSwxMiBAQCBhcHBseV9oYW5kbGVfcHJlcGFyZShT dHJpbmdJbmZvIHMpCiAKIC8qCiAgKiBIYW5kbGUgYSBDT01NSVQgUFJFUEFSRUQgb2YgYSBwcmV2 aW91c2x5IFBSRVBBUkVEIHRyYW5zYWN0aW9uLgorICoKKyAqIE5vdGUgdGhhdCB3ZSBkb24ndCBu ZWVkIHRvIHdhaXQgaGVyZSBpZiB0aGUgdHJhbnNhY3Rpb24gd2FzIHByZXBhcmVkIGluIGEKKyAq IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gSW4gdGhhdCBjYXNlLCB3ZSBoYXZlIGFscmVhZHkgd2Fp dGVkIGZvciB0aGUgcHJlcGFyZQorICogdG8gZmluaXNoIGluIGFwcGx5X2hhbmRsZV9zdHJlYW1f cHJlcGFyZSgpIHdoaWNoIHdpbGwgZW5zdXJlIGFsbCB0aGUKKyAqIG9wZXJhdGlvbnMgaW4gdGhh dCB0cmFuc2FjdGlvbiBoYXZlIGhhcHBlbmVkIGluIHRoZSBzdWJzY3JpYmVyLCBzbyBubworICog Y29uY3VycmVudCB0cmFuc2FjdGlvbiBjYW4gY2F1c2UgZGVhZGxvY2sgb3IgdHJhbnNhY3Rpb24g ZGVwZW5kZW5jeSBpc3N1ZXMuCiAgKi8KIHN0YXRpYyB2b2lkCiBhcHBseV9oYW5kbGVfY29tbWl0 X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKQEAgLTEwMzYsNiArMTIwMCwxMiBAQCBhcHBseV9oYW5k bGVfY29tbWl0X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKIAogLyoKICAqIEhhbmRsZSBhIFJPTExC QUNLIFBSRVBBUkVEIG9mIGEgcHJldmlvdXNseSBQUkVQQVJFRCBUUkFOU0FDVElPTi4KKyAqCisg KiBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGhlcmUgaWYgdGhlIHRyYW5zYWN0aW9u IHdhcyBwcmVwYXJlZCBpbiBhCisgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXIuIEluIHRoYXQgY2Fz ZSwgd2UgaGF2ZSBhbHJlYWR5IHdhaXRlZCBmb3IgdGhlIHByZXBhcmUKKyAqIHRvIGZpbmlzaCBp biBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoKSB3aGljaCB3aWxsIGVuc3VyZSBhbGwgdGhl CisgKiBvcGVyYXRpb25zIGluIHRoYXQgdHJhbnNhY3Rpb24gaGF2ZSBoYXBwZW5lZCBpbiB0aGUg c3Vic2NyaWJlciwgc28gbm8KKyAqIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb24gY2FuIGNhdXNlIGRl YWRsb2NrIG9yIHRyYW5zYWN0aW9uIGRlcGVuZGVuY3kgaXNzdWVzLgogICovCiBzdGF0aWMgdm9p ZAogYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmluZ0luZm8gcykKQEAgLTEwODks MTUgKzEyNTksMTMgQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmluZ0luZm8g cykKIAogLyoKICAqIEhhbmRsZSBTVFJFQU0gUFJFUEFSRS4KLSAqCi0gKiBMb2dpYyBpcyBpbiB0 d28gcGFydHM6Ci0gKiAxLiBSZXBsYXkgYWxsIHRoZSBzcG9vbGVkIG9wZXJhdGlvbnMKLSAqIDIu IE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVkCiAgKi8KIHN0YXRpYyB2b2lkCiBhcHBs eV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogewogCUxvZ2ljYWxSZXBQcmVw YXJlZFR4bkRhdGEgcHJlcGFyZV9kYXRhOworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5m bzsKKwlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKIAogCWlmIChpbl9zdHJlYW1lZF90 cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTExMTMsMjQgKzEyODEsODIgQEAgYXBw bHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAlsb2dpY2FscmVwX3JlYWRf c3RyZWFtX3ByZXBhcmUocywgJnByZXBhcmVfZGF0YSk7CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRl eHRfeGFjdChwcmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOwogCi0J ZWxvZyhERUJVRzEsICJyZWNlaXZlZCBwcmVwYXJlIGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAl dSIsIHByZXBhcmVfZGF0YS54aWQpOworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9h cHBseV9hY3Rpb24ocHJlcGFyZV9kYXRhLnhpZCwgJndpbmZvKTsKIAotCS8qIFJlcGxheSBhbGwg dGhlIHNwb29sZWQgb3BlcmF0aW9ucy4gKi8KLQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHByZXBh cmVfZGF0YS54aWQsIHByZXBhcmVfZGF0YS5wcmVwYXJlX2xzbik7CisJc3dpdGNoIChhcHBseV9h Y3Rpb24pCisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CiAKLQkvKiBNYXJrIHRo ZSB0cmFuc2FjdGlvbiBhcyBwcmVwYXJlZC4gKi8KLQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRl cm5hbCgmcHJlcGFyZV9kYXRhKTsKKwkJCS8qCisJCQkgKiBUaGUgdHJhbnNhY3Rpb24gaGFzIGJl ZW4gc2VyaWFsaXplZCB0byBmaWxlLCBzbyByZXBsYXkgYWxsIHRoZQorCQkJICogc3Bvb2xlZCBv cGVyYXRpb25zLgorCQkJICovCisJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHByZXBhcmVfZGF0 YS54aWQsIHByZXBhcmVfZGF0YS5wcmVwYXJlX2xzbik7CiAKLQlDb21taXRUcmFuc2FjdGlvbkNv bW1hbmQoKTsKKwkJCS8qIE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVkLiAqLworCQkJ YXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoJnByZXBhcmVfZGF0YSk7CiAKLQlwZ3N0YXRf cmVwb3J0X3N0YXQoZmFsc2UpOworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKLQlz dG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisJCQlzdG9yZV9mbHVz aF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CiAKLQlpbl9yZW1vdGVfdHJhbnNhY3Rp b24gPSBmYWxzZTsKKwkJCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCisJCQkvKiBV bmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8u ICovCisJCQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBw cmVwYXJlX2RhdGEueGlkKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRf VE9fUEFSQUxMRUw6CisJCQlBc3NlcnQod2luZm8pOworCisJCQkvKgorCQkJICogVW5sb2NrIHRo ZSBzaGFyZWQgb2JqZWN0IGxvY2sgc28gdGhhdCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgY2FuCisJ CQkgKiBjb250aW51ZSB0byByZWNlaXZlIGFuZCBhcHBseSBjaGFuZ2VzLgorCQkJICovCisJCQlw YV91bmxvY2tfc3RyZWFtKHdpbmZvLT5zaGFyZWQtPnhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7 CisKKwkJCS8qIFNlbmQgU1RSRUFNIFBSRVBBUkUgbWVzc2FnZSB0byB0aGUgcGFyYWxsZWwgYXBw bHkgd29ya2VyLiAqLworCQkJcGFfc2VuZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpOwor CisJCQkvKgorCQkJICogQWZ0ZXIgc2VuZGluZyB0aGUgZGF0YSB0byB0aGUgcGFyYWxsZWwgYXBw bHkgd29ya2VyLCB3YWl0IGZvcgorCQkJICogdGhhdCB3b3JrZXIgdG8gZmluaXNoLiBUaGlzIGlz IG5lY2Vzc2FyeSB0byBtYWludGFpbiBjb21taXQKKwkJCSAqIG9yZGVyIHdoaWNoIGF2b2lkcyBm YWlsdXJlcyBkdWUgdG8gdHJhbnNhY3Rpb24gZGVwZW5kZW5jaWVzIGFuZAorCQkJICogZGVhZGxv Y2tzLgorCQkJICovCisJCQlwYV93YWl0X2Zvcl94YWN0X2ZpbmlzaCh3aW5mbyk7CisJCQkodm9p ZCkgcGFfZnJlZV93b3JrZXIod2luZm8sIHByZXBhcmVfZGF0YS54aWQpOworCisJCQlpbl9yZW1v dGVfdHJhbnNhY3Rpb24gPSBmYWxzZTsKKworCQkJc3RvcmVfZmx1c2hfcG9zaXRpb24ocHJlcGFy ZV9kYXRhLmVuZF9sc24pOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBM WToKKwkJCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKworCQkJbGlzdF9mcmVlKHN1YnhhY3Rs aXN0KTsKKwkJCXN1YnhhY3RsaXN0ID0gTklMOwogCi0JLyogdW5saW5rIHRoZSBmaWxlcyB3aXRo IHNlcmlhbGl6ZWQgY2hhbmdlcyBhbmQgc3VieGFjdCBpbmZvLiAqLwotCXN0cmVhbV9jbGVhbnVw X2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHByZXBhcmVfZGF0YS54aWQpOworCQkJ LyogTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQuICovCisJCQlhcHBseV9oYW5kbGVf cHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRhKTsKKworCQkJZW5kX3JlcGxpY2F0aW9uX3N0 ZXAoKTsKKworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJCXBhX3NldF94YWN0 X3N0YXRlKE15UGFyYWxsZWxTaGFyZWQsIFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEKTsKKwkJCXBh X3VubG9ja190cmFuc2FjdGlvbihNeVBhcmFsbGVsU2hhcmVkLT54aWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwkJCWVsb2coREVCVUcxLCAiZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rp b24gZmluaXNoIGNvbW1hbmQiKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlBc3NlcnQo ZmFsc2UpOworCQkJYnJlYWs7CisJfQorCisJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKIAog CS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFy YWxsZWwuICovCiAJcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhwcmVwYXJlX2RhdGEuZW5kX2xzbik7 CkBAIC0xMTY3LDYgKzEzOTMsOCBAQCBhcHBseV9oYW5kbGVfb3JpZ2luKFN0cmluZ0luZm8gcykK IAkJCQkgZXJybXNnX2ludGVybmFsKCJPUklHSU4gbWVzc2FnZSBzZW50IG91dCBvZiBvcmRlciIp KSk7CiB9CiAKKworCiAvKgogICogSGFuZGxlIFNUUkVBTSBTVEFSVCBtZXNzYWdlLgogICovCkBA IC0xMTc0LDIxICsxNDAyLDE0IEBAIHN0YXRpYyB2b2lkCiBhcHBseV9oYW5kbGVfc3RyZWFtX3N0 YXJ0KFN0cmluZ0luZm8gcykKIHsKIAlib29sCQlmaXJzdF9zZWdtZW50OworCVBhcmFsbGVsQXBw bHlXb3JrZXJJbmZvICp3aW5mbzsKKwlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKIAog CWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJy Y29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgi ZHVwbGljYXRlIFNUUkVBTSBTVEFSVCBtZXNzYWdlIikpKTsKIAotCS8qCi0JICogU3RhcnQgYSB0 cmFuc2FjdGlvbiBvbiBzdHJlYW0gc3RhcnQsIHRoaXMgdHJhbnNhY3Rpb24gd2lsbCBiZSBjb21t aXR0ZWQKLQkgKiBvbiB0aGUgc3RyZWFtIHN0b3AgdW5sZXNzIGl0IGlzIGEgdGFibGVzeW5jIHdv cmtlciBpbiB3aGljaCBjYXNlIGl0Ci0JICogd2lsbCBiZSBjb21taXR0ZWQgYWZ0ZXIgcHJvY2Vz c2luZyBhbGwgdGhlIG1lc3NhZ2VzLiBXZSBuZWVkIHRoZQotCSAqIHRyYW5zYWN0aW9uIGZvciBo YW5kbGluZyB0aGUgYnVmZmlsZSwgdXNlZCBmb3Igc2VyaWFsaXppbmcgdGhlCi0JICogc3RyZWFt aW5nIGRhdGEgYW5kIHN1YnhhY3QgaW5mby4KLQkgKi8KLQliZWdpbl9yZXBsaWNhdGlvbl9zdGVw KCk7Ci0KIAkvKiBub3RpZnkgaGFuZGxlIG1ldGhvZHMgd2UncmUgcHJvY2Vzc2luZyBhIHJlbW90 ZSB0cmFuc2FjdGlvbiAqLwogCWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gdHJ1ZTsKIApAQCAt MTIwMiwzNiArMTQyMyw5NSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0luZm8g cykKIAogCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3Qoc3RyZWFtX3hpZCwgSW52YWxpZFhM b2dSZWNQdHIpOwogCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSB3b3JrZXIncyBzdHJlYW1fZmls ZXNldCBpZiB3ZSBoYXZlbid0IHlldC4gVGhpcyB3aWxsIGJlCi0JICogdXNlZCBmb3IgdGhlIGVu dGlyZSBkdXJhdGlvbiBvZiB0aGUgd29ya2VyIHNvIGNyZWF0ZSBpdCBpbiBhIHBlcm1hbmVudAot CSAqIGNvbnRleHQuIFdlIGNyZWF0ZSB0aGlzIG9uIHRoZSB2ZXJ5IGZpcnN0IHN0cmVhbWluZyBt ZXNzYWdlIGZyb20gYW55Ci0JICogdHJhbnNhY3Rpb24gYW5kIHRoZW4gdXNlIGl0IGZvciB0aGlz IGFuZCBvdGhlciBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zLgotCSAqIE5vdywgd2UgY291bGQgY3Jl YXRlIGEgZmlsZXNldCBhdCB0aGUgc3RhcnQgb2YgdGhlIHdvcmtlciBhcyB3ZWxsIGJ1dAotCSAq IHRoZW4gd2Ugd29uJ3QgYmUgc3VyZSB0aGF0IGl0IHdpbGwgZXZlciBiZSB1c2VkLgotCSAqLwot CWlmIChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID09IE5VTEwpCisJLyogVHJ5 IHRvIGFsbG9jYXRlIGEgd29ya2VyIGZvciB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLiAqLwor CWlmIChmaXJzdF9zZWdtZW50KQorCQlwYV9hbGxvY2F0ZV93b3JrZXIoc3RyZWFtX3hpZCk7CisK KwlhcHBseV9hY3Rpb24gPSBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKHN0cmVhbV94aWQs ICZ3aW5mbyk7CisKKwlzd2l0Y2ggKGFwcGx5X2FjdGlvbikKIAl7Ci0JCU1lbW9yeUNvbnRleHQg b2xkY3R4OworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CiAKLQkJb2xkY3R4ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisJCQkvKgorCQkJICogU3RhcnQgYSB0 cmFuc2FjdGlvbiBvbiBzdHJlYW0gc3RhcnQsIHRoaXMgdHJhbnNhY3Rpb24gd2lsbCBiZQorCQkJ ICogY29tbWl0dGVkIG9uIHRoZSBzdHJlYW0gc3RvcCB1bmxlc3MgaXQgaXMgYSB0YWJsZXN5bmMg d29ya2VyIGluCisJCQkgKiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgY29tbWl0dGVkIGFmdGVyIHBy b2Nlc3NpbmcgYWxsIHRoZQorCQkJICogbWVzc2FnZXMuIFdlIG5lZWQgdGhlIHRyYW5zYWN0aW9u IGZvciBoYW5kbGluZyB0aGUgYnVmZmlsZSwKKwkJCSAqIHVzZWQgZm9yIHNlcmlhbGl6aW5nIHRo ZSBzdHJlYW1pbmcgZGF0YSBhbmQgc3VieGFjdCBpbmZvLgorCQkJICovCisJCQliZWdpbl9yZXBs aWNhdGlvbl9zdGVwKCk7CiAKLQkJTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCA9 IHBhbGxvYyhzaXplb2YoRmlsZVNldCkpOwotCQlGaWxlU2V0SW5pdChNeUxvZ2ljYWxSZXBXb3Jr ZXItPnN0cmVhbV9maWxlc2V0KTsKKwkJCS8qCisJCQkgKiBJbml0aWFsaXplIHRoZSB3b3JrZXIn cyBzdHJlYW1fZmlsZXNldCBpZiB3ZSBoYXZlbid0IHlldC4gVGhpcworCQkJICogd2lsbCBiZSB1 c2VkIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIHRoZSB3b3JrZXIgc28gY3JlYXRlIGl0CisJ CQkgKiBpbiBhIHBlcm1hbmVudCBjb250ZXh0LiBXZSBjcmVhdGUgdGhpcyBvbiB0aGUgdmVyeSBm aXJzdAorCQkJICogc3RyZWFtaW5nIG1lc3NhZ2UgZnJvbSBhbnkgdHJhbnNhY3Rpb24gYW5kIHRo ZW4gdXNlIGl0IGZvciB0aGlzCisJCQkgKiBhbmQgb3RoZXIgc3RyZWFtaW5nIHRyYW5zYWN0aW9u cy4gTm93LCB3ZSBjb3VsZCBjcmVhdGUgYQorCQkJICogZmlsZXNldCBhdCB0aGUgc3RhcnQgb2Yg dGhlIHdvcmtlciBhcyB3ZWxsIGJ1dCB0aGVuIHdlIHdvbid0IGJlCisJCQkgKiBzdXJlIHRoYXQg aXQgd2lsbCBldmVyIGJlIHVzZWQuCisJCQkgKi8KKwkJCWlmICghTXlMb2dpY2FsUmVwV29ya2Vy LT5zdHJlYW1fZmlsZXNldCkKKwkJCXsKKwkJCQlNZW1vcnlDb250ZXh0IG9sZGN0eDsKIAotCQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKLQl9CisJCQkJb2xkY3R4ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisKKwkJCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN0 cmVhbV9maWxlc2V0ID0gcGFsbG9jKHNpemVvZihGaWxlU2V0KSk7CisJCQkJRmlsZVNldEluaXQo TXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCk7CiAKLQkvKiBvcGVuIHRoZSBzcG9v bCBmaWxlIGZvciB0aGlzIHRyYW5zYWN0aW9uICovCi0Jc3RyZWFtX29wZW5fZmlsZShNeUxvZ2lj YWxSZXBXb3JrZXItPnN1YmlkLCBzdHJlYW1feGlkLCBmaXJzdF9zZWdtZW50KTsKKwkJCQlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKwkJCX0KIAotCS8qIGlmIHRoaXMgaXMgbm90IHRo ZSBmaXJzdCBzZWdtZW50LCBvcGVuIGV4aXN0aW5nIHN1YnhhY3QgZmlsZSAqLwotCWlmICghZmly c3Rfc2VnbWVudCkKLQkJc3VieGFjdF9pbmZvX3JlYWQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJp ZCwgc3RyZWFtX3hpZCk7CisJCQkvKiBPcGVuIHRoZSBzcG9vbCBmaWxlIGZvciB0aGlzIHRyYW5z YWN0aW9uLiAqLworCQkJc3RyZWFtX29wZW5fZmlsZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1Ymlk LCBzdHJlYW1feGlkLCBmaXJzdF9zZWdtZW50KTsKIAotCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHko U1RBVEVfUlVOTklORywgTlVMTCk7CisJCQkvKiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qgc2Vn bWVudCwgb3BlbiBleGlzdGluZyBzdWJ4YWN0IGZpbGUuICovCisJCQlpZiAoIWZpcnN0X3NlZ21l bnQpCisJCQkJc3VieGFjdF9pbmZvX3JlYWQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3Ry ZWFtX3hpZCk7CiAKLQllbmRfcmVwbGljYXRpb25fc3RlcCgpOworCQkJZW5kX3JlcGxpY2F0aW9u X3N0ZXAoKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxM RUw6CisJCQlBc3NlcnQod2luZm8pOworCisJCQkvKgorCQkJICogVW5sb2NrIHRoZSBzaGFyZWQg b2JqZWN0IGxvY2sgc28gdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyCisJCQkgKiBjYW4g Y29udGludWUgdG8gcmVjZWl2ZSBjaGFuZ2VzLgorCQkJICovCisJCQlpZiAoIWZpcnN0X3NlZ21l bnQpCisJCQkJcGFfdW5sb2NrX3N0cmVhbSh3aW5mby0+c2hhcmVkLT54aWQsIEFjY2Vzc0V4Y2x1 c2l2ZUxvY2spOworCisJCQkvKgorCQkJICogSW5jcmVtZW50IHRoZSBudW1iZXIgb2Ygc3RyZWFt aW5nIGJsb2NrcyB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZAorCQkJICogYnkgcGFyYWxsZWwgYXBw bHkgd29ya2VyLgorCQkJICovCisJCQlwZ19hdG9taWNfYWRkX2ZldGNoX3UzMigmd2luZm8tPnNo YXJlZC0+cGVuZGluZ19zdHJlYW1fY291bnQsIDEpOworCisJCQlwYV9zZW5kX2RhdGEod2luZm8s IHMtPmxlbiwgcy0+ZGF0YSk7CisKKwkJCS8qIENhY2hlIHRoZSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIgZm9yIHRoaXMgdHJhbnNhY3Rpb24uICovCisJCQlzdHJlYW1fYXBwbHlfd29ya2VyID0gd2lu Zm87CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX1BBUkFMTEVMX0FQUExZOgorCQkJaWYgKGZp cnN0X3NlZ21lbnQpCisJCQl7CisJCQkJLyogSG9sZCB0aGUgbG9jayB1bnRpbCB0aGUgZW5kIG9m IHRoZSB0cmFuc2FjdGlvbi4gKi8KKwkJCQlwYV9sb2NrX3RyYW5zYWN0aW9uKE15UGFyYWxsZWxT aGFyZWQtPnhpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlwYV9zZXRfeGFjdF9zdGF0ZShNeVBh cmFsbGVsU2hhcmVkLCBQQVJBTExFTF9UUkFOU19TVEFSVEVEKTsKKwkJCX0KKworCQkJcGFyYWxs ZWxfc3RyZWFtX25jaGFuZ2VzID0gMDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlBc3Nl cnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQorCisJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFU RV9SVU5OSU5HLCBOVUxMKTsKIH0KIAogLyoKQEAgLTEyNDAsNTggKzE1MjAsOTcgQEAgYXBwbHlf aGFuZGxlX3N0cmVhbV9zdGFydChTdHJpbmdJbmZvIHMpCiBzdGF0aWMgdm9pZAogYXBwbHlfaGFu ZGxlX3N0cmVhbV9zdG9wKFN0cmluZ0luZm8gcykKIHsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5m byAqd2luZm87CisJVHJhbnNBcHBseUFjdGlvbiBhcHBseV9hY3Rpb247CisKIAlpZiAoIWluX3N0 cmVhbWVkX3RyYW5zYWN0aW9uKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNP REVfUFJPVE9DT0xfVklPTEFUSU9OKSwKIAkJCQkgZXJybXNnX2ludGVybmFsKCJTVFJFQU0gU1RP UCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUQVJUIikpKTsKIAotCS8qCi0JICogQ2xvc2UgdGhl IGZpbGUgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMsIGFuZCBzZXJpYWxpemUgaW5mb3JtYXRpb24g YWJvdXQKLQkgKiBzdWJ4YWN0cyBmb3IgdGhlIHRvcGxldmVsIHRyYW5zYWN0aW9uLgotCSAqLwot CXN1YnhhY3RfaW5mb193cml0ZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBzdHJlYW1feGlk KTsKLQlzdHJlYW1fY2xvc2VfZmlsZSgpOworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFuc2FjdGlv bl9hcHBseV9hY3Rpb24oc3RyZWFtX3hpZCwgJndpbmZvKTsKIAotCS8qIFdlIG11c3QgYmUgaW4g YSB2YWxpZCB0cmFuc2FjdGlvbiBzdGF0ZSAqLwotCUFzc2VydChJc1RyYW5zYWN0aW9uU3RhdGUo KSk7CisJc3dpdGNoIChhcHBseV9hY3Rpb24pCisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJ QUxJWkU6CiAKLQkvKiBDb21taXQgdGhlIHBlci1zdHJlYW0gdHJhbnNhY3Rpb24gKi8KLQlDb21t aXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJCS8qCisJCQkgKiBDbG9zZSB0aGUgZmlsZSB3aXRo IHNlcmlhbGl6ZWQgY2hhbmdlcywgYW5kIHNlcmlhbGl6ZQorCQkJICogaW5mb3JtYXRpb24gYWJv dXQgc3VieGFjdHMgZm9yIHRoZSB0b3BsZXZlbCB0cmFuc2FjdGlvbi4KKwkJCSAqLworCQkJc3Vi eGFjdF9pbmZvX3dyaXRlKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHN0cmVhbV94aWQpOwor CQkJc3RyZWFtX2Nsb3NlX2ZpbGUoKTsKIAotCWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gZmFs c2U7CisJCQkvKiBXZSBtdXN0IGJlIGluIGEgdmFsaWQgdHJhbnNhY3Rpb24gc3RhdGUgKi8KKwkJ CUFzc2VydChJc1RyYW5zYWN0aW9uU3RhdGUoKSk7CiAKLQkvKiBSZXNldCBwZXItc3RyZWFtIGNv bnRleHQgKi8KLQlNZW1vcnlDb250ZXh0UmVzZXQoTG9naWNhbFN0cmVhbWluZ0NvbnRleHQpOwor CQkJLyogQ29tbWl0IHRoZSBwZXItc3RyZWFtIHRyYW5zYWN0aW9uICovCisJCQlDb21taXRUcmFu c2FjdGlvbkNvbW1hbmQoKTsKKworCQkJLyogUmVzZXQgcGVyLXN0cmVhbSBjb250ZXh0ICovCisJ CQlNZW1vcnlDb250ZXh0UmVzZXQoTG9naWNhbFN0cmVhbWluZ0NvbnRleHQpOworCisJCQlwZ3N0 YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEUsIE5VTEwpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJ CS8qCisJCQkgKiBMb2NrIGJlZm9yZSBzZW5kaW5nIHRoZSBTVFJFQU1fU1RPUCBtZXNzYWdlIHNv IHRoYXQgdGhlIGxlYWRlcgorCQkJICogY2FuIGhvbGQgdGhlIGxvY2sgZmlyc3QgYW5kIHRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIgd2lsbCB3YWl0CisJCQkgKiBmb3IgbGVhZGVyIHRvIHJlbGVh c2UgdGhlIGxvY2suCisJCQkgKi8KKwkJCXBhX2xvY2tfc3RyZWFtKHdpbmZvLT5zaGFyZWQtPnhp ZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisKKwkJCXBhX3NlbmRfZGF0YSh3aW5mbywgcy0+bGVu LCBzLT5kYXRhKTsKKworCQkJc3RyZWFtX2FwcGx5X3dvcmtlciA9IE5VTEw7CisKKwkJCXBnc3Rh dF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfSURMRSwgTlVMTCk7CisJCQlicmVhazsKKworCQljYXNl IFRSQU5TX1BBUkFMTEVMX0FQUExZOgorCQkJZWxvZyhERUJVRzEsICJhcHBsaWVkICV1IGNoYW5n ZXMgaW4gdGhlIHN0cmVhbWluZyBjaHVuayIsCisJCQkJIHBhcmFsbGVsX3N0cmVhbV9uY2hhbmdl cyk7CisKKwkJCS8qCisJCQkgKiBCeSB0aGUgdGltZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMg cHJvY2Vzc2luZyB0aGUgY2hhbmdlcyBpbgorCQkJICogdGhlIGN1cnJlbnQgc3RyZWFtaW5nIGJs b2NrLCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBtYXkgaGF2ZQorCQkJICogc2VudCBtdWx0aXBs ZSBzdHJlYW1pbmcgYmxvY2tzLiBTbywgdHJ5IHRvIGxvY2sgb25seSBpZiB0aGVyZQorCQkJICog aXMgbm8gbWVzc2FnZSBsZWZ0IGluIHRoZSBxdWV1ZS4KKwkJCSAqLworCQkJaWYgKHBnX2F0b21p Y19zdWJfZmV0Y2hfdTMyKCZNeVBhcmFsbGVsU2hhcmVkLT5wZW5kaW5nX3N0cmVhbV9jb3VudCwg MSkgPT0gMCkKKwkJCXsKKwkJCQlwYV9sb2NrX3N0cmVhbShNeVBhcmFsbGVsU2hhcmVkLT54aWQs IEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJcGFfdW5sb2NrX3N0cmVhbShNeVBhcmFsbGVsU2hhcmVk LT54aWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisKKwkJCXBnc3RhdF9yZXBvcnRfYWN0aXZp dHkoU1RBVEVfSURMRUlOVFJBTlNBQ1RJT04sIE5VTEwpOworCQkJYnJlYWs7CisKKwkJZGVmYXVs dDoKKwkJCUFzc2VydChmYWxzZSk7CisJCQlicmVhazsKKwl9CisKKwlpbl9zdHJlYW1lZF90cmFu c2FjdGlvbiA9IGZhbHNlOwogCi0JcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBO VUxMKTsKIAlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKIH0KIAogLyoKLSAqIEhh bmRsZSBTVFJFQU0gYWJvcnQgbWVzc2FnZS4KKyAqIEhhbmRsZSBTVFJFQU0gQUJPUlQgbWVzc2Fn ZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiB3YXMgc3BpbGxlZCB0byBkaXNrLgogICovCiBzdGF0aWMg dm9pZAotYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIHMpCitzZXJpYWxpemVf c3RyZWFtX2Fib3J0KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFuc2FjdGlvbklkIHN1YnhpZCkKIHsK LQlUcmFuc2FjdGlvbklkIHhpZDsKLQlUcmFuc2FjdGlvbklkIHN1YnhpZDsKLQotCWlmIChpbl9z dHJlYW1lZF90cmFuc2FjdGlvbikKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJD T0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCi0JCQkJIGVycm1zZ19pbnRlcm5hbCgiU1RSRUFNIEFC T1JUIG1lc3NhZ2Ugd2l0aG91dCBTVFJFQU0gU1RPUCIpKSk7Ci0KLQlsb2dpY2FscmVwX3JlYWRf c3RyZWFtX2Fib3J0KHMsICZ4aWQsICZzdWJ4aWQpOwotCiAJLyoKIAkgKiBJZiB0aGUgdHdvIFhJ RHMgYXJlIHRoZSBzYW1lLCBpdCdzIGluIGZhY3QgYWJvcnQgb2YgdG9wbGV2ZWwgeGFjdCwgc28K IAkgKiBqdXN0IGRlbGV0ZSB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGluZm8uCiAJICovCiAJ aWYgKHhpZCA9PSBzdWJ4aWQpCi0JewotCQlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHhp ZCwgSW52YWxpZFhMb2dSZWNQdHIpOwogCQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxS ZXBXb3JrZXItPnN1YmlkLCB4aWQpOwotCX0KIAllbHNlCiAJewogCQkvKgpAQCAtMTMxNSw4ICsx NjM0LDYgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIHMpCiAJCWJvb2wJ CWZvdW5kID0gZmFsc2U7CiAJCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAotCQlzZXRfYXBwbHlf ZXJyb3JfY29udGV4dF94YWN0KHN1YnhpZCwgSW52YWxpZFhMb2dSZWNQdHIpOwotCiAJCXN1Ymlk eCA9IC0xOwogCQliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CiAJCXN1YnhhY3RfaW5mb19yZWFk KE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CkBAIC0xMzQxLDcgKzE2NTgsNiBAQCBh cHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKIAkJCWNsZWFudXBfc3VieGFj dF9pbmZvKCk7CiAJCQllbmRfcmVwbGljYXRpb25fc3RlcCgpOwogCQkJQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKCk7Ci0JCQlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKIAkJCXJl dHVybjsKIAkJfQogCkBAIC0xMzY0LDYgKzE2ODAsMTAzIEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1f YWJvcnQoU3RyaW5nSW5mbyBzKQogCQllbmRfcmVwbGljYXRpb25fc3RlcCgpOwogCQlDb21taXRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKIAl9Cit9CisKKy8qCisgKiBIYW5kbGUgU1RSRUFNIEFCT1JU IG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0 cmluZ0luZm8gcykKK3sKKwlUcmFuc2FjdGlvbklkIHhpZDsKKwlUcmFuc2FjdGlvbklkIHN1Ynhp ZDsKKwlMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhIGFib3J0X2RhdGE7CisJUGFyYWxsZWxBcHBs eVdvcmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOworCWJv b2wJCXRvcGxldmVsX3hhY3Q7CisKKwlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAor CQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBBQk9SVCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFN IFNUT1AiKSkpOworCisJLyogV2UgcmVjZWl2ZSBhYm9ydCBpbmZvcm1hdGlvbiBvbmx5IHdoZW4g d2UgY2FuIGFwcGx5IGluIHBhcmFsbGVsLiAqLworCWxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJv cnQocywgJmFib3J0X2RhdGEsCisJCQkJCQkJCSBNeUxvZ2ljYWxSZXBXb3JrZXItPnBhcmFsbGVs X2FwcGx5KTsKKworCXhpZCA9IGFib3J0X2RhdGEueGlkOworCXN1YnhpZCA9IGFib3J0X2RhdGEu c3VieGlkOworCXRvcGxldmVsX3hhY3QgPSAoeGlkID09IHN1YnhpZCk7CisKKwlzZXRfYXBwbHlf ZXJyb3JfY29udGV4dF94YWN0KHN1YnhpZCwgYWJvcnRfZGF0YS5hYm9ydF9sc24pOworCisJYXBw bHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbih4aWQsICZ3aW5mbyk7CisK Kwlzd2l0Y2ggKGFwcGx5X2FjdGlvbikKKwl7CisJCWNhc2UgVFJBTlNfTEVBREVSX1NFUklBTEla RToKKworCQkJLyoKKwkJCSAqIFdlIGFyZSBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQg dGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuCisJCQkgKiBzZXJpYWxpemVkIHRvIGZpbGUuCisJCQkg Ki8KKwkJCXNlcmlhbGl6ZV9zdHJlYW1fYWJvcnQoeGlkLCBzdWJ4aWQpOworCQkJYnJlYWs7CisK KwkJY2FzZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7 CisKKwkJCS8qCisJCQkgKiBGb3IgdGhlIGNhc2Ugb2YgYWJvcnRpbmcgdGhlIHRvcGxldmVsIHRy YW5zYWN0aW9uLCB1bmxvY2sgdGhlCisJCQkgKiBzaGFyZWQgb2JqZWN0IGxvY2sgc28gdGhhdCBw YXJhbGxlbCBhcHBseSB3b3JrZXIgY2FuIGNvbnRpbnVlIHRvCisJCQkgKiByZWNlaXZlIGFuZCBh cHBseSBjaGFuZ2VzLgorCQkJICoKKwkJCSAqIFhYWCBGb3IgdGhlIGNhc2Ugb2YgYWJvcnRpbmcg dGhlIHN1YnRyYW5zYWN0aW9uLCB3ZSBvbmx5CisJCQkgKiBpbmNyZW1lbnQgdGhlIG51bWJlciBv ZiBzdHJlYW1pbmcgYmxvY2tzIHdpdGhvdXQgcmVsZWFzaW5nIHRoZQorCQkJICogbG9jay4gVGhp cyBtYXkgc2xpZ2h0bHkgZGVsYXkgdGhlIHByb2Nlc3Npbmcgb2YgU1RSRUFNX0FCT1JUCisJCQkg KiBtZXNzYWdlIGJ1dCBjYW4gZW5zdXJlIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3 aWxsIHdhaXQKKwkJCSAqIG9uIHRoZSBsb2NrIGZvciB0aGUgbmV4dCBzZXQgb2YgY2hhbmdlcyBh ZnRlciBwcm9jZXNzaW5nIHRoZQorCQkJICogU1RSRUFNX0FCT1JUIG1lc3NhZ2UuCisJCQkgKi8K KwkJCWlmICh0b3BsZXZlbF94YWN0KQorCQkJCXBhX3VubG9ja19zdHJlYW0oeGlkLCBBY2Nlc3NF eGNsdXNpdmVMb2NrKTsKKwkJCWVsc2UKKwkJCQlwZ19hdG9taWNfYWRkX2ZldGNoX3UzMigmd2lu Zm8tPnNoYXJlZC0+cGVuZGluZ19zdHJlYW1fY291bnQsIDEpOworCisJCQkvKiBTZW5kIFNUUkVB TSBBQk9SVCBtZXNzYWdlIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuICovCisJCQlwYV9z ZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CisKKwkJCWlmICh0b3BsZXZlbF94YWN0 KQorCQkJCSh2b2lkKSBwYV9mcmVlX3dvcmtlcih3aW5mbywgeGlkKTsKKworCQkJYnJlYWs7CisK KwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKwkJCXBhX3N0cmVhbV9hYm9ydCgmYWJvcnRf ZGF0YSk7CisKKwkJCS8qCisJCQkgKiBXZSBuZWVkIHRvIHdhaXQgYWZ0ZXIgcHJvY2Vzc2luZyBy b2xsYmFjayB0byBzYXZlcG9pbnQgZm9yIHRoZQorCQkJICogbmV4dCBzZXQgb2YgY2hhbmdlcy4K KwkJCSAqCisJCQkgKiBCeSB0aGUgdGltZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgcHJvY2Vz c2luZyB0aGUgY2hhbmdlcyBpbgorCQkJICogdGhlIGN1cnJlbnQgc3RyZWFtaW5nIGJsb2NrLCB0 aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBtYXkgaGF2ZQorCQkJICogc2VudCBtdWx0aXBsZSBzdHJl YW1pbmcgYmxvY2tzLiBTbywgdHJ5IHRvIGxvY2sgb25seSBpZiB0aGVyZSBpcworCQkJICogbm8g bWVzc2FnZSBsZWZ0IGluIHRoZSBxdWV1ZS4KKwkJCSAqLworCQkJaWYgKCF0b3BsZXZlbF94YWN0 ICYmCisJCQkJcGdfYXRvbWljX3N1Yl9mZXRjaF91MzIoJk15UGFyYWxsZWxTaGFyZWQtPnBlbmRp bmdfc3RyZWFtX2NvdW50LCAxKSA9PSAwKQorCQkJeworCQkJCXBhX2xvY2tfc3RyZWFtKE15UGFy YWxsZWxTaGFyZWQtPnhpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlwYV91bmxvY2tfc3RyZWFt KE15UGFyYWxsZWxTaGFyZWQtPnhpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKworCQkJZWxv ZyhERUJVRzEsICJmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29t bWFuZCIpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUFzc2VydChmYWxzZSk7CisJCQli cmVhazsKKwl9CiAKIAlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKIH0KQEAgLTE0 OTUsNiArMTkwOCw4IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gcykK IHsKIAlUcmFuc2FjdGlvbklkIHhpZDsKIAlMb2dpY2FsUmVwQ29tbWl0RGF0YSBjb21taXRfZGF0 YTsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87CisJVHJhbnNBcHBseUFjdGlvbiBh cHBseV9hY3Rpb247CiAKIAlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVyZXBvcnQo RVJST1IsCkBAIC0xNTA0LDE0ICsxOTE5LDc0IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fY29tbWl0 KFN0cmluZ0luZm8gcykKIAl4aWQgPSBsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2NvbW1pdChzLCAm Y29tbWl0X2RhdGEpOwogCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3QoeGlkLCBjb21taXRf ZGF0YS5jb21taXRfbHNuKTsKIAotCWVsb2coREVCVUcxLCAicmVjZWl2ZWQgY29tbWl0IGZvciBz dHJlYW1lZCB0cmFuc2FjdGlvbiAldSIsIHhpZCk7CisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5z YWN0aW9uX2FwcGx5X2FjdGlvbih4aWQsICZ3aW5mbyk7CiAKLQlhcHBseV9zcG9vbGVkX21lc3Nh Z2VzKHhpZCwgY29tbWl0X2RhdGEuY29tbWl0X2xzbik7CisJc3dpdGNoIChhcHBseV9hY3Rpb24p CisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CiAKLQlhcHBseV9oYW5kbGVfY29t bWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7CisJCQkvKgorCQkJICogVGhlIHRyYW5zYWN0aW9u IGhhcyBiZWVuIHNlcmlhbGl6ZWQgdG8gZmlsZSwgc28gcmVwbGF5IGFsbCB0aGUKKwkJCSAqIHNw b29sZWQgb3BlcmF0aW9ucy4KKwkJCSAqLworCQkJYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyh4aWQs IGNvbW1pdF9kYXRhLmNvbW1pdF9sc24pOworCisJCQlhcHBseV9oYW5kbGVfY29tbWl0X2ludGVy bmFsKCZjb21taXRfZGF0YSk7CisKKwkJCS8qIFVubGluayB0aGUgZmlsZXMgd2l0aCBzZXJpYWxp emVkIGNoYW5nZXMgYW5kIHN1YnhhY3QgaW5mby4gKi8KKwkJCXN0cmVhbV9jbGVhbnVwX2ZpbGVz KE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CisJCQlicmVhazsKKworCQljYXNlIFRS QU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJLyoK KwkJCSAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2NrIHNvIHRoYXQgcGFyYWxsZWwgYXBw bHkgd29ya2VyIGNhbgorCQkJICogY29udGludWUgdG8gcmVjZWl2ZSBhbmQgYXBwbHkgY2hhbmdl cy4KKwkJCSAqLworCQkJcGFfdW5sb2NrX3N0cmVhbSh4aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sp OworCisJCQkvKiBTZW5kIFNUUkVBTSBDT01NSVQgbWVzc2FnZSB0byB0aGUgcGFyYWxsZWwgYXBw bHkgd29ya2VyLiAqLworCQkJcGFfc2VuZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpOwor CisJCQkvKgorCQkJICogQWZ0ZXIgc2VuZGluZyB0aGUgZGF0YSB0byB0aGUgcGFyYWxsZWwgYXBw bHkgd29ya2VyLCB3YWl0IGZvcgorCQkJICogdGhhdCB3b3JrZXIgdG8gZmluaXNoLiBUaGlzIGlz IG5lY2Vzc2FyeSB0byBtYWludGFpbiBjb21taXQKKwkJCSAqIG9yZGVyIHdoaWNoIGF2b2lkcyBm YWlsdXJlcyBkdWUgdG8gdHJhbnNhY3Rpb24gZGVwZW5kZW5jaWVzIGFuZAorCQkJICogZGVhZGxv Y2tzLgorCQkJICovCisJCQlwYV93YWl0X2Zvcl94YWN0X2ZpbmlzaCh3aW5mbyk7CiAKLQkvKiB1 bmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8g Ki8KLQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQp OworCQkJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKKwkJCXN0b3JlX2ZsdXNoX3Bvc2l0aW9u KGNvbW1pdF9kYXRhLmVuZF9sc24pOworCQkJc3RvcF9za2lwcGluZ19jaGFuZ2VzKCk7CisKKwkJ CSh2b2lkKSBwYV9mcmVlX3dvcmtlcih3aW5mbywgeGlkKTsKKworCQkJLyoKKwkJCSAqIFRoZSB0 cmFuc2FjdGlvbiBpcyBlaXRoZXIgbm9uLWVtcHR5IG9yIHNraXBwZWQsIHNvIHdlIGNsZWFyIHRo ZQorCQkJICogc3Vic2tpcGxzbi4KKwkJCSAqLworCQkJY2xlYXJfc3Vic2NyaXB0aW9uX3NraXBf bHNuKGNvbW1pdF9kYXRhLmNvbW1pdF9sc24pOworCisJCQlicmVhazsKKworCQljYXNlIFRSQU5T X1BBUkFMTEVMX0FQUExZOgorCQkJbGlzdF9mcmVlKHN1YnhhY3RsaXN0KTsKKwkJCXN1YnhhY3Rs aXN0ID0gTklMOworCisJCQlhcHBseV9oYW5kbGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0 YSk7CisKKwkJCXBhX3NldF94YWN0X3N0YXRlKE15UGFyYWxsZWxTaGFyZWQsIFBBUkFMTEVMX1RS QU5TX0ZJTklTSEVEKTsKKwkJCXBhX3VubG9ja190cmFuc2FjdGlvbih4aWQsIEFjY2Vzc1NoYXJl TG9jayk7CisKKwkJCWVsb2coREVCVUcxLCAiZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgdHJhbnNh Y3Rpb24gZmluaXNoIGNvbW1hbmQiKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlBc3Nl cnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQogCiAJLyogUHJvY2VzcyBhbnkgdGFibGVzIHRoYXQg YXJlIGJlaW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4gKi8KIAlwcm9jZXNzX3N5bmNpbmdf dGFibGVzKGNvbW1pdF9kYXRhLmVuZF9sc24pOwpAQCAtMTU1NSw2ICsyMDMwLDEzIEBAIGFwcGx5 X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRh KQogCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX3RpbWVzdGFtcCA9IGNvbW1pdF9kYXRhLT5j b21taXR0aW1lOwogCiAJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCWlmIChJc1Ry YW5zYWN0aW9uQmxvY2soKSkKKwkJeworCQkJRW5kVHJhbnNhY3Rpb25CbG9jayhmYWxzZSk7CisJ CQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJfQorCiAJCXBnc3RhdF9yZXBvcnRfc3Rh dChmYWxzZSk7CiAKIAkJc3RvcmVfZmx1c2hfcG9zaXRpb24oY29tbWl0X2RhdGEtPmVuZF9sc24p OwpAQCAtMjUwNiw3ICsyOTg4LDcgQEAgYXBwbHlfaGFuZGxlX3RydW5jYXRlKFN0cmluZ0luZm8g cykKIC8qCiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9uIHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0Y2hl ci4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcykK IHsKIAlMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24gPSBwcV9nZXRtc2dieXRlKHMpOwpAQCAtMjY3 NSw2ICszMTU3LDEwIEBAIHN0b3JlX2ZsdXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIgcmVtb3RlX2xz bikKIHsKIAlGbHVzaFBvc2l0aW9uICpmbHVzaHBvczsKIAorCS8qIFNraXAgZm9yIHBhcmFsbGVs IGFwcGx5IHdvcmtlcnMuICovCisJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCQly ZXR1cm47CisKIAkvKiBOZWVkIHRvIGRvIHRoaXMgaW4gcGVybWFuZW50IGNvbnRleHQgKi8KIAlN ZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsKIApAQCAtMjczOSw2ICszMjI1LDcg QEAgTG9naWNhbFJlcEFwcGx5TG9vcChYTG9nUmVjUHRyIGxhc3RfcmVjZWl2ZWQpCiAJZXJyY2Fs bGJhY2suY2FsbGJhY2sgPSBhcHBseV9lcnJvcl9jYWxsYmFjazsKIAllcnJjYWxsYmFjay5wcmV2 aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CiAJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJj YWxsYmFjazsKKwlhcHBseV9lcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyb3JfY29udGV4dF9zdGFj azsKIAogCS8qIFRoaXMgb3V0ZXIgbG9vcCBpdGVyYXRlcyBvbmNlIHBlciB3YWl0LiAqLwogCWZv ciAoOzspCkBAIC0yOTUzLDYgKzM0NDAsNyBAQCBMb2dpY2FsUmVwQXBwbHlMb29wKFhMb2dSZWNQ dHIgbGFzdF9yZWNlaXZlZCkKIAogCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLwog CWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKKwlhcHBseV9lcnJv cl9jb250ZXh0X3N0YWNrID0gZXJyb3JfY29udGV4dF9zdGFjazsKIAogCS8qIEFsbCBkb25lICov CiAJd2FscmN2X2VuZHN0cmVhbWluZyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCAmdGxpKTsKQEAg LTMwNTMsNyArMzU0MSw3IEBAIHNlbmRfZmVlZGJhY2soWExvZ1JlY1B0ciByZWN2cG9zLCBib29s IGZvcmNlLCBib29sIHJlcXVlc3RSZXBseSkKIC8qCiAgKiBSZXJlYWQgc3Vic2NyaXB0aW9uIGlu Zm8gaWYgbmVlZGVkLiBNb3N0IGNoYW5nZXMgd2lsbCBiZSBleGl0LgogICovCi1zdGF0aWMgdm9p ZAordm9pZAogbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2b2lkKQogewogCU1lbW9yeUNvbnRl eHQgb2xkY3R4OwpAQCAtMzA4MywyMiArMzU3MSwyMiBAQCBtYXliZV9yZXJlYWRfc3Vic2NyaXB0 aW9uKHZvaWQpCiAJaWYgKCFuZXdzdWIpCiAJewogCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNn KCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNc IiB3aWxsICIKLQkJCQkJCSJzdG9wIGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMgcmVtb3Zl ZCIsCi0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJLyogdHJhbnNsYXRvcjogZmly c3QgJXMgaXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgKi8KKwkJCQko ZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHN0b3AgYmVjYXVzZSB0aGUg c3Vic2NyaXB0aW9uIHdhcyByZW1vdmVkIiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1 YnNjcmlwdGlvbi0+bmFtZSkpKTsKIAotCQlwcm9jX2V4aXQoMCk7CisJCWFwcGx5X3dvcmtlcl9j bGVhbl9leGl0KCk7CiAJfQogCiAJLyogRXhpdCBpZiB0aGUgc3Vic2NyaXB0aW9uIHdhcyBkaXNh YmxlZC4gKi8KIAlpZiAoIW5ld3N1Yi0+ZW5hYmxlZCkKIAl7CiAJCWVyZXBvcnQoTE9HLAotCQkJ CShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRp b24gXCIlc1wiIHdpbGwgIgotCQkJCQkJInN0b3AgYmVjYXVzZSB0aGUgc3Vic2NyaXB0aW9uIHdh cyBkaXNhYmxlZCIsCi0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJLyogdHJhbnNs YXRvcjogZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIg Ki8KKwkJCQkoZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHN0b3AgYmVj YXVzZSB0aGUgc3Vic2NyaXB0aW9uIHdhcyBkaXNhYmxlZCIsCisJCQkJCQlnZXRfd29ya2VyX25h bWUoKSwgTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CiAKLQkJcHJvY19leGl0KDApOworCQlhcHBs eV93b3JrZXJfY2xlYW5fZXhpdCgpOwogCX0KIAogCS8qICFzbG90bmFtZSBzaG91bGQgbmV2ZXIg aGFwcGVuIHdoZW4gZW5hYmxlZCBpcyB0cnVlLiAqLwpAQCAtMzEwOSw3ICszNTk3LDEwIEBAIG1h eWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCkKIAogCS8qCiAJICogRXhpdCBpZiBhbnkgcGFy YW1ldGVyIHRoYXQgYWZmZWN0cyB0aGUgcmVtb3RlIGNvbm5lY3Rpb24gd2FzIGNoYW5nZWQuCi0J ICogVGhlIGxhdW5jaGVyIHdpbGwgc3RhcnQgYSBuZXcgd29ya2VyLgorCSAqIFRoZSBsYXVuY2hl ciB3aWxsIHN0YXJ0IGEgbmV3IHdvcmtlciBidXQgbm90ZSB0aGF0IHRoZSBwYXJhbGxlbCBhcHBs eQorCSAqIHdvcmtlciB3b24ndCByZXN0YXJ0IGlmIHRoZSBzdHJlYW1pbmcgb3B0aW9uJ3MgdmFs dWUgaXMgY2hhbmdlZCBmcm9tCisJICogJ3BhcmFsbGVsJyB0byBhbnkgb3RoZXIgdmFsdWUgb3Ig dGhlIHNlcnZlciBkZWNpZGVzIG5vdCB0byBzdHJlYW0gdGhlCisJICogaW4tcHJvZ3Jlc3MgdHJh bnNhY3Rpb24uCiAJICovCiAJaWYgKHN0cmNtcChuZXdzdWItPmNvbm5pbmZvLCBNeVN1YnNjcmlw dGlvbi0+Y29ubmluZm8pICE9IDAgfHwKIAkJc3RyY21wKG5ld3N1Yi0+bmFtZSwgTXlTdWJzY3Jp cHRpb24tPm5hbWUpICE9IDAgfHwKQEAgLTMxMjAsMTEgKzM2MTEsMTggQEAgbWF5YmVfcmVyZWFk X3N1YnNjcmlwdGlvbih2b2lkKQogCQluZXdzdWItPm93bmVyICE9IE15U3Vic2NyaXB0aW9uLT5v d25lciB8fAogCQkhZXF1YWwobmV3c3ViLT5wdWJsaWNhdGlvbnMsIE15U3Vic2NyaXB0aW9uLT5w dWJsaWNhdGlvbnMpKQogCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCBy ZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCByZXN0 YXJ0IGJlY2F1c2Ugb2YgYSBwYXJhbWV0ZXIgY2hhbmdlIiwKLQkJCQkJCU15U3Vic2NyaXB0aW9u LT5uYW1lKSkpOworCQlpZiAoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJCQllcmVwb3J0 KExPRywKKwkJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIGxvZ2ljYWwg cmVwbGljYXRpb24gd29ya2VyICovCisJCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24g XCIlc1wiIHdpbGwgc3RvcCBiZWNhdXNlIG9mIGEgcGFyYW1ldGVyIGNoYW5nZSIsCisJCQkJCQkJ Z2V0X3dvcmtlcl9uYW1lKCksIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOworCQllbHNlCisJCQll cmVwb3J0KExPRywKKwkJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIGxv Z2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3Jp cHRpb24gXCIlc1wiIHdpbGwgcmVzdGFydCBiZWNhdXNlIG9mIGEgcGFyYW1ldGVyIGNoYW5nZSIs CisJCQkJCQkJZ2V0X3dvcmtlcl9uYW1lKCksIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOwogCi0J CXByb2NfZXhpdCgwKTsKKwkJYXBwbHlfd29ya2VyX2NsZWFuX2V4aXQoKTsKIAl9CiAKIAkvKiBD aGVjayBmb3Igb3RoZXIgY2hhbmdlcyB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4gdG9vLiAqLwpA QCAtMzYwOCwzNyArNDEwNiwxNiBAQCBzdGFydF9hcHBseShYTG9nUmVjUHRyIG9yaWdpbl9zdGFy dHBvcykKIAlQR19FTkRfVFJZKCk7CiB9CiAKLS8qIExvZ2ljYWwgUmVwbGljYXRpb24gQXBwbHkg d29ya2VyIGVudHJ5IHBvaW50ICovCisvKgorICogQ29tbW9uIGluaXRpYWxpemF0aW9uIGZvciBs ZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKgorICogSW5p dGlhbGl6ZSB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiwgaW4tbWVtb3J5IHN1YnNjcmlwdGlvbiBh bmQgbmVjZXNzYXJ5CisgKiBjb25maWcgb3B0aW9ucy4KKyAqLwogdm9pZAotQXBwbHlXb3JrZXJN YWluKERhdHVtIG1haW5fYXJnKQorSW5pdGlhbGl6ZUFwcGx5V29ya2VyKHZvaWQpCiB7Ci0JaW50 CQkJd29ya2VyX3Nsb3QgPSBEYXR1bUdldEludDMyKG1haW5fYXJnKTsKIAlNZW1vcnlDb250ZXh0 IG9sZGN0eDsKLQljaGFyCQlvcmlnaW5uYW1lW05BTUVEQVRBTEVOXTsKLQlYTG9nUmVjUHRyCW9y aWdpbl9zdGFydHBvcyA9IEludmFsaWRYTG9nUmVjUHRyOwotCWNoYXIJICAgKm15c2xvdG5hbWUg PSBOVUxMOwotCVdhbFJjdlN0cmVhbU9wdGlvbnMgb3B0aW9uczsKLQlpbnQJCQlzZXJ2ZXJfdmVy c2lvbjsKLQotCS8qIEF0dGFjaCB0byBzbG90ICovCi0JbG9naWNhbHJlcF93b3JrZXJfYXR0YWNo KHdvcmtlcl9zbG90KTsKLQotCS8qIFNldHVwIHNpZ25hbCBoYW5kbGluZyAqLwotCXBxc2lnbmFs KFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7Ci0JcHFzaWduYWwoU0lHVEVS TSwgZGllKTsKLQlCYWNrZ3JvdW5kV29ya2VyVW5ibG9ja1NpZ25hbHMoKTsKLQotCS8qCi0JICog V2UgZG9uJ3QgY3VycmVudGx5IG5lZWQgYW55IFJlc291cmNlT3duZXIgaW4gYSB3YWxyZWNlaXZl ciBwcm9jZXNzLCBidXQKLQkgKiBpZiB3ZSBkaWQsIHdlIGNvdWxkIGNhbGwgQ3JlYXRlQXV4UHJv Y2Vzc1Jlc291cmNlT3duZXIgaGVyZS4KLQkgKi8KLQotCS8qIEluaXRpYWxpc2Ugc3RhdHMgdG8g YSBzYW5pc2ggdmFsdWUgKi8KLQlNeUxvZ2ljYWxSZXBXb3JrZXItPmxhc3Rfc2VuZF90aW1lID0g TXlMb2dpY2FsUmVwV29ya2VyLT5sYXN0X3JlY3ZfdGltZSA9Ci0JCU15TG9naWNhbFJlcFdvcmtl ci0+cmVwbHlfdGltZSA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKLQotCS8qIExvYWQgdGhlIGxp YnBxLXNwZWNpZmljIGZ1bmN0aW9ucyAqLwotCWxvYWRfZmlsZSgibGlicHF3YWxyZWNlaXZlciIs IGZhbHNlKTsKIAogCS8qIFJ1biBhcyByZXBsaWNhIHNlc3Npb24gcmVwbGljYXRpb24gcm9sZS4g Ki8KIAlTZXRDb25maWdPcHRpb24oInNlc3Npb25fcmVwbGljYXRpb25fcm9sZSIsICJyZXBsaWNh IiwKQEAgLTM2NjYsMTAgKzQxNDMsMTEgQEAgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJn KQogCWlmICghTXlTdWJzY3JpcHRpb24pCiAJewogCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNn KCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1IHdp bGwgbm90ICIKLQkJCQkJCSJzdGFydCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIHJlbW92 ZWQgZHVyaW5nIHN0YXJ0dXAiLAotCQkJCQkJTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCkpKTsK LQkJcHJvY19leGl0KDApOworCQkvKiB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFtZSBvZiBsb2dp Y2FsIHJlcGxpY2F0aW9uIHdvcmtlciAqLworCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRp b24gJXUgd2lsbCBub3Qgc3RhcnQgYmVjYXVzZSB0aGUgc3Vic2NyaXB0aW9uIHdhcyByZW1vdmVk IGR1cmluZyBzdGFydHVwIiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeUxvZ2ljYWxSZXBX b3JrZXItPnN1YmlkKSkpOworCisJCWFwcGx5X3dvcmtlcl9jbGVhbl9leGl0KCk7CiAJfQogCiAJ TXlTdWJzY3JpcHRpb25WYWxpZCA9IHRydWU7CkBAIC0zNjc4LDExICs0MTU2LDExIEBAIEFwcGx5 V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKIAlpZiAoIU15U3Vic2NyaXB0aW9uLT5lbmFibGVk KQogCXsKIAkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBh cHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCBub3QgIgotCQkJCQkJInN0 YXJ0IGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMgZGlzYWJsZWQgZHVyaW5nIHN0YXJ0dXAi LAotCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisJCS8qIHRyYW5zbGF0b3I6IGZpcnN0 ICVzIGlzIHRoZSBuYW1lIG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJKGVy cm1zZygiJXMgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCBub3Qgc3RhcnQgYmVjYXVzZSB0 aGUgc3Vic2NyaXB0aW9uIHdhcyBkaXNhYmxlZCBkdXJpbmcgc3RhcnR1cCIsCisJCQkJCQlnZXRf d29ya2VyX25hbWUoKSwgTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CiAKLQkJcHJvY19leGl0KDAp OworCQlhcHBseV93b3JrZXJfY2xlYW5fZXhpdCgpOwogCX0KIAogCS8qIFNldHVwIHN5bmNocm9u b3VzIGNvbW1pdCBhY2NvcmRpbmcgdG8gdGhlIHVzZXIncyB3aXNoZXMgKi8KQEAgLTM2OTYsMTQg KzQxNzQsNTEgQEAgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCiAJaWYgKGFtX3Rh Ymxlc3luY193b3JrZXIoKSkKIAkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCBy ZXBsaWNhdGlvbiB0YWJsZSBzeW5jaHJvbml6YXRpb24gd29ya2VyIGZvciBzdWJzY3JpcHRpb24g XCIlc1wiLCB0YWJsZSBcIiVzXCIgaGFzIHN0YXJ0ZWQiLAotCQkJCQkJTXlTdWJzY3JpcHRpb24t Pm5hbWUsIGdldF9yZWxfbmFtZShNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkKSkpKTsKKwkJLyog dHJhbnNsYXRvcjogZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3 b3JrZXIgKi8KKwkJCQkoZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiwgdGFibGUg XCIlc1wiIGhhcyBzdGFydGVkIiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1YnNjcmlw dGlvbi0+bmFtZSwKKwkJCQkJCWdldF9yZWxfbmFtZShNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlk KSkpKTsKIAllbHNlCiAJCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGlj YXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIGhhcyBzdGFydGVkIiwK LQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOworCQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAl cyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciAqLworCQkJCShlcnJt c2coIiVzIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIGhhcyBzdGFydGVkIiwKKwkJCQkJCWdldF93 b3JrZXJfbmFtZSgpLCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKIAogCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworfQorCisvKiBMb2dpY2FsIFJlcGxpY2F0aW9uIEFwcGx5IHdvcmtlciBl bnRyeSBwb2ludCAqLwordm9pZAorQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQorewor CWludAkJCXdvcmtlcl9zbG90ID0gRGF0dW1HZXRJbnQzMihtYWluX2FyZyk7CisJY2hhcgkJb3Jp Z2lubmFtZVtOQU1FREFUQUxFTl07CisJWExvZ1JlY1B0cglvcmlnaW5fc3RhcnRwb3MgPSBJbnZh bGlkWExvZ1JlY1B0cjsKKwljaGFyCSAgICpteXNsb3RuYW1lID0gTlVMTDsKKwlXYWxSY3ZTdHJl YW1PcHRpb25zIG9wdGlvbnM7CisJaW50CQkJc2VydmVyX3ZlcnNpb247CisKKwkvKiBBdHRhY2gg dG8gc2xvdCAqLworCWxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaCh3b3JrZXJfc2xvdCk7CisKKwkv KiBTZXR1cCBzaWduYWwgaGFuZGxpbmcgKi8KKwlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRs ZXJGb3JDb25maWdSZWxvYWQpOworCXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7CisJQmFja2dyb3Vu ZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7CisKKwkvKgorCSAqIFdlIGRvbid0IGN1cnJlbnRseSBu ZWVkIGFueSBSZXNvdXJjZU93bmVyIGluIGEgd2FscmVjZWl2ZXIgcHJvY2VzcywgYnV0CisJICog aWYgd2UgZGlkLCB3ZSBjb3VsZCBjYWxsIENyZWF0ZUF1eFByb2Nlc3NSZXNvdXJjZU93bmVyIGhl cmUuCisJICovCisKKwkvKiBJbml0aWFsaXNlIHN0YXRzIHRvIGEgc2FuaXNoIHZhbHVlICovCisJ TXlMb2dpY2FsUmVwV29ya2VyLT5sYXN0X3NlbmRfdGltZSA9IE15TG9naWNhbFJlcFdvcmtlci0+ bGFzdF9yZWN2X3RpbWUgPQorCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnJlcGx5X3RpbWUgPSBHZXRD dXJyZW50VGltZXN0YW1wKCk7CisKKwkvKiBMb2FkIHRoZSBsaWJwcS1zcGVjaWZpYyBmdW5jdGlv bnMgKi8KKwlsb2FkX2ZpbGUoImxpYnBxd2FscmVjZWl2ZXIiLCBmYWxzZSk7CisKKwlJbml0aWFs aXplQXBwbHlXb3JrZXIoKTsKIAogCS8qIENvbm5lY3QgdG8gdGhlIG9yaWdpbiBhbmQgc3RhcnQg dGhlIHJlcGxpY2F0aW9uLiAqLwogCWVsb2coREVCVUcxLCAiY29ubmVjdGluZyB0byBwdWJsaXNo ZXIgdXNpbmcgY29ubmVjdGlvbiBzdHJpbmcgXCIlc1wiIiwKQEAgLTM3MjYsNyArNDI0MSw3IEBA IEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKIAl9CiAJZWxzZQogCXsKLQkJLyogVGhp cyBpcyBtYWluIGFwcGx5IHdvcmtlciAqLworCQkvKiBUaGlzIGlzIHRoZSBsZWFkZXIgYXBwbHkg d29ya2VyICovCiAJCVJlcE9yaWdpbklkIG9yaWdpbmlkOwogCQlUaW1lTGluZUlECXN0YXJ0cG9p bnRUTEk7CiAJCWNoYXIJICAgKmVycjsKQEAgLTM3NTAsNyArNDI2NSw3IEBAIEFwcGx5V29ya2Vy TWFpbihEYXR1bSBtYWluX2FyZykKIAkJb3JpZ2luaWQgPSByZXBsb3JpZ2luX2J5X25hbWUob3Jp Z2lubmFtZSwgdHJ1ZSk7CiAJCWlmICghT2lkSXNWYWxpZChvcmlnaW5pZCkpCiAJCQlvcmlnaW5p ZCA9IHJlcGxvcmlnaW5fY3JlYXRlKG9yaWdpbm5hbWUpOwotCQlyZXBsb3JpZ2luX3Nlc3Npb25f c2V0dXAob3JpZ2luaWQpOworCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIDAp OwogCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJCW9yaWdpbl9zdGFy dHBvcyA9IHJlcGxvcmlnaW5fc2Vzc2lvbl9nZXRfcHJvZ3Jlc3MoZmFsc2UpOwogCQlDb21taXRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKQEAgLTM3OTEsMTMgKzQzMDYsMzYgQEAgQXBwbHlXb3JrZXJN YWluKERhdHVtIG1haW5fYXJnKQogCiAJc2VydmVyX3ZlcnNpb24gPSB3YWxyY3Zfc2VydmVyX3Zl cnNpb24oTG9nUmVwV29ya2VyV2FsUmN2Q29ubik7CiAJb3B0aW9ucy5wcm90by5sb2dpY2FsLnBy b3RvX3ZlcnNpb24gPQorCQlzZXJ2ZXJfdmVyc2lvbiA+PSAxNjAwMDAgPyBMT0dJQ0FMUkVQX1BS T1RPX1NUUkVBTV9QQVJBTExFTF9WRVJTSU9OX05VTSA6CiAJCXNlcnZlcl92ZXJzaW9uID49IDE1 MDAwMCA/IExPR0lDQUxSRVBfUFJPVE9fVFdPUEhBU0VfVkVSU0lPTl9OVU0gOgogCQlzZXJ2ZXJf dmVyc2lvbiA+PSAxNDAwMDAgPyBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9WRVJTSU9OX05VTSA6 CiAJCUxPR0lDQUxSRVBfUFJPVE9fVkVSU0lPTl9OVU07CiAKIAlvcHRpb25zLnByb3RvLmxvZ2lj YWwucHVibGljYXRpb25fbmFtZXMgPSBNeVN1YnNjcmlwdGlvbi0+cHVibGljYXRpb25zOwogCW9w dGlvbnMucHJvdG8ubG9naWNhbC5iaW5hcnkgPSBNeVN1YnNjcmlwdGlvbi0+YmluYXJ5OwotCW9w dGlvbnMucHJvdG8ubG9naWNhbC5zdHJlYW1pbmcgPSBNeVN1YnNjcmlwdGlvbi0+c3RyZWFtOwor CisJLyoKKwkgKiBBc3NpZ24gdGhlIGFwcHJvcHJpYXRlIG9wdGlvbiB2YWx1ZSBmb3Igc3RyZWFt aW5nIG9wdGlvbiBhY2NvcmRpbmcgdG8KKwkgKiB0aGUgJ3N0cmVhbWluZycgbW9kZSBhbmQgdGhl IHB1Ymxpc2hlcidzIGFiaWxpdHkgdG8gc3VwcG9ydCB0aGF0IG1vZGUuCisJICovCisJaWYgKHNl cnZlcl92ZXJzaW9uID49IDE2MDAwMCAmJgorCQlNeVN1YnNjcmlwdGlvbi0+c3RyZWFtID09IFNV QlNUUkVBTV9QQVJBTExFTCkKKwl7CisJCW9wdGlvbnMucHJvdG8ubG9naWNhbC5zdHJlYW1pbmdf c3RyID0gcHN0cmR1cCgicGFyYWxsZWwiKTsKKwkJTXlMb2dpY2FsUmVwV29ya2VyLT5wYXJhbGxl bF9hcHBseSA9IHRydWU7CisJfQorCWVsc2UgaWYgKHNlcnZlcl92ZXJzaW9uID49IDE0MDAwMCAm JgorCQkJIE15U3Vic2NyaXB0aW9uLT5zdHJlYW0gIT0gU1VCU1RSRUFNX09GRikKKwl7CisJCW9w dGlvbnMucHJvdG8ubG9naWNhbC5zdHJlYW1pbmdfc3RyID0gcHN0cmR1cCgib24iKTsKKwkJTXlM b2dpY2FsUmVwV29ya2VyLT5wYXJhbGxlbF9hcHBseSA9IGZhbHNlOworCX0KKwllbHNlCisJewor CQlvcHRpb25zLnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0ciA9IE5VTEw7CisJCU15TG9naWNh bFJlcFdvcmtlci0+cGFyYWxsZWxfYXBwbHkgPSBmYWxzZTsKKwl9CisKIAlvcHRpb25zLnByb3Rv LmxvZ2ljYWwudHdvcGhhc2UgPSBmYWxzZTsKIAlvcHRpb25zLnByb3RvLmxvZ2ljYWwub3JpZ2lu ID0gcHN0cmR1cChNeVN1YnNjcmlwdGlvbi0+b3JpZ2luKTsKIApAQCAtMzgzMCwxMiArNDM2OCwx MyBAQCBBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJCX0KIAogCQllcmVwb3J0KERF QlVHMSwKLQkJCQkoZXJybXNnX2ludGVybmFsKCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdv cmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB0d29fcGhhc2UgaXMgJXMiLAotCQkJCQkJTXlT dWJzY3JpcHRpb24tPm5hbWUsCi0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+dHdvcGhhc2VzdGF0ZSA9 PSBMT0dJQ0FMUkVQX1RXT1BIQVNFX1NUQVRFX0RJU0FCTEVEID8gIkRJU0FCTEVEIiA6Ci0JCQkJ CQlNeVN1YnNjcmlwdGlvbi0+dHdvcGhhc2VzdGF0ZSA9PSBMT0dJQ0FMUkVQX1RXT1BIQVNFX1NU QVRFX1BFTkRJTkcgPyAiUEVORElORyIgOgotCQkJCQkJTXlTdWJzY3JpcHRpb24tPnR3b3BoYXNl c3RhdGUgPT0gTE9HSUNBTFJFUF9UV09QSEFTRV9TVEFURV9FTkFCTEVEID8gIkVOQUJMRUQiIDoK LQkJCQkJCSI/IikpKTsKKwkJCQkoZXJybXNnX2ludGVybmFsKCIlcyBmb3Igc3Vic2NyaXB0aW9u IFwiJXNcIiB0d29fcGhhc2UgaXMgJXMiLAorCQkJCQkJCQkgZ2V0X3dvcmtlcl9uYW1lKCksCisJ CQkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+bmFtZSwKKwkJCQkJCQkJIE15U3Vic2NyaXB0aW9uLT50 d29waGFzZXN0YXRlID09IExPR0lDQUxSRVBfVFdPUEhBU0VfU1RBVEVfRElTQUJMRUQgPyAiRElT QUJMRUQiIDoKKwkJCQkJCQkJIE15U3Vic2NyaXB0aW9uLT50d29waGFzZXN0YXRlID09IExPR0lD QUxSRVBfVFdPUEhBU0VfU1RBVEVfUEVORElORyA/ICJQRU5ESU5HIiA6CisJCQkJCQkJCSBNeVN1 YnNjcmlwdGlvbi0+dHdvcGhhc2VzdGF0ZSA9PSBMT0dJQ0FMUkVQX1RXT1BIQVNFX1NUQVRFX0VO QUJMRUQgPyAiRU5BQkxFRCIgOgorCQkJCQkJCQkgIj8iKSkpOwogCX0KIAllbHNlCiAJewpAQCAt Mzg0Niw3ICs0Mzg1LDcgQEAgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCS8qIFJ1 biB0aGUgbWFpbiBsb29wLiAqLwogCXN0YXJ0X2FwcGx5KG9yaWdpbl9zdGFydHBvcyk7CiAKLQlw cm9jX2V4aXQoMCk7CisJYXBwbHlfd29ya2VyX2NsZWFuX2V4aXQoKTsKIH0KIAogLyoKQEAgLTM4 ODIsNyArNDQyMSw3IEBAIERpc2FibGVTdWJzY3JpcHRpb25BbmRFeGl0KHZvaWQpCiAJCQllcnJt c2coInN1YnNjcmlwdGlvbiBcIiVzXCIgaGFzIGJlZW4gZGlzYWJsZWQgYmVjYXVzZSBvZiBhbiBl cnJvciIsCiAJCQkJICAgTXlTdWJzY3JpcHRpb24tPm5hbWUpKTsKIAotCXByb2NfZXhpdCgwKTsK KwlhcHBseV93b3JrZXJfY2xlYW5fZXhpdCgpOwogfQogCiAvKgpAQCAtMzg5NSw2ICs0NDM0LDE1 IEBAIElzTG9naWNhbFdvcmtlcih2b2lkKQogfQogCiAvKgorICogSXMgY3VycmVudCBwcm9jZXNz IGEgbG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXI/CisgKi8KK2Jvb2wK K0lzTG9naWNhbFBhcmFsbGVsQXBwbHlXb3JrZXIodm9pZCkKK3sKKwlyZXR1cm4gSXNMb2dpY2Fs V29ya2VyKCkgJiYgYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCk7Cit9CisKKy8qCiAgKiBTdGFy dCBza2lwcGluZyBjaGFuZ2VzIG9mIHRoZSB0cmFuc2FjdGlvbiBpZiB0aGUgZ2l2ZW4gTFNOIG1h dGNoZXMgdGhlCiAgKiBMU04gc3BlY2lmaWVkIGJ5IHN1YnNjcmlwdGlvbidzIHNraXBsc24uCiAg Ki8KQEAgLTM5NTYsNyArNDUwNCw3IEBAIGNsZWFyX3N1YnNjcmlwdGlvbl9za2lwX2xzbihYTG9n UmVjUHRyIGZpbmlzaF9sc24pCiAJWExvZ1JlY1B0cglteXNraXBsc24gPSBNeVN1YnNjcmlwdGlv bi0+c2tpcGxzbjsKIAlib29sCQlzdGFydGVkX3R4ID0gZmFsc2U7CiAKLQlpZiAobGlrZWx5KFhM b2dSZWNQdHJJc0ludmFsaWQobXlza2lwbHNuKSkpCisJaWYgKGxpa2VseShYTG9nUmVjUHRySXNJ bnZhbGlkKG15c2tpcGxzbikpIHx8IGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQogCQlyZXR1 cm47CiAKIAlpZiAoIUlzVHJhbnNhY3Rpb25TdGF0ZSgpKQpAQCAtNDAyOCw3ICs0NTc2LDcgQEAg Y2xlYXJfc3Vic2NyaXB0aW9uX3NraXBfbHNuKFhMb2dSZWNQdHIgZmluaXNoX2xzbikKIH0KIAog LyogRXJyb3IgY2FsbGJhY2sgdG8gZ2l2ZSBtb3JlIGNvbnRleHQgaW5mbyBhYm91dCB0aGUgY2hh bmdlIGJlaW5nIGFwcGxpZWQgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBhcHBseV9lcnJvcl9jYWxs YmFjayh2b2lkICphcmcpCiB7CiAJQXBwbHlFcnJvckNhbGxiYWNrQXJnICplcnJhcmcgPSAmYXBw bHlfZXJyb3JfY2FsbGJhY2tfYXJnOwpAQCAtNDA1NiwyMyArNDYwNCw0NyBAQCBhcHBseV9lcnJv cl9jYWxsYmFjayh2b2lkICphcmcpCiAJCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCwKIAkJCQkJ ICAgTFNOX0ZPUk1BVF9BUkdTKGVycmFyZy0+ZmluaXNoX2xzbikpOwogCX0KLQllbHNlIGlmIChl cnJhcmctPnJlbW90ZV9hdHRudW0gPCAwKQotCQllcnJjb250ZXh0KCJwcm9jZXNzaW5nIHJlbW90 ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4gXCIlc1wiIGR1cmluZyBtZXNzYWdlIHR5cGUg XCIlc1wiIGZvciByZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRpb24gXCIlcy4lc1wiIGluIHRyYW5z YWN0aW9uICV1LCBmaW5pc2hlZCBhdCAlWC8lWCIsCi0JCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFt ZSwKLQkJCQkgICBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShlcnJhcmctPmNvbW1hbmQpLAotCQkJ CSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNwbmFtZSwKLQkJCQkgICBlcnJhcmctPnJlbC0+ cmVtb3RlcmVsLnJlbG5hbWUsCi0JCQkJICAgZXJyYXJnLT5yZW1vdGVfeGlkLAotCQkJCSAgIExT Tl9GT1JNQVRfQVJHUyhlcnJhcmctPmZpbmlzaF9sc24pKTsKIAllbHNlCi0JCWVycmNvbnRleHQo InByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIgZHVy aW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBc IiVzLiVzXCIgY29sdW1uIFwiJXNcIiBpbiB0cmFuc2FjdGlvbiAldSwgZmluaXNoZWQgYXQgJVgv JVgiLAotCQkJCSAgIGVycmFyZy0+b3JpZ2luX25hbWUsCi0JCQkJICAgbG9naWNhbHJlcF9tZXNz YWdlX3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKLQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVs Lm5zcG5hbWUsCi0JCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5yZWxuYW1lLAotCQkJCSAg IGVycmFyZy0+cmVsLT5yZW1vdGVyZWwuYXR0bmFtZXNbZXJyYXJnLT5yZW1vdGVfYXR0bnVtXSwK LQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQsCi0JCQkJICAgTFNOX0ZPUk1BVF9BUkdTKGVycmFy Zy0+ZmluaXNoX2xzbikpOworCXsKKwkJaWYgKGVycmFyZy0+cmVtb3RlX2F0dG51bSA8IDApCisJ CXsKKwkJCWlmIChYTG9nUmVjUHRySXNJbnZhbGlkKGVycmFyZy0+ZmluaXNoX2xzbikpCisJCQkJ ZXJyY29udGV4dCgicHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2lu IFwiJXNcIiBkdXJpbmcgbWVzc2FnZSB0eXBlIFwiJXNcIiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0 IHJlbGF0aW9uIFwiJXMuJXNcIiBpbiB0cmFuc2FjdGlvbiAldSIsCisJCQkJCQkgICBlcnJhcmct Pm9yaWdpbl9uYW1lLAorCQkJCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5j b21tYW5kKSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNwbmFtZSwKKwkJCQkJ CSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVt b3RlX3hpZCk7CisJCQllbHNlCisJCQkJZXJyY29udGV4dCgicHJvY2Vzc2luZyByZW1vdGUgZGF0 YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgbWVzc2FnZSB0eXBlIFwiJXNc IiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMuJXNcIiBpbiB0cmFuc2FjdGlv biAldSwgZmluaXNoZWQgYXQgJVgvJVgiLAorCQkJCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwK KwkJCQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+Y29tbWFuZCksCisJCQkJ CQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJl bC0+cmVtb3RlcmVsLnJlbG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQsCisJCQkJ CQkgICBMU05fRk9STUFUX0FSR1MoZXJyYXJnLT5maW5pc2hfbHNuKSk7CisJCX0KKwkJZWxzZQor CQl7CisJCQlpZiAoWExvZ1JlY1B0cklzSW52YWxpZChlcnJhcmctPmZpbmlzaF9sc24pKQorCQkJ CWVycmNvbnRleHQoInByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdp biBcIiVzXCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdl dCByZWxhdGlvbiBcIiVzLiVzXCIgY29sdW1uIFwiJXNcIiBpbiB0cmFuc2FjdGlvbiAldSIsCisJ CQkJCQkgICBlcnJhcmctPm9yaWdpbl9uYW1lLAorCQkJCQkJICAgbG9naWNhbHJlcF9tZXNzYWdl X3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwu bnNwbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKKwkJCQkJ CSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwuYXR0bmFtZXNbZXJyYXJnLT5yZW1vdGVfYXR0bnVt XSwKKwkJCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCk7CisJCQllbHNlCisJCQkJZXJyY29udGV4 dCgicHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBk dXJpbmcgbWVzc2FnZSB0eXBlIFwiJXNcIiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0aW9u IFwiJXMuJXNcIiBjb2x1bW4gXCIlc1wiIGluIHRyYW5zYWN0aW9uICV1LCBmaW5pc2hlZCBhdCAl WC8lWCIsCisJCQkJCQkgICBlcnJhcmctPm9yaWdpbl9uYW1lLAorCQkJCQkJICAgbG9naWNhbHJl cF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5y ZW1vdGVyZWwubnNwbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFt ZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwuYXR0bmFtZXNbZXJyYXJnLT5yZW1v dGVfYXR0bnVtXSwKKwkJCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCwKKwkJCQkJCSAgIExTTl9G T1JNQVRfQVJHUyhlcnJhcmctPmZpbmlzaF9sc24pKTsKKwkJfQorCX0KIH0KIAogLyogU2V0IHRy YW5zYWN0aW9uIGluZm9ybWF0aW9uIG9mIGFwcGx5IGVycm9yIGNhbGxiYWNrICovCkBAIC00MDky LDMgKzQ2NjQsNTEgQEAgcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKHZvaWQpCiAJYXBw bHlfZXJyb3JfY2FsbGJhY2tfYXJnLnJlbW90ZV9hdHRudW0gPSAtMTsKIAlzZXRfYXBwbHlfZXJy b3JfY29udGV4dF94YWN0KEludmFsaWRUcmFuc2FjdGlvbklkLCBJbnZhbGlkWExvZ1JlY1B0cik7 CiB9CisKKy8qCisgKiBSZXR1cm4gdGhlIGFjdGlvbiB0byB0YWtlIGZvciB0aGUgZ2l2ZW4gdHJh bnNhY3Rpb24uICp3aW5mbyBpcyBhc3NpZ25lZCB0bworICogdGhlIGRlc3RpbmF0aW9uIHBhcmFs bGVsIHdvcmtlciBpbmZvIChpZiB0aGUgYWN0aW9uIGlzCisgKiBUUkFOU19MRUFERVJfU0VORF9U T19QQVJBTExFTCwgb3RoZXJ3aXNlICp3aW5mbyBpcyBhc3NpZ25lZCBOVUxMLgorICovCitzdGF0 aWMgVHJhbnNBcHBseUFjdGlvbgorZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbihUcmFuc2Fj dGlvbklkIHhpZCwgUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKip3aW5mbykKK3sKKwkqd2luZm8g PSBOVUxMOworCisJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCXsKKwkJcmV0dXJu IFRSQU5TX1BBUkFMTEVMX0FQUExZOworCX0KKwllbHNlIGlmIChpbl9yZW1vdGVfdHJhbnNhY3Rp b24pCisJeworCQlyZXR1cm4gVFJBTlNfTEVBREVSX0FQUExZOworCX0KKworCS8qCisJICogQ2hl Y2sgaWYgd2UgYXJlIHByb2Nlc3NpbmcgdGhpcyB0cmFuc2FjdGlvbiB1c2luZyBhIHBhcmFsbGVs IGFwcGx5CisJICogd29ya2VyLgorCSAqLworCSp3aW5mbyA9IHBhX2ZpbmRfd29ya2VyKHhpZCk7 CisKKwlpZiAoKndpbmZvKQorCXsKKwkJcmV0dXJuIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFM TEVMOworCX0KKwllbHNlCisJeworCQlyZXR1cm4gVFJBTlNfTEVBREVSX1NFUklBTElaRTsKKwl9 Cit9CisKKy8qCisgKiBFeGl0IHJvdXRpbmUgZm9yIGFwcGx5IHdvcmtlci4KKyAqLwordm9pZAor YXBwbHlfd29ya2VyX2NsZWFuX2V4aXQodm9pZCkKK3sKKwkvKiBOb3RpZnkgdGhlIGxlYWRlciBh cHBseSB3b3JrZXIgdGhhdCB3ZSBoYXZlIGV4aXRlZCBjbGVhbmx5LiAqLworCWlmIChhbV9wYXJh bGxlbF9hcHBseV93b3JrZXIoKSkKKwkJcHFfcHV0bWVzc2FnZSgnWCcsIE5VTEwsIDApOworCisJ cHJvY19leGl0KDApOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdv dXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0 cHV0LmMKaW5kZXggMmVjYWE1Yi4uYmVhZjgyNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19wdWJsaWNhdGlvbl9yZWwuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N1YnNjcmlwdGlv bi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3N1 YnNjcmlwdGlvbmNtZHMuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1 ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKQEAgLTI5MCw3ICsyOTEs NyBAQCBwYXJzZV9vdXRwdXRfcGFyYW1ldGVycyhMaXN0ICpvcHRpb25zLCBQR091dHB1dERhdGEg KmRhdGEpCiAJYm9vbAkJb3JpZ2luX29wdGlvbl9naXZlbiA9IGZhbHNlOwogCiAJZGF0YS0+Ymlu YXJ5ID0gZmFsc2U7Ci0JZGF0YS0+c3RyZWFtaW5nID0gZmFsc2U7CisJZGF0YS0+c3RyZWFtaW5n ID0gU1VCU1RSRUFNX09GRjsKIAlkYXRhLT5tZXNzYWdlcyA9IGZhbHNlOwogCWRhdGEtPnR3b19w aGFzZSA9IGZhbHNlOwogCkBAIC0zNjksNyArMzcwLDcgQEAgcGFyc2Vfb3V0cHV0X3BhcmFtZXRl cnMoTGlzdCAqb3B0aW9ucywgUEdPdXRwdXREYXRhICpkYXRhKQogCQkJCQkJIGVycm1zZygiY29u ZmxpY3Rpbmcgb3IgcmVkdW5kYW50IG9wdGlvbnMiKSkpOwogCQkJc3RyZWFtaW5nX2dpdmVuID0g dHJ1ZTsKIAotCQkJZGF0YS0+c3RyZWFtaW5nID0gZGVmR2V0Qm9vbGVhbihkZWZlbCk7CisJCQlk YXRhLT5zdHJlYW1pbmcgPSBkZWZHZXRTdHJlYW1pbmdNb2RlKGRlZmVsKTsKIAkJfQogCQllbHNl IGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0d29fcGhhc2UiKSA9PSAwKQogCQl7CkBAIC00 NjEsMTMgKzQ2MiwyMCBAQCBwZ291dHB1dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAogCQkgKiB3ZSBvbmx5IGFsbG93IGl0IHdp dGggc3VmZmljaWVudCB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCwgYW5kIHdoZW4KIAkJICogdGhl IG91dHB1dCBwbHVnaW4gc3VwcG9ydHMgaXQuCiAJCSAqLwotCQlpZiAoIWRhdGEtPnN0cmVhbWlu ZykKKwkJaWYgKGRhdGEtPnN0cmVhbWluZyA9PSBTVUJTVFJFQU1fT0ZGKQogCQkJY3R4LT5zdHJl YW1pbmcgPSBmYWxzZTsKLQkJZWxzZSBpZiAoZGF0YS0+cHJvdG9jb2xfdmVyc2lvbiA8IExPR0lD QUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJT05fTlVNKQorCQllbHNlIGlmIChkYXRhLT5zdHJlYW1p bmcgPT0gU1VCU1RSRUFNX09OICYmCisJCQkJIGRhdGEtPnByb3RvY29sX3ZlcnNpb24gPCBMT0dJ Q0FMUkVQX1BST1RPX1NUUkVBTV9WRVJTSU9OX05VTSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCQkgZXJybXNn KCJyZXF1ZXN0ZWQgcHJvdG9fdmVyc2lvbj0lZCBkb2VzIG5vdCBzdXBwb3J0IHN0cmVhbWluZywg bmVlZCAlZCBvciBoaWdoZXIiLAogCQkJCQkJCWRhdGEtPnByb3RvY29sX3ZlcnNpb24sIExPR0lD QUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJT05fTlVNKSkpOworCQllbHNlIGlmIChkYXRhLT5zdHJl YW1pbmcgPT0gU1VCU1RSRUFNX1BBUkFMTEVMICYmCisJCQkJIGRhdGEtPnByb3RvY29sX3ZlcnNp b24gPCBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9WRVJTSU9OX05VTSkKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCQkgZXJybXNnKCJyZXF1ZXN0ZWQgcHJvdG9fdmVyc2lvbj0lZCBkb2VzIG5vdCBz dXBwb3J0IHBhcmFsbGVsIHN0cmVhbWluZywgbmVlZCAlZCBvciBoaWdoZXIiLAorCQkJCQkJCWRh dGEtPnByb3RvY29sX3ZlcnNpb24sIExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZF UlNJT05fTlVNKSkpOwogCQllbHNlIGlmICghY3R4LT5zdHJlYW1pbmcpCiAJCQllcmVwb3J0KEVS Uk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKQEAg LTE4MzksNiArMTg0Nyw4IEBAIHBnb3V0cHV0X3N0cmVhbV9hYm9ydChzdHJ1Y3QgTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkgIFhMb2dSZWNQdHIgYWJvcnRfbHNuKQogewogCVJl b3JkZXJCdWZmZXJUWE4gKnRvcHR4bjsKKwlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRwdXRE YXRhICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCWJvb2wJCXdyaXRlX2Fib3J0X2lu Zm8gPSAoZGF0YS0+c3RyZWFtaW5nID09IFNVQlNUUkVBTV9QQVJBTExFTCk7CiAKIAkvKgogCSAq IFRoZSBhYm9ydCBzaG91bGQgaGFwcGVuIG91dHNpZGUgc3RyZWFtaW5nIGJsb2NrLCBldmVuIGZv ciBzdHJlYW1lZApAQCAtMTg1Miw3ICsxODYyLDkgQEAgcGdvdXRwdXRfc3RyZWFtX2Fib3J0KHN0 cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJQXNzZXJ0KHJidHhuX2lzX3N0cmVh bWVkKHRvcHR4bikpOwogCiAJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7Ci0J bG9naWNhbHJlcF93cml0ZV9zdHJlYW1fYWJvcnQoY3R4LT5vdXQsIHRvcHR4bi0+eGlkLCB0eG4t PnhpZCk7CisJbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fYWJvcnQoY3R4LT5vdXQsIHRvcHR4bi0+ eGlkLCB0eG4tPnhpZCwgYWJvcnRfbHNuLAorCQkJCQkJCQkgIHR4bi0+eGFjdF90aW1lLmFib3J0 X3RpbWUsIHdyaXRlX2Fib3J0X2luZm8pOworCiAJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVl KTsKIAogCWNsZWFudXBfcmVsX3N5bmNfY2FjaGUodG9wdHhuLT54aWQsIGZhbHNlKTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwppbmRleCA3NzY3NjU3Li43YzAwOWQ1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAi Y29tbWFuZHMvYXN5bmMuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0 YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vd2Fsc2VuZGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jb25kaXRpb25fdmFy aWFibGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgpAQCAtNjU3LDYgKzY1OCw5IEBAIHBy b2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdTKQogCWlmIChDaGVja1Byb2NTaWdu YWwoUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQpKQogCQlIYW5kbGVMb2dNZW1vcnlDb250ZXh0 SW50ZXJydXB0KCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUEFSQUxMRUxfQVBQ TFlfTUVTU0FHRSkpCisJCUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50ZXJydXB0KCk7CisK IAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0Up KQogCQlSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1Rf REFUQUJBU0UpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1nci5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xtZ3IuYwppbmRleCAxMDQzMDY4Li4yZjE3MWY1 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1nci5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdyLmMKQEAgLTExMTcsNiArMTExNyw0NSBAQCBVbmxvY2tT aGFyZWRPYmplY3RGb3JTZXNzaW9uKE9pZCBjbGFzc2lkLCBPaWQgb2JqaWQsIHVpbnQxNiBvYmpz dWJpZCwKIAlMb2NrUmVsZWFzZSgmdGFnLCBsb2NrbW9kZSwgdHJ1ZSk7CiB9CiAKKy8qCisgKgkJ TG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JTZXNzaW9uCisgKgorICogT2J0YWluIGEgc2Vzc2lvbi1s ZXZlbCBsb2NrIG9uIGEgdHJhbnNhY3Rpb24gYmVpbmcgYXBwbGllZCBvbiBhIGxvZ2ljYWwKKyAq IHJlcGxpY2F0aW9uIHN1YnNjcmliZXIuIFNlZSBMb2NrUmVsYXRpb25JZEZvclNlc3Npb24gZm9y IG5vdGVzIGFib3V0CisgKiBzZXNzaW9uLWxldmVsIGxvY2tzLgorICovCit2b2lkCitMb2NrQXBw bHlUcmFuc2FjdGlvbkZvclNlc3Npb24oT2lkIHN1Ym9pZCwgVHJhbnNhY3Rpb25JZCB4aWQsIHVp bnQxNiBvYmppZCwKKwkJCQkJCQkgICBMT0NLTU9ERSBsb2NrbW9kZSkKK3sKKwlMT0NLVEFHCQl0 YWc7CisKKwlTRVRfTE9DS1RBR19BUFBMWV9UUkFOU0FDVElPTih0YWcsCisJCQkJCQkJCSAgTXlE YXRhYmFzZUlkLAorCQkJCQkJCQkgIHN1Ym9pZCwKKwkJCQkJCQkJICB4aWQsCisJCQkJCQkJCSAg b2JqaWQpOworCisJKHZvaWQpIExvY2tBY3F1aXJlKCZ0YWcsIGxvY2ttb2RlLCB0cnVlLCBmYWxz ZSk7Cit9CisKKy8qCisgKgkJVW5sb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24KKyAqLwor dm9pZAorVW5sb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24oT2lkIHN1Ym9pZCwgVHJhbnNh Y3Rpb25JZCB4aWQsIHVpbnQxNiBvYmppZCwKKwkJCQkJCQkJIExPQ0tNT0RFIGxvY2ttb2RlKQor eworCUxPQ0tUQUcJCXRhZzsKKworCVNFVF9MT0NLVEFHX0FQUExZX1RSQU5TQUNUSU9OKHRhZywK KwkJCQkJCQkJICBNeURhdGFiYXNlSWQsCisJCQkJCQkJCSAgc3Vib2lkLAorCQkJCQkJCQkgIHhp ZCwKKwkJCQkJCQkJICBvYmppZCk7CisKKwlMb2NrUmVsZWFzZSgmdGFnLCBsb2NrbW9kZSwgdHJ1 ZSk7Cit9CiAKIC8qCiAgKiBBcHBlbmQgYSBkZXNjcmlwdGlvbiBvZiBhIGxvY2thYmxlIG9iamVj dCB0byBidWYuCkBAIC0xMjAyLDYgKzEyNDEsMTMgQEAgRGVzY3JpYmVMb2NrVGFnKFN0cmluZ0lu Zm8gYnVmLCBjb25zdCBMT0NLVEFHICp0YWcpCiAJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDMs CiAJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDQpOwogCQkJYnJlYWs7CisJCWNhc2UgTE9DS1RB R19BUFBMWV9UUkFOU0FDVElPTjoKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLAorCQkJCQkJCSBf KCJyZW1vdGUgdHJhbnNhY3Rpb24gJXUgb2Ygc3Vic2NyaXB0aW9uICV1IG9mIGRhdGFiYXNlICV1 IiksCisJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDMsCisJCQkJCQkJIHRhZy0+bG9ja3RhZ19m aWVsZDIsCisJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDEpOworCQkJYnJlYWs7CiAJCWRlZmF1 bHQ6CiAJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwKIAkJCQkJCQkgXygidW5yZWNvZ25pemVkIGxv Y2t0YWcgdHlwZSAlZCIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5j IGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IDMwODIwOTMuLmY1MmU1YmEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90 Y29wL3Bvc3RncmVzLmMKQEAgLTMzNzksNiArMzM3OSw5IEBAIFByb2Nlc3NJbnRlcnJ1cHRzKHZv aWQpCiAKIAlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcpCiAJCVByb2Nlc3NMb2dNZW1vcnlD b250ZXh0SW50ZXJydXB0KCk7CisKKwlpZiAoUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nKQor CQlIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZXMoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3dhaXRfZXZlbnQuYwppbmRleCBiMmFiZDc1Li4xZmFiNDVlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCkBAIC0yMzAsNiArMjMwLDkgQEAgcGdzdGF0 X2dldF93YWl0X2FjdGl2aXR5KFdhaXRFdmVudEFjdGl2aXR5IHcpCiAJCWNhc2UgV0FJVF9FVkVO VF9MT0dJQ0FMX0xBVU5DSEVSX01BSU46CiAJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxMYXVuY2hl ck1haW4iOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQ UExZX01BSU46CisJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxQYXJhbGxlbEFwcGx5TWFpbiI7CisJ CQlicmVhazsKIAkJY2FzZSBXQUlUX0VWRU5UX1JFQ09WRVJZX1dBTF9TVFJFQU06CiAJCQlldmVu dF9uYW1lID0gIlJlY292ZXJ5V2FsU3RyZWFtIjsKIAkJCWJyZWFrOwpAQCAtMzg4LDYgKzM5MSw5 IEBAIHBnc3RhdF9nZXRfd2FpdF9pcGMoV2FpdEV2ZW50SVBDIHcpCiAJCWNhc2UgV0FJVF9FVkVO VF9IQVNIX0dST1dfQlVDS0VUU19SRUlOU0VSVDoKIAkJCWV2ZW50X25hbWUgPSAiSGFzaEdyb3dC dWNrZXRzUmVpbnNlcnQiOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9FVkVOVF9MT0dJQ0FMX1BB UkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRToKKwkJCWV2ZW50X25hbWUgPSAiTG9naWNhbFBhcmFs bGVsQXBwbHlTdGF0ZUNoYW5nZSI7CisJCQlicmVhazsKIAkJY2FzZSBXQUlUX0VWRU5UX0xPR0lD QUxfU1lOQ19EQVRBOgogCQkJZXZlbnRfbmFtZSA9ICJMb2dpY2FsU3luY0RhdGEiOwogCQkJYnJl YWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMKaW5kZXggZjliMzI0ZS4uM2JmMDQ4MyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xvY2tmdW5jcy5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3MuYwpAQCAtMzcsMTAgKzM3LDExIEBAIGNvbnN0IGNoYXIg KmNvbnN0IExvY2tUYWdUeXBlTmFtZXNbXSA9IHsKIAkic3BlY3Rva2VuIiwKIAkib2JqZWN0IiwK IAkidXNlcmxvY2siLAotCSJhZHZpc29yeSIKKwkiYWR2aXNvcnkiLAorCSJhcHBseXRyYW5zYWN0 aW9uIgogfTsKIAotU3RhdGljQXNzZXJ0RGVjbChsZW5ndGhvZihMb2NrVGFnVHlwZU5hbWVzKSA9 PSAoTE9DS1RBR19BRFZJU09SWSArIDEpLAorU3RhdGljQXNzZXJ0RGVjbChsZW5ndGhvZihMb2Nr VGFnVHlwZU5hbWVzKSA9PSAoTE9DS1RBR19MQVNUX1RZUEUgKyAxKSwKIAkJCQkgImFycmF5IGxl bmd0aCBtaXNtYXRjaCIpOwogCiAvKiBUaGlzIG11c3QgbWF0Y2ggZW51bSBQcmVkaWNhdGVMb2Nr VGFyZ2V0VHlwZSAocHJlZGljYXRlX2ludGVybmFscy5oKSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y190YWJsZXMuYwppbmRleCAzNDlkZDZhLi5hZjY3OWU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y190YWJsZXMuYwpAQCAtMjk4Miw2ICsyOTgyLDE4IEBAIHN0cnVjdCBjb25maWdfaW50IENvbmZp Z3VyZU5hbWVzSW50W10gPQogCX0sCiAKIAl7CisJCXsibWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtl cnNfcGVyX3N1YnNjcmlwdGlvbiIsCisJCQlQR0NfU0lHSFVQLAorCQkJUkVQTElDQVRJT05fU1VC U0NSSUJFUlMsCisJCQlnZXR0ZXh0X25vb3AoIk1heGltdW0gbnVtYmVyIG9mIHBhcmFsbGVsIGFw cGx5IHdvcmtlcnMgcGVyIHN1YnNjcmlwdGlvbi4iKSwKKwkJCU5VTEwsCisJCX0sCisJCSZtYXhf cGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uLAorCQkyLCAwLCBNQVhfUEFS QUxMRUxfV09SS0VSX0xJTUlULAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKworCXsKIAkJeyJs b2dfcm90YXRpb25fYWdlIiwgUEdDX1NJR0hVUCwgTE9HR0lOR19XSEVSRSwKIAkJCWdldHRleHRf bm9vcCgiU2V0cyB0aGUgYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgZm9yY2luZyAiCiAJ CQkJCQkgImxvZyBmaWxlIHJvdGF0aW9uLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IDg2OGQyMWMuLjRkMDFjYTkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTM2MCw2ICszNjAs NyBAQAogI21heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMgPSA0CSMgdGFrZW4gZnJvbSBt YXhfd29ya2VyX3Byb2Nlc3NlcwogCQkJCQkjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKICNt YXhfc3luY193b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gPSAyCSMgdGFrZW4gZnJvbSBtYXhfbG9n aWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzCisjbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVy X3N1YnNjcmlwdGlvbiA9IDIJIyB0YWtlbiBmcm9tIG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dv cmtlcnMKIAogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCBkYTQyN2Y0 Li41MTQxYTY2IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTQ0ODEsNyArNDQ4MSw3IEBAIGdldFN1YnNjcmlw dGlvbnMoQXJjaGl2ZSAqZm91dCkKIAlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNDAwMDAp CiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiIHMuc3Vic3RyZWFtLFxuIik7CiAJZWxz ZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiBmYWxzZSBBUyBzdWJzdHJlYW0sXG4i KTsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgJ2YnIEFTIHN1YnN0cmVhbSxcbiIp OwogCiAJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTUwMDAwKQogCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihxdWVyeSwKQEAgLTQ2MTgsOCArNDYxOCwxMCBAQCBkdW1wU3Vic2NyaXB0aW9uKEFy Y2hpdmUgKmZvdXQsIGNvbnN0IFN1YnNjcmlwdGlvbkluZm8gKnN1YmluZm8pCiAJaWYgKHN0cmNt cChzdWJpbmZvLT5zdWJiaW5hcnksICJ0IikgPT0gMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo cXVlcnksICIsIGJpbmFyeSA9IHRydWUiKTsKIAotCWlmIChzdHJjbXAoc3ViaW5mby0+c3Vic3Ry ZWFtLCAiZiIpICE9IDApCisJaWYgKHN0cmNtcChzdWJpbmZvLT5zdWJzdHJlYW0sICJ0IikgPT0g MCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIHN0cmVhbWluZyA9IG9uIik7CisJ ZWxzZSBpZiAoc3RyY21wKHN1YmluZm8tPnN1YnN0cmVhbSwgInAiKSA9PSAwKQorCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgc3RyZWFtaW5nID0gcGFyYWxsZWwiKTsKIAogCWlmIChz dHJjbXAoc3ViaW5mby0+c3VidHdvcGhhc2VzdGF0ZSwgdHdvX3BoYXNlX2Rpc2FibGVkKSAhPSAw KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgdHdvX3BoYXNlID0gb24iKTsKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJl LmMKaW5kZXggMmVhZTUxOS4uNzQwYjEzNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2Ny aWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTY0OTksMTEgKzY0OTksMjQg QEAgZGVzY3JpYmVTdWJzY3JpcHRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGJvb2wgdmVyYm9z ZSkKIAl7CiAJCS8qIEJpbmFyeSBtb2RlIGFuZCBzdHJlYW1pbmcgYXJlIG9ubHkgc3VwcG9ydGVk IGluIHYxNCBhbmQgaGlnaGVyICovCiAJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE0MDAwMCkKKwkJ ewogCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKLQkJCQkJCQkgICIsIHN1YmJpbmFyeSBBUyBc IiVzXCJcbiIKLQkJCQkJCQkgICIsIHN1YnN0cmVhbSBBUyBcIiVzXCJcbiIsCi0JCQkJCQkJICBn ZXR0ZXh0X25vb3AoIkJpbmFyeSIpLAotCQkJCQkJCSAgZ2V0dGV4dF9ub29wKCJTdHJlYW1pbmci KSk7CisJCQkJCQkJICAiLCBzdWJiaW5hcnkgQVMgXCIlc1wiXG4iLAorCQkJCQkJCSAgZ2V0dGV4 dF9ub29wKCJCaW5hcnkiKSk7CisKKwkJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE2MDAwMCkKKwkJ CQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJCQkgICIsIChDQVNFIHN1YnN0cmVhbVxu IgorCQkJCQkJCQkgICIgICAgV0hFTiAnZicgVEhFTiAnb2ZmJ1xuIgorCQkJCQkJCQkgICIgICAg V0hFTiAndCcgVEhFTiAnb24nXG4iCisJCQkJCQkJCSAgIiAgICBXSEVOICdwJyBUSEVOICdwYXJh bGxlbCdcbiIKKwkJCQkJCQkJICAiICAgRU5EKSBBUyBcIiVzXCJcbiIsCisJCQkJCQkJCSAgZ2V0 dGV4dF9ub29wKCJTdHJlYW1pbmciKSk7CisJCQllbHNlCisJCQkJYXBwZW5kUFFFeHBCdWZmZXIo JmJ1ZiwKKwkJCQkJCQkJICAiLCBzdWJzdHJlYW0gQVMgXCIlc1wiXG4iLAorCQkJCQkJCQkgIGdl dHRleHRfbm9vcCgiU3RyZWFtaW5nIikpOworCQl9CiAKIAkJLyogVHdvX3BoYXNlIGFuZCBkaXNh YmxlX29uX2Vycm9yIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiB2MTUgYW5kIGhpZ2hlciAqLwogCQlp ZiAocHNldC5zdmVyc2lvbiA+PSAxNTAwMDApCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3N1YnNjcmlwdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRp b24uaAppbmRleCA3Yjk4NzE0Li4wMTZhZmJjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3N1YnNjcmlwdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2Ny aXB0aW9uLmgKQEAgLTgwLDcgKzgwLDggQEAgQ0FUQUxPRyhwZ19zdWJzY3JpcHRpb24sNjEwMCxT dWJzY3JpcHRpb25SZWxhdGlvbklkKSBCS0lfU0hBUkVEX1JFTEFUSU9OIEJLSV9ST1cKIAlib29s CQlzdWJiaW5hcnk7CQkvKiBUcnVlIGlmIHRoZSBzdWJzY3JpcHRpb24gd2FudHMgdGhlCiAJCQkJ CQkJCSAqIHB1Ymxpc2hlciB0byBzZW5kIGRhdGEgaW4gYmluYXJ5ICovCiAKLQlib29sCQlzdWJz dHJlYW07CQkvKiBTdHJlYW0gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLiAqLworCWNoYXIJCXN1 YnN0cmVhbTsJCS8qIFN0cmVhbSBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuIFNlZQorCQkJCQkJ CQkgKiBTVUJTVFJFQU1feHh4IGNvbnN0YW50cy4gKi8KIAogCWNoYXIJCXN1YnR3b3BoYXNlc3Rh dGU7CS8qIFN0cmVhbSB0d28tcGhhc2UgdHJhbnNhY3Rpb25zICovCiAKQEAgLTEyNCw3ICsxMjUs OCBAQCB0eXBlZGVmIHN0cnVjdCBTdWJzY3JpcHRpb24KIAlib29sCQllbmFibGVkOwkJLyogSW5k aWNhdGVzIGlmIHRoZSBzdWJzY3JpcHRpb24gaXMgZW5hYmxlZCAqLwogCWJvb2wJCWJpbmFyeTsJ CQkvKiBJbmRpY2F0ZXMgaWYgdGhlIHN1YnNjcmlwdGlvbiB3YW50cyBkYXRhIGluCiAJCQkJCQkJ CSAqIGJpbmFyeSBmb3JtYXQgKi8KLQlib29sCQlzdHJlYW07CQkJLyogQWxsb3cgc3RyZWFtaW5n IGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4gKi8KKwljaGFyCQlzdHJlYW07CQkJLyogQWxsb3cg c3RyZWFtaW5nIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4KKwkJCQkJCQkJICogU2VlIFNVQlNU UkVBTV94eHggY29uc3RhbnRzLiAqLwogCWNoYXIJCXR3b3BoYXNlc3RhdGU7CS8qIEFsbG93IHN0 cmVhbWluZyB0d28tcGhhc2UgdHJhbnNhY3Rpb25zICovCiAJYm9vbAkJZGlzYWJsZW9uZXJyOwkv KiBJbmRpY2F0ZXMgaWYgdGhlIHN1YnNjcmlwdGlvbiBzaG91bGQgYmUKIAkJCQkJCQkJICogYXV0 b21hdGljYWxseSBkaXNhYmxlZCBpZiBhIHdvcmtlciBlcnJvcgpAQCAtMTM3LDYgKzEzOSwyMSBA QCB0eXBlZGVmIHN0cnVjdCBTdWJzY3JpcHRpb24KIAkJCQkJCQkJICogc3BlY2lmaWVkIG9yaWdp biAqLwogfSBTdWJzY3JpcHRpb247CiAKKy8qIERpc2FsbG93IHN0cmVhbWluZyBpbi1wcm9ncmVz cyB0cmFuc2FjdGlvbnMuICovCisjZGVmaW5lIFNVQlNUUkVBTV9PRkYgJ2YnCisKKy8qCisgKiBT dHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIGFyZSB3cml0dGVuIHRvIGEgdGVtcG9y YXJ5IGZpbGUgYW5kCisgKiBhcHBsaWVkIG9ubHkgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzIGNv bW1pdHRlZCBvbiB1cHN0cmVhbS4KKyAqLworI2RlZmluZSBTVUJTVFJFQU1fT04gJ3QnCisKKy8q CisgKiBTdHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIGFyZSBhcHBsaWVkIGltbWVk aWF0ZWx5IHZpYSBhIHBhcmFsbGVsCisgKiBhcHBseSB3b3JrZXIuCisgKi8KKyNkZWZpbmUgU1VC U1RSRUFNX1BBUkFMTEVMICdwJworCiBleHRlcm4gU3Vic2NyaXB0aW9uICpHZXRTdWJzY3JpcHRp b24oT2lkIHN1YmlkLCBib29sIG1pc3Npbmdfb2spOwogZXh0ZXJuIHZvaWQgRnJlZVN1YnNjcmlw dGlvbihTdWJzY3JpcHRpb24gKnN1Yik7CiBleHRlcm4gdm9pZCBEaXNhYmxlU3Vic2NyaXB0aW9u KE9pZCBzdWJpZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zdWJzY3JpcHRp b25jbWRzLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmgKaW5kZXgg MmNiZTdkNy4uNzc5NDc0ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc3Vic2Ny aXB0aW9uY21kcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMu aApAQCAtMjYsNCArMjYsNiBAQCBleHRlcm4gdm9pZCBEcm9wU3Vic2NyaXB0aW9uKERyb3BTdWJz Y3JpcHRpb25TdG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwpOwogZXh0ZXJuIE9iamVjdEFkZHJl c3MgQWx0ZXJTdWJzY3JpcHRpb25Pd25lcihjb25zdCBjaGFyICpuYW1lLCBPaWQgbmV3T3duZXJJ ZCk7CiBleHRlcm4gdm9pZCBBbHRlclN1YnNjcmlwdGlvbk93bmVyX29pZChPaWQgc3ViaWQsIE9p ZCBuZXdPd25lcklkKTsKIAorZXh0ZXJuIGNoYXIgZGVmR2V0U3RyZWFtaW5nTW9kZShEZWZFbGVt ICpkZWYpOworCiAjZW5kaWYJCQkJCQkJLyogU1VCU0NSSVBUSU9OQ01EU19IICovCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCBiL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oCmluZGV4IGYxZTI4MjEuLmQ1MTNlZjUg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oCisr KyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oCkBAIC0xNCw2ICsx NCw3IEBACiAKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25f d29ya2VyczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vi c2NyaXB0aW9uOworZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxfYXBwbHlfd29y a2Vyc19wZXJfc3Vic2NyaXB0aW9uOwogCiBleHRlcm4gdm9pZCBBcHBseUxhdW5jaGVyUmVnaXN0 ZXIodm9pZCk7CiBleHRlcm4gdm9pZCBBcHBseUxhdW5jaGVyTWFpbihEYXR1bSBtYWluX2FyZyk7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCmluZGV4IDdlYWE0YzkuLjFkYTdi MDEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCisr KyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCkBAIC0zMiwxMiArMzIs MTcgQEAKICAqCiAgKiBMT0dJQ0FMUkVQX1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVNIGlzIHRo ZSBtaW5pbXVtIHByb3RvY29sIHZlcnNpb24gd2l0aAogICogc3VwcG9ydCBmb3IgdHdvLXBoYXNl IGNvbW1pdCBkZWNvZGluZyAoYXQgcHJlcGFyZSB0aW1lKS4gSW50cm9kdWNlZCBpbiBQRzE1Lgor ICoKKyAqIExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNIGlzIHRo ZSBtaW5pbXVtIHByb3RvY29sIHZlcnNpb24KKyAqIHdoZXJlIHdlIHN1cHBvcnQgYXBwbHlpbmcg bGFyZ2Ugc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBpbiBwYXJhbGxlbC4KKyAqIEludHJvZHVjZWQg aW4gUEcxNi4KICAqLwogI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX01JTl9WRVJTSU9OX05VTSAx CiAjZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9fVkVSU0lPTl9OVU0gMQogI2RlZmluZSBMT0dJQ0FM UkVQX1BST1RPX1NUUkVBTV9WRVJTSU9OX05VTSAyCiAjZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9f VFdPUEhBU0VfVkVSU0lPTl9OVU0gMwotI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX01BWF9WRVJT SU9OX05VTSBMT0dJQ0FMUkVQX1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVNCisjZGVmaW5lIExP R0lDQUxSRVBfUFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNIDQKKyNkZWZpbmUgTE9H SUNBTFJFUF9QUk9UT19NQVhfVkVSU0lPTl9OVU0gTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fUEFS QUxMRUxfVkVSU0lPTl9OVU0KIAogLyoKICAqIExvZ2ljYWwgbWVzc2FnZSB0eXBlcwpAQCAtMTc1 LDYgKzE4MCwxNyBAQCB0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVwUm9sbGJhY2tQcmVwYXJlZFR4 bkRhdGEKIAljaGFyCQlnaWRbR0lEU0laRV07CiB9IExvZ2ljYWxSZXBSb2xsYmFja1ByZXBhcmVk VHhuRGF0YTsKIAorLyoKKyAqIFRyYW5zYWN0aW9uIHByb3RvY29sIGluZm9ybWF0aW9uIGZvciBz dHJlYW0gYWJvcnQuCisgKi8KK3R5cGVkZWYgc3RydWN0IExvZ2ljYWxSZXBTdHJlYW1BYm9ydERh dGEKK3sKKwlUcmFuc2FjdGlvbklkIHhpZDsKKwlUcmFuc2FjdGlvbklkIHN1YnhpZDsKKwlYTG9n UmVjUHRyCWFib3J0X2xzbjsKKwlUaW1lc3RhbXBUeiBhYm9ydF90aW1lOworfSBMb2dpY2FsUmVw U3RyZWFtQWJvcnREYXRhOworCiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX2JlZ2luKFN0 cmluZ0luZm8gb3V0LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4pOwogZXh0ZXJuIHZvaWQgbG9naWNh bHJlcF9yZWFkX2JlZ2luKFN0cmluZ0luZm8gaW4sCiAJCQkJCQkJCSAgTG9naWNhbFJlcEJlZ2lu RGF0YSAqYmVnaW5fZGF0YSk7CkBAIC0yNDYsOSArMjYyLDEzIEBAIGV4dGVybiB2b2lkIGxvZ2lj YWxyZXBfd3JpdGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIG91dCwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuCiBleHRlcm4gVHJhbnNhY3Rpb25JZCBsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2NvbW1p dChTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkJCQkJICAgTG9naWNhbFJlcENvbW1pdERhdGEgKmNv bW1pdF9kYXRhKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFtX2Fib3J0KFN0 cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKLQkJCQkJCQkJCQkgIFRyYW5zYWN0aW9u SWQgc3VieGlkKTsKLWV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJvcnQoU3Ry aW5nSW5mbyBpbiwgVHJhbnNhY3Rpb25JZCAqeGlkLAotCQkJCQkJCQkJCSBUcmFuc2FjdGlvbklk ICpzdWJ4aWQpOworCQkJCQkJCQkJCSAgVHJhbnNhY3Rpb25JZCBzdWJ4aWQsCisJCQkJCQkJCQkJ ICBYTG9nUmVjUHRyIGFib3J0X2xzbiwKKwkJCQkJCQkJCQkgIFRpbWVzdGFtcFR6IGFib3J0X3Rp bWUsCisJCQkJCQkJCQkJICBib29sIHdyaXRlX2Fib3J0X2luZm8pOworZXh0ZXJuIHZvaWQgbG9n aWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIGluLAorCQkJCQkJCQkJCSBMb2dp Y2FsUmVwU3RyZWFtQWJvcnREYXRhICphYm9ydF9kYXRhLAorCQkJCQkJCQkJCSBib29sIHJlYWRf YWJvcnRfaW5mbyk7CiBleHRlcm4gY2hhciAqbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoTG9naWNh bFJlcE1zZ1R5cGUgYWN0aW9uKTsKIAogI2VuZGlmCQkJCQkJCS8qIExPR0lDQUxfUFJPVE9fSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oCmluZGV4IGNkMWI2ZTguLmRj NjhjZDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIu aAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgKQEAgLTEyLDgg KzEyLDE2IEBACiAjaWZuZGVmIExPR0lDQUxXT1JLRVJfSAogI2RlZmluZSBMT0dJQ0FMV09SS0VS X0gKIAorI2luY2x1ZGUgPHNpZ25hbC5oPgorCitleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUg c2lnX2F0b21pY190IFBhcmFsbGVsQXBwbHlNZXNzYWdlUGVuZGluZzsKKwogZXh0ZXJuIHZvaWQg QXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKTsKK2V4dGVybiB2b2lkIFBhcmFsbGVsQXBw bHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKTsKIAogZXh0ZXJuIGJvb2wgSXNMb2dpY2FsV29y a2VyKHZvaWQpOworZXh0ZXJuIGJvb2wgSXNMb2dpY2FsUGFyYWxsZWxBcHBseVdvcmtlcih2b2lk KTsKK2V4dGVybiB2b2lkIEhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50ZXJydXB0KHZvaWQp OworZXh0ZXJuIHZvaWQgSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VzKHZvaWQpOwogCiAjZW5k aWYJCQkJCQkJLyogTE9HSUNBTFdPUktFUl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9vcmlnaW4uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oCmlu ZGV4IDJhNTBkMTAuLmM3YjFhZGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L29yaWdpbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oCkBAIC01Myw3 ICs1Myw3IEBAIGV4dGVybiBYTG9nUmVjUHRyIHJlcGxvcmlnaW5fZ2V0X3Byb2dyZXNzKFJlcE9y aWdpbklkIG5vZGUsIGJvb2wgZmx1c2gpOwogCiBleHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Np b25fYWR2YW5jZShYTG9nUmVjUHRyIHJlbW90ZV9jb21taXQsCiAJCQkJCQkJCQkgICBYTG9nUmVj UHRyIGxvY2FsX2NvbW1pdCk7Ci1leHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAo UmVwT3JpZ2luSWQgbm9kZSk7CitleHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAo UmVwT3JpZ2luSWQgbm9kZSwgaW50IGFjcXVpcmVkX2J5KTsKIGV4dGVybiB2b2lkIHJlcGxvcmln aW5fc2Vzc2lvbl9yZXNldCh2b2lkKTsKIGV4dGVybiBYTG9nUmVjUHRyIHJlcGxvcmlnaW5fc2Vz c2lvbl9nZXRfcHJvZ3Jlc3MoYm9vbCBmbHVzaCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1 dC5oCmluZGV4IDAyMDI3NTUuLjNjMzBkYTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQu aApAQCAtMjYsNyArMjYsNyBAQCB0eXBlZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAlMaXN0CSAg ICpwdWJsaWNhdGlvbl9uYW1lczsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbnM7CiAJYm9vbAkJYmlu YXJ5OwotCWJvb2wJCXN0cmVhbWluZzsKKwljaGFyCQlzdHJlYW1pbmc7CiAJYm9vbAkJbWVzc2Fn ZXM7CiAJYm9vbAkJdHdvX3BoYXNlOwogCWNoYXIJICAgKm9yaWdpbjsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Jlb3JkZXJidWZmZXIuaAppbmRleCBiMjNkOGNjLi5iMmE3MDI5IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCkBAIC0zMDEsNiArMzAxLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlclRYTgogCXsKIAkJVGltZXN0YW1wVHogY29tbWl0X3RpbWU7 CiAJCVRpbWVzdGFtcFR6IHByZXBhcmVfdGltZTsKKwkJVGltZXN0YW1wVHogYWJvcnRfdGltZTsK IAl9CQkJeGFjdF90aW1lOwogCiAJLyoKQEAgLTY2Myw5ICs2NjQsMTEgQEAgZXh0ZXJuIHZvaWQg UmVvcmRlckJ1ZmZlckFzc2lnbkNoaWxkKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklk IHhpZCwKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJDb21taXRDaGlsZChSZW9yZGVyQnVmZmVy ICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCQkgVHJhbnNhY3Rpb25JZCBzdWJ4aWQs IFhMb2dSZWNQdHIgY29tbWl0X2xzbiwKIAkJCQkJCQkJCSBYTG9nUmVjUHRyIGVuZF9sc24pOwot ZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2Fj dGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pOworZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFi b3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24s CisJCQkJCQkJICAgVGltZXN0YW1wVHogYWJvcnRfdGltZSk7CiBleHRlcm4gdm9pZCBSZW9yZGVy QnVmZmVyQWJvcnRPbGQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgb2xkZXN0UnVu bmluZ1hpZCk7Ci1leHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyRm9yZ2V0KFJlb3JkZXJCdWZmZXIg KnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pOworZXh0ZXJuIHZvaWQgUmVv cmRlckJ1ZmZlckZvcmdldChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhM b2dSZWNQdHIgbHNuLAorCQkJCQkJCQlUaW1lc3RhbXBUeiBhYm9ydF90aW1lKTsKIGV4dGVybiB2 b2lkIFJlb3JkZXJCdWZmZXJJbnZhbGlkYXRlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlv bklkIHhpZCwgWExvZ1JlY1B0ciBsc24pOwogCiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyU2V0 QmFzZVNuYXBzaG90KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmggYi9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oCmluZGV4IDkzMzlmMjkuLjBjOGJiZGQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaApAQCAtMTgyLDcgKzE4Miw3IEBAIHR5cGVk ZWYgc3RydWN0CiAJCQl1aW50MzIJCXByb3RvX3ZlcnNpb247CS8qIExvZ2ljYWwgcHJvdG9jb2wg dmVyc2lvbiAqLwogCQkJTGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CS8qIFN0cmluZyBsaXN0 IG9mIHB1YmxpY2F0aW9ucyAqLwogCQkJYm9vbAkJYmluYXJ5OyAvKiBBc2sgcHVibGlzaGVyIHRv IHVzZSBiaW5hcnkgKi8KLQkJCWJvb2wJCXN0cmVhbWluZzsJLyogU3RyZWFtaW5nIG9mIGxhcmdl IHRyYW5zYWN0aW9ucyAqLworCQkJY2hhcgkgICAqc3RyZWFtaW5nX3N0cjsJLyogU3RyZWFtaW5n IG9mIGxhcmdlIHRyYW5zYWN0aW9ucyAqLwogCQkJYm9vbAkJdHdvcGhhc2U7CS8qIFN0cmVhbWlu ZyBvZiB0d28tcGhhc2UgdHJhbnNhY3Rpb25zIGF0CiAJCQkJCQkJCQkgKiBwcmVwYXJlIHRpbWUg Ki8KIAkJCWNoYXIJICAgKm9yaWdpbjsgLyogT25seSBwdWJsaXNoIGRhdGEgb3JpZ2luYXRpbmcg ZnJvbSB0aGUKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRl cm5hbC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKaW5kZXgg MmI3MTE0Zi4uODRkMTIzYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29y a2VyX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVy bmFsLmgKQEAgLTE3LDggKzE3LDEyIEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCIKICNpbmNsdWRlICJkYXRhdHlwZS90 aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlv bi9sb2dpY2FscmVsYXRpb24uaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZpbGVzZXQuaCIKICNpbmNs dWRlICJzdG9yYWdlL2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobV9tcS5oIgorI2luY2x1 ZGUgInN0b3JhZ2Uvc2htX3RvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogCiAKQEAg LTYwLDYgKzY0LDE1IEBAIHR5cGVkZWYgc3RydWN0IExvZ2ljYWxSZXBXb3JrZXIKIAkgKi8KIAlG aWxlU2V0ICAgICpzdHJlYW1fZmlsZXNldDsKIAorCS8qCisJICogUElEIG9mIGxlYWRlciBhcHBs eSB3b3JrZXIgaWYgdGhpcyBzbG90IGlzIHVzZWQgZm9yIGEgcGFyYWxsZWwgYXBwbHkKKwkgKiB3 b3JrZXIsIEludmFsaWRQaWQgb3RoZXJ3aXNlLgorCSAqLworCXBpZF90CQlhcHBseV9sZWFkZXJf cGlkOworCisJLyogSW5kaWNhdGVzIHdoZXRoZXIgYXBwbHkgY2FuIGJlIHBlcmZvcm1lZCBpbiBw YXJhbGxlbC4gKi8KKwlib29sCQlwYXJhbGxlbF9hcHBseTsKKwogCS8qIFN0YXRzLiAqLwogCVhM b2dSZWNQdHIJbGFzdF9sc247CiAJVGltZXN0YW1wVHogbGFzdF9zZW5kX3RpbWU7CkBAIC02OCw5 ICs4MSwxMDIgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFdvcmtlcgogCVRpbWVzdGFtcFR6 IHJlcGx5X3RpbWU7CiB9IExvZ2ljYWxSZXBXb3JrZXI7CiAKKy8qIFN0cnVjdCBmb3Igc2F2aW5n IGFuZCByZXN0b3JpbmcgYXBwbHkgZXJyY29udGV4dCBpbmZvcm1hdGlvbiAqLwordHlwZWRlZiBz dHJ1Y3QgQXBwbHlFcnJvckNhbGxiYWNrQXJnCit7CisJTG9naWNhbFJlcE1zZ1R5cGUgY29tbWFu ZDsJLyogMCBpZiBpbnZhbGlkICovCisJTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWw7CisKKwkv KiBSZW1vdGUgbm9kZSBpbmZvcm1hdGlvbiAqLworCWludAkJCXJlbW90ZV9hdHRudW07CS8qIC0x IGlmIGludmFsaWQgKi8KKwlUcmFuc2FjdGlvbklkIHJlbW90ZV94aWQ7CisJWExvZ1JlY1B0cglm aW5pc2hfbHNuOworCWNoYXIJICAgKm9yaWdpbl9uYW1lOworfSBBcHBseUVycm9yQ2FsbGJhY2tB cmc7CisKKy8qCisgKiBTdGF0ZSBvZiB0aGUgdHJhbnNhY3Rpb24gaW4gcGFyYWxsZWwgYXBwbHkg d29ya2VyLgorICoKKyAqIFRoZSBlbnVtIHZhbHVlcyBtdXN0IGhhdmUgdGhlIHNhbWUgb3JkZXIg YXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlCisgKiB0cmFuc2l0aW9ucy4KKyAqLwordHlwZWRlZiBl bnVtIFBhcmFsbGVsVHJhbnNTdGF0ZQoreworCVBBUkFMTEVMX1RSQU5TX1VOS05PV04sCisJUEFS QUxMRUxfVFJBTlNfU1RBUlRFRCwKKwlQQVJBTExFTF9UUkFOU19GSU5JU0hFRAorfSBQYXJhbGxl bFRyYW5zU3RhdGU7CisKKy8qCisgKiBTdHJ1Y3QgZm9yIHNoYXJpbmcgaW5mb3JtYXRpb24gYmV0 d2VlbiBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBwYXJhbGxlbAorICogYXBwbHkgd29ya2Vycy4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZAoreworCXNsb2Nr X3QJCW11dGV4OworCisJVHJhbnNhY3Rpb25JZAl4aWQ7CisKKwkvKgorCSAqIFN0YXRlIHVzZWQg dG8gZW5zdXJlIGNvbW1pdCBvcmRlcmluZy4KKwkgKgorCSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgd2lsbCBzZXQgaXQgdG8gUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQgYWZ0ZXIKKwkgKiBo YW5kbGluZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmRzIHdoaWxlIHRoZSBhcHBseSBs ZWFkZXIgd2lsbAorCSAqIHdhaXQgZm9yIGl0IHRvIGJlY29tZSBQQVJBTExFTF9UUkFOU19GSU5J U0hFRCBiZWZvcmUgcHJvY2VlZGluZyBpbgorCSAqIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5k cyAoZS5nLiBTVFJFQU1fQ09NTUlUL1NUUkVBTV9QUkVQQVJFKS4KKwkgKi8KKwlQYXJhbGxlbFRy YW5zU3RhdGUJCXhhY3Rfc3RhdGU7CisKKwkvKiBJbmZvcm1hdGlvbiBmcm9tIHRoZSBjb3JyZXNw b25kaW5nIExvZ2ljYWxSZXBXb3JrZXIgc2xvdC4gKi8KKwl1aW50MTYJCWxvZ2ljYWxyZXBfd29y a2VyX2dlbmVyYXRpb247CisJaW50CQkJbG9naWNhbHJlcF93b3JrZXJfc2xvdF9ubzsKKworCS8q CisJICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlcmUgYXJlIHBlbmRpbmcgc3RyZWFtaW5nIGJsb2Nr cyBpbiB0aGUgcXVldWUuIFRoZQorCSAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3aWxsIGNoZWNr IGl0IGJlZm9yZSBzdGFydGluZyB0byB3YWl0LgorCSAqLworCXBnX2F0b21pY191aW50MzIJcGVu ZGluZ19zdHJlYW1fY291bnQ7Cit9IFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQ7CisKKy8qCisg KiBJbmZvcm1hdGlvbiB3aGljaCBpcyB1c2VkIHRvIG1hbmFnZSB0aGUgcGFyYWxsZWwgYXBwbHkg d29ya2VyLgorICovCit0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEFwcGx5V29ya2VySW5mbworewor CXNobV9tcV9oYW5kbGUgKm1xX2hhbmRsZTsKKworCS8qCisJICogVGhlIHF1ZXVlIHVzZWQgdG8g dHJhbnNmZXIgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyCisJ ICogdG8gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIuIE5VTEwgaWYgdGhlIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciBleGl0ZWQKKwkgKiBjbGVhbmx5LgorCSAqLworCXNobV9tcV9oYW5kbGUgKmVycm9y X21xX2hhbmRsZTsKKworCWRzbV9zZWdtZW50ICpkc21fc2VnOworCisJLyoKKwkgKiBUcnVlIGlm IHRoZSB3b3JrZXIgaXMgYmVpbmcgdXNlZCB0byBwcm9jZXNzIGEgcGFyYWxsZWwgYXBwbHkKKwkg KiB0cmFuc2FjdGlvbi4gRmFsc2UgaW5kaWNhdGVzIHRoaXMgd29ya2VyIGlzIGF2YWlsYWJsZSBm b3IgcmUtdXNlLgorCSAqLworCWJvb2wJCWluX3VzZTsKKworCVBhcmFsbGVsQXBwbHlXb3JrZXJT aGFyZWQgKnNoYXJlZDsKK30gUGFyYWxsZWxBcHBseVdvcmtlckluZm87CisKIC8qIE1haW4gbWVt b3J5IGNvbnRleHQgZm9yIGFwcGx5IHdvcmtlci4gUGVybWFuZW50IGR1cmluZyB3b3JrZXIgbGlm ZXRpbWUuICovCiBleHRlcm4gUEdETExJTVBPUlQgTWVtb3J5Q29udGV4dCBBcHBseUNvbnRleHQ7 CiAKK2V4dGVybiBQR0RMTElNUE9SVCBNZW1vcnlDb250ZXh0IEFwcGx5TWVzc2FnZUNvbnRleHQ7 CisKK2V4dGVybiBQR0RMTElNUE9SVCBFcnJvckNvbnRleHRDYWxsYmFjayAqYXBwbHlfZXJyb3Jf Y29udGV4dF9zdGFjazsKK2V4dGVybiBQR0RMTElNUE9SVCBBcHBseUVycm9yQ2FsbGJhY2tBcmcg YXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnOworCitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBNeVN1 YnNjcmlwdGlvblZhbGlkOworCitleHRlcm4gUEdETExJTVBPUlQgUGFyYWxsZWxBcHBseVdvcmtl clNoYXJlZCAqTXlQYXJhbGxlbFNoYXJlZDsKKworZXh0ZXJuIFBHRExMSU1QT1JUIExpc3QgKnN1 YnhhY3RsaXN0OworCiAvKiBsaWJwcXJlY2VpdmVyIGNvbm5lY3Rpb24gKi8KIGV4dGVybiBQR0RM TElNUE9SVCBzdHJ1Y3QgV2FsUmVjZWl2ZXJDb25uICpMb2dSZXBXb3JrZXJXYWxSY3ZDb25uOwog CkBAIC03OSwxOCArMTg1LDIzIEBAIGV4dGVybiBQR0RMTElNUE9SVCBTdWJzY3JpcHRpb24gKk15 U3Vic2NyaXB0aW9uOwogZXh0ZXJuIFBHRExMSU1QT1JUIExvZ2ljYWxSZXBXb3JrZXIgKk15TG9n aWNhbFJlcFdvcmtlcjsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgaW5fcmVtb3RlX3RyYW5z YWN0aW9uOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb247 CitleHRlcm4gUEdETExJTVBPUlQgUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKnN0cmVhbV9hcHBs eV93b3JrZXI7CiAKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaChpbnQgc2xv dCk7CiBleHRlcm4gTG9naWNhbFJlcFdvcmtlciAqbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQg c3ViaWQsIE9pZCByZWxpZCwKIAkJCQkJCQkJCQkJCWJvb2wgb25seV9ydW5uaW5nKTsKIGV4dGVy biBMaXN0ICpsb2dpY2FscmVwX3dvcmtlcnNfZmluZChPaWQgc3ViaWQsIGJvb2wgb25seV9ydW5u aW5nKTsKLWV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJpZCwgT2lk IHN1YmlkLCBjb25zdCBjaGFyICpzdWJuYW1lLAotCQkJCQkJCQkJIE9pZCB1c2VyaWQsIE9pZCBy ZWxpZCk7CitleHRlcm4gYm9vbCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9p ZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwKKwkJCQkJCQkJCSBPaWQgdXNlcmlkLCBPaWQg cmVsaWQsCisJCQkJCQkJCQkgZHNtX2hhbmRsZSBzdWJ3b3JrZXJfZHNtKTsKIGV4dGVybiB2b2lk IGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQpOworZXh0ZXJuIHZv aWQgbG9naWNhbHJlcF9wYV93b3JrZXJfc3RvcChpbnQgc2xvdF9ubywgdWludDE2IGdlbmVyYXRp b24pOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfd2FrZXVwKE9pZCBzdWJpZCwgT2lk IHJlbGlkKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cF9wdHIoTG9naWNh bFJlcFdvcmtlciAqd29ya2VyKTsKIAogZXh0ZXJuIGludAlsb2dpY2FscmVwX3N5bmNfd29ya2Vy X2NvdW50KE9pZCBzdWJpZCk7CitleHRlcm4gaW50CWxvZ2ljYWxyZXBfcGFfd29ya2VyX2NvdW50 KE9pZCBzdWJpZCk7CiAKIGV4dGVybiB2b2lkIFJlcGxpY2F0aW9uT3JpZ2luTmFtZUZvckxvZ2lj YWxSZXAoT2lkIHN1Ym9pZCwgT2lkIHJlbGlkLAogCQkJCQkJCQkJCQkgICBjaGFyICpvcmlnaW5u YW1lLCBTaXplIHN6b3JpZ2lubmFtZSk7CkBAIC0xMDMsMTAgKzIxNCw1NiBAQCBleHRlcm4gdm9p ZCBwcm9jZXNzX3N5bmNpbmdfdGFibGVzKFhMb2dSZWNQdHIgY3VycmVudF9sc24pOwogZXh0ZXJu IHZvaWQgaW52YWxpZGF0ZV9zeW5jaW5nX3RhYmxlX3N0YXRlcyhEYXR1bSBhcmcsIGludCBjYWNo ZWlkLAogCQkJCQkJCQkJCQl1aW50MzIgaGFzaHZhbHVlKTsKIAorZXh0ZXJuIHZvaWQgYXBwbHlf ZGlzcGF0Y2goU3RyaW5nSW5mbyBzKTsKKworZXh0ZXJuIHZvaWQgbWF5YmVfcmVyZWFkX3N1YnNj cmlwdGlvbih2b2lkKTsKKworZXh0ZXJuIHZvaWQgSW5pdGlhbGl6ZUFwcGx5V29ya2VyKHZvaWQp OworCitleHRlcm4gdm9pZCBhcHBseV93b3JrZXJfY2xlYW5fZXhpdCh2b2lkKTsKKworLyogRnVu Y3Rpb24gZm9yIGFwcGx5IGVycm9yIGNhbGxiYWNrICovCitleHRlcm4gdm9pZCBhcHBseV9lcnJv cl9jYWxsYmFjayh2b2lkICphcmcpOworCisvKiBQYXJhbGxlbCBhcHBseSB3b3JrZXIgc2V0dXAg YW5kIGludGVyYWN0aW9ucyAqLworZXh0ZXJuIHZvaWQgcGFfYWxsb2NhdGVfd29ya2VyKFRyYW5z YWN0aW9uSWQgeGlkKTsKK2V4dGVybiBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqcGFfZmluZF93 b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQpOworZXh0ZXJuIHZvaWQgcGFfc2V0X3hhY3Rfc3RhdGUo UGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCwKKwkJCQkJCQkJCQkgIFBhcmFsbGVs VHJhbnNTdGF0ZSBpbl94YWN0KTsKK2V4dGVybiBib29sIHBhX2ZyZWVfd29ya2VyKFBhcmFsbGVs QXBwbHlXb3JrZXJJbmZvICp3aW5mbywgVHJhbnNhY3Rpb25JZCB4aWQpOworCitleHRlcm4gdm9p ZCBwYV93YWl0X2Zvcl94YWN0X2ZpbmlzaChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd3NoYXJl ZCk7CitleHRlcm4gdm9pZCBwYV9zZW5kX2RhdGEoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndp bmZvLCBTaXplIG5ieXRlcywKKwkJCQkJCQkJCSBjb25zdCB2b2lkICpkYXRhKTsKKworZXh0ZXJu IHZvaWQgcGFfc3RhcnRfc3VidHJhbnMoVHJhbnNhY3Rpb25JZCBjdXJyZW50X3hpZCwgVHJhbnNh Y3Rpb25JZCB0b3BfeGlkKTsKK2V4dGVybiB2b2lkIHBhX3N0cmVhbV9hYm9ydChMb2dpY2FsUmVw U3RyZWFtQWJvcnREYXRhICphYm9ydF9kYXRhKTsKKworZXh0ZXJuIHZvaWQgcGFfbG9ja19zdHJl YW0oVHJhbnNhY3Rpb25JZCB4aWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKK2V4dGVybiB2b2lkIHBh X2xvY2tfdHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25JZCB4aWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsK KworZXh0ZXJuIHZvaWQgcGFfdW5sb2NrX3N0cmVhbShUcmFuc2FjdGlvbklkIHhpZCwgTE9DS01P REUgbG9ja21vZGUpOworZXh0ZXJuIHZvaWQgcGFfdW5sb2NrX3RyYW5zYWN0aW9uKFRyYW5zYWN0 aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CisKKyNkZWZpbmUgaXNQYXJhbGxlbEFwcGx5 V29ya2VyKHdvcmtlcikgKCh3b3JrZXIpLT5hcHBseV9sZWFkZXJfcGlkICE9IEludmFsaWRQaWQp CisKIHN0YXRpYyBpbmxpbmUgYm9vbAogYW1fdGFibGVzeW5jX3dvcmtlcih2b2lkKQogewogCXJl dHVybiBPaWRJc1ZhbGlkKE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQpOwogfQogCitzdGF0aWMg aW5saW5lIGJvb2wKK2FtX2xlYWRlcl9hcHBseV93b3JrZXIodm9pZCkKK3sKKwlyZXR1cm4gKCFP aWRJc1ZhbGlkKE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQpICYmCisJCQkhaXNQYXJhbGxlbEFw cGx5V29ya2VyKE15TG9naWNhbFJlcFdvcmtlcikpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wK K2FtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcih2b2lkKQoreworCXJldHVybiBpc1BhcmFsbGVsQXBw bHlXb3JrZXIoTXlMb2dpY2FsUmVwV29ya2VyKTsKK30KKwogI2VuZGlmCQkJCQkJCS8qIFdPUktF Ul9JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xtZ3IuaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5oCmluZGV4IGJlMWQyYzkuLjVhM2JkMDMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvbG1nci5oCkBAIC0xMDcsNiArMTA3LDExIEBAIGV4dGVybiB2b2lkIExvY2tTaGFyZWRPYmpl Y3RGb3JTZXNzaW9uKE9pZCBjbGFzc2lkLCBPaWQgb2JqaWQsIHVpbnQxNiBvYmpzdWJpZCwKIGV4 dGVybiB2b2lkIFVubG9ja1NoYXJlZE9iamVjdEZvclNlc3Npb24oT2lkIGNsYXNzaWQsIE9pZCBv YmppZCwgdWludDE2IG9ianN1YmlkLAogCQkJCQkJCQkJCSBMT0NLTU9ERSBsb2NrbW9kZSk7CiAK K2V4dGVybiB2b2lkIExvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbihPaWQgc3Vib2lkLCBU cmFuc2FjdGlvbklkIHhpZCwgdWludDE2IG9iamlkLAorCQkJCQkJCQkJCSAgIExPQ0tNT0RFIGxv Y2ttb2RlKTsKK2V4dGVybiB2b2lkIFVubG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JTZXNzaW9uKE9p ZCBzdWJvaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCB1aW50MTYgb2JqaWQsCisJCQkJCQkJCQkJCSBM T0NLTU9ERSBsb2NrbW9kZSk7CisKIC8qIERlc2NyaWJlIGEgbG9ja3RhZyBmb3IgZXJyb3IgbWVz c2FnZXMgKi8KIGV4dGVybiB2b2lkIERlc2NyaWJlTG9ja1RhZyhTdHJpbmdJbmZvIGJ1ZiwgY29u c3QgTE9DS1RBRyAqdGFnKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2Nr LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaAppbmRleCBlNGUxNDk1Li43NzY2MTIzIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaAorKysgYi9zcmMvaW5jbHVkZS9z dG9yYWdlL2xvY2suaApAQCAtMTQ5LDEwICsxNDksMTIgQEAgdHlwZWRlZiBlbnVtIExvY2tUYWdU eXBlCiAJTE9DS1RBR19TUEVDVUxBVElWRV9UT0tFTiwJLyogc3BlY3VsYXRpdmUgaW5zZXJ0aW9u IFhpZCBhbmQgdG9rZW4gKi8KIAlMT0NLVEFHX09CSkVDVCwJCQkJLyogbm9uLXJlbGF0aW9uIGRh dGFiYXNlIG9iamVjdCAqLwogCUxPQ0tUQUdfVVNFUkxPQ0ssCQkJLyogcmVzZXJ2ZWQgZm9yIG9s ZCBjb250cmliL3VzZXJsb2NrIGNvZGUgKi8KLQlMT0NLVEFHX0FEVklTT1JZCQkJLyogYWR2aXNv cnkgdXNlciBsb2NrcyAqLworCUxPQ0tUQUdfQURWSVNPUlksCQkJLyogYWR2aXNvcnkgdXNlciBs b2NrcyAqLworCUxPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJT04JLyogdHJhbnNhY3Rpb24gYmVpbmcg YXBwbGllZCBvbiBhIGxvZ2ljYWwKKwkJCQkJCQkJICogcmVwbGljYXRpb24gc3Vic2NyaWJlciAq LwogfSBMb2NrVGFnVHlwZTsKIAotI2RlZmluZSBMT0NLVEFHX0xBU1RfVFlQRQlMT0NLVEFHX0FE VklTT1JZCisjZGVmaW5lIExPQ0tUQUdfTEFTVF9UWVBFCUxPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJ T04KIAogZXh0ZXJuIFBHRExMSU1QT1JUIGNvbnN0IGNoYXIgKmNvbnN0IExvY2tUYWdUeXBlTmFt ZXNbXTsKIApAQCAtMjc4LDYgKzI4MCwxNyBAQCB0eXBlZGVmIHN0cnVjdCBMT0NLVEFHCiAJIChs b2NrdGFnKS5sb2NrdGFnX3R5cGUgPSBMT0NLVEFHX0FEVklTT1JZLCBcCiAJIChsb2NrdGFnKS5s b2NrdGFnX2xvY2ttZXRob2RpZCA9IFVTRVJfTE9DS01FVEhPRCkKIAorLyoKKyAqIElEIGluZm8g Zm9yIGEgcmVtb3RlIHRyYW5zYWN0aW9uIG9uIGEgbG9naWNhbCByZXBsaWNhdGlvbiBzdWJzY3Jp YmVyIGlzOiBEQgorICogT0lEICsgU1VCU0NSSVBUSU9OIE9JRCArIFRSQU5TQUNUSU9OIElEICsg T0JKSUQKKyAqLworI2RlZmluZSBTRVRfTE9DS1RBR19BUFBMWV9UUkFOU0FDVElPTihsb2NrdGFn LGRib2lkLHN1Ym9pZCx4aWQsb2JqaWQpIFwKKwkoKGxvY2t0YWcpLmxvY2t0YWdfZmllbGQxID0g KGRib2lkKSwgXAorCSAobG9ja3RhZykubG9ja3RhZ19maWVsZDIgPSAoc3Vib2lkKSwgXAorCSAo bG9ja3RhZykubG9ja3RhZ19maWVsZDMgPSAoeGlkKSwgXAorCSAobG9ja3RhZykubG9ja3RhZ19m aWVsZDQgPSAob2JqaWQpLCBcCisJIChsb2NrdGFnKS5sb2NrdGFnX3R5cGUgPSBMT0NLVEFHX0FQ UExZX1RSQU5TQUNUSU9OLCBcCisJIChsb2NrdGFnKS5sb2NrdGFnX2xvY2ttZXRob2RpZCA9IERF RkFVTFRfTE9DS01FVEhPRCkKIAogLyoKICAqIFBlci1sb2NrZWQtb2JqZWN0IGxvY2sgaW5mb3Jt YXRpb246CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IGVlNjM2OTAuLjkzYTUxZjQgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisrKyBiL3NyYy9pbmNs dWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0zNSw2ICszNSw3IEBAIHR5cGVkZWYgZW51bQog CVBST0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJTkcsCS8qIGFzayB3YWxzZW5kZXJzIHRvIHByZXBh cmUgZm9yIHNodXRkb3duICAqLwogCVBST0NTSUdfQkFSUklFUiwJCQkvKiBnbG9iYWwgYmFycmll ciBpbnRlcnJ1cHQgICovCiAJUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQsIC8qIGFzayBiYWNr ZW5kIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRleHRzICovCisJUFJPQ1NJR19QQVJBTExFTF9BUFBM WV9NRVNTQUdFLCAvKiBNZXNzYWdlIGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2VycyAqLwogCiAJ LyogUmVjb3ZlcnkgY29uZmxpY3QgcmVhc29ucyAqLwogCVBST0NTSUdfUkVDT1ZFUllfQ09ORkxJ Q1RfREFUQUJBU0UsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50Lmgg Yi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKaW5kZXggMGIyMTAwYi4uNzYzZmJlYSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCisrKyBiL3NyYy9pbmNs dWRlL3V0aWxzL3dhaXRfZXZlbnQuaApAQCAtNDIsNiArNDIsNyBAQCB0eXBlZGVmIGVudW0KIAlX QUlUX0VWRU5UX0NIRUNLUE9JTlRFUl9NQUlOLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9BUFBMWV9N QUlOLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9MQVVOQ0hFUl9NQUlOLAorCVdBSVRfRVZFTlRfTE9H SUNBTF9QQVJBTExFTF9BUFBMWV9NQUlOLAogCVdBSVRfRVZFTlRfUkVDT1ZFUllfV0FMX1NUUkVB TSwKIAlXQUlUX0VWRU5UX1NZU0xPR0dFUl9NQUlOLAogCVdBSVRfRVZFTlRfV0FMX1JFQ0VJVkVS X01BSU4sCkBAIC0xMDUsNiArMTA2LDcgQEAgdHlwZWRlZiBlbnVtCiAJV0FJVF9FVkVOVF9IQVNI X0dST1dfQlVDS0VUU19BTExPQ0FURSwKIAlXQUlUX0VWRU5UX0hBU0hfR1JPV19CVUNLRVRTX0VM RUNULAogCVdBSVRfRVZFTlRfSEFTSF9HUk9XX0JVQ0tFVFNfUkVJTlNFUlQsCisJV0FJVF9FVkVO VF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRSwKIAlXQUlUX0VWRU5UX0xPR0lD QUxfU1lOQ19EQVRBLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9TWU5DX1NUQVRFX0NIQU5HRSwKIAlX QUlUX0VWRU5UX01RX0lOVEVSTkFMLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zdWJzY3JpcHRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzY3Jp cHRpb24ub3V0CmluZGV4IGMxM2QyMTguLjFlZDZmNGMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQKQEAgLTExNyw3ICsxMTcsNyBAQCBISU5UOiAgVG8gaW5p dGlhdGUgcmVwbGljYXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVwbGljYXRp b24gc2xvdCwgZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNj cmlwdGlvbnMKICAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBj b21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwg ICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YjQgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91 c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAg ICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBub25lICAgfCBvZmYgICAgICAgICAgICAg ICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWI0 IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYg ICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwg bm9uZSAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0 IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWI0IFNF VCAob3JpZ2luID0gYW55KTsKQEAgLTEyNSw3ICsxMjUsNyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04g cmVncmVzc190ZXN0c3ViNCBTRVQgKG9yaWdpbiA9IGFueSk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgIE5hbWUgICAgICAgfCAg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5 IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmln aW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBT a2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3Vi NCB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBm ICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8 IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlz dCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YjQgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwg ZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAg ICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBk Ym5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogRFJPUCBTVUJTQ1JJ UFRJT04gcmVncmVzc190ZXN0c3ViMzsKQEAgLTEzOCw3ICsxMzgsNyBAQCBFUlJPUjogIGludmFs aWQgY29ubmVjdGlvbiBzdHJpbmcgc3ludGF4OiBtaXNzaW5nICI9IiBhZnRlciAiZm9vYmFyIiBp biBjb25uZWN0aQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNj cmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg RW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNv bW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAg ICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2Vy IHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAg ICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAg fCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCBy ZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAg IHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkg ICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAw LzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgUFVC TElDQVRJT04gdGVzdHB1YjIsIHRlc3RwdWIzIFdJVEggKHJlZnJlc2ggPSBmYWxzZSk7CkBAIC0x NTgsNyArMTU4LDcgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTS0lQIChs c24gPSAnMC8xMjM0NScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlz dCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEVuYWJsZWQgfCAgICAgUHVibGljYXRpb24gICAgIHwgQmluYXJ5IHwgU3RyZWFt aW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5j aHJvbm91cyBjb21taXQgfCAgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04g CiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3Vi IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1YjIsdGVzdHB1 YjN9IHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAg ICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vz bm90ZXhpc3QyIHwgMC8xMjM0NQorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0 aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IG9mZiAg ICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2Zm ICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8IDAvMTIzNDUK ICgxIHJvdykKIAogLS0gb2sgLSB3aXRoIGxzbiA9IE5PTkUKQEAgLTE3MCw3ICsxNzAsNyBAQCBF UlJPUjogIGludmFsaWQgV0FMIGxvY2F0aW9uIChMU04pOiAwLzAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAg ICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgICAgIFB1YmxpY2F0aW9u ICAgICB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9u IGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgIENvbm5pbmZv ICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAg ICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IGYgICAgICAgICB8IGQgICAgICAg ICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAg IHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8 IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIz fSB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAg ICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25v dGV4aXN0MiB8IDAvMAogKDEgcm93KQogCiBCRUdJTjsKQEAgLTIwNSw3ICsyMDUsNyBAQCBISU5U OiAgQXZhaWxhYmxlIHZhbHVlczogbG9jYWwsIHJlbW90ZV93cml0ZSwgcmVtb3RlX2FwcGx5LCBv biwgb2ZmLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1 YnNjcmlwdGlvbnMKICAgICAgICAgTmFtZSAgICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEVuYWJsZWQgfCAgICAgUHVibGljYXRpb24gICAgIHwgQmluYXJ5IHwgU3RyZWFtaW5n IHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJv bm91cyBjb21taXQgfCAgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1 Yl9mb28gfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHViMix0 ZXN0cHViM30gfCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAg ICAgICAgICAgICB8IGFueSAgICB8IGxvY2FsICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNz X2RvZXNub3RleGlzdDIgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWJfZm9vIHwgcmVncmVzc19zdWJz Y3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1YjIsdGVzdHB1YjN9IHwgZiAgICAgIHwg b2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAg fCBsb2NhbCAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QyIHwgMC8w CiAoMSByb3cpCiAKIC0tIHJlbmFtZSBiYWNrIHRvIGtlZXAgdGhlIHJlc3Qgc2ltcGxlCkBAIC0y NDIsNyArMjQyLDcgQEAgSElOVDogIFRvIGluaXRpYXRlIHJlcGxpY2F0aW9uLCB5b3UgbXVzdCBt YW51YWxseSBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGUKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwg ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFy eSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3Jp Z2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwg U2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3Vi IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IHQg ICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwg YW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0 IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYg ICAgICAgfCB7dGVzdHB1Yn0gICB8IHQgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAg ICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJu YW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQ VElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChiaW5hcnkgPSBmYWxzZSk7CkBAIC0yNTEsMTMgKzI1 MSwxMyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9uYW1l ID0gTk9ORSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2Ny aXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBF bmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29t bWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAg ICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIg fCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAg ICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8 IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJl Z3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAg fCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAg ICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAv MAogKDEgcm93KQogCiBEUk9QIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWI7Ci0tLSBmYWls IC0gc3RyZWFtaW5nIG11c3QgYmUgYm9vbGVhbgorLS0gZmFpbCAtIHN0cmVhbWluZyBtdXN0IGJl IGJvb2xlYW4gb3IgJ3BhcmFsbGVsJwogQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3Rz dWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0 ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwgc3RyZWFtaW5nID0gZm9vKTsKLUVSUk9SOiAg c3RyZWFtaW5nIHJlcXVpcmVzIGEgQm9vbGVhbiB2YWx1ZQorRVJST1I6ICBzdHJlYW1pbmcgcmVx dWlyZXMgYSBCb29sZWFuIHZhbHVlIG9yICJwYXJhbGxlbCIKIC0tIG5vdyBpdCB3b3JrcwogQ1JF QVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jl c3NfZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxz ZSwgc3RyZWFtaW5nID0gdHJ1ZSk7CiBXQVJOSU5HOiAgc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVk LCBidXQgaXMgbm90IGNvbm5lY3RlZApAQCAtMjY2LDcgKzI2NiwxNSBAQCBISU5UOiAgVG8gaW5p dGlhdGUgcmVwbGljYXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVwbGljYXRp b24gc2xvdCwgZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNj cmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg RW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNv bW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAg ICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2Vy IHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgdCAgICAgICAgIHwgZCAgICAgICAg ICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAg fCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCBy ZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAg IHwgb24gICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkg ICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAw LzAKKygxIHJvdykKKworQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0 cmVhbWluZyA9IHBhcmFsbGVsKTsKK1xkUnMrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBP d25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1p bmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNo cm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAor LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nf c3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBwYXJh bGxlbCAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9m ZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEg cm93KQogCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc3RyZWFtaW5n ID0gZmFsc2UpOwpAQCAtMjc1LDcgKzI4Myw3IEBAIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNz X3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0 cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwg U3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBM U04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVn cmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8 IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAg IHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8w CisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAg fCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBm ICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJl Z3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIC0tIGZhaWwgLSBwdWJsaWNhdGlv biBhbHJlYWR5IGV4aXN0cwpAQCAtMjkzLDcgKzMwMSw3IEBAIEVSUk9SOiAgcHVibGljYXRpb24g InRlc3RwdWIxIiBpcyBhbHJlYWR5IGluIHN1YnNjcmlwdGlvbiAicmVncmVzc190ZXN0c3ViIgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0 aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFi bGVkIHwgICAgICAgICBQdWJsaWNhdGlvbiAgICAgICAgIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwg VHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91 cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3Vi IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yix0ZXN0cHVi MSx0ZXN0cHViMn0gfCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAg ICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdy ZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2Ny aXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIsdGVzdHB1YjEsdGVzdHB1YjJ9IHwgZiAg ICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBh bnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3Qg fCAwLzAKICgxIHJvdykKIAogLS0gZmFpbCAtIHB1YmxpY2F0aW9uIHVzZWQgbW9yZSB0aGVuIG9u Y2UKQEAgLTMxMSw3ICszMTksNyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3Vi IERST1AgUFVCTElDQVRJT04gdGVzdHB1YjEsIHRlc3RwdWIyIFdJVEggKHJlZgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUg ICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9u IHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJy b3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAg ICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVi fSAgIHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAg ICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vz bm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91 c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAg ICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAg ICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogRFJPUCBT VUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViOwpAQCAtMzUwLDcgKzM1OCw3IEBAIEhJTlQ6ICBU byBpbml0aWF0ZSByZXBsaWNhdGlvbiwgeW91IG11c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBs aWNhdGlvbiBzbG90LCBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Yg c3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhh c2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1p dCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0t Ky0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9u X3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBmICAgICAgICAgfCBwICAg ICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAg ICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1 YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBm ICAgICAgfCBvZmYgICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8 IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlz dCB8IDAvMAogKDEgcm93KQogCiAtLWZhaWwgLSBhbHRlciBvZiB0d29fcGhhc2Ugb3B0aW9uIG5v dCBzdXBwb3J0ZWQuCkBAIC0zNjIsNyArMzcwLDcgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jl c3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IHRydWUpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwg U3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4g fCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lw IExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCBy ZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAg IHwgdCAgICAgICAgIHwgcCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkg ICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAw LzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAg ICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb24gICAgICAgIHwgcCAgICAgICAgICAgICAgICB8 IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9 cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9O IHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwpAQCAtMzc1LDcgKzM4Myw3 IEBAIEhJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlvbiwgeW91IG11c3QgbWFudWFsbHkgY3Jl YXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBP d25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1p bmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNo cm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAog LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nf c3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCB0ICAg ICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9m ZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJl Z3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rl c3RwdWJ9ICAgfCBmICAgICAgfCBvbiAgICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAgICAg ICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNz X2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVz c190ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CkBAIC0zOTEsNyArMzk5LDcgQEAgSElO VDogIFRvIGluaXRpYXRlIHJlcGxpY2F0aW9uLCB5b3UgbXVzdCBtYW51YWxseSBjcmVhdGUgdGhl IHJlcGxpY2F0aW9uIHNsb3QsIGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlz dCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3 by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMg Y29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3Jp cHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IGYgICAgICAgICB8 IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAg ICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190 ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0g ICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAg ICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25v dGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3Rz dWIgU0VUIChkaXNhYmxlX29uX2Vycm9yID0gdHJ1ZSk7CkBAIC0zOTksNyArNDA3LDcgQEAgQUxU RVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKGRpc2FibGVfb25fZXJyb3IgPSB0 cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRp b25zCiAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJs ZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQg fCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAg ICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYg ICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAg ICAgfCB0ICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJu YW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVz c19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9m ZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCB0ICAgICAgICAgICAgICAgIHwgYW55ICAgIHwg b2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAo MSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25h bWUgPSBOT05FKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNjcmlwdGlv bi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzY3JpcHRpb24uc3FsCmluZGV4IGVhZWFk ZTguLjc5OTFhYmYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNjcmlwdGlv bi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vic2NyaXB0aW9uLnNxbApAQCAtMTY3 LDcgKzE2Nyw3IEBAIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90 X25hbWUgPSBOT05FKTsKIAogRFJPUCBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViOwogCi0t LSBmYWlsIC0gc3RyZWFtaW5nIG11c3QgYmUgYm9vbGVhbgorLS0gZmFpbCAtIHN0cmVhbWluZyBt dXN0IGJlIGJvb2xlYW4gb3IgJ3BhcmFsbGVsJwogQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNz X3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUJMSUNB VElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwgc3RyZWFtaW5nID0gZm9vKTsKIAog LS0gbm93IGl0IHdvcmtzCkBAIC0xNzUsNiArMTc1LDEwIEBAIENSRUFURSBTVUJTQ1JJUFRJT04g cmVncmVzc190ZXN0c3ViIENPTk5FQ1RJT04gJ2RibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCcg UFVCCiAKIFxkUnMrCiAKK0FMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChz dHJlYW1pbmcgPSBwYXJhbGxlbCk7CisKK1xkUnMrCisKIEFMVEVSIFNVQlNDUklQVElPTiByZWdy ZXNzX3Rlc3RzdWIgU0VUIChzdHJlYW1pbmcgPSBmYWxzZSk7CiBBTFRFUiBTVUJTQ1JJUFRJT04g cmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKaW5kZXggMmY1ODAyMS4uMGUxMWNiNSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKQEAgLTE0NzIsNiArMTQ3Miw3IEBAIExvZ2ljYWxSZXBSZWxJZAogTG9naWNhbFJlcFJlbE1h cEVudHJ5CiBMb2dpY2FsUmVwUmVsYXRpb24KIExvZ2ljYWxSZXBSb2xsYmFja1ByZXBhcmVkVHhu RGF0YQorTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YQogTG9naWNhbFJlcFR1cGxlRGF0YQogTG9n aWNhbFJlcFR5cAogTG9naWNhbFJlcFdvcmtlcgpAQCAtMTY2Myw2ICsxNjY0LDkgQEAgT3ZlcnJp ZGVTdGFja0VudHJ5CiBPdmVycmlkaW5nS2luZAogUEFDRV9IRUFERVIKIFBBQ0wKK1BhcmFsbGVs QXBwbHlXb3JrZXJFbnRyeQorUGFyYWxsZWxBcHBseVdvcmtlckluZm8KK1BhcmFsbGVsQXBwbHlX b3JrZXJTaGFyZWQKIFBBVEgKIFBCT09MCiBQQ3R4dEhhbmRsZQpAQCAtMTg5NCw2ICsxODk4LDcg QEAgUGFyYWxsZWxTbG90UmVzdWx0SGFuZGxlcgogUGFyYWxsZWxTdGF0ZQogUGFyYWxsZWxUYWJs ZVNjYW5EZXNjCiBQYXJhbGxlbFRhYmxlU2NhbkRlc2NEYXRhCitQYXJhbGxlbFRyYW5zU3RhdGUK IFBhcmFsbGVsVmFjdXVtU3RhdGUKIFBhcmFsbGVsV29ya2VyQ29udGV4dAogUGFyYWxsZWxXb3Jr ZXJJbmZvCkBAIC0yNzgyLDYgKzI3ODcsNyBAQCBUcmFuc2FjdGlvblN0bXRLaW5kCiBUcmFuc2Zv cm1JbmZvCiBUcmFuc2Zvcm1Kc29uU3RyaW5nVmFsdWVzU3RhdGUKIFRyYW5zaXRpb25DYXB0dXJl U3RhdGUKK1RyYW5zQXBwbHlBY3Rpb24KIFRyZ21BcmMKIFRyZ21BcmNJbmZvCiBUcmdtQm91bmQK LS0gCjIuNy4yLndpbmRvd3MuMQoK --_005_OS0PR01MB5716339FF7CB759E751492CB940D9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v51-0002-Serialize-partial-changes-to-disk-if-the-shm_mq-.patch" Content-Description: v51-0002-Serialize-partial-changes-to-disk-if-the-shm_mq-.patch Content-Disposition: attachment; filename="v51-0002-Serialize-partial-changes-to-disk-if-the-shm_mq-.patch"; size=36429; creation-date="Tue, 22 Nov 2022 12:37:22 GMT"; modification-date="Tue, 22 Nov 2022 12:42:22 GMT" Content-Transfer-Encoding: base64 RnJvbSBlM2ExYmM3MTgyOTkyZGU1MGE5MjJkYzRlODE2NTVhYTlmZmYxYWVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIb3UgWmhpamllIDxob3V6ai5mbnN0QGNuLmZ1aml0c3UuY29t PgpEYXRlOiBNb24sIDIxIE5vdiAyMDIyIDIwOjEwOjExICswODAwClN1YmplY3Q6IFtQQVRDSCB2 NTEgMi80XSBTZXJpYWxpemUgcGFydGlhbCBjaGFuZ2VzIHRvIGRpc2sgaWYgdGhlIHNobV9tcQog YnVmZmVyIGlzIGZ1bGwKCldoZW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgdGltZXMgb3V0IHdo aWxlIHNlbmRpbmcgYSBtZXNzYWdlIHRvIHRoZSBwYXJhbGxlbAphcHBseSB3b3JrZXIuIEluc3Rl YWQgb2YgZXJyb3Jpbmcgb3V0LCBzd2l0Y2ggdG8gcGFydGlhbCBzZXJpYWxpemUgbW9kZSBhbmQg bGV0CnRoZSBsZWFkZXIgc2VyaWFsaXplIGFsbCByZW1haW5pbmcgY2hhbmdlcyB0byB0aGUgZmls ZSBhbmQgbm90aWZ5IHRoZSBwYXJhbGxlbAphcHBseSB3b3JrZXJzIHRvIHJlYWQgYW5kIGFwcGx5 IHRoZW0gYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24uCi0tLQogLi4uL3JlcGxpY2F0aW9u L2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jICAgICAgfCAxODIgKysrKysrKysrKy0KIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICAgICAgIHwgMzQyICsr KysrKysrKysrKysrKy0tLS0tLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVy bmFsLmggICAgICAgICAgfCAgNDQgKysrCiAzIGZpbGVzIGNoYW5nZWQsIDQ2MiBpbnNlcnRpb25z KCspLCAxMDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwppbmRleCBlYzQ4YTk0Li43YTQwNmI4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3 b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxs ZWx3b3JrZXIuYwpAQCAtNzQsOCArNzQsMTAgQEAKICAqIG1lc3NhZ2VzLCBhbmQgdGhpcyB3YWl0 IGRvZXNuJ3QgYXBwZWFyIGluIGxtZ3IuCiAgKgogICogVG8gcmVzb2x2ZSB0aGlzIGlzc3VlLCB3 ZSB1c2Ugbm9uLWJsb2NraW5nIHdyaXRlIGFuZCB3YWl0IHdpdGggYSB0aW1lb3V0LiBJZgotICog dGltZW91dCBpcyBleGNlZWRlZCwgdGhlIExBIHJlcG9ydHMgYW4gZXJyb3IgYW5kIHJlc3RhcnRz IGxvZ2ljYWwKLSAqIHJlcGxpY2F0aW9uLgorICogdGltZW91dCBpcyBleGNlZWRlZCwgdGhlIExB IHdpbGwgd3JpdGUgdG8gZmlsZSBhbmQgaW5kaWNhdGUgUEEtMiB0aGF0IGl0CisgKiBuZWVkcyB0 byByZWFkIGZpbGUgZm9yIHJlbWFpbmluZyBtZXNzYWdlcy4gVGhlbiBMQSB3aWxsIHN0YXJ0IHdh aXRpbmcgZm9yCisgKiBjb21taXQgd2hpY2ggd2lsbCBkZXRlY3QgZGVhZGxvY2sgaWYgYW55LiAo U2VlIHBhX3NlbmRfZGF0YSgpIGFuZCB0eXBlZGVmCisgKiBlbnVtIFRyYW5zQXBwbHlBY3Rpb24p CiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0zMTEsOSArMzEzLDExIEBAIHBhX2FsbG9j YXRlX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCkKIAlTcGluTG9ja0FjcXVpcmUoJndpbmZvLT5z aGFyZWQtPm11dGV4KTsKIAl3aW5mby0+c2hhcmVkLT54YWN0X3N0YXRlID0gUEFSQUxMRUxfVFJB TlNfVU5LTk9XTjsKIAl3aW5mby0+c2hhcmVkLT54aWQgPSB4aWQ7CisJd2luZm8tPnNoYXJlZC0+ ZmlsZXNldF9zdGF0ZSA9IExFQURFUl9GSUxFU0VUX1VOS05PV047CiAJU3BpbkxvY2tSZWxlYXNl KCZ3aW5mby0+c2hhcmVkLT5tdXRleCk7CiAKIAl3aW5mby0+aW5fdXNlID0gdHJ1ZTsKKwl3aW5m by0+c2VyaWFsaXplX2NoYW5nZXMgPSBmYWxzZTsKIAllbnRyeS0+d2luZm8gPSB3aW5mbzsKIAll bnRyeS0+eGlkID0geGlkOwogfQpAQCAtMzg3LDggKzM5MSwxOCBAQCBwYV9mcmVlX3dvcmtlcihQ YXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sIFRyYW5zYWN0aW9uSWQgeGlkKQogCW5hcHBs eXdvcmtlcnMgPSBsb2dpY2FscmVwX3BhX3dvcmtlcl9jb3VudChNeUxvZ2ljYWxSZXBXb3JrZXIt PnN1YmlkKTsKIAlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKIAotCS8qIFN0 b3AgdGhlIHdvcmtlciBpZiB0aGVyZSBhcmUgZW5vdWdoIHdvcmtlcnMgaW4gdGhlIHBvb2wuICov Ci0JaWYgKG5hcHBseXdvcmtlcnMgPiAobWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1 YnNjcmlwdGlvbiAvIDIpKQorCS8qCisJICogU3RvcCB0aGUgd29ya2VyIGlmIHRoZXJlIGFyZSBl bm91Z2ggd29ya2VycyBpbiB0aGUgcG9vbC4KKwkgKgorCSAqIFhYWCB3ZSBhbHNvIG5lZWQgdG8g c3RvcCB0aGUgd29ya2VyIGlmIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyCisJICogc2VyaWFsaXpl ZCBwYXJ0IG9mIHRoZSB0cmFuc2FjdGlvbiBkYXRhIHRvIGEgZmlsZSBkdWUgdG8gc2VuZCB0aW1l b3V0LgorCSAqIFRoaXMgaXMgYmVjYXVzZSB0aGUgbWVzc2FnZSBjb3VsZCBiZSBwYXJ0aWFsbHkg d3JpdHRlbiB0byB0aGUgcXVldWUgZHVlCisJICogdG8gc2VuZCB0aW1lb3V0IGFuZCB0aGVyZSBp cyBubyB3YXkgdG8gY2xlYW4gdGhlIHF1ZXVlIG90aGVyIHRoYW4KKwkgKiByZXNlbmRpbmcgdGhl IG1lc3NhZ2UgdW50aWwgaXQgc3VjY2VlZHMuIFRvIGF2b2lkIGNvbXBsZXhpdHksIHdlCisJICog ZGlyZWN0bHkgc3RvcCB0aGUgd29ya2VyIGluIHRoaXMgY2FzZS4KKwkgKi8KKwlpZiAod2luZm8t PnNlcmlhbGl6ZV9jaGFuZ2VzIHx8CisJCW5hcHBseXdvcmtlcnMgPiAobWF4X3BhcmFsbGVsX2Fw cGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiAvIDIpKQogCXsKIAkJaW50CQkJc2xvdF9ubzsK IAkJdWludDE2CQlnZW5lcmF0aW9uOwpAQCAtNDA2LDExICs0MjAsMTUgQEAgcGFfZnJlZV93b3Jr ZXIoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBUcmFuc2FjdGlvbklkIHhpZCkKIAl9 CiAKIAl3aW5mby0+aW5fdXNlID0gZmFsc2U7CisJd2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzID0g ZmFsc2U7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLS8qIEZyZWUgdGhlIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciBpbmZvcm1hdGlvbi4gKi8KKy8qCisgKiBGcmVlIHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgaW5mb3JtYXRpb24gYW5kIHVubGluayB0aGUgZmlsZXMgd2l0aAorICogc2VyaWFsaXpl ZCBjaGFuZ2VzIGlmIGFueS4KKyAqLwogc3RhdGljIHZvaWQKIHBhX2ZyZWVfd29ya2VyX2luZm8o UGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvKQogewpAQCAtNDIyLDYgKzQ0MCwxMCBAQCBw YV9mcmVlX3dvcmtlcl9pbmZvKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbykKIAlpZiAo d2luZm8tPmVycm9yX21xX2hhbmRsZSkKIAkJc2htX21xX2RldGFjaCh3aW5mby0+ZXJyb3JfbXFf aGFuZGxlKTsKIAorCS8qIFVubGluayB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMu ICovCisJaWYgKHdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcykKKwkJc3RyZWFtX2NsZWFudXBfZmls ZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgd2luZm8tPnNoYXJlZC0+eGlkKTsKKwogCWlm ICh3aW5mby0+ZHNtX3NlZykKIAkJZHNtX2RldGFjaCh3aW5mby0+ZHNtX3NlZyk7CiAKQEAgLTQz Miw2ICs0NTQsNDMgQEAgcGFfZnJlZV93b3JrZXJfaW5mbyhQYXJhbGxlbEFwcGx5V29ya2VySW5m byAqd2luZm8pCiB9CiAKIC8qCisgKiBSZXBsYXkgdGhlIHNwb29sZWQgbWVzc2FnZXMgaW4gdGhl IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpZiBsZWFkZXIgYXBwbHkKKyAqIHdvcmtlciBoYXMgZmlu aXNoZWQgc2VyaWFsaXppbmcgY2hhbmdlcyB0byB0aGUgZmlsZS4KKyAqLworc3RhdGljIHZvaWQK K3BhX3Nwb29sZWRfbWVzc2FnZXModm9pZCkKK3sKKwlMZWFkZXJGaWxlU2V0U3RhdGUgZmlsZXNl dF9zdGF0ZTsKKworCS8qCisJICogQ2hlY2sgaWYgY2hhbmdlcyBoYXZlIGJlZW4gc2VyaWFsaXpl ZCB0byBkaXNrLiBpZiBzbywgcmVhZCBhbmQgYXBwbHkKKwkgKiB0aGVtLgorCSAqLworCVNwaW5M b2NrQWNxdWlyZSgmTXlQYXJhbGxlbFNoYXJlZC0+bXV0ZXgpOworCWZpbGVzZXRfc3RhdGUgPSBN eVBhcmFsbGVsU2hhcmVkLT5maWxlc2V0X3N0YXRlOworCVNwaW5Mb2NrUmVsZWFzZSgmTXlQYXJh bGxlbFNoYXJlZC0+bXV0ZXgpOworCisJLyoKKwkgKiBBY3F1aXJlIHRoZSBzdHJlYW0gbG9jayBp ZiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBpcyBzZXJpYWxpemluZworCSAqIGNoYW5nZXMgdG8g dGhlIGZpbGUsIGJlY2F1c2UgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3aWxsIG5vIGxvbmdl cgorCSAqIGhhdmUgYSBjaGFuY2UgdG8gcmVjZWl2ZSBhIFNUUkVBTV9TVE9QIGFuZCBhY3F1aXJl IHRoZSBsb2NrIHVudGlsIHRoZQorCSAqIGxlYWRlciBzZXJpYWxpemUgYWxsIGNoYW5nZXMgdG8g dGhlIGZpbGUuCisJICovCisJaWYgKGZpbGVzZXRfc3RhdGUgPT0gTEVBREVSX0ZJTEVTRVRfQlVT WSkKKwl7CisJCXBhX2xvY2tfc3RyZWFtKE15UGFyYWxsZWxTaGFyZWQtPnhpZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwkJcGFfdW5sb2NrX3N0cmVhbShNeVBhcmFsbGVsU2hhcmVkLT54aWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJfQorCWVsc2UgaWYgKGZpbGVzZXRfc3RhdGUgPT0gTEVBREVSX0ZJTEVT RVRfQUNDRVNTSUJMRSkKKwl7CisJCWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoJk15UGFyYWxsZWxT aGFyZWQtPmZpbGVzZXQsCisJCQkJCQkJICAgTXlQYXJhbGxlbFNoYXJlZC0+eGlkLAorCQkJCQkJ CSAgIEludmFsaWRYTG9nUmVjUHRyKTsKKwkJcGFfc2V0X2ZpbGVzZXRfc3RhdGUoTXlQYXJhbGxl bFNoYXJlZCwgTEVBREVSX0ZJTEVTRVRfVU5LTk9XTik7CisJfQorfQorCisvKgogICogSW50ZXJy dXB0IGhhbmRsZXIgZm9yIG1haW4gbG9vcHMgb2YgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgogICov CiBzdGF0aWMgdm9pZApAQCAtNTI2LDYgKzU4NSw4IEBAIExvZ2ljYWxQYXJhbGxlbEFwcGx5TG9v cChzaG1fbXFfaGFuZGxlICptcWgpCiAJCXsKIAkJCWludAkJCXJjOwogCisJCQlwYV9zcG9vbGVk X21lc3NhZ2VzKCk7CisKIAkJCWlmICghaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCQl7CiAJ CQkJLyoKQEAgLTk4NCw2ICsxMDQ1LDEwIEBAIHBhX2luaXRfYW5kX2xhdW5jaF93b3JrZXIodm9p ZCkKIC8qCiAgKiBTZW5kIHRoZSBkYXRhIHRvIHRoZSBzcGVjaWZpZWQgcGFyYWxsZWwgYXBwbHkg d29ya2VyIHZpYSBzaGFyZWQtbWVtb3J5CiAgKiBxdWV1ZS4KKyAqCisgKiBXaGVuIHNlbmRpbmcg ZGF0YSB0aW1lcyBvdXQsIGRhdGEgd2lsbCBiZSBzZXJpYWxpemVkIHRvIGRpc2suIEFuZCB0aGUK KyAqIGN1cnJlbnQgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHdpbGwgZW50ZXIgUEFSVElBTF9TRVJJ QUxJWkUgbW9kZSwgd2hpY2ggbWVhbnMKKyAqIHRoYXQgc3Vic2VxdWVudCBkYXRhIHdpbGwgYWxz byBiZSBzZXJpYWxpemVkIHRvIGRpc2suCiAgKi8KIHZvaWQKIHBhX3NlbmRfZGF0YShQYXJhbGxl bEFwcGx5V29ya2VySW5mbyAqd2luZm8sIFNpemUgbmJ5dGVzLCBjb25zdCB2b2lkICpkYXRhKQpA QCAtOTkzLDYgKzEwNTgsNyBAQCBwYV9zZW5kX2RhdGEoUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KndpbmZvLCBTaXplIG5ieXRlcywgY29uc3Qgdm9pZCAqZGF0YSkKIAlUaW1lc3RhbXBUeiBzdGFy dFRpbWUgPSAwOwogCiAJQXNzZXJ0KCFJc1RyYW5zYWN0aW9uU3RhdGUoKSk7CisJQXNzZXJ0KCF3 aW5mby0+c2VyaWFsaXplX2NoYW5nZXMpOwogCiAjZGVmaW5lIFNITV9TRU5EX1JFVFJZX0lOVEVS VkFMX01TIDEwMDAKICNkZWZpbmUgU0hNX1NFTkRfVElNRU9VVF9NUwkJMTAwMDAKQEAgLTEwMjcs OSArMTA5Myw1NiBAQCBwYV9zZW5kX2RhdGEoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZv LCBTaXplIG5ieXRlcywgY29uc3Qgdm9pZCAqZGF0YSkKIAogCQlpZiAoVGltZXN0YW1wRGlmZmVy ZW5jZUV4Y2VlZHMoc3RhcnRUaW1lLCBHZXRDdXJyZW50VGltZXN0YW1wKCksCiAJCQkJCQkJCQkg ICBTSE1fU0VORF9USU1FT1VUX01TKSkKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2Rl KEVSUkNPREVfQ09OTkVDVElPTl9GQUlMVVJFKSwKLQkJCQkJIGVycm1zZygidGVybWluYXRpbmcg bG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZHVlIHRvIHRpbWVvdXQi KSkpOworCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBtc2c7CisJCQlMb2dpY2FsUmVwTXNnVHlwZSBh Y3Rpb247CisKKwkJCS8qCisJCQkgKiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIG1pZ2h0IGJl IHN0dWNrIGZvciBzb21lIHJlYXNvbiwgc28KKwkJCSAqIHN0b3Agc2VuZGluZyBkYXRhIHRvIHBh cmFsbGVsIHdvcmtlciBhbmQgc3RhcnQgdG8gc2VyaWFsaXplCisJCQkgKiBkYXRhIHRvIGZpbGVz LgorCQkJICovCisJCQl3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMgPSB0cnVlOworCisJCQlpbml0 U3RyaW5nSW5mbygmbXNnKTsKKwkJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJm1zZywgZGF0YSwg bmJ5dGVzKTsKKworCQkJLyogU2tpcCBmaXJzdCBieXRlIGFuZCBzdGF0aXN0aWNzIGZpZWxkcy4g Ki8KKwkJCW1zZy5jdXJzb3IgKz0gU0laRV9TVEFUU19NRVNTQUdFICsgMTsKKworCQkJLyogSW5p dGlhbGl6ZSB0aGUgc3RyZWFtIGZpbGVzZXQuICovCisJCQlzZXJpYWxpemVfc3RyZWFtX3N0YXJ0 KHdpbmZvLT5zaGFyZWQtPnhpZCwgdHJ1ZSk7CisKKwkJCS8qIFdyaXRlIHRoaXMgbWVzc2FnZSB0 byBhIGZpbGUuICovCisJCQlhY3Rpb24gPSBwcV9nZXRtc2dieXRlKCZtc2cpOworCQkJc3RyZWFt X3dyaXRlX2NoYW5nZShhY3Rpb24sICZtc2cpOworCisJCQkvKgorCQkJICogVGhlIHN0cmVhbSBs b2NrIGlzIHJlbGVhc2VkIHdoZW4gcHJvY2Vzc2luZyBjaGFuZ2VzIGluIGEKKwkJCSAqIHN0cmVh bWluZyBibG9jaywgc28gdGhlIGxlYWRlciBuZWVkcyB0byBhY3F1aXJlIHRoZSBsb2NrIGhlcmUK KwkJCSAqIGJlZm9yZSBlbnRlcmluZyBQQVJUSUFMX1NFUklBTElaRSBtb2RlIHRvIGVuc3VyZSB0 aGF0IHRoZQorCQkJICogcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgd2FpdCBmb3IgdGhlIGxl YWRlciB0byByZWxlYXNlIHRoZQorCQkJICogc3RyZWFtIGxvY2suCisJCQkgKi8KKwkJCWlmIChp bl9zdHJlYW1lZF90cmFuc2FjdGlvbiAmJgorCQkJCWFjdGlvbiAhPSBMT0dJQ0FMX1JFUF9NU0df U1RSRUFNX1NUT1ApCisJCQl7CisJCQkJcGFfbG9ja19zdHJlYW0od2luZm8tPnNoYXJlZC0+eGlk LCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIENsb3NlIHRoZSBz dHJlYW0gZmlsZSBpZiBub3QgaW4gYSBzdHJlYW1pbmcgYmxvY2sgb3IgdGhlCisJCQkgKiBtZXNz YWdlIGJlaW5nIHByb2Nlc3NlZCBpcyB0aGUgbGFzdCBtZXNzYWdlIG9mIGEgc3RyZWFtaW5nCisJ CQkgKiBibG9jay4KKwkJCSAqLworCQkJZWxzZQorCQkJeworCQkJCXNlcmlhbGl6ZV9zdHJlYW1f c3RvcCh3aW5mby0+c2hhcmVkLT54aWQpOworCQkJfQorCisJCQlwYV9zZXRfZmlsZXNldF9zdGF0 ZSh3aW5mby0+c2hhcmVkLCBMRUFERVJfRklMRVNFVF9CVVNZKTsKKwkJCWJyZWFrOworCQl9CiAJ fQogfQogCkBAIC0xMjYwLDkgKzEzNzMsNDAgQEAgcGFfc3RyZWFtX2Fib3J0KExvZ2ljYWxSZXBT dHJlYW1BYm9ydERhdGEgKmFib3J0X2RhdGEpCiAKIAkJCWlmICh4aWRfdG1wID09IHN1YnhpZCkK IAkJCXsKKwkJCQlib29sCQlyZW9wZW5fc3RyZWFtX2ZkID0gZmFsc2U7CisJCQkJaW50CQkJZmls ZW5vOworCQkJCW9mZl90CQlvZmZzZXQ7CisKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBwYXJhbGxl bCBhcHBseSB3b3JrZXIgaXMgYXBwbHlpbmcgdGhlIHNwb29sZWQKKwkJCQkgKiBtZXNzYWdlcywg d2Ugc2F2ZSB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uIGFuZCBjbG9zZSB0aGUKKwkJCQkgKiBm aWxlIHRvIHByZXZlbnQgdGhlIGZpbGUgZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgY2xvc2VkIG9u CisJCQkJICogcm9sbGJhY2suCisJCQkJICovCisJCQkJaWYgKHN0cmVhbV9mZCkKKwkJCQl7CisJ CQkJCUJ1ZkZpbGVUZWxsKHN0cmVhbV9mZCwgJmZpbGVubywgJm9mZnNldCk7CisJCQkJCUJ1ZkZp bGVDbG9zZShzdHJlYW1fZmQpOworCQkJCQlyZW9wZW5fc3RyZWFtX2ZkID0gdHJ1ZTsKKwkJCQl9 CisKIAkJCQlSb2xsYmFja1RvU2F2ZXBvaW50KHNwbmFtZSk7CiAJCQkJQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKCk7CiAJCQkJc3VieGFjdGxpc3QgPSBsaXN0X3RydW5jYXRlKHN1YnhhY3RsaXN0 LCBpICsgMSk7CisKKwkJCQkvKgorCQkJCSAqIFJlb3BlbiB0aGUgZmlsZSBhbmQgc2V0IHRoZSBm aWxlIHBvc2l0aW9uIHRvIHRoZSBzYXZlZAorCQkJCSAqIHBvc2l0aW9uLgorCQkJCSAqLworCQkJ CWlmIChyZW9wZW5fc3RyZWFtX2ZkKQorCQkJCXsKKwkJCQkJY2hhcgkJcGF0aFtNQVhQR1BBVEhd OworCisJCQkJCWNoYW5nZXNfZmlsZW5hbWUocGF0aCwgTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJp ZCwgeGlkKTsKKwkJCQkJc3RyZWFtX2ZkID0gQnVmRmlsZU9wZW5GaWxlU2V0KCZNeVBhcmFsbGVs U2hhcmVkLT5maWxlc2V0LAorCQkJCQkJCQkJCQkJICAgcGF0aCwgT19SRE9OTFksIGZhbHNlKTsK KwkJCQkJQnVmRmlsZVNlZWsoc3RyZWFtX2ZkLCBmaWxlbm8sIG9mZnNldCwgU0VFS19TRVQpOwor CQkJCX0KIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMTI3Miw2ICsxNDE2LDI4IEBAIHBhX3N0 cmVhbV9hYm9ydChMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhICphYm9ydF9kYXRhKQogfQogCiAv KgorICogU2V0IHRoZSBmaWxlc2V0X3N0YXRlIGZsYWcgZm9yIHRoZSBnaXZlbiBwYXJhbGxlbCBh cHBseSB3b3JrZXIuIFRoZQorICogc3RyZWFtX2ZpbGVzZXQgb2YgdGhlIGxlYWRlciBhcHBseSB3 b3JrZXIgd2lsbCBiZSB3cml0dGVuIGludG8gdGhlIHNoYXJlZAorICogbWVtb3J5IGlmIHRoZSBm aWxlc2V0X3N0YXRlIGlzIExFQURFUl9GSUxFU0VUX0FDQ0VTU0lCTEUuCisgKi8KK3ZvaWQKK3Bh X3NldF9maWxlc2V0X3N0YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQsCisJ CQkJCSBMZWFkZXJGaWxlU2V0U3RhdGUgZmlsZXNldF9zdGF0ZSkKK3sKKwlTcGluTG9ja0FjcXVp cmUoJndzaGFyZWQtPm11dGV4KTsKKwl3c2hhcmVkLT5maWxlc2V0X3N0YXRlID0gZmlsZXNldF9z dGF0ZTsKKworCWlmIChmaWxlc2V0X3N0YXRlID09IExFQURFUl9GSUxFU0VUX0FDQ0VTU0lCTEUp CisJeworCQlBc3NlcnQoYW1fbGVhZGVyX2FwcGx5X3dvcmtlcigpKTsKKwkJQXNzZXJ0KE15TG9n aWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQpOworCQl3c2hhcmVkLT5maWxlc2V0ID0gKk15 TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQ7CisJfQorCisJU3BpbkxvY2tSZWxlYXNl KCZ3c2hhcmVkLT5tdXRleCk7Cit9CisKKy8qCiAgKiBIZWxwZXIgZnVuY3Rpb25zIHRvIGFjcXVp cmUgYW5kIHJlbGVhc2UgYSBsb2NrIGZvciBlYWNoIHN0cmVhbSBibG9jay4KICAqCiAgKiBTZXQg bG9ja3RhZ19maWVsZDQgdG8gUEFSQUxMRUxfQVBQTFlfTE9DS19TVFJFQU0gdG8gaW5kaWNhdGUg dGhhdCBpdCdzIGEKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv d29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4 IGEyMTMxNWYuLjI3Yzc2YzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3Jr ZXIuYwpAQCAtMjE5LDcgKzIxOSw2IEBACiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2FscmVjZWl2 ZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCIKICNpbmNsdWRl ICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9idWZmaWxlLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKQEAgLTI3OCw2ICsyNzcsMTkgQEAgdHlwZWRlZiBzdHJ1 Y3QgQXBwbHlFeGVjdXRpb25EYXRhCiAgKiBDaGFuZ2VzIGFyZSB3cml0dGVuIHRvIHRlbXBvcmFy eSBmaWxlcyBhbmQgdGhlbiBhcHBsaWVkIHdoZW4gdGhlIGZpbmFsCiAgKiBjb21taXQgYXJyaXZl cy4KICAqCisgKiBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkU6CisgKiBUaGUgYWN0aW9u IG1lYW5zIHRoYXQgd2UgYXJlIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBoYXZlIHNl bnQgc29tZQorICogY2hhbmdlcyB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLCBidXQgdGhl IHJlbWFpbmluZyBjaGFuZ2VzIG5lZWQgdG8gYmUKKyAqIHNlcmlhbGl6ZWQgdG8gZGlzayBkdWUg dG8gdGltZW91dCB3aGlsZSBzZW5kaW5nIGRhdGEsIGFuZCB0aGUgcGFyYWxsZWwgYXBwbHkKKyAq IHdvcmtlciB3aWxsIGFwcGx5IHRoZXNlIGNoYW5nZXMgd2hlbiB0aGUgZmluYWwgY29tbWl0IGFy cml2ZXMuCisgKgorICogT25lIG1pZ2h0IHRoaW5rIHdlIGNhbiB1c2UgTEVBREVSX1NFUklBTEla RSBkaXJlY3RseS4gQnV0IGluIHBhcnRpYWwKKyAqIHNlcmlhbGl6ZSBtb2RlLCBpbiBhZGRpdGlv biB0byBzZXJpYWxpemluZyBjaGFuZ2VzIHRvIGZpbGUsIHRoZSBsZWFkZXIKKyAqIHdvcmtlciBu ZWVkcyB0byB3cml0ZSB0aGUgU1RSRUFNX1hYWCBtZXNzYWdlIHRvIGRpc2ssIGFuZCBuZWVkcyB0 byB3YWl0IGZvcgorICogcGFyYWxsZWwgYXBwbHkgd29ya2VyIHRvIGZpbmlzaCB0aGUgdHJhbnNh Y3Rpb24gd2hlbiBwcm9jZXNzaW5nIHRoZQorICogdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQu IFNvIGEgbmV3IGFjdGlvbiB3YXMgaW50cm9kdWNlZCB0byBtYWtlIHRoZSBsb2dpYworICogY2xl YXJlci4KKyAqCiAgKiBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKICAqIFRoZSBhY3Rp b24gbWVhbnMgdGhhdCB3ZSBhcmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIG5lZWQg dG8gc2VuZCB0aGUKICAqIGNoYW5nZXMgdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KQEAg LTI5Myw2ICszMDUsNyBAQCB0eXBlZGVmIGVudW0KIAogCS8qIEFjdGlvbnMgZm9yIHN0cmVhbWlu ZyB0cmFuc2FjdGlvbnMuICovCiAJVFJBTlNfTEVBREVSX1NFUklBTElaRSwKKwlUUkFOU19MRUFE RVJfUEFSVElBTF9TRVJJQUxJWkUsCiAJVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUwsCiAJ VFJBTlNfUEFSQUxMRUxfQVBQTFkKIH0gVHJhbnNBcHBseUFjdGlvbjsKQEAgLTM1NCw3ICszNjcs NyBAQCBzdGF0aWMgWExvZ1JlY1B0ciBza2lwX3hhY3RfZmluaXNoX2xzbiA9IEludmFsaWRYTG9n UmVjUHRyOwogI2RlZmluZSBpc19za2lwcGluZ19jaGFuZ2VzKCkgKHVubGlrZWx5KCFYTG9nUmVj UHRySXNJbnZhbGlkKHNraXBfeGFjdF9maW5pc2hfbHNuKSkpCiAKIC8qIEJ1ZkZpbGUgaGFuZGxl IG9mIHRoZSBjdXJyZW50IHN0cmVhbWluZyBmaWxlICovCi1zdGF0aWMgQnVmRmlsZSAqc3RyZWFt X2ZkID0gTlVMTDsKK0J1ZkZpbGUgICAgKnN0cmVhbV9mZCA9IE5VTEw7CiAKIHR5cGVkZWYgc3Ry dWN0IFN1YlhhY3RJbmZvCiB7CkBAIC0zNzUsNyArMzg4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBw bHlTdWJYYWN0RGF0YQogc3RhdGljIEFwcGx5U3ViWGFjdERhdGEgc3VieGFjdF9kYXRhID0gezAs IDAsIEludmFsaWRUcmFuc2FjdGlvbklkLCBOVUxMfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHN1 YnhhY3RfZmlsZW5hbWUoY2hhciAqcGF0aCwgT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCk7 Ci1zdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlc19maWxlbmFtZShjaGFyICpwYXRoLCBPaWQgc3Vi aWQsIFRyYW5zYWN0aW9uSWQgeGlkKTsKK2lubGluZSB2b2lkIGNoYW5nZXNfZmlsZW5hbWUoY2hh ciAqcGF0aCwgT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCk7CiAKIC8qCiAgKiBJbmZvcm1h dGlvbiBhYm91dCBzdWJ0cmFuc2FjdGlvbnMgb2YgYSBnaXZlbiB0b3BsZXZlbCB0cmFuc2FjdGlv bi4KQEAgLTM4OCwxMCArNDAxLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFudXBfc3VieGFj dF9pbmZvKHZvaWQpOwogLyoKICAqIFNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgY2hhbmdlcyBm b3IgYSB0b3BsZXZlbCB0cmFuc2FjdGlvbi4KICAqLwotc3RhdGljIHZvaWQgc3RyZWFtX2NsZWFu dXBfZmlsZXMoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCk7CiBzdGF0aWMgdm9pZCBzdHJl YW1fb3Blbl9maWxlKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJIGJvb2wg Zmlyc3Rfc2VnbWVudCk7Ci1zdGF0aWMgdm9pZCBzdHJlYW1fd3JpdGVfY2hhbmdlKGNoYXIgYWN0 aW9uLCBTdHJpbmdJbmZvIHMpOworc3RhdGljIHZvaWQgc3RyZWFtX3dyaXRlX21lc3NhZ2UoVHJh bnNhY3Rpb25JZCB4aWQsIGNoYXIgYWN0aW9uLCBTdHJpbmdJbmZvIHMpOwogc3RhdGljIHZvaWQg c3RyZWFtX2Nsb3NlX2ZpbGUodm9pZCk7CiAKIHN0YXRpYyB2b2lkIHNlbmRfZmVlZGJhY2soWExv Z1JlY1B0ciByZWN2cG9zLCBib29sIGZvcmNlLCBib29sIHJlcXVlc3RSZXBseSk7CkBAIC00MjMs OSArNDM1LDYgQEAgc3RhdGljIHZvaWQgYXBwbHlfaGFuZGxlX3R1cGxlX3JvdXRpbmcoQXBwbHlF eGVjdXRpb25EYXRhICplZGF0YSwKIC8qIENvbXB1dGUgR0lEIGZvciB0d29fcGhhc2UgdHJhbnNh Y3Rpb25zICovCiBzdGF0aWMgdm9pZCBUd29QaGFzZVRyYW5zYWN0aW9uR2lkKE9pZCBzdWJpZCwg VHJhbnNhY3Rpb25JZCB4aWQsIGNoYXIgKmdpZCwgaW50IHN6Z2lkKTsKIAotLyogQ29tbW9uIHN0 cmVhbWluZyBmdW5jdGlvbiB0byBhcHBseSBhbGwgdGhlIHNwb29sZWQgbWVzc2FnZXMgKi8KLXN0 YXRpYyB2b2lkIGFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dS ZWNQdHIgbHNuKTsKLQogLyogRnVuY3Rpb25zIGZvciBza2lwcGluZyBjaGFuZ2VzICovCiBzdGF0 aWMgdm9pZCBtYXliZV9zdGFydF9za2lwcGluZ19jaGFuZ2VzKFhMb2dSZWNQdHIgZmluaXNoX2xz bik7CiBzdGF0aWMgdm9pZCBzdG9wX3NraXBwaW5nX2NoYW5nZXModm9pZCk7CkBAIC01ODYsNiAr NTk1LDcgQEAgaGFuZGxlX3N0cmVhbWVkX3RyYW5zYWN0aW9uKExvZ2ljYWxSZXBNc2dUeXBlIGFj dGlvbiwgU3RyaW5nSW5mbyBzKQogCVRyYW5zYWN0aW9uSWQgY3VycmVudF94aWQ7CiAJUGFyYWxs ZWxBcHBseVdvcmtlckluZm8gKndpbmZvOwogCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9u OworCVN0cmluZ0luZm9EYXRhIG9yaWdpbmFsX21zZzsKIAogCWFwcGx5X2FjdGlvbiA9IGdldF90 cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oc3RyZWFtX3hpZCwgJndpbmZvKTsKIApAQCAtNTk1LDYg KzYwNSw4IEBAIGhhbmRsZV9zdHJlYW1lZF90cmFuc2FjdGlvbihMb2dpY2FsUmVwTXNnVHlwZSBh Y3Rpb24sIFN0cmluZ0luZm8gcykKIAogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChzdHJl YW1feGlkKSk7CiAKKwlvcmlnaW5hbF9tc2cgPSAqczsKKwogCS8qCiAJICogV2Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgWElEIG9mIHRoZSBzdWJ4YWN0IGFzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZQog CSAqIG1lc3NhZ2UsIHNvIGV4dHJhY3QgaXQuCkBAIC02MTgsMTAgKzYzMCwxNCBAQCBoYW5kbGVf c3RyZWFtZWRfdHJhbnNhY3Rpb24oTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJbmZv IHMpCiAJCQlzdHJlYW1fd3JpdGVfY2hhbmdlKGFjdGlvbiwgcyk7CiAJCQlyZXR1cm4gdHJ1ZTsK IAorCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRToKIAkJY2FzZSBUUkFOU19M RUFERVJfU0VORF9UT19QQVJBTExFTDoKIAkJCUFzc2VydCh3aW5mbyk7CiAKLQkJCXBhX3NlbmRf ZGF0YSh3aW5mbywgcy0+bGVuLCBzLT5kYXRhKTsKKwkJCWlmIChhcHBseV9hY3Rpb24gPT0gVFJB TlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUwpCisJCQkJcGFfc2VuZF9kYXRhKHdpbmZvLCBzLT5s ZW4sIHMtPmRhdGEpOworCQkJZWxzZQorCQkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoYWN0aW9uLCAm b3JpZ2luYWxfbXNnKTsKIAogCQkJLyoKIAkJCSAqIFhYWCBUaGUgcHVibGlzaGVyIHNpZGUgZG9l c24ndCBhbHdheXMgc2VuZCByZWxhdGlvbi90eXBlIHVwZGF0ZQpAQCAtMTI2Niw2ICsxMjgyLDcg QEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAlMb2dpY2FsUmVw UHJlcGFyZWRUeG5EYXRhIHByZXBhcmVfZGF0YTsKIAlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAq d2luZm87CiAJVHJhbnNBcHBseUFjdGlvbiBhcHBseV9hY3Rpb247CisJU3RyaW5nSW5mb0RhdGEg b3JpZ2luYWxfbXNnID0gKnM7CiAKIAlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVy ZXBvcnQoRVJST1IsCkBAIC0xMjkxLDcgKzEzMDgsOCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3By ZXBhcmUoU3RyaW5nSW5mbyBzKQogCQkJICogVGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHNlcmlh bGl6ZWQgdG8gZmlsZSwgc28gcmVwbGF5IGFsbCB0aGUKIAkJCSAqIHNwb29sZWQgb3BlcmF0aW9u cy4KIAkJCSAqLwotCQkJYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhwcmVwYXJlX2RhdGEueGlkLCBw cmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOworCQkJYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhNeUxv Z2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0LAorCQkJCQkJCQkgICBwcmVwYXJlX2RhdGEu eGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOwogCiAJCQkvKiBNYXJrIHRoZSB0cmFuc2Fj dGlvbiBhcyBwcmVwYXJlZC4gKi8KIAkJCWFwcGx5X2hhbmRsZV9wcmVwYXJlX2ludGVybmFsKCZw cmVwYXJlX2RhdGEpOwpAQCAtMTMwNyw2ICsxMzI1LDcgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9w cmVwYXJlKFN0cmluZ0luZm8gcykKIAkJCWJyZWFrOwogCiAJCWNhc2UgVFJBTlNfTEVBREVSX1NF TkRfVE9fUEFSQUxMRUw6CisJCWNhc2UgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgog CQkJQXNzZXJ0KHdpbmZvKTsKIAogCQkJLyoKQEAgLTEzMTYsMTMgKzEzMzUsMjEgQEAgYXBwbHlf aGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAkJCXBhX3VubG9ja19zdHJlYW0o d2luZm8tPnNoYXJlZC0+eGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKIAogCQkJLyogU2VuZCBT VFJFQU0gUFJFUEFSRSBtZXNzYWdlIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuICovCi0J CQlwYV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CisJCQlpZiAoYXBwbHlfYWN0 aW9uID09IFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMKQorCQkJCXBhX3NlbmRfZGF0YSh3 aW5mbywgcy0+bGVuLCBzLT5kYXRhKTsKKwkJCWVsc2UKKwkJCQlzdHJlYW1fd3JpdGVfbWVzc2Fn ZShwcmVwYXJlX2RhdGEueGlkLAorCQkJCQkJCQkJIExPR0lDQUxfUkVQX01TR19TVFJFQU1fUFJF UEFSRSwKKwkJCQkJCQkJCSAmb3JpZ2luYWxfbXNnKTsKKworCQkJaWYgKHdpbmZvLT5zZXJpYWxp emVfY2hhbmdlcykKKwkJCQlwYV9zZXRfZmlsZXNldF9zdGF0ZSh3aW5mby0+c2hhcmVkLCBMRUFE RVJfRklMRVNFVF9BQ0NFU1NJQkxFKTsKIAogCQkJLyoKLQkJCSAqIEFmdGVyIHNlbmRpbmcgdGhl IGRhdGEgdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciwgd2FpdCBmb3IKLQkJCSAqIHRoYXQg d29ya2VyIHRvIGZpbmlzaC4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFpbnRhaW4gY29tbWl0Ci0J CQkgKiBvcmRlciB3aGljaCBhdm9pZHMgZmFpbHVyZXMgZHVlIHRvIHRyYW5zYWN0aW9uIGRlcGVu ZGVuY2llcyBhbmQKLQkJCSAqIGRlYWRsb2Nrcy4KKwkJCSAqIEFmdGVyIHNlbmRpbmcgdGhlIGRh dGEgdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBvcgorCQkJICogc2VyaWFsaXppbmcgZGF0 YSB0byBmaWxlLCB3YWl0IGZvciB0aGF0IHdvcmtlciB0byBmaW5pc2guIFRoaXMKKwkJCSAqIGlz IG5lY2Vzc2FyeSB0byBtYWludGFpbiBjb21taXQgb3JkZXIgd2hpY2ggYXZvaWRzIGZhaWx1cmVz IGR1ZQorCQkJICogdG8gdHJhbnNhY3Rpb24gZGVwZW5kZW5jaWVzIGFuZCBkZWFkbG9ja3MuCiAJ CQkgKi8KIAkJCXBhX3dhaXRfZm9yX3hhY3RfZmluaXNoKHdpbmZvKTsKIAkJCSh2b2lkKSBwYV9m cmVlX3dvcmtlcih3aW5mbywgcHJlcGFyZV9kYXRhLnhpZCk7CkBAIC0xMzMzLDYgKzEzNjAsMTQg QEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAkJCWJyZWFrOwog CiAJCWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisKKwkJCS8qCisJCQkgKiBDbG9zZSB0aGUg ZmlsZSBiZWZvcmUgY29tbWl0dGluZyBpZiB0aGUgcGFyYWxsZWwgYXBwbHkgaXMKKwkJCSAqIGFw cGx5aW5nIHNwb29sZWQgY2hhbmdlcy4KKwkJCSAqLworCQkJaWYgKHN0cmVhbV9mZCkKKwkJCQlC dWZGaWxlQ2xvc2Uoc3RyZWFtX2ZkKTsKKwogCQkJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOwog CiAJCQlsaXN0X2ZyZWUoc3VieGFjdGxpc3QpOwpAQCAtMTM5Myw3ICsxNDI4LDQ2IEBAIGFwcGx5 X2hhbmRsZV9vcmlnaW4oU3RyaW5nSW5mbyBzKQogCQkJCSBlcnJtc2dfaW50ZXJuYWwoIk9SSUdJ TiBtZXNzYWdlIHNlbnQgb3V0IG9mIG9yZGVyIikpKTsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUg ZmlsZXNldCAoaWYgbm90IGFscmVhZHkgZG9uZSkuCisgKgorICogQ3JlYXRlIGEgbmV3IGZpbGUg d2hlbiBmaXJzdF9zZWdtZW50IGlzIHRydWUsIG90aGVyd2lzZSBvcGVuIHRoZSBleGlzdGluZwor ICogZmlsZS4KKyAqLwordm9pZAorc2VyaWFsaXplX3N0cmVhbV9zdGFydChUcmFuc2FjdGlvbklk IHhpZCwgYm9vbCBmaXJzdF9zZWdtZW50KQoreworCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsK KworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgd29ya2VyJ3Mgc3RyZWFtX2ZpbGVzZXQgaWYgd2Ug aGF2ZW4ndCB5ZXQuIFRoaXMgd2lsbCBiZQorCSAqIHVzZWQgZm9yIHRoZSBlbnRpcmUgZHVyYXRp b24gb2YgdGhlIHdvcmtlciBzbyBjcmVhdGUgaXQgaW4gYSBwZXJtYW5lbnQKKwkgKiBjb250ZXh0 LiBXZSBjcmVhdGUgdGhpcyBvbiB0aGUgdmVyeSBmaXJzdCBzdHJlYW1pbmcgbWVzc2FnZSBmcm9t IGFueQorCSAqIHRyYW5zYWN0aW9uIGFuZCB0aGVuIHVzZSBpdCBmb3IgdGhpcyBhbmQgb3RoZXIg c3RyZWFtaW5nIHRyYW5zYWN0aW9ucy4KKwkgKiBOb3csIHdlIGNvdWxkIGNyZWF0ZSBhIGZpbGVz ZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSB3b3JrZXIgYXMgd2VsbCBidXQKKwkgKiB0aGVuIHdlIHdv bid0IGJlIHN1cmUgdGhhdCBpdCB3aWxsIGV2ZXIgYmUgdXNlZC4KKwkgKi8KKwlpZiAoIU15TG9n aWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQpCisJeworCQlNZW1vcnlDb250ZXh0IG9sZGN0 eDsKKworCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsKIAor CQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID0gcGFsbG9jKHNpemVvZihGaWxl U2V0KSk7CisJCUZpbGVTZXRJbml0KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQp OworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCX0KKworCS8qIE9wZW4gdGhl IHNwb29sIGZpbGUgZm9yIHRoaXMgdHJhbnNhY3Rpb24uICovCisJc3RyZWFtX29wZW5fZmlsZShN eUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQsIGZpcnN0X3NlZ21lbnQpOworCisJLyogSWYg dGhpcyBpcyBub3QgdGhlIGZpcnN0IHNlZ21lbnQsIG9wZW4gZXhpc3Rpbmcgc3VieGFjdCBmaWxl LiAqLworCWlmICghZmlyc3Rfc2VnbWVudCkKKwkJc3VieGFjdF9pbmZvX3JlYWQoTXlMb2dpY2Fs UmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKKworCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7Cit9CiAK IC8qCiAgKiBIYW5kbGUgU1RSRUFNIFNUQVJUIG1lc3NhZ2UuCkBAIC0xNDA0LDYgKzE0NzgsNyBA QCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0luZm8gcykKIAlib29sCQlmaXJzdF9z ZWdtZW50OwogCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKIAlUcmFuc0FwcGx5QWN0 aW9uIGFwcGx5X2FjdGlvbjsKKwlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2cgPSAqczsKIAog CWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTE0MzQs NDMgKzE1MDksMjYgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChTdHJpbmdJbmZvIHMpCiAJ CWNhc2UgVFJBTlNfTEVBREVSX1NFUklBTElaRToKIAogCQkJLyoKLQkJCSAqIFN0YXJ0IGEgdHJh bnNhY3Rpb24gb24gc3RyZWFtIHN0YXJ0LCB0aGlzIHRyYW5zYWN0aW9uIHdpbGwgYmUKLQkJCSAq IGNvbW1pdHRlZCBvbiB0aGUgc3RyZWFtIHN0b3AgdW5sZXNzIGl0IGlzIGEgdGFibGVzeW5jIHdv cmtlciBpbgotCQkJICogd2hpY2ggY2FzZSBpdCB3aWxsIGJlIGNvbW1pdHRlZCBhZnRlciBwcm9j ZXNzaW5nIGFsbCB0aGUKLQkJCSAqIG1lc3NhZ2VzLiBXZSBuZWVkIHRoZSB0cmFuc2FjdGlvbiBm b3IgaGFuZGxpbmcgdGhlIGJ1ZmZpbGUsCi0JCQkgKiB1c2VkIGZvciBzZXJpYWxpemluZyB0aGUg c3RyZWFtaW5nIGRhdGEgYW5kIHN1YnhhY3QgaW5mby4KKwkJCSAqIHNlcmlhbGl6ZV9zdHJlYW1f c3RhcnQgd2lsbCBzdGFydCBhIHRyYW5zYWN0aW9uLCB0aGlzCisJCQkgKiB0cmFuc2FjdGlvbiB3 aWxsIGJlIGNvbW1pdHRlZCBvbiB0aGUgc3RyZWFtIHN0b3AgdW5sZXNzIGl0IGlzIGEKKwkJCSAq IHRhYmxlc3luYyB3b3JrZXIgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJlIGNvbW1pdHRlZCBhZnRl cgorCQkJICogcHJvY2Vzc2luZyBhbGwgdGhlIG1lc3NhZ2VzLiBXZSBuZWVkIHRoZSB0cmFuc2Fj dGlvbiBmb3IKKwkJCSAqIGhhbmRsaW5nIHRoZSBidWZmaWxlLCB1c2VkIGZvciBzZXJpYWxpemlu ZyB0aGUgc3RyZWFtaW5nIGRhdGEKKwkJCSAqIGFuZCBzdWJ4YWN0IGluZm8uCiAJCQkgKi8KLQkJ CWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKwkJCXNlcmlhbGl6ZV9zdHJlYW1fc3RhcnQoc3Ry ZWFtX3hpZCwgZmlyc3Rfc2VnbWVudCk7CisJCQlicmVhazsKIAorCQljYXNlIFRSQU5TX0xFQURF Ul9QQVJUSUFMX1NFUklBTElaRToKIAkJCS8qCi0JCQkgKiBJbml0aWFsaXplIHRoZSB3b3JrZXIn cyBzdHJlYW1fZmlsZXNldCBpZiB3ZSBoYXZlbid0IHlldC4gVGhpcwotCQkJICogd2lsbCBiZSB1 c2VkIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIHRoZSB3b3JrZXIgc28gY3JlYXRlIGl0Ci0J CQkgKiBpbiBhIHBlcm1hbmVudCBjb250ZXh0LiBXZSBjcmVhdGUgdGhpcyBvbiB0aGUgdmVyeSBm aXJzdAotCQkJICogc3RyZWFtaW5nIG1lc3NhZ2UgZnJvbSBhbnkgdHJhbnNhY3Rpb24gYW5kIHRo ZW4gdXNlIGl0IGZvciB0aGlzCi0JCQkgKiBhbmQgb3RoZXIgc3RyZWFtaW5nIHRyYW5zYWN0aW9u cy4gTm93LCB3ZSBjb3VsZCBjcmVhdGUgYQotCQkJICogZmlsZXNldCBhdCB0aGUgc3RhcnQgb2Yg dGhlIHdvcmtlciBhcyB3ZWxsIGJ1dCB0aGVuIHdlIHdvbid0IGJlCi0JCQkgKiBzdXJlIHRoYXQg aXQgd2lsbCBldmVyIGJlIHVzZWQuCisJCQkgKiBUaGUgZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGNy ZWF0ZWQgd2hlbiBlbnRlcmluZworCQkJICogUEFSVElBTF9TRVJJQUxJWkUgbW9kZSBzbyBubyBu ZWVkIHRvIGNyZWF0ZSBpdCBhZ2Fpbi4gVGhlCisJCQkgKiB0cmFuc2FjdGlvbiBzdGFydGVkIGlu IHNlcmlhbGl6ZV9zdHJlYW1fc3RhcnQgd2lsbCBiZSBjb21taXR0ZWQKKwkJCSAqIG9uIHRoZSBz dHJlYW0gc3RvcC4KIAkJCSAqLwotCQkJaWYgKCFNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9m aWxlc2V0KQotCQkJewotCQkJCU1lbW9yeUNvbnRleHQgb2xkY3R4OwotCi0JCQkJb2xkY3R4ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7Ci0KLQkJCQlNeUxvZ2ljYWxSZXBX b3JrZXItPnN0cmVhbV9maWxlc2V0ID0gcGFsbG9jKHNpemVvZihGaWxlU2V0KSk7Ci0JCQkJRmls ZVNldEluaXQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCk7Ci0KLQkJCQlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKLQkJCX0KKwkJCXNlcmlhbGl6ZV9zdHJlYW1fc3Rh cnQoc3RyZWFtX3hpZCwgZmFsc2UpOworCQkJc3RyZWFtX3dyaXRlX2NoYW5nZShMT0dJQ0FMX1JF UF9NU0dfU1RSRUFNX1NUQVJULCAmb3JpZ2luYWxfbXNnKTsKIAotCQkJLyogT3BlbiB0aGUgc3Bv b2wgZmlsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbi4gKi8KLQkJCXN0cmVhbV9vcGVuX2ZpbGUoTXlM b2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hpZCwgZmlyc3Rfc2VnbWVudCk7Ci0KLQkJ CS8qIElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBzZWdtZW50LCBvcGVuIGV4aXN0aW5nIHN1Ynhh Y3QgZmlsZS4gKi8KLQkJCWlmICghZmlyc3Rfc2VnbWVudCkKLQkJCQlzdWJ4YWN0X2luZm9fcmVh ZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBzdHJlYW1feGlkKTsKLQotCQkJZW5kX3JlcGxp Y2F0aW9uX3N0ZXAoKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9f UEFSQUxMRUw6CkBAIC0xNTE1LDYgKzE1NzMsMzQgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFy dChTdHJpbmdJbmZvIHMpCiB9CiAKIC8qCisgKiBVcGRhdGUgdGhlIGluZm9ybWF0aW9uIGFib3V0 IHN1YnhhY3RzIGFuZCBjbG9zZSB0aGUgZmlsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3Vs ZCBiZSBjYWxsZWQgd2hlbiB0aGUgc2VyaWFsaXplX3N0cmVhbV9zdGFydCBmdW5jdGlvbiBoYXMK KyAqIGJlZW4gY2FsbGVkLgorICovCit2b2lkCitzZXJpYWxpemVfc3RyZWFtX3N0b3AoVHJhbnNh Y3Rpb25JZCB4aWQpCit7CisJLyoKKwkgKiBDbG9zZSB0aGUgZmlsZSB3aXRoIHNlcmlhbGl6ZWQg Y2hhbmdlcywgYW5kIHNlcmlhbGl6ZSBpbmZvcm1hdGlvbiBhYm91dAorCSAqIHN1YnhhY3RzIGZv ciB0aGUgdG9wbGV2ZWwgdHJhbnNhY3Rpb24uCisJICovCisJc3VieGFjdF9pbmZvX3dyaXRlKE15 TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CisJc3RyZWFtX2Nsb3NlX2ZpbGUoKTsKKwor CS8qIFdlIG11c3QgYmUgaW4gYSB2YWxpZCB0cmFuc2FjdGlvbiBzdGF0ZSAqLworCUFzc2VydChJ c1RyYW5zYWN0aW9uU3RhdGUoKSk7CisKKwkvKiBDb21taXQgdGhlIHBlci1zdHJlYW0gdHJhbnNh Y3Rpb24gKi8KKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qIFJlc2V0IHBlci1z dHJlYW0gY29udGV4dCAqLworCU1lbW9yeUNvbnRleHRSZXNldChMb2dpY2FsU3RyZWFtaW5nQ29u dGV4dCk7CisKKwlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEUsIE5VTEwpOworfQor CisvKgogICogSGFuZGxlIFNUUkVBTSBTVE9QIG1lc3NhZ2UuCiAgKi8KIHN0YXRpYyB2b2lkCkBA IC0xNTMzLDI0ICsxNjE5LDEzIEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fc3RvcChTdHJpbmdJbmZv IHMpCiAJc3dpdGNoIChhcHBseV9hY3Rpb24pCiAJewogCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJ QUxJWkU6CisJCQlzZXJpYWxpemVfc3RyZWFtX3N0b3Aoc3RyZWFtX3hpZCk7CisJCQlicmVhazsK IAotCQkJLyoKLQkJCSAqIENsb3NlIHRoZSBmaWxlIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzLCBh bmQgc2VyaWFsaXplCi0JCQkgKiBpbmZvcm1hdGlvbiBhYm91dCBzdWJ4YWN0cyBmb3IgdGhlIHRv cGxldmVsIHRyYW5zYWN0aW9uLgotCQkJICovCi0JCQlzdWJ4YWN0X2luZm9fd3JpdGUoTXlMb2dp Y2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hpZCk7Ci0JCQlzdHJlYW1fY2xvc2VfZmlsZSgp OwotCi0JCQkvKiBXZSBtdXN0IGJlIGluIGEgdmFsaWQgdHJhbnNhY3Rpb24gc3RhdGUgKi8KLQkJ CUFzc2VydChJc1RyYW5zYWN0aW9uU3RhdGUoKSk7Ci0KLQkJCS8qIENvbW1pdCB0aGUgcGVyLXN0 cmVhbSB0cmFuc2FjdGlvbiAqLwotCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7Ci0KLQkJ CS8qIFJlc2V0IHBlci1zdHJlYW0gY29udGV4dCAqLwotCQkJTWVtb3J5Q29udGV4dFJlc2V0KExv Z2ljYWxTdHJlYW1pbmdDb250ZXh0KTsKLQotCQkJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFU RV9JRExFLCBOVUxMKTsKKwkJY2FzZSBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkU6CisJ CQlzdHJlYW1fd3JpdGVfY2hhbmdlKExPR0lDQUxfUkVQX01TR19TVFJFQU1fU1RPUCwgcyk7CisJ CQlzZXJpYWxpemVfc3RyZWFtX3N0b3Aoc3RyZWFtX3hpZCk7CisJCQlzdHJlYW1fYXBwbHlfd29y a2VyID0gTlVMTDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFS QUxMRUw6CkBAIC0xNjkzLDYgKzE3NjgsNyBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0 cmluZ0luZm8gcykKIAlMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhIGFib3J0X2RhdGE7CiAJUGFy YWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOwogCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0 aW9uOworCVN0cmluZ0luZm9EYXRhIG9yaWdpbmFsX21zZyA9ICpzOwogCWJvb2wJCXRvcGxldmVs X3hhY3Q7CiAKIAlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCkBAIC0xNzIzLDYgKzE3OTks MjYgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIHMpCiAJCQlzZXJpYWxp emVfc3RyZWFtX2Fib3J0KHhpZCwgc3VieGlkKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgVFJBTlNf TEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJLyoKKwkJ CSAqIFBhcmFsbGVsIGFwcGx5IHdvcmtlciBtaWdodCBoYXZlIGFwcGxpZWQgc29tZSBjaGFuZ2Vz LCBzbyB3cml0ZQorCQkJICogdGhlIFNUUkVBTV9BQk9SVCBtZXNzYWdlIHNvIHRoYXQgdGhlIHBh cmFsbGVsIGFwcGx5IHdvcmtlciBjYW4KKwkJCSAqIHJvbGxiYWNrIHRoZSBzdWJ0cmFuc2FjdGlv biBpZiBuZWVkZWQuCisJCQkgKi8KKwkJCXN0cmVhbV93cml0ZV9tZXNzYWdlKHhpZCwgTE9HSUNB TF9SRVBfTVNHX1NUUkVBTV9BQk9SVCwKKwkJCQkJCQkJICZvcmlnaW5hbF9tc2cpOworCisJCQlp ZiAodG9wbGV2ZWxfeGFjdCkKKwkJCXsKKwkJCQlwYV91bmxvY2tfc3RyZWFtKHhpZCwgQWNjZXNz RXhjbHVzaXZlTG9jayk7CisJCQkJcGFfc2V0X2ZpbGVzZXRfc3RhdGUod2luZm8tPnNoYXJlZCwg TEVBREVSX0ZJTEVTRVRfQUNDRVNTSUJMRSk7CisJCQkJKHZvaWQpIHBhX2ZyZWVfd29ya2VyKHdp bmZvLCB4aWQpOworCQkJfQorCisJCQlicmVhazsKKwogCQljYXNlIFRSQU5TX0xFQURFUl9TRU5E X1RPX1BBUkFMTEVMOgogCQkJQXNzZXJ0KHdpbmZvKTsKIApAQCAtMTc0Nyw3ICsxODQzLDEzIEBA IGFwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBzKQogCQkJcGFfc2VuZF9kYXRh KHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpOwogCiAJCQlpZiAodG9wbGV2ZWxfeGFjdCkKKwkJCXsK KwkJCQlpZiAod2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzKQorCQkJCQlwYV9zZXRfZmlsZXNldF9z dGF0ZSh3aW5mby0+c2hhcmVkLAorCQkJCQkJCQkJCSBMRUFERVJfRklMRVNFVF9BQ0NFU1NJQkxF KTsKKwogCQkJCSh2b2lkKSBwYV9mcmVlX3dvcmtlcih3aW5mbywgeGlkKTsKKwkJCX0KIAogCQkJ YnJlYWs7CiAKQEAgLTE3ODQsMTcgKzE4ODYsMTggQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9y dChTdHJpbmdJbmZvIHMpCiAvKgogICogQ29tbW9uIHNwb29sZmlsZSBwcm9jZXNzaW5nLgogICov Ci1zdGF0aWMgdm9pZAotYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhpZCwg WExvZ1JlY1B0ciBsc24pCit2b2lkCithcHBseV9zcG9vbGVkX21lc3NhZ2VzKEZpbGVTZXQgKnN0 cmVhbV9maWxlc2V0LCBUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJICAgWExvZ1JlY1B0ciBsc24p CiB7CiAJU3RyaW5nSW5mb0RhdGEgczI7CiAJaW50CQkJbmNoYW5nZXM7CiAJY2hhcgkJcGF0aFtN QVhQR1BBVEhdOwogCWNoYXIJICAgKmJ1ZmZlciA9IE5VTEw7CiAJTWVtb3J5Q29udGV4dCBvbGRj eHQ7Ci0JQnVmRmlsZSAgICAqZmQ7CiAKLQltYXliZV9zdGFydF9za2lwcGluZ19jaGFuZ2VzKGxz bik7CisJaWYgKCFhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwkJbWF5YmVfc3RhcnRfc2tp cHBpbmdfY2hhbmdlcyhsc24pOwogCiAJLyogTWFrZSBzdXJlIHdlIGhhdmUgYW4gb3BlbiB0cmFu c2FjdGlvbiAqLwogCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKQEAgLTE4MTAsOCArMTkxMyw4 IEBAIGFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIg bHNuKQogCWNoYW5nZXNfZmlsZW5hbWUocGF0aCwgTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwg eGlkKTsKIAllbG9nKERFQlVHMSwgInJlcGxheWluZyBjaGFuZ2VzIGZyb20gZmlsZSBcIiVzXCIi LCBwYXRoKTsKIAotCWZkID0gQnVmRmlsZU9wZW5GaWxlU2V0KE15TG9naWNhbFJlcFdvcmtlci0+ c3RyZWFtX2ZpbGVzZXQsIHBhdGgsIE9fUkRPTkxZLAotCQkJCQkJCWZhbHNlKTsKKwlzdHJlYW1f ZmQgPSBCdWZGaWxlT3BlbkZpbGVTZXQoc3RyZWFtX2ZpbGVzZXQsIHBhdGgsIE9fUkRPTkxZLCBm YWxzZSk7CisJc3RyZWFtX3hpZCA9IHhpZDsKIAogCWJ1ZmZlciA9IHBhbGxvYyhCTENLU1opOwog CWluaXRTdHJpbmdJbmZvKCZzMik7CkBAIC0xODQyLDcgKzE5NDUsNyBAQCBhcHBseV9zcG9vbGVk X21lc3NhZ2VzKFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIAkJQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKIAogCQkvKiByZWFkIGxlbmd0aCBvZiB0aGUgb24tZGlzayByZWNvcmQg Ki8KLQkJbmJ5dGVzID0gQnVmRmlsZVJlYWQoZmQsICZsZW4sIHNpemVvZihsZW4pKTsKKwkJbmJ5 dGVzID0gQnVmRmlsZVJlYWQoc3RyZWFtX2ZkLCAmbGVuLCBzaXplb2YobGVuKSk7CiAKIAkJLyog aGF2ZSB3ZSByZWFjaGVkIGVuZCBvZiB0aGUgZmlsZT8gKi8KIAkJaWYgKG5ieXRlcyA9PSAwKQpA QCAtMTg2Myw3ICsxOTY2LDcgQEAgYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklk IHhpZCwgWExvZ1JlY1B0ciBsc24pCiAJCWJ1ZmZlciA9IHJlcGFsbG9jKGJ1ZmZlciwgbGVuKTsK IAogCQkvKiBhbmQgZmluYWxseSByZWFkIHRoZSBkYXRhIGludG8gdGhlIGJ1ZmZlciAqLwotCQlp ZiAoQnVmRmlsZVJlYWQoZmQsIGJ1ZmZlciwgbGVuKSAhPSBsZW4pCisJCWlmIChCdWZGaWxlUmVh ZChzdHJlYW1fZmQsIGJ1ZmZlciwgbGVuKSAhPSBsZW4pCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJ CQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKIAkJCQkJIGVycm1zZygiY291bGQgbm90IHJl YWQgZnJvbSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24ncyBjaGFuZ2VzIGZpbGUgXCIlc1wiOiAlbSIs CkBAIC0xODgyLDYgKzE5ODUsMTYgQEAgYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlv bklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCiAKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4 dCk7CiAKKwkJLyoKKwkJICogQnJlYWsgdGhlIGxvb3AgaWYgdGhlIHBhcmFsbGVsIGFwcGx5IHdv cmtlciBoYXMgZmluaXNoZWQgYXBwbHlpbmcKKwkJICogdGhlIHRyYW5zYWN0aW9uLiBUaGUgcGFy YWxsZWwgYXBwbHkgd29ya2VyIHNob3VsZCBoYXZlIGNsb3NlZCB0aGUKKwkJICogZmlsZSBiZWZv cmUgY29tbWl0dGluZy4KKwkJICovCisJCWlmIChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSAm JgorCQkJKE15UGFyYWxsZWxTaGFyZWQtPnhhY3Rfc3RhdGUgPT0gUEFSQUxMRUxfVFJBTlNfRklO SVNIRUQgfHwKKwkJCSBNeVBhcmFsbGVsU2hhcmVkLT54YWN0X3N0YXRlID09IFBBUkFMTEVMX1RS QU5TX1VOS05PV04pKQorCQkJZ290byBkb25lOworCiAJCW5jaGFuZ2VzKys7CiAKIAkJaWYgKG5j aGFuZ2VzICUgMTAwMCA9PSAwKQpAQCAtMTg4OSwxMSArMjAwMiwxNCBAQCBhcHBseV9zcG9vbGVk X21lc3NhZ2VzKFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIAkJCQkgbmNoYW5n ZXMsIHBhdGgpOwogCX0KIAotCUJ1ZkZpbGVDbG9zZShmZCk7Ci0KKwlCdWZGaWxlQ2xvc2Uoc3Ry ZWFtX2ZkKTsKIAlwZnJlZShidWZmZXIpOwogCXBmcmVlKHMyLmRhdGEpOwogCitkb25lOgorCXN0 cmVhbV9mZCA9IE5VTEw7CisJc3RyZWFtX3hpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCiAJ ZWxvZyhERUJVRzEsICJyZXBsYXllZCAlZCAoYWxsKSBjaGFuZ2VzIGZyb20gZmlsZSBcIiVzXCIi LAogCQkgbmNoYW5nZXMsIHBhdGgpOwogCkBAIC0xOTEwLDYgKzIwMjYsNyBAQCBhcHBseV9oYW5k bGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCiAJTG9naWNhbFJlcENvbW1pdERhdGEgY29t bWl0X2RhdGE7CiAJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOwogCVRyYW5zQXBwbHlB Y3Rpb24gYXBwbHlfYWN0aW9uOworCVN0cmluZ0luZm9EYXRhIG9yaWdpbmFsX21zZyA9ICpzOwog CiAJaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQogCQllcmVwb3J0KEVSUk9SLApAQCAtMTky OSw3ICsyMDQ2LDggQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBzKQog CQkJICogVGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHNlcmlhbGl6ZWQgdG8gZmlsZSwgc28gcmVw bGF5IGFsbCB0aGUKIAkJCSAqIHNwb29sZWQgb3BlcmF0aW9ucy4KIAkJCSAqLwotCQkJYXBwbHlf c3Bvb2xlZF9tZXNzYWdlcyh4aWQsIGNvbW1pdF9kYXRhLmNvbW1pdF9sc24pOworCQkJYXBwbHlf c3Bvb2xlZF9tZXNzYWdlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0LCB4aWQs CisJCQkJCQkJCSAgIGNvbW1pdF9kYXRhLmNvbW1pdF9sc24pOwogCiAJCQlhcHBseV9oYW5kbGVf Y29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7CiAKQEAgLTE5MzgsNiArMjA1Niw3IEBAIGFw cGx5X2hhbmRsZV9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gcykKIAkJCWJyZWFrOwogCiAJCWNh c2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJCWNhc2UgVFJBTlNfTEVBREVSX1BB UlRJQUxfU0VSSUFMSVpFOgogCQkJQXNzZXJ0KHdpbmZvKTsKIAogCQkJLyoKQEAgLTE5NDcsMTMg KzIwNjYsMjEgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBzKQogCQkJ cGFfdW5sb2NrX3N0cmVhbSh4aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOwogCiAJCQkvKiBTZW5k IFNUUkVBTSBDT01NSVQgbWVzc2FnZSB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiAqLwot CQkJcGFfc2VuZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpOworCQkJaWYgKGFwcGx5X2Fj dGlvbiA9PSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTCkKKwkJCQlwYV9zZW5kX2RhdGEo d2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CisJCQllbHNlCisJCQkJc3RyZWFtX3dyaXRlX21lc3Nh Z2UoeGlkLCBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX0NPTU1JVCwKKwkJCQkJCQkJCSAmb3JpZ2lu YWxfbXNnKTsKKworCQkJaWYgKHdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcykKKwkJCQlwYV9zZXRf ZmlsZXNldF9zdGF0ZSh3aW5mby0+c2hhcmVkLAorCQkJCQkJCQkJIExFQURFUl9GSUxFU0VUX0FD Q0VTU0lCTEUpOwogCiAJCQkvKgotCQkJICogQWZ0ZXIgc2VuZGluZyB0aGUgZGF0YSB0byB0aGUg cGFyYWxsZWwgYXBwbHkgd29ya2VyLCB3YWl0IGZvcgotCQkJICogdGhhdCB3b3JrZXIgdG8gZmlu aXNoLiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBtYWludGFpbiBjb21taXQKLQkJCSAqIG9yZGVyIHdo aWNoIGF2b2lkcyBmYWlsdXJlcyBkdWUgdG8gdHJhbnNhY3Rpb24gZGVwZW5kZW5jaWVzIGFuZAot CQkJICogZGVhZGxvY2tzLgorCQkJICogQWZ0ZXIgc2VuZGluZyB0aGUgZGF0YSB0byB0aGUgcGFy YWxsZWwgYXBwbHkgd29ya2VyIG9yCisJCQkgKiBzZXJpYWxpemluZyBkYXRhIHRvIGZpbGUsIHdh aXQgZm9yIHRoYXQgd29ya2VyIHRvIGZpbmlzaC4gVGhpcworCQkJICogaXMgbmVjZXNzYXJ5IHRv IG1haW50YWluIGNvbW1pdCBvcmRlciB3aGljaCBhdm9pZHMgZmFpbHVyZXMgZHVlCisJCQkgKiB0 byB0cmFuc2FjdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGRlYWRsb2Nrcy4KIAkJCSAqLwogCQkJcGFf d2FpdF9mb3JfeGFjdF9maW5pc2god2luZm8pOwogCkBAIC0xOTcyLDYgKzIwOTksMTQgQEAgYXBw bHlfaGFuZGxlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBzKQogCQkJYnJlYWs7CiAKIAkJY2Fz ZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKworCQkJLyoKKwkJCSAqIENsb3NlIHRoZSBmaWxlIGJl Zm9yZSBjb21taXR0aW5nIGlmIHRoZSBwYXJhbGxlbCBhcHBseSBpcworCQkJICogYXBwbHlpbmcg c3Bvb2xlZCBjaGFuZ2VzLgorCQkJICovCisJCQlpZiAoc3RyZWFtX2ZkKQorCQkJCUJ1ZkZpbGVD bG9zZShzdHJlYW1fZmQpOworCiAJCQlsaXN0X2ZyZWUoc3VieGFjdGxpc3QpOwogCQkJc3VieGFj dGxpc3QgPSBOSUw7CiAKQEAgLTM4NjAsNyArMzk5NSw3IEBAIHN1YnhhY3RfZmlsZW5hbWUoY2hh ciAqcGF0aCwgT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCkKIH0KIAogLyogZm9ybWF0IGZp bGVuYW1lIGZvciBmaWxlIGNvbnRhaW5pbmcgc2VyaWFsaXplZCBjaGFuZ2VzICovCi1zdGF0aWMg aW5saW5lIHZvaWQKK3ZvaWQKIGNoYW5nZXNfZmlsZW5hbWUoY2hhciAqcGF0aCwgT2lkIHN1Ymlk LCBUcmFuc2FjdGlvbklkIHhpZCkKIHsKIAlzbnByaW50ZihwYXRoLCBNQVhQR1BBVEgsICIldS0l dS5jaGFuZ2VzIiwgc3ViaWQsIHhpZCk7CkBAIC0zODc0LDcgKzQwMDksNyBAQCBjaGFuZ2VzX2Zp bGVuYW1lKGNoYXIgKnBhdGgsIE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQpCiAgKiB0b3Bs ZXZlbCB0cmFuc2FjdGlvbi4gRWFjaCBzdWJzY3JpcHRpb24gaGFzIGEgc2VwYXJhdGUgc2V0IG9m IGZpbGVzCiAgKiBmb3IgYW55IHRvcGxldmVsIHRyYW5zYWN0aW9uLgogICovCi1zdGF0aWMgdm9p ZAordm9pZAogc3RyZWFtX2NsZWFudXBfZmlsZXMoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhp ZCkKIHsKIAljaGFyCQlwYXRoW01BWFBHUEFUSF07CkBAIC0zODk3LDkgKzQwMzIsNiBAQCBzdHJl YW1fY2xlYW51cF9maWxlcyhPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkKQogICogYnkgc3Ry ZWFtX3hpZCAoZ2xvYmFsIHZhcmlhYmxlKS4gSWYgaXQncyB0aGUgZmlyc3QgY2h1bmsgb2Ygc3Ry ZWFtZWQKICAqIGNoYW5nZXMgZm9yIHRoaXMgdHJhbnNhY3Rpb24sIGNyZWF0ZSB0aGUgYnVmZmls ZSwgb3RoZXJ3aXNlIG9wZW4gdGhlCiAgKiBwcmV2aW91c2x5IGNyZWF0ZWQgZmlsZS4KLSAqCi0g KiBUaGlzIGNhbiBvbmx5IGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgInN0cmVhbWlu ZyIgYmxvY2ssIGkuZS4KLSAqIGJldHdlZW4gc3RyZWFtX3N0YXJ0L3N0cmVhbV9zdG9wIG1lc3Nh Z2VzIGZyb20gdGhlIHVwc3RyZWFtLgogICovCiBzdGF0aWMgdm9pZAogc3RyZWFtX29wZW5fZmls ZShPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIGZpcnN0X3NlZ21lbnQpCkBAIC0z OTA3LDcgKzQwMzksNiBAQCBzdHJlYW1fb3Blbl9maWxlKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25J ZCB4aWQsIGJvb2wgZmlyc3Rfc2VnbWVudCkKIAljaGFyCQlwYXRoW01BWFBHUEFUSF07CiAJTWVt b3J5Q29udGV4dCBvbGRjeHQ7CiAKLQlBc3NlcnQoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pOwog CUFzc2VydChPaWRJc1ZhbGlkKHN1YmlkKSk7CiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlk KHhpZCkpOwogCUFzc2VydChzdHJlYW1fZmQgPT0gTlVMTCk7CkBAIC0zOTQ2LDE1ICs0MDc3LDEw IEBAIHN0cmVhbV9vcGVuX2ZpbGUoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBm aXJzdF9zZWdtZW50KQogLyoKICAqIHN0cmVhbV9jbG9zZV9maWxlCiAgKgkgIENsb3NlIHRoZSBj dXJyZW50bHkgb3BlbiBmaWxlIHdpdGggc3RyZWFtZWQgY2hhbmdlcy4KLSAqCi0gKiBUaGlzIGNh biBvbmx5IGJlIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGEgc3RyZWFtaW5nIGJsb2NrLCBpLmUuIGF0 IHN0cmVhbV9zdG9wCi0gKiBtZXNzYWdlIGZyb20gdGhlIHVwc3RyZWFtLgogICovCiBzdGF0aWMg dm9pZAogc3RyZWFtX2Nsb3NlX2ZpbGUodm9pZCkKIHsKLQlBc3NlcnQoaW5fc3RyZWFtZWRfdHJh bnNhY3Rpb24pOwotCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChzdHJlYW1feGlkKSk7CiAJ QXNzZXJ0KHN0cmVhbV9mZCAhPSBOVUxMKTsKIAogCUJ1ZkZpbGVDbG9zZShzdHJlYW1fZmQpOwpA QCAtMzk3MSwxMyArNDA5NywxMSBAQCBzdHJlYW1fY2xvc2VfZmlsZSh2b2lkKQogICogdGhlIGxl bmd0aCksIGFjdGlvbiBjb2RlIChpZGVudGlmeWluZyB0aGUgbWVzc2FnZSB0eXBlKSBhbmQgbWVz c2FnZQogICogY29udGVudHMgKHdpdGhvdXQgdGhlIHN1YnhhY3QgVHJhbnNhY3Rpb25JZCB2YWx1 ZSkuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBzdHJlYW1fd3JpdGVfY2hhbmdlKGNoYXIgYWN0 aW9uLCBTdHJpbmdJbmZvIHMpCiB7CiAJaW50CQkJbGVuOwogCi0JQXNzZXJ0KGluX3N0cmVhbWVk X3RyYW5zYWN0aW9uKTsKLQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoc3RyZWFtX3hpZCkp OwogCUFzc2VydChzdHJlYW1fZmQgIT0gTlVMTCk7CiAKIAkvKiB0b3RhbCBvbi1kaXNrIHNpemUs IGluY2x1ZGluZyB0aGUgYWN0aW9uIHR5cGUgY2hhcmFjdGVyICovCkBAIC0zOTk2LDYgKzQxMjAs MjMgQEAgc3RyZWFtX3dyaXRlX2NoYW5nZShjaGFyIGFjdGlvbiwgU3RyaW5nSW5mbyBzKQogfQog CiAvKgorICogc3RyZWFtX3dyaXRlX21lc3NhZ2UKKyAqCSAgU2VyaWFsaXplIGEgbWVzc2FnZSB0 byBhIGZpbGUgZm9yIHRoZSBnaXZlbiB0cmFuc2FjdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9u IGlzIHNpbWlsYXIgdG8gc3RyZWFtX3dyaXRlX2NoYW5nZSBleGNlcHQgdGhhdCBpdCB3aWxsIG9w ZW4gdGhlCisgKiB0YXJnZXQgZmlsZSBiZWZvcmUgd3JpdGluZyB0aGUgbWVzc2FnZSBhbmQgY2xv c2UgZmlsZSBhdCB0aGUgZW5kLgorICovCitzdGF0aWMgdm9pZAorc3RyZWFtX3dyaXRlX21lc3Nh Z2UoVHJhbnNhY3Rpb25JZCB4aWQsIGNoYXIgYWN0aW9uLCBTdHJpbmdJbmZvIHMpCit7CisJQXNz ZXJ0KCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbik7CisKKwlzZXJpYWxpemVfc3RyZWFtX3N0YXJ0 KHhpZCwgZmFsc2UpOworCXN0cmVhbV93cml0ZV9jaGFuZ2UoYWN0aW9uLCBzKTsKKwlzZXJpYWxp emVfc3RyZWFtX3N0b3AoeGlkKTsKK30KKworLyoKICAqIENsZWFudXAgdGhlIG1lbW9yeSBmb3Ig c3VieGFjdHMgYW5kIHJlc2V0IHRoZSByZWxhdGVkIHZhcmlhYmxlcy4KICAqLwogc3RhdGljIGlu bGluZSB2b2lkCkBAIC00NjY4LDcgKzQ4MDksOCBAQCByZXNldF9hcHBseV9lcnJvcl9jb250ZXh0 X2luZm8odm9pZCkKIC8qCiAgKiBSZXR1cm4gdGhlIGFjdGlvbiB0byB0YWtlIGZvciB0aGUgZ2l2 ZW4gdHJhbnNhY3Rpb24uICp3aW5mbyBpcyBhc3NpZ25lZCB0bwogICogdGhlIGRlc3RpbmF0aW9u IHBhcmFsbGVsIHdvcmtlciBpbmZvIChpZiB0aGUgYWN0aW9uIGlzCi0gKiBUUkFOU19MRUFERVJf U0VORF9UT19QQVJBTExFTCwgb3RoZXJ3aXNlICp3aW5mbyBpcyBhc3NpZ25lZCBOVUxMLgorICog VFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUwgb3IgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VS SUFMSVpFKSwgb3RoZXJ3aXNlCisgKiAqd2luZm8gaXMgYXNzaWduZWQgTlVMTC4KICAqLwogc3Rh dGljIFRyYW5zQXBwbHlBY3Rpb24KIGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oVHJhbnNh Y3Rpb25JZCB4aWQsIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICoqd2luZm8pCkBAIC00NjkwLDEz ICs0ODMyLDE3IEBAIGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oVHJhbnNhY3Rpb25JZCB4 aWQsIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICoqd2luZm8pCiAJICovCiAJKndpbmZvID0gcGFf ZmluZF93b3JrZXIoeGlkKTsKIAotCWlmICgqd2luZm8pCisJaWYgKCEqd2luZm8pCiAJewotCQly ZXR1cm4gVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw7CisJCXJldHVybiBUUkFOU19MRUFE RVJfU0VSSUFMSVpFOworCX0KKwllbHNlIGlmICgoKndpbmZvKS0+c2VyaWFsaXplX2NoYW5nZXMp CisJeworCQlyZXR1cm4gVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOwogCX0KIAllbHNl CiAJewotCQlyZXR1cm4gVFJBTlNfTEVBREVSX1NFUklBTElaRTsKKwkJcmV0dXJuIFRSQU5TX0xF QURFUl9TRU5EX1RPX1BBUkFMTEVMOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 b3JrZXJfaW50ZXJuYWwuaAppbmRleCA4NGQxMjNhLi43MjUwZjdhIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUg ImRhdGF0eXBlL3RpbWVzdGFtcC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL2xvZ2ljYWxyZWxhdGlvbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmZmls ZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmlsZXNldC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG9j ay5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htX21xLmgiCkBAIC0xMDcsNiArMTA4LDE0IEBAIHR5 cGVkZWYgZW51bSBQYXJhbGxlbFRyYW5zU3RhdGUKIAlQQVJBTExFTF9UUkFOU19GSU5JU0hFRAog fSBQYXJhbGxlbFRyYW5zU3RhdGU7CiAKKy8qIFN0YXRlIG9mIGZpbGVzZXQgaW4gbGVhZGVyIGFw cGx5IHdvcmtlci4gKi8KK3R5cGVkZWYgZW51bSBMZWFkZXJGaWxlU2V0U3RhdGUKK3sKKwlMRUFE RVJfRklMRVNFVF9VTktOT1dOLAorCUxFQURFUl9GSUxFU0VUX0JVU1ksCisJTEVBREVSX0ZJTEVT RVRfQUNDRVNTSUJMRQorfSBMZWFkZXJGaWxlU2V0U3RhdGU7CisKIC8qCiAgKiBTdHJ1Y3QgZm9y IHNoYXJpbmcgaW5mb3JtYXRpb24gYmV0d2VlbiBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBwYXJh bGxlbAogICogYXBwbHkgd29ya2Vycy4KQEAgLTEzNiw2ICsxNDUsMTkgQEAgdHlwZWRlZiBzdHJ1 Y3QgUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZAogCSAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3 aWxsIGNoZWNrIGl0IGJlZm9yZSBzdGFydGluZyB0byB3YWl0LgogCSAqLwogCXBnX2F0b21pY191 aW50MzIJcGVuZGluZ19zdHJlYW1fY291bnQ7CisKKwkvKgorCSAqIFRoZSBsZWFkZXIgYXBwbHkg d29ya2VyIHdpbGwgc2VyaWFsaXplIGNoYW5nZXMgdG8gdGhlIGZpbGUgYWZ0ZXIKKwkgKiBlbnRl cmluZyBQQVJUSUFMX1NFUklBTElaRSBtb2RlIGFuZCBzaGFyZSB0aGUgZmlsZXNldCB3aXRoIHRo ZSBwYXJhbGxlbAorCSAqIGFwcGx5IHdvcmtlciB3aGVuIHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0 aW9uIGZpbmlzaCBjb21tYW5kLiBBbmQgdGhlbgorCSAqIHRoZSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIgd2lsbCBhcHBseSBhbGwgdGhlIHNwb29sZWQgbWVzc2FnZXMuCisJICoKKwkgKiBEb24ndCB1 c2UgU2hhcmVkRmlsZVNldCBoZXJlIGFzIHdlIG5lZWQgdGhlIGZpbGVzZXQgdG8gc3Vydml2ZSBh ZnRlcgorCSAqIHJlbGVhc2luZyB0aGUgc2hhcmVkIG1lbW9yeSBzbyB0aGF0IHRoZSBsZWFkZXIg YXBwbHkgd29ya2VyIGNhbiByZS11c2UKKwkgKiB0aGUgZmlsZXNldCBmb3IgbmV4dCBzdHJlYW1p bmcgdHJhbnNhY3Rpb24uCisJICovCisJTGVhZGVyRmlsZVNldFN0YXRlCQlmaWxlc2V0X3N0YXRl OworCUZpbGVTZXQJCWZpbGVzZXQ7CiB9IFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQ7CiAKIC8q CkBAIC0xNTUsNiArMTc3LDEzIEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQXBwbHlXb3JrZXJJ bmZvCiAJZHNtX3NlZ21lbnQgKmRzbV9zZWc7CiAKIAkvKgorCSAqIEluZGljYXRlcyB3aGV0aGVy IHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIG5lZWRzIHRvIHNlcmlhbGl6ZSB0aGUKKwkgKiByZW1h aW5pbmcgY2hhbmdlcyB0byBkaXNrIGR1ZSB0byB0aW1lb3V0IHdoZW4gc2VuZGluZyBkYXRhIHRv IHRoZQorCSAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkgKi8KKwlib29sCQlzZXJpYWxpemVf Y2hhbmdlczsKKworCS8qCiAJICogVHJ1ZSBpZiB0aGUgd29ya2VyIGlzIGJlaW5nIHVzZWQgdG8g cHJvY2VzcyBhIHBhcmFsbGVsIGFwcGx5CiAJICogdHJhbnNhY3Rpb24uIEZhbHNlIGluZGljYXRl cyB0aGlzIHdvcmtlciBpcyBhdmFpbGFibGUgZm9yIHJlLXVzZS4KIAkgKi8KQEAgLTE3Nyw2ICsy MDYsOCBAQCBleHRlcm4gUEdETExJTVBPUlQgUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqTXlQ YXJhbGxlbFNoYXJlZDsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIExpc3QgKnN1YnhhY3RsaXN0Owog CitleHRlcm4gUEdETExJTVBPUlQgQnVmRmlsZSAqc3RyZWFtX2ZkOworCiAvKiBsaWJwcXJlY2Vp dmVyIGNvbm5lY3Rpb24gKi8KIGV4dGVybiBQR0RMTElNUE9SVCBzdHJ1Y3QgV2FsUmVjZWl2ZXJD b25uICpMb2dSZXBXb3JrZXJXYWxSY3ZDb25uOwogCkBAIC0yMTQsMTAgKzI0NSwyMSBAQCBleHRl cm4gdm9pZCBwcm9jZXNzX3N5bmNpbmdfdGFibGVzKFhMb2dSZWNQdHIgY3VycmVudF9sc24pOwog ZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9zeW5jaW5nX3RhYmxlX3N0YXRlcyhEYXR1bSBhcmcsIGlu dCBjYWNoZWlkLAogCQkJCQkJCQkJCQl1aW50MzIgaGFzaHZhbHVlKTsKIAorZXh0ZXJuIHZvaWQg c2VyaWFsaXplX3N0cmVhbV9zdGFydChUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBmaXJzdF9zZWdt ZW50KTsKK2V4dGVybiB2b2lkIHNlcmlhbGl6ZV9zdHJlYW1fc3RvcChUcmFuc2FjdGlvbklkIHhp ZCk7CisKKy8qIENvbW1vbiBzdHJlYW1pbmcgZnVuY3Rpb24gdG8gYXBwbHkgYWxsIHRoZSBzcG9v bGVkIG1lc3NhZ2VzICovCitleHRlcm4gdm9pZCBhcHBseV9zcG9vbGVkX21lc3NhZ2VzKEZpbGVT ZXQgKnN0cmVhbV9maWxlc2V0LCBUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCQkJICAgWExvZ1Jl Y1B0ciBsc24pOworCiBleHRlcm4gdm9pZCBhcHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpOwog CiBleHRlcm4gdm9pZCBtYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZvaWQpOwogCitleHRlcm4g dm9pZCBjaGFuZ2VzX2ZpbGVuYW1lKGNoYXIgKnBhdGgsIE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25J ZCB4aWQpOworZXh0ZXJuIHZvaWQgc3RyZWFtX3dyaXRlX2NoYW5nZShjaGFyIGFjdGlvbiwgU3Ry aW5nSW5mbyBzKTsKK2V4dGVybiB2b2lkIHN0cmVhbV9jbGVhbnVwX2ZpbGVzKE9pZCBzdWJpZCwg VHJhbnNhY3Rpb25JZCB4aWQpOworCiBleHRlcm4gdm9pZCBJbml0aWFsaXplQXBwbHlXb3JrZXIo dm9pZCk7CiAKIGV4dGVybiB2b2lkIGFwcGx5X3dvcmtlcl9jbGVhbl9leGl0KHZvaWQpOwpAQCAt MjM4LDYgKzI4MCw4IEBAIGV4dGVybiB2b2lkIHBhX3NlbmRfZGF0YShQYXJhbGxlbEFwcGx5V29y a2VySW5mbyAqd2luZm8sIFNpemUgbmJ5dGVzLAogCiBleHRlcm4gdm9pZCBwYV9zdGFydF9zdWJ0 cmFucyhUcmFuc2FjdGlvbklkIGN1cnJlbnRfeGlkLCBUcmFuc2FjdGlvbklkIHRvcF94aWQpOwog ZXh0ZXJuIHZvaWQgcGFfc3RyZWFtX2Fib3J0KExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEgKmFi b3J0X2RhdGEpOworZXh0ZXJuIHZvaWQgcGFfc2V0X2ZpbGVzZXRfc3RhdGUoUGFyYWxsZWxBcHBs eVdvcmtlclNoYXJlZCAqd3NoYXJlZCwKKwkJCQkJCQkJCSAgIExlYWRlckZpbGVTZXRTdGF0ZSBm aWxlc2V0X3N0YXRlKTsKIAogZXh0ZXJuIHZvaWQgcGFfbG9ja19zdHJlYW0oVHJhbnNhY3Rpb25J ZCB4aWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKIGV4dGVybiB2b2lkIHBhX2xvY2tfdHJhbnNhY3Rp b24oVHJhbnNhY3Rpb25JZCB4aWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKLS0gCjIuNy4yLndpbmRv d3MuMQoK --_005_OS0PR01MB5716339FF7CB759E751492CB940D9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v51-0003-Test-streaming-parallel-option-in-tap-test.patch" Content-Description: v51-0003-Test-streaming-parallel-option-in-tap-test.patch Content-Disposition: attachment; filename="v51-0003-Test-streaming-parallel-option-in-tap-test.patch"; size=81987; creation-date="Tue, 22 Nov 2022 12:37:22 GMT"; modification-date="Tue, 22 Nov 2022 12:42:23 GMT" Content-Transfer-Encoding: base64 RnJvbSA0Mzc4MTYzOGQyZmMwMWEzOTlmZWU5OWEzY2QxMWE4MDZlYzZjYzY4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAic2hpeS5mbnN0IiA8c2hpeS5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBGcmksIDEzIE1heSAyMDIyIDE0OjUwOjMwICswODAwClN1YmplY3Q6IFtQQVRDSCB2NTEg My80XSBUZXN0IHN0cmVhbWluZyBwYXJhbGxlbCBvcHRpb24gaW4gdGFwIHRlc3QKCkNoYW5nZSBh bGwgVEFQIHRlc3RzIHVzaW5nIHRoZSBTVUJTQ1JJUFRJT04gInN0cmVhbWluZyIgcGFyYW1ldGVy LCBzbyB0aGV5Cm5vdyB0ZXN0IGJvdGggJ29uJyBhbmQgJ3BhcmFsbGVsJyB2YWx1ZXMuCi0tLQog c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbCAgICAgICAgICAgICAgfCAy MzIgKysrKysrLS0tCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3Qu cGwgICAgICB8IDE0MyArKysrLS0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJlYW1f ZGRsLnBsICAgICAgICAgIHwgMjIxICsrKysrKy0tLQogLi4uL3N1YnNjcmlwdGlvbi90LzAxOF9z dHJlYW1fc3VieGFjdF9hYm9ydC5wbCAgICAgfCAyMzMgKysrKysrLS0tCiAuLi4vc3Vic2NyaXB0 aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbCB8IDEzNCArKystLQogc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwgICAgfCAzOTQgKysrKysr KysrLS0tLS0tCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBs ICAgICB8IDU0MCArKysrKysrKysrKystLS0tLS0tLS0KIC4uLi9zdWJzY3JpcHRpb24vdC8wMzJf c3RyZWFtaW5nX3BhcmFsbGVsX2FwcGx5LnBsIHwgMTUyICsrKysrKwogOSBmaWxlcyBjaGFuZ2Vk LCAxNDA1IGluc2VydGlvbnMoKyksIDY0NSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfc3RyZWFtaW5nX3BhcmFsbGVsX2FwcGx5LnBs CgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkIGIvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkCmluZGV4IDg1ZDFkZDkuLjAyNTIxOGQgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9z dWJzY3JpcHRpb24vbWVzb24uYnVpbGQKQEAgLTM2LDYgKzM2LDcgQEAgdGVzdHMgKz0gewogICAg ICAgJ3QvMDI5X29uX2Vycm9yLnBsJywKICAgICAgICd0LzAzMF9vcmlnaW4ucGwnLAogICAgICAg J3QvMDMxX2NvbHVtbl9saXN0LnBsJywKKyAgICAgICd0LzAzMl9zdHJlYW1pbmdfcGFyYWxsZWxf YXBwbHkucGwnLAogICAgICAgJ3QvMTAwX2J1Z3MucGwnLAogICAgIF0sCiAgIH0sCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVfc3RyZWFtLnBsIGIvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbAppbmRleCBjYmFhMzI3Li42NWY0M2YwIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVfc3RyZWFtLnBsCisrKyBiL3NyYy90ZXN0 L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwKQEAgLTgsNiArOCwxNDkgQEAgdXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2Ug VGVzdDo6TW9yZTsKIAorIyBDaGVjayB0aGUgbG9nIHRoYXQgdGhlIHN0cmVhbWVkIHRyYW5zYWN0 aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CisjIHJlcG9ydGVkIGJ5IHBhcmFsbGVsIGFw cGx5IHdvcmtlci4KK3N1YiBjaGVja19wYXJhbGxlbF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2Ny aWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKSA9IEBfOworCW15ICRwYXJhbGxlbF9tZXNzYWdl ID0KKwkgICdmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFu ZCc7CisKKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9m b3JfbG9nKHFyLyRwYXJhbGxlbF9tZXNzYWdlLywgJG9mZnNldCk7CisJfQorfQorCisjIEVuY2Fw c3VsYXRlIGFsbCB0aGUgY29tbW9uIHRlc3Qgc3RlcHMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gInN0 cmVhbWluZyIKKyMgcGFyYW1ldGVyIHNvIHRoZSBzYW1lIGNvZGUgY2FuIGJlIHJ1biBib3RoIGZv ciB0aGUgc3RyZWFtaW5nPW9uIGFuZAorIyBzdHJlYW1pbmc9cGFyYWxsZWwgY2FzZXMuCitzdWIg dGVzdF9zdHJlYW1pbmcKK3sKKwlteSAoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVy LCAkYXBwbmFtZSwgJGlzX3BhcmFsbGVsKSA9IEBfOworCisJIyBJbnRlcmxlYXZlIGEgcGFpciBv ZiB0cmFuc2FjdGlvbnMsIGVhY2ggZXhjZWVkaW5nIHRoZSA2NGtCIGxpbWl0LgorCW15ICRpbiAg PSAnJzsKKwlteSAkb3V0ID0gJyc7CisKKwlteSAkb2Zmc2V0ID0gMDsKKworCW15ICR0aW1lciA9 IElQQzo6UnVuOjp0aW1lb3V0KCRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZh dWx0KTsKKworCW15ICRoID0gJG5vZGVfcHVibGlzaGVyLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3Rn cmVzJywgXCRpbiwgXCRvdXQsICR0aW1lciwKKwkJb25fZXJyb3Jfc3RvcCA9PiAwKTsKKworCSMg SWYgInN0cmVhbWluZyIgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBhcyAicGFyYWxsZWwiLCB3ZSBu ZWVkIHRvIGNoZWNrCisJIyB0aGF0IHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBhcHBsaWVkIHVz aW5nIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorCSMgV2UgaGF2ZSB0byBsb29rIGZvciB0aGUg REVCVUcxIGxvZyBtZXNzYWdlcyBhYm91dCB0aGF0LCBzbyBidW1wIHVwIHRoZQorCSMgbG9nIHZl cmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBw ZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVn MSIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorCisJIyBDaGVjayB0aGUgc3Vi c2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXIt PmxvZ2ZpbGU7CisKKwkkaW4gLj0gcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7 CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJfTsKKwkkaC0+cHVtcF9u YjsKKworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJF R0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoNTAwMSwgOTk5OSkgcyhpKTsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBX SEVSRSBhID4gNTAwMDsKKwlDT01NSVQ7CisJfSk7CisKKwkkaW4gLj0gcXsKKwlDT01NSVQ7CisJ XHEKKwl9OworCSRoLT5maW5pc2g7ICAgICMgZXJyb3JzIG1ha2UgdGhlIG5leHQgdGVzdCBmYWls LCBzbyBpZ25vcmUgdGhlbSBoZXJlCisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRv ZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwg Y291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMz NHwzMzM0KSwKKwkJJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycp OworCisJIyBUZXN0IHRoZSBzdHJlYW1pbmcgaW4gYmluYXJ5IG1vZGUKKwkkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3Vi IFNFVCAoYmluYXJ5ID0gb24pIik7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9t IG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMg SW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0Ig bGltaXQuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJ QkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3Nlcmllcyg1MDAxLCAxMDAwMCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VU IGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdI RVJFIG1vZChhLDMpID0gMDsKKwlDT01NSVQ7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1 YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwkkcmVzdWx0ID0KKwkgICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBj b3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFx KDY2Njd8NjY2N3w2NjY3KSwKKwkJJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBk ZWZhdWx0cycpOworCisJIyBDaGFuZ2UgdGhlIGxvY2FsIHZhbHVlcyBvZiB0aGUgZXh0cmEgY29s dW1ucyBvbiB0aGUgc3Vic2NyaWJlciwKKwkjIHVwZGF0ZSBwdWJsaXNoZXIsIGFuZCBjaGVjayB0 aGF0IHN1YnNjcmliZXIgcmV0YWlucyB0aGUgZXhwZWN0ZWQKKwkjIHZhbHVlcy4gVGhpcyBpcyB0 byBlbnN1cmUgdGhhdCBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBiZWhhdmUKKwkjIHByb3Bl cmx5IGFmdGVyIGEgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgorCSRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiVVBEQVRFIHRlc3RfdGFiIFNFVCBjID0gJ2Vwb2NoJzo6 dGltZXN0YW1wdHogKyA5ODc2NTQzMjEgKiBpbnRlcnZhbCAnMXMnIgorCSk7CisKKwkjIENoZWNr IHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vi c2NyaWJlci0+bG9nZmlsZTsKKworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJCSJVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYTo6dGV4dCkiKTsKKworCSRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxl bF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBj b3VudCgqKSwgY291bnQoZXh0cmFjdChlcG9jaCBmcm9tIGMpID0gOTg3NjU0MzIxKSwgY291bnQo ZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIKKwkpOworCWlzKCRyZXN1bHQsIHFxKDY2Njd8NjY2N3w2 NjY3KSwKKwkJJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbGx5IGNoYW5nZWQgZGF0 YScpOworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgKGEgPiAyKSIp OworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIFJl c2V0IHRoZSBsb2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9z dWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21l c3NhZ2VzID0gd2FybmluZyIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorfQor CiAjIENyZWF0ZSBwdWJsaXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5p dChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNyw2ICsxODAsMTAgQEAgJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9O IHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWIn OworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVh bWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0 YXBfc3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRh cHBuYW1lJyBQVUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBA IC00OSw4MiArMTk2LDI1IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50 KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDJ8 MiksICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMg SW50ZXJsZWF2ZSBhIHBhaXIgb2YgdHJhbnNhY3Rpb25zLCBlYWNoIGV4Y2VlZGluZyB0aGUgNjRr QiBsaW1pdC4KLW15ICRpbiAgPSAnJzsKLW15ICRvdXQgPSAnJzsKLQotbXkgJHRpbWVyID0gSVBD OjpSdW46OnRpbWVvdXQoJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQp OwotCi1teSAkaCA9ICRub2RlX3B1Ymxpc2hlci0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3Jlcycs IFwkaW4sIFwkb3V0LCAkdGltZXIsCi0Jb25fZXJyb3Jfc3RvcCA9PiAwKTsKLQotJGluIC49IHF7 Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9 IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBt b2QoYSwzKSA9IDA7Ci19OwotJGgtPnB1bXBfbmI7Ci0KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVD VCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgOTk5OSkgcyhpKTsK LURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiA1MDAwOwotQ09NTUlUOwotfSk7Ci0KLSRp biAuPSBxewotQ09NTUlUOwotXHEKLX07Ci0kaC0+ZmluaXNoOyAgICAjIGVycm9ycyBtYWtlIHRo ZSBuZXh0IHRlc3QgZmFpbCwgc28gaWdub3JlIHRoZW0gaGVyZQotCi0kbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyks IGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMz NHwzMzM0KSwgJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycpOwor dGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFt ZSwgMCk7CiAKLSMgVGVzdCB0aGUgc3RyZWFtaW5nIGluIGJpbmFyeSBtb2RlCi0kbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9z dWIgU0VUIChiaW5hcnkgPSBvbikiKTsKLQotIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVu b3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgMTAwMDApIHMo aSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwot REVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotQ09NTUlUOwotfSk7Ci0K LSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQg PQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJl c3VsdCwgcXEoNjY2N3w2NjY3fDY2NjcpLCAnY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxv Y2FsIGRlZmF1bHRzJyk7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor IyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24g V0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWlu Zyc7IgorKTsKIAotIyBDaGFuZ2UgdGhlIGxvY2FsIHZhbHVlcyBvZiB0aGUgZXh0cmEgY29sdW1u cyBvbiB0aGUgc3Vic2NyaWJlciwKLSMgdXBkYXRlIHB1Ymxpc2hlciwgYW5kIGNoZWNrIHRoYXQg c3Vic2NyaWJlciByZXRhaW5zIHRoZSBleHBlY3RlZAotIyB2YWx1ZXMuIFRoaXMgaXMgdG8gZW5z dXJlIHRoYXQgbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlvbnMgYmVoYXZlCi0jIHByb3Blcmx5IGFm dGVyIGEgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCi0JIlVQREFURSB0ZXN0X3RhYiBTRVQgYyA9ICdlcG9jaCc6OnRpbWVzdGFt cHR6ICsgOTg3NjU0MzIxICogaW50ZXJ2YWwgJzFzJyIKLSk7Ci0kbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAotCSJVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYTo6dGV4 dCkiKTsKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFs bGVsLCBiaW5hcnkgPSBvZmYpIik7CiAKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7Ciskbm9kZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVz JywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVS RSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsi CisgICkKKyAgb3IgZGllCisgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8g cmVzdGFydCBhZnRlciBjaGFuZ2luZyBTVUJTQ1JJUFRJT04iOwogCi0kcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291 bnQoZXh0cmFjdChlcG9jaCBmcm9tIGMpID0gOTg3NjU0MzIxKSwgY291bnQoZCA9IDk5OSkgRlJP TSB0ZXN0X3RhYiIKLSk7Ci1pcygkcmVzdWx0LCBxcSg2NjY3fDY2Njd8NjY2NyksCi0JJ2NoZWNr IGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbGx5IGNoYW5nZWQgZGF0YScpOwordGVzdF9zdHJl YW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMSk7CiAK ICRub2RlX3N1YnNjcmliZXItPnN0b3A7CiAkbm9kZV9wdWJsaXNoZXItPnN0b3A7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3QucGwgYi9zcmMv dGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3QucGwKaW5kZXggYmMwYTljZC4u MDIwYWQ5NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9z dWJ4YWN0LnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNl9zdHJlYW1fc3VieGFj dC5wbApAQCAtOCw2ICs4LDk0IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNl IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMgQ2hlY2sgdGhl IGxvZyB0aGF0IHRoZSBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgY29tcGxldGVkIHN1Y2Nlc3Nm dWxseQorIyByZXBvcnRlZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCitzdWIgY2hlY2tfcGFy YWxsZWxfbG9nCit7CisJbXkgKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxl bCkgPSBAXzsKKwlteSAkcGFyYWxsZWxfbWVzc2FnZSA9CisJICAnZmluaXNoZWQgcHJvY2Vzc2lu ZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQnOworCisJaWYgKCRpc19wYXJhbGxlbCkK Kwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci8kcGFyYWxsZWxfbWVzc2Fn ZS8sICRvZmZzZXQpOworCX0KK30KKworIyBFbmNhcHN1bGF0ZSBhbGwgdGhlIGNvbW1vbiB0ZXN0 IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1pbmciCisjIHBhcmFtZXRlciBzbyB0 aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVhbWluZz1vbiBhbmQKKyMg c3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRu b2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsICRpc19wYXJhbGxlbCkg PSBAXzsKKworCW15ICRvZmZzZXQgPSAwOworCisJIyBJZiAic3RyZWFtaW5nIiBwYXJhbWV0ZXIg aXMgc3BlY2lmaWVkIGFzICJwYXJhbGxlbCIsIHdlIG5lZWQgdG8gY2hlY2sKKwkjIHRoYXQgc3Ry ZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGFwcGxpZWQgdXNpbmcgYSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIuCisJIyBXZSBoYXZlIHRvIGxvb2sgZm9yIHRoZSBERUJVRzEgbG9nIG1lc3NhZ2VzIGFib3V0 IHRoYXQsIHNvIGJ1bXAgdXAgdGhlCisJIyBsb2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxs ZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25m JywKKwkJCSJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7CisJCSRub2RlX3N1YnNjcmliZXIt PnJlbG9hZDsKKwl9CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4K Kwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgSW5zZXJ0LCB1 cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgNjRrQiBsaW1pdC4KKwkkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDMsIDUwMCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUg bW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsK KwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0 ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsIDEwMDApIHMoaSk7CisJVVBEQVRFIHRlc3Rf dGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0 X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJU0FWRVBPSU5UIHMyOworCUlOU0VSVCBJTlRPIHRl c3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwg MTUwMCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEs MikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwlTQVZF UE9JTlQgczM7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxNTAxLCAyMDAwKSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBT RVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIg V0hFUkUgbW9kKGEsMykgPSAwOworCVNBVkVQT0lOVCBzNDsKKwlJTlNFUlQgSU5UTyB0ZXN0X3Rh YiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIwMDEsIDI1MDAp IHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0g MDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJQ09NTUlUOwor CX0pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKwor CWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxs ZWwpOworCisJbXkgJHJlc3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZS T00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgxNjY3fDE2Njd8MTY2NyksCisJCSdjaGVj ayBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlciBpbiBzdHJlYW1pbmcgbW9kZSBhbmQgZXh0 cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisKKwkjIENsZWFudXAgdGhl IHRlc3QgZGF0YQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSAoYSA+IDIpIik7CisJJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgUmVzZXQgdGhlIGxvZyB2ZXJib3NpdHku CisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25m KCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSB3YXJuaW5nIik7CisJ CSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9Cit9CisKICMgQ3JlYXRlIHB1Ymxpc2hlciBu b2RlCiBteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J3B1Ymxpc2hlcicpOwogJG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4g J2xvZ2ljYWwnKTsKQEAgLTM3LDYgKzEyNSwxMCBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAogCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgdGVz dF90YWIiKTsKIAogbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7CisKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJworIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAogCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1 Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRh cF9wdWIgV0lUSCAoc3RyZWFtaW5nID0gb24pIgogKTsKQEAgLTQ5LDQxICsxNDEsMjYgQEAgbXkg JHJlc3VsdCA9CiAJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZS T00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8MnwyKSwgJ2NoZWNrIGluaXRpYWwgZGF0 YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAotIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVs ZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCA2NGtCIGxpbWl0LgotJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcyggICAgMywgIDUwMCkg cyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7 Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci1TQVZFUE9JTlQgczE7 Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDUwMSwgIDEwMDApIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUo YikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEs MykgPSAwOwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLCAgMTUwMCkgcyhpKTsKLVVQREFU RSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci1TQVZFUE9JTlQgczM7Ci1JTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDE1 MDEsICAyMDAwKSBzKGkpOwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1v ZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLVNB VkVQT0lOVCBzNDsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAwMSwgMjUwMCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBT RVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBX SEVSRSBtb2QoYSwzKSA9IDA7Ci1DT01NSVQ7Ci19KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3Vu dChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgxNjY3fDE2Njd8MTY2 NyksCi0JJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGluIHN0cmVhbWluZyBt b2RlIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCit0ZXN0X3N0cmVh bWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAwKTsKKwor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJl YW1pbmcgbW9kZSAncGFyYWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIworbXkgJG9sZHBpZCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIlNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9u X25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7CiAKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04g dGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gcGFyYWxsZWwpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+ cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJP TSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUn IEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3 aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQ VElPTiI7CisKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJl ciwgJGFwcG5hbWUsIDEpOworCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlz aGVyLT5zdG9wOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTdfc3Ry ZWFtX2RkbC5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJlYW1fZGRsLnBsCmlu ZGV4IDg2NmYxNTEuLmQyY2M0NmQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAxN19zdHJlYW1fZGRsLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJl YW1fZGRsLnBsCkBAIC04LDYgKzgsMTM4IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy OwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMgQ2hl Y2sgdGhlIGxvZyB0aGF0IHRoZSBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgY29tcGxldGVkIHN1 Y2Nlc3NmdWxseQorIyByZXBvcnRlZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCitzdWIgY2hl Y2tfcGFyYWxsZWxfbG9nCit7CisJbXkgKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19w YXJhbGxlbCkgPSBAXzsKKwlteSAkcGFyYWxsZWxfbWVzc2FnZSA9CisJICAnZmluaXNoZWQgcHJv Y2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQnOworCisJaWYgKCRpc19wYXJh bGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci8kcGFyYWxsZWxf bWVzc2FnZS8sICRvZmZzZXQpOworCX0KK30KKworIyBFbmNhcHN1bGF0ZSBhbGwgdGhlIGNvbW1v biB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1pbmciCisjIHBhcmFtZXRl ciBzbyB0aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVhbWluZz1vbiBh bmQKKyMgc3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJ bXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsICRpc19wYXJh bGxlbCkgPSBAXzsKKworCW15ICRvZmZzZXQgPSAwOworCisJIyBhIHNtYWxsIChub24tc3RyZWFt ZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBW QUxVRVMgKDMsIG1kNSgzOjp0ZXh0KSk7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVN TiBjIElOVDsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg0 LCBtZDUoNDo6dGV4dCksIC00KTsKKwlDT01NSVQ7CisJfSk7CisKKwkjIElmICJzdHJlYW1pbmci IHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgYXMgInBhcmFsbGVsIiwgd2UgbmVlZCB0byBjaGVjawor CSMgdGhhdCBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgYXBwbGllZCB1c2luZyBhIHBhcmFsbGVs IGFwcGx5IHdvcmtlci4KKwkjIFdlIGhhdmUgdG8gbG9vayBmb3IgdGhlIERFQlVHMSBsb2cgbWVz c2FnZXMgYWJvdXQgdGhhdCwgc28gYnVtcCB1cCB0aGUKKwkjIGxvZyB2ZXJib3NpdHkuCisJaWYg KCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0 Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiKTsKKwkJJG5vZGVf c3Vic2NyaWJlci0+cmVsb2FkOworCX0KKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZy b20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJ IyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwKKwkkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSBGUk9NIGdlbmVyYXRlX3Nl cmllcyg1LCAxMDAwKSBzKGkpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZCBJ TlQ7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUo aTo6dGV4dCksIC1pLCAyKmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwgMjAwMCkgcyhpKTsK KwlDT01NSVQ7CisJfSk7CisKKwkjIGEgc21hbGwgKG5vbi1zdHJlYW1lZCkgdHJhbnNhY3Rpb24g d2l0aCBEREwgYW5kIERNTAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdy ZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMjAwMSwgbWQ1 KDIwMDE6OnRleHQpLCAtMjAwMSwgMioyMDAxKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQg Q09MVU1OIGUgSU5UOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxV RVMgKDIwMDIsIG1kNSgyMDAyOjp0ZXh0KSwgLTIwMDIsIDIqMjAwMiwgLTMqMjAwMik7CisJQ09N TUlUOworCX0pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1l KTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNf cGFyYWxsZWwpOworCisJbXkgJHJlc3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQpLCBj b3VudChlKSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMjAwMnwxOTk5fDEwMDJ8 MSksCisJCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlciBpbiBzdHJlYW1pbmcg bW9kZSBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisKKwkj IENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5v ZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgQSBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0 aW9uIHdpdGggRERMIGFuZCBETUwuIE9uZSBvZiB0aGUgRERMIGlzIHBlcmZvcm1lZAorCSMgYWZ0 ZXIgRE1MIHRvIGVuc3VyZSB0aGF0IHdlIGludmFsaWRhdGUgdGhlIHNjaGVtYSBzZW50IGZvciB0 ZXN0X3RhYiBzbyB0aGF0CisJIyB0aGUgbmV4dCB0cmFuc2FjdGlvbiBoYXMgdG8gc2VuZCB0aGUg c2NoZW1hIGFnYWluLgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMn LCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4 dCksIC1pLCAyKmksIC0zKmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAwMyw1MDAwKSBzKGkpOwor CUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZiBJTlQ7CisJQ09NTUlUOworCX0pOwor CisJIyBBIHNtYWxsIHRyYW5zYWN0aW9uIHRoYXQgd29uJ3QgZ2V0IHN0cmVhbWVkLiBUaGlzIGlz IGp1c3QgdG8gZW5zdXJlIHRoYXQgd2UKKwkjIHNlbmQgdGhlIHNjaGVtYSBhZ2FpbiB0byByZWZs ZWN0IHRoZSBsYXN0IGNvbHVtbiBhZGRlZCBpbiB0aGUgcHJldmlvdXMgdGVzdC4KKwkkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippLCAtMyppLCA0Kmkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSw1MDA1KSBzKGkpOworCUNPTU1JVDsKKwl9KTsKKwor CSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19w YXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKwor CSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQpLCBjb3VudChlKSwgY291bnQoZikgRlJP TSB0ZXN0X3RhYiIKKwkpOworCWlzKCRyZXN1bHQsIHFxKDUwMDV8NTAwMnw0MDA1fDMwMDR8NSks CisJCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlciBmb3IgYm90aCBzdHJlYW1p bmcgYW5kIG5vbi1zdHJlYW1pbmcgdHJhbnNhY3Rpb25zJworCSk7CisKKwkjIENsZWFudXAgdGhl IHRlc3QgZGF0YQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBx eworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIChhID4gMik7CisJQUxURVIgVEFCTEUgdGVz dF90YWIgRFJPUCBDT0xVTU4gYywgRFJPUCBDT0xVTU4gZCwgRFJPUCBDT0xVTU4gZSwgRFJPUCBD T0xVTU4gZjsKKwl9KTsKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5h bWUpOworCisJIyBSZXNldCB0aGUgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQor CXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJ CQkibG9nX21pbl9tZXNzYWdlcyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVs b2FkOworCX0KK30KKwogIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2RlX3B1Ymxpc2hl ciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9kZV9w dWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpAQCAtMzcsNiAr MTY5LDEwIEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFU RSBQVUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFt ZSA9ICd0YXBfc3ViJzsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVz dCB1c2luZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBT VUJTQ1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGlj YXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1YiBXSVRIIChzdHJlYW1pbmcg PSBvbikiCiApOwpAQCAtNDksNzcgKzE4NSwyNiBAQCBteSAkcmVzdWx0ID0KIAkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwogaXMoJHJl c3VsdCwgcXEoMnwwfDApLCAnY2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2Ny aWJlcicpOwogCi0jIGEgc21hbGwgKG5vbi1zdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwg YW5kIERNTAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJF R0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgzLCBtZDUoMzo6dGV4dCkpOwotQUxU RVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBjIElOVDsKLVNBVkVQT0lOVCBzMTsKLUlOU0VS VCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoNCwgbWQ1KDQ6OnRleHQpLCAtNCk7Ci1DT01NSVQ7Ci19 KTsKLQotIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwKLSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pIEZST00gZ2VuZXJhdGVf c2VyaWVzKDUsIDEwMDApIHMoaSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGQg SU5UOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSwgLWksIDIqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLCAyMDAwKSBzKGkpOwot Q09NTUlUOwotfSk7Ci0KLSMgYSBzbWFsbCAobm9uLXN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRo IERETCBhbmQgRE1MCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBx ewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDIwMDEsIG1kNSgyMDAxOjp0 ZXh0KSwgLTIwMDEsIDIqMjAwMSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGUg SU5UOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgyMDAyLCBt ZDUoMjAwMjo6dGV4dCksIC0yMDAyLCAyKjIwMDIsIC0zKjIwMDIpOwotQ09NTUlUOwotfSk7Ci0K LSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQg PQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSwgY291bnQoZCksIGNvdW50KGUpIEZST00gdGVzdF90YWIiKTsKLWlz KCRyZXN1bHQsIHFxKDIwMDJ8MTk5OXwxMDAyfDEpLAotCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQg dG8gc3Vic2NyaWJlciBpbiBzdHJlYW1pbmcgbW9kZSBhbmQgZXh0cmEgY29sdW1ucyBjb250YWlu IGxvY2FsIGRlZmF1bHRzJwotKTsKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5v ZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDApOwogCi0jIEEgbGFyZ2UgKHN0cmVhbWVkKSB0cmFu c2FjdGlvbiB3aXRoIERETCBhbmQgRE1MLiBPbmUgb2YgdGhlIERETCBpcyBwZXJmb3JtZWQKLSMg YWZ0ZXIgRE1MIHRvIGVuc3VyZSB0aGF0IHdlIGludmFsaWRhdGUgdGhlIHNjaGVtYSBzZW50IGZv ciB0ZXN0X3RhYiBzbyB0aGF0Ci0jIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGhhcyB0byBzZW5kIHRo ZSBzY2hlbWEgYWdhaW4uCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMn LCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQp LCAtaSwgMippLCAtMyppIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIwMDMsNTAwMCkgcyhpKTsKLUFM VEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZiBJTlQ7Ci1DT01NSVQ7Ci19KTsKLQotIyBB IHNtYWxsIHRyYW5zYWN0aW9uIHRoYXQgd29uJ3QgZ2V0IHN0cmVhbWVkLiBUaGlzIGlzIGp1c3Qg dG8gZW5zdXJlIHRoYXQgd2UKLSMgc2VuZCB0aGUgc2NoZW1hIGFnYWluIHRvIHJlZmxlY3QgdGhl IGxhc3QgY29sdW1uIGFkZGVkIGluIHRoZSBwcmV2aW91cyB0ZXN0LgotJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWksIDIqaSwgLTMqaSwgNCppIEZST00gZ2VuZXJh dGVfc2VyaWVzKDUwMDEsNTAwNSkgcyhpKTsKLUNPTU1JVDsKLX0pOwotCi0kbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQo YyksIGNvdW50KGQpLCBjb3VudChlKSwgY291bnQoZikgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJl c3VsdCwgcXEoNTAwNXw1MDAyfDQwMDV8MzAwNHw1KSwKLQknY2hlY2sgZGF0YSB3YXMgY29waWVk IHRvIHN1YnNjcmliZXIgZm9yIGJvdGggc3RyZWFtaW5nIGFuZCBub24tc3RyZWFtaW5nIHRyYW5z YWN0aW9ucycKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3Qg dXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBh cHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCiAp OwogCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VC U0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFsbGVsKSIpOworCiskbm9kZV9w dWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCAhPSAk b2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0g JyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisgICkKKyAgb3IgZGllCisgICJU aW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCBhZnRlciBjaGFuZ2lu ZyBTVUJTQ1JJUFRJT04iOworCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2Rl X3N1YnNjcmliZXIsICRhcHBuYW1lLCAxKTsKKwogJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKICRu b2RlX3B1Ymxpc2hlci0+c3RvcDsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9u L3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3Qv MDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0LnBsCmluZGV4IDU1MWYxNmQuLjc1MmU3OWEgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5w bAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMThfc3RyZWFtX3N1YnhhY3RfYWJvcnQu cGwKQEAgLTgsNiArOCwxNDUgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorIyBDaGVjayB0aGUg bG9nIHRoYXQgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1 bGx5CisjIHJlcG9ydGVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KK3N1YiBjaGVja19wYXJh bGxlbF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVs KSA9IEBfOworCW15ICRwYXJhbGxlbF9tZXNzYWdlID0KKwkgICdmaW5pc2hlZCBwcm9jZXNzaW5n IHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZCc7CisKKwlpZiAoJGlzX3BhcmFsbGVsKQor CXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyLyRwYXJhbGxlbF9tZXNzYWdl LywgJG9mZnNldCk7CisJfQorfQorCisjIEVuY2Fwc3VsYXRlIGFsbCB0aGUgY29tbW9uIHRlc3Qg c3RlcHMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gInN0cmVhbWluZyIKKyMgcGFyYW1ldGVyIHNvIHRo ZSBzYW1lIGNvZGUgY2FuIGJlIHJ1biBib3RoIGZvciB0aGUgc3RyZWFtaW5nPW9uIGFuZAorIyBz dHJlYW1pbmc9cGFyYWxsZWwgY2FzZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlteSAoJG5v ZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgJGlzX3BhcmFsbGVsKSA9 IEBfOworCisJbXkgJG9mZnNldCA9IDA7CisKKwkjIElmICJzdHJlYW1pbmciIHBhcmFtZXRlciBp cyBzcGVjaWZpZWQgYXMgInBhcmFsbGVsIiwgd2UgbmVlZCB0byBjaGVjaworCSMgdGhhdCBzdHJl YW1lZCB0cmFuc2FjdGlvbiB3YXMgYXBwbGllZCB1c2luZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtl ci4KKwkjIFdlIGhhdmUgdG8gbG9vayBmb3IgdGhlIERFQlVHMSBsb2cgbWVzc2FnZXMgYWJvdXQg dGhhdCwgc28gYnVtcCB1cCB0aGUKKwkjIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxl bCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYn LAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+ cmVsb2FkOworCX0KKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgor CSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBsYXJnZSAoc3Ry ZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMLCBETUwgYW5kIFJPTExCQUNLcworCSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo Myw1MDApIHMoaSk7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVD VCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAxLDEwMDApIHMoaSk7CisJ U0FWRVBPSU5UIHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4 dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwxNTAwKSBzKGkpOworCVNBVkVQT0lOVCBzMzsK KwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDE1MDEsMjAwMCkgcyhpKTsKKwlST0xMQkFDSyBUTyBzMjsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIw MDEsMjUwMCkgcyhpKTsKKwlST0xMQkFDSyBUTyBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDI1MDEsMzAwMCkgcyhp KTsKKwlTQVZFUE9JTlQgczQ7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzMDAxLDM1MDApIHMoaSk7CisJU0FWRVBPSU5U IHM1OworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMzUwMSw0MDAwKSBzKGkpOworCUNPTU1JVDsKKwl9KTsKKworCSRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxl bF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCW15ICRy ZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJT RUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBx cSgyMDAwfDApLAorCQknY2hlY2sgcm9sbGJhY2sgdG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQg b24gc3Vic2NyaWJlciBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwor CSk7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0 ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgbGFyZ2UgKHN0cmVhbWVkKSB0 cmFuc2FjdGlvbiB3aXRoIHN1YnNjcmliZXIgcmVjZWl2aW5nIG91dCBvZiBvcmRlcgorCSMgc3Vi dHJhbnNhY3Rpb24gUk9MTEJBQ0tzCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdw b3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg0MDAxLDQ1MDApIHMoaSk7CisJU0FWRVBP SU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSw1NTAwKSBzKGkpOworCVNBVkVQT0lOVCBzMjsKKwlJTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDYwMDEsNjUwMCkgcyhpKTsKKwlTQVZFUE9JTlQgczM7CisJSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg3MDAxLDc1MDAp IHMoaSk7CisJUkVMRUFTRSBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDgwMDEsODUwMCkgcyhpKTsKKwlST0xMQkFD SyBUTyBzMTsKKwlDT01NSVQ7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIs ICRvZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwkkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBG Uk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMjUwMHwwKSwKKwkJJ2NoZWNrIHJvbGxi YWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgQ2hl Y2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9z dWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdp dGggc3Vic2NyaWJlciByZWNlaXZpbmcgcm9sbGJhY2sKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDg1MDEsOTAwMCkgcyhp KTsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg5MDAxLDk1MDApIHMoaSk7CisJU0FWRVBPSU5U IHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoOTUwMSwxMDAwMCkgcyhpKTsKKwlST0xMQkFDSzsKKwl9KTsKKworCSRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJh bGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSRy ZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJT RUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBx cSgyNTAwfDApLCAnY2hlY2sgcm9sbGJhY2sgd2FzIHJlZmxlY3RlZCBvbiBzdWJzY3JpYmVyJyk7 CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSAoYSA+IDIpIik7CisJ JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgUmVzZXQg dGhlIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNj cmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVzc2Fn ZXMgPSB3YXJuaW5nIik7CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9Cit9CisKICMg Q3JlYXRlIHB1Ymxpc2hlciBub2RlCiBteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOwogJG5vZGVfcHVibGlzaGVyLT5pbml0KGFs bG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKQEAgLTM2LDYgKzE3NSwxMCBAQCAkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgUFVCTElDQVRJT04gdGFw X3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7CisK KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5n IG1vZGUgJ29uJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9z dWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFwcG5h bWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWIgV0lUSCAoc3RyZWFtaW5nID0gb24pIgogKTsKQEAgLTQ4 LDgxICsxOTEsMjUgQEAgbXkgJHJlc3VsdCA9CiAJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYykg RlJPTSB0ZXN0X3RhYiIpOwogaXMoJHJlc3VsdCwgcXEoMnwwKSwgJ2NoZWNrIGluaXRpYWwgZGF0 YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAotIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5z YWN0aW9uIHdpdGggRERMLCBETUwgYW5kIFJPTExCQUNLcwotJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLDUwMCkgcyhpKTsKLVNB VkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAxLDEwMDApIHMoaSk7Ci1TQVZFUE9JTlQgczI7Ci1JTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEwMDEsMTUwMCkgcyhpKTsKLVNBVkVQT0lOVCBzMzsKLUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTUwMSwyMDAwKSBz KGkpOwotUk9MTEJBQ0sgVE8gczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIwMDEsMjUwMCkgcyhpKTsKLVJPTExCQUNL IFRPIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3NlcmllcygyNTAxLDMwMDApIHMoaSk7Ci1TQVZFUE9JTlQgczQ7Ci1JTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDMwMDEsMzUwMCkgcyhpKTsKLVNBVkVQT0lOVCBzNTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMzUwMSw0MDAwKSBzKGkp OwotQ09NTUlUOwotfSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygk cmVzdWx0LCBxcSgyMDAwfDApLAotCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJl ZmxlY3RlZCBvbiBzdWJzY3JpYmVyIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVm YXVsdHMnCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIs ICRhcHBuYW1lLCAwKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK KyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxsZWwnCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBpZCA9ICRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9u IFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1p bmcnOyIKICk7CiAKLSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIHN1YnNjcmli ZXIgcmVjZWl2aW5nIG91dCBvZiBvcmRlcgotIyBzdWJ0cmFuc2FjdGlvbiBST0xMQkFDS3MKLSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoNDAwMSw0NTAwKSBzKGkpOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAxLDU1MDApIHMo aSk7Ci1TQVZFUE9JTlQgczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDYwMDEsNjUwMCkgcyhpKTsKLVNBVkVQT0lOVCBz MzsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoNzAwMSw3NTAwKSBzKGkpOwotUkVMRUFTRSBzMjsKLUlOU0VSVCBJTlRPIHRl c3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoODAwMSw4 NTAwKSBzKGkpOwotUk9MTEJBQ0sgVE8gczE7Ci1DT01NSVQ7Ci19KTsKLQotJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50 KGMpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDI1MDB8MCksCi0JJ2NoZWNrIHJv bGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsKLQotIyBs YXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggc3Vic2NyaWJlciByZWNlaXZpbmcgcm9s bGJhY2sKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJ TjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoODUwMSw5MDAwKSBzKGkpOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8g dGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg5MDAx LDk1MDApIHMoaSk7Ci1TQVZFUE9JTlQgczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1Qg aSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDk1MDEsMTAwMDApIHMoaSk7Ci1S T0xMQkFDSzsKLX0pOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5h bWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJl c3VsdCwgcXEoMjUwMHwwKSwgJ2NoZWNrIHJvbGxiYWNrIHdhcyByZWZsZWN0ZWQgb24gc3Vic2Ny aWJlcicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVS IFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBwYXJhbGxlbCkiKTsKKworJG5v ZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQg IT0gJG9sZHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFt ZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorICApCisgIG9yIGRpZQor ICAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hh bmdpbmcgU1VCU0NSSVBUSU9OIjsKKwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAk bm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMSk7CiAKICRub2RlX3N1YnNjcmliZXItPnN0b3A7 CiAkbm9kZV9wdWJsaXNoZXItPnN0b3A7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbAppbmRleCA0ZDdkYTgyLi45ZDY3 OGIzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTlfc3RyZWFtX3N1Ynhh Y3RfZGRsX2Fib3J0LnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOV9zdHJlYW1f c3VieGFjdF9kZGxfYWJvcnQucGwKQEAgLTksNiArOSw5MSBAQCB1c2UgUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3Jl OwogCisjIENoZWNrIHRoZSBsb2cgdGhhdCB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGNv bXBsZXRlZCBzdWNjZXNzZnVsbHkKKyMgcmVwb3J0ZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2Vy Lgorc3ViIGNoZWNrX3BhcmFsbGVsX2xvZworeworCW15ICgkbm9kZV9zdWJzY3JpYmVyLCAkb2Zm c2V0LCAkaXNfcGFyYWxsZWwpID0gQF87CisJbXkgJHBhcmFsbGVsX21lc3NhZ2UgPQorCSAgJ2Zp bmlzaGVkIHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kJzsKKworCWlm ICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIv JHBhcmFsbGVsX21lc3NhZ2UvLCAkb2Zmc2V0KTsKKwl9Cit9CisKKyMgRW5jYXBzdWxhdGUgYWxs IHRoZSBjb21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAic3RyZWFtaW5nIgor IyBwYXJhbWV0ZXIgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGggZm9yIHRoZSBzdHJl YW1pbmc9b24gYW5kCisjIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVh bWluZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1l LCAkaXNfcGFyYWxsZWwpID0gQF87CisKKwlteSAkb2Zmc2V0ID0gMDsKKworCSMgSWYgInN0cmVh bWluZyIgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBhcyAicGFyYWxsZWwiLCB3ZSBuZWVkIHRvIGNo ZWNrCisJIyB0aGF0IHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBhcHBsaWVkIHVzaW5nIGEgcGFy YWxsZWwgYXBwbHkgd29ya2VyLgorCSMgV2UgaGF2ZSB0byBsb29rIGZvciB0aGUgREVCVUcxIGxv ZyBtZXNzYWdlcyBhYm91dCB0aGF0LCBzbyBidW1wIHVwIHRoZQorCSMgbG9nIHZlcmJvc2l0eS4K KwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYo J3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkk bm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBs b2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7 CisKKwkjIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwsIERNTCBhbmQgUk9M TEJBQ0tzCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJ QkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3NlcmllcygzLDUwMCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQg Q09MVU1OIGMgSU5UOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpLCAtaSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsMTAwMCkgcyhp KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGQgSU5UOworCVNBVkVQT0lOVCBz MjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMipp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEwMDEsMTUwMCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0 X3RhYiBBREQgQ09MVU1OIGUgSU5UOworCVNBVkVQT0lOVCBzMzsKKwlJTlNFUlQgSU5UTyB0ZXN0 X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippLCAtMyppIEZST00gZ2VuZXJhdGVf c2VyaWVzKDE1MDEsMjAwMCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBEUk9QIENPTFVN TiBjOworCVJPTExCQUNLIFRPIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBt ZDUoaTo6dGV4dCksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAxLDEwMDApIHMoaSk7CisJQ09N TUlUOworCX0pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1l KTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNf cGFyYWxsZWwpOworCisJbXkgJHJlc3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3Rh YiIpOworCWlzKCRyZXN1bHQsIHFxKDEwMDB8NTAwKSwKKwkJJ2NoZWNrIHJvbGxiYWNrIHRvIHNh dmVwb2ludCB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXIgYW5kIGV4dHJhIGNvbHVtbnMgY29u dGFpbiBsb2NhbCBkZWZhdWx0cycKKwkpOworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRhdGEKKwkk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSAoYSA+IDIpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFiIERST1AgQ09M VU1OIGM7CisJfSk7CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1l KTsKKworCSMgUmVzZXQgdGhlIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7 CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJ ImxvZ19taW5fbWVzc2FnZXMgPSB3YXJuaW5nIik7CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9h ZDsKKwl9Cit9CisKICMgQ3JlYXRlIHB1Ymxpc2hlciBub2RlCiBteSAkbm9kZV9wdWJsaXNoZXIg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOwogJG5vZGVfcHVi bGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKQEAgLTM3LDYgKzEy MiwxMCBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUg UFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkgJGFwcG5hbWUg PSAndGFwX3N1Yic7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3Qg dXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgU1VC U0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0 aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWIgV0lUSCAoc3RyZWFtaW5nID0g b24pIgogKTsKQEAgLTQ5LDM1ICsxMzgsMjYgQEAgbXkgJHJlc3VsdCA9CiAJIlNFTEVDVCBjb3Vu dCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOwogaXMoJHJlc3VsdCwgcXEoMnwwKSwgJ2No ZWNrIGluaXRpYWwgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAotIyBsYXJnZSAo c3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMLCBETUwgYW5kIFJPTExCQUNLcwotJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcygz LDUwMCkgcyhpKTsKLUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gYyBJTlQ7Ci1TQVZF UE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAt aSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsMTAwMCkgcyhpKTsKLUFMVEVSIFRBQkxFIHRlc3Rf dGFiIEFERCBDT0xVTU4gZCBJTlQ7Ci1TQVZFUE9JTlQgczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3Rh YiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEw MDEsMTUwMCkgcyhpKTsKLUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZSBJTlQ7Ci1T QVZFUE9JTlQgczM7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQp LCAtaSwgMippLCAtMyppIEZST00gZ2VuZXJhdGVfc2VyaWVzKDE1MDEsMjAwMCkgcyhpKTsKLUFM VEVSIFRBQkxFIHRlc3RfdGFiIERST1AgQ09MVU1OIGM7Ci1ST0xMQkFDSyBUTyBzMTsKLUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIGkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoNTAxLDEwMDApIHMoaSk7Ci1DT01NSVQ7Ci19KTsKLQotJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZS T00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDEwMDB8NTAwKSwKLQknY2hlY2sgcm9sbGJh Y2sgdG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlciBhbmQgZXh0cmEgY29s dW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlz aGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMCk7CisKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFs bGVsJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRvbGRwaWQg PSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZS T00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1l JyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCiApOwogCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVh bWluZyA9IHBhcmFsbGVsKSIpOworCiskbm9kZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNh dGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3Ry ZWFtaW5nJzsiCisgICkKKyAgb3IgZGllCisgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Ig YXBwbHkgdG8gcmVzdGFydCBhZnRlciBjaGFuZ2luZyBTVUJTQ1JJUFRJT04iOworCit0ZXN0X3N0 cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAxKTsK KwogJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKICRub2RlX3B1Ymxpc2hlci0+c3RvcDsKIApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwg Yi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbAppbmRleCA3 YTc5N2YzLi40MjY1ZDNiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJf dHdvcGhhc2VfY2FzY2FkZS5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdv cGhhc2VfY2FzY2FkZS5wbApAQCAtMTEsNiArMTEsMjM5IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7 CiAKKyMgQ2hlY2sgdGhlIGxvZyB0aGF0IHRoZSBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgY29t cGxldGVkIHN1Y2Nlc3NmdWxseQorIyByZXBvcnRlZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIu CitzdWIgY2hlY2tfcGFyYWxsZWxfbG9nCit7CisJbXkgKCRub2RlX3N1YnNjcmliZXIsICRvZmZz ZXQsICRzdHJlYW1pbmdfbW9kZSkgPSBAXzsKKwlteSAkcGFyYWxsZWxfbWVzc2FnZSA9CisJICAn ZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQnOworCisJ aWYgKCRzdHJlYW1pbmdfbW9kZSBlcSAncGFyYWxsZWwnKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJl ci0+d2FpdF9mb3JfbG9nKHFyLyRwYXJhbGxlbF9tZXNzYWdlLywgJG9mZnNldCk7CisJfQorfQor CisjIEVuY2Fwc3VsYXRlIGFsbCB0aGUgY29tbW9uIHRlc3Qgc3RlcHMgd2hpY2ggYXJlIHJlbGF0 ZWQgdG8gInN0cmVhbWluZyIgcGFyYW1ldGVyCisjIHNvIHRoZSBzYW1lIGNvZGUgY2FuIGJlIHJ1 biBib3RoIGZvciB0aGUgc3RyZWFtaW5nPW9uIGFuZCBzdHJlYW1pbmc9cGFyYWxsZWwKKyMgY2Fz ZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlteSAoJG5vZGVfQSwgJG5vZGVfQiwgJG5vZGVf QywgJGFwcG5hbWVfQiwgJGFwcG5hbWVfQywgJHN0cmVhbWluZ19tb2RlKSA9CisJICBAXzsKKwor CW15ICRvZmZzZXRfQiA9IDA7CisJbXkgJG9mZnNldF9DID0gMDsKKworCW15ICRvbGRwaWRfQiA9 ICRub2RlX0EtPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgIgorCQlTRUxFQ1QgcGlkIEZST00g cGdfc3RhdF9yZXBsaWNhdGlvbgorCQlXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1l X0InIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIpOworCW15ICRvbGRwaWRfQyA9ICRub2RlX0It PnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgIgorCQlTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9y ZXBsaWNhdGlvbgorCQlXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lX0MnIEFORCBz dGF0ZSA9ICdzdHJlYW1pbmcnOyIpOworCisJIyBTZXR1cCBsb2dpY2FsIHJlcGxpY2F0aW9uIHN0 cmVhbWluZyBtb2RlCisKKwkkbm9kZV9CLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsICIKKwkJ QUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWJfQgorCQlTRVQgKHN0cmVhbWluZyA9ICRzdHJlYW1p bmdfbW9kZSk7Iik7CisJJG5vZGVfQy0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCAiCisJCUFM VEVSIFNVQlNDUklQVElPTiB0YXBfc3ViX0MKKwkJU0VUIChzdHJlYW1pbmcgPSAkc3RyZWFtaW5n X21vZGUpIik7CisKKwkjIFdhaXQgZm9yIHN1YnNjcmliZXJzIHRvIGZpbmlzaCBpbml0aWFsaXph dGlvbgorCisJJG5vZGVfQS0+cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywgIgorCQlT RUxFQ1QgcGlkICE9ICRvbGRwaWRfQiBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KKwkJV0hFUkUg YXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9CJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsi CisJKSBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0 IjsKKwkkbm9kZV9CLT5wb2xsX3F1ZXJ5X3VudGlsKAorCQkncG9zdGdyZXMnLCAiCisJCVNFTEVD VCBwaWQgIT0gJG9sZHBpZF9DIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbgorCQlXSEVSRSBhcHBs aWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lX0MnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKwkp IG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQiOwor CisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgVGVzdCAyUEMgUFJFUEFSRSAv IENPTU1JVCBQUkVQQVJFRC4KKwkjIDEuIERhdGEgaXMgc3RyZWFtZWQgYXMgYSAyUEMgdHJhbnNh Y3Rpb24uCisJIyAyLiBUaGVuIGRvIGNvbW1pdCBwcmVwYXJlZC4KKwkjCisJIyBFeHBlY3QgYWxs IGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyKHMpIGFmdGVyIHRoZSBjb21taXQuCisJ IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJIyBJZiAic3RyZWFtaW5nIiBwYXJh bWV0ZXIgaXMgc3BlY2lmaWVkIGFzICJwYXJhbGxlbCIsIHdlIG5lZWQgdG8gY2hlY2sKKwkjIHRo YXQgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIHByZXBhcmVkIHVzaW5nIGEgcGFyYWxsZWwgYXBw bHkgd29ya2VyLgorCSMgV2UgaGF2ZSB0byBsb29rIGZvciB0aGUgREVCVUcxIGxvZyBtZXNzYWdl cyBhYm91dCB0aGF0LCBzbyBidW1wIHVwIHRoZQorCSMgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJHN0 cmVhbWluZ19tb2RlIGVxICdwYXJhbGxlbCcpCisJeworCQkkbm9kZV9CLT5hcHBlbmRfY29uZign cG9zdGdyZXNxbC5jb25mJywgImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiKTsKKwkJJG5vZGVf Qi0+cmVsb2FkOworCisJCSRub2RlX0MtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAi bG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkkbm9kZV9DLT5yZWxvYWQ7CisJfQorCisJ IyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldF9CID0gLXMg JG5vZGVfQi0+bG9nZmlsZTsKKwkkb2Zmc2V0X0MgPSAtcyAkbm9kZV9DLT5sb2dmaWxlOworCisJ IyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRr QiBsaW1pdC4KKwkjIFRoZW4gMlBDIFBSRVBBUkUKKwkkbm9kZV9BLT5zYWZlX3BzcWwoCisJCSdw b3N0Z3JlcycsIHF7CisJCUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7CisJCVVQREFU RSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBG Uk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAn dGVzdF9wcmVwYXJlZF90YWInO30pOworCisJJG5vZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZV9CKTsKKwkkbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOworCisJY2hl Y2tfcGFyYWxsZWxfbG9nKCRub2RlX0IsICRvZmZzZXRfQiwgJHN0cmVhbWluZ19tb2RlKTsKKwlj aGVja19wYXJhbGxlbF9sb2coJG5vZGVfQywgJG9mZnNldF9DLCAkc3RyZWFtaW5nX21vZGUpOwor CisJIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJl cihzKQorCW15ICRyZXN1bHQgPQorCSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0 LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIgQicpOworCSRy ZXN1bHQgPQorCSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3Ry YW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIgQycpOworCisJIyAyUEMgQ09NTUlU CisJJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ3Rlc3Rf cHJlcGFyZWRfdGFiJzsiKTsKKworCSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVf Qik7CisJJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKKworCSMgY2hlY2sg dGhhdCB0cmFuc2FjdGlvbiB3YXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIocykKKwkkcmVzdWx0 ID0gJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNv dW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEo MzMzNHwzMzM0fDMzMzQpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQg b24gc3Vic2NyaWJlciBCLCBhbmQgZXh0cmEgY29sdW1ucyBoYXZlIGxvY2FsIGRlZmF1bHRzJwor CSk7CisJJHJlc3VsdCA9ICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNU IGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlz KCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwKKwkJJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhh dmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQywgYW5kIGV4dHJhIGNvbHVtbnMgaGF2ZSBsb2Nh bCBkZWZhdWx0cycKKwkpOworCisJIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgaXMgZW5k ZWQgb24gc3Vic2NyaWJlcihzKQorCSRyZXN1bHQgPQorCSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsK KwlpcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3Jp YmVyIEInKTsKKwkkcmVzdWx0ID0KKwkgICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3Vs dCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlciBDJyk7CisK KwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJIyBUZXN0IDJQQyBQUkVQQVJFIHdp dGggYSBuZXN0ZWQgUk9MTEJBQ0sgVE8gU0FWRVBPSU5ULgorCSMgMC4gQ2xlYW51cCBmcm9tIHBy ZXZpb3VzIHRlc3QgbGVhdmluZyBvbmx5IDIgcm93cy4KKwkjIDEuIEluc2VydCBvbmUgbW9yZSBy b3cuCisJIyAyLiBSZWNvcmQgYSBTQVZFUE9JTlQuCisJIyAzLiBEYXRhIGlzIHN0cmVhbWVkIHVz aW5nIDJQQy4KKwkjIDQuIERvIHJvbGxiYWNrIHRvIFNBVkVQT0lOVCBwcmlvciB0byB0aGUgc3Ry ZWFtZWQgaW5zZXJ0cy4KKwkjIDUuIFRoZW4gQ09NTUlUIFBSRVBBUkVELgorCSMKKwkjIEV4cGVj dCBkYXRhIGFmdGVyIHRoZSBTQVZFUE9JTlQgaXMgYWJvcnRlZCBsZWF2aW5nIG9ubHkgMyByb3dz ICg9IDIgb3JpZ2luYWwgKyAxIGZyb20gc3RlcCAxKS4KKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisKKwkjIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3Mg KGRlbGV0ZSB3aWxsIGJlIHJlcGxpY2F0ZWQpCisJJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKworCSMgQ2hlY2sgdGhl IHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXRfQiA9IC1zICRub2RlX0ItPmxv Z2ZpbGU7CisJJG9mZnNldF9DID0gLXMgJG5vZGVfQy0+bG9nZmlsZTsKKworCSMgMlBDIFBSRVBB UkUgd2l0aCBhIG5lc3RlZCBST0xMQkFDSyBUTyBTQVZFUE9JTlQKKwkkbm9kZV9BLT5zYWZlX3Bz cWwoCisJCSdwb3N0Z3JlcycsICIKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZB TFVFUyAoOTk5OSwgJ2Zvb2JhcicpOworCQlTQVZFUE9JTlQgc3BfaW5uZXI7CisJCUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MywgNTAwMCkgcyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1v ZChhLDIpID0gMDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwor CQlST0xMQkFDSyBUTyBTQVZFUE9JTlQgc3BfaW5uZXI7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04g J291dGVyJzsKKwkJIik7CisKKwkkbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0Ip OworCSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQyk7CisKKwljaGVja19wYXJh bGxlbF9sb2coJG5vZGVfQiwgJG9mZnNldF9CLCAkc3RyZWFtaW5nX21vZGUpOworCWNoZWNrX3Bh cmFsbGVsX2xvZygkbm9kZV9DLCAkb2Zmc2V0X0MsICRzdHJlYW1pbmdfbW9kZSk7CisKKwkjIGNo ZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyKHMpCisJJHJl c3VsdCA9CisJICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJh bnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBCJyk7CisJJHJlc3VsdCA9CisJICAk bm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBn X3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMg cHJlcGFyZWQgb24gc3Vic2NyaWJlciBDJyk7CisKKwkjIDJQQyBDT01NSVQKKwkkbm9kZV9BLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNPTU1JVCBQUkVQQVJFRCAnb3V0ZXInOyIpOworCisJJG5v ZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKKwkkbm9kZV9CLT53YWl0X2Zvcl9j YXRjaHVwKCRhcHBuYW1lX0MpOworCisJIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgaXMg ZW5kZWQgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPQorCSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsK KwlpcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGVuZGVkIG9uIHN1YnNjcmliZXIg QicpOworCSRyZXN1bHQgPQorCSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBx cSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGVuZGVkIG9uIHN1YnNjcmliZXIgQycpOworCisJIyBjaGVj ayBpbnNlcnRzIGFyZSB2aXNpYmxlIGF0IHN1YnNjcmliZXIocykuCisJIyBBbGwgdGhlIHN0cmVh bWVkIGRhdGEgKHByaW9yIHRvIHRoZSBTQVZFUE9JTlQpIHNob3VsZCBiZSByb2xsZWQgYmFjay4K KwkjICg5OTk5LCAnZm9vYmFyJykgc2hvdWxkIGJlIGNvbW1pdHRlZC4KKwkkcmVzdWx0ID0gJG5v ZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0 X3RhYiB3aGVyZSBiID0gJ2Zvb2Jhcic7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICdSb3dzIGNv bW1pdHRlZCBhcmUgcHJlc2VudCBvbiBzdWJzY3JpYmVyIEInKTsKKwkkcmVzdWx0ID0KKwkgICRu b2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90 YWI7Iik7CisJaXMoJHJlc3VsdCwgcXEoMyksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBv biBzdWJzY3JpYmVyIEInKTsKKwkkcmVzdWx0ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYiB3aGVyZSBiID0gJ2Zvb2Jhcic7 Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBvbiBz dWJzY3JpYmVyIEMnKTsKKwkkcmVzdWx0ID0KKwkgICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWI7Iik7CisJaXMoJHJlc3VsdCwgcXEo MyksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBvbiBzdWJzY3JpYmVyIEMnKTsKKworCSMg Q2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKwkkbm9kZV9BLT53YWl0X2Zvcl9j YXRjaHVwKCRhcHBuYW1lX0IpOworCSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVf Qyk7CisKKwkjIFJlc2V0IHRoZSBsb2cgdmVyYm9zaXR5LgorCWlmICgkc3RyZWFtaW5nX21vZGUg ZXEgJ3BhcmFsbGVsJykKKwl7CisJCSRub2RlX0ItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNv bmYnLCAibG9nX21pbl9tZXNzYWdlcyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfQi0+cmVsb2FkOwor CisJCSRub2RlX0MtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAibG9nX21pbl9tZXNz YWdlcyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfQy0+cmVsb2FkOworCX0KK30KKwogIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBTZXR1cCBhIGNhc2NhZGUgb2YgcHViL3N1YiBub2Rl cy4KICMgbm9kZV9BIC0+IG5vZGVfQiAtPiBub2RlX0MKQEAgLTI2MCwxNjAgKzQ5MywxNSBAQCBp cygkcmVzdWx0LCBxcSgyMSksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBvbiBzdWJzY3Jp YmVyIEMnKTsKICMgMlBDICsgU1RSRUFNSU5HIFRFU1RTCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0t LQogCi1teSAkb2xkcGlkX0IgPSAkbm9kZV9BLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgIgot CVNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uCi0JV0hFUkUgYXBwbGljYXRpb25f bmFtZSA9ICckYXBwbmFtZV9CJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiKTsKLW15ICRvbGRw aWRfQyA9ICRub2RlX0ItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCAiCi0JU0VMRUNUIHBpZCBG Uk9NIHBnX3N0YXRfcmVwbGljYXRpb24KLQlXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBu YW1lX0MnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIpOwotCi0jIFNldHVwIGxvZ2ljYWwgcmVw bGljYXRpb24gKHN0cmVhbWluZyA9IG9uKQotCi0kbm9kZV9CLT5zYWZlX3BzcWwoCi0JJ3Bvc3Rn cmVzJywgIgotCUFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViX0IKLQlTRVQgKHN0cmVhbWluZyA9 IG9uKTsiKTsKLSRub2RlX0MtPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCAiCi0JQUxURVIgU1VC U0NSSVBUSU9OIHRhcF9zdWJfQwotCVNFVCAoc3RyZWFtaW5nID0gb24pIik7Ci0KLSMgV2FpdCBm b3Igc3Vic2NyaWJlcnMgdG8gZmluaXNoIGluaXRpYWxpemF0aW9uCi0KLSRub2RlX0EtPnBvbGxf cXVlcnlfdW50aWwoCi0JJ3Bvc3RncmVzJywgIgotCVNFTEVDVCBwaWQgIT0gJG9sZHBpZF9CIEZS T00gcGdfc3RhdF9yZXBsaWNhdGlvbgotCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5h bWVfQicgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgotKSBvciBkaWUgIlRpbWVkIG91dCB3aGls ZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IjsKLSRub2RlX0ItPnBvbGxfcXVlcnlfdW50 aWwoCi0JJ3Bvc3RncmVzJywgIgotCVNFTEVDVCBwaWQgIT0gJG9sZHBpZF9DIEZST00gcGdfc3Rh dF9yZXBsaWNhdGlvbgotCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWVfQycgQU5E IHN0YXRlID0gJ3N0cmVhbWluZyc7IgotKSBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5n IGZvciBhcHBseSB0byByZXN0YXJ0IjsKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwotIyBUZXN0IDJQQyBQUkVQQVJFIC8gQ09NTUlUIFBSRVBBUkVELgotIyAxLiBEYXRhIGlzIHN0 cmVhbWVkIGFzIGEgMlBDIHRyYW5zYWN0aW9uLgotIyAyLiBUaGVuIGRvIGNvbW1pdCBwcmVwYXJl ZC4KLSMKLSMgRXhwZWN0IGFsbCBkYXRhIGlzIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlcihzKSBh ZnRlciB0aGUgY29tbWl0LgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIElu c2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxp bWl0LgotIyBUaGVuIDJQQyBQUkVQQVJFCi0kbm9kZV9BLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVz JywgcXsKLQlCRUdJTjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRl eHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFi IFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3Rh YiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJl ZF90YWInO30pOwotCi0kbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0IpOwotJG5v ZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKKyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJworIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX0EsICRub2RlX0Is ICRub2RlX0MsICRhcHBuYW1lX0IsICRhcHBuYW1lX0MsICdvbicpOwogCi0jIGNoZWNrIHRoZSB0 cmFuc2FjdGlvbiBzdGF0ZSBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyKHMpCi0kcmVzdWx0ID0K LSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBw Z19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMg cHJlcGFyZWQgb24gc3Vic2NyaWJlciBCJyk7Ci0kcmVzdWx0ID0KLSAgJG5vZGVfQy0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsi KTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2Ny aWJlciBDJyk7Ci0KLSMgMlBDIENPTU1JVAotJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKLQotJG5vZGVfQS0+d2Fp dF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKLSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFw cG5hbWVfQyk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiB3YXMgY29tbWl0dGVkIG9uIHN1 YnNjcmliZXIocykKLSRyZXN1bHQgPSAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQki U0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIp OwotaXMoJHJlc3VsdCwgcXEoMzMzNHwzMzM0fDMzMzQpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQ QyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyIEIsIGFuZCBleHRyYSBjb2x1bW5zIGhhdmUg bG9jYWwgZGVmYXVsdHMnCi0pOwotJHJlc3VsdCA9ICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRl c3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCksCi0JJ1Jvd3MgaW5zZXJ0 ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQywgYW5kIGV4dHJhIGNvbHVt bnMgaGF2ZSBsb2NhbCBkZWZhdWx0cycKLSk7Ci0KLSMgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0 YXRlIGlzIGVuZGVkIG9uIHN1YnNjcmliZXIocykKLSRyZXN1bHQgPQotICAkbm9kZV9CLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3Rz OyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vi c2NyaWJlciBCJyk7Ci0kcmVzdWx0ID0KLSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQs IHFxKDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQycpOwotCi0j IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRlc3QgMlBDIFBSRVBBUkUgd2l0aCBh IG5lc3RlZCBST0xMQkFDSyBUTyBTQVZFUE9JTlQuCi0jIDAuIENsZWFudXAgZnJvbSBwcmV2aW91 cyB0ZXN0IGxlYXZpbmcgb25seSAyIHJvd3MuCi0jIDEuIEluc2VydCBvbmUgbW9yZSByb3cuCi0j IDIuIFJlY29yZCBhIFNBVkVQT0lOVC4KLSMgMy4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMu Ci0jIDQuIERvIHJvbGxiYWNrIHRvIFNBVkVQT0lOVCBwcmlvciB0byB0aGUgc3RyZWFtZWQgaW5z ZXJ0cy4KLSMgNS4gVGhlbiBDT01NSVQgUFJFUEFSRUQuCi0jCi0jIEV4cGVjdCBkYXRhIGFmdGVy IHRoZSBTQVZFUE9JTlQgaXMgYWJvcnRlZCBsZWF2aW5nIG9ubHkgMyByb3dzICg9IDIgb3JpZ2lu YWwgKyAxIGZyb20gc3RlcCAxKS4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQot IyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzIChkZWxldGUgd2lsbCBi ZSByZXBsaWNhdGVkKQotJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKLQotIyAyUEMgUFJFUEFSRSB3aXRoIGEgbmVzdGVk IFJPTExCQUNLIFRPIFNBVkVQT0lOVAotJG5vZGVfQS0+c2FmZV9wc3FsKAotCSdwb3N0Z3Jlcycs ICIKLQlCRUdJTjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5OTksICdmb29iYXIn KTsKLQlTQVZFUE9JTlQgc3BfaW5uZXI7Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGks IG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFU RSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZS T00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotCVJPTExCQUNLIFRPIFNBVkVQT0lOVCBz cF9pbm5lcjsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICdvdXRlcic7Ci0JIik7Ci0KLSRub2RlX0Et PndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQik7Ci0kbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lX0MpOwotCi0jIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBwcmVwYXJlZCBv biBzdWJzY3JpYmVyKHMpCi0kcmVzdWx0ID0KLSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1 bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBCJyk7Ci0k cmVzdWx0ID0KLSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNh Y3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBDJyk7Ci0KLSMgMlBDIENPTU1JVAotJG5v ZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ291dGVyJzsiKTsK LQotJG5vZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKLSRub2RlX0ItPndhaXRf Zm9yX2NhdGNodXAoJGFwcG5hbWVfQyk7Ci0KLSMgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXRl IGlzIGVuZGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPQotICAkbm9kZV9CLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwot aXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBlbmRlZCBvbiBzdWJzY3JpYmVyIEIn KTsKLSRyZXN1bHQgPQotICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0 cmFuc2FjdGlvbiBpcyBlbmRlZCBvbiBzdWJzY3JpYmVyIEMnKTsKLQotIyBjaGVjayBpbnNlcnRz IGFyZSB2aXNpYmxlIGF0IHN1YnNjcmliZXIocykuCi0jIEFsbCB0aGUgc3RyZWFtZWQgZGF0YSAo cHJpb3IgdG8gdGhlIFNBVkVQT0lOVCkgc2hvdWxkIGJlIHJvbGxlZCBiYWNrLgotIyAoOTk5OSwg J2Zvb2JhcicpIHNob3VsZCBiZSBjb21taXR0ZWQuCi0kcmVzdWx0ID0gJG5vZGVfQi0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiIHdoZXJlIGIg PSAnZm9vYmFyJzsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAnUm93cyBjb21taXR0ZWQgYXJlIHBy ZXNlbnQgb24gc3Vic2NyaWJlciBCJyk7Ci0kcmVzdWx0ID0gJG5vZGVfQi0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYjsiKTsKLWlzKCRyZXN1bHQs IHFxKDMpLCAnUm93cyBjb21taXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBCJyk7Ci0k cmVzdWx0ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgq KSBGUk9NIHRlc3RfdGFiIHdoZXJlIGIgPSAnZm9vYmFyJzsiKTsKLWlzKCRyZXN1bHQsIHFxKDEp LCAnUm93cyBjb21taXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBDJyk7Ci0kcmVzdWx0 ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0 ZXN0X3RhYjsiKTsKLWlzKCRyZXN1bHQsIHFxKDMpLCAnUm93cyBjb21taXR0ZWQgYXJlIHByZXNl bnQgb24gc3Vic2NyaWJlciBDJyk7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit0ZXN0X3N0cmVhbWluZygkbm9kZV9BLCAkbm9k ZV9CLCAkbm9kZV9DLCAkYXBwbmFtZV9CLCAkYXBwbmFtZV9DLCAncGFyYWxsZWwnKTsKIAogIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBjaGVjayBhbGwgdGhlIGNsZWFudXAKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyM190d29waGFzZV9zdHJlYW0ucGwg Yi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBsCmluZGV4IDli NDU0MTAuLjgyYjVlNmMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyM190 d29waGFzZV9zdHJlYW0ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIzX3R3b3Bo YXNlX3N0cmVhbS5wbApAQCAtOCw2ICs4LDMwOCBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCisj IENoZWNrIHRoZSBsb2cgdGhhdCB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGNvbXBsZXRl ZCBzdWNjZXNzZnVsbHkKKyMgcmVwb3J0ZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorc3Vi IGNoZWNrX3BhcmFsbGVsX2xvZworeworCW15ICgkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAk aXNfcGFyYWxsZWwpID0gQF87CisJbXkgJHBhcmFsbGVsX21lc3NhZ2UgPQorCSAgJ2ZpbmlzaGVk IHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kJzsKKworCWlmICgkaXNf cGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIvJHBhcmFs bGVsX21lc3NhZ2UvLCAkb2Zmc2V0KTsKKwl9Cit9CisKKyMgRW5jYXBzdWxhdGUgYWxsIHRoZSBj b21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAic3RyZWFtaW5nIgorIyBwYXJh bWV0ZXIgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGggZm9yIHRoZSBzdHJlYW1pbmc9 b24gYW5kCisjIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVhbWluZwor eworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAkaXNf cGFyYWxsZWwpID0gQF87CisKKwlteSAkb2Zmc2V0ID0gMDsKKworCSMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKwkjIFRlc3QgMlBDIFBSRVBBUkUgLyBDT01NSVQgUFJFUEFSRUQuCisJ IyAxLiBEYXRhIGlzIHN0cmVhbWVkIGFzIGEgMlBDIHRyYW5zYWN0aW9uLgorCSMgMi4gVGhlbiBk byBjb21taXQgcHJlcGFyZWQuCisJIworCSMgRXhwZWN0IGFsbCBkYXRhIGlzIHJlcGxpY2F0ZWQg b24gc3Vic2NyaWJlciBzaWRlIGFmdGVyIHRoZSBjb21taXQuCisJIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworCisJIyBJZiAic3RyZWFtaW5nIiBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVk IGFzICJwYXJhbGxlbCIsIHdlIG5lZWQgdG8gY2hlY2sKKwkjIHRoYXQgc3RyZWFtZWQgdHJhbnNh Y3Rpb24gd2FzIHByZXBhcmVkIHVzaW5nIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorCSMgV2Ug aGF2ZSB0byBsb29rIGZvciB0aGUgREVCVUcxIGxvZyBtZXNzYWdlcyBhYm91dCB0aGF0LCBzbyBi dW1wIHVwIHRoZQorCSMgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJ JG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9n X21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJ fQorCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9 IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIGNoZWNrIHRoYXQgMlBDIGdldHMg cmVwbGljYXRlZCB0byBzdWJzY3JpYmVyCisJIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVu b3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KKwkkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkg cyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0g MDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCQlQUkVQQVJF IFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7CisKKwkkbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2Rl X3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwkjIGNoZWNrIHRoYXQgdHJh bnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgorCW15ICRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJh bnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisJIyAyUEMgdHJhbnNhY3Rp b24gZ2V0cyBjb21taXR0ZWQKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCQkiQ09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7CisKKwkkbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBjaGVjayB0aGF0IHRy YW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3Vu dChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDMz MzR8MzMzNHwzMzM0KSwKKwkJJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9u IHN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJ KTsKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0 LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJIyBUZXN0IDJQQyBQUkVQQVJFIC8gUk9M TEJBQ0sgUFJFUEFSRUQuCisJIyAxLiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdo aWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIuCisJIyAyLiBEYXRhIGlzIHN0cmVhbWVk IHVzaW5nIDJQQy4KKwkjIDMuIERvIHJvbGxiYWNrIHByZXBhcmVkLgorCSMKKwkjIEV4cGVjdCBk YXRhIHJvbGxzIGJhY2sgbGVhdmluZyBvbmx5IHRoZSBvcmlnaW5hbCAyIHJvd3MuCisJIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4 Y2VwdCBmb3IgMiByb3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQpCisJJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAy OyIpOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNl dCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIFRoZW4gaW5zZXJ0LCB1cGRh dGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCisJJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJCUJFR0lOOworCQlJ TlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDMsIDUwMDApIHMoaSk7CisJCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBX SEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMp ID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOworCisJ JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3Bh cmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJ IyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmli ZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0 LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKKworCSMg MlBDIHRyYW5zYWN0aW9uIGdldHMgYWJvcnRlZAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJCSJST0xMQkFDSyBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIp OworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMg Y2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJl c3VsdCwgcXEoMnwyfDIpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgYXJlIHJvbGxlZCBiYWNr LCBsZWF2aW5nIG9ubHkgdGhlIG9yaWdpbmFsIDIgcm93cycKKwkpOworCisJJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCop IEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2Fj dGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKwkjIENoZWNrIHRoYXQgMlBDIENPTU1JVCBQUkVQQVJFRCBpcyBkZWNvZGVk IHByb3Blcmx5IG9uIGNyYXNoIHJlc3RhcnQuCisJIyAxLiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVs ZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KKwkjIDIuIFRoZW4gc2Vy dmVyIGNyYXNoZXMgYmVmb3JlIHRoZSAyUEMgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLgorCSMg My4gQWZ0ZXIgc2VydmVycyBhcmUgcmVzdGFydGVkIHRoZSBwZW5kaW5nIHRyYW5zYWN0aW9uIGlz IGNvbW1pdHRlZC4KKwkjCisJIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJz Y3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KKwkjIE5vdGU6IGJvdGggcHVibGlzaGVyIGFu ZCBzdWJzY3JpYmVyIGRvIGNyYXNoL3Jlc3RhcnQuCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9m ZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkkbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRl c3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAw MCkgcyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIp ID0gMDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCQlQUkVQ QVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7CisKKwkkbm9kZV9zdWJzY3Jp YmVyLT5zdG9wKCdpbW1lZGlhdGUnKTsKKwkkbm9kZV9wdWJsaXNoZXItPnN0b3AoJ2ltbWVkaWF0 ZScpOworCisJJG5vZGVfcHVibGlzaGVyLT5zdGFydDsKKwkkbm9kZV9zdWJzY3JpYmVyLT5zdGFy dDsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNf cGFyYWxsZWwpOworCisJIyBjb21taXQgcG9zdCB0aGUgcmVzdGFydAorCSRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFy ZWRfdGFiJzsiKTsKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworCisJIyBjaGVjayBpbnNlcnRzIGFyZSB2aXNpYmxlCisJJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChj KSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDMzMzR8 MzMzNHwzMzM0KSwKKwkJJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1 YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsK KworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIERvIElOU0VSVCBhZnRlciB0 aGUgUFJFUEFSRSBidXQgYmVmb3JlIFJPTExCQUNLIFBSRVBBUkVELgorCSMgMS4gVGFibGUgaXMg ZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVy LgorCSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMuCisJIyAzLiBBIHNpbmdsZSByb3cg SU5TRVJUIGlzIGRvbmUgd2hpY2ggaXMgYWZ0ZXIgdGhlIFBSRVBBUkUuCisJIyA0LiBUaGVuIGRv IGEgUk9MTEJBQ0sgUFJFUEFSRUQuCisJIworCSMgRXhwZWN0IHRoZSAyUEMgZGF0YSByb2xscyBi YWNrIGxlYXZpbmcgb25seSAzIHJvd3Mgb24gdGhlIHN1YnNjcmliZXIKKwkjICh0aGUgb3JpZ2lu YWwgMiArIGluc2VydGVkIDEpLgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwor CSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBs aWNhdGVkKQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJERUxF VEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmli ZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dm aWxlOworCisJIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8g ZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkn cG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGks IG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOworCQlVUERB VEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUg RlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04g J3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwg JG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBp biBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJl cGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVw YXJlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIEluc2VydCBhIGRpZmZlcmVudCByZWNvcmQgKG5v dyB3ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQorCSMgTm90ZTogdGhlIDJQ QyB0cmFuc2FjdGlvbiBzdGlsbCBob2xkcyByb3cgbG9ja3Mgc28gbWFrZSBzdXJlIHRoaXMgaW5z ZXJ0IGlzIGZvciBhIHNlcGFyYXRlIHByaW1hcnkga2V5CisJJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkJIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOTk5OTks ICdmb29iYXInKSIpOworCisJIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCisJJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlJPTExCQUNLIFBSRVBBUkVEICd0 ZXN0X3ByZXBhcmVkX3RhYic7Iik7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJGFwcG5hbWUpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24g c3Vic2NyaWJlciwKKwkjIGJ1dCB0aGUgZXh0cmEgSU5TRVJUIG91dHNpZGUgb2YgdGhlIDJQQyBz dGlsbCB3YXMgcmVwbGljYXRlZAorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5 OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzfDN8MyksCisJCSdjaGVjayB0 aGUgb3V0c2lkZSBpbnNlcnQgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CisKKwkkcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwgJ3Ry YW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworCSMgRG8gSU5TRVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1dCBiZWZv cmUgQ09NTUlUIFBSRVBBUkVELgorCSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93 cyB3aGljaCBhcmUgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyLgorCSMgMi4gRGF0YSBpcyBzdHJl YW1lZCB1c2luZyAyUEMuCisJIyAzLiBBIHNpbmdsZSByb3cgSU5TRVJUIGlzIGRvbmUgd2hpY2gg aXMgYWZ0ZXIgdGhlIFBSRVBBUkUuCisJIyA0LiBUaGVuIGRvIGEgQ09NTUlUIFBSRVBBUkVELgor CSMKKwkjIEV4cGVjdCAyUEMgZGF0YSArIHRoZSBleHRyYSByb3cgYXJlIG9uIHRoZSBzdWJzY3Jp YmVyCisJIyAodGhlIDMzMzQgKyBpbnNlcnRlZCAxID0gMzMzNSkuCisJIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworCisJIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3Ig MiByb3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQpCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJ IyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRu b2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRl bGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCisJJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJCUJFR0lOOworCQlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMs IDUwMDApIHMoaSk7CisJCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2Qo YSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJ UFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOworCisJJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xv Zygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJIyBjaGVjayB0 aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKKwkkcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1Qg Y291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwg J3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgSW5zZXJ0IGEg ZGlmZmVyZW50IHJlY29yZCAobm93IHdlIGFyZSBvdXRzaWRlIG9mIHRoZSAyUEMgdHJhbnNhY3Rp b24pCisJIyBOb3RlOiB0aGUgMlBDIHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBz byBtYWtlIHN1cmUgdGhpcyBpbnNlcnQgaXMgZm9yIGEgc2VwYXJhcmUgcHJpbWFyeSBrZXkKKwkk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiSU5TRVJUIElOVE8gdGVz dF90YWIgVkFMVUVTICg5OTk5OSwgJ2Zvb2JhcicpIik7CisKKwkjIDJQQyB0cmFuc2FjdGlvbiBn ZXRzIGNvbW1pdHRlZAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKKworCSRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNh Y3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMzMzNXwz MzM1fDMzMzUpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgKGFzIHdlbGwgYXMgb3V0c2lkZSBp bnNlcnQpIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNv bnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsKKworCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBh cmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0 dGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFi IFdIRVJFIGEgPiAyOyIpOworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZSk7CisKKwkjIFJlc2V0IHRoZSBsb2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwp CisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywK KwkJCSJsb2dfbWluX21lc3NhZ2VzID0gd2FybmluZyIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5y ZWxvYWQ7CisJfQorfQorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFNldHVw CiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC00OCw2ICszNTAsMTAgQEAgJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9O IHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWIn OworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVh bWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoCiAJJ3Bvc3RncmVzJywgIgogCUNSRUFURSBTVUJTQ1JJUFRJ T04gdGFwX3N1YgpAQCAtNjQsMjM2ICszNzAsMzAgQEAgbXkgJHR3b3BoYXNlX3F1ZXJ5ID0KICRu b2RlX3N1YnNjcmliZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywgJHR3b3BoYXNlX3F1 ZXJ5KQogICBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBzdWJzY3JpYmVyIHRv IGVuYWJsZSB0d29waGFzZSI7CiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMg Q2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcgotIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwogbXkgJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0g OTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDJ8MiksICdjaGVjayBpbml0 aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKLSMgVGVzdCAyUEMgUFJFUEFSRSAvIENPTU1JVCBQUkVQQVJFRC4KLSMg MS4gRGF0YSBpcyBzdHJlYW1lZCBhcyBhIDJQQyB0cmFuc2FjdGlvbi4KLSMgMi4gVGhlbiBkbyBj b21taXQgcHJlcGFyZWQuCi0jCi0jIEV4cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1 YnNjcmliZXIgc2lkZSBhZnRlciB0aGUgY29tbWl0LgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVy LCAkYXBwbmFtZSwgMCk7CiAKLSMgY2hlY2sgdGhhdCAyUEMgZ2V0cyByZXBsaWNhdGVkIHRvIHN1 YnNjcmliZXIKLSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNl ZWQgdGhlIDY0a0IgbGltaXQuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdy ZXMnLCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90 YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3Rf dGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBh cmVkX3RhYic7fSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBz dWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJl c3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ci0K LSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgY29tbWl0dGVkCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAotCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsi KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBj aGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3Vu dCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1 bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21t aXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZh dWx0cycKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNp bmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBs aWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCiApOwot JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxF Q1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDAp LCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKLQotIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBUZXN0IDJQQyBQUkVQQVJFIC8gUk9MTEJBQ0sgUFJF UEFSRUQuCi0jIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2ggYXJlIHJl cGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KLSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMu Ci0jIDMuIERvIHJvbGxiYWNrIHByZXBhcmVkLgotIwotIyBFeHBlY3QgZGF0YSByb2xscyBiYWNr IGxlYXZpbmcgb25seSB0aGUgb3JpZ2luYWwgMiByb3dzLgotIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIwotCi0jIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3Mg KHdpbGwgYmUgcmVwbGljYXRlZCkKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKLQotIyBUaGVuIGluc2Vy dCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0 LgotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJTjsK LQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIp IFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwz KSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwogCi0k bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRo YXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgotJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJh bnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIDJQQyB0cmFuc2FjdGlv biBnZXRzIGFib3J0ZWQKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0J IlJPTExCQUNLIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2Fj dGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291 bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMnwyfDIpLAotCSdS b3dzIGluc2VydGVkIGJ5IDJQQyBhcmUgcm9sbGVkIGJhY2ssIGxlYXZpbmcgb25seSB0aGUgb3Jp Z2luYWwgMiByb3dzJyk7Ci0KLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7 Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJl cicpOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENoZWNrIHRoYXQgMlBD IENPTU1JVCBQUkVQQVJFRCBpcyBkZWNvZGVkIHByb3Blcmx5IG9uIGNyYXNoIHJlc3RhcnQuCi0j IDEuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2 NGtCIGxpbWl0LgotIyAyLiBUaGVuIHNlcnZlciBjcmFzaGVzIGJlZm9yZSB0aGUgMlBDIHRyYW5z YWN0aW9uIGlzIGNvbW1pdHRlZC4KLSMgMy4gQWZ0ZXIgc2VydmVycyBhcmUgcmVzdGFydGVkIHRo ZSBwZW5kaW5nIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4KLSMKLSMgRXhwZWN0IGFsbCBkYXRh IGlzIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlciBzaWRlIGFmdGVyIHRoZSBjb21taXQuCi0jIE5v dGU6IGJvdGggcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGRvIGNyYXNoL3Jlc3RhcnQuCi0jIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KAotCSdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotCVVQ REFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRF IEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotCVBSRVBBUkUgVFJBTlNBQ1RJT04g J3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKLQotJG5vZGVfc3Vic2NyaWJlci0+c3RvcCgnaW1tZWRp YXRlJyk7Ci0kbm9kZV9wdWJsaXNoZXItPnN0b3AoJ2ltbWVkaWF0ZScpOwotCi0kbm9kZV9wdWJs aXNoZXItPnN0YXJ0OwotJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7Ci0KLSMgY29tbWl0IHBvc3Qg dGhlIHJlc3RhcnQKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkNP TU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwotJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayBpbnNlcnRzIGFyZSB2aXNpYmxl Ci0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsK LWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMg aGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBs b2NhbCBkZWZhdWx0cycKLSk7Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMg RG8gSU5TRVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1dCBiZWZvcmUgUk9MTEJBQ0sgUFJFUEFSRUQu Ci0jIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2ggYXJlIHJlcGxpY2F0 ZWQgb24gc3Vic2NyaWJlci4KLSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMuCi0jIDMu IEEgc2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3aGljaCBpcyBhZnRlciB0aGUgUFJFUEFSRS4K LSMgNC4gVGhlbiBkbyBhIFJPTExCQUNLIFBSRVBBUkVELgotIwotIyBFeHBlY3QgdGhlIDJQQyBk YXRhIHJvbGxzIGJhY2sgbGVhdmluZyBvbmx5IDMgcm93cyBvbiB0aGUgc3Vic2NyaWJlcgotIyAo dGhlIG9yaWdpbmFsIDIgKyBpbnNlcnRlZCAxKS4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKLQotIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxs IGJlIHJlcGxpY2F0ZWQpCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi REVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7Iik7Ci0KLSMgVGhlbiBpbnNlcnQsIHVw ZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0JSU5T RVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nl cmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVS RSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAw OwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKLQotJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRy YW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCop IEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0 aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKLQotIyBJbnNlcnQgYSBkaWZmZXJlbnQg cmVjb3JkIChub3cgd2UgYXJlIG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlvbikKLSMgTm90 ZTogdGhlIDJQQyB0cmFuc2FjdGlvbiBzdGlsbCBob2xkcyByb3cgbG9ja3Mgc28gbWFrZSBzdXJl IHRoaXMgaW5zZXJ0IGlzIGZvciBhIHNlcGFyYXRlIHByaW1hcnkga2V5Ci0kbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMg KDk5OTk5LCAnZm9vYmFyJykiKTsKLQotIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCi0k bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJST0xMQkFDSyBQUkVQQVJF RCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBv biBzdWJzY3JpYmVyLAotIyBidXQgdGhlIGV4dHJhIElOU0VSVCBvdXRzaWRlIG9mIHRoZSAyUEMg c3RpbGwgd2FzIHJlcGxpY2F0ZWQKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5 OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoM3wzfDMpLCAnY2hlY2sgdGhlIG91 dHNpZGUgaW5zZXJ0IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwotCi0kcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBG Uk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlv biBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXInKTsKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwotIyBEbyBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0IGJlZm9yZSBDT01NSVQg UFJFUEFSRUQuCi0jIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2ggYXJl IHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KLSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAy UEMuCi0jIDMuIEEgc2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3aGljaCBpcyBhZnRlciB0aGUg UFJFUEFSRS4KLSMgNC4gVGhlbiBkbyBhIENPTU1JVCBQUkVQQVJFRC4KLSMKLSMgRXhwZWN0IDJQ QyBkYXRhICsgdGhlIGV4dHJhIHJvdyBhcmUgb24gdGhlIHN1YnNjcmliZXIKLSMgKHRoZSAzMzM0 ICsgaW5zZXJ0ZWQgMSA9IDMzMzUpLgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwot Ci0jIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3MgKHdpbGwgYmUgcmVw bGljYXRlZCkKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUg RlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKLQotIyBUaGVuIGluc2VydCwgdXBkYXRlIGFu ZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgotJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJTjsKLQlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMs IDUwMDApIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChh LDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci0JUFJF UEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwotCi0kbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJhbnNhY3Rp b24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBw Z19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMg cHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIEluc2VydCBhIGRpZmZlcmVudCByZWNvcmQg KG5vdyB3ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQotIyBOb3RlOiB0aGUg MlBDIHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtlIHN1cmUgdGhpcyBp bnNlcnQgaXMgZm9yIGEgc2VwYXJhcmUgcHJpbWFyeSBrZXkKLSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOTk5OTks ICdmb29iYXInKSIpOwotCi0jIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGNvbW1pdHRlZAotJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQ09NTUlUIFBSRVBBUkVEICd0ZXN0 X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgk YXBwbmFtZSk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxU RVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFsbGVsKSIpOwogCi0j IGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJl c3VsdCwgcXEoMzMzNXwzMzM1fDMzMzUpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyAoYXMgd2Vs bCBhcyBvdXRzaWRlIGluc2VydCkgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4 dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKLSk7Ciskbm9kZV9wdWJsaXNoZXIt PnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlkIEZS T00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1l JyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisgICkKKyAgb3IgZGllCisgICJUaW1lZCBvdXQg d2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCBhZnRlciBjaGFuZ2luZyBTVUJTQ1JJ UFRJT04iOwogCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJl c3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcicpOwor dGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFt ZSwgMSk7CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgY2hlY2sgYWxsIHRo ZSBjbGVhbnVwCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfc3RyZWFt aW5nX3BhcmFsbGVsX2FwcGx5LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX3N0cmVh bWluZ19wYXJhbGxlbF9hcHBseS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4xMGVmZDJkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMy X3N0cmVhbWluZ19wYXJhbGxlbF9hcHBseS5wbApAQCAtMCwwICsxLDE1MiBAQAorIyBDb3B5cmln aHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVz dCBmb3IgZGVhZGxvY2sgaW4gc3RyZWFtaW5nIG1vZGUgInBhcmFsbGVsIiBpbiBsb2dpY2FsIHJl cGxpY2F0aW9uLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6 TW9yZTsKKworbXkgJG9mZnNldCA9IDA7CisKKyMgQ3JlYXRlIHB1Ymxpc2hlciBub2RlCitteSAk bm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hl cicpOworJG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwn KTsKKyRub2RlX3B1Ymxpc2hlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJJ2xv Z2ljYWxfZGVjb2Rpbmdfd29ya19tZW0gPSA2NGtCJyk7Ciskbm9kZV9wdWJsaXNoZXItPnN0YXJ0 OworCisjIENyZWF0ZSBzdWJzY3JpYmVyIG5vZGUKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmli ZXItPmluaXQ7CisKKyMgQ2hlY2sgaWYgYW55IHN0cmVhbWluZyBjaHVua3MgYXJlIGFwcGxpZWQg dXNpbmcgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gV2UKKyMgaGF2ZSB0byBsb29rIGZvciB0 aGUgREVCVUcxIGxvZyBtZXNzYWdlcyBhYm91dCB0aGF0LCBzbyBidW1wIHVwIHRoZSBsb2cKKyMg dmVyYm9zaXR5LgorJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsICJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7CisKKyRub2RlX3N1YnNjcmliZXItPnN0 YXJ0OworCisjIFNldHVwIHN0cnVjdHVyZSBvbiBwdWJsaXNoZXIKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdGVzdF90YWIgKGEgaW50KSIpOwor CisjIFNldHVwIHN0cnVjdHVyZSBvbiBzdWJzY3JpYmVyCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0ZXN0X3RhYiAoYSBpbnQpIik7Ciskbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFVOSVFVRSBJTkRF WCBpZHhfdGFiIG9uIHRlc3RfdGFiKGEpIik7CisKKyMgU2V0dXAgbG9naWNhbCByZXBsaWNhdGlv bgorbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBk Ym5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CisKK215 ICRhcHBuYW1lID0gJ3RhcF9zdWInOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdw b3N0Z3JlcycsICIKKwlDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIKKwlDT05ORUNUSU9OICck cHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScKKwlQVUJMSUNBVElP TiB0YXBfcHViCisJV0lUSCAoc3RyZWFtaW5nID0gcGFyYWxsZWwsIGNvcHlfZGF0YSA9IGZhbHNl KSIpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisj IEludGVybGVhdmUgYSBwYWlyIG9mIHRyYW5zYWN0aW9ucywgZWFjaCBleGNlZWRpbmcgdGhlIDY0 a0IgbGltaXQuCitteSAkaW4gID0gJyc7CitteSAkb3V0ID0gJyc7CisKK215ICR0aW1lciA9IElQ Qzo6UnVuOjp0aW1lb3V0KCRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0 KTsKKworbXkgJGggPSAkbm9kZV9wdWJsaXNoZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMn LCBcJGluLCBcJG91dCwgJHRpbWVyLAorCW9uX2Vycm9yX3N0b3AgPT4gMCk7CisKKyMgPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorIyBDb25maXJtIGlmIGEgZGVhZGxvY2sgYmV0d2VlbiB0aGUgbGVhZGVy IGFwcGx5IHdvcmtlciBhbmQgdGhlIHBhcmFsbGVsIGFwcGx5CisjIHdvcmtlciBjYW4gYmUgZGV0 ZWN0ZWQuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworJGluIC49IHF7CitCRUdJTjsKK0lOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMo aSk7Cit9OworJGgtPnB1bXBfbmI7CisKKyMgRW5zdXJlIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciBleGVjdXRlcyB0aGUgaW5zZXJ0IGNvbW1hbmQgYmVmb3JlIHRoZQorIyBsZWFkZXIg d29ya2VyLgorJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAorCXFyL0RFQlVHOiAoIFtB LVowLTldKzopPyBhcHBsaWVkIFswLTldKyBjaGFuZ2VzIGluIHRoZSBzdHJlYW1pbmcgY2h1bmsv LAorCSRvZmZzZXQpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdGVzdF90YWIgdmFsdWVzKDEpIik7CisKKyRpbiAuPSBxeworQ09NTUlUOwor XHEKK307CiskaC0+ZmluaXNoOworCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJ cXIvRVJST1I6ICggW0EtWjAtOV0rOik/IGRlYWRsb2NrIGRldGVjdGVkLywKKwkkb2Zmc2V0KTsK KworIyBEcm9wIHRoZSB1bmlxdWUgaW5kZXggb24gdGhlIHN1YnNjcmliZXIsIG5vdyBpdCB3b3Jr cy4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBJTkRFWCBp ZHhfdGFiIik7CisKKyMgV2FpdCBmb3IgdGhpcyBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdG8gYmUg YXBwbGllZCBpbiB0aGUgYXBwbHkgd29ya2VyLgorJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCRhcHBuYW1lKTsKKworbXkgJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWIiKTsKK2lz KCRyZXN1bHQsIHFxKDUwMDEpLCAnZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYWZ0ZXIg ZHJvcHBpbmcgaW5kZXgnKTsKKworIyBDbGVhbiB1cCB0ZXN0IGRhdGEgZnJvbSB0aGUgZW52aXJv bm1lbnQuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUg VEFCTEUgdGVzdF90YWIiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZSk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFVOSVFVRSBJTkRFWCBpZHhfdGFiIG9uIHRlc3RfdGFiKGEpIik7CisKKyMgPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorIyBDb25maXJtIGlmIGEgZGVhZGxvY2sgYmV0d2VlbiB0d28gcGFyYWxsZWwgYXBw bHkgd29ya2VycyBjYW4gYmUgZGV0ZWN0ZWQuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBD aGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCiskb2Zmc2V0ID0gLXMgJG5vZGVf c3Vic2NyaWJlci0+bG9nZmlsZTsKKworJGluIC49IHF7CitCRUdJTjsKK0lOU0VSVCBJTlRPIHRl c3RfdGFiIFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMoaSk7Cit9Owor JGgtPnB1bXBfbmI7CisKKyMgRW5zdXJlIHRoYXQgdGhlIGZpcnN0IHBhcmFsbGVsIGFwcGx5IHdv cmtlciBleGVjdXRlcyB0aGUgaW5zZXJ0IGNvbW1hbmQKKyMgYmVmb3JlIHRoZSBzZWNvbmQgb25l LgorJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAorCXFyL0RFQlVHOiAoIFtBLVowLTld KzopPyBhcHBsaWVkIFswLTldKyBjaGFuZ2VzIGluIHRoZSBzdHJlYW1pbmcgY2h1bmsvLAorCSRv ZmZzZXQpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMCkgcyhp KSIpOworCiskaW4gLj0gcXsKK0NPTU1JVDsKK1xxCit9OworJGgtPmZpbmlzaDsKKworJG5vZGVf c3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAorCXFyL0VSUk9SOiAoIFtBLVowLTldKzopPyBkZWFk bG9jayBkZXRlY3RlZC8sCisJJG9mZnNldCk7CisKKyMgRHJvcCB0aGUgdW5pcXVlIGluZGV4IG9u IHRoZSBzdWJzY3JpYmVyLCBub3cgaXQgd29ya3MuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgSU5ERVggaWR4X3RhYiIpOworCisjIFdhaXQgZm9yIHRoaXMg c3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRvIGJlIGFwcGxpZWQgaW4gdGhlIGFwcGx5IHdvcmtlci4K KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKyRyZXN1bHQg PQorICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHRlc3RfdGFiIik7CitpcygkcmVzdWx0LCBxcSgxMDAwMCksICdkYXRhIHJlcGxp Y2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRlciBkcm9wcGluZyBpbmRleCcpOworCiskbm9kZV9zdWJz Y3JpYmVyLT5zdG9wOworJG5vZGVfcHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsK LS0gCjIuNy4yLndpbmRvd3MuMQoK --_005_OS0PR01MB5716339FF7CB759E751492CB940D9OS0PR01MB5716jpnp_--