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 1vLoW4-00BBH6-2I for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Nov 2025 20:11:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vLoW3-00FFqs-03 for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Nov 2025 20:10:59 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vLoW2-00FFqk-1z for pgsql-hackers@lists.postgresql.org; Wed, 19 Nov 2025 20:10:59 +0000 Received: from mail-ed1-x529.google.com ([2a00:1450:4864:20::529]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vLoW0-000PzP-2z for pgsql-hackers@lists.postgresql.org; Wed, 19 Nov 2025 20:10:58 +0000 Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-64162c04f90so173258a12.0 for ; Wed, 19 Nov 2025 12:10:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763583055; x=1764187855; 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=dMldH63Pe9mhLwZmBSgoE8DceACa1Ngcf+e4bd9o1mI=; b=dLC5fwqR1nm+kGtcrhjg8quwf9YThZ1yg/cEvYtoaq41YVjI47Dgbk0DQby9Eiaaih y23jwUnn8rApUAiFD43Q9FiLDQe0vyTQokYHNpisgbfxEgeP/KbdyISQZrj+VPsXER7O djdxzD9sCtfCiK+OPJZ+y0OW88N/KI9Q1vzPL8Gul95tZc4G30Njblx8tSC2OfWHXEOw r43eSBK+n+JfR2dg5jH74rfgQiw1Bk0iQjP4pm48Ln0jDdEgC2KTTSFWEPAnTywtY5Zh JnAxgsOon7fU+tlf+VlW8SW3pWr0C+JoOMtOnDUznDKfuY5LjkZpuAwL+jppDS5U3Y8D uUEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763583055; x=1764187855; 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=dMldH63Pe9mhLwZmBSgoE8DceACa1Ngcf+e4bd9o1mI=; b=R7I7LP+rHYSP3D9v3wTSyXD9Ljp0+CQEHjw2ZFGQ+1gqnb4f4dydqOTsF+Hpffo1N3 rtfssipgOC7W0ocw1olxJUe5lyu1T/wtVg6sRd5J1YnWIqrG2zxe4S+rU5KwVwrxsyT7 Qg1oBWgkcNwwoKYfiqiI6gHtXXQ6r46OLhwW7pPbR2Bf1MSAgW1KZ4CwosZLAR/b+V4q ENjWXO8spzLDyQDBbS4joVPhA3/9iaoDHGD90HshVg1b3fZEWNFIRAsYc5ciPH43Dx3M 2SY1xypyFJ/1BtJ94ThRoopcuHWiM3QnAUR72ScGcEoShJibkpFDTvC5QSTol/BVnXat J3/Q== X-Gm-Message-State: AOJu0YwYsmeRfprbekbng568L99oDac21VWbVAh60G4eUzpUrYq3Uq01 JbpkNYwXTDdJzTbg3gvxPbh2m5qjL5crL5STePV/VBaOYNo1kdCrHdQ1cRYrzyMYpcpVrG55Jta ICaAf+dDBxGVKsdUOPvNbouTbCPOFJulKnA+w X-Gm-Gg: ASbGnctXGfBhrkQJFm5G1lNJQT1dsrtENzwgjkw1FT5Ed1CpKvV7yXUMoc9WL7b1SfK Uv1GX/GMqiizdvSEIQg8zuj4Lpcbkv/ib3Jj/lLgaQdF3F4YBGm/HefCJtuvZ3uNlsq8pG9KDjh rFVY2DKpARFERICOABGFDSETnPwUEpLFRxWSaLT8gXzhUo2dU02tgNo9hw7kSW3yxKl0Ya9ySIf oDgH/bTIhnePkHItDvlx+nSEUiP8Ixf0WEQB/VQ2RQMEf4/O3vf1SPut/1xQgZu6wg6ARa4UGY4 X-Google-Smtp-Source: AGHT+IFiE7HyHMUpnDtPLAndCZ7RWeT+JbuW039gwm7jSJcbucJHnrGYbxgx0FXgXPRk128k/y/fesId197n6+9xqWI= X-Received: by 2002:a05:6402:2790:b0:640:c460:8a90 with SMTP id 4fb4d7f45d1cf-64536407322mr543585a12.12.1763583055211; Wed, 19 Nov 2025 12:10:55 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Sami Imseih Date: Wed, 19 Nov 2025 14:10:42 -0600 X-Gm-Features: AWmQ_bmULkJuJW3ggpF0iI-pT_X-5RZr2BaQ76hvTGAiKRvt1fn75QAI72wcA68 Message-ID: Subject: Re: [Proposal] Adding callback support for custom statistics kinds To: Michael Paquier Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000008a3fae0643f82d8f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008a3fae0643f82d8f Content-Type: text/plain; charset="UTF-8" Sorry for the delay here. v1 is the first attempt to address the feedback from the POC. 1/ A user is now able to register as many extra files as they wish, and the files will be named pgstat...stat, where file_no starts at 0 up to the number of files specified by the user with .num_serialized_extra_files. 2/ The callbacks now provide both the core stat file as a FILE pointer and an array of FILE pointers for the extra files. IN the write callback, the extra file pointer is accessed like extra_files[0], extra_files[1], etc., and the same for the read callback. 3/ The patch centralizes the creation and cleanup of the files with 2 new routines pgstat_allocate_files and pgstat_cleanup_files, which both operate on a new local struct which tracks the file names and descriptors in the read and write stats routines. ``` typedef struct PgStat_SerializeFiles { char **tmpfiles; char **statfiles; FILE **fd; int num_files; } PgStat_SerializeFiles; ``` plug-ins are not made aware of this struct because they don't need to. The callbacks are provided the FILE pointers they need to care about for their kind only. 4/ In terms of testing, patch 0002, I did not want to invent a new module for custom kinds, so I piggybacked off og injection_points as I did in the POC, but I added on the existing recovery tests, because essentially that is what we care. Does the data persist after a clean shutdown? do the .tmp files get removed properly? etc. So I added tests in recovery/t/029_stats_restart.pl for this. -- Sami Imseih Amazon Web Services (AWS) --0000000000008a3fae0643f82d8f Content-Type: application/octet-stream; name="v1-0001-pgstat-support-custom-serialization-files-and-cal.patch" Content-Disposition: attachment; filename="v1-0001-pgstat-support-custom-serialization-files-and-cal.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi6fsb0p1 RnJvbSA5ZGJiMTlhODU3ODYyMTY4ZDYxNjgzNzczODlkZDg2YTU5NTk2MmM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2ltc2VpaEBhbWF6b24uY29tPgpEYXRl OiBNb24sIDEwIE5vdiAyMDI1IDAwOjAzOjQxIC0wNjAwClN1YmplY3Q6IFtQQVRDSCB2MSAxLzJd IHBnc3RhdDogc3VwcG9ydCBjdXN0b20gc2VyaWFsaXphdGlvbiBmaWxlcyBhbmQKIGNhbGxiYWNr cwoKQWxsb3cgY3VzdG9tIHN0YXRpc3RpY3Mga2luZHMgdG8gc2VyaWFsaXplIGFuZCBkZXNlcmlh bGl6ZSBleHRyYQpwZXItZW50cnkgZGF0YSwgc3VwcG9ydGluZyBraW5kcyB3aXRoIHZhcmlhYmxl IGF1eGlsaWFyeSBkYXRhIHRoYXQKY2Fubm90IGZpdCBpbiB0aGUgZml4ZWQgc2hhcmVkLW1lbW9y eSBsYXlvdXQuCgpBZGQgb3B0aW9uYWwgdG9fc2VyaWFsaXplZF9leHRyYSBhbmQgZnJvbV9zZXJp YWxpemVkX2V4dHJhIGNhbGxiYWNrcwp0byBQZ1N0YXRfS2luZEluZm8sIGFsb25nIHdpdGggbnVt X3NlcmlhbGl6ZWRfZXh0cmFfZmlsZXMuIEJvdGgKY2FsbGJhY2tzIG11c3QgYmUgcHJvdmlkZWQg dG9nZXRoZXIsIGFuZCBudW1fc2VyaWFsaXplZF9leHRyYV9maWxlcwptdXN0IGJlID4gMC4KClRo ZSB0b19zZXJpYWxpemVkX2V4dHJhIGNhbGxiYWNrIHdyaXRlcyBleHRyYSBkYXRhIHRvIGRpc2ss IGFuZApmcm9tX3NlcmlhbGl6ZWRfZXh0cmEgcmVhZHMgaXQgYmFjayBpbnRvIHRoZSBlbnRyeS4g VGhlIGNhbGxiYWNrcwpyZWNlaXZlIHRoZSBlbnRyeSBrZXksIGhlYWRlciwgY29yZSBzdGF0cyBm aWxlIGRlc2NyaXB0b3IsIGFuZCBhIGxpc3QKb2YgZXh0cmEgZmlsZSBkZXNjcmlwdG9ycywgdXAg dG8gdGhlIG51bWJlciBzcGVjaWZpZWQgYnkKbnVtX3NlcmlhbGl6ZWRfZXh0cmFfZmlsZXMuCgpJ bnRyb2R1Y2UgUGdTdGF0X1NlcmlhbGl6ZUZpbGVzIHRvIHRyYWNrIHRlbXBvcmFyeSBhbmQgcGVy bWFuZW50IGZpbGUKcGF0aHMgYW5kIGRlc2NyaXB0b3JzLiBwZ3N0YXRfYWxsb2NhdGVfZmlsZXMg b3BlbnMgYWxsIGZpbGVzIGZvciByZWFkCm9yIHdyaXRlLCBhbmQgcGdzdGF0X2NsZWFudXBfZmls ZXMgY2VudHJhbGl6ZXMgY2xlYW51cCBhbmQgdW5saW5raW5nLgoKUmVuYW1lIHdyaXRlX2NodW5r L3JlYWRfY2h1bmsgaGVscGVycyB0byBwZ3N0YXRfd3JpdGVfY2h1bmsgYW5kCnBnc3RhdF9yZWFk X2NodW5rLCBhbG9uZyB3aXRoIHRoZSAqX3MgY29udmVuaWVuY2UgbWFjcm9zLCBhbmQgbWFrZQp0 aGVzZSByb3V0aW5lcyBnbG9iYWxseSBhdmFpbGFibGUgZm9yIHVzZSBieSBwbHVnLWlucy4KLS0t CiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXQuYyB8IDQxMiArKysrKysrKysrKysr KysrKysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS91dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCB8ICAy MSArKwogMiBmaWxlcyBjaGFuZ2VkLCAzNDAgaW5zZXJ0aW9ucygrKSwgOTMgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0LmMgYi9zcmMv YmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXQuYwppbmRleCA3ZWYwNjE1MGRmNy4uYTVkMGE0 NzVkYjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jCkBAIC0xNTQsNiArMTU0LDI2 IEBAIHR5cGVkZWYgc3RydWN0IFBnU3RhdF9TbmFwc2hvdEVudHJ5CiAJdm9pZAkgICAqZGF0YTsJ CQkvKiB0aGUgc3RhdHMgZGF0YSBpdHNlbGYgKi8KIH0gUGdTdGF0X1NuYXBzaG90RW50cnk7CiAK Ky8qCisgKiBTdHJ1Y3QgdXNlZCB0byB0cmFjayB0aGUgc2V0IG9mIHNlcmlhbGl6YXRpb24gZmls ZXMgbWFuYWdlZCBieSB0aGUKKyAqIHBnc3RhdCBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpbmNsdWRl cyBib3RoIHRoZSBjb3JlIHN0YXRpc3RpY3MgZmlsZSBhbmQKKyAqIGFueSBhZGRpdGlvbmFsIGZp bGVzIGRlZmluZWQgYnkgdGhlIHN0YXRzIGtpbmQuIFRoZSBjb3JlIGZpbGUgbXVzdCBiZQorICog bGlzdGVkIGF0IGluZGV4IDAuCisgKgorICogVGhlIHN0cnVjdHVyZSBtYWludGFpbnMgdGhyZWUg cGFyYWxsZWwgbGlzdHM6IHRlbXBvcmFyeSBmaWxlIHBhdGhzLAorICogc3RhdGlzdGljcyBmaWxl IHBhdGhzLCBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBmaWxlIGRlc2NyaXB0b3JzLgorICoKKyAq IEN1c3RvbSBjYWxsYmFja3MgYXJlIHByb3ZpZGVkIHRoZSBsaXN0IG9mIGZpbGUgZGVzY2lwdG9y cyB0aGF0CisgKiBiZWxvbmcgdG8gdGhlaXIgc3RhdHMga2luZC4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgUGdTdGF0X1NlcmlhbGl6ZUZpbGVzCit7CisJY2hhcgkgICoqdG1wZmlsZXM7CisJY2hhcgkg ICoqc3RhdGZpbGVzOworCUZJTEUJICAqKmZkOworCWludAkJCW51bV9maWxlczsKK30JCQlQZ1N0 YXRfU2VyaWFsaXplRmlsZXM7CisKIAogLyogLS0tLS0tLS0tLQogICogQmFja2VuZC1sb2NhbCBI YXNoIFRhYmxlIERlZmluaXRpb25zCkBAIC0xNTI1LDYgKzE1NDUsMzQgQEAgcGdzdGF0X3JlZ2lz dGVyX2tpbmQoUGdTdGF0X0tpbmQga2luZCwgY29uc3QgUGdTdGF0X0tpbmRJbmZvICpraW5kX2lu Zm8pCiAJCQkJCSBlcnJkZXRhaWwoIkV4aXN0aW5nIGN1bXVsYXRpdmUgc3RhdGlzdGljcyB3aXRo IElEICV1IGhhcyB0aGUgc2FtZSBuYW1lLiIsIGV4aXN0aW5nX2tpbmQpKSk7CiAJfQogCisJLyoK KwkgKiBFbnN1cmUgdGhhdCBib3RoIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbiBj YWxsYmFja3MgYXJlCisJICogcmVnaXN0ZXJlZCB0b2dldGhlciBvciBub3QgYXQgYWxsLCBhbmQg b25seSBmb3IgY3VzdG9tIHN0YXRzIHdpdGggYQorCSAqIHZhcmlhYmxlIG51bWJlciBvZiBleHRy YSBmaWxlcy4KKwkgKi8KKwlpZiAoKGtpbmRfaW5mby0+dG9fc2VyaWFsaXplZF9leHRyYSAmJiAh a2luZF9pbmZvLT5mcm9tX3NlcmlhbGl6ZWRfZXh0cmEpIHx8CisJCSgha2luZF9pbmZvLT50b19z ZXJpYWxpemVkX2V4dHJhICYmIGtpbmRfaW5mby0+ZnJvbV9zZXJpYWxpemVkX2V4dHJhKSkKKwl7 CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygiY291bGQgbm90IHJlZ2lzdGVyIGN1c3Rv bSBjdW11bGF0aXZlIHN0YXRpc3RpY3MgXCIlc1wiIHdpdGggSUQgJXUiLAorCQkJCQkJa2luZF9p bmZvLT5uYW1lLCBraW5kKSwKKwkJCQkgZXJyZGV0YWlsKCJCb3RoIHRvX3NlcmlhbGl6ZWRfZXh0 cmEgYW5kIGZyb21fc2VyaWFsaXplZF9leHRyYSBtdXN0IGJlIHByb3ZpZGVkLiIpKSk7CisKKwl9 CisKKwkvKgorCSAqIElmIGV4dHJhIHNlcmlhbGl6YXRpb24gY2FsbGJhY2tzIGFyZSBzZXQsIG51 bV9zZXJpYWxpemVkX2V4dHJhX2ZpbGVzCisJICogbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KKwkg Ki8KKwlpZiAoa2luZF9pbmZvLT50b19zZXJpYWxpemVkX2V4dHJhICYmCisJCWtpbmRfaW5mby0+ bnVtX3NlcmlhbGl6ZWRfZXh0cmFfZmlsZXMgPCAxKQorCXsKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQkoZXJybXNnKCJjb3VsZCBub3QgcmVnaXN0ZXIgY3VzdG9tIGN1bXVsYXRpdmUgc3RhdGlzdGlj cyBcIiVzXCIgd2l0aCBJRCAldSIsCisJCQkJCQlraW5kX2luZm8tPm5hbWUsIGtpbmQpLAorCQkJ CSBlcnJkZXRhaWwoIkV4dHJhIHNlcmlhbGl6YXRpb24gY2FsbGJhY2tzIHdlcmUgc3BlY2lmaWVk LCBidXQgbnVtX3NlcmlhbGl6ZWRfZXh0cmFfZmlsZXMgaXMgemVybyIpKSk7CisJfQorCiAJLyog UmVnaXN0ZXIgaXQgKi8KIAlwZ3N0YXRfa2luZF9jdXN0b21faW5mb3NbaWR4XSA9IGtpbmRfaW5m bzsKIAllcmVwb3J0KExPRywKQEAgLTE1NTIsOCArMTYwMCw4IEBAIHBnc3RhdF9hc3NlcnRfaXNf dXAodm9pZCkKICAqLwogCiAvKiBoZWxwZXJzIGZvciBwZ3N0YXRfd3JpdGVfc3RhdHNmaWxlKCkg Ki8KLXN0YXRpYyB2b2lkCi13cml0ZV9jaHVuayhGSUxFICpmcG91dCwgdm9pZCAqcHRyLCBzaXpl X3QgbGVuKQordm9pZAorcGdzdGF0X3dyaXRlX2NodW5rKEZJTEUgKmZwb3V0LCB2b2lkICpwdHIs IHNpemVfdCBsZW4pCiB7CiAJaW50CQkJcmM7CiAKQEAgLTE1NjMsNyArMTYxMSwxNzggQEAgd3Jp dGVfY2h1bmsoRklMRSAqZnBvdXQsIHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKIAkodm9pZCkgcmM7 CiB9CiAKLSNkZWZpbmUgd3JpdGVfY2h1bmtfcyhmcG91dCwgcHRyKSB3cml0ZV9jaHVuayhmcG91 dCwgcHRyLCBzaXplb2YoKnB0cikpCisvKiBoZWxwZXJzIGZvciBwZ3N0YXRfcmVhZF9zdGF0c2Zp bGUoKSAqLworYm9vbAorcGdzdGF0X3JlYWRfY2h1bmsoRklMRSAqZnBpbiwgdm9pZCAqcHRyLCBz aXplX3QgbGVuKQoreworCXJldHVybiBmcmVhZChwdHIsIDEsIGxlbiwgZnBpbikgPT0gbGVuOwor fQorCisvKgorICogQ2xvc2UgYW5kIHJlbW92ZSBhbGwgZmlsZXMgcmVjb3JkZWQgaW4gYSBQZ1N0 YXRfU2VyaWFsaXplRmlsZXMgYXJyYXkuCisgKiBEZXBlbmRpbmcgb24gdGhlIGlzX3RlbXBvcmFy eSBmbGFnLCB0aGlzIHdpbGwgcmVtb3ZlIGVpdGhlciB0aGUgdGVtcG9yYXJ5CisgKiBvciB0aGUg cGVybWFuZW50IGZpbGVuYW1lcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBmaWxlIGRlc2NyaXB0b3Iu CisgKgorICogRXJyb3JzIGVuY291bnRlcmVkIHdoaWxlIGNsb3NpbmcgZmlsZXMgYXJlIGxvZ2dl ZCwgYnV0IGNsZWFudXAgY29udGludWVzCisgKiBmb3IgYWxsIHJlbWFpbmluZyBmaWxlcy4gVGhp cyBmdW5jdGlvbiBhc3N1bWVzIHRoZSBzdHJ1Y3R1cmUgcGFzc2VkIGluCisgKiB3YXMgYWxsb2Nh dGVkIGJ5IHBnc3RhdF9hbGxvY2F0ZV9maWxlcygpIGFuZCBjb250YWlucyB2YWxpZCBmaWxlIGRl c2NyaXB0b3JzCisgKiBmb3IgZWFjaCBvcGVuZWQgc3RhdHMgZmlsZS4KKyAqCisgKiBOQjogVGhl IGFycmF5IGluY2x1ZGVzIGFuIGV4dHJhIHNsb3QgYXQgZmlsZXNbUEdTVEFUX0tJTkRfTUlOLTFd IGZvciB0aGUKKyAqIGNvcmUgc3RhdHMgZmlsZS4gVGhlIGxvb3AgYmVsb3cgaXRlcmF0ZXMgZnJv bSAwIHRvIFBHU1RBVF9LSU5EX0NVU1RPTV9TSVpFLAorICogcHJvY2Vzc2luZyBhbGwgYWxsb2Nh dGVkIHNsb3RzLCBpbmNsdWRpbmcgdGhlIGV4dHJhIG9uZS4KKyAqLworc3RhdGljIHZvaWQKK3Bn c3RhdF9jbGVhbnVwX2ZpbGVzKFBnU3RhdF9TZXJpYWxpemVGaWxlcyAqZmlsZXMsIGJvb2wgaXNf dGVtcG9yYXJ5KQoreworCWZvciAoaW50IGkgPSAwOyBpIDwgUEdTVEFUX0tJTkRfQ1VTVE9NX1NJ WkUgKyAxOyBpKyspCisJeworCQlmb3IgKGludCBqID0gMDsgaiA8IGZpbGVzW2ldLm51bV9maWxl czsgaisrKQorCQl7CisJCQlGSUxFCSAgICpmZCA9IGZpbGVzW2ldLmZkW2pdOworCisJCQljb25z dCBjaGFyICpmaWxlbmFtZSA9IGlzX3RlbXBvcmFyeSA/CisJCQkJZmlsZXNbaV0udG1wZmlsZXNb al0gOgorCQkJCWZpbGVzW2ldLnN0YXRmaWxlc1tqXTsKKwkJCWNvbnN0IGNoYXIgKnR5cGVfc3Ry ID0gaXNfdGVtcG9yYXJ5ID8gInRlbXBvcmFyeSIgOiAicGVybWFuZW50IjsKKworCQkJZWxvZyhE RUJVRzIsICJyZW1vdmluZyAlcyBzdGF0cyBmaWxlIFwiJXNcIiIsIHR5cGVfc3RyLCBmaWxlbmFt ZSk7CisKKwkJCWlmIChmZCAmJiBGcmVlRmlsZShmZCkgPCAwKQorCQkJeworCQkJCWVyZXBvcnQo TE9HLAorCQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJCQkgZXJybXNnKCJj b3VsZCBub3QgY2xvc2UgJXMgc3RhdGlzdGljcyBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkJCQl0 eXBlX3N0ciwgZmlsZW5hbWUpKSk7CisJCQl9CisKKwkJCXVubGluayhmaWxlbmFtZSk7CisKKwkJ CS8qIGZyZWUgcGVyLWZpbGUgc3RyaW5ncyAqLworCQkJcGZyZWUoZmlsZXNbaV0udG1wZmlsZXNb al0pOworCQkJcGZyZWUoZmlsZXNbaV0uc3RhdGZpbGVzW2pdKTsKKwkJfQorCisJCS8qIGZyZWUg ZWFjaCBmaWxlIGFycmF5cyAqLworCQlpZiAoZmlsZXNbaV0uZmQpCisJCQlwZnJlZShmaWxlc1tp XS5mZCk7CisKKwkJaWYgKGZpbGVzW2ldLnRtcGZpbGVzKQorCQkJcGZyZWUoZmlsZXNbaV0udG1w ZmlsZXMpOworCisJCWlmIChmaWxlc1tpXS5zdGF0ZmlsZXMpCisJCQlwZnJlZShmaWxlc1tpXS5z dGF0ZmlsZXMpOworCX0KKworCS8qIGZpbmFsbHkgZnJlZSB0b3AtbGV2ZWwgYXJyYXkgKi8KKwlw ZnJlZShmaWxlcyk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgb3BlbiBhbGwgc3RhdGlzdGlj cyBzZXJpYWxpemF0aW9uIGZpbGVzIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuCisgKgorICogVGhl IHJldHVybmVkIGFycmF5IGNvbnRhaW5zIHRoZSBjb3JlIHBlcm1hbmVudCBzdGF0cyBmaWxlIGF0 IGluZGV4IDAsCisgKiBmb2xsb3dlZCBieSBhbnkgcGVyLWtpbmQgZXh0cmEgZmlsZXMgYXQgaW5k aWNlcyBQR1NUQVRfS0lORF9DVVNUT01fTUlOCisgKiB0byBQR1NUQVRfS0lORF9DVVNUT01fTUFY LgorICoKKyAqIEluIHdyaXRlIG1vZGUsIHRlbXBvcmFyeSBmaWxlcyBhcmUgb3BlbmVkLiBJZiBh bnkgZmlsZSBjYW5ub3QgYmUgb3BlbmVkLAorICogYWxsIHBhcnRpYWxseSBjcmVhdGVkIHRlbXBv cmFyeSBmaWxlcyBhcmUgcmVtb3ZlZCB1c2luZyBwZ3N0YXRfY2xlYW51cF9maWxlcygpLAorICog YW5kIE5VTEwgaXMgcmV0dXJuZWQuCisgKgorICogSW4gcmVhZCBtb2RlLCBwZXJtYW5lbnQgZmls ZXMgYXJlIG9wZW5lZC4gSWYgdGhlIGNvcmUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkLAorICogYWxs IHN0YXRzIGFyZSByZXNldCBhbmQgTlVMTCBpcyByZXR1cm5lZC4gSWYgYSBwZXIta2luZCBleHRy YSBmaWxlIGNhbm5vdCBiZQorICogb3BlbmVkLCB3ZSBwcm9jZWVkIHRvIHRoZSBuZXh0IGV4dHJh IGZpbGUuCisgKgorICogUmV0dXJucyBhbiBhcnJheSBvZiBQZ1N0YXRfU2VyaWFsaXplRmlsZXMg b24gc3VjY2Vzcywgb3IgTlVMTCBvbiBmYWlsdXJlCisgKiBhZnRlciBjbGVhbnVwIG9yIHN0YXRz IHJlc2V0IGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAqCisgKiBOQjogcGdzdGF0X2NsZWFudXBfZmls ZXMgaXMgcmVzcG9uc2libGUgZm9yIHBmcmVlJ2luZyB0aGUgUGdTdGF0X1NlcmlhbGl6ZUZpbGVz CisgKiBhcnJheS4KKyAqLworc3RhdGljIFBnU3RhdF9TZXJpYWxpemVGaWxlcyAqCitwZ3N0YXRf YWxsb2NhdGVfZmlsZXMoYm9vbCBpc19yZWFkKQoreworCWNvbnN0IGNoYXIgKm1vZGUgPSBpc19y ZWFkID8gUEdfQklOQVJZX1IgOiBQR19CSU5BUllfVzsKKwljb25zdCBjaGFyICphY3Rpb24gPSBp c19yZWFkID8gInJlYWRpbmciIDogIndyaXRpbmciOworCWNvbnN0IGNoYXIgKmNvcmVfcGF0aDsK KwlQZ1N0YXRfU2VyaWFsaXplRmlsZXMgKmNvcmU7CisJUGdTdGF0X1NlcmlhbGl6ZUZpbGVzICpm aWxlcyA9IHBhbGxvYzAoc2l6ZW9mKFBnU3RhdF9TZXJpYWxpemVGaWxlcykgKiAoUEdTVEFUX0tJ TkRfQ1VTVE9NX1NJWkUgKyAxKSk7CisKKwkvKiAtLS0gQ29yZSBwZ3N0YXQgZmlsZSBzZXR1cCAt LS0gKi8KKwljb3JlID0gJmZpbGVzW1BHU1RBVF9LSU5EX01JTiAtIDFdOworCWNvcmUtPm51bV9m aWxlcyA9IDE7CisJY29yZS0+dG1wZmlsZXMgPSBwYWxsb2Moc2l6ZW9mKGNoYXIgKikpOworCWNv cmUtPnN0YXRmaWxlcyA9IHBhbGxvYyhzaXplb2YoY2hhciAqKSk7CisJY29yZS0+ZmQgPSBwYWxs b2Moc2l6ZW9mKEZJTEUgKikpOworCisJY29yZS0+dG1wZmlsZXNbMF0gPSBwc3RyZHVwKFBHU1RB VF9TVEFUX1BFUk1BTkVOVF9UTVBGSUxFKTsKKwljb3JlLT5zdGF0ZmlsZXNbMF0gPSBwc3RyZHVw KFBHU1RBVF9TVEFUX1BFUk1BTkVOVF9GSUxFTkFNRSk7CisKKwllbG9nKERFQlVHMiwgIiVzIHN0 YXRzIGZpbGUgXCIlc1wiIiwgYWN0aW9uLCBjb3JlLT5zdGF0ZmlsZXNbMF0pOworCisJY29yZV9w YXRoID0gaXNfcmVhZCA/IGNvcmUtPnN0YXRmaWxlc1swXSA6IGNvcmUtPnRtcGZpbGVzWzBdOwor CWNvcmUtPmZkWzBdID0gQWxsb2NhdGVGaWxlKGNvcmVfcGF0aCwgbW9kZSk7CisJaWYgKGNvcmUt PmZkWzBdID09IE5VTEwpCisJeworCQlpZiAoIWlzX3JlYWQgfHwgZXJybm8gIT0gRU5PRU5UKQor CQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkg ZXJybXNnKCJjb3VsZCBub3Qgb3BlbiAlcyBzdGF0aXN0aWNzIGZpbGUgXCIlc1wiOiAlbSIsCisJ CQkJCQkJaXNfcmVhZCA/ICJwZXJtYW5lbnQiIDogInRlbXBvcmFyeSIsIGNvcmVfcGF0aCkpKTsK KworCQlpZiAoIWlzX3JlYWQpCisJCQlwZ3N0YXRfY2xlYW51cF9maWxlcyhmaWxlcywgdHJ1ZSk7 CisJCWVsc2UKKwkJCXBnc3RhdF9yZXNldF9hZnRlcl9mYWlsdXJlKCk7CisKKwkJcmV0dXJuIE5V TEw7CisJfQorCisJLyogLS0tIFBlci1raW5kIGV4dHJhIHBnc3RhdCBmaWxlcyAtLS0gKi8KKwlm b3IgKFBnU3RhdF9LaW5kIGtpbmQgPSBQR1NUQVRfS0lORF9DVVNUT01fTUlOOyBraW5kIDw9IFBH U1RBVF9LSU5EX0NVU1RPTV9NQVg7IGtpbmQrKykKKwl7CisJCWludAkJCW5maWxlczsKKwkJaW50 CQkJaW5kZXggPSAoa2luZCAtIFBHU1RBVF9LSU5EX0NVU1RPTV9NSU4pICsgMTsKKwkJUGdTdGF0 X1NlcmlhbGl6ZUZpbGVzICpleHRyYTsKKwkJY29uc3QgUGdTdGF0X0tpbmRJbmZvICppbmZvID0g cGdzdGF0X2dldF9raW5kX2luZm8oa2luZCk7CisKKwkJaWYgKCFpbmZvIHx8IGluZm8tPm51bV9z ZXJpYWxpemVkX2V4dHJhX2ZpbGVzIDwgMSkKKwkJCWNvbnRpbnVlOworCisJCW5maWxlcyA9IGlu Zm8tPm51bV9zZXJpYWxpemVkX2V4dHJhX2ZpbGVzOworCQlleHRyYSA9ICZmaWxlc1tpbmRleF07 CisKKwkJZXh0cmEtPm51bV9maWxlcyA9IG5maWxlczsKKwkJZXh0cmEtPnRtcGZpbGVzID0gcGFs bG9jKHNpemVvZihjaGFyICopICogbmZpbGVzKTsKKwkJZXh0cmEtPnN0YXRmaWxlcyA9IHBhbGxv YyhzaXplb2YoY2hhciAqKSAqIG5maWxlcyk7CisJCWV4dHJhLT5mZCA9IHBhbGxvYyhzaXplb2Yo RklMRSAqKSAqIG5maWxlcyk7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuZmlsZXM7IGkrKykK KwkJeworCQkJY29uc3QgY2hhciAqcGF0aDsKKworCQkJZXh0cmEtPnRtcGZpbGVzW2ldID0gcHNw cmludGYoIiVzL3Bnc3RhdC4lZC4lZC50bXAiLAorCQkJCQkJCQkJCSAgUEdTVEFUX1NUQVRfUEVS TUFORU5UX0RJUkVDVE9SWSwga2luZCwgaSk7CisJCQlleHRyYS0+c3RhdGZpbGVzW2ldID0gcHNw cmludGYoIiVzL3Bnc3RhdC4lZC4lZC5zdGF0IiwKKwkJCQkJCQkJCQkgICBQR1NUQVRfU1RBVF9Q RVJNQU5FTlRfRElSRUNUT1JZLCBraW5kLCBpKTsKKworCQkJcGF0aCA9IGlzX3JlYWQgPyBleHRy YS0+c3RhdGZpbGVzW2ldIDogZXh0cmEtPnRtcGZpbGVzW2ldOworCQkJZWxvZyhERUJVRzIsICIl cyBzdGF0cyBmaWxlIFwiJXNcIiIsIGFjdGlvbiwgZXh0cmEtPnN0YXRmaWxlc1tpXSk7CisKKwkJ CWV4dHJhLT5mZFtpXSA9IEFsbG9jYXRlRmlsZShwYXRoLCBtb2RlKTsKKwkJCWlmIChleHRyYS0+ ZmRbaV0gPT0gTlVMTCkKKwkJCXsKKwkJCQlpZiAoIWlzX3JlYWQgfHwgZXJybm8gIT0gRU5PRU5U KQorCQkJCQllcmVwb3J0KExPRywKKwkJCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwK KwkJCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgb3BlbiAlcyBzdGF0aXN0aWNzIGZpbGUgXCIlc1wi OiAlbSIsCisJCQkJCQkJCQlpc19yZWFkID8gInBlcm1hbmVudCIgOiAidGVtcG9yYXJ5ICIsIHBh dGgpKSk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gZmlsZXM7Cit9CiAKIC8qCiAgKiBUaGlz IGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiB0aGUgbGFzdCBwcm9jZXNzIHRoYXQgaXMgYWNjZXNzaW5n IHRoZSBzaGFyZWQKQEAgLTE1NzQsMTAgKzE3OTMsOSBAQCBwZ3N0YXRfd3JpdGVfc3RhdHNmaWxl KHZvaWQpCiB7CiAJRklMRQkgICAqZnBvdXQ7CiAJaW50MzIJCWZvcm1hdF9pZDsKLQljb25zdCBj aGFyICp0bXBmaWxlID0gUEdTVEFUX1NUQVRfUEVSTUFORU5UX1RNUEZJTEU7Ci0JY29uc3QgY2hh ciAqc3RhdGZpbGUgPSBQR1NUQVRfU1RBVF9QRVJNQU5FTlRfRklMRU5BTUU7CiAJZHNoYXNoX3Nl cV9zdGF0dXMgaHN0YXQ7CiAJUGdTdGF0U2hhcmVkX0hhc2hFbnRyeSAqcHM7CisJUGdTdGF0X1Nl cmlhbGl6ZUZpbGVzICpmaWxlcyA9IE5VTEw7CiAKIAlwZ3N0YXRfYXNzZXJ0X2lzX3VwKCk7CiAK QEAgLTE1ODcsMjYgKzE4MDUsMTcgQEAgcGdzdGF0X3dyaXRlX3N0YXRzZmlsZSh2b2lkKQogCS8q IHdlJ3JlIHNodXR0aW5nIGRvd24sIHNvIGl0J3Mgb2sgdG8ganVzdCBvdmVycmlkZSB0aGlzICov CiAJcGdzdGF0X2ZldGNoX2NvbnNpc3RlbmN5ID0gUEdTVEFUX0ZFVENIX0NPTlNJU1RFTkNZX05P TkU7CiAKLQllbG9nKERFQlVHMiwgIndyaXRpbmcgc3RhdHMgZmlsZSBcIiVzXCIiLCBzdGF0Zmls ZSk7Ci0KLQkvKgotCSAqIE9wZW4gdGhlIHN0YXRpc3RpY3MgdGVtcCBmaWxlIHRvIHdyaXRlIG91 dCB0aGUgY3VycmVudCB2YWx1ZXMuCi0JICovCi0JZnBvdXQgPSBBbGxvY2F0ZUZpbGUodG1wZmls ZSwgUEdfQklOQVJZX1cpOwotCWlmIChmcG91dCA9PSBOVUxMKQotCXsKLQkJZXJlcG9ydChMT0cs Ci0JCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJIGVycm1zZygiY291bGQgbm90 IG9wZW4gdGVtcG9yYXJ5IHN0YXRpc3RpY3MgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCXRtcGZp bGUpKSk7CisJZmlsZXMgPSBwZ3N0YXRfYWxsb2NhdGVfZmlsZXMoZmFsc2UpOworCWlmIChmaWxl cyA9PSBOVUxMKQogCQlyZXR1cm47Ci0JfQorCisJZnBvdXQgPSBmaWxlc1tQR1NUQVRfS0lORF9N SU4gLSAxXS5mZFswXTsKIAogCS8qCiAJICogV3JpdGUgdGhlIGZpbGUgaGVhZGVyIC0tLSBjdXJy ZW50bHkganVzdCBhIGZvcm1hdCBJRC4KIAkgKi8KIAlmb3JtYXRfaWQgPSBQR1NUQVRfRklMRV9G T1JNQVRfSUQ7Ci0Jd3JpdGVfY2h1bmtfcyhmcG91dCwgJmZvcm1hdF9pZCk7CisJcGdzdGF0X3dy aXRlX2NodW5rX3MoZnBvdXQsICZmb3JtYXRfaWQpOwogCiAJLyogV3JpdGUgdmFyaW91cyBzdGF0 cyBzdHJ1Y3RzIGZvciBmaXhlZCBudW1iZXIgb2Ygb2JqZWN0cyAqLwogCWZvciAoUGdTdGF0X0tp bmQga2luZCA9IFBHU1RBVF9LSU5EX01JTjsga2luZCA8PSBQR1NUQVRfS0lORF9NQVg7IGtpbmQr KykKQEAgLTE2MzEsOCArMTg0MCw4IEBAIHBnc3RhdF93cml0ZV9zdGF0c2ZpbGUodm9pZCkKIAkJ CXB0ciA9IHBnU3RhdExvY2FsLnNuYXBzaG90LmN1c3RvbV9kYXRhW2tpbmQgLSBQR1NUQVRfS0lO RF9DVVNUT01fTUlOXTsKIAogCQlmcHV0YyhQR1NUQVRfRklMRV9FTlRSWV9GSVhFRCwgZnBvdXQp OwotCQl3cml0ZV9jaHVua19zKGZwb3V0LCAma2luZCk7Ci0JCXdyaXRlX2NodW5rKGZwb3V0LCBw dHIsIGluZm8tPnNoYXJlZF9kYXRhX2xlbik7CisJCXBnc3RhdF93cml0ZV9jaHVua19zKGZwb3V0 LCAma2luZCk7CisJCXBnc3RhdF93cml0ZV9jaHVuayhmcG91dCwgcHRyLCBpbmZvLT5zaGFyZWRf ZGF0YV9sZW4pOwogCX0KIAogCS8qCkBAIC0xNjg2LDcgKzE4OTUsNyBAQCBwZ3N0YXRfd3JpdGVf c3RhdHNmaWxlKHZvaWQpCiAJCXsKIAkJCS8qIG5vcm1hbCBzdGF0cyBlbnRyeSwgaWRlbnRpZmll ZCBieSBQZ1N0YXRfSGFzaEtleSAqLwogCQkJZnB1dGMoUEdTVEFUX0ZJTEVfRU5UUllfSEFTSCwg ZnBvdXQpOwotCQkJd3JpdGVfY2h1bmtfcyhmcG91dCwgJnBzLT5rZXkpOworCQkJcGdzdGF0X3dy aXRlX2NodW5rX3MoZnBvdXQsICZwcy0+a2V5KTsKIAkJfQogCQllbHNlCiAJCXsKQEAgLTE2OTYs NTcgKzE5MDUsNzMgQEAgcGdzdGF0X3dyaXRlX3N0YXRzZmlsZSh2b2lkKQogCQkJa2luZF9pbmZv LT50b19zZXJpYWxpemVkX25hbWUoJnBzLT5rZXksIHNoc3RhdHMsICZuYW1lKTsKIAogCQkJZnB1 dGMoUEdTVEFUX0ZJTEVfRU5UUllfTkFNRSwgZnBvdXQpOwotCQkJd3JpdGVfY2h1bmtfcyhmcG91 dCwgJnBzLT5rZXkua2luZCk7Ci0JCQl3cml0ZV9jaHVua19zKGZwb3V0LCAmbmFtZSk7CisJCQlw Z3N0YXRfd3JpdGVfY2h1bmtfcyhmcG91dCwgJnBzLT5rZXkua2luZCk7CisJCQlwZ3N0YXRfd3Jp dGVfY2h1bmtfcyhmcG91dCwgJm5hbWUpOworCQl9CisKKwkJLyogQSBwbHVnLWluIGlzIHNhdmlu ZyBleHRyYSBkYXRhICovCisJCWlmIChraW5kX2luZm8tPnRvX3NlcmlhbGl6ZWRfZXh0cmEpCisJ CXsKKwkJCWludAkJCWluZGV4ID0gKHBzLT5rZXkua2luZCAtIFBHU1RBVF9LSU5EX0NVU1RPTV9N SU4pICsgMTsKKworCQkJQXNzZXJ0KGZpbGVzW2luZGV4XS5mZCk7CisKKwkJCWtpbmRfaW5mby0+ dG9fc2VyaWFsaXplZF9leHRyYSgmcHMtPmtleSwgc2hzdGF0cywgZnBvdXQsIGZpbGVzW2luZGV4 XS5mZCk7CiAJCX0KIAogCQkvKiBXcml0ZSBleGNlcHQgdGhlIGhlYWRlciBwYXJ0IG9mIHRoZSBl bnRyeSAqLwotCQl3cml0ZV9jaHVuayhmcG91dCwKLQkJCQkJcGdzdGF0X2dldF9lbnRyeV9kYXRh KHBzLT5rZXkua2luZCwgc2hzdGF0cyksCi0JCQkJCXBnc3RhdF9nZXRfZW50cnlfbGVuKHBzLT5r ZXkua2luZCkpOworCQlwZ3N0YXRfd3JpdGVfY2h1bmsoZnBvdXQsCisJCQkJCQkgICBwZ3N0YXRf Z2V0X2VudHJ5X2RhdGEocHMtPmtleS5raW5kLCBzaHN0YXRzKSwKKwkJCQkJCSAgIHBnc3RhdF9n ZXRfZW50cnlfbGVuKHBzLT5rZXkua2luZCkpOworCiAJfQogCWRzaGFzaF9zZXFfdGVybSgmaHN0 YXQpOwogCiAJLyoKIAkgKiBObyBtb3JlIG91dHB1dCB0byBiZSBkb25lLiBDbG9zZSB0aGUgdGVt cCBmaWxlIGFuZCByZXBsYWNlIHRoZSBvbGQKIAkgKiBwZ3N0YXQuc3RhdCB3aXRoIGl0LiAgVGhl IGZlcnJvcigpIGNoZWNrIHJlcGxhY2VzIHRlc3RpbmcgZm9yIGVycm9yCi0JICogYWZ0ZXIgZWFj aCBpbmRpdmlkdWFsIGZwdXRjIG9yIGZ3cml0ZSAoaW4gd3JpdGVfY2h1bmsoKSkgYWJvdmUuCisJ ICogYWZ0ZXIgZWFjaCBpbmRpdmlkdWFsIGZwdXRjIG9yIGZ3cml0ZSAoaW4gcGdzdGF0X3dyaXRl X2NodW5rKCkpIGFib3ZlLgogCSAqLwogCWZwdXRjKFBHU1RBVF9GSUxFX0VOVFJZX0VORCwgZnBv dXQpOwogCi0JaWYgKGZlcnJvcihmcG91dCkpCi0JewotCQllcmVwb3J0KExPRywKLQkJCQkoZXJy Y29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgdGVt cG9yYXJ5IHN0YXRpc3RpY3MgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCXRtcGZpbGUpKSk7Ci0J CUZyZWVGaWxlKGZwb3V0KTsKLQkJdW5saW5rKHRtcGZpbGUpOwotCX0KLQllbHNlIGlmIChGcmVl RmlsZShmcG91dCkgPCAwKQotCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycmNvZGVfZm9yX2Zp bGVfYWNjZXNzKCksCi0JCQkJIGVycm1zZygiY291bGQgbm90IGNsb3NlIHRlbXBvcmFyeSBzdGF0 aXN0aWNzIGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCQl0bXBmaWxlKSkpOwotCQl1bmxpbmsodG1w ZmlsZSk7Ci0JfQotCWVsc2UgaWYgKGR1cmFibGVfcmVuYW1lKHRtcGZpbGUsIHN0YXRmaWxlLCBM T0cpIDwgMCkKKwlmb3IgKGludCBpID0gMDsgaSA8IFBHU1RBVF9LSU5EX0NVU1RPTV9TSVpFICsg MTsgaSsrKQogCXsKLQkJLyogZHVyYWJsZV9yZW5hbWUgYWxyZWFkeSBlbWl0dGVkIGxvZyBtZXNz YWdlICovCi0JCXVubGluayh0bXBmaWxlKTsKKwkJZm9yIChpbnQgaiA9IDA7IGogPCBmaWxlc1tp XS5udW1fZmlsZXM7IGorKykKKwkJeworCQkJY29uc3QgY2hhciAqdG1wZmlsZTsKKwkJCWNvbnN0 IGNoYXIgKnN0YXRmaWxlOworCQkJRklMRQkgICAqZmQgPSBOVUxMOworCisJCQl0bXBmaWxlID0g ZmlsZXNbaV0udG1wZmlsZXNbal07CisJCQlzdGF0ZmlsZSA9IGZpbGVzW2ldLnN0YXRmaWxlc1tq XTsKKwkJCWZkID0gZmlsZXNbaV0uZmRbal07CisKKwkJCWlmIChmZXJyb3IoZmQpKQorCQkJewor CQkJCWVyZXBvcnQoTE9HLAorCQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJ CQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgdGVtcG9yYXJ5IHN0YXRpc3RpY3MgZmlsZSBcIiVz XCI6ICVtIiwKKwkJCQkJCQkJdG1wZmlsZSkpKTsKKwkJCQlGcmVlRmlsZShmZCk7CisJCQkJdW5s aW5rKHRtcGZpbGUpOworCQkJfQorCQkJZWxzZSBpZiAoRnJlZUZpbGUoZmQpIDwgMCkKKwkJCXsK KwkJCQllcmVwb3J0KExPRywKKwkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJ CQkJIGVycm1zZygiY291bGQgbm90IGNsb3NlIHRlbXBvcmFyeSBzdGF0aXN0aWNzIGZpbGUgXCIl c1wiOiAlbSIsCisJCQkJCQkJCXRtcGZpbGUpKSk7CisJCQkJdW5saW5rKHRtcGZpbGUpOworCQkJ fQorCQkJZWxzZSBpZiAoZHVyYWJsZV9yZW5hbWUodG1wZmlsZSwgc3RhdGZpbGUsIExPRykgPCAw KQorCQkJeworCQkJCS8qIGR1cmFibGVfcmVuYW1lIGFscmVhZHkgZW1pdHRlZCBsb2cgbWVzc2Fn ZSAqLworCQkJCXVubGluayh0bXBmaWxlKTsKKwkJCX0KKwkJfQogCX0KIH0KIAotLyogaGVscGVy cyBmb3IgcGdzdGF0X3JlYWRfc3RhdHNmaWxlKCkgKi8KLXN0YXRpYyBib29sCi1yZWFkX2NodW5r KEZJTEUgKmZwaW4sIHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gZnJlYWQocHRy LCAxLCBsZW4sIGZwaW4pID09IGxlbjsKLX0KLQotI2RlZmluZSByZWFkX2NodW5rX3MoZnBpbiwg cHRyKSByZWFkX2NodW5rKGZwaW4sIHB0ciwgc2l6ZW9mKCpwdHIpKQotCiAvKgogICogUmVhZHMg aW4gZXhpc3Rpbmcgc3RhdGlzdGljcyBmaWxlIGludG8gbWVtb3J5LgogICoKQEAgLTE3NjEsMzYg KzE5ODYsMjEgQEAgcGdzdGF0X3JlYWRfc3RhdHNmaWxlKHZvaWQpCiAJYm9vbAkJZm91bmQ7CiAJ Y29uc3QgY2hhciAqc3RhdGZpbGUgPSBQR1NUQVRfU1RBVF9QRVJNQU5FTlRfRklMRU5BTUU7CiAJ UGdTdGF0X1NobWVtQ29udHJvbCAqc2htZW0gPSBwZ1N0YXRMb2NhbC5zaG1lbTsKKwlQZ1N0YXRf U2VyaWFsaXplRmlsZXMgKmZpbGVzID0gTlVMTDsKIAogCS8qIHNob3VsZG4ndCBiZSBjYWxsZWQg ZnJvbSBwb3N0bWFzdGVyICovCiAJQXNzZXJ0KElzVW5kZXJQb3N0bWFzdGVyIHx8ICFJc1Bvc3Rt YXN0ZXJFbnZpcm9ubWVudCk7CiAKLQllbG9nKERFQlVHMiwgInJlYWRpbmcgc3RhdHMgZmlsZSBc IiVzXCIiLCBzdGF0ZmlsZSk7Ci0KLQkvKgotCSAqIFRyeSB0byBvcGVuIHRoZSBzdGF0cyBmaWxl LiBJZiBpdCBkb2Vzbid0IGV4aXN0LCB0aGUgYmFja2VuZHMgc2ltcGx5Ci0JICogcmV0dXJucyB6 ZXJvIGZvciBhbnl0aGluZyBhbmQgc3RhdGlzdGljcyBzaW1wbHkgc3RhcnRzIGZyb20gc2NyYXRj aAotCSAqIHdpdGggZW1wdHkgY291bnRlcnMuCi0JICoKLQkgKiBFTk9FTlQgaXMgYSBwb3NzaWJp bGl0eSBpZiBzdGF0cyBjb2xsZWN0aW9uIHdhcyBwcmV2aW91c2x5IGRpc2FibGVkIG9yCi0JICog aGFzIG5vdCB5ZXQgd3JpdHRlbiB0aGUgc3RhdHMgZmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUuICBB bnkgb3RoZXIKLQkgKiBmYWlsdXJlIGNvbmRpdGlvbiBpcyBzdXNwaWNpb3VzLgotCSAqLwotCWlm ICgoZnBpbiA9IEFsbG9jYXRlRmlsZShzdGF0ZmlsZSwgUEdfQklOQVJZX1IpKSA9PSBOVUxMKQot CXsKLQkJaWYgKGVycm5vICE9IEVOT0VOVCkKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJyY29k ZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJIGVycm1zZygiY291bGQgbm90IG9wZW4gc3RhdGlz dGljcyBmaWxlIFwiJXNcIjogJW0iLAotCQkJCQkJCXN0YXRmaWxlKSkpOwotCQlwZ3N0YXRfcmVz ZXRfYWZ0ZXJfZmFpbHVyZSgpOworCWZpbGVzID0gcGdzdGF0X2FsbG9jYXRlX2ZpbGVzKHRydWUp OworCWlmIChmaWxlcyA9PSBOVUxMKQogCQlyZXR1cm47Ci0JfQorCisJZnBpbiA9IGZpbGVzW1BH U1RBVF9LSU5EX01JTiAtIDFdLmZkWzBdOwogCiAJLyoKIAkgKiBWZXJpZnkgaXQncyBvZiB0aGUg ZXhwZWN0ZWQgZm9ybWF0LgogCSAqLwotCWlmICghcmVhZF9jaHVua19zKGZwaW4sICZmb3JtYXRf aWQpKQorCWlmICghcGdzdGF0X3JlYWRfY2h1bmtfcyhmcGluLCAmZm9ybWF0X2lkKSkKIAl7CiAJ CWVsb2coV0FSTklORywgImNvdWxkIG5vdCByZWFkIGZvcm1hdCBJRCIpOwogCQlnb3RvIGVycm9y OwpAQCAtMTgyMCw3ICsyMDMwLDcgQEAgcGdzdGF0X3JlYWRfc3RhdHNmaWxlKHZvaWQpCiAJCQkJ CWNoYXIJICAgKnB0cjsKIAogCQkJCQkvKiBlbnRyeSBmb3IgZml4ZWQtbnVtYmVyZWQgc3RhdHMg Ki8KLQkJCQkJaWYgKCFyZWFkX2NodW5rX3MoZnBpbiwgJmtpbmQpKQorCQkJCQlpZiAoIXBnc3Rh dF9yZWFkX2NodW5rX3MoZnBpbiwgJmtpbmQpKQogCQkJCQl7CiAJCQkJCQllbG9nKFdBUk5JTkcs ICJjb3VsZCBub3QgcmVhZCBzdGF0cyBraW5kIGZvciBlbnRyeSBvZiB0eXBlICVjIiwgdCk7CiAJ CQkJCQlnb3RvIGVycm9yOwpAQCAtMTg2MCw3ICsyMDcwLDcgQEAgcGdzdGF0X3JlYWRfc3RhdHNm aWxlKHZvaWQpCiAJCQkJCQkJaW5mby0+c2hhcmVkX2RhdGFfb2ZmOwogCQkJCQl9CiAKLQkJCQkJ aWYgKCFyZWFkX2NodW5rKGZwaW4sIHB0ciwgaW5mby0+c2hhcmVkX2RhdGFfbGVuKSkKKwkJCQkJ aWYgKCFwZ3N0YXRfcmVhZF9jaHVuayhmcGluLCBwdHIsIGluZm8tPnNoYXJlZF9kYXRhX2xlbikp CiAJCQkJCXsKIAkJCQkJCWVsb2coV0FSTklORywgImNvdWxkIG5vdCByZWFkIGRhdGEgb2Ygc3Rh dHMga2luZCAldSBmb3IgZW50cnkgb2YgdHlwZSAlYyB3aXRoIHNpemUgJXUiLAogCQkJCQkJCSBr aW5kLCB0LCBpbmZvLT5zaGFyZWRfZGF0YV9sZW4pOwpAQCAtMTg3NSwxMyArMjA4NSwxNCBAQCBw Z3N0YXRfcmVhZF9zdGF0c2ZpbGUodm9pZCkKIAkJCQkJUGdTdGF0X0hhc2hLZXkga2V5OwogCQkJ CQlQZ1N0YXRTaGFyZWRfSGFzaEVudHJ5ICpwOwogCQkJCQlQZ1N0YXRTaGFyZWRfQ29tbW9uICpo ZWFkZXI7CisJCQkJCWNvbnN0IFBnU3RhdF9LaW5kSW5mbyAqa2luZF9pbmZvID0gTlVMTDsKIAog CQkJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCiAJCQkJCWlmICh0ID09IFBHU1RBVF9GSUxF X0VOVFJZX0hBU0gpCiAJCQkJCXsKIAkJCQkJCS8qIG5vcm1hbCBzdGF0cyBlbnRyeSwgaWRlbnRp ZmllZCBieSBQZ1N0YXRfSGFzaEtleSAqLwotCQkJCQkJaWYgKCFyZWFkX2NodW5rX3MoZnBpbiwg JmtleSkpCisJCQkJCQlpZiAoIXBnc3RhdF9yZWFkX2NodW5rX3MoZnBpbiwgJmtleSkpCiAJCQkJ CQl7CiAJCQkJCQkJZWxvZyhXQVJOSU5HLCAiY291bGQgbm90IHJlYWQga2V5IGZvciBlbnRyeSBv ZiB0eXBlICVjIiwgdCk7CiAJCQkJCQkJZ290byBlcnJvcjsKQEAgLTE4OTQsOCArMjEwNSw4IEBA IHBnc3RhdF9yZWFkX3N0YXRzZmlsZSh2b2lkKQogCQkJCQkJCQkga2V5Lm9iamlkLCB0KTsKIAkJ CQkJCQlnb3RvIGVycm9yOwogCQkJCQkJfQotCi0JCQkJCQlpZiAoIXBnc3RhdF9nZXRfa2luZF9p bmZvKGtleS5raW5kKSkKKwkJCQkJCWtpbmRfaW5mbyA9IHBnc3RhdF9nZXRfa2luZF9pbmZvKGtl eS5raW5kKTsKKwkJCQkJCWlmICgha2luZF9pbmZvKQogCQkJCQkJewogCQkJCQkJCWVsb2coV0FS TklORywgImNvdWxkIG5vdCBmaW5kIGluZm9ybWF0aW9uIG9mIGtpbmQgZm9yIGVudHJ5ICV1LyV1 LyUiIFBSSXU2NCAiIG9mIHR5cGUgJWMiLAogCQkJCQkJCQkga2V5LmtpbmQsIGtleS5kYm9pZCwK QEAgLTE5MDYsMTYgKzIxMTcsMTUgQEAgcGdzdGF0X3JlYWRfc3RhdHNmaWxlKHZvaWQpCiAJCQkJ CWVsc2UKIAkJCQkJewogCQkJCQkJLyogc3RhdHMgZW50cnkgaWRlbnRpZmllZCBieSBuYW1lIG9u IGRpc2sgKGUuZy4gc2xvdHMpICovCi0JCQkJCQljb25zdCBQZ1N0YXRfS2luZEluZm8gKmtpbmRf aW5mbyA9IE5VTEw7CiAJCQkJCQlQZ1N0YXRfS2luZCBraW5kOwogCQkJCQkJTmFtZURhdGEJbmFt ZTsKIAotCQkJCQkJaWYgKCFyZWFkX2NodW5rX3MoZnBpbiwgJmtpbmQpKQorCQkJCQkJaWYgKCFw Z3N0YXRfcmVhZF9jaHVua19zKGZwaW4sICZraW5kKSkKIAkJCQkJCXsKIAkJCQkJCQllbG9nKFdB Uk5JTkcsICJjb3VsZCBub3QgcmVhZCBzdGF0cyBraW5kIGZvciBlbnRyeSBvZiB0eXBlICVjIiwg dCk7CiAJCQkJCQkJZ290byBlcnJvcjsKIAkJCQkJCX0KLQkJCQkJCWlmICghcmVhZF9jaHVua19z KGZwaW4sICZuYW1lKSkKKwkJCQkJCWlmICghcGdzdGF0X3JlYWRfY2h1bmtfcyhmcGluLCAmbmFt ZSkpCiAJCQkJCQl7CiAJCQkJCQkJZWxvZyhXQVJOSU5HLCAiY291bGQgbm90IHJlYWQgbmFtZSBv ZiBzdGF0cyBraW5kICV1IGZvciBlbnRyeSBvZiB0eXBlICVjIiwKIAkJCQkJCQkJIGtpbmQsIHQp OwpAQCAtMTk5MCw5ICsyMjAwLDkgQEAgcGdzdGF0X3JlYWRfc3RhdHNmaWxlKHZvaWQpCiAJCQkJ CQkJIGtleS5vYmppZCwgdCk7CiAJCQkJCX0KIAotCQkJCQlpZiAoIXJlYWRfY2h1bmsoZnBpbiwK LQkJCQkJCQkJCXBnc3RhdF9nZXRfZW50cnlfZGF0YShrZXkua2luZCwgaGVhZGVyKSwKLQkJCQkJ CQkJCXBnc3RhdF9nZXRfZW50cnlfbGVuKGtleS5raW5kKSkpCisJCQkJCWlmICghcGdzdGF0X3Jl YWRfY2h1bmsoZnBpbiwKKwkJCQkJCQkJCQkgICBwZ3N0YXRfZ2V0X2VudHJ5X2RhdGEoa2V5Lmtp bmQsIGhlYWRlciksCisJCQkJCQkJCQkJICAgcGdzdGF0X2dldF9lbnRyeV9sZW4oa2V5LmtpbmQp KSkKIAkJCQkJewogCQkJCQkJZWxvZyhXQVJOSU5HLCAiY291bGQgbm90IHJlYWQgZGF0YSBmb3Ig ZW50cnkgJXUvJXUvJSIgUFJJdTY0ICIgb2YgdHlwZSAlYyIsCiAJCQkJCQkJIGtleS5raW5kLCBr ZXkuZGJvaWQsCkBAIC0yMDAwLDYgKzIyMTAsMjUgQEAgcGdzdGF0X3JlYWRfc3RhdHNmaWxlKHZv aWQpCiAJCQkJCQlnb3RvIGVycm9yOwogCQkJCQl9CiAKKwkJCQkJLyoKKwkJCQkJICogQSBwbHVn LWluIGlzIHJlYWRpbmcgZXh0cmEgZGF0YS4gSWYgcmVhZGluZyBmYWlscywgdGhlCisJCQkJCSAq IGNvcnJlc3BvbmRpbmcgZmlsZSBpcyBjbG9zZWQsIHRoZSBlcnJvciBpcyBsb2dnZWQsIGFuZAor CQkJCQkgKiBwcm9jZXNzaW5nIGNvbnRpbnVlcy4KKwkJCQkJICovCisJCQkJCWlmIChraW5kX2lu Zm8tPmZyb21fc2VyaWFsaXplZF9leHRyYSkKKwkJCQkJeworCQkJCQkJaW50CQkJaW5kZXggPSAo a2V5LmtpbmQgLSBQR1NUQVRfS0lORF9DVVNUT01fTUlOKSArIDE7CisKKwkJCQkJCUFzc2VydChm aWxlc1tpbmRleF0uZmQpOworCisJCQkJCQlpZiAoIWtpbmRfaW5mby0+ZnJvbV9zZXJpYWxpemVk X2V4dHJhKCZrZXksIGhlYWRlciwgZnBpbiwgZmlsZXNbaW5kZXhdLmZkKSkKKwkJCQkJCXsKKwkJ CQkJCQllbG9nKFdBUk5JTkcsICJjb3VsZCBub3QgcmVhZCBleHRyYSBkYXRhIGZvciBlbnRyeSAl dS8ldS8lIiBQUkl1NjQgIiBvZiB0eXBlICVjIiwKKwkJCQkJCQkJIGtleS5raW5kLCBrZXkuZGJv aWQsCisJCQkJCQkJCSBrZXkub2JqaWQsIHQpOworCQkJCQkJfQorCQkJCQl9CisKIAkJCQkJYnJl YWs7CiAJCQkJfQogCQkJY2FzZSBQR1NUQVRfRklMRV9FTlRSWV9FTkQ6CkBAIC0yMDIzLDEwICsy MjUyLDcgQEAgcGdzdGF0X3JlYWRfc3RhdHNmaWxlKHZvaWQpCiAJfQogCiBkb25lOgotCUZyZWVG aWxlKGZwaW4pOwotCi0JZWxvZyhERUJVRzIsICJyZW1vdmluZyBwZXJtYW5lbnQgc3RhdHMgZmls ZSBcIiVzXCIiLCBzdGF0ZmlsZSk7Ci0JdW5saW5rKHN0YXRmaWxlKTsKKwlwZ3N0YXRfY2xlYW51 cF9maWxlcyhmaWxlcywgZmFsc2UpOwogCiAJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS91dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9p bnRlcm5hbC5oCmluZGV4IDRkMmI4YWE2MDgxLi5iZTM5YzQ1MThmOCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvcGdzdGF0X2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMv cGdzdGF0X2ludGVybmFsLmgKQEAgLTMwMyw2ICszMDMsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGdT dGF0X0tpbmRJbmZvCiAJCQkJCQkJCQkgICBjb25zdCBQZ1N0YXRTaGFyZWRfQ29tbW9uICpoZWFk ZXIsIE5hbWVEYXRhICpuYW1lKTsKIAlib29sCQkoKmZyb21fc2VyaWFsaXplZF9uYW1lKSAoY29u c3QgTmFtZURhdGEgKm5hbWUsIFBnU3RhdF9IYXNoS2V5ICprZXkpOwogCisJLyoKKwkgKiBGb3Ig Y3VzdG9tLCB2YXJpYWJsZS1udW1iZXJlZCBzdGF0cywgc2VyaWFsaXplL2Rlc2VyaWFsaXplIGV4 dHJhIGRhdGEKKwkgKiBwZXIgZW50cnkuIE9wdGlvbmFsLgorCSAqLworCWJvb2wJCSgqZnJvbV9z ZXJpYWxpemVkX2V4dHJhKSAoUGdTdGF0X0hhc2hLZXkgKmtleSwKKwkJCQkJCQkJCQkgIGNvbnN0 IFBnU3RhdFNoYXJlZF9Db21tb24gKmhlYWRlciwgRklMRSAqc3RhdGZpbGUsIEZJTEUgKipleHRy YV9maWxlcyk7CisJdm9pZAkJKCp0b19zZXJpYWxpemVkX2V4dHJhKSAoY29uc3QgUGdTdGF0X0hh c2hLZXkgKmtleSwKKwkJCQkJCQkJCQljb25zdCBQZ1N0YXRTaGFyZWRfQ29tbW9uICpoZWFkZXIs IEZJTEUgKnN0YXRmaWxlLCBGSUxFICoqZXh0cmFfZmlsZXMpOworCWludAkJCW51bV9zZXJpYWxp emVkX2V4dHJhX2ZpbGVzOworCiAJLyoKIAkgKiBGb3IgZml4ZWQtbnVtYmVyZWQgc3RhdGlzdGlj czogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IHN0YXRlLgogCSAqCkBAIC05ODQsNCArOTk0LDE1 IEBAIHBnc3RhdF9nZXRfY3VzdG9tX3NuYXBzaG90X2RhdGEoUGdTdGF0X0tpbmQga2luZCkKIAly ZXR1cm4gcGdTdGF0TG9jYWwuc25hcHNob3QuY3VzdG9tX2RhdGFbaWR4XTsKIH0KIAorLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKiByZWFkaW5nIGFuZCB3cml0aW5nIG9mIG9uLWRpc2sgc3RhdHMgZmlsZQorICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworLyogaGVscGVycyBmb3IgcGdzdGF0X3dyaXRlX3N0YXRzZmlsZSgpICovCitleHRlcm4g dm9pZCBwZ3N0YXRfd3JpdGVfY2h1bmsoRklMRSAqZnBvdXQsIHZvaWQgKnB0ciwgc2l6ZV90IGxl bik7CitleHRlcm4gYm9vbCBwZ3N0YXRfcmVhZF9jaHVuayhGSUxFICpmcGluLCB2b2lkICpwdHIs IHNpemVfdCBsZW4pOworI2RlZmluZSBwZ3N0YXRfcmVhZF9jaHVua19zKGZwaW4sIHB0cikgcGdz dGF0X3JlYWRfY2h1bmsoZnBpbiwgcHRyLCBzaXplb2YoKnB0cikpCisjZGVmaW5lIHBnc3RhdF93 cml0ZV9jaHVua19zKGZwb3V0LCBwdHIpIHBnc3RhdF93cml0ZV9jaHVuayhmcG91dCwgcHRyLCBz aXplb2YoKnB0cikpCisKICNlbmRpZgkJCQkJCQkvKiBQR1NUQVRfSU5URVJOQUxfSCAqLwotLSAK Mi40My4wCgo= --0000000000008a3fae0643f82d8f Content-Type: application/octet-stream; name="v1-0002-pgstat-Add-tests-for-custom-serialization-files-a.patch" Content-Disposition: attachment; filename="v1-0002-pgstat-Add-tests-for-custom-serialization-files-a.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi6fsb030 RnJvbSBiN2IxOTc0ODcyYmE5NjBjMWI2OWVjYjAzN2QwOThjOGMyNTQ3ZWUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBVYnVudHUgPHVidW50dUBpcC0xNzItMzEtNDYtMjMwLmVjMi5p bnRlcm5hbD4KRGF0ZTogV2VkLCAxOSBOb3YgMjAyNSAwMzo1ODo0NSArMDAwMApTdWJqZWN0OiBb UEFUQ0ggdjEgMi8yXSBwZ3N0YXQ6IEFkZCB0ZXN0cyBmb3IgY3VzdG9tIHNlcmlhbGl6YXRpb24g ZmlsZXMgYW5kCiBjYWxsYmFja3MKClRoaXMgY29tbWl0IGFkZHMgcmVjb3ZlcnkgdGVzdHMgZm9y IGN1c3RvbSBzdGF0cyBkYXRhIGFmdGVyIGEgY2xlYW4gcmVzdGFydC4KCmluamVjdGlvbl9wb2lu dHMgaXMgZW5oYW5jZWQgdG8gc3RvcmUgYW4gaW5qZWN0aW9uIHBvaW50IGRlc2NyaXB0aW9uLAp3 aGljaCBpcyByZWNvcmRlZCBhcyBleHRyYSBzdGF0cyBkYXRhLgotLS0KIC4uLi9pbmplY3Rpb25f cG9pbnRzLS0xLjAuc3FsICAgICAgICAgICAgICAgICB8ICAxNCArLQogLi4uL2luamVjdGlvbl9w b2ludHMvaW5qZWN0aW9uX3BvaW50cy5jICAgICAgIHwgICA4ICstCiAuLi4vaW5qZWN0aW9uX3Bv aW50cy9pbmplY3Rpb25fc3RhdHMuYyAgICAgICAgfCAxODUgKysrKysrKysrKysrKysrKystCiAu Li4vaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fc3RhdHMuaCAgICAgICAgfCAgIDMgKy0KIHNy Yy90ZXN0L3JlY292ZXJ5L3QvMDI5X3N0YXRzX3Jlc3RhcnQucGwgICAgICB8ICA0NyArKysrLQog NSBmaWxlcyBjaGFuZ2VkLCAyNTEgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3BvaW50 cy0tMS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25f cG9pbnRzLS0xLjAuc3FsCmluZGV4IGE1MWZmNTM4Njg0Li40ODYxYTQ3N2U5OCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9wb2ludHMtLTEu MC5zcWwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9w b2ludHMtLTEuMC5zcWwKQEAgLTksMTAgKzksMjAgQEAKIC0tIEF0dGFjaGVzIHRoZSBhY3Rpb24g dG8gdGhlIGdpdmVuIGluamVjdGlvbiBwb2ludC4KIC0tCiBDUkVBVEUgRlVOQ1RJT04gaW5qZWN0 aW9uX3BvaW50c19hdHRhY2goSU4gcG9pbnRfbmFtZSBURVhULAotICAgIElOIGFjdGlvbiB0ZXh0 KQorICAgIElOIGFjdGlvbiB0ZXh0LCBJTiBkZXNjcmlwdGlvbiB0ZXh0IERFRkFVTFQgTlVMTCkK IFJFVFVSTlMgdm9pZAogQVMgJ01PRFVMRV9QQVRITkFNRScsICdpbmplY3Rpb25fcG9pbnRzX2F0 dGFjaCcKLUxBTkdVQUdFIEMgU1RSSUNUIFBBUkFMTEVMIFVOU0FGRTsKK0xBTkdVQUdFIEMgUEFS QUxMRUwgVU5TQUZFOworCistLQorLS0gaW5qZWN0aW9uX3BvaW50c19zdGF0c19kZXNjcmlwdGlv bigpCistLQorLS0gUmVwb3J0cyBzdGF0aXN0aWNzLCBpZiBhbnksIHJlbGF0ZWQgdG8gdGhlIGdp dmVuIGluamVjdGlvbiBwb2ludC4KKy0tCitDUkVBVEUgRlVOQ1RJT04gaW5qZWN0aW9uX3BvaW50 c19zdGF0c19kZXNjcmlwdGlvbihJTiBwb2ludF9uYW1lIFRFWFQpCitSRVRVUk5TIFRFWFQKK0FT ICdNT0RVTEVfUEFUSE5BTUUnLCAnaW5qZWN0aW9uX3BvaW50c19zdGF0c19kZXNjcmlwdGlvbicK K0xBTkdVQUdFIEMgU1RSSUNUOwogCiAtLQogLS0gaW5qZWN0aW9uX3BvaW50c19hdHRhY2goKQpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9w b2ludHMuYyBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fcG9p bnRzLmMKaW5kZXggYjdjMWM1OGVhNTYuLmM3MmZiOGQ0Y2I2IDEwMDY0NAotLS0gYS9zcmMvdGVz dC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3BvaW50cy5jCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fcG9pbnRzLmMKQEAgLTM1Myw5 ICszNTMsMTUgQEAgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goUEdfRlVOQ1RJT05fQVJHUykKIHsK IAljaGFyCSAgICpuYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsK IAljaGFyCSAgICphY3Rpb24gPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMSkp OworCWNoYXIJICAgKmRlc2NyaXB0aW9uID0gTlVMTDsgLyogb3B0aW9uYWwgZGVzY3JpcHRpb24g Ki8KIAljaGFyCSAgICpmdW5jdGlvbjsKIAlJbmplY3Rpb25Qb2ludENvbmRpdGlvbiBjb25kaXRp b24gPSB7MH07CiAKKwlpZiAoUEdfTkFSR1MoKSA+IDIgJiYgIVBHX0FSR0lTTlVMTCgyKSkKKwl7 CisJCWRlc2NyaXB0aW9uID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDIpKTsK Kwl9CisKIAlpZiAoc3RyY21wKGFjdGlvbiwgImVycm9yIikgPT0gMCkKIAkJZnVuY3Rpb24gPSAi aW5qZWN0aW9uX2Vycm9yIjsKIAllbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAibm90aWNlIikgPT0g MCkKQEAgLTM4Niw3ICszOTIsNyBAQCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaChQR19GVU5DVElP Tl9BUkdTKQogCX0KIAogCS8qIEFkZCBlbnRyeSBmb3Igc3RhdHMgKi8KLQlwZ3N0YXRfY3JlYXRl X2luaihuYW1lKTsKKwlwZ3N0YXRfY3JlYXRlX2luaihuYW1lLCBkZXNjcmlwdGlvbik7CiAKIAlQ R19SRVRVUk5fVk9JRCgpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rp b25fcG9pbnRzL2luamVjdGlvbl9zdGF0cy5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25f cG9pbnRzL2luamVjdGlvbl9zdGF0cy5jCmluZGV4IDE1OGUxNjMxYWY5Li5jNzBkZDk1N2Y2NCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9z dGF0cy5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25f c3RhdHMuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKICNp bmNsdWRlICJpbmplY3Rpb25fc3RhdHMuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRl ICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAj aW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCiAKQEAgLTI2LDYgKzI3LDcgQEAKIHR5 cGVkZWYgc3RydWN0IFBnU3RhdF9TdGF0SW5qRW50cnkKIHsKIAlQZ1N0YXRfQ291bnRlciBudW1j YWxsczsJLyogbnVtYmVyIG9mIHRpbWVzIHBvaW50IGhhcyBiZWVuIHJ1biAqLworCWRzYV9wb2lu dGVyIGRlc2NyaXB0aW9uOwkvKiBpbmplY3Rpb24gcG9pbnQgZGVzY3JpcHRpb24gKi8KIH0gUGdT dGF0X1N0YXRJbmpFbnRyeTsKIAogdHlwZWRlZiBzdHJ1Y3QgUGdTdGF0U2hhcmVkX0luamVjdGlv blBvaW50CkBAIC0zNSw2ICszNywxNCBAQCB0eXBlZGVmIHN0cnVjdCBQZ1N0YXRTaGFyZWRfSW5q ZWN0aW9uUG9pbnQKIH0gUGdTdGF0U2hhcmVkX0luamVjdGlvblBvaW50OwogCiBzdGF0aWMgYm9v bCBpbmplY3Rpb25fc3RhdHNfZmx1c2hfY2IoUGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWYsIGJv b2wgbm93YWl0KTsKK3ZvaWQJCWluamVjdGlvbl9zdGF0c19zZXJpYWxpemVfZXh0cmEoY29uc3Qg UGdTdGF0X0hhc2hLZXkgKmtleSwKKwkJCQkJCQkJCQkJY29uc3QgUGdTdGF0U2hhcmVkX0NvbW1v biAqaGVhZGVyLAorCQkJCQkJCQkJCQlGSUxFICpzdGF0ZmlsZSwKKwkJCQkJCQkJCQkJRklMRSAq KmV4dHJhX2ZpbGVzKTsKK2Jvb2wJCWluamVjdGlvbl9zdGF0c19kZXNlcmlhbGl6ZV9leHRyYShQ Z1N0YXRfSGFzaEtleSAqa2V5LAorCQkJCQkJCQkJCQkgIGNvbnN0IFBnU3RhdFNoYXJlZF9Db21t b24gKmhlYWRlciwKKwkJCQkJCQkJCQkJICBGSUxFICpzdGF0ZmlsZSwKKwkJCQkJCQkJCQkJICBG SUxFICoqZXh0cmFfZmlsZXMpOwogCiBzdGF0aWMgY29uc3QgUGdTdGF0X0tpbmRJbmZvIGluamVj dGlvbl9zdGF0cyA9IHsKIAkubmFtZSA9ICJpbmplY3Rpb25fcG9pbnRzIiwKQEAgLTUwLDYgKzYw LDEwIEBAIHN0YXRpYyBjb25zdCBQZ1N0YXRfS2luZEluZm8gaW5qZWN0aW9uX3N0YXRzID0gewog CS5zaGFyZWRfZGF0YV9sZW4gPSBzaXplb2YoKChQZ1N0YXRTaGFyZWRfSW5qZWN0aW9uUG9pbnQg KikgMCktPnN0YXRzKSwKIAkucGVuZGluZ19zaXplID0gc2l6ZW9mKFBnU3RhdF9TdGF0SW5qRW50 cnkpLAogCS5mbHVzaF9wZW5kaW5nX2NiID0gaW5qZWN0aW9uX3N0YXRzX2ZsdXNoX2NiLAorCS50 b19zZXJpYWxpemVkX2V4dHJhID0gaW5qZWN0aW9uX3N0YXRzX3NlcmlhbGl6ZV9leHRyYSwKKwku ZnJvbV9zZXJpYWxpemVkX2V4dHJhID0gaW5qZWN0aW9uX3N0YXRzX2Rlc2VyaWFsaXplX2V4dHJh LAorCS5udW1fc2VyaWFsaXplZF9leHRyYV9maWxlcyA9IDIsCS8qIFdlIGNyZWF0ZSAyIGZpbGVz IHRvIHRlc3QgcmVjb3ZlcnksCisJCQkJCQkJCQkJICogdGhvdWdoIG9ubHkgb25lIGlzIHVzZWQg Ki8KIH07CiAKIC8qCkBAIC02NSw2ICs3OSw5IEBAIHN0YXRpYyBjb25zdCBQZ1N0YXRfS2luZElu Zm8gaW5qZWN0aW9uX3N0YXRzID0gewogLyogVHJhY2sgaWYgc3RhdHMgYXJlIGxvYWRlZCAqLwog c3RhdGljIGJvb2wgaW5qX3N0YXRzX2xvYWRlZCA9IGZhbHNlOwogCisvKiBEU0EgYXJlYSB0byBz dG9yZSBhbiBpbmplY3Rpb24gcG9pbnRzIGRlc2NyaXB0aW9uICovCitkc2FfYXJlYSAgICppbmpf ZGVzY3JpcHRpb25fZHNhID0gTlVMTDsKKwogLyoKICAqIENhbGxiYWNrIGZvciBzdGF0cyBoYW5k bGluZwogICovCkBAIC0xMjIsMTAgKzEzOSwxMyBAQCBwZ3N0YXRfcmVnaXN0ZXJfaW5qKHZvaWQp CiAgKiBSZXBvcnQgaW5qZWN0aW9uIHBvaW50IGNyZWF0aW9uLgogICovCiB2b2lkCi1wZ3N0YXRf Y3JlYXRlX2luaihjb25zdCBjaGFyICpuYW1lKQorcGdzdGF0X2NyZWF0ZV9pbmooY29uc3QgY2hh ciAqbmFtZSwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pCiB7CiAJUGdTdGF0X0VudHJ5UmVmICpl bnRyeV9yZWY7CiAJUGdTdGF0U2hhcmVkX0luamVjdGlvblBvaW50ICpzaHN0YXRlbnQ7CisJc2l6 ZV90CQlsZW47CisJY2hhcgkgICAqZGVzY19jb3B5OworCWJvb2wJCWZvdW5kOwogCiAJLyogbGVh dmUgaWYgZGlzYWJsZWQgKi8KIAlpZiAoIWlual9zdGF0c19sb2FkZWQgfHwgIWlual9zdGF0c19l bmFibGVkKQpAQCAtMTM4LDYgKzE1OCwyNSBAQCBwZ3N0YXRfY3JlYXRlX2luaihjb25zdCBjaGFy ICpuYW1lKQogCiAJLyogaW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IGRhdGEgKi8KIAltZW1zZXQo JnNoc3RhdGVudC0+c3RhdHMsIDAsIHNpemVvZihzaHN0YXRlbnQtPnN0YXRzKSk7CisKKwlpZiAo IWRlc2NyaXB0aW9uKQorCQlyZXR1cm47CisKKwlsZW4gPSBzdHJsZW4oZGVzY3JpcHRpb24pICsg MTsKKworCWlmICghaW5qX2Rlc2NyaXB0aW9uX2RzYSkKKwkJaW5qX2Rlc2NyaXB0aW9uX2RzYSA9 IEdldE5hbWVkRFNBKCJpbmplY3Rpb25fcG9pbnRzX2Rlc2NyaXB0aW9uIiwgJmZvdW5kKTsKKwor CWlmIChpbmpfZGVzY3JpcHRpb25fZHNhKQorCXsKKwkJc2hzdGF0ZW50LT5zdGF0cy5kZXNjcmlw dGlvbiA9IGRzYV9hbGxvY2F0ZShpbmpfZGVzY3JpcHRpb25fZHNhLCBsZW4pOworCisJCWRlc2Nf Y29weSA9IGRzYV9nZXRfYWRkcmVzcyhpbmpfZGVzY3JpcHRpb25fZHNhLAorCQkJCQkJCQkJc2hz dGF0ZW50LT5zdGF0cy5kZXNjcmlwdGlvbik7CisJCWRlc2NfY29weVtsZW4gLSAxXSA9ICdcMCc7 CisKKwkJbWVtY3B5KGRlc2NfY29weSwgZGVzY3JpcHRpb24sIGxlbik7CisJfQogfQogCiAvKgpA QCAtMTgwLDYgKzIxOSwxNTAgQEAgcGdzdGF0X3JlcG9ydF9pbmooY29uc3QgY2hhciAqbmFtZSkK IAlwZW5kaW5nLT5udW1jYWxscysrOwogfQogCit2b2lkCitpbmplY3Rpb25fc3RhdHNfc2VyaWFs aXplX2V4dHJhKGNvbnN0IFBnU3RhdF9IYXNoS2V5ICprZXksCisJCQkJCQkJCWNvbnN0IFBnU3Rh dFNoYXJlZF9Db21tb24gKmhlYWRlciwKKwkJCQkJCQkJRklMRSAqc3RhdGZpbGUsCisJCQkJCQkJ CUZJTEUgKipleHRyYV9maWxlcykKK3sKKwljaGFyCSAgICpkZXNjcmlwdGlvbjsKKwlzaXplX3QJ CXFsZW47CisJRklMRQkgICAqZmQgPSBleHRyYV9maWxlc1swXTsKKwlQZ1N0YXRTaGFyZWRfSW5q ZWN0aW9uUG9pbnQgKmVudHJ5ID0gKFBnU3RhdFNoYXJlZF9JbmplY3Rpb25Qb2ludCAqKSBoZWFk ZXI7CisKKwkvKiBFeGl0IGVhcmx5IGlmIHN0YXRzIGFyZW4ndCBhdmFpbGFibGUgb3IgZW5hYmxl ZCAqLworCWlmICghaW5qX3N0YXRzX2xvYWRlZCB8fCAhaW5qX3N0YXRzX2VuYWJsZWQgfHwgIWtl eSkKKwkJcmV0dXJuOworCisJLyogV3JpdGUgaGFzaCBrZXkgKi8KKwlwZ3N0YXRfd3JpdGVfY2h1 bmsoZmQsICh2b2lkICopIGtleSwgc2l6ZW9mKFBnU3RhdF9IYXNoS2V5KSk7CisKKwkvKiBIYW5k bGUgbWlzc2luZyBkZXNjcmlwdGlvbiAqLworCWlmICghRHNhUG9pbnRlcklzVmFsaWQoZW50cnkt PnN0YXRzLmRlc2NyaXB0aW9uKSkKKwl7CisJCWZwdXRjKCdcMCcsIGZkKTsKKwkJcmV0dXJuOwor CX0KKworCS8qIEVuc3VyZSBEU0EgYXJlYSBpcyBsb2FkZWQgKi8KKwlpZiAoIWlual9kZXNjcmlw dGlvbl9kc2EpCisJeworCQlib29sCQlmb3VuZDsKKworCQlpbmpfZGVzY3JpcHRpb25fZHNhID0g R2V0TmFtZWREU0EoImluamVjdGlvbl9wb2ludHNfZGVzY3JpcHRpb24iLCAmZm91bmQpOworCX0K KworCWlmICghaW5qX2Rlc2NyaXB0aW9uX2RzYSkKKwl7CisJCWZwdXRjKCdcMCcsIGZkKTsKKwkJ cmV0dXJuOworCX0KKworCS8qIEdldCBkZXNjcmlwdGlvbiBhbmQgd3JpdGUgaXQgKi8KKwlkZXNj cmlwdGlvbiA9IGRzYV9nZXRfYWRkcmVzcyhpbmpfZGVzY3JpcHRpb25fZHNhLCBlbnRyeS0+c3Rh dHMuZGVzY3JpcHRpb24pOworCXFsZW4gPSBzdHJsZW4oZGVzY3JpcHRpb24pICsgMTsgLyogaW5j bHVkZSBudWxsIHRlcm1pbmF0b3IgKi8KKworCXBnc3RhdF93cml0ZV9jaHVuayhmZCwgZGVzY3Jp cHRpb24sIHFsZW4pOworfQorCitib29sCitpbmplY3Rpb25fc3RhdHNfZGVzZXJpYWxpemVfZXh0 cmEoUGdTdGF0X0hhc2hLZXkgKmtleSwKKwkJCQkJCQkJICBjb25zdCBQZ1N0YXRTaGFyZWRfQ29t bW9uICpoZWFkZXIsCisJCQkJCQkJCSAgRklMRSAqc3RhdGZpbGUsCisJCQkJCQkJCSAgRklMRSAq KmV4dHJhX2ZpbGVzKQoreworCVBnU3RhdFNoYXJlZF9JbmplY3Rpb25Qb2ludCAqZW50cnk7CisJ ZHNhX3BvaW50ZXIgZHA7CisJc2l6ZV90CQlidWZjYXA7CisJc2l6ZV90CQlsZW47CisJY2hhcgkg ICAqYnVmZmVyOworCWludAkJCWM7CisJRklMRQkgICAqZmQgPSBleHRyYV9maWxlc1swXTsKKwor CWlmICghaW5qX3N0YXRzX2xvYWRlZCB8fCAhaW5qX3N0YXRzX2VuYWJsZWQpCisJCXJldHVybiB0 cnVlOworCisJLyogUmVhZCB0aGUga2V5ICovCisJaWYgKCFwZ3N0YXRfcmVhZF9jaHVuayhmZCwg KHZvaWQgKikga2V5LCBzaXplb2YoUGdTdGF0X0hhc2hLZXkpKSkKKwkJcmV0dXJuIGZlb2YoZmQp ID8gdHJ1ZSA6IGZhbHNlOworCisJLyogRW5zdXJlIERTQSBpcyByZWFkeSAqLworCWlmICghaW5q X2Rlc2NyaXB0aW9uX2RzYSkKKwl7CisJCWJvb2wJCWZvdW5kOworCisJCWlual9kZXNjcmlwdGlv bl9kc2EgPSBHZXROYW1lZERTQSgiaW5qZWN0aW9uX3BvaW50c19kZXNjcmlwdGlvbiIsICZmb3Vu ZCk7CisJfQorCisJZW50cnkgPQorCQkoUGdTdGF0U2hhcmVkX0luamVjdGlvblBvaW50ICopIGhl YWRlcjsKKworCS8qIFJlYWQgbnVsbC10ZXJtaW5hdGVkIGRlc2NyaXB0aW9uICovCisJYnVmY2Fw ID0gMTI4OworCWxlbiA9IDA7CisJYnVmZmVyID0gcGFsbG9jKGJ1ZmNhcCk7CisKKwl3aGlsZSAo KGMgPSBmZ2V0YyhmZCkpICE9IEVPRikKKwl7CisJCWlmIChsZW4gKyAxID49IGJ1ZmNhcCkKKwkJ eworCQkJYnVmY2FwICo9IDI7CisJCQlidWZmZXIgPSByZXBhbGxvYyhidWZmZXIsIGJ1ZmNhcCk7 CisJCX0KKworCQlidWZmZXJbbGVuKytdID0gKGNoYXIpIGM7CisKKwkJaWYgKGMgPT0gJ1wwJykK KwkJCWJyZWFrOworCX0KKworCS8qIEVPRiByZWFjaGVkIHVuZXhwZWN0ZWRseSAqLworCWlmIChj ID09IEVPRikKKwl7CisJCXBmcmVlKGJ1ZmZlcik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkv KiBDb3B5IGludG8gRFNBICovCisJZHAgPSBkc2FfYWxsb2NhdGUoaW5qX2Rlc2NyaXB0aW9uX2Rz YSwgbGVuKTsKKworCW1lbWNweShkc2FfZ2V0X2FkZHJlc3MoaW5qX2Rlc2NyaXB0aW9uX2RzYSwg ZHApLCBidWZmZXIsIGxlbik7CisJZW50cnktPnN0YXRzLmRlc2NyaXB0aW9uID0gZHA7CisKKwlw ZnJlZShidWZmZXIpOworCXJldHVybiB0cnVlOworfQorCitQR19GVU5DVElPTl9JTkZPX1YxKGlu amVjdGlvbl9wb2ludHNfc3RhdHNfZGVzY3JpcHRpb24pOworRGF0dW0KK2luamVjdGlvbl9wb2lu dHNfc3RhdHNfZGVzY3JpcHRpb24oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpuYW1l ID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlQZ1N0YXRfU3RhdElu akVudHJ5ICplbnRyeSA9IHBnc3RhdF9mZXRjaF9zdGF0X2luamVudHJ5KG5hbWUpOworCisJaWYg KGVudHJ5ID09IE5VTEwpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlpZiAoRHNhUG9pbnRlcklz VmFsaWQoZW50cnktPmRlc2NyaXB0aW9uKSkKKwl7CisJCWNoYXIJICAgKmRlc2NyaXB0aW9uID0g TlVMTDsKKwkJYm9vbAkJZm91bmQ7CisKKwkJaWYgKCFpbmpfZGVzY3JpcHRpb25fZHNhKQorCQkJ aW5qX2Rlc2NyaXB0aW9uX2RzYSA9IEdldE5hbWVkRFNBKCJpbmplY3Rpb25fcG9pbnRzX2Rlc2Ny aXB0aW9uIiwgJmZvdW5kKTsKKworCQlpZiAoaW5qX2Rlc2NyaXB0aW9uX2RzYSkKKwkJCWRlc2Ny aXB0aW9uID0gZHNhX2dldF9hZGRyZXNzKGlual9kZXNjcmlwdGlvbl9kc2EsIGVudHJ5LT5kZXNj cmlwdGlvbik7CisKKwkJaWYgKCFkZXNjcmlwdGlvbikKKwkJCVBHX1JFVFVSTl9OVUxMKCk7CisK KwkJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoZGVzY3JpcHRpb24pKTsKKwl9CisJ ZWxzZQorCQlQR19SRVRVUk5fTlVMTCgpOworfQorCiAvKgogICogU1FMIGZ1bmN0aW9uIHJldHVy bmluZyB0aGUgbnVtYmVyIG9mIHRpbWVzIGFuIGluamVjdGlvbiBwb2ludAogICogaGFzIGJlZW4g Y2FsbGVkLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2lu amVjdGlvbl9zdGF0cy5oIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2luamVj dGlvbl9zdGF0cy5oCmluZGV4IGJhMzEwYzUyYzdmLi5lNTBhMjU2ZDkxZSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9zdGF0cy5oCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9pbmplY3Rpb25fc3RhdHMuaApAQCAt MjAsNyArMjAsOCBAQCBleHRlcm4gYm9vbCBpbmpfc3RhdHNfZW5hYmxlZDsKIAogLyogaW5qZWN0 aW9uX3N0YXRzLmMgKi8KIGV4dGVybiB2b2lkIHBnc3RhdF9yZWdpc3Rlcl9pbmoodm9pZCk7Ci1l eHRlcm4gdm9pZCBwZ3N0YXRfY3JlYXRlX2luaihjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2 b2lkIHBnc3RhdF9jcmVhdGVfaW5qKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCQkJICBjb25zdCBj aGFyICpkZXNjcmlwdGlvbik7CiBleHRlcm4gdm9pZCBwZ3N0YXRfZHJvcF9pbmooY29uc3QgY2hh ciAqbmFtZSk7CiBleHRlcm4gdm9pZCBwZ3N0YXRfcmVwb3J0X2luaihjb25zdCBjaGFyICpuYW1l KTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjlfc3RhdHNfcmVzdGFydC5w bCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDI5X3N0YXRzX3Jlc3RhcnQucGwKaW5kZXggMDIxZTJi ZjM2MWYuLjFhNWM5YjhhYmFkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS90LzAyOV9z dGF0c19yZXN0YXJ0LnBsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDI5X3N0YXRzX3Jlc3Rh cnQucGwKQEAgLTEwLDExICsxMCwzMSBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1 c2UgVGVzdDo6TW9yZTsKIHVzZSBGaWxlOjpDb3B5OwogCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGlzIHRlc3QgcmVsaWVzIG9uIGFuIGlu amVjdGlvbiBwb2ludCB0byB0ZXN0IGV4dHJhIHNlcmlhbGl6YXRpb24gZGF0YQorIyBpcyBwZXJz aXN0ZWQgYWZ0ZXIgYSBjbGVhbiBzaHV0ZG93bi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZiAoJEVOVntlbmFibGVfaW5qZWN0aW9uX3BvaW50 c30gbmUgJ3llcycpCit7CisJcGxhbiBza2lwX2FsbCA9PiAnSW5qZWN0aW9uIHBvaW50cyBub3Qg c3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQnOworfQorCiBteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXItPm5ldygncHJpbWFyeScpOwogJG5vZGUtPmluaXQoYWxsb3dzX3N0cmVhbWlu ZyA9PiAxKTsKLSRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgInRyYWNrX2Z1 bmN0aW9ucyA9ICdhbGwnIik7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZics CisJCSJ0cmFja19mdW5jdGlvbnMgPSAnYWxsJworCQlzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXM9 J2luamVjdGlvbl9wb2ludHMnCisJCWluamVjdGlvbl9wb2ludHMuc3RhdHMgPSAnb24nIik7CiAk bm9kZS0+c3RhcnQ7CiAKKyMgQ2hlY2sgaWYgdGhlIGV4dGVuc2lvbiBpbmplY3Rpb25fcG9pbnRz IGlzIGF2YWlsYWJsZSwgYXMgaXQgbWF5IGJlCisjIHBvc3NpYmxlIHRoYXQgdGhpcyBzY3JpcHQg aXMgcnVuIHdpdGggaW5zdGFsbGNoZWNrLCB3aGVyZSB0aGUgbW9kdWxlCisjIHdvdWxkIG5vdCBi ZSBpbnN0YWxsZWQgYnkgZGVmYXVsdC4KK2lmICghJG5vZGUtPmNoZWNrX2V4dGVuc2lvbignaW5q ZWN0aW9uX3BvaW50cycpKQoreworCXBsYW4gc2tpcF9hbGwgPT4gJ0V4dGVuc2lvbiBpbmplY3Rp b25fcG9pbnRzIG5vdCBpbnN0YWxsZWQnOworfQorCiBteSAkY29ubmVjdF9kYiA9ICdwb3N0Z3Jl cyc7CiBteSAkZGJfdW5kZXJfdGVzdCA9ICd0ZXN0JzsKIApAQCAtNTMsNiArNzMsMTQgQEAgbXkg JHRhYmxlb2lkID0gJG5vZGUtPnNhZmVfcHNxbCgkZGJfdW5kZXJfdGVzdCwKICMgZ2VuZXJhdGUg c3RhdHMgYW5kIGZsdXNoIHRoZW0KIHRyaWdnZXJfZnVuY3JlbF9zdGF0KCk7CiAKKyMgR2VuZXJh dGUgY3VzdG9tIHN0YXRzIGRhdGEKKyRub2RlLT5zYWZlX3BzcWwoJGNvbm5lY3RfZGIsICJDUkVB VEUgRVhURU5TSU9OIGluamVjdGlvbl9wb2ludHMiKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCdzdGF0cy1ub3RpY2UxJywg J25vdGljZScsCisJJ3RoaXMgZGVzY3JpcHRpb24gaXMgZm9yIHN0YXRzLW5vdGljZTEgaW5qZWN0 aW9uIHBvaW50Jyk7Iik7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgaW5q ZWN0aW9uX3BvaW50c19ydW4oJ3N0YXRzLW5vdGljZTEnKTsiKTsKKyRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3J1bignc3RhdHMtbm90aWNlMScp OyIpOworCiAjIHZlcmlmeSBzdGF0cyBvYmplY3RzIGV4aXN0CiAkc2VjdCA9ICJpbml0aWFsIjsK IGlzKGhhdmVfc3RhdHMoJ2RhdGFiYXNlJywgJGRib2lkLCAwKSwgJ3QnLCAiJHNlY3Q6IGRiIHN0 YXRzIGRvIGV4aXN0Iik7CkBAIC03MCw3ICs5OCwxMyBAQCBvayghLWYgIiRzdGF0c2ZpbGUiLCAi YmFja3VwIHN0YXRzZmlsZSBjYW5ub3QgYWxyZWFkeSBleGlzdCIpOwogCiBteSAkZGF0YWRpciA9 ICRub2RlLT5kYXRhX2RpcigpOwogbXkgJG9nX3N0YXRzID0gIiRkYXRhZGlyL3BnX3N0YXQvcGdz dGF0LnN0YXQiOworbXkgJG9nX2N1c3RvbV9zdGF0czAgPSAiJGRhdGFkaXIvcGdfc3RhdC9wZ3N0 YXQuMjUuMC5zdGF0IjsKK215ICRvZ19jdXN0b21fc3RhdHMxID0gIiRkYXRhZGlyL3BnX3N0YXQv cGdzdGF0LjI1LjEuc3RhdCI7CitteSBAb2dfdG1wX3N0YXRzID0gZ2xvYigiJGRhdGFkaXIvcGdf c3RhdC8qLnRtcCIpOworb2soIUBvZ190bXBfc3RhdHMsICJvcmlnaW4gdGVtcCBzdGF0cyBmaWxl IG11c3QgZXhpc3QiKTsKIG9rKC1mICIkb2dfc3RhdHMiLCAib3JpZ2luIHN0YXRzIGZpbGUgbXVz dCBleGlzdCIpOworb2soLWYgIiRvZ19jdXN0b21fc3RhdHMwIiwgIm9yaWdpbiBjdXN0b20gc3Rh dHMgZmlsZSAwIG11c3QgZXhpc3QiKTsKK29rKC1mICIkb2dfY3VzdG9tX3N0YXRzMSIsICJvcmln aW4gY3VzdG9tIHN0YXRzIGZpbGUgMSBtdXN0IGV4aXN0Iik7CiBjb3B5KCRvZ19zdGF0cywgJHN0 YXRzZmlsZSkgb3IgZGllICJDb3B5IGZhaWxlZDogJCEiOwogCiAKQEAgLTg1LDkgKzExOSwyMCBA QCBpcyhoYXZlX3N0YXRzKCdmdW5jdGlvbicsICRkYm9pZCwgJGZ1bmNvaWQpLAogaXMoaGF2ZV9z dGF0cygncmVsYXRpb24nLCAkZGJvaWQsICR0YWJsZW9pZCksCiAJJ3QnLCAiJHNlY3Q6IHJlbGF0 aW9uIHN0YXRzIGRvIGV4aXN0Iik7CiAKKyMgQ2hlY2sgdGhlIGN1c3RvbSBzdGF0cyBkYXRhIHN1 cnZpdmVkIHRoZSByZXN0YXJ0CitteSAkbnVtY2FsbHMgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3N0YXRzX251bWNhbGxzKCdzdGF0cy1u b3RpY2UxJyk7Iik7CitteSAkZGVzY3JpcHRpb24gPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJCQkJCQkJCSJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19zdGF0c19kZXNjcmlwdGlvbign c3RhdHMtbm90aWNlMScpOyIpOworaXMoJG51bWNhbGxzLCAnMicsICdudW1iZXIgb2Ygc3RhdHMg Y2FsbHMgZm9yIHN0YXRzLW5vdGljZTEnKTsKK2lzKCRkZXNjcmlwdGlvbiwgJ3RoaXMgZGVzY3Jp cHRpb24gaXMgZm9yIHN0YXRzLW5vdGljZTEgaW5qZWN0aW9uIHBvaW50JywKKwkJCQkgJ2Rlc2Ny aXB0aW9uIG9mIHN0YXRzLW5vdGljZTEgcGVyc2VydmVkIGFmdGVyIGNsZWFuIHJlc3RhcnQnKTsK KwogJG5vZGUtPnN0b3AoJ2ltbWVkaWF0ZScpOwogCiBvayghLWYgIiRvZ19zdGF0cyIsICJubyBz dGF0cyBmaWxlIHNob3VsZCBleGlzdCBhZnRlciBpbW1lZGlhdGUgc2h1dGRvd24iKTsKK29rKCEt ZiAiJG9nX2N1c3RvbV9zdGF0czAiLCAibm8gY3VzdG9tIHN0YXRzIGZpbGUgMCBzaG91bGQgZXhp c3QgYWZ0ZXIgaW1tZWRpYXRlIHNodXRkb3duIik7CitvayghLWYgIiRvZ19jdXN0b21fc3RhdHMx IiwgIm5vIGN1c3RvbSBzdGF0cyBmaWxlIDEgc2hvdWxkIGV4aXN0IGFmdGVyIGltbWVkaWF0ZSBz aHV0ZG93biIpOwogCiAjIGNvcHkgdGhlIG9sZCBzdGF0cyBiYWNrIHRvIHRlc3Qgd2UgZGlzY2Fy ZCBzdGF0cyBhZnRlciBjcmFzaCByZXN0YXJ0CiBjb3B5KCRzdGF0c2ZpbGUsICRvZ19zdGF0cykg b3IgZGllICJDb3B5IGZhaWxlZDogJCEiOwotLSAKMi40My4wCgo= --0000000000008a3fae0643f82d8f--