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 1vQXSV-00AZdS-1O for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Dec 2025 20:58:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vQXSU-00A0jb-1j for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Dec 2025 20:58:50 +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.96) (envelope-from ) id 1vQXST-00A0jT-2Z for pgsql-hackers@lists.postgresql.org; Tue, 02 Dec 2025 20:58:50 +0000 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vQXSR-002oFw-05 for pgsql-hackers@lists.postgresql.org; Tue, 02 Dec 2025 20:58:49 +0000 Received: by mail-ej1-x62d.google.com with SMTP id a640c23a62f3a-b79d1247240so35172966b.0 for ; Tue, 02 Dec 2025 12:58:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764709125; x=1765313925; 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=ciLmBPsXib9Yc0cCiaReZO7PriWg5IIfspQ9JFaIS7s=; b=jjp1sGERER0h3WIaiD24VW3u4GpIbW7ElkhbVY7WwY81AhlpzXgh+8/C+wTc07Zxwg 5U5qwPabpFWSJCImslgCd0gfkgE0BvWkjwRVnm4L/oVWfmREmuQ45X9To+7st18V7aLU qp8j/vDy9ieID8soiqeSN+rdfusmrNn0D8EG/OAlnbzW1tNj+PEPD54Ryu6JbbUBA9Mi L2nV7HT6ltML+9I4E1pxhrTDIOhpkmmDtqZ4ZigyikaoufYOLk2WbBhl+vEix34Dchcz f/xep4HQC+e2K38Dx0or8E1a/ZqGsBbbBwslbt9K6HFPpFZXGfE/r2e2PcknMt5HaIf1 eajg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764709125; x=1765313925; 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=ciLmBPsXib9Yc0cCiaReZO7PriWg5IIfspQ9JFaIS7s=; b=NeyE4xRbBbgMd72KDbY6/956By3HG8DO6Gh+e5ybi54y8EbZEpwGajG6fdW8gWarf1 He9Eje0X2yTgT5Kbzlw0AQBAySp0w2R9TcaNHOMeR6SScNqah2wXLV4VuKeU/rbr5npc +t191STgH0skkGO5CZ8BdbUDm2ZduWXSS+hUg9eelLL6Js1a1EFhU2iAkmwj4jIhbE9P te8Hu2KO9a1phyDuu/lJBENy9l6pAuIV4RxVvub3UCIUQkec8/HtgjnOAPKzWY3RgDfD /Bu9NCXXoqT3vWN38x1Tm2pLHZ2714TlE8RCzloTPSiWHXoEUQUSvmXjLOHXsl1xceN8 04Gg== X-Gm-Message-State: AOJu0YzFq8arkpi0+2VMfB9E+5pNOZc/7dK1gp04ZdV24zj1V9dHh0nP hAXvfHagda3jm4HCsTAZt9HykYlf4CdM1PX18WiCxSPcLY2L3BiN3vzJWPn4MChjBlW71oynJus dp/PRNCgisTVLrYMC+z7srC2A7TrnR2GgxO1CmE0= X-Gm-Gg: ASbGncu4smuD6N2dzKjUUMitrhHS0FWQD9/OupJ3sh0AKZE1PIeEveFDZHCnTWTzCSd 1obg8H8xDVNlJxyUUxTL0QN7HyR8neNogD5JgTWjlpYN6bDOREUQbf6QI5EpAEldA76jaXj63vN 0ESQ1Hjgs5vGWQTojS4MJsYo2oFZVKGeOOFFQ8FJc6pbGOT580WIfJ4RRW1TSEs8E6TgQ39/Lo/ iHB4LpX+726JSe0Y9OqCClc32ZexUv5O4eBCNX2XV05z2o4REsrvj57twuk387sK+nYMpYERtQH 4YwE X-Google-Smtp-Source: AGHT+IGO2PIF6PkgZYXYPeR1qmQh/aGoMXSNQXow92uxiF0dG0M0k9Fh+DuJvjhBJj8cREP/nxaz4g+DQwG4jTMk+Vs= X-Received: by 2002:a17:907:3f8d:b0:b72:5e2c:9e97 with SMTP id a640c23a62f3a-b79d0f3b2e3mr58730066b.36.1764709124730; Tue, 02 Dec 2025 12:58:44 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Sami Imseih Date: Tue, 2 Dec 2025 14:58:32 -0600 X-Gm-Features: AWmQ_bldZVC8knTh79D8N9FwRdTZO-GlZ12zmIIMKwAlD4ZYFxUt2ihAmPH5_XY Message-ID: Subject: Re: [Proposal] Adding callback support for custom statistics kinds To: Michael Paquier Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000832d7d0644fe5c1e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000832d7d0644fe5c1e Content-Type: text/plain; charset="UTF-8" > > Also, I am now leaning towards creating a separate test module rather than > > trying to do too much unrelated testing in injection points. It is definitely > > convenient to use injection points, but I think we can do better testing with > > a separate module. This module can also serve as an example for extension > > developers. > > You are right that it may be cleaner this way. Do you think that it > could make sense to move some of the existing "template" code of > injection_points there? By "template" code, do you mean Something like? include/utils/custom_statkinds.h backend/utils/misc/custom_statkinds.c Where the template code here is PgStat_kind definition, callbacks, etc. for injection_points or the new test module that is using a custom kind. A few benefits I see for this is we can point extension developers to this as an example in [0] and we are also maintaining the kind ids in a single place. These may not be strong points, but may be worth while. v2 attached is something that may be closer to what we've been discussing v2-0001 are much simplified changes to pgstat.c that simply invoke the callbacks and all the work is on the extension to implement what it needs to do. This includes a callback at the end of WRITE, READ, DISCARD with a flag passed to the caller so they can perform the necessary clean-up actions. v2-0002 implements a new test module that tests mainly that the recovery, clean and crash, are working as expected. I created a new tap test for this which performs a test similar to what is done in recovery/029_stats_restart.pl. I could merge the new test there, but I am reluctant to add a dependency on a new module to recovery. What do you think? [0] https://www.postgresql.org/docs/current/xfunc-c.html#XFUNC-ADDIN-CUSTOM-CUMULATIVE-STATISTICS -- Sami Imseih Amazon Web Services (AWS) --000000000000832d7d0644fe5c1e Content-Type: application/octet-stream; name="v2-0002-Tests-for-custom-stat-kinds.patch" Content-Disposition: attachment; filename="v2-0002-Tests-for-custom-stat-kinds.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mip0oywt0 RnJvbSA1MGZiNDhjZmNlMTYxNDM4YWQ5ZDNmOGQzOWZmZTBkNGM3ZDU0MmE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBVYnVudHUgPHVidW50dUBpcC0xNzItMzEtNDYtMjMwLmVjMi5p bnRlcm5hbD4KRGF0ZTogVHVlLCAyIERlYyAyMDI1IDE3OjAwOjA0ICswMDAwClN1YmplY3Q6IFtQ QVRDSCB2MiAyLzJdIFRlc3RzIGZvciBjdXN0b20gc3RhdCBraW5kcwoKQ3JlYXRlcyBhIG5ldyB0 ZXN0IG1vZHVsZSB0byB0ZXN0IGN1c3RvbSBzdGF0CmtpbmRzLiBUaGlzIGFsc28gdXBkYXRlcyBk b2N1bWVudGF0aW9uIHRvIHVzZQp0aGlzIG1vZHVsZSBhcyBhbiBleGFtcGxlIGZvciBleHRlbnNp b24KZGV2ZWxvcGVycyB0aGF0IHVzZSBjdXN0b20gc3RhdCBraW5kcy4KLS0tCiBkb2Mvc3JjL3Nn bWwveGZ1bmMuc2dtbCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy90ZXN0L21v ZHVsZXMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1 bGVzL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgfCAgIDEgKwogLi4uL21vZHVsZXMvdGVz dF9jdXN0b21fc3RhdGtpbmQvLmdpdGlnbm9yZSAgIHwgICA0ICsKIC4uLi9tb2R1bGVzL3Rlc3Rf Y3VzdG9tX3N0YXRraW5kL01ha2VmaWxlICAgICB8ICAyMyArCiAuLi4vbW9kdWxlcy90ZXN0X2N1 c3RvbV9zdGF0a2luZC9tZXNvbi5idWlsZCAgfCAgMzQgKysKIC4uLi90ZXN0X2N1c3RvbV9zdGF0 a2luZC90LzAwMV9jdXN0b21fc3RhdC5wbCB8ICA5MiArKysKIC4uLi90ZXN0X2N1c3RvbV9zdGF0 a2luZC0tMS4wLnNxbCAgICAgICAgICAgICB8ICAxOSArCiAuLi4vdGVzdF9jdXN0b21fc3RhdGtp bmQuYyAgICAgICAgICAgICAgICAgICAgfCA1NzAgKysrKysrKysrKysrKysrKysrCiAuLi4vdGVz dF9jdXN0b21fc3RhdGtpbmQuY29udHJvbCAgICAgICAgICAgICAgfCAgIDQgKwogMTAgZmlsZXMg Y2hhbmdlZCwgNzUzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRraW5kLy5naXRpZ25vcmUKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRraW5kL01h a2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9z dGF0a2luZC9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMv dGVzdF9jdXN0b21fc3RhdGtpbmQvdC8wMDFfY3VzdG9tX3N0YXQucGwKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRraW5kL3Rlc3RfY3VzdG9tX3N0 YXRraW5kLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2N1c3RvbV9zdGF0a2luZC90ZXN0X2N1c3RvbV9zdGF0a2luZC5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0a2luZC90ZXN0X2N1c3RvbV9zdGF0 a2luZC5jb250cm9sCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwgYi9kb2Mv c3JjL3NnbWwveGZ1bmMuc2dtbAppbmRleCA1MzdlZTZmYTI1NC4uZDUwNjI2NTIzZjIgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC94ZnVuYy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC94ZnVuYy5z Z21sCkBAIC0zOTY3LDYgKzM5NjcsOSBAQCBzdGF0aWMgY29uc3QgUGdTdGF0X0tpbmRJbmZvIGN1 c3RvbV9zdGF0cyA9IHsKICAgICAuc2hhcmVkX2RhdGFfb2ZmID0gb2Zmc2V0b2YoUGdTdGF0U2hh cmVkX0N1c3RvbSwgc3RhdHMpLAogICAgIC5zaGFyZWRfZGF0YV9sZW4gPSBzaXplb2YoKChQZ1N0 YXRTaGFyZWRfQ3VzdG9tICopIDApLT5zdGF0cyksCiAgICAgLnBlbmRpbmdfc2l6ZSA9IHNpemVv ZihQZ1N0YXRfU3RhdEN1c3RvbUVudHJ5KSwKKyAgICAudG9fc2VyaWFsaXplZF9leHRyYV9zdGF0 cyA9IGN1c3RvbV9zdGF0c19zZXJpYWxpemUsCisgICAgLmZyb21fc2VyaWFsaXplZF9leHRyYV9z dGF0cyA9IGN1c3RvbV9zdGF0c19kZXNlcmlhbGl6ZSwKKyAgICAuZW5kX2V4dHJhX3N0YXRzID0g Y3VzdG9tX3N0YXRzX2ZpbGVfY2xlYW51cCwKIH0KIDwvcHJvZ3JhbWxpc3Rpbmc+CiAKQEAgLTQw MDUsNyArNDAwOCw4IEBAIGV4dGVybiBQZ1N0YXRfS2luZCBwZ3N0YXRfcmVnaXN0ZXJfa2luZChQ Z1N0YXRfS2luZCBraW5kLAogCiAgICAgPHBhcmE+CiAgICAgIEFuIGV4YW1wbGUgZGVzY3JpYmlu ZyBob3cgdG8gcmVnaXN0ZXIgYW5kIHVzZSBjdXN0b20gc3RhdGlzdGljcyBjYW4gYmUKLSAgICAg Zm91bmQgaW4gPGZpbGVuYW1lPnNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50czwvZmls ZW5hbWU+LgorICAgICBmb3VuZCBpbiA8ZmlsZW5hbWU+c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1 c3RvbV9zdGF0a2luZDwvZmlsZW5hbWU+IGFuZAorICAgICA8ZmlsZW5hbWU+c3JjL3Rlc3QvbW9k dWxlcy9pbmplY3Rpb25fcG9pbnRzPC9maWxlbmFtZT4KICAgICA8L3BhcmE+CiAgICA8L3NlY3Qy PgogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9k dWxlcy9NYWtlZmlsZQppbmRleCBkMDc5YjkxYjFhMi4uZDM1ZTgzMjk2ZTYgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmls ZQpAQCAtMjEsNiArMjEsNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3RfYmxvb21maWx0ZXIgXAog CQkgIHRlc3RfY29weV9jYWxsYmFja3MgXAogCQkgIHRlc3RfY3VzdG9tX3JtZ3JzIFwKKwkJICB0 ZXN0X2N1c3RvbV9zdGF0a2luZCBcCiAJCSAgdGVzdF9kZGxfZGVwYXJzZSBcCiAJCSAgdGVzdF9k c2EgXAogCQkgIHRlc3RfZHNtX3JlZ2lzdHJ5IFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IGY1MTE0 NDY5YjkyLi40ZjE5Mjk4YjZlYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5i dWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC0yMCw2ICsyMCw3IEBA IHN1YmRpcigndGVzdF9iaXRtYXBzZXQnKQogc3ViZGlyKCd0ZXN0X2Jsb29tZmlsdGVyJykKIHN1 YmRpcigndGVzdF9jb3B5X2NhbGxiYWNrcycpCiBzdWJkaXIoJ3Rlc3RfY3VzdG9tX3JtZ3JzJykK K3N1YmRpcigndGVzdF9jdXN0b21fc3RhdGtpbmQnKQogc3ViZGlyKCd0ZXN0X2RkbF9kZXBhcnNl JykKIHN1YmRpcigndGVzdF9kc2EnKQogc3ViZGlyKCd0ZXN0X2RzbV9yZWdpc3RyeScpCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRraW5kLy5naXRpZ25vcmUg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRraW5kLy5naXRpZ25vcmUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVkY2IzZmY5NzIzCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0a2luZC8uZ2l0aWdub3Jl CkBAIC0wLDAgKzEsNCBAQAorIyBHZW5lcmF0ZWQgc3ViZGlyZWN0b3JpZXMKKy9sb2cvCisvcmVz dWx0cy8KKy90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3Vz dG9tX3N0YXRraW5kL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0 a2luZC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDJm NDhlOWM4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9t X3N0YXRraW5kL01ha2VmaWxlCkBAIC0wLDAgKzEsMjMgQEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2N1c3RvbV9zdGF0a2luZC9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gdGVzdF9jdXN0b21f c3RhdGtpbmQKK09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCXRlc3RfY3VzdG9tX3N0YXRraW5k Lm8KK1BHRklMRURFU0MgPSAidGVzdF9jdXN0b21fc3RhdGtpbmQgLSB0ZXN0IGNvZGUgZm9yIGN1 c3RvbSBzdGF0IGtpbmRzIgorCitFWFRFTlNJT04gPSB0ZXN0X2N1c3RvbV9zdGF0a2luZAorREFU QSA9IHRlc3RfY3VzdG9tX3N0YXRraW5kLS0xLjAuc3FsCisKK1RBUF9URVNUUyA9IDEKKworaWZk ZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdf Q09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdGtpbmQKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4u CitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQo dG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdGtpbmQvbWVzb24uYnVpbGQgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRraW5kL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41MGRjNGRmZDM4NwotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdGtpbmQvbWVzb24uYnVpbGQKQEAg LTAsMCArMSwzNCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisKK3Rlc3RfY3VzdG9tX3N0YXRraW5kX3NvdXJjZXMgPSBmaWxlcygK KyAgJ3Rlc3RfY3VzdG9tX3N0YXRraW5kLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2lu ZG93cycKKyAgdGVzdF9jdXN0b21fc3RhdGtpbmRfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nl c3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3Rlc3RfY3VzdG9t X3N0YXRraW5kJywKKyAgICAnLS1GSUxFREVTQycsICd0ZXN0X2N1c3RvbV9zdGF0a2luZCAtIHRl c3QgY29kZSBmb3IgY3VzdG9tIHN0YXQga2luZHMnLF0pCitlbmRpZgorCit0ZXN0X2N1c3RvbV9z dGF0a2luZCA9IHNoYXJlZF9tb2R1bGUoJ3Rlc3RfY3VzdG9tX3N0YXRraW5kJywKKyAgdGVzdF9j dXN0b21fc3RhdGtpbmRfc291cmNlcywKKyAga3dhcmdzOiBwZ190ZXN0X21vZF9hcmdzLAorKQor dGVzdF9pbnN0YWxsX2xpYnMgKz0gdGVzdF9jdXN0b21fc3RhdGtpbmQKKwordGVzdF9pbnN0YWxs X2RhdGEgKz0gZmlsZXMoCisgICd0ZXN0X2N1c3RvbV9zdGF0a2luZC5jb250cm9sJywKKyAgJ3Rl c3RfY3VzdG9tX3N0YXRraW5kLS0xLjAuc3FsJywKKykKKwordGVzdHMgKz0geworICAnbmFtZSc6 ICd0ZXN0X2N1c3RvbV9zdGF0a2luZCcsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2Rp cigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAndGFwJzogeworICAg ICd0ZXN0cyc6IFsKKyAgICAgICd0LzAwMV9jdXN0b21fc3RhdC5wbCcsCisgICAgXSwKKyAgICAn cnVubmluZ2NoZWNrJzogZmFsc2UsCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfY3VzdG9tX3N0YXRraW5kL3QvMDAxX2N1c3RvbV9zdGF0LnBsIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0a2luZC90LzAwMV9jdXN0b21fc3RhdC5wbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDAzMjc0MDcyOTIKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRraW5kL3QvMDAxX2N1c3Rv bV9zdGF0LnBsCkBAIC0wLDAgKzEsOTIgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjUsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMKKyMgVGVzdCBjdXN0b20gc3Rh dGlzdGljcyBmdW5jdGlvbmFsaXR5CisjCisjIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGN1c3Rv bSBzdGF0aXN0aWNzIGVudHJpZXMgY2FuIGJlIGNyZWF0ZWQsCisjIGluY3JlbWVudGVkLCByZXBv cnRlZCwgYW5kIHBlcnNpc3RlZCBhY3Jvc3Mgc2VydmVyIHJlc3RhcnRzLgorIworCit1c2Ugc3Ry aWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3Jl OwordXNlIEZpbGU6OkNvcHk7CisKKyMgQ3JlYXRlIGEgbmV3IFBvc3RncmVTUUwgdGVzdCBjbHVz dGVyCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicpOwor CisjIEluaXRpYWxpemUgdGhlIGNsdXN0ZXIgYW5kIGNvbmZpZ3VyZSBpdCB0byBsb2FkIG91ciB0 ZXN0IG1vZHVsZQorJG5vZGUtPmluaXQ7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwu Y29uZicsCisJInNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyA9IHRlc3RfY3VzdG9tX3N0YXRraW5k Iik7Ciskbm9kZS0+c3RhcnQ7CisKKyMgQ3JlYXRlIHRoZSBleHRlbnNpb24gdG8gZW5hYmxlIGN1 c3RvbSBzdGF0aXN0aWNzIGZ1bmN0aW9ucworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx KENSRUFURSBFWFRFTlNJT04gdGVzdF9jdXN0b21fc3RhdGtpbmQpKTsKKworIyBDcmVhdGUgdHdv IGN1c3RvbSBzdGF0aXN0aWNzIGVudHJpZXMgd2l0aCBkZXNjcmlwdGlvbnMKKyRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgcGdzdGF0X2NyZWF0ZV9jdXN0b21fc3RhdCgnZW50 cnkxJywgJ3RoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIGZvciBlbnRyeTEnKSkpOworJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBwZ3N0YXRfY3JlYXRlX2N1c3RvbV9zdGF0KCdl bnRyeTInLCAndGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gZm9yIGVudHJ5MicpKSk7CisKKyMgSW5j cmVtZW50IHRoZSBzdGF0aXN0aWNzIGNvdW50ZXJzOgorIyBlbnRyeTE6IDIgY2FsbHMsIGVudHJ5 MjogMyBjYWxscworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBwZ3N0YXRf Y2FsbF9jdXN0b21fc3RhdCgnZW50cnkxJykpKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcShzZWxlY3QgcGdzdGF0X2NhbGxfY3VzdG9tX3N0YXQoJ2VudHJ5MScpKSk7Ciskbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2VsZWN0IHBnc3RhdF9jYWxsX2N1c3RvbV9zdGF0KCdl bnRyeTInKSkpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCBwZ3N0YXRf Y2FsbF9jdXN0b21fc3RhdCgnZW50cnkyJykpKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcShzZWxlY3QgcGdzdGF0X2NhbGxfY3VzdG9tX3N0YXQoJ2VudHJ5MicpKSk7CisKKyMgVmVy aWZ5IHRoYXQgdGhlIGN1c3RvbSBzdGF0aXN0aWNzIGFyZSBjb3JyZWN0bHkgc3RvcmVkIGFuZCBy ZXBvcnRlZAorbXkgJHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxl Y3QgKiBmcm9tIHBnc3RhdF9yZXBvcnRfY3VzdG9tX3N0YXQoJ2VudHJ5MScpKSk7CitpcygkcmVz dWx0LCAiZW50cnkxfHRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIGZvciBlbnRyeTF8MiIsICJlbnRy eTEgc2hvdWxkIGhhdmUgMiBjYWxscyB3aXRoIGRlc2NyaXB0aW9uIik7CisKKyRyZXN1bHQgPSAk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2VsZWN0ICogZnJvbSBwZ3N0YXRfcmVwb3J0 X2N1c3RvbV9zdGF0KCdlbnRyeTInKSkpOworaXMoJHJlc3VsdCwgImVudHJ5Mnx0aGlzIGlzIHRo ZSBkZXNjcmlwdGlvbiBmb3IgZW50cnkyfDMiLCAiZW50cnkyIHNob3VsZCBoYXZlIDMgY2FsbHMg d2l0aCBkZXNjcmlwdGlvbiIpOworCisjIFRlc3QgcGVyc2lzdGVuY2UgYWNyb3NzIHNlcnZlciBy ZXN0YXJ0CisjIFBlcmZvcm0gYSBjbGVhbiBzaHV0ZG93biB0byBlbnN1cmUgc3RhdGlzdGljcyBh cmUgd3JpdHRlbiB0byBkaXNrCiskbm9kZS0+c3RvcCgpOworCisjIENyZWF0ZSBhIGJhY2t1cCBv ZiB0aGUgc3RhdGlzdGljcyBmaWxlIGZvciBsYXRlciB0ZXN0aW5nCitteSAkc3RhdHNmaWxlID0g JFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2sgLiAnLycgLiAiZGlzY2FyZF9jdXN0 b21fc3RhdHMiOworb2soIS1mICIkc3RhdHNmaWxlIiwgImJhY2t1cCBzdGF0c2ZpbGUgc2hvdWxk IG5vdCBhbHJlYWR5IGV4aXN0Iik7CisKKyMgTG9jYXRlIGFuZCBiYWNrdXAgdGhlIG9yaWdpbmFs IHN0YXRpc3RpY3MgZmlsZQorbXkgJGRhdGFkaXIgPSAkbm9kZS0+ZGF0YV9kaXIoKTsKK215ICRv Z19zdGF0cyA9ICIkZGF0YWRpci9wZ19zdGF0L3Rlc3RfY3VzdG9tX3N0YXRraW5kLnN0YXQiOwor b2soLWYgIiRvZ19zdGF0cyIsICJvcmlnaW5hbCBzdGF0cyBmaWxlIHNob3VsZCBleGlzdCBhZnRl ciBzaHV0ZG93biIpOworY29weSgkb2dfc3RhdHMsICRzdGF0c2ZpbGUpIG9yIGRpZSAiQ29weSBm YWlsZWQ6ICQhIjsKKworIyBSZXN0YXJ0IHRoZSBzZXJ2ZXIgdG8gdGVzdCBzdGF0aXN0aWNzIHBl cnNpc3RlbmNlCiskbm9kZS0+c3RhcnQoKTsKKworIyBWZXJpZnkgdGhhdCBzdGF0aXN0aWNzIHBl cnNpc3RlZCBhY3Jvc3MgdGhlIHJlc3RhcnQKKyRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHEoc2VsZWN0ICogZnJvbSBwZ3N0YXRfcmVwb3J0X2N1c3RvbV9zdGF0KCdlbnRy eTEnKSkpOworaXMoJHJlc3VsdCwgImVudHJ5MXx0aGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBmb3Ig ZW50cnkxfDIiLCAiZW50cnkxIHN0YXRzIHNob3VsZCBwZXJzaXN0IGFmdGVyIHJlc3RhcnQiKTsK KworJHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgKiBmcm9t IHBnc3RhdF9yZXBvcnRfY3VzdG9tX3N0YXQoJ2VudHJ5MicpKSk7CitpcygkcmVzdWx0LCAiZW50 cnkyfHRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIGZvciBlbnRyeTJ8MyIsICJlbnRyeTIgc3RhdHMg c2hvdWxkIHBlcnNpc3QgYWZ0ZXIgcmVzdGFydCIpOworCisjIFRlc3Qgc3RhdGlzdGljcyByZXNl dCBiZWhhdmlvcgorIyBQZXJmb3JtIGFuIGltbWVkaWF0ZSBzaHV0ZG93biAoc2ltdWxhdGVzIGNy YXNoKSB0byBwcmV2ZW50IHN0YXRzIHdyaXRpbmcKKyRub2RlLT5zdG9wKCdpbW1lZGlhdGUnKTsK KworIyBSZXN0b3JlIHRoZSBiYWNrZWQgdXAgc3RhdGlzdGljcyBmaWxlIGFuZCByZXN0YXJ0Citj b3B5KCRzdGF0c2ZpbGUsICRvZ19zdGF0cykgb3IgZGllICJDb3B5IGZhaWxlZDogJCEiOworJG5v ZGUtPnN0YXJ0OworCisjIEFmdGVyIGltbWVkaWF0ZSBzaHV0ZG93biwgdGhlIHN0YXRzIGZpbGUg c2hvdWxkIGJlIGNsZWFuZWQgdXAKK29rKCEtZiAiJG9nX3N0YXRzIiwgInN0YXRzIGZpbGUgc2hv dWxkIGJlIHJlbW92ZWQgYWZ0ZXIgaW1tZWRpYXRlIHNodXRkb3duIHJlY292ZXJ5Iik7CisKKyMg VmVyaWZ5IHRoYXQgc3RhdGlzdGljcyBhcmUgcmVzZXQgKG5vIGRlc2NyaXB0aW9ucywgemVybyBj b3VudHMpCiskcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKHNlbGVjdCAq IGZyb20gcGdzdGF0X3JlcG9ydF9jdXN0b21fc3RhdCgnZW50cnkxJykpKTsKK2lzKCRyZXN1bHQs ICJlbnRyeTF8fDAiLCAiZW50cnkxIHNob3VsZCBiZSByZXNldCBhZnRlciBzdGF0cyBmaWxlIGNs ZWFudXAiKTsKKworJHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxl Y3QgKiBmcm9tIHBnc3RhdF9yZXBvcnRfY3VzdG9tX3N0YXQoJ2VudHJ5MicpKSk7CitpcygkcmVz dWx0LCAiZW50cnkyfHwwIiwgImVudHJ5MiBzaG91bGQgYmUgcmVzZXQgYWZ0ZXIgc3RhdHMgZmls ZSBjbGVhbnVwIik7CisKKyMgVGVzdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Citkb25lX3Rlc3Rp bmcoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRraW5kL3Rlc3RfY3VzdG9tX3N0YXRraW5kLS0xLjAuc3Fs IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0a2luZC90ZXN0X2N1c3RvbV9zdGF0 a2luZC0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGIw ODUyMDZhYzgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9t X3N0YXRraW5kL3Rlc3RfY3VzdG9tX3N0YXRraW5kLS0xLjAuc3FsCkBAIC0wLDAgKzEsMTkgQEAK Ky8qIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdGtpbmQvdGVzdF9jdXN0b21fc3Rh dGtpbmQtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4g cHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQ1JFQVRF IEVYVEVOU0lPTiB0ZXN0X2N1c3RvbV9zdGF0a2luZCIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0 CisKK0NSRUFURSBGVU5DVElPTiBwZ3N0YXRfY3JlYXRlX2N1c3RvbV9zdGF0KElOIG5hbWUgVEVY VCwgSU4gZGVzY3JpcHRpb24gdGV4dCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFN RScsICdwZ3N0YXRfY3JlYXRlX2N1c3RvbV9zdGF0JworTEFOR1VBR0UgQyBTVFJJQ1QgUEFSQUxM RUwgVU5TQUZFOworCitDUkVBVEUgRlVOQ1RJT04gcGdzdGF0X2NhbGxfY3VzdG9tX3N0YXQoSU4g bmFtZSBURVhUKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Bnc3RhdF9j YWxsX2N1c3RvbV9zdGF0JworTEFOR1VBR0UgQyBTVFJJQ1QgUEFSQUxMRUwgVU5TQUZFOworCitD UkVBVEUgRlVOQ1RJT04gcGdzdGF0X3JlcG9ydF9jdXN0b21fc3RhdChJTk9VVCBuYW1lIFRFWFQg LCBPVVQgZGVzY3JpcHRpb24gVEVYVCwgT1VUIGNhbGxzIEJJR0lOVCkKK1JFVFVSTlMgU0VUT0Yg cmVjb3JkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Bnc3RhdF9yZXBvcnRfY3VzdG9tX3N0YXQn CitMQU5HVUFHRSBDIFNUUklDVCBQQVJBTExFTCBVTlNBRkU7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRraW5kL3Rlc3RfY3VzdG9tX3N0YXRraW5kLmMgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRraW5kL3Rlc3RfY3VzdG9tX3N0YXRraW5k LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJjOTA3N2Y4MGE2Ci0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0a2luZC90 ZXN0X2N1c3RvbV9zdGF0a2luZC5jCkBAIC0wLDAgKzEsNTcwIEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogdGVzdF9jdXN0b21fc3RhdGtpbmQuYworICoJCVRlc3QgbW9kdWxlIGZvciBw Z3N0YXRzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCQlzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRraW5kL3Rlc3RfY3VzdG9tX3N0YXRraW5kLmMKKyAqCisg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVk ZSAiY29tbW9uL2hhc2hmbi5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJwZ3N0 YXQuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5oIgorI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvcGdz dGF0X2ludGVybmFsLmgiCisKK1BHX01PRFVMRV9NQUdJQ19FWFQoCisJCQkJCS5uYW1lID0gInRl c3RfY3VzdG9tX3N0YXRraW5kIiwKKwkJCQkJLnZlcnNpb24gPSBQR19WRVJTSU9OCispOworCisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNYWNyb3MgYW5kIGNvbnN0YW50cworICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisKKy8qCisgKiBLaW5kIElEIHJlc2VydmVkIGZvciB0ZXN0X2N1c3RvbV9z dGF0a2luZC4gVGhpcyByZS11c2VzIHRoZSBzYW1lIElEIGFzCisgKiBJbmplY3Rpb24gcG9pbnRz IHRvIGF2b2lkIHJlc2VydmluZyBhbm90aGVyIGtpbmQgaWQuCisgKi8KKyNkZWZpbmUgUEdTVEFU X0tJTkRfVEVTVF9DVVNUT01fU1RBVEtJTkQgMjUKKworLyoKKyAqIENvbXB1dGUgc3RhdGlzdGlj cyBlbnRyeSBpbmRleCBmcm9tIHBvaW50IG5hbWUgdXNpbmcgYW4gOC1ieXRlIGhhc2guCisgKi8K KyNkZWZpbmUgUEdTVEFUX0NVU1RPTV9TVEFUX0lEWChuYW1lKSBoYXNoX2J5dGVzX2V4dGVuZGVk KChjb25zdCB1bnNpZ25lZCBjaGFyICopIG5hbWUsIHN0cmxlbihuYW1lKSwgMCkKKyNkZWZpbmUg UEdTVEFUX0NVU1RPTV9FWFRSQV9EQVRBX0RFU0MgInBnX3N0YXQvdGVzdF9jdXN0b21fc3RhdGtp bmQuc3RhdCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVHlwZSBkZWZpbml0aW9ucworICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIExvY2FsIHN0YXRpc3RpY3MgZW50cnkgZm9yIHBl bmRpbmcgZGF0YSAqLwordHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X1N0YXRDdXN0b21FbnRyeQorewor CVBnU3RhdF9Db3VudGVyIG51bWNhbGxzOwkvKiBudW1iZXIgb2YgdGltZXMgdGhlIGVudHJ5IGhh cyBiZWVuIGxvb2tlZAorCQkJCQkJCQkgKiB1cCAqLworfQkJCVBnU3RhdF9TdGF0Q3VzdG9tRW50 cnk7CisKKy8qIFNoYXJlZCBtZW1vcnkgc3RhdGlzdGljcyBlbnRyeSAqLwordHlwZWRlZiBzdHJ1 Y3QgUGdTdGF0U2hhcmVkX0N1c3RvbUVudHJ5Cit7CisJUGdTdGF0U2hhcmVkX0NvbW1vbiBoZWFk ZXI7CisJUGdTdGF0X1N0YXRDdXN0b21FbnRyeSBzdGF0czsKKwljaGFyCQluYW1lW05BTUVEQVRB TEVOXTsKKwlkc2FfcG9pbnRlciBkZXNjcmlwdGlvbjsKK30JCQlQZ1N0YXRTaGFyZWRfQ3VzdG9t RW50cnk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEdsb2JhbCB2YXJpYWJsZXMKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiBGbGFnIGluZGljYXRpbmcgaWYgY3VzdG9tIHN0YXRp c3RpY3Mga2luZCBpcyBsb2FkZWQgKi8KK3N0YXRpYyBib29sIHBnc3RhdF9jdXN0b21fa2luZF9s b2FkZWQgPSBmYWxzZTsKKworLyogRmlsZSBoYW5kbGUgZm9yIHN0YXRpc3RpY3Mgc2VyaWFsaXph dGlvbiAqLworc3RhdGljIEZJTEUgKmZkID0gTlVMTDsKKworLyogRFNBIGFyZWEgdG8gc3RvcmUg Y3VzdG9tIHN0YXRpc3RpY3MgZGVzY3JpcHRpb25zICovCitkc2FfYXJlYSAgICpjdXN0b21fc3Rh dHNfZGVzY3JpcHRpb25fZHNhID0gTlVMTDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRnVu Y3Rpb24gcHJvdG90eXBlcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIFN0YXRpc3Rp Y3MgY2FsbGJhY2sgZnVuY3Rpb25zICovCitzdGF0aWMgYm9vbCBwZ3N0YXRfY3VzdG9tX2VudHJ5 X2ZsdXNoX2NiKFBnU3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmLCBib29sIG5vd2FpdCk7CitzdGF0 aWMgdm9pZCBwZ3N0YXRfY3VzdG9tX2VudHJ5X2V4dHJhX3NlcmlhbGl6ZShjb25zdCBQZ1N0YXRf SGFzaEtleSAqa2V5LAorCQkJCQkJCQkJCQkJY29uc3QgUGdTdGF0U2hhcmVkX0NvbW1vbiAqaGVh ZGVyLCBGSUxFICpzdGF0ZmlsZSk7CitzdGF0aWMgdm9pZCBwZ3N0YXRfY3VzdG9tX2VudHJ5X2V4 dHJhX2Rlc2VyaWFsaXplKGNvbnN0IFBnU3RhdF9IYXNoS2V5ICprZXksCisJCQkJCQkJCQkJCQkg IGNvbnN0IFBnU3RhdFNoYXJlZF9Db21tb24gKmhlYWRlciwgRklMRSAqc3RhdGZpbGUpOworc3Rh dGljIHZvaWQgcGdzdGF0X2N1c3RvbV9lbnRyeV9lbmRfZXh0cmEoUGdTdGF0X1N0YXRzRmlsZU9w IHN0YXR1cyk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEN1c3RvbSBraW5kIGNvbmZpZ3Vy YXRpb24KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMgY29uc3QgUGdTdGF0X0tp bmRJbmZvIGN1c3RvbV9zdGF0cyA9IHsKKwkubmFtZSA9ICJ0ZXN0X2N1c3RvbV9wZ3N0YXQiLAor CS5maXhlZF9hbW91bnQgPSBmYWxzZSwJCS8qIEJvdW5kZWQgYnkgdGhlIG51bWJlciBvZiBwb2lu dHMgKi8KKwkud3JpdGVfdG9fZmlsZSA9IHRydWUsCisJLnRyYWNrX2VudHJ5X2NvdW50ID0gdHJ1 ZSwKKwkuYWNjZXNzZWRfYWNyb3NzX2RhdGFiYXNlcyA9IHRydWUsCS8qIFN5c3RlbS13aWRlIHN0 YXRpc3RpY3MgKi8KKwkuc2hhcmVkX3NpemUgPSBzaXplb2YoUGdTdGF0U2hhcmVkX0N1c3RvbUVu dHJ5KSwKKwkuc2hhcmVkX2RhdGFfb2ZmID0gb2Zmc2V0b2YoUGdTdGF0U2hhcmVkX0N1c3RvbUVu dHJ5LCBzdGF0cyksCisJLnNoYXJlZF9kYXRhX2xlbiA9IHNpemVvZigoKFBnU3RhdFNoYXJlZF9D dXN0b21FbnRyeSAqKSAwKS0+c3RhdHMpLAorCS5wZW5kaW5nX3NpemUgPSBzaXplb2YoUGdTdGF0 X1N0YXRDdXN0b21FbnRyeSksCisJLmZsdXNoX3BlbmRpbmdfY2IgPSBwZ3N0YXRfY3VzdG9tX2Vu dHJ5X2ZsdXNoX2NiLAorCS50b19zZXJpYWxpemVkX2V4dHJhX3N0YXRzID0gcGdzdGF0X2N1c3Rv bV9lbnRyeV9leHRyYV9zZXJpYWxpemUsCisJLmZyb21fc2VyaWFsaXplZF9leHRyYV9zdGF0cyA9 IHBnc3RhdF9jdXN0b21fZW50cnlfZXh0cmFfZGVzZXJpYWxpemUsCisJLmVuZF9leHRyYV9zdGF0 cyA9IHBnc3RhdF9jdXN0b21fZW50cnlfZW5kX2V4dHJhLAorfTsKKworLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICogTW9kdWxlIGluaXRpYWxpemF0aW9uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K Kwordm9pZAorX1BHX2luaXQodm9pZCkKK3sKKwlpZiAoIXByb2Nlc3Nfc2hhcmVkX3ByZWxvYWRf bGlicmFyaWVzX2luX3Byb2dyZXNzKQorCQlyZXR1cm47CisKKwlwZ3N0YXRfcmVnaXN0ZXJfa2lu ZChQR1NUQVRfS0lORF9URVNUX0NVU1RPTV9TVEFUS0lORCwgJmN1c3RvbV9zdGF0cyk7CisKKwlw Z3N0YXRfY3VzdG9tX2tpbmRfbG9hZGVkID0gdHJ1ZTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICogU3RhdGlzdGljcyBjYWxsYmFjayBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworCisvKgorICogcGdzdGF0X2N1c3RvbV9lbnRyeV9mbHVzaF9jYigpIC0KKyAqCisgKiBG bHVzaCBjYWxsYmFjayBmb3IgY3VzdG9tIHN0YXRpc3RpY3MgZW50cmllcy4gTWVyZ2VzIHBlbmRp bmcgc3RhdGlzdGljcworICogZGF0YSBmcm9tIGxvY2FsIG1lbW9yeSBpbnRvIHNoYXJlZCBtZW1v cnkuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBmbHVzaCB3YXMgc3VjY2Vzc2Z1bCwgZmFs c2UgaWYgd2UgY291bGRuJ3QgYWNxdWlyZQorICogdGhlIG5lY2Vzc2FyeSBsb2NrcyAod2hlbiBu b3dhaXQgaXMgdHJ1ZSkuCisgKi8KK3N0YXRpYyBib29sCitwZ3N0YXRfY3VzdG9tX2VudHJ5X2Zs dXNoX2NiKFBnU3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmLCBib29sIG5vd2FpdCkKK3sKKwlQZ1N0 YXRfU3RhdEN1c3RvbUVudHJ5ICpsb2NhbGVudDsKKwlQZ1N0YXRTaGFyZWRfQ3VzdG9tRW50cnkg KnNoZnVuY2VudDsKKworCWxvY2FsZW50ID0gKFBnU3RhdF9TdGF0Q3VzdG9tRW50cnkgKikgZW50 cnlfcmVmLT5wZW5kaW5nOworCXNoZnVuY2VudCA9IChQZ1N0YXRTaGFyZWRfQ3VzdG9tRW50cnkg KikgZW50cnlfcmVmLT5zaGFyZWRfc3RhdHM7CisKKwlpZiAoIXBnc3RhdF9sb2NrX2VudHJ5KGVu dHJ5X3JlZiwgbm93YWl0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJc2hmdW5jZW50LT5zdGF0cy5u dW1jYWxscyArPSBsb2NhbGVudC0+bnVtY2FsbHM7CisKKwlwZ3N0YXRfdW5sb2NrX2VudHJ5KGVu dHJ5X3JlZik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIHBnc3RhdF9jdXN0b21fZW50 cnlfZXh0cmFfc2VyaWFsaXplKCkgLQorICoKKyAqIFNlcmlhbGl6ZSBleHRyYSBkYXRhIChkZXNj cmlwdGlvbnMpIGZvciBjdXN0b20gc3RhdGlzdGljcyBlbnRyaWVzIHRvCisgKiB0aGUgc3RhdGlz dGljcyBmaWxlLiBDYWxsZWQgZHVyaW5nIHN0YXRpc3RpY3MgZmlsZSB3cml0aW5nIHRvIHByZXNl cnZlCisgKiBkZXNjcmlwdGlvbiBzdHJpbmdzIGFjcm9zcyByZXN0YXJ0cy4KKyAqLworc3RhdGlj IHZvaWQKK3Bnc3RhdF9jdXN0b21fZW50cnlfZXh0cmFfc2VyaWFsaXplKGNvbnN0IFBnU3RhdF9I YXNoS2V5ICprZXksCisJCQkJCQkJCQljb25zdCBQZ1N0YXRTaGFyZWRfQ29tbW9uICpoZWFkZXIs IEZJTEUgKnN0YXRmaWxlKQoreworCWNoYXIJICAgKmRlc2NyaXB0aW9uOworCXNpemVfdAkJcWxl bjsKKwlQZ1N0YXRTaGFyZWRfQ3VzdG9tRW50cnkgKmVudHJ5ID0gKFBnU3RhdFNoYXJlZF9DdXN0 b21FbnRyeSAqKSBoZWFkZXI7CisJYm9vbAkJZm91bmQ7CisKKwlpZiAoIXBnc3RhdF9jdXN0b21f a2luZF9sb2FkZWQpCisJCXJldHVybjsKKworCWlmICghY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9u X2RzYSkKKwkJY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSA9IEdldE5hbWVkRFNBKCJwZ3N0 YXRfY3VzdG9tX3N0YXRfZHNhIiwgJmZvdW5kKTsKKworCS8qIEV4aXQgZWFybHkgaWYgRFNBIGlz IG5vdCBhdmFpbGFibGUgKi8KKwlpZiAoIWN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EpCisJ CXJldHVybjsKKworCS8qIE9wZW4gc3RhdGlzdGljcyBmaWxlIGZvciB3cml0aW5nIGlmIG5vdCBh bHJlYWR5IG9wZW4gKi8KKwlpZiAoIWZkKQorCXsKKwkJZmQgPSBBbGxvY2F0ZUZpbGUoUEdTVEFU X0NVU1RPTV9FWFRSQV9EQVRBX0RFU0MsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKGZkID09IE5VTEwp CisJCXsKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwK KwkJCQkJIGVycm1zZygiY291bGQgbm90IG9wZW4gc3RhdGlzdGljcyBmaWxlIFwiJXNcIiBmb3Ig d3JpdGluZzogJW0iLAorCQkJCQkJCVBHU1RBVF9DVVNUT01fRVhUUkFfREFUQV9ERVNDKSkpOwor CQkJcmV0dXJuOworCQl9CisJfQorCisJLyogV3JpdGUgdGhlIGhhc2gga2V5IHRvIGlkZW50aWZ5 IHRoaXMgZW50cnkgKi8KKwlwZ3N0YXRfd3JpdGVfY2h1bmsoZmQsICh2b2lkICopIGtleSwgc2l6 ZW9mKFBnU3RhdF9IYXNoS2V5KSk7CisKKwkvKiBIYW5kbGUgZW50cmllcyB3aXRob3V0IGRlc2Ny aXB0aW9ucyAqLworCWlmICghRHNhUG9pbnRlcklzVmFsaWQoZW50cnktPmRlc2NyaXB0aW9uKSkK Kwl7CisJCWZwdXRjKCdcMCcsIGZkKTsJCS8qIFdyaXRlIG51bGwgdGVybWluYXRvciBmb3IgZW1w dHkgZGVzY3JpcHRpb24gKi8KKwkJcmV0dXJuOworCX0KKworCWlmICghY3VzdG9tX3N0YXRzX2Rl c2NyaXB0aW9uX2RzYSkKKwl7CisJCWZwdXRjKCdcMCcsIGZkKTsJCS8qIFdyaXRlIG51bGwgdGVy bWluYXRvciBpZiBEU0EgdW5hdmFpbGFibGUgKi8KKwkJcmV0dXJuOworCX0KKworCS8qIFJldHJp ZXZlIGRlc2NyaXB0aW9uIGZyb20gRFNBIGFuZCB3cml0ZSB0byBmaWxlICovCisJZGVzY3JpcHRp b24gPSBkc2FfZ2V0X2FkZHJlc3MoY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSwgZW50cnkt PmRlc2NyaXB0aW9uKTsKKwlxbGVuID0gc3RybGVuKGRlc2NyaXB0aW9uKSArIDE7IC8qIGluY2x1 ZGUgbnVsbCB0ZXJtaW5hdG9yICovCisKKwlwZ3N0YXRfd3JpdGVfY2h1bmsoZmQsIGRlc2NyaXB0 aW9uLCBxbGVuKTsKK30KKworLyoKKyAqIHBnc3RhdF9jdXN0b21fZW50cnlfZXh0cmFfZGVzZXJp YWxpemUoKSAtCisgKgorICogRGVzZXJpYWxpemUgZXh0cmEgZGF0YSAoZGVzY3JpcHRpb25zKSBm b3IgY3VzdG9tIHN0YXRpc3RpY3MgZW50cmllcyBmcm9tCisgKiB0aGUgc3RhdGlzdGljcyBmaWxl LiBDYWxsZWQgZHVyaW5nIHN0YXRpc3RpY3MgZmlsZSByZWFkaW5nIHRvIHJlc3RvcmUKKyAqIGRl c2NyaXB0aW9uIHN0cmluZ3MgYWZ0ZXIgYSByZXN0YXJ0LgorICovCitzdGF0aWMgdm9pZAorcGdz dGF0X2N1c3RvbV9lbnRyeV9leHRyYV9kZXNlcmlhbGl6ZShjb25zdCBQZ1N0YXRfSGFzaEtleSAq a2V5LAorCQkJCQkJCQkJICBjb25zdCBQZ1N0YXRTaGFyZWRfQ29tbW9uICpoZWFkZXIsIEZJTEUg KnN0YXRmaWxlKQoreworCVBnU3RhdFNoYXJlZF9DdXN0b21FbnRyeSAqZW50cnk7CisJZHNhX3Bv aW50ZXIgZHA7CisJc2l6ZV90CQlidWZzaXplOworCXNpemVfdAkJbGVuOworCWNoYXIJICAgKmJ1 ZmZlcjsKKwlpbnQJCQljOworCWJvb2wJCWZvdW5kOworCisJaWYgKCFwZ3N0YXRfY3VzdG9tX2tp bmRfbG9hZGVkKQorCQlyZXR1cm47CisKKwkvKiBJbml0aWFsaXplIERTQSBpZiBuZWVkZWQgKi8K KwlpZiAoIWN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EpCisJCWN1c3RvbV9zdGF0c19kZXNj cmlwdGlvbl9kc2EgPSBHZXROYW1lZERTQSgicGdzdGF0X2N1c3RvbV9zdGF0X2RzYSIsICZmb3Vu ZCk7CisKKwlpZiAoIWN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EpCisJCXJldHVybjsKKwor CS8qIE9wZW4gc3RhdGlzdGljcyBmaWxlIGZvciByZWFkaW5nIGlmIG5vdCBhbHJlYWR5IG9wZW4g Ki8KKwlpZiAoIWZkKQorCXsKKwkJZmQgPSBBbGxvY2F0ZUZpbGUoUEdTVEFUX0NVU1RPTV9FWFRS QV9EQVRBX0RFU0MsIFBHX0JJTkFSWV9SKTsKKwkJaWYgKGZkID09IE5VTEwpCisJCXsKKwkJCWlm IChlcnJubyAhPSBFTk9FTlQpCisJCQkJZXJlcG9ydChMT0csCisJCQkJCQkoZXJyY29kZV9mb3Jf ZmlsZV9hY2Nlc3MoKSwKKwkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIHN0YXRpc3RpY3Mg ZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmc6ICVtIiwKKwkJCQkJCQkJUEdTVEFUX0NVU1RPTV9FWFRS QV9EQVRBX0RFU0MpKSk7CisJCQkvKiBSZXNldCBzdGF0aXN0aWNzIGlmIGZpbGUgaXMgbWlzc2lu ZyBvciB1bnJlYWRhYmxlICovCisJCQlwZ3N0YXRfcmVzZXRfb2Zfa2luZChQR1NUQVRfS0lORF9U RVNUX0NVU1RPTV9TVEFUS0lORCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBSZWFkIGFu ZCB2ZXJpZnkgdGhlIGhhc2gga2V5ICovCisJaWYgKCFwZ3N0YXRfcmVhZF9jaHVuayhmZCwgKHZv aWQgKikga2V5LCBzaXplb2YoUGdTdGF0X0hhc2hLZXkpKSkKKwkJcmV0dXJuOworCisJZW50cnkg PSAoUGdTdGF0U2hhcmVkX0N1c3RvbUVudHJ5ICopIGhlYWRlcjsKKworCS8qIFJlYWQgbnVsbC10 ZXJtaW5hdGVkIGRlc2NyaXB0aW9uIHN0cmluZyBmcm9tIGZpbGUgKi8KKwlidWZzaXplID0gMTI4 OworCWxlbiA9IDA7CisJYnVmZmVyID0gcGFsbG9jKGJ1ZnNpemUpOworCisJLyogUmVhZCBkZXNj cmlwdGlvbiBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyIHVudGlsIG51bGwgdGVybWluYXRvciAqLwor CXdoaWxlICgoYyA9IGZnZXRjKGZkKSkgIT0gRU9GKQorCXsKKwkJLyogRXhwYW5kIGJ1ZmZlciBp ZiBuZWVkZWQgKi8KKwkJaWYgKGxlbiArIDEgPj0gYnVmc2l6ZSkKKwkJeworCQkJYnVmc2l6ZSAq PSAyOworCQkJYnVmZmVyID0gcmVwYWxsb2MoYnVmZmVyLCBidWZzaXplKTsKKwkJfQorCisJCWJ1 ZmZlcltsZW4rK10gPSAoY2hhcikgYzsKKworCQlpZiAoYyA9PSAnXDAnKQorCQkJYnJlYWs7CisJ fQorCisJLyogSGFuZGxlIHVuZXhwZWN0ZWQgRU9GICovCisJaWYgKGMgPT0gRU9GKQorCXsKKwkJ cGZyZWUoYnVmZmVyKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEFsbG9jYXRlIHNwYWNlIGluIERT QSBhbmQgY29weSB0aGUgZGVzY3JpcHRpb24gKi8KKwlkcCA9IGRzYV9hbGxvY2F0ZShjdXN0b21f c3RhdHNfZGVzY3JpcHRpb25fZHNhLCBsZW4pOworCisJbWVtY3B5KGRzYV9nZXRfYWRkcmVzcyhj dXN0b21fc3RhdHNfZGVzY3JpcHRpb25fZHNhLCBkcCksIGJ1ZmZlciwgbGVuKTsKKwllbnRyeS0+ ZGVzY3JpcHRpb24gPSBkcDsKKworCXBmcmVlKGJ1ZmZlcik7Cit9CisKKy8qCisgKiBwZ3N0YXRf Y3VzdG9tX2VudHJ5X2VuZF9leHRyYSgpIC0KKyAqCisgKiBDbGVhbnVwIGZ1bmN0aW9uIGNhbGxl ZCBhdCB0aGUgZW5kIG9mIHN0YXRpc3RpY3MgZmlsZSBvcGVyYXRpb25zLgorICogSGFuZGxlcyBj bG9zaW5nIGZpbGVzIGFuZCBjbGVhbnVwIGJhc2VkIG9uIHRoZSBvcGVyYXRpb24gdHlwZS4KKyAq Lworc3RhdGljIHZvaWQKK3Bnc3RhdF9jdXN0b21fZW50cnlfZW5kX2V4dHJhKFBnU3RhdF9TdGF0 c0ZpbGVPcCBzdGF0dXMpCit7CisJaWYgKCFwZ3N0YXRfY3VzdG9tX2tpbmRfbG9hZGVkKQorCQly ZXR1cm47CisKKwkvKiBIYW5kbGUgY2xlYW51cCBhZnRlciB3cml0aW5nIHN0YXRpc3RpY3MgKi8K KwlpZiAoc3RhdHVzID09IFNUQVRTX1dSSVRFKQorCXsKKwkJaWYgKCFmZCkKKwkJCXJldHVybjsK KworCQkvKiBDaGVjayBmb3Igd3JpdGUgZXJyb3JzIGFuZCBjbGVhbnVwIGlmIG5lY2Vzc2FyeSAq LworCQlpZiAoZmVycm9yKGZkKSkKKwkJeworCQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgc3RhdGlz dGljcyBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkJCVBHU1RBVF9DVVNUT01fRVhUUkFfREFUQV9E RVNDKSkpOworCQkJRnJlZUZpbGUoZmQpOworCQkJdW5saW5rKFBHU1RBVF9DVVNUT01fRVhUUkFf REFUQV9ERVNDKTsKKwkJfQorCQllbHNlIGlmIChGcmVlRmlsZShmZCkgPCAwKQorCQl7CisJCQll cmVwb3J0KExPRywKKwkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJCSBlcnJt c2coImNvdWxkIG5vdCBjbG9zZSBzdGF0aXN0aWNzIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCQkJ UEdTVEFUX0NVU1RPTV9FWFRSQV9EQVRBX0RFU0MpKSk7CisJCQl1bmxpbmsoUEdTVEFUX0NVU1RP TV9FWFRSQV9EQVRBX0RFU0MpOworCQl9CisJfQorCS8qIEhhbmRsZSBjbGVhbnVwIGFmdGVyIHJl YWRpbmcgc3RhdGlzdGljcyAqLworCWVsc2UgaWYgKHN0YXR1cyA9PSBTVEFUU19SRUFEKQorCXsK KwkJaWYgKCFmZCkKKwkJCXJldHVybjsKKworCQlGcmVlRmlsZShmZCk7CisKKwkJLyogUmVtb3Zl IHRoZSB0ZW1wb3Jhcnkgc3RhdGlzdGljcyBmaWxlIGFmdGVyIHJlYWRpbmcgKi8KKwkJZWxvZyhE RUJVRzIsICJyZW1vdmluZyBzdGF0aXN0aWNzIGZpbGUgXCIlc1wiIiwgUEdTVEFUX0NVU1RPTV9F WFRSQV9EQVRBX0RFU0MpOworCQl1bmxpbmsoUEdTVEFUX0NVU1RPTV9FWFRSQV9EQVRBX0RFU0Mp OworCX0KKwkvKiBIYW5kbGUgb3RoZXIgY2xlYW51cCBvcGVyYXRpb25zIChyZXNldCwgZXRjLikg Ki8KKwllbHNlCisJeworCQlpbnQJCQlyZXQ7CisKKwkJLyogQXR0ZW1wdCB0byByZW1vdmUgdGhl IHN0YXRpc3RpY3MgZmlsZSAqLworCQlyZXQgPSB1bmxpbmsoUEdTVEFUX0NVU1RPTV9FWFRSQV9E QVRBX0RFU0MpOworCQlpZiAocmV0ICE9IDApCisJCXsKKwkJCWlmIChlcnJubyA9PSBFTk9FTlQp CisJCQkJZWxvZyhMT0csCisJCQkJCSAiZGlkbid0IG5lZWQgdG8gdW5saW5rIHBlcm1hbmVudCBz dGF0cyBmaWxlIFwiJXNcIiAtIGRpZG4ndCBleGlzdCIsCisJCQkJCSBQR1NUQVRfQ1VTVE9NX0VY VFJBX0RBVEFfREVTQyk7CisJCQllbHNlCisJCQkJZXJlcG9ydChMT0csCisJCQkJCQkoZXJyY29k ZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCB1bmxpbmsgcGVy bWFuZW50IHN0YXRpc3RpY3MgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJCQkJUEdTVEFUX0NVU1RP TV9FWFRSQV9EQVRBX0RFU0MpKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQllcmVwb3J0KExPRywK KwkJCQkJKGVycm1zZ19pbnRlcm5hbCgidW5saW5rZWQgcGVybWFuZW50IHN0YXRpc3RpY3MgZmls ZSBcIiVzXCIiLAorCQkJCQkJCQkJIFBHU1RBVF9DVVNUT01fRVhUUkFfREFUQV9ERVNDKSkpOwor CQl9CisJfQorCisJZmQgPSBOVUxMOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTUUwt Y2FsbGFibGUgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIHBn c3RhdF9jcmVhdGVfY3VzdG9tX3N0YXQoKSAtCisgKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9u IHRvIGNyZWF0ZSBhIG5ldyBjdXN0b20gc3RhdGlzdGljcyBlbnRyeS4KKyAqIEluaXRpYWxpemVz IHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIGZvciB0cmFja2luZyBzdGF0aXN0aWNzIHdpdGgKKyAq IGEgbmFtZSBhbmQgb3B0aW9uYWwgZGVzY3JpcHRpb24uCisgKi8KK1BHX0ZVTkNUSU9OX0lORk9f VjEocGdzdGF0X2NyZWF0ZV9jdXN0b21fc3RhdCk7CitEYXR1bQorcGdzdGF0X2NyZWF0ZV9jdXN0 b21fc3RhdChQR19GVU5DVElPTl9BUkdTKQoreworCVBnU3RhdF9FbnRyeVJlZiAqZW50cnlfcmVm OworCWJvb2wJCWZvdW5kOworCWNoYXIJICAgKmRlc2NfY29weTsKKwlzaXplX3QJCWxlbjsKKwlQ Z1N0YXRTaGFyZWRfQ3VzdG9tRW50cnkgKnNoc3RhdGVudDsKKwljaGFyCSAgICpuYW1lID0gdGV4 dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwljaGFyCSAgICpkZXNjcmlwdGlv biA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgxKSk7CisKKwlpZiAoIXBnc3Rh dF9jdXN0b21fa2luZF9sb2FkZWQpCisJCVBHX1JFVFVSTl9WT0lEKCk7CisKKwllbnRyeV9yZWYg PSBwZ3N0YXRfZ2V0X2VudHJ5X3JlZl9sb2NrZWQoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fU1RB VEtJTkQsIEludmFsaWRPaWQsCisJCQkJCQkJCQkJCVBHU1RBVF9DVVNUT01fU1RBVF9JRFgobmFt ZSksIHRydWUpOworCisJaWYgKCFlbnRyeV9yZWYpCisJCVBHX1JFVFVSTl9WT0lEKCk7CisKKwlz aHN0YXRlbnQgPSAoUGdTdGF0U2hhcmVkX0N1c3RvbUVudHJ5ICopIGVudHJ5X3JlZi0+c2hhcmVk X3N0YXRzOworCisJLyogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IHN0YXRpc3RpY3MgZGF0YSB0 byB6ZXJvICovCisJbWVtc2V0KCZzaHN0YXRlbnQtPnN0YXRzLCAwLCBzaXplb2Yoc2hzdGF0ZW50 LT5zdGF0cykpOworCisJLyogVmFsaWRhdGUgYW5kIHN0b3JlIHRoZSBzdGF0aXN0aWMgbmFtZSAq LworCWlmIChzdHJsZW4obmFtZSkgPj0gTkFNRURBVEFMRU4pCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9OQU1FX1RPT19MT05HKSwKKwkJCQkgZXJybXNnKCJjdXN0b20g c3RhdGlzdGljIG5hbWUgXCIlc1wiIGlzIHRvbyBsb25nIiwgbmFtZSksCisJCQkJIGVycmRldGFp bCgiTmFtZSBtdXN0IGJlIGxlc3MgdGhhbiAlZCBjaGFyYWN0ZXJzLiIsIE5BTUVEQVRBTEVOKSkp OworCisJc3RyY3B5KHNoc3RhdGVudC0+bmFtZSwgbmFtZSk7CisKKwkvKiBTdG9yZSBkZXNjcmlw dGlvbiBpbiBEU0EgaWYgcHJvdmlkZWQgKi8KKwlpZiAoZGVzY3JpcHRpb24pCisJeworCQlsZW4g PSBzdHJsZW4oZGVzY3JpcHRpb24pICsgMTsKKworCQkvKiBJbml0aWFsaXplIERTQSBmb3IgZGVz Y3JpcHRpb25zIGlmIG5vdCBhbHJlYWR5IGRvbmUgKi8KKwkJaWYgKCFjdXN0b21fc3RhdHNfZGVz Y3JpcHRpb25fZHNhKQorCQkJY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSA9IEdldE5hbWVk RFNBKCJwZ3N0YXRfY3VzdG9tX3N0YXRfZHNhIiwgJmZvdW5kKTsKKworCQlpZiAoY3VzdG9tX3N0 YXRzX2Rlc2NyaXB0aW9uX2RzYSkKKwkJeworCQkJLyogQWxsb2NhdGUgc3BhY2UgaW4gRFNBIGFu ZCBjb3B5IGRlc2NyaXB0aW9uICovCisJCQlzaHN0YXRlbnQtPmRlc2NyaXB0aW9uID0gZHNhX2Fs bG9jYXRlKGN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EsIGxlbik7CisJCQlpZiAoIURzYVBv aW50ZXJJc1ZhbGlkKHNoc3RhdGVudC0+ZGVzY3JpcHRpb24pKQorCQkJeworCQkJCS8qIERTQSBh bGxvY2F0aW9uIGZhaWxlZCwgY29udGludWUgd2l0aG91dCBkZXNjcmlwdGlvbiAqLworCQkJCXNo c3RhdGVudC0+ZGVzY3JpcHRpb24gPSBJbnZhbGlkRHNhUG9pbnRlcjsKKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQlkZXNjX2NvcHkgPSBkc2FfZ2V0X2FkZHJlc3MoY3VzdG9tX3N0YXRzX2Rlc2Ny aXB0aW9uX2RzYSwKKwkJCQkJCQkJCQkJc2hzdGF0ZW50LT5kZXNjcmlwdGlvbik7CisJCQkJbWVt Y3B5KGRlc2NfY29weSwgZGVzY3JpcHRpb24sIGxlbik7CisJCQl9CisJCX0KKwl9CisKKwlwZ3N0 YXRfdW5sb2NrX2VudHJ5KGVudHJ5X3JlZik7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisv KgorICogcGdzdGF0X2NhbGxfY3VzdG9tX3N0YXQoKSAtCisgKgorICogU1FMLWNhbGxhYmxlIGZ1 bmN0aW9uIHRvIGluY3JlbWVudCB0aGUgY2FsbCBjb3VudCBmb3IgYSBjdXN0b20gc3RhdGlzdGlj LgorICogVGhpcyBpcyB0eXBpY2FsbHkgY2FsbGVkIGZyb20gdXNlciBjb2RlIHRvIHRyYWNrIHVz YWdlIG9yIGV2ZW50cy4KKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMShwZ3N0YXRfY2FsbF9jdXN0 b21fc3RhdCk7CitEYXR1bQorcGdzdGF0X2NhbGxfY3VzdG9tX3N0YXQoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwljaGFyCSAgICpuYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQ KDApKTsKKwlQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3JlZjsKKwlQZ1N0YXRfU3RhdEN1c3RvbUVu dHJ5ICpwZW5kaW5nOworCisJaWYgKCFwZ3N0YXRfY3VzdG9tX2tpbmRfbG9hZGVkKQorCQlQR19S RVRVUk5fVk9JRCgpOworCisJLyogR2V0IHRoZSBwZW5kaW5nIHN0YXRpc3RpY3MgZW50cnkgZm9y IHRoaXMgY3VzdG9tIHN0YXQgKi8KKwllbnRyeV9yZWYgPSBwZ3N0YXRfcHJlcF9wZW5kaW5nX2Vu dHJ5KFBHU1RBVF9LSU5EX1RFU1RfQ1VTVE9NX1NUQVRLSU5ELCBJbnZhbGlkT2lkLAorCQkJCQkJ CQkJCSAgUEdTVEFUX0NVU1RPTV9TVEFUX0lEWChuYW1lKSwgTlVMTCk7CisKKwlwZW5kaW5nID0g KFBnU3RhdF9TdGF0Q3VzdG9tRW50cnkgKikgZW50cnlfcmVmLT5wZW5kaW5nOworCisJLyogSW5j cmVtZW50IHRoZSBjYWxsIGNvdW50ZXIgaW4gbG9jYWwgcGVuZGluZyBzdGF0cyAqLworCXBlbmRp bmctPm51bWNhbGxzKys7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICogcGdzdGF0 X3JlcG9ydF9jdXN0b21fc3RhdCgpIC0KKyAqCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8g cmV0cmlldmUgc3RhdGlzdGljcyBmb3IgYSBjdXN0b20gc3RhdGlzdGljLgorICogUmV0dXJucyBh IGNvbXBvc2l0ZSB0eXBlIGNvbnRhaW5pbmcgdGhlIG5hbWUsIGRlc2NyaXB0aW9uLCBhbmQgY2Fs bCBjb3VudC4KKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMShwZ3N0YXRfcmVwb3J0X2N1c3RvbV9z dGF0KTsKK0RhdHVtCitwZ3N0YXRfcmVwb3J0X2N1c3RvbV9zdGF0KFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJY2hhcgkgICAqbmFtZSA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgw KSk7CisJUGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWY7CisJUGdTdGF0U2hhcmVkX0N1c3RvbUVu dHJ5ICpzaGZ1bmNlbnQ7CisJRGF0dW0JCXZhbHVlc1szXTsKKwlib29sCQludWxsc1szXSA9IHtm YWxzZSwgZmFsc2UsIGZhbHNlfTsKKwlUdXBsZURlc2MJdHVwZGVzYzsKKwlUdXBsZURlc2MJZXhw ZWN0ZWQ7CisJYm9vbAkJZm91bmQ7CisKKwlpZiAoIXBnc3RhdF9jdXN0b21fa2luZF9sb2FkZWQp CisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwkvKiBJbml0aWFsaXplIERTQSBmb3IgZGVzY3JpcHRp b25zIGlmIG5lZWRlZCAqLworCWlmICghY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSkKKwkJ Y3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSA9CisJCQlHZXROYW1lZERTQSgicGdzdGF0X2N1 c3RvbV9zdGF0X2RzYSIsICZmb3VuZCk7CisKKwkvKiBSZXR1cm4gTlVMTCBpZiBEU0EgaXMgbm90 IGF2YWlsYWJsZSAqLworCWlmICghY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSkKKwkJUEdf UkVUVVJOX05VTEwoKTsKKworCS8qIEdldCB0aGUgcmV0dXJuIHR1cGxlIGRlc2NyaXB0b3IgZnJv bSBwZ19wcm9jICovCisJaWYgKGdldF9jYWxsX3Jlc3VsdF90eXBlKGZjaW5mbywgTlVMTCwgJmV4 cGVjdGVkKSAhPSBUWVBFRlVOQ19DT01QT1NJVEUpCisJCWVsb2coRVJST1IsICJwZ3N0YXRfcmVw b3J0X2N1c3RvbV9zdGF0OiByZXR1cm4gdHlwZSBpcyBub3QgY29tcG9zaXRlIik7CisKKwl0dXBk ZXNjID0gQmxlc3NUdXBsZURlc2MoZXhwZWN0ZWQpOworCisJLyogTG9vayB1cCB0aGUgc3RhdGlz dGljcyBlbnRyeSBpbiBzaGFyZWQgbWVtb3J5ICovCisJZW50cnlfcmVmID0gcGdzdGF0X2dldF9l bnRyeV9yZWZfbG9ja2VkKFBHU1RBVF9LSU5EX1RFU1RfQ1VTVE9NX1NUQVRLSU5ELAorCQkJCQkJ CQkJCQlJbnZhbGlkT2lkLAorCQkJCQkJCQkJCQlQR1NUQVRfQ1VTVE9NX1NUQVRfSURYKG5hbWUp LAorCQkJCQkJCQkJCQl0cnVlKTsKKworCWlmIChlbnRyeV9yZWYpCisJeworCQljaGFyCSAgICpk ZXNjX2NvcHkgPSBOVUxMOworCisJCXNoZnVuY2VudCA9IChQZ1N0YXRTaGFyZWRfQ3VzdG9tRW50 cnkgKikgZW50cnlfcmVmLT5zaGFyZWRfc3RhdHM7CisKKwkJLyogQnVpbGQgdGhlIHJldHVybiB0 dXBsZSB3aXRoIG5hbWUsIGRlc2NyaXB0aW9uLCBhbmQgY2FsbCBjb3VudCAqLworCQl2YWx1ZXNb MF0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKG5hbWUpOwkvKiBuYW1lICovCisJCWlmIChEc2FQb2lu dGVySXNWYWxpZChzaGZ1bmNlbnQtPmRlc2NyaXB0aW9uKSkKKwkJeworCQkJLyogR2V0IGRlc2Ny aXB0aW9uIGZyb20gRFNBICovCisJCQlkZXNjX2NvcHkgPSBkc2FfZ2V0X2FkZHJlc3MoY3VzdG9t X3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSwKKwkJCQkJCQkJCQlzaGZ1bmNlbnQtPmRlc2NyaXB0aW9u KTsKKworCQkJdmFsdWVzWzFdID0gQ1N0cmluZ0dldFRleHREYXR1bShkZXNjX2NvcHkpOyAvKiBk ZXNjcmlwdGlvbiAqLworCQl9CisJCWVsc2UKKwkJCW51bGxzWzFdID0gdHJ1ZTsJLyogbm8gZGVz Y3JpcHRpb24gYXZhaWxhYmxlICovCisKKwkJdmFsdWVzWzJdID0gSW50NjRHZXREYXR1bShzaGZ1 bmNlbnQtPnN0YXRzLm51bWNhbGxzKTsJLyogY2FsbHMgKi8KKwl9CisKKwlwZ3N0YXRfdW5sb2Nr X2VudHJ5KGVudHJ5X3JlZik7CisKKwlQR19SRVRVUk5fREFUVU0oSGVhcFR1cGxlR2V0RGF0dW0o aGVhcF9mb3JtX3R1cGxlKHR1cGRlc2MsIHZhbHVlcywgbnVsbHMpKSk7Cit9CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRraW5kL3Rlc3RfY3VzdG9tX3N0YXRr aW5kLmNvbnRyb2wgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRraW5kL3Rlc3Rf Y3VzdG9tX3N0YXRraW5kLmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjdjZTIyY2MxOTVmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2N1c3RvbV9zdGF0a2luZC90ZXN0X2N1c3RvbV9zdGF0a2luZC5jb250cm9sCkBAIC0wLDAg KzEsNCBAQAorY29tbWVudCA9ICdUZXN0IGNvZGUgZm9yIGN1c3RvbSBzdGF0IGtpbmRzJworZGVm YXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3Rlc3RfY3Vz dG9tX3N0YXRraW5kJworcmVsb2NhdGFibGUgPSB0cnVlCi0tIAoyLjQzLjAKCg== --000000000000832d7d0644fe5c1e Content-Type: application/octet-stream; name="v2-0001-pgstat-support-custom-serialization-files-and-cal.patch" Content-Disposition: attachment; filename="v2-0001-pgstat-support-custom-serialization-files-and-cal.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mip0oyx61 RnJvbSBiNTY5ZjhiMGEzYTg4NmNmNzU5ZTlhYzhkMjM3NmVhZGI0NWI2YzI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2ltc2VpaEBhbWF6b24uY29tPgpEYXRl OiBNb24sIDEwIE5vdiAyMDI1IDAwOjAzOjQxIC0wNjAwClN1YmplY3Q6IFtQQVRDSCB2MiAxLzJd IHBnc3RhdDogc3VwcG9ydCBjdXN0b20gc2VyaWFsaXphdGlvbiBmaWxlcyBhbmQKIGNhbGxiYWNr cwoKQWxsb3cgY3VzdG9tIHN0YXRpc3RpY3Mga2luZHMgdG8gc2VyaWFsaXplIGFuZCBkZXNlcmlh bGl6ZSBleHRyYQpwZXItZW50cnkgZGF0YSwgc3VwcG9ydGluZyBraW5kcyB3aXRoIHZhcmlhYmxl IGF1eGlsaWFyeSBkYXRhIHRoYXQKY2Fubm90IGZpdCBpbiBzaGFyZWQtbWVtb3J5LgoKVG8gYWxs b3cgdGhpcywgMyBjYWxsYmFja3MgYXJlIHByb3ZpZGVkIHRvIHNlcmlhbGl6ZSwgZGVzZXJpYWxp emUKYW5kIHRvIGNsZWFuLXVwIHJlc291cmNlcyB3aGVuIHdyaXRpbmcsIHJlYWRpbmcgYW5kIGRp c2NhcmRpbmcKZW50cmllcy4gVGhlIGxhdHRlciBpcyByZXF1aXJlZCBmb3IgY3Jhc2ggcmVjb3Zl cnkgc2NlbmFyaW9zLgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jIHwg NjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9pbmNsdWRlL3V0aWxzL3Bnc3Rh dF9pbnRlcm5hbC5oIHwgMzMgKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA5MiBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FjdGl2aXR5L3Bnc3RhdC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0 LmMKaW5kZXggODcxM2M3YTA0ODMuLjExNzcyOGRiMDE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hY3Rpdml0eS9wZ3N0YXQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS9wZ3N0YXQuYwpAQCAtNTIzLDYgKzUyMyw3IEBAIHBnc3RhdF9kaXNjYXJkX3N0YXRzKHZvaWQp CiAKIAkvKiBOQjogdGhpcyBuZWVkcyB0byBiZSBkb25lIGV2ZW4gaW4gc2luZ2xlIHVzZXIgbW9k ZSAqLwogCisJLyogRmlyc3QsIGNsZWFudXAgdGhlIGNvcmUgc3RhdHMgZmlsZSAqLwogCXJldCA9 IHVubGluayhQR1NUQVRfU1RBVF9QRVJNQU5FTlRfRklMRU5BTUUpOwogCWlmIChyZXQgIT0gMCkK IAl7CkBAIC01NDQsNiArNTQ1LDE1IEBAIHBnc3RhdF9kaXNjYXJkX3N0YXRzKHZvaWQpCiAJCQkJ CQkJCSBQR1NUQVRfU1RBVF9QRVJNQU5FTlRfRklMRU5BTUUpKSk7CiAJfQogCisJLyogTm93LCBj bGVhbnVwIGV2ZXJ5IGN1c3RvbSBraW5kcyBleHRyYSBzdGF0cyBmaWxlcyAqLworCWZvciAoUGdT dGF0X0tpbmQga2luZCA9IFBHU1RBVF9LSU5EX0NVU1RPTV9NSU47IGtpbmQgPD0gUEdTVEFUX0tJ TkRfQ1VTVE9NX01BWDsga2luZCsrKQorCXsKKwkJY29uc3QgUGdTdGF0X0tpbmRJbmZvICpraW5k X2luZm8gPSBwZ3N0YXRfZ2V0X2tpbmRfaW5mbyhraW5kKTsKKworCQlpZiAoa2luZF9pbmZvICYm IGtpbmRfaW5mby0+ZW5kX2V4dHJhX3N0YXRzKQorCQkJa2luZF9pbmZvLT5lbmRfZXh0cmFfc3Rh dHMoU1RBVFNfRElTQ0FSRCk7CisJfQorCiAJLyoKIAkgKiBSZXNldCBzdGF0cyBjb250ZW50cy4g VGhpcyB3aWxsIHNldCByZXNldCB0aW1lc3RhbXBzIG9mIGZpeGVkLW51bWJlcmVkCiAJICogc3Rh dHMgdG8gdGhlIGN1cnJlbnQgdGltZSAobm8gdmFyaWFibGUgc3RhdHMgZXhpc3QpLgpAQCAtMTQ2 Myw2ICsxNDczLDcgQEAgcGdzdGF0X2dldF9raW5kX2luZm8oUGdTdGF0X0tpbmQga2luZCkKIHZv aWQKIHBnc3RhdF9yZWdpc3Rlcl9raW5kKFBnU3RhdF9LaW5kIGtpbmQsIGNvbnN0IFBnU3RhdF9L aW5kSW5mbyAqa2luZF9pbmZvKQogeworCWJvb2wJCWhhc19leHRyYSA9IGZhbHNlOwogCXVpbnQz MgkJaWR4ID0ga2luZCAtIFBHU1RBVF9LSU5EX0NVU1RPTV9NSU47CiAKIAlpZiAoa2luZF9pbmZv LT5uYW1lID09IE5VTEwgfHwgc3RybGVuKGtpbmRfaW5mby0+bmFtZSkgPT0gMCkKQEAgLTE1MjUs NiArMTUzNiwyNiBAQCBwZ3N0YXRfcmVnaXN0ZXJfa2luZChQZ1N0YXRfS2luZCBraW5kLCBjb25z dCBQZ1N0YXRfS2luZEluZm8gKmtpbmRfaW5mbykKIAkJCQkJIGVycmRldGFpbCgiRXhpc3Rpbmcg Y3VtdWxhdGl2ZSBzdGF0aXN0aWNzIHdpdGggSUQgJXUgaGFzIHRoZSBzYW1lIG5hbWUuIiwgZXhp c3Rpbmdfa2luZCkpKTsKIAl9CiAKKwkvKgorCSAqIEVuc3VyZSB0aGF0IHRvX3NlcmlhbGl6ZWRf ZXh0cmFfc3RhdHMsIGZyb21fc2VyaWFsaXplZF9leHRyYV9zdGF0cyBhbmQKKwkgKiBlbmRfZXh0 cmFfc3RhdHMgYXJlIHJlZ2lzdGVyZWQgdG9nZXRoZXIgb3Igbm90IGF0IGFsbC4KKwkgKi8KKwlo YXNfZXh0cmEgPQorCQlraW5kX2luZm8tPnRvX3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHMgfHwKKwkJ a2luZF9pbmZvLT5mcm9tX3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHMgfHwKKwkJa2luZF9pbmZvLT5l bmRfZXh0cmFfc3RhdHM7CisKKwlpZiAoaGFzX2V4dHJhICYmCisJCSgha2luZF9pbmZvLT50b19z ZXJpYWxpemVkX2V4dHJhX3N0YXRzIHx8CisJCSAha2luZF9pbmZvLT5mcm9tX3NlcmlhbGl6ZWRf ZXh0cmFfc3RhdHMgfHwKKwkJICFraW5kX2luZm8tPmVuZF9leHRyYV9zdGF0cykpCisJeworCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCByZWdpc3RlciBjdXN0b20gY3Vt dWxhdGl2ZSBzdGF0aXN0aWNzIFwiJXNcIiB3aXRoIElEICV1IiwKKwkJCQkJCWtpbmRfaW5mby0+ bmFtZSwga2luZCksCisJCQkJIGVycmRldGFpbCgiY2FsbGJhY2tzIHRvX3NlcmlhbGl6ZWRfZXh0 cmEsIGZyb21fc2VyaWFsaXplZF9leHRyYSwgYW5kIGVuZF9leHRyYV9zdGF0cyBtdXN0IGFsbCBi ZSBwcm92aWRlZCB0b2dldGhlci4iKSkpOworCX0KKwogCS8qIFJlZ2lzdGVyIGl0ICovCiAJcGdz dGF0X2tpbmRfY3VzdG9tX2luZm9zW2lkeF0gPSBraW5kX2luZm87CiAJZXJlcG9ydChMT0csCkBA IC0xNzAyLDYgKzE3MzMsOSBAQCBwZ3N0YXRfd3JpdGVfc3RhdHNmaWxlKHZvaWQpCiAJCXBnc3Rh dF93cml0ZV9jaHVuayhmcG91dCwKIAkJCQkJCSAgIHBnc3RhdF9nZXRfZW50cnlfZGF0YShwcy0+ a2V5LmtpbmQsIHNoc3RhdHMpLAogCQkJCQkJICAgcGdzdGF0X2dldF9lbnRyeV9sZW4ocHMtPmtl eS5raW5kKSk7CisKKwkJaWYgKHBnc3RhdF9pc19raW5kX2N1c3RvbShwcy0+a2V5LmtpbmQpICYm IGtpbmRfaW5mby0+dG9fc2VyaWFsaXplZF9leHRyYV9zdGF0cykKKwkJCWtpbmRfaW5mby0+dG9f c2VyaWFsaXplZF9leHRyYV9zdGF0cygmcHMtPmtleSwgc2hzdGF0cywgZnBvdXQpOwogCX0KIAlk c2hhc2hfc2VxX3Rlcm0oJmhzdGF0KTsKIApAQCAtMTczNCw2ICsxNzY4LDE1IEBAIHBnc3RhdF93 cml0ZV9zdGF0c2ZpbGUodm9pZCkKIAkJLyogZHVyYWJsZV9yZW5hbWUgYWxyZWFkeSBlbWl0dGVk IGxvZyBtZXNzYWdlICovCiAJCXVubGluayh0bXBmaWxlKTsKIAl9CisKKwkvKiBOb3csIGFsbG93 IHRoZSBleHRlbnNpb24gdG8gZmluYWxpemUgdGhlIHdyaXRlcyBmb3IgdGhlIGV4dHJhIGZpbGVz ICovCisJZm9yIChQZ1N0YXRfS2luZCBraW5kID0gUEdTVEFUX0tJTkRfQ1VTVE9NX01JTjsga2lu ZCA8PSBQR1NUQVRfS0lORF9DVVNUT01fTUFYOyBraW5kKyspCisJeworCQljb25zdCBQZ1N0YXRf S2luZEluZm8gKmtpbmRfaW5mbyA9IHBnc3RhdF9nZXRfa2luZF9pbmZvKGtpbmQpOworCisJCWlm IChraW5kX2luZm8gJiYga2luZF9pbmZvLT5lbmRfZXh0cmFfc3RhdHMpCisJCQlraW5kX2luZm8t PmVuZF9leHRyYV9zdGF0cyhTVEFUU19XUklURSk7CisJfQogfQogCiAvKiBoZWxwZXIgZm9yIHBn c3RhdF9yZWFkX3N0YXRzZmlsZSgpICovCkBAIC0xODcxLDYgKzE5MTQsNyBAQCBwZ3N0YXRfcmVh ZF9zdGF0c2ZpbGUodm9pZCkKIAkJCQkJUGdTdGF0X0hhc2hLZXkga2V5OwogCQkJCQlQZ1N0YXRT aGFyZWRfSGFzaEVudHJ5ICpwOwogCQkJCQlQZ1N0YXRTaGFyZWRfQ29tbW9uICpoZWFkZXI7CisJ CQkJCWNvbnN0IFBnU3RhdF9LaW5kSW5mbyAqa2luZF9pbmZvID0gTlVMTDsKIAogCQkJCQlDSEVD S19GT1JfSU5URVJSVVBUUygpOwogCkBAIC0xODkxLDcgKzE5MzUsOCBAQCBwZ3N0YXRfcmVhZF9z dGF0c2ZpbGUodm9pZCkKIAkJCQkJCQlnb3RvIGVycm9yOwogCQkJCQkJfQogCi0JCQkJCQlpZiAo IXBnc3RhdF9nZXRfa2luZF9pbmZvKGtleS5raW5kKSkKKwkJCQkJCWtpbmRfaW5mbyA9IHBnc3Rh dF9nZXRfa2luZF9pbmZvKGtleS5raW5kKTsKKwkJCQkJCWlmICgha2luZF9pbmZvKQogCQkJCQkJ ewogCQkJCQkJCWVsb2coV0FSTklORywgImNvdWxkIG5vdCBmaW5kIGluZm9ybWF0aW9uIG9mIGtp bmQgZm9yIGVudHJ5ICV1LyV1LyUiIFBSSXU2NCAiIG9mIHR5cGUgJWMiLAogCQkJCQkJCQkga2V5 LmtpbmQsIGtleS5kYm9pZCwKQEAgLTE5MDIsNyArMTk0Nyw2IEBAIHBnc3RhdF9yZWFkX3N0YXRz ZmlsZSh2b2lkKQogCQkJCQllbHNlCiAJCQkJCXsKIAkJCQkJCS8qIHN0YXRzIGVudHJ5IGlkZW50 aWZpZWQgYnkgbmFtZSBvbiBkaXNrIChlLmcuIHNsb3RzKSAqLwotCQkJCQkJY29uc3QgUGdTdGF0 X0tpbmRJbmZvICpraW5kX2luZm8gPSBOVUxMOwogCQkJCQkJUGdTdGF0X0tpbmQga2luZDsKIAkJ CQkJCU5hbWVEYXRhCW5hbWU7CiAKQEAgLTE5OTYsNiArMjA0MCw5IEBAIHBnc3RhdF9yZWFkX3N0 YXRzZmlsZSh2b2lkKQogCQkJCQkJZ290byBlcnJvcjsKIAkJCQkJfQogCisJCQkJCWlmIChwZ3N0 YXRfaXNfa2luZF9jdXN0b20oa2V5LmtpbmQpICYmIGtpbmRfaW5mby0+ZnJvbV9zZXJpYWxpemVk X2V4dHJhX3N0YXRzKQorCQkJCQkJa2luZF9pbmZvLT5mcm9tX3NlcmlhbGl6ZWRfZXh0cmFfc3Rh dHMoJmtleSwgaGVhZGVyLCBmcGluKTsKKwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQljYXNlIFBH U1RBVF9GSUxFX0VOVFJZX0VORDoKQEAgLTIwMTksMTEgKzIwNjYsMjEgQEAgcGdzdGF0X3JlYWRf c3RhdHNmaWxlKHZvaWQpCiAJfQogCiBkb25lOgorCS8qIGZpcnN0LCBjbGVhbnVwIHRoZSBjb3Jl IHN0YXRzIGZpbGUgKi8KIAlGcmVlRmlsZShmcGluKTsKIAogCWVsb2coREVCVUcyLCAicmVtb3Zp bmcgcGVybWFuZW50IHN0YXRzIGZpbGUgXCIlc1wiIiwgc3RhdGZpbGUpOwogCXVubGluayhzdGF0 ZmlsZSk7CiAKKwkvKiBOb3csIGNsZWFudXAgZXZlcnkgY3VzdG9tIGtpbmRzIGV4dHJhIHN0YXRz IGZpbGVzICovCisJZm9yIChQZ1N0YXRfS2luZCBraW5kID0gUEdTVEFUX0tJTkRfQ1VTVE9NX01J Tjsga2luZCA8PSBQR1NUQVRfS0lORF9DVVNUT01fTUFYOyBraW5kKyspCisJeworCQljb25zdCBQ Z1N0YXRfS2luZEluZm8gKmtpbmRfaW5mbyA9IHBnc3RhdF9nZXRfa2luZF9pbmZvKGtpbmQpOwor CisJCWlmIChraW5kX2luZm8gJiYga2luZF9pbmZvLT5lbmRfZXh0cmFfc3RhdHMpCisJCQlraW5k X2luZm8tPmVuZF9leHRyYV9zdGF0cyhTVEFUU19SRUFEKTsKKwl9CisKIAlyZXR1cm47CiAKIGVy cm9yOgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdzdGF0X2ludGVybmFsLmggYi9z cmMvaW5jbHVkZS91dGlscy9wZ3N0YXRfaW50ZXJuYWwuaAppbmRleCBjYTFiYTY0MjBjYS4uMjVi YmE2ZTk4ZDQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9pbnRlcm5hbC5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9pbnRlcm5hbC5oCkBAIC02Myw2ICs2Mywy MCBAQCB0eXBlZGVmIHN0cnVjdCBQZ1N0YXRfSGFzaEtleQogCQkJCQkJCQkgKiBpZGVudGlmaWVy LiAqLwogfSBQZ1N0YXRfSGFzaEtleTsKIAorLyoKKyAqIFRyYWNrcyBpZiB0aGUgc3RhdHMgZmls ZSBpcyBiZWluZyByZWFkLCB3cml0dGVuIG9yIGRpc2NhcmRlZC4KKyAqCisgKiBUaGVzZSBzdGF0 ZXMgYWxsb3cgcGx1Z2lucyB0aGF0IGNyZWF0ZSBleHRyYSBzdGF0aXN0aWNzIGZpbGVzCisgKiB0 byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgb3BlcmF0aW9uIGFuZCBwZXJmb3JtIGFueSBuZWNlc3Nh cnkKKyAqIGZpbGUgY2xlYW51cC4KKyAqLwordHlwZWRlZiBlbnVtIFBnU3RhdF9TdGF0c0ZpbGVP cAoreworCVNUQVRTX1dSSVRFLAorCVNUQVRTX1JFQUQsCisJU1RBVFNfRElTQ0FSRCwKK30JCQlQ Z1N0YXRfU3RhdHNGaWxlT3A7CisKIC8qCiAgKiBQZ1N0YXRfSGFzaEtleSBzaG91bGQgbm90IGhh dmUgYW55IHBhZGRpbmcuICBDaGVja2luZyB0aGF0IHRoZSBzdHJ1Y3R1cmUKICAqIHNpemUgbWF0 Y2hlcyB3aXRoIHRoZSBzdW0gb2YgZWFjaCBmaWVsZCBpcyBhIGNoZWNrIHNpbXBsZSBlbm91Z2gg dG8KQEAgLTMwMyw2ICszMTcsMjUgQEAgdHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X0tpbmRJbmZvCiAJ CQkJCQkJCQkgICBjb25zdCBQZ1N0YXRTaGFyZWRfQ29tbW9uICpoZWFkZXIsIE5hbWVEYXRhICpu YW1lKTsKIAlib29sCQkoKmZyb21fc2VyaWFsaXplZF9uYW1lKSAoY29uc3QgTmFtZURhdGEgKm5h bWUsIFBnU3RhdF9IYXNoS2V5ICprZXkpOwogCisJLyoKKwkgKiBPcHRpb25hbCBjYWxsYmFja3Mg Zm9yIGtpbmRzIHRoYXQgd3JpdGUgYWRkaXRpb25hbCBwZXItZW50cnkgZGF0YSB0bworCSAqIHRo ZSBzdGF0cyBmaWxlLiAgSWYgYW55IG9mIHRoZXNlIGNhbGxiYWNrcyBhcmUgcHJvdmlkZWQsIGFs bCB0aHJlZSBtdXN0CisJICogYmUgcHJvdmlkZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJlYWRlciBj b25zdW1lcyBleGFjdGx5IHRoZSBkYXRhIHdyaXR0ZW4KKwkgKiBieSB0aGUgd3JpdGVyLgorCSAq CisJICogdG9fc2VyaWFsaXplZF9leHRyYV9zdGF0czogd3JpdGUgZXh0cmEgZGF0YSBmb3IgYW4g ZW50cnkuCisJICoKKwkgKiBmcm9tX3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHM6IHJlYWQgdGhlIGV4 dHJhIGRhdGEgZm9yIGFuIGVudHJ5LgorCSAqCisJICogZW5kX2V4dHJhX3N0YXRzOiBpbnZva2Vk IG9uY2UgcGVyIG9wZXJhdGlvbiAocmVhZCwgd3JpdGUsIGRpc2NhcmQpCisJICogYWZ0ZXIgYWxs IGVudHJpZXMgb2YgdGhpcyBraW5kIGhhdmUgYmVlbiBwcm9jZXNzZWQuCisJICovCisJdm9pZAkJ KCp0b19zZXJpYWxpemVkX2V4dHJhX3N0YXRzKSAoY29uc3QgUGdTdGF0X0hhc2hLZXkgKmtleSwK KwkJCQkJCQkJCQkJICBjb25zdCBQZ1N0YXRTaGFyZWRfQ29tbW9uICpoZWFkZXIsIEZJTEUgKnN0 YXRmaWxlKTsKKwl2b2lkCQkoKmZyb21fc2VyaWFsaXplZF9leHRyYV9zdGF0cykgKGNvbnN0IFBn U3RhdF9IYXNoS2V5ICprZXksCisJCQkJCQkJCQkJCQljb25zdCBQZ1N0YXRTaGFyZWRfQ29tbW9u ICpoZWFkZXIsIEZJTEUgKnN0YXRmaWxlKTsKKwl2b2lkCQkoKmVuZF9leHRyYV9zdGF0cykgKFBn U3RhdF9TdGF0c0ZpbGVPcCBzdGF0dXMpOworCiAJLyoKIAkgKiBGb3IgZml4ZWQtbnVtYmVyZWQg c3RhdGlzdGljczogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IHN0YXRlLgogCSAqCi0tIAoyLjQz LjAKCg== --000000000000832d7d0644fe5c1e--