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 1wRaxB-002Uxo-1Q for pgsql-bugs@arkaria.postgresql.org; Mon, 25 May 2026 19:27:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wRax9-001zw7-1N for pgsql-bugs@arkaria.postgresql.org; Mon, 25 May 2026 19:27:08 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wRax8-001zvz-2y for pgsql-bugs@lists.postgresql.org; Mon, 25 May 2026 19:27:08 +0000 Received: from mail-ot1-x32d.google.com ([2607:f8b0:4864:20::32d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wRax8-00000000kHg-0lp9 for pgsql-bugs@lists.postgresql.org; Mon, 25 May 2026 19:27:07 +0000 Received: by mail-ot1-x32d.google.com with SMTP id 46e09a7af769-7e36bb16a92so5356805a34.2 for ; Mon, 25 May 2026 12:27:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779737225; cv=none; d=google.com; s=arc-20240605; b=lBXc13o2U8Wz8uFSgduq4nyoNNqzC0Xg3dY2RqXL4V83Wf7MQAYrNChccAPWy9ITeD uSaxR7JwaG2U1wgYwUnCV633zMhjCPNc/YFC+unZhh5PQQMy3NO+LLG9yFnjp69y5kan BCua+4p1Tl46ya5pxMXJEvp+BehidubVJQlkCnsS+YsKwKCtkHouX1L2WDAgoaYIEiaZ j3kNrJuL3yC4X7ZqHzZoAvYdMPBwmJlJB1hs/D3VujDjLaqwlHC2smkn4ObXJUXXBhO7 Q3QWEIizZ1mmsOtaJhcYS6SGut+L2OsHXYtoZ2UG87l4AKGbUS49vSv2529GQujWlW2N HEyw== 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=CNbi9kg41AYOqoffI9jqrwD2cBEmkpEB6Exqm5X1RCA=; fh=ugVvdUsjPvtcQQIfyOfXr65xrya0BnixE/ubkOxpudo=; b=NIL2Y7gN+xZHhY3lCnznGY9Dq8x68fDM+POUbAsZKX07pBgBYeqamzVVb5mBOKrRtf nektOWMmjIMaqQO/z1s9uPyqkUtl9Y3w65Ae42GsCw7EVkZ1MO/lgKOD91ZkxzT/4MKU cdUBtupWGWAOQh02G4kpi2YBF6ajcQwSK7i/c5/5EY1AbgnATFze6fL0k6OVpAiqjDGb TtPTDI8RI7uvK9SV2dVH31cEG7pMUj5gP3tGX6XGF0kwaOnwpgKfsXCgngLDBjvGWTM/ erAoGO4g0UjW+TpvEYxHf54/Twp7iMDghMmDW0P7MkTw8obyniuEQ3YTeoiY57Lzm+sM cVGQ==; darn=lists.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=1779737225; x=1780342025; 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=CNbi9kg41AYOqoffI9jqrwD2cBEmkpEB6Exqm5X1RCA=; b=RpzkXv5D3x9yDhwzECbI0ONrJuqi4rHO5NN08oeo7/W6+WPaALz1ysheGql70tUEYN uK99eOdoWo+TT+v3VucPJWcDlE6QnwlfHSAf4u8pYuv6Tkwa4FzCkKwxipNNKHeftLWL 7bHRDOpDNr4RqMpUhdck6t3hjrP6o3UsLNU37Ft5jRFZbTGg2xBaaIBLCBR5nd3l7Xmq RD/Wc/Ge8I1djmTkcL+1Y1f5n+kx67LdbVnFpfAa8Wm6hL03AGhEbLSfqtSRL12MqM9k us9iUuJiZW164W5ZVWaLRiEKHp34J4mmfZTbb5S09WL09fVJ8COZBEJsPiuTEoTk5MGY 4fug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779737225; x=1780342025; 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=CNbi9kg41AYOqoffI9jqrwD2cBEmkpEB6Exqm5X1RCA=; b=FFQYQOHn3/4/cIjfsuIheHOESxiAPpphn70laG5rzjvLzcDZaFKiffBh/BmXl7hOcL vAusXmnSb/Qz4XzVNfJRa9Wa6p0Gqi6x31EeZRrE6C1gR9AAhzMGBeTSfpcUkJYodtVe qGIz6obf6NKa2CoSzywOx27e9tBYCXFHtBmham3oFdAoAhfVeDIIrS39ExXDMrB9Fj4t AmcPclvK8l1o5U5A1cLQ/Av4tpBnMA5G7ZN59PJn8sNEfnME3D48EHxLgSzoDhcm2a6j 7e+C79HSy/52IJR8OUFDDKxSxosonU9aWySDp4QLYN7q61MOf4dpbuc1NX3ARwYsXRlU FRtw== X-Forwarded-Encrypted: i=1; AFNElJ+nf14IMjbLuGB61JxF681GX4aTDibQL963GaOisHRHcE5SUewFqo38+A91UGyPy7op6LwVf0lI613j@lists.postgresql.org X-Gm-Message-State: AOJu0YzUHtdz1HEjzQITDtOylgsF+ux6/MQQD2OIVtejUVQCJ832xyfC 9ZLSHhS7UqIkUaOGcSa0WnOtKBQwkpbgrqLpNXM15IWmW3jBkONwwNIlmaymEgRMdZGFn9SPYUC 0zBVMtjn56Vs8/9NjmF8VCKYHRn3ENDA= X-Gm-Gg: Acq92OEBFKhBzkXN+xiQXvx8BkA/b61Y6BrxaQioFTyXzs5tqSrXz4Aeu8Hx+B0NEBP B7dad1FS+fo0ZfejO7GZ2pF1QqW45qqzYOSUmuuZuj6g22k/ZVjB2IMMR3Hhd8iMe2OADIolio6 B4DFLFJN4q5yjqqtg0Fo51p1Ww9OoA28nhBG44vRZ3/DiZvuJ/OUX/eRVRl0lcjEApvqI7Fs1D3 I4w53dDFYgr+vfH8UhfBS3XeXmJ7hbKCytxiMmwcwOIM6OUO/tA3wVTIl0V6MjILuAQpATtJE7A 4767IDovxtk5hC7D8L0RKQnQXX/J2u6xw3TnTME5Pgx8zUBTL1KzARgPbcOJd9Cbb65M5S04sLX x5HEhrco= X-Received: by 2002:a05:6820:606:b0:69d:ce78:79a0 with SMTP id 006d021491bc7-69dce787a4dmr543184eaf.34.1779737224794; Mon, 25 May 2026 12:27:04 -0700 (PDT) MIME-Version: 1.0 References: <19435-3cc1a87f291129f1@postgresql.org> <5a039d60-d13b-4cf0-a807-9c7269f06831@gmail.com> <42e88e4b-0958-49a3-b32c-b61f9eec8da0@gmail.com> In-Reply-To: <42e88e4b-0958-49a3-b32c-b61f9eec8da0@gmail.com> From: Alexander Korotkov Date: Mon, 25 May 2026 22:26:51 +0300 X-Gm-Features: AVHnY4KagtSCZLqv8S52HxsAmaywjRaZG90EREZGju2SL6jDnzZLiI0H2k3cx1g Message-ID: Subject: Re: BUG #19435: Error: "No relation entry for relid 2" Triggered by Complex Join with Self-Referencing Tables To: Andrei Lepikhov Cc: Tender Wang , Kirill Reshke , Fujii Masao , ammmkilo@163.com, pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000013f0d00652a95d08" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000013f0d00652a95d08 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Andrei! On Fri, May 22, 2026 at 1:16=E2=80=AFPM Andrei Lepikhov = wrote: > On 22/04/2026 17:10, Alexander Korotkov wrote: > > On Fri, Mar 27, 2026 at 3:19=E2=80=AFAM Tender Wang wrote: > >>> but I'm unsure, in general, that this approach is conservative enough= . > >>> Maybe we shouldn=E2=80=99t change this logic and invent one more opti= misation > >>> =E2=80=98deduplication=E2=80=99 stage later, before the selectivity e= stimation stage. > > > > I have another approach about to deduplication of RestrictInfo's. The > > field, which differs in this case, is outer_relids. AFAICS, > > outer_relids and incompatible_relids serves as the restriction on what > > we can do with RestrictInfo. So, what we can do is to ignore both > > outer_relids and incompatible_relids during comparison, but compose a > > union of their values for remaining RestrictInfo. That means that > > remaining RestrictInfo will ancest all the restrictions, and that > > should be safe. > > > > What do you think? > > Thank you for all the work you=E2=80=99ve put into de-duplicating clauses= . > > I agree that using the union of outer_relids and incompatible_relids is t= he > strictest common constraint. There shouldn=E2=80=99t be any issues, so th= is approach > should work. > > However, the new function relies on a hand-picked list of "semantic" fiel= ds. If > someone adds another field to RestrictInfo, this function could break wit= hout > warning unless they remember to update it. We should add comment hooks th= at say, > "If you add a field here, update analyzejoins.c too." > > Also, de-duplication happens in several places. If we change the logic in > add_non_redundant_clauses, maybe we should review the update_eclasses() c= ode as > well. Please, check the updated patch. Now restrict_infos_logically_equal() uses old save/restore approach. Also added guardian comment to RestrictInfo. update_eclasses() switched to use restrict_infos_logically_equal() to compare RestrictInfos. ------ Regards, Alexander Korotkov Supabase --00000000000013f0d00652a95d08 Content-Type: application/octet-stream; name="v2-0001-Deduplicate-RestrictInfos-differing-only-in-outer.patch" Content-Disposition: attachment; filename="v2-0001-Deduplicate-RestrictInfos-differing-only-in-outer.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpljzl1f0 RnJvbSBkZDMzZGJkN2VjMGZlMTFiNzZkNjFkNDBlNjg3YTJiN2FlNjE1NmY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogV2VkLCAyMiBBcHIgMjAyNiAxNzoyODoyMyArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjJdIERlZHVwbGljYXRlIFJlc3RyaWN0SW5mb3MgZGlmZmVyaW5nIG9ubHkgaW4gb3V0 ZXJfcmVsaWRzCiBpbiBTSkUKCkR1cmluZyBzZWxmLWpvaW4gZWxpbWluYXRpb24sIGFuIEVDLWRl cml2ZWQgSVMgTk9UIE5VTEwgY2xhdXNlIGZyb20gYW4KaW5uZXIgam9pbiBhbmQgYW4gaWRlbnRp Y2FsIGNsYXVzZSBvcmlnaW5hdGluZyBmcm9tIGFuIGVuY2xvc2luZyBvdXRlcgpqb2luJ3MgT04g Y2xhdXNlIG1heSBib3RoIGJlIG1vdmVkIHRvIHRoZSBzdXJ2aXZpbmcgcmVsYXRpb24uICBUaGV5 CmFyZSBsb2dpY2FsbHkgZXF1aXZhbGVudCBidXQgY2FycnkgZGlmZmVyZW50IG91dGVyX3JlbGlk cyAvCmluY29tcGF0aWJsZV9yZWxpZHMgKHBsYWNlbWVudCBjb25zdHJhaW50cywgbm90IHNlbWFu dGljIGNvbnRlbnQpLCBzbwpyZXN0cmljdF9pbmZvc19sb2dpY2FsbHlfZXF1YWwoKSB1c2VkIHRv IGtlZXAgYm90aCwgcHJvZHVjaW5nIGEKZHVwbGljYXRlZCBmaWx0ZXIgaW4gdGhlIHBsYW4uCgpS YXRoZXIgdGhhbiBlbnVtZXJhdGUgdGhlIGZpZWxkcyB0aGF0IHBhcnRpY2lwYXRlIGluIGxvZ2lj YWwgZXF1YWxpdHkKYnkgaGFuZCwgcmVzdHJpY3RfaW5mb3NfbG9naWNhbGx5X2VxdWFsKCkgbm93 IGxlYW5zIG9uIHRoZQphdXRvZ2VuZXJhdGVkIGVxdWFsKCkgYW5kIG9ubHkgc3VwcHJlc3NlcyB0 aGUgZmV3IGZpZWxkcyB0aGF0IG1heQpsZWdpdGltYXRlbHkgZGlmZmVyIGJldHdlZW4gdHdvIGVx dWl2YWxlbnQgUmVzdHJpY3RJbmZvczogcmluZm9fc2VyaWFsCihpZGVudGlmaWVyIG9ubHkpIGFu ZCBvdXRlcl9yZWxpZHMgLyBpbmNvbXBhdGlibGVfcmVsaWRzIChwbGFjZW1lbnQKY29uc3RyYWlu dHMpLiAgQWxsIG90aGVyIGZpZWxkcyBhcmUgZWl0aGVyIGNvbXBhcmVkIGJ5IGVxdWFsKCkgb3IK YWxyZWFkeSB0YWdnZWQgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSkgYW5kIHNraXBwZWQgYXV0 b21hdGljYWxseSwKc28gYSBuZXdseSBhZGRlZCBzZW1hbnRpY2FsbHkgc2lnbmlmaWNhbnQgZmll bGQgaXMgcGlja2VkIHVwIGhlcmUKd2l0aG91dCBjaGFuZ2luZyB0aGlzIGZ1bmN0aW9uLiAgQSBj b21tZW50IG5lYXIgdGhlIFJlc3RyaWN0SW5mbwpzdHJ1Y3QgcG9pbnRzIGJhY2sgYXQgdGhpcyBm dW5jdGlvbiBmb3IgZnV0dXJlIG1haW50YWluZXJzLgoKV2hlbiBhIGR1cGxpY2F0ZSBpcyBmb3Vu ZCwgbWVyZ2Ugb3V0ZXJfcmVsaWRzIGFuZCBpbmNvbXBhdGlibGVfcmVsaWRzCm9mIHRoZSB0d28g UmVzdHJpY3RJbmZvcyBieSB1bmlvbiBpbnRvIHRoZSBzdXJ2aXZpbmcgb25lIHZpYSB0aGUgbmV3 Cm1lcmdlX2xvZ2ljYWxseV9lcXVhbF9yZXN0cmljdGluZm8oKSBoZWxwZXIsIHNvIHRoZSBrZXB0 IGNsYXVzZQpjYXJyaWVzIHRoZSBzdHJpY3Rlc3QgcGxhY2VtZW50IGFsbG93ZWQgYnkgZWl0aGVy IG9yaWdpbmFsLiAgQXBwbHkKdGhlIHNhbWUgZGVkdXAtYW5kLW1lcmdlIHN0ZXAgdG8gdXBkYXRl X2VjbGFzc2VzKCkgc28gRUMtc291cmNlCmNsYXVzZXMgdGhhdCBjb252ZXJnZSBhZnRlciByZWxp ZCBzdWJzdGl0dXRpb24gYXJlIGhhbmRsZWQKY29uc2lzdGVudGx5IHdpdGggYWRkX25vbl9yZWR1 bmRhbnRfY2xhdXNlcygpLgoKUmV2aWV3ZWQtYnk6IFRlbmRlciBXYW5nIDx0bmRyd2FuZ0BnbWFp bC5jb20+ClJldmlld2VkLWJ5OiBBbmRyZWkgTGVwaWtob3YgPGxlcGlob3ZAZ21haWwuY29tPgpC dWc6ICMxOTQzNQotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5j IHwgOTkgKysrKysrKysrKysrKysrKysrKystLS0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oICAgICAgICAgICAgIHwgIDcgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5v dXQgICAgICAgIHwgMjAgKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsICAgICAg ICAgICAgIHwgMTAgKysrCiA0IGZpbGVzIGNoYW5nZWQsIDEyNCBpbnNlcnRpb25zKCspLCAxMiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9hbmFs eXplam9pbnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jCmlu ZGV4IGIwN2NiNzMxNDAxLi4yYTk2ZDNhYWYxZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vYW5hbHl6ZWpvaW5zLmMKQEAgLTc5LDYgKzc5LDkgQEAgc3RhdGljIGJvb2wgaXNfaW5uZXJy ZWxfdW5pcXVlX2ZvcihQbGFubmVySW5mbyAqcm9vdCwKIHN0YXRpYyBpbnQJc2VsZl9qb2luX2Nh bmRpZGF0ZXNfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOwogc3RhdGljIGJvb2wg cmVwbGFjZV9yZWxpZF9jYWxsYmFjayhOb2RlICpub2RlLAogCQkJCQkJCQkgICBDaGFuZ2VWYXJO b2Rlc19jb250ZXh0ICpjb250ZXh0KTsKK3N0YXRpYyBib29sIHJlc3RyaWN0X2luZm9zX2xvZ2lj YWxseV9lcXVhbChSZXN0cmljdEluZm8gKmEsIFJlc3RyaWN0SW5mbyAqYik7CitzdGF0aWMgdm9p ZCBtZXJnZV9sb2dpY2FsbHlfZXF1YWxfcmVzdHJpY3RpbmZvKFJlc3RyaWN0SW5mbyAqZHN0LAor CQkJCQkJCQkJCQkgICBSZXN0cmljdEluZm8gKnNyYyk7CiAKIAogLyoKQEAgLTE2NDUsMTQgKzE2 NDgsMjEgQEAgdXBkYXRlX2VjbGFzc2VzKEVxdWl2YWxlbmNlQ2xhc3MgKmVjLCBpbnQgZnJvbSwg aW50IHRvKQogCQkgKiBBZnRlciBzd2l0Y2hpbmcgdGhlIGNsYXVzZSB0byB0aGUgcmVtYWluaW5n IHJlbGF0aW9uLCBjaGVjayBpdCBmb3IKIAkJICogcmVkdW5kYW5jeSB3aXRoIGV4aXN0aW5nIG9u ZXMuIFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgZm9yCiAJCSAqIHJlZHVuZGFuY3kgd2l0aCBkZXJp dmVkIGNsYXVzZXMsIGJlY2F1c2Ugd2UndmUganVzdCBkZWxldGVkIHRoZW0uCisJCSAqCisJCSAq IFVzZSByZXN0cmljdF9pbmZvc19sb2dpY2FsbHlfZXF1YWwoKSBzbyB0aGUgY29tcGFyaXNvbiBz dGF5cyBpbgorCQkgKiBzeW5jIHdpdGggYWRkX25vbl9yZWR1bmRhbnRfY2xhdXNlcygpOiBlcXVh bCBjbGF1c2VzIHRoYXQgZGlmZmVyCisJCSAqIG9ubHkgaW4gdGhlaXIgb3V0ZXJfcmVsaWRzIC8g aW5jb21wYXRpYmxlX3JlbGlkcyBhcmUgZGVkdXBsaWNhdGVkCisJCSAqIGFuZCB0aGUgcGxhY2Vt ZW50IGNvbnN0cmFpbnRzIG9mIHRoZSBkcm9wcGVkIGNsYXVzZSBhcmUgbWVyZ2VkIGludG8KKwkJ ICogdGhlIHN1cnZpdm9yLgogCQkgKi8KIAkJZm9yZWFjaF9ub2RlKFJlc3RyaWN0SW5mbywgb3Ro ZXIsIG5ld19zb3VyY2VzKQogCQl7CiAJCQlpZiAoIWVxdWFsKHJpbmZvLT5jbGF1c2VfcmVsaWRz LCBvdGhlci0+Y2xhdXNlX3JlbGlkcykpCiAJCQkJY29udGludWU7CiAKLQkJCWlmIChlcXVhbChy aW5mby0+Y2xhdXNlLCBvdGhlci0+Y2xhdXNlKSkKKwkJCWlmIChyZXN0cmljdF9pbmZvc19sb2dp Y2FsbHlfZXF1YWwocmluZm8sIG90aGVyKSkKIAkJCXsKKwkJCQltZXJnZV9sb2dpY2FsbHlfZXF1 YWxfcmVzdHJpY3RpbmZvKG90aGVyLCByaW5mbyk7CiAJCQkJaXNfcmVkdW5kYW50ID0gdHJ1ZTsK IAkJCQlicmVhazsKIAkJCX0KQEAgLTE2NjgsMjcgKzE2NzgsNzkgQEAgdXBkYXRlX2VjbGFzc2Vz KEVxdWl2YWxlbmNlQ2xhc3MgKmVjLCBpbnQgZnJvbSwgaW50IHRvKQogfQogCiAvKgotICogIkxv Z2ljYWxseSIgY29tcGFyZXMgdHdvIFJlc3RyaWN0SW5mbydzIGlnbm9yaW5nIHRoZSAncmluZm9f c2VyaWFsJyBmaWVsZCwKLSAqIHdoaWNoIG1ha2VzIGFsbW9zdCBldmVyeSBSZXN0cmljdEluZm8g dW5pcXVlLiAgVGhpcyB0eXBlIG9mIGNvbXBhcmlzb24gaXMKLSAqIHVzZWZ1bCB3aGVuIHJlbW92 aW5nIGR1cGxpY2F0ZXMgd2hpbGUgbW92aW5nIFJlc3RyaWN0SW5mbydzIGZyb20gcmVtb3ZlZAot ICogcmVsYXRpb24gdG8gcmVtYWluaW5nIHJlbGF0aW9uIGR1cmluZyBzZWxmLWpvaW4gZWxpbWlu YXRpb24uCisgKiBDb21wYXJlIHR3byBSZXN0cmljdEluZm9zIGZvciBsb2dpY2FsIGVxdWl2YWxl bmNlIGR1cmluZyBzZWxmLWpvaW4KKyAqIGVsaW1pbmF0aW9uIGRlZHVwLiAgVHdvIGNsYXVzZXMg YXJlIGxvZ2ljYWxseSBlcXVpdmFsZW50IGlmIHRoZXkgYXBwbHkKKyAqIHRoZSBzYW1lIHRlc3Qg YXQgdGhlIHNhbWUgc2VtYW50aWMgcGxhY2VtZW50IGxldmVsLCBpLmUuIHRoZWlyIGNsYXVzZQor ICogY29udGVudCBhbmQgdGhlIGZpZWxkcyB0aGF0IGRldGVybWluZSB3aGVuL3doZXJlIHRoZSBm aWx0ZXIgbXVzdCBydW4KKyAqIGFsbCBtYXRjaC4KKyAqCisgKiBSYXRoZXIgdGhhbiBlbnVtZXJh dGUgdGhlIGZpZWxkcyB0byBjb21wYXJlLCB3ZSBsZWFuIG9uIHRoZQorICogYXV0b2dlbmVyYXRl ZCBlcXVhbCgpIGZ1bmN0aW9uIGFuZCBvbmx5IG92ZXJyaWRlIHRoZSBmZXcgZmllbGRzIHRoYXQK KyAqIG1heSBsZWdpdGltYXRlbHkgZGlmZmVyIGJldHdlZW4gdHdvIGVxdWl2YWxlbnQgUmVzdHJp Y3RJbmZvczoKKyAqCisgKiAgIC0gcmluZm9fc2VyaWFsIGlzIG9ubHkgYW4gaWRlbnRpZmllciBh bmQgZG9lcyBub3QgYWZmZWN0IHNlbWFudGljczsKICAqCi0gKiBYWFg6IEluIHRoZSBmdXR1cmUs IHdlIG1pZ2h0IHJlbW92ZSB0aGUgJ3JpbmZvX3NlcmlhbCcgZmllbGQgY29tcGxldGVseSBhbmQK LSAqIGdldCByaWQgb2YgdGhpcyBmdW5jdGlvbi4KKyAqICAgLSBvdXRlcl9yZWxpZHMgYW5kIGlu Y29tcGF0aWJsZV9yZWxpZHMgYXJlIHBsYWNlbWVudCAqY29uc3RyYWludHMqCisgKiAgICAgcmF0 aGVyIHRoYW4gY29udGVudC4gIFRoZSBzYW1lIGxvZ2ljYWwgZmlsdGVyIGNhbiBhcmlzZSBmcm9t CisgKiAgICAgZGlmZmVyZW50IGxldmVscyBvZiB0aGUgam9pbiB0cmVlIChlLmcuIGFuIEVDLWRl cml2ZWQgSVMgTk9UIE5VTEwKKyAqICAgICBmcm9tIGFuIGlubmVyIGpvaW4gdnMuIGFuIG9yaWdp bmFsIE9OLWNsYXVzZSBmcm9tIGFuIGVuY2xvc2luZworICogICAgIG91dGVyIGpvaW4pIHdpdGgg ZGlmZmVyZW50IGNvbnN0cmFpbnQgc2V0cy4gIENhbGxlcnMgbXVzdCB1bmlvbgorICogICAgIHRo ZXNlIGNvbnN0cmFpbnRzIHdoZW4gdHJlYXRpbmcgb25lIGNsYXVzZSBhcyByZWR1bmRhbnQgd2l0 aCB0aGUKKyAqICAgICBvdGhlciwgc28gdGhlIHN1cnZpdmluZyBjbGF1c2UgY2FycmllcyB0aGUg c3RyaWN0ZXN0IHBsYWNlbWVudAorICogICAgIGFsbG93ZWQgYnkgZWl0aGVyIG9yaWdpbmFsLiAg U2VlIGFkZF9ub25fcmVkdW5kYW50X2NsYXVzZXMoKSBhbmQKKyAqICAgICB1cGRhdGVfZWNsYXNz ZXMoKS4KKyAqCisgKiBBbGwgb3RoZXIgZmllbGRzIGFyZSBlaXRoZXIgY29tcGFyZWQgYnkgZXF1 YWwoKSBvciBhbHJlYWR5IG1hcmtlZAorICogcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSkgaW4g dGhlIFJlc3RyaWN0SW5mbyBzdHJ1Y3QgZGVmaW5pdGlvbiAoYW5kCisgKiB0aHVzIHNraXBwZWQg YXV0b21hdGljYWxseSksIHNvIGEgbmV3IHNlbWFudGljYWxseSBzaWduaWZpY2FudCBmaWVsZAor ICogYWRkZWQgdG8gUmVzdHJpY3RJbmZvIHdpbGwgYmUgcGlja2VkIHVwIGhlcmUgd2l0aG91dCBh bnkgY2hhbmdlLiAgSWYKKyAqIHRoZSBuZXcgZmllbGQgaXMgaXRzZWxmIGEgcGxhY2VtZW50IGNv bnN0cmFpbnQgdGhhdCBtYXkgbGVnaXRpbWF0ZWx5CisgKiBkaWZmZXIgYmV0d2VlbiBlcXVpdmFs ZW50IGNsYXVzZXMsIGV4dGVuZCB0aGUgc2F2ZS9yZXN0b3JlIGxpc3QgYmVsb3cKKyAqIGFuZCB1 cGRhdGUgdGhlIHVuaW9uIHN0ZXAgaW4gdGhlIGNhbGxlcnM7IHRoZSBjb21tZW50IG5lYXIKKyAq IFJlc3RyaWN0SW5mbyBpbiBwYXRobm9kZXMuaCBwb2ludHMgYmFjayBoZXJlLgogICovCiBzdGF0 aWMgYm9vbAogcmVzdHJpY3RfaW5mb3NfbG9naWNhbGx5X2VxdWFsKFJlc3RyaWN0SW5mbyAqYSwg UmVzdHJpY3RJbmZvICpiKQogewotCWludAkJCXNhdmVkX3JpbmZvX3NlcmlhbCA9IGEtPnJpbmZv X3NlcmlhbDsKKwlpbnQJCQlzYXZlZF9yaW5mb19zZXJpYWxfYSA9IGEtPnJpbmZvX3NlcmlhbDsK KwlpbnQJCQlzYXZlZF9yaW5mb19zZXJpYWxfYiA9IGItPnJpbmZvX3NlcmlhbDsKKwlSZWxpZHMJ CXNhdmVkX291dGVyX3JlbGlkc19hID0gYS0+b3V0ZXJfcmVsaWRzOworCVJlbGlkcwkJc2F2ZWRf b3V0ZXJfcmVsaWRzX2IgPSBiLT5vdXRlcl9yZWxpZHM7CisJUmVsaWRzCQlzYXZlZF9pbmNvbXBh dGlibGVfcmVsaWRzX2EgPSBhLT5pbmNvbXBhdGlibGVfcmVsaWRzOworCVJlbGlkcwkJc2F2ZWRf aW5jb21wYXRpYmxlX3JlbGlkc19iID0gYi0+aW5jb21wYXRpYmxlX3JlbGlkczsKIAlib29sCQly ZXN1bHQ7CiAKLQlhLT5yaW5mb19zZXJpYWwgPSBiLT5yaW5mb19zZXJpYWw7CisJYS0+cmluZm9f c2VyaWFsID0gYi0+cmluZm9fc2VyaWFsID0gMDsKKwlhLT5vdXRlcl9yZWxpZHMgPSBiLT5vdXRl cl9yZWxpZHMgPSBOVUxMOworCWEtPmluY29tcGF0aWJsZV9yZWxpZHMgPSBiLT5pbmNvbXBhdGli bGVfcmVsaWRzID0gTlVMTDsKKwogCXJlc3VsdCA9IGVxdWFsKGEsIGIpOwotCWEtPnJpbmZvX3Nl cmlhbCA9IHNhdmVkX3JpbmZvX3NlcmlhbDsKKworCWEtPnJpbmZvX3NlcmlhbCA9IHNhdmVkX3Jp bmZvX3NlcmlhbF9hOworCWItPnJpbmZvX3NlcmlhbCA9IHNhdmVkX3JpbmZvX3NlcmlhbF9iOwor CWEtPm91dGVyX3JlbGlkcyA9IHNhdmVkX291dGVyX3JlbGlkc19hOworCWItPm91dGVyX3JlbGlk cyA9IHNhdmVkX291dGVyX3JlbGlkc19iOworCWEtPmluY29tcGF0aWJsZV9yZWxpZHMgPSBzYXZl ZF9pbmNvbXBhdGlibGVfcmVsaWRzX2E7CisJYi0+aW5jb21wYXRpYmxlX3JlbGlkcyA9IHNhdmVk X2luY29tcGF0aWJsZV9yZWxpZHNfYjsKIAogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBN ZXJnZSBwbGFjZW1lbnQgY29uc3RyYWludHMgKG91dGVyX3JlbGlkcyBhbmQgaW5jb21wYXRpYmxl X3JlbGlkcykgb2YKKyAqICdzcmMnIGludG8gJ2RzdCcgd2hlbiAnc3JjJyBpcyBiZWluZyBkcm9w cGVkIGFzIHJlZHVuZGFudCB3aXRoICdkc3QnLgorICogVW5pb24gaXMgdGhlIHN0cmljdGVzdCBj b21tb24gY29uc3RyYWludDogYW55IHBsYWNlbWVudCBhbGxvd2VkIGJ5IGJvdGgKKyAqIG9yaWdp bmFscyByZW1haW5zIGFsbG93ZWQsIHNvIGtlZXBpbmcgb25seSB0aGUgbWVyZ2VkIGNsYXVzZSBy ZXByb2R1Y2VzCisgKiB0aGUgc2FtZSBmaWx0ZXJpbmcgd2l0aG91dCByZWxheGluZyBhbnkgcHJv aGliaXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCittZXJnZV9sb2dpY2FsbHlfZXF1YWxfcmVzdHJp Y3RpbmZvKFJlc3RyaWN0SW5mbyAqZHN0LCBSZXN0cmljdEluZm8gKnNyYykKK3sKKwlkc3QtPm91 dGVyX3JlbGlkcyA9IGJtc191bmlvbihkc3QtPm91dGVyX3JlbGlkcywgc3JjLT5vdXRlcl9yZWxp ZHMpOworCWRzdC0+aW5jb21wYXRpYmxlX3JlbGlkcyA9IGJtc191bmlvbihkc3QtPmluY29tcGF0 aWJsZV9yZWxpZHMsCisJCQkJCQkJCQkJIHNyYy0+aW5jb21wYXRpYmxlX3JlbGlkcyk7Cit9CisK IC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYWxsIG5vbi1yZWR1bmRhbnQgY2xhdXNlcyB0byB0 aGUga2VlcGluZyByZWxhdGlvbgogICogZHVyaW5nIHNlbGYtam9pbiBlbGltaW5hdGlvbi4gIFRo YXQgaXMgYSBjb250cmFkaWN0b3J5IG9wZXJhdGlvbi4gT24gdGhlCkBAIC0xNjk5LDYgKzE3NjEs MTMgQEAgcmVzdHJpY3RfaW5mb3NfbG9naWNhbGx5X2VxdWFsKFJlc3RyaWN0SW5mbyAqYSwgUmVz dHJpY3RJbmZvICpiKQogICogd291bGQgaGF2ZSBiZWVuIGJldHRlciB0byBhdm9pZCBjYWxsaW5n IHRoZSBlcXVhbCgpIGZ1bmN0aW9uIGhlcmUsIGJ1dAogICogaXQncyB0aGUgb25seSB3YXkgdG8g ZGV0ZWN0IGR1cGxpY2F0ZWQgaW5lcXVhbGl0eSBleHByZXNzaW9ucy4KICAqCisgKiBXaGVuIGEg Y2FuZGlkYXRlIGlzIGZvdW5kIHRvIGJlIGxvZ2ljYWxseSBlcXVpdmFsZW50IHRvIGFuIGFscmVh ZHkta2VwdAorICogY2xhdXNlIGJ1dCBjYXJyaWVzIGRpZmZlcmVudCBvdXRlcl9yZWxpZHMgLyBp bmNvbXBhdGlibGVfcmVsaWRzLCB0aG9zZQorICogcGxhY2VtZW50LWNvbnN0cmFpbnQgc2V0cyBh cmUgbWVyZ2VkIGJ5IHVuaW9uIGludG8gdGhlIHN1cnZpdmluZworICogY2xhdXNlLiAgVGhlIHVu aW9uIGlzIHRoZSBzdHJpY3Rlc3QgY29tbW9uIGNvbnN0cmFpbnQ6IGFueSBwbGFjZW1lbnQKKyAq IGFsbG93ZWQgYnkgYm90aCBvcmlnaW5hbHMgcmVtYWlucyBhbGxvd2VkLCBzbyBrZWVwaW5nIG9u bHkgdGhlIG1lcmdlZAorICogY2xhdXNlIHJlcHJvZHVjZXMgdGhlIHNhbWUgZmlsdGVyaW5nIHdp dGhvdXQgcmVsYXhpbmcgYW55IHByb2hpYml0aW9uLgorICoKICAqICgqa2VlcF9yaW5mb19saXN0 KSBpcyBnaXZlbiBieSBwb2ludGVyIGJlY2F1c2UgaXQgbWlnaHQgYmUgYWx0ZXJlZCBieQogICog ZGlzdHJpYnV0ZV9yZXN0cmljdGluZm9fdG9fcmVscygpLgogICovCkBAIC0xNzIyLDkgKzE3OTEs MTUgQEAgYWRkX25vbl9yZWR1bmRhbnRfY2xhdXNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAogCQkJ aWYgKHNyYyA9PSByaW5mbyB8fAogCQkJCShyaW5mby0+cGFyZW50X2VjICE9IE5VTEwgJiYKLQkJ CQkgc3JjLT5wYXJlbnRfZWMgPT0gcmluZm8tPnBhcmVudF9lYykgfHwKLQkJCQlyZXN0cmljdF9p bmZvc19sb2dpY2FsbHlfZXF1YWwocmluZm8sIHNyYykpCisJCQkJIHNyYy0+cGFyZW50X2VjID09 IHJpbmZvLT5wYXJlbnRfZWMpKQorCQkJeworCQkJCWlzX3JlZHVuZGFudCA9IHRydWU7CisJCQkJ YnJlYWs7CisJCQl9CisKKwkJCWlmIChyZXN0cmljdF9pbmZvc19sb2dpY2FsbHlfZXF1YWwocmlu Zm8sIHNyYykpCiAJCQl7CisJCQkJbWVyZ2VfbG9naWNhbGx5X2VxdWFsX3Jlc3RyaWN0aW5mbyhz cmMsIHJpbmZvKTsKIAkJCQlpc19yZWR1bmRhbnQgPSB0cnVlOwogCQkJCWJyZWFrOwogCQkJfQpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaAppbmRleCAyN2EyYzY4MTViNy4uYjQ3YTYzMmMyNzcgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oCkBAIC0yODg5LDYgKzI4ODksMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgTGltaXRQ YXRoCiAgKgogICogcGFyZW50X2VjLCBsZWZ0X2VjLCByaWdodF9lYyBhcmUgbm90IHByaW50ZWQs IGxlc3QgaXQgbGVhZCB0byBpbmZpbml0ZQogICogcmVjdXJzaW9uIGluIHBsYW4gdHJlZSBkdW1w LgorICoKKyAqIElmIHlvdSBhZGQgYSBuZXcgZmllbGQgdG8gUmVzdHJpY3RJbmZvIHRoYXQgYWZm ZWN0cyBzZW1hbnRpYyBvcgorICogcGxhY2VtZW50LWxldmVsIGVxdWFsaXR5LCBhbHNvIHJldmlz aXQgcmVzdHJpY3RfaW5mb3NfbG9naWNhbGx5X2VxdWFsKCkKKyAqIGFuZCB0aGUgZGVkdXAgY2Fs bGVycyB0aGF0IHJlbHkgb24gaXQgKGFkZF9ub25fcmVkdW5kYW50X2NsYXVzZXMsCisgKiB1cGRh dGVfZWNsYXNzZXMpLiAgRmllbGRzIHRoYXQgYXJlIGNhY2hlcyBvciBvdGhlcndpc2UgaXJyZWxl dmFudCB0bworICogZXF1YWxpdHkgc2hvdWxkIGJlIHRhZ2dlZCBwZ19ub2RlX2F0dHIoZXF1YWxf aWdub3JlKSBzbyB0aGV5IGFyZSBza2lwcGVkCisgKiBhdXRvbWF0aWNhbGx5LgogICovCiAKIHR5 cGVkZWYgc3RydWN0IFJlc3RyaWN0SW5mbwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9qb2luLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKaW5k ZXggNzhiZjAyMmY3YjQuLjI2MzVlMjZhZmQ4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2pvaW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5v dXQKQEAgLTgxNDcsNiArODE0NywyNiBAQCBTRUxFQ1QgMSBBUyBjMSBGUk9NIHNsIHNsMSBMRUZU IEpPSU4gKHNsIEFTIHNsMiBOQVRVUkFMIEpPSU4gc2wgQVMgc2wzKQogICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHNsIHNsNAogKDcgcm93cykKIAorLS0gQW4gRUMtZGVyaXZlZCBJUyBOT1QgTlVM TCAoZnJvbSB0aGUgTkFUVVJBTCBKT0lOJ3Mgc2VsZi1qb2luIHJlbW92YWwpIG1heQorLS0gY29s bGlkZSB3aXRoIGFuIGlkZW50aWNhbCBJUyBOT1QgTlVMTCBvcmlnaW5hdGluZyBmcm9tIGFuIGVu Y2xvc2luZyBvdXRlcgorLS0gam9pbidzIE9OIGNsYXVzZS4gIFRoZSB0d28gY2xhdXNlcyBkaWZm ZXIgb25seSBpbiBvdXRlcl9yZWxpZHMsIHNvIHRoZXkKKy0tIG11c3QgYmUgbWVyZ2VkIChieSB1 bmlvbikgcmF0aGVyIHRoYW4ga2VwdCBhcyBkdXBsaWNhdGVzLiAgQnVnICMxOTQzNS4KK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCAxIEFTIGMxIEZST00gKHNsIEFTIHNsMCBSSUdIVCBKT0lO CisgICgoc2wgQVMgc2wxIE5BVFVSQUwgSk9JTiBzbCBBUyBzbDIpCisgICBSSUdIVCBKT0lOIHNs IEFTIHNsMyBPTiBzbDEuYm9vbF9jb2wgSVMgTk9UIE5VTEwpCisgIE9OIHNsMS5ib29sX2NvbCk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3Rl ZCBMb29wIExlZnQgSm9pbgorICAgLT4gIFNlcSBTY2FuIG9uIHNsIHNsMworICAgLT4gIE5lc3Rl ZCBMb29wIExlZnQgSm9pbgorICAgICAgICAgSm9pbiBGaWx0ZXI6IHNsMi5ib29sX2NvbAorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHNsIHNsMgorICAgICAgICAgICAgICAgRmlsdGVyOiAoKGJv b2xfY29sIElTIE5PVCBOVUxMKSBBTkQgKGEgSVMgTk9UIE5VTEwpIEFORCAoYiBJUyBOT1QgTlVM TCkgQU5EIChjIElTIE5PVCBOVUxMKSkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzbCBzbDAK Kyg3IHJvd3MpCisKIC0tIENoZWNrIG9wdGltaXphdGlvbiBkaXNhYmxpbmcgaWYgaXQgd2lsbCB2 aW9sYXRlIHNwZWNpYWwgam9pbiBjb25kaXRpb25zLgogLS0gVHdvIGlkZW50aWNhbCBqb2luZWQg cmVsYXRpb25zIHNhdGlzZmllcyBzZWxmIGpvaW4gcmVtb3ZhbCBjb25kaXRpb25zIGJ1dAogLS0g c3RheSBpbiBkaWZmZXJlbnQgc3BlY2lhbCBqb2luIGluZm9zLgpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvam9pbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbApp bmRleCBmYWUxOTExM2NlZi4uODljNTRhNmUxNzIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2pvaW4uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCkBAIC0z MTg1LDYgKzMxODUsMTYgQEAgRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIDEgQVMgYzEgRlJP TSBzbCBzbDEgTEVGVCBKT0lOIChzbCBBUyBzbDIgTkFUVVJBTCBKT0lOIHNsIEFTIHNsMykKICAg T04gc2wyLmJvb2xfY29sIExFRlQgSk9JTiBzbCBBUyBzbDQgT04gc2wyLmJvb2xfY29sOwogCist LSBBbiBFQy1kZXJpdmVkIElTIE5PVCBOVUxMIChmcm9tIHRoZSBOQVRVUkFMIEpPSU4ncyBzZWxm LWpvaW4gcmVtb3ZhbCkgbWF5CistLSBjb2xsaWRlIHdpdGggYW4gaWRlbnRpY2FsIElTIE5PVCBO VUxMIG9yaWdpbmF0aW5nIGZyb20gYW4gZW5jbG9zaW5nIG91dGVyCistLSBqb2luJ3MgT04gY2xh dXNlLiAgVGhlIHR3byBjbGF1c2VzIGRpZmZlciBvbmx5IGluIG91dGVyX3JlbGlkcywgc28gdGhl eQorLS0gbXVzdCBiZSBtZXJnZWQgKGJ5IHVuaW9uKSByYXRoZXIgdGhhbiBrZXB0IGFzIGR1cGxp Y2F0ZXMuICBCdWcgIzE5NDM1LgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEgQVMgYzEg RlJPTSAoc2wgQVMgc2wwIFJJR0hUIEpPSU4KKyAgKChzbCBBUyBzbDEgTkFUVVJBTCBKT0lOIHNs IEFTIHNsMikKKyAgIFJJR0hUIEpPSU4gc2wgQVMgc2wzIE9OIHNsMS5ib29sX2NvbCBJUyBOT1Qg TlVMTCkKKyAgT04gc2wxLmJvb2xfY29sKTsKKwogLS0gQ2hlY2sgb3B0aW1pemF0aW9uIGRpc2Fi bGluZyBpZiBpdCB3aWxsIHZpb2xhdGUgc3BlY2lhbCBqb2luIGNvbmRpdGlvbnMuCiAtLSBUd28g aWRlbnRpY2FsIGpvaW5lZCByZWxhdGlvbnMgc2F0aXNmaWVzIHNlbGYgam9pbiByZW1vdmFsIGNv bmRpdGlvbnMgYnV0CiAtLSBzdGF5IGluIGRpZmZlcmVudCBzcGVjaWFsIGpvaW4gaW5mb3MuCi0t IAoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpCgo= --00000000000013f0d00652a95d08--