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 1p2kgr-0001ze-HX for pgsql-hackers@arkaria.postgresql.org; Wed, 07 Dec 2022 03:01:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p2kgq-0003fu-Eb for pgsql-hackers@arkaria.postgresql.org; Wed, 07 Dec 2022 03:01:44 +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 1p2kgq-0003fl-1v for pgsql-hackers@lists.postgresql.org; Wed, 07 Dec 2022 03:01:44 +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 1p2kgn-0007hr-Dn for pgsql-hackers@lists.postgresql.org; Wed, 07 Dec 2022 03:01:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1670382102; x=1701918102; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=ubDpWZB9dY6xU9B/rk1PJfKQGQMpoEtPleKpu+OJ+ng=; b=W/1Av0/+TpPvJyLgAu7J3OPVm+DND83kXY2Ge7HOvxnJA/X4gexN1kMs QdlPIDDZfH1TqSM3VUxtnj4nBu5UGukqTX/oSo5jc7KhQoFgk1Qn1ii6C byf2Gbq8GZDvHv460t5OFTP3kskciPulxj3HIwOvHyd1gUmCn8Q0EbOEv 2nItU440g9ram4or+cq3Pge0ReYUpe1aXhzPxTXVrjSEJ6Dx/Odq7LfhR dhFjxPIgLcTirUuUJskAN221UYRJqFIFowx4lltWy7jshccGuMXO27sCc bc2x4Vlw61BkaTShUwvFfpVEat5auC3UgsAltWARi9EOZWbV8Vxazu2S5 g==; X-IronPort-AV: E=McAfee;i="6500,9779,10553"; a="71552167" X-IronPort-AV: E=Sophos;i="5.96,223,1665414000"; d="scan'208";a="71552167" Received: from mail-tycjpn01lp2169.outbound.protection.outlook.com (HELO JPN01-TYC-obe.outbound.protection.outlook.com) ([104.47.23.169]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Dec 2022 12:01:39 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=D6FEMOlTBF0vrFpVEXv10FX9VJahX2QzfDWD3YmfYhyDLbAbd0UchHhR5p+7sSC6MFXYZlSWKPw+lE6J3o6pVeHbe2Tt9pychm3NYuPg2z/GI6gF2QXJCE2+zrEBcjGB5J0pGODd1mny8NX5yUF9x3GJXdDbiPfCneXVz3yPgJL3kE0E+r3P3itYRdPoYgOUTo7tRriA+uajQU5jbur1tHPP+znhJag9LkKMpJ/TAC6wkfv2XjEfSLuaL49wQaNWWGw8WD/hF1LQ2EBapOc3YKcM0aBfx/rZUQ9uGjPaTV84DyY9HTuHHSuIZYlFq+XT3ZPbpCOhYOdp9EkOFDOHzg== 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=ubDpWZB9dY6xU9B/rk1PJfKQGQMpoEtPleKpu+OJ+ng=; b=Bjcsk8vW4aLlb3A+tK5PGKG2gqyBs0Q3cijDGT+pEEyVfCi1B7eDMPtDu3GtZa6VzLjS0nmLlk3+ApQQMyq5jPpRabb2HkfroOpyduYINJDO4AnrIA91X8uWMpnjSC5SD5u+MEYCs9bckeftCys4akx/vvSF+TaeSMo7M48FQf3yHc+PoipDqWt+emR5OJZXZNRRWdR1hrXnNpX1yEGStgGJW9YtPsKE/wKfcQhZFYOj4TCwGXxW9OzUsP7eMZ3x6KK46aq1tUSdc5bsw00pWYJfviuRLOagIIArrLnB2C0BjLht/tnuzKmLGemoqRQ1wZ5eFWi5LU+CN1ILondHFA== 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 TYYPR01MB7928.jpnprd01.prod.outlook.com (2603:1096:400:fe::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.14; Wed, 7 Dec 2022 03:01:35 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::6bd0:acc4:7596:b8b1]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::6bd0:acc4:7596:b8b1%7]) with mapi id 15.20.5880.014; Wed, 7 Dec 2022 03:01:35 +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: AQHYSXX5UDTvhwo1UESW8vqRoeLCJazlu9SQgAkSooCACBQ0gIABsTcwgAA1vECAAqHFgIAE/jVwgAXct9CAADkRgIALO/aAgAsRZICAB606AIAS+CyAgAAufICAAWQLgIABHxKAgAA3o4CAAeE3gIAJPr0AgAkxzACAAiJoAIAC0hUAgARvDICABQA2gIAAFvcAgAeBmICABO9ggIAJO+YAgABu1YCACQzpAIAJSy6AgAS+zICABq7mgIABSJUAgAAOtoCAACghoIAB8TqAgAqL+oCADJWRgIAGVm0AgAGAQICAAerMgIABYRWAgAgnZ+CAAXRdgIAGBUSQgAGFeoCAAFYagIABb5aggAGsWiCAATu3gIAEyyEAgABeLHCABFBngIAK5WIAgABrY4CABb89gIADiS0AgAEu2oCAAHBpgIADPWcAgAS/1gCADeB2AIAAPUnQgAEERACAABzggIAF+30AgAHyDYCAEzpGgIANkEmAgAI7xKCABhztAIAFv4zggABYqoCAABRMQIABvKAAgAS+5UCAAVlmEIACxK+AgAIepYCAAy1b4IAA8x6ggAJYuYCABaCt0IACJjmAgAED94CAAgbzAIABr/gAgASdinCAAmjpAIABvOZA Date: Wed, 7 Dec 2022 03:01:35 +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?NTBfQWN0aW9uSWQ9ZmUxMDY3ZDYtMTg1MC00YTBhLWFlNDUtMDNhYzZkZjI0?= =?utf-8?B?MTJiO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?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?ZWNlMDUwX1NldERhdGU9MjAyMi0xMi0wN1QwMjoyOTowOVo7TVNJUF9MYWJl?= =?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_|TYYPR01MB7928:EE_ x-ms-office365-filtering-correlation-id: 09fda09f-9e75-4696-14bb-08dad7ff5a44 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: SSEywDCZFyVR6qaQeL5pPYTx4gn46JYDv7FZoxPAaIHawvwzB15wxwsar7ZLeOiM8HMzpe9f3MkdZz++EcYc+epRe1dgiVyH4TcmUWf4wSCLrBivFdXuYKx17TZcz6Q8s8nUR4MPl9AIIAPZAsN0S7VHAACam0io5AlfNe3z2Bw4iIVPLUcnQPL+f50Eov2ZRLhv7ZlHWPTkuIu3yuMWweDwZXvzMN9X86TagvBv2fRfIITxOUWeE75JrrsnwVIXxZCXb+H0AIvy96dgPdmpPrEC2WH8jCygfQApEbIWp78M9D3llBsu1nCH4vg3WjEiUMZALu3/v2hezBPGgBMLYxMIatxjT84rxdPRh6LhzNqYGAT/jYZLSYZlZ7+f9Cv7dlCz+smAwl+/J8No8fYftb8YYNXdSIjmn0yd55DKkPyrs9fGVeB+NYe6iMkBKiukRa2n3lYcy5OtojrltLRtylUm1cOnAvQCUql2ysbAo7y8bNDIyj50MqtWPO9NoYztT9nSTkL2yU+LaV2Ifh9jlaZyMSJebYB9rmssrCEPS+LsbTE59rXgXKQt/2Radguoe79JJ8VTW5Fh8CkKbzgG8g1T3IcOtQUi/6VsRADp29c6n6PJtZ2PcVeWzAkpHiah1fOwyUQEg9IPCvr7NiQY0rZlUmkJalzldyGV3G+B05rM+mrWeUOt1g5cJ9T6rOg579QnVM5Z9XQ2qFQYYdSbEx6jtimSLaEjRRuTXp0gQd3UQnLr9+1pHUo3RFyqiq+a 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)(136003)(376002)(366004)(346002)(39860400002)(396003)(451199015)(1590799012)(55016003)(38070700005)(9686003)(85182001)(7696005)(86362001)(33656002)(53546011)(71200400001)(6506007)(478600001)(26005)(8676002)(8936002)(4326008)(41300700001)(66946007)(5660300002)(2906002)(6916009)(54906003)(66446008)(66476007)(52536014)(76116006)(316002)(66556008)(64756008)(38100700002)(122000001)(83380400001)(186003)(82960400001)(1580799009)(21314003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TkprL25yMk1zRzRGVWFwUUxRMWJieEJjVkdjeUpWMHIrSTA1SStydDl2TGpS?= =?utf-8?B?SmFkZDhoVFVkbHU2Rm54Nzd4b3QvUVpJTU1nWGhEeWtyTXh1MHlrcGgxSDJw?= =?utf-8?B?OTFwWVJzeUxDUWI4TFRlbVF5OUxsOTdTYU0rcmlkQzlJRmtsdU45ZUxDTXpR?= =?utf-8?B?WHlWMm9SLzRER1ZwUkF5cmphRmdkbElVYm9iaDV5NHg3WXZZa2w3UGE3TkZE?= =?utf-8?B?WFZmalpIS1NQYVFhWkoxMVhQN1RDYkpVNzJEc29uUHBDSHRIUUpnbFFXam9F?= =?utf-8?B?RG85QjJ0c1hSdkMwVkpxdzJsc1RMc3RqaWVURXZOY0I5K1QrOUtIOHFmM2lE?= =?utf-8?B?d2FERzBwcHRtR3BnMitwREhSdDcyUDhPNGIwck1iWWlYNjZ1cGhmb3grSzVR?= =?utf-8?B?ekQ0Mm0rQWt5clNXRzBCY2NBK2JFNDFNS2lETlZZcklHdkhxYzRVQjV1dnp2?= =?utf-8?B?UTlRelhuQUIvbVljR3pobEd2SXZ5dWZ4M2lJOFFtUGVUQm5FaEdiVE5aZER2?= =?utf-8?B?SzBGakI1Y0s3MHBhQVA5cWxFenl2KzNCWFhHU0xKL1dKaUhueVdqbEQ4RmI0?= =?utf-8?B?NStUaHBETHRQMU1KdVNhajZVc0h1ZXA0T3g1cDIwV1hUYWdVQWdPaXdiQ21O?= =?utf-8?B?bkhibzJwYk5uUXVaZzFpMWlrUTdqT29wcVVPTDc4Kzh4SFJDbStSZlFCb2E2?= =?utf-8?B?VTBQaUgycTVWRjZXZTBLbWcwRSt3VlIrYUVxcDN6ZUU4VFhkN1J3Qmd6dE9O?= =?utf-8?B?d2o1dDJPNWZxWitwM2w2dE5GTDNlUGcwejM4eXV0Vkh2ZVJZU3RXMnFFVld1?= =?utf-8?B?VHIxY0tNK0ozRWFzaGljUytMclJ4RE1DVHIySGJiMEtZSXVPY1JVcElLN1hl?= =?utf-8?B?UUtnV1dLMnl0eGgxWExueklIOWdtbGh6Q3VOKzY3ZEo1Mys2ZVFjSjE1NFlI?= =?utf-8?B?WlBrZWYyMXlOTlFsK2tGa1V4RTNsSkdiWTU3UkkzL0JYc1ZRcGY5cENweWJO?= =?utf-8?B?TFNrUW43NTFzSFhwekR2MGxVKytkZ295UWlwcERtWG9idFVHU09NT1hKdVBz?= =?utf-8?B?MWdtMEoxSXVWS25ORTBReFl0eTZkRk13UEdpZ3F2TlNVZXhjRWxJaEQ1b0Uz?= =?utf-8?B?TEF1cGVBM2QzMURSWXhxZy8vZVNMYzZlVXhxWDlwelZzZCtwU0xabG5Pa0JR?= =?utf-8?B?RnpTWmZrQTgxQnpGUm5ZY3Jkb0dxVXFQVGo3RURSRGhzMG9BVWp4dlRQdjkr?= =?utf-8?B?K1JUZHk2cjJBUUNLZUljbUx3Umc2Q09Oa2hxbHQ2S1Z6MUMzTVpTWURNYVB5?= =?utf-8?B?UHJNY1NRbDdTcGNaVklSNDZTeGZlcG9UdkkwakRvQm9CUzJnZTB1U01zZlJ0?= =?utf-8?B?WjZqOWg5OUtYVzVhWHltR3NDNEk5MDQxSEVWR3ZETlRlVmM0V3JnZzVaR0I2?= =?utf-8?B?QTY0YUZIOE91bDNTUDBibjZRRnZCc1ZwRHpxdmdnZUp3MnJxK051V2grazhQ?= =?utf-8?B?Vjh6amJiem84OElhMHNUZkpSSWNSN05TcjZSc0F1dW0xeFMrNGNDQjFKUHlp?= =?utf-8?B?djFGZXk5L1R1QlBWWWtaeWJlZi9SWjJUZG5TSEFUV09ra2VqVlJuTFVCMGZO?= =?utf-8?B?STlmbHY4TmNYVk0zcmFMUDdSQS94RmVzNXljcm11S0p6WnA2ZWJ5MzZYUGFO?= =?utf-8?B?SDdQWjA1T2R3RDloY0pkTW9WN2dxWDVyRVllUXBvb1A5NXN1NDMzWE5YVlNG?= =?utf-8?B?R1ZrRmwyUERndUFON0NIQ2taWEJvaE1Bekp5MGxySERpZjBpdUVwVWNacmht?= =?utf-8?B?TUw0S21EbzhDallOakRPVzhBR09EaVVUSkFnMHlXbzVzU2wyT0JjcEQ2cjhF?= =?utf-8?B?aWxIMVNEZlhSUTBTY1JOUDdmUFc1VDV6a0JvUDgrNGFwV2xSeEptZ2I2bldS?= =?utf-8?B?SFREL3RhNVlhUDREZ2FnNG5QS1E1amRIT1RTY2tuK1E4NC9RTHZqaVIzTnpa?= =?utf-8?B?SHE3dmFwbkpNYTYrbVd0MzhHaCsrYzBJNzBDd1VYbGpIeGYxR2MvRkJ3TDQ0?= =?utf-8?B?QVF2NzVyazF6Z0RCMmJZWjUrN3VpUHNHUklScDFzajBPRENuK0xYcE9uZVpz?= =?utf-8?Q?eoyJtHMqJTV6yKhUtr2vC9kYL?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: PcgAnzNYQbA3qMPwjxEv+KcYbGG6/5b+r09ltzR1ksKi25TwXqaLhU2Mo6LnAR0Rqpy9G97ApG6p71ITbYLszwen7hICjXHzft+34TBor6pfsc70ZclDK18In4WCVwmsJuuMnozC5cBaylFKOefKk0rGtcHSBRrqPd1WLfXwshxQdOgxiyvOlhJdiaPeAa4fvoLCX9dL0kWK0KosN2gW2crRJLPj6rSk4BO0p7ZXFTxvfifJdZIPlOsjhl9qCgo5Ui3fSFEvMRaadcvdvzQhW+5LrfTaE0k6TUP0rx0wO5fiLDSloSERyroXKCNGoxSbPWaitbESWnyJxAMh9XE5f3wo+LUgwKFansKF78x8ytV9NDlQ4mUX9RJZwzihNo2UMK2Z6iMMmPqM0bVm5j4+sj3mU2PGPZ3RG9II8DoDvzXE2kTHepqfN5Iwi+02AeqaBCOZcyrfTy5umnBR+4D4p/cf7WoAYKXApB6t3T0GhlI7jDy+luqnTtgTJZ39qUlapx/D3JzNv6/+FGLAU0y/Hphd/3s+1Esd8yiD+iQEnLpAs4CU7WdEiS9ORz2CNKCAD6onk2IAJKeIhyppAyWoPmWi8nNIWho4bcxe+/LF2ITEJbYFSa2eBBVUP8oe+xpzBrm1HR+m5Qtgt5kq4ln1QbKnO5h/WHuWnnFbfyWNXDtlXEXjYMogpQ6XOT2/56PrKN68sSkZUx2e4UUmVOsngfsJpQbBTHLHQxB/S4wnVIsPRZEbUpYBE3+4+2Rlc+Qj5U9Z/g4+9/GwuJBp/m2mtgdrEyh4VWMwDlaIJkTMFPQ6IQ3GvtO7TYGD+kMNMGN/ZmPpxpEZX/5nhSHMr583+MMjgr6YQ7hC/iGb5qLLO5mGrGsJw/x9fR1xY5OFgTXfiF7qmQXqMGPQ5dNs0vDlSA== 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: 09fda09f-9e75-4696-14bb-08dad7ff5a44 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Dec 2022 03:01:35.7077 (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: B7lEyzuqdKy5KsyCFGDkI55Q/vQlNwN1EEJWjLx8imLy4QlvOBqITkXMQ9M/Lzd+6GFBQSJr5ylK/1xNi+AusQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYPR01MB7928 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk T24gVHVlLCBEZWMgNiwgMjAyMiA3OjU3IEFNIFBldGVyIFNtaXRoIDxzbWl0aHBiMjI1MEBnbWFp bC5jb20+IHdyb3RlOg0KPiBIZXJlIGFyZSBteSByZXZpZXcgY29tbWVudHMgZm9yIHBhdGNoIHY1 NS0wMDAyDQoNClRoYW5zayBmb3IgeW91ciBjb21tZW50cy4NCg0KPiA9PT09PT0NCj4gDQo+IC4u Li9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYw0KPiANCj4gMS4gcGFf Y2FuX3N0YXJ0DQo+IA0KPiBAQCAtMjc2LDkgKzI3OCw5IEBAIHBhX2Nhbl9zdGFydChUcmFuc2Fj dGlvbklkIHhpZCkNCj4gICAvKg0KPiAgICogRG9uJ3Qgc3RhcnQgYSBuZXcgcGFyYWxsZWwgd29y a2VyIGlmIHVzZXIgaGFzIHNldCBza2lwbHNuIGFzIGl0J3MNCj4gICAqIHBvc3NpYmxlIHRoYXQg dXNlciB3YW50IHRvIHNraXAgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4gRm9yDQo+IC0gKiBz dHJlYW1pbmcgdHJhbnNhY3Rpb24sIHdlIG5lZWQgdG8gc3BpbGwgdGhlIHRyYW5zYWN0aW9uIHRv IGRpc2sgc28gDQo+IHRoYXQNCj4gLSAqIHdlIGNhbiBnZXQgdGhlIGxhc3QgTFNOIG9mIHRoZSB0 cmFuc2FjdGlvbiB0byBqdWRnZSB3aGV0aGVyIHRvIA0KPiBza2lwDQo+IC0gKiBiZWZvcmUgc3Rh cnRpbmcgdG8gYXBwbHkgdGhlIGNoYW5nZS4NCj4gKyAqIHN0cmVhbWluZyB0cmFuc2FjdGlvbiwg d2UgbmVlZCB0byBzZXJpYWxpemUgdGhlIHRyYW5zYWN0aW9uIHRvIGEgDQo+ICsgZmlsZQ0KPiAr ICogc28gdGhhdCB3ZSBjYW4gZ2V0IHRoZSBsYXN0IExTTiBvZiB0aGUgdHJhbnNhY3Rpb24gdG8g anVkZ2UgDQo+ICsgd2hldGhlciB0bw0KPiArICogc2tpcCBiZWZvcmUgc3RhcnRpbmcgdG8gYXBw bHkgdGhlIGNoYW5nZS4NCj4gICAqLw0KPiAgIGlmICghWExvZ1JlY1B0cklzSW52YWxpZChNeVN1 YnNjcmlwdGlvbi0+c2tpcGxzbikpDQo+ICAgcmV0dXJuIGZhbHNlOw0KPiANCj4gSSB0aGluayB0 aGUgd29yZGluZyBjaGFuZ2UgbWF5IGJlbG9uZyBpbiBwYXRjaCAwMDAxIGJlY2F1c2UgaXQgaGFz IA0KPiBub3RoaW5nIHRvIGRvIHdpdGggcGFydGlhbCBzZXJpYWxpemluZy4NCg0KQ2hhbmdlZC4N Cg0KPiB+fn4NCj4gDQo+IDIuIHBhX2ZyZWVfd29ya2VyDQo+IA0KPiArIC8qDQo+ICsgKiBTdG9w IHRoZSB3b3JrZXIgaWYgdGhlcmUgYXJlIGVub3VnaCB3b3JrZXJzIGluIHRoZSBwb29sLg0KPiAr ICoNCj4gKyAqIFhYWCBUaGUgd29ya2VyIGlzIGFsc28gc3RvcHBlZCBpZiB0aGUgbGVhZGVyIGFw cGx5IHdvcmtlciBuZWVkZWQgDQo+ICsgdG8NCj4gKyAqIHNlcmlhbGl6ZSBwYXJ0IG9mIHRoZSB0 cmFuc2FjdGlvbiBkYXRhIGR1ZSB0byBhIHNlbmQgdGltZW91dC4gVGhpcyANCj4gKyBpcw0KPiAr ICogYmVjYXVzZSB0aGUgbWVzc2FnZSBjb3VsZCBiZSBwYXJ0aWFsbHkgd3JpdHRlbiB0byB0aGUg cXVldWUgZHVlIHRvIA0KPiArIHNlbmQNCj4gKyAqIHRpbWVvdXQgYW5kIHRoZXJlIGlzIG5vIHdh eSB0byBjbGVhbiB0aGUgcXVldWUgb3RoZXIgdGhhbiANCj4gKyByZXNlbmRpbmcgdGhlDQo+ICsg KiBtZXNzYWdlIHVudGlsIGl0IHN1Y2NlZWRzLiBUbyBhdm9pZCBjb21wbGV4aXR5LCB3ZSBkaXJl Y3RseSBzdG9wIA0KPiArIHRoZQ0KPiArICogd29ya2VyIGluIHRoaXMgY2FzZS4NCj4gKyAqLw0K PiArIGlmICh3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMgfHwNCj4gKyBuYXBwbHl3b3JrZXJzID4g KG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gLyAyKSkNCj4gDQo+ IERvbid0IG5lZWQgdG8gc2F5ICJkdWUgdG8gc2VuZCB0aW1lb3V0IiAyIHRpbWVzIGluIDIgc2Vu dGVuY2VzLg0KPiANCj4gU1VHR0VTVElPTg0KPiBYWFggVGhlIHdvcmtlciBpcyBhbHNvIHN0b3Bw ZWQgaWYgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgbmVlZGVkIHRvIA0KPiBzZXJpYWxpemUgcGFy dCBvZiB0aGUgdHJhbnNhY3Rpb24gZGF0YSBkdWUgdG8gYSBzZW5kIHRpbWVvdXQuIFRoaXMgaXMg DQo+IGJlY2F1c2UgdGhlIG1lc3NhZ2UgY291bGQgYmUgcGFydGlhbGx5IHdyaXR0ZW4gdG8gdGhl IHF1ZXVlIGJ1dCB0aGVyZSANCj4gaXMgbm8gd2F5IHRvIGNsZWFuIHRoZSBxdWV1ZSBvdGhlciB0 aGFuIHJlc2VuZGluZyB0aGUgbWVzc2FnZSB1bnRpbCBpdCANCj4gc3VjY2VlZHMuIERpcmVjdGx5 IHN0b3BwaW5nIHRoZSB3b3JrZXIgYXZvaWRzIG5lZWRpbmcgdGhpcyBjb21wbGV4aXR5Lg0KDQpD aGFuZ2VkLg0KDQo+IDQuDQo+IA0KPiAgLyoNCj4gKyAqIFJlcGxheSB0aGUgc3Bvb2xlZCBtZXNz YWdlcyBpbiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlmIHRoZSANCj4gK2xlYWRlciBhcHBs eQ0KPiArICogd29ya2VyIGhhcyBmaW5pc2hlZCBzZXJpYWxpemluZyBjaGFuZ2VzIHRvIHRoZSBm aWxlLg0KPiArICovDQo+ICtzdGF0aWMgdm9pZA0KPiArcGFfc3Bvb2xlZF9tZXNzYWdlcyh2b2lk KQ0KPiANCj4gSSdtIG5vdCAxMDAlIHN1cmUgb2YgdGhlIGxvZ2ljLCBzbyBJTU8gbWF5YmUgdGhl IGNvbW1lbnQgc2hvdWxkIHNheSBhIA0KPiBiaXQgbW9yZSBhYm91dCBob3cgdGhpcyB3b3JrczoN Cj4gDQo+IFNwZWNpZmljYWxseSwgbGV0J3Mgc2F5IHRoZXJlIHdhcyBzb21lIHRpbWVvdXQgYW5k IHRoZSBMQSBuZWVkZWQgdG8gDQo+IHdyaXRlIHRoZSBzcG9vbCBmaWxlLCB0aGVuIGxldCdzIHNh eSB0aGUgUEEgdGltZWQgb3V0IGFuZCBmb3VuZCBpdHNlbGYgDQo+IGluc2lkZSB0aGlzIGZ1bmN0 aW9uLiBOb3csIGxldCdzIHNheSB0aGUgTEEgaXMgc3RpbGwgYnVzeSB3cml0aW5nIHRoZSANCj4g ZmlsZSAtLSBzbyB3aGF0IGhhcHBlbnMgbmV4dD8NCj4gDQo+IERvZXMgdGhpcyBmdW5jdGlvbiBz aW1wbHkgcmV0dXJuLCB0aGVuIHRoZSBtYWluIFBBIGxvb3Agd2FpdHMgYWdhaW4sIA0KPiB0aGVu IHRoZSB0aW1lcyBvdXQgYWdhaW4sIHRoZW4gUEEgZmluZHMgaXRzZWxmIGJhY2sgaW5zaWRlIHRo aXMgDQo+IGZ1bmN0aW9uIGFnYWluLi4uIGFuZCB0aGF0IGtlZXBzIGhhcHBlbmluZyBvdmVyIGFu ZCBvdmVyIHVudGlsIA0KPiBldmVudHVhbGx5IHRoZSBzcG9vbCBmaWxlIGlzIGZvdW5kIEZTX1JF QURZPyBTb21lIGV4cGxhbmF0b3J5IGNvbW1lbnRzIA0KPiBtaWdodCBoZWxwLg0KDQpTbGlnaHRs eSBjaGFuZ2VkIHRoZSBsb2dpYyBhbmQgY29tbWVudCBoZXJlLg0KDQo+IH4NCj4gDQo+IDUuDQo+ IA0KPiArIC8qDQo+ICsgKiBDaGVjayBpZiBjaGFuZ2VzIGhhdmUgYmVlbiBzZXJpYWxpemVkIHRv IGEgZmlsZS4gaWYgc28sIHJlYWQgYW5kIA0KPiArIGFwcGx5DQo+ICsgKiB0aGVtLg0KPiArICov DQo+ICsgU3BpbkxvY2tBY3F1aXJlKCZNeVBhcmFsbGVsU2hhcmVkLT5tdXRleCk7DQo+ICsgZmls ZXNldF9zdGF0ZSA9IE15UGFyYWxsZWxTaGFyZWQtPmZpbGVzZXRfc3RhdGU7IA0KPiArIFNwaW5M b2NrUmVsZWFzZSgmTXlQYXJhbGxlbFNoYXJlZC0+bXV0ZXgpOw0KPiANCj4gImlmIHNvIiAtPiAi SWYgc28iDQoNCkNoYW5nZWQuDQoNCj4gfn5+DQo+IA0KPiANCj4gNi4gcGFfc2VuZF9kYXRhDQo+ IA0KPiArICoNCj4gKyAqIElmIHRoZSBhdHRlbXB0IHRvIHNlbmQgZGF0YSB2aWEgc2hhcmVkIG1l bW9yeSB0aW1lcyBvdXQsIHRoZW4gd2UgDQo+ICsgd2lsbA0KPiBzd2l0Y2gNCj4gKyAqIHRvICJQ QVJUSUFMX1NFUklBTElaRSBtb2RlIiBmb3IgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdG8gcHJl dmVudA0KPiBwb3NzaWJsZQ0KPiArICogZGVhZGxvY2tzIHdpdGggYW5vdGhlciBwYXJhbGxlbCBh cHBseSB3b3JrZXIgKHJlZmVyIHRvIHRoZSANCj4gKyBjb21tZW50cyBhdG9wDQo+ICsgKiBhcHBs eXBhcmFsbGVsd29ya2VyLmMgZm9yIGRldGFpbHMpLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGN1cnJl bnQgDQo+ICsgZGF0YSBhbmQgYW55DQo+ICsgKiBzdWJzZXF1ZW50IGRhdGEgZm9yIHRoaXMgdHJh bnNhY3Rpb24gd2lsbCBiZSBzZXJpYWxpemVkIHRvIGEgZmlsZS4NCj4gICAqLw0KPiAgdm9pZA0K PiAgcGFfc2VuZF9kYXRhKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgU2l6ZSBuYnl0 ZXMsIGNvbnN0IHZvaWQgDQo+ICpkYXRhKQ0KPiANCj4gU1VHR0VTVElPTiAobWlub3IgY29tbWVu dCByZWFycmFuZ2luZykNCj4gDQo+IElmIHRoZSBhdHRlbXB0IHRvIHNlbmQgZGF0YSB2aWEgc2hh cmVkIG1lbW9yeSB0aW1lcyBvdXQsIHRoZW4gd2Ugd2lsbCANCj4gc3dpdGNoIHRvICJQQVJUSUFM X1NFUklBTElaRSBtb2RlIiBmb3IgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gLS0gdGhpcyANCj4g bWVhbnMgdGhhdCB0aGUgY3VycmVudCBkYXRhIGFuZCBhbnkgc3Vic2VxdWVudCBkYXRhIGZvciB0 aGlzIA0KPiB0cmFuc2FjdGlvbiB3aWxsIGJlIHNlcmlhbGl6ZWQgdG8gYSBmaWxlLiBUaGlzIGlz IGRvbmUgdG8gcHJldmVudCANCj4gcG9zc2libGUgZGVhZGxvY2tzIHdpdGggYW5vdGhlciBwYXJh bGxlbCBhcHBseSB3b3JrZXIgKHJlZmVyIHRvIHRoZSANCj4gY29tbWVudHMgYXRvcCBhcHBseXBh cmFsbGVsd29ya2VyLmMgZm9yIGRldGFpbHMpLg0KDQpDaGFuZ2VkLg0KDQo+IH4NCj4gDQo+IDcu DQo+IA0KPiArIC8qDQo+ICsgKiBUYWtlIHRoZSBzdHJlYW0gbG9jayB0byBtYWtlIHN1cmUgdGhh dCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyDQo+ICsgKiB3aWxsIHdhaXQgZm9yIHRoZSBsZWFk ZXIgdG8gcmVsZWFzZSB0aGUgc3RyZWFtIGxvY2sgdW50aWwgdGhlDQo+ICsgKiBlbmQgb2YgdGhl IHRyYW5zYWN0aW9uLg0KPiArICovDQo+ICsgcGFfbG9ja19zdHJlYW0od2luZm8tPnNoYXJlZC0+ eGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsNCj4gDQo+IFRoZSBjb21tZW50IGRvZXNuJ3Qgc291 bmQgcmlnaHQuDQo+IA0KPiAidW50aWwgdGhlIGVuZCIgLT4gImF0IHRoZSBlbmQiICg/PykNCg0K SSB0aGluayBpdCBtZWFucyAiUEEgd2FpdCAuLi4gdW50aWwgdGhlIGVuZCBvZiB0cmFuc2FjdGlv biIuDQoNCj4gfn5+DQo+IA0KPiA4LiBwYV9zdHJlYW1fYWJvcnQNCj4gDQo+IEBAIC0xMzc0LDYg KzE0NzAsNyBAQCBwYV9zdHJlYW1fYWJvcnQoTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YQ0KPiAq YWJvcnRfZGF0YSkNCj4gICBSb2xsYmFja1RvU2F2ZXBvaW50KHNwbmFtZSk7DQo+ICAgQ29tbWl0 VHJhbnNhY3Rpb25Db21tYW5kKCk7DQo+ICAgc3VieGFjdGxpc3QgPSBsaXN0X3RydW5jYXRlKHN1 YnhhY3RsaXN0LCBpICsgMSk7DQo+ICsNCj4gICBicmVhazsNCj4gICB9DQo+ICAgfQ0KPiBTcHVy aW91cyB3aGl0ZXNwYWNlIHVucmVsYXRlZCB0byB0aGlzIHBhdGNoPw0KDQpDaGFuZ2VkLg0KDQo+ ID09PT09PQ0KPiANCj4gc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYw0K PiANCj4gOS4gaGFuZGxlX3N0cmVhbWVkX3RyYW5zYWN0aW9uDQo+IA0KPiAgIC8qDQo+ICsgKiBU aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIG5lZWRzIHRoZSB4aWQgaW4gdGhpcyBtZXNzYWdlIHRv IGRlY2lkZQ0KPiArICogd2hldGhlciB0byBkZWZpbmUgYSBzYXZlcG9pbnQsIHNvIHNhdmUgdGhl IG9yaWdpbmFsIG1lc3NhZ2UgdGhhdCANCj4gKyBoYXMgbm90DQo+ICsgKiBtb3ZlZCB0aGUgY3Vy c29yIGFmdGVyIHRoZSB4aWQuIFdlIHdpbGwgc2VyYWlsaXplIHRoaXMgbWVzc2FnZSB0byANCj4g KyBhIGZpbGUNCj4gKyAqIGluIFBBUlRJQUxfU0VSSUFMSVpFIG1vZGUuDQo+ICsgKi8NCj4gKyBv cmlnaW5hbF9tc2cgPSAqczsNCj4gDQo+ICJzZXJhaWxpemUiIC0+ICJzZXJpYWxpemUiDQoNCkNo YW5nZWQuDQoNCj4gfn5+DQo+IA0KPiAxMC4gYXBwbHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlDQo+ IA0KPiBAQCAtMTI0NSw2ICsxMjY1LDcgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0 cmluZ0luZm8gcykNCj4gICBMb2dpY2FsUmVwUHJlcGFyZWRUeG5EYXRhIHByZXBhcmVfZGF0YTsN Cj4gICBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87DQo+ICAgVHJhbnNBcHBseUFjdGlv biBhcHBseV9hY3Rpb247DQo+ICsgU3RyaW5nSW5mb0RhdGEgb3JpZ2luYWxfbXNnID0gKnM7DQo+ IA0KPiBTaG91bGQgdGhpcyBpbmNsdWRlIGEgbG9uZ2VyIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlz IGNvcHkgaXMgbmVlZGVkIA0KPiAoc2FtZSBhcyB3YXMgZG9uZSBpbiBoYW5kbGVfc3RyZWFtZWRf dHJhbnNhY3Rpb24pPw0KDQpBZGRlZCB0aGUgYmxvdyBjb21tZW50IGF0b3AgdGhpcyB2YXJpYWJs ZS4NCmBgYA0KU2F2ZSB0aGUgbWVzc2FnZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQuDQpgYGANCg0K PiB+DQo+IA0KPiAxMS4NCj4gDQo+ICAgY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToNCj4gKw0K PiArIC8qDQo+ICsgKiBDbG9zZSB0aGUgZmlsZSBiZWZvcmUgY29tbWl0dGluZyBpZiB0aGUgcGFy YWxsZWwgYXBwbHkgd29ya2VyDQo+ICsgKiBpcyBhcHBseWluZyBzcG9vbGVkIG1lc3NhZ2VzLg0K PiArICovDQo+ICsgaWYgKHN0cmVhbV9mZCkNCj4gKyBzdHJlYW1fY2xvc2VfZmlsZSgpOw0KPiAN Cj4gMTFhLg0KPiANCj4gVGhpcyBjb21tZW50IHNlZW1zIHdvcmRlZCBiYWNrd2FyZHMuDQo+IA0K PiBTVUdHRVNUSU9ODQo+IElmIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgYXBwbHlpbmcg c3Bvb2xlZCBtZXNzYWdlcyB0aGVuIGNsb3NlIA0KPiB0aGUgZmlsZSBiZWZvcmUgY29tbWl0dGlu Zy4NCg0KQ2hhbmdlZC4NCg0KPiB+DQo+IA0KPiAxMWIuDQo+IA0KPiBJJ20gY29uZnVzZWQgLSBp c24ndCB0aGVyZSBjb2RlIGRvaW5nIGV4YWN0bHkgdGhpcyAoY2xvc2UgZmlsZSBiZWZvcmUNCj4g Y29tbWl0KSBhbHJlYWR5IGluIHRoZSBhcHBseV9oYW5kbGVfc3RyZWFtX2NvbW1pdCANCj4gVFJB TlNfUEFSQUxMRUxfQVBQTFk/DQoNCkkgdGhpbmsgaGVyZSBpcyBhIHR5cG8uDQpDaGFuZ2VkIHRo ZSBhY3Rpb24gaW4gdGhlIGNvbW1lbnQuIChjb21taXR0aW5nIC0+IHByZXBhcmluZykNCg0KPiB+ DQo+IA0KPiAxMy4NCj4gDQo+ICsgc2VyaWFsaXplX3N0cmVhbV9zdGFydChzdHJlYW1feGlkLCBm YWxzZSk7IA0KPiArIHN0cmVhbV93cml0ZV9jaGFuZ2UoTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9T VEFSVCwgJm9yaWdpbmFsX21zZyk7DQo+IA0KPiAtIGVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7DQo+ ICAgYnJlYWs7DQo+IA0KPiBBIHNwdXJpb3VzIGJsYW5rIGxpbmUgaXMgbGVmdCBiZWZvcmUgdGhl IGJyZWFrOw0KDQpDaGFuZ2VkLg0KDQo+IH5+fg0KPiANCj4gMTQuIHNlcmlhbGl6ZV9zdHJlYW1f c3RvcA0KPiANCj4gKyAvKiBXZSBtdXN0IGJlIGluIGEgdmFsaWQgdHJhbnNhY3Rpb24gc3RhdGUg Ki8gDQo+ICsgQXNzZXJ0KElzVHJhbnNhY3Rpb25TdGF0ZSgpKTsNCj4gDQo+IFRoZSBjb21tZW50 IHNlZW1zIHJlZHVuZGFudC4gVGhlIGNvZGUgc2F5cyB0aGUgc2FtZS4NCg0KQ2hhbmdlZC4NCg0K PiB+DQo+IA0KPiAxNy4NCj4gDQo+ICsgLyoNCj4gKyAqIE5vIG5lZWQgdG8gb3V0cHV0IHRoZSBE RUJVRyBtZXNzYWdlIGhlcmUgaW4gdGhlIHBhcmFsbGVsIGFwcGx5DQo+ICsgKiB3b3JrZXIgYXMg c2ltaWxhciBtZXNzYWdlcyB3aWxsIGJlIG91dHB1dCB3aGVuIGhhbmRsaW5nIA0KPiArIFNUUkVB TV9TVE9QDQo+ICsgKiBtZXNzYWdlLg0KPiArICovDQo+ICsgaWYgKCFhbV9wYXJhbGxlbF9hcHBs eV93b3JrZXIoKSAmJiBuY2hhbmdlcyAlIDEwMDAgPT0gMCkNCj4gICBlbG9nKERFQlVHMSwgInJl cGxheWVkICVkIGNoYW5nZXMgZnJvbSBmaWxlIFwiJXNcIiIsDQo+ICAgbmNoYW5nZXMsIHBhdGgp Ow0KPiANCj4gSW5zdGVhZCBvZiBzYXlpbmcgd2hhdCB5b3UgYXJlIG5vdCBkb2luZyAgKCJObyBu ZWVkIHRvLi4uIGluIG91dHB1dCANCj4gYXBwbHkgd29ya2VyIikgd291bGRuJ3QgaXQgbWFrZSBt b3JlIHNlbnNlIHRvIHJldmVyc2UgaXQgYW5kIHNheSB3aGF0IA0KPiB5b3UgYXJlIGRvaW5nICgi T25seSBsb2cgREVCVUcgbWVzc2FnZXMgZm9yIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIA0KPiBi ZWNhdXNlIC4uLiIpIGFuZCB0aGVuIHRoZSBjb25kaXRpb24gYWxzbyBiZWNvbWVzIHBvc2l0aXZl Og0KPiANCj4gaWYgKGFtX2xlYWRlcl9hcHBseV93b3JrZXIoKSkNCj4gew0KPiAuLi4NCj4gfQ0K DQpSZW1vdmVkIHRoaXMgY29uZGl0aW9uIGFjY29yZGluZyB0byBBbWl0J3MgY29tbWVudC4NCg0K PiB+DQo+IA0KPiAxOC4NCj4gDQo+ICsgaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpICYm DQo+ICsgTXlQYXJhbGxlbFNoYXJlZC0+eGFjdF9zdGF0ZSA9PSBQQVJBTExFTF9UUkFOU19GSU5J U0hFRCkNCj4gKyBnb3RvIGRvbmU7DQo+ICsNCj4gKyAvKg0KPiArICogTm8gbmVlZCB0byBvdXRw dXQgdGhlIERFQlVHIG1lc3NhZ2UgaGVyZSBpbiB0aGUgcGFyYWxsZWwgYXBwbHkNCj4gKyAqIHdv cmtlciBhcyBzaW1pbGFyIG1lc3NhZ2VzIHdpbGwgYmUgb3V0cHV0IHdoZW4gaGFuZGxpbmcgDQo+ ICsgU1RSRUFNX1NUT1ANCj4gKyAqIG1lc3NhZ2UuDQo+ICsgKi8NCj4gKyBpZiAoIWFtX3BhcmFs bGVsX2FwcGx5X3dvcmtlcigpICYmIG5jaGFuZ2VzICUgMTAwMCA9PSAwKQ0KPiAgIGVsb2coREVC VUcxLCAicmVwbGF5ZWQgJWQgY2hhbmdlcyBmcm9tIGZpbGUgXCIlc1wiIiwNCj4gICBuY2hhbmdl cywgcGF0aCk7DQo+ICAgfQ0KPiANCj4gLSBCdWZGaWxlQ2xvc2UoZmQpOw0KPiAtDQo+ICsgc3Ry ZWFtX2Nsb3NlX2ZpbGUoKTsNCj4gICBwZnJlZShidWZmZXIpOw0KPiAgIHBmcmVlKHMyLmRhdGEp Ow0KPiANCj4gK2RvbmU6DQo+ICAgZWxvZyhERUJVRzEsICJyZXBsYXllZCAlZCAoYWxsKSBjaGFu Z2VzIGZyb20gZmlsZSBcIiVzXCIiLA0KPiAgIG5jaGFuZ2VzLCBwYXRoKTsNCj4gDQo+IFNob3Vs ZG4ndCB0aGF0ICJkb25lOiIgbGFiZWwgYmUgKmFib3ZlKiB0aGUgcGZyZWUncy4gT3RoZXJ3aXNl LCB0aG9zZSANCj4gYXJlIGdvaW5nIHRvIGJlIHNraXBwZWQgb3ZlciBieSB0aGUgImdvdG8gZG9u ZTsiLg0KDQpBZnRlciByZWNvbnNpZGVyaW5nLCBJIHRoaW5rIHRoZXJlIGlzIG5vIG5lZWQgdG8g J3BmcmVlJyB0aGVzZSB0d28gdmFyaWFibGVzIGhlcmUsDQpiZWNhdXNlIHRoZXkgYXJlIGFsbG9j YXRlZCBpbiB0b3BsZXZlbCB0cmFuc2FjdGlvbidzIGNvbnRleHQgYW5kIHdpbGwgYmUgZnJlZWQg dmVyeSBzb29uLg0KU28sIEkganVzdCByZW1vdmVkIHRoZXNlIHBmcmVlKCkuDQoNCj4gPT09PT09 DQo+IA0KPiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaA0KPiANCj4g MjEuIFBhcnRpYWxGaWxlU2V0U3RhdGUNCj4gDQo+IA0KPiArICogU3RhdGUgb2YgZmlsZXNldCBp biBsZWFkZXIgYXBwbHkgd29ya2VyLg0KPiArICoNCj4gKyAqIEZTX0JVU1kgbWVhbnMgdGhhdCB0 aGUgbGVhZGVyIGlzIHNlcmlhbGl6aW5nIGNoYW5nZXMgdG8gdGhlIGZpbGUuIA0KPiArRlNfUkVB RFkNCj4gKyAqIG1lYW5zIHRoYXQgdGhlIGxlYWRlciBoYXMgc2VyaWFsaXplZCBhbGwgY2hhbmdl cyB0byB0aGUgZmlsZSBhbmQgDQo+ICt0aGUgZmlsZSBpcw0KPiArICogcmVhZHkgdG8gYmUgcmVh ZCBieSBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4NCj4gKyAqLw0KPiArdHlwZWRlZiBlbnVtIFBh cnRpYWxGaWxlU2V0U3RhdGUNCj4gDQo+ICJyZWFkeSB0byBiZSByZWFkIiBzb3VuZGVkIGEgYml0 IHN0cmFuZ2UuDQo+IA0KPiBTVUdHRVNUSU9ODQo+IC4uLiB0byB0aGUgZmlsZSBzbyBpdCBpcyBu b3cgT0sgZm9yIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHRvIHJlYWQgaXQuDQoNCkNoYW5nZWQu DQoNCkJlc3QgcmVnYXJkcywNCkhvdSB6ag0K