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 1wD17j-002WTe-2W for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Apr 2026 14:21:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wD17e-00HLNL-33 for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Apr 2026 14:21:43 +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 1wD134-00GXbh-0G for pgsql-hackers@lists.postgresql.org; Wed, 15 Apr 2026 14:16:59 +0000 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wD0Zt-00000001DoD-00OU for pgsql-hackers@postgresql.org; Wed, 15 Apr 2026 13:46:51 +0000 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-2b25cf1b5f0so45323705ad.3 for ; Wed, 15 Apr 2026 06:46:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776260807; cv=none; d=google.com; s=arc-20240605; b=ZhE6cQuy7jXd7m2yUlzoZck0EsRyy4EDtD7pLOkHGucaM37k9Y7uztR9TQaJfRVK7E TtAIERDeGqn/8ADmXZM9QWvtIlm51u3q9E98Xai92mogQUWlgnh5jdH+b779X88IU7Qu na9fqP24Cb+nmtX0XBb8RobA2+4G3u6pkL5JV9lUgYksfc8O8OirDDOLpz2D5qd2qnor ZnsEs7/q0KQUCtTRj3PofhncvquG6mMlH78Jk5SpIfEaoY1mnLIFN0gTPsjRSIJPAx62 myhxj02VNOqEFppN8ZYAmsRA3l66LUHZh/bwkvBlFodaxegyhzGyrNFisyHFk1eKcgHC +DVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=ThbBt66036r5ueQGNk9U6JfBwjJM7EwiMgNF7LnrY98=; fh=SN0t278eZZLlGEeX/TDeaxL0uj/BzGb7PUpx53x4ydg=; b=gT84x5KCBererCMa9tl2EhHUO7o+MYNUnSuh/BxGVObyGHnSeCaE9nNAWIp9H+M1aG Olgh93PKUhy4lq6/cZpXFuezEq2opv7PyCjKF/nsG9a6/+GOZ2p/UXDqDbJfGed2M2Wu g0MfQt/hflBfXefyi1N8es1MNvhoocu5fH3FoC/M17tXKxc6ebgDa1miZRwNMiHHvL61 nPeCWaUkGiceebDlUxt462d4fu8+BVVjCOJsiKPiA0hhXgR9c7ipTGxdDQgtMGrg2nKw esqnmMM/XCxkkV5M0RRAmOEZJmmmOLnVYCOKnntj4dyoWAVluqE1nc/e1jd7lrpc7uha gvYw==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776260807; x=1776865607; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ThbBt66036r5ueQGNk9U6JfBwjJM7EwiMgNF7LnrY98=; b=CrvfFN54OKeyWc93fXVZRc/h7e4hH0MNFNy2/xIOZM3o8GH5ZnfdcCY0pfAG11y+Sb PcsNZ8mZ+J52zXB5sqx+J1rKw/cNhl2smhh2+/9dhA8GdVgtIAACUDNOeOgYcQPLddWr sSDQQpn92t3ODbUBqUjIUJaFmOHcaZz9nxCPtBoIMLHO6p2XU4ALu4nYjsMEcm+KUqNN HKd/HxUhFPcQst7v5V13N7Tj5qlY2OB6FrZ8MfkjV9BjeBuwCE7Sl/SYpLUYX+RkWVYq sW93SlJwO8Hs1hrLhh1olIk1odQ46x5q/pIaLHEVI+yM+xDD8PR1z/Nyg8Ynp4GCHVKb YJQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776260807; x=1776865607; 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=ThbBt66036r5ueQGNk9U6JfBwjJM7EwiMgNF7LnrY98=; b=ThefDnv2tNodcddCWhANjpWp2XVDBUvGoT4FX6v/mazi5V6bfclw7yt+YqjW7EJ2vr dJHvf9UlSFif1jR4UOnvlZoxosaCjqPkHtrW7vdK+KOwi18Q9D/FiCfghSW0TVUXVUx6 h2TMnArV3VfFjqSbECty1sO380TKV04sGLc5uyH7+bInjyrwsaHLARdf92LiZv+GSQmi B1nDqlpiwnp1YK672nObpqempsoxrVzaJJenWUOZrWD4h6mV78mefQjSWpk935+XMcaH vCTnAbhJPpgYtiW5CQSaKJuLHHhViCTdhKIvXrMwlzUwuboDcyuyIMouq4O+VvbFjaix jGrg== X-Gm-Message-State: AOJu0YxQ2cZvd19Jz8w5WEe9a8C/ox6/crTdRUtUbjBh6hNTOAmRwqZM mAv//oPTKy6MO3Yc5doktdZuZUhCpvo6ZZehPz2eFxn/pf1T4zrUZNOTAxb0VWKOxHOKfCWAI5L ABsEWeAoyrApr8KNMhjS1lja6SZrbQz8= X-Gm-Gg: AeBDiev5tvyV606WH5xCsWquawD2dyxwwK4OmTYDDuV6R3joSzS2bBd3y9kYBv+OYfX IF4PaoFwiVtfmYkGQFobVITsdRi2Fg9iRP0FsYwz6kTAxgBr+ZPGgaLLpBcO8Sb6MS7Tfze8eHH I1AElqfFEmKFLAWdCPfXQgakXBbachNF4Vx6w0OUIjoNKHZhbdTRcI/Ecdde4ocZXm529ugR5qb T/D1OlvlJ8RIfF0q7uc5NT/qkkXXy9L8azuGoIEQ0iyt8hyPO/1/ReK1DLE5lL5a0B++XM6QnxE 3S5L+y1IymLYTaxlelJAroyyGm19M056pZA+26AyI0bYsAHzNhgCwWRYOL59IqYD X-Received: by 2002:a17:903:2283:b0:2b4:6281:60c0 with SMTP id d9443c01a7336-2b4628163eamr114376955ad.35.1776260806629; Wed, 15 Apr 2026 06:46:46 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Amit Langote Date: Wed, 15 Apr 2026 22:46:29 +0900 X-Gm-Features: AQROBzAetdtCyTsxCGR7lWlh2S-YnbvhO6AYXXsOIgK4UassBS17mFAuBT54F14 Message-ID: Subject: Re: GetCachedPlan() refactor: move execution lock acquisition out To: Kirill Reshke Cc: PostgreSQL-development Content-Type: multipart/mixed; boundary="00000000000068787a064f7ff2c8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000068787a064f7ff2c8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 15, 2026 at 11:14=E2=80=AFAM Amit Langote wrote: > On Wed, Apr 15, 2026 at 1:08=E2=80=AFAM Kirill Reshke wrote: > > > +static bool > > > +LockCachedPlan(CachedPlan *cplan) > > > +{ > > > + AcquireExecutorLocks(cplan->stmt_list, true); > > > + if (!cplan->is_valid) > > > + { > > > + AcquireExecutorLocks(cplan->stmt_list, false); > > > + return false; > > > + } > > > + return true; > > > +} > > > > simply `return cplan->is_valid ` would be more Postgres-y here, isnt it= ? > > Agreed, will fix too. Thinking more about this bit, checking only cplan->is_valid after locking is not really equivalent to what CheckCachedPlan() was doing before. CheckCachedPlan() can also reset plan->is_valid based on other state (role, xmin), whereas in v1 the new check relied only on lock inval callbacks to have set is_valid to false. That means the new check is not enough. It may happen to be okay for the current callers in this patch, but it is not something I think is safe to rely on once there are future callers that do arbitrary work, such as ExecutorPrep(), even if carefully coded, between the original GetCachedPlan() / CheckCachedPlan() step and the later recheck after locking. Separately, I also realized that v1 was introducing redundant lock acquisition for freshly built plans, which is not really a no behavior change refactoring either. So in v2 I ended up reworking two parts more substantially: * The patch now factors the reused-generic-plan validity logic into RecheckCachedPlan(). * It also adds an is_reused output argument to GetCachedPlan(), so callers can distinguish the reused-plan case from a freshly built plan and avoid the extra lock step in the latter case. --=20 Thanks, Amit Langote --00000000000068787a064f7ff2c8 Content-Type: application/octet-stream; name="v2-0001-Move-execution-lock-acquisition-out-of-GetCachedP.patch" Content-Disposition: attachment; filename="v2-0001-Move-execution-lock-acquisition-out-of-GetCachedP.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo03q6ma0 RnJvbSBiMWNmN2Y0NjQ4Y2YzY2UxNTZlYzM1NWYxNTlhYzI2YjhlOGNlNzNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMTUgQXByIDIwMjYgMTQ6Mjc6NTUgKzA5MDAKU3ViamVjdDogW1BBVENIIHYy XSBNb3ZlIGV4ZWN1dGlvbiBsb2NrIGFjcXVpc2l0aW9uIG91dCBvZiBHZXRDYWNoZWRQbGFuKCkK CkdldENhY2hlZFBsYW4oKSBwcmV2aW91c2x5IGFjcXVpcmVkIGV4ZWN1dG9yIGxvY2tzIGFzIHBh cnQgb2YKY2hlY2tpbmcgd2hldGhlciBhIGNhY2hlZCBwbGFuIGNvdWxkIGJlIHVzZWQuIFNwbGl0 IHRob3NlIGNvbmNlcm5zCnNvIHRoYXQgR2V0Q2FjaGVkUGxhbigpIG5vIGxvbmdlciBhY3F1aXJl cyBleGVjdXRpb24gbG9ja3MuCgpBZGQgYW4gaW50ZXJuYWwgaGVscGVyLCBMb2NrQ2FjaGVkUGxh bigpLCB3aGljaCBhY3F1aXJlcwpleGVjdXRpb24gbG9ja3Mgb24gYWxsIHBsYW4gcmVsYXRpb25z IGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZQpwbGFuIGlzIGludmFsaWRhdGVkIHdoaWxlIGxvY2tp bmcsIGFsbG93aW5nIHRoZSBjYWxsZXIgdG8gcmV0cnkuCgpBZGQgR2V0Q2FjaGVkUGxhbkxvY2tl ZCgpIGFzIGEgY29udmVuaWVuY2Ugd3JhcHBlciB0aGF0IGZldGNoZXMgYQpwbGFuLCBsb2NrcyBp dCB1c2luZyB0aGUgbmV3IGhlbHBlciwgYW5kIHJldHJpZXMgb24gaW52YWxpZGF0aW9uLgpDb252 ZXJ0IGFsbCBjdXJyZW50IGNhbGxlcnMgdG8gdXNlIHRoaXMgd3JhcHBlci4KCk5vIGludGVuZGVk IGJlaGF2aW9yYWwgY2hhbmdlIGZvciBjdXJyZW50IGNhbGxlcnMuIFRoZXkgc3RpbGwKYWNxdWly ZSBleGVjdXRpb24gbG9ja3Mgb24gYWxsIHBsYW4gcmVsYXRpb25zIGFzIGJlZm9yZS4gVGhpcwpy ZWZhY3RvcmluZyBtYWtlcyBpdCBwb3NzaWJsZSB0byBhZGQgbW9yZSBzZWxlY3RpdmUgbG9ja2lu ZyBpbgpmb2xsb3ctb24gd29yay4KCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vCi0t LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jICAgICAgfCAgIDcgKy0KIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9leGVjdXRv ci9zcGkuYyAgICAgICAgICB8ICAxNCArLS0KIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAg ICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyB8IDEz NCArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCiBzcmMvaW5jbHVkZS91dGlscy9wbGFuY2Fj aGUuaCAgICAgICB8ICAgOCArLQogNiBmaWxlcyBjaGFuZ2VkLCAxMzUgaW5zZXJ0aW9ucygrKSwg MzYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFy ZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCmluZGV4IDg3NmFhZDIxMDBhLi40 Njc5MTFlYTk4MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYwpAQCAtMTk1LDcgKzE5NSw3IEBAIEV4 ZWN1dGVRdWVyeShQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCQkgICBlbnRyeS0+cGxhbnNv dXJjZS0+cXVlcnlfc3RyaW5nKTsKIAogCS8qIFJlcGxhbiBpZiBuZWVkZWQsIGFuZCBpbmNyZW1l bnQgcGxhbiByZWZjb3VudCBmb3IgcG9ydGFsICovCi0JY3BsYW4gPSBHZXRDYWNoZWRQbGFuKGVu dHJ5LT5wbGFuc291cmNlLCBwYXJhbUxJLCBOVUxMLCBOVUxMKTsKKwljcGxhbiA9IEdldENhY2hl ZFBsYW5Mb2NrZWQoZW50cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksIE5VTEwsIE5VTEwpOwogCXBs YW5fbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CiAKIAkvKgpAQCAtNjMyLDggKzYzMiw5IEBAIEV4 cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0bXQgKmV4ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRv LCBFeHBsYWluU3RhdGUgKmVzLAogCX0KIAogCS8qIFJlcGxhbiBpZiBuZWVkZWQsIGFuZCBhY3F1 aXJlIGEgdHJhbnNpZW50IHJlZmNvdW50ICovCi0JY3BsYW4gPSBHZXRDYWNoZWRQbGFuKGVudHJ5 LT5wbGFuc291cmNlLCBwYXJhbUxJLAotCQkJCQkJICBDdXJyZW50UmVzb3VyY2VPd25lciwgcHN0 YXRlLT5wX3F1ZXJ5RW52KTsKKwljcGxhbiA9IEdldENhY2hlZFBsYW5Mb2NrZWQoZW50cnktPnBs YW5zb3VyY2UsIHBhcmFtTEksCisJCQkJCQkJCUN1cnJlbnRSZXNvdXJjZU93bmVyLAorCQkJCQkJ CQlwc3RhdGUtPnBfcXVlcnlFbnYpOwogCiAJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChwbGFuZHVy YXRpb24pOwogCUlOU1RSX1RJTUVfU1VCVFJBQ1QocGxhbmR1cmF0aW9uLCBwbGFuc3RhcnQpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9mdW5jdGlvbnMuYwppbmRleCA4ODEwOTM0ODgxNy4uNGZmNWYxMzA0NTcgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCkBAIC02OTYsMTAgKzY5Niw4IEBAIGluaXRfZXhlY3V0 aW9uX3N0YXRlKFNRTEZ1bmN0aW9uQ2FjaGVQdHIgZmNhY2hlKQogCSAqIEN1cnJlbnRSZXNvdXJj ZU93bmVyIHdpbGwgYmUgdGhlIHNhbWUgd2hlbiBTaHV0ZG93blNRTEZ1bmN0aW9uIHJ1bnMuKQog CSAqLwogCWZjYWNoZS0+Y293bmVyID0gQ3VycmVudFJlc291cmNlT3duZXI7Ci0JZmNhY2hlLT5j cGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwKLQkJCQkJCQkJICBmY2FjaGUtPnBhcmFt TEksCi0JCQkJCQkJCSAgZmNhY2hlLT5jb3duZXIsCi0JCQkJCQkJCSAgTlVMTCk7CisJZmNhY2hl LT5jcGxhbiA9IEdldENhY2hlZFBsYW5Mb2NrZWQocGxhbnNvdXJjZSwgZmNhY2hlLT5wYXJhbUxJ LAorCQkJCQkJCQkJCWZjYWNoZS0+Y293bmVyLCBOVUxMKTsKIAogCS8qCiAJICogSWYgbmVjZXNz YXJ5LCBtYWtlIGVzYXJyYXlbXSBiaWdnZXIgdG8gaG9sZCB0aGUgbmVlZGVkIHN0YXRlLgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9zcGkuYwppbmRleCA1MmYzYjExMzAxYy4uNTgyMzhkZDNmMzQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL3NwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCkBA IC0xNjYwLDcgKzE2NjAsOCBAQCBTUElfY3Vyc29yX29wZW5faW50ZXJuYWwoY29uc3QgY2hhciAq bmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCSAqLwogCiAJLyogUmVwbGFuIGlmIG5lZWRlZCwgYW5k IGluY3JlbWVudCBwbGFuIHJlZmNvdW50IGZvciBwb3J0YWwgKi8KLQljcGxhbiA9IEdldENhY2hl ZFBsYW4ocGxhbnNvdXJjZSwgcGFyYW1MSSwgTlVMTCwgX1NQSV9jdXJyZW50LT5xdWVyeUVudik7 CisJY3BsYW4gPSBHZXRDYWNoZWRQbGFuTG9ja2VkKHBsYW5zb3VyY2UsIHBhcmFtTEksIE5VTEws CisJCQkJCQkJCV9TUElfY3VycmVudC0+cXVlcnlFbnYpOwogCXN0bXRfbGlzdCA9IGNwbGFuLT5z dG10X2xpc3Q7CiAKIAlpZiAoIXBsYW4tPnNhdmVkKQpAQCAtMjEwMSw5ICsyMTAyLDkgQEAgU1BJ X3BsYW5fZ2V0X2NhY2hlZF9wbGFuKFNQSVBsYW5QdHIgcGxhbikKIAllcnJvcl9jb250ZXh0X3N0 YWNrID0gJnNwaWVycmNvbnRleHQ7CiAKIAkvKiBHZXQgdGhlIGdlbmVyaWMgcGxhbiBmb3IgdGhl IHF1ZXJ5ICovCi0JY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsIE5VTEwsCi0JCQkJ CQkgIHBsYW4tPnNhdmVkID8gQ3VycmVudFJlc291cmNlT3duZXIgOiBOVUxMLAotCQkJCQkJICBf U1BJX2N1cnJlbnQtPnF1ZXJ5RW52KTsKKwljcGxhbiA9IEdldENhY2hlZFBsYW5Mb2NrZWQocGxh bnNvdXJjZSwgTlVMTCwKKwkJCQkJCQkJcGxhbi0+c2F2ZWQgPyBDdXJyZW50UmVzb3VyY2VPd25l ciA6IE5VTEwsCisJCQkJCQkJCV9TUElfY3VycmVudC0+cXVlcnlFbnYpOwogCUFzc2VydChjcGxh biA9PSBwbGFuc291cmNlLT5ncGxhbik7CiAKIAkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3Rh Y2sgKi8KQEAgLTI1NzQsOSArMjU3NSw4IEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIg cGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJCSAqIFJlcGxhbiBpZiBu ZWVkZWQsIGFuZCBpbmNyZW1lbnQgcGxhbiByZWZjb3VudC4gIElmIGl0J3MgYSBzYXZlZAogCQkg KiBwbGFuLCB0aGUgcmVmY291bnQgbXVzdCBiZSBiYWNrZWQgYnkgdGhlIHBsYW5fb3duZXIuCiAJ CSAqLwotCQljcGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgb3B0aW9ucy0+cGFyYW1z LAotCQkJCQkJCSAgcGxhbl9vd25lciwgX1NQSV9jdXJyZW50LT5xdWVyeUVudik7Ci0KKwkJY3Bs YW4gPSBHZXRDYWNoZWRQbGFuTG9ja2VkKHBsYW5zb3VyY2UsIG9wdGlvbnMtPnBhcmFtcywKKwkJ CQkJCQkJCXBsYW5fb3duZXIsIF9TUElfY3VycmVudC0+cXVlcnlFbnYpOwogCQlzdG10X2xpc3Qg PSBjcGxhbi0+c3RtdF9saXN0OwogCiAJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29w L3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggYWVhZjFjNmRi OGYuLjM3ODJlNTE5N2Q0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMK KysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0yMDI4LDcgKzIwMjgsNyBAQCBl eGVjX2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJICogd2lsbCBiZSBn ZW5lcmF0ZWQgaW4gTWVzc2FnZUNvbnRleHQuICBUaGUgcGxhbiByZWZjb3VudCB3aWxsIGJlCiAJ ICogYXNzaWduZWQgdG8gdGhlIFBvcnRhbCwgc28gaXQgd2lsbCBiZSByZWxlYXNlZCBhdCBwb3J0 YWwgZGVzdHJ1Y3Rpb24uCiAJICovCi0JY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBzcmMsIHBhcmFt cywgTlVMTCwgTlVMTCk7CisJY3BsYW4gPSBHZXRDYWNoZWRQbGFuTG9ja2VkKHBzcmMsIHBhcmFt cywgTlVMTCwgTlVMTCk7CiAKIAkvKgogCSAqIE5vdyB3ZSBjYW4gZGVmaW5lIHRoZSBwb3J0YWwu CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jCmluZGV4IDY5OGU3YzFhYTIyLi44MDk4NzIy MWVmNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKQEAgLTEwMSw2ICsxMDEsNyBA QCBzdGF0aWMgYm9vbCBjaG9vc2VfY3VzdG9tX3BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNv dXJjZSwKIHN0YXRpYyBkb3VibGUgY2FjaGVkX3BsYW5fY29zdChDYWNoZWRQbGFuICpwbGFuLCBi b29sIGluY2x1ZGVfcGxhbm5lcik7CiBzdGF0aWMgUXVlcnkgKlF1ZXJ5TGlzdEdldFByaW1hcnlT dG10KExpc3QgKnN0bXRzKTsKIHN0YXRpYyB2b2lkIEFjcXVpcmVFeGVjdXRvckxvY2tzKExpc3Qg KnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKTsKK3N0YXRpYyBib29sIExvY2tDYWNoZWRQbGFuKENh Y2hlZFBsYW4gKmNwbGFuLCBDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKTsKIHN0YXRpYyB2 b2lkIEFjcXVpcmVQbGFubmVyTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpOwog c3RhdGljIHZvaWQgU2NhblF1ZXJ5Rm9yTG9ja3MoUXVlcnkgKnBhcnNldHJlZSwgYm9vbCBhY3F1 aXJlKTsKIHN0YXRpYyBib29sIFNjYW5RdWVyeVdhbGtlcihOb2RlICpub2RlLCBib29sICphY3F1 aXJlKTsKQEAgLTk0NSw4ICs5NDYsOSBAQCBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2FjaGVkUGxh blNvdXJjZSAqcGxhbnNvdXJjZSwKICAqIENhbGxlciBtdXN0IGhhdmUgYWxyZWFkeSBjYWxsZWQg UmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5IHRvIHZlcmlmeSB0aGF0IHRoZQogICogcXVlcnl0cmVlIGlz IHVwIHRvIGRhdGUuCiAgKgotICogT24gYSAidHJ1ZSIgcmV0dXJuLCB3ZSBoYXZlIGFjcXVpcmVk IHRoZSBsb2NrcyBuZWVkZWQgdG8gcnVuIHRoZSBwbGFuLgotICogKFdlIG11c3QgZG8gdGhpcyBm b3IgdGhlICJ0cnVlIiByZXN1bHQgdG8gYmUgcmFjZS1jb25kaXRpb24tZnJlZS4pCisgKiBPbiBh ICJ0cnVlIiByZXR1cm4sIHRoZSBnZW5lcmljIHBsYW4gcmVtYWlucyB1c2FibGUgYXMgYSBjYWNo ZWQgcGxhbi4KKyAqIEFueSBleGVjdXRpb24tdGltZSBzZXR1cCwgaW5jbHVkaW5nIGxvY2sgYWNx dWlzaXRpb24sIGlzIHRoZSBjYWxsZXIncworICogcmVzcG9uc2liaWxpdHkuCiAgKi8KIHN0YXRp YyBib29sCiBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKQEAg LTk2MCw2ICs5NjIsMjUgQEAgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5z b3VyY2UpCiAJaWYgKCFwbGFuKQogCQlyZXR1cm4gZmFsc2U7CiAKKwkvKiBSZWNoZWNrIHdoZXRo ZXIgdGhlIGV4aXN0aW5nIGdlbmVyaWMgcGxhbiBpcyBzdGlsbCByZXVzYWJsZS4gKi8KKwlyZXR1 cm4gUmVjaGVja0NhY2hlZFBsYW4ocGxhbiwgcGxhbnNvdXJjZSk7Cit9CisKKy8qCisgKiBSZWNo ZWNrQ2FjaGVkUGxhbjogcmVjaGVjayB3aGV0aGVyIGEgcmV1c2VkIGdlbmVyaWMgcGxhbiBpcyBz dGlsbCByZXVzYWJsZS4KKyAqCisgKiBUaGlzIGlzIGZvciBjYWxsZXJzIHRoYXQgb2J0YWluZWQg YSByZXVzZWQgZ2VuZXJpYyBwbGFuIGZyb20KKyAqIEdldENhY2hlZFBsYW4oLi4uLCAmaXNfcmV1 c2VkKSwgb2JzZXJ2ZWQgKmlzX3JldXNlZCA9PSB0cnVlLCBhbmQgaGF2ZQorICogc2luY2UgY29t cGxldGVkIHdoYXRldmVyIGFkZGl0aW9uYWwgc2V0dXAgYW5kIGV4ZWN1dGlvbiBsb2NraW5nIHRo ZXkKKyAqIHJlcXVpcmUgYmVmb3JlIGV4ZWN1dGlvbi4KKyAqCisgKiBJdCBkb2VzIG5vdCBhY3F1 aXJlIG9yIHJlbGVhc2UgZXhlY3V0aW9uIGxvY2tzLiAgT24gZmFpbHVyZSwgaXQgcmVsZWFzZXMK KyAqIHRoZSBnZW5lcmljIHBsYW4gZnJvbSB0aGUgcGxhbnNvdXJjZS4KKyAqLworYm9vbAorUmVj aGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhbiAqcGxhbiwgQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNv dXJjZSkKK3sKKwlBc3NlcnQocGxhbiA9PSBwbGFuc291cmNlLT5ncGxhbik7CiAJQXNzZXJ0KHBs YW4tPm1hZ2ljID09IENBQ0hFRFBMQU5fTUFHSUMpOwogCS8qIEdlbmVyaWMgcGxhbnMgYXJlIG5l dmVyIG9uZS1zaG90ICovCiAJQXNzZXJ0KCFwbGFuLT5pc19vbmVzaG90KTsKQEAgLTk3Miw4ICs5 OTMsOCBAQCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKIAkJ cGxhbi0+aXNfdmFsaWQgPSBmYWxzZTsKIAogCS8qCi0JICogSWYgaXQgYXBwZWFycyB2YWxpZCwg YWNxdWlyZSBsb2NrcyBhbmQgcmVjaGVjazsgdGhpcyBpcyBtdWNoIHRoZSBzYW1lCi0JICogbG9n aWMgYXMgaW4gUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5LCBidXQgZm9yIGEgcGxhbi4KKwkgKiBJZiBp dCBzdGlsbCBhcHBlYXJzIHZhbGlkLCBwZXJmb3JtIHRoZSByZW1haW5pbmcgdmFsaWRpdHkgY2hl Y2tzLiBUaGlzCisJICogaXMgbXVjaCB0aGUgc2FtZSBsb2dpYyBhcyBpbiBSZXZhbGlkYXRlQ2Fj aGVkUXVlcnkoKSwgYnV0IGZvciBhIHBsYW4uCiAJICovCiAJaWYgKHBsYW4tPmlzX3ZhbGlkKQog CXsKQEAgLTk4Myw4ICsxMDA0LDYgQEAgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2Ug KnBsYW5zb3VyY2UpCiAJCSAqLwogCQlBc3NlcnQocGxhbi0+cmVmY291bnQgPiAwKTsKIAotCQlB Y3F1aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10X2xpc3QsIHRydWUpOwotCiAJCS8qCiAJCSAq IElmIHBsYW4gd2FzIHRyYW5zaWVudCwgY2hlY2sgdG8gc2VlIGlmIFRyYW5zYWN0aW9uWG1pbiBo YXMKIAkJICogYWR2YW5jZWQsIGFuZCBpZiBzbyBpbnZhbGlkYXRlIGl0LgpAQCAtMTAwMCwxMiAr MTAxOSw5IEBAIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQog CQkgKi8KIAkJaWYgKHBsYW4tPmlzX3ZhbGlkKQogCQl7Ci0JCQkvKiBTdWNjZXNzZnVsbHkgcmV2 YWxpZGF0ZWQgYW5kIGxvY2tlZCB0aGUgcXVlcnkuICovCisJCQkvKiBTdWNjZXNzZnVsbHkgcmV2 YWxpZGF0ZWQgdGhlIHF1ZXJ5LiAqLwogCQkJcmV0dXJuIHRydWU7CiAJCX0KLQotCQkvKiBPb3Bz LCB0aGUgcmFjZSBjYXNlIGhhcHBlbmVkLiAgUmVsZWFzZSB1c2VsZXNzIGxvY2tzLiAqLwotCQlB Y3F1aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10X2xpc3QsIGZhbHNlKTsKIAl9CiAKIAkvKgpA QCAtMTI4Miw4ICsxMjk4LDEzIEBAIGNhY2hlZF9wbGFuX2Nvc3QoQ2FjaGVkUGxhbiAqcGxhbiwg Ym9vbCBpbmNsdWRlX3BsYW5uZXIpCiAgKiBwbGFuIG9yIGEgY3VzdG9tIHBsYW4gZm9yIHRoZSBn aXZlbiBwYXJhbWV0ZXJzOiB0aGUgY2FsbGVyIGRvZXMgbm90IGtub3cKICAqIHdoaWNoIGl0IHdp bGwgZ2V0LgogICoKLSAqIE9uIHJldHVybiwgdGhlIHBsYW4gaXMgdmFsaWQgYW5kIHdlIGhhdmUg c3VmZmljaWVudCBsb2NrcyB0byBiZWdpbgotICogZXhlY3V0aW9uLgorICogT24gcmV0dXJuLCB0 aGUgcGxhbiBpcyB0aGUgY3VycmVudCBjYWNoZWQgcGxhbiwgYnV0IGV4ZWN1dGlvbiBsb2NrcyBh cmUKKyAqIG5vdCBoZWxkLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYWNxdWlyaW5n IHRoZW0gYmVmb3JlIGV4ZWN1dGlvbi4KKyAqIENhbGxlcnMgdGhhdCBuZWVkIGEgcGxhbiByZWFk eSBmb3IgZXhlY3V0aW9uIHNob3VsZCB1c2UKKyAqIEdldENhY2hlZFBsYW5Mb2NrZWQoKSwgd2hp Y2ggaGFuZGxlcyBsb2NraW5nIGFuZCByZXRyeSBvbiBpbnZhbGlkYXRpb24uCisgKgorICogSWYg aXNfcmV1c2VkIGlzIG5vdCBOVUxMLCAqaXNfcmV1c2VkIGlzIHNldCB0cnVlIHdoZW4gdGhlIHJl dHVybmVkIHBsYW4gaXMKKyAqIGEgcmV1c2VkIGdlbmVyaWMgcGxhbiwgYW5kIGZhbHNlIG90aGVy d2lzZS4KICAqCiAgKiBPbiByZXR1cm4sIHRoZSByZWZjb3VudCBvZiB0aGUgcGxhbiBoYXMgYmVl biBpbmNyZW1lbnRlZDsgYSBsYXRlcgogICogUmVsZWFzZUNhY2hlZFBsYW4oKSBjYWxsIGlzIGV4 cGVjdGVkLiAgSWYgIm93bmVyIiBpcyBub3QgTlVMTCB0aGVuCkBAIC0xMjk1LDcgKzEzMTYsOCBA QCBjYWNoZWRfcGxhbl9jb3N0KENhY2hlZFBsYW4gKnBsYW4sIGJvb2wgaW5jbHVkZV9wbGFubmVy KQogICovCiBDYWNoZWRQbGFuICoKIEdldENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxh bnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKLQkJCSAgUmVzb3VyY2VPd25lciBv d25lciwgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpCisJCQkgIFJlc291cmNlT3duZXIgb3du ZXIsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAorCQkJICBib29sICppc19yZXVzZWQpCiB7 CiAJQ2FjaGVkUGxhbiAqcGxhbiA9IE5VTEw7CiAJTGlzdAkgICAqcWxpc3Q7CkBAIC0xMzA5LDYg KzEzMzEsOSBAQCBHZXRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIFBh cmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCiAJaWYgKG93bmVyICYmICFwbGFuc291cmNlLT5pc19z YXZlZCkKIAkJZWxvZyhFUlJPUiwgImNhbm5vdCBhcHBseSBSZXNvdXJjZU93bmVyIHRvIG5vbi1z YXZlZCBjYWNoZWQgcGxhbiIpOwogCisJaWYgKGlzX3JldXNlZCkKKwkJKmlzX3JldXNlZCA9IGZh bHNlOworCiAJLyogTWFrZSBzdXJlIHRoZSBxdWVyeXRyZWUgbGlzdCBpcyB2YWxpZCBhbmQgd2Ug aGF2ZSBwYXJzZS10aW1lIGxvY2tzICovCiAJcWxpc3QgPSBSZXZhbGlkYXRlQ2FjaGVkUXVlcnko cGxhbnNvdXJjZSwgcXVlcnlFbnYpOwogCkBAIC0xMzIyLDYgKzEzNDcsOCBAQCBHZXRDYWNoZWRQ bGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIFBhcmFtTGlzdEluZm8gYm91bmRQYXJh bXMsCiAJCQkvKiBXZSB3YW50IGEgZ2VuZXJpYyBwbGFuLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEg dmFsaWQgb25lICovCiAJCQlwbGFuID0gcGxhbnNvdXJjZS0+Z3BsYW47CiAJCQlBc3NlcnQocGxh bi0+bWFnaWMgPT0gQ0FDSEVEUExBTl9NQUdJQyk7CisJCQlpZiAoaXNfcmV1c2VkKQorCQkJCSpp c19yZXVzZWQgPSB0cnVlOwogCQl9CiAJCWVsc2UKIAkJewpAQCAtMTQxMyw2ICsxNDQwLDQ4IEBA IEdldENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5m byBib3VuZFBhcmFtcywKIAlyZXR1cm4gcGxhbjsKIH0KIAorLyoKKyAqIEdldENhY2hlZFBsYW5M b2NrZWQ6IGZldGNoIGEgY2FjaGVkIHBsYW4gcmVhZHkgZm9yIGV4ZWN1dGlvbi4KKyAqCisgKiBU aGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgR2V0Q2FjaGVkUGxhbigpIHRoYXQg YWxzbyBhY3F1aXJlcworICogZXhlY3V0aW9uIGxvY2tzLgorICoKKyAqIElmIEdldENhY2hlZFBs YW4oKSByZXR1cm5zIGEgcmV1c2VkIGdlbmVyaWMgcGxhbiwgdGhpcyBhY3F1aXJlcyBleGVjdXRp b24KKyAqIGxvY2tzIGFuZCByZWNoZWNrcyBwbGFuIHZhbGlkaXR5LiAgSWYgdGhlIHBsYW4gaXMg aW52YWxpZGF0ZWQgd2hpbGUgbG9ja3MKKyAqIGFyZSBiZWluZyBhY3F1aXJlZCwgaXQgcmVsZWFz ZXMgdGhhdCBwbGFuIGFuZCBjYWxscyBHZXRDYWNoZWRQbGFuKCkgYWdhaW4sCisgKiB3aGljaCB3 aWxsIGJ1aWxkIGEgZnJlc2ggcGxhbiB3aXRoIHRoZSBuZWVkZWQgbG9ja3MgYWxyZWFkeSBoZWxk IGJ5IHRoZQorICogcGxhbm5lci4KKyAqCisgKiBGcmVzaGx5IGJ1aWx0IHBsYW5zIGFyZSByZXR1 cm5lZCBkaXJlY3RseSwgYXZvaWRpbmcgcmVkdW5kYW50IGxvY2sKKyAqIGFjcXVpc2l0aW9uIGlu IHRoYXQgY2FzZS4KKyAqCisgKiBUaGlzIGlzIHRoZSBub3JtYWwgZW50cnkgcG9pbnQgZm9yIGNh bGxlcnMgdGhhdCBuZWVkIGEgcGxhbiByZWFkeSB0bworICogZXhlY3V0ZS4gIENhbGxlcnMgdGhh dCBuZWVkIGN1c3RvbSBsb2NraW5nIGJlaGF2aW9yIHNob3VsZCBjYWxsCisgKiBHZXRDYWNoZWRQ bGFuKCkgZGlyZWN0bHkgYW5kIGltcGxlbWVudCB0aGVpciBvd24gbG9ja2luZy4KKyAqLworQ2Fj aGVkUGxhbiAqCitHZXRDYWNoZWRQbGFuTG9ja2VkKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UsIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCisJCQkJCVJlc291cmNlT3duZXIgb3duZXIs IFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KQoreworCUNhY2hlZFBsYW4gKmNwbGFuOworCWJv b2wJCWlzX3JldXNlZDsKKworCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLCBib3Vu ZFBhcmFtcywgb3duZXIsIHF1ZXJ5RW52LCAmaXNfcmV1c2VkKTsKKwlpZiAoaXNfcmV1c2VkICYm ICFMb2NrQ2FjaGVkUGxhbihjcGxhbiwgcGxhbnNvdXJjZSkpCisJeworCQlSZWxlYXNlQ2FjaGVk UGxhbihjcGxhbiwgb3duZXIpOworCQljcGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwg Ym91bmRQYXJhbXMsIG93bmVyLCBxdWVyeUVudiwgJmlzX3JldXNlZCk7CisKKwkJLyoKKwkJICog QSBzZWNvbmQgR2V0Q2FjaGVkUGxhbigpIGNhbGwgcmVidWlsZHMgdGhlIHBsYW4gcmF0aGVyIHRo YW4gcmV1c2luZworCQkgKiBpdC4KKwkJICovCisJCUFzc2VydCghaXNfcmV1c2VkKTsKKwl9CisK KwlyZXR1cm4gY3BsYW47Cit9CisKIC8qCiAgKiBSZWxlYXNlQ2FjaGVkUGxhbjogcmVsZWFzZSBh Y3RpdmUgdXNlIG9mIGEgY2FjaGVkIHBsYW4uCiAgKgpAQCAtMTQ1MSwxMCArMTUyMCwxMCBAQCBS ZWxlYXNlQ2FjaGVkUGxhbihDYWNoZWRQbGFuICpwbGFuLCBSZXNvdXJjZU93bmVyIG93bmVyKQog ICoKICAqIFRoaXMgZnVuY3Rpb24sIHRvZ2V0aGVyIHdpdGggQ2FjaGVkUGxhbklzU2ltcGx5VmFs aWQsIHByb3ZpZGVzIGEgZmFzdCBwYXRoCiAgKiBmb3IgcmV2YWxpZGF0aW5nICJzaW1wbGUiIGdl bmVyaWMgcGxhbnMuICBUaGUgY29yZSByZXF1aXJlbWVudCB0byBiZSBzaW1wbGUKLSAqIGlzIHRo YXQgdGhlIHBsYW4gbXVzdCBub3QgcmVxdWlyZSB0YWtpbmcgYW55IGxvY2tzLCB3aGljaCB0cmFu c2xhdGVzIHRvCi0gKiBub3QgdG91Y2hpbmcgYW55IHRhYmxlczsgdGhpcyBoYXBwZW5zIHRvIG1h dGNoIHVwIHdlbGwgd2l0aCBhbiBpbXBvcnRhbnQKLSAqIHVzZS1jYXNlIGluIFBML3BnU1FMLiAg VGhpcyBmdW5jdGlvbiB0ZXN0cyB3aGV0aGVyIHRoYXQncyB0cnVlLCBhbG9uZwotICogd2l0aCBj aGVja2luZyBzb21lIG90aGVyIGNvcm5lciBjYXNlcyB0aGF0IHdlJ2QgcmF0aGVyIG5vdCBib3Ro ZXIgd2l0aAorICogaXMgdGhhdCB0aGUgcGxhbiBtdXN0IG5vdCByZXF1aXJlIHRha2luZyBhbnkg ZXhlY3V0aW9uIGxvY2tzLCB3aGljaAorICogdHJhbnNsYXRlcyB0byBub3QgdG91Y2hpbmcgYW55 IHRhYmxlczsgdGhpcyBoYXBwZW5zIHRvIG1hdGNoIHVwIHdlbGwgd2l0aCBhbgorICogaW1wb3J0 YW50IHVzZS1jYXNlIGluIFBML3BnU1FMLiAgVGhpcyBmdW5jdGlvbiB0ZXN0cyB3aGV0aGVyIHRo YXQncyB0cnVlLAorICogYWxvbmcgd2l0aCBjaGVja2luZyBzb21lIG90aGVyIGNvcm5lciBjYXNl cyB0aGF0IHdlJ2QgcmF0aGVyIG5vdCBib3RoZXIgd2l0aAogICogaGFuZGxpbmcgaW4gdGhlIGZh c3QgcGF0aC4gIChOb3RlIHRoYXQgaXQncyBzdGlsbCBwb3NzaWJsZSBmb3Igc3VjaCBhIHBsYW4K ICAqIHRvIGJlIGludmFsaWRhdGVkLCBmb3IgZXhhbXBsZSBkdWUgdG8gYSBjaGFuZ2UgaW4gYSBm dW5jdGlvbiB0aGF0IHdhcwogICogaW5saW5lZCBpbnRvIHRoZSBwbGFuLikKQEAgLTE1MjQsNyAr MTU5Myw3IEBAIENhY2hlZFBsYW5BbGxvd3NTaW1wbGVWYWxpZGl0eUNoZWNrKENhY2hlZFBsYW5T b3VyY2UgKnBsYW5zb3VyY2UsCiAJfQogCiAJLyoKLQkgKiBSZWplY3QgaWYgQWNxdWlyZUV4ZWN1 dG9yTG9ja3Mgd291bGQgaGF2ZSBhbnl0aGluZyB0byBkby4gIFRoaXMgaXMKKwkgKiBSZWplY3Qg aWYgdGhlIHBsYW4gd291bGQgcmVxdWlyZSB0YWtpbmcgYW55IGV4ZWN1dGlvbiBsb2Nrcy4gIFRo aXMgaXMKIAkgKiBwcm9iYWJseSB1bm5lY2Vzc2FyeSBnaXZlbiB0aGUgcHJldmlvdXMgY2hlY2ss IGJ1dCBsZXQncyBiZSBzYWZlLgogCSAqLwogCWZvcmVhY2gobGMsIHBsYW4tPnN0bXRfbGlzdCkK QEAgLTE1NDksOCArMTYxOCw4IEBAIENhY2hlZFBsYW5BbGxvd3NTaW1wbGVWYWxpZGl0eUNoZWNr KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAJfQogCiAJLyoKLQkgKiBPa2F5LCBpdCdz IHNpbXBsZS4gIE5vdGUgdGhhdCB3aGF0IHdlJ3ZlIHByaW1hcmlseSBlc3RhYmxpc2hlZCBoZXJl IGlzCi0JICogdGhhdCBubyBsb2NrcyBuZWVkIGJlIHRha2VuIGJlZm9yZSBjaGVja2luZyB0aGUg cGxhbidzIGlzX3ZhbGlkIGZsYWcuCisJICogT2theSwgaXQncyBzaW1wbGUuICBXaGF0IHdlJ3Zl IHByaW1hcmlseSBlc3RhYmxpc2hlZCBoZXJlIGlzIHRoYXQgbm8KKwkgKiBleGVjdXRpb24gbG9j a3MgbmVlZCBiZSB0YWtlbiBiZWZvcmUgY2hlY2tpbmcgdGhlIHBsYW4ncyBpc192YWxpZCBmbGFn LgogCSAqLwogCiAJLyogQnVtcCByZWZjb3VudCBpZiByZXF1ZXN0ZWQuICovCkBAIC0xOTA2LDYg KzE5NzUsOSBAQCBRdWVyeUxpc3RHZXRQcmltYXJ5U3RtdChMaXN0ICpzdG10cykKIC8qCiAgKiBB Y3F1aXJlRXhlY3V0b3JMb2NrczogYWNxdWlyZSBsb2NrcyBuZWVkZWQgZm9yIGV4ZWN1dGlvbiBv ZiBhIGNhY2hlZCBwbGFuOwogICogb3IgcmVsZWFzZSB0aGVtIGlmIGFjcXVpcmUgaXMgZmFsc2Uu CisgKgorICogQWNxdWlyZSBvciByZWxlYXNlIGV4ZWN1dGlvbiBsb2NrcyBvbiBhbGwgcmVsYXRp b25zIHJlZmVyZW5jZWQgYnkgdGhlCisgKiBQbGFubmVkU3RtdHMgaW4gc3RtdF9saXN0LgogICov CiBzdGF0aWMgdm9pZAogQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29s IGFjcXVpcmUpCkBAIC0xOTU1LDYgKzIwMjcsMjggQEAgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlz dCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCiAJfQogfQogCisvKgorICogTG9ja0NhY2hlZFBs YW4KKyAqCQlBY3F1aXJlIGV4ZWN1dGlvbiBsb2NrcyBvbiBhbGwgcmVsYXRpb25zIHJlZmVyZW5j ZWQgYnkgYSByZXVzZWQKKyAqCQljYWNoZWQgcGxhbiwgYW5kIHJlY2hlY2sgdmFsaWRpdHkgYWZ0 ZXIgbG9ja2luZy4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwbGFuIGlzIGludmFsaWRh dGVkIHdoaWxlIGxvY2tzIGFyZSBiZWluZyBhY3F1aXJlZCwKKyAqIGluIHdoaWNoIGNhc2UgYW55 IGxvY2tzIGFjcXVpcmVkIGJ5IHRoaXMgZnVuY3Rpb24gaGF2ZSBiZWVuIHJlbGVhc2VkLgorICov CitzdGF0aWMgYm9vbAorTG9ja0NhY2hlZFBsYW4oQ2FjaGVkUGxhbiAqY3BsYW4sIENhY2hlZFBs YW5Tb3VyY2UgKnBsYW5zb3VyY2UpCit7CisJQWNxdWlyZUV4ZWN1dG9yTG9ja3MoY3BsYW4tPnN0 bXRfbGlzdCwgdHJ1ZSk7CisKKwlpZiAoIVJlY2hlY2tDYWNoZWRQbGFuKGNwbGFuLCBwbGFuc291 cmNlKSkKKwl7CisJCUFjcXVpcmVFeGVjdXRvckxvY2tzKGNwbGFuLT5zdG10X2xpc3QsIGZhbHNl KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCiAvKgogICogQWNx dWlyZVBsYW5uZXJMb2NrczogYWNxdWlyZSBsb2NrcyBuZWVkZWQgZm9yIHBsYW5uaW5nIG9mIGEg cXVlcnl0cmVlIGxpc3Q7CiAgKiBvciByZWxlYXNlIHRoZW0gaWYgYWNxdWlyZSBpcyBmYWxzZS4K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvcGxhbmNhY2hlLmgKaW5kZXggN2E0YTg1YzgwMzguLjg3ZmQxMjY4ZWFjIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGls cy9wbGFuY2FjaGUuaApAQCAtMjQwLDcgKzI0MCwxMyBAQCBleHRlcm4gTGlzdCAqQ2FjaGVkUGxh bkdldFRhcmdldExpc3QoQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIGV4dGVybiBDYWNo ZWRQbGFuICpHZXRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAJCQkJ CQkJCSBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zLAogCQkJCQkJCQkgUmVzb3VyY2VPd25lciBv d25lciwKLQkJCQkJCQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKKwkJCQkJCQkJIFF1 ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAorCQkJCQkJCQkgYm9vbCAqaXNfcmV1c2VkKTsKK2V4 dGVybiBib29sIFJlY2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW4gKmNwbGFuLCBDYWNoZWRQbGFu U291cmNlICpwbGFuc291cmNlKTsKK2V4dGVybiBDYWNoZWRQbGFuICpHZXRDYWNoZWRQbGFuTG9j a2VkKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCisJCQkJCQkJCQkgICBQYXJhbUxpc3RJ bmZvIGJvdW5kUGFyYW1zLAorCQkJCQkJCQkJICAgUmVzb3VyY2VPd25lciBvd25lciwKKwkJCQkJ CQkJCSAgIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKIGV4dGVybiB2b2lkIFJlbGVhc2VD YWNoZWRQbGFuKENhY2hlZFBsYW4gKnBsYW4sIFJlc291cmNlT3duZXIgb3duZXIpOwogCiBleHRl cm4gYm9vbCBDYWNoZWRQbGFuQWxsb3dzU2ltcGxlVmFsaWRpdHlDaGVjayhDYWNoZWRQbGFuU291 cmNlICpwbGFuc291cmNlLAotLSAKMi40Ny4zCgo= --00000000000068787a064f7ff2c8--