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 1wDW18-0033Ud-0e for pgsql-bugs@arkaria.postgresql.org; Thu, 16 Apr 2026 23:21:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wDW17-0072Pb-0G for pgsql-bugs@arkaria.postgresql.org; Thu, 16 Apr 2026 23:21:01 +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 1wDW16-0072PR-1l for pgsql-bugs@lists.postgresql.org; Thu, 16 Apr 2026 23:21:00 +0000 Received: from mail-ot1-x32f.google.com ([2607:f8b0:4864:20::32f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wDW14-00000001Ntu-19Q5 for pgsql-bugs@lists.postgresql.org; Thu, 16 Apr 2026 23:20:59 +0000 Received: by mail-ot1-x32f.google.com with SMTP id 46e09a7af769-7dbce74e537so93548a34.1 for ; Thu, 16 Apr 2026 16:20:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776381658; cv=none; d=google.com; s=arc-20240605; b=DXAjb33h7g0/fLx1Phy2tA7ewFiZf78QfygqnjGTeAoDLill4nbUO9wO2dFHHKUodi bfW3dgN1KDzMhcP3YlylNIvOGncfj4QJwo68/fxs8ffZPHzcLTT7mHJFGYrtOz2NLDwq wLu6L8UsHIBz/1s5UeTbhwOISg0eDz9XgE6kNzfvJe2hfWXeT8u5fgb56P+nAb3ggUQm 2DmOsjiUD6DvOv2fZt/pfEGBh+dQ4ZLA9tv/zDvMOHRuRaEvHd69chKS7+Y4TWqX/anL 2bDDe/P4dkTwJwsK389ixtO3YSt/10keeHPQFew4EOz95gnK5yXiyxQuKxmwm1UU1pN1 T2cQ== 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=QfcJROMeE/BEz22DVAH4qD2nG3AeJqMFVXHfGkCCt6E=; fh=2Pm1IAIhFFG/AalnAdeoub19rZ2q5LZkPhvgNqLGXnQ=; b=ALUONZNxbLJSpKSaqV0685r92o46pdhFS7H92/KEQTuYPQ6qflhwlhtwwdqlHJoxpP UBc/OhP9qCP4dX5RKycaScNTmcYnGgPkvfIrYrT8o46WuOB5FgUz32UAgLpELuJ7UzuP WvrDvs8GYHVU7Ed5waS+dvRk/k3UFfdfm8hb+TtmULSVWn/mmY6QTHu3hobW5yEy+paV 92IbxNHlp7uj/9tq01j+2RM9PrhlyVPbYRQge8GZXuzx/6gcg26Db4tTinkbHJQ7AFdC 2gzTftV0QVzbF7TBwINBxA1XIKp/Frg9Onz20ScqdKdgWirmlOyS+WA5f25013a1MXoN b15w==; 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=1776381658; x=1776986458; 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=QfcJROMeE/BEz22DVAH4qD2nG3AeJqMFVXHfGkCCt6E=; b=i5insJkkkw3IK0lAG0sqS/G7JXATgA6Lzd8iqAWG3EofG9CBDDp5KNgDOEo56pZOOO EXaVT3Ag4kBEGgPLllauYUTClPx9te2qfOKkTR/XCwrdojeeMBIYKZ9noG+STdDybJ11 ljGCY+LFLaf9uGrIPnUZn3gA01mrOwIq915YqdEWN7MgEZhAX6USe0jczAloVJtTarNb rdM52xMOCz9lfdIr+hAYfC2M/nirrR+uAP9lnw+7Me8PIoI7NCSEEZwcwN5mBl6kuGFW 5wW4hpHlzD0f0sTwlFJWKrgXjlFFAnGaVMYT2REuTCLsTkSZsLic3Xl7S2YrFJpM6tTC Rnqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776381658; x=1776986458; 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=QfcJROMeE/BEz22DVAH4qD2nG3AeJqMFVXHfGkCCt6E=; b=LVejhmLS0hK3/UcR2mI5zS1wV4GAPIYAqlXzfNNvHPJoJy/i8fsVM8G5+KPa0v7+Vv 7+wj9t4Dkv6IfUQjDk2k4A68BXnODUSTl0ajHMrKTW2LsgsF+PG2gMSXM2vtB6yJJwCN ecO5RagZNFz54ppbc7GmH7DEHoJE3h2KFX0ZGRK0vq2L6RsXVHKX99dgURSThahImd0q 9KHf3JUxlMFg+ZfJRwmX1bgaIp29jBBl1lHQ2vL5Qc+GoEaY8o7losVyjjm9i2Zdlu1R V8i2kRuiEbwec2sbxrVokf1E9EIo0M5//kX6UXi84avbt2cmSl0W6JI7lsmHJ/OrQAKf ZBKw== X-Forwarded-Encrypted: i=1; AFNElJ9FNiz3XtZkShrT2UCnMVyE0HHTlyi2EJB5hnTDIQfcPA2yHahYUhPxpERd+G2GD3oGVfSUDO3g9o5z@lists.postgresql.org X-Gm-Message-State: AOJu0YyjFL2DlRVELX0dZzdKkrA+A+7694nZybtEdcmW+rq14WOTlDF5 +aUQWAS8Im7jxAqvAiiDe+wEKG9m8GEVQOoX8fhoNn0R3ck8WvtWT+Uz5z6xKap1sqNgPxFvelK ubVk0VpClan5NvVu+fFf5Wg4SH4byyBc= X-Gm-Gg: AeBDiesoqWIhEg0L8L/MIZjV8rPyjsTVqmpnDx5d6o9LhwwtYDuiJDmONVdsgq3Xjv0 FjMA9CjMly13iLQb+2YDr+Pebz2CAk3IPW2Q2J1LSqLczB4VfprIIFUviUAf+B+yMpWuEMN7IC2 /DLWvfM/sVLaLjQ5PI28ARoZTbziFM3JoqA+Mej1eU3O+w3j4Mg13mIIiRDh/CH16Ja/413/5FP 1aHzB9aHqEQR9UuLWA2jsRmxOMw2z+ZtnYHdjbqPr1cDqQu54u2ZtLPsX443J+lBgx1quzcWwZu hYhRtkKPb65BuZmEASTPb7YGJSU/4A== X-Received: by 2002:a05:6820:622:b0:67a:1eaf:a912 with SMTP id 006d021491bc7-69462dfd69cmr379707eaf.2.1776381657920; Thu, 16 Apr 2026 16:20:57 -0700 (PDT) MIME-Version: 1.0 References: <19382-4c2060ffee72759b@postgresql.org> In-Reply-To: From: surya poondla Date: Thu, 16 Apr 2026 16:20:46 -0700 X-Gm-Features: AQROBzDDri53ZYguiWyD_76yoY38Ewv5wW2DbwH0Y-Z6jX8W_VF3CS4PGxCOCrk Message-ID: Subject: Re: BUG #19382: Server crash at __nss_database_lookup To: Andrey Borodin Cc: songjinzhou , dllggyx , pgsql-bugs Content-Type: multipart/mixed; boundary="000000000000b4d03f064f9c15b8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b4d03f064f9c15b8 Content-Type: multipart/alternative; boundary="000000000000b4d03d064f9c15b6" --000000000000b4d03d064f9c15b6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Andrey, Thank you for the detailed review and test cases. I've addressed all three points in v6: Point 1 (domain at root): collect_composite_type_versions() now resolves domain types at the root level, not just for nested attributes. This ensures the type tree walk works correctly when the record variable itself is a domain over composite. Point 2 (missing pfree): Added pfree() calls for compTypeOids and compTypeVersions before NULLing them in the record-clear path. Point 3 (Cases 5 and 6 i.e dot assignment and SELECT INTO fields): These bypassed assign_record_var() because they modify the ExpandedRecord in place via expanded_record_set_field(). The fix was to restructure check_record_type_not_altered() into a two-level check: i) Outermost type: Always checked using erh->er_tupdesc_id, which is set when the ExpandedRecord is created. This works for all code paths (whole assignment, field assignment, SELECT INTO) without needing a snapshot. ii) Nested types: Checked against the snapshot when available (taken at assign_record_var() and instantiate_empty_record_variable()). I also added a fast-path optimization in snapshot_record_composite_types() to avoid repeated type tree walks when a record is assigned in a loop =E2= =80=94 it skips the snapshot if the outermost type's tupDesc_identifier hasn't changed since the last snapshot. Added both new test cases (Cases 5 and 6) to the regression. All 248 core regression tests and all 13 PL/pgSQL tests pass. Regards, Surya Poondla --000000000000b4d03d064f9c15b6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Andrey,

Thank you for the detailed review a= nd test cases. I've addressed all three points in v6:

Point 1 (d= omain at root): collect_composite_type_versions() now resolves domain types= at the root level, not just for nested attributes. This ensures the type t= ree walk works correctly when the record variable itself is a domain over c= omposite.

Point 2 (missing pfree): Added pfree() calls for compTypeO= ids and compTypeVersions before NULLing them in the record-clear path.
<= br>Point 3 (Cases 5 and 6 i.e dot assignment and SELECT INTO fields): These= bypassed assign_record_var() because they modify the ExpandedRecord in pla= ce via expanded_record_set_field(). The fix was to restructure check_record= _type_not_altered() into a two-level check:
=C2=A0 i) Outermost type: Al= ways checked using erh->er_tupdesc_id, which is set when the ExpandedRec= ord is created. This works for all code paths (whole assignment, field assi= gnment, SELECT INTO) without needing a snapshot.
=C2=A0 ii) Nested types= : Checked against the snapshot when available (taken at assign_record_var()= and instantiate_empty_record_variable()).

