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 1wcGtE-003Dg4-1w for pgsql-bugs@arkaria.postgresql.org; Wed, 24 Jun 2026 06:15:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wcGtC-00Fiie-0j for pgsql-bugs@arkaria.postgresql.org; Wed, 24 Jun 2026 06:15:10 +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 1wcGtB-00FiiW-2f for pgsql-bugs@lists.postgresql.org; Wed, 24 Jun 2026 06:15:09 +0000 Received: from mail-ot1-x332.google.com ([2607:f8b0:4864:20::332]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wcGt9-000000023Nk-1bxy for pgsql-bugs@lists.postgresql.org; Wed, 24 Jun 2026 06:15:09 +0000 Received: by mail-ot1-x332.google.com with SMTP id 46e09a7af769-7e93e0a3364so496529a34.3 for ; Tue, 23 Jun 2026 23:15:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782281705; cv=none; d=google.com; s=arc-20240605; b=NFMS7ZWVaRoTPBZafETcSnc8d/COJ2f0Mxk7Sus2sUwGqiAgBdPwaViRZ/z5RuWis4 kyEVUOFQZbVikQ2Udhk61RDiOCY12/F2G4oS6pP07WvV+cwkBXV/FpvqvweeZNtYcZhF 52e7m4xiIM/0IsYxVE9pKvvMcGb5zRfmrXTNvqxN0QXfadNSpXK+jUqXLcmUopyz9EH2 PpinNhdZrLIaxK5MRU8k3Ls7EZmjMSNARDPec+ZOVQsczW07ipaQymf1+8Zv4648DJil oM1PDqzJqYtY42XOPKCZ1jE4NnFE0yHfWw7AL4vjatNAqfQDsqY9qr/zPcj8DfwFPrAO CzKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=spOdS1Dgwpindlo/iyumtGkB/7coFOaaxHvFp8taRG0=; fh=eFERFp2Su5BT2B2wWQj6V9BEpe7q6lBpO0+VTCJDckg=; b=AhANR3CIbOAN9u/KgGtp90i1dlNO13RY0JWoYW8nhb7wUfneVdOxiSkku+xmR1vHZ1 PY/7V8ljwO2Ua+6/Tu33U6Wabu3ctNSBwYhDPabPFxTKNwQfF6yteah1U9WMHMs92ByR m8Up+yBrsWr8+XGLWrnvrpHYJg3mrSCytF/3BNk5jZbjucYtO1LWIlSBou4LUIcwHK7h jDVkLtK9O3ehTsgezFRamZg0qUn0JJuz+uhLjZKHkPpSS4Ip/1O9k7Kl/kuTa6NHyAE7 KVSdSZ4SUHq6VvbLwtTIC+y/WbFXIRUx2DD/NZZQ6e2we/NbnfYYNG5kuBZadmDZrlB1 /EHQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782281705; x=1782886505; darn=lists.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=spOdS1Dgwpindlo/iyumtGkB/7coFOaaxHvFp8taRG0=; b=F9EkLUpaVjWWhsVAPRd722k+0U8rsL9S5Z2Ol/2y2vGAl0A7G4AP/irdQYtpSJINcM JXJrSMjvphaqffFQij2JE2VcgiVJEzQFCQDMqwHpLMAYRqnWO9XNnqh9A2riA8Ef+kCC X/j+z62IE91hpy1G/MexPFBbc//xnelGI+99Z7N0idQlaHZZSY3bnh92SHo3wcXs2cSp w82+ay4E6OHRPUUsrs5mwMl6TdxGkcu+cE240gUr30tQxpFsABSV3/8pXie8y9nQZCyy 8atEFq8ozVRz4+dOJdGyrTnQc/cc2glrbSEjHl13tgewzgt78R6N1NT8Cof0km48ulAn 1Lhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782281705; x=1782886505; 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=spOdS1Dgwpindlo/iyumtGkB/7coFOaaxHvFp8taRG0=; b=EJ8kSRSzLl1M2nUbtrqSXPftLhskBhWXJrvonnSKtCDPA/0et3RGb8M3jaealNqlVP ENs+a0OEmuhI/HS2UY7OZZnyNGJztLmiBZ6E2omm2c9RZSM/LdD8bnZvKKrGaEbgs2/w cWjLlL4Wxn38Gkq3e8LQsc9H7IHOdTR/Jw3dxIWo4VcaBnPSaa/MvDjcIVC+HbAPQvls HnaGuA9wRqaVNUVd2zSf35Lwu5LLkh5QRMSDCAqM+xOJiyL776bBJUk1gf/f5pPD+18N JfMzsDNMGDJwHPl06s3hWu6gFhzr/2EahAkKWQXHMFC+PpNOh0ZRyqs6DWTCKS1x4bZX wehg== X-Forwarded-Encrypted: i=1; AFNElJ94C9fFDIQBpLkCQH6kBD9jfHeTSoPpzi5x99onmT95JUm81WLfpWdGxp5xHMzonKLr5pO9Z+KHTB3V@lists.postgresql.org X-Gm-Message-State: AOJu0YyyRa0wuEqfDIuZtkp39NMVJyFvMlPzBUWceHx8HCVtjJCPNXnE Qcustbs79Z6YZn1w9UzVrJPB0lHftK1beST8z+dcLfvVJJ7yAznEvAwpoSJKAFrvH8Mbt/9yaH/ 7TDbN+XPd5GLxoUUTfKc1qjDGbX3Nt3cE23mYpuU= X-Gm-Gg: AfdE7clPbGQnV/K1AfY89Zuf7FGF8/pGXSDPKp6wa66LlFdtZD8ahvwj77+TT21BBZc 2NmgztabnA30QRJHrbZPtdAHcvvS2jjhkjkCaUSxfsMWzFZKolF0vJnd1IK7H6oIgSj9+wi21Za YGf49mbVqERlVcSAtyR8P2RQk7XUj2+UqSL3CWQ+rdHWyLQiPGJYEC2uINjC1gg48QeTnEXa9cq fUN5Y/MTdy/bmvA8u1VcgMs0HNXS7tEu3k55oZG2ebCN9MjUQ4O7wcQbzPSX+GmX8ocLmN4v3Ve SXtBPk1KlLNDo8hhFT5LEWVUoOTdt7dyNJvUbllxuqa/oFWHHlOA9E/FbieD/MiptBd6sVfr765 xDgevKwKt/qdDfgX8 X-Received: by 2002:a05:6808:1a13:b0:48b:626c:77b0 with SMTP id 5614622812f47-49078f88034mr1367181b6e.26.1782281705016; Tue, 23 Jun 2026 23:15:05 -0700 (PDT) MIME-Version: 1.0 References: <19483-80de42dc4e62cfd6@postgresql.org> <104812.1780847519@sss.pgh.pa.us> <5184088806e70ed5db7e83bd6540a016b3802c1d.camel@cybertec.at> <0d7531c192859057c6aad54c89a8d453376bd00c.camel@cybertec.at> <592839.1782153054@sss.pgh.pa.us> In-Reply-To: From: =?UTF-8?Q?H=C3=BCseyin_Demir?= Date: Wed, 24 Jun 2026 08:14:53 +0200 X-Gm-Features: AVVi8CfdNrr9dpLJFRZzoA0KzoVScgg303vgUJAgJbXf7PkZz4XJjAWbwys5w-M Message-ID: Subject: Re: BUG #19483: pg_upgrade fails with orphan records in pg_init_priv catalog table To: Tom Lane , Laurenz Albe Cc: Greg Sabino Mullane , pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000eae5950654f9cb6a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000eae5950654f9cb6a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, You can see the attached v5 patch. Basically, v5 solves the problem by adding dangling-role filtering directly inside buildACLCommands(). A role name that consists entirely of digits is potentially a dangling OID reference and it resolves by querying pg_authid once at the start of the dump for any legitimate all-digit role names. The sorted list is passed as new digitRoles/nDigitRoles parameters to buildACLCommands(), which skips any REVOKE or GRANT item whose grantee or grantor matches a dangling reference. I defined a static called is_dangling_role_ref in dumputils.c and introduced two new parameters to buildACLCommands to eliminate the dangling grantee or grantor objects. When it comes to patching the HEAD I'm going to create and submit another small patch. Regards, Demir. H=C3=BCseyin Demir , 23 Haz 2026 Sal, 10:32 tarihinde =C5=9Funu yazd=C4=B1: > > > I have a more pressing concern: has any performance testing been > > done on this? It looks like it'd be absolutely catastrophic for > > pg_dump performance on databases with lots of objects. > > > > The implementation direction I'd been vaguely imagining was for > > pg_dump's buildACLCommands() to drop any AclItems that contain > > dangling role references (ie, numeric OIDs where a role name > > should be). If the given role name contains any non-digit > > characters then it's certainly not dangling, so most of the time > > this'd be a very cheap check. However, if somebody does > > > > CREATE USER "007"; > > GRANT ALL ON TABLE mi6_operations TO "007"; > > > > we mustn't get fooled by that. The backend is doing us no favors by > > not making numeric OIDs visibly different from all-digit role names > > in AclItems. In HEAD I'd advocate fixing that on the server side > > (as attached), but we can't assume that a back-branch server has such > > a fix. What we could do with an old server is issue a query (once per > > pg_dump run) to collect all the valid all-digit role names, which > > should surely be a short list in most databases, and then filter > > against that within buildACLCommands(). > > I see the approach and it's a valid concern. I can create a v5 to > comply with your suggestion and can create a new patch to be applied > to the current HEAD. > > After preparing the v5 I'm going to create a new CF to be patched to > HEAD since this fix will be backpatched. > > Regards, > Demir. --000000000000eae5950654f9cb6a Content-Type: application/octet-stream; name="v5-0001-pg_dump-skip-dangling-initprivs.patch" Content-Disposition: attachment; filename="v5-0001-pg_dump-skip-dangling-initprivs.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqrohgom0 RnJvbSA3Mjc5ZWFhYzQ0MTZjOTk1MjYxNmI4OTA4YmMxZjgyODY3NjRhMDNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIdXNleWluIERlbWlyIDxodXNleWluLmQzckBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMjQgSnVuIDIwMjYgMDc6Mzg6NTEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBw Z19kdW1wOiBza2lwIHBnX2luaXRfcHJpdnMgZW50cmllcyBmb3Igbm9uLWV4aXN0ZW50IHJvbGVz CgpwZ19pbml0X3ByaXZzLCBpbnRyb2R1Y2VkIGluIFBvc3RncmVTUUwgOS42LCByZWNvcmRzIHRo ZSAiaW5pdGlhbCIKcHJpdmlsZWdlIHN0YXRlIG9mIG9iamVjdHMgLS0gZWl0aGVyIHNldCBieSBp bml0ZGIgKHByaXZ0eXBlICdpJykgb3IgYnkKQ1JFQVRFIEVYVEVOU0lPTiBzY3JpcHRzIChwcml2 dHlwZSAnZScpLiAgcGdfZHVtcCByZWFkcyB0aGlzIGNhdGFsb2cgdG8KZGV0ZXJtaW5lIHdoaWNo IEFDTCBjaGFuZ2VzIHRoZSB1c2VyIG1hZGUgb24gdG9wIG9mIHRoZSBkZWZhdWx0cywgc28gaXQK Y2FuIGVtaXQgdGhlIHJpZ2h0IEdSQU5UL1JFVk9LRSBzdGF0ZW1lbnRzLgoKQmVmb3JlIGNvbW1p dCA1MzQyODc0MDM5MSwgUG9zdGdyZVNRTCBkaWQgbm90IHJlY29yZCByb2xlIGRlcGVuZGVuY2ll cwpmb3IgcGdfaW5pdF9wcml2cyBlbnRyaWVzIGluIHBnX3NoZGVwZW5kLCBtZWFuaW5nIERST1Ag Uk9MRSBjb3VsZCBsZWF2ZQpiZWhpbmQgQUNMIGVudHJpZXMgd2hvc2UgZ3JhbnRlZSBvciBncmFu dG9yIE9JRCBubyBsb25nZXIgZXhpc3RzIGluCnBnX2F1dGhpZC4gIENyb3NzLWNsdXN0ZXIgcmVz dG9yZXMgY2FuIHByb2R1Y2UgdGhlIHNhbWUgc2l0dWF0aW9uIGV2ZW4Kb24gbW9kZXJuIHJlbGVh c2VzLgoKRGFuZ2xpbmcgZW50cmllcyBjYXVzZWQgcGdfZHVtcCB0byBlbWl0IGludmFsaWQgU1FM IHN1Y2ggYXMKIkdSQU5UIC4uLiBUTyAiODc4NjgiIiBvciAiU0VUIFNFU1NJT04gQVVUSE9SSVpB VElPTiAiODc4NjgiIiB3aXRoCmEgbnVtZXJpYyBPSUQgYXMgcm9sZSBuYW1lLCB3aGljaCBmYWls cyBvbiByZXN0b3JlIG9yIHBnX3VwZ3JhZGUuCgpBIGZ1cnRoZXIgaXNzdWU6IGdldEFnZ3JlZ2F0 ZXMoKSBhbmQgZ2V0RnVuY3MoKSB1c2UgcGlwLmluaXRwcml2cwp1bmZpbHRlcmVkIGluIHRoZWly IFdIRVJFIGNsYXVzZS4gIFdoZW4gYWxsIGluaXRwcml2cyBlbnRyaWVzIGZvciBhbgpvYmplY3Qg YXJlIGRhbmdsaW5nIGFuZCB0aGUgbGl2ZSBwcm9hY2wgaXMgTlVMTCwgdGhlIGNvbXBhcmlzb24K InAucHJvYWNsIElTIERJU1RJTkNUIEZST00gcGlwLmluaXRwcml2cyIgZXZhbHVhdGVzIHRvIHRy dWUsIGNhdXNpbmcKdGhlIG9iamVjdCB0byBiZSBzZWxlY3RlZCBmb3IgQUNMIG91dHB1dC4gIGR1 bXBBQ0woKSB0aGVuIGNvbXB1dGVzIHRoZQpkZWx0YSBmcm9tIGFjbGRlZmF1bHQgdG8gTlVMTCBh bmQgZW1pdHMgYSBzcHVyaW91cyBSRVZPS0UgdGhhdCBicmVha3MKcmVzdG9yZS4KCkZpeCBieSBh ZGRpbmcgZGFuZ2xpbmctcm9sZSBmaWx0ZXJpbmcgZGlyZWN0bHkgaW5zaWRlIGJ1aWxkQUNMQ29t bWFuZHMoKS4KQSByb2xlIG5hbWUgdGhhdCBjb25zaXN0cyBlbnRpcmVseSBvZiBkaWdpdHMgaXMg cG90ZW50aWFsbHkgYSBkYW5nbGluZwpPSUQgcmVmZXJlbmNlOyB3ZSByZXNvbHZlIHRoZSBhbWJp Z3VpdHkgYnkgcXVlcnlpbmcgcGdfYXV0aGlkIG9uY2UgYXQKdGhlIHN0YXJ0IG9mIHRoZSBkdW1w IGZvciBhbnkgbGVnaXRpbWF0ZSBhbGwtZGlnaXQgcm9sZSBuYW1lcyAobm9ybWFsbHkKbm9uZSBl eGlzdCkuICBUaGUgc29ydGVkIGxpc3QgaXMgcGFzc2VkIGFzIG5ldyBkaWdpdFJvbGVzL25EaWdp dFJvbGVzCnBhcmFtZXRlcnMgdG8gYnVpbGRBQ0xDb21tYW5kcygpLCB3aGljaCBza2lwcyBhbnkg UkVWT0tFIG9yIEdSQU5UIGl0ZW0Kd2hvc2UgZ3JhbnRlZSBvciBncmFudG9yIG1hdGNoZXMgYSBk YW5nbGluZyByZWZlcmVuY2UuCgpUaGlzIGFwcHJvYWNoIGFkZHMgemVybyBvdmVyaGVhZCBpbiB0 aGUgY29tbW9uIGNhc2UgKG1vc3Qgcm9sZSBuYW1lcwpjb250YWluIG5vbi1kaWdpdCBjaGFyYWN0 ZXJzIGFuZCBhcmUgcmVqZWN0ZWQgYXQgdGhlIGZpcnN0IGNoYXJhY3RlciksCmFuZCBjb25maW5l cyB0aGUgZml4IHRvIHRoZSBzaW5nbGUgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgYWxsIEFDTApv dXRwdXQuCgpBIHNpbWlsYXIgaXNzdWUgaW4gcGdfZHVtcGFsbCB3YXMgZml4ZWQgYnkgY29tbWl0 IDc0YjQ0MzhhNzBiLgoKVGhpcyBidWcgaGFzIGV4aXN0ZWQgc2luY2UgcGdfaW5pdF9wcml2cyB3 YXMgaW50cm9kdWNlZCBpbiA5LjYuCkJhY2twYXRjaCB0byAxNCAob2xkZXN0IGN1cnJlbnRseSBz dXBwb3J0ZWQgYnJhbmNoKS4KCkF1dGhvcjogSHVzZXlpbiBEZW1pciA8aHVzZXlpbi5kM3JAZ21h aWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzE5NDgzLTgwZGU0MmRjNGU2 MmNmZDYlNDBwb3N0Z3Jlc3FsLm9yZwpCYWNrcGF0Y2gtdGhyb3VnaDogMTQKLS0tCiBzcmMvYmlu L3BnX2R1bXAvZHVtcHV0aWxzLmMgICAgICAgICAgICAgICAgICAgfCAgNTIgKysrKystCiBzcmMv YmluL3BnX2R1bXAvZHVtcHV0aWxzLmggICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9i aW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICB8ICAyOSArKystCiBzcmMv YmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jICAgICAgICAgICAgICAgICAgfCAgIDYgKy0KIC4uLi90 LzAwOF9wZ19kdW1wX2RhbmdsaW5nX2luaXRwcml2cy5wbCAgICAgICB8IDE2MiArKysrKysrKysr KysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMjQ1IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL3QvMDA4X3BnX2R1bXBfZGFu Z2xpbmdfaW5pdHByaXZzLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2R1bXB1dGls cy5jIGIvc3JjL2Jpbi9wZ19kdW1wL2R1bXB1dGlscy5jCmluZGV4IGRmYjFmNjAzYTQzLi45NTZl MTU5NzcxNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2R1bXB1dGlscy5jCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9kdW1wdXRpbHMuYwpAQCAtMjgsNiArMjgsOCBAQCBzdGF0aWMgYm9vbCBw YXJzZUFjbEl0ZW0oY29uc3QgY2hhciAqaXRlbSwgY29uc3QgY2hhciAqdHlwZSwKIAkJCQkJCSBQ UUV4cEJ1ZmZlciBncmFudGVlLCBQUUV4cEJ1ZmZlciBncmFudG9yLAogCQkJCQkJIFBRRXhwQnVm ZmVyIHByaXZzLCBQUUV4cEJ1ZmZlciBwcml2c3dnbyk7CiBzdGF0aWMgY2hhciAqZGVxdW90ZUFj bFVzZXJOYW1lKFBRRXhwQnVmZmVyIG91dHB1dCwgY2hhciAqaW5wdXQpOworc3RhdGljIGJvb2wg aXNfZGFuZ2xpbmdfcm9sZV9yZWYoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJCQkJIGNoYXIgKipk aWdpdFJvbGVzLCBpbnQgbkRpZ2l0Um9sZXMpOwogc3RhdGljIHZvaWQgQWRkQWNsKFBRRXhwQnVm ZmVyIGFjbGJ1ZiwgY29uc3QgY2hhciAqa2V5d29yZCwKIAkJCQkgICBjb25zdCBjaGFyICpzdWJu YW1lKTsKIApAQCAtNjksNiArNzEsNDAgQEAgc2FuaXRpemVfbGluZShjb25zdCBjaGFyICpzdHIs IGJvb2wgd2FudF9oeXBoZW4pCiB9CiAKIAorLyoKKyAqIGlzX2RhbmdsaW5nX3JvbGVfcmVmCisg KgkJUmV0dXJuIHRydWUgaWYgJ25hbWUnIGxvb2tzIGxpa2UgYSBkYW5nbGluZyBudW1lcmljIE9J RCByZWZlcmVuY2UuCisgKgorICogYWNsaXRlbW91dCgpIGZhbGxzIGJhY2sgdG8gcHJpbnRpbmcg YSBtaXNzaW5nIHJvbGUncyBPSUQgYXMgYmFyZSBkZWNpbWFsCisgKiBkaWdpdHMgd2hlbiBpdCBj YW5ub3QgZmluZCB0aGUgcm9sZSBpbiBwZ19hdXRoaWQuICBBbnkgbmFtZSB0aGF0IGlzIG5vdAor ICogYWxsLWRlY2ltYWwgaXMgY2VydGFpbmx5IGEgcmVhbCByb2xlIG5hbWUuICBGb3IgYWxsLWRl Y2ltYWwgbmFtZXMgd2UKKyAqIHJlc29sdmUgdGhlIGFtYmlndWl0eSBhZ2FpbnN0IGRpZ2l0Um9s ZXNbXSwgYSBzb3J0ZWQgYXJyYXkgb2Ygcm9sbmFtZXMKKyAqIGZyb20gcGdfYXV0aGlkIHRoYXQg Y29uc2lzdCBlbnRpcmVseSBvZiBkaWdpdHMgKGZldGNoZWQgb25jZSBwZXIgcnVuKS4KKyAqIElm IGRpZ2l0Um9sZXMgaXMgTlVMTCB3ZSBjb25zZXJ2YXRpdmVseSBhc3N1bWUgYWxsLWRpZ2l0IG5h bWVzIGFyZSB2YWxpZC4KKyAqIFRoZSBlbXB0eSBzdHJpbmcgbWVhbnMgUFVCTElDIGFuZCBpcyBu ZXZlciBkYW5nbGluZy4KKyAqLworc3RhdGljIGJvb2wKK2lzX2RhbmdsaW5nX3JvbGVfcmVmKGNv bnN0IGNoYXIgKm5hbWUsIGNoYXIgKipkaWdpdFJvbGVzLCBpbnQgbkRpZ2l0Um9sZXMpCit7CisJ Y29uc3QgY2hhciAqcDsKKworCS8qIEVtcHR5IHN0cmluZyBtZWFucyBQVUJMSUMgLS0gbmV2ZXIg ZGFuZ2xpbmcgKi8KKwlpZiAoKm5hbWUgPT0gJ1wwJykKKwkJcmV0dXJuIGZhbHNlOworCisJLyog RmFzdCBwYXRoOiBhbnkgbm9uLWRpZ2l0IGNoYXJhY3RlciBtZWFucyBpdCBpcyBhIHJlYWwgcm9s ZSBuYW1lICovCisJZm9yIChwID0gbmFtZTsgKnA7IHArKykKKwkJaWYgKCFpc2RpZ2l0KCh1bnNp Z25lZCBjaGFyKSAqcCkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBBbGwtZGlnaXQgbmFtZTog cmVzb2x2ZSBhbWJpZ3VpdHkgYWdhaW5zdCB0aGUga25vd24tdmFsaWQgbGlzdCAqLworCWlmIChk aWdpdFJvbGVzID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsJCQkvKiBubyBsaXN0IHN1cHBsaWVk LCBhc3N1bWUgdmFsaWQgKi8KKworCXJldHVybiBic2VhcmNoKCZuYW1lLCBkaWdpdFJvbGVzLCBu RGlnaXRSb2xlcywKKwkJCQkgICBzaXplb2YoY2hhciAqKSwgcGdfcXNvcnRfc3RyY21wKSA9PSBO VUxMOworfQorCiAvKgogICogQnVpbGQgR1JBTlQvUkVWT0tFIGNvbW1hbmQocykgZm9yIGFuIG9i amVjdC4KICAqCkBAIC0xMDQsNyArMTQwLDggQEAgYm9vbAogYnVpbGRBQ0xDb21tYW5kcyhjb25z dCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdWJuYW1lLCBjb25zdCBjaGFyICpuc3BuYW1lLAog CQkJCSBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICphY2xzLCBjb25zdCBjaGFyICpiYXNl YWNscywKIAkJCQkgY29uc3QgY2hhciAqb3duZXIsIGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHJl bW90ZVZlcnNpb24sCi0JCQkJIFBRRXhwQnVmZmVyIHNxbCkKKwkJCQkgUFFFeHBCdWZmZXIgc3Fs LAorCQkJCSBjaGFyICoqZGlnaXRSb2xlcywgaW50IG5EaWdpdFJvbGVzKQogewogCWJvb2wJCW9r ID0gdHJ1ZTsKIAljaGFyCSAgKiphY2xpdGVtcyA9IE5VTEw7CkBAIC0yMTgsNiArMjU1LDExIEBA IGJ1aWxkQUNMQ29tbWFuZHMoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3VibmFtZSwg Y29uc3QgY2hhciAqbnNwbmFtZSwKIAkJCWJyZWFrOwogCQl9CiAKKwkJLyogc2tpcCBlbnRyaWVz IHdob3NlIGdyYW50ZWUgb3IgZ3JhbnRvciBubyBsb25nZXIgZXhpc3RzICovCisJCWlmIChpc19k YW5nbGluZ19yb2xlX3JlZihncmFudGVlLT5kYXRhLCBkaWdpdFJvbGVzLCBuRGlnaXRSb2xlcykg fHwKKwkJCWlzX2RhbmdsaW5nX3JvbGVfcmVmKGdyYW50b3ItPmRhdGEsIGRpZ2l0Um9sZXMsIG5E aWdpdFJvbGVzKSkKKwkJCWNvbnRpbnVlOworCiAJCWlmIChwcml2cy0+bGVuID4gMCkKIAkJewog CQkJYXBwZW5kUFFFeHBCdWZmZXIoZmlyc3RzcWwsICIlc1JFVk9LRSAlcyBPTiAlcyAiLApAQCAt MjYzLDYgKzMwNSwxMSBAQCBidWlsZEFDTENvbW1hbmRzKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0 IGNoYXIgKnN1Ym5hbWUsIGNvbnN0IGNoYXIgKm5zcG5hbWUsCiAJCWlmIChwYXJzZUFjbEl0ZW0o Z3JhbnRpdGVtc1tpXSwgdHlwZSwgbmFtZSwgc3VibmFtZSwgcmVtb3RlVmVyc2lvbiwKIAkJCQkJ CSBncmFudGVlLCBncmFudG9yLCBwcml2cywgcHJpdnN3Z28pKQogCQl7CisJCQkvKiBza2lwIGVu dHJpZXMgd2hvc2UgZ3JhbnRlZSBvciBncmFudG9yIG5vIGxvbmdlciBleGlzdHMgKi8KKwkJCWlm IChpc19kYW5nbGluZ19yb2xlX3JlZihncmFudGVlLT5kYXRhLCBkaWdpdFJvbGVzLCBuRGlnaXRS b2xlcykgfHwKKwkJCQlpc19kYW5nbGluZ19yb2xlX3JlZihncmFudG9yLT5kYXRhLCBkaWdpdFJv bGVzLCBuRGlnaXRSb2xlcykpCisJCQkJY29udGludWU7CisKIAkJCS8qCiAJCQkgKiBJZiB0aGUg Z3JhbnRvciBpc24ndCB0aGUgb3duZXIsIHdlJ2xsIG5lZWQgdG8gdXNlIFNFVCBTRVNTSU9OCiAJ CQkgKiBBVVRIT1JJWkFUSU9OIHRvIGJlY29tZSB0aGUgZ3JhbnRvci4gIElzc3VlIHRoZSBTRVQv UkVTRVQgb25seQpAQCAtMzkwLDcgKzQzNyw4IEBAIGJ1aWxkRGVmYXVsdEFDTENvbW1hbmRzKGNv bnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKm5zcG5hbWUsCiAJICovCiAJaWYgKCFidWlsZEFD TENvbW1hbmRzKCIiLCBOVUxMLCBOVUxMLCB0eXBlLAogCQkJCQkJICBhY2xzLCBhY2xkZWZhdWx0 LCBvd25lciwKLQkJCQkJCSAgcHJlZml4LT5kYXRhLCByZW1vdGVWZXJzaW9uLCBzcWwpKQorCQkJ CQkJICBwcmVmaXgtPmRhdGEsIHJlbW90ZVZlcnNpb24sIHNxbCwKKwkJCQkJCSAgTlVMTCwgMCkp CiAJewogCQlkZXN0cm95UFFFeHBCdWZmZXIocHJlZml4KTsKIAkJcmV0dXJuIGZhbHNlOwpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2R1bXB1dGlscy5oIGIvc3JjL2Jpbi9wZ19kdW1wL2R1 bXB1dGlscy5oCmluZGV4IGQyMzFjZTFkNjU0Li5mN2FlZWJiOTA5OSAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL2R1bXB1dGlscy5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9kdW1wdXRpbHMu aApAQCAtNDEsNyArNDEsOCBAQCBleHRlcm4gY2hhciAqc2FuaXRpemVfbGluZShjb25zdCBjaGFy ICpzdHIsIGJvb2wgd2FudF9oeXBoZW4pOwogZXh0ZXJuIGJvb2wgYnVpbGRBQ0xDb21tYW5kcyhj b25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdWJuYW1lLCBjb25zdCBjaGFyICpuc3BuYW1l LAogCQkJCQkJCSBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICphY2xzLCBjb25zdCBjaGFy ICpiYXNlYWNscywKIAkJCQkJCQkgY29uc3QgY2hhciAqb3duZXIsIGNvbnN0IGNoYXIgKnByZWZp eCwgaW50IHJlbW90ZVZlcnNpb24sCi0JCQkJCQkJIFBRRXhwQnVmZmVyIHNxbCk7CisJCQkJCQkJ IFBRRXhwQnVmZmVyIHNxbCwKKwkJCQkJCQkgY2hhciAqKmRpZ2l0Um9sZXMsIGludCBuRGlnaXRS b2xlcyk7CiBleHRlcm4gYm9vbCBidWlsZERlZmF1bHRBQ0xDb21tYW5kcyhjb25zdCBjaGFyICp0 eXBlLCBjb25zdCBjaGFyICpuc3BuYW1lLAogCQkJCQkJCQkJY29uc3QgY2hhciAqYWNscywgY29u c3QgY2hhciAqYWNsZGVmYXVsdCwKIAkJCQkJCQkJCWNvbnN0IGNoYXIgKm93bmVyLApkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMKaW5kZXggYTBmN2Y4ZTIxNjguLjZiNGY2OTg0NDMwIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTE1Myw2 ICsxNTMsMTAgQEAgc3RhdGljIGJvb2wgZG9zeW5jID0gdHJ1ZTsJCS8qIElzc3VlIGZzeW5jKCkg dG8gbWFrZSBkdW1wIGR1cmFibGUgb24gZGlzay4gKi8KIAogc3RhdGljIE9pZAlnX2xhc3RfYnVp bHRpbl9vaWQ7IC8qIHZhbHVlIG9mIHRoZSBsYXN0IGJ1aWx0aW4gb2lkICovCiAKKy8qIFNvcnRl ZCBsaXN0IG9mIGFsbC1kaWdpdCByb2xlIG5hbWVzIGZldGNoZWQgb25jZSBmcm9tIHBnX2F1dGhp ZCAqLworc3RhdGljIGNoYXIgKipkaWdpdFJvbGVOYW1lcyA9IE5VTEw7CitzdGF0aWMgaW50CW5E aWdpdFJvbGVOYW1lcyA9IDA7CisKIC8qIFRoZSBzcGVjaWZpZWQgbmFtZXMvcGF0dGVybnMgc2hv dWxkIHRvIG1hdGNoIGF0IGxlYXN0IG9uZSBlbnRpdHkgKi8KIHN0YXRpYyBpbnQJc3RyaWN0X25h bWVzID0gMDsKIApAQCAtMTA4OTksNiArMTA5MDMsMjUgQEAgZ2V0QWRkaXRpb25hbEFDTHMoQXJj aGl2ZSAqZm91dCkKIAkvKiBGZXRjaCBpbml0aWFsLXByaXZpbGVnZXMgZGF0YSAqLwogCWlmIChm b3V0LT5yZW1vdGVWZXJzaW9uID49IDkwNjAwKQogCXsKKwkJUEdyZXN1bHQgICAqcm9scmVzOwor CisJCS8qCisJCSAqIENvbGxlY3QgYWxsIHJvbGUgbmFtZXMgdGhhdCBjb25zaXN0IGVudGlyZWx5 IG9mIGRpZ2l0cy4gIFdlIG5lZWQKKwkJICogdGhpcyB0byBkaXN0aW5ndWlzaCBsZWdpdGltYXRl IGFsbC1kaWdpdCByb2xlIG5hbWVzIChlLmcuICIwMDciKQorCQkgKiBmcm9tIGRhbmdsaW5nIG51 bWVyaWMgT0lEcyB0aGF0IGFjbGl0ZW1vdXQoKSBwcmludHMgZm9yIG1pc3NpbmcKKwkJICogcm9s ZXMuICBUaGlzIGxpc3QgaXMgbm9ybWFsbHkgZW1wdHk7IGl0IGlzIHN0b3JlZCBpbiBmaWxlLXNj b3BlCisJCSAqIHN0YXRpY3Mgc28gdGhhdCBidWlsZEFDTENvbW1hbmRzKCkgY2FuIHVzZSBpdCB0 aHJvdWdob3V0IHRoZSBkdW1wLgorCQkgKi8KKwkJcHJpbnRmUFFFeHBCdWZmZXIocXVlcnksCisJ CQkJCQkgICJTRUxFQ1Qgcm9sbmFtZSBGUk9NIHBnX2NhdGFsb2cucGdfYXV0aGlkICIKKwkJCQkJ CSAgIldIRVJFIHJvbG5hbWUgfiAnXlswLTldKyQnIE9SREVSIEJZIDEiKTsKKwkJcm9scmVzID0g RXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBMRVNfT0spOworCQlu RGlnaXRSb2xlTmFtZXMgPSBQUW50dXBsZXMocm9scmVzKTsKKwkJZGlnaXRSb2xlTmFtZXMgPSBw Z19tYWxsb2NfYXJyYXkoY2hhciAqLCBuRGlnaXRSb2xlTmFtZXMpOworCQlmb3IgKGkgPSAwOyBp IDwgbkRpZ2l0Um9sZU5hbWVzOyBpKyspCisJCQlkaWdpdFJvbGVOYW1lc1tpXSA9IHBnX3N0cmR1 cChQUWdldHZhbHVlKHJvbHJlcywgaSwgMCkpOworCQlQUWNsZWFyKHJvbHJlcyk7CisKIAkJcHJp bnRmUFFFeHBCdWZmZXIocXVlcnksCiAJCQkJCQkgICJTRUxFQ1Qgb2Jqb2lkLCBjbGFzc29pZCwg b2Jqc3ViaWQsIHByaXZ0eXBlLCBpbml0cHJpdnMgIgogCQkJCQkJICAiRlJPTSBwZ19pbml0X3By aXZzIik7CkBAIC0xNjYxMCw3ICsxNjYzMyw4IEBAIGR1bXBBQ0woQXJjaGl2ZSAqZm91dCwgRHVt cElkIG9iakR1bXBJZCwgRHVtcElkIGFsdER1bXBJZCwKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo c3FsLCAiU0VMRUNUIHBnX2NhdGFsb2cuYmluYXJ5X3VwZ3JhZGVfc2V0X3JlY29yZF9pbml0X3By aXZzKHRydWUpO1xuIik7CiAJCWlmICghYnVpbGRBQ0xDb21tYW5kcyhuYW1lLCBzdWJuYW1lLCBu c3BuYW1lLCB0eXBlLAogCQkJCQkJCSAgaW5pdHByaXZzLCBhY2xkZWZhdWx0LCBvd25lciwKLQkJ CQkJCQkgICIiLCBmb3V0LT5yZW1vdGVWZXJzaW9uLCBzcWwpKQorCQkJCQkJCSAgIiIsIGZvdXQt PnJlbW90ZVZlcnNpb24sIHNxbCwKKwkJCQkJCQkgIGRpZ2l0Um9sZU5hbWVzLCBuRGlnaXRSb2xl TmFtZXMpKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBwYXJzZSBpbml0aWFsIEFDTCBsaXN0ICgl cykgb3IgZGVmYXVsdCAoJXMpIGZvciBvYmplY3QgXCIlc1wiICglcykiLAogCQkJCQkgaW5pdHBy aXZzLCBhY2xkZWZhdWx0LCBuYW1lLCB0eXBlKTsKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoc3Fs LCAiU0VMRUNUIHBnX2NhdGFsb2cuYmluYXJ5X3VwZ3JhZGVfc2V0X3JlY29yZF9pbml0X3ByaXZz KGZhbHNlKTtcbiIpOwpAQCAtMTY2MzUsNyArMTY2NTksOCBAQCBkdW1wQUNMKEFyY2hpdmUgKmZv dXQsIER1bXBJZCBvYmpEdW1wSWQsIER1bXBJZCBhbHREdW1wSWQsCiAKIAlpZiAoIWJ1aWxkQUNM Q29tbWFuZHMobmFtZSwgc3VibmFtZSwgbnNwbmFtZSwgdHlwZSwKIAkJCQkJCSAgYWNscywgYmFz ZWFjbHMsIG93bmVyLAotCQkJCQkJICAiIiwgZm91dC0+cmVtb3RlVmVyc2lvbiwgc3FsKSkKKwkJ CQkJCSAgIiIsIGZvdXQtPnJlbW90ZVZlcnNpb24sIHNxbCwKKwkJCQkJCSAgZGlnaXRSb2xlTmFt ZXMsIG5EaWdpdFJvbGVOYW1lcykpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcGFyc2UgQUNMIGxp c3QgKCVzKSBvciBkZWZhdWx0ICglcykgZm9yIG9iamVjdCBcIiVzXCIgKCVzKSIsCiAJCQkJIGFj bHMsIGJhc2VhY2xzLCBuYW1lLCB0eXBlKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXBhbGwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggYzFmNDMx MTNjNTMuLjU5MjY0Yjg1YTFiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFs bC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKQEAgLTE1NzUsNyArMTU3NSw4 IEBAIGR1bXBSb2xlR1VDUHJpdnMoUEdjb25uICpjb25uKQogCiAJCWlmICghYnVpbGRBQ0xDb21t YW5kcyhmcGFybmFtZSwgTlVMTCwgTlVMTCwgIlBBUkFNRVRFUiIsCiAJCQkJCQkJICBwYXJhY2ws IGFjbGRlZmF1bHQsCi0JCQkJCQkJICBwYXJvd25lciwgIiIsIHNlcnZlcl92ZXJzaW9uLCBidWYp KQorCQkJCQkJCSAgcGFyb3duZXIsICIiLCBzZXJ2ZXJfdmVyc2lvbiwgYnVmLAorCQkJCQkJCSAg TlVMTCwgMCkpCiAJCXsKIAkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IHBhcnNlIEFDTCBsaXN0 ICglcykgZm9yIHBhcmFtZXRlciBcIiVzXCIiLAogCQkJCQkJIHBhcmFjbCwgcGFybmFtZSk7CkBA IC0xNzM4LDcgKzE3MzksOCBAQCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogCQlpZiAo IXNraXBfYWNscyAmJgogCQkJIWJ1aWxkQUNMQ29tbWFuZHMoZnNwY25hbWUsIE5VTEwsIE5VTEws ICJUQUJMRVNQQUNFIiwKIAkJCQkJCQkgIHNwY2FjbCwgYWNsZGVmYXVsdCwKLQkJCQkJCQkgIHNw Y293bmVyLCAiIiwgc2VydmVyX3ZlcnNpb24sIGJ1ZikpCisJCQkJCQkJICBzcGNvd25lciwgIiIs IHNlcnZlcl92ZXJzaW9uLCBidWYsCisJCQkJCQkJICBOVUxMLCAwKSkKIAkJewogCQkJcGdfbG9n X2Vycm9yKCJjb3VsZCBub3QgcGFyc2UgQUNMIGxpc3QgKCVzKSBmb3IgdGFibGVzcGFjZSBcIiVz XCIiLAogCQkJCQkJIHNwY2FjbCwgc3BjbmFtZSk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvdC8wMDhfcGdfZHVtcF9kYW5nbGluZ19pbml0cHJpdnMucGwgYi9zcmMvYmluL3BnX2R1bXAv dC8wMDhfcGdfZHVtcF9kYW5nbGluZ19pbml0cHJpdnMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmRjZjMzYTRhZjA1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3QvMDA4X3BnX2R1bXBfZGFuZ2xpbmdfaW5pdHByaXZzLnBsCkBAIC0wLDAgKzEs MTYyIEBACisjIENvcHlyaWdodCAoYykgMjAyMS0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorIworIyBUZXN0cyB0aGF0IHBnX2R1bXAgc2lsZW50bHkgc2tpcHMgcGdf aW5pdF9wcml2cyBlbnRyaWVzIHRoYXQgcmVmZXJlbmNlCisjIHJvbGVzIG5vIGxvbmdlciBwcmVz ZW50IGluIHBnX2F1dGhpZCwgcmF0aGVyIHRoYW4gZW1pdHRpbmcgaW52YWxpZCBHUkFOVAorIyBv ciBTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OIHN0YXRlbWVudHMgd2l0aCBudW1lcmljIE9JRHMg YXMgcm9sZSBuYW1lcy4KKyMKKyMgRml2ZSBjYXNlcyBhcmUgdGVzdGVkOgorIyAgIDEuIERhbmds aW5nIGdyYW50ZWUgLS0gdGhlIHJvbGUgdGhhdCByZWNlaXZlZCB0aGUgcHJpdmlsZWdlIHdhcyBk cm9wcGVkLgorIyAgIDIuIERhbmdsaW5nIGdyYW50b3IgLS0gdGhlIHJvbGUgdGhhdCBncmFudGVk IHRoZSBwcml2aWxlZ2Ugd2FzIGRyb3BwZWQuCisjICAgMy4gQ29sdW1uLWxldmVsIGRhbmdsaW5n IGdyYW50ZWUgKG9ianN1YmlkICE9IDApLgorIyAgIDQuIFNwdXJpb3VzIFJFVk9LRSAtLSBhIHBn X2NhdGFsb2cgZnVuY3Rpb24gd2hvc2Ugb25seSBpbml0cHJpdnMgZW50cnkgaXMKKyMgICAgICBh bGwtZGFuZ2xpbmc7IHdpdGhvdXQgZmlsdGVyaW5nLCB0aGUgb2JqZWN0IGlzIGluY29ycmVjdGx5 IHNlbGVjdGVkIGZvcgorIyAgICAgIEFDTCBvdXRwdXQgYW5kIGR1bXBBQ0woKSBlbWl0cyBhIHNw dXJpb3VzIFJFVk9LRS4KKyMgICA1LiBMZWdpdGltYXRlIGFsbC1kaWdpdCByb2xlIC0tIGEgcm9s ZSBuYW1lZCAiMDA3IiBtdXN0IE5PVCBiZSBmaWx0ZXJlZC4KKwordXNlIHN0cmljdDsKK3VzZSB3 YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5v ZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKyRub2RlLT5pbml0 OworJG5vZGUtPnN0YXJ0OworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUg REFUQUJBU0UgcmVncmVzc19kYW5nbGluZycpOworCiskbm9kZS0+c2FmZV9wc3FsKAorCSdyZWdy ZXNzX2RhbmdsaW5nJywKKwlxeworU0VUIGFsbG93X3N5c3RlbV90YWJsZV9tb2RzID0gdHJ1ZTsK KworLS0gQ2FzZSAxOiBkYW5nbGluZyBncmFudGVlLgorQ1JFQVRFIFJPTEUgZ2hvc3RfZ3JhbnRl ZTsKKworQ1JFQVRFIEZVTkNUSU9OIHB1YmxpYy50ZXN0X2Z1bmNfZ3JhbnRlZSgpIFJFVFVSTlMg aW50IExBTkdVQUdFIHNxbCBBUyAnU0VMRUNUIDEnOworCitJTlNFUlQgSU5UTyBwZ19pbml0X3By aXZzIChvYmpvaWQsIGNsYXNzb2lkLCBvYmpzdWJpZCwgcHJpdnR5cGUsIGluaXRwcml2cykKK1NF TEVDVCBwLm9pZCwKKyAgICAgICAoU0VMRUNUIG9pZCBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3Mg V0hFUkUgcmVsbmFtZSA9ICdwZ19wcm9jJyksCisgICAgICAgMCwKKyAgICAgICAnZScsCisgICAg ICAgQVJSQVlbKCdnaG9zdF9ncmFudGVlPVgvJyB8fCBjdXJyZW50X3VzZXIpOjphY2xpdGVtXQor RlJPTSBwZ19jYXRhbG9nLnBnX3Byb2MgcAorV0hFUkUgcC5wcm9uYW1lID0gJ3Rlc3RfZnVuY19n cmFudGVlJworQU5EIHAucHJvbmFtZXNwYWNlID0gJ3B1YmxpYyc6OnJlZ25hbWVzcGFjZTsKKwor LS0gQ2FzZSAyOiBkYW5nbGluZyBncmFudG9yLgorQ1JFQVRFIFJPTEUgZ2hvc3RfZ3JhbnRvcjsK KworQ1JFQVRFIEZVTkNUSU9OIHB1YmxpYy50ZXN0X2Z1bmNfZ3JhbnRvcigpIFJFVFVSTlMgaW50 IExBTkdVQUdFIHNxbCBBUyAnU0VMRUNUIDInOworCitJTlNFUlQgSU5UTyBwZ19pbml0X3ByaXZz IChvYmpvaWQsIGNsYXNzb2lkLCBvYmpzdWJpZCwgcHJpdnR5cGUsIGluaXRwcml2cykKK1NFTEVD VCBwLm9pZCwKKyAgICAgICAoU0VMRUNUIG9pZCBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgV0hF UkUgcmVsbmFtZSA9ICdwZ19wcm9jJyksCisgICAgICAgMCwKKyAgICAgICAnZScsCisgICAgICAg QVJSQVlbKCc9WC8nIHx8ICdnaG9zdF9ncmFudG9yJyk6OmFjbGl0ZW1dCitGUk9NIHBnX2NhdGFs b2cucGdfcHJvYyBwCitXSEVSRSBwLnByb25hbWUgPSAndGVzdF9mdW5jX2dyYW50b3InCitBTkQg cC5wcm9uYW1lc3BhY2UgPSAncHVibGljJzo6cmVnbmFtZXNwYWNlOworCistLSBDYXNlIDM6IGNv bHVtbi1sZXZlbCBkYW5nbGluZyBncmFudGVlIChvYmpzdWJpZCAhPSAwKS4KK0NSRUFURSBST0xF IGdob3N0X2NvbF9yb2xlOworCitDUkVBVEUgVEFCTEUgcHVibGljLnRlc3RfdGJsIChjb2wxIGlu dCk7CisKK0lOU0VSVCBJTlRPIHBnX2luaXRfcHJpdnMgKG9iam9pZCwgY2xhc3NvaWQsIG9ianN1 YmlkLCBwcml2dHlwZSwgaW5pdHByaXZzKQorU0VMRUNUIHQub2lkLAorICAgICAgIChTRUxFQ1Qg b2lkIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ3BnX2NsYXNzJyks CisgICAgICAgMSwKKyAgICAgICAnZScsCisgICAgICAgQVJSQVlbKCdnaG9zdF9jb2xfcm9sZT1y LycgfHwgY3VycmVudF91c2VyKTo6YWNsaXRlbV0KK0ZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyB0 CitXSEVSRSB0LnJlbG5hbWUgPSAndGVzdF90YmwnCitBTkQgdC5yZWxuYW1lc3BhY2UgPSAncHVi bGljJzo6cmVnbmFtZXNwYWNlOworCistLSBDYXNlIDQ6IHNwdXJpb3VzIFJFVk9LRSBjYXVzZWQg YnkgYWxsLWRhbmdsaW5nIGluaXRwcml2cyBhbmQgTlVMTCBwcm9hY2wuCitDUkVBVEUgUk9MRSBn aG9zdF9jYXRhbG9nX3JvbGU7CisKK0lOU0VSVCBJTlRPIHBnX2luaXRfcHJpdnMgKG9iam9pZCwg Y2xhc3NvaWQsIG9ianN1YmlkLCBwcml2dHlwZSwgaW5pdHByaXZzKQorU0VMRUNUIHAub2lkLAor ICAgICAgIChTRUxFQ1Qgb2lkIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBXSEVSRSByZWxuYW1l ID0gJ3BnX3Byb2MnKSwKKyAgICAgICAwLAorICAgICAgICdpJywKKyAgICAgICBBUlJBWVsoJ2do b3N0X2NhdGFsb2dfcm9sZT1YLycgfHwgY3VycmVudF91c2VyKTo6YWNsaXRlbV0KK0ZST00gcGdf Y2F0YWxvZy5wZ19wcm9jIHAKK1dIRVJFIHAucHJvbmFtZSA9ICdpbnQ0JworQU5EIHAucHJvbmFt ZXNwYWNlID0gKFNFTEVDVCBvaWQgRlJPTSBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZQorICAgICAg ICAgICAgICAgICAgICAgIFdIRVJFIG5zcG5hbWUgPSAncGdfY2F0YWxvZycpCitMSU1JVCAxOwor CistLSBDYXNlIDU6IGxlZ2l0aW1hdGUgYWxsLWRpZ2l0IHJvbGUgbmFtZSBtdXN0IGJlIHByZXNl cnZlZC4KKy0tIFRoZSByb2xlICIwMDciIGV4aXN0cyBhbmQgcmVjZWl2ZXMgYSBHUkFOVC4gIFRo ZSBpbml0cHJpdnMgZW50cnkgYWxzbworLS0gcmVmZXJlbmNlcyAiMDA3IiAoYXMgZ3JhbnRlZSku ICBmaWx0ZXJEYW5nbGluZ0FjbEl0ZW1zIG11c3QgTk9UIHJlbW92ZQorLS0gdGhpcyBlbnRyeS4g IFdlIHNldCB1cCBpbml0cHJpdnMgd2l0aCBhIERJRkZFUkVOVCBjb250ZW50IHRoYW4gcHJvYWNs CistLSBzbyB0aGF0IHRoZSBHUkFOVCB0byAiMDA3IiBzaG93cyB1cCBpbiB0aGUgZGVsdGEgb3V0 cHV0LgorQ1JFQVRFIFJPTEUgIjAwNyI7CisKK0NSRUFURSBGVU5DVElPTiBwdWJsaWMudGVzdF9m dW5jXzAwNygpIFJFVFVSTlMgaW50IExBTkdVQUdFIHNxbCBBUyAnU0VMRUNUIDcnOworR1JBTlQg RVhFQ1VURSBPTiBGVU5DVElPTiBwdWJsaWMudGVzdF9mdW5jXzAwNygpIFRPICIwMDciOworCist LSBSZW1vdmUgZ2hvc3Qgcm9sZXMsIGxlYXZpbmcgZGFuZ2xpbmcgT0lEcyBpbiBwZ19pbml0X3By aXZzLgorLS0gRG8gTk9UIHJlbW92ZSAiMDA3IiAtLSBpdCBpcyBhIGxlZ2l0aW1hdGUgcm9sZS4K K0RFTEVURSBGUk9NIHBnX2NhdGFsb2cucGdfYXV0aGlkCitXSEVSRSByb2xuYW1lIElOICgnZ2hv c3RfZ3JhbnRlZScsICdnaG9zdF9ncmFudG9yJywgJ2dob3N0X2NvbF9yb2xlJywKKyAgICAgICAg ICAgICAgICAgICdnaG9zdF9jYXRhbG9nX3JvbGUnKTsKK30pOworCitteSAkdGVtcGRpciA9IFBv c3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworbXkgJGR1bXBfZmlsZSA9ICIkdGVtcGRp ci9kYW5nbGluZy5zcWwiOworCisjIHBnX2R1bXAgbXVzdCBzdWNjZWVkIGV2ZW4gdGhvdWdoIHBn X2luaXRfcHJpdnMgaGFzIGRhbmdsaW5nIHJvbGUgT0lEcy4KK2NvbW1hbmRfb2soCisJWworCQkn cGdfZHVtcCcsCisJCSctLXBvcnQnID0+ICRub2RlLT5wb3J0LAorCQknLS1zY2hlbWEtb25seScs CisJCSctZicgPT4gJGR1bXBfZmlsZSwKKwkJJ3JlZ3Jlc3NfZGFuZ2xpbmcnLAorCV0sCisJJ3Bn X2R1bXAgc3VjY2VlZHMgd2l0aCBkYW5nbGluZyBwZ19pbml0X3ByaXZzIGVudHJpZXMnKTsKKwor bXkgJGR1bXAgPSBzbHVycF9maWxlKCRkdW1wX2ZpbGUpOworCisjIFRoZSB1c2VyLWRlZmluZWQg b2JqZWN0cyBtdXN0IHN0aWxsIGFwcGVhciBpbiB0aGUgZHVtcC4KK2xpa2UoJGR1bXAsIHFyL0NS RUFURSBGVU5DVElPTiBwdWJsaWNcLnRlc3RfZnVuY19ncmFudGVlLywKKwknZnVuY3Rpb24gd2l0 aCBkYW5nbGluZyBncmFudGVlIGlzIHByZXNlbnQgaW4gZHVtcCcpOworbGlrZSgkZHVtcCwgcXIv Q1JFQVRFIEZVTkNUSU9OIHB1YmxpY1wudGVzdF9mdW5jX2dyYW50b3IvLAorCSdmdW5jdGlvbiB3 aXRoIGRhbmdsaW5nIGdyYW50b3IgaXMgcHJlc2VudCBpbiBkdW1wJyk7CitsaWtlKCRkdW1wLCBx ci9DUkVBVEUgVEFCTEUgcHVibGljXC50ZXN0X3RibC8sCisJJ3RhYmxlIHdpdGggZGFuZ2xpbmcg Y29sdW1uIGluaXRwcml2cyBpcyBwcmVzZW50IGluIGR1bXAnKTsKK2xpa2UoJGR1bXAsIHFyL0NS RUFURSBGVU5DVElPTiBwdWJsaWNcLnRlc3RfZnVuY18wMDcvLAorCSdmdW5jdGlvbiBmb3IgbGVn aXRpbWF0ZSBhbGwtZGlnaXQgcm9sZSBpcyBwcmVzZW50IGluIGR1bXAnKTsKKworIyBObyBzdGF0 ZW1lbnQgc2hvdWxkIHJlZmVyZW5jZSBhIGJhcmUgbnVtZXJpYyBPSUQgYXMgYSByb2xlIG5hbWUu Cit1bmxpa2UoJGR1bXAsIHFyL1NFU1NJT04gQVVUSE9SSVpBVElPTlxzKyJbMC05XSsiLywKKwkn bm8gU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiB3aXRoIG51bWVyaWMgT0lEIGFzIHJvbGUgbmFt ZScpOworCisjIE5vIEdSQU5UIGF0IGFsbCBmb3IgdGhlIGRhbmdsaW5nLWdyYW50ZWUgZnVuY3Rp b24uCit1bmxpa2UoJGR1bXAsIHFyL0dSQU5UXGIuKlxidGVzdF9mdW5jX2dyYW50ZWUvLAorCSdu byBHUkFOVCBmb3IgdGVzdF9mdW5jX2dyYW50ZWUgd2hlbiBhbGwgaW5pdHByaXZzIGVudHJpZXMg YXJlIGRhbmdsaW5nJyk7CisKKyMgTm8gR1JBTlQgYXQgYWxsIGZvciB0aGUgZGFuZ2xpbmctZ3Jh bnRvciBmdW5jdGlvbi4KK3VubGlrZSgkZHVtcCwgcXIvR1JBTlRcYi4qXGJ0ZXN0X2Z1bmNfZ3Jh bnRvci8sCisJJ25vIEdSQU5UIGZvciB0ZXN0X2Z1bmNfZ3JhbnRvciB3aGVuIGFsbCBpbml0cHJp dnMgZW50cmllcyBhcmUgZGFuZ2xpbmcnKTsKKworIyBObyBjb2x1bW4gR1JBTlQgZm9yIHRoZSBk YW5nbGluZyBjb2x1bW4gaW5pdHByaXZzLgordW5saWtlKCRkdW1wLCBxci9HUkFOVFxiLipcYnRl c3RfdGJsXGIuKlwoY29sMVwpLywKKwknbm8gY29sdW1uIEdSQU5UIGZvciB0ZXN0X3RibCB3aGVu IGNvbHVtbiBpbml0cHJpdnMgZW50cmllcyBhcmUgZGFuZ2xpbmcnKTsKKworIyBObyBzcHVyaW91 cyBSRVZPS0UgZm9yIHRoZSBjYXRhbG9nIGZ1bmN0aW9uIHdob3NlIG9ubHkgaW5pdHByaXZzIGVu dHJ5IHdhcworIyBhbGwtZGFuZ2xpbmcuCit1bmxpa2UoJGR1bXAsIHFyL1JFVk9LRVxiLipcYmlu dDRccypcKC8sCisJJ25vIHNwdXJpb3VzIFJFVk9LRSBmb3IgaW50NCB3aGVuIGFsbCBpbml0cHJp dnMgZW50cmllcyBhcmUgZGFuZ2xpbmcnKTsKKworIyBDYXNlIDU6IHRoZSBsZWdpdGltYXRlIGFs bC1kaWdpdCByb2xlICIwMDciIE1VU1Qgc3RpbGwgZ2V0IGl0cyBHUkFOVC4KK2xpa2UoJGR1bXAs IHFyL0dSQU5UXGIuKlxidGVzdF9mdW5jXzAwN1xiLipUT1xzKyIwMDciLywKKwknR1JBTlQgdG8g bGVnaXRpbWF0ZSBhbGwtZGlnaXQgcm9sZSAiMDA3IiBpcyBwcmVzZXJ2ZWQnKTsKKworZG9uZV90 ZXN0aW5nKCk7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --000000000000eae5950654f9cb6a--