Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vIRGV-000z8M-1r for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Nov 2025 12:44:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vIRGS-000RTZ-07 for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Nov 2025 12:44:56 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vIRGR-000RTP-1u for pgsql-hackers@lists.postgresql.org; Mon, 10 Nov 2025 12:44:55 +0000 Received: from mail-ed1-x529.google.com ([2a00:1450:4864:20::529]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vIRGO-006ys3-08 for pgsql-hackers@postgresql.org; Mon, 10 Nov 2025 12:44:54 +0000 Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-640aaa89697so4255216a12.3 for ; Mon, 10 Nov 2025 04:44:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1762778688; x=1763383488; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=XSZciFTGpQ2uU1ZuLZXiaM7Q4UJTvLkT932LhtTc4wE=; b=BN8H22ugpFyCXfhb4gEBrKFTx7HtP7+Q2wMQa4fGvxu1v/LbMGtLljFiSKaCuMM4+B Mf0vK5eiK1sW7WeApmfku3yPZquom4CGVnT5hmMIukbZ7XpbAtjJtvsFslLTK9E9S1Y4 vBfI3bk1Oz0MOig2U1F86060SCc2VCqSDWVpkOiHT5esgJSi7/Tw/4EzL1C8q8axhr5f 8arAIjxu3YpnjFoGBP1k4r/3ja63T/qNhaXXLngeQl72YqdkZbR463KtSA8s5EVymt2G Enwro/VYdcYFbsz6T7AMmSdW5+HBFoFdCX6hPV6RODuaJBehr37CLkrz1/oDNCwzDrPu Yzvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762778688; x=1763383488; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=XSZciFTGpQ2uU1ZuLZXiaM7Q4UJTvLkT932LhtTc4wE=; b=cS3m6QUduUYRO+fe/QC2cz7Eu8We9GJm4p8+M4NoVaCWUaKi6Xaj3dR4d1cWSTm+LK nxzerTCEE2it126UfXASFRs7QiCmQYdx60QRTgcV5sJApVc3yVERXEzn0E3JGUQXpcaJ bh3QVwwNm0yFTLusEeYMoWXkfGbioTD09iOwnRjOtfLj9xV6n5XNY99uN6ZpN3shL8jF n1q15EQBoplDwTjo2RaGikyeDheYDNgmgGryCVapY+203BsjOtZAdfY918PGrX0nZg8b 5JmQI0/0/9U8cjEVdSvRNxIdwG60HOn6cpowNFDpYBzqAgJHRXkSiH7OO+WpUDkwp07D 0ZQg== X-Gm-Message-State: AOJu0Yy8bkq7EISVklqR/Udu84n9LT0vMkl3QALuLL1GTMODwpdKuuiB 1lxQezeoiHfa6hUWXhx1t+eMRIJ+4BNw/TSL1ocqbjDySDfBRntU1Bwq+N8cP97h8613taxyyqi 5fgl8bQQ0mvy85hb3Ia3QH4j69s5dq8ZES8WwyKgo X-Gm-Gg: ASbGnctJ5n1Cj0Ga44/6IWLGlP3zi+HTHw8/yRIF6OensdnqjYSEAxAJqbwlo2//zVl +Y1Yc3DL69cLfPrQ1loc4sA2ydcN5sUpVTjrJH0GIC1BZYzEjEvK0lh4/u54Ym78SgiDuVoXIgJ kEXM16/82Y3XBVtOymAn9BVQ+JGMjMwFX3j5A/LRsBztAuNN2hN2v8vgT3NLduns+fZqL58dg3F ORbTKxcpjNqxWJAcOwkL3HepdqygpAgQYOYNKxzk29rmYLwE3ZwvMeNAbI2plo= X-Google-Smtp-Source: AGHT+IFhuctv7XOeHBpv/HaOLml0cOXGV5ZqfcFFIaJg9N1ZVKWxCz0GVTC/Q9DS5XXBurdQzgk6TpW4CmExoc2gZEE= X-Received: by 2002:a17:907:803:b0:b70:fd2f:6a46 with SMTP id a640c23a62f3a-b72e0312db5mr682061566b.20.1762778688391; Mon, 10 Nov 2025 04:44:48 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Tim Waizenegger Date: Mon, 10 Nov 2025 13:44:36 +0100 X-Gm-Features: AWmQ_bkZq_jw9dsrOCMREE7YDACwfYj9yNAIMxngllbak8AgoEnlZRjFD539ybY Message-ID: Subject: Re: [PATCH] pg_get_domain_ddl: DDL reconstruction function for CREATE DOMAIN statement To: Akshay Joshi , Chao Li , jian he Cc: pgsql-hackers , Florin Irion Content-Type: multipart/mixed; boundary="0000000000008a51b006433ce58c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008a51b006433ce58c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable >> On Wed, Oct 22, 2025 at 12:27=E2=80=AFPM Chao Li wrote: >> >> > While reviewing a similar patch of pg_get_policy_ddl(), it take the la= st parameter as a pretty flag. I wonder why pg_get_domain_ddl() doesn=E2=80= =99t support an argument for pretty? We have now added pretty printing support in the latest version; see attached patch. FYI, we tried to stay consistent in the implementation with pg_get_policy_ddl from https://www.postgresql.org/message-id/flat/CANxoLDdJsRJqnjMXV3yjsk07Z5iRWxG= -c2hZJC7bAKqf8ZXj_A%40mail.gmail.com or On Thu, Oct 23, 2025 at 11:20=E2=80=AFAM Akshay Joshi wrote: > >> I've already implemented a generic function for pretty-formatted DDL in = the ruleutils.c file as part of my pg_get_policy_ddl patch. I suggest reusi= ng it once my patch is accepted and committed by the community. Thanks Akshay, we adopted your "get_formatted_string()" function into our path and tried to follow similar implementation patterns as well. On Thu, Oct 23, 2025 at 6:22=E2=80=AFAM jian he wrote: > > I=E2=80=99ve done some refactoring, hope it=E2=80=99s now more intuitive = to you. > Since a domain=E2=80=99s base type can itself be another domain, it=E2=80= =99s better to use > > appendStringInfo(&buf, "CREATE DOMAIN %s AS %s", > generate_qualified_type_name(domain_oid), > generate_qualified_type_name(typForm->typbasetype)); > > then the domain's base type is also fully qualified. Thanks for the feedback and refactoring Jian! We adopted the "generate_qualified_type_name" into our patch; this is much better. > I also refactored the logic for printing domain constraints, which should= reduce > syscache lookups or table scans compared to your version. we did a lot of refactoring as well while integrating the pretty-printing support and aligning with e.g. the pg_get_policy_ddl command. Some of this refactoring follows your suggestiong. There is one change we decided not to adopt: constructing the ddl-strings _while_ scanning for constraints in order to optimize the syscache lookups. The reason is this: the optimization will save one "SearchSysCache1" per constraint in the domain. But we still call "pg_get_constraintdef_worker" for each constraint which does a full table scan. So in that context, saving the cache lookup seems like a minor improvement. To us it seemed more desirable to leave the code unoptimized in this location so that constraint scan and constraint processing can be decoupled into individual single-purpose functions/blocks. Let us know what you think. Best regards, Florin Irion Tim Waizenegger EDB (EnterpriseDB) --0000000000008a51b006433ce58c Content-Type: application/octet-stream; name="v3-0001-Add-pg_get_domain_ddl-function-to-reconstruct-CRE.patch" Content-Disposition: attachment; filename="v3-0001-Add-pg_get_domain_ddl-function-to-reconstruct-CRE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mht4vw8r0 RnJvbSBlOGJkOGM3MTIzMDhkNTliYmExOWYxMjM2YjNkNjkxYTcxOGEyNmI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGbG9yaW4gSXJpb24gPGZsb3Jpbi5pcmlvbkBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBUaHUsIDE4IFNlcCAyMDI1IDE4OjUyOjQzICswMjAwClN1YmplY3Q6IFtQ QVRDSCB2M10gQWRkIHBnX2dldF9kb21haW5fZGRsKCkgZnVuY3Rpb24gdG8gcmVjb25zdHJ1Y3Qg Q1JFQVRFCiBET01BSU4gc3RhdGVtZW50cwpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6 IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJp dAoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c3RlbSBmdW5jdGlvbiBwZ19nZXRfZG9t YWluX2RkbCgpIHRoYXQKcmVjb25zdHJ1Y3RzIHRoZSBDUkVBVEUgRE9NQUlOIHN0YXRlbWVudCBm b3IgYSBnaXZlbiBkb21haW4uIFRoZSBmdW5jdGlvbgp0YWtlcyBhIHJlZ3R5cGUgcGFyYW1ldGVy IGFuZCByZXR1cm5zIHRoZSBjb21wbGV0ZSBEREwgc3RhdGVtZW50IGluY2x1ZGluZwp0aGUgZG9t YWluIG5hbWUsIGJhc2UgdHlwZSwgZGVmYXVsdCB2YWx1ZSwgYW5kIGFsbCBhc3NvY2lhdGVkIGNv bnN0cmFpbnRzLgoKVGhlIGZ1bmN0aW9uIGZvbGxvd3MgdGhlIHNhbWUgcGF0dGVybiBhcyBvdGhl ciBEREwgcmVjb25zdHJ1Y3Rpb24gZnVuY3Rpb25zCmxpa2UgcGdfZ2V0X2Z1bmN0aW9uZGVmKCkg YW5kIHBnX2dldF9jb25zdHJhaW50ZGVmKCksIHByb3ZpZGluZyBhCmRlY29tcGlsZWQgcmVjb25z dHJ1Y3Rpb24gcmF0aGVyIHRoYW4gdGhlIG9yaWdpbmFsIGNvbW1hbmQgdGV4dC4KCktleSBmZWF0 dXJlczoKKiBTdXBwb3J0cyBkb21haW5zIHdpdGggZGVmYXVsdCB2YWx1ZXMKKiBJbmNsdWRlcyBh bGwgZG9tYWluIGNvbnN0cmFpbnRzIChDSEVDSywgTk9UIE5VTEwpCiogTk9UIFZBTElEIGNvbnN0 cmFpbnQgYXJlIGhhbmRsZWQgd2l0aCBhbiBleHRyYSBBTFRFUiBjb21tYW5kLgoqIFByb3Blcmx5 IHF1b3RlcyBpZGVudGlmaWVycyBhbmQgc2NoZW1hIG5hbWVzCiogSGFuZGxlcyBjb21wbGV4IGNv bnN0cmFpbnQgZXhwcmVzc2lvbnMKKiBwcmV0dHkgcHJpbnRpbmcgc3VwcG9ydAoKQSBuZXcgZG9j dW1lbnRhdGlvbiBzZWN0aW9uICJHZXQgT2JqZWN0IERETCBGdW5jdGlvbnMiIGhhcyBiZWVuIGNy ZWF0ZWQKdG8gZ3JvdXAgRERMIHJlY29uc3RydWN0aW9uIGZ1bmN0aW9ucywgc3RhcnRpbmcgd2l0 aCBwZ19nZXRfZG9tYWluX2RkbCgpLgpUaGlzIHByb3ZpZGVzIGEgZm91bmRhdGlvbiBmb3IgZnV0 dXJlIERETCBmdW5jdGlvbnMgZm9yIG90aGVyIG9iamVjdCB0eXBlcy4KCkNvbXByZWhlbnNpdmUg cmVncmVzc2lvbiB0ZXN0cyBhcmUgaW5jbHVkZWQgY292ZXJpbmcgdmFyaW91cyBkb21haW4KY29u ZmlndXJhdGlvbnMuCgpSZWZlcmVuY2U6IFBHLTE1MQpBdXRob3I6IEZsb3JpbiBJcmlvbiA8Zmxv cmluLmlyaW9uQGVudGVycHJpc2VkYi5jb20+CkF1dGhvcjogVGltIFdhaXplbmVnZ2VyIDx0aW0u d2FpemVuZWdnZXJAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IMOBbHZhcm8gSGVycmVy YSBhbHZoZXJyZUBhbHZoLm5vLWlwLm9yZwpSZXZpZXdlZC1ieTogamlhbiBoZSA8amlhbi51bml2 ZXJzYWxpdHlAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGkuZXZhbi5jaGFvQGdt YWlsLmNvbT4KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbCAgICAgICAgIHwg IDQ1ICsrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwgfCAgIDYg Kwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgICB8IDIyNyArKysrKysr KysrKysrKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgIHwgICAz ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2RkbC5vdXQgfCAzMjggKysrKysr KysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgICAg ICAgfCAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL29iamVjdF9kZGwuc3FsICAgICAgfCAx MzUgKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA3NDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2Jq ZWN0X2RkbC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9vYmpl Y3RfZGRsLnNxbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21s IGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKaW5kZXggZDQ1MDgxMTRhNDguLjU1 NTI3ZjQ2OGFlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbApAQCAtMzc5Nyw0ICszNzk3LDQ5 IEBAIGFjbCAgICAgIHwge3Bvc3RncmVzPWFyd2REeHRtL3Bvc3RncmVzLGZvbz1yL3Bvc3RncmVz fQogCiAgIDwvc2VjdDI+CiAKKyAgPHNlY3QyIGlkPSJmdW5jdGlvbnMtZ2V0LW9iamVjdC1kZGwi PgorICAgPHRpdGxlPkdldCBPYmplY3QgRERMIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgIDxwYXJh PgorICAgIFRoZSBmdW5jdGlvbnMgc2hvd24gaW4gPHhyZWYgbGlua2VuZD0iZnVuY3Rpb25zLWdl dC1vYmplY3QtZGRsLXRhYmxlIi8+CisgICAgcHJpbnQgdGhlIERETCBzdGF0ZW1lbnRzIGZvciB2 YXJpb3VzIGRhdGFiYXNlIG9iamVjdHMuCisgICAgKFRoaXMgaXMgYSBkZWNvbXBpbGVkIHJlY29u c3RydWN0aW9uLCBub3QgdGhlIG9yaWdpbmFsIHRleHQKKyAgICBvZiB0aGUgY29tbWFuZC4pCisg ICA8L3BhcmE+CisKKyAgIDx0YWJsZSBpZD0iZnVuY3Rpb25zLWdldC1vYmplY3QtZGRsLXRhYmxl Ij4KKyAgICA8dGl0bGU+R2V0IE9iamVjdCBEREwgRnVuY3Rpb25zPC90aXRsZT4KKyAgICA8dGdy b3VwIGNvbHM9IjEiPgorICAgICA8dGhlYWQ+CisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSBy b2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAg ICAgIEZ1bmN0aW9uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBEZXNj cmlwdGlvbgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAgIDwvdGhl YWQ+CisKKyAgICAgPHRib2R5PgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0iZnVu Y190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8aW5k ZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cGdfZ2V0X2RvbWFpbl9kZGw8L3ByaW1hcnk+Cisg ICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2RvbWFpbl9kZGw8 L2Z1bmN0aW9uPiAoIDxwYXJhbWV0ZXI+ZG9tYWluPC9wYXJhbWV0ZXI+IDx0eXBlPnJlZ3R5cGU8 L3R5cGU+CisgICAgICAgICA8b3B0aW9uYWw+IDxwYXJhbWV0ZXI+cHJldHR5PC9wYXJhbWV0ZXI+ IDx0eXBlPmJvb2xlYW48L3R5cGU+IDwvb3B0aW9uYWw+KQorICAgICAgICA8cmV0dXJudmFsdWU+ dGV4dDwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAg ICBSZWNvbnN0cnVjdHMgdGhlIGNyZWF0aW5nIGNvbW1hbmQgZm9yIGEgZG9tYWluLgorICAgICAg ICBUaGUgcmVzdWx0IGlzIGEgY29tcGxldGUgPGNvbW1hbmQ+Q1JFQVRFIERPTUFJTjwvY29tbWFu ZD4gc3RhdGVtZW50LgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAg IDwvdGJvZHk+CisgICAgPC90Z3JvdXA+CisgICA8L3RhYmxlPgorCisgIDwvc2VjdDI+CisKICAg PC9zZWN0MT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9u cy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCmluZGV4IDJk OTQ2ZDZkOWU5Li41YTk2ZmYxZWZjYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9z eXN0ZW1fZnVuY3Rpb25zLnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5j dGlvbnMuc3FsCkBAIC02NTcsNiArNjU3LDEyIEBAIExBTkdVQUdFIElOVEVSTkFMCiBTVFJJQ1Qg Vk9MQVRJTEUgUEFSQUxMRUwgVU5TQUZFCiBBUyAncGdfcmVwbGljYXRpb25fb3JpZ2luX3Nlc3Np b25fc2V0dXAnOwogCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTgorIHBnX2dldF9kb21haW5f ZGRsKGRvbWFpbl9uYW1lIHJlZ3R5cGUsIHByZXR0eSBib29sIERFRkFVTFQgZmFsc2UpCisgUkVU VVJOUyB0ZXh0CisgTEFOR1VBR0UgaW50ZXJuYWwKK0FTICdwZ19nZXRfZG9tYWluX2RkbF9leHQn OworCiAtLQogLS0gVGhlIGRlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGZ1bmN0aW9ucyBtZWFuIHRo YXQgYW55b25lIGNhbiBleGVjdXRlIHRoZW0uCiAtLSBBIG51bWJlciBvZiBmdW5jdGlvbnMgc2hv dWxkbid0IGJlIGV4ZWN1dGFibGUgYnkganVzdCBhbnlvbmUsIGJ1dCByYXRoZXIKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9ydWxldXRpbHMuYwppbmRleCA1NTZhYjA1N2U1YS4uYTZmNTllNjc3NmUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTU0Niw2ICs1NDYsMTEgQEAgc3RhdGljIHZvaWQgZ2V0 X2pzb25fdGFibGVfbmVzdGVkX2NvbHVtbnMoVGFibGVGdW5jICp0ZiwgSnNvblRhYmxlUGxhbiAq cGxhbiwKIAkJCQkJCQkJCQkgIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCQkg IGJvb2wgc2hvd2ltcGxpY2l0LAogCQkJCQkJCQkJCSAgYm9vbCBuZWVkY29tbWEpOworc3RhdGlj IHZvaWQgZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoU3RyaW5nSW5mbyBidWYsCisJCQkJCQkJCSBpbnQg cHJldHR5RmxhZ3MsCisJCQkJCQkJCSBpbnQgbm9PZlRhYkNoYXJzLAorCQkJCQkJCQkgY29uc3Qg Y2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50Zig0LCA1KTsKK3N0YXRpYyBjaGFyICpw Z19nZXRfZG9tYWluX2RkbF93b3JrZXIoT2lkIGRvbWFpbl9vaWQsIGludCBwcmV0dHlGbGFncyk7 CiAKICNkZWZpbmUgb25seV9tYXJrZXIocnRlKSAgKChydGUpLT5pbmggPyAiIiA6ICJPTkxZICIp CiAKQEAgLTEzNzQzLDMgKzEzNzQ4LDIyNSBAQCBnZXRfcmFuZ2VfcGFydGJvdW5kX3N0cmluZyhM aXN0ICpib3VuZF9kYXR1bXMpCiAKIAlyZXR1cm4gYnVmLmRhdGE7CiB9CisKKy8qCisgKiBnZXRf Zm9ybWF0dGVkX3N0cmluZworICoKKyAqIFJldHVybiBhIGZvcm1hdHRlZCB2ZXJzaW9uIG9mIHRo ZSBzdHJpbmcuCisgKgorICogcHJldHR5IC0gSWYgcHJldHR5IGlzIHRydWUsIHRoZSBvdXRwdXQg aW5jbHVkZXMgdGFicyAoXHQpIGFuZCBuZXdsaW5lcyAoXG4pLgorICogbm9PZlRhYkNoYXJzIC0g aW5kZW50IHdpdGggc3BlY2lmaWVkIG5vIG9mIHRhYnMuCisgKiBmbXQgLSBwcmludGYtc3R5bGUg Zm9ybWF0IHN0cmluZyB1c2VkIGJ5IGFwcGVuZFN0cmluZ0luZm9WQS4KKyAqLworc3RhdGljIHZv aWQKK2dldF9mb3JtYXR0ZWRfc3RyaW5nKFN0cmluZ0luZm8gYnVmLCBpbnQgcHJldHR5RmxhZ3Ms IGludCBub09mVGFiQ2hhcnMsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCit7CisJdmFfbGlzdAkJYXJn czsKKworCWlmIChwcmV0dHlGbGFncyAmIFBSRVRUWUZMQUdfSU5ERU5UKQorCXsKKwkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoYnVmLCAnXG4nKTsKKwkJLyogSW5kZW50IHdpdGggdGFicyAqLworCQlm b3IgKGludCBpID0gMDsgaSA8IG5vT2ZUYWJDaGFyczsgaSsrKQorCQl7CisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihidWYsICdcdCcpOworCQl9CisJfQorCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoYnVmLCAnICcpOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlhcHBlbmRTdHJpbmdJ bmZvVkEoYnVmLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKK30KKworCisvKgorICogSGVs cGVyIGZ1bmN0aW9uIHRvIHNjYW4gZG9tYWluIGNvbnN0cmFpbnRzCisgKi8KK3N0YXRpYyB2b2lk CitzY2FuX2RvbWFpbl9jb25zdHJhaW50cyhPaWQgZG9tYWluX29pZCwgTGlzdCAqKnZhbGlkY29u cywgTGlzdCAqKmludmFsaWRjb25zKQoreworCVJlbGF0aW9uCWNvbnN0cmFpbnRSZWw7CisJU3lz U2NhbkRlc2Mgc3NjYW47CisJU2NhbktleURhdGEgc2tleTsKKwlIZWFwVHVwbGUJY29uc3RyYWlu dFR1cDsKKworCSp2YWxpZGNvbnMgPSBOSUw7CisJKmludmFsaWRjb25zID0gTklMOworCisJY29u c3RyYWludFJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisKKwlTY2FuS2V5SW5pdCgmc2tleSwKKwkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29u dHlwaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElk R2V0RGF0dW0oZG9tYWluX29pZCkpOworCisJc3NjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29u c3RyYWludFJlbCwKKwkJCQkJCQkgICBDb25zdHJhaW50VHlwaWRJbmRleElkLAorCQkJCQkJCSAg IHRydWUsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICAxLAorCQkJCQkJCSAgICZza2V5KTsK KworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKGNvbnN0cmFpbnRUdXAgPSBzeXN0YWJsZV9nZXRu ZXh0KHNzY2FuKSkpCisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29u c3RyYWludCkgR0VUU1RSVUNUKGNvbnN0cmFpbnRUdXApOworCisJCWlmIChjb24tPmNvbnZhbGlk YXRlZCkKKwkJCSp2YWxpZGNvbnMgPSBsYXBwZW5kX29pZCgqdmFsaWRjb25zLCBjb24tPm9pZCk7 CisJCWVsc2UKKwkJCSppbnZhbGlkY29ucyA9IGxhcHBlbmRfb2lkKCppbnZhbGlkY29ucywgY29u LT5vaWQpOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc3NjYW4pOworCXRhYmxlX2Nsb3NlKGNv bnN0cmFpbnRSZWwsIEFjY2Vzc1NoYXJlTG9jayk7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rp b24gdG8gYnVpbGQgQ1JFQVRFIERPTUFJTiBzdGF0ZW1lbnQKKyAqLworc3RhdGljIHZvaWQKK2J1 aWxkX2NyZWF0ZV9kb21haW5fc3RhdGVtZW50KFN0cmluZ0luZm8gYnVmLCBGb3JtX3BnX3R5cGUg dHlwRm9ybSwKKwkJCQkJCQkgIE5vZGUgKmRlZmF1bHRFeHByLCBMaXN0ICp2YWxpZENvbnN0cmFp bnRzLCBpbnQgcHJldHR5RmxhZ3MpCit7CisJSGVhcFR1cGxlCWJhc2VUeXBlVHVwbGU7CisJRm9y bV9wZ190eXBlIGJhc2VUeXBlRm9ybTsKKwlPaWQJCQliYXNlQ29sbGF0aW9uID0gSW52YWxpZE9p ZDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiQ1JFQVRFIERP TUFJTiAlcyBBUyAlcyIsCisJCQkJCSBnZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9uYW1lKHR5cEZv cm0tPm9pZCksCisJCQkJCSBnZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9uYW1lKHR5cEZvcm0tPnR5 cGJhc2V0eXBlKSk7CisKKwkvKiBBZGQgY29sbGF0aW9uIGlmIGl0IGRpZmZlcnMgZnJvbSBiYXNl IHR5cGUncyBjb2xsYXRpb24gKi8KKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBjb2xsYXRp b24pKQorCXsKKwkJLyogR2V0IGJhc2UgdHlwZSdzIGNvbGxhdGlvbiBmb3IgY29tcGFyaXNvbiAq LworCQliYXNlVHlwZVR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0 RGF0dW0odHlwRm9ybS0+dHlwYmFzZXR5cGUpKTsKKwkJaWYgKEhlYXBUdXBsZUlzVmFsaWQoYmFz ZVR5cGVUdXBsZSkpCisJCXsKKwkJCWJhc2VUeXBlRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNU UlVDVChiYXNlVHlwZVR1cGxlKTsKKwkJCWJhc2VDb2xsYXRpb24gPSBiYXNlVHlwZUZvcm0tPnR5 cGNvbGxhdGlvbjsKKwkJCVJlbGVhc2VTeXNDYWNoZShiYXNlVHlwZVR1cGxlKTsKKwkJfQorCisJ CS8qIE9ubHkgYWRkIENPTExBVEUgaWYgZG9tYWluJ3MgY29sbGF0aW9uIGRpZmZlcnMgZnJvbSBi YXNlIHR5cGUncyAqLworCQlpZiAodHlwRm9ybS0+dHlwY29sbGF0aW9uICE9IGJhc2VDb2xsYXRp b24pCisJCXsKKwkJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKGJ1ZiwgcHJldHR5RmxhZ3MsIDEsICJD T0xMQVRFICVzIiwKKwkJCQkJCQkJIGdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKHR5cEZvcm0tPnR5 cGNvbGxhdGlvbikpOworCQl9CisJfQorCisJLyogQWRkIGRlZmF1bHQgdmFsdWUgaWYgcHJlc2Vu dCAqLworCWlmIChkZWZhdWx0RXhwciAhPSBOVUxMKQorCXsKKwkJY2hhcgkgICAqZGVmYXVsdFZh bHVlID0gZGVwYXJzZV9leHByZXNzaW9uX3ByZXR0eShkZWZhdWx0RXhwciwgTklMLCBmYWxzZSwg ZmFsc2UsIHByZXR0eUZsYWdzLCAwKTsKKworCQlnZXRfZm9ybWF0dGVkX3N0cmluZyhidWYsIHBy ZXR0eUZsYWdzLCAxLCAiREVGQVVMVCAlcyIsIGRlZmF1bHRWYWx1ZSk7CisJfQorCisJLyogQWRk IHZhbGlkIGNvbnN0cmFpbnRzICovCisJZm9yZWFjaChsYywgdmFsaWRDb25zdHJhaW50cykKKwl7 CisJCU9pZAkJCWNvbnN0cmFpbnRPaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJSGVhcFR1cGxlCWNv bnN0cmFpbnRUdXA7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb247CisJCWNoYXIJICAgKmNvbnN0 cmFpbnREZWY7CisKKwkJLyogTG9vayB1cCB0aGUgY29uc3RyYWludCBpbmZvICovCisJCWNvbnN0 cmFpbnRUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBPYmplY3RJZEdldERhdHVtKGNv bnN0cmFpbnRPaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvbnN0cmFpbnRUdXApKQor CQkJY29udGludWU7CQkJLyogY29uc3RyYWludCB3YXMgZHJvcHBlZCBjb25jdXJyZW50bHkgKi8K KworCQljb24gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29uc3RyYWludFR1cCk7 CisJCWNvbnN0cmFpbnREZWYgPSBwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWlu dE9pZCwgZmFsc2UsIHByZXR0eUZsYWdzLCB0cnVlKTsKKworCQlnZXRfZm9ybWF0dGVkX3N0cmlu ZyhidWYsIHByZXR0eUZsYWdzLCAxLCAiQ09OU1RSQUlOVCAlcyIsCisJCQkJCQkJIHF1b3RlX2lk ZW50aWZpZXIoTmFtZVN0cihjb24tPmNvbm5hbWUpKSk7CisJCWdldF9mb3JtYXR0ZWRfc3RyaW5n KGJ1ZiwgcHJldHR5RmxhZ3MsIDIsICIlcyIsIGNvbnN0cmFpbnREZWYpOworCisJCVJlbGVhc2VT eXNDYWNoZShjb25zdHJhaW50VHVwKTsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYs ICc7Jyk7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gYWRkIEFMVEVSIERPTUFJTiBz dGF0ZW1lbnRzIGZvciBpbnZhbGlkIGNvbnN0cmFpbnRzCisgKi8KK3N0YXRpYyB2b2lkCithZGRf YWx0ZXJfZG9tYWluX3N0YXRlbWVudHMoU3RyaW5nSW5mbyBidWYsIExpc3QgKmludmFsaWRDb25z dHJhaW50cywgaW50IHByZXR0eUZsYWdzKQoreworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFj aChsYywgaW52YWxpZENvbnN0cmFpbnRzKQorCXsKKwkJT2lkCQkJY29uc3RyYWludE9pZCA9IGxm aXJzdF9vaWQobGMpOworCQljaGFyCSAgICphbHRlclN0bXQgPSBwZ19nZXRfY29uc3RyYWludGRl Zl93b3JrZXIoY29uc3RyYWludE9pZCwgdHJ1ZSwgcHJldHR5RmxhZ3MsIHRydWUpOworCisJCWlm IChhbHRlclN0bXQpCisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIlxuJXM7IiwgYWx0ZXJTdG10 KTsKKwl9Cit9CisKKy8qCisgKiBwZ19nZXRfZG9tYWluX2RkbF9leHQgLSBHZXQgQ1JFQVRFIERP TUFJTiBzdGF0ZW1lbnQgZm9yIGEgZG9tYWluIHdpdGggcHJldHR5LXByaW50IG9wdGlvbgorICov CitEYXR1bQorcGdfZ2V0X2RvbWFpbl9kZGxfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lk CQkJZG9tYWluX29pZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJYm9vbAkJcHJldHR5ID0gUEdfR0VU QVJHX0JPT0woMSk7CisJY2hhcgkgICAqcmVzOworCWludAkJCXByZXR0eUZsYWdzOworCisJcHJl dHR5RmxhZ3MgPSBwcmV0dHkgPyBHRVRfUFJFVFRZX0ZMQUdTKHByZXR0eSkgOiAwOworCisJcmVz ID0gcGdfZ2V0X2RvbWFpbl9kZGxfd29ya2VyKGRvbWFpbl9vaWQsIHByZXR0eUZsYWdzKTsKKwlp ZiAocmVzID09IE5VTEwpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisJUEdfUkVUVVJOX1RFWFRfUChz dHJpbmdfdG9fdGV4dChyZXMpKTsKK30KKworCisKK3N0YXRpYyBjaGFyICoKK3BnX2dldF9kb21h aW5fZGRsX3dvcmtlcihPaWQgZG9tYWluX29pZCwgaW50IHByZXR0eUZsYWdzKQoreworCVN0cmlu Z0luZm9EYXRhIGJ1ZjsKKwlIZWFwVHVwbGUJdHlwZVR1cGxlOworCUZvcm1fcGdfdHlwZSB0eXBG b3JtOworCU5vZGUJICAgKmRlZmF1bHRFeHByOworCUxpc3QJICAgKnZhbGlkQ29uc3RyYWludHM7 CisJTGlzdAkgICAqaW52YWxpZENvbnN0cmFpbnRzOworCisJLyogTG9vayB1cCB0aGUgZG9tYWlu IGluIHBnX3R5cGUgKi8KKwl0eXBlVHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2Jq ZWN0SWRHZXREYXR1bShkb21haW5fb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cGVU dXBsZSkpCisJCXJldHVybiBOVUxMOworCisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNU UlVDVCh0eXBlVHVwbGUpOworCisJLyogR2V0IGRlZmF1bHQgZXhwcmVzc2lvbiAqLworCWRlZmF1 bHRFeHByID0gZ2V0X3R5cGRlZmF1bHQoZG9tYWluX29pZCk7CisKKwkvKiBTY2FuIGZvciB2YWxp ZCBhbmQgaW52YWxpZCBjb25zdHJhaW50cyAqLworCXNjYW5fZG9tYWluX2NvbnN0cmFpbnRzKGRv bWFpbl9vaWQsICZ2YWxpZENvbnN0cmFpbnRzLCAmaW52YWxpZENvbnN0cmFpbnRzKTsKKworCS8q IEJ1aWxkIHRoZSBEREwgc3RhdGVtZW50ICovCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJYnVp bGRfY3JlYXRlX2RvbWFpbl9zdGF0ZW1lbnQoJmJ1ZiwgdHlwRm9ybSwgZGVmYXVsdEV4cHIsIHZh bGlkQ29uc3RyYWludHMsIHByZXR0eUZsYWdzKTsKKworCS8qIEFkZCBBTFRFUiBET01BSU4gc3Rh dGVtZW50cyBmb3IgaW52YWxpZCBjb25zdHJhaW50cyAqLworCWlmIChsaXN0X2xlbmd0aChpbnZh bGlkQ29uc3RyYWludHMpID4gMCkKKwkJYWRkX2FsdGVyX2RvbWFpbl9zdGF0ZW1lbnRzKCZidWYs IGludmFsaWRDb25zdHJhaW50cywgcHJldHR5RmxhZ3MpOworCisJLyogQ2xlYW51cCAqLworCWxp c3RfZnJlZSh2YWxpZENvbnN0cmFpbnRzKTsKKwlsaXN0X2ZyZWUoaW52YWxpZENvbnN0cmFpbnRz KTsKKwlSZWxlYXNlU3lzQ2FjaGUodHlwZVR1cGxlKTsKKworCXJldHVybiBidWYuZGF0YTsKK30K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDVjZjllMTJmY2I5Li40NzY4NzRkMDA2MyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC04NTE1LDYgKzg1MTUsOSBAQAogeyBvaWQgPT4gJzI1 MDgnLCBkZXNjciA9PiAnY29uc3RyYWludCBkZXNjcmlwdGlvbiB3aXRoIHByZXR0eS1wcmludCBv cHRpb24nLAogICBwcm9uYW1lID0+ICdwZ19nZXRfY29uc3RyYWludGRlZicsIHByb3ZvbGF0aWxl ID0+ICdzJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCiAgIHByb2FyZ3R5cGVzID0+ICdvaWQgYm9v bCcsIHByb3NyYyA9PiAncGdfZ2V0X2NvbnN0cmFpbnRkZWZfZXh0JyB9LAoreyBvaWQgPT4gJzgw MjQnLCBkZXNjciA9PiAnZ2V0IENSRUFURSBzdGF0ZW1lbnQgZm9yIERPTUFJTiB3aXRoIHByZXR0 eSBvcHRpb24nLAorICBwcm9uYW1lID0+ICdwZ19nZXRfZG9tYWluX2RkbCcsIHByb3JldHR5cGUg PT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAncmVndHlwZSBib29sJywgcHJvc3JjID0+ICdw Z19nZXRfZG9tYWluX2RkbF9leHQnIH0sCiB7IG9pZCA9PiAnMjUwOScsCiAgIGRlc2NyID0+ICdk ZXBhcnNlIGFuIGVuY29kZWQgZXhwcmVzc2lvbiB3aXRoIHByZXR0eS1wcmludCBvcHRpb24nLAog ICBwcm9uYW1lID0+ICdwZ19nZXRfZXhwcicsIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0dHlw ZSA9PiAndGV4dCcsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVj dF9kZGwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3RfZGRsLm91dApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWFhZDU0MzQ3ZGEKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9kZGwub3V0CkBAIC0w LDAgKzEsMzI4IEBACistLQorLS0gVGVzdCBmb3IgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdG8g Z2V0IG9iamVjdCBEREw6CistLSAtIHBnX2dldF9kb21haW5fZGRsCistLQorQ1JFQVRFIERPTUFJ TiByZWdyZXNzX3VzX3Bvc3RhbF9jb2RlIEFTIFRFWFQKKyAgICBERUZBVUxUICcwMDAwMCcKKyAg ICBDT05TVFJBSU5UIHJlZ3Jlc3NfdXNfcG9zdGFsX2NvZGVfY2hlY2sKKyAgICAgICAgQ0hFQ0sg KAorICAgICAgICAgICAgVkFMVUUgfiAnXlxkezV9JCcKKyAgICBPUiBWQUxVRSB+ICdeXGR7NX0t XGR7NH0kJworICAgICk7CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfdXNfcG9z dGFsX2NvZGUnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9kb21h aW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIERPTUFJTiBwdWJsaWMucmVncmVzc191c19wb3N0YWxfY29k ZSBBUyBwZ19jYXRhbG9nLnRleHQgREVGQVVMVCAnMDAwMDAnOjp0ZXh0IENPTlNUUkFJTlQgcmVn cmVzc191c19wb3N0YWxfY29kZV9jaGVjayBDSEVDSyAoKChWQUxVRSB+ICdeXGR7NX0kJzo6dGV4 dCkgT1IgKFZBTFVFIH4gJ15cZHs1fS1cZHs0fSQnOjp0ZXh0KSkpOworKDEgcm93KQorCitTRUxF Q1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfdXNfcG9zdGFsX2NvZGUnLCBwcmV0dHkgPT4g ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2RvbWFpbl9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgRE9NQUlOIHB1YmxpYy5yZWdyZXNzX3VzX3Bvc3RhbF9jb2RlIEFT IHBnX2NhdGFsb2cudGV4dCBERUZBVUxUICcwMDAwMCc6OnRleHQgQ09OU1RSQUlOVCByZWdyZXNz X3VzX3Bvc3RhbF9jb2RlX2NoZWNrIENIRUNLICgoKFZBTFVFIH4gJ15cZHs1fSQnOjp0ZXh0KSBP UiAoVkFMVUUgfiAnXlxkezV9LVxkezR9JCc6OnRleHQpKSk7CisoMSByb3cpCisKK1NFTEVDVCBw Z19nZXRfZG9tYWluX2RkbCgncmVncmVzc191c19wb3N0YWxfY29kZScsIGZhbHNlKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIERPTUFJTiBwdWJsaWMucmVncmVzc191c19wb3N0YWxfY29kZSBBUyBwZ19jYXRhbG9nLnRl eHQgREVGQVVMVCAnMDAwMDAnOjp0ZXh0IENPTlNUUkFJTlQgcmVncmVzc191c19wb3N0YWxfY29k ZV9jaGVjayBDSEVDSyAoKChWQUxVRSB+ICdeXGR7NX0kJzo6dGV4dCkgT1IgKFZBTFVFIH4gJ15c ZHs1fS1cZHs0fSQnOjp0ZXh0KSkpOworKDEgcm93KQorCitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9k ZGwoJ3JlZ3Jlc3NfdXNfcG9zdGFsX2NvZGUnLCBwcmV0dHkgPT4gdHJ1ZSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgRE9N QUlOIHB1YmxpYy5yZWdyZXNzX3VzX3Bvc3RhbF9jb2RlIEFTIHBnX2NhdGFsb2cudGV4dCAgICAg ICAgICAgICAgICAgICArCisgICAgICAgICBERUZBVUxUICcwMDAwMCc6OnRleHQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgQ09O U1RSQUlOVCByZWdyZXNzX3VzX3Bvc3RhbF9jb2RlX2NoZWNrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgQ0hFQ0sgKFZBTFVFIH4gJ15cZHs1fSQn Ojp0ZXh0IE9SIFZBTFVFIH4gJ15cZHs1fS1cZHs0fSQnOjp0ZXh0KTsKKygxIHJvdykKKworU0VM RUNUIHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX3VzX3Bvc3RhbF9jb2RlJywgdHJ1ZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfZG9tYWluX2RkbCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgRE9NQUlOIHB1YmxpYy5yZWdyZXNzX3VzX3Bvc3RhbF9jb2RlIEFTIHBnX2NhdGFsb2cu dGV4dCAgICAgICAgICAgICAgICAgICArCisgICAgICAgICBERUZBVUxUICcwMDAwMCc6OnRleHQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAg ICAgICAgQ09OU1RSQUlOVCByZWdyZXNzX3VzX3Bvc3RhbF9jb2RlX2NoZWNrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgQ0hFQ0sgKFZBTFVFIH4g J15cZHs1fSQnOjp0ZXh0IE9SIFZBTFVFIH4gJ15cZHs1fS1cZHs0fSQnOjp0ZXh0KTsKKygxIHJv dykKKworQ1JFQVRFIERPTUFJTiByZWdyZXNzX2RvbWFpbl9ub3RfbnVsbCBBUyBJTlQgTk9UIE5V TEw7CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfZG9tYWluX25vdF9udWxsJyk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgRE9NQUlOIHB1YmxpYy5yZWdyZXNzX2RvbWFpbl9ub3Rf bnVsbCBBUyBwZ19jYXRhbG9nLmludDQgQ09OU1RSQUlOVCByZWdyZXNzX2RvbWFpbl9ub3RfbnVs bF9ub3RfbnVsbCBOT1QgTlVMTDsKKygxIHJvdykKKworU0VMRUNUIHBnX2dldF9kb21haW5fZGRs KCdyZWdyZXNzX2RvbWFpbl9ub3RfbnVsbCcsIHByZXR0eSA9PiB0cnVlKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBET01BSU4gcHVibGljLnJlZ3Jlc3NfZG9tYWluX25vdF9udWxsIEFT IHBnX2NhdGFsb2cuaW50NCsKKyAgICAgICAgIENPTlNUUkFJTlQgcmVncmVzc19kb21haW5fbm90 X251bGxfbm90X251bGwgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgIE5PVCBOVUxMOwor KDEgcm93KQorCitDUkVBVEUgRE9NQUlOIHJlZ3Jlc3NfZG9tYWluX2NoZWNrIEFTIElOVAorICAg IENPTlNUUkFJTlQgcmVncmVzc19hIENIRUNLIChWQUxVRSA8IDEwMCkKKyAgICBDT05TVFJBSU5U IHJlZ3Jlc3NfYiBDSEVDSyAoVkFMVUUgPiAxMCk7CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwo J3JlZ3Jlc3NfZG9tYWluX2NoZWNrJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9kb21haW5fZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERPTUFJTiBw dWJsaWMucmVncmVzc19kb21haW5fY2hlY2sgQVMgcGdfY2F0YWxvZy5pbnQ0IENPTlNUUkFJTlQg cmVncmVzc19hIENIRUNLICgoVkFMVUUgPCAxMDApKSBDT05TVFJBSU5UIHJlZ3Jlc3NfYiBDSEVD SyAoKFZBTFVFID4gMTApKTsKKygxIHJvdykKKworU0VMRUNUIHBnX2dldF9kb21haW5fZGRsKCdy ZWdyZXNzX2RvbWFpbl9jaGVjaycsIHByZXR0eSA9PiB0cnVlKTsKKyAgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBET01BSU4gcHVibGljLnJlZ3Jlc3NfZG9tYWluX2NoZWNrIEFTIHBnX2NhdGFsb2cuaW50 NCsKKyAgICAgICAgIENPTlNUUkFJTlQgcmVncmVzc19hICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICArCisgICAgICAgICAgICAgICAgIENIRUNLIChWQUxVRSA8IDEwMCkgICAgICAgICAg ICAgICAgICAgICAgICAgKworICAgICAgICAgQ09OU1RSQUlOVCByZWdyZXNzX2IgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgQ0hFQ0sgKFZBTFVFID4g MTApOworKDEgcm93KQorCitDUkVBVEUgRE9NQUlOICJyZWdyZXNzX2RvbWFpbiB3aXRoIHNwYWNl IiBBUyBJTlQKKyAgICBDT05TVFJBSU5UIHJlZ3Jlc3NfYSBDSEVDSyAoVkFMVUUgPCAxMDApCisg ICAgQ09OU1RSQUlOVCAicmVncmVzc19Db25zdHJhaW50IEIiIENIRUNLIChWQUxVRSA+IDEwKQor ICAgIENPTlNUUkFJTlQgInJlZ3Jlc3NfQ29uc3RyYWludEMiIENIRUNLIChWQUxVRSAhPSA1NSk7 CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJyJyZWdyZXNzX2RvbWFpbiB3aXRoIHNwYWNlIicp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9k b21haW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBET01BSU4gcHVibGljLiJyZWdyZXNzX2RvbWFpbiB3aXRoIHNwYWNlIiBBUyBwZ19jYXRh bG9nLmludDQgQ09OU1RSQUlOVCByZWdyZXNzX2EgQ0hFQ0sgKChWQUxVRSA8IDEwMCkpIENPTlNU UkFJTlQgInJlZ3Jlc3NfQ29uc3RyYWludCBCIiBDSEVDSyAoKFZBTFVFID4gMTApKSBDT05TVFJB SU5UICJyZWdyZXNzX0NvbnN0cmFpbnRDIiBDSEVDSyAoKFZBTFVFIDw+IDU1KSk7CisoMSByb3cp CisKK1NFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgnInJlZ3Jlc3NfZG9tYWluIHdpdGggc3BhY2Ui JywgcHJldHR5ID0+IHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfZG9t YWluX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg RE9NQUlOIHB1YmxpYy4icmVncmVzc19kb21haW4gd2l0aCBzcGFjZSIgQVMgcGdfY2F0YWxvZy5p bnQ0KworICAgICAgICAgQ09OU1RSQUlOVCByZWdyZXNzX2EgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgIENIRUNLIChWQUxVRSA8IDEwMCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgIENPTlNUUkFJTlQgInJl Z3Jlc3NfQ29uc3RyYWludCBCIiAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAg ICAgICAgICBDSEVDSyAoVkFMVUUgPiAxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArCisgICAgICAgICBDT05TVFJBSU5UICJyZWdyZXNzX0NvbnN0cmFpbnRDIiAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgQ0hFQ0sgKFZBTFVFIDw+IDU1KTsK KygxIHJvdykKKworLS0gVGVzdCBlcnJvciBjYXNlcworU0VMRUNUIHBnX2dldF9kb21haW5fZGRs KCdyZWdyZXNzX25vbmV4aXN0ZW50X2RvbWFpbic6OnJlZ3R5cGUpOyAgLS0gc2hvdWxkIGZhaWwK K0VSUk9SOiAgdHlwZSAicmVncmVzc19ub25leGlzdGVudF9kb21haW4iIGRvZXMgbm90IGV4aXN0 CitMSU5FIDE6IFNFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgncmVncmVzc19ub25leGlzdGVudF9k b21haW4nOjpyZWd0eS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VM RUNUIHBnX2dldF9kb21haW5fZGRsKE5VTEwpOyAgLS0gc2hvdWxkIHJldHVybiBOVUxMCisgcGdf Z2V0X2RvbWFpbl9kZGwgCistLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVD VCBwZ19nZXRfZG9tYWluX2RkbChOVUxMLCBwcmV0dHkgPT4gdHJ1ZSk7ICAtLSBzaG91bGQgcmV0 dXJuIE5VTEwKKyBwZ19nZXRfZG9tYWluX2RkbCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygx IHJvdykKKworLS0gVGVzdCBkb21haW5zIHdpdGggbm8gY29uc3RyYWludHMKK0NSRUFURSBET01B SU4gcmVncmVzc19zaW1wbGVfZG9tYWluIEFTIHRleHQ7CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9k ZGwoJ3JlZ3Jlc3Nfc2ltcGxlX2RvbWFpbicpOworICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBE T01BSU4gcHVibGljLnJlZ3Jlc3Nfc2ltcGxlX2RvbWFpbiBBUyBwZ19jYXRhbG9nLnRleHQ7Ciso MSByb3cpCisKK1NFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgncmVncmVzc19zaW1wbGVfZG9tYWlu JywgcHJldHR5ID0+IHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfZG9tYWlu X2RkbCAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBET01BSU4gcHVi bGljLnJlZ3Jlc3Nfc2ltcGxlX2RvbWFpbiBBUyBwZ19jYXRhbG9nLnRleHQ7CisoMSByb3cpCisK Ky0tIFRlc3QgZG9tYWluIG92ZXIgYW5vdGhlciBkb21haW4KK0NSRUFURSBET01BSU4gcmVncmVz c19iYXNlX2RvbWFpbiBBUyB2YXJjaGFyKDEwKTsKK0NSRUFURSBET01BSU4gcmVncmVzc19kZXJp dmVkX2RvbWFpbiBBUyByZWdyZXNzX2Jhc2VfZG9tYWluIENIRUNLIChMRU5HVEgoVkFMVUUpID4g Myk7CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfZGVyaXZlZF9kb21haW4nKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBET01BSU4gcHVibGljLnJlZ3Jlc3NfZGVy aXZlZF9kb21haW4gQVMgcHVibGljLnJlZ3Jlc3NfYmFzZV9kb21haW4gQ09OU1RSQUlOVCByZWdy ZXNzX2Rlcml2ZWRfZG9tYWluX2NoZWNrIENIRUNLICgobGVuZ3RoKChWQUxVRSk6OnRleHQpID4g MykpOworKDEgcm93KQorCitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfZGVyaXZl ZF9kb21haW4nLCBwcmV0dHkgPT4gdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBET01BSU4gcHVibGljLnJlZ3Jlc3NfZGVyaXZlZF9kb21haW4g QVMgcHVibGljLnJlZ3Jlc3NfYmFzZV9kb21haW4rCisgICAgICAgICBDT05TVFJBSU5UIHJlZ3Jl c3NfZGVyaXZlZF9kb21haW5fY2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAg ICAgICAgICAgICAgQ0hFQ0sgKGxlbmd0aChWQUxVRTo6dGV4dCkgPiAzKTsKKygxIHJvdykKKwor LS0gVGVzdCBkb21haW4gd2l0aCBjb21wbGV4IGRlZmF1bHQgZXhwcmVzc2lvbnMKK0NSRUFURSBT RVFVRU5DRSByZWdyZXNzX3Rlc3Rfc2VxOworQ1JFQVRFIERPTUFJTiByZWdyZXNzX3NlcV9kb21h aW4gQVMgaW50IERFRkFVTFQgbmV4dHZhbCgncmVncmVzc190ZXN0X3NlcScpOworU0VMRUNUIHBn X2dldF9kb21haW5fZGRsKCdyZWdyZXNzX3NlcV9kb21haW4nKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBET01BSU4gcHVibGljLnJlZ3Jl c3Nfc2VxX2RvbWFpbiBBUyBwZ19jYXRhbG9nLmludDQgREVGQVVMVCBuZXh0dmFsKCdyZWdyZXNz X3Rlc3Rfc2VxJzo6cmVnY2xhc3MpOworKDEgcm93KQorCitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9k ZGwoJ3JlZ3Jlc3Nfc2VxX2RvbWFpbicsIHByZXR0eSA9PiB0cnVlKTsKKyAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIERPTUFJTiBwdWJsaWMucmVncmVzc19zZXFfZG9tYWluIEFTIHBnX2NhdGFsb2cuaW50NCsK KyAgICAgICAgIERFRkFVTFQgbmV4dHZhbCgncmVncmVzc190ZXN0X3NlcSc6OnJlZ2NsYXNzKTsK KygxIHJvdykKKworLS0gVGVzdCBkb21haW4gd2l0aCBhIHJlbmFtZWQgc2VxdWVuY2UgYXMgZGVm YXVsdCBleHByZXNzaW9uCitBTFRFUiBTRVFVRU5DRSByZWdyZXNzX3Rlc3Rfc2VxIFJFTkFNRSBU TyByZWdyZXNzX3Rlc3Rfc2VxX3JlbmFtZWQ7CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3Jl Z3Jlc3Nfc2VxX2RvbWFpbicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBET01BSU4gcHVibGljLnJlZ3Jlc3Nf c2VxX2RvbWFpbiBBUyBwZ19jYXRhbG9nLmludDQgREVGQVVMVCBuZXh0dmFsKCdyZWdyZXNzX3Rl c3Rfc2VxX3JlbmFtZWQnOjpyZWdjbGFzcyk7CisoMSByb3cpCisKKy0tIFRlc3QgZG9tYWluIHdp dGggdHlwZSBtb2RpZmllcnMKK0NSRUFURSBET01BSU4gcmVncmVzc19wcmVjaXNlX251bWVyaWMg QVMgbnVtZXJpYygxMCwyKSBERUZBVUxUIDAuMDA7CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwo J3JlZ3Jlc3NfcHJlY2lzZV9udW1lcmljJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBET01BSU4gcHVibGljLnJlZ3Jl c3NfcHJlY2lzZV9udW1lcmljIEFTIHBnX2NhdGFsb2cuIm51bWVyaWMiIERFRkFVTFQgMC4wMDsK KygxIHJvdykKKworU0VMRUNUIHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX3ByZWNpc2VfbnVt ZXJpYycsIHByZXR0eSA9PiB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0 X2RvbWFpbl9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgRE9NQUlOIHB1YmxpYy5yZWdyZXNzX3ByZWNpc2VfbnVtZXJpYyBBUyBwZ19jYXRhbG9n LiJudW1lcmljIisKKyAgICAgICAgIERFRkFVTFQgMC4wMDsKKygxIHJvdykKKworLS0gVGVzdCBk b21haW4gb3ZlciBhcnJheSB0eXBlCitDUkVBVEUgRE9NQUlOIHJlZ3Jlc3NfaW50X2FycmF5X2Rv bWFpbiBBUyBpbnRbXSBDSEVDSyAoYXJyYXlfbGVuZ3RoKFZBTFVFLCAxKSA8PSA1KTsKK1NFTEVD VCBwZ19nZXRfZG9tYWluX2RkbCgncmVncmVzc19pbnRfYXJyYXlfZG9tYWluJyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIERPTUFJTiBwdWJsaWMucmVncmVzc19pbnRfYXJyYXlfZG9tYWluIEFT IHBnX2NhdGFsb2cuX2ludDQgQ09OU1RSQUlOVCByZWdyZXNzX2ludF9hcnJheV9kb21haW5fY2hl Y2sgQ0hFQ0sgKChhcnJheV9sZW5ndGgoVkFMVUUsIDEpIDw9IDUpKTsKKygxIHJvdykKKworU0VM RUNUIHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX2ludF9hcnJheV9kb21haW4nLCBwcmV0dHkg PT4gdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2RvbWFpbl9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERPTUFJTiBwdWJsaWMu cmVncmVzc19pbnRfYXJyYXlfZG9tYWluIEFTIHBnX2NhdGFsb2cuX2ludDQrCisgICAgICAgICBD T05TVFJBSU5UIHJlZ3Jlc3NfaW50X2FycmF5X2RvbWFpbl9jaGVjayAgICAgICAgICAgICAgICAr CisgICAgICAgICAgICAgICAgIENIRUNLIChhcnJheV9sZW5ndGgoVkFMVUUsIDEpIDw9IDUpOwor KDEgcm93KQorCistLSBUZXN0IGRvbWFpbiBpbiBub24tcHVibGljIHNjaGVtYQorQ1JFQVRFIFND SEVNQSByZWdyZXNzX3Rlc3Rfc2NoZW1hOworQ1JFQVRFIERPTUFJTiByZWdyZXNzX3Rlc3Rfc2No ZW1hLnJlZ3Jlc3Nfc2NoZW1hX2RvbWFpbiBBUyB0ZXh0IERFRkFVTFQgJ3Rlc3QnOworU0VMRUNU IHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX3Rlc3Rfc2NoZW1hLnJlZ3Jlc3Nfc2NoZW1hX2Rv bWFpbicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9k b21haW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERPTUFJTiByZWdy ZXNzX3Rlc3Rfc2NoZW1hLnJlZ3Jlc3Nfc2NoZW1hX2RvbWFpbiBBUyBwZ19jYXRhbG9nLnRleHQg REVGQVVMVCAndGVzdCc6OnRleHQ7CisoMSByb3cpCisKKy0tIFRlc3QgZG9tYWluIHdpdGggbXVs dGlwbGUgY29uc3RyYWludCB0eXBlcyBjb21iaW5lZAorQ1JFQVRFIERPTUFJTiByZWdyZXNzX2Nv bXByZWhlbnNpdmVfZG9tYWluIEFTIHZhcmNoYXIoNTApCisgICAgTk9UIE5VTEwKKyAgICBERUZB VUxUICdkZWZhdWx0X3ZhbHVlJworICAgIENIRUNLIChMRU5HVEgoVkFMVUUpID49IDUpCisgICAg Q0hFQ0sgKFZBTFVFICF+ICdeXHMqJCcpOyAgLS0gbm90IGp1c3Qgd2hpdGVzcGFjZQorU0VMRUNU IHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX2NvbXByZWhlbnNpdmVfZG9tYWluJyk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfZG9t YWluX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBET01BSU4gcHVibGljLnJlZ3Jlc3NfY29tcHJlaGVuc2l2ZV9k b21haW4gQVMgcGdfY2F0YWxvZy4idmFyY2hhciIgREVGQVVMVCAnZGVmYXVsdF92YWx1ZSc6OmNo YXJhY3RlciB2YXJ5aW5nIENPTlNUUkFJTlQgcmVncmVzc19jb21wcmVoZW5zaXZlX2RvbWFpbl9u b3RfbnVsbCBOT1QgTlVMTCBDT05TVFJBSU5UIHJlZ3Jlc3NfY29tcHJlaGVuc2l2ZV9kb21haW5f Y2hlY2sgQ0hFQ0sgKChsZW5ndGgoKFZBTFVFKTo6dGV4dCkgPj0gNSkpIENPTlNUUkFJTlQgcmVn cmVzc19jb21wcmVoZW5zaXZlX2RvbWFpbl9jaGVjazEgQ0hFQ0sgKCgoVkFMVUUpOjp0ZXh0ICF+ ICdeXHMqJCc6OnRleHQpKTsKKygxIHJvdykKKworU0VMRUNUIHBnX2dldF9kb21haW5fZGRsKCdy ZWdyZXNzX2NvbXByZWhlbnNpdmVfZG9tYWluJywgcHJldHR5ID0+IHRydWUpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgRE9NQUlOIHB1YmxpYy5yZWdy ZXNzX2NvbXByZWhlbnNpdmVfZG9tYWluIEFTIHBnX2NhdGFsb2cuInZhcmNoYXIiKworICAgICAg ICAgREVGQVVMVCAnZGVmYXVsdF92YWx1ZSc6OmNoYXJhY3RlciB2YXJ5aW5nICAgICAgICAgICAg ICAgICAgICAgICArCisgICAgICAgICBDT05TVFJBSU5UIHJlZ3Jlc3NfY29tcHJlaGVuc2l2ZV9k b21haW5fbm90X251bGwgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgTk9UIE5V TEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAg ICAgICAgQ09OU1RSQUlOVCByZWdyZXNzX2NvbXByZWhlbnNpdmVfZG9tYWluX2NoZWNrICAgICAg ICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgIENIRUNLIChsZW5ndGgoVkFMVUU6OnRl eHQpID49IDUpICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgIENPTlNUUkFJTlQg cmVncmVzc19jb21wcmVoZW5zaXZlX2RvbWFpbl9jaGVjazEgICAgICAgICAgICAgICAgICAgKwor ICAgICAgICAgICAgICAgICBDSEVDSyAoVkFMVUU6OnRleHQgIX4gJ15ccyokJzo6dGV4dCk7Ciso MSByb3cpCisKKy0tIFRlc3QgZG9tYWluIG92ZXIgY29tcG9zaXRlIHR5cGUKK0NSRUFURSBUWVBF IHJlZ3Jlc3NfYWRkcmVzc190eXBlIEFTIChzdHJlZXQgdGV4dCwgY2l0eSB0ZXh0LCB6aXBjb2Rl IHRleHQpOworQ1JFQVRFIERPTUFJTiByZWdyZXNzX2FkZHJlc3NfZG9tYWluIEFTIHJlZ3Jlc3Nf YWRkcmVzc190eXBlIENIRUNLICgoVkFMVUUpLnppcGNvZGUgfiAnXlxkezV9JCcpOworU0VMRUNU IHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX2FkZHJlc3NfZG9tYWluJyk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgRE9NQUlOIHB1YmxpYy5yZWdy ZXNzX2FkZHJlc3NfZG9tYWluIEFTIHB1YmxpYy5yZWdyZXNzX2FkZHJlc3NfdHlwZSBDT05TVFJB SU5UIHJlZ3Jlc3NfYWRkcmVzc19kb21haW5fY2hlY2sgQ0hFQ0sgKCgoVkFMVUUpLnppcGNvZGUg fiAnXlxkezV9JCc6OnRleHQpKTsKKygxIHJvdykKKworU0VMRUNUIHBnX2dldF9kb21haW5fZGRs KCdyZWdyZXNzX2FkZHJlc3NfZG9tYWluJywgcHJldHR5ID0+IHRydWUpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBET01BSU4gcHVibGljLnJlZ3Jl c3NfYWRkcmVzc19kb21haW4gQVMgcHVibGljLnJlZ3Jlc3NfYWRkcmVzc190eXBlKworICAgICAg ICAgQ09OU1RSQUlOVCByZWdyZXNzX2FkZHJlc3NfZG9tYWluX2NoZWNrICAgICAgICAgICAgICAg ICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICBDSEVDSyAoKFZBTFVFKS56aXBjb2RlIH4g J15cZHs1fSQnOjp0ZXh0KTsKKygxIHJvdykKKworLS0gVGVzdCBkb21haW4gd2l0aCBOT1QgVkFM SUQgY29uc3RyYWludAorQ1JFQVRFIERPTUFJTiByZWdyZXNzX2RvbWFpbl9ub3RfdmFsaWQgQVMg aW50OworQUxURVIgRE9NQUlOIHJlZ3Jlc3NfZG9tYWluX25vdF92YWxpZCBBREQgQ09OU1RSQUlO VCBjaGVja19wb3NpdGl2ZSBDSEVDSyAoVkFMVUUgPiAwKSBOT1QgVkFMSUQ7CitTRUxFQ1QgcGdf Z2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfZG9tYWluX25vdF92YWxpZCcpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2RvbWFpbl9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERPTUFJTiBwdWJsaWMu cmVncmVzc19kb21haW5fbm90X3ZhbGlkIEFTIHBnX2NhdGFsb2cuaW50NDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKworIEFMVEVSIERPTUFJTiBwdWJsaWMucmVncmVz c19kb21haW5fbm90X3ZhbGlkIEFERCBDT05TVFJBSU5UIGNoZWNrX3Bvc2l0aXZlIENIRUNLICgo VkFMVUUgPiAwKSkgTk9UIFZBTElEOworKDEgcm93KQorCitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9k ZGwoJ3JlZ3Jlc3NfZG9tYWluX25vdF92YWxpZCcsIHByZXR0eSA9PiB0cnVlKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2RvbWFpbl9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERPTUFJTiBwdWJsaWMu cmVncmVzc19kb21haW5fbm90X3ZhbGlkIEFTIHBnX2NhdGFsb2cuaW50NDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICsKKyBBTFRFUiBET01BSU4gcHVibGljLnJlZ3Jlc3Nf ZG9tYWluX25vdF92YWxpZCBBREQgQ09OU1RSQUlOVCBjaGVja19wb3NpdGl2ZSBDSEVDSyAoVkFM VUUgPiAwKSBOT1QgVkFMSUQ7CisoMSByb3cpCisKKy0tIFRlc3QgZG9tYWluIHdpdGggbWl4IG9m IHZhbGlkIGFuZCBub3QgdmFsaWQgY29uc3RyYWludHMKK0NSRUFURSBET01BSU4gcmVncmVzc19k b21haW5fbWl4ZWQgQVMgaW50IENIRUNLIChWQUxVRSAhPSAwKTsKK0FMVEVSIERPTUFJTiByZWdy ZXNzX2RvbWFpbl9taXhlZCBBREQgQ09OU1RSQUlOVCBjaGVja19yYW5nZSBDSEVDSyAoVkFMVUUg QkVUV0VFTiAxIEFORCAxMDApIE5PVCBWQUxJRDsKK1NFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgn cmVncmVzc19kb21haW5fbWl4ZWQnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBET01B SU4gcHVibGljLnJlZ3Jlc3NfZG9tYWluX21peGVkIEFTIHBnX2NhdGFsb2cuaW50NCBDT05TVFJB SU5UIHJlZ3Jlc3NfZG9tYWluX21peGVkX2NoZWNrIENIRUNLICgoVkFMVUUgPD4gMCkpOysKKyBB TFRFUiBET01BSU4gcHVibGljLnJlZ3Jlc3NfZG9tYWluX21peGVkIEFERCBDT05TVFJBSU5UIGNo ZWNrX3JhbmdlIENIRUNLICgoKFZBTFVFID49IDEpIEFORCAoVkFMVUUgPD0gMTAwKSkpIE5PVCBW QUxJRDsKKygxIHJvdykKKworU0VMRUNUIHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX2RvbWFp bl9taXhlZCcsIHByZXR0eSA9PiB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBET01BSU4gcHVibGlj LnJlZ3Jlc3NfZG9tYWluX21peGVkIEFTIHBnX2NhdGFsb2cuaW50NCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgIENPTlNUUkFJ TlQgcmVncmVzc19kb21haW5fbWl4ZWRfY2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAg ICAgIENIRUNLIChWQUxVRSA8PiAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworIEFMVEVSIERP TUFJTiBwdWJsaWMucmVncmVzc19kb21haW5fbWl4ZWQgQUREIENPTlNUUkFJTlQgY2hlY2tfcmFu Z2UgQ0hFQ0sgKFZBTFVFID49IDEgQU5EIFZBTFVFIDw9IDEwMCkgTk9UIFZBTElEOworKDEgcm93 KQorCistLSBUZXN0IGRvbWFpbiB3aXRoIGNvbGxhdGlvbgorQ1JFQVRFIERPTUFJTiByZWdyZXNz X2RvbWFpbl93aXRoX2NvbGxhdGUgQVMgdGV4dCBDT0xMQVRFICJDIjsKK1NFTEVDVCBwZ19nZXRf ZG9tYWluX2RkbCgncmVncmVzc19kb21haW5fd2l0aF9jb2xsYXRlJyk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERPTUFJTiBw dWJsaWMucmVncmVzc19kb21haW5fd2l0aF9jb2xsYXRlIEFTIHBnX2NhdGFsb2cudGV4dCBDT0xM QVRFICJDIjsKKygxIHJvdykKKworU0VMRUNUIHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX2Rv bWFpbl93aXRoX2NvbGxhdGUnLCBwcmV0dHkgPT4gdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBET01BSU4gcHVibGljLnJlZ3Jlc3NfZG9tYWluX3dpdGhfY29sbGF0 ZSBBUyBwZ19jYXRhbG9nLnRleHQrCisgICAgICAgICBDT0xMQVRFICJDIjsKKygxIHJvdykKKwor LS0gQ2xlYW51cAorRFJPUCBET01BSU4gcmVncmVzc191c19wb3N0YWxfY29kZTsKK0RST1AgRE9N QUlOIHJlZ3Jlc3NfZG9tYWluX25vdF9udWxsOworRFJPUCBET01BSU4gcmVncmVzc19kb21haW5f Y2hlY2s7CitEUk9QIERPTUFJTiAicmVncmVzc19kb21haW4gd2l0aCBzcGFjZSI7CitEUk9QIERP TUFJTiByZWdyZXNzX2NvbXByZWhlbnNpdmVfZG9tYWluOworRFJPUCBET01BSU4gcmVncmVzc190 ZXN0X3NjaGVtYS5yZWdyZXNzX3NjaGVtYV9kb21haW47CitEUk9QIFNDSEVNQSByZWdyZXNzX3Rl c3Rfc2NoZW1hOworRFJPUCBET01BSU4gcmVncmVzc19hZGRyZXNzX2RvbWFpbjsKK0RST1AgVFlQ RSByZWdyZXNzX2FkZHJlc3NfdHlwZTsKK0RST1AgRE9NQUlOIHJlZ3Jlc3NfaW50X2FycmF5X2Rv bWFpbjsKK0RST1AgRE9NQUlOIHJlZ3Jlc3NfcHJlY2lzZV9udW1lcmljOworRFJPUCBET01BSU4g cmVncmVzc19zZXFfZG9tYWluOworRFJPUCBTRVFVRU5DRSByZWdyZXNzX3Rlc3Rfc2VxX3JlbmFt ZWQ7CitEUk9QIERPTUFJTiByZWdyZXNzX2Rlcml2ZWRfZG9tYWluOworRFJPUCBET01BSU4gcmVn cmVzc19iYXNlX2RvbWFpbjsKK0RST1AgRE9NQUlOIHJlZ3Jlc3Nfc2ltcGxlX2RvbWFpbjsKK0RS T1AgRE9NQUlOIHJlZ3Jlc3NfZG9tYWluX25vdF92YWxpZDsKK0RST1AgRE9NQUlOIHJlZ3Jlc3Nf ZG9tYWluX21peGVkOworRFJPUCBET01BSU4gcmVncmVzc19kb21haW5fd2l0aF9jb2xsYXRlOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0 L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5kZXggZjU2NDgyZmI5ZjEuLjhiNjg4MWMzOTdm IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKQEAgLTI4LDcgKzI4LDcgQEAgdGVzdDog c3RyaW5ncyBtZDUgbnVtZXJvbG9neSBwb2ludCBsc2VnIGxpbmUgYm94IHBhdGggcG9seWdvbiBj aXJjbGUgZGF0ZSB0aW1lIHQKICMgZ2VvbWV0cnkgZGVwZW5kcyBvbiBwb2ludCwgbHNlZywgbGlu ZSwgYm94LCBwYXRoLCBwb2x5Z29uLCBjaXJjbGUKICMgaG9yb2xvZ3kgZGVwZW5kcyBvbiBkYXRl LCB0aW1lLCB0aW1ldHosIHRpbWVzdGFtcCwgdGltZXN0YW1wdHosIGludGVydmFsCiAjIC0tLS0t LS0tLS0KLXRlc3Q6IGdlb21ldHJ5IGhvcm9sb2d5IHRzdHlwZXMgcmVnZXggdHlwZV9zYW5pdHkg b3ByX3Nhbml0eSBtaXNjX3Nhbml0eSBjb21tZW50cyBleHByZXNzaW9ucyB1bmljb2RlIHhpZCBt dmNjIGRhdGFiYXNlIHN0YXRzX2ltcG9ydAordGVzdDogZ2VvbWV0cnkgaG9yb2xvZ3kgdHN0eXBl cyByZWdleCB0eXBlX3Nhbml0eSBvcHJfc2FuaXR5IG1pc2Nfc2FuaXR5IGNvbW1lbnRzIGV4cHJl c3Npb25zIHVuaWNvZGUgeGlkIG12Y2MgZGF0YWJhc2Ugc3RhdHNfaW1wb3J0IG9iamVjdF9kZGwK IAogIyAtLS0tLS0tLS0tCiAjIExvYWQgaHVnZSBhbW91bnRzIG9mIGRhdGEKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL29iamVjdF9kZGwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9z cWwvb2JqZWN0X2RkbC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu Ljk4ZmIyMDAxN2VhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvb2Jq ZWN0X2RkbC5zcWwKQEAgLTAsMCArMSwxMzUgQEAKKy0tCistLSBUZXN0IGZvciB0aGUgZm9sbG93 aW5nIGZ1bmN0aW9ucyB0byBnZXQgb2JqZWN0IERETDoKKy0tIC0gcGdfZ2V0X2RvbWFpbl9kZGwK Ky0tCisKK0NSRUFURSBET01BSU4gcmVncmVzc191c19wb3N0YWxfY29kZSBBUyBURVhUCisgICAg REVGQVVMVCAnMDAwMDAnCisgICAgQ09OU1RSQUlOVCByZWdyZXNzX3VzX3Bvc3RhbF9jb2RlX2No ZWNrCisgICAgICAgIENIRUNLICgKKyAgICAgICAgICAgIFZBTFVFIH4gJ15cZHs1fSQnCisgICAg T1IgVkFMVUUgfiAnXlxkezV9LVxkezR9JCcKKyAgICApOworCitTRUxFQ1QgcGdfZ2V0X2RvbWFp bl9kZGwoJ3JlZ3Jlc3NfdXNfcG9zdGFsX2NvZGUnKTsKK1NFTEVDVCBwZ19nZXRfZG9tYWluX2Rk bCgncmVncmVzc191c19wb3N0YWxfY29kZScsIHByZXR0eSA9PiBmYWxzZSk7CitTRUxFQ1QgcGdf Z2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfdXNfcG9zdGFsX2NvZGUnLCBmYWxzZSk7CitTRUxFQ1Qg cGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfdXNfcG9zdGFsX2NvZGUnLCBwcmV0dHkgPT4gdHJ1 ZSk7CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfdXNfcG9zdGFsX2NvZGUnLCB0 cnVlKTsKKworCitDUkVBVEUgRE9NQUlOIHJlZ3Jlc3NfZG9tYWluX25vdF9udWxsIEFTIElOVCBO T1QgTlVMTDsKKworU0VMRUNUIHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX2RvbWFpbl9ub3Rf bnVsbCcpOworU0VMRUNUIHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX2RvbWFpbl9ub3RfbnVs bCcsIHByZXR0eSA9PiB0cnVlKTsKKworCitDUkVBVEUgRE9NQUlOIHJlZ3Jlc3NfZG9tYWluX2No ZWNrIEFTIElOVAorICAgIENPTlNUUkFJTlQgcmVncmVzc19hIENIRUNLIChWQUxVRSA8IDEwMCkK KyAgICBDT05TVFJBSU5UIHJlZ3Jlc3NfYiBDSEVDSyAoVkFMVUUgPiAxMCk7CisKK1NFTEVDVCBw Z19nZXRfZG9tYWluX2RkbCgncmVncmVzc19kb21haW5fY2hlY2snKTsKK1NFTEVDVCBwZ19nZXRf ZG9tYWluX2RkbCgncmVncmVzc19kb21haW5fY2hlY2snLCBwcmV0dHkgPT4gdHJ1ZSk7CisKKwor Q1JFQVRFIERPTUFJTiAicmVncmVzc19kb21haW4gd2l0aCBzcGFjZSIgQVMgSU5UCisgICAgQ09O U1RSQUlOVCByZWdyZXNzX2EgQ0hFQ0sgKFZBTFVFIDwgMTAwKQorICAgIENPTlNUUkFJTlQgInJl Z3Jlc3NfQ29uc3RyYWludCBCIiBDSEVDSyAoVkFMVUUgPiAxMCkKKyAgICBDT05TVFJBSU5UICJy ZWdyZXNzX0NvbnN0cmFpbnRDIiBDSEVDSyAoVkFMVUUgIT0gNTUpOworCitTRUxFQ1QgcGdfZ2V0 X2RvbWFpbl9kZGwoJyJyZWdyZXNzX2RvbWFpbiB3aXRoIHNwYWNlIicpOworU0VMRUNUIHBnX2dl dF9kb21haW5fZGRsKCcicmVncmVzc19kb21haW4gd2l0aCBzcGFjZSInLCBwcmV0dHkgPT4gdHJ1 ZSk7CisKKy0tIFRlc3QgZXJyb3IgY2FzZXMKK1NFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgncmVn cmVzc19ub25leGlzdGVudF9kb21haW4nOjpyZWd0eXBlKTsgIC0tIHNob3VsZCBmYWlsCitTRUxF Q1QgcGdfZ2V0X2RvbWFpbl9kZGwoTlVMTCk7ICAtLSBzaG91bGQgcmV0dXJuIE5VTEwKK1NFTEVD VCBwZ19nZXRfZG9tYWluX2RkbChOVUxMLCBwcmV0dHkgPT4gdHJ1ZSk7ICAtLSBzaG91bGQgcmV0 dXJuIE5VTEwKKworLS0gVGVzdCBkb21haW5zIHdpdGggbm8gY29uc3RyYWludHMKK0NSRUFURSBE T01BSU4gcmVncmVzc19zaW1wbGVfZG9tYWluIEFTIHRleHQ7CitTRUxFQ1QgcGdfZ2V0X2RvbWFp bl9kZGwoJ3JlZ3Jlc3Nfc2ltcGxlX2RvbWFpbicpOworU0VMRUNUIHBnX2dldF9kb21haW5fZGRs KCdyZWdyZXNzX3NpbXBsZV9kb21haW4nLCBwcmV0dHkgPT4gdHJ1ZSk7CisKKy0tIFRlc3QgZG9t YWluIG92ZXIgYW5vdGhlciBkb21haW4KK0NSRUFURSBET01BSU4gcmVncmVzc19iYXNlX2RvbWFp biBBUyB2YXJjaGFyKDEwKTsKK0NSRUFURSBET01BSU4gcmVncmVzc19kZXJpdmVkX2RvbWFpbiBB UyByZWdyZXNzX2Jhc2VfZG9tYWluIENIRUNLIChMRU5HVEgoVkFMVUUpID4gMyk7CitTRUxFQ1Qg cGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfZGVyaXZlZF9kb21haW4nKTsKK1NFTEVDVCBwZ19n ZXRfZG9tYWluX2RkbCgncmVncmVzc19kZXJpdmVkX2RvbWFpbicsIHByZXR0eSA9PiB0cnVlKTsK KworLS0gVGVzdCBkb21haW4gd2l0aCBjb21wbGV4IGRlZmF1bHQgZXhwcmVzc2lvbnMKK0NSRUFU RSBTRVFVRU5DRSByZWdyZXNzX3Rlc3Rfc2VxOworQ1JFQVRFIERPTUFJTiByZWdyZXNzX3NlcV9k b21haW4gQVMgaW50IERFRkFVTFQgbmV4dHZhbCgncmVncmVzc190ZXN0X3NlcScpOworU0VMRUNU IHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX3NlcV9kb21haW4nKTsKK1NFTEVDVCBwZ19nZXRf ZG9tYWluX2RkbCgncmVncmVzc19zZXFfZG9tYWluJywgcHJldHR5ID0+IHRydWUpOworCistLSBU ZXN0IGRvbWFpbiB3aXRoIGEgcmVuYW1lZCBzZXF1ZW5jZSBhcyBkZWZhdWx0IGV4cHJlc3Npb24K K0FMVEVSIFNFUVVFTkNFIHJlZ3Jlc3NfdGVzdF9zZXEgUkVOQU1FIFRPIHJlZ3Jlc3NfdGVzdF9z ZXFfcmVuYW1lZDsKK1NFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgncmVncmVzc19zZXFfZG9tYWlu Jyk7CisKKy0tIFRlc3QgZG9tYWluIHdpdGggdHlwZSBtb2RpZmllcnMKK0NSRUFURSBET01BSU4g cmVncmVzc19wcmVjaXNlX251bWVyaWMgQVMgbnVtZXJpYygxMCwyKSBERUZBVUxUIDAuMDA7CitT RUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfcHJlY2lzZV9udW1lcmljJyk7CitTRUxF Q1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfcHJlY2lzZV9udW1lcmljJywgcHJldHR5ID0+ IHRydWUpOworCistLSBUZXN0IGRvbWFpbiBvdmVyIGFycmF5IHR5cGUKK0NSRUFURSBET01BSU4g cmVncmVzc19pbnRfYXJyYXlfZG9tYWluIEFTIGludFtdIENIRUNLIChhcnJheV9sZW5ndGgoVkFM VUUsIDEpIDw9IDUpOworU0VMRUNUIHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX2ludF9hcnJh eV9kb21haW4nKTsKK1NFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgncmVncmVzc19pbnRfYXJyYXlf ZG9tYWluJywgcHJldHR5ID0+IHRydWUpOworCistLSBUZXN0IGRvbWFpbiBpbiBub24tcHVibGlj IHNjaGVtYQorQ1JFQVRFIFNDSEVNQSByZWdyZXNzX3Rlc3Rfc2NoZW1hOworQ1JFQVRFIERPTUFJ TiByZWdyZXNzX3Rlc3Rfc2NoZW1hLnJlZ3Jlc3Nfc2NoZW1hX2RvbWFpbiBBUyB0ZXh0IERFRkFV TFQgJ3Rlc3QnOworU0VMRUNUIHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX3Rlc3Rfc2NoZW1h LnJlZ3Jlc3Nfc2NoZW1hX2RvbWFpbicpOworCistLSBUZXN0IGRvbWFpbiB3aXRoIG11bHRpcGxl IGNvbnN0cmFpbnQgdHlwZXMgY29tYmluZWQKK0NSRUFURSBET01BSU4gcmVncmVzc19jb21wcmVo ZW5zaXZlX2RvbWFpbiBBUyB2YXJjaGFyKDUwKQorICAgIE5PVCBOVUxMCisgICAgREVGQVVMVCAn ZGVmYXVsdF92YWx1ZScKKyAgICBDSEVDSyAoTEVOR1RIKFZBTFVFKSA+PSA1KQorICAgIENIRUNL IChWQUxVRSAhfiAnXlxzKiQnKTsgIC0tIG5vdCBqdXN0IHdoaXRlc3BhY2UKK1NFTEVDVCBwZ19n ZXRfZG9tYWluX2RkbCgncmVncmVzc19jb21wcmVoZW5zaXZlX2RvbWFpbicpOworU0VMRUNUIHBn X2dldF9kb21haW5fZGRsKCdyZWdyZXNzX2NvbXByZWhlbnNpdmVfZG9tYWluJywgcHJldHR5ID0+ IHRydWUpOworCistLSBUZXN0IGRvbWFpbiBvdmVyIGNvbXBvc2l0ZSB0eXBlCitDUkVBVEUgVFlQ RSByZWdyZXNzX2FkZHJlc3NfdHlwZSBBUyAoc3RyZWV0IHRleHQsIGNpdHkgdGV4dCwgemlwY29k ZSB0ZXh0KTsKK0NSRUFURSBET01BSU4gcmVncmVzc19hZGRyZXNzX2RvbWFpbiBBUyByZWdyZXNz X2FkZHJlc3NfdHlwZSBDSEVDSyAoKFZBTFVFKS56aXBjb2RlIH4gJ15cZHs1fSQnKTsKK1NFTEVD VCBwZ19nZXRfZG9tYWluX2RkbCgncmVncmVzc19hZGRyZXNzX2RvbWFpbicpOworU0VMRUNUIHBn X2dldF9kb21haW5fZGRsKCdyZWdyZXNzX2FkZHJlc3NfZG9tYWluJywgcHJldHR5ID0+IHRydWUp OworCistLSBUZXN0IGRvbWFpbiB3aXRoIE5PVCBWQUxJRCBjb25zdHJhaW50CitDUkVBVEUgRE9N QUlOIHJlZ3Jlc3NfZG9tYWluX25vdF92YWxpZCBBUyBpbnQ7CitBTFRFUiBET01BSU4gcmVncmVz c19kb21haW5fbm90X3ZhbGlkIEFERCBDT05TVFJBSU5UIGNoZWNrX3Bvc2l0aXZlIENIRUNLIChW QUxVRSA+IDApIE5PVCBWQUxJRDsKK1NFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgncmVncmVzc19k b21haW5fbm90X3ZhbGlkJyk7CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfZG9t YWluX25vdF92YWxpZCcsIHByZXR0eSA9PiB0cnVlKTsKKworLS0gVGVzdCBkb21haW4gd2l0aCBt aXggb2YgdmFsaWQgYW5kIG5vdCB2YWxpZCBjb25zdHJhaW50cworQ1JFQVRFIERPTUFJTiByZWdy ZXNzX2RvbWFpbl9taXhlZCBBUyBpbnQgQ0hFQ0sgKFZBTFVFICE9IDApOworQUxURVIgRE9NQUlO IHJlZ3Jlc3NfZG9tYWluX21peGVkIEFERCBDT05TVFJBSU5UIGNoZWNrX3JhbmdlIENIRUNLIChW QUxVRSBCRVRXRUVOIDEgQU5EIDEwMCkgTk9UIFZBTElEOworU0VMRUNUIHBnX2dldF9kb21haW5f ZGRsKCdyZWdyZXNzX2RvbWFpbl9taXhlZCcpOworU0VMRUNUIHBnX2dldF9kb21haW5fZGRsKCdy ZWdyZXNzX2RvbWFpbl9taXhlZCcsIHByZXR0eSA9PiB0cnVlKTsKKworLS0gVGVzdCBkb21haW4g d2l0aCBjb2xsYXRpb24KK0NSRUFURSBET01BSU4gcmVncmVzc19kb21haW5fd2l0aF9jb2xsYXRl IEFTIHRleHQgQ09MTEFURSAiQyI7CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3Nf ZG9tYWluX3dpdGhfY29sbGF0ZScpOworU0VMRUNUIHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNz X2RvbWFpbl93aXRoX2NvbGxhdGUnLCBwcmV0dHkgPT4gdHJ1ZSk7CisKKy0tIENsZWFudXAKK0RS T1AgRE9NQUlOIHJlZ3Jlc3NfdXNfcG9zdGFsX2NvZGU7CitEUk9QIERPTUFJTiByZWdyZXNzX2Rv bWFpbl9ub3RfbnVsbDsKK0RST1AgRE9NQUlOIHJlZ3Jlc3NfZG9tYWluX2NoZWNrOworRFJPUCBE T01BSU4gInJlZ3Jlc3NfZG9tYWluIHdpdGggc3BhY2UiOworRFJPUCBET01BSU4gcmVncmVzc19j b21wcmVoZW5zaXZlX2RvbWFpbjsKK0RST1AgRE9NQUlOIHJlZ3Jlc3NfdGVzdF9zY2hlbWEucmVn cmVzc19zY2hlbWFfZG9tYWluOworRFJPUCBTQ0hFTUEgcmVncmVzc190ZXN0X3NjaGVtYTsKK0RS T1AgRE9NQUlOIHJlZ3Jlc3NfYWRkcmVzc19kb21haW47CitEUk9QIFRZUEUgcmVncmVzc19hZGRy ZXNzX3R5cGU7CitEUk9QIERPTUFJTiByZWdyZXNzX2ludF9hcnJheV9kb21haW47CitEUk9QIERP TUFJTiByZWdyZXNzX3ByZWNpc2VfbnVtZXJpYzsKK0RST1AgRE9NQUlOIHJlZ3Jlc3Nfc2VxX2Rv bWFpbjsKK0RST1AgU0VRVUVOQ0UgcmVncmVzc190ZXN0X3NlcV9yZW5hbWVkOworRFJPUCBET01B SU4gcmVncmVzc19kZXJpdmVkX2RvbWFpbjsKK0RST1AgRE9NQUlOIHJlZ3Jlc3NfYmFzZV9kb21h aW47CitEUk9QIERPTUFJTiByZWdyZXNzX3NpbXBsZV9kb21haW47CitEUk9QIERPTUFJTiByZWdy ZXNzX2RvbWFpbl9ub3RfdmFsaWQ7CitEUk9QIERPTUFJTiByZWdyZXNzX2RvbWFpbl9taXhlZDsK K0RST1AgRE9NQUlOIHJlZ3Jlc3NfZG9tYWluX3dpdGhfY29sbGF0ZTsKLS0gCjIuNTAuMSAoQXBw bGUgR2l0LTE1NSkKCg== --0000000000008a51b006433ce58c--