I also added a fast-path = optimization in snapshot_record_composite_types() to avoid repeated type tr= ee walks when a record is assigned in a loop =E2=80=94 it skips the snapsho= t if the outermost type's tupDesc_identifier hasn't changed since t= he last snapshot.

Added both new test cases (Cases 5 and 6) to the r= egression. All 248 core regression tests and all 13 PL/pgSQL tests pass.
Regards,
Surya Poondla
--000000000000b4d03d064f9c15b6-- --000000000000b4d03f064f9c15b8 Content-Type: application/octet-stream; name="0006-Fix-bug-19382-server-crash-when-ALTER-TYPE-is-used-m.patch" Content-Disposition: attachment; filename="0006-Fix-bug-19382-server-crash-when-ALTER-TYPE-is-used-m.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo23q11v0 RnJvbSA3Nzk0Mzg5ZTg4YTUwNzJlZGUyOTZkZDZkNmUxMDFlOWU4ZTMyYmE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBzcG9vbmRsYSA8c19wb29uZGxhQGFwcGxlLmNvbT4KRGF0ZTog RnJpLCAyMyBKYW4gMjAyNiAxNzoyODo1NCAtMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjZdIEZpeCAo YnVnICMxOTM4Mikgc2VydmVyIGNyYXNoIHdoZW4gQUxURVIgVFlQRSBpcyB1c2VkCiBtaWQtdHJh bnNhY3Rpb24gaW4gUEwvcGdTUUwKCldoZW4gQUxURVIgVFlQRSBjaGFuZ2VzIGEgY29tcG9zaXRl IHR5cGUncyBjb2x1bW4gdHlwZXMgd2l0aGluIGEKdHJhbnNhY3Rpb24sIFBML3BnU1FMIHJlY29y ZCB2YXJpYWJsZXMgdGhhdCB3ZXJlIHBvcHVsYXRlZCBiZWZvcmUKdGhlIEFMVEVSIHN0aWxsIGhv bGQgZGF0YSBpbiB0aGUgb2xkIGZvcm1hdC4gUmV0dXJuaW5nIHN1Y2ggcmVjb3JkcwpjYXVzZXMg YSBjcmFzaCBiZWNhdXNlIHRoZSBvdXRwdXQgZnVuY3Rpb25zIGV4cGVjdCBkYXRhIG1hdGNoaW5n IHRoZQpuZXcgdHlwZSBkZWZpbml0aW9uLCBub3QgdGhlIG9sZCBvbmUuCgpUaGUgY3Jhc2ggbWFu aWZlc3RlZCBhcyBhIHNlZ21lbnRhdGlvbiBmYXVsdCBpbiByZWNvcmRfb3V0KCkgd2hlbiBpdAph dHRlbXB0ZWQgdG8gaW50ZXJwcmV0IGludGVnZXIgZGF0YSBhcyBhIHRleHQgcG9pbnRlciwgZHVl IHRvIHRoZQptaXNtYXRjaCBiZXR3ZWVuIHRoZSBzdG9yZWQgZGF0YSBhbmQgdGhlIGN1cnJlbnQg dHlwZSBkZWZpbml0aW9uLgoKVGhlIGZpeCBzbmFwc2hvdHMgdHVwRGVzY19pZGVudGlmaWVyIHZh bHVlcyBmb3IgYWxsIGNvbXBvc2l0ZSB0eXBlcwpyZWFjaGFibGUgZnJvbSBhIHJlY29yZCB2YXJp YWJsZSdzIHR5cGUgKGluY2x1ZGluZyBuZXN0ZWQgY29tcG9zaXRlCnR5cGVzKSBhdCBhc3NpZ25t ZW50IHRpbWUuIEF0IFJFVFVSTi9SRVRVUk4gTkVYVCB0aW1lLCB0aGVzZQppZGVudGlmaWVycyBh cmUgY29tcGFyZWQgYWdhaW5zdCBjdXJyZW50IHZhbHVlcyBmcm9tIHRoZSB0eXBlIGNhY2hlLgpJ ZiBhbnkgaGF2ZSBjaGFuZ2VkLCBhbiBlcnJvciBpcyByYWlzZWQgaW5zdGVhZCBvZiByaXNraW5n IGEgY3Jhc2guCi0tLQogLi4uL3BscGdzcWwvc3JjL2V4cGVjdGVkL3BscGdzcWxfcmVjb3JkLm91 dCAgIHwgIDk4ICsrKysrKysKIHNyYy9wbC9wbHBnc3FsL3NyYy9wbF9leGVjLmMgICAgICAgICAg ICAgICAgICB8IDI2NSArKysrKysrKysrKysrKysrKy0KIHNyYy9wbC9wbHBnc3FsL3NyYy9wbHBn c3FsLmggICAgICAgICAgICAgICAgICB8ICAgOSArCiBzcmMvcGwvcGxwZ3NxbC9zcmMvc3FsL3Bs cGdzcWxfcmVjb3JkLnNxbCAgICAgfCAgOTAgKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDQ2MSBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3BsL3BscGdzcWwv c3JjL2V4cGVjdGVkL3BscGdzcWxfcmVjb3JkLm91dCBiL3NyYy9wbC9wbHBnc3FsL3NyYy9leHBl Y3RlZC9wbHBnc3FsX3JlY29yZC5vdXQKaW5kZXggNTExZjllMDNjODUuLmIyZTEyOTQ2YzVkIDEw MDY0NAotLS0gYS9zcmMvcGwvcGxwZ3NxbC9zcmMvZXhwZWN0ZWQvcGxwZ3NxbF9yZWNvcmQub3V0 CisrKyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9leHBlY3RlZC9wbHBnc3FsX3JlY29yZC5vdXQKQEAg LTg4NSwzICs4ODUsMTAxIEBAIHRhYmxlIHR3b19pbnQ4c190YWI7CiAgKDQyLDQyKQogKDEgcm93 KQogCistLSBUZXN0cyBmb3IgYnVnICMxOTM4Mjogc2VydmVyIGNyYXNoIHdoZW4gQUxURVIgVFlQ RSBpcyB1c2VkIG1pZC10cmFuc2FjdGlvbgorLS0gaW4gUEwvcGdTUUwuIFJlY29yZCB2YXJpYWJs ZXMgcG9wdWxhdGVkIGJlZm9yZSBBTFRFUiBUWVBFIG11c3Qgbm90IGJlCistLSByZXR1cm5lZCwg YXMgdGhlIHN0b3JlZCBkYXRhIG5vIGxvbmdlciBtYXRjaGVzIHRoZSBjdXJyZW50IHR5cGUgZGVm aW5pdGlvbi4KKy0tIENhc2UgMTogRGlyZWN0IGNvbXBvc2l0ZSB0eXBlIGNoYW5nZSAoSU5UIC0+ IFRFWFQpCitjcmVhdGUgdHlwZSBidWcxOTM4Ml9mb28gYXMgKGEgaW50LCBiIGludCk7CitjcmVh dGUgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9kaXJlY3QoKSByZXR1cm5zIHJlY29yZCBhcyAkJAor ZGVjbGFyZSByIGJ1ZzE5MzgyX2ZvbyA6PSByb3coMTIzLCBwb3dlcigyLCAzMCkpOworYmVnaW4K KyAgICBhbHRlciB0eXBlIGJ1ZzE5MzgyX2ZvbyBhbHRlciBhdHRyaWJ1dGUgYiB0eXBlIHRleHQ7 CisgICAgcmV0dXJuIHI7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsOworc2VsZWN0IGJ1ZzE5 MzgyX3Rlc3RfZGlyZWN0KCk7CitFUlJPUjogIGNhbm5vdCByZXR1cm4gcmVjb3JkIHZhcmlhYmxl ICJyIiBhZnRlciBjb21wb3NpdGUgdHlwZSAiYnVnMTkzODJfZm9vIiB3YXMgYWx0ZXJlZAorQ09O VEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfZGlyZWN0KCkgbGluZSA1IGF0 IFJFVFVSTgorZHJvcCBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0X2RpcmVjdCgpOworZHJvcCB0eXBl IGJ1ZzE5MzgyX2ZvbyBjYXNjYWRlOworLS0gQ2FzZSAyOiBOZXN0ZWQgY29tcG9zaXRlIHR5cGUg Y2hhbmdlCitjcmVhdGUgdHlwZSBidWcxOTM4Ml9pbm5lciBhcyAoeCBpbnQsIHkgaW50KTsKK2Ny ZWF0ZSB0eXBlIGJ1ZzE5MzgyX291dGVyIGFzIChhIGludCwgYiBidWcxOTM4Ml9pbm5lcik7Citj cmVhdGUgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9uZXN0ZWQoKSByZXR1cm5zIHJlY29yZCBhcyAk JAorZGVjbGFyZSByIGJ1ZzE5MzgyX291dGVyOworYmVnaW4KKyAgICByIDo9IHJvdygxLCByb3co MTAsIHBvd2VyKDIsIDMwKTo6aW50NCk6OmJ1ZzE5MzgyX2lubmVyKTo6YnVnMTkzODJfb3V0ZXI7 CisgICAgYWx0ZXIgdHlwZSBidWcxOTM4Ml9pbm5lciBhbHRlciBhdHRyaWJ1dGUgeSB0eXBlIHRl eHQ7CisgICAgcmV0dXJuIHI7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsOworc2VsZWN0IGJ1 ZzE5MzgyX3Rlc3RfbmVzdGVkKCk7CitFUlJPUjogIGNhbm5vdCByZXR1cm4gcmVjb3JkIHZhcmlh YmxlICJyIiBhZnRlciBjb21wb3NpdGUgdHlwZSAiYnVnMTkzODJfaW5uZXIiIHdhcyBhbHRlcmVk CitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9uZXN0ZWQoKSBsaW5l IDYgYXQgUkVUVVJOCitkcm9wIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfbmVzdGVkKCk7Citkcm9w IHR5cGUgYnVnMTkzODJfb3V0ZXIgY2FzY2FkZTsKK2Ryb3AgdHlwZSBidWcxOTM4Ml9pbm5lciBj YXNjYWRlOworLS0gQ2FzZSAzOiBPVVQgcGFyYW1ldGVyCitjcmVhdGUgdHlwZSBidWcxOTM4Ml9m b28xIGFzIChhIGludCwgYiBpbnQpOworY3JlYXRlIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3Rfb3V0 KG91dCByMSBidWcxOTM4Ml9mb28xKSBhcyAkJAorYmVnaW4KKyAgICByMSA6PSByb3coMSwgMik7 CisgICAgYWx0ZXIgdHlwZSBidWcxOTM4Ml9mb28xIGFsdGVyIGF0dHJpYnV0ZSBiIHR5cGUgdGV4 dDsKKyAgICByZXR1cm47CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsOworc2VsZWN0IGJ1ZzE5 MzgyX3Rlc3Rfb3V0KCk7CitFUlJPUjogIGNhbm5vdCByZXR1cm4gcmVjb3JkIHZhcmlhYmxlICJy MSIgYWZ0ZXIgY29tcG9zaXRlIHR5cGUgImJ1ZzE5MzgyX2ZvbzEiIHdhcyBhbHRlcmVkCitDT05U RVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9vdXQoKSBsaW5lIDUgYXQgUkVU VVJOCitkcm9wIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3Rfb3V0KCk7Citkcm9wIHR5cGUgYnVnMTkz ODJfZm9vMSBjYXNjYWRlOworLS0gQ2FzZSA0OiBObyBBTFRFUiBUWVBFIChiYXNlbGluZSDigJQg bXVzdCBub3QgZXJyb3IpCitjcmVhdGUgdHlwZSBidWcxOTM4Ml9mb28yIGFzIChhIGludCwgYiBp bnQpOworY3JlYXRlIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfYmFzZWxpbmUoKSByZXR1cm5zIGJ1 ZzE5MzgyX2ZvbzIgYXMgJCQKK2RlY2xhcmUgciBidWcxOTM4Ml9mb28yIDo9IHJvdygxLCAyKTsK K2JlZ2luCisgICAgcmV0dXJuIHI7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsOworc2VsZWN0 IGJ1ZzE5MzgyX3Rlc3RfYmFzZWxpbmUoKTsKKyBidWcxOTM4Ml90ZXN0X2Jhc2VsaW5lIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKDEsMikKKygxIHJvdykKKworZHJvcCBmdW5jdGlvbiBi dWcxOTM4Ml90ZXN0X2Jhc2VsaW5lKCk7Citkcm9wIHR5cGUgYnVnMTkzODJfZm9vMjsKKy0tIENh c2UgNTogRmllbGQtYnktZmllbGQgYXNzaWdubWVudCAoZG90IG5vdGF0aW9uKQorY3JlYXRlIHR5 cGUgYnVnMTkzODJfZm9vMyBhcyAoYSBpbnQsIGIgaW50KTsKK2NyZWF0ZSBmdW5jdGlvbiBidWcx OTM4Ml90ZXN0X2ZpZWxkX2Fzc2lnbigpIHJldHVybnMgcmVjb3JkIGFzICQkCitkZWNsYXJlIHIg YnVnMTkzODJfZm9vMzsKK2JlZ2luCisgICAgci5hIDo9IDEyMzsKKyAgICByLmIgOj0gcG93ZXIo MiwgMzApOjppbnQ0OworICAgIGFsdGVyIHR5cGUgYnVnMTkzODJfZm9vMyBhbHRlciBhdHRyaWJ1 dGUgYiB0eXBlIHRleHQ7CisgICAgcmV0dXJuIHI7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3Fs Oworc2VsZWN0IGJ1ZzE5MzgyX3Rlc3RfZmllbGRfYXNzaWduKCk7CitFUlJPUjogIGNhbm5vdCBy ZXR1cm4gcmVjb3JkIHZhcmlhYmxlICJyIiBhZnRlciBjb21wb3NpdGUgdHlwZSAiYnVnMTkzODJf Zm9vMyIgd2FzIGFsdGVyZWQKK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiBidWcxOTM4Ml90 ZXN0X2ZpZWxkX2Fzc2lnbigpIGxpbmUgNyBhdCBSRVRVUk4KK2Ryb3AgZnVuY3Rpb24gYnVnMTkz ODJfdGVzdF9maWVsZF9hc3NpZ24oKTsKK2Ryb3AgdHlwZSBidWcxOTM4Ml9mb28zIGNhc2NhZGU7 CistLSBDYXNlIDY6IFNFTEVDVCBJTlRPIGluZGl2aWR1YWwgZmllbGRzCitjcmVhdGUgdHlwZSBi dWcxOTM4Ml9mb280IGFzIChhIGludCwgYiBpbnQpOworY3JlYXRlIHRhYmxlIGJ1ZzE5MzgyX3Ri bCAoYSBpbnQsIGIgaW50KTsKK2luc2VydCBpbnRvIGJ1ZzE5MzgyX3RibCB2YWx1ZXMgKDEyMywg cG93ZXIoMiwgMzApOjppbnQ0KTsKK2NyZWF0ZSBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0X3NlbGVj dF9pbnRvX2ZpZWxkKCkgcmV0dXJucyByZWNvcmQgYXMgJCQKK2RlY2xhcmUgciBidWcxOTM4Ml9m b280OworYmVnaW4KKyAgICBzZWxlY3QgYSwgYiBpbnRvIHIuYSwgci5iIGZyb20gYnVnMTkzODJf dGJsOworICAgIGFsdGVyIHR5cGUgYnVnMTkzODJfZm9vNCBhbHRlciBhdHRyaWJ1dGUgYiB0eXBl IHRleHQ7CisgICAgcmV0dXJuIHI7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsOworc2VsZWN0 IGJ1ZzE5MzgyX3Rlc3Rfc2VsZWN0X2ludG9fZmllbGQoKTsKK0VSUk9SOiAgY2Fubm90IHJldHVy biByZWNvcmQgdmFyaWFibGUgInIiIGFmdGVyIGNvbXBvc2l0ZSB0eXBlICJidWcxOTM4Ml9mb280 IiB3YXMgYWx0ZXJlZAorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3Rf c2VsZWN0X2ludG9fZmllbGQoKSBsaW5lIDYgYXQgUkVUVVJOCitkcm9wIGZ1bmN0aW9uIGJ1ZzE5 MzgyX3Rlc3Rfc2VsZWN0X2ludG9fZmllbGQoKTsKK2Ryb3AgdGFibGUgYnVnMTkzODJfdGJsOwor ZHJvcCB0eXBlIGJ1ZzE5MzgyX2ZvbzQgY2FzY2FkZTsKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBn c3FsL3NyYy9wbF9leGVjLmMgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jCmluZGV4IDY1 YjBmZDA3OTBmLi5hOWMyYTBjMjIzMyAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL3Bs X2V4ZWMuYworKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jCkBAIC00NzAsNiArNDcw LDEyIEBAIHN0YXRpYyBjaGFyICpmb3JtYXRfcHJlcGFyZWRwYXJhbXNkYXRhKFBMcGdTUUxfZXhl Y3N0YXRlICplc3RhdGUsCiBzdGF0aWMgUExwZ1NRTF92YXJpYWJsZSAqbWFrZV9jYWxsc3RtdF90 YXJnZXQoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKIAkJCQkJCQkJCQkJICBQTHBnU1FMX2V4 cHIgKmV4cHIpOwogCitzdGF0aWMgdm9pZCBjaGVja19yZWNvcmRfdHlwZV9ub3RfYWx0ZXJlZChQ THBnU1FMX3JlYyAqcmVjKTsKK3N0YXRpYyB2b2lkIGNvbGxlY3RfY29tcG9zaXRlX3R5cGVfdmVy c2lvbnMoT2lkIHR5cGlkLAorCQkJCQkJCQkJCQlPaWQgKipvaWRzLCB1aW50NjQgKip2ZXJzaW9u cywKKwkJCQkJCQkJCQkJaW50ICpuLCBpbnQgKmFsbG9jKTsKK3N0YXRpYyB2b2lkIHNuYXBzaG90 X3JlY29yZF9jb21wb3NpdGVfdHlwZXMoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKKwkJCQkJ CQkJCQkJUExwZ1NRTF9yZWMgKnJlYyk7CiAKIC8qIC0tLS0tLS0tLS0KICAqIHBscGdzcWxfZXhl Y19mdW5jdGlvbglDYWxsZWQgYnkgdGhlIGNhbGwgaGFuZGxlciBmb3IKQEAgLTMyODcsOCArMzI5 MywzMCBAQCBleGVjX3N0bXRfcmV0dXJuKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsIFBMcGdT UUxfc3RtdF9yZXR1cm4gKnN0bXQpCiAJCQkJfQogCQkJCWJyZWFrOwogCi0JCQljYXNlIFBMUEdT UUxfRFRZUEVfUk9XOgogCQkJY2FzZSBQTFBHU1FMX0RUWVBFX1JFQzoKKwkJCQl7CisJCQkJCVBM cGdTUUxfcmVjICpyZWMgPSAoUExwZ1NRTF9yZWMgKikgcmV0dmFyOworCQkJCQlpbnQzMgkJcmV0 dHlwbW9kOworCisJCQkJCS8qCisJCQkJCSAqIENoZWNrIGlmIHRoZSByZWNvcmQncyBjb21wb3Np dGUgdHlwZSB3YXMgYWx0ZXJlZCBzaW5jZQorCQkJCQkgKiB0aGUgcmVjb3JkIHdhcyBwb3B1bGF0 ZWQuIElmIHNvLCByYWlzZSBhbiBlcnJvciB0bworCQkJCQkgKiBwcmV2ZW50IGNyYXNoZXMgd2hl biBvdXRwdXR0aW5nIHRoZSByZWNvcmQuCisJCQkJCSAqLworCQkJCQlpZiAocmVjLT5yZWN0eXBl aWQgIT0gUkVDT1JET0lEICYmIHJlYy0+ZXJoICE9IE5VTEwgJiYKKwkJCQkJCSFFeHBhbmRlZFJl Y29yZElzRW1wdHkocmVjLT5lcmgpKQorCQkJCQkJY2hlY2tfcmVjb3JkX3R5cGVfbm90X2FsdGVy ZWQocmVjKTsKKworCQkJCQlleGVjX2V2YWxfZGF0dW0oZXN0YXRlLAorCQkJCQkJCQkJcmV0dmFy LAorCQkJCQkJCQkJJmVzdGF0ZS0+cmV0dHlwZSwKKwkJCQkJCQkJCSZyZXR0eXBtb2QsCisJCQkJ CQkJCQkmZXN0YXRlLT5yZXR2YWwsCisJCQkJCQkJCQkmZXN0YXRlLT5yZXRpc251bGwpOworCQkJ CX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBQTFBHU1FMX0RUWVBFX1JPVzoKIAkJCQl7CiAJCQkJ CS8qIGV4ZWNfZXZhbF9kYXR1bSBjYW4gaGFuZGxlIHRoZXNlIGNhc2VzICovCiAJCQkJCWludDMy CQlyZXR0eXBtb2Q7CkBAIC0zNDM0LDYgKzM0NjIsMTQgQEAgZXhlY19zdG10X3JldHVybl9uZXh0 KFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCiAJCQkJCVR1cGxlRGVzYwlyZWNfdHVwZGVzYzsK IAkJCQkJVHVwbGVDb252ZXJzaW9uTWFwICp0dXBtYXA7CiAKKwkJCQkJLyoKKwkJCQkJICogQ2hl Y2sgaWYgdGhlIHJlY29yZCdzIGNvbXBvc2l0ZSB0eXBlIHdhcyBhbHRlcmVkIHNpbmNlCisJCQkJ CSAqIHRoZSByZWNvcmQgd2FzIHBvcHVsYXRlZC4gSWYgc28sIHJhaXNlIGFuIGVycm9yIHRvCisJ CQkJCSAqIHByZXZlbnQgY3Jhc2hlcyB3aGVuIHN0b3JpbmcgdG8gdGhlIHR1cGxlc3RvcmUuCisJ CQkJCSAqLworCQkJCQlpZiAocmVjLT5yZWN0eXBlaWQgIT0gUkVDT1JET0lEICYmIHJlYy0+ZXJo ICE9IE5VTEwpCisJCQkJCQljaGVja19yZWNvcmRfdHlwZV9ub3RfYWx0ZXJlZChyZWMpOworCiAJ CQkJCS8qIElmIHJlYyBpcyBudWxsLCB0cnkgdG8gY29udmVydCBpdCB0byBhIHJvdyBvZiBudWxs cyAqLwogCQkJCQlpZiAocmVjLT5lcmggPT0gTlVMTCkKIAkJCQkJCWluc3RhbnRpYXRlX2VtcHR5 X3JlY29yZF92YXJpYWJsZShlc3RhdGUsIHJlYyk7CkBAIC03MDQyLDYgKzcwNzgsMTQgQEAgZXhl Y19tb3ZlX3JvdyhQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLAogCQkJCWlmIChyZWMtPmVyaCkK IAkJCQkJRGVsZXRlRXhwYW5kZWRPYmplY3QoRXhwYW5kZWRSZWNvcmRHZXREYXR1bShyZWMtPmVy aCkpOwogCQkJCXJlYy0+ZXJoID0gTlVMTDsKKwkJCQkvKiBDbGVhciBjb21wb3NpdGUgdHlwZSBz bmFwc2hvdCAqLworCQkJCWlmIChyZWMtPmNvbXBUeXBlT2lkcykKKwkJCQkJcGZyZWUocmVjLT5j b21wVHlwZU9pZHMpOworCQkJCWlmIChyZWMtPmNvbXBUeXBlVmVyc2lvbnMpCisJCQkJCXBmcmVl KHJlYy0+Y29tcFR5cGVWZXJzaW9ucyk7CisJCQkJcmVjLT5uQ29tcFR5cGVzID0gMDsKKwkJCQly ZWMtPmNvbXBUeXBlT2lkcyA9IE5VTEw7CisJCQkJcmVjLT5jb21wVHlwZVZlcnNpb25zID0gTlVM TDsKIAkJCX0KIAkJCXJldHVybjsKIAkJfQpAQCAtNzkyNSw2ICs3OTY5LDkgQEAgaW5zdGFudGlh dGVfZW1wdHlfcmVjb3JkX3ZhcmlhYmxlKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsIFBMcGdT UUxfcmVjICpyZWMpCiAJLyogT0ssIGRvIGl0ICovCiAJcmVjLT5lcmggPSBtYWtlX2V4cGFuZGVk X3JlY29yZF9mcm9tX3R5cGVpZChyZWMtPnJlY3R5cGVpZCwgLTEsCiAJCQkJCQkJCQkJCQllc3Rh dGUtPmRhdHVtX2NvbnRleHQpOworCisJLyogU25hcHNob3QgY29tcG9zaXRlIHR5cGUgdmVyc2lv bnMgZm9yIEFMVEVSIFRZUEUgZGV0ZWN0aW9uICovCisJc25hcHNob3RfcmVjb3JkX2NvbXBvc2l0 ZV90eXBlcyhlc3RhdGUsIHJlYyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0KQEAgLTg5NjcsNiArOTAx NCw5IEBAIGFzc2lnbl9yZWNvcmRfdmFyKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsIFBMcGdT UUxfcmVjICpyZWMsCiAKIAkvKiAuLi4gYW5kIGluc3RhbGwgdGhlIG5ldyAqLwogCXJlYy0+ZXJo ID0gZXJoOworCisJLyogU25hcHNob3QgY29tcG9zaXRlIHR5cGUgdmVyc2lvbnMgZm9yIEFMVEVS IFRZUEUgZGV0ZWN0aW9uICovCisJc25hcHNob3RfcmVjb3JkX2NvbXBvc2l0ZV90eXBlcyhlc3Rh dGUsIHJlYyk7CiB9CiAKIC8qCkBAIC05MjE2LDMgKzkyNjYsMjE2IEBAIGZvcm1hdF9wcmVwYXJl ZHBhcmFtc2RhdGEoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKIAogCXJldHVybiBwYXJhbXN0 ci5kYXRhOwogfQorCisvKgorICogY2hlY2tfcmVjb3JkX3R5cGVfbm90X2FsdGVyZWQKKyAqCisg KiBDaGVjayBpZiBhbnkgY29tcG9zaXRlIHR5cGUgcmVhY2hhYmxlIGZyb20gdGhpcyByZWNvcmQn cyB0eXBlIGhhcyBiZWVuCisgKiBhbHRlcmVkIHNpbmNlIHRoZSByZWNvcmQgd2FzIHBvcHVsYXRl ZC4gIElmIHNvLCByYWlzZSBhbiBlcnJvciB0byBwcmV2ZW50CisgKiBjcmFzaGVzIHRoYXQgd291 bGQgb2NjdXIgd2hlbiBvdXRwdXR0aW5nIGRhdGEgdGhhdCBubyBsb25nZXIgbWF0Y2hlcyB0aGUK KyAqIGN1cnJlbnQgdHlwZSBkZWZpbml0aW9uLgorICoKKyAqIFRoZSBvdXRlcm1vc3QgdHlwZSBp cyBhbHdheXMgY2hlY2tlZCB1c2luZyBlcl90dXBkZXNjX2lkICh3aGljaCBpcyBzZXQKKyAqIHdo ZW4gdGhlIEV4cGFuZGVkUmVjb3JkIGlzIGNyZWF0ZWQgYW5kIHdvcmtzIHJlZ2FyZGxlc3Mgb2Yg aG93IHRoZSByZWNvcmQKKyAqIHdhcyBwb3B1bGF0ZWQsIHdoZXRoZXIgYnkgd2hvbGUgYXNzaWdu bWVudCwgZmllbGQgYXNzaWdubWVudCwgZXRjLikuCisgKgorICogTmVzdGVkIGNvbXBvc2l0ZSB0 eXBlcyBhcmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBzbmFwc2hvdCB0YWtlbiBhdCByZWNvcmQKKyAq IGFzc2lnbm1lbnQgdGltZSwgaWYgYXZhaWxhYmxlLgorICovCitzdGF0aWMgdm9pZAorY2hlY2tf cmVjb3JkX3R5cGVfbm90X2FsdGVyZWQoUExwZ1NRTF9yZWMgKnJlYykKK3sKKwlUeXBlQ2FjaGVF bnRyeSAqdHlwZW50cnk7CisJT2lkCQkJY2hlY2tfdHlwaWQ7CisJaW50CQkJaTsKKworCS8qIE5v dGhpbmcgdG8gZG8gZm9yIGFub255bW91cyBSRUNPUkQgdHlwZSAqLworCWlmIChyZWMtPnJlY3R5 cGVpZCA9PSBSRUNPUkRPSUQpCisJCXJldHVybjsKKworCS8qCisJICogQWx3YXlzIGNoZWNrIG91 dGVybW9zdCB0eXBlIHVzaW5nIGVyX3R1cGRlc2NfaWQuICBUaGlzIHdvcmtzIGZvciBhbGwKKwkg KiBjb2RlIHBhdGhzICh3aG9sZSBhc3NpZ25tZW50LCBmaWVsZCBhc3NpZ25tZW50LCBTRUxFQ1Qg SU5UTywgZXRjLikKKwkgKiBiZWNhdXNlIGVyX3R1cGRlc2NfaWQgaXMgc2V0IHdoZW4gdGhlIEV4 cGFuZGVkUmVjb3JkIGlzIGNyZWF0ZWQuCisJICogUmVzb2x2ZSBkb21haW4gdHlwZXMgdG8gdGhl aXIgYmFzZSBjb21wb3NpdGUgdHlwZSBmaXJzdC4KKwkgKi8KKwljaGVja190eXBpZCA9IHJlYy0+ cmVjdHlwZWlkOworCWlmIChnZXRfdHlwdHlwZShjaGVja190eXBpZCkgPT0gVFlQVFlQRV9ET01B SU4pCisJCWNoZWNrX3R5cGlkID0gZ2V0QmFzZVR5cGUoY2hlY2tfdHlwaWQpOworCisJdHlwZW50 cnkgPSBsb29rdXBfdHlwZV9jYWNoZShjaGVja190eXBpZCwgVFlQRUNBQ0hFX1RVUERFU0MpOwor CisJaWYgKHJlYy0+ZXJoLT5lcl90dXBkZXNjX2lkICE9IHR5cGVudHJ5LT50dXBEZXNjX2lkZW50 aWZpZXIpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9N SVNNQVRDSCksCisJCQkJIGVycm1zZygiY2Fubm90IHJldHVybiByZWNvcmQgdmFyaWFibGUgXCIl c1wiIGFmdGVyIGNvbXBvc2l0ZSB0eXBlIFwiJXNcIiB3YXMgYWx0ZXJlZCIsCisJCQkJCQlyZWMt PnJlZm5hbWUsCisJCQkJCQlmb3JtYXRfdHlwZV9iZShjaGVja190eXBpZCkpKSk7CisKKwkvKgor CSAqIElmIHdlIGhhdmUgYSBzbmFwc2hvdCBvZiBuZXN0ZWQgY29tcG9zaXRlIHR5cGVzICh0YWtl biBhdCB3aG9sZS1yZWNvcmQKKwkgKiBhc3NpZ25tZW50IHRpbWUpLCBjaGVjayB0aG9zZSB0b28u ICBTa2lwIGluZGV4IDAgc2luY2UgdGhhdCdzIHRoZQorCSAqIG91dGVybW9zdCB0eXBlIHdlIGFs cmVhZHkgY2hlY2tlZCBhYm92ZS4KKwkgKi8KKwlmb3IgKGkgPSAxOyBpIDwgcmVjLT5uQ29tcFR5 cGVzOyBpKyspCisJeworCQl0eXBlbnRyeSA9IGxvb2t1cF90eXBlX2NhY2hlKHJlYy0+Y29tcFR5 cGVPaWRzW2ldLCBUWVBFQ0FDSEVfVFVQREVTQyk7CisKKwkJaWYgKHR5cGVudHJ5LT50dXBEZXNj X2lkZW50aWZpZXIgIT0gcmVjLT5jb21wVHlwZVZlcnNpb25zW2ldKQorCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCisJCQkJCSBlcnJt c2coImNhbm5vdCByZXR1cm4gcmVjb3JkIHZhcmlhYmxlIFwiJXNcIiBhZnRlciBjb21wb3NpdGUg dHlwZSBcIiVzXCIgd2FzIGFsdGVyZWQiLAorCQkJCQkJCXJlYy0+cmVmbmFtZSwKKwkJCQkJCQlm b3JtYXRfdHlwZV9iZShyZWMtPmNvbXBUeXBlT2lkc1tpXSkpKSk7CisJfQorfQorCisvKgorICog Y29sbGVjdF9jb21wb3NpdGVfdHlwZV92ZXJzaW9ucworICoKKyAqIFJlY3Vyc2l2ZWx5IGNvbGxl Y3QgdHVwRGVzY19pZGVudGlmaWVyIHZhbHVlcyBmb3IgYSBjb21wb3NpdGUgdHlwZSBhbmQKKyAq IGFsbCBjb21wb3NpdGUgdHlwZXMgcmVhY2hhYmxlIGZyb20gaXRzIGF0dHJpYnV0ZXMuICBTa2lw cyBhbm9ueW1vdXMKKyAqIFJFQ09SRCB0eXBlcyBhbmQgdHlwZXMgYWxyZWFkeSByZWNvcmRlZCAo dG8gcHJldmVudCBpbmZpbml0ZSByZWN1cnNpb24pLgorICoKKyAqIG9pZHMvdmVyc2lvbnMgYXJy YXlzIGFyZSByZXBhbGxvYydkIGFzIG5lZWRlZDsgbi9hbGxvYyB1cGRhdGVkIGluIHBsYWNlLgor ICovCitzdGF0aWMgdm9pZAorY29sbGVjdF9jb21wb3NpdGVfdHlwZV92ZXJzaW9ucyhPaWQgdHlw aWQsCisJCQkJCQkJCU9pZCAqKm9pZHMsIHVpbnQ2NCAqKnZlcnNpb25zLAorCQkJCQkJCQlpbnQg Km4sIGludCAqYWxsb2MpCit7CisJVHlwZUNhY2hlRW50cnkgKnR5cGVudHJ5OworCVR1cGxlRGVz Ywl0dXBkZXNjOworCWludAkJCWk7CisKKwkvKiBSZXNvbHZlIGRvbWFpbiB0eXBlcyB0byB0aGVp ciBiYXNlIGNvbXBvc2l0ZSB0eXBlICovCisJaWYgKGdldF90eXB0eXBlKHR5cGlkKSA9PSBUWVBU WVBFX0RPTUFJTikKKwkJdHlwaWQgPSBnZXRCYXNlVHlwZSh0eXBpZCk7CisKKwkvKiBTa2lwIGlm IGFscmVhZHkgcmVjb3JkZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgKm47IGkrKykKKwl7CisJCWlm ICgoKm9pZHMpW2ldID09IHR5cGlkKQorCQkJcmV0dXJuOworCX0KKworCXR5cGVudHJ5ID0gbG9v a3VwX3R5cGVfY2FjaGUodHlwaWQsIFRZUEVDQUNIRV9UVVBERVNDKTsKKworCS8qIEdyb3cgYXJy YXlzIGlmIG5lZWRlZCAqLworCWlmICgqbiA+PSAqYWxsb2MpCisJeworCQkqYWxsb2MgKj0gMjsK KwkJKm9pZHMgPSByZXBhbGxvYygqb2lkcywgKmFsbG9jICogc2l6ZW9mKE9pZCkpOworCQkqdmVy c2lvbnMgPSByZXBhbGxvYygqdmVyc2lvbnMsICphbGxvYyAqIHNpemVvZih1aW50NjQpKTsKKwl9 CisKKwkoKm9pZHMpWypuXSA9IHR5cGlkOworCSgqdmVyc2lvbnMpWypuXSA9IHR5cGVudHJ5LT50 dXBEZXNjX2lkZW50aWZpZXI7CisJKCpuKSsrOworCisJdHVwZGVzYyA9IHR5cGVudHJ5LT50dXBE ZXNjOworCWlmICh0dXBkZXNjID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFJlY3Vyc2UgaW50 byBjb21wb3NpdGUtdHlwZSBhdHRyaWJ1dGVzICovCisJZm9yIChpID0gMDsgaSA8IHR1cGRlc2Mt Pm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0 cih0dXBkZXNjLCBpKTsKKwkJT2lkCQkJYXR0cnR5cGlkOworCQljaGFyCQl0eXB0eXBlOworCisJ CWlmIChhdHRyLT5hdHRpc2Ryb3BwZWQpCisJCQljb250aW51ZTsKKworCQlhdHRydHlwaWQgPSBh dHRyLT5hdHR0eXBpZDsKKwkJaWYgKGF0dHJ0eXBpZCA9PSBSRUNPUkRPSUQpCisJCQljb250aW51 ZTsKKworCQl0eXB0eXBlID0gZ2V0X3R5cHR5cGUoYXR0cnR5cGlkKTsKKworCQkvKiBSZXNvbHZl IGRvbWFpbiB0eXBlcyB0byB0aGVpciBiYXNlIHR5cGUgKi8KKwkJaWYgKHR5cHR5cGUgPT0gVFlQ VFlQRV9ET01BSU4pCisJCXsKKwkJCWF0dHJ0eXBpZCA9IGdldEJhc2VUeXBlKGF0dHJ0eXBpZCk7 CisJCQl0eXB0eXBlID0gZ2V0X3R5cHR5cGUoYXR0cnR5cGlkKTsKKwkJfQorCisJCWlmICh0eXB0 eXBlID09IFRZUFRZUEVfQ09NUE9TSVRFKQorCQkJY29sbGVjdF9jb21wb3NpdGVfdHlwZV92ZXJz aW9ucyhhdHRydHlwaWQsCisJCQkJCQkJCQkJICAgb2lkcywgdmVyc2lvbnMsIG4sIGFsbG9jKTsK Kwl9Cit9CisKKy8qCisgKiBzbmFwc2hvdF9yZWNvcmRfY29tcG9zaXRlX3R5cGVzCisgKgorICog VGFrZSBhIHNuYXBzaG90IG9mIHR1cERlc2NfaWRlbnRpZmllciB2YWx1ZXMgZm9yIGFsbCBjb21w b3NpdGUgdHlwZXMKKyAqIHJlYWNoYWJsZSBmcm9tIHRoZSByZWNvcmQncyBkZWNsYXJlZCB0eXBl LiAgQ2FsbGVkIHdoZW4gYSByZWNvcmQgdmFyaWFibGUKKyAqIGlzIGFzc2lnbmVkIGEgbmV3IHZh bHVlLCBzbyB0aGF0IGNoZWNrX3JlY29yZF90eXBlX25vdF9hbHRlcmVkKCkgY2FuCisgKiBkZXRl Y3QgbWlkLXRyYW5zYWN0aW9uIEFMVEVSIFRZUEUgYXQgUkVUVVJOIHRpbWUuCisgKi8KK3N0YXRp YyB2b2lkCitzbmFwc2hvdF9yZWNvcmRfY29tcG9zaXRlX3R5cGVzKFBMcGdTUUxfZXhlY3N0YXRl ICplc3RhdGUsCisJCQkJCQkJCVBMcGdTUUxfcmVjICpyZWMpCit7CisJTWVtb3J5Q29udGV4dCBv bGRjeHQ7CisJaW50CQkJYWxsb2MgPSA4OworCWludAkJCW4gPSAwOworCU9pZAkJICAgKm9pZHM7 CisJdWludDY0CSAgICp2ZXJzaW9uczsKKworCS8qIE5vdGhpbmcgdG8gZG8gZm9yIGFub255bW91 cyBSRUNPUkQgdHlwZSAqLworCWlmIChyZWMtPnJlY3R5cGVpZCA9PSBSRUNPUkRPSUQpCisJewor CQlyZWMtPm5Db21wVHlwZXMgPSAwOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBGYXN0IHBh dGg6IGlmIHdlIGFscmVhZHkgaGF2ZSBhIHNuYXBzaG90IGZvciB0aGlzIHR5cGUgYW5kIHRoZQor CSAqIG91dGVybW9zdCB0eXBlJ3MgaWRlbnRpZmllciBoYXNuJ3QgY2hhbmdlZCwgdGhlIHNuYXBz aG90IGlzIHN0aWxsCisJICogdmFsaWQuICBUaGlzIGF2b2lkcyBleHBlbnNpdmUgdHlwZSB0cmVl IHdhbGtzIGFuZCBzeXNjYWNoZSBsb29rdXBzCisJICogd2hlbiBhIHJlY29yZCBpcyBhc3NpZ25l ZCByZXBlYXRlZGx5IGluIGEgbG9vcC4KKwkgKgorCSAqIElmIHRoZSBpZGVudGlmaWVyIEhBUyBj aGFuZ2VkIChBTFRFUiBUWVBFIGhhcHBlbmVkKSwgZmFsbCB0aHJvdWdoCisJICogdG8gcmUtc25h cHNob3Qgd2l0aCB0aGUgbmV3IGlkZW50aWZpZXJzLgorCSAqLworCWlmIChyZWMtPm5Db21wVHlw ZXMgPiAwICYmIHJlYy0+Y29tcFR5cGVPaWRzWzBdID09IHJlYy0+cmVjdHlwZWlkKQorCXsKKwkJ VHlwZUNhY2hlRW50cnkgKnR5cGVudHJ5OworCisJCXR5cGVudHJ5ID0gbG9va3VwX3R5cGVfY2Fj aGUocmVjLT5yZWN0eXBlaWQsIFRZUEVDQUNIRV9UVVBERVNDKTsKKwkJaWYgKHR5cGVudHJ5LT50 dXBEZXNjX2lkZW50aWZpZXIgPT0gcmVjLT5jb21wVHlwZVZlcnNpb25zWzBdKQorCQkJcmV0dXJu OwkJLyogdHlwZSB1bmNoYW5nZWQsIHNuYXBzaG90IHN0aWxsIHZhbGlkICovCisJfQorCisJb2xk Y3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGVzdGF0ZS0+ZGF0dW1fY29udGV4dCk7CisJb2lk cyA9IHBhbGxvYyhhbGxvYyAqIHNpemVvZihPaWQpKTsKKwl2ZXJzaW9ucyA9IHBhbGxvYyhhbGxv YyAqIHNpemVvZih1aW50NjQpKTsKKworCWNvbGxlY3RfY29tcG9zaXRlX3R5cGVfdmVyc2lvbnMo cmVjLT5yZWN0eXBlaWQsCisJCQkJCQkJCQkmb2lkcywgJnZlcnNpb25zLCAmbiwgJmFsbG9jKTsK KworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCisJaWYgKG4gPiAwKQorCXsKKwkJ LyogRnJlZSBwcmV2aW91cyBzbmFwc2hvdCBpZiBhbnkgKi8KKwkJaWYgKHJlYy0+Y29tcFR5cGVP aWRzKQorCQkJcGZyZWUocmVjLT5jb21wVHlwZU9pZHMpOworCQlpZiAocmVjLT5jb21wVHlwZVZl cnNpb25zKQorCQkJcGZyZWUocmVjLT5jb21wVHlwZVZlcnNpb25zKTsKKworCQlyZWMtPm5Db21w VHlwZXMgPSBuOworCQlyZWMtPmNvbXBUeXBlT2lkcyA9IG9pZHM7CisJCXJlYy0+Y29tcFR5cGVW ZXJzaW9ucyA9IHZlcnNpb25zOworCX0KKwllbHNlCisJeworCQlwZnJlZShvaWRzKTsKKwkJcGZy ZWUodmVyc2lvbnMpOworCQlyZWMtPm5Db21wVHlwZXMgPSAwOworCQlyZWMtPmNvbXBUeXBlT2lk cyA9IE5VTEw7CisJCXJlYy0+Y29tcFR5cGVWZXJzaW9ucyA9IE5VTEw7CisJfQorfQpkaWZmIC0t Z2l0IGEvc3JjL3BsL3BscGdzcWwvc3JjL3BscGdzcWwuaCBiL3NyYy9wbC9wbHBnc3FsL3NyYy9w bHBnc3FsLmgKaW5kZXggYWRkYjE0YTk5NTkuLmNmOWE2NTc2MTNkIDEwMDY0NAotLS0gYS9zcmMv cGwvcGxwZ3NxbC9zcmMvcGxwZ3NxbC5oCisrKyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9wbHBnc3Fs LmgKQEAgLTQzNSw2ICs0MzUsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgUExwZ1NRTF9yZWMKIAogCS8q IFdlIGFsd2F5cyBzdG9yZSByZWNvcmQgdmFyaWFibGVzIGFzICJleHBhbmRlZCIgcmVjb3JkcyAq LwogCUV4cGFuZGVkUmVjb3JkSGVhZGVyICplcmg7CisKKwkvKgorCSAqIENvbXBvc2l0ZSB0eXBl IHZlcnNpb24gc25hcHNob3QgZm9yIEFMVEVSIFRZUEUgZGV0ZWN0aW9uLgorCSAqIFBvcHVsYXRl ZCB3aGVuIHRoZSByZWNvcmQgaXMgYXNzaWduZWQ7IGNoZWNrZWQgYXQgUkVUVVJOIHRpbWUuCisJ ICogSW5jbHVkZXMgdGhlIG91dGVybW9zdCB0eXBlIGFuZCBhbGwgbmVzdGVkIGNvbXBvc2l0ZSB0 eXBlcy4KKwkgKi8KKwlpbnQJCQluQ29tcFR5cGVzOworCU9pZAkJICAgKmNvbXBUeXBlT2lkczsK Kwl1aW50NjQJICAgKmNvbXBUeXBlVmVyc2lvbnM7CiB9IFBMcGdTUUxfcmVjOwogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL3BsL3BscGdzcWwvc3JjL3NxbC9wbHBnc3FsX3JlY29yZC5zcWwgYi9zcmMv cGwvcGxwZ3NxbC9zcmMvc3FsL3BscGdzcWxfcmVjb3JkLnNxbAppbmRleCA0ZmJlZDM4YjhiYi4u YjY4ZmE5OTI1OGIgMTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHBnc3FsL3NyYy9zcWwvcGxwZ3NxbF9y ZWNvcmQuc3FsCisrKyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9zcWwvcGxwZ3NxbF9yZWNvcmQuc3Fs CkBAIC01NzcsMyArNTc3LDkzIEBAIGluc2VydCBpbnRvIHR3b19pbnQ4c190YWIgdmFsdWVzIChj b21wcmVzdWx0KDQyKSk7CiAtLSByZWNvbm5lY3Qgc28gd2UgbG9zZSBhbnkgbG9jYWwga25vd2xl ZGdlIG9mIGFub255bW91cyByZWNvcmQgdHlwZXMKIFxjIC0KIHRhYmxlIHR3b19pbnQ4c190YWI7 CisKKy0tIFRlc3RzIGZvciBidWcgIzE5MzgyOiBzZXJ2ZXIgY3Jhc2ggd2hlbiBBTFRFUiBUWVBF IGlzIHVzZWQgbWlkLXRyYW5zYWN0aW9uCistLSBpbiBQTC9wZ1NRTC4gUmVjb3JkIHZhcmlhYmxl cyBwb3B1bGF0ZWQgYmVmb3JlIEFMVEVSIFRZUEUgbXVzdCBub3QgYmUKKy0tIHJldHVybmVkLCBh cyB0aGUgc3RvcmVkIGRhdGEgbm8gbG9uZ2VyIG1hdGNoZXMgdGhlIGN1cnJlbnQgdHlwZSBkZWZp bml0aW9uLgorCistLSBDYXNlIDE6IERpcmVjdCBjb21wb3NpdGUgdHlwZSBjaGFuZ2UgKElOVCAt PiBURVhUKQorY3JlYXRlIHR5cGUgYnVnMTkzODJfZm9vIGFzIChhIGludCwgYiBpbnQpOworY3Jl YXRlIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfZGlyZWN0KCkgcmV0dXJucyByZWNvcmQgYXMgJCQK K2RlY2xhcmUgciBidWcxOTM4Ml9mb28gOj0gcm93KDEyMywgcG93ZXIoMiwgMzApKTsKK2JlZ2lu CisgICAgYWx0ZXIgdHlwZSBidWcxOTM4Ml9mb28gYWx0ZXIgYXR0cmlidXRlIGIgdHlwZSB0ZXh0 OworICAgIHJldHVybiByOworZW5kOworJCQgbGFuZ3VhZ2UgcGxwZ3NxbDsKK3NlbGVjdCBidWcx OTM4Ml90ZXN0X2RpcmVjdCgpOworZHJvcCBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0X2RpcmVjdCgp OworZHJvcCB0eXBlIGJ1ZzE5MzgyX2ZvbyBjYXNjYWRlOworCistLSBDYXNlIDI6IE5lc3RlZCBj b21wb3NpdGUgdHlwZSBjaGFuZ2UKK2NyZWF0ZSB0eXBlIGJ1ZzE5MzgyX2lubmVyIGFzICh4IGlu dCwgeSBpbnQpOworY3JlYXRlIHR5cGUgYnVnMTkzODJfb3V0ZXIgYXMgKGEgaW50LCBiIGJ1ZzE5 MzgyX2lubmVyKTsKK2NyZWF0ZSBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0X25lc3RlZCgpIHJldHVy bnMgcmVjb3JkIGFzICQkCitkZWNsYXJlIHIgYnVnMTkzODJfb3V0ZXI7CitiZWdpbgorICAgIHIg Oj0gcm93KDEsIHJvdygxMCwgcG93ZXIoMiwgMzApOjppbnQ0KTo6YnVnMTkzODJfaW5uZXIpOjpi dWcxOTM4Ml9vdXRlcjsKKyAgICBhbHRlciB0eXBlIGJ1ZzE5MzgyX2lubmVyIGFsdGVyIGF0dHJp YnV0ZSB5IHR5cGUgdGV4dDsKKyAgICByZXR1cm4gcjsKK2VuZDsKKyQkIGxhbmd1YWdlIHBscGdz cWw7CitzZWxlY3QgYnVnMTkzODJfdGVzdF9uZXN0ZWQoKTsKK2Ryb3AgZnVuY3Rpb24gYnVnMTkz ODJfdGVzdF9uZXN0ZWQoKTsKK2Ryb3AgdHlwZSBidWcxOTM4Ml9vdXRlciBjYXNjYWRlOworZHJv cCB0eXBlIGJ1ZzE5MzgyX2lubmVyIGNhc2NhZGU7CisKKy0tIENhc2UgMzogT1VUIHBhcmFtZXRl cgorY3JlYXRlIHR5cGUgYnVnMTkzODJfZm9vMSBhcyAoYSBpbnQsIGIgaW50KTsKK2NyZWF0ZSBm dW5jdGlvbiBidWcxOTM4Ml90ZXN0X291dChvdXQgcjEgYnVnMTkzODJfZm9vMSkgYXMgJCQKK2Jl Z2luCisgICAgcjEgOj0gcm93KDEsIDIpOworICAgIGFsdGVyIHR5cGUgYnVnMTkzODJfZm9vMSBh bHRlciBhdHRyaWJ1dGUgYiB0eXBlIHRleHQ7CisgICAgcmV0dXJuOworZW5kOworJCQgbGFuZ3Vh Z2UgcGxwZ3NxbDsKK3NlbGVjdCBidWcxOTM4Ml90ZXN0X291dCgpOworZHJvcCBmdW5jdGlvbiBi dWcxOTM4Ml90ZXN0X291dCgpOworZHJvcCB0eXBlIGJ1ZzE5MzgyX2ZvbzEgY2FzY2FkZTsKKwor LS0gQ2FzZSA0OiBObyBBTFRFUiBUWVBFIChiYXNlbGluZSDigJQgbXVzdCBub3QgZXJyb3IpCitj cmVhdGUgdHlwZSBidWcxOTM4Ml9mb28yIGFzIChhIGludCwgYiBpbnQpOworY3JlYXRlIGZ1bmN0 aW9uIGJ1ZzE5MzgyX3Rlc3RfYmFzZWxpbmUoKSByZXR1cm5zIGJ1ZzE5MzgyX2ZvbzIgYXMgJCQK K2RlY2xhcmUgciBidWcxOTM4Ml9mb28yIDo9IHJvdygxLCAyKTsKK2JlZ2luCisgICAgcmV0dXJu IHI7CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsOworc2VsZWN0IGJ1ZzE5MzgyX3Rlc3RfYmFz ZWxpbmUoKTsKK2Ryb3AgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9iYXNlbGluZSgpOworZHJvcCB0 eXBlIGJ1ZzE5MzgyX2ZvbzI7CisKKy0tIENhc2UgNTogRmllbGQtYnktZmllbGQgYXNzaWdubWVu dCAoZG90IG5vdGF0aW9uKQorY3JlYXRlIHR5cGUgYnVnMTkzODJfZm9vMyBhcyAoYSBpbnQsIGIg aW50KTsKK2NyZWF0ZSBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0X2ZpZWxkX2Fzc2lnbigpIHJldHVy bnMgcmVjb3JkIGFzICQkCitkZWNsYXJlIHIgYnVnMTkzODJfZm9vMzsKK2JlZ2luCisgICAgci5h IDo9IDEyMzsKKyAgICByLmIgOj0gcG93ZXIoMiwgMzApOjppbnQ0OworICAgIGFsdGVyIHR5cGUg YnVnMTkzODJfZm9vMyBhbHRlciBhdHRyaWJ1dGUgYiB0eXBlIHRleHQ7CisgICAgcmV0dXJuIHI7 CitlbmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsOworc2VsZWN0IGJ1ZzE5MzgyX3Rlc3RfZmllbGRf YXNzaWduKCk7Citkcm9wIGZ1bmN0aW9uIGJ1ZzE5MzgyX3Rlc3RfZmllbGRfYXNzaWduKCk7Citk cm9wIHR5cGUgYnVnMTkzODJfZm9vMyBjYXNjYWRlOworCistLSBDYXNlIDY6IFNFTEVDVCBJTlRP IGluZGl2aWR1YWwgZmllbGRzCitjcmVhdGUgdHlwZSBidWcxOTM4Ml9mb280IGFzIChhIGludCwg YiBpbnQpOworY3JlYXRlIHRhYmxlIGJ1ZzE5MzgyX3RibCAoYSBpbnQsIGIgaW50KTsKK2luc2Vy dCBpbnRvIGJ1ZzE5MzgyX3RibCB2YWx1ZXMgKDEyMywgcG93ZXIoMiwgMzApOjppbnQ0KTsKK2Ny ZWF0ZSBmdW5jdGlvbiBidWcxOTM4Ml90ZXN0X3NlbGVjdF9pbnRvX2ZpZWxkKCkgcmV0dXJucyBy ZWNvcmQgYXMgJCQKK2RlY2xhcmUgciBidWcxOTM4Ml9mb280OworYmVnaW4KKyAgICBzZWxlY3Qg YSwgYiBpbnRvIHIuYSwgci5iIGZyb20gYnVnMTkzODJfdGJsOworICAgIGFsdGVyIHR5cGUgYnVn MTkzODJfZm9vNCBhbHRlciBhdHRyaWJ1dGUgYiB0eXBlIHRleHQ7CisgICAgcmV0dXJuIHI7Citl bmQ7CiskJCBsYW5ndWFnZSBwbHBnc3FsOworc2VsZWN0IGJ1ZzE5MzgyX3Rlc3Rfc2VsZWN0X2lu dG9fZmllbGQoKTsKK2Ryb3AgZnVuY3Rpb24gYnVnMTkzODJfdGVzdF9zZWxlY3RfaW50b19maWVs ZCgpOworZHJvcCB0YWJsZSBidWcxOTM4Ml90Ymw7Citkcm9wIHR5cGUgYnVnMTkzODJfZm9vNCBj YXNjYWRlOwotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoK --000000000000b4d03f064f9c15b8--