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 1viy7V-002gEm-2w for pgsql-hackers@arkaria.postgresql.org; Thu, 22 Jan 2026 17:05:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1viy7U-00DrdO-3C for pgsql-hackers@arkaria.postgresql.org; Thu, 22 Jan 2026 17:05:21 +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 1viy7U-00DrdF-1u for pgsql-hackers@lists.postgresql.org; Thu, 22 Jan 2026 17:05:21 +0000 Received: from mail-qt1-x831.google.com ([2607:f8b0:4864:20::831]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1viy7S-001w1k-2A for pgsql-hackers@lists.postgresql.org; Thu, 22 Jan 2026 17:05:20 +0000 Received: by mail-qt1-x831.google.com with SMTP id d75a77b69052e-5014acad6f2so492111cf.1 for ; Thu, 22 Jan 2026 09:05:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769101517; cv=none; d=google.com; s=arc-20240605; b=kOMMV2n/9ohTXK6MkTs3Nc01HOukkQIBACHn1BIZSJ0uVOo08fdRbVeMEaAgDs4XNw +LBKAqr5Iu2UBtoI3sylhBzgMwhrgIWXgoBbneny80vZO+m8R2SFhH9kSzHVUfLTPiHn /xPzV3JeKFmWsYjeX20W+3ibx851hosXKIgB0otBYd1VdZRehMnd0Y1FlDwlFWRMOu/P xacKp0sBeTNroJJp/sibLXBZ782+XV+1vLLcNNZYJOho+Rt5c+Sg8fZkylnxoaXhS2+4 EcycCc5n0VsCEQiikozTGa8a1376fII+4qdGMH3Gv8yW9EQ2lPbY8DcxikqTDYMRekZ0 wupg== 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=wXADWZmXnPp2FOgiqCv8W25KYrs2LcM7jqZJjFKlSOI=; fh=Iuhpd8BSgHuVnHlteTPaSLnrhq88zYZ7tMdIuSksNIk=; b=JmX17pzZlMNkYmoGZBcJdrx1DDxgOS/EYk/9+7qaj3E5pcCXkc8JEhfjDSfUEP/lfF VWwto+YJgrvJCjHvuvgaExRd7VD+mW38qFhF095/z0zNgEoVXXWuhA1+oXC5NBeIRo2s fskHVneO3x7xt9e/IOQ+VAvuBJv7bQ719H8wXT+nUfXlNgMYqLpTiIbyV4tVBew4ofsH rvhCgx9hzlbHNHtt8FVEl4AzqT15RwxDKAhch5CNdR9mn0vqWdW2aAgPm+HO1spjM9fO qrzHRQ4mDm+aro1BSKUbMbWMSvJVgiY9+cphjTDBgI6eCunhwHEcc32HAw6W9kax7f20 vM6A==; 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=google.com; s=20230601; t=1769101517; x=1769706317; 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=wXADWZmXnPp2FOgiqCv8W25KYrs2LcM7jqZJjFKlSOI=; b=Ix++evhvrJMhZVxWe9TbX4OafmT8eYJEvGu0gFyPabbFQqmG5BnkT2fKFCL4B+rfS2 5nf/g0l2ZYOOB/jH6N3JNDy3Ks9nVNJxXLwRtbncNN1P+p4AwOPiapHdVJqYLhXacSd3 TUONNlduh48x94aSV2D/2+AE4y2URBCokSKH0ozWAR+7Ye9qWLYuFBzmX1j9fFzkGOG3 GaXqa2WGFvq8MBwFnVFoRcxWPhDFHUSNm2Qezz9SDBTVp4R0XcVWftjdIB+Zf2hhARPG kBtGLxNajBC33l3tu4F6OqCtexpsN7og6U34qtM+UXtC/1X2iIkcsbDBAUK+RHf68vJV QXNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769101517; x=1769706317; 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=wXADWZmXnPp2FOgiqCv8W25KYrs2LcM7jqZJjFKlSOI=; b=e6ivDZP9hMePq3ofuUEaO4WAaeAx1ngXZ8eDarOfCTRhtE57KHoRsTfxXox/UOS7tf VKjQw6Y1UJtlfrIDyXKIzOlODeJ21NXDlAZ7zfoXmAQ3xrnyHC/K0kYxn5fIFOqD1X2g TsAZYXFGoQKrg9tKm6BbSnzoV8wXYlxegC/5DfJfrigNaC7tCtUgHF8zzMhpyjHtUQgJ 2KVUOxuKj4Ls4uI5Pc0GunX1ZpCS4NWF0rcbGNTZwx0yoIlK6KR+mky2/FMAhN8IlWtl RSR2M42vBIq6k3HFyzxKb5kZ7JuFUNU89MSbNp8mifpkBm/WHPkz2RC9A7yG/VjeC4kR q38Q== X-Forwarded-Encrypted: i=1; AJvYcCWFg2+OXjprx78ub+yQmbwUIegw1f+0qMbH+riLpk5aGKH+qJNupLhJcXkqJ5acV99H8WR53DK3E7si1LaC@lists.postgresql.org X-Gm-Message-State: AOJu0Yw7gM0yVACKNAWfGDLQy71oCnEa37+NbPF1082MwACMdMImGTAY +jf1z05lH3N7WCA5Sip21RlGc+JyEfE9dN2HpuYiHS5LfIsxily3vorE04CIWT9hLO578JlG2N7 HadRXsMbV4rVQfc2zqQCvg7m3e3ohPZFh2PPIH1+F X-Gm-Gg: AZuq6aLaVg6+48p0jSEpI0hjdu7j7fjAbehK0H+V95HQm9nbu/oZ9hlgv2b+JCH58tj 0HwUKUmPPIi/mO55SSj4k57gzfrJ90Bmrl59suaULv8fE3mbDmd/yul9o0KmiTW16XshoqHTvKB KRbGPBa1V640EUJ82IdqoP//XfLbqRuzHLDKB7bVPLwU9+axsg3e3heJshwU4+yGCfL6PE6nNrV PnVsRSZfi9L8+Uw62X4JpoONDyOwtHEV4W7KMiD1nLOB0qwzHMFlGCuMib3UZ2DSXMEO84R X-Received: by 2002:a05:622a:1312:b0:4ff:cb72:7c03 with SMTP id d75a77b69052e-502ecd3ec03mr12255271cf.3.1769101516076; Thu, 22 Jan 2026 09:05:16 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Hannu Krosing Date: Thu, 22 Jan 2026 18:05:04 +0100 X-Gm-Features: AZwV_Qgz8eBT6Nwu2RzBsA_s_hELa9c_1yC1MhWSC_gWU0KTWrjk3sPgmEM6ndM Message-ID: Subject: Re: Patch: dumping tables data in multiple chunks in pg_dump To: David Rowley , Zsolt Parragi Cc: Ashutosh Bapat , PostgreSQL Hackers , Nathan Bossart Content-Type: multipart/mixed; boundary="000000000000713cae0648fd0b00" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000713cae0648fd0b00 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Fixing all the warnings On Wed, Jan 21, 2026 at 2:05=E2=80=AFPM Hannu Krosing w= rote: > > Please find the latest patch attached which incorporates the feedback rec= eived. > > * changed flag name to --max-table-segment-pages > * added check for amname =3D "heap" > * switched to using of > pg_relation_size(c.oid)/current_setting('block_size')::int when > --max-table-segment-pages is set > * added option_parse_uint32(...) to be used for full range of pages numbe= rs > * The COPY SELECTs now use <=3D , BETWEEN or >=3D depending on the segmen= t position > > * added documentation > > * TESTS: > * added simple chunked dump and restore test > * added a WARNING with count and table data hash to source and > chunked restore database > > I left in the boolean to indicate if this is a full table or chunk > (was named chunking, nor is_segment) > > An a lternative would be to use an expression like (td->startPage !=3D 0 > || td->endPage !=3D InvalidBlockNumber) whenever td->is_segment is > needed > > If you insist on not having a separate structure member we could turn > this into something like this > > #define is_segment(td) ((td->startPage !=3D 0 || td->endPage !=3D > InvalidBlockNumber)) > > and then use is_segment(td) instead of td->is_segment where needed. --000000000000713cae0648fd0b00 Content-Type: application/x-patch; name="v10-0001-changed-flag-name-to-max-table-segment-pages.patch" Content-Disposition: attachment; filename="v10-0001-changed-flag-name-to-max-table-segment-pages.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkppb0ih0 RnJvbSA5YTc3NzgxZGYyMTQwY2I1Njc2YTc5ZWVhNmIzMjkzNDY3MmVlMzZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYW5udSBLcm9zaW5nIDxoYW5udWtAZ29vZ2xlLmNvbT4KRGF0 ZTogVGh1LCAyMiBKYW4gMjAyNiAxNzo1NjozNCArMDEwMApTdWJqZWN0OiBbUEFUQ0ggdjEwXSAq IGNoYW5nZWQgZmxhZyBuYW1lIHRvIG1heC10YWJsZS1zZWdtZW50LXBhZ2VzICogYWRkZWQKIGNo ZWNrIGZvciBhbW5hbWUgPSAiaGVhcCIgKiBhZGRlZCBzaW1wbGUgY2h1bmtlZCBkdW1wIGFuZCBy ZXN0b3JlIHRlc3QgKgogc3dpdGNoZWQgdG8gdXNpbmcgb2YKIHBnX3JlbGF0aW9uX3NpemUoYy5v aWQpL2N1cnJlbnRfc2V0dGluZygnYmxvY2tfc2l6ZScpOjppbnQgd2hlbgogLS1tYXgtdGFibGUt c2VnbWVudC1wYWdlcyBpcyBzZXQgKiBhZGRlZCBkb2N1bWVudGF0aW9uICogYWRkZWQKIG9wdGlv bl9wYXJzZV91aW50MzIoLi4uKSB0byBiZSB1c2VkIGZvciBmdWxsIHJhbmdlIG9mIHBhZ2VzIG51 bWJlcnMgKiAuLiBhbmQKIGZpeGVkIHRoZSB3YXJuaW5ncwoKKiBURVNUUzogYWRkZWQgYSBXQVJO SU5HIHdpdGggY291bnQgYW5kIHRhYmxlIGRhdGEgaGFzaCB0byBzb3VyY2UgYW5kIGNodW5rZWQg cmVzdG9yZSBkYXRhYmFzZQotLS0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sICAgICAg ICAgICAgIHwgIDI0ICsrKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oICAgICAgICAgICAg ICAgfCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jICAgICAgfCAg IDIgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICAgfCAxNzAgKysr KysrKysrKysrKysrKystLS0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAg ICAgICAgfCAgIDcgKwogc3JjL2Jpbi9wZ19kdW1wL3QvMDA0X3BnX2R1bXBfcGFyYWxsZWwucGwg fCAgNTIgKysrKysrKwogc3JjL2ZlX3V0aWxzL29wdGlvbl91dGlscy5jICAgICAgICAgICAgICAg fCAgNTcgKysrKysrKysKIHNyYy9pbmNsdWRlL2ZlX3V0aWxzL29wdGlvbl91dGlscy5oICAgICAg IHwgICAzICsKIDggZmlsZXMgY2hhbmdlZCwgMjgyIGluc2VydGlvbnMoKyksIDM1IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sIGIvZG9jL3Ny Yy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKaW5kZXggNjg4ZTIzYzBlOTAuLjE4MTFjNjdkMTQxIDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvcmVmL3BnX2R1bXAuc2dtbApAQCAtMTA4OCw2ICsxMDg4LDMwIEBAIFBvc3RncmVTUUwgZG9j dW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAg ICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1tYXgtdGFibGUtc2VnbWVu dC1wYWdlcz08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnBhZ2VzPC9yZXBsYWNlYWJs ZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAg ICAgIER1bXAgZGF0YSBpbiBzZWdtZW50cyBiYXNlZCBvbiBudW1iZXIgb2YgcGFnZXMgaW4gdGhl IG1haW4gcmVsYXRpb24uCisgICAgICAgIElmIHRoZSBudW1iZXIgb2YgZGF0YSBwYWdlcyBpbiB0 aGUgcmVsYXRpb24gaXMgbW9yZSB0aGFuIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5u cGFnZXM8L3JlcGxhY2VhYmxlPiAKKyAgICAgICAgdGhlIGRhdGEgaXMgc3BsaXQgaW50byBzZWdt ZW50cyBiYXNlZCBvbiB0aGF0IG51bWJlciBvZiBwYWdlcy4KKyAgICAgICAgSW5kaXZpZHVhbCBz ZWdtZW50cyBjYW4gYmUgZHVtcGVkIGluIHBhcmFsbGVsLgorICAgICAgIDwvcGFyYT4KKworICAg ICAgIDxub3RlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIFRoZSBvcHRpb24gPG9wdGlvbj4t LW1heC10YWJsZS1zZWdtZW50LXBhZ2VzPC9vcHRpb24+IGlzIGFwcGxpZWQgdG8gb25seSBwYWdl cworICAgICAgICAgaW4gdGhlIG1haW4gaGVhcCBhbmQgaWYgdGhlIHRhYmxlIGhhcyBhIGxhcmdl IFRPQVNUZWQgcGFydCB0aGlzIGhhcyB0byBiZQorICAgICAgICAgdGFrZW4gaW50byBhY2NvdW50 IHdoZW4gZGVjaWRpbmcgb24gdGhlIG51bWJlciBvZiBwYWdlcyB0byB1c2UuCisgICAgICAgICBJ biB0aGUgZXh0cmVtZSBjYXNlIGEgc2luZ2xlIDhrQiBoZWFwIHBhZ2UgY2FuIGhhdmUgfjIwMCB0 b2FzdCBwb2ludGVycyBlYWNoIAorICAgICAgICAgY29ycmVzcG9uZGluZyB0byAxR0Igb2YgZGF0 YS4gSWYgdGhpcyBkYXRhIGlzIGFsc28gbm9uLWNvbXByZXNzaWJsZSB0aGVuIGEgCisgICAgICAg ICBzaW5nbGUtcGFnZSBzZWdtZW50IGNhbiBkdW1wIGFzIDIwMEdCIGZpbGUuCisgICAgICAgIDwv cGFyYT4KKyAgICAgICA8L25vdGU+CisKKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi0tbm8t Y29tbWVudHM8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgK aW5kZXggZDkwNDFkYWQ3MjAuLmI2M2FlMDVkODk1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCkBAIC0yNyw2 ICsyNyw3IEBACiAjaW5jbHVkZSAiY29tbW9uL2ZpbGVfdXRpbHMuaCIKICNpbmNsdWRlICJmZV91 dGlscy9zaW1wbGVfbGlzdC5oIgogI2luY2x1ZGUgImxpYnBxLWZlLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9ibG9jay5oIgogCiAKIHR5cGVkZWYgZW51bSB0cml2YWx1ZQpAQCAtMTc4LDYgKzE3OSw3 IEBAIHR5cGVkZWYgc3RydWN0IF9kdW1wT3B0aW9ucwogCWJvb2wJCWFjbHNTa2lwOwogCWNvbnN0 IGNoYXIgKmxvY2tXYWl0VGltZW91dDsKIAlpbnQJCQlkdW1wX2luc2VydHM7CS8qIDAgPSBDT1BZ LCBvdGhlcndpc2Ugcm93cyBwZXIgSU5TRVJUICovCisJQmxvY2tOdW1iZXIJbWF4X3RhYmxlX3Nl Z21lbnRfcGFnZXM7IC8qIGNodW5rIHdoZW4gcmVscGFnZXMgaXMgYWJvdmUgdGhpcyAqLwogCiAJ LyogZmxhZ3MgZm9yIHZhcmlvdXMgY29tbWFuZC1saW5lIGxvbmcgb3B0aW9ucyAqLwogCWludAkJ CWRpc2FibGVfZG9sbGFyX3F1b3Rpbmc7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMK aW5kZXggNGE2M2Y3MzkyYWUuLmVkMTkxM2Q2NmJjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVy LmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX2RiLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxz LmgiCisjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5oIgogCiAjZGVmaW5lIFRFWFRfRFVNUF9IRUFE RVIgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0tXG5cbiIKICNkZWZpbmUgVEVY VF9EVU1QQUxMX0hFQURFUiAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1w XG4tLVxuXG4iCkBAIC0xNTQsNiArMTU1LDcgQEAgSW5pdER1bXBPcHRpb25zKER1bXBPcHRpb25z ICpvcHRzKQogCW9wdHMtPmR1bXBTY2hlbWEgPSB0cnVlOwogCW9wdHMtPmR1bXBEYXRhID0gdHJ1 ZTsKIAlvcHRzLT5kdW1wU3RhdGlzdGljcyA9IGZhbHNlOworCW9wdHMtPm1heF90YWJsZV9zZWdt ZW50X3BhZ2VzID0gSW52YWxpZEJsb2NrTnVtYmVyOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXgg Njg3ZGM5OGU0NmQuLmNhN2U5YzVlZWJhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTUzOSw2ICs1MzksNyBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJleGNsdWRlLWV4dGVuc2lvbiIsIHJl cXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxN30sCiAJCXsic2VxdWVuY2UtZGF0YSIsIG5vX2FyZ3Vt ZW50LCAmZG9wdC5zZXF1ZW5jZV9kYXRhLCAxfSwKIAkJeyJyZXN0cmljdC1rZXkiLCByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgMjV9LAorCQl7Im1heC10YWJsZS1zZWdtZW50LXBhZ2VzIiwgcmVx dWlyZWRfYXJndW1lbnQsIE5VTEwsIDI2fSwKIAogCQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwpA QCAtODAzLDYgKzgwNCwxMyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlkb3B0 LnJlc3RyaWN0X2tleSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwogCisJCQljYXNl IDI2OgorCQkJCWlmICghb3B0aW9uX3BhcnNlX3VpbnQzMihvcHRhcmcsICItLW1heC10YWJsZS1z ZWdtZW50LXBhZ2VzIiwgMSwgTWF4QmxvY2tOdW1iZXIsCisJCQkJCQkJCQkgICZkb3B0Lm1heF90 YWJsZV9zZWdtZW50X3BhZ2VzKSkKKwkJCQkJZXhpdF9uaWNlbHkoMSk7CisJCQkJcGdfbG9nX3dh cm5pbmcoIkNIVU5LSU5HOiBzZXQgZG9wdC5tYXhfdGFibGVfc2VnbWVudF9wYWdlcyB0byBbJXVd IiwoQmxvY2tOdW1iZXIpIGRvcHQubWF4X3RhYmxlX3NlZ21lbnRfcGFnZXMpOworCQkJCWJyZWFr OworCiAJCQlkZWZhdWx0OgogCQkJCS8qIGdldG9wdF9sb25nIGFscmVhZHkgZW1pdHRlZCBhIGNv bXBsYWludCAqLwogCQkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3Ig bW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CkBAIC0xMzcyLDYgKzEzODAsOSBAQCBoZWxw KGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC0tZXh0cmEtZmxvYXQtZGlnaXRz PU5VTSAgICAgb3ZlcnJpZGUgZGVmYXVsdCBzZXR0aW5nIGZvciBleHRyYV9mbG9hdF9kaWdpdHNc biIpKTsKIAlwcmludGYoXygiICAtLWZpbHRlcj1GSUxFTkFNRSAgICAgICAgICAgIGluY2x1ZGUg b3IgZXhjbHVkZSBvYmplY3RzIGFuZCBkYXRhIGZyb20gZHVtcFxuIgogCQkJICIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gZXhwcmVzc2lvbnMgaW4gRklMRU5BTUVcbiIp KTsKKwlwcmludGYoXygiICAtLW1heC10YWJsZS1zZWdtZW50LXBhZ2VzPU5VTVBBR0VTXG4iCisJ CSAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgbWFpbiB0YWJs ZSBwYWdlcyBhYm92ZSB3aGljaCBkYXRhIGlzIFxuIgorCQkJICIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29waWVkIG91dCBpbiBjaHVua3MsIGFsc28gZGV0ZXJtaW5lcyB0aGUgY2h1 bmsgc2l6ZVxuIikpOwogCXByaW50ZihfKCIgIC0taWYtZXhpc3RzICAgICAgICAgICAgICAgICAg dXNlIElGIEVYSVNUUyB3aGVuIGRyb3BwaW5nIG9iamVjdHNcbiIpKTsKIAlwcmludGYoXygiICAt LWluY2x1ZGUtZm9yZWlnbi1kYXRhPVBBVFRFUk5cbiIKIAkJCSAiICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGluY2x1ZGUgZGF0YSBvZiBmb3JlaWduIHRhYmxlcyBvbiBmb3JlaWduXG4i CkBAIC0yNDEyLDcgKzI0MjMsNyBAQCBkdW1wVGFibGVEYXRhX2NvcHkoQXJjaGl2ZSAqZm91dCwg Y29uc3Qgdm9pZCAqZGNvbnRleHQpCiAJICogYSBmaWx0ZXIgY29uZGl0aW9uIHdhcyBzcGVjaWZp ZWQuICBGb3Igb3RoZXIgY2FzZXMgYSBzaW1wbGUgQ09QWQogCSAqIHN1ZmZpY2VzLgogCSAqLwot CWlmICh0ZGluZm8tPmZpbHRlcmNvbmQgfHwgdGJpbmZvLT5yZWxraW5kID09IFJFTEtJTkRfRk9S RUlHTl9UQUJMRSkKKwlpZiAodGRpbmZvLT5maWx0ZXJjb25kIHx8IHRkaW5mby0+aXNfc2VnbWVu dCB8fCB0YmluZm8tPnJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFKQogCXsKIAkJLyog VGVtcG9yYXJ5IGFsbG93cyB0byBhY2Nlc3MgdG8gZm9yZWlnbiB0YWJsZXMgdG8gZHVtcCBkYXRh ICovCiAJCWlmICh0YmluZm8tPnJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFKQpAQCAt MjQyOCw5ICsyNDM5LDI1IEBAIGR1bXBUYWJsZURhdGFfY29weShBcmNoaXZlICpmb3V0LCBjb25z dCB2b2lkICpkY29udGV4dCkKIAkJZWxzZQogCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocSwgIiog Iik7CiAKLQkJYXBwZW5kUFFFeHBCdWZmZXIocSwgIkZST00gJXMgJXMpIFRPIHN0ZG91dDsiLAor CQlhcHBlbmRQUUV4cEJ1ZmZlcihxLCAiRlJPTSAlcyAlcyIsCiAJCQkJCQkgIGZtdFF1YWxpZmll ZER1bXBhYmxlKHRiaW5mbyksCiAJCQkJCQkgIHRkaW5mby0+ZmlsdGVyY29uZCA/IHRkaW5mby0+ ZmlsdGVyY29uZCA6ICIiKTsKKwkJaWYgKHRkaW5mby0+aXNfc2VnbWVudCkKKwkJeworCQkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocSwgdGRpbmZvLT5maWx0ZXJjb25kPyIgQU5EICI6IiBXSEVSRSAi KTsKKwkJCWlmKHRkaW5mby0+c3RhcnRQYWdlID09IDApCisJCQkJYXBwZW5kUFFFeHBCdWZmZXIo cSwgImN0aWQgPD0gJygldSwzMjAwMCknIiwgLyogdGhlcmUgaXMgbm8gKCosMCkgdHVwbGUgKi8K KwkJCQkJCQkJIHRkaW5mby0+ZW5kUGFnZSk7CQkJCisJCQllbHNlIGlmKHRkaW5mby0+ZW5kUGFn ZSAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpCisJCQkJYXBwZW5kUFFFeHBCdWZmZXIocSwgImN0aWQg QkVUV0VFTiAnKCV1LDEpJyBBTkQgJygldSwzMjAwMCknIiwgLyogdGhlcmUgaXMgbm8gKCosMCkg dHVwbGUgKi8KKwkJCQkJCQkJIHRkaW5mby0+c3RhcnRQYWdlLCB0ZGluZm8tPmVuZFBhZ2UpOwor CQkJZWxzZQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHEsICJjdGlkID49ICcoJXUsMSknIiwgLyog dGhlcmUgaXMgbm8gKCosMCkgdHVwbGUgKi8KKwkJCQkJCQkJIHRkaW5mby0+c3RhcnRQYWdlKTsK KwkJCXBnX2xvZ193YXJuaW5nKCJDSFVOS0lORzogcGFnZXMgWyV1OiV1XSIsdGRpbmZvLT5zdGFy dFBhZ2UsIHRkaW5mby0+ZW5kUGFnZSk7CisJCX0KKworCQlhcHBlbmRQUUV4cEJ1ZmZlcihxLCAi KSBUTyBzdGRvdXQ7Iik7CiAJfQogCWVsc2UKIAl7CkBAIC0yNDM4LDYgKzI0NjUsOSBAQCBkdW1w VGFibGVEYXRhX2NvcHkoQXJjaGl2ZSAqZm91dCwgY29uc3Qgdm9pZCAqZGNvbnRleHQpCiAJCQkJ CQkgIGZtdFF1YWxpZmllZER1bXBhYmxlKHRiaW5mbyksCiAJCQkJCQkgIGNvbHVtbl9saXN0KTsK IAl9CisKKwlwZ19sb2dfd2FybmluZygiQ0hVTktJTkc6IGRhdGEgcXVlcnk6ICVzIiwgcS0+ZGF0 YSk7CisJCiAJcmVzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHEtPmRhdGEsIFBHUkVTX0NPUFlf T1VUKTsKIAlQUWNsZWFyKHJlcyk7CiAJZGVzdHJveVBRRXhwQnVmZmVyKGNsaXN0QnVmKTsKQEAg LTI5MzMsNDEgKzI5NjMsMTAxIEBAIGR1bXBUYWJsZURhdGEoQXJjaGl2ZSAqZm91dCwgY29uc3Qg VGFibGVEYXRhSW5mbyAqdGRpbmZvKQogCXsKIAkJVG9jRW50cnkgICAqdGU7CiAKLQkJdGUgPSBB cmNoaXZlRW50cnkoZm91dCwgdGRpbmZvLT5kb2JqLmNhdElkLCB0ZGluZm8tPmRvYmouZHVtcElk LAotCQkJCQkJICBBUkNISVZFX09QVFMoLnRhZyA9IHRiaW5mby0+ZG9iai5uYW1lLAotCQkJCQkJ CQkJICAgLm5hbWVzcGFjZSA9IHRiaW5mby0+ZG9iai5uYW1lc3BhY2UtPmRvYmoubmFtZSwKLQkJ CQkJCQkJCSAgIC5vd25lciA9IHRiaW5mby0+cm9sbmFtZSwKLQkJCQkJCQkJCSAgIC5kZXNjcmlw dGlvbiA9ICJUQUJMRSBEQVRBIiwKLQkJCQkJCQkJCSAgIC5zZWN0aW9uID0gU0VDVElPTl9EQVRB LAotCQkJCQkJCQkJICAgLmNyZWF0ZVN0bXQgPSB0ZERlZm4sCi0JCQkJCQkJCQkgICAuY29weVN0 bXQgPSBjb3B5U3RtdCwKLQkJCQkJCQkJCSAgIC5kZXBzID0gJih0YmluZm8tPmRvYmouZHVtcElk KSwKLQkJCQkJCQkJCSAgIC5uRGVwcyA9IDEsCi0JCQkJCQkJCQkgICAuZHVtcEZuID0gZHVtcEZu LAotCQkJCQkJCQkJICAgLmR1bXBBcmcgPSB0ZGluZm8pKTsKLQotCQkvKgotCQkgKiBTZXQgdGhl IFRvY0VudHJ5J3MgZGF0YUxlbmd0aCBpbiBjYXNlIHdlIGFyZSBkb2luZyBhIHBhcmFsbGVsIGR1 bXAKLQkJICogYW5kIHdhbnQgdG8gb3JkZXIgZHVtcCBqb2JzIGJ5IHRhYmxlIHNpemUuICBXZSBj aG9vc2UgdG8gbWVhc3VyZQotCQkgKiBkYXRhTGVuZ3RoIGluIHRhYmxlIHBhZ2VzIChpbmNsdWRp bmcgVE9BU1QgcGFnZXMpIGR1cmluZyBkdW1wLCBzbwotCQkgKiBubyBzY2FsaW5nIGlzIG5lZWRl ZC4KLQkJICoKLQkJICogSG93ZXZlciwgcmVscGFnZXMgaXMgZGVjbGFyZWQgYXMgImludGVnZXIi IGluIHBnX2NsYXNzLCBhbmQgaGVuY2UKLQkJICogYWxzbyBpbiBUYWJsZUluZm8sIGJ1dCBpdCdz IHJlYWxseSBCbG9ja051bWJlciBhL2svYSB1bnNpZ25lZCBpbnQuCi0JCSAqIENhc3Qgc28gdGhh dCB3ZSBnZXQgdGhlIHJpZ2h0IGludGVycHJldGF0aW9uIG9mIHRhYmxlIHNpemVzCi0JCSAqIGV4 Y2VlZGluZyBJTlRfTUFYIHBhZ2VzLgorCQkvKiBkYXRhIGNodW5raW5nIHdvcmtzIG9mZiByZWxw YWdlcywgd2hpY2ggYXJlIGNvbXB1dGVkIGV4YWN0bHkgdXNpbmcKKwkJICogcGdfcmVsYXRpb25f c2l6ZSgpIHdoZW4gLS1tYXgtdGFibGUtc2VnbWVudC1wYWdlcyB3YXMgc2V0CisJCSAqIAorCQkg KiBXZSBhbHNvIGRvbid0IGNodW5rIGlmIHRhYmxlIGFjY2VzcyBtZXRob2QgaXMgbm90ICJoZWFw IgorCQkgKiBUT0RPOiB3ZSBtYXkgYWRkIGNodW5raW5nIGZvciBvdGhlciBhY2Nlc3MgbWV0aG9k cyBsYXRlciwgbWF5YmUgCisJCSAqIGJhc2VkIG9uIHByaW1hcnkga2V5IHRyYW5nZXMKIAkJICov Ci0JCXRlLT5kYXRhTGVuZ3RoID0gKEJsb2NrTnVtYmVyKSB0YmluZm8tPnJlbHBhZ2VzOwotCQl0 ZS0+ZGF0YUxlbmd0aCArPSAoQmxvY2tOdW1iZXIpIHRiaW5mby0+dG9hc3RwYWdlczsKKwkJaWYg KChCbG9ja051bWJlcikgdGJpbmZvLT5yZWxwYWdlcyA8PSBkb3B0LT5tYXhfdGFibGVfc2VnbWVu dF9wYWdlcyB8fCAKKwkJCXN0cmNtcCh0YmluZm8tPmFtbmFtZSwgImhlYXAiKSAhPSAwKQorCQl7 CisJCQl0ZSA9IEFyY2hpdmVFbnRyeShmb3V0LCB0ZGluZm8tPmRvYmouY2F0SWQsIHRkaW5mby0+ ZG9iai5kdW1wSWQsCisJCQkJCQkJQVJDSElWRV9PUFRTKC50YWcgPSB0YmluZm8tPmRvYmoubmFt ZSwKKwkJCQkJCQkJCQkubmFtZXNwYWNlID0gdGJpbmZvLT5kb2JqLm5hbWVzcGFjZS0+ZG9iai5u YW1lLAorCQkJCQkJCQkJCS5vd25lciA9IHRiaW5mby0+cm9sbmFtZSwKKwkJCQkJCQkJCQkuZGVz Y3JpcHRpb24gPSAiVEFCTEUgREFUQSIsCisJCQkJCQkJCQkJLnNlY3Rpb24gPSBTRUNUSU9OX0RB VEEsCisJCQkJCQkJCQkJLmNyZWF0ZVN0bXQgPSB0ZERlZm4sCisJCQkJCQkJCQkJLmNvcHlTdG10 ID0gY29weVN0bXQsCisJCQkJCQkJCQkJLmRlcHMgPSAmKHRiaW5mby0+ZG9iai5kdW1wSWQpLAor CQkJCQkJCQkJCS5uRGVwcyA9IDEsCisJCQkJCQkJCQkJLmR1bXBGbiA9IGR1bXBGbiwKKwkJCQkJ CQkJCQkuZHVtcEFyZyA9IHRkaW5mbykpOwogCi0JCS8qCi0JCSAqIElmIHBnb2ZmX3QgaXMgb25s eSAzMiBiaXRzIHdpZGUsIHRoZSBhYm92ZSByZWZpbmVtZW50IGlzIHVzZWxlc3MsCi0JCSAqIGFu ZCBpbnN0ZWFkIHdlJ2QgYmV0dGVyIHdvcnJ5IGFib3V0IGludGVnZXIgb3ZlcmZsb3cuICBDbGFt cCB0bwotCQkgKiBJTlRfTUFYIGlmIHRoZSBjb3JyZWN0IHJlc3VsdCBleGNlZWRzIHRoYXQuCi0J CSAqLworCQkJLyoKKwkJCSAqIFNldCB0aGUgVG9jRW50cnkncyBkYXRhTGVuZ3RoIGluIGNhc2Ug d2UgYXJlIGRvaW5nIGEgcGFyYWxsZWwgZHVtcAorCQkJICogYW5kIHdhbnQgdG8gb3JkZXIgZHVt cCBqb2JzIGJ5IHRhYmxlIHNpemUuICBXZSBjaG9vc2UgdG8gbWVhc3VyZQorCQkJICogZGF0YUxl bmd0aCBpbiB0YWJsZSBwYWdlcyAoaW5jbHVkaW5nIFRPQVNUIHBhZ2VzKSBkdXJpbmcgZHVtcCwg c28KKwkJCSAqIG5vIHNjYWxpbmcgaXMgbmVlZGVkLgorCQkJICoKKwkJCSAqIEhvd2V2ZXIsIHJl bHBhZ2VzIGlzIGRlY2xhcmVkIGFzICJpbnRlZ2VyIiBpbiBwZ19jbGFzcywgYW5kIGhlbmNlCisJ CQkgKiBhbHNvIGluIFRhYmxlSW5mbywgYnV0IGl0J3MgcmVhbGx5IEJsb2NrTnVtYmVyIGEvay9h IHVuc2lnbmVkIGludC4KKwkJCSAqIENhc3Qgc28gdGhhdCB3ZSBnZXQgdGhlIHJpZ2h0IGludGVy cHJldGF0aW9uIG9mIHRhYmxlIHNpemVzCisJCQkgKiBleGNlZWRpbmcgSU5UX01BWCBwYWdlcy4K KwkJCSAqLworCQkJdGUtPmRhdGFMZW5ndGggPSAoQmxvY2tOdW1iZXIpIHRiaW5mby0+cmVscGFn ZXM7CisJCQl0ZS0+ZGF0YUxlbmd0aCArPSAoQmxvY2tOdW1iZXIpIHRiaW5mby0+dG9hc3RwYWdl czsKKwkJfQorCQllbHNlCisJCXsKKwkJCUJsb2NrTnVtYmVyIGN1cnJlbnRfY2h1bmtfc3RhcnQg PSAwOworCQkJUFFFeHBCdWZmZXIgY2h1bmtfZGVzYyA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJ CQkKKwkJCXBnX2xvZ193YXJuaW5nKCJDSFVOS0lORzogdG9jIGZvciBjaHVua2VkIHJlbHBhZ2Vz IFsldV0iLChCbG9ja051bWJlcikgdGJpbmZvLT5yZWxwYWdlcyk7CisKKwkJCXdoaWxlIChjdXJy ZW50X2NodW5rX3N0YXJ0IDwgKEJsb2NrTnVtYmVyKSB0YmluZm8tPnJlbHBhZ2VzKQorCQkJewor CQkJCVRhYmxlRGF0YUluZm8gKmNodW5rX3RkaW5mbyA9IChUYWJsZURhdGFJbmZvICopIHBnX21h bGxvYyhzaXplb2YoVGFibGVEYXRhSW5mbykpOworCisJCQkJbWVtY3B5KGNodW5rX3RkaW5mbywg dGRpbmZvLCBzaXplb2YoVGFibGVEYXRhSW5mbykpOworCQkJCUFzc2lnbkR1bXBJZCgmY2h1bmtf dGRpbmZvLT5kb2JqKTsKKwkJCQkvL2FkZE9iamVjdERlcGVuZGVuY3koJmNodW5rX3RkaW5mby0+ ZG9iaiwgdGJpbmZvLT5kb2JqLmR1bXBJZCk7IC8qIGRvIHdlIG5lZWQgdGhpcyBoZXJlICovCisJ CQkJY2h1bmtfdGRpbmZvLT5pc19zZWdtZW50ID0gdHJ1ZTsKKwkJCQljaHVua190ZGluZm8tPnN0 YXJ0UGFnZSA9IGN1cnJlbnRfY2h1bmtfc3RhcnQ7CisJCQkJY2h1bmtfdGRpbmZvLT5lbmRQYWdl ID0gY3VycmVudF9jaHVua19zdGFydCArIGRvcHQtPm1heF90YWJsZV9zZWdtZW50X3BhZ2VzIC0g MTsKKworCQkJCXBnX2xvZ193YXJuaW5nKCJDSFVOS0lORzogdG9jIGZvciBwYWdlcyBbJXU6JXVd IixjaHVua190ZGluZm8tPnN0YXJ0UGFnZSwgY2h1bmtfdGRpbmZvLT5lbmRQYWdlKTsKKwkJCQkK KwkJCQljdXJyZW50X2NodW5rX3N0YXJ0ICs9IGRvcHQtPm1heF90YWJsZV9zZWdtZW50X3BhZ2Vz OworCQkJCWlmIChjdXJyZW50X2NodW5rX3N0YXJ0ID49IChCbG9ja051bWJlcikgdGJpbmZvLT5y ZWxwYWdlcykKKwkJCQkJY2h1bmtfdGRpbmZvLT5lbmRQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVy OyAvKiBsYXN0IGNodW5rIGlzIGZvciAiYWxsIHRoZSByZXN0IiAqLworCisJCQkJcHJpbnRmUFFF eHBCdWZmZXIoY2h1bmtfZGVzYywgIlRBQkxFIERBVEEgKHBhZ2VzICV1OiV1KSIsIGNodW5rX3Rk aW5mby0+c3RhcnRQYWdlLCBjaHVua190ZGluZm8tPmVuZFBhZ2UpOworCisJCQkJdGUgPSBBcmNo aXZlRW50cnkoZm91dCwgY2h1bmtfdGRpbmZvLT5kb2JqLmNhdElkLCBjaHVua190ZGluZm8tPmRv YmouZHVtcElkLAorCQkJCQkJCUFSQ0hJVkVfT1BUUygudGFnID0gdGJpbmZvLT5kb2JqLm5hbWUs CisJCQkJCQkJCQkJLm5hbWVzcGFjZSA9IHRiaW5mby0+ZG9iai5uYW1lc3BhY2UtPmRvYmoubmFt ZSwKKwkJCQkJCQkJCQkub3duZXIgPSB0YmluZm8tPnJvbG5hbWUsCisJCQkJCQkJCQkJLmRlc2Ny aXB0aW9uID0gY2h1bmtfZGVzYy0+ZGF0YSwKKwkJCQkJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05f REFUQSwKKwkJCQkJCQkJCQkuY3JlYXRlU3RtdCA9IHRkRGVmbiwKKwkJCQkJCQkJCQkuY29weVN0 bXQgPSBjb3B5U3RtdCwKKwkJCQkJCQkJCQkuZGVwcyA9ICYodGJpbmZvLT5kb2JqLmR1bXBJZCks CisJCQkJCQkJCQkJLm5EZXBzID0gMSwKKwkJCQkJCQkJCQkuZHVtcEZuID0gZHVtcEZuLAorCQkJ CQkJCQkJCS5kdW1wQXJnID0gY2h1bmtfdGRpbmZvKSk7CisKKwkJCQlpZihjaHVua190ZGluZm8t PmVuZFBhZ2UgPT0gSW52YWxpZEJsb2NrTnVtYmVyKQorCQkJCQl0ZS0+ZGF0YUxlbmd0aCA9IChC bG9ja051bWJlcikgdGJpbmZvLT5yZWxwYWdlcyAtIGNodW5rX3RkaW5mby0+c3RhcnRQYWdlOwor CQkJCWVsc2UKKwkJCQkJdGUtPmRhdGFMZW5ndGggPSBkb3B0LT5tYXhfdGFibGVfc2VnbWVudF9w YWdlczsKKwkJCQkvKiBsZXQncyBhc3N1bWUgdG9hc3QgcGFnZXMgZGlzdHJpYnV0ZSBldmVubHkg YW1vbmcgY2h1bmtzICovCisJCQkJaWYodGJpbmZvLT5yZWxwYWdlcykKKwkJCQkJdGUtPmRhdGFM ZW5ndGggKz0gdGUtPmRhdGFMZW5ndGggKiB0YmluZm8tPnRvYXN0cGFnZXMgLyB0YmluZm8tPnJl bHBhZ2VzOworCQkJfQorCisJCQlkZXN0cm95UFFFeHBCdWZmZXIoY2h1bmtfZGVzYyk7CisJCX0K KwkgICAvKgorCQkqIElmIHBnb2ZmX3QgaXMgb25seSAzMiBiaXRzIHdpZGUsIHRoZSBhYm92ZSBy ZWZpbmVtZW50IGlzIHVzZWxlc3MsCisJCSogYW5kIGluc3RlYWQgd2UnZCBiZXR0ZXIgd29ycnkg YWJvdXQgaW50ZWdlciBvdmVyZmxvdy4gIENsYW1wIHRvCisJCSogSU5UX01BWCBpZiB0aGUgY29y cmVjdCByZXN1bHQgZXhjZWVkcyB0aGF0LgorCQkqLwogCQlpZiAoc2l6ZW9mKHRlLT5kYXRhTGVu Z3RoKSA9PSA0ICYmCiAJCQkodGJpbmZvLT5yZWxwYWdlcyA8IDAgfHwgdGJpbmZvLT50b2FzdHBh Z2VzIDwgMCB8fAotCQkJIHRlLT5kYXRhTGVuZ3RoIDwgMCkpCisJCQl0ZS0+ZGF0YUxlbmd0aCA8 IDApKQogCQkJdGUtPmRhdGFMZW5ndGggPSBJTlRfTUFYOwogCX0KIApAQCAtMzA5Miw2ICszMTgy LDkgQEAgbWFrZVRhYmxlRGF0YUluZm8oRHVtcE9wdGlvbnMgKmRvcHQsIFRhYmxlSW5mbyAqdGJp bmZvKQogCXRkaW5mby0+ZG9iai5uYW1lc3BhY2UgPSB0YmluZm8tPmRvYmoubmFtZXNwYWNlOwog CXRkaW5mby0+dGR0YWJsZSA9IHRiaW5mbzsKIAl0ZGluZm8tPmZpbHRlcmNvbmQgPSBOVUxMOwkv KiBtaWdodCBnZXQgc2V0IGxhdGVyICovCisJdGRpbmZvLT5pc19zZWdtZW50ID0gZmFsc2U7IC8q IHdlIGNvdWxkIHVzZSAodGRpbmZvLT5zdGFydFBhZ2UgIT0gMCB8fCB0ZGluZm8tPmVuZFBhZ2Ug IT0gSW52YWxpZEJsb2NrTnVtYmVyKSAqLworCXRkaW5mby0+c3RhcnRQYWdlID0gMDsKKwl0ZGlu Zm8tPmVuZFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJYWRkT2JqZWN0RGVwZW5kZW5jeSgm dGRpbmZvLT5kb2JqLCB0YmluZm8tPmRvYmouZHVtcElkKTsKIAogCS8qIEEgVGFibGVEYXRhSW5m byBjb250YWlucyBkYXRhLCBvZiBjb3Vyc2UgKi8KQEAgLTcyNTQsOCArNzM0NywxNSBAQCBnZXRU YWJsZXMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1UYWJsZXMpCiAJCQkJCQkgImMucmVsbmFtZXNw YWNlLCBjLnJlbGtpbmQsIGMucmVsdHlwZSwgIgogCQkJCQkJICJjLnJlbG93bmVyLCAiCiAJCQkJ CQkgImMucmVsY2hlY2tzLCAiCi0JCQkJCQkgImMucmVsaGFzaW5kZXgsIGMucmVsaGFzcnVsZXMs IGMucmVscGFnZXMsICIKLQkJCQkJCSAiYy5yZWx0dXBsZXMsIGMucmVsYWxsdmlzaWJsZSwgIik7 CisJCQkJCQkgImMucmVsaGFzaW5kZXgsIGMucmVsaGFzcnVsZXMsICIpOworCisJLyogZmV0Y2gg Y3VycmVudCByZWxhdGlvbiBzaXplIGlmIGNodW5raW5nIGlzIHJlcXVlc3RlZCAqLworCWlmKGRv cHQtPm1heF90YWJsZV9zZWdtZW50X3BhZ2VzICE9IEludmFsaWRCbG9ja051bWJlcikKKwkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJwZ19yZWxhdGlvbl9zaXplKGMub2lkKS9jdXJyZW50 X3NldHRpbmcoJ2Jsb2NrX3NpemUnKTo6aW50IEFTIHJlbHBhZ2VzLCAiKTsKKwllbHNlCisJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiYy5yZWxwYWdlcywgIik7CisKKwlhcHBlbmRQUUV4 cEJ1ZmZlclN0cihxdWVyeSwgImMucmVsdHVwbGVzLCBjLnJlbGFsbHZpc2libGUsICIpOwogCiAJ aWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTgwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cihxdWVyeSwgImMucmVsYWxsZnJvemVuLCAiKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDRjNGIxNGU1ZmM3 Li5lMzYyMjUzZDRkNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAorKysg Yi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRl ICJwZ19iYWNrdXAuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9uX2QuaCIKKyNp bmNsdWRlICJzdG9yYWdlL2Jsb2NrLmgiCiAKIAogI2RlZmluZSBvaWRjbXAoeCx5KSAoICgoeCkg PCAoeSkgPyAtMSA6ICgoeCkgPiAoeSkpID8gIDEgOiAwKSApCkBAIC00MTMsNiArNDE0LDEyIEBA IHR5cGVkZWYgc3RydWN0IF90YWJsZURhdGFJbmZvCiAJRHVtcGFibGVPYmplY3QgZG9iajsKIAlU YWJsZUluZm8gICp0ZHRhYmxlOwkJLyogbGluayB0byB0YWJsZSB0byBkdW1wICovCiAJY2hhcgkg ICAqZmlsdGVyY29uZDsJCS8qIFdIRVJFIGNvbmRpdGlvbiB0byBsaW1pdCByb3dzIGR1bXBlZCAq LworCWJvb2wgCQlpc19zZWdtZW50OwkJLyogdHJ1ZSBpZiB0aGlzIGlzIGEgZGF0YSBzZWdtZW50 LgorCQkJCQkJCQkgKiB3ZSBjb3VsZCB1c2UgKHRkaW5mby0+c3RhcnRQYWdlICE9IDAgfHwgCisJ CQkJCQkJCSAqIHRkaW5mby0+ZW5kUGFnZSAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpICovCisJQmxv Y2tOdW1iZXIJc3RhcnRQYWdlOwkJLyogc3RhcnRpbmcgdGFibGUgcGFnZSAqLworCUJsb2NrTnVt YmVyCWVuZFBhZ2U7CQkvKiBlbmRpbmcgdGFibGUgcGFnZSBmb3IgcGFnZS1yYW5nZSBkdW1wLAor CSAgICAgICAgICAgICAgICAgICAgCQkgKiBtb3N0bHkgc3RhcnRQYWdlK21heF90YWJsZV9zZWdt ZW50X3BhZ2VzICovCiB9IFRhYmxlRGF0YUluZm87CiAKIHR5cGVkZWYgc3RydWN0IF9pbmR4SW5m bwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDA0X3BnX2R1bXBfcGFyYWxsZWwucGwg Yi9zcmMvYmluL3BnX2R1bXAvdC8wMDRfcGdfZHVtcF9wYXJhbGxlbC5wbAppbmRleCA3MzhmMzRi MWMxYi4uODhhZjI1ZDI4ODkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwNF9wZ19k dW1wX3BhcmFsbGVsLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwNF9wZ19kdW1wX3BhcmFs bGVsLnBsCkBAIC0xMSw2ICsxMSw3IEBAIHVzZSBUZXN0OjpNb3JlOwogbXkgJGRibmFtZTEgPSAn cmVncmVzc2lvbl9zcmMnOwogbXkgJGRibmFtZTIgPSAncmVncmVzc2lvbl9kZXN0MSc7CiBteSAk ZGJuYW1lMyA9ICdyZWdyZXNzaW9uX2Rlc3QyJzsKK215ICRkYm5hbWU0ID0gJ3JlZ3Jlc3Npb25f ZGVzdDMnOwogCiBteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFp bicpOwogJG5vZGUtPmluaXQ7CkBAIC0yMSw2ICsyMiw3IEBAIG15ICRiYWNrdXBkaXIgPSAkbm9k ZS0+YmFja3VwX2RpcjsKICRub2RlLT5ydW5fbG9nKFsgJ2NyZWF0ZWRiJywgJGRibmFtZTEgXSk7 CiAkbm9kZS0+cnVuX2xvZyhbICdjcmVhdGVkYicsICRkYm5hbWUyIF0pOwogJG5vZGUtPnJ1bl9s b2coWyAnY3JlYXRlZGInLCAkZGJuYW1lMyBdKTsKKyRub2RlLT5ydW5fbG9nKFsgJ2NyZWF0ZWRi JywgJGRibmFtZTQgXSk7CiAKICRub2RlLT5zYWZlX3BzcWwoCiAJJGRibmFtZTEsCkBAIC00NCw2 ICs0NiwxOCBAQCBjcmVhdGUgdGFibGUgdGh0X3AxIHBhcnRpdGlvbiBvZiB0aHQgZm9yIHZhbHVl cyB3aXRoIChtb2R1bHVzIDMsIHJlbWFpbmRlciAwKTsKIGNyZWF0ZSB0YWJsZSB0aHRfcDIgcGFy dGl0aW9uIG9mIHRodCBmb3IgdmFsdWVzIHdpdGggKG1vZHVsdXMgMywgcmVtYWluZGVyIDEpOwog Y3JlYXRlIHRhYmxlIHRodF9wMyBwYXJ0aXRpb24gb2YgdGh0IGZvciB2YWx1ZXMgd2l0aCAobW9k dWx1cyAzLCByZW1haW5kZXIgMik7CiBpbnNlcnQgaW50byB0aHQgc2VsZWN0ICh4JTEwKTo6dGV4 dDo6ZGlnaXQsIHggZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSB4OworCistLSByYWlzZSB3 YXJuaW5nIHNvIEkgY2FuIGNoZWNrIGluIC5sb2cgaWYgZGF0YSB3YXMgY29ycmVjdAorRE8gXCRc JAorREVDTEFSRQorICAgIHRoYXNoX3JlYyBSRUNPUkQ7CitCRUdJTgorICAgIFNFTEVDVCAndHBs YWluJywgY291bnQoKiksIHN1bShoYXNodGV4dCh0Ojp0ZXh0KSkgYXMgdGFibGVoYXNoIAorCSAg SU5UTyB0aGFzaF9yZWMKKwkgIEZST00gdHBsYWluIEFTIHQ7CisgICAgUkFJU0UgV0FSTklORyAn dGhhc2g6ICUnLCB0aGFzaF9yZWM7CitFTkQ7CitcJFwkOwogCX0pOwogCiAkbm9kZS0+Y29tbWFu ZF9vaygKQEAgLTg3LDQgKzEwMSw0MiBAQCAkbm9kZS0+Y29tbWFuZF9vaygKIAldLAogCSdwYXJh bGxlbCByZXN0b3JlIGFzIGluc2VydHMnKTsKIAorJG5vZGUtPmNvbW1hbmRfb2soCisJWworCQkn cGdfZHVtcCcsCisJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCSctLW1heC10YWJsZS1z ZWdtZW50LXBhZ2VzJyA9PiAyLAorCQknLS1uby1zeW5jJywKKwkJJy0tam9icycgPT4gMiwKKwkJ Jy0tZmlsZScgPT4gIiRiYWNrdXBkaXIvZHVtcDMiLAorCQkkbm9kZS0+Y29ubnN0cigkZGJuYW1l MSksCisJXSwKKwkncGFyYWxsZWwgZHVtcCB3aXRoIGNodW5rcyBvZiB0d28gaGVhcCBwYWdlcycp OworCiskbm9kZS0+Y29tbWFuZF9vaygKKwlbCisJCSdwZ19yZXN0b3JlJywgJy0tdmVyYm9zZScs CisJCSctLWRibmFtZScgPT4gJG5vZGUtPmNvbm5zdHIoJGRibmFtZTQpLAorCQknLS1qb2JzJyA9 PiAzLAorCQkiJGJhY2t1cGRpci9kdW1wMyIsCisJXSwKKwkncGFyYWxsZWwgcmVzdG9yZSB3aXRo IGNodW5rcyBvZiB0d28gaGVhcCBwYWdlcycpOworCiskbm9kZS0+c2FmZV9wc3FsKAorCSRkYm5h bWU0LAorCXFxeworCistLSByYWlzZSB3YXJuaW5nIHNvIEkgY2FuIGNoZWNrIGluIC5sb2cgaWYg ZGF0YSB3YXMgY29ycmVjdAorRE8gXCRcJAorREVDTEFSRQorICAgIHRoYXNoX3JlYyBSRUNPUkQ7 CitCRUdJTgorICAgIFNFTEVDVCAndHBsYWluJywgY291bnQoKiksIHN1bShoYXNodGV4dCh0Ojp0 ZXh0KSkgYXMgdGFibGVoYXNoIAorCSAgSU5UTyB0aGFzaF9yZWMKKwkgIEZST00gdHBsYWluIEFT IHQ7CisgICAgUkFJU0UgV0FSTklORyAndGhhc2ggYWZ0ZXIgcGFyYWxsZWwgY2h1bmtlZCByZXN0 b3JlOiAlJywgdGhhc2hfcmVjOworRU5EOworXCRcJDsKKwl9KTsKKwogZG9uZV90ZXN0aW5nKCk7 CmRpZmYgLS1naXQgYS9zcmMvZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmMgYi9zcmMvZmVfdXRpbHMv b3B0aW9uX3V0aWxzLmMKaW5kZXggY2M0ODNhZTE3NmMuLjk1OGY0NzcxMWFhIDEwMDY0NAotLS0g YS9zcmMvZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmMKKysrIGIvc3JjL2ZlX3V0aWxzL29wdGlvbl91 dGlscy5jCkBAIC04Myw2ICs4Myw2MyBAQCBvcHRpb25fcGFyc2VfaW50KGNvbnN0IGNoYXIgKm9w dGFyZywgY29uc3QgY2hhciAqb3B0bmFtZSwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIG9w dGlvbl9wYXJzZV9pbnQKKyAqCisgKiBQYXJzZSBpbnRlZ2VyIHZhbHVlIGZvciBhbiBvcHRpb24u ICBJZiB0aGUgcGFyc2luZyBpcyBzdWNjZXNzZnVsLCByZXR1cm5zCisgKiB0cnVlIGFuZCBzdG9y ZXMgdGhlIHJlc3VsdCBpbiAqcmVzdWx0IGlmIHRoYXQncyBnaXZlbjsgaWYgcGFyc2luZyBmYWls cywKKyAqIHJldHVybnMgZmFsc2UuCisgKi8KK2Jvb2wKK29wdGlvbl9wYXJzZV91aW50MzIoY29u c3QgY2hhciAqb3B0YXJnLCBjb25zdCBjaGFyICpvcHRuYW1lLAorCQkJCSB1aW50NjQgbWluX3Jh bmdlLCB1aW50NjQgbWF4X3JhbmdlLAorCQkJCSB1aW50MzIgKnJlc3VsdCkKK3sKKwljb25zdCBj aGFyICpjaGtwdHI7CisJY2hhcgkgICAqZW5kcHRyOworCXVpbnQ2NAkJdmFsNjQ7CisKKwkvKiBj aGVjayB0aGVyZSBpcyBubyBtaW51cyBzaWduIGluIHZhbHVlIGJlY2F1c2Ugc3RydG91bCgpIAor CSAqIHdpbGwgc2lsZW50bHkgY29udmVydCBuZWdhdGl2ZSBudW1iZXJzIHRvIHR3bydzIGNvbXBs ZW1lbnQgKi8KKwlmb3IoY2hrcHRyID0gb3B0YXJnOyAqY2hrcHRyICE9ICdcMCc7IGNoa3B0cisr KQorCQlpZigqY2hrcHRyID09ICctJykKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJ2YWx1ZSBcIiVz XCIgZm9yIG9wdGlvbiAlcyBjYW4gbm90IGJlIG5lZ2F0aXZlIiwKKwkJCQkJCW9wdGFyZywgb3B0 bmFtZSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCWVycm5vID0gMDsKKwl2YWw2NCA9IHN0 cnRvdWxsKG9wdGFyZywgJmVuZHB0ciwgMTApOworCisJLyoKKwkgKiBTa2lwIGFueSB0cmFpbGlu ZyB3aGl0ZXNwYWNlOyBpZiBhbnl0aGluZyBidXQgd2hpdGVzcGFjZSByZW1haW5zIGJlZm9yZQor CSAqIHRoZSB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIsIGZhaWwuCisJICovCisJd2hpbGUgKCplbmRw dHIgIT0gJ1wwJyAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSAqZW5kcHRyKSkKKwkJZW5kcHRy Kys7CisKKwlpZiAoKmVuZHB0ciAhPSAnXDAnKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJpbnZhbGlk IHZhbHVlIFwiJXNcIiBmb3Igb3B0aW9uICVzIiwKKwkJCQkJIG9wdGFyZywgb3B0bmFtZSk7CisJ CXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoZXJybm8gPT0gRVJBTkdFIHx8IHZhbDY0IDwgbWlu X3JhbmdlIHx8IHZhbDY0ID4gbWF4X3JhbmdlKQorCXsKKwkJcGdfbG9nX2Vycm9yKCIlcyBtdXNz dCBiZSBpbiByYW5nZSAlbHUuLiVsdSIsCisJCQkJCSBvcHRuYW1lLCAKKwkJCQkJIChsb25nIHVu c2lnbmVkIGludCkgbWluX3JhbmdlLCAKKwkJCQkJIChsb25nIHVuc2lnbmVkIGludCkgbWF4X3Jh bmdlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChyZXN1bHQpCisJCSpyZXN1bHQgPSAo dWludDMyKXZhbDY0OworCXJldHVybiB0cnVlOworfQorCiAvKgogICogUHJvdmlkZSBzdHJpY3Rs eSBoYXJtb25pemVkIGhhbmRsaW5nIG9mIHRoZSAtLXN5bmMtbWV0aG9kIG9wdGlvbi4KICAqLwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmggYi9zcmMvaW5j bHVkZS9mZV91dGlscy9vcHRpb25fdXRpbHMuaAppbmRleCAwZGI2ZTNiNmU5MS4uMjY4NTkwYTE4 YmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL29wdGlvbl91dGlscy5oCisrKyBi L3NyYy9pbmNsdWRlL2ZlX3V0aWxzL29wdGlvbl91dGlscy5oCkBAIC0yMiw2ICsyMiw5IEBAIGV4 dGVybiB2b2lkIGhhbmRsZV9oZWxwX3ZlcnNpb25fb3B0cyhpbnQgYXJnYywgY2hhciAqYXJndltd LAogZXh0ZXJuIGJvb2wgb3B0aW9uX3BhcnNlX2ludChjb25zdCBjaGFyICpvcHRhcmcsIGNvbnN0 IGNoYXIgKm9wdG5hbWUsCiAJCQkJCQkJIGludCBtaW5fcmFuZ2UsIGludCBtYXhfcmFuZ2UsCiAJ CQkJCQkJIGludCAqcmVzdWx0KTsKK2V4dGVybiBib29sIG9wdGlvbl9wYXJzZV91aW50MzIoY29u c3QgY2hhciAqb3B0YXJnLCBjb25zdCBjaGFyICpvcHRuYW1lLAorCQkJCQkJCSB1aW50NjQgbWlu X3JhbmdlLCB1aW50NjQgbWF4X3JhbmdlLAorCQkJCQkJCSB1aW50MzIgKnJlc3VsdCk7CiBleHRl cm4gYm9vbCBwYXJzZV9zeW5jX21ldGhvZChjb25zdCBjaGFyICpvcHRhcmcsCiAJCQkJCQkJICBE YXRhRGlyU3luY01ldGhvZCAqc3luY19tZXRob2QpOwogCi0tIAoyLjQzLjAKCg== --000000000000713cae0648fd0b00--