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 1vT5gx-00Cf1K-2t for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Dec 2025 21:56:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vT5gw-007SYH-1a for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Dec 2025 21:56:18 +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 1vT5fu-007Pit-2q for pgsql-hackers@lists.postgresql.org; Tue, 09 Dec 2025 21:55:15 +0000 Received: from mail-oi1-x230.google.com ([2607:f8b0:4864:20::230]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vT5fs-0047VM-2N for pgsql-hackers@lists.postgresql.org; Tue, 09 Dec 2025 21:55:14 +0000 Received: by mail-oi1-x230.google.com with SMTP id 5614622812f47-450be85b7d9so2811320b6e.0 for ; Tue, 09 Dec 2025 13:55:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765317311; x=1765922111; 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=4fm8eMBdaPvauNvKPcl5zYpv8b04KQNAA4UmNdOEUXI=; b=LNZ0PWbyuqt+gkDjnsnjPk+RatUnNESD+nD9hxjMMDxGaFa78ZLpyYUnudB3BFOpZy zA/TpgmH2GabT4WyCP+gWQyT+aLo6A8wfXkbp3nPXh2bVbg/jzNP0dPdKPQtcX5QiE03 jJ8IISs1hhrf6X21C1cuo9H1Uc1vCHcio/Vypymcu5My30laoF+nZNhoBRODDwMJRehn pdYbONt3kJC7ungJG4IkYfhDqHfsq1TzrYnikW5+Kp2Oq5im+y1Rae0AsbfoGvKPts5s fH8pME3QugwynqriMJCTrFH2Vu9a2sXspskM+6FE8G3uive9teTXQpT/EEYWYL+3WLR6 9Pgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765317311; x=1765922111; 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=4fm8eMBdaPvauNvKPcl5zYpv8b04KQNAA4UmNdOEUXI=; b=JuYCMu5ngQJ+dmUK2NjuQvQMNjHwcDYxCOCQvwmxBdfg3sLGznrDOwvyxd2RYT3itj cZ/HxW2XbR9e315GTo34rV1cyiIBjmNHrSAH2FYC9QYv9DQnHEbAJijs/mb4ONH4MNba ZB3Erk2Xg/ujztYFnaNTS0v3I9w9TcP98ppAY9GlDq6ILEOC5u31o+4BQ9xBX866WSh1 /F74a2EfzLFnLokCISjBXvkuJjQOoyjxMAwly3SeMOzxgsVoGaPiNloI1DmSWXFi0Al4 oH/Q+0AdpJCseLzkbqQCes6oSigVXM0xP+uXr9eBHeLiFWGIK1omVIYNKVNIvD58iWlH kWmA== X-Forwarded-Encrypted: i=1; AJvYcCVxyqk0eK/8Ox/N8Wz3nacUv9gElsVvDgpQw5T3vqNYS60xphDZ3k2c7+jG49fRbTi4sakCWSBHZNPZvKDF@lists.postgresql.org X-Gm-Message-State: AOJu0YzlpfXnrN1PdPLuRo05hRBUtk8kFXqi8woheMkXimnTp2nBbqnu U+HI0kAKPy7RHshVgaGXxsHMSZalRc8Sr9LZPBYo682EznII4XcOtv8J83ifWYsV9tZp7XkkHfQ 0mXQfYGof/ue/vnyYgFVsxv1lIDF8Gwc= X-Gm-Gg: ASbGncvxHQwqGJjmTExL1rKR0HVyvpoC+cSMS02YdfJVKvR+FPEQURdiX42iExBsuVM h+TNiMjNhWC86K/La8wvQziWEQw1HXX/mRB5tbJZqXt93whtVvPX49CPyNsg0mRq8CrVcMxVmnd UT25P7JEHknT79p4A3JBsUcciZAiq1aZ2mwX+k3H2/yLFKnG1gQGLYpU6h7ihFFcP1SvNId/Lka 7e5CJkEPSTw9s3L3cyxg15yv9tlsM0lDQyQ4yhiufXtQhqZgeDO6qBA3sH+pBjlBjE= X-Google-Smtp-Source: AGHT+IGShGFLHyq3ikS4Rj14ReD1ncaPW7fmZg2T6nPiqMvvOuCLByUsbK9C+XG0BZk5v2U7+y1B14Q3U5XXPQvhlFA= X-Received: by 2002:a05:6808:bd4:b0:43c:afd4:646d with SMTP id 5614622812f47-45586360492mr261430b6e.14.1765317310988; Tue, 09 Dec 2025 13:55:10 -0800 (PST) MIME-Version: 1.0 References: <4FEEC2B8-D9CF-4BD0-AA7E-44CE3E27ADD8@gmail.com> <5EC13E39-B41E-464A-B382-0ACEB18A15BB@gmail.com> <9252DA7C-C611-4A93-A484-E6CD42557C15@gmail.com> In-Reply-To: <9252DA7C-C611-4A93-A484-E6CD42557C15@gmail.com> From: Sami Imseih Date: Tue, 9 Dec 2025 15:54:58 -0600 X-Gm-Features: AQt7F2q4AAYkPpPgXE2w1GMlWxVJmtfQ1nEsORbDHR18bMb8Yts59yNYt7Cd378 Message-ID: Subject: Re: [Proposal] Adding callback support for custom statistics kinds To: Chao Li Cc: Michael Paquier , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000003cf7c706458bf787" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003cf7c706458bf787 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable > My point is that, there are many places jumping to =E2=80=9Cerror=E2=80= =9D, then from =E2=80=9Cerror=E2=80=9D goto =E2=80=9Cdone=E2=80=9D, > if an error didn=E2=80=99t happen from the deserialize callback, how end_= extra_stats() > can know if failure happened and takes action accordingly? IIUC, if *any* error occurs outside of a deserialize callback, first the "e= rror" code will be called, followed by "done" which will then trigger the end_extra_stats callback that will perform the cleanup. Attached is v6 with a few minor indentation fixes and a correction to freeing the file in the cleanup callback. -- Sami Imseih Amazon Web Services (AWS) --0000000000003cf7c706458bf787 Content-Type: application/octet-stream; name="v6-0001-Allow-cumulative-statistics-to-serialize-auxiliar.patch" Content-Disposition: attachment; filename="v6-0001-Allow-cumulative-statistics-to-serialize-auxiliar.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miz48y710 RnJvbSA2NTBmM2ZkNjhhYjhkOWQxMTYxNjY4OWJmY2Y4ZjZjM2RmYjc3MmUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2ltc2VpaEBhbWF6b24uY29tPgpEYXRl OiBNb24sIDEwIE5vdiAyMDI1IDAwOjAzOjQxIC0wNjAwClN1YmplY3Q6IFtQQVRDSCB2NiAxLzFd IEFsbG93IGN1bXVsYXRpdmUgc3RhdGlzdGljcyB0byBzZXJpYWxpemUgYXV4aWxpYXJ5CiBkYXRh IHRvIGRpc2suCgpDdW11bGF0aXZlIFN0YXRpc3RpY3Mga2luZHMgY2FuIG5vdyB3cml0ZSBhZGRp dGlvbmFsIHBlci1lbnRyeSBkYXRhIHRvCnRoZSBzdGF0aXN0aWNzIGZpbGUgdGhhdCBkb2Vzbid0 IGZpdCBpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGlzIHVzZWZ1bApmb3Igc3RhdGlzdGljcyB3aXRo IHZhcmlhYmxlLWxlbmd0aCBhdXhpbGlhcnkgZGF0YS4KClRocmVlIG5ldyBvcHRpb25hbCBjYWxs YmFja3MgYXJlIGFkZGVkIHRvIFBnU3RhdF9LaW5kSW5mbzoKCiogdG9fc2VyaWFsaXplZF9leHRy YV9zdGF0czogd3JpdGVzIGF1eGlsaWFyeSBkYXRhIGZvciBhbiBlbnRyeQoqIGZyb21fc2VyaWFs aXplZF9leHRyYV9zdGF0czogcmVhZHMgYXV4aWxpYXJ5IGRhdGEgZm9yIGFuIGVudHJ5CiogZW5k X2V4dHJhX3N0YXRzOiBwZXJmb3JtcyBjbGVhbnVwIGFmdGVyIHJlYWQvd3JpdGUvZGlzY2FyZCBv cGVyYXRpb25zCgpBbGwgdGhyZWUgY2FsbGJhY2tzIG11c3QgYmUgcHJvdmlkZWQgdG9nZXRoZXIg dG8gZW5zdXJlIHRoZSByZWFkZXIKY29uc3VtZXMgZXhhY3RseSB3aGF0IHRoZSB3cml0ZXIgcHJv ZHVjZXMuIFRoZSBlbmRfZXh0cmFfc3RhdHMgY2FsbGJhY2sKaXMgaW52b2tlZCBhZnRlciBwcm9j ZXNzaW5nIGFsbCBlbnRyaWVzIG9mIGEga2luZCwgYWxsb3dpbmcgZXh0ZW5zaW9ucwp0byBjbG9z ZSBmaWxlIGhhbmRsZXMgYW5kIGNsZWFuIHVwIHJlc291cmNlcy4KClRlc3RzIGFyZSBhbHNvIGFk ZGVkIHRvIHRlc3RfY3VzdG9tX3N0YXRzLnBsCgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0 Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvQ0FBNVJaMHM5U0RPdStaNnZlb0pDSFdrK2tEZVRr dEF0Qy1LWTlmUTlaNkJKZERVaXJRQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvdXRp bHMvYWN0aXZpdHkvcGdzdGF0LmMgICAgICAgICAgIHwgIDg5ICsrKystCiBzcmMvaW5jbHVkZS91 dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCAgICAgICAgICAgfCAgMzcgKysKIC4uLi90ZXN0X2N1c3Rv bV9zdGF0cy90LzAwMV9jdXN0b21fc3RhdHMucGwgICB8ICAyNiArLQogLi4uL3Rlc3RfY3VzdG9t X3Zhcl9zdGF0cy0tMS4wLnNxbCAgICAgICAgICAgIHwgICA3ICstCiAuLi4vdGVzdF9jdXN0b21f c3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLmMgfCAzMTkgKysrKysrKysrKysrKysrKystCiA1 IGZpbGVzIGNoYW5nZWQsIDQ1NyBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXQuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jCmluZGV4IDg3MTNjN2EwNDgzLi4yZTBjMWJiYjA2MSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0LmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0LmMKQEAgLTE5NCw2ICsxOTQsNyBAQCBzdGF0 aWMgdm9pZCBwZ3N0YXRfYnVpbGRfc25hcHNob3Qodm9pZCk7CiBzdGF0aWMgdm9pZCBwZ3N0YXRf YnVpbGRfc25hcHNob3RfZml4ZWQoUGdTdGF0X0tpbmQga2luZCk7CiAKIHN0YXRpYyBpbmxpbmUg Ym9vbCBwZ3N0YXRfaXNfa2luZF92YWxpZChQZ1N0YXRfS2luZCBraW5kKTsKK3N0YXRpYyBpbmxp bmUgYm9vbCBwZ3N0YXRfY2hlY2tfZXh0cmFfY2FsbGJhY2tzKFBnU3RhdF9LaW5kIGtpbmQpOwog CiAKIC8qIC0tLS0tLS0tLS0KQEAgLTUyMyw2ICs1MjQsNyBAQCBwZ3N0YXRfZGlzY2FyZF9zdGF0 cyh2b2lkKQogCiAJLyogTkI6IHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBldmVuIGluIHNpbmdsZSB1 c2VyIG1vZGUgKi8KIAorCS8qIEZpcnN0LCBjbGVhbnVwIHRoZSBtYWluIHN0YXRzIGZpbGUsIFBH U1RBVF9TVEFUX1BFUk1BTkVOVF9GSUxFTkFNRSAqLwogCXJldCA9IHVubGluayhQR1NUQVRfU1RB VF9QRVJNQU5FTlRfRklMRU5BTUUpOwogCWlmIChyZXQgIT0gMCkKIAl7CkBAIC01NDQsNiArNTQ2 LDE1IEBAIHBnc3RhdF9kaXNjYXJkX3N0YXRzKHZvaWQpCiAJCQkJCQkJCSBQR1NUQVRfU1RBVF9Q RVJNQU5FTlRfRklMRU5BTUUpKSk7CiAJfQogCisJLyogTGV0IGVhY2ggc3RhdHMga2luZCBydW4g aXRzIGNsZWFudXAgY2FsbGJhY2ssIGlmIGl0IHByb3ZpZGVzIG9uZSAqLworCWZvciAoUGdTdGF0 X0tpbmQga2luZCA9IFBHU1RBVF9LSU5EX01JTjsga2luZCA8PSBQR1NUQVRfS0lORF9NQVg7IGtp bmQrKykKKwl7CisJCWNvbnN0IFBnU3RhdF9LaW5kSW5mbyAqa2luZF9pbmZvID0gcGdzdGF0X2dl dF9raW5kX2luZm8oa2luZCk7CisKKwkJaWYgKGtpbmRfaW5mbyAmJiBraW5kX2luZm8tPmVuZF9l eHRyYV9zdGF0cykKKwkJCWtpbmRfaW5mby0+ZW5kX2V4dHJhX3N0YXRzKFNUQVRTX0RJU0NBUkQp OworCX0KKwogCS8qCiAJICogUmVzZXQgc3RhdHMgY29udGVudHMuIFRoaXMgd2lsbCBzZXQgcmVz ZXQgdGltZXN0YW1wcyBvZiBmaXhlZC1udW1iZXJlZAogCSAqIHN0YXRzIHRvIHRoZSBjdXJyZW50 IHRpbWUgKG5vIHZhcmlhYmxlIHN0YXRzIGV4aXN0KS4KQEAgLTY0NSw2ICs2NTYsMTMgQEAgcGdz dGF0X2luaXRpYWxpemUodm9pZCkKIAogCXBnc3RhdF9hdHRhY2hfc2htZW0oKTsKIAorCS8qIENo ZWNrIGEga2luZCdzIGV4dHJhLWRhdGEgY2FsbGJhY2sgc2V0dXAgKi8KKwlmb3IgKFBnU3RhdF9L aW5kIGtpbmQgPSBQR1NUQVRfS0lORF9CVUlMVElOX01JTjsga2luZCA8PSBQR1NUQVRfS0lORF9C VUlMVElOX01BWDsga2luZCsrKQorCQlpZiAoIXBnc3RhdF9jaGVja19leHRyYV9jYWxsYmFja3Mo a2luZCkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJtc2coImluY29tcGxldGUgZXh0cmEg c2VyaWFsaXphdGlvbiBjYWxsYmFja3MgZm9yIHN0YXRzIGtpbmQgJWQiLAorCQkJCQkJICAga2lu ZCkpOworCiAJcGdzdGF0X2luaXRfc25hcHNob3RfZml4ZWQoKTsKIAogCS8qIEJhY2tlbmQgaW5p dGlhbGl6YXRpb24gY2FsbGJhY2tzICovCkBAIC0xNDMyLDYgKzE0NTAsMzMgQEAgcGdzdGF0X2lz X2tpbmRfdmFsaWQoUGdTdGF0X0tpbmQga2luZCkKIAlyZXR1cm4gcGdzdGF0X2lzX2tpbmRfYnVp bHRpbihraW5kKSB8fCBwZ3N0YXRfaXNfa2luZF9jdXN0b20oa2luZCk7CiB9CiAKKy8qCisgKiBW YWxpZGF0ZSB0aGF0IGV4dHJhIHN0YXRzIGNhbGxiYWNrcyBhcmUgYWxsIHByb3ZpZGVkIHRvZ2V0 aGVyIG9yIG5vdCBhdCBhbGwuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorcGdzdGF0X2NoZWNr X2V4dHJhX2NhbGxiYWNrcyhQZ1N0YXRfS2luZCBraW5kKQoreworCWNvbnN0IFBnU3RhdF9LaW5k SW5mbyAqa2luZF9pbmZvID0gcGdzdGF0X2dldF9raW5kX2luZm8oa2luZCk7CisJaW50CQkJY291 bnQgPSAwOworCisJLyogQ3VzdG9tIGtpbmQgbm90IHlldCByZWdpc3RlcmVkLCBza2lwIHZhbGlk YXRpb24gKi8KKwlpZiAoIWtpbmRfaW5mbykKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoa2luZF9p bmZvLT50b19zZXJpYWxpemVkX2V4dHJhX3N0YXRzKQorCQljb3VudCsrOworCWlmIChraW5kX2lu Zm8tPmZyb21fc2VyaWFsaXplZF9leHRyYV9zdGF0cykKKwkJY291bnQrKzsKKwlpZiAoa2luZF9p bmZvLT5lbmRfZXh0cmFfc3RhdHMpCisJCWNvdW50Kys7CisKKwkvKiBFaXRoZXIgYWxsIHRocmVl IGNhbGxiYWNrcyBtdXN0IGJlIHByb3ZpZGVkLCBvciBub25lICovCisJaWYgKGNvdW50ICE9IDAg JiYgY291bnQgIT0gMykKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKIGNv bnN0IFBnU3RhdF9LaW5kSW5mbyAqCiBwZ3N0YXRfZ2V0X2tpbmRfaW5mbyhQZ1N0YXRfS2luZCBr aW5kKQogewpAQCAtMTUyNSw2ICsxNTcwLDEzIEBAIHBnc3RhdF9yZWdpc3Rlcl9raW5kKFBnU3Rh dF9LaW5kIGtpbmQsIGNvbnN0IFBnU3RhdF9LaW5kSW5mbyAqa2luZF9pbmZvKQogCQkJCQkgZXJy ZGV0YWlsKCJFeGlzdGluZyBjdW11bGF0aXZlIHN0YXRpc3RpY3Mgd2l0aCBJRCAldSBoYXMgdGhl IHNhbWUgbmFtZS4iLCBleGlzdGluZ19raW5kKSkpOwogCX0KIAorCS8qIENoZWNrIGEga2luZCdz IGV4dHJhLWRhdGEgY2FsbGJhY2sgc2V0dXAgKi8KKwlpZiAoIXBnc3RhdF9jaGVja19leHRyYV9j YWxsYmFja3Moa2luZCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygiaW5jb21wbGV0 ZSBzZXJpYWxpemF0aW9uIGNhbGxiYWNrcyBmb3Igc3RhdGlzdGljcyBraW5kIFwiJXNcIiIsCisJ CQkJCQlraW5kX2luZm8tPm5hbWUpLAorCQkJCSBlcnJkZXRhaWwoImNhbGxiYWNrcyB0b19zZXJp YWxpemVkX2V4dHJhX3N0YXRzLCBmcm9tX3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHMsIGFuZCBlbmRf ZXh0cmFfc3RhdHMgbXVzdCBiZSBwcm92aWRlZCB0b2dldGhlci4iKSkpOworCiAJLyogUmVnaXN0 ZXIgaXQgKi8KIAlwZ3N0YXRfa2luZF9jdXN0b21faW5mb3NbaWR4XSA9IGtpbmRfaW5mbzsKIAll cmVwb3J0KExPRywKQEAgLTE3MDIsNiArMTc1NCw5IEBAIHBnc3RhdF93cml0ZV9zdGF0c2ZpbGUo dm9pZCkKIAkJcGdzdGF0X3dyaXRlX2NodW5rKGZwb3V0LAogCQkJCQkJICAgcGdzdGF0X2dldF9l bnRyeV9kYXRhKHBzLT5rZXkua2luZCwgc2hzdGF0cyksCiAJCQkJCQkgICBwZ3N0YXRfZ2V0X2Vu dHJ5X2xlbihwcy0+a2V5LmtpbmQpKTsKKworCQlpZiAoa2luZF9pbmZvLT50b19zZXJpYWxpemVk X2V4dHJhX3N0YXRzKQorCQkJa2luZF9pbmZvLT50b19zZXJpYWxpemVkX2V4dHJhX3N0YXRzKCZw cy0+a2V5LCBzaHN0YXRzLCBmcG91dCk7CiAJfQogCWRzaGFzaF9zZXFfdGVybSgmaHN0YXQpOwog CkBAIC0xNzM0LDYgKzE3ODksMTUgQEAgcGdzdGF0X3dyaXRlX3N0YXRzZmlsZSh2b2lkKQogCQkv KiBkdXJhYmxlX3JlbmFtZSBhbHJlYWR5IGVtaXR0ZWQgbG9nIG1lc3NhZ2UgKi8KIAkJdW5saW5r KHRtcGZpbGUpOwogCX0KKworCS8qIE5vdywgYWxsb3cga2luZHMgdG8gZmluYWxpemUgdGhlIHdy aXRlcyBmb3IgdGhlIGV4dHJhIGZpbGVzICovCisJZm9yIChQZ1N0YXRfS2luZCBraW5kID0gUEdT VEFUX0tJTkRfTUlOOyBraW5kIDw9IFBHU1RBVF9LSU5EX01BWDsga2luZCsrKQorCXsKKwkJY29u c3QgUGdTdGF0X0tpbmRJbmZvICpraW5kX2luZm8gPSBwZ3N0YXRfZ2V0X2tpbmRfaW5mbyhraW5k KTsKKworCQlpZiAoa2luZF9pbmZvICYmIGtpbmRfaW5mby0+ZW5kX2V4dHJhX3N0YXRzKQorCQkJ a2luZF9pbmZvLT5lbmRfZXh0cmFfc3RhdHMoU1RBVFNfV1JJVEUpOworCX0KIH0KIAogLyogaGVs cGVyIGZvciBwZ3N0YXRfcmVhZF9zdGF0c2ZpbGUoKSAqLwpAQCAtMTg3MSw2ICsxOTM1LDcgQEAg cGdzdGF0X3JlYWRfc3RhdHNmaWxlKHZvaWQpCiAJCQkJCVBnU3RhdF9IYXNoS2V5IGtleTsKIAkJ CQkJUGdTdGF0U2hhcmVkX0hhc2hFbnRyeSAqcDsKIAkJCQkJUGdTdGF0U2hhcmVkX0NvbW1vbiAq aGVhZGVyOworCQkJCQljb25zdCBQZ1N0YXRfS2luZEluZm8gKmtpbmRfaW5mbyA9IE5VTEw7CiAK IAkJCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIApAQCAtMTg5MSw3ICsxOTU2LDggQEAgcGdz dGF0X3JlYWRfc3RhdHNmaWxlKHZvaWQpCiAJCQkJCQkJZ290byBlcnJvcjsKIAkJCQkJCX0KIAot CQkJCQkJaWYgKCFwZ3N0YXRfZ2V0X2tpbmRfaW5mbyhrZXkua2luZCkpCisJCQkJCQlraW5kX2lu Zm8gPSBwZ3N0YXRfZ2V0X2tpbmRfaW5mbyhrZXkua2luZCk7CisJCQkJCQlpZiAoIWtpbmRfaW5m bykKIAkJCQkJCXsKIAkJCQkJCQllbG9nKFdBUk5JTkcsICJjb3VsZCBub3QgZmluZCBpbmZvcm1h dGlvbiBvZiBraW5kIGZvciBlbnRyeSAldS8ldS8lIiBQUkl1NjQgIiBvZiB0eXBlICVjIiwKIAkJ CQkJCQkJIGtleS5raW5kLCBrZXkuZGJvaWQsCkBAIC0xOTAyLDcgKzE5NjgsNiBAQCBwZ3N0YXRf cmVhZF9zdGF0c2ZpbGUodm9pZCkKIAkJCQkJZWxzZQogCQkJCQl7CiAJCQkJCQkvKiBzdGF0cyBl bnRyeSBpZGVudGlmaWVkIGJ5IG5hbWUgb24gZGlzayAoZS5nLiBzbG90cykgKi8KLQkJCQkJCWNv bnN0IFBnU3RhdF9LaW5kSW5mbyAqa2luZF9pbmZvID0gTlVMTDsKIAkJCQkJCVBnU3RhdF9LaW5k IGtpbmQ7CiAJCQkJCQlOYW1lRGF0YQluYW1lOwogCkBAIC0xOTk2LDYgKzIwNjEsMTYgQEAgcGdz dGF0X3JlYWRfc3RhdHNmaWxlKHZvaWQpCiAJCQkJCQlnb3RvIGVycm9yOwogCQkJCQl9CiAKKwkJ CQkJaWYgKGtpbmRfaW5mby0+ZnJvbV9zZXJpYWxpemVkX2V4dHJhX3N0YXRzKQorCQkJCQl7CisJ CQkJCQlpZiAoIWtpbmRfaW5mby0+ZnJvbV9zZXJpYWxpemVkX2V4dHJhX3N0YXRzKCZrZXksIGhl YWRlciwgZnBpbikpCisJCQkJCQl7CisJCQkJCQkJZWxvZyhXQVJOSU5HLCAiY291bGQgbm90IHJl YWQgZXh0cmEgc3RhdHMgZm9yIGVudHJ5ICV1LyV1LyUiIFBSSXU2NCwKKwkJCQkJCQkJIGtleS5r aW5kLCBrZXkuZGJvaWQsIGtleS5vYmppZCk7CisJCQkJCQkJZ290byBlcnJvcjsKKwkJCQkJCX0K KwkJCQkJfQorCiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCWNhc2UgUEdTVEFUX0ZJTEVfRU5UUllf RU5EOgpAQCAtMjAxOSwxMSArMjA5NCwyMSBAQCBwZ3N0YXRfcmVhZF9zdGF0c2ZpbGUodm9pZCkK IAl9CiAKIGRvbmU6CisJLyogRmlyc3QsIGNsZWFudXAgdGhlIG1haW4gc3RhdHMgZmlsZSwgUEdT VEFUX1NUQVRfUEVSTUFORU5UX0ZJTEVOQU1FICovCiAJRnJlZUZpbGUoZnBpbik7CiAKIAllbG9n KERFQlVHMiwgInJlbW92aW5nIHBlcm1hbmVudCBzdGF0cyBmaWxlIFwiJXNcIiIsIHN0YXRmaWxl KTsKIAl1bmxpbmsoc3RhdGZpbGUpOwogCisJLyogTGV0IGVhY2ggc3RhdHMga2luZCBydW4gaXRz IGNsZWFudXAgY2FsbGJhY2ssIGlmIGl0IHByb3ZpZGVzIG9uZSAqLworCWZvciAoUGdTdGF0X0tp bmQga2luZCA9IFBHU1RBVF9LSU5EX01JTjsga2luZCA8PSBQR1NUQVRfS0lORF9NQVg7IGtpbmQr KykKKwl7CisJCWNvbnN0IFBnU3RhdF9LaW5kSW5mbyAqa2luZF9pbmZvID0gcGdzdGF0X2dldF9r aW5kX2luZm8oa2luZCk7CisKKwkJaWYgKGtpbmRfaW5mbyAmJiBraW5kX2luZm8tPmVuZF9leHRy YV9zdGF0cykKKwkJCWtpbmRfaW5mby0+ZW5kX2V4dHJhX3N0YXRzKFNUQVRTX1JFQUQpOworCX0K KwogCXJldHVybjsKIAogZXJyb3I6CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wZ3N0 YXRfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9pbnRlcm5hbC5oCmluZGV4 IGNhMWJhNjQyMGNhLi40OGI0MDgxNjU3MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMv cGdzdGF0X2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdzdGF0X2ludGVybmFs LmgKQEAgLTYzLDYgKzYzLDIwIEBAIHR5cGVkZWYgc3RydWN0IFBnU3RhdF9IYXNoS2V5CiAJCQkJ CQkJCSAqIGlkZW50aWZpZXIuICovCiB9IFBnU3RhdF9IYXNoS2V5OwogCisvKgorICogVHJhY2tz IGlmIHRoZSBzdGF0cyBmaWxlIGlzIGJlaW5nIHJlYWQsIHdyaXR0ZW4gb3IgZGlzY2FyZGVkLgor ICoKKyAqIFRoZXNlIHN0YXRlcyBhbGxvdyBwbHVnaW5zIHRoYXQgY3JlYXRlIGV4dHJhIHN0YXRp c3RpY3MgZmlsZXMKKyAqIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBvcGVyYXRpb24gYW5kIHBl cmZvcm0gYW55IG5lY2Vzc2FyeQorICogZmlsZSBjbGVhbnVwLgorICovCit0eXBlZGVmIGVudW0g UGdTdGF0X1N0YXRzRmlsZU9wCit7CisJU1RBVFNfV1JJVEUsCisJU1RBVFNfUkVBRCwKKwlTVEFU U19ESVNDQVJELAorfQkJCVBnU3RhdF9TdGF0c0ZpbGVPcDsKKwogLyoKICAqIFBnU3RhdF9IYXNo S2V5IHNob3VsZCBub3QgaGF2ZSBhbnkgcGFkZGluZy4gIENoZWNraW5nIHRoYXQgdGhlIHN0cnVj dHVyZQogICogc2l6ZSBtYXRjaGVzIHdpdGggdGhlIHN1bSBvZiBlYWNoIGZpZWxkIGlzIGEgY2hl Y2sgc2ltcGxlIGVub3VnaCB0bwpAQCAtMzAzLDYgKzMxNywyOSBAQCB0eXBlZGVmIHN0cnVjdCBQ Z1N0YXRfS2luZEluZm8KIAkJCQkJCQkJCSAgIGNvbnN0IFBnU3RhdFNoYXJlZF9Db21tb24gKmhl YWRlciwgTmFtZURhdGEgKm5hbWUpOwogCWJvb2wJCSgqZnJvbV9zZXJpYWxpemVkX25hbWUpIChj b25zdCBOYW1lRGF0YSAqbmFtZSwgUGdTdGF0X0hhc2hLZXkgKmtleSk7CiAKKwkvKgorCSAqIE9w dGlvbmFsIGNhbGxiYWNrcyBmb3Iga2luZHMgdGhhdCB3cml0ZSBhZGRpdGlvbmFsIHBlci1lbnRy eSBkYXRhIHRvCisJICogdGhlIHN0YXRzIGZpbGUuICBJZiBhbnkgb2YgdGhlc2UgY2FsbGJhY2tz IGFyZSBwcm92aWRlZCwgYWxsIHRocmVlIG11c3QKKwkgKiBiZSBwcm92aWRlZCB0byBlbnN1cmUg dGhhdCB0aGUgcmVhZGVyIGNvbnN1bWVzIGV4YWN0bHkgdGhlIGRhdGEgd3JpdHRlbgorCSAqIGJ5 IHRoZSB3cml0ZXIuCisJICoKKwkgKiB0b19zZXJpYWxpemVkX2V4dHJhX3N0YXRzOiB3cml0ZSBl eHRyYSBkYXRhIGZvciBhbiBlbnRyeS4KKwkgKgorCSAqIGZyb21fc2VyaWFsaXplZF9leHRyYV9z dGF0czogcmVhZCB0aGUgZXh0cmEgZGF0YSBmb3IgYW4gZW50cnkuIFJldHVybnMKKwkgKiB0cnVl IG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIHJlYWQgZXJyb3IuCisJICoKKwkgKiBlbmRfZXh0cmFfc3Rh dHM6IGludm9rZWQgb25jZSBwZXIgb3BlcmF0aW9uIChyZWFkLCB3cml0ZSwgZGlzY2FyZCkKKwkg KiBhZnRlciBhbGwgZW50cmllcyBvZiB0aGlzIGtpbmQgaGF2ZSBiZWVuIHByb2Nlc3NlZC4KKwkg KgorCSAqIE5vdGU6IHN0YXRmaWxlIGlzIGEgcG9pbnRlciB0byB0aGUgbWFpbiBzdGF0cyBmaWxl LAorCSAqIFBHU1RBVF9TVEFUX1BFUk1BTkVOVF9GSUxFTkFNRS4KKwkgKi8KKwl2b2lkCQkoKnRv X3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHMpIChjb25zdCBQZ1N0YXRfSGFzaEtleSAqa2V5LAorCQkJ CQkJCQkJCQkgIGNvbnN0IFBnU3RhdFNoYXJlZF9Db21tb24gKmhlYWRlciwgRklMRSAqc3RhdGZp bGUpOworCWJvb2wJCSgqZnJvbV9zZXJpYWxpemVkX2V4dHJhX3N0YXRzKSAoY29uc3QgUGdTdGF0 X0hhc2hLZXkgKmtleSwKKwkJCQkJCQkJCQkJCWNvbnN0IFBnU3RhdFNoYXJlZF9Db21tb24gKmhl YWRlciwgRklMRSAqc3RhdGZpbGUpOworCXZvaWQJCSgqZW5kX2V4dHJhX3N0YXRzKSAoUGdTdGF0 X1N0YXRzRmlsZU9wIHN0YXR1cyk7CisKIAkvKgogCSAqIEZvciBmaXhlZC1udW1iZXJlZCBzdGF0 aXN0aWNzOiBJbml0aWFsaXplIHNoYXJlZCBtZW1vcnkgc3RhdGUuCiAJICoKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdC8wMDFfY3VzdG9tX3N0YXRzLnBs IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90LzAwMV9jdXN0b21fc3RhdHMu cGwKaW5kZXggZTUyODU5NWNmYjAuLmIzYjI1ODE5NDExIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3QvMDAxX2N1c3RvbV9zdGF0cy5wbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3QvMDAxX2N1c3RvbV9zdGF0cy5wbApAQCAt MjksMTMgKzI5LDEzIEBAICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShDUkVBVEUgRVhU RU5TSU9OIHRlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzKSk7CiAKICMgQ3JlYXRlIGVudHJpZXMgZm9y IHZhcmlhYmxlLXNpemVkIHN0YXRzLgogJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCXEo c2VsZWN0IHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9jcmVhdGUoJ2VudHJ5MScpKSk7CisJcShzZWxl Y3QgdGVzdF9jdXN0b21fc3RhdHNfdmFyX2NyZWF0ZSgnZW50cnkxJywgJ1Rlc3QgZW50cnkgMScp KSk7CiAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JcShzZWxlY3QgdGVzdF9jdXN0b21f c3RhdHNfdmFyX2NyZWF0ZSgnZW50cnkyJykpKTsKKwlxKHNlbGVjdCB0ZXN0X2N1c3RvbV9zdGF0 c192YXJfY3JlYXRlKCdlbnRyeTInLCAnVGVzdCBlbnRyeSAyJykpKTsKICRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKLQlxKHNlbGVjdCB0ZXN0X2N1c3RvbV9zdGF0c192YXJfY3JlYXRlKCdl bnRyeTMnKSkpOworCXEoc2VsZWN0IHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9jcmVhdGUoJ2VudHJ5 MycsICdUZXN0IGVudHJ5IDMnKSkpOwogJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCXEo c2VsZWN0IHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9jcmVhdGUoJ2VudHJ5NCcpKSk7CisJcShzZWxl Y3QgdGVzdF9jdXN0b21fc3RhdHNfdmFyX2NyZWF0ZSgnZW50cnk0JywgJ1Rlc3QgZW50cnkgNCcp KSk7CiAKICMgVXBkYXRlIGNvdW50ZXJzOiBlbnRyeTE9MiwgZW50cnkyPTMsIGVudHJ5Mz0yLCBl bnRyeTQ9MywgZml4ZWQ9MwogJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLApAQCAtNjUsMTYg KzY1LDIwIEBAICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgdGVzdF9jdXN0 b21fc3RhdHNfZml4ZWRfdXBkYXRlKCkpKTsKICMgVGVzdCBkYXRhIHJlcG9ydHMuCiBteSAkcmVz dWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCXEoc2VsZWN0ICogZnJvbSB0ZXN0 X2N1c3RvbV9zdGF0c192YXJfcmVwb3J0KCdlbnRyeTEnKSkpOwotaXMoJHJlc3VsdCwgImVudHJ5 MXwyIiwgInJlcG9ydCBmb3IgdmFyaWFibGUtc2l6ZWQgZGF0YSBvZiBlbnRyeTEiKTsKK2lzKCRy ZXN1bHQsICJlbnRyeTF8MnxUZXN0IGVudHJ5IDEiLCAicmVwb3J0IGZvciB2YXJpYWJsZS1zaXpl ZCBkYXRhIG9mIGVudHJ5MSIpOworCiAkcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAogCXEoc2VsZWN0ICogZnJvbSB0ZXN0X2N1c3RvbV9zdGF0c192YXJfcmVwb3J0KCdlbnRy eTInKSkpOwotaXMoJHJlc3VsdCwgImVudHJ5MnwzIiwgInJlcG9ydCBmb3IgdmFyaWFibGUtc2l6 ZWQgZGF0YSBvZiBlbnRyeTIiKTsKK2lzKCRyZXN1bHQsICJlbnRyeTJ8M3xUZXN0IGVudHJ5IDIi LCAicmVwb3J0IGZvciB2YXJpYWJsZS1zaXplZCBkYXRhIG9mIGVudHJ5MiIpOworCiAkcmVzdWx0 ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCXEoc2VsZWN0ICogZnJvbSB0ZXN0X2N1 c3RvbV9zdGF0c192YXJfcmVwb3J0KCdlbnRyeTMnKSkpOwotaXMoJHJlc3VsdCwgImVudHJ5M3wy IiwgInJlcG9ydCBmb3IgdmFyaWFibGUtc2l6ZWQgZGF0YSBvZiBlbnRyeTMiKTsKK2lzKCRyZXN1 bHQsICJlbnRyeTN8MnxUZXN0IGVudHJ5IDMiLCAicmVwb3J0IGZvciB2YXJpYWJsZS1zaXplZCBk YXRhIG9mIGVudHJ5MyIpOworCiAkcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LAogCXEoc2VsZWN0ICogZnJvbSB0ZXN0X2N1c3RvbV9zdGF0c192YXJfcmVwb3J0KCdlbnRyeTQn KSkpOwotaXMoJHJlc3VsdCwgImVudHJ5NHwzIiwgInJlcG9ydCBmb3IgdmFyaWFibGUtc2l6ZWQg ZGF0YSBvZiBlbnRyeTQiKTsKK2lzKCRyZXN1bHQsICJlbnRyeTR8M3xUZXN0IGVudHJ5IDQiLCAi cmVwb3J0IGZvciB2YXJpYWJsZS1zaXplZCBkYXRhIG9mIGVudHJ5NCIpOworCiAkcmVzdWx0ID0g JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCXEoc2VsZWN0ICogZnJvbSB0ZXN0X2N1c3Rv bV9zdGF0c19maXhlZF9yZXBvcnQoKSkpOwogaXMoJHJlc3VsdCwgIjN8IiwgInJlcG9ydCBmb3Ig Zml4ZWQtc2l6ZWQgc3RhdHMiKTsKQEAgLTk3LDcgKzEwMSwxMSBAQCAkbm9kZS0+c3RhcnQoKTsK IAogJHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAlxKHNlbGVjdCAqIGZy b20gdGVzdF9jdXN0b21fc3RhdHNfdmFyX3JlcG9ydCgnZW50cnkxJykpKTsKLWlzKCRyZXN1bHQs ICJlbnRyeTF8MiIsICJ2YXJpYWJsZS1zaXplZCBzdGF0cyBwZXJzaXN0IGFmdGVyIGNsZWFuIHJl c3RhcnQiKTsKK2lzKCRyZXN1bHQsICJlbnRyeTF8MnxUZXN0IGVudHJ5IDEiLCAidmFyaWFibGUt c2l6ZWQgc3RhdHMgcGVyc2lzdCBhZnRlciBjbGVhbiByZXN0YXJ0Iik7CisKKyRyZXN1bHQgPSAk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2VsZWN0ICogZnJvbSB0ZXN0X2N1c3RvbV9z dGF0c192YXJfcmVwb3J0KCdlbnRyeTInKSkpOworaXMoJHJlc3VsdCwgImVudHJ5MnwzfFRlc3Qg ZW50cnkgMiIsICJ2YXJpYWJsZS1zaXplZCBzdGF0cyBwZXJzaXN0IGFmdGVyIGNsZWFuIHJlc3Rh cnQiKTsKKwogJHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAlxKHNlbGVj dCAqIGZyb20gdGVzdF9jdXN0b21fc3RhdHNfZml4ZWRfcmVwb3J0KCkpKTsKIGlzKCRyZXN1bHQs ICIzfCIsICJmaXhlZC1zaXplZCBzdGF0cyBwZXJzaXN0IGFmdGVyIGNsZWFuIHJlc3RhcnQiKTsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0 b21fdmFyX3N0YXRzLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0 cy90ZXN0X2N1c3RvbV92YXJfc3RhdHMtLTEuMC5zcWwKaW5kZXggZDVmODJiNWQ1NDYuLjVlZDhj ZmMyZGNmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rl c3RfY3VzdG9tX3Zhcl9zdGF0cy0tMS4wLnNxbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf Y3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cy0tMS4wLnNxbApAQCAtMyw3ICszLDcg QEAKIC0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFu IHZpYSBDUkVBVEUgRVhURU5TSU9OCiBcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gdGVzdF9j dXN0b21fdmFyX3N0YXRzIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKIAotQ1JFQVRFIEZVTkNU SU9OIHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9jcmVhdGUoSU4gbmFtZSBURVhUKQorQ1JFQVRFIEZV TkNUSU9OIHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9jcmVhdGUoSU4gbmFtZSBURVhULCBpbiBkZXNj cmlwdGlvbiBURVhUKQogUkVUVVJOUyB2b2lkCiBBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Rlc3Rf Y3VzdG9tX3N0YXRzX3Zhcl9jcmVhdGUnCiBMQU5HVUFHRSBDIFNUUklDVCBQQVJBTExFTCBVTlNB RkU7CkBAIC0xOCw4ICsxOCw5IEBAIFJFVFVSTlMgdm9pZAogQVMgJ01PRFVMRV9QQVRITkFNRScs ICd0ZXN0X2N1c3RvbV9zdGF0c192YXJfZHJvcCcKIExBTkdVQUdFIEMgU1RSSUNUIFBBUkFMTEVM IFVOU0FGRTsKIAotCi1DUkVBVEUgRlVOQ1RJT04gdGVzdF9jdXN0b21fc3RhdHNfdmFyX3JlcG9y dChJTk9VVCBuYW1lIFRFWFQsIE9VVCBjYWxscyBCSUdJTlQpCitDUkVBVEUgRlVOQ1RJT04gdGVz dF9jdXN0b21fc3RhdHNfdmFyX3JlcG9ydChJTk9VVCBuYW1lIFRFWFQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVQgY2FsbHMgQklHSU5ULAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUIGRlc2NyaXB0aW9uIFRF WFQpCiBSRVRVUk5TIFNFVE9GIHJlY29yZAogQVMgJ01PRFVMRV9QQVRITkFNRScsICd0ZXN0X2N1 c3RvbV9zdGF0c192YXJfcmVwb3J0JwogTEFOR1VBR0UgQyBTVFJJQ1QgUEFSQUxMRUwgVU5TQUZF OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1 c3RvbV92YXJfc3RhdHMuYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVz dF9jdXN0b21fdmFyX3N0YXRzLmMKaW5kZXggZDQ5MDVhYjRlZTkuLmRhNTdmYjE5MmFiIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX3Zh cl9zdGF0cy5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9j dXN0b21fdmFyX3N0YXRzLmMKQEAgLTE0LDYgKzE0LDcgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9o YXNoZm4uaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc21fcmVn aXN0cnkuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3Bn c3RhdF9pbnRlcm5hbC5oIgogCkBAIC0zMiw2ICszMyw5IEBAIFBHX01PRFVMRV9NQUdJQ19FWFQo CiAgKi8KICNkZWZpbmUgUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fVkFSX1NUQVRTIDI1CiAKKy8q IEZpbGUgcGF0aHMgZm9yIGV4dHJhIHN0YXRpc3RpY3MgZGF0YSBzZXJpYWxpemF0aW9uICovCisj ZGVmaW5lIFRFU1RfQ1VTVE9NX0VYVFJBX0RBVEFfREVTQyAicGdfc3RhdC90ZXN0X2N1c3RvbV92 YXJfc3RhdHNfZGVzYy5zdGF0cyIKKwogLyoKICAqIEhhc2ggc3RhdGlzdGljIG5hbWUgdG8gZ2Vu ZXJhdGUgZW50cnkgaW5kZXggZm9yIHBnc3RhdCBsb29rdXAuCiAgKi8KQEAgLTUzLDggKzU3LDIz IEBAIHR5cGVkZWYgc3RydWN0IFBnU3RhdFNoYXJlZF9DdXN0b21WYXJFbnRyeQogewogCVBnU3Rh dFNoYXJlZF9Db21tb24gaGVhZGVyOyAvKiBzdGFuZGFyZCBwZ3N0YXQgZW50cnkgaGVhZGVyICov CiAJUGdTdGF0X1N0YXRDdXN0b21WYXJFbnRyeSBzdGF0czsJLyogY3VzdG9tIHN0YXRpc3RpY3Mg ZGF0YSAqLworCWRzYV9wb2ludGVyIGRlc2NyaXB0aW9uOwkvKiBleHRyYSBzdGF0aXN0aWNzIGRh dGEgKi8KIH0gUGdTdGF0U2hhcmVkX0N1c3RvbVZhckVudHJ5OwogCisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKiBHbG9iYWwgVmFyaWFibGVzCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyog RmlsZSBoYW5kbGUgZm9yIGV4dHJhIHN0YXRpc3RpY3MgZGF0YSBzZXJpYWxpemF0aW9uICovCitz dGF0aWMgRklMRSAqZmRfZGVzY3JpcHRpb24gPSBOVUxMOworCisvKiBDdXJyZW50IHdyaXRlIG9m ZnNldCBpbiBmZF9kZXNjcmlwdGlvbiBmaWxlICovCitzdGF0aWMgbG9uZyBmZF9kZXNjcmlwdGlv bl9vZmZzZXQgPSAwOworCisvKiBEU0EgYXJlYSBmb3Igc3RvcmluZyB2YXJpYWJsZS1sZW5ndGgg ZGVzY3JpcHRpb24gc3RyaW5ncyAqLworZHNhX2FyZWEgICAqY3VzdG9tX3N0YXRzX2Rlc2NyaXB0 aW9uX2RzYSA9IE5VTEw7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uIHByb3Rv dHlwZXMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY0LDYgKzgzLDE3IEBAIHR5cGVkZWYgc3Ry dWN0IFBnU3RhdFNoYXJlZF9DdXN0b21WYXJFbnRyeQogc3RhdGljIGJvb2wgdGVzdF9jdXN0b21f c3RhdHNfdmFyX2ZsdXNoX3BlbmRpbmdfY2IoUGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWYsCiAJ CQkJCQkJCQkJCQkgICBib29sIG5vd2FpdCk7CiAKKy8qIFNlcmlhbGl6YXRpb24gY2FsbGJhY2s6 IHNlcmlhbGl6ZSBleHRyYSBzdGF0aXN0aWNzIGRhdGEgKi8KK3N0YXRpYyB2b2lkIHRlc3RfY3Vz dG9tX3Zhcl9zdGF0c19zZXJpYWxpemUoY29uc3QgUGdTdGF0X0hhc2hLZXkgKmtleSwKKwkJCQkJ CQkJCQkJY29uc3QgUGdTdGF0U2hhcmVkX0NvbW1vbiAqaGVhZGVyLCBGSUxFICpzdGF0ZmlsZSk7 CisKKy8qIERlc2VyaWFsaXphdGlvbiBjYWxsYmFjazogZGVzZXJpYWxpemUgZXh0cmEgc3RhdGlz dGljcyBkYXRhICovCitzdGF0aWMgYm9vbCB0ZXN0X2N1c3RvbV92YXJfc3RhdHNfZGVzZXJpYWxp emUoY29uc3QgUGdTdGF0X0hhc2hLZXkgKmtleSwKKwkJCQkJCQkJCQkJICBjb25zdCBQZ1N0YXRT aGFyZWRfQ29tbW9uICpoZWFkZXIsIEZJTEUgKnN0YXRmaWxlKTsKKworLyogQ2xlYW51cCBjYWxs YmFjazogZW5kIG9mIHN0YXRpc3RpY3MgZmlsZSBvcGVyYXRpb25zICovCitzdGF0aWMgdm9pZCB0 ZXN0X2N1c3RvbV92YXJfc3RhdHNfZmlsZV9jbGVhbnVwKFBnU3RhdF9TdGF0c0ZpbGVPcCBzdGF0 dXMpOworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDdXN0b20ga2luZCBjb25maWd1cmF0aW9u CiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04MCw2ICsxMTAsOSBAQCBzdGF0aWMgY29uc3QgUGdT dGF0X0tpbmRJbmZvIGN1c3RvbV9zdGF0cyA9IHsKIAkuc2hhcmVkX2RhdGFfbGVuID0gc2l6ZW9m KCgoUGdTdGF0U2hhcmVkX0N1c3RvbVZhckVudHJ5ICopIDApLT5zdGF0cyksCiAJLnBlbmRpbmdf c2l6ZSA9IHNpemVvZihQZ1N0YXRfU3RhdEN1c3RvbVZhckVudHJ5KSwKIAkuZmx1c2hfcGVuZGlu Z19jYiA9IHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9mbHVzaF9wZW5kaW5nX2NiLAorCS50b19zZXJp YWxpemVkX2V4dHJhX3N0YXRzID0gdGVzdF9jdXN0b21fdmFyX3N0YXRzX3NlcmlhbGl6ZSwKKwku ZnJvbV9zZXJpYWxpemVkX2V4dHJhX3N0YXRzID0gdGVzdF9jdXN0b21fdmFyX3N0YXRzX2Rlc2Vy aWFsaXplLAorCS5lbmRfZXh0cmFfc3RhdHMgPSB0ZXN0X2N1c3RvbV92YXJfc3RhdHNfZmlsZV9j bGVhbnVwLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTMyLDYgKzE2NSwyMzIgQEAg dGVzdF9jdXN0b21fc3RhdHNfdmFyX2ZsdXNoX3BlbmRpbmdfY2IoUGdTdGF0X0VudHJ5UmVmICpl bnRyeV9yZWYsIGJvb2wgbm93YWl0KQogCXJldHVybiB0cnVlOwogfQogCisvKgorICogdGVzdF9j dXN0b21fdmFyX3N0YXRzX3NlcmlhbGl6ZSgpIC0KKyAqCisgKiBTZXJpYWxpemUgZXh0cmEgZGF0 YSAoZGVzY3JpcHRpb25zKSBmb3IgY3VzdG9tIHN0YXRpc3RpY3MgZW50cmllcyB0bworICogdGhl IHN0YXRpc3RpY3MgZmlsZS4gQ2FsbGVkIGR1cmluZyBzdGF0aXN0aWNzIGZpbGUgd3JpdGluZyB0 byBwcmVzZXJ2ZQorICogZGVzY3JpcHRpb24gc3RyaW5ncyBhY3Jvc3MgcmVzdGFydHMuCisgKi8K K3N0YXRpYyB2b2lkCit0ZXN0X2N1c3RvbV92YXJfc3RhdHNfc2VyaWFsaXplKGNvbnN0IFBnU3Rh dF9IYXNoS2V5ICprZXksCisJCQkJCQkJCWNvbnN0IFBnU3RhdFNoYXJlZF9Db21tb24gKmhlYWRl ciwgRklMRSAqc3RhdGZpbGUpCit7CisJY2hhcgkgICAqZGVzY3JpcHRpb247CisJc2l6ZV90CQls ZW47CisJbG9uZwkJb2Zmc2V0OworCVBnU3RhdFNoYXJlZF9DdXN0b21WYXJFbnRyeSAqZW50cnkg PSAoUGdTdGF0U2hhcmVkX0N1c3RvbVZhckVudHJ5ICopIGhlYWRlcjsKKwlib29sCQlmb3VuZDsK KworCWlmICghY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSkKKwkJY3VzdG9tX3N0YXRzX2Rl c2NyaXB0aW9uX2RzYSA9IEdldE5hbWVkRFNBKCJ0ZXN0X2N1c3RvbV9zdGF0X2RzYSIsICZmb3Vu ZCk7CisKKwkvKiBPcGVuIHN0YXRpc3RpY3MgZmlsZSBmb3Igd3JpdGluZyBpZiBub3QgYWxyZWFk eSBvcGVuICovCisJaWYgKCFmZF9kZXNjcmlwdGlvbikKKwl7CisJCWZkX2Rlc2NyaXB0aW9uID0g QWxsb2NhdGVGaWxlKFRFU1RfQ1VTVE9NX0VYVFJBX0RBVEFfREVTQywgUEdfQklOQVJZX1cpOwor CQlpZiAoZmRfZGVzY3JpcHRpb24gPT0gTlVMTCkKKwkJeworCQkJZXJlcG9ydChMT0csCisJCQkJ CShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgb3Bl biBzdGF0aXN0aWNzIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nOiAlbSIsCisJCQkJCQkJVEVTVF9D VVNUT01fRVhUUkFfREFUQV9ERVNDKSkpOworCQkJbGVuID0gMDsKKwkJCW9mZnNldCA9IDA7CisJ CQlmd3JpdGUoJmxlbiwgc2l6ZW9mKGxlbiksIDEsIHN0YXRmaWxlKTsKKwkJCWZ3cml0ZSgmb2Zm c2V0LCBzaXplb2Yob2Zmc2V0KSwgMSwgc3RhdGZpbGUpOworCQkJcmV0dXJuOworCQl9CisJCWZk X2Rlc2NyaXB0aW9uX29mZnNldCA9IDA7CisJfQorCisJLyogSGFuZGxlIGVudHJpZXMgd2l0aG91 dCBkZXNjcmlwdGlvbnMgKi8KKwlpZiAoIURzYVBvaW50ZXJJc1ZhbGlkKGVudHJ5LT5kZXNjcmlw dGlvbikgfHwgIWN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EpCisJeworCQlsZW4gPSAwOwor CQlvZmZzZXQgPSAwOworCQlmd3JpdGUoJmxlbiwgc2l6ZW9mKGxlbiksIDEsIHN0YXRmaWxlKTsK KwkJZndyaXRlKCZvZmZzZXQsIHNpemVvZihvZmZzZXQpLCAxLCBzdGF0ZmlsZSk7CisJCXJldHVy bjsKKwl9CisKKwkvKiBHZXQgY3VycmVudCBvZmZzZXQgaW4gZmRfZGVzY3JpcHRpb24gKi8KKwlv ZmZzZXQgPSBmZF9kZXNjcmlwdGlvbl9vZmZzZXQ7CisKKwkvKiBSZXRyaWV2ZSBkZXNjcmlwdGlv biBmcm9tIERTQSBhbmQgd3JpdGUgdG8gZmRfZGVzY3JpcHRpb24gKi8KKwlkZXNjcmlwdGlvbiA9 IGRzYV9nZXRfYWRkcmVzcyhjdXN0b21fc3RhdHNfZGVzY3JpcHRpb25fZHNhLCBlbnRyeS0+ZGVz Y3JpcHRpb24pOworCWxlbiA9IHN0cmxlbihkZXNjcmlwdGlvbikgKyAxOworCWZ3cml0ZShkZXNj cmlwdGlvbiwgMSwgbGVuLCBmZF9kZXNjcmlwdGlvbik7CisJZmRfZGVzY3JpcHRpb25fb2Zmc2V0 ICs9IGxlbjsKKworCS8qIFdyaXRlIGxlbmd0aCBhbmQgb2Zmc2V0IHRvIHN0YXRmaWxlICovCisJ ZndyaXRlKCZsZW4sIHNpemVvZihsZW4pLCAxLCBzdGF0ZmlsZSk7CisJZndyaXRlKCZvZmZzZXQs IHNpemVvZihvZmZzZXQpLCAxLCBzdGF0ZmlsZSk7Cit9CisKKy8qCisgKiB0ZXN0X2N1c3RvbV92 YXJfc3RhdHNfZGVzZXJpYWxpemUoKSAtCisgKgorICogRGVzZXJpYWxpemUgZXh0cmEgZGF0YSAo ZGVzY3JpcHRpb25zKSBmb3IgY3VzdG9tIHN0YXRpc3RpY3MgZW50cmllcyBmcm9tCisgKiB0aGUg c3RhdGlzdGljcyBmaWxlLiBDYWxsZWQgZHVyaW5nIHN0YXRpc3RpY3MgZmlsZSByZWFkaW5nIHRv IHJlc3RvcmUKKyAqIGRlc2NyaXB0aW9uIHN0cmluZ3MgYWZ0ZXIgYSByZXN0YXJ0LgorICovCitz dGF0aWMgYm9vbAordGVzdF9jdXN0b21fdmFyX3N0YXRzX2Rlc2VyaWFsaXplKGNvbnN0IFBnU3Rh dF9IYXNoS2V5ICprZXksCisJCQkJCQkJCSAgY29uc3QgUGdTdGF0U2hhcmVkX0NvbW1vbiAqaGVh ZGVyLCBGSUxFICpzdGF0ZmlsZSkKK3sKKwlQZ1N0YXRTaGFyZWRfQ3VzdG9tVmFyRW50cnkgKmVu dHJ5OworCWRzYV9wb2ludGVyIGRwOworCXNpemVfdAkJbGVuOworCWxvbmcJCW9mZnNldDsKKwlj aGFyCSAgICpidWZmZXI7CisJYm9vbAkJZm91bmQ7CisKKwkvKiBSZWFkIGxlbmd0aCBhbmQgb2Zm c2V0IGZyb20gc3RhdGZpbGUgKi8KKwlpZiAoZnJlYWQoJmxlbiwgc2l6ZW9mKGxlbiksIDEsIHN0 YXRmaWxlKSAhPSAxIHx8CisJCWZyZWFkKCZvZmZzZXQsIHNpemVvZihvZmZzZXQpLCAxLCBzdGF0 ZmlsZSkgIT0gMSkKKwl7CisJCWVsb2coV0FSTklORywgImZhaWxlZCB0byByZWFkIGRlc2NyaXB0 aW9uIG1ldGFkYXRhIGZyb20gc3RhdGlzdGljcyBmaWxlIik7CisJCXJldHVybiBmYWxzZTsKKwl9 CisKKwllbnRyeSA9IChQZ1N0YXRTaGFyZWRfQ3VzdG9tVmFyRW50cnkgKikgaGVhZGVyOworCisJ LyogSGFuZGxlIGVtcHR5IGRlc2NyaXB0aW9ucyAqLworCWlmIChsZW4gPT0gMCkKKwl7CisJCWVu dHJ5LT5kZXNjcmlwdGlvbiA9IEludmFsaWREc2FQb2ludGVyOworCQlyZXR1cm4gdHJ1ZTsKKwl9 CisKKwkvKiBJbml0aWFsaXplIERTQSBpZiBuZWVkZWQgKi8KKwlpZiAoIWN1c3RvbV9zdGF0c19k ZXNjcmlwdGlvbl9kc2EpCisJCWN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EgPSBHZXROYW1l ZERTQSgidGVzdF9jdXN0b21fc3RhdF9kc2EiLCAmZm91bmQpOworCisJaWYgKCFjdXN0b21fc3Rh dHNfZGVzY3JpcHRpb25fZHNhKQorCXsKKwkJZWxvZyhXQVJOSU5HLCAiY291bGQgbm90IGFjY2Vz cyBEU0EgZm9yIGN1c3RvbSBzdGF0aXN0aWNzIGRlc2NyaXB0aW9ucyIpOworCQlyZXR1cm4gZmFs c2U7CisJfQorCisJLyogT3BlbiBzdGF0aXN0aWNzIGZpbGUgZm9yIHJlYWRpbmcgaWYgbm90IGFs cmVhZHkgb3BlbiAqLworCWlmICghZmRfZGVzY3JpcHRpb24pCisJeworCQlmZF9kZXNjcmlwdGlv biA9IEFsbG9jYXRlRmlsZShURVNUX0NVU1RPTV9FWFRSQV9EQVRBX0RFU0MsIFBHX0JJTkFSWV9S KTsKKwkJaWYgKGZkX2Rlc2NyaXB0aW9uID09IE5VTEwpCisJCXsKKwkJCWlmIChlcnJubyAhPSBF Tk9FTlQpCisJCQkJZXJlcG9ydChMT0csCisJCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3Mo KSwKKwkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIHN0YXRpc3RpY3MgZmlsZSBcIiVzXCIg Zm9yIHJlYWRpbmc6ICVtIiwKKwkJCQkJCQkJVEVTVF9DVVNUT01fRVhUUkFfREFUQV9ERVNDKSkp OworCQkJcGdzdGF0X3Jlc2V0X29mX2tpbmQoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fVkFSX1NU QVRTKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qIFNlZWsgdG8gdGhlIG9mZnNl dCBhbmQgcmVhZCBkZXNjcmlwdGlvbiAqLworCWlmIChmc2VlayhmZF9kZXNjcmlwdGlvbiwgb2Zm c2V0LCBTRUVLX1NFVCkgIT0gMCkKKwl7CisJCWVsb2coV0FSTklORywgImZhaWxlZCB0byBzZWVr IHRvIG9mZnNldCAlbGQgaW4gZGVzY3JpcHRpb24gZmlsZSIsIG9mZnNldCk7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwlidWZmZXIgPSBwYWxsb2MobGVuKTsKKwlpZiAoZnJlYWQoYnVmZmVyLCAx LCBsZW4sIGZkX2Rlc2NyaXB0aW9uKSAhPSBsZW4pCisJeworCQlwZnJlZShidWZmZXIpOworCQll bG9nKFdBUk5JTkcsICJmYWlsZWQgdG8gcmVhZCBkZXNjcmlwdGlvbiBmcm9tIGZpbGUiKTsKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCS8qIEFsbG9jYXRlIHNwYWNlIGluIERTQSBhbmQgY29weSB0 aGUgZGVzY3JpcHRpb24gKi8KKwlkcCA9IGRzYV9hbGxvY2F0ZShjdXN0b21fc3RhdHNfZGVzY3Jp cHRpb25fZHNhLCBsZW4pOworCW1lbWNweShkc2FfZ2V0X2FkZHJlc3MoY3VzdG9tX3N0YXRzX2Rl c2NyaXB0aW9uX2RzYSwgZHApLCBidWZmZXIsIGxlbik7CisJZW50cnktPmRlc2NyaXB0aW9uID0g ZHA7CisKKwlwZnJlZShidWZmZXIpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiB0ZXN0 X2N1c3RvbV92YXJfc3RhdHNfZmlsZV9jbGVhbnVwKCkgLQorICoKKyAqIENsZWFudXAgZnVuY3Rp b24gY2FsbGVkIGF0IHRoZSBlbmQgb2Ygc3RhdGlzdGljcyBmaWxlIG9wZXJhdGlvbnMuCisgKiBI YW5kbGVzIGNsb3NpbmcgZmlsZXMgYW5kIGNsZWFudXAgYmFzZWQgb24gdGhlIG9wZXJhdGlvbiB0 eXBlLgorICovCitzdGF0aWMgdm9pZAordGVzdF9jdXN0b21fdmFyX3N0YXRzX2ZpbGVfY2xlYW51 cChQZ1N0YXRfU3RhdHNGaWxlT3Agc3RhdHVzKQoreworCXN3aXRjaCAoc3RhdHVzKQorCXsKKwkJ Y2FzZSBTVEFUU19XUklURToKKwkJCWlmICghZmRfZGVzY3JpcHRpb24pCisJCQkJcmV0dXJuOwor CisJCQlmZF9kZXNjcmlwdGlvbl9vZmZzZXQgPSAwOworCisJCQkvKiBDaGVjayBmb3Igd3JpdGUg ZXJyb3JzIGFuZCBjbGVhbnVwIGlmIG5lY2Vzc2FyeSAqLworCQkJaWYgKGZlcnJvcihmZF9kZXNj cmlwdGlvbikpCisJCQl7CisJCQkJZXJlcG9ydChMT0csCisJCQkJCQkoZXJyY29kZV9mb3JfZmls ZV9hY2Nlc3MoKSwKKwkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSBzdGF0aXN0aWNzIGZp bGUgXCIlc1wiOiAlbSIsCisJCQkJCQkJCVRFU1RfQ1VTVE9NX0VYVFJBX0RBVEFfREVTQykpKTsK KwkJCQlGcmVlRmlsZShmZF9kZXNjcmlwdGlvbik7CisJCQkJdW5saW5rKFRFU1RfQ1VTVE9NX0VY VFJBX0RBVEFfREVTQyk7CisJCQl9CisJCQllbHNlIGlmIChGcmVlRmlsZShmZF9kZXNjcmlwdGlv bikgPCAwKQorCQkJeworCQkJCWVyZXBvcnQoTE9HLAorCQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVf YWNjZXNzKCksCisJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY2xvc2Ugc3RhdGlzdGljcyBmaWxl IFwiJXNcIjogJW0iLAorCQkJCQkJCQlURVNUX0NVU1RPTV9FWFRSQV9EQVRBX0RFU0MpKSk7CisJ CQkJdW5saW5rKFRFU1RfQ1VTVE9NX0VYVFJBX0RBVEFfREVTQyk7CisJCQl9CisJCQlicmVhazsK KworCQljYXNlIFNUQVRTX1JFQUQ6CisJCQlpZiAoZmRfZGVzY3JpcHRpb24pCisJCQkJRnJlZUZp bGUoZmRfZGVzY3JpcHRpb24pOworCisJCQkvKiBSZW1vdmUgdGhlIHRlbXBvcmFyeSBzdGF0aXN0 aWNzIGZpbGUgYWZ0ZXIgcmVhZGluZyAqLworCQkJZWxvZyhERUJVRzIsICJyZW1vdmluZyBzdGF0 aXN0aWNzIGZpbGUgXCIlc1wiIiwgVEVTVF9DVVNUT01fRVhUUkFfREFUQV9ERVNDKTsKKwkJCXVu bGluayhURVNUX0NVU1RPTV9FWFRSQV9EQVRBX0RFU0MpOworCQkJYnJlYWs7CisKKwkJY2FzZSBT VEFUU19ESVNDQVJEOgorCQkJeworCQkJCWludAkJCXJldDsKKworCQkJCS8qIEF0dGVtcHQgdG8g cmVtb3ZlIHRoZSBzdGF0aXN0aWNzIGZpbGUgKi8KKwkJCQlyZXQgPSB1bmxpbmsoVEVTVF9DVVNU T01fRVhUUkFfREFUQV9ERVNDKTsKKwkJCQlpZiAocmV0ICE9IDApCisJCQkJeworCQkJCQlpZiAo ZXJybm8gPT0gRU5PRU5UKQorCQkJCQkJZWxvZyhMT0csCisJCQkJCQkJICJkaWRuJ3QgbmVlZCB0 byB1bmxpbmsgcGVybWFuZW50IHN0YXRzIGZpbGUgXCIlc1wiIC0gZGlkbid0IGV4aXN0IiwKKwkJ CQkJCQkgVEVTVF9DVVNUT01fRVhUUkFfREFUQV9ERVNDKTsKKwkJCQkJZWxzZQorCQkJCQkJZXJl cG9ydChMT0csCisJCQkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkJCQkg ZXJybXNnKCJjb3VsZCBub3QgdW5saW5rIHBlcm1hbmVudCBzdGF0aXN0aWNzIGZpbGUgXCIlc1wi OiAlbSIsCisJCQkJCQkJCQkJVEVTVF9DVVNUT01fRVhUUkFfREFUQV9ERVNDKSkpOworCQkJCX0K KwkJCQllbHNlCisJCQkJeworCQkJCQllcmVwb3J0KExPRywKKwkJCQkJCQkoZXJybXNnX2ludGVy bmFsKCJ1bmxpbmtlZCBwZXJtYW5lbnQgc3RhdGlzdGljcyBmaWxlIFwiJXNcIiIsCisJCQkJCQkJ CQkJCSBURVNUX0NVU1RPTV9FWFRSQV9EQVRBX0RFU0MpKSk7CisJCQkJfQorCQkJfQorCQkJYnJl YWs7CisJfQorCisJZmRfZGVzY3JpcHRpb24gPSBOVUxMOworfQorCiAvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgKiBIZWxwZXIgZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjIsOCAr NDIxLDcgQEAgdGVzdF9jdXN0b21fc3RhdHNfdmFyX2ZldGNoX2VudHJ5KGNvbnN0IGNoYXIgKnN0 YXRfbmFtZSkKICAqIHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9jcmVhdGUKICAqCQlDcmVhdGUgbmV3 IGN1c3RvbSBzdGF0aXN0aWMgZW50cnkKICAqCi0gKiBJbml0aWFsaXplcyBhIHplcm8tdmFsdWVk IHN0YXRpc3RpY3MgZW50cnkgaW4gc2hhcmVkIG1lbW9yeS4KLSAqIFZhbGlkYXRlcyBuYW1lIGxl bmd0aCBhZ2FpbnN0IE5BTUVEQVRBTEVOIGxpbWl0LgorICogSW5pdGlhbGl6ZXMgYSBzdGF0aXN0 aWNzIGVudHJ5IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRlc2NyaXB0aW9uLgogICovCiBQR19G VU5DVElPTl9JTkZPX1YxKHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9jcmVhdGUpOwogRGF0dW0KQEAg LTE3Miw2ICs0MzAsOSBAQCB0ZXN0X2N1c3RvbV9zdGF0c192YXJfY3JlYXRlKFBHX0ZVTkNUSU9O X0FSR1MpCiAJUGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWY7CiAJUGdTdGF0U2hhcmVkX0N1c3Rv bVZhckVudHJ5ICpzaGFyZWRfZW50cnk7CiAJY2hhcgkgICAqc3RhdF9uYW1lID0gdGV4dF90b19j c3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwljaGFyCSAgICpkZXNjcmlwdGlvbiA9IHRl eHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgxKSk7CisJZHNhX3BvaW50ZXIgZHAgPSBJ bnZhbGlkRHNhUG9pbnRlcjsKKwlib29sCQlmb3VuZDsKIAogCS8qIFZhbGlkYXRlIG5hbWUgbGVu Z3RoIGZpcnN0ICovCiAJaWYgKHN0cmxlbihzdGF0X25hbWUpID49IE5BTUVEQVRBTEVOKQpAQCAt MTgwLDYgKzQ0MSwyMCBAQCB0ZXN0X2N1c3RvbV9zdGF0c192YXJfY3JlYXRlKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCQkJIGVycm1zZygiY3VzdG9tIHN0YXRpc3RpYyBuYW1lIFwiJXNcIiBpcyB0b28g bG9uZyIsIHN0YXRfbmFtZSksCiAJCQkJIGVycmRldGFpbCgiTmFtZSBtdXN0IGJlIGxlc3MgdGhh biAlZCBjaGFyYWN0ZXJzLiIsIE5BTUVEQVRBTEVOKSkpOwogCisJLyogSW5pdGlhbGl6ZSBEU0Eg YW5kIGRlc2NyaXB0aW9uIHByb3ZpZGVkICovCisJaWYgKCFjdXN0b21fc3RhdHNfZGVzY3JpcHRp b25fZHNhKQorCQljdXN0b21fc3RhdHNfZGVzY3JpcHRpb25fZHNhID0gR2V0TmFtZWREU0EoInRl c3RfY3VzdG9tX3N0YXRfZHNhIiwgJmZvdW5kKTsKKworCWlmICghY3VzdG9tX3N0YXRzX2Rlc2Ny aXB0aW9uX2RzYSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJjb3VsZCBub3QgYWNj ZXNzIERTQSBmb3IgY3VzdG9tIHN0YXRpc3RpY3MgZGVzY3JpcHRpb25zIikpKTsKKworCS8qIEFs bG9jYXRlIHNwYWNlIGluIERTQSBhbmQgY29weSBkZXNjcmlwdGlvbiAqLworCWRwID0gZHNhX2Fs bG9jYXRlKGN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EsIHN0cmxlbihkZXNjcmlwdGlvbikg KyAxKTsKKwltZW1jcHkoZHNhX2dldF9hZGRyZXNzKGN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9k c2EsIGRwKSwKKwkJICAgZGVzY3JpcHRpb24sCisJCSAgIHN0cmxlbihkZXNjcmlwdGlvbikgKyAx KTsKKwogCS8qIENyZWF0ZSBvciBnZXQgZXhpc3RpbmcgZW50cnkgKi8KIAllbnRyeV9yZWYgPSBw Z3N0YXRfZ2V0X2VudHJ5X3JlZl9sb2NrZWQoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fVkFSX1NU QVRTLCBJbnZhbGlkT2lkLAogCQkJCQkJCQkJCQlQR1NUQVRfQ1VTVE9NX1ZBUl9TVEFUU19JRFgo c3RhdF9uYW1lKSwgdHJ1ZSk7CkBAIC0xOTIsNiArNDY3LDkgQEAgdGVzdF9jdXN0b21fc3RhdHNf dmFyX2NyZWF0ZShQR19GVU5DVElPTl9BUkdTKQogCS8qIFplcm8taW5pdGlhbGl6ZSBzdGF0aXN0 aWNzICovCiAJbWVtc2V0KCZzaGFyZWRfZW50cnktPnN0YXRzLCAwLCBzaXplb2Yoc2hhcmVkX2Vu dHJ5LT5zdGF0cykpOwogCisJLyogU3RvcmUgZGVzY3JpcHRpb24gcG9pbnRlciAqLworCXNoYXJl ZF9lbnRyeS0+ZGVzY3JpcHRpb24gPSBkcDsKKwogCXBnc3RhdF91bmxvY2tfZW50cnkoZW50cnlf cmVmKTsKIAogCVBHX1JFVFVSTl9WT0lEKCk7CkBAIC0yMjYsOCArNTA0LDcgQEAgdGVzdF9jdXN0 b21fc3RhdHNfdmFyX3VwZGF0ZShQR19GVU5DVElPTl9BUkdTKQogICogdGVzdF9jdXN0b21fc3Rh dHNfdmFyX2Ryb3AKICAqCQlSZW1vdmUgY3VzdG9tIHN0YXRpc3RpYyBlbnRyeQogICoKLSAqIERy b3BzIHRoZSBuYW1lZCBzdGF0aXN0aWMgZnJvbSBzaGFyZWQgbWVtb3J5IGFuZCByZXF1ZXN0cwot ICogZ2FyYmFnZSBjb2xsZWN0aW9uIGlmIG5lZWRlZC4KKyAqIERyb3BzIHRoZSBuYW1lZCBzdGF0 aXN0aWMgZnJvbSBzaGFyZWQgbWVtb3J5LgogICovCiBQR19GVU5DVElPTl9JTkZPX1YxKHRlc3Rf Y3VzdG9tX3N0YXRzX3Zhcl9kcm9wKTsKIERhdHVtCkBAIC0yNDcsNyArNTI0LDcgQEAgdGVzdF9j dXN0b21fc3RhdHNfdmFyX2Ryb3AoUEdfRlVOQ1RJT05fQVJHUykKICAqIHRlc3RfY3VzdG9tX3N0 YXRzX3Zhcl9yZXBvcnQKICAqCQlSZXRyaWV2ZSBjdXN0b20gc3RhdGlzdGljIHZhbHVlcwogICoK LSAqIFJldHVybnMgc2luZ2xlIHJvdyB3aXRoIHN0YXRpc3RpYyBuYW1lIGFuZCBjYWxsIGNvdW50 IGlmIHRoZQorICogUmV0dXJucyBzaW5nbGUgcm93IHdpdGggc3RhdGlzdGljIG5hbWUsIGNhbGwg Y291bnQsIGFuZCBkZXNjcmlwdGlvbiBpZiB0aGUKICAqIHN0YXRpc3RpYyBleGlzdHMsIG90aGVy d2lzZSByZXR1cm5zIG5vIHJvd3MuCiAgKi8KIFBHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9jdXN0 b21fc3RhdHNfdmFyX3JlcG9ydCk7CkBAIC0yODEsOSArNTU4LDEzIEBAIHRlc3RfY3VzdG9tX3N0 YXRzX3Zhcl9yZXBvcnQoUEdfRlVOQ1RJT05fQVJHUykKIAogCWlmIChmdW5jY3R4LT5jYWxsX2Nu dHIgPCBmdW5jY3R4LT5tYXhfY2FsbHMpCiAJewotCQlEYXR1bQkJdmFsdWVzWzJdOwotCQlib29s CQludWxsc1syXSA9IHtmYWxzZSwgZmFsc2V9OworCQlEYXR1bQkJdmFsdWVzWzNdOworCQlib29s CQludWxsc1szXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlfTsKIAkJSGVhcFR1cGxlCXR1cGxlOwor CQlQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3JlZjsKKwkJUGdTdGF0U2hhcmVkX0N1c3RvbVZhckVu dHJ5ICpzaGFyZWRfZW50cnk7CisJCWNoYXIJICAgKmRlc2NyaXB0aW9uID0gTlVMTDsKKwkJYm9v bAkJZm91bmQ7CiAKIAkJc3RhdF9uYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhU X1BQKDApKTsKIAkJc3RhdF9lbnRyeSA9IHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9mZXRjaF9lbnRy eShzdGF0X25hbWUpOwpAQCAtMjkxLDkgKzU3MiwzMyBAQCB0ZXN0X2N1c3RvbV9zdGF0c192YXJf cmVwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS8qIFJldHVybiByb3cgb25seSBpZiBlbnRyeSBl eGlzdHMgKi8KIAkJaWYgKHN0YXRfZW50cnkpCiAJCXsKKwkJCS8qIEdldCBlbnRyeSByZWYgdG8g YWNjZXNzIHNoYXJlZCBlbnRyeSAqLworCQkJZW50cnlfcmVmID0gcGdzdGF0X2dldF9lbnRyeV9y ZWYoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fVkFSX1NUQVRTLCBJbnZhbGlkT2lkLAorCQkJCQkJ CQkJCQkgUEdTVEFUX0NVU1RPTV9WQVJfU1RBVFNfSURYKHN0YXRfbmFtZSksIGZhbHNlLCBOVUxM KTsKKworCQkJaWYgKGVudHJ5X3JlZikKKwkJCXsKKwkJCQlzaGFyZWRfZW50cnkgPSAoUGdTdGF0 U2hhcmVkX0N1c3RvbVZhckVudHJ5ICopIGVudHJ5X3JlZi0+c2hhcmVkX3N0YXRzOworCisJCQkJ LyogR2V0IGRlc2NyaXB0aW9uIGZyb20gRFNBIGlmIGF2YWlsYWJsZSAqLworCQkJCWlmIChEc2FQ b2ludGVySXNWYWxpZChzaGFyZWRfZW50cnktPmRlc2NyaXB0aW9uKSkKKwkJCQl7CisJCQkJCWlm ICghY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSkKKwkJCQkJCWN1c3RvbV9zdGF0c19kZXNj cmlwdGlvbl9kc2EgPSBHZXROYW1lZERTQSgidGVzdF9jdXN0b21fc3RhdF9kc2EiLCAmZm91bmQp OworCisJCQkJCWlmIChjdXN0b21fc3RhdHNfZGVzY3JpcHRpb25fZHNhKQorCQkJCQkJZGVzY3Jp cHRpb24gPSBkc2FfZ2V0X2FkZHJlc3MoY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSwgc2hh cmVkX2VudHJ5LT5kZXNjcmlwdGlvbik7CisJCQkJfQorCQkJfQorCiAJCQl2YWx1ZXNbMF0gPSBQ b2ludGVyR2V0RGF0dW0oY3N0cmluZ190b190ZXh0KHN0YXRfbmFtZSkpOwogCQkJdmFsdWVzWzFd ID0gSW50NjRHZXREYXR1bShzdGF0X2VudHJ5LT5udW1jYWxscyk7CiAKKwkJCWlmIChkZXNjcmlw dGlvbikKKwkJCQl2YWx1ZXNbMl0gPSBQb2ludGVyR2V0RGF0dW0oY3N0cmluZ190b190ZXh0KGRl c2NyaXB0aW9uKSk7CisJCQllbHNlCisJCQkJbnVsbHNbMl0gPSB0cnVlOworCiAJCQl0dXBsZSA9 IGhlYXBfZm9ybV90dXBsZShmdW5jY3R4LT50dXBsZV9kZXNjLCB2YWx1ZXMsIG51bGxzKTsKIAkJ CVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCBIZWFwVHVwbGVHZXREYXR1bSh0dXBsZSkpOwogCQl9 Ci0tIAoyLjQzLjAKCg== --0000000000003cf7c706458bf787--