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.94.2) (envelope-from ) id 1tmMEa-0065bz-86 for pgsql-hackers@arkaria.postgresql.org; Mon, 24 Feb 2025 00:22:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tmMEZ-00EDao-Fu for pgsql-hackers@arkaria.postgresql.org; Mon, 24 Feb 2025 00:22:07 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tmMEY-00EDag-Pl for pgsql-hackers@lists.postgresql.org; Mon, 24 Feb 2025 00:22:07 +0000 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tmMEV-000Nhh-0t for pgsql-hackers@lists.postgresql.org; Mon, 24 Feb 2025 00:22:05 +0000 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-220c92c857aso65314285ad.0 for ; Sun, 23 Feb 2025 16:22:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20230601.gappssmtp.com; s=20230601; t=1740356523; x=1740961323; darn=lists.postgresql.org; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:from:to:cc:subject:date:message-id:reply-to; bh=FXUgotZyCYo2FGtlm90zzoCe92eG8oaW2dnATgyNTNU=; b=S7MW6Djw4RFOOP0f6ksNM4bfghDpXvyC5ofPHsS6Azl6H6AJ8o2ZRMfX5aUdJU7aNN cInLLB4pLgbQPzVNidvOCh+PuAWgkRZWZV3cckIhC/+uxX+NR1Sk8PIAw4MYsSKJD6dj oD0RZvkY/khXE1I1N0slYL+aooZPa+AFNEgBnkQuXUWAlzrzb9KeSGEF46N8d7VzbP9z EvIuz0t928Q3mIM4Zk1zUExnfA/1pCtipYW5Ukw+3pK/AwcneWPpqi+D2XmCGmwCTBAX GqXqXmaK7xCD5bGXsy20SlmRBN/GvTb9eOd/lMvI5DpgCMh9tqx4+g/oA+XNtyzEYyZn xcOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740356523; x=1740961323; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=FXUgotZyCYo2FGtlm90zzoCe92eG8oaW2dnATgyNTNU=; b=Gpvl7jmilqk+9iIJDp6oN/ulzBhHNKKGJcRcYr6XJymwZ3Ps44vjCsVS8gCLaHciHA JqRt03hBOT/eaeRzW8Ro/zjsLoujfE2oEMjGhhamB5DeYe4B4gjdIZK4wI6WHGkE5eqA GCcIvlTkmQ2Ka01i//5a4fqBLi2O3xu3lnMLNOkWtcxJRsCDcd3SCEz+6YJgqBxeoLIS s7yPj1H+s1GaWxSXiBodtFaFd6KGex+SW+EcJlhk++ztnjFiZknnqesS34FfMcYynszW NJrkuOtT0lgpDhHqdLZ4TQn/Cxv3/p5PijFQjWdPjK+5rxDWLgS3DRbsByrprDZzUZzY FLXw== X-Forwarded-Encrypted: i=1; AJvYcCUGk6a4yS3F/lHOYF2f6AO+iJYN4qigWjGV8srVpFElMD+2DVeMSsWSrL5XFupsMX3G9gQwuVwHCFr1G0yD@lists.postgresql.org X-Gm-Message-State: AOJu0YxSliKZYpROpijgwOI/AAJirNJugEtA+hT3M+S/RBqqVHFqibZm 1er8/m+a/f1Pxm14VoMIdojRlo2CKPLwUmhwk/Dj5K9xlAYkWhH8euxb76uRZA== X-Gm-Gg: ASbGncvs4nmcAxmc8AwxX/0k6MAUty2I8rbNS3L6AeNHbxM+KvLhyWqqU80tFM3ZDuH osZQ0x9Y88JwbJSnbOddGgPCouc1y8F3+p3+l3Xuv8Tc8WPrMa0SLdzwlbYwvA2h+jHxgg/csWg +eA8QknAn0CygCLLdUrWRGvGRFWl4SV/NZbGz3Ydt5XHEfXSJNIkuH0+Hme3ZZd0KbvzV0tYpGA cgBO8ucAWVe0hIpZJFxWC9kOAyOLb7DhNW14MSoaAQZVZPzl+BG1enav/3tl2FdueRsEie97C/h D+GdRK0R7tSBwRMAO497qK3Z256xHJJHxu9P19AQEs+Wd4ch0hMYY43OlCvnc49A9KW9 X-Google-Smtp-Source: AGHT+IH/hNiPsNzYkI8LpI6Ky/WqseDzYR93Lay11JiTdpZVSYCeR1B7DBenKQdUoYg1/CL9RQDOHw== X-Received: by 2002:a17:902:c411:b0:221:2d4b:b4c6 with SMTP id d9443c01a7336-2218c5576c9mr229032015ad.17.1740356522763; Sun, 23 Feb 2025 16:22:02 -0800 (PST) Received: from jeff-laptop.lan (c-76-102-242-158.hsd1.ca.comcast.net. [76.102.242.158]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d537bd1asm168697875ad.102.2025.02.23.16.22.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Feb 2025 16:22:02 -0800 (PST) Message-ID: <97b451228227c555be1a4f79c4a62ddec9a74f06.camel@j-davis.com> Subject: Re: Statistics Import and Export From: Jeff Davis To: Corey Huinker , Tom Lane Cc: Andres Freund , Michael Paquier , jian he , Nathan Bossart , Bruce Momjian , Matthias van de Meent , Magnus Hagander , Stephen Frost , Ashutosh Bapat , Peter Smith , PostgreSQL Hackers , alvherre@alvh.no-ip.org Date: Sun, 23 Feb 2025 16:21:59 -0800 In-Reply-To: References: <0b4c098ae3968aa23d6accb691f47bdba143aedd.camel@j-davis.com> <26e55538fa8c47d660642f367cd8a19333420789.camel@j-davis.com> <348bd8970506784d20c864a9a731420ca15a2f63.camel@j-davis.com> <3670503.1740173078@sss.pgh.pa.us> <3728741.1740178078@sss.pgh.pa.us> Content-Type: multipart/mixed; boundary="=-wWDDe0C4prUmpbLJAYHZ" User-Agent: Evolution 3.44.4-0ubuntu2 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-wWDDe0C4prUmpbLJAYHZ Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, 2025-02-22 at 00:00 -0500, Corey Huinker wrote: >=20 > Attached is the first optimization, which gets rid of the pg_class > queries entirely, instead getting the same information from the > existing queries in getTables and getIndexes. Attached a revised version. The main changes are that the only struct it changes is RelStatsInfo, and it doesn't carry around string values. IIUC, your version carried around the string values so that there would be no conversion; it would hold the string from one result to the next. That makes sense, but it seemed to change a lot of struct fields, and have unnecessary string copying and memory usage which was not freed. Instead, I used float_to_shortest_decimal_buf(), which is what float4out() uses, which should be a consistent way to convert the float value. That meant that we couldn't use appendNamedArgument() as easily, but it wasn't helping much in that function anyway, because it was no longer a loop. I didn't measure any performance difference between your version and mine, but avoiding a few allocations couldn't hurt. It seems to save just under 20% on an unoptimized build. Regards, Jeff Davis --=-wWDDe0C4prUmpbLJAYHZ Content-Disposition: attachment; filename*0=v2j-0001-Avoid-unnecessary-relation-stats-query-in-pg_dum.pat; filename*1=ch Content-Type: text/x-patch; name="v2j-0001-Avoid-unnecessary-relation-stats-query-in-pg_dum.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAyZjE2YjdjZjk0MWZjMTRlMzE1NmU4ZGRjNTM2YzhmOTNmOTdlYjc3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogRnJpLCAyMSBGZWIgMjAyNSAyMzozMTowNCAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djJqXSBBdm9pZCB1bm5lY2Vzc2FyeSByZWxhdGlvbiBzdGF0cyBxdWVyeSBpbiBwZ19kdW1wLgoK VGhlIGZldyBmaWVsZHMgd2UgbmVlZCBjYW4gYmUgZWFzaWx5IGNvbGxlY3RlZCBpbiBnZXRUYWJs ZXMoKSBhbmQKZ2V0SW5kZXhlcygpIGFuZCBzdG9yZWQgaW4gUmVsU3RhdHNJbmZvLgoKQ28tYXV0 aG9yZWQtYnk6IENvcmV5IEh1aW5rZXIgPGNvcmV5Lmh1aW5rZXJAZ21haWwuY29tPgpDby1hdXRo b3JlZC1ieTogSmVmZiBEYXZpcyA8cGdzcWxAai1kYXZpcy5jb20+CkRpc2N1c3Npb246IGh0dHBz Oi8vcG9zdGdyLmVzL20vQ0FEa0xNPWYwYTQzYVRkODh4VzR4Q0ZheUVGMjVnLTdoVHJIWF9XaFY0 MEh5b2NzVUdnQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyB8 IDE0MiArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuaCB8ICAgNSArLQogMiBmaWxlcyBjaGFuZ2VkLCA2MSBpbnNlcnRpb25zKCsp LCA4NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCBhZmQ3OTI4NzE3Ny4uZDExOWNlNzE2 YjAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgImNvbW1vbi9jb25u ZWN0LmgiCiAjaW5jbHVkZSAiY29tbW9uL2ludC5oIgogI2luY2x1ZGUgImNvbW1vbi9yZWxwYXRo LmgiCisjaW5jbHVkZSAiY29tbW9uL3Nob3J0ZXN0X2RlYy5oIgogI2luY2x1ZGUgImNvbXByZXNz X2lvLmgiCiAjaW5jbHVkZSAiZHVtcHV0aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvb3B0aW9u X3V0aWxzLmgiCkBAIC02ODE0LDcgKzY4MTUsOCBAQCBnZXRGdW5jcyhBcmNoaXZlICpmb3V0KQog ICoKICAqLwogc3RhdGljIFJlbFN0YXRzSW5mbyAqCi1nZXRSZWxhdGlvblN0YXRpc3RpY3MoQXJj aGl2ZSAqZm91dCwgRHVtcGFibGVPYmplY3QgKnJlbCwgY2hhciByZWxraW5kKQorZ2V0UmVsYXRp b25TdGF0aXN0aWNzKEFyY2hpdmUgKmZvdXQsIER1bXBhYmxlT2JqZWN0ICpyZWwsIGludDMyIHJl bHBhZ2VzLAorCQkJCQkgIGZsb2F0IHJlbHR1cGxlcywgaW50MzIgcmVsYWxsdmlzaWJsZSwgY2hh ciByZWxraW5kKQogewogCWlmICghZm91dC0+ZG9wdC0+ZHVtcFN0YXRpc3RpY3MpCiAJCXJldHVy biBOVUxMOwpAQCAtNjgzOSw2ICs2ODQxLDkgQEAgZ2V0UmVsYXRpb25TdGF0aXN0aWNzKEFyY2hp dmUgKmZvdXQsIER1bXBhYmxlT2JqZWN0ICpyZWwsIGNoYXIgcmVsa2luZCkKIAkJZG9iai0+Y29t cG9uZW50cyB8PSBEVU1QX0NPTVBPTkVOVF9TVEFUSVNUSUNTOwogCQlkb2JqLT5uYW1lID0gcGdf c3RyZHVwKHJlbC0+bmFtZSk7CiAJCWRvYmotPm5hbWVzcGFjZSA9IHJlbC0+bmFtZXNwYWNlOwor CQlpbmZvLT5yZWxwYWdlcyA9IHJlbHBhZ2VzOworCQlpbmZvLT5yZWx0dXBsZXMgPSByZWx0dXBs ZXM7CisJCWluZm8tPnJlbGFsbHZpc2libGUgPSByZWxhbGx2aXNpYmxlOwogCQlpbmZvLT5yZWxr aW5kID0gcmVsa2luZDsKIAkJaW5mby0+cG9zdHBvbmVkX2RlZiA9IGZhbHNlOwogCkBAIC02ODc0 LDYgKzY4NzksOCBAQCBnZXRUYWJsZXMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1UYWJsZXMpCiAJ aW50CQkJaV9yZWxoYXNpbmRleDsKIAlpbnQJCQlpX3JlbGhhc3J1bGVzOwogCWludAkJCWlfcmVs cGFnZXM7CisJaW50CQkJaV9yZWx0dXBsZXM7CisJaW50CQkJaV9yZWxhbGx2aXNpYmxlOwogCWlu dAkJCWlfdG9hc3RwYWdlczsKIAlpbnQJCQlpX293bmluZ190YWI7CiAJaW50CQkJaV9vd25pbmdf Y29sOwpAQCAtNjkyNCw3ICs2OTMxLDcgQEAgZ2V0VGFibGVzKEFyY2hpdmUgKmZvdXQsIGludCAq bnVtVGFibGVzKQogCQkJCQkJICJjLnJlbG93bmVyLCAiCiAJCQkJCQkgImMucmVsY2hlY2tzLCAi CiAJCQkJCQkgImMucmVsaGFzaW5kZXgsIGMucmVsaGFzcnVsZXMsIGMucmVscGFnZXMsICIKLQkJ CQkJCSAiYy5yZWxoYXN0cmlnZ2VycywgIgorCQkJCQkJICJjLnJlbHR1cGxlcywgYy5yZWxhbGx2 aXNpYmxlLCBjLnJlbGhhc3RyaWdnZXJzLCAiCiAJCQkJCQkgImMucmVscGVyc2lzdGVuY2UsICIK IAkJCQkJCSAiYy5yZWxvZnR5cGUsICIKIAkJCQkJCSAiYy5yZWxhY2wsICIKQEAgLTcwODgsNiAr NzA5NSw4IEBAIGdldFRhYmxlcyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVRhYmxlcykKIAlpX3Jl bGhhc2luZGV4ID0gUFFmbnVtYmVyKHJlcywgInJlbGhhc2luZGV4Iik7CiAJaV9yZWxoYXNydWxl cyA9IFBRZm51bWJlcihyZXMsICJyZWxoYXNydWxlcyIpOwogCWlfcmVscGFnZXMgPSBQUWZudW1i ZXIocmVzLCAicmVscGFnZXMiKTsKKwlpX3JlbHR1cGxlcyA9IFBRZm51bWJlcihyZXMsICJyZWx0 dXBsZXMiKTsKKwlpX3JlbGFsbHZpc2libGUgPSBQUWZudW1iZXIocmVzLCAicmVsYWxsdmlzaWJs ZSIpOwogCWlfdG9hc3RwYWdlcyA9IFBRZm51bWJlcihyZXMsICJ0b2FzdHBhZ2VzIik7CiAJaV9v d25pbmdfdGFiID0gUFFmbnVtYmVyKHJlcywgIm93bmluZ190YWIiKTsKIAlpX293bmluZ19jb2wg PSBQUWZudW1iZXIocmVzLCAib3duaW5nX2NvbCIpOwpAQCAtNzEzNCw2ICs3MTQzLDkgQEAgZ2V0 VGFibGVzKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtVGFibGVzKQogCiAJZm9yIChpID0gMDsgaSA8 IG50dXBzOyBpKyspCiAJeworCQlmbG9hdAkJcmVsdHVwbGVzID0gYXRvZihQUWdldHZhbHVlKHJl cywgaSwgaV9yZWx0dXBsZXMpKTsKKwkJaW50MzIJCXJlbGFsbHZpc2libGUgPSBhdG9pKFBRZ2V0 dmFsdWUocmVzLCBpLCBpX3JlbGFsbHZpc2libGUpKTsKKwogCQl0YmxpbmZvW2ldLmRvYmoub2Jq VHlwZSA9IERPX1RBQkxFOwogCQl0YmxpbmZvW2ldLmRvYmouY2F0SWQudGFibGVvaWQgPSBhdG9v aWQoUFFnZXR2YWx1ZShyZXMsIGksIGlfcmVsdGFibGVvaWQpKTsKIAkJdGJsaW5mb1tpXS5kb2Jq LmNhdElkLm9pZCA9IGF0b29pZChQUWdldHZhbHVlKHJlcywgaSwgaV9yZWxvaWQpKTsKQEAgLTcy MzMsNyArNzI0NSw4IEBAIGdldFRhYmxlcyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVRhYmxlcykK IAogCQkvKiBBZGQgc3RhdGlzdGljcyAqLwogCQlpZiAodGJsaW5mb1tpXS5pbnRlcmVzdGluZykK LQkJCWdldFJlbGF0aW9uU3RhdGlzdGljcyhmb3V0LCAmdGJsaW5mb1tpXS5kb2JqLCB0YmxpbmZv W2ldLnJlbGtpbmQpOworCQkJZ2V0UmVsYXRpb25TdGF0aXN0aWNzKGZvdXQsICZ0YmxpbmZvW2ld LmRvYmosIHRibGluZm9baV0ucmVscGFnZXMsCisJCQkJCQkJCSAgcmVsdHVwbGVzLCByZWxhbGx2 aXNpYmxlLCB0YmxpbmZvW2ldLnJlbGtpbmQpOwogCiAJCS8qCiAJCSAqIFJlYWQtbG9jayB0YXJn ZXQgdGFibGVzIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZW4ndCBEUk9QUEVEIG9yIGFsdGVyZWQKQEAg LTc0OTksNiArNzUxMiw5IEBAIGdldEluZGV4ZXMoQXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvIHRi bGluZm9bXSwgaW50IG51bVRhYmxlcykKIAkJCQlpX29pZCwKIAkJCQlpX2luZHJlbGlkLAogCQkJ CWlfaW5kZXhuYW1lLAorCQkJCWlfcmVscGFnZXMsCisJCQkJaV9yZWx0dXBsZXMsCisJCQkJaV9y ZWxhbGx2aXNpYmxlLAogCQkJCWlfcGFyZW50aWR4LAogCQkJCWlfaW5kZXhkZWYsCiAJCQkJaV9p bmRua2V5YXR0cywKQEAgLTc1NTIsNiArNzU2OCw3IEBAIGdldEluZGV4ZXMoQXJjaGl2ZSAqZm91 dCwgVGFibGVJbmZvIHRibGluZm9bXSwgaW50IG51bVRhYmxlcykKIAlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxdWVyeSwKIAkJCQkJCSAiU0VMRUNUIHQudGFibGVvaWQsIHQub2lkLCBpLmluZHJlbGlk LCAiCiAJCQkJCQkgInQucmVsbmFtZSBBUyBpbmRleG5hbWUsICIKKwkJCQkJCSAidC5yZWxwYWdl cywgdC5yZWx0dXBsZXMsIHQucmVsYWxsdmlzaWJsZSwgIgogCQkJCQkJICJwZ19jYXRhbG9nLnBn X2dldF9pbmRleGRlZihpLmluZGV4cmVsaWQpIEFTIGluZGV4ZGVmLCAiCiAJCQkJCQkgImkuaW5k a2V5LCBpLmluZGlzY2x1c3RlcmVkLCAiCiAJCQkJCQkgImMuY29udHlwZSwgYy5jb25uYW1lLCAi CkBAIC03NjU5LDYgKzc2NzYsOSBAQCBnZXRJbmRleGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5m byB0YmxpbmZvW10sIGludCBudW1UYWJsZXMpCiAJaV9vaWQgPSBQUWZudW1iZXIocmVzLCAib2lk Iik7CiAJaV9pbmRyZWxpZCA9IFBRZm51bWJlcihyZXMsICJpbmRyZWxpZCIpOwogCWlfaW5kZXhu YW1lID0gUFFmbnVtYmVyKHJlcywgImluZGV4bmFtZSIpOworCWlfcmVscGFnZXMgPSBQUWZudW1i ZXIocmVzLCAicmVscGFnZXMiKTsKKwlpX3JlbHR1cGxlcyA9IFBRZm51bWJlcihyZXMsICJyZWx0 dXBsZXMiKTsKKwlpX3JlbGFsbHZpc2libGUgPSBQUWZudW1iZXIocmVzLCAicmVsYWxsdmlzaWJs ZSIpOwogCWlfcGFyZW50aWR4ID0gUFFmbnVtYmVyKHJlcywgInBhcmVudGlkeCIpOwogCWlfaW5k ZXhkZWYgPSBQUWZudW1iZXIocmVzLCAiaW5kZXhkZWYiKTsKIAlpX2luZG5rZXlhdHRzID0gUFFm bnVtYmVyKHJlcywgImluZG5rZXlhdHRzIik7CkBAIC03NzI1LDYgKzc3NDUsOSBAQCBnZXRJbmRl eGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0YmxpbmZvW10sIGludCBudW1UYWJsZXMpCiAJ CQljaGFyCQljb250eXBlOwogCQkJY2hhcgkJaW5kZXhraW5kOwogCQkJUmVsU3RhdHNJbmZvICpy ZWxzdGF0czsKKwkJCWludDMyCQlyZWxwYWdlcyA9IGF0b2koUFFnZXR2YWx1ZShyZXMsIGosIGlf cmVscGFnZXMpKTsKKwkJCWZsb2F0CQlyZWx0dXBsZXMgPSBhdG9mKFBRZ2V0dmFsdWUocmVzLCBq LCBpX3JlbHR1cGxlcykpOworCQkJaW50MzIJCXJlbGFsbHZpc2libGUgPSBhdG9pKFBRZ2V0dmFs dWUocmVzLCBqLCBpX3JlbGFsbHZpc2libGUpKTsKIAogCQkJaW5keGluZm9bal0uZG9iai5vYmpU eXBlID0gRE9fSU5ERVg7CiAJCQlpbmR4aW5mb1tqXS5kb2JqLmNhdElkLnRhYmxlb2lkID0gYXRv b2lkKFBRZ2V0dmFsdWUocmVzLCBqLCBpX3RhYmxlb2lkKSk7CkBAIC03NzU5LDcgKzc3ODIsOCBA QCBnZXRJbmRleGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0YmxpbmZvW10sIGludCBudW1U YWJsZXMpCiAJCQkJaW5kZXhraW5kID0gUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWDsKIAogCQkJ Y29udHlwZSA9ICooUFFnZXR2YWx1ZShyZXMsIGosIGlfY29udHlwZSkpOwotCQkJcmVsc3RhdHMg PSBnZXRSZWxhdGlvblN0YXRpc3RpY3MoZm91dCwgJmluZHhpbmZvW2pdLmRvYmosIGluZGV4a2lu ZCk7CisJCQlyZWxzdGF0cyA9IGdldFJlbGF0aW9uU3RhdGlzdGljcyhmb3V0LCAmaW5keGluZm9b al0uZG9iaiwgcmVscGFnZXMsCisJCQkJCQkJCQkJCSByZWx0dXBsZXMsIHJlbGFsbHZpc2libGUs IGluZGV4a2luZCk7CiAKIAkJCWlmIChjb250eXBlID09ICdwJyB8fCBjb250eXBlID09ICd1JyB8 fCBjb250eXBlID09ICd4JykKIAkJCXsKQEAgLTEwMzgzLDE4ICsxMDQwNyw2IEBAIGR1bXBDb21t ZW50KEFyY2hpdmUgKmZvdXQsIGNvbnN0IGNoYXIgKnR5cGUsCiAJCQkJCQljYXRhbG9nSWQsIHN1 YmlkLCBkdW1wSWQsIE5VTEwpOwogfQogCi0vKgotICogVGFidWxhciBkZXNjcmlwdGlvbiBvZiB0 aGUgcGFyYW1ldGVycyB0byBwZ19yZXN0b3JlX3JlbGF0aW9uX3N0YXRzKCkKLSAqIHBhcmFtX25h bWUsIHBhcmFtX3R5cGUKLSAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnJlbF9zdGF0c19hcmdpbmZv W11bMl0gPSB7Ci0JeyJyZWxhdGlvbiIsICJyZWdjbGFzcyJ9LAotCXsidmVyc2lvbiIsICJpbnRl Z2VyIn0sCi0JeyJyZWxwYWdlcyIsICJpbnRlZ2VyIn0sCi0JeyJyZWx0dXBsZXMiLCAicmVhbCJ9 LAotCXsicmVsYWxsdmlzaWJsZSIsICJpbnRlZ2VyIn0sCi19OwotCiAvKgogICogVGFidWxhciBk ZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVycyB0byBwZ19yZXN0b3JlX2F0dHJpYnV0ZV9zdGF0 cygpCiAgKiBwYXJhbV9uYW1lLCBwYXJhbV90eXBlCkBAIC0xMDQxOSwzMCArMTA0MzEsNiBAQCBz dGF0aWMgY29uc3QgY2hhciAqYXR0X3N0YXRzX2FyZ2luZm9bXVsyXSA9IHsKIAl7InJhbmdlX2Jv dW5kc19oaXN0b2dyYW0iLCAidGV4dCJ9LAogfTsKIAotLyoKLSAqIGdldFJlbFN0YXRzRXhwb3J0 UXVlcnkgLS0KLSAqCi0gKiBHZW5lcmF0ZSBhIHF1ZXJ5IHRoYXQgd2lsbCBmZXRjaCBhbGwgcmVs YXRpb24gKGUuZy4gcGdfY2xhc3MpCi0gKiBzdGF0cyBmb3IgYSBnaXZlbiByZWxhdGlvbi4KLSAq Lwotc3RhdGljIHZvaWQKLWdldFJlbFN0YXRzRXhwb3J0UXVlcnkoUFFFeHBCdWZmZXIgcXVlcnks IEFyY2hpdmUgKmZvdXQsCi0JCQkJCSAgIGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsIGNvbnN0IGNo YXIgKnJlbG5hbWUpCi17Ci0JcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7Ci0JYXBwZW5kUFFFeHBC dWZmZXJTdHIocXVlcnksCi0JCQkJCQkgIlNFTEVDVCBjLm9pZDo6cmVnY2xhc3MgQVMgcmVsYXRp b24sICIKLQkJCQkJCSAiY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbl9udW0nKSBBUyB2 ZXJzaW9uLCAiCi0JCQkJCQkgImMucmVscGFnZXMsIGMucmVsdHVwbGVzLCBjLnJlbGFsbHZpc2li bGUgIgotCQkJCQkJICJGUk9NIHBnX2NsYXNzIGMgIgotCQkJCQkJICJKT0lOIHBnX25hbWVzcGFj ZSBuICIKLQkJCQkJCSAiT04gbi5vaWQgPSBjLnJlbG5hbWVzcGFjZSAiCi0JCQkJCQkgIldIRVJF IG4ubnNwbmFtZSA9ICIpOwotCWFwcGVuZFN0cmluZ0xpdGVyYWxBSChxdWVyeSwgc2NoZW1hbmFt ZSwgZm91dCk7Ci0JYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgQU5EIGMucmVsbmFtZSA9 ICIpOwotCWFwcGVuZFN0cmluZ0xpdGVyYWxBSChxdWVyeSwgcmVsbmFtZSwgZm91dCk7Ci19Ci0K IC8qCiAgKiBnZXRBdHRTdGF0c0V4cG9ydFF1ZXJ5IC0tCiAgKgpAQCAtMTA0NTQsMjEgKzEwNDQy LDIyIEBAIGdldEF0dFN0YXRzRXhwb3J0UXVlcnkoUFFFeHBCdWZmZXIgcXVlcnksIEFyY2hpdmUg KmZvdXQsCiAJCQkJCSAgIGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsIGNvbnN0IGNoYXIgKnJlbG5h bWUpCiB7CiAJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7Ci0JYXBwZW5kUFFFeHBCdWZmZXJTdHIo cXVlcnksCi0JCQkJCQkgIlNFTEVDVCBjLm9pZDo6cmVnY2xhc3MgQVMgcmVsYXRpb24sICIKLQkJ CQkJCSAicy5hdHRuYW1lLCIKLQkJCQkJCSAicy5pbmhlcml0ZWQsIgotCQkJCQkJICJjdXJyZW50 X3NldHRpbmcoJ3NlcnZlcl92ZXJzaW9uX251bScpIEFTIHZlcnNpb24sICIKLQkJCQkJCSAicy5u dWxsX2ZyYWMsIgotCQkJCQkJICJzLmF2Z193aWR0aCwiCi0JCQkJCQkgInMubl9kaXN0aW5jdCwi Ci0JCQkJCQkgInMubW9zdF9jb21tb25fdmFscywiCi0JCQkJCQkgInMubW9zdF9jb21tb25fZnJl cXMsIgotCQkJCQkJICJzLmhpc3RvZ3JhbV9ib3VuZHMsIgotCQkJCQkJICJzLmNvcnJlbGF0aW9u LCIKLQkJCQkJCSAicy5tb3N0X2NvbW1vbl9lbGVtcywiCi0JCQkJCQkgInMubW9zdF9jb21tb25f ZWxlbV9mcmVxcywiCi0JCQkJCQkgInMuZWxlbV9jb3VudF9oaXN0b2dyYW0sIik7CisJYXBwZW5k UFFFeHBCdWZmZXIocXVlcnksCisJCQkJCSAgIlNFTEVDVCBjLm9pZDo6cmVnY2xhc3MgQVMgcmVs YXRpb24sICIKKwkJCQkJICAicy5hdHRuYW1lLCIKKwkJCQkJICAicy5pbmhlcml0ZWQsIgorCQkJ CQkgICInJXUnOjppbnRlZ2VyIEFTIHZlcnNpb24sICIKKwkJCQkJICAicy5udWxsX2ZyYWMsIgor CQkJCQkgICJzLmF2Z193aWR0aCwiCisJCQkJCSAgInMubl9kaXN0aW5jdCwiCisJCQkJCSAgInMu bW9zdF9jb21tb25fdmFscywiCisJCQkJCSAgInMubW9zdF9jb21tb25fZnJlcXMsIgorCQkJCQkg ICJzLmhpc3RvZ3JhbV9ib3VuZHMsIgorCQkJCQkgICJzLmNvcnJlbGF0aW9uLCIKKwkJCQkJICAi cy5tb3N0X2NvbW1vbl9lbGVtcywiCisJCQkJCSAgInMubW9zdF9jb21tb25fZWxlbV9mcmVxcywi CisJCQkJCSAgInMuZWxlbV9jb3VudF9oaXN0b2dyYW0sIiwKKwkJCQkJICBmb3V0LT5yZW1vdGVW ZXJzaW9uKTsKIAogCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE3MDAwMCkKIAkJYXBwZW5k UFFFeHBCdWZmZXJTdHIocXVlcnksCkBAIC0xMDUyMSwzNCArMTA1MTAsMjEgQEAgYXBwZW5kTmFt ZWRBcmd1bWVudChQUUV4cEJ1ZmZlciBvdXQsIEFyY2hpdmUgKmZvdXQsIGNvbnN0IGNoYXIgKmFy Z25hbWUsCiAgKiBBcHBlbmQgYSBmb3JtYXR0ZWQgcGdfcmVzdG9yZV9yZWxhdGlvbl9zdGF0cyBz dGF0ZW1lbnQuCiAgKi8KIHN0YXRpYyB2b2lkCi1hcHBlbmRSZWxTdGF0c0ltcG9ydChQUUV4cEJ1 ZmZlciBvdXQsIEFyY2hpdmUgKmZvdXQsIFBHcmVzdWx0ICpyZXMpCithcHBlbmRSZWxTdGF0c0lt cG9ydChQUUV4cEJ1ZmZlciBvdXQsIEFyY2hpdmUgKmZvdXQsIGNvbnN0IFJlbFN0YXRzSW5mbyAq cnNpbmZvKQogewotCWNvbnN0IGNoYXIgKnNlcCA9ICIiOworCWNvbnN0IGNoYXIgKnF1YWxuYW1l ID0gZm10UXVhbGlmaWVkSWQocnNpbmZvLT5kb2JqLm5hbWVzcGFjZS0+ZG9iai5uYW1lLCByc2lu Zm8tPmRvYmoubmFtZSk7CisJY2hhcgkJcmVsdHVwbGVzX3N0cltGTE9BVF9TSE9SVEVTVF9ERUNJ TUFMX0xFTl07CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPT0gMCkKLQkJcmV0dXJuOworCWZsb2F0 X3RvX3Nob3J0ZXN0X2RlY2ltYWxfYnVmKHJzaW5mby0+cmVsdHVwbGVzLCByZWx0dXBsZXNfc3Ry KTsKIAogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKG91dCwgIlNFTEVDVCAqIEZST00gcGdfY2F0YWxv Zy5wZ19yZXN0b3JlX3JlbGF0aW9uX3N0YXRzKFxuIik7Ci0KLQlmb3IgKGludCBhcmdubyA9IDA7 IGFyZ25vIDwgbGVuZ3Rob2YocmVsX3N0YXRzX2FyZ2luZm8pOyBhcmdubysrKQotCXsKLQkJY29u c3QgY2hhciAqYXJnbmFtZSA9IHJlbF9zdGF0c19hcmdpbmZvW2FyZ25vXVswXTsKLQkJY29uc3Qg Y2hhciAqYXJndHlwZSA9IHJlbF9zdGF0c19hcmdpbmZvW2FyZ25vXVsxXTsKLQkJaW50CQkJZmll bGRubyA9IFBRZm51bWJlcihyZXMsIGFyZ25hbWUpOwotCi0JCWlmIChmaWVsZG5vIDwgMCkKLQkJ CXBnX2ZhdGFsKCJyZWxhdGlvbiBzdGF0cyBleHBvcnQgcXVlcnkgbWlzc2luZyBmaWVsZCAnJXMn IiwKLQkJCQkJIGFyZ25hbWUpOwotCi0JCWlmIChQUWdldGlzbnVsbChyZXMsIDAsIGZpZWxkbm8p KQotCQkJY29udGludWU7Ci0KLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIob3V0LCBzZXApOwotCQlh cHBlbmROYW1lZEFyZ3VtZW50KG91dCwgZm91dCwgYXJnbmFtZSwgUFFnZXR2YWx1ZShyZXMsIDAs IGZpZWxkbm8pLCBhcmd0eXBlKTsKLQotCQlzZXAgPSAiLFxuIjsKLQl9Ci0JYXBwZW5kUFFFeHBC dWZmZXJTdHIob3V0LCAiXG4pO1xuIik7CisJYXBwZW5kUFFFeHBCdWZmZXIob3V0LCAiXHQncmVs YXRpb24nLCAnJXMnOjpyZWdjbGFzcyxcbiIsIHF1YWxuYW1lKTsKKwlhcHBlbmRQUUV4cEJ1ZmZl cihvdXQsICJcdCd2ZXJzaW9uJywgJyV1Jzo6aW50ZWdlcixcbiIsCisJCQkJCSAgZm91dC0+cmVt b3RlVmVyc2lvbik7CisJYXBwZW5kUFFFeHBCdWZmZXIob3V0LCAiXHQncmVscGFnZXMnLCAnJWQn OjppbnRlZ2VyLFxuIiwgcnNpbmZvLT5yZWxwYWdlcyk7CisJYXBwZW5kUFFFeHBCdWZmZXIob3V0 LCAiXHQncmVsdHVwbGVzJywgJyVzJzo6cmVhbCxcbiIsIHJlbHR1cGxlc19zdHIpOworCWFwcGVu ZFBRRXhwQnVmZmVyKG91dCwgIlx0J3JlbGFsbHZpc2libGUnLCAnJWQnOjppbnRlZ2VyXG4pO1xu IiwKKwkJCQkJICByc2luZm8tPnJlbGFsbHZpc2libGUpOwogfQogCiAvKgpAQCAtMTA2NDMsMTUg KzEwNjE5LDExIEBAIGR1bXBSZWxhdGlvblN0YXRzKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFJlbFN0 YXRzSW5mbyAqcnNpbmZvKQogCXRhZyA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAJYXBwZW5kUFFF eHBCdWZmZXJTdHIodGFnLCBmbXRJZChkb2JqLT5uYW1lKSk7CiAKLQlxdWVyeSA9IGNyZWF0ZVBR RXhwQnVmZmVyKCk7CiAJb3V0ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAotCWdldFJlbFN0YXRz RXhwb3J0UXVlcnkocXVlcnksIGZvdXQsIGRvYmotPm5hbWVzcGFjZS0+ZG9iai5uYW1lLAotCQkJ CQkJICAgZG9iai0+bmFtZSk7Ci0JcmVzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5k YXRhLCBQR1JFU19UVVBMRVNfT0spOwotCWFwcGVuZFJlbFN0YXRzSW1wb3J0KG91dCwgZm91dCwg cmVzKTsKLQlQUWNsZWFyKHJlcyk7CisJYXBwZW5kUmVsU3RhdHNJbXBvcnQob3V0LCBmb3V0LCBy c2luZm8pOwogCisJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCWdldEF0dFN0YXRzRXhw b3J0UXVlcnkocXVlcnksIGZvdXQsIGRvYmotPm5hbWVzcGFjZS0+ZG9iai5uYW1lLAogCQkJCQkJ ICAgZG9iai0+bmFtZSk7CiAJcmVzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRh LCBQR1JFU19UVVBMRVNfT0spOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu aCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKaW5kZXggZjA4ZjU5MDVhYTMuLjlkNmE0ODU3 YzRiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmgKQEAgLTMyOCw3ICszMjgsNyBAQCB0eXBlZGVmIHN0cnVjdCBfdGFi bGVJbmZvCiAJT2lkCQkJb3duaW5nX3RhYjsJCS8qIE9JRCBvZiB0YWJsZSBvd25pbmcgc2VxdWVu Y2UgKi8KIAlpbnQJCQlvd25pbmdfY29sOwkJLyogYXR0ciAjIG9mIGNvbHVtbiBvd25pbmcgc2Vx dWVuY2UgKi8KIAlib29sCQlpc19pZGVudGl0eV9zZXF1ZW5jZTsKLQlpbnQJCQlyZWxwYWdlczsJ CS8qIHRhYmxlJ3Mgc2l6ZSBpbiBwYWdlcyAoZnJvbSBwZ19jbGFzcykgKi8KKwlpbnQzMgkJcmVs cGFnZXM7CQkvKiB0YWJsZSdzIHNpemUgaW4gcGFnZXMgKGZyb20gcGdfY2xhc3MpICovCiAJaW50 CQkJdG9hc3RwYWdlczsJCS8qIHRvYXN0IHRhYmxlJ3Mgc2l6ZSBpbiBwYWdlcywgaWYgYW55ICov CiAKIAlib29sCQlpbnRlcmVzdGluZzsJLyogdHJ1ZSBpZiBuZWVkIHRvIGNvbGxlY3QgbW9yZSBk YXRhICovCkBAIC00MzgsNiArNDM4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX2luZGV4QXR0YWNoSW5m bwogdHlwZWRlZiBzdHJ1Y3QgX3JlbFN0YXRzSW5mbwogewogCUR1bXBhYmxlT2JqZWN0IGRvYmo7 CisJaW50MzIJCXJlbHBhZ2VzOworCWZsb2F0CQlyZWx0dXBsZXM7CisJaW50MzIJCXJlbGFsbHZp c2libGU7CiAJY2hhcgkJcmVsa2luZDsJCS8qICdyJywgJ20nLCAnaScsIGV0YyAqLwogCWJvb2wJ CXBvc3Rwb25lZF9kZWY7CS8qIHN0YXRzIG11c3QgYmUgcG9zdHBvbmVkIGludG8gcG9zdC1kYXRh ICovCiB9IFJlbFN0YXRzSW5mbzsKLS0gCjIuMzQuMQoK --=-wWDDe0C4prUmpbLJAYHZ--