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 1p5JFh-0003H2-9X for pgsql-hackers@arkaria.postgresql.org; Wed, 14 Dec 2022 04:20:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p5JFf-00025F-3C for pgsql-hackers@arkaria.postgresql.org; Wed, 14 Dec 2022 04:20:15 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p5JFe-00024R-G1 for pgsql-hackers@lists.postgresql.org; Wed, 14 Dec 2022 04:20:14 +0000 Received: from esa3.fujitsucc.c3s2.iphmx.com ([68.232.151.212]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p5JFV-0008U7-K3 for pgsql-hackers@lists.postgresql.org; Wed, 14 Dec 2022 04:20:13 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1670991605; x=1702527605; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=J7tMiZTQNy2bcjOnwDHP7yZh3QSuSUaXyyoWVdGNIeQ=; b=vRZ49gGZB/yC/zM4TUJiXCDmKuBuNZnTbRYDA2Bd94R5ETl0WCD/uhpb XrOga0kjNk+301Z1Ufq08wIw2DKVBrwANOmSfRBtp8KRRMlIKGm3auQvp 0K5L7ovcG5A0Wfd9dK3qxdqIlOkVrjiteE+N3yP7Bp9Fpuc5MQLekyEiK MgJ3cCJef0CionZGSXDaZM0AJ2LFDvE9Y65YJpWlI/CnizYuE40hor50i WXZcxsZx+ljMuIrecUi8rydOr0KFeW1A+76GcZkYQz5oX7546Lbf8gMjt lDXPdHG51dQuyZU7HUaDyD2c48G1dRk1B70Ax8rXZIIBLVkDSp/JSiHiw A==; X-IronPort-AV: E=McAfee;i="6500,9779,10560"; a="80477109" X-IronPort-AV: E=Sophos;i="5.96,243,1665414000"; d="scan'208";a="80477109" Received: from mail-os0jpn01lp2112.outbound.protection.outlook.com (HELO JPN01-OS0-obe.outbound.protection.outlook.com) ([104.47.23.112]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Dec 2022 13:20:01 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PRRENiURTmSaU/W7weC8CtP7UoKcmVa8QiEQ7sqAwVWNm2IbIbtMfQ7LPC3kKfoL3tioyeeWAuCGP5XhGKYpmqEAI0oDq0+GAgOPcwuf1L5mMBi8vPXGm1l88xvRCn15rLppsrWfLlmBI3UhEJMsu1tHegFNxysg8g4qK0yp6SYuIGt5/ttZNMiOEU5JqyW0ThNaWUiFii+5ltjGMJbK9nj7iv5NW22iLM/h3hf1RvwE6Wx4Yc0e89HGiffVfGPv7yPKZg5Ihdle5Gf1b6j4LiJR0X6iWLhLFmeU+fg7SAj/js6+Bf0peNhbYR86w+y7LIPnGCqX5d92JT/KLw3zYA== 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=J7tMiZTQNy2bcjOnwDHP7yZh3QSuSUaXyyoWVdGNIeQ=; b=du44w1/+/CTXOmU/VJmJNRqcpjYExf+E8Aclm3ti1onYq7/K0JUk1VUEO1m2+rU35Qu3WU2eGBslRP+KIQ5J7g5Ne9kCbZNfT0FYm22acNF6RkdrK6+Y2mnqkbL7HSXe958yJ38BSVuCXNtYGUuoemHNgeLoOH0q/DahzmYI10uomc/wfXtZthkfVHXBABKWmpglgibdQLYB5G3+S7tidMUBKBUN9NiaDz5WaEy01cXwE5kxbQG24h3H6Sh35zb0uacHNOcIZYA2h+bTAiMTgfO516lb7IDLL9WdUkdkCmI1h5Hyv6LfN2ynYTYsPu1naez4iH35wb1RApzJAV2Jfw== 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 TYCPR01MB10262.jpnprd01.prod.outlook.com (2603:1096:400:1d6::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.11; Wed, 14 Dec 2022 04:19:58 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::6bd0:acc4:7596:b8b1]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::6bd0:acc4:7596:b8b1%8]) with mapi id 15.20.5880.019; Wed, 14 Dec 2022 04:19:58 +0000 From: "houzj.fnst@fujitsu.com" To: Masahiko Sawada CC: Amit Kapila , "wangw.fnst@fujitsu.com" , Peter Smith , 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: AQHYSXX5UDTvhwo1UESW8vqRoeLCJazlu9SQgAkSooCACBQ0gIABsTcwgAA1vECAAqHFgIAE/jVwgAXct9CAADkRgIALO/aAgAsRZICAB606AIAS+CyAgAAufICAAWQLgIABHxKAgAA3o4CAAeE3gIAJPr0AgAkxzACAAiJoAIAC0hUAgARvDICABQA2gIAAFvcAgAeBmICABO9ggIAJO+YAgABu1YCACQzpAIAJSy6AgAS+zICABq7mgIABSJUAgAAOtoCAACghoIAB8TqAgAqL+oCADJWRgIAGVm0AgAGAQICAAerMgIABYRWAgAgnZ+CAAXRdgIAGBUSQgAGFeoCAAFYagIABb5aggAGsWiCAATu3gIAEyyEAgABeLHCABFBngIAK5WIAgABrY4CABb89gIADiS0AgAEu2oCAAHBpgIADPWcAgAS/1gCADeB2AIAAPUnQgAEERACAABzggIAF+30AgAHyDYCAEzpGgIANkEmAgAI7xKCABhztAIAFv4zggABYqoCAABRMQIABvKAAgAS+5UCAAVlmEIACxK+AgAIepYCAAy1b4IAA8x6ggAJYuYCABaCt0IACJjmAgAED94CAAgbzAIABr/gAgASdinCAASDJ4IABzHIAgAE3bTCAAIzFAIABQexwgAGmu4CAA2tf4IADZyIAgADV79A= Date: Wed, 14 Dec 2022 04:19:58 +0000 Message-ID: References: In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: =?utf-8?B?TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2Uw?= =?utf-8?B?NTBfQWN0aW9uSWQ9OTc4OWU5M2YtZTQ3NS00Nzg4LTgwNzQtZjI5ZjI1OTg0?= =?utf-8?B?M2I3O01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?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?ZWNlMDUwX1NldERhdGU9MjAyMi0xMi0xNFQwNDoxMDo0NVo7TVNJUF9MYWJl?= =?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_|TYCPR01MB10262:EE_ x-ms-office365-filtering-correlation-id: 82837d7e-d876-4eb8-12cc-08dadd8a760b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ogmFTD9z2pNKKDCjVPWz6XqdPKO/TvSCzcHo6BB3JA/pKhVXoMSGWO2G2Q5ee9OGTfhyP+q6tE4fkkK31caylsxli6I/Hy/6EZciT45QLb0CTYdHJ+4nl2LVBmDFe/jMfN1gxIuWGnojXjI+rvl+4G/jEo6xnXkmK5+5kAlWxfVz0J7OYjSHyeYbl2ot/zE4D9zoGbOq/XtUx08bHCoqTeEausEdI3wywyUYmxM/rXeekvWVm6FJcOLnO0LxdkOXfj1zDjqkWSxF1LC6mxpExLyS+ya5LnCZ5dRbxWmb0OFzbxHbLrEljq3pghGYJkf59FnMCUkFeqJ1PhQT7f30KFTUTsC2Luj++hQrsSnaAw3jwtO7Iyx3FeLBwuclHFTGbRfoUWTWV2Q0NeFkO6scZkPI4Ie90eiKFfIHSsxl3AvNie41UcLy+qR+EKvzZVJMu03k0bPNbBswSVcyBd0pbrvgSgU9EN5mcHR5X/Sv2kwlmhwIUdnZhWOdH6U8In4Yop0G//Fc1lcLhdMJ9LC34F/AovigT3Ewf8YqDnj6Ca5jp/jijhFZdbBvwGEpgcuhzxZkTLQULVEMiBEbAb5WvANpJFZj9wY3iSQ1+AwOXsxt49BIBhTTwJ2rjGDFlYJzZAM0rSJ34L8yaw1w1EyoXY0ZnmJENSzFgdqVmBrPTNigjPnmLQPhZ6BYH0xWGGV6K7pO1AYww9hEtb+ui/Th1J/O63QnNIHunKP59+3v+7M= 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)(376002)(39860400002)(136003)(396003)(366004)(346002)(1590799012)(451199015)(186003)(9686003)(71200400001)(7696005)(6506007)(38070700005)(86362001)(26005)(1580799009)(478600001)(53546011)(6916009)(54906003)(64756008)(66446008)(8676002)(66476007)(66946007)(66556008)(4326008)(76116006)(85182001)(41300700001)(52536014)(5660300002)(8936002)(2906002)(83380400001)(30864003)(82960400001)(316002)(33656002)(122000001)(38100700002)(55016003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TWJmUkNjL1lWc2JucGdSSTVTdXQ0QTh3RVkvcm5jTmFEenBndzhhN2t2NW44?= =?utf-8?B?SjZGcUV5dFBZSjUvdEpZMTUyRVhTUlZmMytZZzVWekRwSEVqVkJRblhCaVp6?= =?utf-8?B?VjZ0MUdDRmtvbUltUnpzaWswOFVsTHljVE1yUWJmVTB4cjlGOWc3ZFpxSzEv?= =?utf-8?B?cGtYbWd0WFVQK09KOVVTakZkemVJTnBDUW9mNDJKN0xGMm90REtGdkhjWThn?= =?utf-8?B?Y0g0YWNkUW9adjE5TTl6S0dLQmZSMWtwNTlsWDlBSTF3VVBNdHVzaWtmMWZM?= =?utf-8?B?RzRYa09QeFhvV0I0bDZIQkZFWHhHM0lhQU94OXpxVU1tcU5XK1ZoMjRRc3hO?= =?utf-8?B?bUY5OGN5emxDOUFQbTJ0RjNFaWdHd1lJMnJ6THltVndCR1pjMHVhZUNIWHcr?= =?utf-8?B?dUp4TkxWWWhUVU9oWTE1TUNITGNvL3l6UVlENFFRTEg5d3k4eHNnSWgwS2Uw?= =?utf-8?B?NlhXTnFIdnM3dXM3TWp3SWc0VVpJT1AxWnhUMzdhanlVQjlQWXlSblZnNUtt?= =?utf-8?B?bklOZjdvdGNmRmtod3ZndWF3V0hNcHNDNlgvSjNWeVYvVTRuMGFHTUtOSVVv?= =?utf-8?B?aFdhTjB5ZmRxT1ZQN3pwMVd0bUw3bzRYWGNxV2FSdmQ0bEVtZWYzbkJlTHRo?= =?utf-8?B?czlnTTNWU2pSamZmb3JTUGhQK0xpTlNVYll1UkdQbitIVmVGSXFnamNKU2VV?= =?utf-8?B?aTMvQ2VBYUYrQ3UvRmFDYmdSa1RjOTk3Qmg1Yzl3a3NENXVHTnhqMFNvd2tY?= =?utf-8?B?S25MVjFQa3NYWnpnNlJLb0owUG9GR2w5TEFUeG1taGF5YkVqOWtkM2l1d1lp?= =?utf-8?B?bC9mbG95QUpFZkdsbHBlUFJlS0hvSFZNMDFJbmlCbmlSOGxZV1ZCYzA3MmJC?= =?utf-8?B?WCtEZXMzd1dPMFVvQnFic2NGY2JzaEo5QzdCNDJrMWpHNzlIeUM5L1RyZTNs?= =?utf-8?B?Tms3d2Y3aHNBbFFkK2N6Z2JsblZSZ1ZoNzBBYnJkQm5BeWMrZUYxMjhCblhX?= =?utf-8?B?eEJlZi9tNHorUXdQQTU4NnAvRTN1bEdWMDB4VmNBTWpBRTEyQUhFY045UTdQ?= =?utf-8?B?T0VVMWR3VFNSVTF4aFk3c2NReUdRN1ZSMmdQOENXajhRcnphVkQ5dHVXYnlS?= =?utf-8?B?SjJWbGt5cFZWeTBTRkxqam9UeXA3Nit0QldoWEpvbHZuMTJsZzZ5U3h1SGdW?= =?utf-8?B?U21aT05uSGFqcWtmSE1CNWdOS3V4eXUxem5pdVRzOHduNEZIcTBXTGREd0px?= =?utf-8?B?QnhPbEhIUVF5Q1pwcm5OVGZWaFFnRFZmVjdBS0RIeUNsYVFLYUIyNTluVHRu?= =?utf-8?B?TU1NVmRmSVNDWURBcGl0bXRyZ25UblZWRnptMzgyT2pZQnJUTTVSVWFlRVNa?= =?utf-8?B?ZUY3TnFibmkzNktpRFhMWlpjcG1lNFZ3UEhEUU04aHV0R3FRdGVDYjFWc0xr?= =?utf-8?B?TG44RjFJYWMrRnp2dTNRQjVZTnZYWjlJZ01uM1Q3Q2Y4Z0pGZmtVNFppWXVr?= =?utf-8?B?VTBYRGc5aVNpRDV0RWxZYmw5dDlXM2lJc21RcmtWdnVUaDhtNEwzOEhpM3Bx?= =?utf-8?B?VDJXVytIVXNEZUR2Y3p6aDFVcjR4QWZrOXdBT1VnMVJzMnZKRm04bGhOWWk1?= =?utf-8?B?VytnbjB1RnBvU2NPL3VFRFA4NFNXUE42L2gyMVpSWHozZ21HWVNCbzdnTWc1?= =?utf-8?B?MzZlQXhKbk9uL3Jqb2VJS2dCRm45UGxHUGtSekFkUHhxQnNPMmd6WSszWVZ2?= =?utf-8?B?U0x1d2s4UHBOT1VzaXhuUktQTkN6UFFaeXI2ZFhSNnAyR2FpaUluNkJZMVlC?= =?utf-8?B?OWFzdDNLVENmMnFnblhBeUlWK01xTk1QM0JGVldKWmt6alF3L0h5cHJyNG5a?= =?utf-8?B?UGhXbUFSN2UydFU1aDh2UmEzZWh6VlNGUEJHenB2Qk9pVDZ4Qm9rc01Pdm1i?= =?utf-8?B?UnczTGVaWlNVNHBFaUlXT0lYTG9KUlhEMHhVcFJyN3NGQWtxK05hME1qRnlB?= =?utf-8?B?MFpuYlEyYjJ4K3BoNGxGeVlndS8vRTA3YkFZQSs0Ukw2Y1NVRU5QTk12OWVZ?= =?utf-8?B?SUlEclN3UDk0QkRoenFHbk16ZnY4WGxDeTIvNlI4WGVNcjgzTHp2VElTTzJh?= =?utf-8?Q?VtIw+Q6RcaiInugSBcJeGw2O2?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OS0PR01MB5716.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 82837d7e-d876-4eb8-12cc-08dadd8a760b X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Dec 2022 04:19:58.1539 (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: 6kzTwNl9tXVrWn0T0qB9JymWlk9iEMyOncyWNlgYX1fHQc/Eg0s7GRrrXIyYkjbVSzzydQ3DwG8b4sv6FXsnHw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB10262 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk T24gVHVlc2RheSwgRGVjZW1iZXIgMTMsIDIwMjIgMTE6MjUgUE0gTWFzYWhpa28gU2F3YWRhIDxz YXdhZGEubXNoa0BnbWFpbC5jb20+IHdyb3RlOg0KPiANCj4gT24gU3VuLCBEZWMgMTEsIDIwMjIg YXQgODo0NSBQTSBob3V6ai5mbnN0QGZ1aml0c3UuY29tDQo+IDxob3V6ai5mbnN0QGZ1aml0c3Uu Y29tPiB3cm90ZToNCj4gPg0KPiA+IE9uIEZyaWRheSwgRGVjZW1iZXIgOSwgMjAyMiAzOjE0IFBN IEFtaXQgS2FwaWxhDQo+IDxhbWl0LmthcGlsYTE2QGdtYWlsLmNvbT4gd3JvdGU6DQo+ID4gPg0K PiA+ID4gT24gVGh1LCBEZWMgOCwgMjAyMiBhdCAxMjozNyBQTSBob3V6ai5mbnN0QGZ1aml0c3Uu Y29tDQo+ID4gPiA8aG91emouZm5zdEBmdWppdHN1LmNvbT4gd3JvdGU6DQo+ID4gPiA+DQo+ID4g Pg0KPiA+ID4gUmV2aWV3IGNvbW1lbnRzDQo+ID4NCj4gPiBUaGFua3MgZm9yIHRoZSBjb21tZW50 cyENCj4gPg0KPiA+ID4gPT09PT09PT09PT09PT0NCj4gPiA+IDEuIEN1cnJlbnRseSwgd2UgZG9u J3QgcmVsZWFzZSB0aGUgc3RyZWFtIGxvY2sgaW4gTEEgKGxlYWRlIGFwcGx5DQo+ID4gPiB3b3Jr ZXIpIGZvciAicm9sbGJhY2sgdG8gc2F2ZXBvaW50IiBhbmQgdGhlIHJlYXNvbiBpcyBtZW50aW9u ZWQgaW4NCj4gPiA+IGNvbW1lbnRzIG9mDQo+ID4gPiBhcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0 KCkgaW4gdGhlIHBhdGNoLiBCdXQsIHRvZGF5LCB3aGlsZSB0ZXN0aW5nLA0KPiA+ID4gSSBmb3Vu ZCB0aGF0IGNhbiBsZWFkIHRvIGRlYWRsb2NrIHdoaWNoIG90aGVyd2lzZSwgd29uJ3QgaGFwcGVu IG9uDQo+ID4gPiB0aGUgcHVibGlzaGVyLiBUaGUga2V5IHBvaW50IGlzIHJvbGxiYWNrIHRvIHNh dmVwb2ludCByZWxlYXNlcyB0aGUNCj4gPiA+IGxvY2tzIGFjcXVpcmVkIGJ5IHRoZSBwYXJ0aWN1 bGFyIHN1YnRyYW5zYWN0aW9uLCBzbyBwYXJhbGxlbCBhcHBseQ0KPiA+ID4gd29ya2VyIHNob3Vs ZCBhbHNvIGRvIHRoZSBzYW1lLiBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGUgd2hlcmUN Cj4gPiA+IHRoZSB0cmFuc2FjdGlvbiBpbiBzZXNzaW9uLTEgaXMgYmVpbmcgcGVyZm9ybWVkIGJ5 IHRoZSBwYXJhbGxlbA0KPiA+ID4gYXBwbHkgd29ya2VyIGFuZCB0aGUgdHJhbnNhY3Rpb24gaW4g c2Vzc2lvbi0yIGlzIGJlaW5nIHBlcmZvcm1lZCBieSB0aGUNCj4gbGVhZGVyIGFwcGx5IHdvcmtl ci4gSSBoYXZlIHNpbXVsYXRlZCBpdCBieSB1c2luZyBHVUMgZm9yY2Vfc3RyZWFtX21vZGUuDQo+ ID4gPiBQdWJsaXNoZXINCj4gPiA+ID09PT09PT09PT0NCj4gPiA+IFNlc3Npb24tMQ0KPiA+ID4g cG9zdGdyZXM9IyBiZWdpbjsNCj4gPiA+IEJFR0lODQo+ID4gPiBwb3N0Z3Jlcz0qIyBzYXZlcG9p bnQgczE7DQo+ID4gPiBTQVZFUE9JTlQNCj4gPiA+IHBvc3RncmVzPSojIHRydW5jYXRlIHQxOw0K PiA+ID4gVFJVTkNBVEUgVEFCTEUNCj4gPiA+DQo+ID4gPiBTZXNzaW9uLTINCj4gPiA+IHBvc3Rn cmVzPSMgYmVnaW47DQo+ID4gPiBCRUdJTg0KPiA+ID4gcG9zdGdyZXM9KiMgaW5zZXJ0IGludG8g dDEgdmFsdWVzKDQpOw0KPiA+ID4NCj4gPiA+IFNlc3Npb24tMQ0KPiA+ID4gcG9zdGdyZXM9KiMg cm9sbGJhY2sgdG8gc2F2ZXBvaW50IHMxOyBST0xMQkFDSw0KPiA+ID4NCj4gPiA+IFNlc3Npb24t Mg0KPiA+ID4gQ29tbWl0Ow0KPiA+ID4NCj4gPiA+IFdpdGggb3Igd2l0aG91dCBjb21taXQgb2Yg U2Vzc2lvbi0yLCB0aGlzIHNjZW5hcmlvIHdpbGwgbGVhZCB0bw0KPiA+ID4gZGVhZGxvY2sgb24g dGhlIHN1YnNjcmliZXIgYmVjYXVzZSBQQSAocGFyYWxsZWwgYXBwbHkgd29ya2VyKSBpcw0KPiA+ ID4gd2FpdGluZyBmb3IgTEEgdG8gc2VuZCB0aGUgbmV4dCBjb21tYW5kLCBhbmQgTEEgaXMgYmxv Y2tlZCBieQ0KPiA+ID4gRXhjbHVzaXZlIG9mIFBBLiBUaGVyZSBpcyBubyBkZWFkbG9jayBvbiB0 aGUgcHVibGlzaGVyIGJlY2F1c2UNCj4gPiA+IHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3aWxsIHJl bGVhc2UgdGhlIGxvY2sgYWNxdWlyZWQgYnkgdHJ1bmNhdGUuDQo+ID4gPg0KPiA+ID4gVG8gc29s dmUgdGhpcywgSG93IGFib3V0IGlmIHdlIGRvIHRocmVlIHRoaW5ncyBiZWZvcmUgc2VuZGluZyBh Ym9ydA0KPiA+ID4gb2Ygc3ViLXRyYW5zYWN0aW9uIChhKSB1bmxvY2sgdGhlIHN0cmVhbSBsb2Nr LCAoYikgaW5jcmVtZW50DQo+ID4gPiBwZW5kaW5nX3N0cmVhbV9jb3VudCwNCj4gPiA+IChjKSB0 YWtlIHRoZSBzdHJlYW0gbG9jayBhZ2Fpbj8NCj4gPiA+DQo+ID4gPiBOb3csIGlmIHRoZSBQQSBp cyBub3QgYWxyZWFkeSB3YWl0aW5nIG9uIHRoZSBzdG9wLCBpdCB3aWxsIG5vdCB3YWl0DQo+ID4g PiBhdCBzdHJlYW1fc3RvcCBidXQgd2lsbCB3YWl0IGFmdGVyIGFwcGx5aW5nIGFib3J0IG9mIHN1 Yi10cmFuc2FjdGlvbg0KPiA+ID4gYW5kIGlmIGl0IGlzIGFscmVhZHkgd2FpdGluZyBhdCBzdHJl YW1fc3RvcCwgdGhlIHdhaXQgd2lsbCBiZQ0KPiA+ID4gcmVsZWFzZWQuIElmIHRoaXMgd29ya3Mg dGhlbiBwcm9iYWJseSB3ZSBzaG91bGQgdHJ5IHRvIGRvIChiKSBiZWZvcmUgKGEpIHRvDQo+IG1h dGNoIHRoZSBzdGVwcyB3aXRoIHN0cmVhbV9zdGFydC4NCj4gPg0KPiA+IFRoZSBzb2x1dGlvbiB3 b3JrcyBmb3IgbWUsIEkgaGF2ZSBjaGFuZ2VkIHRoZSBjb2RlIGFzIHN1Z2dlc3RlZC4NCj4gPg0K PiA+DQo+ID4gPiAyLiBUaGVyZSBzZWVtcyB0byBiZSBhbm90aGVyIGdlbmVyYWwgcHJvYmxlbSBp biB0aGUgd2F5IHRoZSBwYXRjaA0KPiA+ID4gd2FpdHMgZm9yIHN0cmVhbV9zdG9wIGluIFBBIChw YXJhbGxlbCBhcHBseSB3b3JrZXIpLiBDdXJyZW50bHksIFBBDQo+ID4gPiBjaGVja3MsIGlmIHRo ZXJlIGFyZSBubyBtb3JlIHBlbmRpbmcgc3RyZWFtcyB0aGVuIGl0IHRyaWVzIHRvIHdhaXQNCj4g PiA+IGZvciB0aGUgbmV4dCBzdHJlYW0gYnkgd2FpdGluZyBvbiBhIHN0cmVhbSBsb2NrLiBIb3dl dmVyLCBpdCBpcw0KPiA+ID4gcG9zc2libGUgYWZ0ZXIgUEEgY2hlY2tzIHRoZXJlIGlzIG5vIHBl bmRpbmcgc3RyZWFtIGFuZCBiZWZvcmUgaXQNCj4gPiA+IGFjdHVhbGx5IHN0YXJ0cyB3YWl0aW5n IG9uIGEgbG9jaywgdGhlIExBIHNlbmRzIGFub3RoZXIgc3RyZWFtIGZvcg0KPiA+ID4gd2hpY2gg ZXZlbiBzdHJlYW1fc3RvcCBpcyBzZW50LCBpbiB0aGlzIGNhc2UsIFBBIHdpbGwgc3RhcnQgd2Fp dGluZw0KPiA+ID4gZm9yIHRoZSBuZXh0IHN0cmVhbSB3aGVyZWFzIHRoZXJlIGlzIGFjdHVhbGx5 IGEgcGVuZGluZyBzdHJlYW0NCj4gPiA+IGF2YWlsYWJsZS4gSW4gdGhpcyBjYXNlLCBpdCB3b24n dCBsZWFkIHRvIGFueSBwcm9ibGVtIGFwYXJ0IGZyb20NCj4gPiA+IGRlbGF5IGluIGFwcGx5aW5n IHRoZSBjaGFuZ2VzIGluIHN1Y2ggY2FzZXMgYnV0IGZvciB0aGUgY2FzZSBtZW50aW9uZWQgaW4N Cj4gdGhlIHByZXZpb3VzIHBvaW50IChQb250IDEpLCBpdCBjYW4gbGVhZCB0byBkZWFkbG9jayBl dmVuIGFmdGVyIHdlIGltcGxlbWVudCB0aGUNCj4gc29sdXRpb24gcHJvcG9zZWQgdG8gc29sdmUg aXQuDQo+ID4NCj4gPiBUaGFua3MgZm9yIHJlcG9ydGluZywgSSBoYXZlIGludHJvZHVjZWQgYW5v dGhlciBmbGFnIGluIHNoYXJlZCBtZW1vcnkNCj4gPiBhbmQgdXNlIGl0IHRvIHByZXZlbnQgdGhl IGxlYWRlciBmcm9tIGluY3JlbWVudGluZyB0aGUNCj4gPiBwZW5kaW5nX3N0cmVhbV9jb3VudCBp ZiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlzIHRyeWluZyB0byBsb2NrIHRoZSBzdHJlYW0N Cj4gbG9jay4NCj4gPg0KPiA+DQo+ID4gPiAzLiBUaGUgb3RoZXIgcG9pbnQgdG8gY29uc2lkZXIg aXMgdGhhdCBmb3INCj4gPiA+IHN0cmVhbV9jb21taXQvcHJlcGFyZS9hYm9ydCwgaW4gTEEsIHdl IHJlbGVhc2UgdGhlIHN0cmVhbSBsb2NrIGFmdGVyDQo+ID4gPiBzZW5kaW5nIHRoZSBtZXNzYWdl IHdoZXJlYXMgZm9yIHN0cmVhbV9zdGFydCB3ZSByZWxlYXNlIGl0IGJlZm9yZQ0KPiA+ID4gc2Vu ZGluZyB0aGUgbWVzc2FnZS4gSSB0aGluayBmb3IgdGhlIGVhcmxpZXIgY2FzZXMNCj4gPiA+IChz dHJlYW1fY29tbWl0L3ByZXBhcmUvYWJvcnQpLCB0aGUgcGF0Y2ggaGFzIGRvbmUgbGlrZSB0aGlz IGJlY2F1c2UNCj4gPiA+IHBhX3NlbmRfZGF0YSgpIG1heSBuZWVkIHRvIHJlcXVpcmUgdGhlIGxv Y2sgYWdhaW4gd2hlbiBpdCB0aW1lcyBvdXQNCj4gPiA+IGFuZCBzdGFydCBzZXJpYWxpemluZywg c28gdGhlcmUgd2lsbCBiZSBubyBzZW5zZSBpbiBmaXJzdCByZWxlYXNpbmcNCj4gPiA+IGl0LCB0 aGVuIHJlLWFjcXVpcmluZyBpdCwgYW5kIHRoZW4gYWdhaW4gcmVsZWFzaW5nIGl0LiBDYW4ndCB3 ZSBhbHNvDQo+ID4gPiByZWxlYXNlIHRoZSBsb2NrIGZvciBzdHJlYW1fc3RhcnQgYWZ0ZXINCj4g PiA+IHBhX3NlbmRfZGF0YSgpIG9ubHkgaWYgaXQgaXMgbm90IHN3aXRjaGVkIHRvIHNlcmlhbGl6 ZSBtb2RlPw0KPiA+DQo+ID4gQ2hhbmdlZC4NCj4gPg0KPiA+IEF0dGFjaCB0aGUgbmV3IHZlcnNp b24gcGF0Y2ggc2V0IHdoaWNoIGFkZHJlc3NlZCBhYm92ZSBjb21tZW50cy4NCj4gDQo+IEhlcmUg YXJlIGNvbW1lbnRzIG9uIHY1OSAwMDAxLCAwMDAyIHBhdGNoZXM6DQoNClRoYW5rcyBmb3IgdGhl IGNvbW1lbnRzIQ0KDQo+ICt2b2lkDQo+ICtwYV9pbmNyZW1lbnRfc3RyZWFtX2Jsb2NrKFBhcmFs bGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQpIHsNCj4gKyAgICAgICAgd2hpbGUgKDEpDQo+ ICsgICAgICAgIHsNCj4gKyAgICAgICAgICAgICAgICBTcGluTG9ja0FjcXVpcmUoJndzaGFyZWQt Pm11dGV4KTsNCj4gKw0KPiArICAgICAgICAgICAgICAgIC8qDQo+ICsgICAgICAgICAgICAgICAg ICogRG9uJ3QgdHJ5IHRvIGluY3JlbWVudCB0aGUgY291bnQgaWYgdGhlIHBhcmFsbGVsDQo+IGFw cGx5IHdvcmtlciBpcw0KPiArICAgICAgICAgICAgICAgICAqIHRha2luZyB0aGUgc3RyZWFtIGxv Y2suIE90aGVyd2lzZSwgdGhlcmUgd291bGQgYmUNCj4gYSByYWNlIGNvbmRpdGlvbg0KPiArICAg ICAgICAgICAgICAgICAqIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBjaGVja3MgdGhl cmUgaXMgbm8NCj4gcGVuZGluZyBzdHJlYW1pbmcNCj4gKyAgICAgICAgICAgICAgICAgKiBibG9j ayBhbmQgYmVmb3JlIGl0IGFjdHVhbGx5IHN0YXJ0cyB3YWl0aW5nIG9uIGENCj4gbG9jaywgdGhl IGxlYWRlcg0KPiArICAgICAgICAgICAgICAgICAqIHNlbmRzIGFub3RoZXIgc3RyZWFtaW5nIGJs b2NrIGFuZCB0YWtlIHRoZSBzdHJlYW0NCj4gbG9jayBhZ2Fpbi4gSW4NCj4gKyAgICAgICAgICAg ICAgICAgKiB0aGlzIGNhc2UsIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd2lsbCBzdGFydA0K PiB3YWl0aW5nIGZvciB0aGUgbmV4dA0KPiArICAgICAgICAgICAgICAgICAqIHN0cmVhbWluZyBi bG9jayB3aGVyZWFzIHRoZXJlIGlzIGFjdHVhbGx5IGENCj4gcGVuZGluZyBzdHJlYW1pbmcgYmxv Y2sNCj4gKyAgICAgICAgICAgICAgICAgKiBhdmFpbGFibGUuDQo+ICsgICAgICAgICAgICAgICAg ICovDQo+ICsgICAgICAgICAgICAgICAgaWYgKCF3c2hhcmVkLT5wYV93YWl0X2Zvcl9zdHJlYW0p DQo+ICsgICAgICAgICAgICAgICAgew0KPiArICAgICAgICAgICAgICAgICAgICAgICAgd3NoYXJl ZC0+cGVuZGluZ19zdHJlYW1fY291bnQrKzsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIFNw aW5Mb2NrUmVsZWFzZSgmd3NoYXJlZC0+bXV0ZXgpOw0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7DQo+ICsgICAgICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICAgICAg U3BpbkxvY2tSZWxlYXNlKCZ3c2hhcmVkLT5tdXRleCk7DQo+ICsgICAgICAgIH0NCj4gK30NCj4g DQo+IEkgdGhpbmsgd2Ugc2hvdWxkIGFkZCBhbiBhc3NlcnRpb24gdG8gY2hlY2sgaWYgd2UgZG9u J3QgaG9sZCB0aGUgc3RyZWFtIGxvY2suDQo+IA0KPiBJIHRoaW5rIHRoYXQgd2FpdGluZyBmb3Ig cGFfd2FpdF9mb3Jfc3RyZWFtIHRvIGJlIGZhbHNlIGluIGEgYnVzeSBsb29wIGlzIG5vdCBhDQo+ IGdvb2QgaWRlYS4gSXQncyBub3QgaW50ZXJydXB0aWJsZSBhbmQgdGhlcmUgaXMgbm90IGd1YXJh bnRlZSB0aGF0IHdlIGNhbiBicmVhaw0KPiBmcm9tIHRoaXMgbG9vcCBpbiBhIHNob3J0IHRpbWUu IEZvciBpbnN0YW5jZSwgaWYgUEEgZXhlY3V0ZXMNCj4gcGFfZGVjcl9hbmRfd2FpdF9zdHJlYW1f YmxvY2soKSBhIGJpdCBlYXJsaWVyIHRoYW4gTEEgZXhlY3V0ZXMNCj4gcGFfaW5jcmVtZW50X3N0 cmVhbV9ibG9jaygpLCBMQSBoYXMgdG8gd2FpdCBmb3IgUEEgdG8gYWNxdWlyZSBhbmQgcmVsZWFz ZSB0aGUNCj4gc3RyZWFtIGxvY2sgaW4gYSBidXN5IGxvb3AuIEl0IHNob3VsZCBub3QgYmUgbG9u ZyBpbiBub3JtYWwgY2FzZXMgYnV0IHRoZQ0KPiBkdXJhdGlvbiBMQSBuZWVkcyB0byB3YWl0IGZv ciBQQSBkZXBlbmRzIG9uIFBBLCB3aGljaCBjb3VsZCBiZSBsb25nLiBBbHNvDQo+IHdoYXQgaWYg UEEgcmFpc2VzIGFuIGVycm9yIGluDQo+IHBhX2xvY2tfc3RyZWFtKCkgZHVlIHRvIHNvbWUgcmVh c29ucz8gSSB0aGluayBMQSB3b24ndCBiZSBhYmxlIHRvIGRldGVjdCB0aGUNCj4gZmFpbHVyZS4N Cj4gDQo+IEkgdGhpbmsgd2Ugc2hvdWxkIGF0IGxlYXN0IG1ha2UgaXQgaW50ZXJydXB0aWJsZSBh bmQgbWF5YmUgbmVlZCB0byBhZGQgc29tZQ0KPiBzbGVlcC4gT3IgcGVyaGFwcyB3ZSBjYW4gdXNl IHRoZSBjb25kaXRpb24gdmFyaWFibGUgZm9yIHRoaXMgY2FzZS4NCg0KVGhhbmtzIGZvciB0aGUg YW5hbHlzaXMsIEkgd2lsbCByZXNlYXJjaCB0aGlzIHBhcnQuDQoNCj4gLS0tDQo+IEluIHdvcmtl ci5jLCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgY29tbW9uIHBhdHRlcm46DQo+IA0KPiBjYXNlIFRS QU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRToNCj4gICAgIHdyaXRlIGNoYW5nZSB0byB0aGUg ZmlsZTsNCj4gICAgIGRvIHNvbWUgd29yazsNCj4gICAgIGJyZWFrOw0KPiANCj4gY2FzZSBUUkFO U19MRUFERVJfU0VORF9UT19QQVJBTExFTDoNCj4gICAgIHBhX3NlbmRfZGF0YSgpOw0KPiANCj4g ICAgIGlmICh3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMpDQo+ICAgICB7DQo+ICAgICAgICAgZG8g c29tZSB3b3JrZXIgcmVxdWlyZWQgYWZ0ZXIgd3JpdGluZyBjaGFuZ2VzIHRvIHRoZSBmaWxlLg0K PiAgICAgfQ0KPiAgICAgOg0KPiAgICAgYnJlYWs7DQo+IA0KPiBJSVVDIHRoZXJlIGFyZSB0d28g ZGlmZmVyZW50IHBhdGhzIGZvciBwYXJ0aWFsIHNlcmlhbGl6YXRpb246IChhKSB3aGVyZQ0KPiBh cHBseV9hY3Rpb24gaXMgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFLCBhbmQgKGIpIHdo ZXJlDQo+IGFwcGx5X2FjdGlvbiBpcyBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkUgYW5k DQo+IHdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcyBiZWNhbWUgdHJ1ZS4gQW5kIHdlIG5lZWQgdG8g bWF0Y2ggd2hhdCB3ZSBkbw0KPiBpbiAoYSkgYW5kIChiKS4gUmF0aGVyIHRoYW4gaGF2aW5nIHR3 byBkaWZmZXJlbnQgcGF0aHMgZm9yIHRoZSBzYW1lIGNhc2UsIGhvdw0KPiBhYm91dCBmYWxsaW5n IHRocm91Z2ggVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFIHdoZW4gd2UgY291bGQgbm90 DQo+IHNlbmQgdGhlIGNoYW5nZXM/IFRoYXQgaXMsIHBhX3NlbmRfZGF0YSgpIGp1c3QgcmV0dXJu cyBmYWxzZSB3aGVuIHRoZSB0aW1lb3V0DQo+IGV4Y2VlZHMgYW5kIHdlIG5lZWQgdG8gc3dpdGNo IHRvIHNlcmlhbGl6ZSBjaGFuZ2VzLCBvdGhlcndpc2UgcmV0dXJucyB0cnVlLiBJZiBpdA0KPiBy ZXR1cm5zIGZhbHNlLCB3ZSBwcmVwYXJlIGZvciBzd2l0Y2hpbmcgdG8gc2VyaWFsaXplIGNoYW5n ZXMgc3VjaCBhcyBpbml0aWFsaXppbmcNCj4gZmlsZXNldCwgYW5kIGZhbGwgdGhyb3VnaCBUUkFO U19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkUgY2FzZS4gVGhlIGNvZGUNCj4gd291bGQgYmUgbGlr ZToNCj4gDQo+IGNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6DQo+ICAgICByZXQg PSBwYV9zZW5kX2RhdGEoKTsNCj4gDQo+ICAgICBpZiAocmV0KQ0KPiAgICAgew0KPiAgICAgICAg IGRvIHdvcmsgZm9yIHNlbmRpbmcgY2hhbmdlcyB0byBQQS4NCj4gICAgICAgICBicmVhazsNCj4g ICAgIH0NCj4gDQo+ICAgICAvKiBwcmVwYXJlIGZvciBzd2l0Y2hpbmcgdG8gc2VyaWFsaXplIGNo YW5nZXMgKi8NCj4gICAgIHdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcyA9IHRydWU7DQo+ICAgICBp bml0aWFsaXplIGZpbGVzZXQ7DQo+ICAgICBhY3F1aXJlIHN0cmVhbSBsb2NrIGlmIG5lY2Vzc2Fy eTsNCj4gDQo+ICAgICAvKiBGQUxMVEhST1VHSCAqLw0KPiBjYXNlIFRSQU5TX0xFQURFUl9QQVJU SUFMX1NFUklBTElaRToNCj4gICAgIGRvIHdvcmsgZm9yIHNlcmlhbGl6aW5nIGNoYW5nZXM7DQo+ ICAgICBicmVhazsNCg0KSSB0aGluayB0aGF0IHRoZSBzdWdnZXN0aW9uIGlzIHRvIGV4dHJhY3Qg dGhlIGNvZGUgdGhhdCBzd2l0Y2ggdG8gc2VyaWFsaXplDQptb2RlIG91dCBvZiB0aGUgcGFfc2Vu ZF9kYXRhKCksIGFuZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoYXQgbG9naWMgaW4gYWxsIHRoZQ0K ZnVuY3Rpb25zIHdoaWNoIGNhbGwgcGFfc2VuZF9kYXRhKCksIEkgYW0gbm90IHN1cmUgaWYgaXQg bG9va3MgYmV0dGVyIGFzIGl0DQptaWdodCBpbnRyb2R1Y2Ugc29tZSBtb3JlIGNvZGVzIGluIGVh Y2ggaGFuZGxpbmcgZnVuY3Rpb24uDQoNCj4gLS0tDQo+IC8qDQo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2NrIHNvIHRoYXQNCj4gcGFyYWxs ZWwgYXBwbHkgd29ya2VyIGNhbg0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgKiBjb250aW51 ZSB0byByZWNlaXZlIGFuZCBhcHBseSBjaGFuZ2VzLg0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgKiBQYXJhbGxlbCBhcHBseSB3b3JrZXIgbWlnaHQgaGF2ZSBhcHBsaWVkDQo+IHNvbWUgY2hh bmdlcywgc28gd3JpdGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIFNUUkVBTV9B Qk9SVCBtZXNzYWdlIHNvIHRoYXQgaXQgY2FuIHJvbGxiYWNrDQo+IHRoZQ0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgKiBzdWJ0cmFuc2FjdGlvbiBpZiBuZWVkZWQuDQo+ICAqLw0KPiAtICAg ICAgICAgICAgICAgICAgICAgICBwYV91bmxvY2tfc3RyZWFtKHhpZCwgQWNjZXNzRXhjbHVzaXZl TG9jayk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9vcGVuX2FuZF93cml0ZV9j aGFuZ2UoeGlkLA0KPiBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX0FCT1JULA0KPiArDQo+ICAgICAg ICAgICAmb3JpZ2luYWxfbXNnKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAo dG9wbGV2ZWxfeGFjdCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgew0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBhX3VubG9ja19zdHJlYW0oeGlkLCBBY2Nlc3NFeGNsdXNp dmVMb2NrKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYV9zZXRfZmlsZXNl dF9zdGF0ZSh3aW5mby0+c2hhcmVkLA0KPiBGU19TRVJJQUxJWkVfRE9ORSk7DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIHBhX2ZyZWVfd29ya2VyKHdpbmZvLCB4aWQp Ow0KPiArICAgICAgICAgICAgICAgICAgICAgICB9DQo+IA0KPiBBdCBldmVyeSBwbGFjZSBleGNl cHQgZm9yIHRoZSBhYm92ZSBjb2RlLCB3ZSBzZXQgdGhlIGZpbGVzZXQgc3RhdGUNCj4gRlNfU0VS SUFMSVpFX0RPTkUgZmlyc3QgdGhlbiB1bmxvY2sgdGhlIHN0cmVhbSBsb2NrLiBJcyB0aGVyZSBh bnkgcmVhc29uIGZvcg0KPiB0aGF0Pw0KDQpObywgSSB0aGluayB3ZSBzaG91bGQgbWFrZSB0aGVt IGNvbnNpc3RlbnQsIHdpbGwgY2hhbmdlIHRoaXMuDQoNCj4gLS0tDQo+ICsgICAgICAgICAgICAg ICBjYXNlIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMOg0KPiArICAgICAgICAgICAgICAg ICAgICAgICBBc3NlcnQod2luZm8pOw0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIC8q DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBs b2NrIHNvIHRoYXQNCj4gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGNhbg0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgKiBjb250aW51ZSB0byByZWNlaXZlIGFuZCBhcHBseSBjaGFuZ2VzLg0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgKi8NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcGFf dW5sb2NrX3N0cmVhbSh4aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOw0KPiArDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIC8qDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIEZvciB0aGUg Y2FzZSBvZiBhYm9ydGluZyB0aGUNCj4gc3VidHJhbnNhY3Rpb24sIHdlIGluY3JlbWVudCB0aGUN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogbnVtYmVyIG9mIHN0cmVhbWluZyBibG9ja3Mg YW5kIHRha2UgdGhlDQo+IGxvY2sgYWdhaW4gYmVmb3JlDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAqIHNlbmRpbmcgdGhlIFNUUkVBTV9BQk9SVCB0byBlbnN1cmUgdGhhdCB0aGUNCj4gcGFy YWxsZWwgYXBwbHkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogd29ya2VyIHdpbGwgd2Fp dCBvbiB0aGUgbG9jayBmb3IgdGhlIG5leHQNCj4gc2V0IG9mIGNoYW5nZXMgYWZ0ZXINCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICogcHJvY2Vzc2luZyB0aGUgU1RSRUFNX0FCT1JUIG1lc3Nh Z2UgaWYgaXQNCj4gaXMgbm90IGFscmVhZHkgd2FpdGluZw0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgKiBmb3IgU1RSRUFNX1NUT1AgbWVzc2FnZS4NCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICovDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9wbGV2ZWxfeGFjdCkNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgew0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBhX2luY3JlbWVudF9zdHJlYW1fYmxvY2sod2luZm8tPnNoYXJlZCk7DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGFfbG9ja19zdHJlYW0oeGlkLCBBY2Nlc3NFeGNsdXNp dmVMb2NrKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNlbmQgU1RSRUFNIEFCT1JUIG1lc3NhZ2UgdG8gdGhlIHBhcmFsbGVs DQo+IGFwcGx5IHdvcmtlci4gKi8NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcGFfc2VuZF9k YXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpOw0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgIGlmICh0b3BsZXZlbF94YWN0KQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh2b2lkKSBwYV9mcmVlX3dvcmtlcih3aW5mbywgeGlkKTsNCj4gKw0KPiArICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsNCj4gDQo+IEluIGFwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoKSwg aXQncyBiZXR0ZXIgdG8gYWRkIHRoZSBjb21tZW50IHdoeSB3ZSBkb24ndA0KPiBuZWVkIHRvIHdh aXQgZm9yIFBBIHRvIGZpbmlzaC4NCg0KV2lsbCBhZGQuDQoNCj4gDQo+IEFsc28sIGdpdmVuIHRo YXQgd2UgZG9uJ3Qgd2FpdCBmb3IgUEEgdG8gZmluaXNoIGluIHRoaXMgY2FzZSwgZG9lcyBpdCBy ZWFsbHkgbWFrZQ0KPiBzZW5zZSB0byBjYWxsIHBhX2ZyZWVfd29ya2VyKCkgaW1tZWRpYXRlbHkg YWZ0ZXIgc2VuZGluZyBTVFJFQU1fQUJPUlQ/DQoNCkkgdGhpbmsgaXQncyBwb3NzaWJsZSB0aGF0 IHRoZSBQQSBmaW5pc2ggdGhlIFJPTExCQUNLIHF1aWNrbHkgYW5kIHRoZSBMQSBjYW4NCmZyZWUg dGhlIHdvcmtlciBoZXJlIGluIHRpbWUuDQoNCj4gLS0tDQo+IFBBIGFjcXVpcmVzIHRoZSB0cmFu c2FjdGlvbiBsb2NrIGluIEFjY2Vzc1NoYXJlIG1vZGUgd2hlcmVhcyBMQSBhY3F1aXJlcyBpdCBp bg0KPiBBY2Nlc3NFeGNsdXNpdmVNb2RlLiBJcyBpdCBiZXR0ZXIgdG8gZG8gdGhlIG9wcG9zaXRl Pw0KPiBMaWtlIGEgYmFja2VuZCBwcm9jZXNzIGFjcXVpcmVzIGEgbG9jayBvbiBpdHMgWElEIGlu IEV4Y2x1c2l2ZSBtb2RlLCB3ZSBjYW4NCj4gaGF2ZSBQQSBhY3F1aXJlIHRoZSBsb2NrIG9uIGl0 cyBYSUQgaW4gRXhjbHVzaXZlIG1vZGUgd2hlcmVhcyBvdGhlciBhdHRlbXB0cw0KPiB0byBhY3F1 aXJlIGl0IGluIFNoYXJlIG1vZGUgdG8gd2FpdC4NCg0KQWdyZWVkLCB3aWxsIGltcHJvdmUuDQoN Cj4gLS0tDQo+ICB2b2lkDQo+IHBhX2xvY2tfc3RyZWFtKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NL TU9ERSBsb2NrbW9kZSkgew0KPiAgICAgTG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JTZXNzaW9uKE15 TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCwNCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQQVJBTExFTF9BUFBMWV9MT0NLX1NUUkVBTSwNCj4gbG9ja21vZGUpOyB9DQo+ IA0KPiBJIHRoaW5rIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8gbGV0IHRoZSBjYWxsZXIgdG8gc3Bl Y2lmeSB0aGUgbG9jayBtb2RlIGJ1dCBuZWVkDQo+IG9ubHkgc2hhcmVkIGFuZCBleGNsdXNpdmUg bW9kZXMsIHdlIGNhbiBtYWtlIGl0IHNpbXBsZSBieSBoYXZpbmcgYSBib29sZWFuDQo+IGFyZ3Vt ZW50IHNheSBzaGFyZWQgaW5zdGVhZCBvZiBsb2NrbW9kZS4NCg0KSSBwZXJzb25hbGx5IHRoaW5r IHBhc3NpbmcgdGhlIGxvY2ttb2RlIHdvdWxkIG1ha2UgdGhlIGNvZGUgbW9yZSBjbGVhcg0KdGhh biBwYXNzaW5nIGEgQm9vbGVhbiB2YWx1ZS4NCg0KQmVzdCByZWdhcmRzLA0KSG91IHpqDQo=