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 1wFB2D-004ocj-0K for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Apr 2026 13:21:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wFB2C-008v3T-05 for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Apr 2026 13:21:00 +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 1wFB2B-008v3L-18 for pgsql-hackers@lists.postgresql.org; Tue, 21 Apr 2026 13:20:59 +0000 Received: from mail-dy1-x1331.google.com ([2607:f8b0:4864:20::1331]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wFB27-000000025YG-2aSh for pgsql-hackers@postgresql.org; Tue, 21 Apr 2026 13:20:58 +0000 Received: by mail-dy1-x1331.google.com with SMTP id 5a478bee46e88-2e622a9da9cso2509104eec.0 for ; Tue, 21 Apr 2026 06:20:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776777655; x=1777382455; darn=postgresql.org; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=wQiGcrWsB9WGU2I0ahAaTPc9soxq1jWdfPoVw5TZ0tg=; b=gyBofMJwS98gCvZYqM9bhvtHcvterV3Dk4no8F+DNkviF+O7/uPdlM9yySHsn/Uq69 wrjDysyJa8rnzlc3AwW6bRDmRN6QmRHrXHeMoZvFO1jeFkhkmwXPhxQ3PJAeaU+p1sLY BKgdoq/XbPeo1/9aG6TKkn9JgaJwvBRa7aoG2aCZtDJHoMIw/6pdl9kdyn5PemSn/Yzt ec7QRdNdUCmYyz3wDRpAWhyk3DdjojBIiZY+uTBRUBHpRRPYJTLmzpvH9Mb+wnmGf2Pw wc42mwgVxLd7cghsztyqcSBwh/6hz7kxCGf6jr6VwoGduAV8ZdTtw/b2AGFLGjnb2S1O Phlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776777655; x=1777382455; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=wQiGcrWsB9WGU2I0ahAaTPc9soxq1jWdfPoVw5TZ0tg=; b=gUchd3G5bs5pgqN9Ks2mu4plows+nuq4EcPP7Md7UXvTIquAiKW/MvcixJbU17ss9s 54ynOBlEfVbZMJlrykrYNKhaj6hhTqfMsXINIdpnVrmOC3L6kDCmx25q7PCsqKy2uvdY bfXUTc2ZgWA/a2FBvOiSPpX47cvzLUK/2+D1Fy5hcJWC+5D9JXu7cC/y8ug7vVXtyRBc 1w7in3LxKU3bZsgqLpuMRh+lzhQ+tfuiQdI2SrPhEIWugk8UIzREaXY1ySrIh6FlVq5P 0uZU9PeayO+4raEiqYULYAQqWRh/KK6junHxsK/DYFlqpQ+v2pLsMy/P6l4OHuWmziVB IwgA== X-Forwarded-Encrypted: i=1; AFNElJ/BOkD9GrJLjGgJDBoC6BCGXak63+ytJo3txg6SwIy5bffDDbGnLpQglgvvOrlgIMHmeQJ6DTc/Xrgr/TMm@postgresql.org X-Gm-Message-State: AOJu0Yx9KUAKo/T7CIss9g5u11wJn1HPVxGho1JzAYMW7THsarJE3+3b IfPgwGLTfr4TyMbbN2ddt1vAkhHC/DbJaRF/I90tAEnbbpDFLdfcbaca89nbIQ== X-Gm-Gg: AeBDiet4GEO+CubT32g91K6lRN47TQnmUYACE1tddcDWyCLY14uob5gEBNUDlZ+HlA4 WsVxPuFBU+G/DEFVWhu4VISwgo5FOTV0KcbCtddSARqC1N+t/pUUPEX9Gq2dS1KhK8ptGzlT8+X F92C+MSSUBGlWmUWbTaSJ6N/+BKJXOK/mfuNt22VWlCTN+xu9DvnzMgd1Iadv2HYqX3aosAcYpH MSj4Ouw5DQFZ/eUMWuZsHPQ3nr15D6fI0LFN10V2QHPkn250b6WNuZeJYIQSRDOMA1qobiZwYbe 7fSCU1grBDMkOmEvmAkBMgj8vg4daMHVm5lulpArdB6Yczc52u7+KL+xi3MuKbEz/ky+o0uupcy kM2AbaABYb/LwH5hBIch81xLnB6DB7cP862tIhRx5G65LQm6hcX7gY5HaPTvwlNpuS8SbcLSiZ4 c9ZPjQEDFUO/v4xzOuu+UdRfLlQ8Kzh6klOnLKcTwiVlG0522DgfcZ3KM= X-Received: by 2002:a05:693c:2b04:b0:2df:919f:ce59 with SMTP id 5a478bee46e88-2e47901614bmr10288777eec.19.1776777655085; Tue, 21 Apr 2026 06:20:55 -0700 (PDT) Received: from localhost ([2804:14d:328a:a59c:2991:f8b:77a7:8529]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2e539fa3ce1sm18115290eec.4.2026.04.21.06.20.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Apr 2026 06:20:53 -0700 (PDT) Content-Type: multipart/mixed; boundary=7ca4d6f18ef132139440765f5789efed55292d9ff64356ddd82cb6e94747 Mime-Version: 1.0 Date: Tue, 21 Apr 2026 10:20:50 -0300 Message-Id: Cc: "Dmitry Koval" , "pgsql-hackers" Subject: Re: MERGE PARTITIONS and DEPENDS ON EXTENSION. From: "Matheus Alcantara" To: "Alexander Korotkov" X-Mailer: aerc 0.21.0 References: <31d04a1b-c0cb-4e6f-a344-0db048a3b673@gmail.com> <414c3430-77a9-438e-9dc0-c66033f6be63@postgrespro.ru> In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --7ca4d6f18ef132139440765f5789efed55292d9ff64356ddd82cb6e94747 Content-Type: multipart/alternative; boundary=7eb41ef5b23a53a9452e5b4525cc46a5a8c54dc49fb01eebb47ef111a9d7 --7eb41ef5b23a53a9452e5b4525cc46a5a8c54dc49fb01eebb47ef111a9d7 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Mon Apr 20, 2026 at 4:08 PM -03, Alexander Korotkov wrote: > On Thu, Apr 16, 2026 at 9:03=E2=80=AFPM Matheus Alcantara > wrote: >> >> On Tue Apr 14, 2026 at 6:05 AM -03, Dmitry Koval wrote: >> > Hi Matheus! >> > >> > Thank you for patch. >> > I agree that dependency should be automatically added for SPLIT >> > PARTITION. But I'm not sure about MERGE PARTITION ... >> > Might be it would be more correct to automatically add a dependency on= ly >> > if all merged partitions have it? >> >> Hi, >> >> Thank you for taking a look on this! >> >> I agree with your suggestion. The attached patch implements the >> intersection behavior for MERGE PARTITIONS: extension dependencies are >> only preserved on the merged partition's index if all source partition >> indexes have that dependency. >> >> For example: >> MERGE(idx1(ext_a, ext_b), idx2(ext_a)) -> idx3(ext_a) -- only ext_a is = common >> MERGE(idx1(ext_a), idx2()) -> idx3() -- no common deps > > This is not obvious for me. I would rather trigger an error if there > are different dependencies on merging partitions. > Yeah, I agree that this sounds a bit confusing, although this behavior is documented on the last patch version I think that raising an error is more simple and maybe is more obvious. The attached patch implement this. -- Matheus Alcantara EDB: https://www.enterprisedb.com --7eb41ef5b23a53a9452e5b4525cc46a5a8c54dc49fb01eebb47ef111a9d7-- --7ca4d6f18ef132139440765f5789efed55292d9ff64356ddd82cb6e94747 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0001-Preserve-extension-dependencies-on-indexes-during.patch Content-Type: text/plain; charset=utf-8; name=v5-0001-Preserve-extension-dependencies-on-indexes-during.patch RnJvbSAxNGZkYjU5NGQyZWEzYTJjY2FmODZhNzI0M2M2MmNjN2EwMzBlY2JhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFdlZCwgMTEgTWFyIDIwMjYgMTE6Mzk6NTYgLTAzMDAKU3ViamVjdDogW1BBVENIIHY1XSBQ cmVzZXJ2ZSBleHRlbnNpb24gZGVwZW5kZW5jaWVzIG9uIGluZGV4ZXMgZHVyaW5nCiBwYXJ0aXRp b24gbWVyZ2Uvc3BsaXQKCldoZW4gdXNpbmcgQUxURVIgVEFCTEUgLi4uIE1FUkdFIFBBUlRJVElP TlMgb3IgQUxURVIgVEFCTEUgLi4uIFNQTElUClBBUlRJVElPTiwgZXh0ZW5zaW9uIGRlcGVuZGVu Y2llcyBvbiBwYXJ0aXRpb24gaW5kZXhlcyAgd2VyZSBiZWluZyBsb3N0LgpUaGlzIGhhcHBlbmVk IGJlY2F1c2UgdGhlIG5ldyBwYXJ0aXRpb24gaW5kZXhlcyBhcmUgY3JlYXRlZCBmcmVzaCBmcm9t CnRoZSBwYXJlbnQgcGFydGl0aW9uZWQgdGFibGUncyBpbmRleGVzLCB3aGlsZSB0aGUgb2xkIHBh cnRpdGlvbiBpbmRleGVzCih3aXRoIHRoZWlyIGV4dGVuc2lvbiBkZXBlbmRlbmNpZXMpIGFyZSBk cm9wcGVkLgoKRml4IHRoaXMgYnkgY29sbGVjdGluZyBleHRlbnNpb24gZGVwZW5kZW5jaWVzIGZy b20gc291cmNlIHBhcnRpdGlvbgppbmRleGVzIGJlZm9yZSBkZXRhY2hpbmcgdGhlbSwgdGhlbiBh cHBseWluZyB0aG9zZSBkZXBlbmRlbmNpZXMgdG8KdGhlIGNvcnJlc3BvbmRpbmcgbmV3IHBhcnRp dGlvbiBpbmRleGVzIGFmdGVyIHRoZXkncmUgY3JlYXRlZC4gVGhlCm1hcHBpbmcgYmV0d2VlbiBv bGQgYW5kIG5ldyBpbmRleGVzIGlzIGRvbmUgdmlhIHRoZWlyIGNvbW1vbiBwYXJlbnQKcGFydGl0 aW9uZWQgaW5kZXguCgpGb3IgTUVSR0Ugb3BlcmF0aW9ucywgYWxsIHNvdXJjZSBwYXJ0aXRpb24g aW5kZXhlcyBtdXN0IGhhdmUgdGhlIHNhbWUKZXh0ZW5zaW9uIGRlcGVuZGVuY2llczsgaWYgdGhl eSBkaWZmZXIsIGFuIGVycm9yIGlzIHJhaXNlZC4gVGhpcwplbnN1cmVzIHRoYXQgZXh0ZW5zaW9u IGRlcGVuZGVuY2llcyBhcmUgbm90IHNpbGVudGx5IGxvc3QgZHVyaW5nIG1lcmdlLgoKRm9yIFNQ TElUIG9wZXJhdGlvbnMsIHRoZSBuZXcgcGFydGl0aW9uIGluZGV4ZXMgc2ltcGx5IGluaGVyaXQg YWxsCmV4dGVuc2lvbiBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgc291cmNlIHBhcnRpdGlvbidzIGlu ZGV4LgoKQXV0aG9yOiBNYXRoZXVzIEFsY2FudGFyYSA8bWF0aGV1c3NzaWx2OTdAZ21haWwuY29t PgpSZXBvcnRlZC1ieTogS2lyaWxsIFJlc2hrZQpSZXZpZXdlZC1ieTogRG1pdHJ5IEtvdmFsIDxk LmtvdmFsQHBvc3RncmVzcHJvLnJ1PgpSZXZpZXdlZC1ieTogQWxleGFuZGVyIEtvcm90a292IDxh ZWtvcm90a292QGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5v cmcvbWVzc2FnZS1pZC9DQUxkU1NQalh0ekdNN1VrNGZXUndSTVhjQ2N6Z2U1dU5pclBRY1lDSEtQ QVdQa3A5aVElNDBtYWlsLmdtYWlsLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfdGFi bGUuc2dtbCAgICAgICAgICAgICB8ICAxNyArKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMgICAgICAgICAgICAgIHwgMjU1ICsrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fbWVyZ2Uub3V0IHwgIDg2ICsrKysrKwogc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fc3BsaXQub3V0IHwgIDQxICsrKwogc3JjL3Rlc3Qv cmVncmVzcy9zcWwvcGFydGl0aW9uX21lcmdlLnNxbCAgICAgIHwgIDc2ICsrKysrKwogc3JjL3Rl c3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX3NwbGl0LnNxbCAgICAgIHwgIDM5ICsrKwogc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAxICsKIDcgZmlsZXMg Y2hhbmdlZCwgNTE1IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVm L2FsdGVyX3RhYmxlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3RhYmxlLnNnbWwKaW5k ZXggNTRmMzhjYjk2NGEuLjFmOWE0NTZmZDMzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVm L2FsdGVyX3RhYmxlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl90YWJsZS5zZ21s CkBAIC0xMjU1LDYgKzEyNTUsMTUgQEAgV0lUSCAoIE1PRFVMVVMgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwvcmVwbGFjZWFibGU+LCBSRU0KICAgICAgIChz ZWUgPHhyZWYgbGlua2VuZD0iZGRsLWRlcGVuZCIvPikuCiAgICAgIDwvcGFyYT4KIAorICAgICA8 cGFyYT4KKyAgICAgIEV4dGVuc2lvbiBkZXBlbmRlbmNpZXMgb24gcGFydGl0aW9uIGluZGV4ZXMg KGNyZWF0ZWQgdmlhCisgICAgICA8bGluayBsaW5rZW5kPSJzcWwtYWx0ZXJpbmRleCI+PGNvbW1h bmQ+QUxURVIgSU5ERVggLi4uIERFUEVORFMgT04KKyAgICAgIEVYVEVOU0lPTjwvY29tbWFuZD48 L2xpbms+KSBhcmUgcHJlc2VydmVkIGR1cmluZyBtZXJnZSBvcGVyYXRpb25zLgorICAgICAgQWxs IHNvdXJjZSBwYXJ0aXRpb24gaW5kZXhlcyBtdXN0IGhhdmUgdGhlIHNhbWUgZXh0ZW5zaW9uIGRl cGVuZGVuY2llczsKKyAgICAgIGlmIHRoZXkgZGlmZmVyLCBhbiBlcnJvciBpcyByYWlzZWQuIFRo aXMgZW5zdXJlcyB0aGF0IGV4dGVuc2lvbgorICAgICAgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc2ls ZW50bHkgbG9zdCBkdXJpbmcgbWVyZ2UuCisgICAgIDwvcGFyYT4KKwogICAgICA8bm90ZT4KICAg ICAgIDxwYXJhPgogICAgICAgIE1lcmdpbmcgcGFydGl0aW9ucyBhY3F1aXJlcyBhbiA8bGl0ZXJh bD5BQ0NFU1MgRVhDTFVTSVZFPC9saXRlcmFsPiBsb2NrIG9uCkBAIC0xMzQyLDYgKzEzNTEsMTQg QEAgV0lUSCAoIE1PRFVMVVMgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWVyaWNf bGl0ZXJhbDwvcmVwbGFjZWFibGU+LCBSRU0KICAgICAgIHdvdWxkIGZhaWwgKHNlZSA8eHJlZiBs aW5rZW5kPSJkZGwtZGVwZW5kIi8+KS4KICAgICAgPC9wYXJhPgogCisgICAgIDxwYXJhPgorICAg ICAgRXh0ZW5zaW9uIGRlcGVuZGVuY2llcyBvbiBwYXJ0aXRpb24gaW5kZXhlcyAoY3JlYXRlZCB2 aWEKKyAgICAgIDxsaW5rIGxpbmtlbmQ9InNxbC1hbHRlcmluZGV4Ij48Y29tbWFuZD5BTFRFUiBJ TkRFWCAuLi4gREVQRU5EUyBPTgorICAgICAgRVhURU5TSU9OPC9jb21tYW5kPjwvbGluaz4pIGFy ZSBwcmVzZXJ2ZWQgZHVyaW5nIHNwbGl0IG9wZXJhdGlvbnMuCisgICAgICBUaGUgbmV3IHBhcnRp dGlvbnMnIGluZGV4ZXMgd2lsbCBpbmhlcml0IHRoZSBleHRlbnNpb24gZGVwZW5kZW5jaWVzCisg ICAgICBmcm9tIHRoZSBzb3VyY2UgcGFydGl0aW9uJ3MgaW5kZXhlcy4KKyAgICAgPC9wYXJhPgor CiAgICAgIDxub3RlPgogICAgICAgPHBhcmE+CiAgICAgICAgU3BsaXQgcGFydGl0aW9uIGFjcXVp cmVzIGFuIDxsaXRlcmFsPkFDQ0VTUyBFWENMVVNJVkU8L2xpdGVyYWw+IGxvY2sgb24KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMKaW5kZXggZWVjMDliYTFkZWQuLjFlMmIyZmMyY2IwIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cv cGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19kZXBlbmQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2V4dGVuc2lv bl9kLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX3RhYmxlLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19pbmhlcml0cy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFyZ2VvYmplY3Qu aCIKQEAgLTYwLDYgKzYxLDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9jb21tZW50LmgiCiAjaW5j bHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V4dGVuc2lvbi5oIgogI2luY2x1ZGUgImNvbW1hbmRz L3JlcGFjay5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvdGFibGVjbWRzLmgiCkBAIC0zNjUsNiArMzY3LDE5IEBAIHR5cGVkZWYgZW51bSBhZGRG a0NvbnN0cmFpbnRTaWRlcwogCWFkZEZrQm90aFNpZGVzLAogfSBhZGRGa0NvbnN0cmFpbnRTaWRl czsKIAorLyoKKyAqIEhvbGQgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcyBmb3IgYSBwYXJ0aXRpb25l ZCBpbmRleC4gVXNlZCBieQorICogY29sbGVjdFBhcnRpdGlvbkluZGV4RXh0RGVwcyBhbmQgYXBw bHlQYXJ0aXRpb25JbmRleEV4dERlcHMuCisgKgorICogRXh0ZW5zaW9uIGRlcGVuZGVuY2llcyBh cmUgY3JlYXRlZCBvbiB0aGUgbmV3IHBhcnRpdGlvbiBiYXNlZAorICogb24gdGhlIGluZGV4ZXMg dGhhdCBzaGFyZSB0aGUgc2FtZSBwYXJlbnQgaW5kZXggb2lkLgorICovCit0eXBlZGVmIHN0cnVj dCBQYXJ0aXRpb25JbmRleEV4dERlcEVudHJ5Cit7CisJT2lkCQkJcGFyZW50SW5kZXhPaWQ7IC8q IE9JRCBvZiB0aGUgcGFyZW50IHBhcnRpdGlvbmVkIGluZGV4ICovCisJTGlzdAkgICAqZXh0ZW5z aW9uT2lkczsJLyogTGlzdCBvZiBleHRlbnNpb24gT0lEcyB0aGlzIGluZGV4IGRlcGVuZHMgKi8K K30gUGFydGl0aW9uSW5kZXhFeHREZXBFbnRyeTsKKwogLyoKICAqIFBhcnRpdGlvbiB0YWJsZXMg YXJlIGV4cGVjdGVkIHRvIGJlIGRyb3BwZWQgd2hlbiB0aGUgcGFyZW50IHBhcnRpdGlvbmVkCiAg KiB0YWJsZSBnZXRzIGRyb3BwZWQuIEhlbmNlIGZvciBwYXJ0aXRpb25pbmcgd2UgdXNlIEFVVE8g ZGVwZW5kZW5jeS4KQEAgLTc2MCw2ICs3NzUsOSBAQCBzdGF0aWMgdm9pZCBBVEV4ZWNNZXJnZVBh cnRpdGlvbnMoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbgog c3RhdGljIHZvaWQgQVRFeGVjU3BsaXRQYXJ0aXRpb24oTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRh YmxlSW5mbyAqdGFiLAogCQkJCQkJCQkgUmVsYXRpb24gcmVsLCBQYXJ0aXRpb25DbWQgKmNtZCwK IAkJCQkJCQkJIEFsdGVyVGFibGVVdGlsaXR5Q29udGV4dCAqY29udGV4dCk7CitzdGF0aWMgTGlz dCAqY29sbGVjdFBhcnRpdGlvbkluZGV4RXh0RGVwcyhMaXN0ICpwYXJ0aXRpb25PaWRzKTsKK3N0 YXRpYyB2b2lkIGFwcGx5UGFydGl0aW9uSW5kZXhFeHREZXBzKE9pZCBuZXdQYXJ0T2lkLCBMaXN0 ICpleHREZXBTdGF0ZSk7CitzdGF0aWMgdm9pZCBmcmVlUGFydGl0aW9uSW5kZXhFeHREZXBzKExp c3QgKmV4dERlcFN0YXRlKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCURlZmluZVJlbGF0aW9uCkBAIC0y MzAwMCw2ICsyMzAxOCwyMDQgQEAgZGV0YWNoUGFydGl0aW9uVGFibGUoUmVsYXRpb24gcGFyZW50 X3JlbCwgUmVsYXRpb24gY2hpbGRfcmVsLCBPaWQgZGVmYXVsdFBhcnRPaWQKIAlQb3BBY3RpdmVT bmFwc2hvdCgpOwogfQogCisvKgorICogY29sbGVjdFBhcnRpdGlvbkluZGV4RXh0RGVwczogY29s bGVjdCBleHRlbnNpb24gZGVwZW5kZW5jaWVzIGZyb20gaW5kZXhlcworICogb24gdGhlIGdpdmVu IHBhcnRpdGlvbnMuCisgKgorICogRm9yIGVhY2ggcGFydGl0aW9uIGluZGV4IHRoYXQgaGFzIGEg cGFyZW50IHBhcnRpdGlvbmVkIGluZGV4LCB3ZSBjb2xsZWN0CisgKiBleHRlbnNpb24gZGVwZW5k ZW5jaWVzLiBEZXBlbmRlbmNpZXMgYXJlIHN0b3JlZCBncm91cGVkIGJ5IHBhcmVudCBpbmRleCBP SUQuCisgKgorICogV2hlbiBtdWx0aXBsZSBwYXJ0aXRpb25zIGhhdmUgaW5kZXhlcyB3aXRoIHRo ZSBzYW1lIHBhcmVudCwgYWxsIHNvdXJjZQorICogcGFydGl0aW9uIGluZGV4ZXMgbXVzdCBoYXZl IHRoZSBzYW1lIGV4dGVuc2lvbiBkZXBlbmRlbmNpZXMuIElmIHRoZXJlIGlzCisgKiBhIG1pc21h dGNoIChlLmcuLCBvbmUgcGFydGl0aW9uJ3MgaW5kZXggZGVwZW5kcyBvbiBhbiBleHRlbnNpb24g d2hpbGUKKyAqIGFub3RoZXIgZG9lc24ndCwgb3IgdGhleSBkZXBlbmQgb24gZGlmZmVyZW50IGV4 dGVuc2lvbnMpLCBhbiBlcnJvciBpcworICogcmFpc2VkLiBUaGlzIGVuc3VyZXMgY29uc2lzdGVu dCBiZWhhdmlvciBhbmQgYXZvaWRzIHNpbGVudGx5IGRyb3BwaW5nCisgKiBkZXBlbmRlbmNpZXMg ZHVyaW5nIG1lcmdlIG9wZXJhdGlvbnMuCisgKgorICogSW5kZXhlcyB0aGF0IGRvbid0IGhhdmUg YSBwYXJlbnQgcGFydGl0aW9uZWQgaW5kZXggKGkuZS4sIGluZGV4ZXMgY3JlYXRlZAorICogZGly ZWN0bHkgb24gYSBwYXJ0aXRpb24gd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgcGFyZW50IGluZGV4 KSBhcmUgc2tpcHBlZC4KKyAqCisgKiBSZXR1cm5zIGEgbGlzdCBvZiBQYXJ0aXRpb25JbmRleEV4 dERlcEVudHJ5IHN0cnVjdHMuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2NvbGxlY3RQYXJ0aXRpb25J bmRleEV4dERlcHMoTGlzdCAqcGFydGl0aW9uT2lkcykKK3sKKwlMaXN0CSAgICpyZXN1bHQgPSBO SUw7CisKKwlmb3JlYWNoX29pZChwYXJ0T2lkLCBwYXJ0aXRpb25PaWRzKQorCXsKKwkJUmVsYXRp b24JcGFydFJlbDsKKwkJTGlzdAkgICAqaW5kZXhMaXN0OworCisJCS8qCisJCSAqIFVzZSBOb0xv Y2sgc2luY2UgdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sgb24K KwkJICogdGhlc2UgcGFydGl0aW9ucy4KKwkJICovCisJCXBhcnRSZWwgPSB0YWJsZV9vcGVuKHBh cnRPaWQsIE5vTG9jayk7CisJCWluZGV4TGlzdCA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KHBhcnRS ZWwpOworCisJCWZvcmVhY2hfb2lkKGluZGV4T2lkLCBpbmRleExpc3QpCisJCXsKKwkJCU9pZAkJ CXBhcmVudEluZGV4T2lkOworCQkJTGlzdAkgICAqZXh0RGVwczsKKwkJCVBhcnRpdGlvbkluZGV4 RXh0RGVwRW50cnkgKmVudHJ5ID0gTlVMTDsKKworCQkJLyogR2V0IHRoZSBwYXJlbnQgaW5kZXgg aWYgdGhpcyBpcyBhIHBhcnRpdGlvbiBpbmRleCAqLworCQkJaWYgKCFnZXRfcmVsX3JlbGlzcGFy dGl0aW9uKGluZGV4T2lkKSkKKwkJCQljb250aW51ZTsKKworCQkJcGFyZW50SW5kZXhPaWQgPSBn ZXRfcGFydGl0aW9uX3BhcmVudChpbmRleE9pZCwgdHJ1ZSk7CisJCQlpZiAoIU9pZElzVmFsaWQo cGFyZW50SW5kZXhPaWQpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBHZXQgZXh0ZW5zaW9uIGRl cGVuZGVuY2llcyBmb3IgdGhpcyBpbmRleC4gKi8KKwkJCWV4dERlcHMgPSBnZXRBdXRvRXh0ZW5z aW9uc09mT2JqZWN0KFJlbGF0aW9uUmVsYXRpb25JZCwgaW5kZXhPaWQpOworCisJCQkvKiBMb29r IGZvciBleGlzdGluZyBwYXJ0aXRpb24gZW50cnkgZm9yIHRoaXMgcGFyZW50IGluZGV4ICovCisJ CQlmb3JlYWNoX3B0cihQYXJ0aXRpb25JbmRleEV4dERlcEVudHJ5LCBlLCByZXN1bHQpCisJCQl7 CisJCQkJaWYgKGUtPnBhcmVudEluZGV4T2lkID09IHBhcmVudEluZGV4T2lkKQorCQkJCXsKKwkJ CQkJZW50cnkgPSBlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChlbnRyeSAh PSBOVUxMKQorCQkJeworCQkJCS8qCisJCQkJICogV2UgYWxyZWFkeSBoYXZlIGFuIGVudHJ5IGZv ciB0aGlzIHBhcmVudCBpbmRleCBmcm9tIGEKKwkJCQkgKiBwcmV2aW91cyBwYXJ0aXRpb24uIFZl cmlmeSB0aGF0IHRoZSBkZXBlbmRlbmNpZXMgbWF0Y2gKKwkJCQkgKiBleGFjdGx5LgorCQkJCSAq LworCQkJCWlmIChleHREZXBzID09IE5JTCAmJiBlbnRyeS0+ZXh0ZW5zaW9uT2lkcyAhPSBOSUwp CisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05P VF9TVVBQT1JURUQpLAorCQkJCQkJCSBlcnJtc2coImNhbm5vdCBtZXJnZSBwYXJ0aXRpb25zIHdp dGggY29uZmxpY3RpbmcgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcyIpLAorCQkJCQkJCSBlcnJkZXRh aWwoIlBhcnRpdGlvbiBpbmRleCBcIiVzXCIgaGFzIG5vIGV4dGVuc2lvbiBkZXBlbmRlbmNpZXMs IGJ1dCBhbm90aGVyIHBhcnRpdGlvbidzIGluZGV4IGRvZXMuIiwKKwkJCQkJCQkJCSAgIGdldF9y ZWxfbmFtZShpbmRleE9pZCkpKSk7CisKKwkJCQlpZiAoZXh0RGVwcyAhPSBOSUwgJiYgZW50cnkt PmV4dGVuc2lvbk9pZHMgPT0gTklMKQorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCQkgZXJybXNnKCJjYW5u b3QgbWVyZ2UgcGFydGl0aW9ucyB3aXRoIGNvbmZsaWN0aW5nIGV4dGVuc2lvbiBkZXBlbmRlbmNp ZXMiKSwKKwkJCQkJCQkgZXJyZGV0YWlsKCJQYXJ0aXRpb24gaW5kZXggXCIlc1wiIGhhcyBleHRl bnNpb24gZGVwZW5kZW5jaWVzLCBidXQgYW5vdGhlciBwYXJ0aXRpb24ncyBpbmRleCBkb2VzIG5v dC4iLAorCQkJCQkJCQkJICAgZ2V0X3JlbF9uYW1lKGluZGV4T2lkKSkpKTsKKworCQkJCWZvcmVh Y2hfb2lkKGV4dE9pZCwgZXh0RGVwcykKKwkJCQl7CisJCQkJCWlmICghbGlzdF9tZW1iZXJfb2lk KGVudHJ5LT5leHRlbnNpb25PaWRzLCBleHRPaWQpKQorCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJCQkg ZXJybXNnKCJjYW5ub3QgbWVyZ2UgcGFydGl0aW9ucyB3aXRoIGNvbmZsaWN0aW5nIGV4dGVuc2lv biBkZXBlbmRlbmNpZXMiKSwKKwkJCQkJCQkJIGVycmRldGFpbCgiUGFydGl0aW9uIGluZGV4IFwi JXNcIiBkZXBlbmRzIG9uIGV4dGVuc2lvbiBcIiVzXCIsIGJ1dCBhbm90aGVyIHBhcnRpdGlvbidz IGluZGV4IGRvZXMgbm90LiIsCisJCQkJCQkJCQkJICAgZ2V0X3JlbF9uYW1lKGluZGV4T2lkKSwK KwkJCQkJCQkJCQkgICBnZXRfZXh0ZW5zaW9uX25hbWUoZXh0T2lkKSkpKTsKKwkJCQl9CisJCQl9 CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBGaXJzdCBwYXJ0aXRpb24gaW5kZXggd2Un dmUgc2VlbiBmb3IgdGhpcyBwYXJlbnQuIENyZWF0ZSBhCisJCQkJICogbmV3IGVudHJ5IHdpdGgg aXRzIGRlcGVuZGVuY2llcyAobWF5IGJlIE5JTCkgLSBzdWJzZXF1ZW50CisJCQkJICogcGFydGl0 aW9ucyB3aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCB0aGlzLgorCQkJCSAqLworCQkJCWVudHJ5ID0g cGFsbG9jKHNpemVvZihQYXJ0aXRpb25JbmRleEV4dERlcEVudHJ5KSk7CisJCQkJZW50cnktPnBh cmVudEluZGV4T2lkID0gcGFyZW50SW5kZXhPaWQ7CisJCQkJZW50cnktPmV4dGVuc2lvbk9pZHMg PSBleHREZXBzOworCQkJCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBlbnRyeSk7CisJCQl9CisJ CX0KKworCQlsaXN0X2ZyZWUoaW5kZXhMaXN0KTsKKwkJdGFibGVfY2xvc2UocGFydFJlbCwgTm9M b2NrKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogYXBwbHlQYXJ0aXRpb25J bmRleEV4dERlcHM6IGFwcGx5IGNvbGxlY3RlZCBleHRlbnNpb24gZGVwZW5kZW5jaWVzIHRvCisg KiBpbmRleGVzIG9uIGEgbmV3IHBhcnRpdGlvbi4KKyAqCisgKiBGb3IgZWFjaCBpbmRleCBvbiB0 aGUgbmV3IHBhcnRpdGlvbiwgbG9vayB1cCBpdHMgcGFyZW50IGluZGV4IGluIHRoZQorICogZXh0 RGVwU3RhdGUgbGlzdC4gSWYgZm91bmQsIHJlY29yZCBleHRlbnNpb24gZGVwZW5kZW5jaWVzIG9u IHRoZSBuZXcgaW5kZXguCisgKi8KK3N0YXRpYyB2b2lkCithcHBseVBhcnRpdGlvbkluZGV4RXh0 RGVwcyhPaWQgbmV3UGFydE9pZCwgTGlzdCAqZXh0RGVwU3RhdGUpCit7CisJUmVsYXRpb24JcGFy dFJlbDsKKwlMaXN0CSAgICppbmRleExpc3Q7CisKKwlpZiAoZXh0RGVwU3RhdGUgPT0gTklMKQor CQlyZXR1cm47CisKKwkvKgorCSAqIFVzZSBOb0xvY2sgc2luY2UgdGhlIGNhbGxlciBhbHJlYWR5 IGhvbGRzIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sgb24gdGhlCisJICogbmV3IHBhcnRpdGlvbi4KKwkg Ki8KKwlwYXJ0UmVsID0gdGFibGVfb3BlbihuZXdQYXJ0T2lkLCBOb0xvY2spOworCWluZGV4TGlz dCA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KHBhcnRSZWwpOworCisJZm9yZWFjaF9vaWQoaW5kZXhP aWQsIGluZGV4TGlzdCkKKwl7CisJCU9pZAkJCXBhcmVudElkeE9pZDsKKwkJTGlzdENlbGwgICAq bGM7CisKKwkJLyogU2tpcCBpZiB0aGlzIGlzIG5vdCBhIHBhcnRpdGlvbiBpbmRleCAqLworCQlp ZiAoIWdldF9yZWxfcmVsaXNwYXJ0aXRpb24oaW5kZXhPaWQpKQorCQkJY29udGludWU7CisKKwkJ cGFyZW50SWR4T2lkID0gZ2V0X3BhcnRpdGlvbl9wYXJlbnQoaW5kZXhPaWQsIHRydWUpOworCQlp ZiAoIU9pZElzVmFsaWQocGFyZW50SWR4T2lkKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIExvb2sg Zm9yIGV4dGVuc2lvbiBkZXBlbmRlbmNpZXMgdG8gYXBwbHkgKi8KKwkJZm9yZWFjaChsYywgZXh0 RGVwU3RhdGUpCisJCXsKKwkJCVBhcnRpdGlvbkluZGV4RXh0RGVwRW50cnkgKmVudHJ5ID0gbGZp cnN0KGxjKTsKKworCQkJaWYgKGVudHJ5LT5wYXJlbnRJbmRleE9pZCA9PSBwYXJlbnRJZHhPaWQp CisJCQl7CisJCQkJT2JqZWN0QWRkcmVzcyBpbmRleEFkZHI7CisKKwkJCQlPYmplY3RBZGRyZXNz U2V0KGluZGV4QWRkciwgUmVsYXRpb25SZWxhdGlvbklkLCBpbmRleE9pZCk7CisKKwkJCQlmb3Jl YWNoX29pZChleHRPaWQsIGVudHJ5LT5leHRlbnNpb25PaWRzKQorCQkJCXsKKwkJCQkJT2JqZWN0 QWRkcmVzcyBleHRBZGRyOworCisJCQkJCU9iamVjdEFkZHJlc3NTZXQoZXh0QWRkciwgRXh0ZW5z aW9uUmVsYXRpb25JZCwgZXh0T2lkKTsKKwkJCQkJcmVjb3JkRGVwZW5kZW5jeU9uKCZpbmRleEFk ZHIsICZleHRBZGRyLAorCQkJCQkJCQkJICAgREVQRU5ERU5DWV9BVVRPX0VYVEVOU0lPTik7CisJ CQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJbGlzdF9mcmVlKGluZGV4TGlzdCk7 CisJdGFibGVfY2xvc2UocGFydFJlbCwgTm9Mb2NrKTsKK30KKworLyoKKyAqIGZyZWVQYXJ0aXRp b25JbmRleEV4dERlcHM6IGZyZWUgbWVtb3J5IGFsbG9jYXRlZCBieSBjb2xsZWN0UGFydGl0aW9u SW5kZXhFeHREZXBzLgorICovCitzdGF0aWMgdm9pZAorZnJlZVBhcnRpdGlvbkluZGV4RXh0RGVw cyhMaXN0ICpleHREZXBTdGF0ZSkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMs IGV4dERlcFN0YXRlKQorCXsKKwkJUGFydGl0aW9uSW5kZXhFeHREZXBFbnRyeSAqZW50cnkgPSBs Zmlyc3QobGMpOworCisJCWxpc3RfZnJlZShlbnRyeS0+ZXh0ZW5zaW9uT2lkcyk7CisJCXBmcmVl KGVudHJ5KTsKKwl9CisJbGlzdF9mcmVlKGV4dERlcFN0YXRlKTsKK30KKwogLyoKICAqIEFMVEVS IFRBQkxFIDxuYW1lPiBNRVJHRSBQQVJUSVRJT05TIDxwYXJ0aXRpb24tbGlzdD4gSU5UTyA8cGFy dGl0aW9uLW5hbWU+CiAgKi8KQEAgLTIzMDA5LDYgKzIzMjI1LDcgQEAgQVRFeGVjTWVyZ2VQYXJ0 aXRpb25zKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVs LAogewogCVJlbGF0aW9uCW5ld1BhcnRSZWw7CiAJTGlzdAkgICAqbWVyZ2luZ1BhcnRpdGlvbnMg PSBOSUw7CisJTGlzdAkgICAqZXh0RGVwU3RhdGUgPSBOSUw7CiAJT2lkCQkJZGVmYXVsdFBhcnRP aWQ7CiAJT2lkCQkJZXhpc3RpbmdSZWxpZDsKIAlPaWQJCQlvd25lcklkID0gSW52YWxpZE9pZDsK QEAgLTIzMDk4LDYgKzIzMzE1LDEzIEBAIEFURXhlY01lcmdlUGFydGl0aW9ucyhMaXN0ICoqd3F1 ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAlkZWZhdWx0UGFydE9p ZCA9CiAJCWdldF9kZWZhdWx0X29pZF9mcm9tX3BhcnRkZXNjKFJlbGF0aW9uR2V0UGFydGl0aW9u RGVzYyhyZWwsIHRydWUpKTsKIAorCS8qCisJICogQ29sbGVjdCBleHRlbnNpb24gZGVwZW5kZW5j aWVzIGZyb20gaW5kZXhlcyBvbiB0aGUgbWVyZ2luZyBwYXJ0aXRpb25zLgorCSAqIFdlIG11c3Qg ZG8gdGhpcyBiZWZvcmUgZGV0YWNoaW5nIHRoZW0sIHNvIHdlIGNhbiByZXN0b3JlIHRoZQorCSAq IGRlcGVuZGVuY2llcyBvbiB0aGUgbmV3IHBhcnRpdGlvbidzIGluZGV4ZXMgbGF0ZXIuCisJICov CisJZXh0RGVwU3RhdGUgPSBjb2xsZWN0UGFydGl0aW9uSW5kZXhFeHREZXBzKG1lcmdpbmdQYXJ0 aXRpb25zKTsKKwogCS8qIERldGFjaCBhbGwgbWVyZ2luZyBwYXJ0aXRpb25zLiAqLwogCWZvcmVh Y2hfb2lkKG1lcmdpbmdQYXJ0aXRpb25PaWQsIG1lcmdpbmdQYXJ0aXRpb25zKQogCXsKQEAgLTIz MTc1LDYgKzIzMzk5LDE1IEBAIEFURXhlY01lcmdlUGFydGl0aW9ucyhMaXN0ICoqd3F1ZXVlLCBB bHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAkgKi8KIAlhdHRhY2hQYXJ0aXRp b25UYWJsZShOVUxMLCByZWwsIG5ld1BhcnRSZWwsIGNtZC0+Ym91bmQpOwogCisJLyoKKwkgKiBB cHBseSBleHRlbnNpb24gZGVwZW5kZW5jaWVzIHRvIHRoZSBuZXcgcGFydGl0aW9uJ3MgaW5kZXhl cy4gVGhpcworCSAqIHByZXNlcnZlcyBhbnkgIkRFUEVORFMgT04gRVhURU5TSU9OIiBzZXR0aW5n cyBmcm9tIHRoZSBtZXJnZWQKKwkgKiBwYXJ0aXRpb25zLgorCSAqLworCWFwcGx5UGFydGl0aW9u SW5kZXhFeHREZXBzKFJlbGF0aW9uR2V0UmVsaWQobmV3UGFydFJlbCksIGV4dERlcFN0YXRlKTsK KworCWZyZWVQYXJ0aXRpb25JbmRleEV4dERlcHMoZXh0RGVwU3RhdGUpOworCiAJLyogS2VlcCB0 aGUgbG9jayB1bnRpbCBjb21taXQuICovCiAJdGFibGVfY2xvc2UobmV3UGFydFJlbCwgTm9Mb2Nr KTsKIApAQCAtMjM0NjksMTEgKzIzNzAyLDEzIEBAIEFURXhlY1NwbGl0UGFydGl0aW9uKExpc3Qg Kip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogCWJvb2wJCWlz U2FtZU5hbWUgPSBmYWxzZTsKIAljaGFyCQl0bXBSZWxOYW1lW05BTUVEQVRBTEVOXTsKIAlMaXN0 CSAgICpuZXdQYXJ0UmVscyA9IE5JTDsKKwlMaXN0CSAgICpleHREZXBTdGF0ZSA9IE5JTDsKIAlP YmplY3RBZGRyZXNzIG9iamVjdDsKIAlPaWQJCQlkZWZhdWx0UGFydE9pZDsKIAlPaWQJCQlzYXZl X3VzZXJpZDsKIAlpbnQJCQlzYXZlX3NlY19jb250ZXh0OwogCWludAkJCXNhdmVfbmVzdGxldmVs OworCUxpc3QJICAgKnNwbGl0UGFydExpc3Q7CiAKIAlkZWZhdWx0UGFydE9pZCA9IGdldF9kZWZh dWx0X29pZF9mcm9tX3BhcnRkZXNjKFJlbGF0aW9uR2V0UGFydGl0aW9uRGVzYyhyZWwsIHRydWUp KTsKIApAQCAtMjM1MDYsNiArMjM3NDEsMTYgQEAgQVRFeGVjU3BsaXRQYXJ0aXRpb24oTGlzdCAq KndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAJCQkJCWVycm1z ZygicmVsYXRpb24gXCIlc1wiIGFscmVhZHkgZXhpc3RzIiwgc3BzLT5uYW1lLT5yZWxuYW1lKSk7 CiAJfQogCisJLyoKKwkgKiBDb2xsZWN0IGV4dGVuc2lvbiBkZXBlbmRlbmNpZXMgZnJvbSBpbmRl eGVzIG9uIHRoZSBzcGxpdCBwYXJ0aXRpb24uIFdlCisJICogbXVzdCBkbyB0aGlzIGJlZm9yZSBk ZXRhY2hpbmcgaXQsIHNvIHdlIGNhbiByZXN0b3JlIHRoZSBkZXBlbmRlbmNpZXMgb24KKwkgKiB0 aGUgbmV3IHBhcnRpdGlvbnMnIGluZGV4ZXMgbGF0ZXIuCisJICovCisJc3BsaXRQYXJ0TGlzdCA9 IGxpc3RfbWFrZTFfb2lkKHNwbGl0UmVsT2lkKTsKKworCWV4dERlcFN0YXRlID0gY29sbGVjdFBh cnRpdGlvbkluZGV4RXh0RGVwcyhzcGxpdFBhcnRMaXN0KTsKKwlsaXN0X2ZyZWUoc3BsaXRQYXJ0 TGlzdCk7CisKIAkvKiBEZXRhY2ggdGhlIHNwbGl0IHBhcnRpdGlvbi4gKi8KIAlkZXRhY2hQYXJ0 aXRpb25UYWJsZShyZWwsIHNwbGl0UmVsLCBkZWZhdWx0UGFydE9pZCk7CiAKQEAgLTIzNTg1LDEw ICsyMzgzMCwyMCBAQCBBVEV4ZWNTcGxpdFBhcnRpdGlvbihMaXN0ICoqd3F1ZXVlLCBBbHRlcmVk VGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAkJICogbmVlZGVkLgogCQkgKi8KIAkJYXR0 YWNoUGFydGl0aW9uVGFibGUoTlVMTCwgcmVsLCBuZXdQYXJ0UmVsLCBzcHMtPmJvdW5kKTsKKwor CQkvKgorCQkgKiBBcHBseSBleHRlbnNpb24gZGVwZW5kZW5jaWVzIHRvIHRoZSBuZXcgcGFydGl0 aW9uJ3MgaW5kZXhlcy4gVGhpcworCQkgKiBwcmVzZXJ2ZXMgYW55ICJERVBFTkRTIE9OIEVYVEVO U0lPTiIgc2V0dGluZ3MgZnJvbSB0aGUgc3BsaXQKKwkJICogcGFydGl0aW9uLgorCQkgKi8KKwkJ YXBwbHlQYXJ0aXRpb25JbmRleEV4dERlcHMoUmVsYXRpb25HZXRSZWxpZChuZXdQYXJ0UmVsKSwg ZXh0RGVwU3RhdGUpOworCiAJCS8qIEtlZXAgdGhlIGxvY2sgdW50aWwgY29tbWl0LiAqLwogCQl0 YWJsZV9jbG9zZShuZXdQYXJ0UmVsLCBOb0xvY2spOwogCX0KIAorCWZyZWVQYXJ0aXRpb25JbmRl eEV4dERlcHMoZXh0RGVwU3RhdGUpOworCiAJLyogRHJvcCB0aGUgc3BsaXQgcGFydGl0aW9uLiAq LwogCW9iamVjdC5jbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOwogCW9iamVjdC5vYmplY3RJ ZCA9IHNwbGl0UmVsT2lkOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w YXJ0aXRpb25fbWVyZ2Uub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25f bWVyZ2Uub3V0CmluZGV4IDg4MzExMGUyNWQ5Li41NDFmODhmZGJiMSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fbWVyZ2Uub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX21lcmdlLm91dApAQCAtMTA5MSw2ICsxMDkxLDky IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHQgV0hFUkUgaSA9IDE1IEFORCBnIElOIChTRUxFQ1Qg ZyArIDEwIEZST00gdCBXSEVSRSBpID0gNSk7CiAoMSByb3cpCiAKIERST1AgVEFCTEUgdDsKKy0t CistLSBUZXN0IHRoYXQgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcyBvbiBwYXJ0aXRpb24gaW5kZXhl cyBhcmUgcHJlc2VydmVkCistLSBhZnRlciBNRVJHRSBQQVJUSVRJT05TLgorLS0KK0NSRUFURSBF WFRFTlNJT04gSUYgTk9UIEVYSVNUUyB0ZXN0X2V4dDM7CitDUkVBVEUgRVhURU5TSU9OIElGIE5P VCBFWElTVFMgdGVzdF9leHQ1OworQ1JFQVRFIFRBQkxFIHRfbWVyZ2VfZXh0ZGVwIChpIGludCwg eCBpbnQsIHkgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGkpOworQ1JFQVRFIFRBQkxFIHRfbWVy Z2VfZXh0ZGVwXzEgUEFSVElUSU9OIE9GIHRfbWVyZ2VfZXh0ZGVwIEZPUiBWQUxVRVMgRlJPTSAo MSkgVE8gKDIpOworQ1JFQVRFIFRBQkxFIHRfbWVyZ2VfZXh0ZGVwXzIgUEFSVElUSU9OIE9GIHRf bWVyZ2VfZXh0ZGVwIEZPUiBWQUxVRVMgRlJPTSAoMikgVE8gKDMpOworQ1JFQVRFIFRBQkxFIHRf bWVyZ2VfZXh0ZGVwXzMgUEFSVElUSU9OIE9GIHRfbWVyZ2VfZXh0ZGVwIEZPUiBWQUxVRVMgRlJP TSAoMykgVE8gKDQpOworQ1JFQVRFIFRBQkxFIHRfbWVyZ2VfZXh0ZGVwXzQgUEFSVElUSU9OIE9G IHRfbWVyZ2VfZXh0ZGVwIEZPUiBWQUxVRVMgRlJPTSAoNCkgVE8gKDUpOworQ1JFQVRFIFRBQkxF IHRfbWVyZ2VfZXh0ZGVwXzUgUEFSVElUSU9OIE9GIHRfbWVyZ2VfZXh0ZGVwIEZPUiBWQUxVRVMg RlJPTSAoNSkgVE8gKDYpOyAtLSBEb24ndCBoYXZlIGEgZGVwZW5kZW5jeQorQ1JFQVRFIElOREVY IHRfbWVyZ2VfZXh0ZGVwX2lkeCBPTiB0X21lcmdlX2V4dGRlcChpKTsKK0NSRUFURSBJTkRFWCB0 X21lcmdlX2V4dGRlcF94IE9OIHRfbWVyZ2VfZXh0ZGVwKHgpOworLS0gQWRkIGV4dGVuc2lvbiBk ZXBlbmRlbmN5IGZvciBzb21lIHBhcnRpdGlvbiBpbmRleGVzCitBTFRFUiBJTkRFWCB0X21lcmdl X2V4dGRlcF8xX2lfaWR4IERFUEVORFMgT04gRVhURU5TSU9OIHRlc3RfZXh0MzsKK0FMVEVSIElO REVYIHRfbWVyZ2VfZXh0ZGVwXzFfeF9pZHggREVQRU5EUyBPTiBFWFRFTlNJT04gdGVzdF9leHQ1 OworQUxURVIgSU5ERVggdF9tZXJnZV9leHRkZXBfMl9pX2lkeCBERVBFTkRTIE9OIEVYVEVOU0lP TiB0ZXN0X2V4dDM7CitBTFRFUiBJTkRFWCB0X21lcmdlX2V4dGRlcF8yX3hfaWR4IERFUEVORFMg T04gRVhURU5TSU9OIHRlc3RfZXh0NTsKK0FMVEVSIElOREVYIHRfbWVyZ2VfZXh0ZGVwXzNfaV9p ZHggREVQRU5EUyBPTiBFWFRFTlNJT04gdGVzdF9leHQzOworQUxURVIgSU5ERVggdF9tZXJnZV9l eHRkZXBfM194X2lkeCBERVBFTkRTIE9OIEVYVEVOU0lPTiB0ZXN0X2V4dDU7CistLSBBZGQgb25s eSBhIHNpbmdsZSBkZXBlbmRlbmN5IHRvIHRlc3QgdGhhdCBpdCBmYWlscyB3aGVuIG1lcmdlIHBh cnRpdGlvbiB3aXRoCistLSBkaWZmZXJlbnQgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcy4KK0FMVEVS IElOREVYIHRfbWVyZ2VfZXh0ZGVwXzRfaV9pZHggREVQRU5EUyBPTiBFWFRFTlNJT04gdGVzdF9l eHQ1OworLS0gU2hvdWxkIGZhaWw6IGRlcGVuZGVuY2llcyBleGlzdAorRFJPUCBFWFRFTlNJT04g dGVzdF9leHQzOworRVJST1I6ICBjYW5ub3QgZHJvcCBpbmRleCB0X21lcmdlX2V4dGRlcF8zX2lf aWR4IGJlY2F1c2UgaW5kZXggdF9tZXJnZV9leHRkZXBfaWR4IHJlcXVpcmVzIGl0CitISU5UOiAg WW91IGNhbiBkcm9wIGluZGV4IHRfbWVyZ2VfZXh0ZGVwX2lkeCBpbnN0ZWFkLgorLS0gTWVyZ2Ug cGFydGl0aW9ucworQUxURVIgVEFCTEUgdF9tZXJnZV9leHRkZXAgTUVSR0UgUEFSVElUSU9OUyAo dF9tZXJnZV9leHRkZXBfMSwgdF9tZXJnZV9leHRkZXBfMikgSU5UTyB0X21lcmdlX2V4dGRlcF9t ZXJnZWQ7CistLSBTaG91bGQgc3RpbGwgZmFpbDogZGVwZW5kZW5jaWVzIHNob3VsZCBiZSBwcmVz ZXJ2ZWQgb24gdGhlIG5ldyBwYXJ0aXRpb24ncyBpbmRleAorRFJPUCBFWFRFTlNJT04gdGVzdF9l eHQzOworRVJST1I6ICBjYW5ub3QgZHJvcCBpbmRleCB0X21lcmdlX2V4dGRlcF9tZXJnZWRfaV9p ZHggYmVjYXVzZSBpbmRleCB0X21lcmdlX2V4dGRlcF9pZHggcmVxdWlyZXMgaXQKK0hJTlQ6ICBZ b3UgY2FuIGRyb3AgaW5kZXggdF9tZXJnZV9leHRkZXBfaWR4IGluc3RlYWQuCistLSBWZXJpZnkg dGhhdCBkZXBlbmRlbmNpZXMgZm9yIGFsbCBpbmRleGVzIGV4aXN0cyBpbiBwZ19kZXBlbmQKK1NF TEVDVCByZWxuYW1lLCBleHRuYW1lCitGUk9NIHBnX2RlcGVuZCBkCitKT0lOIHBnX2NsYXNzIGMg T04gZC5vYmppZCA9IGMub2lkCitKT0lOIHBnX2V4dGVuc2lvbiBlIE9OIGQucmVmb2JqaWQgPSBl Lm9pZAorV0hFUkUgYy5yZWxuYW1lIElOICgndF9tZXJnZV9leHRkZXBfbWVyZ2VkX2lfaWR4Jywg J3RfbWVyZ2VfZXh0ZGVwX21lcmdlZF94X2lkeCcpCisgIEFORCBlLmV4dG5hbWUgSU4gKCd0ZXN0 X2V4dDMnLCAndGVzdF9leHQ1JykKKyAgQU5EIGQuZGVwdHlwZSA9ICd4JworT1JERVIgQlkgcmVs bmFtZSwgZXh0bmFtZTsKKyAgICAgICAgICAgcmVsbmFtZSAgICAgICAgICAgfCAgZXh0bmFtZSAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLQorIHRfbWVyZ2VfZXh0 ZGVwX21lcmdlZF9pX2lkeCB8IHRlc3RfZXh0MworIHRfbWVyZ2VfZXh0ZGVwX21lcmdlZF94X2lk eCB8IHRlc3RfZXh0NQorKDIgcm93cykKKworLS0gQ3JlYXRlIGFuIGluZGV4IGRpcmVjdGx5IG9u IGEgcGFydGl0aW9uICh3aXRob3V0IGEgcGFyZW50IHBhcnRpdGlvbmVkIGluZGV4KS4KKy0tIFN1 Y2ggaW5kZXhlcyBhcmUgbm90IHJlY3JlYXRlZCBvbiBtZXJnZSBiZWNhdXNlIHRoZXkgaGF2ZSBu byBwYXJlbnQgdG8gbWFwIHRvLgorLS0gVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgcGFydGl0aW9u LW9ubHkgaW5kZXhlcyBkb24ndCBjYXVzZSBpc3N1ZXMgZHVyaW5nIG1lcmdlLgorQ1JFQVRFIElO REVYIHRfbWVyZ2VfZXh0ZGVwXzNfeV9pZHggT04gdF9tZXJnZV9leHRkZXBfMyh5KTsKK0FMVEVS IFRBQkxFIHRfbWVyZ2VfZXh0ZGVwIE1FUkdFIFBBUlRJVElPTlMgKHRfbWVyZ2VfZXh0ZGVwX21l cmdlZCwgdF9tZXJnZV9leHRkZXBfMykgSU5UTyB0X21lcmdlX2V4dGRlcF9tZXJnZWQyOworLS0g VGhlIHBhcnRpdGlvbi1vbmx5IGluZGV4IGlzIGRyb3BwZWQgd2l0aCBpdHMgcGFydGl0aW9uCitT RUxFQ1QgcmVsbmFtZQorRlJPTSBwZ19jbGFzcworV0hFUkUgcmVsbmFtZSBMSUtFICd0X21lcmdl X2V4dGRlcF9tZXJnZWQyJWlkeCcKK09SREVSIEJZIHJlbG5hbWU7CisgICAgICAgICAgIHJlbG5h bWUgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHRfbWVyZ2Vf ZXh0ZGVwX21lcmdlZDJfaV9pZHgKKyB0X21lcmdlX2V4dGRlcF9tZXJnZWQyX3hfaWR4CisoMiBy b3dzKQorCistLSBTaG91bGQgZmFpbDogUGFydGl0aW9ucyB0byBiZSBtZXJnZWQgaGF2ZSBkaWZm ZXJlbnQgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcy4KKy0tIEFsc28gdGVzdCB3aXRoIGRpZmZlcmVu dCBvcmRlcmluZyB0byBlbnN1cmUgY29ycmVjdG5lc3MuCitBTFRFUiBUQUJMRSB0X21lcmdlX2V4 dGRlcCBNRVJHRSBQQVJUSVRJT05TICh0X21lcmdlX2V4dGRlcF9tZXJnZWQyLCB0X21lcmdlX2V4 dGRlcF80KSBJTlRPIHRfbWVyZ2VfZXh0ZGVwX21lcmdlZDM7CitFUlJPUjogIGNhbm5vdCBtZXJn ZSBwYXJ0aXRpb25zIHdpdGggY29uZmxpY3RpbmcgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcworREVU QUlMOiAgUGFydGl0aW9uIGluZGV4ICJ0X21lcmdlX2V4dGRlcF80X2lfaWR4IiBkZXBlbmRzIG9u IGV4dGVuc2lvbiAidGVzdF9leHQ1IiwgYnV0IGFub3RoZXIgcGFydGl0aW9uJ3MgaW5kZXggZG9l cyBub3QuCitBTFRFUiBUQUJMRSB0X21lcmdlX2V4dGRlcCBNRVJHRSBQQVJUSVRJT05TICh0X21l cmdlX2V4dGRlcF80LCB0X21lcmdlX2V4dGRlcF9tZXJnZWQyKSBJTlRPIHRfbWVyZ2VfZXh0ZGVw X21lcmdlZDM7CitFUlJPUjogIGNhbm5vdCBtZXJnZSBwYXJ0aXRpb25zIHdpdGggY29uZmxpY3Rp bmcgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcworREVUQUlMOiAgUGFydGl0aW9uIGluZGV4ICJ0X21l cmdlX2V4dGRlcF9tZXJnZWQyX2lfaWR4IiBkZXBlbmRzIG9uIGV4dGVuc2lvbiAidGVzdF9leHQz IiwgYnV0IGFub3RoZXIgcGFydGl0aW9uJ3MgaW5kZXggZG9lcyBub3QuCistLSBTaG91bGQgZmFp bDogUGFydGl0aW9ucyB0byBiZSBtZXJnZWQgaGF2ZSBkaWZmZXJlbnQgZXh0ZW5zaW9uIGRlcGVu ZGVuY2llcworLS0gKHRfbWVyZ2VfZXh0ZGVwXzUgZG9uJ3QgaGF2ZSBkZXBlbmRlbmNpZXMpCist LSBBbHNvIHRlc3Qgd2l0aCBkaWZmZXJlbnQgb3JkZXJpbmcgdG8gZW5zdXJlIGNvcnJlY3RuZXNz LgorQUxURVIgVEFCTEUgdF9tZXJnZV9leHRkZXAgTUVSR0UgUEFSVElUSU9OUyAodF9tZXJnZV9l eHRkZXBfNCwgdF9tZXJnZV9leHRkZXBfNSkgSU5UTyB0X21lcmdlX2V4dGRlcF9tZXJnZWQzOwor RVJST1I6ICBjYW5ub3QgbWVyZ2UgcGFydGl0aW9ucyB3aXRoIGNvbmZsaWN0aW5nIGV4dGVuc2lv biBkZXBlbmRlbmNpZXMKK0RFVEFJTDogIFBhcnRpdGlvbiBpbmRleCAidF9tZXJnZV9leHRkZXBf NV9pX2lkeCIgaGFzIG5vIGV4dGVuc2lvbiBkZXBlbmRlbmNpZXMsIGJ1dCBhbm90aGVyIHBhcnRp dGlvbidzIGluZGV4IGRvZXMuCitBTFRFUiBUQUJMRSB0X21lcmdlX2V4dGRlcCBNRVJHRSBQQVJU SVRJT05TICh0X21lcmdlX2V4dGRlcF81LCB0X21lcmdlX2V4dGRlcF80KSBJTlRPIHRfbWVyZ2Vf ZXh0ZGVwX21lcmdlZDM7CitFUlJPUjogIGNhbm5vdCBtZXJnZSBwYXJ0aXRpb25zIHdpdGggY29u ZmxpY3RpbmcgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcworREVUQUlMOiAgUGFydGl0aW9uIGluZGV4 ICJ0X21lcmdlX2V4dGRlcF80X2lfaWR4IiBoYXMgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcywgYnV0 IGFub3RoZXIgcGFydGl0aW9uJ3MgaW5kZXggZG9lcyBub3QuCistLSBDbGVhbiB1cAorRFJPUCBU QUJMRSB0X21lcmdlX2V4dGRlcDsKK0RST1AgRVhURU5TSU9OIHRlc3RfZXh0MzsKK0RST1AgRVhU RU5TSU9OIHRlc3RfZXh0NTsKIFJFU0VUIHNlYXJjaF9wYXRoOwogLS0KIERST1AgU0NIRU1BIHBh cnRpdGlvbnNfbWVyZ2Vfc2NoZW1hOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wYXJ0aXRpb25fc3BsaXQub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0 aXRpb25fc3BsaXQub3V0CmluZGV4IDQzY2EyOTk2NDhlLi41NzQxMTljMTFhNyAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fc3BsaXQub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3NwbGl0Lm91dApAQCAtMTU4OSw2ICsx NTg5LDQ3IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHQgV0hFUkUgaSA9IDAgQU5EIHRhYl9pZCBJ TiAoU0VMRUNUIHRhYl9pZCBGUk9NIHQgV0hFUkUgaSA9CiAoMSByb3cpCiAKIERST1AgVEFCTEUg dDsKKy0tCistLSBUZXN0IHRoYXQgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcyBvbiBwYXJ0aXRpb24g aW5kZXhlcyBhcmUgcHJlc2VydmVkCistLSBhZnRlciBTUExJVCBQQVJUSVRJT04uCistLQorQ1JF QVRFIEVYVEVOU0lPTiBjaXRleHQ7CitDUkVBVEUgVEFCTEUgdF9leHRkZXAgKGkgaW50KSBQQVJU SVRJT04gQlkgUkFOR0UgKGkpOworQ1JFQVRFIFRBQkxFIHRfZXh0ZGVwXzFfMyBQQVJUSVRJT04g T0YgdF9leHRkZXAgRk9SIFZBTFVFUyBGUk9NICgxKSBUTyAoMyk7CitDUkVBVEUgSU5ERVggdF9l eHRkZXBfaWR4IE9OIHRfZXh0ZGVwIChpKTsKKy0tIEFkZCBleHRlbnNpb24gZGVwZW5kZW5jeSBv biBwYXJ0aXRpb24gaW5kZXgKK0FMVEVSIElOREVYIHRfZXh0ZGVwXzFfM19pX2lkeCBERVBFTkRT IE9OIEVYVEVOU0lPTiBjaXRleHQ7CistLSBTaG91bGQgZmFpbDogZGVwZW5kZW5jeSBleGlzdHMK K0RST1AgRVhURU5TSU9OIGNpdGV4dDsKK0VSUk9SOiAgY2Fubm90IGRyb3AgaW5kZXggdF9leHRk ZXBfMV8zX2lfaWR4IGJlY2F1c2UgaW5kZXggdF9leHRkZXBfaWR4IHJlcXVpcmVzIGl0CitISU5U OiAgWW91IGNhbiBkcm9wIGluZGV4IHRfZXh0ZGVwX2lkeCBpbnN0ZWFkLgorLS0gU3BsaXQgcGFy dGl0aW9uCitBTFRFUiBUQUJMRSB0X2V4dGRlcCBTUExJVCBQQVJUSVRJT04gdF9leHRkZXBfMV8z IElOVE8KKyAgKFBBUlRJVElPTiB0X2V4dGRlcF8xIEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDIp LAorICAgUEFSVElUSU9OIHRfZXh0ZGVwXzIgRk9SIFZBTFVFUyBGUk9NICgyKSBUTyAoMykpOwor LS0gU2hvdWxkIHN0aWxsIGZhaWw6IGRlcGVuZGVuY2llcyBzaG91bGQgYmUgcHJlc2VydmVkIG9u IGFsbCBuZXcgcGFydGl0aW9ucycgaW5kZXhlcworRFJPUCBFWFRFTlNJT04gY2l0ZXh0OworRVJS T1I6ICBjYW5ub3QgZHJvcCBpbmRleCB0X2V4dGRlcF8yX2lfaWR4IGJlY2F1c2UgaW5kZXggdF9l eHRkZXBfaWR4IHJlcXVpcmVzIGl0CitISU5UOiAgWW91IGNhbiBkcm9wIGluZGV4IHRfZXh0ZGVw X2lkeCBpbnN0ZWFkLgorLS0gVmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgZXhpc3QgaW4gcGdfZGVw ZW5kIGZvciBib3RoIG5ldyBwYXJ0aXRpb25zCitTRUxFQ1QgYy5yZWxuYW1lLCBDT1VOVCgqKSA+ IDAgQVMgaGFzX2V4dF9kZXAKK0ZST00gcGdfZGVwZW5kIGQKK0pPSU4gcGdfY2xhc3MgYyBPTiBk Lm9iamlkID0gYy5vaWQKK0pPSU4gcGdfZXh0ZW5zaW9uIGUgT04gZC5yZWZvYmppZCA9IGUub2lk CitXSEVSRSBjLnJlbG5hbWUgSU4gKCd0X2V4dGRlcF8xX2lfaWR4JywgJ3RfZXh0ZGVwXzJfaV9p ZHgnKQorICBBTkQgZS5leHRuYW1lID0gJ2NpdGV4dCcKKyAgQU5EIGQuZGVwdHlwZSA9ICd4Jwor R1JPVVAgQlkgYy5yZWxuYW1lCitPUkRFUiBCWSBjLnJlbG5hbWU7CisgICAgIHJlbG5hbWUgICAg ICB8IGhhc19leHRfZGVwIAorLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyB0X2V4 dGRlcF8xX2lfaWR4IHwgdAorIHRfZXh0ZGVwXzJfaV9pZHggfCB0CisoMiByb3dzKQorCistLSBD bGVhbiB1cAorRFJPUCBUQUJMRSB0X2V4dGRlcDsKK0RST1AgRVhURU5TSU9OIGNpdGV4dDsKIFJF U0VUIHNlYXJjaF9wYXRoOwogLS0KIERST1AgU0NIRU1BIHBhcnRpdGlvbl9zcGxpdF9zY2hlbWE7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fbWVyZ2Uuc3FsIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX21lcmdlLnNxbAppbmRleCBhMjExZmVlMmFk MS4uMGY2MjEyOWRjYzEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlv bl9tZXJnZS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX21lcmdlLnNx bApAQCAtNzg0LDYgKzc4NCw4MiBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSB0IFdIRVJFIGkgPSAx NSBBTkQgZyBJTiAoU0VMRUNUIGcgKyAxMCBGUk9NIHQgV0hFUkUgaSA9IDUpOwogRFJPUCBUQUJM RSB0OwogCiAKKy0tCistLSBUZXN0IHRoYXQgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcyBvbiBwYXJ0 aXRpb24gaW5kZXhlcyBhcmUgcHJlc2VydmVkCistLSBhZnRlciBNRVJHRSBQQVJUSVRJT05TLgor LS0KK0NSRUFURSBFWFRFTlNJT04gSUYgTk9UIEVYSVNUUyB0ZXN0X2V4dDM7CitDUkVBVEUgRVhU RU5TSU9OIElGIE5PVCBFWElTVFMgdGVzdF9leHQ1OworCitDUkVBVEUgVEFCTEUgdF9tZXJnZV9l eHRkZXAgKGkgaW50LCB4IGludCwgeSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaSk7CitDUkVB VEUgVEFCTEUgdF9tZXJnZV9leHRkZXBfMSBQQVJUSVRJT04gT0YgdF9tZXJnZV9leHRkZXAgRk9S IFZBTFVFUyBGUk9NICgxKSBUTyAoMik7CitDUkVBVEUgVEFCTEUgdF9tZXJnZV9leHRkZXBfMiBQ QVJUSVRJT04gT0YgdF9tZXJnZV9leHRkZXAgRk9SIFZBTFVFUyBGUk9NICgyKSBUTyAoMyk7CitD UkVBVEUgVEFCTEUgdF9tZXJnZV9leHRkZXBfMyBQQVJUSVRJT04gT0YgdF9tZXJnZV9leHRkZXAg Rk9SIFZBTFVFUyBGUk9NICgzKSBUTyAoNCk7CitDUkVBVEUgVEFCTEUgdF9tZXJnZV9leHRkZXBf NCBQQVJUSVRJT04gT0YgdF9tZXJnZV9leHRkZXAgRk9SIFZBTFVFUyBGUk9NICg0KSBUTyAoNSk7 CitDUkVBVEUgVEFCTEUgdF9tZXJnZV9leHRkZXBfNSBQQVJUSVRJT04gT0YgdF9tZXJnZV9leHRk ZXAgRk9SIFZBTFVFUyBGUk9NICg1KSBUTyAoNik7IC0tIERvbid0IGhhdmUgYSBkZXBlbmRlbmN5 CitDUkVBVEUgSU5ERVggdF9tZXJnZV9leHRkZXBfaWR4IE9OIHRfbWVyZ2VfZXh0ZGVwKGkpOwor Q1JFQVRFIElOREVYIHRfbWVyZ2VfZXh0ZGVwX3ggT04gdF9tZXJnZV9leHRkZXAoeCk7CisKKy0t IEFkZCBleHRlbnNpb24gZGVwZW5kZW5jeSBmb3Igc29tZSBwYXJ0aXRpb24gaW5kZXhlcworQUxU RVIgSU5ERVggdF9tZXJnZV9leHRkZXBfMV9pX2lkeCBERVBFTkRTIE9OIEVYVEVOU0lPTiB0ZXN0 X2V4dDM7CitBTFRFUiBJTkRFWCB0X21lcmdlX2V4dGRlcF8xX3hfaWR4IERFUEVORFMgT04gRVhU RU5TSU9OIHRlc3RfZXh0NTsKK0FMVEVSIElOREVYIHRfbWVyZ2VfZXh0ZGVwXzJfaV9pZHggREVQ RU5EUyBPTiBFWFRFTlNJT04gdGVzdF9leHQzOworQUxURVIgSU5ERVggdF9tZXJnZV9leHRkZXBf Ml94X2lkeCBERVBFTkRTIE9OIEVYVEVOU0lPTiB0ZXN0X2V4dDU7CitBTFRFUiBJTkRFWCB0X21l cmdlX2V4dGRlcF8zX2lfaWR4IERFUEVORFMgT04gRVhURU5TSU9OIHRlc3RfZXh0MzsKK0FMVEVS IElOREVYIHRfbWVyZ2VfZXh0ZGVwXzNfeF9pZHggREVQRU5EUyBPTiBFWFRFTlNJT04gdGVzdF9l eHQ1OworCistLSBBZGQgb25seSBhIHNpbmdsZSBkZXBlbmRlbmN5IHRvIHRlc3QgdGhhdCBpdCBm YWlscyB3aGVuIG1lcmdlIHBhcnRpdGlvbiB3aXRoCistLSBkaWZmZXJlbnQgZXh0ZW5zaW9uIGRl cGVuZGVuY2llcy4KK0FMVEVSIElOREVYIHRfbWVyZ2VfZXh0ZGVwXzRfaV9pZHggREVQRU5EUyBP TiBFWFRFTlNJT04gdGVzdF9leHQ1OworCistLSBTaG91bGQgZmFpbDogZGVwZW5kZW5jaWVzIGV4 aXN0CitEUk9QIEVYVEVOU0lPTiB0ZXN0X2V4dDM7CisKKy0tIE1lcmdlIHBhcnRpdGlvbnMKK0FM VEVSIFRBQkxFIHRfbWVyZ2VfZXh0ZGVwIE1FUkdFIFBBUlRJVElPTlMgKHRfbWVyZ2VfZXh0ZGVw XzEsIHRfbWVyZ2VfZXh0ZGVwXzIpIElOVE8gdF9tZXJnZV9leHRkZXBfbWVyZ2VkOworCistLSBT aG91bGQgc3RpbGwgZmFpbDogZGVwZW5kZW5jaWVzIHNob3VsZCBiZSBwcmVzZXJ2ZWQgb24gdGhl IG5ldyBwYXJ0aXRpb24ncyBpbmRleAorRFJPUCBFWFRFTlNJT04gdGVzdF9leHQzOworCistLSBW ZXJpZnkgdGhhdCBkZXBlbmRlbmNpZXMgZm9yIGFsbCBpbmRleGVzIGV4aXN0cyBpbiBwZ19kZXBl bmQKK1NFTEVDVCByZWxuYW1lLCBleHRuYW1lCitGUk9NIHBnX2RlcGVuZCBkCitKT0lOIHBnX2Ns YXNzIGMgT04gZC5vYmppZCA9IGMub2lkCitKT0lOIHBnX2V4dGVuc2lvbiBlIE9OIGQucmVmb2Jq aWQgPSBlLm9pZAorV0hFUkUgYy5yZWxuYW1lIElOICgndF9tZXJnZV9leHRkZXBfbWVyZ2VkX2lf aWR4JywgJ3RfbWVyZ2VfZXh0ZGVwX21lcmdlZF94X2lkeCcpCisgIEFORCBlLmV4dG5hbWUgSU4g KCd0ZXN0X2V4dDMnLCAndGVzdF9leHQ1JykKKyAgQU5EIGQuZGVwdHlwZSA9ICd4JworT1JERVIg QlkgcmVsbmFtZSwgZXh0bmFtZTsKKworLS0gQ3JlYXRlIGFuIGluZGV4IGRpcmVjdGx5IG9uIGEg cGFydGl0aW9uICh3aXRob3V0IGEgcGFyZW50IHBhcnRpdGlvbmVkIGluZGV4KS4KKy0tIFN1Y2gg aW5kZXhlcyBhcmUgbm90IHJlY3JlYXRlZCBvbiBtZXJnZSBiZWNhdXNlIHRoZXkgaGF2ZSBubyBw YXJlbnQgdG8gbWFwIHRvLgorLS0gVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgcGFydGl0aW9uLW9u bHkgaW5kZXhlcyBkb24ndCBjYXVzZSBpc3N1ZXMgZHVyaW5nIG1lcmdlLgorQ1JFQVRFIElOREVY IHRfbWVyZ2VfZXh0ZGVwXzNfeV9pZHggT04gdF9tZXJnZV9leHRkZXBfMyh5KTsKK0FMVEVSIFRB QkxFIHRfbWVyZ2VfZXh0ZGVwIE1FUkdFIFBBUlRJVElPTlMgKHRfbWVyZ2VfZXh0ZGVwX21lcmdl ZCwgdF9tZXJnZV9leHRkZXBfMykgSU5UTyB0X21lcmdlX2V4dGRlcF9tZXJnZWQyOworCistLSBU aGUgcGFydGl0aW9uLW9ubHkgaW5kZXggaXMgZHJvcHBlZCB3aXRoIGl0cyBwYXJ0aXRpb24KK1NF TEVDVCByZWxuYW1lCitGUk9NIHBnX2NsYXNzCitXSEVSRSByZWxuYW1lIExJS0UgJ3RfbWVyZ2Vf ZXh0ZGVwX21lcmdlZDIlaWR4JworT1JERVIgQlkgcmVsbmFtZTsKKworLS0gU2hvdWxkIGZhaWw6 IFBhcnRpdGlvbnMgdG8gYmUgbWVyZ2VkIGhhdmUgZGlmZmVyZW50IGV4dGVuc2lvbiBkZXBlbmRl bmNpZXMuCistLSBBbHNvIHRlc3Qgd2l0aCBkaWZmZXJlbnQgb3JkZXJpbmcgdG8gZW5zdXJlIGNv cnJlY3RuZXNzLgorQUxURVIgVEFCTEUgdF9tZXJnZV9leHRkZXAgTUVSR0UgUEFSVElUSU9OUyAo dF9tZXJnZV9leHRkZXBfbWVyZ2VkMiwgdF9tZXJnZV9leHRkZXBfNCkgSU5UTyB0X21lcmdlX2V4 dGRlcF9tZXJnZWQzOworQUxURVIgVEFCTEUgdF9tZXJnZV9leHRkZXAgTUVSR0UgUEFSVElUSU9O UyAodF9tZXJnZV9leHRkZXBfNCwgdF9tZXJnZV9leHRkZXBfbWVyZ2VkMikgSU5UTyB0X21lcmdl X2V4dGRlcF9tZXJnZWQzOworCistLSBTaG91bGQgZmFpbDogUGFydGl0aW9ucyB0byBiZSBtZXJn ZWQgaGF2ZSBkaWZmZXJlbnQgZXh0ZW5zaW9uIGRlcGVuZGVuY2llcworLS0gKHRfbWVyZ2VfZXh0 ZGVwXzUgZG9uJ3QgaGF2ZSBkZXBlbmRlbmNpZXMpCistLSBBbHNvIHRlc3Qgd2l0aCBkaWZmZXJl bnQgb3JkZXJpbmcgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLgorQUxURVIgVEFCTEUgdF9tZXJnZV9l eHRkZXAgTUVSR0UgUEFSVElUSU9OUyAodF9tZXJnZV9leHRkZXBfNCwgdF9tZXJnZV9leHRkZXBf NSkgSU5UTyB0X21lcmdlX2V4dGRlcF9tZXJnZWQzOworQUxURVIgVEFCTEUgdF9tZXJnZV9leHRk ZXAgTUVSR0UgUEFSVElUSU9OUyAodF9tZXJnZV9leHRkZXBfNSwgdF9tZXJnZV9leHRkZXBfNCkg SU5UTyB0X21lcmdlX2V4dGRlcF9tZXJnZWQzOworCistLSBDbGVhbiB1cAorRFJPUCBUQUJMRSB0 X21lcmdlX2V4dGRlcDsKK0RST1AgRVhURU5TSU9OIHRlc3RfZXh0MzsKK0RST1AgRVhURU5TSU9O IHRlc3RfZXh0NTsKKworCiBSRVNFVCBzZWFyY2hfcGF0aDsKIAogLS0KZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9zcGxpdC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9wYXJ0aXRpb25fc3BsaXQuc3FsCmluZGV4IDQ0ZmNmMjA4YWM2Li4yMjU2M2QzODA0YyAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX3NwbGl0LnNxbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fc3BsaXQuc3FsCkBAIC0xMTI3LDYgKzEx MjcsNDUgQEAgU0VMRUNUIGNvdW50KCopIEZST00gdCBXSEVSRSBpID0gMCBBTkQgdGFiX2lkIElO IChTRUxFQ1QgdGFiX2lkIEZST00gdCBXSEVSRSBpID0KIERST1AgVEFCTEUgdDsKIAogCistLQor LS0gVGVzdCB0aGF0IGV4dGVuc2lvbiBkZXBlbmRlbmNpZXMgb24gcGFydGl0aW9uIGluZGV4ZXMg YXJlIHByZXNlcnZlZAorLS0gYWZ0ZXIgU1BMSVQgUEFSVElUSU9OLgorLS0KK0NSRUFURSBFWFRF TlNJT04gY2l0ZXh0OworCitDUkVBVEUgVEFCTEUgdF9leHRkZXAgKGkgaW50KSBQQVJUSVRJT04g QlkgUkFOR0UgKGkpOworQ1JFQVRFIFRBQkxFIHRfZXh0ZGVwXzFfMyBQQVJUSVRJT04gT0YgdF9l eHRkZXAgRk9SIFZBTFVFUyBGUk9NICgxKSBUTyAoMyk7CitDUkVBVEUgSU5ERVggdF9leHRkZXBf aWR4IE9OIHRfZXh0ZGVwIChpKTsKKworLS0gQWRkIGV4dGVuc2lvbiBkZXBlbmRlbmN5IG9uIHBh cnRpdGlvbiBpbmRleAorQUxURVIgSU5ERVggdF9leHRkZXBfMV8zX2lfaWR4IERFUEVORFMgT04g RVhURU5TSU9OIGNpdGV4dDsKKworLS0gU2hvdWxkIGZhaWw6IGRlcGVuZGVuY3kgZXhpc3RzCitE Uk9QIEVYVEVOU0lPTiBjaXRleHQ7CisKKy0tIFNwbGl0IHBhcnRpdGlvbgorQUxURVIgVEFCTEUg dF9leHRkZXAgU1BMSVQgUEFSVElUSU9OIHRfZXh0ZGVwXzFfMyBJTlRPCisgIChQQVJUSVRJT04g dF9leHRkZXBfMSBGT1IgVkFMVUVTIEZST00gKDEpIFRPICgyKSwKKyAgIFBBUlRJVElPTiB0X2V4 dGRlcF8yIEZPUiBWQUxVRVMgRlJPTSAoMikgVE8gKDMpKTsKKworLS0gU2hvdWxkIHN0aWxsIGZh aWw6IGRlcGVuZGVuY2llcyBzaG91bGQgYmUgcHJlc2VydmVkIG9uIGFsbCBuZXcgcGFydGl0aW9u cycgaW5kZXhlcworRFJPUCBFWFRFTlNJT04gY2l0ZXh0OworCistLSBWZXJpZnkgdGhlIGRlcGVu ZGVuY2llcyBleGlzdCBpbiBwZ19kZXBlbmQgZm9yIGJvdGggbmV3IHBhcnRpdGlvbnMKK1NFTEVD VCBjLnJlbG5hbWUsIENPVU5UKCopID4gMCBBUyBoYXNfZXh0X2RlcAorRlJPTSBwZ19kZXBlbmQg ZAorSk9JTiBwZ19jbGFzcyBjIE9OIGQub2JqaWQgPSBjLm9pZAorSk9JTiBwZ19leHRlbnNpb24g ZSBPTiBkLnJlZm9iamlkID0gZS5vaWQKK1dIRVJFIGMucmVsbmFtZSBJTiAoJ3RfZXh0ZGVwXzFf aV9pZHgnLCAndF9leHRkZXBfMl9pX2lkeCcpCisgIEFORCBlLmV4dG5hbWUgPSAnY2l0ZXh0Jwor ICBBTkQgZC5kZXB0eXBlID0gJ3gnCitHUk9VUCBCWSBjLnJlbG5hbWUKK09SREVSIEJZIGMucmVs bmFtZTsKKworLS0gQ2xlYW4gdXAKK0RST1AgVEFCTEUgdF9leHRkZXA7CitEUk9QIEVYVEVOU0lP TiBjaXRleHQ7CisKIFJFU0VUIHNlYXJjaF9wYXRoOwogCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAppbmRleCA0OWRmYjY2MmFiYy4uOWYxZGQ1NTIxM2QgMTAwNjQ0Ci0tLSBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CkBAIC0yMjAwLDYgKzIyMDAsNyBAQCBQYXJ0aXRpb25EaXJlY3RvcnlFbnRyeQogUGFy dGl0aW9uRGlzcGF0Y2gKIFBhcnRpdGlvbkVsZW0KIFBhcnRpdGlvbkhhc2hCb3VuZAorUGFydGl0 aW9uSW5kZXhFeHREZXBFbnRyeQogUGFydGl0aW9uS2V5CiBQYXJ0aXRpb25MaXN0VmFsdWUKIFBh cnRpdGlvbk1hcAotLSAKMi41My4wCgo= --7ca4d6f18ef132139440765f5789efed55292d9ff64356ddd82cb6e94747--