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 1unWrr-00895u-P4 for pgsql-hackers@arkaria.postgresql.org; Sun, 17 Aug 2025 06:27:49 +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 1unWrr-008sin-5k for pgsql-hackers@arkaria.postgresql.org; Sun, 17 Aug 2025 06:27:47 +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 1unWrq-008sie-Dy for pgsql-hackers@lists.postgresql.org; Sun, 17 Aug 2025 06:27:47 +0000 Received: from mail-ej1-x636.google.com ([2a00:1450:4864:20::636]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1unWro-000G7H-1B for pgsql-hackers@postgresql.org; Sun, 17 Aug 2025 06:27:46 +0000 Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-afcb7347e09so501877366b.0 for ; Sat, 16 Aug 2025 23:27:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755412062; x=1756016862; 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=AvmpZwNGmHFnlOKpbr4TKuja+HziJHnUx4/5BKctj+0=; b=Fr6+LvBZufyPJg5E6BRBZ4pfc9oB5XfVGKGS2hIskU0UNJUs2sTJZY1LWWMvfi9Rgj k9wzsi7gIDGpYwkpReSdwsnvzayCbPP4zywjkVTpRhSPmW8DtC4Q5iB2J1vE77M+PHaj psKgR4PKpQmVkYxhie33i5b5vAa5JM47jomos8r0Ul6XjO8lRqnW1HJMCx78+rGaO6N1 cEvIQKuRsf6cKMPPjDb6u1LPKZn3xgfop9wc0xbNh8SEgIFRMZMHp3Rxc2zk0YpY168G VQuCOdxiwJPsZmHpzqjLANnEtF9ntq5g4R/6kXaUiYI9MwqTSUBn7S8ERbMZRGP4MKh+ zGcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755412062; x=1756016862; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=AvmpZwNGmHFnlOKpbr4TKuja+HziJHnUx4/5BKctj+0=; b=q/xuNotvNPEFp5+sR2rOF4pkrj9rkVfHFAZd3zakPXiXzLE+G7DdCjUTPTvBEBlP/N RSA1oQzkuqBCNbdA/L/EzESW6vo6EBGn02nYQ+xna9RvGRlDcGJp1I7Y+RKp6UtGyLHl 0cicHbYPp5vgmkornjNG/+U67WMrSsE5s48ISZ0IWvMtZ6fQq78KF25d1DaKMc+O6ZAV 6V4+rFWrA23etSvBTcrY98RjDSwv1AJcYKiQTouywwJWbiQW6LSLUzhEPaAqpg1cX2iL LyCNYng3BKFe4ixamFTdGWVLuppVNpDwCDdDlK/YhCIVwVHWJKzyLyYAElJ3AY2duck0 N9NA== X-Forwarded-Encrypted: i=1; AJvYcCV9uO0O8ytEeePY9IUgOTU/sZswR4zdLEDBzhXNaJYRBa9gEUJJyIEJhcTIXfM+lW6qejxGzMZ07G4pKm0h@postgresql.org X-Gm-Message-State: AOJu0Ywe88Yvihs5wPy/r/miF5R4PU1AxxhsxI62bpSZJ2qvB7x97/Vc RwCF77DMqSkivLfbu/P14r7MX6GDYSbJnfJVDTM0d/pd4Le5Vfo98OBYZ2tuYRm7Fs4cStK6yPx TaplTwZco4KCXI0puVNcycBmEGhODi73B7k6L7mw= X-Gm-Gg: ASbGncsPSeKNnfxPQEC5v2ikYxBEVOmzA5BSPB2djUn1wLjNLgrpxT4PTH3dIwDC1Gw M9B2H/PSNNEw82bgQN/l9dwtyVPaSzQy4/ZV50zQuE1ddQbvKO1qT8rUKvSoDmhkNktFuv/VEDj kSYSxwchn/Gy8klx1SrolOpVmdT1LZrb/w9p+KEQnpgzFsr31FpnWKnc3hQwIxlj4yemWzDYBd4 ETYi1M= X-Google-Smtp-Source: AGHT+IEJT5AF2Nv/FrsFyF1ctu+MAergrnZEvVo1H2afFkGnEwWZrSxfcPD9CskBK/pSJV72wWn1CowXj6/ve6WPcAM= X-Received: by 2002:a17:906:46c4:b0:afc:ebfd:c297 with SMTP id a640c23a62f3a-afcebfdc4bfmr343637866b.56.1755412062239; Sat, 16 Aug 2025 23:27:42 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Naga Appani Date: Sun, 17 Aug 2025 01:27:29 -0500 X-Gm-Features: Ac12FXxpzHT6LF0CluEZvcnG_NTbB7mhzGklfY4_xwXnBaaFVJuwLTQv-Iimb6o Message-ID: Subject: Re: [Proposal] Expose internal MultiXact member count function for efficient monitoring To: Ashutosh Bapat Cc: Michael Paquier , Kirill Reshke , pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="00000000000067d36e063c89b81d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000067d36e063c89b81d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Michael, Ashutosh, Thanks a lot for the detailed reviews and feedback. Please find attached v4 of the patchset. Summary of changes in v4: - Split into two patches as suggested: 1. Expose and rename ReadMultiXactCounts() -> GetMultiXactInfo() in multixact.h with clearer comments. 2. Add pg_get_multixact_stats() as a SQL-callable function in a new file (multixactfuncs.c), with docs and tests. - Function now also returns oldestOffset for consistency. - Field names updated to num_mxids, num_members, oldest_multixact, oldest_offset. - Documentation revised to describe thresholds only in terms of member counts (disk size wording removed). - Added a minimal example in maintenance.sgml where multixact wraparound is already described. - Isolation tests are rewritten so they no longer depend on exact counts, but only on monotonic properties guaranteed while a multixact is pinned. Replies inline below: On Thu, Aug 7, 2025 at 7:35 PM Michael Paquier wrote: > > I really think that we should move the SQL function parts of multixact.c > into their own new file, exposing ReadMultiXactCounts() in multixact.h... Done. The SQL-callable code now lives in src/backend/utils/adt/multixactfuncs.c and the accessor is declared in src/include/access/multixact.h. > ReadMultiXactCounts() is also incorrectly named with your proposal to > expose oldestMultiXactId in the information returned to the caller... > So perhaps this should be named GetMultiXactInformation() or something > similar? Renamed to GetMultiXactInfo(). > The top of ReadMultiXactCounts() (or whatever its new name) should > also document the information returned across a single call. Added detailed comments about consistency under a single LWLock and the meaning of each field. > It looks inconsistent to return oldestMultiXactId if the > oldestOffsetKnown is false. What about oldestOffset itself? GetMultiXactInfo() now returns oldestOffset as well. If the oldest offset isn=E2=80=99t currently known, the function returns false and clears all outputs, so callers don=E2=80=99t see a partially valid struct. --- On Fri, Aug 8, 2025 at 4:33 AM Ashutosh Bapat wrote: > > Would it be better to do that math in the function and output the result? That=E2=80=99s a cool idea, thanks for pointing it out. For now I have kept= the SQL function focused only on exposing the raw counts (num_mxids, num_members, oldest IDs). My thought was that keeping the API lean makes it easier to maintain across versions, while leaving any derived calculations like approximate storage size to SQL or external tooling. This way the function remains simple and future-proof, while still giving users the building blocks to get the view they need. I=E2=80=99m happy to revisit this if others feel it would be better for the function to provide an approximate size directly =E2=80=94 I wanted to star= t with the simplest surface and gather feedback first. > Now that the name of the function is changed, we need the names to > indicate that they are counts e.g. num_mxids, num_members. Adjusted. The SQL function returns: num_mxids, num_members, oldest_multixact, oldest_offset. > This file doesn't provide usage examples of other functions. This > function doesn't seem to be an exception. Earlier I thought it was fine to add an example since pg_input_error_info() also has one, so in this version I placed the example in maintenance.sgml, where we already discuss multixact wraparound. That seemed like the most natural place for it. I agree with your point about consistency, though, so I kept the style minimal and aligned with the surrounding text. > I think we should mention that the statistics may get stale as soon as > it's fetched, even with REPEATABLE READ isolation level. Added a note that values are a live snapshot and can change immediately. > In case each member starts consuming more or less space than it does > today what would be the basis of triggering wraparound? Space or > number of members? I think we should mention only that. I updated the docs to describe wraparound in terms of member counts only. The earlier mention of disk size has been dropped, since the thresholds are defined by counts. > This is the right place to elaborate the usage of this function with an > example. Expanded with a short example, while keeping it consistent with nearby entries. > ... since startup or the number of existing members? Clarified that the values reflect what=E2=80=99s *currently in use* (i.e., derived from next/oldest) and that NULLs are returned if the multixact subsystem has not been initialized yet. > The last two lines are not required, I think. One of its usage is > monitoring but users may find other usages. Dropped those lines. > Vacuum may clean the multixact between commit2 and check, in which > case the result won't be stable. Right, the earlier version of the test assumed stable counts, which could fail if autovacuum or background cleanup removed entries in between steps. In v4 the isolation test no longer relies on exact numbers. Instead it asserts only the monotonic properties that are guaranteed while a multixact is pinned, and avoids assumptions once locks are released. That makes the test robust against concurrent vacuum activity. --- Thanks again for the thoughtful reviews and guidance. Please let me know if you see further adjustments needed. Best regards, Naga --00000000000067d36e063c89b81d Content-Type: application/octet-stream; name="v4-0001-Rename-ReadMultiXactCounts-to-GetMultiXactInfo-an.patch" Content-Disposition: attachment; filename="v4-0001-Rename-ReadMultiXactCounts-to-GetMultiXactInfo-an.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mef8o41d0 RnJvbSAxYTg1Yzk0ZjkzOTg1ZDM5YTYwOTBhMzVkMTU1ZjZlZTZjNzg4YzE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWdhIEFwcGFuaSA8bmFnbnJpa0BnbWFpbC5jb20+CkRhdGU6 IFNhdCwgMTYgQXVnIDIwMjUgMTc6NTE6NTIgKzAwMDAKU3ViamVjdDogW1BBVENIIHY0XSBSZW5h bWUgUmVhZE11bHRpWGFjdENvdW50cygpIHRvIEdldE11bHRpWGFjdEluZm8oKSBhbmQKIG1ha2Ug aXQgcHVibGljCgpGb2xsb3dpbmcgcmV2aWV3IGZlZWRiYWNrIGZyb20gTWljaGFlbCBQYXF1aWVy LCB0aGlzIHBhdGNoIGV4cG9zZXMKR2V0TXVsdGlYYWN0SW5mbygpLCBhIHB1YmxpYyBhY2Nlc3Nv ciB0aGF0IHJldHVybnMgc25hcHNob3Qgb2YKTXVsdGlYYWN0IHN0YXRlIChjb3VudHMgYW5kIGhv cml6b25zKSBpbiBvbmUgY2FsbCwgcmVwbGFjaW5nClJlYWRNdWx0aVhhY3RDb3VudHMoKS4KClBy b3ZpZGUgYSBzaW5nbGUgc25hcHNob3Qgb2YgTXVsdGlYYWN0IHN0YXRlIGFuZCByZXR1cm46Ci0g bXVsdGl4YWN0cwotIG1lbWJlcnMKLSBvbGRlc3RNdWx0aVhhY3RJZAotIG9sZGVzdE9mZnNldAoK UmV0dXJuIGZhbHNlIHdoZW4gdGhlIG9sZGVzdCBvZmZzZXQgaXMgbm90IGtub3duOyBpbiB0aGF0 IGNhc2Ugc2V0IGFsbApvdXRwdXRzIHRvIDAvaW52YWxpZCBmb3IgY29uc2lzdGVuY3kuICBEZWNs YXJlIHRoZSBmdW5jdGlvbiBpbgptdWx0aXhhY3QuaCBhbmQgc3dpdGNoIE11bHRpWGFjdE1lbWJl ckZyZWV6ZVRocmVzaG9sZCgpIHRvIHRoZSBuZXcgQVBJLgoKVGhpcyBhY2Nlc3NvciB1bmRlcnBp bnMgcGdfZ2V0X211bHRpeGFjdF9zdGF0cygpIGFuZCBpcyBhdmFpbGFibGUgdG8KZXh0ZW5zaW9u cyB0aGF0IHdpc2ggdG8gbW9uaXRvciBNdWx0aVhhY3QgdXNhZ2UuCgpBdXRob3I6IE5hZ2EgQXBw YW5pIDxuYWducmlrQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFzaHV0b3NoIEJhcGF0IDxhc2h1 dG9zaC5iYXBhdC5vc3NAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogTWljaGFlbCBQYXF1aWVyIDxt aWNoYWVsQHBhcXVpZXIueHl6PgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9y Zy9tZXNzYWdlLWlkL2ZsYXQvQ0ElMkJRZVklMkJBQXNZSzZXdkJXNHFZekh6NGJhaEh5Y0RBWV9x NUVDbUhrRVZfZUI5Y2t6ZyU0MG1haWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vbXVsdGl4YWN0LmMgfCA0NSArKysrKysrKysrKysrKysrKystLS0tLS0tLQogc3Jj L2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oICAgICAgICAgfCAgMSArCiAyIGZpbGVzIGNoYW5n ZWQsIDMyIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vbXVsdGl4YWN0LmMKaW5kZXggM2NiMDljM2Q1OTguLmVlZWVjODFhYmM5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtMjg1OSwzMSArMjg1OSw0NiBAQCBm aW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpy ZXN1bHQpCiB9CiAKIC8qCi0gKiBEZXRlcm1pbmUgaG93IG1hbnkgbXVsdGl4YWN0cywgYW5kIGhv dyBtYW55IG11bHRpeGFjdCBtZW1iZXJzLCBjdXJyZW50bHkKLSAqIGV4aXN0LiAgUmV0dXJuIGZh bHNlIGlmIHVuYWJsZSB0byBkZXRlcm1pbmUuCisgKiBHZXRNdWx0aVhhY3RJbmZvCisgKgorICog UmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IE11bHRpWGFjdCBzdGF0ZSBpbiBhIHNp bmdsZSBhdG9taWMgcmVhZDoKKyAqCQktIG11bHRpeGFjdHM6IE51bWJlciBvZiBNdWx0aVhhY3Rz IChuZXh0TXVsdGlYYWN0SWQgLSBvbGRlc3RNdWx0aVhhY3RJZCkKKyAqCQktIG1lbWJlcnM6IE51 bWJlciBvZiBtZW1iZXIgZW50cmllcyAobmV4dE9mZnNldCAtIG9sZGVzdE9mZnNldCkKKyAqCQkt IG9sZGVzdE11bHRpWGFjdElkOiBPbGRlc3QgTXVsdGlYYWN0IElEIHN0aWxsIGluIHVzZQorICoJ CS0gb2xkZXN0T2Zmc2V0OiBPbGRlc3Qgb2Zmc2V0IHN0aWxsIGluIHVzZQorICoKKyAqIFJldHVy bnMgZmFsc2UgaWYgdGhlIG9sZGVzdCBvZmZzZXQgaXMgbm90IGtub3duLCBpbiB3aGljaCBjYXNl IGFsbCBvdXRwdXQKKyAqIHBhcmFtZXRlcnMgYXJlIHNldCB0byAwL2ludmFsaWQgdmFsdWVzIGZv ciBjb25zaXN0ZW5jeS4KICAqLwotc3RhdGljIGJvb2wKLVJlYWRNdWx0aVhhY3RDb3VudHModWlu dDMyICptdWx0aXhhY3RzLCBNdWx0aVhhY3RPZmZzZXQgKm1lbWJlcnMpCitib29sCitHZXRNdWx0 aVhhY3RJbmZvKHVpbnQzMiAqbXVsdGl4YWN0cywgTXVsdGlYYWN0T2Zmc2V0ICptZW1iZXJzLAor CQkJCSBNdWx0aVhhY3RJZCAqb2xkZXN0TXVsdGlYYWN0SWQsIE11bHRpWGFjdE9mZnNldCAqb2xk ZXN0T2Zmc2V0KQogewotCU11bHRpWGFjdE9mZnNldCBuZXh0T2Zmc2V0OwotCU11bHRpWGFjdE9m ZnNldCBvbGRlc3RPZmZzZXQ7Ci0JTXVsdGlYYWN0SWQgb2xkZXN0TXVsdGlYYWN0SWQ7Ci0JTXVs dGlYYWN0SWQgbmV4dE11bHRpWGFjdElkOwotCWJvb2wJCW9sZGVzdE9mZnNldEtub3duOworCU11 bHRpWGFjdE9mZnNldAluZXh0T2Zmc2V0OworCU11bHRpWGFjdElkCQluZXh0TXVsdGlYYWN0SWQ7 CisJYm9vbAkJCW9sZGVzdE9mZnNldEtub3duOwogCisJLyogVGFrZSBvbmUgY29uc2lzdGVudCBz bmFwc2hvdCBvZiB0aGUgc3RhdGUgKi8KIAlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ss IExXX1NIQVJFRCk7CiAJbmV4dE9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0Owot CW9sZGVzdE11bHRpWGFjdElkID0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdElkOwor CSpvbGRlc3RNdWx0aVhhY3RJZCA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3RJZDsK IAluZXh0TXVsdGlYYWN0SWQgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0OwotCW9sZGVzdE9m ZnNldCA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXQ7CisJKm9sZGVzdE9mZnNldCA9IE11 bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXQ7CiAJb2xkZXN0T2Zmc2V0S25vd24gPSBNdWx0aVhh Y3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd247CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5M b2NrKTsKIAogCWlmICghb2xkZXN0T2Zmc2V0S25vd24pCisJeworCQkvKiBTZXQgYWxsIG91dHB1 dHMgdG8gMC9pbnZhbGlkIGZvciBjb25zaXN0ZW5jeSAqLworCQkqbWVtYmVycyA9IDA7CisJCSpt dWx0aXhhY3RzID0gMDsKKwkJKm9sZGVzdE11bHRpWGFjdElkID0gSW52YWxpZE11bHRpWGFjdElk OworCQkqb2xkZXN0T2Zmc2V0ID0gMDsKIAkJcmV0dXJuIGZhbHNlOworCX0KIAotCSptZW1iZXJz ID0gbmV4dE9mZnNldCAtIG9sZGVzdE9mZnNldDsKLQkqbXVsdGl4YWN0cyA9IG5leHRNdWx0aVhh Y3RJZCAtIG9sZGVzdE11bHRpWGFjdElkOworCSptZW1iZXJzID0gbmV4dE9mZnNldCAtICpvbGRl c3RPZmZzZXQ7CisJKm11bHRpeGFjdHMgPSBuZXh0TXVsdGlYYWN0SWQgLSAqb2xkZXN0TXVsdGlY YWN0SWQ7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI5MjIsOSArMjkzNywxMSBAQCBNdWx0aVhh Y3RNZW1iZXJGcmVlemVUaHJlc2hvbGQodm9pZCkKIAl1aW50MzIJCXZpY3RpbV9tdWx0aXhhY3Rz OwogCWRvdWJsZQkJZnJhY3Rpb247CiAJaW50CQkJcmVzdWx0OworCU11bHRpWGFjdElkCW9sZGVz dE11bHRpWGFjdElkOworCU11bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQ7CiAKIAkvKiBJZiB3 ZSBjYW4ndCBkZXRlcm1pbmUgbWVtYmVyIHNwYWNlIHV0aWxpemF0aW9uLCBhc3N1bWUgdGhlIHdv cnN0LiAqLwotCWlmICghUmVhZE11bHRpWGFjdENvdW50cygmbXVsdGl4YWN0cywgJm1lbWJlcnMp KQorCWlmICghR2V0TXVsdGlYYWN0SW5mbygmbXVsdGl4YWN0cywgJm1lbWJlcnMsICZvbGRlc3RN dWx0aVhhY3RJZCwgJm9sZGVzdE9mZnNldCkpCiAJCXJldHVybiAwOwogCiAJLyogSWYgbWVtYmVy IHNwYWNlIHV0aWxpemF0aW9uIGlzIGxvdywgbm8gc3BlY2lhbCBhY3Rpb24gaXMgcmVxdWlyZWQu ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKaW5kZXggYjg3NmU5OGY0NmUuLmUwODc4NDYxYzJjIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL211bHRpeGFjdC5oCkBAIC0xNTgsNSArMTU4LDYgQEAgZXh0ZXJuIHZvaWQgbXVs dGl4YWN0X2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKIGV4 dGVybiBjb25zdCBjaGFyICptdWx0aXhhY3RfaWRlbnRpZnkodWludDggaW5mbyk7CiBleHRlcm4g Y2hhciAqbXhpZF90b19zdHJpbmcoTXVsdGlYYWN0SWQgbXVsdGksIGludCBubWVtYmVycywKIAkJ CQkJCQlNdWx0aVhhY3RNZW1iZXIgKm1lbWJlcnMpOworZXh0ZXJuIGJvb2wgR2V0TXVsdGlYYWN0 SW5mbyh1aW50MzIgKm11bHRpeGFjdHMsIE11bHRpWGFjdE9mZnNldCAqbWVtYmVycywgTXVsdGlY YWN0SWQgKm9sZGVzdE11bHRpWGFjdElkLCBNdWx0aVhhY3RPZmZzZXQgKm9sZGVzdE9mZnNldCk7 CiAKICNlbmRpZgkJCQkJCQkvKiBNVUxUSVhBQ1RfSCAqLwotLSAKMi40Ny4zCgo= --00000000000067d36e063c89b81d Content-Type: application/octet-stream; name="v4-0001-Add-pg_get_multixact_stats-function-for-monitorin.patch" Content-Disposition: attachment; filename="v4-0001-Add-pg_get_multixact_stats-function-for-monitorin.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mef8o41h1 RnJvbSA0NmMwYzNkNjMyYTA2OWE3MDkyM2RkOGQzNzhiNmM1ZDkyYjdlYjFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWdhIEFwcGFuaSA8bmFnbnJpa0BnbWFpbC5jb20+CkRhdGU6 IFNhdCwgMTYgQXVnIDIwMjUgMTc6NTI6MDYgKzAwMDAKU3ViamVjdDogW1BBVENIIHY0XSBBZGQg cGdfZ2V0X211bHRpeGFjdF9zdGF0cygpIGZ1bmN0aW9uIGZvciBtb25pdG9yaW5nCiBNdWx0aVhh Y3QgdXNhZ2UKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFy c2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCkV4cG9zZSBtdWx0aXhh Y3Qgc3RhdGUgdmlhIGEgbmV3IFNRTC1jYWxsYWJsZSBmdW5jdGlvbgpwZ19nZXRfbXVsdGl4YWN0 X3N0YXRzKCksIHJldHVybmluZzoKCi0gbnVtX214aWRzICAgICAgICAgIDogbnVtYmVyIG9mIE11 bHRpWGFjdCBJRHMgaW4gdXNlCi0gbnVtX21lbWJlcnMgICAgICAgIDogbnVtYmVyIG9mIG1lbWJl ciBlbnRyaWVzIGluIHVzZQotIG9sZGVzdF9tdWx0aXhhY3QgICA6IG9sZGVzdCBNdWx0aVhhY3Qg SUQgc3RpbGwgbmVlZGVkCi0gb2xkZXN0X29mZnNldCAgICAgIDogb2xkZXN0IG1lbWJlciBvZmZz ZXQgc3RpbGwgaW4gdXNlCgpUaGUgZnVuY3Rpb24gcmV0dXJucyBOVUxMcyBpZiB0aGUgTXVsdGlY YWN0IHN1YnN5c3RlbSBpcyBub3QgeWV0CmluaXRpYWxpemVkLgoKQW4gaXNvbGF0aW9uIHRlc3Qg KG11bHRpeGFjdF9zdGF0cykgYXNzZXJ0cyBvbmx5IGludmFyaWFudHMgdGhhdCBhcmUKc3RhYmxl IHdoaWxlIGEgbmV3bHkgY3JlYXRlZCBtdWx0aXhhY3QgaXMgcGlubmVkOiAoMSkgYWRkaW5nIGEg c2Vjb25kCmxvY2tlciBvbiB0aGUgc2FtZSB0dXBsZSBpbmNyZWFzZXMgbWVtYmVycyBieSDiiaUx OyAoMikgbnVtX214aWRzIGFuZApudW1fbWVtYmVycyBkbyBub3QgZGVjcmVhc2UgYWNyb3NzIHNu YXBzaG90czsgYW5kICgzKSBvbGRlc3RfKiBuZXZlcgpkZWNyZWFzZS4gVGhlIHRlc3QgcHJpbnRz IGEgZGV0ZXJtaW5pc3RpYyBrZXkvdmFsdWUgdGFibGUKKCJhc3NlcnRpb24gfCBvayIpIGFuZCBt YWtlcyBubyBhc3NlcnRpb25zIGFmdGVyIGxvY2tzIGFyZSByZWxlYXNlZCwKc28gaXQgcmVtYWlu cyByb2J1c3QgZXZlbiBpZiBiYWNrZ3JvdW5kIFZBQ1VVTS9GUkVFWkUgcnVucy4KCkRvY3VtZW50 YXRpb24gdXBkYXRlczoKLSBmdW5jLWluZm8uc2dtbDogYWRkIGZ1bmN0aW9uIGVudHJ5Ci0gbWFp bnRlbmFuY2Uuc2dtbDogbWVudGlvbiBtb25pdG9yaW5nIG11bHRpeGFjdCB1c2FnZQoKQnVpbGQg YW5kIGNhdGFsb2c6Ci0gbmV3IG1vZHVsZTogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L211bHRpeGFj dGZ1bmNzLmMKLSBwZ19wcm9jLmRhdCBlbnRyeQotIG1lc29uLmJ1aWxkIGludGVncmF0aW9uCgpE aXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvQ0El MkJRZVklMkJBQXNZSzZXdkJXNHFZekh6NGJhaEh5Y0RBWV9xNUVDbUhrRVZfZUI5Y2t6ZyU0MG1h aWwuZ21haWwuY29tCkF1dGhvcjogTmFnYSBBcHBhbmkgPG5hZ25yaWtAZ21haWwuY29tPgpSZXZp ZXdlZC1ieTogQXNodXRvc2ggQmFwYXQgPGFzaHV0b3NoLmJhcGF0Lm9zc0BnbWFpbC5jb20+ClJl dmlld2VkLWJ5OiBNaWNoYWVsIFBhcXVpZXIgPG1pY2hhZWxAcGFxdWllci54eXo+Ci0tLQogZG9j L3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwgICAgICAgICAgICAgIHwgIDI4ICsrKysKIGRv Yy9zcmMvc2dtbC9tYWludGVuYW5jZS5zZ21sICAgICAgICAgICAgICAgICB8ICA1NCArKysrKysr LQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAxICsK IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9tZXNvbi5idWlsZCAgICAgICAgICAgICB8ICAgMSArCiBz cmMvYmFja2VuZC91dGlscy9hZHQvbXVsdGl4YWN0ZnVuY3MuYyAgICAgICAgfCAgNjIgKysrKysr KysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgMTUg KysKIC4uLi9pc29sYXRpb24vZXhwZWN0ZWQvbXVsdGl4YWN0X3N0YXRzLm91dCAgICB8ICA5NCAr KysrKysrKysrKysrCiBzcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlICAgICAg ICAgfCAgIDEgKwogc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL211bHRpeGFjdF9zdGF0cy5zcGVj IHwgMTI4ICsrKysrKysrKysrKysrKysrKwogOSBmaWxlcyBjaGFuZ2VkLCAzNzkgaW5zZXJ0aW9u cygrKSwgNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC91dGls cy9hZHQvbXVsdGl4YWN0ZnVuY3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2lzb2xh dGlvbi9leHBlY3RlZC9tdWx0aXhhY3Rfc3RhdHMub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3Rlc3QvaXNvbGF0aW9uL3NwZWNzL211bHRpeGFjdF9zdGF0cy5zcGVjCgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5j LWluZm8uc2dtbAppbmRleCBjMzkzODMyZDk0Yy4uZWEwNjNmNmE4MWQgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1 bmMtaW5mby5zZ21sCkBAIC0yOTc1LDYgKzI5NzUsMzQgQEAgYWNsICAgICAgfCB7cG9zdGdyZXM9 YXJ3ZER4dG0vcG9zdGdyZXMsZm9vPXIvcG9zdGdyZXN9CiAgICAgICAgIG1vZGlmeSBrZXkgY29s dW1ucy4KICAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgIDwvcm93PgorCisgICAgICA8cm93 PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5j X3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5wZ19n ZXRfbXVsdGl4YWN0X3N0YXRzPC9wcmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAg ICAgPGZ1bmN0aW9uPnBnX2dldF9tdWx0aXhhY3Rfc3RhdHM8L2Z1bmN0aW9uPiAoKQorICAgICAg ICA8cmV0dXJudmFsdWU+cmVjb3JkPC9yZXR1cm52YWx1ZT4KKyAgICAgICAgKCA8cGFyYW1ldGVy Pm51bV9teGlkczwvcGFyYW1ldGVyPiA8dHlwZT5pbnRlZ2VyPC90eXBlPiwKKyAgICAgICAgICA8 cGFyYW1ldGVyPm51bV9tZW1iZXJzPC9wYXJhbWV0ZXI+IDx0eXBlPmJpZ2ludDwvdHlwZT4sCisg ICAgICAgICAgPHBhcmFtZXRlcj5vbGRlc3RfbXVsdGl4YWN0PC9wYXJhbWV0ZXI+IDx0eXBlPnhp ZDwvdHlwZT4sCisgICAgICAgICAgPHBhcmFtZXRlcj5vbGRlc3Rfb2Zmc2V0PC9wYXJhbWV0ZXI+ IDx0eXBlPmJpZ2ludDwvdHlwZT4gKQorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAg ICAgICAgUmV0dXJucyBzdGF0aXN0aWNzIGFib3V0IGN1cnJlbnQgbXVsdGl4YWN0IHVzYWdlOgor ICAgICAgICA8bGl0ZXJhbD5udW1fbXhpZHM8L2xpdGVyYWw+IGlzIHRoZSBudW1iZXIgb2YgbXVs dGl4YWN0IElEcyBhc3NpZ25lZCwKKyAgICAgICAgPGxpdGVyYWw+bnVtX21lbWJlcnM8L2xpdGVy YWw+IGlzIHRoZSBudW1iZXIgb2YgbXVsdGl4YWN0IG1lbWJlciBlbnRyaWVzIGNyZWF0ZWQsCisg ICAgICAgIDxsaXRlcmFsPm9sZGVzdF9tdWx0aXhhY3Q8L2xpdGVyYWw+IGlzIHRoZSBvbGRlc3Qg bXVsdGl4YWN0IElEIHN0aWxsIGluIHVzZSwgYW5kCisgICAgICAgIDxsaXRlcmFsPm9sZGVzdF9v ZmZzZXQ8L2xpdGVyYWw+IGlzIHRoZSBvbGRlc3QgbWVtYmVyIG9mZnNldCBzdGlsbCBpbiB1c2Uu CisgICAgICAgIFRoZXNlIHZhbHVlcyBjYW4gYmUgdXNlZCB0byBtb25pdG9yIG11bHRpeGFjdCBj b25zdW1wdGlvbiBhbmQgYW50aWNpcGF0ZQorICAgICAgICBhdXRvdmFjdXVtIGJlaGF2aW9yLiBT ZWUgPHhyZWYgbGlua2VuZD0idmFjdXVtLWZvci1tdWx0aXhhY3Qtd3JhcGFyb3VuZCIvPgorICAg ICAgICBmb3IgZnVydGhlciBkZXRhaWxzIG9uIG11bHRpeGFjdCB3cmFwYXJvdW5kLgorICAgICAg IDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBpcyBhIGxpdmUgc25hcHNob3Qg b2Ygc2hhcmVkIGNvdW50ZXJzOyB0aGUgbnVtYmVycyBjYW4gY2hhbmdlIGJldHdlZW4gY2FsbHMs IAorICAgICAgICBldmVuIHdpdGhpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbi4KKyAgICAgICA8L3Bh cmE+PC9lbnRyeT4KKyAgICAgIDwvcm93PgogICAgICA8L3Rib2R5PgogICAgIDwvdGdyb3VwPgog ICAgPC90YWJsZT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9tYWludGVuYW5jZS5zZ21sIGIv ZG9jL3NyYy9zZ21sL21haW50ZW5hbmNlLnNnbWwKaW5kZXggZTdhOWY1OGMwMTUuLmUzYTYzYzVi ODY0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbWFpbnRlbmFuY2Uuc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvbWFpbnRlbmFuY2Uuc2dtbApAQCAtODEzLDEyICs4MTMsNTYgQEAgSElOVDogIEV4 ZWN1dGUgYSBkYXRhYmFzZS13aWRlIFZBQ1VVTSBpbiB0aGF0IGRhdGFiYXNlLgogICAgIDxwYXJh PgogICAgICBBcyBhIHNhZmV0eSBkZXZpY2UsIGFuIGFnZ3Jlc3NpdmUgdmFjdXVtIHNjYW4gd2ls bAogICAgICBvY2N1ciBmb3IgYW55IHRhYmxlIHdob3NlIG11bHRpeGFjdC1hZ2UgaXMgZ3JlYXRl ciB0aGFuIDx4cmVmCi0gICAgIGxpbmtlbmQ9Imd1Yy1hdXRvdmFjdXVtLW11bHRpeGFjdC1mcmVl emUtbWF4LWFnZSIvPi4gIEFsc28sIGlmIHRoZQotICAgICBzdG9yYWdlIG9jY3VwaWVkIGJ5IG11 bHRpeGFjdHMgbWVtYmVycyBleGNlZWRzIGFib3V0IDEwR0IsIGFnZ3Jlc3NpdmUgdmFjdXVtCisg ICAgIGxpbmtlbmQ9Imd1Yy1hdXRvdmFjdXVtLW11bHRpeGFjdC1mcmVlemUtbWF4LWFnZSIvPi4g QWxzbywgaWYgdGhlIG51bWJlcgorICAgICBvZiBtZW1iZXJzIGNyZWF0ZWQgZXhjZWVkcyBhcHBy b3hpbWF0ZWx5IDIgYmlsbGlvbiBlbnRyaWVzLCBhZ2dyZXNzaXZlIHZhY3V1bQogICAgICBzY2Fu cyB3aWxsIG9jY3VyIG1vcmUgb2Z0ZW4gZm9yIGFsbCB0YWJsZXMsIHN0YXJ0aW5nIHdpdGggdGhv c2UgdGhhdAotICAgICBoYXZlIHRoZSBvbGRlc3QgbXVsdGl4YWN0LWFnZS4gIEJvdGggb2YgdGhl c2Uga2luZHMgb2YgYWdncmVzc2l2ZQotICAgICBzY2FucyB3aWxsIG9jY3VyIGV2ZW4gaWYgYXV0 b3ZhY3V1bSBpcyBub21pbmFsbHkgZGlzYWJsZWQuIFRoZSBtZW1iZXJzIHN0b3JhZ2UKLSAgICAg YXJlYSBjYW4gZ3JvdyB1cCB0byBhYm91dCAyMEdCIGJlZm9yZSByZWFjaGluZyB3cmFwYXJvdW5k LgorICAgICBoYXZlIHRoZSBvbGRlc3QgbXVsdGl4YWN0LWFnZS4gQm90aCBvZiB0aGVzZSBraW5k cyBvZiBhZ2dyZXNzaXZlCisgICAgIHNjYW5zIHdpbGwgb2NjdXIgZXZlbiBpZiBhdXRvdmFjdXVt IGlzIG5vbWluYWxseSBkaXNhYmxlZC4gVGhlIG1lbWJlcnMgY2FuIGdyb3cgCisgICAgIHVwIHRv IGFwcHJveGltYXRlbHkgNCBiaWxsaW9uIGVudHJpZXMgYmVmb3JlIHJlYWNoaW5nIHdyYXBhcm91 bmQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgIFRoZSA8ZnVuY3Rpb24+cGdfZ2V0 X211bHRpeGFjdF9zdGF0cygpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIGRlc2NyaWJlZCBpbgorICAg ICA8eHJlZiBsaW5rZW5kPSJmdW5jdGlvbnMtcGctc25hcHNob3QiLz4sIHByb3ZpZGVzIGEgd2F5 IHRvIG1vbml0b3IKKyAgICAgbXVsdGl4YWN0IGFsbG9jYXRpb24gYW5kIHVzYWdlIHBhdHRlcm5z IGluIHJlYWwgdGltZS4gRm9yIGV4YW1wbGU6CisgICAgIDxwcm9ncmFtbGlzdGluZz4KK3Bvc3Rn cmVzPSMgU0VMRUNUICogRlJPTSBwZ19jYXRhbG9nLnBnX2dldF9tdWx0aXhhY3Rfc3RhdHMoKTsK KyBudW1fbXhpZHMgfCBudW1fbWVtYmVycyB8IG9sZGVzdF9tdWx0aXhhY3QgfCBvbGRlc3Rfb2Zm c2V0CistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0KKyAgOTk4ODM4NDkgfCAgIDc3MzQ2ODc0NyB8ICAgICAgICAgMzk5NzQzNjggfCAg ICAgMzUxOTUyOTc4CisoMSByb3cpCisgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgIFRoaXMg b3V0cHV0IHNob3dzIGEgc3lzdGVtIHdpdGggc2lnbmlmaWNhbnQgbXVsdGl4YWN0IGFjdGl2aXR5 OiBhYm91dCB+MTAwIG1pbGxpb24KKyAgICAgbXVsdGl4YWN0IElEcyBhbmQgfjc3MyBtaWxsaW9u IG1lbWJlciBlbnRyaWVzIGhhdmUgYmVlbiBjcmVhdGVkIHNpbmNlIHRoZSBvbGRlc3QKKyAgICAg c3Vydml2aW5nIG11bHRpeGFjdCAoSUQgMzk5NzQzNjgpLiBCeSBsZXZlcmFnaW5nIHRoaXMgaW5m b3JtYXRpb24sIHRoZSBmdW5jdGlvbiBoZWxwczoKKyAgICAgPG9yZGVyZWRsaXN0PgorICAgICAg PGxpc3RpdGVtPgorICAgICAgIDxzaW1wYXJhPgorICAgICAgICBJZGVudGlmeSB1bnVzdWFsIG11 bHRpeGFjdCBhY3Rpdml0eSBmcm9tIGNvbmN1cnJlbnQgcm93LWxldmVsIGxvY2tzCisgICAgICAg IG9yIGZvcmVpZ24ga2V5IG9wZXJhdGlvbnMuIEZvciBleGFtcGxlLCBhIHNwaWtlIGluIG51bV9t eGlkcyBtaWdodCBpbmRpY2F0ZQorICAgICAgICBtdWx0aXBsZSBzZXNzaW9ucyBydW5uaW5nIFVQ REFURSBzdGF0ZW1lbnRzIHdpdGggZm9yZWlnbiBrZXkgY2hlY2tzLAorICAgICAgICBjb25jdXJy ZW50IFNFTEVDVCBGT1IgU0hBUkUgb3BlcmF0aW9ucywgb3IgZnJlcXVlbnQgdXNlIG9mIHNhdmVw b2ludHMKKyAgICAgICAgY2F1c2luZyBsb2NrIGNvbnRlbnRpb24uCisgICAgICAgPC9zaW1wYXJh PgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8c2ltcGFyYT4K KyAgICAgICAgVHJhY2sgbXVsdGl4YWN0IGNsZWFudXAgZWZmaWNpZW5jeSBieSBtb25pdG9yaW5n IG9sZGVzdF9tdWx0aXhhY3QuCisgICAgICAgIElmIHRoaXMgdmFsdWUgcmVtYWlucyB1bmNoYW5n ZWQgd2hpbGUgbnVtX21lbWJlcnMgZ3Jvd3MsIGl0IGNvdWxkIGluZGljYXRlCisgICAgICAgIHRo YXQgbG9uZy1ydW5uaW5nIHRyYW5zYWN0aW9ucyBhcmUgcHJldmVudGluZyBjbGVhbnVwLCBvciBh dXRvdmFjdXVtIGlzCisgICAgICAgIG5vdCBrZWVwaW5nIHVwIHdpdGggdGhlIHdvcmtsb2FkLgor ICAgICAgIDwvc2ltcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgPHNpbXBhcmE+CisgICAgICAgIERldGVjdCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1w YWN0cyBiZWZvcmUgdGhleSBiZWNvbWUgY3JpdGljYWwuCisgICAgICAgIEZvciBpbnN0YW5jZSwg aGlnaCBtdWx0aXhhY3QgdXNhZ2UgZnJvbSBmcmVxdWVudCByb3ctbGV2ZWwgbG9ja2luZyBvcgor ICAgICAgICBmb3JlaWduIGtleSBvcGVyYXRpb25zIGNhbiBsZWFkIHRvIGluY3JlYXNlZCBJL08g YW5kIENQVSBvdmVyaGVhZCBkdXJpbmcKKyAgICAgICAgdmFjdXVtIG9wZXJhdGlvbnMuIE1vbml0 b3JpbmcgdGhlc2Ugc3RhdHMgaGVscHMgdHVuZSBhdXRvdmFjdXVtIGZyZXF1ZW5jeQorICAgICAg ICBhbmQgdHJhbnNhY3Rpb24gcGF0dGVybnMuCisgICAgICAgPC9zaW1wYXJhPgorICAgICAgPC9s aXN0aXRlbT4KKyAgICAgPC9vcmRlcmVkbGlzdD4KICAgICA8L3BhcmE+CiAKICAgICA8cGFyYT4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9NYWtlZmlsZQppbmRleCBmZmVhY2YyYjgxOS4uY2M2OGFjNTQ1YTUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvTWFrZWZpbGUKQEAgLTY4LDYgKzY4LDcgQEAgT0JKUyA9IFwKIAltaXNjLm8gXAog CW11bHRpcmFuZ2V0eXBlcy5vIFwKIAltdWx0aXJhbmdldHlwZXNfc2VsZnVuY3MubyBcCisJbXVs dGl4YWN0ZnVuY3MubyBcCiAJbmFtZS5vIFwKIAluZXR3b3JrLm8gXAogCW5ldHdvcmtfZ2lzdC5v IFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tZXNvbi5idWlsZCBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9tZXNvbi5idWlsZAppbmRleCBlZDliYmQ3YjkyNi4uZGFjMzcyYzNi ZWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tZXNvbi5idWlsZAorKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvbWVzb24uYnVpbGQKQEAgLTU1LDYgKzU1LDcgQEAgYmFja2Vu ZF9zb3VyY2VzICs9IGZpbGVzKAogICAnbWlzYy5jJywKICAgJ211bHRpcmFuZ2V0eXBlcy5jJywK ICAgJ211bHRpcmFuZ2V0eXBlc19zZWxmdW5jcy5jJywKKyAgJ211bHRpeGFjdGZ1bmNzLmMnLAog ICAnbmFtZS5jJywKICAgJ25ldHdvcmsuYycsCiAgICduZXR3b3JrX2dpc3QuYycsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbXVsdGl4YWN0ZnVuY3MuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9tdWx0aXhhY3RmdW5jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5mYWYwMmJkMTYyNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9tdWx0aXhhY3RmdW5jcy5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICogbXVsdGl4YWN0ZnVuY3MuYworICoJCUZ1bmN0aW9ucyBmb3IgcmVwb3J0aW5nIG9u IG11bHRpeGFjdCBzdGF0ZS4KKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBTUUwtY2FsbGFi bGUgZnVuY3Rpb25zIHRoYXQgZXhwb3NlIGludGVybmFsIG11bHRpeGFjdAorICogc3RhdGUgaW5m b3JtYXRpb24gZm9yIG1vbml0b3JpbmcgdXNhZ2UgYW5kIGRldGVjdGluZyBwb3RlbnRpYWwgd3Jh cGFyb3VuZAorICogY29uZGl0aW9ucyB0aGF0IG1heSByZXF1aXJlIHZhY3V1bSBtYWludGVuYW5j ZS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwg UmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklD QVRJT04KKyAqCQlzcmMvYmFja2VuZC91dGlscy9hZHQvbXVsdGl4YWN0ZnVuY3MuYworICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNj ZXNzL211bHRpeGFjdC5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgorCisvKgorICogcGdfZ2V0X211bHRpeGFjdF9zdGF0cworICoKKyAqIFJldHVy bnMgc3RhdGlzdGljcyBhYm91dCBjdXJyZW50IE11bHRpWGFjdCB1c2FnZToKKyAqCQktIG51bV9t eGlkczogTnVtYmVyIG9mIE11bHRpWGFjdCBJRHMgaW4gdXNlCisgKgkJLSBudW1fbWVtYmVyczog VG90YWwgbnVtYmVyIG9mIG1lbWJlciBlbnRyaWVzCisgKgkJLSBvbGRlc3RfbXVsdGl4YWN0OiBP bGRlc3QgTXVsdGlYYWN0IElEIHN0aWxsIG5lZWRlZAorICoJCS0gb2xkZXN0X29mZnNldDogT2xk ZXN0IG9mZnNldCBzdGlsbCBpbiB1c2UKKyAqCisgKiBSZXR1cm5zIGEgcm93IG9mIE5VTExzIGlm IHRoZSBNdWx0aVhhY3Qgc3lzdGVtIGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQuCisgKi8KK0RhdHVt CitwZ19nZXRfbXVsdGl4YWN0X3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJVHVwbGVEZXNj CXR1cGRlc2M7CisJRGF0dW0JCXZhbHVlc1s0XTsKKwlib29sCQludWxsc1s0XSA9IHt0cnVlLCB0 cnVlLCB0cnVlLCB0cnVlfTsKKwlNdWx0aVhhY3RPZmZzZXQgbWVtYmVyczsKKwlNdWx0aVhhY3RJ ZAlvbGRlc3RNdWx0aVhhY3RJZDsKKwl1aW50MzIJCW11bHRpeGFjdHM7CisJTXVsdGlYYWN0T2Zm c2V0IG9sZGVzdE9mZnNldDsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwlpZiAoZ2V0X2NhbGxfcmVz dWx0X3R5cGUoZmNpbmZvLCBOVUxMLCAmdHVwZGVzYykgIT0gVFlQRUZVTkNfQ09NUE9TSVRFKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKKwkJCQkgZXJybXNnKCJyZXR1cm4gdHlwZSBtdXN0IGJlIGEgcm93IHR5cGUiKSkpOwor CisJaWYgKEdldE11bHRpWGFjdEluZm8oJm11bHRpeGFjdHMsICZtZW1iZXJzLCAmb2xkZXN0TXVs dGlYYWN0SWQsICZvbGRlc3RPZmZzZXQpKQorCXsKKwkJdmFsdWVzWzBdID0gSW50MzJHZXREYXR1 bShtdWx0aXhhY3RzKTsKKwkJdmFsdWVzWzFdID0gSW50NjRHZXREYXR1bShtZW1iZXJzKTsKKwkJ dmFsdWVzWzJdID0gVUludDMyR2V0RGF0dW0ob2xkZXN0TXVsdGlYYWN0SWQpOworCQl2YWx1ZXNb M10gPSBJbnQ2NEdldERhdHVtKG9sZGVzdE9mZnNldCk7CisJCW51bGxzWzBdID0gbnVsbHNbMV0g PSBudWxsc1syXSA9IG51bGxzWzNdID0gZmFsc2U7CisJfQorCisJdHVwbGUgPSBoZWFwX2Zvcm1f dHVwbGUodHVwZGVzYywgdmFsdWVzLCBudWxscyk7CisKKwlQR19SRVRVUk5fREFUVU0oSGVhcFR1 cGxlR2V0RGF0dW0odHVwbGUpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDExOGQ2 ZGExYWNlLi44MzdiYmE5MzhlNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMjU3Niw0 ICsxMjU3NiwxOSBAQAogICBwcm9hcmduYW1lcyA9PiAne3BpZCxpb19pZCxpb19nZW5lcmF0aW9u LHN0YXRlLG9wZXJhdGlvbixvZmYsbGVuZ3RoLHRhcmdldCxoYW5kbGVfZGF0YV9sZW4scmF3X3Jl c3VsdCxyZXN1bHQsdGFyZ2V0X2Rlc2MsZl9zeW5jLGZfbG9jYWxtZW0sZl9idWZmZXJlZH0nLAog ICBwcm9zcmMgPT4gJ3BnX2dldF9haW9zJyB9LAogCisjIEdldCBNdWx0aVhhY3Qgc3RhdGUgCit7 CisgICAgb2lkID0+ICc5MDAxJywKKyAgICBkZXNjciA9PiAnZ2V0IGN1cnJlbnQgbXVsdGl4YWN0 IG1lbWJlciBhbmQgbXVsdGl4YWN0IElEIGNvdW50cyBhbmQgb2xkZXN0IHZhbHVlcycsCisgICAg cHJvbmFtZSA9PiAncGdfZ2V0X211bHRpeGFjdF9zdGF0cycsCisgICAgcHJvcmV0dHlwZSA9PiAn cmVjb3JkJywKKyAgICBwcm9hcmd0eXBlcyA9PiAnJywKKyAgICBwcm9hbGxhcmd0eXBlcyA9PiAn e2ludDQsaW50OCx4aWQsaW50OH0nLAorICAgIHByb2FyZ21vZGVzID0+ICd7byxvLG8sb30nLAor ICAgIHByb2FyZ25hbWVzID0+ICd7bnVtX214aWRzLG51bV9tZW1iZXJzLG9sZGVzdF9tdWx0aXhh Y3Qsb2xkZXN0X29mZnNldH0nLAorICAgIHByb3ZvbGF0aWxlID0+ICd2JywKKyAgICBwcm9wYXJh bGxlbCA9PiAncycsCisgICAgcHJvc3JjID0+ICdwZ19nZXRfbXVsdGl4YWN0X3N0YXRzJworfSwK KwogXQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL211bHRpeGFjdF9z dGF0cy5vdXQgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvbXVsdGl4YWN0X3N0YXRzLm91 dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjg5M2M0ZDlmMzYKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvbXVsdGl4YWN0X3N0 YXRzLm91dApAQCAtMCwwICsxLDk0IEBACitQYXJzZWQgdGVzdCBzcGVjIHdpdGggMyBzZXNzaW9u cworCitzdGFydGluZyBwZXJtdXRhdGlvbjogZF9iZWdpbiBzbmFwMCBzMV9iZWdpbiBzMV9sb2Nr IHNuYXAxIHMyX2JlZ2luIHMyX2xvY2sgc25hcDIgY2hlY2tfd2hpbGVfcGlubmVkIGRfY29tbWl0 IHMxX2NvbW1pdCBzMl9jb21taXQKK3N0ZXAgZF9iZWdpbjogQkVHSU47IFNFVCBjbGllbnRfbWlu X21lc3NhZ2VzID0gd2FybmluZzsKK3N0ZXAgc25hcDA6IAorICBDUkVBVEUgVEVNUCBUQUJMRSBz bmFwMCBBUworICBTRUxFQ1QgbnVtX214aWRzLCBudW1fbWVtYmVycywgb2xkZXN0X211bHRpeGFj dCwgb2xkZXN0X29mZnNldAorICBGUk9NIHBnX2dldF9tdWx0aXhhY3Rfc3RhdHMoKTsKKworc3Rl cCBzMV9iZWdpbjogQkVHSU47CitzdGVwIHMxX2xvY2s6IFNFTEVDVCAxIEZST00gbXhxIFdIRVJF IGlkPTEgRk9SIEtFWSBTSEFSRTsKKz9jb2x1bW4/CistLS0tLS0tLQorICAgICAgIDEKKygxIHJv dykKKworc3RlcCBzbmFwMTogCisgIENSRUFURSBURU1QIFRBQkxFIHNuYXAxIEFTCisgIFNFTEVD VCBudW1fbXhpZHMsIG51bV9tZW1iZXJzLCBvbGRlc3RfbXVsdGl4YWN0LCBvbGRlc3Rfb2Zmc2V0 CisgIEZST00gcGdfZ2V0X211bHRpeGFjdF9zdGF0cygpOworCitzdGVwIHMyX2JlZ2luOiBCRUdJ TjsKK3N0ZXAgczJfbG9jazogU0VMRUNUIDEgRlJPTSBteHEgV0hFUkUgaWQ9MSBGT1IgS0VZIFNI QVJFOworP2NvbHVtbj8KKy0tLS0tLS0tCisgICAgICAgMQorKDEgcm93KQorCitzdGVwIHNuYXAy OiAKKyAgQ1JFQVRFIFRFTVAgVEFCTEUgc25hcDIgQVMKKyAgU0VMRUNUIG51bV9teGlkcywgbnVt X21lbWJlcnMsIG9sZGVzdF9tdWx0aXhhY3QsIG9sZGVzdF9vZmZzZXQKKyAgRlJPTSBwZ19nZXRf bXVsdGl4YWN0X3N0YXRzKCk7CisKK3N0ZXAgY2hlY2tfd2hpbGVfcGlubmVkOiAKKyAgU0VMRUNU IHIuYXNzZXJ0aW9uLCByLm9rCisgIEZST00gc25hcDAgczAKKyAgSk9JTiBzbmFwMSBzMSBPTiBU UlVFCisgIEpPSU4gc25hcDIgczIgT04gVFJVRSwKKyAgTEFURVJBTCB1bm5lc3QoCisgICAgQVJS QVlbCisgICAgICAnaXNfaW5pdF9teGlkcycsCisgICAgICAnaXNfaW5pdF9tZW1iZXJzJywKKyAg ICAgICdpc19pbml0X29sZGVzdF9teGlkJywKKyAgICAgICdpc19pbml0X29sZGVzdF9vZmYnLAor ICAgICAgJ2lzX29sZGVzdF9teGlkX25vbmRlY18wMScsCisgICAgICAnaXNfb2xkZXN0X214aWRf bm9uZGVjXzEyJywKKyAgICAgICdpc19vbGRlc3Rfb2ZmX25vbmRlY18wMScsCisgICAgICAnaXNf b2xkZXN0X29mZl9ub25kZWNfMTInLAorICAgICAgJ2lzX21lbWJlcnNfaW5jcmVhc2VkX2dlMScs CisgICAgICAnaXNfbXhpZHNfbm9uZGVjXzAxJywKKyAgICAgICdpc19teGlkc19ub25kZWNfMTIn LAorICAgICAgJ2lzX21lbWJlcnNfbm9uZGVjXzAxJywKKyAgICAgICdpc19tZW1iZXJzX25vbmRl Y18xMicKKyAgICBdLAorICAgIEFSUkFZWworICAgICAgKHMyLm51bV9teGlkcyAgICAgICAgSVMg Tk9UIE5VTEwpLAorICAgICAgKHMyLm51bV9tZW1iZXJzICAgICAgSVMgTk9UIE5VTEwpLAorICAg ICAgKHMyLm9sZGVzdF9tdWx0aXhhY3QgSVMgTk9UIE5VTEwpLAorICAgICAgKHMyLm9sZGVzdF9v ZmZzZXQgICAgSVMgTk9UIE5VTEwpLAorCisgICAgICAoczEub2xkZXN0X211bHRpeGFjdDo6dGV4 dDo6YmlnaW50ID49IENPQUxFU0NFKHMwLm9sZGVzdF9tdWx0aXhhY3Q6OnRleHQ6OmJpZ2ludCwg MCkpLAorICAgICAgKHMyLm9sZGVzdF9tdWx0aXhhY3Q6OnRleHQ6OmJpZ2ludCA+PSBDT0FMRVND RShzMS5vbGRlc3RfbXVsdGl4YWN0Ojp0ZXh0OjpiaWdpbnQsIDApKSwKKyAgICAgIChzMS5vbGRl c3Rfb2Zmc2V0ICAgID49IENPQUxFU0NFKHMwLm9sZGVzdF9vZmZzZXQsICAgIDApKSwKKyAgICAg IChzMi5vbGRlc3Rfb2Zmc2V0ICAgID49IENPQUxFU0NFKHMxLm9sZGVzdF9vZmZzZXQsICAgIDAp KSwKKworICAgICAgKHMyLm51bV9tZW1iZXJzID49IENPQUxFU0NFKHMxLm51bV9tZW1iZXJzLCAw KSArIDEpLAorCisgICAgICAoczEubnVtX214aWRzICAgPj0gQ09BTEVTQ0UoczAubnVtX214aWRz LCAgIDApKSwKKyAgICAgIChzMi5udW1fbXhpZHMgICA+PSBDT0FMRVNDRShzMS5udW1fbXhpZHMs ICAgMCkpLAorICAgICAgKHMxLm51bV9tZW1iZXJzID49IENPQUxFU0NFKHMwLm51bV9tZW1iZXJz LCAwKSksCisgICAgICAoczIubnVtX21lbWJlcnMgPj0gQ09BTEVTQ0UoczEubnVtX21lbWJlcnMs IDApKQorICAgIF0KKyAgKSBBUyByKGFzc2VydGlvbiwgb2spOworCithc3NlcnRpb24gICAgICAg ICAgICAgICB8b2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLQoraXNfaW5pdF9teGlkcyAg ICAgICAgICAgfHQgCitpc19pbml0X21lbWJlcnMgICAgICAgICB8dCAKK2lzX2luaXRfb2xkZXN0 X214aWQgICAgIHx0IAoraXNfaW5pdF9vbGRlc3Rfb2ZmICAgICAgfHQgCitpc19vbGRlc3RfbXhp ZF9ub25kZWNfMDF8dCAKK2lzX29sZGVzdF9teGlkX25vbmRlY18xMnx0IAoraXNfb2xkZXN0X29m Zl9ub25kZWNfMDEgfHQgCitpc19vbGRlc3Rfb2ZmX25vbmRlY18xMiB8dCAKK2lzX21lbWJlcnNf aW5jcmVhc2VkX2dlMXx0IAoraXNfbXhpZHNfbm9uZGVjXzAxICAgICAgfHQgCitpc19teGlkc19u b25kZWNfMTIgICAgICB8dCAKK2lzX21lbWJlcnNfbm9uZGVjXzAxICAgIHx0IAoraXNfbWVtYmVy c19ub25kZWNfMTIgICAgfHQgCisoMTMgcm93cykKKworc3RlcCBkX2NvbW1pdDogQ09NTUlUOwor c3RlcCBzMV9jb21taXQ6IENPTU1JVDsKK3N0ZXAgczJfY29tbWl0OiBDT01NSVQ7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlIGIvc3JjL3Rlc3QvaXNv bGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZQppbmRleCA0NDExZDNjODZkZC4uN2RhNTAwYmY2Y2Yg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUKKysrIGIv c3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZQpAQCAtMTE3LDMgKzExNyw0IEBA IHRlc3Q6IHNlcmlhbGl6YWJsZS1wYXJhbGxlbC0yCiB0ZXN0OiBzZXJpYWxpemFibGUtcGFyYWxs ZWwtMwogdGVzdDogbWF0dmlldy13cml0ZS1za2V3CiB0ZXN0OiBsb2NrLW5vd2FpdAordGVzdDog bXVsdGl4YWN0X3N0YXRzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvbXVs dGl4YWN0X3N0YXRzLnNwZWMgYi9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvbXVsdGl4YWN0X3N0 YXRzLnNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNiZjRiNTcy OTRlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL211bHRpeGFj dF9zdGF0cy5zcGVjCkBAIC0wLDAgKzEsMTI4IEBACisjIEhpZ2gtc2lnbmFsIGludmFyaWFudHMg Zm9yIHBnX2dldF9tdWx0aXhhY3Rfc3RhdHMoKQorIyBXZSBjcmVhdGUgZXhhY3RseSBvbmUgZnJl c2ggTXVsdGlYYWN0IG9uIGEgYnJhbmQtbmV3IHRhYmxlLiBXaGlsZSBpdCBpcyBwaW5uZWQKKyMg YnkgdHdvIG9wZW4gdHJhbnNhY3Rpb25zLCB3ZSBhc3NlcnQgb25seSBpbnZhcmlhbnRzIHRoYXQg YmFja2dyb3VuZCBWQUNVVU0vRlJFRVpFCisjIGNhbm5vdCB2aW9sYXRlOgorIyAgIOKAoiBtZW1i ZXJzIGluY3JlYXNlZCBieSDiiaUgMSB3aGVuIHRoZSBzZWNvbmQgbG9ja2VyIGFycml2ZWQsCisj ICAg4oCiIG51bV9teGlkcyAvIG51bV9tZW1iZXJzIGRpZCBub3QgZGVjcmVhc2UgdnMgZWFybGll ciBzbmFwc2hvdHMsCisjICAg4oCiIG9sZGVzdF8qIG5ldmVyIGRlY3JlYXNlcy4KKyMgV2UgbWFr ZSBOTyBhc3NlcnRpb25zIGFmdGVyIHJlbGVhc2luZyBsb2NrcyAoZnJlZXppbmcvdHJ1bmNhdGlv biBtYXkgc2hyaW5rIGRlbHRhcykuCisjIE5PVEU6IFNuYXBzaG90cyBzbmFwMCBhbmQgc3Vic2Vx dWVudCBjaGVja3MgYXJlIHRha2VuIGluc2lkZSBhbiBvcGVuIGRyaXZlcgorIyB0cmFuc2FjdGlv biB0byBuYXJyb3cgdGhlIHdpbmRvdyBmb3IgdW5yZWxhdGVkIHRydW5jYXRpb24gYmV0d2VlbiBz bmFwc2hvdHMuCisjCisjIFRlcm1pbm9sb2d5IChnbG9iYWwgY291bnRlcnMpOgorIyAgIG51bV9t eGlkcywgbnVtX21lbWJlcnMgICAgOiDigJxpbi11c2XigJ0gZGVsdGFzIGRlcml2ZWQgZnJvbSBn bG9iYWwgaG9yaXpvbnMKKyMgICBvbGRlc3RfbXVsdGl4YWN0LCBvZmZzZXQgIDogb2xkZXN0IGhv cml6b25zOyB0aGV5IG1vdmUgZm9yd2FyZCwgbmV2ZXIgYmFja3dhcmQKKyMKKyMgQWxsIGFzc2Vy dGlvbnMgZXhlY3V0ZSB3aGlsZSBvdXIgbXVsdGl4YWN0IGlzIHBpbm5lZCBieSBvcGVuIHR4bnMs IHdoaWNoIHByb3RlY3RzCisjIHRoZSB0cnVuY2F0aW9uIGhvcml6b24gKFZBQ1VVTSBjYW7igJl0 IGFkdmFuY2UgcGFzdCBvdXIgcGlubmVkIG11bHRpKS4KKworc2V0dXAKK3sKKyAgICBDUkVBVEUg VEFCTEUgbXhxKGlkIGludCBQUklNQVJZIEtFWSwgdiBpbnQpOworICAgIElOU0VSVCBJTlRPIG14 cSBWQUxVRVMgKDEsIDQyKTsKK30KKwordGVhcmRvd24KK3sKKyAgICBEUk9QIFRBQkxFIG14cTsK K30KKworIyBUd28gbG9ja2VycyBvbiB0aGUgU0FNRSB0dXBsZSAtPiBvbmUgTXVsdGlYYWN0IHdp dGggPj0gMiBtZW1iZXJzLgorc2Vzc2lvbiAiczEiCitzZXR1cCB7IFNFVCBjbGllbnRfbWluX21l c3NhZ2VzID0gd2FybmluZzsgU0VUIGxvY2tfdGltZW91dCA9ICc1cyc7IH0KK3N0ZXAgczFfYmVn aW4gIHsgQkVHSU47IH0KK3N0ZXAgczFfbG9jayAgIHsgU0VMRUNUIDEgRlJPTSBteHEgV0hFUkUg aWQ9MSBGT1IgS0VZIFNIQVJFOyB9CitzdGVwIHMxX2NvbW1pdCB7IENPTU1JVDsgfQorCitzZXNz aW9uICJzMiIKK3NldHVwIHsgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSB3YXJuaW5nOyBTRVQg bG9ja190aW1lb3V0ID0gJzVzJzsgfQorc3RlcCBzMl9iZWdpbiAgeyBCRUdJTjsgfQorc3RlcCBz Ml9sb2NrICAgeyBTRUxFQ1QgMSBGUk9NIG14cSBXSEVSRSBpZD0xIEZPUiBLRVkgU0hBUkU7IH0K K3N0ZXAgczJfY29tbWl0IHsgQ09NTUlUOyB9CisKKyMgRHJpdmVyIHNlc3Npb246IGtlZXAgYSB0 cmFuc2FjdGlvbiBvcGVuIHdoaWxlIHdlIHRha2Ugc25hcHNob3RzIGFuZCBjaGVjay4KK3Nlc3Np b24gImRyaXZlciIKK3N0ZXAgZF9iZWdpbiB7IEJFR0lOOyBTRVQgY2xpZW50X21pbl9tZXNzYWdl cyA9IHdhcm5pbmc7IH0KKworIyBCYXNlbGluZSBCRUZPUkUgYW55IGxvY2tpbmc7IG1heSBiZSBO VUxMcyBpZiBtdWx0aXhhY3QgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0Lgorc3RlcCBzbmFwMCB7Cisg IENSRUFURSBURU1QIFRBQkxFIHNuYXAwIEFTCisgIFNFTEVDVCBudW1fbXhpZHMsIG51bV9tZW1i ZXJzLCBvbGRlc3RfbXVsdGl4YWN0LCBvbGRlc3Rfb2Zmc2V0CisgIEZST00gcGdfZ2V0X211bHRp eGFjdF9zdGF0cygpOworfQorCisjIEFmdGVyIHMxIGhhcyBsb2NrZWQgdGhlIHJvdyAoc3RpbGwg aW4gZHJpdmVyIHhhY3QpLgorc3RlcCBzbmFwMSB7CisgIENSRUFURSBURU1QIFRBQkxFIHNuYXAx IEFTCisgIFNFTEVDVCBudW1fbXhpZHMsIG51bV9tZW1iZXJzLCBvbGRlc3RfbXVsdGl4YWN0LCBv bGRlc3Rfb2Zmc2V0CisgIEZST00gcGdfZ2V0X211bHRpeGFjdF9zdGF0cygpOworfQorCisjIEFm dGVyIHMyIGpvaW5zIG9uIHRoZSBTQU1FIHR1cGxlIC0+IG11bHRpeGFjdCB3aXRoID49IDIgbWVt YmVycyAoc3RpbGwgaW4gZHJpdmVyIHhhY3QpLgorc3RlcCBzbmFwMiB7CisgIENSRUFURSBURU1Q IFRBQkxFIHNuYXAyIEFTCisgIFNFTEVDVCBudW1fbXhpZHMsIG51bV9tZW1iZXJzLCBvbGRlc3Rf bXVsdGl4YWN0LCBvbGRlc3Rfb2Zmc2V0CisgIEZST00gcGdfZ2V0X211bHRpeGFjdF9zdGF0cygp OworfQorCisjIFByZXR0eSwgZGV0ZXJtaW5pc3RpYyBrZXkvdmFsdWUgb3V0cHV0IG9mIGJvb2xl YW4gY2hlY2tzLgorIyBLZXlzOgorIyAgIGlzX2luaXRfbXhpZHMgICAgICAgICAgICA6IG51bV9t eGlkcyBpcyBub24tTlVMTAorIyAgIGlzX2luaXRfbWVtYmVycyAgICAgICAgICA6IG51bV9tZW1i ZXJzIGlzIG5vbi1OVUxMCisjICAgaXNfaW5pdF9vbGRlc3RfbXhpZCAgICAgIDogb2xkZXN0X211 bHRpeGFjdCBpcyBub24tTlVMTAorIyAgIGlzX2luaXRfb2xkZXN0X29mZiAgICAgICA6IG9sZGVz dF9vZmZzZXQgaXMgbm9uLU5VTEwKKyMgICBpc19vbGRlc3RfbXhpZF9ub25kZWNfMDEgOiBvbGRl c3RfbXVsdGl4YWN0IGRpZCBub3QgZGVjcmVhc2UgKHNuYXAw4oaSc25hcDEpCisjICAgaXNfb2xk ZXN0X214aWRfbm9uZGVjXzEyIDogb2xkZXN0X211bHRpeGFjdCBkaWQgbm90IGRlY3JlYXNlIChz bmFwMeKGknNuYXAyKQorIyAgIGlzX29sZGVzdF9vZmZfbm9uZGVjXzAxICA6IG9sZGVzdF9vZmZz ZXQgZGlkIG5vdCBkZWNyZWFzZSAoc25hcDDihpJzbmFwMSkKKyMgICBpc19vbGRlc3Rfb2ZmX25v bmRlY18xMiAgOiBvbGRlc3Rfb2Zmc2V0IGRpZCBub3QgZGVjcmVhc2UgKHNuYXAx4oaSc25hcDIp CisjICAgaXNfbWVtYmVyc19pbmNyZWFzZWRfZ2UxIDogbWVtYmVycyBpbmNyZWFzZWQgYnkgYXQg bGVhc3QgMSB3aGVuIHMyIGpvaW5lZAorIyAgIGlzX214aWRzX25vbmRlY18wMSAgICAgICA6IG51 bV9teGlkcyBkaWQgbm90IGRlY3JlYXNlIChzbmFwMOKGknNuYXAxKQorIyAgIGlzX214aWRzX25v bmRlY18xMiAgICAgICA6IG51bV9teGlkcyBkaWQgbm90IGRlY3JlYXNlIChzbmFwMeKGknNuYXAy KQorIyAgIGlzX21lbWJlcnNfbm9uZGVjXzAxICAgICA6IG51bV9tZW1iZXJzIGRpZCBub3QgZGVj cmVhc2UgKHNuYXAw4oaSc25hcDEpCisjICAgaXNfbWVtYmVyc19ub25kZWNfMTIgICAgIDogbnVt X21lbWJlcnMgZGlkIG5vdCBkZWNyZWFzZSAoc25hcDHihpJzbmFwMikKK3N0ZXAgY2hlY2tfd2hp bGVfcGlubmVkIHsKKyAgU0VMRUNUIHIuYXNzZXJ0aW9uLCByLm9rCisgIEZST00gc25hcDAgczAK KyAgSk9JTiBzbmFwMSBzMSBPTiBUUlVFCisgIEpPSU4gc25hcDIgczIgT04gVFJVRSwKKyAgTEFU RVJBTCB1bm5lc3QoCisgICAgQVJSQVlbCisgICAgICAnaXNfaW5pdF9teGlkcycsCisgICAgICAn aXNfaW5pdF9tZW1iZXJzJywKKyAgICAgICdpc19pbml0X29sZGVzdF9teGlkJywKKyAgICAgICdp c19pbml0X29sZGVzdF9vZmYnLAorICAgICAgJ2lzX29sZGVzdF9teGlkX25vbmRlY18wMScsCisg ICAgICAnaXNfb2xkZXN0X214aWRfbm9uZGVjXzEyJywKKyAgICAgICdpc19vbGRlc3Rfb2ZmX25v bmRlY18wMScsCisgICAgICAnaXNfb2xkZXN0X29mZl9ub25kZWNfMTInLAorICAgICAgJ2lzX21l bWJlcnNfaW5jcmVhc2VkX2dlMScsCisgICAgICAnaXNfbXhpZHNfbm9uZGVjXzAxJywKKyAgICAg ICdpc19teGlkc19ub25kZWNfMTInLAorICAgICAgJ2lzX21lbWJlcnNfbm9uZGVjXzAxJywKKyAg ICAgICdpc19tZW1iZXJzX25vbmRlY18xMicKKyAgICBdLAorICAgIEFSUkFZWworICAgICAgKHMy Lm51bV9teGlkcyAgICAgICAgSVMgTk9UIE5VTEwpLAorICAgICAgKHMyLm51bV9tZW1iZXJzICAg ICAgSVMgTk9UIE5VTEwpLAorICAgICAgKHMyLm9sZGVzdF9tdWx0aXhhY3QgSVMgTk9UIE5VTEwp LAorICAgICAgKHMyLm9sZGVzdF9vZmZzZXQgICAgSVMgTk9UIE5VTEwpLAorCisgICAgICAoczEu b2xkZXN0X211bHRpeGFjdDo6dGV4dDo6YmlnaW50ID49IENPQUxFU0NFKHMwLm9sZGVzdF9tdWx0 aXhhY3Q6OnRleHQ6OmJpZ2ludCwgMCkpLAorICAgICAgKHMyLm9sZGVzdF9tdWx0aXhhY3Q6OnRl eHQ6OmJpZ2ludCA+PSBDT0FMRVNDRShzMS5vbGRlc3RfbXVsdGl4YWN0Ojp0ZXh0OjpiaWdpbnQs IDApKSwKKyAgICAgIChzMS5vbGRlc3Rfb2Zmc2V0ICAgID49IENPQUxFU0NFKHMwLm9sZGVzdF9v ZmZzZXQsICAgIDApKSwKKyAgICAgIChzMi5vbGRlc3Rfb2Zmc2V0ICAgID49IENPQUxFU0NFKHMx Lm9sZGVzdF9vZmZzZXQsICAgIDApKSwKKworICAgICAgKHMyLm51bV9tZW1iZXJzID49IENPQUxF U0NFKHMxLm51bV9tZW1iZXJzLCAwKSArIDEpLAorCisgICAgICAoczEubnVtX214aWRzICAgPj0g Q09BTEVTQ0UoczAubnVtX214aWRzLCAgIDApKSwKKyAgICAgIChzMi5udW1fbXhpZHMgICA+PSBD T0FMRVNDRShzMS5udW1fbXhpZHMsICAgMCkpLAorICAgICAgKHMxLm51bV9tZW1iZXJzID49IENP QUxFU0NFKHMwLm51bV9tZW1iZXJzLCAwKSksCisgICAgICAoczIubnVtX21lbWJlcnMgPj0gQ09B TEVTQ0UoczEubnVtX21lbWJlcnMsIDApKQorICAgIF0KKyAgKSBBUyByKGFzc2VydGlvbiwgb2sp OworfQorCitzdGVwIGRfY29tbWl0IHsgQ09NTUlUOyB9CisKK3Blcm11dGF0aW9uIGRfYmVnaW4g c25hcDAgczFfYmVnaW4gczFfbG9jayBzbmFwMSBzMl9iZWdpbiBzMl9sb2NrIHNuYXAyIGNoZWNr X3doaWxlX3Bpbm5lZCBkX2NvbW1pdCBzMV9jb21taXQgczJfY29tbWl0CisKLS0gCjIuNDcuMwoK --00000000000067d36e063c89b81d--