Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nW0s8-0007Vb-Mu for pgsql-hackers@arkaria.postgresql.org; Sun, 20 Mar 2022 19:05:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nW0s6-0007WM-Pm for pgsql-hackers@arkaria.postgresql.org; Sun, 20 Mar 2022 19:05:46 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nW0s6-0007WC-Ao for pgsql-hackers@lists.postgresql.org; Sun, 20 Mar 2022 19:05:46 +0000 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nW0s1-0006Sp-Rv for pgsql-hackers@postgresql.org; Sun, 20 Mar 2022 19:05:45 +0000 Received: by mail-lf1-x12f.google.com with SMTP id bt26so21632171lfb.3 for ; Sun, 20 Mar 2022 12:05:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=IA46cANkJ9KUvDsaZU8mczVd9A2o/AeOOsI5HqUcD4E=; b=Ih0nLkD/4JOG0r3Qgq55Xayfro8UfLLxlq4o3koD5xTKCi6AVxrdkzQs2Ra9o9bSKK TfuWweNsxF5GBCqcAjFRLjNRVwid+QEvdgyv/B0DxZBH7r0+sQa04UTFqs8eySxXRj7G Ncnc4HOACTeHAgb3FTq5zrBt84/xzycyO+UVh9wD9dH3Oh27IaWL61DS1c3rQf52bnYq bKnXbe48AuErFNnLmuNH+e5t4Ka4kTRKNRKfILyijPeysdoANzjeio9KWQ6lHRpJRrsm HFK+yFfGaLwMiNFOa+JchAACn1TfJrRJb3wCZnTARhQF/qO46h/kIFaUzhwRxziGgwg9 LXDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=IA46cANkJ9KUvDsaZU8mczVd9A2o/AeOOsI5HqUcD4E=; b=syW/48OziKCMExYy3XUvdkYhd8BExeZkUuBZrv4RlAUalnuDp82Yzcki//ju2PNOj3 2jWx/AzwLeK9kv7HIh5CETfN82dvZfroipVQm0gw+lHTC3oRxlK0TFjxD1aQ47eGXSU7 jbjU7OiwThaVgY9friVmdi94727SDwpixwE68EcbUdUAApeWsmMO9/vuSE5Y31ITtwBi a5O5KBEmBOL1DxpXTOM0x+RZBIL+YHFTVFdQhbd5RPokL9myQBAQiu0QCA23+hDyryHK q5stTWAaupXtbIA76RnggspWQWn0bPsh7a+jXBSM+iiJECBKZTj1najUEncYhXvO0TRg kY7A== X-Gm-Message-State: AOAM531Ftne6nT+t2zcQMuVwSstKU4Hqbl4KQoTFv1hOq96nddGhuVwq REs109BdVFjfZofbgXFQx7bJUANpYKYc4rYZVLI= X-Google-Smtp-Source: ABdhPJwZEjW+m+IPHcO/ap1UEAShYErvntpTc2noHaNKkoAeUQopcfCWqbQbloWQSrIDfAdfQSbwN17fOe4r5x3XdCs= X-Received: by 2002:a05:6512:3d22:b0:448:797c:e4f7 with SMTP id d34-20020a0565123d2200b00448797ce4f7mr12689379lfv.251.1647803139350; Sun, 20 Mar 2022 12:05:39 -0700 (PDT) MIME-Version: 1.0 References: <20220311010223.GI28503@telsasoft.com> <20220312015253.zokhkwdn5xbbd4vf@alap3.anarazel.de> <20220314163547.GT28503@telsasoft.com> <20220314171152.GU28503@telsasoft.com> <20220317194130.GM28503@telsasoft.com> In-Reply-To: <20220317194130.GM28503@telsasoft.com> From: Robert Haas Date: Sun, 20 Mar 2022 15:05:28 -0400 Message-ID: Subject: Re: refactoring basebackup.c (zstd workers) To: Justin Pryzby Cc: Dipesh Pandit , Andres Freund , Jeevan Ladhe , Alvaro Herrera , "Shinoda, Noriyoshi (PN Japan FSIP)" , Abhijit Menon-Sen , Dmitry Dolgov <9erthalion6@gmail.com>, Jeevan Ladhe , Mark Dilger , "pgsql-hackers@postgresql.org" , tushar Content-Type: multipart/mixed; boundary="000000000000c813e005daab106f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c813e005daab106f Content-Type: text/plain; charset="UTF-8" On Thu, Mar 17, 2022 at 3:41 PM Justin Pryzby wrote: > gzip comma I think it's fine the way it's written. If we made that change, then we'd have a comma for gzip and not for the other two algorithms. Also, I'm just moving that sentence, so any change that there is to be made here is a job for some other patch. > alphabetical Fixed. > - errmsg("unrecognized compression algorithm: \"%s\"", > + errmsg("unrecognized compression algorithm \"%s\"", > > Most other places seem to say "compression method". So I'd suggest to change > that here, and in doc/src/sgml/ref/pg_basebackup.sgml. I'm not sure that's really better, and I don't think this patch is introducing an altogether novel usage. I think I would probably try to standardize on algorithm rather than method if I were standardizing the whole source tree, but I think we can leave that discussion for another time. > - if (o_compression_level && !o_compression) > + if (o_compression_detail && !o_compression) > ereport(ERROR, > (errcode(ERRCODE_SYNTAX_ERROR), > errmsg("compression level requires compression"))); > > s/level/detail/ Fixed. > It'd be great if this were re-usable for wal_compression, which I hope in pg16 will > support at least level=N. And eventually pg_dump. But those clients shouldn't > accept a client/server prefix. Maybe the way to handle that is for those tools > to check locationres and reject it if it was specified. One thing I forgot to mention in my previous response is that I think the parsing code is actually well set up for this the way I have it. server- and client- gets parsed off in a different place than we interpret the rest, which fits well with your observation that other cases wouldn't have a client or server prefix. > sp: sandwich Fixed. > star Fixed. > should be const ? OK. > > + /* As a special case, the specification can be a bare integer. */ > + bare_level = strtol(specification, &bare_level_endp, 10); > > Should this call expect_integer_value()? > See below. I don't think that would be useful. We have no keyword to pass for the error message, nor would we use the error message if one got constructed. > + result->parse_error = > + pstrdup("found empty string where a compression option was expected"); > > Needs to be localized with _() ? > Also, document that it's pstrdup'd. Did the latter. The former would need to be fixed in a bunch of places and while I'm happy to accept an expert opinion on exactly what needs to be done here, I don't want to try to do it and do it wrong. Better to let someone with good knowledge of the subject matter patch it up later than do a crummy job now. > -1 isn't great, since it's also an integer, and, also a valid compression level > for zstd (did you see my message about that?). Maybe INT_MIN is ok. It really doesn't matter. Could just return 42. The client shouldn't use the value if there's an error. > +{ > + int ivalue; > + char *ivalue_endp; > + > + ivalue = strtol(value, &ivalue_endp, 10); > > Should this also set/check errno ? > And check if value != ivalue_endp ? > See strtol(3) Even after reading the man page for strtol, it's not clear to me that this is needed. That page represents checking *endptr != '\0' as sufficient to tell whether an error occurred. Maybe it wouldn't catch an out of range value, but in practice all of the algorithms we support now and any we support in the future are going to catch something clamped to LONG_MIN or LONG_MAX as out of range and display the correct error message. What's your specific thinking here? > + unsigned options; /* OR of BACKUP_COMPRESSION_OPTION constants */ > > Should be "unsigned int" or "bits32" ? I do not see why either of those would be better. > The server crashes if I send an unknown option - you should hit that in the > regression tests. Turns out I was testing this on the client side but not the server side. Fixed and added more tests. v2 attached. -- Robert Haas EDB: http://www.enterprisedb.com --000000000000c813e005daab106f Content-Type: application/octet-stream; name="v2-0001-Replace-BASE_BACKUP-COMPRESSION_LEVEL-option-with.patch" Content-Disposition: attachment; filename="v2-0001-Replace-BASE_BACKUP-COMPRESSION_LEVEL-option-with.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l0znfme50 RnJvbSBkMTU3YjMwYWRhZGIyNmZmZDRmMDI2MmQwYmM1MzExOWVlYzZlOGU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFN1biwgMjAgTWFyIDIwMjIgMTQ6NDg6MTkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyXSBS ZXBsYWNlIEJBU0VfQkFDS1VQIENPTVBSRVNTSU9OX0xFVkVMIG9wdGlvbiB3aXRoCiBDT01QUkVT U0lPTl9ERVRBSUwuCgpUaGVyZSBhcmUgbW9yZSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIHRoYXQg Y2FuIGJlIHNwZWNpZmllZCB0aGFuIGp1c3QKYW4gaW50ZWdlciBjb21wcmVzc2lvbiBsZXZlbCwg c28gcmVuYW1lIHRoZSBuZXcgQ09NUFJFU1NJT05fTEVWRUwKb3B0aW9uIHRvIENPTVBSRVNTSU9O X0RFVEFJTCBiZWZvcmUgaXQgZ2V0cyByZWxlYXNlZC4gSW50cm9kdWNlIGEKZmxleGlibGUgc3lu dGF4IGZvciB0aGF0IG9wdGlvbiB0byBhbGxvdyBhcmJpdHJhcnkgb3B0aW9ucyB0byBiZQpzcGVj aWZpZWQgd2l0aG91dCBuZWVkaW5nIHRvIGFkanVzdCB0aGUgbWFpbiByZXBsaWNhdGlvbiBncmFt bWFyLAphbmQgY29tbW9uIGNvZGUgdG8gcGFyc2UgaXQgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiB0 aGUgY2xpZW50IGFuZAp0aGUgc2VydmVyLgoKVGhpcyBjb21taXQgZG9lc24ndCBhY3R1YWxseSBh ZGQgYW55IG5ldyBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLApzbyB0aGUgb25seSB1c2VyLXZpc2li bGUgY2hhbmdlIGlzIHRoYXQgeW91IGNhbiBub3cgdHlwZSBzb21ldGhpbmcKbGlrZSBwZ19iYXNl YmFja3VwIC0tY29tcHJlc3MgZ3ppcDpsZXZlbD01IGluc3RlYWQgb2Ygd3JpdGluZyBqdXN0CnBn X2Jhc2ViYWNrdXAgLS1jb21wcmVzcyBnemlwOjUuIEhvd2V2ZXIsIGl0IHNob3VsZCBtYWtlIGl0 IGVhc3kgdG8KYWRkIG5ldyBvcHRpb25zLiBJZiBmb3IgZXhhbXBsZSBnemlwIHN0YXJ0cyBvZmZl cmluZyBmcmllcywgd2UgY2FuCnN1cHBvcnQgcGdfYmFzZWJhY2t1cCAtLWNvbXByZXNzIGd6aXA6 bGV2ZWw9NSxmcmllcz10cnVlIGZvciB0aGUKYmVuZWZpdCBvZiB1c2VycyB3aG8gd2FudCBmcmll cyB3aXRoIHRoYXQuCgpBbG9uZyB0aGUgd2F5LCB0aGlzIGZpeGVzIGEgZmV3IHRoaW5ncyBpbiBw Z19iYXNlYmFja3VwIHNvIHRoYXQgdGhlCnBnX2Jhc2ViYWNrdXAgY2FuIGJlIHVzZWQgd2l0aCBh IHNlcnZlci1zaWRlIGNvbXByZXNzaW9uIGFsZ29yaXRobQp0aGF0IHBnX2Jhc2ViYWNrdXAgaXRz ZWxmIGRvZXMgbm90IHVuZGVyc3RhbmQuIEZvciBleGFtcGxlLApwZ19iYXNlYmFja3VwIC0tY29t cHJlc3Mgc2VydmVyLWx6NCBjb3VsZCBzdGlsbCBzdWNjZWVkIGV2ZW4gaWYKb25seSB0aGUgc2Vy dmVyIGFuZCBub3QgdGhlIGNsaWVudCBoYXMgTFo0IHN1cHBvcnQsIHByb3ZpZGVkIHRoYXQKdGhl IG90aGVyIG9wdGlvbnMgdG8gcGdfYmFzZWJhY2t1cCBkb24ndCByZXF1aXJlIHRoZSBjbGllbnQg dG8KZGVjb21wcmVzcyB0aGUgYXJjaGl2ZS4KClBhdGNoIGJ5IG1lLiBSZXZpZXdlZCBieSBKdXN0 aW4gUHJ5emJ5LgotLS0KIGRvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sICAgICAgICAgICAgICAg ICAgIHwgIDE4ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9iYXNlYmFja3VwLmMgICAgICAg ICB8ICA2MiArLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2Jhc2ViYWNrdXBfZ3ppcC5jICAg IHwgIDIwICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9iYXNlYmFja3VwX2x6NC5jICAgICB8 ICAxOSArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cF96c3RkLmMgICAgfCAg MTkgKy0KIHNyYy9iaW4vcGdfYmFzZWJhY2t1cC9iYnN0cmVhbWVyLmggICAgICAgICAgIHwgICA3 ICstCiBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvYmJzdHJlYW1lcl9nemlwLmMgICAgICB8ICAgNyAr LQogc3JjL2Jpbi9wZ19iYXNlYmFja3VwL2Jic3RyZWFtZXJfbHo0LmMgICAgICAgfCAgIDQgKy0K IHNyYy9iaW4vcGdfYmFzZWJhY2t1cC9iYnN0cmVhbWVyX3pzdGQuYyAgICAgIHwgICA0ICstCiBz cmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1cC5jICAgICAgICB8IDQwNSArKysrKysr Ky0tLS0tLS0tLS0tCiBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wMTBfcGdfYmFzZWJhY2t1cC5w bCB8ICA0MSArLQogc3JjL2NvbW1vbi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDEgKwogc3JjL2NvbW1vbi9iYWNrdXBfY29tcHJlc3Npb24uYyAgICAgICAgICAgICAgfCAy NTggKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9jb21tb24vYmFja3VwX2NvbXByZXNzaW9uLmgg ICAgICB8ICA0NCArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vYmFzZWJhY2t1cF9zaW5rLmgg ICAgfCAgIDcgKy0KIHNyYy90b29scy9tc3ZjL01rdmNidWlsZC5wbSAgICAgICAgICAgICAgICAg IHwgICAyICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICB8 ICAgMiArCiAxNyBmaWxlcyBjaGFuZ2VkLCA2MDUgaW5zZXJ0aW9ucygrKSwgMzE1IGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9jb21tb24vYmFja3VwX2NvbXByZXNzaW9uLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9jb21tb24vYmFja3VwX2NvbXByZXNzaW9u LmgKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbCBiL2RvYy9zcmMvc2dt bC9wcm90b2NvbC5zZ21sCmluZGV4IDkxNzhjNzc5YmEuLjAwYzU5M2YxYWYgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5z Z21sCkBAIC0yNzMxLDE0ICsyNzMxLDI0IEBAIFRoZSBjb21tYW5kcyBhY2NlcHRlZCBpbiByZXBs aWNhdGlvbiBtb2RlIGFyZToKICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICAgIDx2YXJs aXN0ZW50cnk+Ci0gICAgICAgIDx0ZXJtPjxsaXRlcmFsPkNPTVBSRVNTSU9OX0xFVkVMPC9saXRl cmFsPiA8cmVwbGFjZWFibGU+bGV2ZWw8L3JlcGxhY2VhYmxlPjwvdGVybT4KKyAgICAgICAgPHRl cm0+PGxpdGVyYWw+Q09NUFJFU1NJT05fREVUQUlMPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ZGV0 YWlsPC9yZXBsYWNlYWJsZT48L3Rlcm0+CiAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgIDxw YXJhPgogICAgICAgICAgIFNwZWNpZmllcyB0aGUgY29tcHJlc3Npb24gbGV2ZWwgdG8gYmUgdXNl ZC4gVGhpcyBzaG91bGQgb25seSBiZQogICAgICAgICAgIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0 aCB0aGUgPGxpdGVyYWw+Q09NUFJFU1NJT048L2xpdGVyYWw+IG9wdGlvbi4KLSAgICAgICAgICBG b3IgPGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4gdGhlIHZhbHVlIHNob3VsZCBiZSBhbiBpbnRlZ2Vy IGJldHdlZW4gMQotICAgICAgICAgIGFuZCA5LCBmb3IgPGxpdGVyYWw+bHo0PC9saXRlcmFsPiBi ZXR3ZWVuIDEgYW5kIDEyLCBhbmQgZm9yCi0gICAgICAgICAgPGxpdGVyYWw+enN0ZDwvbGl0ZXJh bD4gaXQgc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMjIuCisgICAgICAgICAgSWYgdGhlIHZhbHVl IGlzIGFuIGludGVnZXIsIGl0IHNwZWNpZmllcyB0aGUgY29tcHJlc3Npb24gbGV2ZWwuCisgICAg ICAgICAgT3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBp dGVtcywgZWFjaCBvZgorICAgICAgICAgIHRoZSBmb3JtIDxsaXRlcmFsPmtleXdvcmQ8L2xpdGVy YWw+IG9yCisgICAgICAgICAgPGxpdGVyYWw+a2V5d29yZD12YWx1ZTwvbGl0ZXJhbD4uIEN1cnJl bnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkCisgICAgICAgICAga2V5d29yZCBpcyA8bGl0ZXJhbD5s ZXZlbDwvbGl0ZXJhbD4sIHdoaWNoIHNldHMgdGhlIGNvbXByZXNzaW9uCisgICAgICAgICAgbGV2 ZWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBGb3IgPGxp dGVyYWw+Z3ppcDwvbGl0ZXJhbD4gdGhlIGNvbXByZXNzaW9uIGxldmVsIHNob3VsZCBiZSBhbgor ICAgICAgICAgIGludGVnZXIgYmV0d2VlbiAxIGFuZCA5LCBmb3IgPGxpdGVyYWw+bHo0PC9saXRl cmFsPiBhbiBpbnRlZ2VyCisgICAgICAgICAgYmV0d2VlbiAxIGFuZCAxMiwgYW5kIGZvciA8bGl0 ZXJhbD56c3RkPC9saXRlcmFsPiBhbiBpbnRlZ2VyCisgICAgICAgICAgYmV0d2VlbiAxIGFuZCAy Mi4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxp c3RlbnRyeT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2Jhc2ViYWNrdXAu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2Jhc2ViYWNrdXAuYwppbmRleCBjMmFlZGMxNGEy Li40OWRlZWFkMDkxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9iYXNlYmFj a3VwLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cC5jCkBAIC0xNyw2 ICsxNyw3IEBACiAjaW5jbHVkZSA8dGltZS5oPgogCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50 ZXJuYWwuaCIJLyogZm9yIHBnX3N0YXJ0L3N0b3BfYmFja3VwICovCisjaW5jbHVkZSAiY29tbW9u L2JhY2t1cF9jb21wcmVzc2lvbi5oIgogI2luY2x1ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKICNp bmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgpA QCAtNTQsMTQgKzU1LDYgQEAKICAqLwogI2RlZmluZSBTSU5LX0JVRkZFUl9MRU5HVEgJCQlNYXgo MzI3NjgsIEJMQ0tTWikKIAotdHlwZWRlZiBlbnVtCi17Ci0JQkFDS1VQX0NPTVBSRVNTSU9OX05P TkUsCi0JQkFDS1VQX0NPTVBSRVNTSU9OX0daSVAsCi0JQkFDS1VQX0NPTVBSRVNTSU9OX0xaNCwK LQlCQUNLVVBfQ09NUFJFU1NJT05fWlNURAotfSBiYXNlYmFja3VwX2NvbXByZXNzaW9uX3R5cGU7 Ci0KIHR5cGVkZWYgc3RydWN0CiB7CiAJY29uc3QgY2hhciAqbGFiZWw7CkBAIC03NSw4ICs2OCw4 IEBAIHR5cGVkZWYgc3RydWN0CiAJYm9vbAkJdXNlX2NvcHl0YmxzcGM7CiAJQmFzZUJhY2t1cFRh cmdldEhhbmRsZSAqdGFyZ2V0X2hhbmRsZTsKIAliYWNrdXBfbWFuaWZlc3Rfb3B0aW9uIG1hbmlm ZXN0OwotCWJhc2ViYWNrdXBfY29tcHJlc3Npb25fdHlwZQljb21wcmVzc2lvbjsKLQlpbnQJCQlj b21wcmVzc2lvbl9sZXZlbDsKKwliY19hbGdvcml0aG0JY29tcHJlc3Npb247CisJYmNfc3BlY2lm aWNhdGlvbgljb21wcmVzc2lvbl9zcGVjaWZpY2F0aW9uOwogCXBnX2NoZWNrc3VtX3R5cGUgbWFu aWZlc3RfY2hlY2tzdW1fdHlwZTsKIH0gYmFzZWJhY2t1cF9vcHRpb25zOwogCkBAIC03MTMsMTIg KzcwNiwxNCBAQCBwYXJzZV9iYXNlYmFja3VwX29wdGlvbnMoTGlzdCAqb3B0aW9ucywgYmFzZWJh Y2t1cF9vcHRpb25zICpvcHQpCiAJY2hhcgkgICAqdGFyZ2V0X3N0ciA9IE5VTEw7CiAJY2hhcgkg ICAqdGFyZ2V0X2RldGFpbF9zdHIgPSBOVUxMOwogCWJvb2wJCW9fY29tcHJlc3Npb24gPSBmYWxz ZTsKLQlib29sCQlvX2NvbXByZXNzaW9uX2xldmVsID0gZmFsc2U7CisJYm9vbAkJb19jb21wcmVz c2lvbl9kZXRhaWwgPSBmYWxzZTsKKwljaGFyCSAgICpjb21wcmVzc2lvbl9kZXRhaWxfc3RyID0g TlVMTDsKIAogCU1lbVNldChvcHQsIDAsIHNpemVvZigqb3B0KSk7CiAJb3B0LT5tYW5pZmVzdCA9 IE1BTklGRVNUX09QVElPTl9OTzsKIAlvcHQtPm1hbmlmZXN0X2NoZWNrc3VtX3R5cGUgPSBDSEVD S1NVTV9UWVBFX0NSQzMyQzsKIAlvcHQtPmNvbXByZXNzaW9uID0gQkFDS1VQX0NPTVBSRVNTSU9O X05PTkU7CisJb3B0LT5jb21wcmVzc2lvbl9zcGVjaWZpY2F0aW9uLmFsZ29yaXRobSA9IEJBQ0tV UF9DT01QUkVTU0lPTl9OT05FOwogCiAJZm9yZWFjaChsb3B0LCBvcHRpb25zKQogCXsKQEAgLTg4 NSwyOSArODgwLDIxIEBAIHBhcnNlX2Jhc2ViYWNrdXBfb3B0aW9ucyhMaXN0ICpvcHRpb25zLCBi YXNlYmFja3VwX29wdGlvbnMgKm9wdCkKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCQkJIGVycm1zZygiZHVwbGljYXRlIG9wdGlv biBcIiVzXCIiLCBkZWZlbC0+ZGVmbmFtZSkpKTsKLQkJCWlmIChzdHJjbXAob3B0dmFsLCAibm9u ZSIpID09IDApCi0JCQkJb3B0LT5jb21wcmVzc2lvbiA9IEJBQ0tVUF9DT01QUkVTU0lPTl9OT05F OwotCQkJZWxzZSBpZiAoc3RyY21wKG9wdHZhbCwgImd6aXAiKSA9PSAwKQotCQkJCW9wdC0+Y29t cHJlc3Npb24gPSBCQUNLVVBfQ09NUFJFU1NJT05fR1pJUDsKLQkJCWVsc2UgaWYgKHN0cmNtcChv cHR2YWwsICJsejQiKSA9PSAwKQotCQkJCW9wdC0+Y29tcHJlc3Npb24gPSBCQUNLVVBfQ09NUFJF U1NJT05fTFo0OwotCQkJZWxzZSBpZiAoc3RyY21wKG9wdHZhbCwgInpzdGQiKSA9PSAwKQotCQkJ CW9wdC0+Y29tcHJlc3Npb24gPSBCQUNLVVBfQ09NUFJFU1NJT05fWlNURDsKLQkJCWVsc2UKKwkJ CWlmICghcGFyc2VfYmNfYWxnb3JpdGhtKG9wdHZhbCwgJm9wdC0+Y29tcHJlc3Npb24pKQogCQkJ CWVyZXBvcnQoRVJST1IsCiAJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0J CQkJCQkgZXJybXNnKCJ1bnJlY29nbml6ZWQgY29tcHJlc3Npb24gYWxnb3JpdGhtOiBcIiVzXCIi LAorCQkJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIGNvbXByZXNzaW9uIGFsZ29yaXRobSBcIiVz XCIiLAogCQkJCQkJCQlvcHR2YWwpKSk7CiAJCQlvX2NvbXByZXNzaW9uID0gdHJ1ZTsKIAkJfQot CQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJjb21wcmVzc2lvbl9sZXZlbCIpID09 IDApCisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImNvbXByZXNzaW9uX2RldGFp bCIpID09IDApCiAJCXsKLQkJCWlmIChvX2NvbXByZXNzaW9uX2xldmVsKQorCQkJaWYgKG9fY29t cHJlc3Npb25fZGV0YWlsKQogCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkoZXJyY29kZShFUlJD T0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJCQkgZXJybXNnKCJkdXBsaWNhdGUgb3B0aW9uIFwiJXNc IiIsIGRlZmVsLT5kZWZuYW1lKSkpOwotCQkJb3B0LT5jb21wcmVzc2lvbl9sZXZlbCA9IGRlZkdl dEludDMyKGRlZmVsKTsKLQkJCW9fY29tcHJlc3Npb25fbGV2ZWwgPSB0cnVlOworCQkJY29tcHJl c3Npb25fZGV0YWlsX3N0ciA9IGRlZkdldFN0cmluZyhkZWZlbCk7CisJCQlvX2NvbXByZXNzaW9u X2RldGFpbCA9IHRydWU7CiAJCX0KIAkJZWxzZQogCQkJZXJlcG9ydChFUlJPUiwKQEAgLTk0OSwx MCArOTM2LDI1IEBAIHBhcnNlX2Jhc2ViYWNrdXBfb3B0aW9ucyhMaXN0ICpvcHRpb25zLCBiYXNl YmFja3VwX29wdGlvbnMgKm9wdCkKIAkJb3B0LT50YXJnZXRfaGFuZGxlID0KIAkJCUJhc2VCYWNr dXBHZXRUYXJnZXRIYW5kbGUodGFyZ2V0X3N0ciwgdGFyZ2V0X2RldGFpbF9zdHIpOwogCi0JaWYg KG9fY29tcHJlc3Npb25fbGV2ZWwgJiYgIW9fY29tcHJlc3Npb24pCisJaWYgKG9fY29tcHJlc3Np b25fZGV0YWlsICYmICFvX2NvbXByZXNzaW9uKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJj b2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKLQkJCQkgZXJybXNnKCJjb21wcmVzc2lvbiBsZXZl bCByZXF1aXJlcyBjb21wcmVzc2lvbiIpKSk7CisJCQkJIGVycm1zZygiY29tcHJlc3Npb24gZGV0 YWlsIHJlcXVpcmVzIGNvbXByZXNzaW9uIikpKTsKKworCWlmIChvX2NvbXByZXNzaW9uKQorCXsK KwkJY2hhciAgICplcnJvcl9kZXRhaWw7CisKKwkJcGFyc2VfYmNfc3BlY2lmaWNhdGlvbihvcHQt PmNvbXByZXNzaW9uLCBjb21wcmVzc2lvbl9kZXRhaWxfc3RyLAorCQkJCQkJCSAgICZvcHQtPmNv bXByZXNzaW9uX3NwZWNpZmljYXRpb24pOworCQllcnJvcl9kZXRhaWwgPQorCQkJdmFsaWRhdGVf YmNfc3BlY2lmaWNhdGlvbigmb3B0LT5jb21wcmVzc2lvbl9zcGVjaWZpY2F0aW9uKTsKKwkJaWYg KGVycm9yX2RldGFpbCAhPSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShF UlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCWVycm1zZygiaW52YWxpZCBjb21wcmVzc2lvbiBz cGVjaWZpY2F0aW9uOiAlcyIsCisJCQkJCQkgICBlcnJvcl9kZXRhaWwpKTsKKwl9CiB9CiAKIApA QCAtOTk4LDExICsxMDAwLDExIEBAIFNlbmRCYXNlQmFja3VwKEJhc2VCYWNrdXBDbWQgKmNtZCkK IAogCS8qIFNldCB1cCBzZXJ2ZXItc2lkZSBjb21wcmVzc2lvbiwgaWYgY2xpZW50IHJlcXVlc3Rl ZCBpdCAqLwogCWlmIChvcHQuY29tcHJlc3Npb24gPT0gQkFDS1VQX0NPTVBSRVNTSU9OX0daSVAp Ci0JCXNpbmsgPSBiYnNpbmtfZ3ppcF9uZXcoc2luaywgb3B0LmNvbXByZXNzaW9uX2xldmVsKTsK KwkJc2luayA9IGJic2lua19nemlwX25ldyhzaW5rLCAmb3B0LmNvbXByZXNzaW9uX3NwZWNpZmlj YXRpb24pOwogCWVsc2UgaWYgKG9wdC5jb21wcmVzc2lvbiA9PSBCQUNLVVBfQ09NUFJFU1NJT05f TFo0KQotCQlzaW5rID0gYmJzaW5rX2x6NF9uZXcoc2luaywgb3B0LmNvbXByZXNzaW9uX2xldmVs KTsKKwkJc2luayA9IGJic2lua19sejRfbmV3KHNpbmssICZvcHQuY29tcHJlc3Npb25fc3BlY2lm aWNhdGlvbik7CiAJZWxzZSBpZiAob3B0LmNvbXByZXNzaW9uID09IEJBQ0tVUF9DT01QUkVTU0lP Tl9aU1REKQotCQlzaW5rID0gYmJzaW5rX3pzdGRfbmV3KHNpbmssIG9wdC5jb21wcmVzc2lvbl9s ZXZlbCk7CisJCXNpbmsgPSBiYnNpbmtfenN0ZF9uZXcoc2luaywgJm9wdC5jb21wcmVzc2lvbl9z cGVjaWZpY2F0aW9uKTsKIAogCS8qIFNldCB1cCBwcm9ncmVzcyByZXBvcnRpbmcuICovCiAJc2lu ayA9IGJic2lua19wcm9ncmVzc19uZXcoc2luaywgb3B0LnByb2dyZXNzKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2Jhc2ViYWNrdXBfZ3ppcC5jIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vYmFzZWJhY2t1cF9nemlwLmMKaW5kZXggYjY2ZDNkYTdhMy4uNzAzYTkxYmE3 NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cF9nemlwLmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cF9nemlwLmMKQEAgLTU2LDEy ICs1NiwxMyBAQCBjb25zdCBiYnNpbmtfb3BzIGJic2lua19nemlwX29wcyA9IHsKICNlbmRpZgog CiAvKgotICogQ3JlYXRlIGEgbmV3IGJhc2ViYWNrdXAgc2luayB0aGF0IHBlcmZvcm1zIGd6aXAg Y29tcHJlc3Npb24gdXNpbmcgdGhlCi0gKiBkZXNpZ25hdGVkIGNvbXByZXNzaW9uIGxldmVsLgor ICogQ3JlYXRlIGEgbmV3IGJhc2ViYWNrdXAgc2luayB0aGF0IHBlcmZvcm1zIGd6aXAgY29tcHJl c3Npb24uCiAgKi8KIGJic2luayAqCi1iYnNpbmtfZ3ppcF9uZXcoYmJzaW5rICpuZXh0LCBpbnQg Y29tcHJlc3NsZXZlbCkKK2Jic2lua19nemlwX25ldyhiYnNpbmsgKm5leHQsIGJjX3NwZWNpZmlj YXRpb24gKmNvbXByZXNzKQogeworCWludAkJY29tcHJlc3NsZXZlbDsKKwogI2lmbmRlZiBIQVZF X0xJQloKIAllcmVwb3J0KEVSUk9SLAogCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9T VVBQT1JURUQpLApAQCAtNzEsMTUgKzcyLDE0IEBAIGJic2lua19nemlwX25ldyhiYnNpbmsgKm5l eHQsIGludCBjb21wcmVzc2xldmVsKQogCWJic2lua19nemlwICpzaW5rOwogCiAJQXNzZXJ0KG5l eHQgIT0gTlVMTCk7Ci0JQXNzZXJ0KGNvbXByZXNzbGV2ZWwgPj0gMCAmJiBjb21wcmVzc2xldmVs IDw9IDkpOwogCi0JaWYgKGNvbXByZXNzbGV2ZWwgPT0gMCkKKwlpZiAoKGNvbXByZXNzLT5vcHRp b25zICYgQkFDS1VQX0NPTVBSRVNTSU9OX09QVElPTl9MRVZFTCkgPT0gMCkKIAkJY29tcHJlc3Ns ZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKLQllbHNlIGlmIChjb21wcmVzc2xldmVsIDwg MCB8fCBjb21wcmVzc2xldmVsID4gOSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShF UlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJIGVycm1zZygiZ3ppcCBjb21wcmVz c2lvbiBsZXZlbCAlZCBpcyBvdXQgb2YgcmFuZ2UiLAotCQkJCQkJY29tcHJlc3NsZXZlbCkpKTsK KwllbHNlCisJeworCQljb21wcmVzc2xldmVsID0gY29tcHJlc3MtPmxldmVsOworCQlBc3NlcnQo Y29tcHJlc3NsZXZlbCA+PSAxICYmIGNvbXByZXNzbGV2ZWwgPD0gOSk7CisJfQogCiAJc2luayA9 IHBhbGxvYzAoc2l6ZW9mKGJic2lua19nemlwKSk7CiAJKigoY29uc3QgYmJzaW5rX29wcyAqKikg JnNpbmstPmJhc2UuYmJzX29wcykgPSAmYmJzaW5rX2d6aXBfb3BzOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cF9sejQuYyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2Jhc2ViYWNrdXBfbHo0LmMKaW5kZXggZDgzOGY3MjNkMC4uMDZjMTYxZGRjNCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cF9sejQuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9iYXNlYmFja3VwX2x6NC5jCkBAIC01NiwxMiArNTYsMTMg QEAgY29uc3QgYmJzaW5rX29wcyBiYnNpbmtfbHo0X29wcyA9IHsKICNlbmRpZgogCiAvKgotICog Q3JlYXRlIGEgbmV3IGJhc2ViYWNrdXAgc2luayB0aGF0IHBlcmZvcm1zIGx6NCBjb21wcmVzc2lv biB1c2luZyB0aGUKLSAqIGRlc2lnbmF0ZWQgY29tcHJlc3Npb24gbGV2ZWwuCisgKiBDcmVhdGUg YSBuZXcgYmFzZWJhY2t1cCBzaW5rIHRoYXQgcGVyZm9ybXMgbHo0IGNvbXByZXNzaW9uLgogICov CiBiYnNpbmsgKgotYmJzaW5rX2x6NF9uZXcoYmJzaW5rICpuZXh0LCBpbnQgY29tcHJlc3NsZXZl bCkKK2Jic2lua19sejRfbmV3KGJic2luayAqbmV4dCwgYmNfc3BlY2lmaWNhdGlvbiAqY29tcHJl c3MpCiB7CisJaW50CQljb21wcmVzc2xldmVsOworCiAjaWZuZGVmIFVTRV9MWjQKIAllcmVwb3J0 KEVSUk9SLAogCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLApAQCAt NzIsMTEgKzczLDEzIEBAIGJic2lua19sejRfbmV3KGJic2luayAqbmV4dCwgaW50IGNvbXByZXNz bGV2ZWwpCiAKIAlBc3NlcnQobmV4dCAhPSBOVUxMKTsKIAotCWlmIChjb21wcmVzc2xldmVsIDwg MCB8fCBjb21wcmVzc2xldmVsID4gMTIpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCSBlcnJtc2coImx6NCBjb21wcmVz c2lvbiBsZXZlbCAlZCBpcyBvdXQgb2YgcmFuZ2UiLAotCQkJCQkJY29tcHJlc3NsZXZlbCkpKTsK KwlpZiAoKGNvbXByZXNzLT5vcHRpb25zICYgQkFDS1VQX0NPTVBSRVNTSU9OX09QVElPTl9MRVZF TCkgPT0gMCkKKwkJY29tcHJlc3NsZXZlbCA9IDA7CisJZWxzZQorCXsKKwkJY29tcHJlc3NsZXZl bCA9IGNvbXByZXNzLT5sZXZlbDsKKwkJQXNzZXJ0KGNvbXByZXNzbGV2ZWwgPj0gMSAmJiBjb21w cmVzc2xldmVsIDw9IDEyKTsKKwl9CiAKIAlzaW5rID0gcGFsbG9jMChzaXplb2YoYmJzaW5rX2x6 NCkpOwogCSooKGNvbnN0IGJic2lua19vcHMgKiopICZzaW5rLT5iYXNlLmJic19vcHMpID0gJmJi c2lua19sejRfb3BzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJh Y2t1cF96c3RkLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9iYXNlYmFja3VwX3pzdGQuYwpp bmRleCBjMGUyYmU2ZTI3Li45NmI3OTg1NjkzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9iYXNlYmFja3VwX3pzdGQuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9i YXNlYmFja3VwX3pzdGQuYwpAQCAtNTUsMTIgKzU1LDEzIEBAIGNvbnN0IGJic2lua19vcHMgYmJz aW5rX3pzdGRfb3BzID0gewogI2VuZGlmCiAKIC8qCi0gKiBDcmVhdGUgYSBuZXcgYmFzZWJhY2t1 cCBzaW5rIHRoYXQgcGVyZm9ybXMgenN0ZCBjb21wcmVzc2lvbiB1c2luZyB0aGUKLSAqIGRlc2ln bmF0ZWQgY29tcHJlc3Npb24gbGV2ZWwuCisgKiBDcmVhdGUgYSBuZXcgYmFzZWJhY2t1cCBzaW5r IHRoYXQgcGVyZm9ybXMgenN0ZCBjb21wcmVzc2lvbi4KICAqLwogYmJzaW5rICoKLWJic2lua196 c3RkX25ldyhiYnNpbmsgKm5leHQsIGludCBjb21wcmVzc2xldmVsKQorYmJzaW5rX3pzdGRfbmV3 KGJic2luayAqbmV4dCwgYmNfc3BlY2lmaWNhdGlvbiAqY29tcHJlc3MpCiB7CisJaW50CQljb21w cmVzc2xldmVsOworCiAjaWZuZGVmIFVTRV9aU1RECiAJZXJlcG9ydChFUlJPUiwKIAkJCShlcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKQEAgLTcxLDExICs3MiwxMyBAQCBi YnNpbmtfenN0ZF9uZXcoYmJzaW5rICpuZXh0LCBpbnQgY29tcHJlc3NsZXZlbCkKIAogCUFzc2Vy dChuZXh0ICE9IE5VTEwpOwogCi0JaWYgKGNvbXByZXNzbGV2ZWwgPCAwIHx8IGNvbXByZXNzbGV2 ZWwgPiAyMikKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksCi0JCQkJIGVycm1zZygienN0ZCBjb21wcmVzc2lvbiBsZXZlbCAlZCBp cyBvdXQgb2YgcmFuZ2UiLAotCQkJCQkJY29tcHJlc3NsZXZlbCkpKTsKKwlpZiAoKGNvbXByZXNz LT5vcHRpb25zICYgQkFDS1VQX0NPTVBSRVNTSU9OX09QVElPTl9MRVZFTCkgPT0gMCkKKwkJY29t cHJlc3NsZXZlbCA9IDA7CisJZWxzZQorCXsKKwkJY29tcHJlc3NsZXZlbCA9IGNvbXByZXNzLT5s ZXZlbDsKKwkJQXNzZXJ0KGNvbXByZXNzbGV2ZWwgPj0gMSAmJiBjb21wcmVzc2xldmVsIDw9IDIy KTsKKwl9CiAKIAlzaW5rID0gcGFsbG9jMChzaXplb2YoYmJzaW5rX3pzdGQpKTsKIAkqKChjb25z dCBiYnNpbmtfb3BzICoqKSAmc2luay0+YmFzZS5iYnNfb3BzKSA9ICZiYnNpbmtfenN0ZF9vcHM7 CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvYmJzdHJlYW1lci5oIGIvc3JjL2Jp bi9wZ19iYXNlYmFja3VwL2Jic3RyZWFtZXIuaAppbmRleCAwMmQ0YzA1ZGY2Li5kZmEzZjc3YWY0 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvYmJzdHJlYW1lci5oCisrKyBiL3Ny Yy9iaW4vcGdfYmFzZWJhY2t1cC9iYnN0cmVhbWVyLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpZm5k ZWYgQkJTVFJFQU1FUl9ICiAjZGVmaW5lIEJCU1RSRUFNRVJfSAogCisjaW5jbHVkZSAiY29tbW9u L2JhY2t1cF9jb21wcmVzc2lvbi5oIgogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCiAjaW5j bHVkZSAicHFleHBidWZmZXIuaCIKIApAQCAtMjAwLDE3ICsyMDEsMTcgQEAgYmJzdHJlYW1lcl9i dWZmZXJfdW50aWwoYmJzdHJlYW1lciAqc3RyZWFtZXIsIGNvbnN0IGNoYXIgKipkYXRhLCBpbnQg KmxlbiwKICAqLwogZXh0ZXJuIGJic3RyZWFtZXIgKmJic3RyZWFtZXJfcGxhaW5fd3JpdGVyX25l dyhjaGFyICpwYXRobmFtZSwgRklMRSAqZmlsZSk7CiBleHRlcm4gYmJzdHJlYW1lciAqYmJzdHJl YW1lcl9nemlwX3dyaXRlcl9uZXcoY2hhciAqcGF0aG5hbWUsIEZJTEUgKmZpbGUsCi0JCQkJCQkJ CQkJCSAgaW50IGNvbXByZXNzbGV2ZWwpOworCQkJCQkJCQkJCQkgIGJjX3NwZWNpZmljYXRpb24g KmNvbXByZXNzKTsKIGV4dGVybiBiYnN0cmVhbWVyICpiYnN0cmVhbWVyX2V4dHJhY3Rvcl9uZXco Y29uc3QgY2hhciAqYmFzZXBhdGgsCiAJCQkJCQkJCQkJCWNvbnN0IGNoYXIgKigqbGlua19tYXAp IChjb25zdCBjaGFyICopLAogCQkJCQkJCQkJCQl2b2lkICgqcmVwb3J0X291dHB1dF9maWxlKSAo Y29uc3QgY2hhciAqKSk7CiAKIGV4dGVybiBiYnN0cmVhbWVyICpiYnN0cmVhbWVyX2d6aXBfZGVj b21wcmVzc29yX25ldyhiYnN0cmVhbWVyICpuZXh0KTsKIGV4dGVybiBiYnN0cmVhbWVyICpiYnN0 cmVhbWVyX2x6NF9jb21wcmVzc29yX25ldyhiYnN0cmVhbWVyICpuZXh0LAotCQkJCQkJCQkJCQkJ IGludCBjb21wcmVzc2xldmVsKTsKKwkJCQkJCQkJCQkJCSBiY19zcGVjaWZpY2F0aW9uICpjb21w cmVzcyk7CiBleHRlcm4gYmJzdHJlYW1lciAqYmJzdHJlYW1lcl9sejRfZGVjb21wcmVzc29yX25l dyhiYnN0cmVhbWVyICpuZXh0KTsKIGV4dGVybiBiYnN0cmVhbWVyICpiYnN0cmVhbWVyX3pzdGRf Y29tcHJlc3Nvcl9uZXcoYmJzdHJlYW1lciAqbmV4dCwKLQkJCQkJCQkJCQkJCSAgaW50IGNvbXBy ZXNzbGV2ZWwpOworCQkJCQkJCQkJCQkJICBiY19zcGVjaWZpY2F0aW9uICpjb21wcmVzcyk7CiBl eHRlcm4gYmJzdHJlYW1lciAqYmJzdHJlYW1lcl96c3RkX2RlY29tcHJlc3Nvcl9uZXcoYmJzdHJl YW1lciAqbmV4dCk7CiBleHRlcm4gYmJzdHJlYW1lciAqYmJzdHJlYW1lcl90YXJfcGFyc2VyX25l dyhiYnN0cmVhbWVyICpuZXh0KTsKIGV4dGVybiBiYnN0cmVhbWVyICpiYnN0cmVhbWVyX3Rhcl90 ZXJtaW5hdG9yX25ldyhiYnN0cmVhbWVyICpuZXh0KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf YmFzZWJhY2t1cC9iYnN0cmVhbWVyX2d6aXAuYyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9iYnN0 cmVhbWVyX2d6aXAuYwppbmRleCA4OTRmODU3MTAzLi4xOTc5ZTk1NjM5IDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2Jhc2ViYWNrdXAvYmJzdHJlYW1lcl9nemlwLmMKKysrIGIvc3JjL2Jpbi9wZ19i YXNlYmFja3VwL2Jic3RyZWFtZXJfZ3ppcC5jCkBAIC03Niw3ICs3Niw4IEBAIGNvbnN0IGJic3Ry ZWFtZXJfb3BzIGJic3RyZWFtZXJfZ3ppcF9kZWNvbXByZXNzb3Jfb3BzID0gewogICogY2xvc2Vk IHNvIHRoYXQgdGhlIGRhdGEgbWF5IGJlIHdyaXR0ZW4gdGhlcmUuCiAgKi8KIGJic3RyZWFtZXIg KgotYmJzdHJlYW1lcl9nemlwX3dyaXRlcl9uZXcoY2hhciAqcGF0aG5hbWUsIEZJTEUgKmZpbGUs IGludCBjb21wcmVzc2xldmVsKQorYmJzdHJlYW1lcl9nemlwX3dyaXRlcl9uZXcoY2hhciAqcGF0 aG5hbWUsIEZJTEUgKmZpbGUsCisJCQkJCQkgICBiY19zcGVjaWZpY2F0aW9uICpjb21wcmVzcykK IHsKICNpZmRlZiBIQVZFX0xJQloKIAliYnN0cmVhbWVyX2d6aXBfd3JpdGVyICpzdHJlYW1lcjsK QEAgLTExNSwxMSArMTE2LDExIEBAIGJic3RyZWFtZXJfZ3ppcF93cml0ZXJfbmV3KGNoYXIgKnBh dGhuYW1lLCBGSUxFICpmaWxlLCBpbnQgY29tcHJlc3NsZXZlbCkKIAkJfQogCX0KIAotCWlmIChn enNldHBhcmFtcyhzdHJlYW1lci0+Z3pmaWxlLCBjb21wcmVzc2xldmVsLAorCWlmIChnenNldHBh cmFtcyhzdHJlYW1lci0+Z3pmaWxlLCBjb21wcmVzcy0+bGV2ZWwsCiAJCQkJCVpfREVGQVVMVF9T VFJBVEVHWSkgIT0gWl9PSykKIAl7CiAJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IHNldCBjb21w cmVzc2lvbiBsZXZlbCAlZDogJXMiLAotCQkJCQkgY29tcHJlc3NsZXZlbCwgZ2V0X2d6X2Vycm9y KHN0cmVhbWVyLT5nemZpbGUpKTsKKwkJCQkJIGNvbXByZXNzLT5sZXZlbCwgZ2V0X2d6X2Vycm9y KHN0cmVhbWVyLT5nemZpbGUpKTsKIAkJZXhpdCgxKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfYmFzZWJhY2t1cC9iYnN0cmVhbWVyX2x6NC5jIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3Vw L2Jic3RyZWFtZXJfbHo0LmMKaW5kZXggODEwMDUyZTRlMy4uYTZlYzMxN2UyYiAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL2Jic3RyZWFtZXJfbHo0LmMKKysrIGIvc3JjL2Jpbi9w Z19iYXNlYmFja3VwL2Jic3RyZWFtZXJfbHo0LmMKQEAgLTY3LDcgKzY3LDcgQEAgY29uc3QgYmJz dHJlYW1lcl9vcHMgYmJzdHJlYW1lcl9sejRfZGVjb21wcmVzc29yX29wcyA9IHsKICAqIGJsb2Nr cy4KICAqLwogYmJzdHJlYW1lciAqCi1iYnN0cmVhbWVyX2x6NF9jb21wcmVzc29yX25ldyhiYnN0 cmVhbWVyICpuZXh0LCBpbnQgY29tcHJlc3NsZXZlbCkKK2Jic3RyZWFtZXJfbHo0X2NvbXByZXNz b3JfbmV3KGJic3RyZWFtZXIgKm5leHQsIGJjX3NwZWNpZmljYXRpb24gKmNvbXByZXNzKQogewog I2lmZGVmIFVTRV9MWjQKIAliYnN0cmVhbWVyX2x6NF9mcmFtZSAgICpzdHJlYW1lcjsKQEAgLTg5 LDcgKzg5LDcgQEAgYmJzdHJlYW1lcl9sejRfY29tcHJlc3Nvcl9uZXcoYmJzdHJlYW1lciAqbmV4 dCwgaW50IGNvbXByZXNzbGV2ZWwpCiAJcHJlZnMgPSAmc3RyZWFtZXItPnByZWZzOwogCW1lbXNl dChwcmVmcywgMCwgc2l6ZW9mKExaNEZfcHJlZmVyZW5jZXNfdCkpOwogCXByZWZzLT5mcmFtZUlu Zm8uYmxvY2tTaXplSUQgPSBMWjRGX21heDI1NktCOwotCXByZWZzLT5jb21wcmVzc2lvbkxldmVs ID0gY29tcHJlc3NsZXZlbDsKKwlwcmVmcy0+Y29tcHJlc3Npb25MZXZlbCA9IGNvbXByZXNzLT5s ZXZlbDsKIAogCS8qCiAJICogRmluZCBvdXQgdGhlIGNvbXByZXNzaW9uIGJvdW5kLCBpdCBzcGVj aWZpZXMgdGhlIG1pbmltdW0gZGVzdGluYXRpb24KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYmFz ZWJhY2t1cC9iYnN0cmVhbWVyX3pzdGQuYyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9iYnN0cmVh bWVyX3pzdGQuYwppbmRleCBlODY3NDlhOGZiLi5jYWE1ZWRjYWYxIDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2Jhc2ViYWNrdXAvYmJzdHJlYW1lcl96c3RkLmMKKysrIGIvc3JjL2Jpbi9wZ19iYXNl YmFja3VwL2Jic3RyZWFtZXJfenN0ZC5jCkBAIC02Myw3ICs2Myw3IEBAIGNvbnN0IGJic3RyZWFt ZXJfb3BzIGJic3RyZWFtZXJfenN0ZF9kZWNvbXByZXNzb3Jfb3BzID0gewogICogYmxvY2tzLgog ICovCiBiYnN0cmVhbWVyICoKLWJic3RyZWFtZXJfenN0ZF9jb21wcmVzc29yX25ldyhiYnN0cmVh bWVyICpuZXh0LCBpbnQgY29tcHJlc3NsZXZlbCkKK2Jic3RyZWFtZXJfenN0ZF9jb21wcmVzc29y X25ldyhiYnN0cmVhbWVyICpuZXh0LCBiY19zcGVjaWZpY2F0aW9uICpjb21wcmVzcykKIHsKICNp ZmRlZiBVU0VfWlNURAogCWJic3RyZWFtZXJfenN0ZF9mcmFtZSAqc3RyZWFtZXI7CkBAIC04NSw3 ICs4NSw3IEBAIGJic3RyZWFtZXJfenN0ZF9jb21wcmVzc29yX25ldyhiYnN0cmVhbWVyICpuZXh0 LCBpbnQgY29tcHJlc3NsZXZlbCkKIAogCS8qIEluaXRpYWxpemUgc3RyZWFtIGNvbXByZXNzaW9u IHByZWZlcmVuY2VzICovCiAJWlNURF9DQ3R4X3NldFBhcmFtZXRlcihzdHJlYW1lci0+Y2N0eCwg WlNURF9jX2NvbXByZXNzaW9uTGV2ZWwsCi0JCQkJCQkgICBjb21wcmVzc2xldmVsKTsKKwkJCQkJ CSAgIGNvbXByZXNzLT5sZXZlbCk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBaU1REIG91dHB1dCBi dWZmZXIuICovCiAJc3RyZWFtZXItPnpzdGRfb3V0QnVmLmRzdCA9IHN0cmVhbWVyLT5iYXNlLmJi c19idWZmZXIuZGF0YTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19iYXNl YmFja3VwLmMgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1cC5jCmluZGV4IDI5 NDNkOWVjMWEuLmVjMGFiZGQ0ZDMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9w Z19iYXNlYmFja3VwLmMKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2Jhc2ViYWNrdXAu YwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCIK ICNpbmNsdWRlICJiYnN0cmVhbWVyLmgiCisjaW5jbHVkZSAiY29tbW9uL2JhY2t1cF9jb21wcmVz c2lvbi5oIgogI2luY2x1ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKICNpbmNsdWRlICJjb21tb24v ZmlsZV91dGlscy5oIgogI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCkBAIC01Nyw2ICs1OCw3 IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlc3BhY2VMaXN0CiB0eXBlZGVmIHN0cnVjdCBBcmNoaXZl U3RyZWFtU3RhdGUKIHsKIAlpbnQJCQl0YWJsZXNwYWNlbnVtOworCWJjX3NwZWNpZmljYXRpb24g ICAqY29tcHJlc3M7CiAJYmJzdHJlYW1lciAqc3RyZWFtZXI7CiAJYmJzdHJlYW1lciAqbWFuaWZl c3RfaW5qZWN0X3N0cmVhbWVyOwogCVBRRXhwQnVmZmVyIG1hbmlmZXN0X2J1ZmZlcjsKQEAgLTEz Miw5ICsxMzQsNiBAQCBzdGF0aWMgYm9vbCBjaGVja3N1bV9mYWlsdXJlID0gZmFsc2U7CiBzdGF0 aWMgYm9vbCBzaG93cHJvZ3Jlc3MgPSBmYWxzZTsKIHN0YXRpYyBib29sIGVzdGltYXRlc2l6ZSA9 IHRydWU7CiBzdGF0aWMgaW50CXZlcmJvc2UgPSAwOwotc3RhdGljIGludAljb21wcmVzc2xldmVs ID0gMDsKLXN0YXRpYyBXYWxDb21wcmVzc2lvbk1ldGhvZCBjb21wcmVzc21ldGhvZCA9IENPTVBS RVNTSU9OX05PTkU7Ci1zdGF0aWMgQ29tcHJlc3Npb25Mb2NhdGlvbiBjb21wcmVzc2xvYyA9IENP TVBSRVNTX0xPQ0FUSU9OX1VOU1BFQ0lGSUVEOwogc3RhdGljIEluY2x1ZGVXYWwgaW5jbHVkZXdh bCA9IFNUUkVBTV9XQUw7CiBzdGF0aWMgYm9vbCBmYXN0Y2hlY2twb2ludCA9IGZhbHNlOwogc3Rh dGljIGJvb2wgd3JpdGVyZWNvdmVyeWNvbmYgPSBmYWxzZTsKQEAgLTE5OCw3ICsxOTcsOCBAQCBz dGF0aWMgdm9pZCBwcm9ncmVzc19yZXBvcnQoaW50IHRhYmxlc3BhY2VudW0sIGJvb2wgZm9yY2Us IGJvb2wgZmluaXNoZWQpOwogc3RhdGljIGJic3RyZWFtZXIgKkNyZWF0ZUJhY2t1cFN0cmVhbWVy KGNoYXIgKmFyY2hpdmVfbmFtZSwgY2hhciAqc3BjbG9jYXRpb24sCiAJCQkJCQkJCQkJYmJzdHJl YW1lciAqKm1hbmlmZXN0X2luamVjdF9zdHJlYW1lcl9wLAogCQkJCQkJCQkJCWJvb2wgaXNfcmVj b3ZlcnlfZ3VjX3N1cHBvcnRlZCwKLQkJCQkJCQkJCQlib29sIGV4cGVjdF91bnRlcm1pbmF0ZWRf dGFyZmlsZSk7CisJCQkJCQkJCQkJYm9vbCBleHBlY3RfdW50ZXJtaW5hdGVkX3RhcmZpbGUsCisJ CQkJCQkJCQkJYmNfc3BlY2lmaWNhdGlvbiAqY29tcHJlc3MpOwogc3RhdGljIHZvaWQgUmVjZWl2 ZUFyY2hpdmVTdHJlYW1DaHVuayhzaXplX3QgciwgY2hhciAqY29weWJ1ZiwKIAkJCQkJCQkJCSAg dm9pZCAqY2FsbGJhY2tfZGF0YSk7CiBzdGF0aWMgY2hhciBHZXRDb3B5RGF0YUJ5dGUoc2l6ZV90 IHIsIGNoYXIgKmNvcHlidWYsIHNpemVfdCAqY3Vyc29yKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBz dGF0aWMgdWludDY0IEdldENvcHlEYXRhVUludDY0KHNpemVfdCByLCBjaGFyICpjb3B5YnVmLCBz aXplX3QgKmN1cnNvcik7CiBzdGF0aWMgdm9pZCBHZXRDb3B5RGF0YUVuZChzaXplX3QgciwgY2hh ciAqY29weWJ1Ziwgc2l6ZV90IGN1cnNvcik7CiBzdGF0aWMgdm9pZCBSZXBvcnRDb3B5RGF0YVBh cnNlRXJyb3Ioc2l6ZV90IHIsIGNoYXIgKmNvcHlidWYpOwogc3RhdGljIHZvaWQgUmVjZWl2ZVRh ckZpbGUoUEdjb25uICpjb25uLCBjaGFyICphcmNoaXZlX25hbWUsIGNoYXIgKnNwY2xvY2F0aW9u LAotCQkJCQkJICAgYm9vbCB0YWJsZXNwYWNlbnVtKTsKKwkJCQkJCSAgIGJvb2wgdGFibGVzcGFj ZW51bSwgYmNfc3BlY2lmaWNhdGlvbiAqY29tcHJlc3MpOwogc3RhdGljIHZvaWQgUmVjZWl2ZVRh ckNvcHlDaHVuayhzaXplX3QgciwgY2hhciAqY29weWJ1Ziwgdm9pZCAqY2FsbGJhY2tfZGF0YSk7 CiBzdGF0aWMgdm9pZCBSZWNlaXZlQmFja3VwTWFuaWZlc3QoUEdjb25uICpjb25uKTsKIHN0YXRp YyB2b2lkIFJlY2VpdmVCYWNrdXBNYW5pZmVzdENodW5rKHNpemVfdCByLCBjaGFyICpjb3B5YnVm LApAQCAtMjE1LDcgKzIxNSw5IEBAIHN0YXRpYyB2b2lkIFJlY2VpdmVCYWNrdXBNYW5pZmVzdENo dW5rKHNpemVfdCByLCBjaGFyICpjb3B5YnVmLAogc3RhdGljIHZvaWQgUmVjZWl2ZUJhY2t1cE1h bmlmZXN0SW5NZW1vcnkoUEdjb25uICpjb25uLCBQUUV4cEJ1ZmZlciBidWYpOwogc3RhdGljIHZv aWQgUmVjZWl2ZUJhY2t1cE1hbmlmZXN0SW5NZW1vcnlDaHVuayhzaXplX3QgciwgY2hhciAqY29w eWJ1ZiwKIAkJCQkJCQkJCQkJICAgdm9pZCAqY2FsbGJhY2tfZGF0YSk7Ci1zdGF0aWMgdm9pZCBC YXNlQmFja3VwKHZvaWQpOworc3RhdGljIHZvaWQgQmFzZUJhY2t1cChjaGFyICpjb21wcmVzc2lv bl9hbGdvcml0aG0sIGNoYXIgKmNvbXByZXNzaW9uX2RldGFpbCwKKwkJCQkJICAgQ29tcHJlc3Np b25Mb2NhdGlvbiBjb21wcmVzc2xvYywKKwkJCQkJICAgYmNfc3BlY2lmaWNhdGlvbiAqY2xpZW50 X2NvbXByZXNzKTsKIAogc3RhdGljIGJvb2wgcmVhY2hlZF9lbmRfcG9zaXRpb24oWExvZ1JlY1B0 ciBzZWdlbmRwb3MsIHVpbnQzMiB0aW1lbGluZSwKIAkJCQkJCQkJIGJvb2wgc2VnbWVudF9maW5p c2hlZCk7CkBAIC01NDIsNyArNTQ0LDkgQEAgdHlwZWRlZiBzdHJ1Y3QKIH0gbG9nc3RyZWFtZXJf cGFyYW07CiAKIHN0YXRpYyBpbnQKLUxvZ1N0cmVhbWVyTWFpbihsb2dzdHJlYW1lcl9wYXJhbSAq cGFyYW0pCitMb2dTdHJlYW1lck1haW4obG9nc3RyZWFtZXJfcGFyYW0gKnBhcmFtLAorCQkJCVdh bENvbXByZXNzaW9uTWV0aG9kIHdhbF9jb21wcmVzc19tZXRob2QsCisJCQkJaW50IHdhbF9jb21w cmVzc19sZXZlbCkKIHsKIAlTdHJlYW1DdGwJc3RyZWFtOwogCkBAIC01NjUsMjUgKzU2OSwxNCBA QCBMb2dTdHJlYW1lck1haW4obG9nc3RyZWFtZXJfcGFyYW0gKnBhcmFtKQogCXN0cmVhbS5tYXJr X2RvbmUgPSB0cnVlOwogCXN0cmVhbS5wYXJ0aWFsX3N1ZmZpeCA9IE5VTEw7CiAJc3RyZWFtLnJl cGxpY2F0aW9uX3Nsb3QgPSByZXBsaWNhdGlvbl9zbG90OwotCiAJaWYgKGZvcm1hdCA9PSAncCcp CiAJCXN0cmVhbS53YWxtZXRob2QgPSBDcmVhdGVXYWxEaXJlY3RvcnlNZXRob2QocGFyYW0tPnhs b2csCiAJCQkJCQkJCQkJCQkJQ09NUFJFU1NJT05fTk9ORSwgMCwKIAkJCQkJCQkJCQkJCQlzdHJl YW0uZG9fc3luYyk7Ci0JZWxzZSBpZiAoY29tcHJlc3Nsb2MgIT0gQ09NUFJFU1NfTE9DQVRJT05f Q0xJRU5UKQotCQlzdHJlYW0ud2FsbWV0aG9kID0gQ3JlYXRlV2FsVGFyTWV0aG9kKHBhcmFtLT54 bG9nLAotCQkJCQkJCQkJCQkgIENPTVBSRVNTSU9OX05PTkUsCi0JCQkJCQkJCQkJCSAgY29tcHJl c3NsZXZlbCwKLQkJCQkJCQkJCQkJICBzdHJlYW0uZG9fc3luYyk7Ci0JZWxzZSBpZiAoY29tcHJl c3NtZXRob2QgPT0gQ09NUFJFU1NJT05fR1pJUCkKLQkJc3RyZWFtLndhbG1ldGhvZCA9IENyZWF0 ZVdhbFRhck1ldGhvZChwYXJhbS0+eGxvZywKLQkJCQkJCQkJCQkJICBjb21wcmVzc21ldGhvZCwK LQkJCQkJCQkJCQkJICBjb21wcmVzc2xldmVsLAotCQkJCQkJCQkJCQkgIHN0cmVhbS5kb19zeW5j KTsKIAllbHNlCiAJCXN0cmVhbS53YWxtZXRob2QgPSBDcmVhdGVXYWxUYXJNZXRob2QocGFyYW0t Pnhsb2csCi0JCQkJCQkJCQkJCSAgQ09NUFJFU1NJT05fTk9ORSwKLQkJCQkJCQkJCQkJICBjb21w cmVzc2xldmVsLAorCQkJCQkJCQkJCQkgIHdhbF9jb21wcmVzc19tZXRob2QsCisJCQkJCQkJCQkJ CSAgd2FsX2NvbXByZXNzX2xldmVsLAogCQkJCQkJCQkJCQkgIHN0cmVhbS5kb19zeW5jKTsKIAog CWlmICghUmVjZWl2ZVhsb2dTdHJlYW0ocGFyYW0tPmJnY29ubiwgJnN0cmVhbSkpCkBAIC02Mjks NyArNjIyLDkgQEAgTG9nU3RyZWFtZXJNYWluKGxvZ3N0cmVhbWVyX3BhcmFtICpwYXJhbSkKICAq IHN0cmVhbSB0aGUgbG9nZmlsZSBpbiBwYXJhbGxlbCB3aXRoIHRoZSBiYWNrdXBzLgogICovCiBz dGF0aWMgdm9pZAotU3RhcnRMb2dTdHJlYW1lcihjaGFyICpzdGFydHBvcywgdWludDMyIHRpbWVs aW5lLCBjaGFyICpzeXNpZGVudGlmaWVyKQorU3RhcnRMb2dTdHJlYW1lcihjaGFyICpzdGFydHBv cywgdWludDMyIHRpbWVsaW5lLCBjaGFyICpzeXNpZGVudGlmaWVyLAorCQkJCSBXYWxDb21wcmVz c2lvbk1ldGhvZCB3YWxfY29tcHJlc3NfbWV0aG9kLAorCQkJCSBpbnQgd2FsX2NvbXByZXNzX2xl dmVsKQogewogCWxvZ3N0cmVhbWVyX3BhcmFtICpwYXJhbTsKIAl1aW50MzIJCWhpLApAQCAtNzI5 LDcgKzcyNCw3IEBAIFN0YXJ0TG9nU3RyZWFtZXIoY2hhciAqc3RhcnRwb3MsIHVpbnQzMiB0aW1l bGluZSwgY2hhciAqc3lzaWRlbnRpZmllcikKIAkJaW50CQkJcmV0OwogCiAJCS8qIGluIGNoaWxk IHByb2Nlc3MgKi8KLQkJcmV0ID0gTG9nU3RyZWFtZXJNYWluKHBhcmFtKTsKKwkJcmV0ID0gTG9n U3RyZWFtZXJNYWluKHBhcmFtLCB3YWxfY29tcHJlc3NfbWV0aG9kLCB3YWxfY29tcHJlc3NfbGV2 ZWwpOwogCiAJCS8qIHRlbXAgZGVidWdnaW5nIGFpZCB0byBhbmFseXplIDAxOV9yZXBsc2xvdF9s aW1pdCBmYWlsdXJlcyAqLwogCQlpZiAodmVyYm9zZSkKQEAgLTEwMDQsMTM2ICs5OTksODEgQEAg cGFyc2VfbWF4X3JhdGUoY2hhciAqc3JjKQogfQogCiAvKgotICogVXRpbGl0eSB3cmFwcGVyIHRv IHBhcnNlIHRoZSB2YWx1ZXMgc3BlY2lmaWVkIGZvciAtWi8tLWNvbXByZXNzLgotICogKm1ldGhv ZHJlcyBhbmQgKmxldmVscmVzIHdpbGwgYmUgb3B0aW9uYWxseSBmaWxsZWQgd2l0aCB2YWx1ZXMg Y29taW5nCi0gKiBmcm9tIHRoZSBwYXJzZWQgcmVzdWx0cy4KKyAqIEJhc2ljIHBhcnNpbmcgb2Yg YSB2YWx1ZSBzcGVjaWZpZWQgZm9yIC1aLy0tY29tcHJlc3MuCisgKgorICogV2UncmUgbm90IGNv bmNlcm5lZCBoZXJlIHdpdGggdW5kZXJzdGFuZGluZyBleGFjdGx5IHdoYXQgYmVoYXZpb3IgdGhl CisgKiB1c2VyIHdhbnRzLCBidXQgd2UgZG8gbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIHVzZXIg aXMgcmVxdWVzdGluZyBjbGllbnQKKyAqIG9yIHNlcnZlciBzaWRlIGNvbXByZXNzaW9uIG9yIGxl YXZpbmcgaXQgdW5zcGVjaWZpZWQsIGFuZCB3ZSBuZWVkIHRvCisgKiBzZXBhcmF0ZSB0aGUgbmFt ZSBvZiB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGZyb20gdGhlIGRldGFpbCBzdHJpbmcuCisg KgorICogRm9yIGluc3RhbmNlLCBpZiB0aGUgdXNlciB3cml0ZXMgLS1jb21wcmVzcyBjbGllbnQt bHo0OjYsIHdlIHdhbnQgdG8KKyAqIHNlcGFyYXRlIHRoYXQgaW50byAoYSkgY2xpZW50LXNpZGUg Y29tcHJlc3Npb24sIChiKSBhbGdvcml0aG0gImx6NCIsCisgKiBhbmQgKGMpIGRldGFpbCAiNiIu IE5vdGUsIGhvd2V2ZXIsIHRoYXQgYWxsIHRoZSBjbGllbnQvc2VydmVyIHByZWZpeCBpcworICog b3B0aW9uYWwsIGFuZCBzbyBpcyB0aGUgZGV0YWlsLiBUaGUgYWxnb3JpdGhtIG5hbWUgaXMgcmVx dWlyZWQsIHVubGVzcworICogdGhlIHdob2xlIHN0cmluZyBpcyBhbiBpbnRlZ2VyLCBpbiB3aGlj aCBjYXNlIHdlIGFzc3VtZSAiZ3ppcCIgYXMgdGhlCisgKiBhbGdvcml0aG0gYW5kIHVzZSB0aGUg aW50ZWdlciBhcyB0aGUgZGV0YWlsLgorICoKKyAqIFdlJ3JlIG5vdCBjb25jZXJuZWQgd2l0aCB2 YWxpZGF0aW9uIGF0IHRoaXMgc3RhZ2UsIHNvIGlmIHRoZSB1c2VyIHdyaXRlcworICogLS1jb21w cmVzcyBjbGllbnQtdHVya2V5OnNhbmR3aWNoLCB0aGUgcmVxdWVzdGVkIGFsZ29yaXRobSBpcyAi dHVya2V5IgorICogYW5kIHRoZSBkZXRhaWwgc3RyaW5nIGlzICJzYW5kd2ljaCIuIFdlJ2xsIHNv cnQgb3V0IHdoZXRoZXIgdGhhdCdzIGxlZ2FsCisgKiBhdCBhIGxhdGVyIHN0YWdlLgogICovCiBz dGF0aWMgdm9pZAotcGFyc2VfY29tcHJlc3Nfb3B0aW9ucyhjaGFyICpzcmMsIFdhbENvbXByZXNz aW9uTWV0aG9kICptZXRob2RyZXMsCi0JCQkJCSAgIENvbXByZXNzaW9uTG9jYXRpb24gKmxvY2F0 aW9ucmVzLCBpbnQgKmxldmVscmVzKQorcGFyc2VfY29tcHJlc3Nfb3B0aW9ucyhjaGFyICpvcHRp b24sIGNoYXIgKiphbGdvcml0aG0sIGNoYXIgKipkZXRhaWwsCisJCQkJCSAgIENvbXByZXNzaW9u TG9jYXRpb24gKmxvY2F0aW9ucmVzKQogewogCWNoYXIJICAgKnNlcDsKLQlpbnQJCQlmaXJzdGxl bjsKLQljaGFyCSAgICpmaXJzdHBhcnQ7CisJY2hhcgkgICAqZW5kcDsKIAogCS8qCi0JICogY2xl YXIgJ2xldmVscmVzJyBzbyB0aGF0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBv cHRpb25zLAotCSAqIHRoZSBsYXN0IG9uZSBmdWxseSBvdmVycmlkZXMgdGhlIGVhcmxpZXIgb25l cwotCSAqLwotCSpsZXZlbHJlcyA9IDA7Ci0KLQkvKiBjaGVjayBpZiB0aGUgb3B0aW9uIGlzIHNw bGl0IGluIHR3byAqLwotCXNlcCA9IHN0cmNocihzcmMsICc6Jyk7Ci0KLQkvKgotCSAqIFRoZSBm aXJzdCBwYXJ0IG9mIHRoZSBvcHRpb24gdmFsdWUgY291bGQgYmUgYSBtZXRob2QgbmFtZSwgb3Ig anVzdCBhCi0JICogbGV2ZWwgdmFsdWUuCi0JICovCi0JZmlyc3RsZW4gPSAoc2VwICE9IE5VTEwp ID8gKHNlcCAtIHNyYykgOiBzdHJsZW4oc3JjKTsKLQlmaXJzdHBhcnQgPSBwZ19tYWxsb2MoZmly c3RsZW4gKyAxKTsKLQltZW1jcHkoZmlyc3RwYXJ0LCBzcmMsIGZpcnN0bGVuKTsKLQlmaXJzdHBh cnRbZmlyc3RsZW5dID0gJ1wwJzsKLQotCS8qCi0JICogQ2hlY2sgaWYgdGhlIGZpcnN0IHBhcnQg b2YgdGhlIHN0cmluZyBtYXRjaGVzIHdpdGggYSBzdXBwb3J0ZWQKLQkgKiBjb21wcmVzc2lvbiBt ZXRob2QuCisJICogQ2hlY2sgd2hldGhlciB0aGUgY29tcHJlc3Npb24gc3BlY2lmaWNhdGlvbiBj b25zaXN0cyBvZiBhIGJhcmUgaW50ZWdlci4KKwkgKgorCSAqIElmIHNvLCBmb3IgYmFja3dhcmQg Y29tcGF0aWJpbGl0eSwgYXNzdW1lIGd6aXAuCiAJICovCi0JaWYgKHBnX3N0cmNhc2VjbXAoZmly c3RwYXJ0LCAiZ3ppcCIpID09IDApCisJKHZvaWQpIHN0cnRvbChvcHRpb24sICZlbmRwLCAxMCk7 CisJaWYgKCplbmRwID09ICdcMCcpCiAJewotCQkqbWV0aG9kcmVzID0gQ09NUFJFU1NJT05fR1pJ UDsKIAkJKmxvY2F0aW9ucmVzID0gQ09NUFJFU1NfTE9DQVRJT05fVU5TUEVDSUZJRUQ7CisJCSph bGdvcml0aG0gPSBwc3RyZHVwKCJnemlwIik7CisJCSpkZXRhaWwgPSBwc3RyZHVwKG9wdGlvbik7 CisJCXJldHVybjsKIAl9Ci0JZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmaXJzdHBhcnQsICJjbGll bnQtZ3ppcCIpID09IDApCi0JewotCQkqbWV0aG9kcmVzID0gQ09NUFJFU1NJT05fR1pJUDsKLQkJ KmxvY2F0aW9ucmVzID0gQ09NUFJFU1NfTE9DQVRJT05fQ0xJRU5UOwotCX0KLQllbHNlIGlmIChw Z19zdHJjYXNlY21wKGZpcnN0cGFydCwgInNlcnZlci1nemlwIikgPT0gMCkKKworCS8qIFN0cmlw IG9mZiBhbnkgImNsaWVudC0iIG9yICJzZXJ2ZXItIiBwcmVmaXguICovCisJaWYgKHN0cm5jbXAo b3B0aW9uLCAic2VydmVyLSIsIDcpID09IDApCiAJewotCQkqbWV0aG9kcmVzID0gQ09NUFJFU1NJ T05fR1pJUDsKIAkJKmxvY2F0aW9ucmVzID0gQ09NUFJFU1NfTE9DQVRJT05fU0VSVkVSOworCQlv cHRpb24gKz0gNzsKIAl9Ci0JZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmaXJzdHBhcnQsICJsejQi KSA9PSAwKQotCXsKLQkJKm1ldGhvZHJlcyA9IENPTVBSRVNTSU9OX0xaNDsKLQkJKmxvY2F0aW9u cmVzID0gQ09NUFJFU1NfTE9DQVRJT05fVU5TUEVDSUZJRUQ7Ci0JfQotCWVsc2UgaWYgKHBnX3N0 cmNhc2VjbXAoZmlyc3RwYXJ0LCAiY2xpZW50LWx6NCIpID09IDApCisJZWxzZSBpZiAoc3RybmNt cChvcHRpb24sICJjbGllbnQtIiwgNykgPT0gMCkKIAl7Ci0JCSptZXRob2RyZXMgPSBDT01QUkVT U0lPTl9MWjQ7CiAJCSpsb2NhdGlvbnJlcyA9IENPTVBSRVNTX0xPQ0FUSU9OX0NMSUVOVDsKLQl9 Ci0JZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmaXJzdHBhcnQsICJzZXJ2ZXItbHo0IikgPT0gMCkK LQl7Ci0JCSptZXRob2RyZXMgPSBDT01QUkVTU0lPTl9MWjQ7Ci0JCSpsb2NhdGlvbnJlcyA9IENP TVBSRVNTX0xPQ0FUSU9OX1NFUlZFUjsKLQl9Ci0JZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmaXJz dHBhcnQsICJ6c3RkIikgPT0gMCkKLQl7Ci0JCSptZXRob2RyZXMgPSBDT01QUkVTU0lPTl9aU1RE OwotCQkqbG9jYXRpb25yZXMgPSBDT01QUkVTU19MT0NBVElPTl9VTlNQRUNJRklFRDsKLQl9Ci0J ZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmaXJzdHBhcnQsICJjbGllbnQtenN0ZCIpID09IDApCi0J ewotCQkqbWV0aG9kcmVzID0gQ09NUFJFU1NJT05fWlNURDsKLQkJKmxvY2F0aW9ucmVzID0gQ09N UFJFU1NfTE9DQVRJT05fQ0xJRU5UOwotCX0KLQllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZpcnN0 cGFydCwgInNlcnZlci16c3RkIikgPT0gMCkKLQl7Ci0JCSptZXRob2RyZXMgPSBDT01QUkVTU0lP Tl9aU1REOwotCQkqbG9jYXRpb25yZXMgPSBDT01QUkVTU19MT0NBVElPTl9TRVJWRVI7Ci0JfQot CWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZmlyc3RwYXJ0LCAibm9uZSIpID09IDApCi0JewotCQkq bWV0aG9kcmVzID0gQ09NUFJFU1NJT05fTk9ORTsKLQkJKmxvY2F0aW9ucmVzID0gQ09NUFJFU1Nf TE9DQVRJT05fVU5TUEVDSUZJRUQ7CisJCW9wdGlvbiArPSA3OwogCX0KIAllbHNlCi0JewotCQkv KgotCQkgKiBJdCBkb2VzIG5vdCBtYXRjaCBhbnl0aGluZyBrbm93biwgc28gY2hlY2sgZm9yIHRo ZQotCQkgKiBiYWNrd2FyZC1jb21wYXRpYmxlIGNhc2Ugb2Ygb25seSBhbiBpbnRlZ2VyIHdoZXJl IHRoZSBpbXBsaWVkCi0JCSAqIGNvbXByZXNzaW9uIG1ldGhvZCBjaGFuZ2VzIGRlcGVuZGluZyBv biB0aGUgbGV2ZWwgdmFsdWUuCi0JCSAqLwotCQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQoZmlyc3Rw YXJ0LCAiLVovLS1jb21wcmVzcyIsIDAsCi0JCQkJCQkJICBJTlRfTUFYLCBsZXZlbHJlcykpCi0J CQlleGl0KDEpOwotCi0JCSptZXRob2RyZXMgPSAoKmxldmVscmVzID4gMCkgPwotCQkJQ09NUFJF U1NJT05fR1pJUCA6IENPTVBSRVNTSU9OX05PTkU7CiAJCSpsb2NhdGlvbnJlcyA9IENPTVBSRVNT X0xPQ0FUSU9OX1VOU1BFQ0lGSUVEOwogCi0JCWZyZWUoZmlyc3RwYXJ0KTsKLQkJcmV0dXJuOwot CX0KLQorCS8qCisJICogQ2hlY2sgd2hldGhlciB0aGVyZSBpcyBhIGNvbXByZXNzaW9uIGRldGFp bCBmb2xsb3dpbmcgdGhlIGFsZ29yaXRobQorCSAqIG5hbWUuCisJICovCisJc2VwID0gc3RyY2hy KG9wdGlvbiwgJzonKTsKIAlpZiAoc2VwID09IE5VTEwpCiAJewotCQkvKgotCQkgKiBUaGUgY2Fs bGVyIHNwZWNpZmllZCBhIG1ldGhvZCB3aXRob3V0IGEgY29sb24gc2VwYXJhdG9yLCBzbyBsZXQg YW55Ci0JCSAqIHN1YnNlcXVlbnQgY2hlY2tzIGFzc2lnbiBhIGRlZmF1bHQgbGV2ZWwuCi0JCSAq LwotCQlmcmVlKGZpcnN0cGFydCk7Ci0JCXJldHVybjsKKwkJKmFsZ29yaXRobSA9IHBzdHJkdXAo b3B0aW9uKTsKKwkJKmRldGFpbCA9IE5VTEw7CiAJfQotCi0JLyogQ2hlY2sgdGhlIGNvbnRlbnRz IGFmdGVyIHRoZSBjb2xvbiBzZXBhcmF0b3IuICovCi0Jc2VwKys7Ci0JaWYgKCpzZXAgPT0gJ1ww JykKKwllbHNlCiAJewotCQlwZ19sb2dfZXJyb3IoIm5vIGNvbXByZXNzaW9uIGxldmVsIGRlZmlu ZWQgZm9yIG1ldGhvZCAlcyIsIGZpcnN0cGFydCk7Ci0JCWV4aXQoMSk7Ci0JfQorCQljaGFyICAg KmFsZzsKIAotCS8qCi0JICogRm9yIGFueSBvZiB0aGUgbWV0aG9kcyBjdXJyZW50bHkgc3VwcG9y dGVkLCB0aGUgZGF0YSBhZnRlciB0aGUKLQkgKiBzZXBhcmF0b3IgY2FuIGp1c3QgYmUgYW4gaW50 ZWdlci4KLQkgKi8KLQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQoc2VwLCAiLVovLS1jb21wcmVzcyIs IDAsIElOVF9NQVgsCi0JCQkJCQkgIGxldmVscmVzKSkKLQkJZXhpdCgxKTsKKwkJYWxnID0gcGFs bG9jKChzZXAgLSBvcHRpb24pICsgMSk7CisJCW1lbWNweShhbGcsIG9wdGlvbiwgc2VwIC0gb3B0 aW9uKTsKKwkJYWxnW3NlcCAtIG9wdGlvbl0gPSAnXDAnOwogCi0JZnJlZShmaXJzdHBhcnQpOwor CQkqYWxnb3JpdGhtID0gYWxnOworCQkqZGV0YWlsID0gcHN0cmR1cChzZXAgKyAxKTsKKwl9CiB9 CiAKIC8qCkBAIC0xMjAwLDcgKzExNDAsOCBAQCBzdGF0aWMgYmJzdHJlYW1lciAqCiBDcmVhdGVC YWNrdXBTdHJlYW1lcihjaGFyICphcmNoaXZlX25hbWUsIGNoYXIgKnNwY2xvY2F0aW9uLAogCQkJ CQkgYmJzdHJlYW1lciAqKm1hbmlmZXN0X2luamVjdF9zdHJlYW1lcl9wLAogCQkJCQkgYm9vbCBp c19yZWNvdmVyeV9ndWNfc3VwcG9ydGVkLAotCQkJCQkgYm9vbCBleHBlY3RfdW50ZXJtaW5hdGVk X3RhcmZpbGUpCisJCQkJCSBib29sIGV4cGVjdF91bnRlcm1pbmF0ZWRfdGFyZmlsZSwKKwkJCQkJ IGJjX3NwZWNpZmljYXRpb24gKmNvbXByZXNzKQogewogCWJic3RyZWFtZXIgKnN0cmVhbWVyID0g TlVMTDsKIAliYnN0cmVhbWVyICptYW5pZmVzdF9pbmplY3Rfc3RyZWFtZXIgPSBOVUxMOwpAQCAt MTMxNiwzMiArMTI1NywyOCBAQCBDcmVhdGVCYWNrdXBTdHJlYW1lcihjaGFyICphcmNoaXZlX25h bWUsIGNoYXIgKnNwY2xvY2F0aW9uLAogCQkJYXJjaGl2ZV9maWxlID0gTlVMTDsKIAkJfQogCi0J CWlmIChjb21wcmVzc21ldGhvZCA9PSBDT01QUkVTU0lPTl9OT05FIHx8Ci0JCQljb21wcmVzc2xv YyAhPSBDT01QUkVTU19MT0NBVElPTl9DTElFTlQpCisJCWlmIChjb21wcmVzcy0+YWxnb3JpdGht ID09IEJBQ0tVUF9DT01QUkVTU0lPTl9OT05FKQogCQkJc3RyZWFtZXIgPSBiYnN0cmVhbWVyX3Bs YWluX3dyaXRlcl9uZXcoYXJjaGl2ZV9maWxlbmFtZSwKIAkJCQkJCQkJCQkJCSAgIGFyY2hpdmVf ZmlsZSk7Ci0JCWVsc2UgaWYgKGNvbXByZXNzbWV0aG9kID09IENPTVBSRVNTSU9OX0daSVApCisJ CWVsc2UgaWYgKGNvbXByZXNzLT5hbGdvcml0aG0gPT0gQkFDS1VQX0NPTVBSRVNTSU9OX0daSVAp CiAJCXsKIAkJCXN0cmxjYXQoYXJjaGl2ZV9maWxlbmFtZSwgIi5neiIsIHNpemVvZihhcmNoaXZl X2ZpbGVuYW1lKSk7CiAJCQlzdHJlYW1lciA9IGJic3RyZWFtZXJfZ3ppcF93cml0ZXJfbmV3KGFy Y2hpdmVfZmlsZW5hbWUsCi0JCQkJCQkJCQkJCQkgIGFyY2hpdmVfZmlsZSwKLQkJCQkJCQkJCQkJ CSAgY29tcHJlc3NsZXZlbCk7CisJCQkJCQkJCQkJCQkgIGFyY2hpdmVfZmlsZSwgY29tcHJlc3Mp OwogCQl9Ci0JCWVsc2UgaWYgKGNvbXByZXNzbWV0aG9kID09IENPTVBSRVNTSU9OX0xaNCkKKwkJ ZWxzZSBpZiAoY29tcHJlc3MtPmFsZ29yaXRobSA9PSBCQUNLVVBfQ09NUFJFU1NJT05fTFo0KQog CQl7CiAJCQlzdHJsY2F0KGFyY2hpdmVfZmlsZW5hbWUsICIubHo0Iiwgc2l6ZW9mKGFyY2hpdmVf ZmlsZW5hbWUpKTsKIAkJCXN0cmVhbWVyID0gYmJzdHJlYW1lcl9wbGFpbl93cml0ZXJfbmV3KGFy Y2hpdmVfZmlsZW5hbWUsCiAJCQkJCQkJCQkJCQkgICBhcmNoaXZlX2ZpbGUpOwotCQkJc3RyZWFt ZXIgPSBiYnN0cmVhbWVyX2x6NF9jb21wcmVzc29yX25ldyhzdHJlYW1lciwKLQkJCQkJCQkJCQkJ CQkgY29tcHJlc3NsZXZlbCk7CisJCQlzdHJlYW1lciA9IGJic3RyZWFtZXJfbHo0X2NvbXByZXNz b3JfbmV3KHN0cmVhbWVyLCBjb21wcmVzcyk7CiAJCX0KLQkJZWxzZSBpZiAoY29tcHJlc3NtZXRo b2QgPT0gQ09NUFJFU1NJT05fWlNURCkKKwkJZWxzZSBpZiAoY29tcHJlc3MtPmFsZ29yaXRobSA9 PSBCQUNLVVBfQ09NUFJFU1NJT05fWlNURCkKIAkJewogCQkJc3RybGNhdChhcmNoaXZlX2ZpbGVu YW1lLCAiLnpzdCIsIHNpemVvZihhcmNoaXZlX2ZpbGVuYW1lKSk7CiAJCQlzdHJlYW1lciA9IGJi c3RyZWFtZXJfcGxhaW5fd3JpdGVyX25ldyhhcmNoaXZlX2ZpbGVuYW1lLAogCQkJCQkJCQkJCQkJ ICAgYXJjaGl2ZV9maWxlKTsKLQkJCXN0cmVhbWVyID0gYmJzdHJlYW1lcl96c3RkX2NvbXByZXNz b3JfbmV3KHN0cmVhbWVyLAotCQkJCQkJCQkJCQkJCSAgY29tcHJlc3NsZXZlbCk7CisJCQlzdHJl YW1lciA9IGJic3RyZWFtZXJfenN0ZF9jb21wcmVzc29yX25ldyhzdHJlYW1lciwgY29tcHJlc3Mp OwogCQl9CiAJCWVsc2UKIAkJewpAQCAtMTM5NSwxMyArMTMzMiwxMyBAQCBDcmVhdGVCYWNrdXBT dHJlYW1lcihjaGFyICphcmNoaXZlX25hbWUsIGNoYXIgKnNwY2xvY2F0aW9uLAogCSAqIElmIHRo ZSB1c2VyIGhhcyByZXF1ZXN0ZWQgYSBzZXJ2ZXIgY29tcHJlc3NlZCBhcmNoaXZlIGFsb25nIHdp dGggYXJjaGl2ZQogCSAqIGV4dHJhY3Rpb24gYXQgY2xpZW50IHRoZW4gd2UgbmVlZCB0byBkZWNv bXByZXNzIGl0LgogCSAqLwotCWlmIChmb3JtYXQgPT0gJ3AnICYmIGNvbXByZXNzbG9jID09IENP TVBSRVNTX0xPQ0FUSU9OX1NFUlZFUikKKwlpZiAoZm9ybWF0ID09ICdwJykKIAl7Ci0JCWlmIChj b21wcmVzc21ldGhvZCA9PSBDT01QUkVTU0lPTl9HWklQKQorCQlpZiAoaXNfdGFyX2d6KQogCQkJ c3RyZWFtZXIgPSBiYnN0cmVhbWVyX2d6aXBfZGVjb21wcmVzc29yX25ldyhzdHJlYW1lcik7Ci0J CWVsc2UgaWYgKGNvbXByZXNzbWV0aG9kID09IENPTVBSRVNTSU9OX0xaNCkKKwkJZWxzZSBpZiAo aXNfdGFyX2x6NCkKIAkJCXN0cmVhbWVyID0gYmJzdHJlYW1lcl9sejRfZGVjb21wcmVzc29yX25l dyhzdHJlYW1lcik7Ci0JCWVsc2UgaWYgKGNvbXByZXNzbWV0aG9kID09IENPTVBSRVNTSU9OX1pT VEQpCisJCWVsc2UgaWYgKGlzX3Rhcl96c3RkKQogCQkJc3RyZWFtZXIgPSBiYnN0cmVhbWVyX3pz dGRfZGVjb21wcmVzc29yX25ldyhzdHJlYW1lcik7CiAJfQogCkBAIC0xNDE1LDEzICsxMzUyLDE0 IEBAIENyZWF0ZUJhY2t1cFN0cmVhbWVyKGNoYXIgKmFyY2hpdmVfbmFtZSwgY2hhciAqc3BjbG9j YXRpb24sCiAgKiBtYW5pZmVzdCBpZiBwcmVzZW50IC0gYXMgYSBzaW5nbGUgQ09QWSBzdHJlYW0u CiAgKi8KIHN0YXRpYyB2b2lkCi1SZWNlaXZlQXJjaGl2ZVN0cmVhbShQR2Nvbm4gKmNvbm4pCitS ZWNlaXZlQXJjaGl2ZVN0cmVhbShQR2Nvbm4gKmNvbm4sIGJjX3NwZWNpZmljYXRpb24gKmNvbXBy ZXNzKQogewogCUFyY2hpdmVTdHJlYW1TdGF0ZSBzdGF0ZTsKIAogCS8qIFNldCB1cCBpbml0aWFs IHN0YXRlLiAqLwogCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOwogCXN0YXRlLnRh Ymxlc3BhY2VudW0gPSAtMTsKKwlzdGF0ZS5jb21wcmVzcyA9IGNvbXByZXNzOwogCiAJLyogQWxs IHRoZSByZWFsIHdvcmsgaGFwcGVucyBpbiBSZWNlaXZlQXJjaGl2ZVN0cmVhbUNodW5rLiAqLwog CVJlY2VpdmVDb3B5RGF0YShjb25uLCBSZWNlaXZlQXJjaGl2ZVN0cmVhbUNodW5rLCAmc3RhdGUp OwpAQCAtMTU0Miw3ICsxNDgwLDggQEAgUmVjZWl2ZUFyY2hpdmVTdHJlYW1DaHVuayhzaXplX3Qg ciwgY2hhciAqY29weWJ1Ziwgdm9pZCAqY2FsbGJhY2tfZGF0YSkKIAkJCQkJCUNyZWF0ZUJhY2t1 cFN0cmVhbWVyKGFyY2hpdmVfbmFtZSwKIAkJCQkJCQkJCQkJIHNwY2xvY2F0aW9uLAogCQkJCQkJ CQkJCQkgJnN0YXRlLT5tYW5pZmVzdF9pbmplY3Rfc3RyZWFtZXIsCi0JCQkJCQkJCQkJCSB0cnVl LCBmYWxzZSk7CisJCQkJCQkJCQkJCSB0cnVlLCBmYWxzZSwKKwkJCQkJCQkJCQkJIHN0YXRlLT5j b21wcmVzcyk7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTc0Myw3ICsxNjgyLDcgQEAg UmVwb3J0Q29weURhdGFQYXJzZUVycm9yKHNpemVfdCByLCBjaGFyICpjb3B5YnVmKQogICovCiBz dGF0aWMgdm9pZAogUmVjZWl2ZVRhckZpbGUoUEdjb25uICpjb25uLCBjaGFyICphcmNoaXZlX25h bWUsIGNoYXIgKnNwY2xvY2F0aW9uLAotCQkJICAgYm9vbCB0YWJsZXNwYWNlbnVtKQorCQkJICAg Ym9vbCB0YWJsZXNwYWNlbnVtLCBiY19zcGVjaWZpY2F0aW9uICpjb21wcmVzcykKIHsKIAlXcml0 ZVRhclN0YXRlIHN0YXRlOwogCWJic3RyZWFtZXIgKm1hbmlmZXN0X2luamVjdF9zdHJlYW1lcjsK QEAgLTE3NTksNyArMTY5OCw4IEBAIFJlY2VpdmVUYXJGaWxlKFBHY29ubiAqY29ubiwgY2hhciAq YXJjaGl2ZV9uYW1lLCBjaGFyICpzcGNsb2NhdGlvbiwKIAlzdGF0ZS5zdHJlYW1lciA9IENyZWF0 ZUJhY2t1cFN0cmVhbWVyKGFyY2hpdmVfbmFtZSwgc3BjbG9jYXRpb24sCiAJCQkJCQkJCQkJICAm bWFuaWZlc3RfaW5qZWN0X3N0cmVhbWVyLAogCQkJCQkJCQkJCSAgaXNfcmVjb3ZlcnlfZ3VjX3N1 cHBvcnRlZCwKLQkJCQkJCQkJCQkgIGV4cGVjdF91bnRlcm1pbmF0ZWRfdGFyZmlsZSk7CisJCQkJ CQkJCQkJICBleHBlY3RfdW50ZXJtaW5hdGVkX3RhcmZpbGUsCisJCQkJCQkJCQkJICBjb21wcmVz cyk7CiAJc3RhdGUudGFibGVzcGFjZW51bSA9IHRhYmxlc3BhY2VudW07CiAJUmVjZWl2ZUNvcHlE YXRhKGNvbm4sIFJlY2VpdmVUYXJDb3B5Q2h1bmssICZzdGF0ZSk7CiAJcHJvZ3Jlc3NfdXBkYXRl X2ZpbGVuYW1lKE5VTEwpOwpAQCAtMTkwMiw3ICsxODQyLDggQEAgUmVjZWl2ZUJhY2t1cE1hbmlm ZXN0SW5NZW1vcnlDaHVuayhzaXplX3QgciwgY2hhciAqY29weWJ1ZiwKIH0KIAogc3RhdGljIHZv aWQKLUJhc2VCYWNrdXAodm9pZCkKK0Jhc2VCYWNrdXAoY2hhciAqY29tcHJlc3Npb25fYWxnb3Jp dGhtLCBjaGFyICpjb21wcmVzc2lvbl9kZXRhaWwsCisJCSAgIENvbXByZXNzaW9uTG9jYXRpb24g Y29tcHJlc3Nsb2MsIGJjX3NwZWNpZmljYXRpb24gKmNsaWVudF9jb21wcmVzcykKIHsKIAlQR3Jl c3VsdCAgICpyZXM7CiAJY2hhcgkgICAqc3lzaWRlbnRpZmllcjsKQEAgLTIwNTUsMzMgKzE5OTYs MTcgQEAgQmFzZUJhY2t1cCh2b2lkKQogCiAJaWYgKGNvbXByZXNzbG9jID09IENPTVBSRVNTX0xP Q0FUSU9OX1NFUlZFUikKIAl7Ci0JCWNoYXIgKmNvbXByZXNzbWV0aG9kc3RyID0gTlVMTDsKLQog CQlpZiAoIXVzZV9uZXdfb3B0aW9uX3N5bnRheCkKIAkJewogCQkJcGdfbG9nX2Vycm9yKCJzZXJ2 ZXIgZG9lcyBub3Qgc3VwcG9ydCBzZXJ2ZXItc2lkZSBjb21wcmVzc2lvbiIpOwogCQkJZXhpdCgx KTsKIAkJfQotCQlzd2l0Y2ggKGNvbXByZXNzbWV0aG9kKQotCQl7Ci0JCQljYXNlIENPTVBSRVNT SU9OX0daSVA6Ci0JCQkJY29tcHJlc3NtZXRob2RzdHIgPSAiZ3ppcCI7Ci0JCQkJYnJlYWs7Ci0J CQljYXNlIENPTVBSRVNTSU9OX0xaNDoKLQkJCQljb21wcmVzc21ldGhvZHN0ciA9ICJsejQiOwot CQkJCWJyZWFrOwotCQkJY2FzZSBDT01QUkVTU0lPTl9aU1REOgotCQkJCWNvbXByZXNzbWV0aG9k c3RyID0gInpzdGQiOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlBc3NlcnQoZmFsc2Up OwotCQkJCWJyZWFrOwotCQl9CiAJCUFwcGVuZFN0cmluZ0NvbW1hbmRPcHRpb24oJmJ1ZiwgdXNl X25ld19vcHRpb25fc3ludGF4LAotCQkJCQkJCQkgICJDT01QUkVTU0lPTiIsIGNvbXByZXNzbWV0 aG9kc3RyKTsKLQkJaWYgKGNvbXByZXNzbGV2ZWwgPj0gMSkgLyogbm90IDAgb3IgWl9ERUZBVUxU X0NPTVBSRVNTSU9OICovCi0JCQlBcHBlbmRJbnRlZ2VyQ29tbWFuZE9wdGlvbigmYnVmLCB1c2Vf bmV3X29wdGlvbl9zeW50YXgsCi0JCQkJCQkJCQkgICAiQ09NUFJFU1NJT05fTEVWRUwiLCBjb21w cmVzc2xldmVsKTsKKwkJCQkJCQkJICAiQ09NUFJFU1NJT04iLCBjb21wcmVzc2lvbl9hbGdvcml0 aG0pOworCQlpZiAoY29tcHJlc3Npb25fZGV0YWlsICE9IE5VTEwpCisJCQlBcHBlbmRTdHJpbmdD b21tYW5kT3B0aW9uKCZidWYsIHVzZV9uZXdfb3B0aW9uX3N5bnRheCwKKwkJCQkJCQkJCSAgIkNP TVBSRVNTSU9OX0RFVEFJTCIsCisJCQkJCQkJCQkgIGNvbXByZXNzaW9uX2RldGFpbCk7CiAJfQog CiAJaWYgKHZlcmJvc2UpCkBAIC0yMjA3LDE1ICsyMTMyLDMzIEBAIEJhc2VCYWNrdXAodm9pZCkK IAkgKi8KIAlpZiAoaW5jbHVkZXdhbCA9PSBTVFJFQU1fV0FMKQogCXsKKwkJV2FsQ29tcHJlc3Np b25NZXRob2QJd2FsX2NvbXByZXNzX21ldGhvZDsKKwkJaW50CQl3YWxfY29tcHJlc3NfbGV2ZWw7 CisKIAkJaWYgKHZlcmJvc2UpCiAJCQlwZ19sb2dfaW5mbygic3RhcnRpbmcgYmFja2dyb3VuZCBX QUwgcmVjZWl2ZXIiKTsKLQkJU3RhcnRMb2dTdHJlYW1lcih4bG9nc3RhcnQsIHN0YXJ0dGxpLCBz eXNpZGVudGlmaWVyKTsKKworCQlpZiAoY2xpZW50X2NvbXByZXNzLT5hbGdvcml0aG0gPT0gQkFD S1VQX0NPTVBSRVNTSU9OX0daSVApCisJCXsKKwkJCXdhbF9jb21wcmVzc19tZXRob2QgPSBDT01Q UkVTU0lPTl9HWklQOworCQkJd2FsX2NvbXByZXNzX2xldmVsID0KKwkJCQkoY2xpZW50X2NvbXBy ZXNzLT5vcHRpb25zICYgQkFDS1VQX0NPTVBSRVNTSU9OX09QVElPTl9MRVZFTCkKKwkJCQkhPSAw ID8gY2xpZW50X2NvbXByZXNzLT5sZXZlbCA6IDA7CisJCX0KKwkJZWxzZQorCQl7CisJCQl3YWxf Y29tcHJlc3NfbWV0aG9kID0gQ09NUFJFU1NJT05fTk9ORTsKKwkJCXdhbF9jb21wcmVzc19sZXZl bCA9IDA7CisJCX0KKworCQlTdGFydExvZ1N0cmVhbWVyKHhsb2dzdGFydCwgc3RhcnR0bGksIHN5 c2lkZW50aWZpZXIsCisJCQkJCQkgd2FsX2NvbXByZXNzX21ldGhvZCwgd2FsX2NvbXByZXNzX2xl dmVsKTsKIAl9CiAKIAlpZiAoc2VydmVyTWFqb3IgPj0gMTUwMCkKIAl7CiAJCS8qIFJlY2VpdmUg YSBzaW5nbGUgdGFyIHN0cmVhbSB3aXRoIGV2ZXJ5dGhpbmcuICovCi0JCVJlY2VpdmVBcmNoaXZl U3RyZWFtKGNvbm4pOworCQlSZWNlaXZlQXJjaGl2ZVN0cmVhbShjb25uLCBjbGllbnRfY29tcHJl c3MpOwogCX0KIAllbHNlCiAJewpAQCAtMjI0NCw3ICsyMTg3LDggQEAgQmFzZUJhY2t1cCh2b2lk KQogCQkJCXNwY2xvY2F0aW9uID0gUFFnZXR2YWx1ZShyZXMsIGksIDEpOwogCQkJfQogCi0JCQlS ZWNlaXZlVGFyRmlsZShjb25uLCBhcmNoaXZlX25hbWUsIHNwY2xvY2F0aW9uLCBpKTsKKwkJCVJl Y2VpdmVUYXJGaWxlKGNvbm4sIGFyY2hpdmVfbmFtZSwgc3BjbG9jYXRpb24sIGksCisJCQkJCQkg ICBjbGllbnRfY29tcHJlc3MpOwogCQl9CiAKIAkJLyoKQEAgLTI1MTEsNiArMjQ1NSwxMCBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpbnQJCQljOwogCiAJaW50CQkJb3B0aW9uX2lu ZGV4OworCWNoYXIJICAgKmNvbXByZXNzaW9uX2FsZ29yaXRobSA9ICJub25lIjsKKwljaGFyCSAg ICpjb21wcmVzc2lvbl9kZXRhaWwgPSBOVUxMOworCUNvbXByZXNzaW9uTG9jYXRpb24JY29tcHJl c3Nsb2MgPSBDT01QUkVTU19MT0NBVElPTl9VTlNQRUNJRklFRDsKKwliY19zcGVjaWZpY2F0aW9u CWNsaWVudF9jb21wcmVzczsKIAogCXBnX2xvZ2dpbmdfaW5pdChhcmd2WzBdKTsKIAlwcm9nbmFt ZSA9IGdldF9wcm9nbmFtZShhcmd2WzBdKTsKQEAgLTI2MTYsMTcgKzI1NjQsMTMgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJZG9fc3luYyA9IGZhbHNlOwogCQkJCWJyZWFrOwog CQkJY2FzZSAneic6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQkJY29tcHJlc3NsZXZlbCA9IFpfREVG QVVMVF9DT01QUkVTU0lPTjsKLSNlbHNlCi0JCQkJY29tcHJlc3NsZXZlbCA9IDE7CS8qIHdpbGwg YmUgcmVqZWN0ZWQgYmVsb3cgKi8KLSNlbmRpZgotCQkJCWNvbXByZXNzbWV0aG9kID0gQ09NUFJF U1NJT05fR1pJUDsKKwkJCQljb21wcmVzc2lvbl9hbGdvcml0aG0gPSAiZ3ppcCI7CisJCQkJY29t cHJlc3Npb25fZGV0YWlsID0gTlVMTDsKIAkJCQljb21wcmVzc2xvYyA9IENPTVBSRVNTX0xPQ0FU SU9OX1VOU1BFQ0lGSUVEOwogCQkJCWJyZWFrOwogCQkJY2FzZSAnWic6Ci0JCQkJcGFyc2VfY29t cHJlc3Nfb3B0aW9ucyhvcHRhcmcsICZjb21wcmVzc21ldGhvZCwKLQkJCQkJCQkJCSAgICZjb21w cmVzc2xvYywgJmNvbXByZXNzbGV2ZWwpOworCQkJCXBhcnNlX2NvbXByZXNzX29wdGlvbnMob3B0 YXJnLCAmY29tcHJlc3Npb25fYWxnb3JpdGhtLAorCQkJCQkJCQkJICAgJmNvbXByZXNzaW9uX2Rl dGFpbCwgJmNvbXByZXNzbG9jKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ2MnOgogCQkJCWlmIChw Z19zdHJjYXNlY21wKG9wdGFyZywgImZhc3QiKSA9PSAwKQpAQCAtMjc1MywxMiArMjY5NywxMSBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAl9CiAKIAkvKgotCSAqIElmIHdlJ3JlIGNv bXByZXNzaW5nIHRoZSBiYWNrdXAgYW5kIHRoZSB1c2VyIGhhcyBub3Qgc2FpZCB3aGVyZSB0bwot CSAqIHBlcmZvcm0gdGhlIGNvbXByZXNzaW9uLCBkbyBpdCBvbiB0aGUgY2xpZW50LCB1bmxlc3Mg dGhleSBzcGVjaWZpZWQKLQkgKiAtLXRhcmdldCwgaW4gd2hpY2ggY2FzZSB0aGUgc2VydmVyIGlz IHRoZSBvbmx5IGNob2ljZS4KKwkgKiBJZiB0aGUgdXNlciBoYXMgbm90IHNwZWNpZmllZCB3aGVy ZSB0byBwZXJmb3JtIGJhY2t1cCBjb21wcmVzc2lvbiwKKwkgKiBkZWZhdWx0IHRvIHRoZSBjbGll bnQsIHVubGVzcyB0aGUgdXNlciBzcGVjaWZpZWQgLS10YXJnZXQsIGluIHdoaWNoIGNhc2UKKwkg KiB0aGUgc2VydmVyIGlzIHRoZSBvbmx5IGNob2ljZS4KIAkgKi8KLQlpZiAoY29tcHJlc3NtZXRo b2QgIT0gQ09NUFJFU1NJT05fTk9ORSAmJgotCQljb21wcmVzc2xvYyA9PSBDT01QUkVTU19MT0NB VElPTl9VTlNQRUNJRklFRCkKKwlpZiAoY29tcHJlc3Nsb2MgPT0gQ09NUFJFU1NfTE9DQVRJT05f VU5TUEVDSUZJRUQpCiAJewogCQlpZiAoYmFja3VwX3RhcmdldCA9PSBOVUxMKQogCQkJY29tcHJl c3Nsb2MgPSBDT01QUkVTU19MT0NBVElPTl9DTElFTlQ7CkBAIC0yNzY2LDYgKzI3MDksNDAgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQljb21wcmVzc2xvYyA9IENPTVBSRVNTX0xP Q0FUSU9OX1NFUlZFUjsKIAl9CiAKKwkvKgorCSAqIElmIGFueSBjb21wcmVzc2lvbiB0aGF0IHdl J3JlIGRvaW5nIGlzIGhhcHBlbmluZyBvbiB0aGUgY2xpZW50IHNpZGUsCisJICogd2UgbXVzdCB0 cnkgdG8gcGFyc2UgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBhbmQgZGV0YWlsLCBidXQgaWYg aXQncworCSAqIGFsbCBvbiB0aGUgc2VydmVyIHNpZGUsIHRoZW4gd2UncmUganVzdCBnb2luZyB0 byBwYXNzIHRocm91Z2ggd2hhdGV2ZXIKKwkgKiB3YXMgcmVxdWVzdGVkIGFuZCBsZXQgdGhlIHNl cnZlciBkZWNpZGUgd2hhdCB0byBkby4KKwkgKi8KKwlpZiAoY29tcHJlc3Nsb2MgPT0gQ09NUFJF U1NfTE9DQVRJT05fQ0xJRU5UKQorCXsKKwkJYmNfYWxnb3JpdGhtCWFsZzsKKwkJY2hhcgkgICAq ZXJyb3JfZGV0YWlsOworCisJCWlmICghcGFyc2VfYmNfYWxnb3JpdGhtKGNvbXByZXNzaW9uX2Fs Z29yaXRobSwgJmFsZykpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigidW5yZWNvZ25pemVkIGNvbXBy ZXNzaW9uIGFsZ29yaXRobSBcIiVzXCIiLAorCQkJCQkJIGNvbXByZXNzaW9uX2FsZ29yaXRobSk7 CisJCQlleGl0KDEpOworCQl9CisKKwkJcGFyc2VfYmNfc3BlY2lmaWNhdGlvbihhbGcsIGNvbXBy ZXNzaW9uX2RldGFpbCwgJmNsaWVudF9jb21wcmVzcyk7CisJCWVycm9yX2RldGFpbCA9IHZhbGlk YXRlX2JjX3NwZWNpZmljYXRpb24oJmNsaWVudF9jb21wcmVzcyk7CisJCWlmIChlcnJvcl9kZXRh aWwgIT0gTlVMTCkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJpbnZhbGlkIGNvbXByZXNzaW9uIHNw ZWNpZmljYXRpb246ICVzIiwKKwkJCQkJCSBlcnJvcl9kZXRhaWwpOworCQkJZXhpdCgxKTsKKwkJ fQorCX0KKwllbHNlCisJeworCQlBc3NlcnQoY29tcHJlc3Nsb2MgPSBDT01QUkVTU19MT0NBVElP Tl9TRVJWRVIpOworCQljbGllbnRfY29tcHJlc3MuYWxnb3JpdGhtID0gQkFDS1VQX0NPTVBSRVNT SU9OX05PTkU7CisJCWNsaWVudF9jb21wcmVzcy5vcHRpb25zID0gMDsKKwl9CisKIAkvKgogCSAq IENhbid0IHBlcmZvcm0gY2xpZW50LXNpZGUgY29tcHJlc3Npb24gaWYgdGhlIGJhY2t1cCBpcyBu b3QgYmVpbmcKIAkgKiBzZW50IHRvIHRoZSBjbGllbnQuCkBAIC0yNzc5LDkgKzI3NTYsMTAgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJfQogCiAJLyoKLQkgKiBDb21wcmVzc2lvbiBk b2Vzbid0IG1ha2Ugc2Vuc2UgdW5sZXNzIHRhciBmb3JtYXQgaXMgaW4gdXNlLgorCSAqIENsaWVu dC1zaWRlIGNvbXByZXNzaW9uIGRvZXNuJ3QgbWFrZSBzZW5zZSB1bmxlc3MgdGFyIGZvcm1hdCBp cyBpbiB1c2UuCiAJICovCi0JaWYgKGZvcm1hdCA9PSAncCcgJiYgY29tcHJlc3Nsb2MgPT0gQ09N UFJFU1NfTE9DQVRJT05fQ0xJRU5UKQorCWlmIChmb3JtYXQgPT0gJ3AnICYmIGNvbXByZXNzbG9j ID09IENPTVBSRVNTX0xPQ0FUSU9OX0NMSUVOVCAmJgorCQljbGllbnRfY29tcHJlc3MuYWxnb3Jp dGhtICE9IEJBQ0tVUF9DT01QUkVTU0lPTl9OT05FKQogCXsKIAkJcGdfbG9nX2Vycm9yKCJvbmx5 IHRhciBtb2RlIGJhY2t1cHMgY2FuIGJlIGNvbXByZXNzZWQiKTsKIAkJZnByaW50ZihzdGRlcnIs IF8oIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIiksCkBAIC0yODgy LDU2ICsyODYwLDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCX0KIAl9CiAKLQkv KiBTYW5pdHkgY2hlY2tzIGZvciBjb21wcmVzc2lvbi1yZWxhdGVkIG9wdGlvbnMuICovCi0Jc3dp dGNoIChjb21wcmVzc21ldGhvZCkKLQl7Ci0JCWNhc2UgQ09NUFJFU1NJT05fTk9ORToKLQkJCWlm IChjb21wcmVzc2xldmVsICE9IDApCi0JCQl7Ci0JCQkJcGdfbG9nX2Vycm9yKCJjYW5ub3QgdXNl IGNvbXByZXNzaW9uIGxldmVsIHdpdGggbWV0aG9kICVzIiwKLQkJCQkJCQkgIm5vbmUiKTsKLQkJ CQlmcHJpbnRmKHN0ZGVyciwgXygiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRp b24uXG4iKSwKLQkJCQkJCXByb2duYW1lKTsKLQkJCQlleGl0KDEpOwotCQkJfQotCQkJYnJlYWs7 Ci0JCWNhc2UgQ09NUFJFU1NJT05fR1pJUDoKLQkJCWlmIChjb21wcmVzc2xldmVsID4gOSkKLQkJ CXsKLQkJCQlwZ19sb2dfZXJyb3IoImNvbXByZXNzaW9uIGxldmVsICVkIG9mIG1ldGhvZCAlcyBo aWdoZXIgdGhhbiBtYXhpbXVtIG9mIDkiLAotCQkJCQkJCSBjb21wcmVzc2xldmVsLCAiZ3ppcCIp OwotCQkJCWV4aXQoMSk7Ci0JCQl9Ci0JCQlpZiAoY29tcHJlc3Nsb2MgPT0gQ09NUFJFU1NfTE9D QVRJT05fQ0xJRU5UKQotCQkJewotI2lmZGVmIEhBVkVfTElCWgotCQkJCWlmIChjb21wcmVzc2xl dmVsID09IDApCi0JCQkJCWNvbXByZXNzbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047Ci0j ZWxzZQotCQkJCXBnX2xvZ19lcnJvcigidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXBy ZXNzaW9uIHdpdGggJXMiLAotCQkJCQkJCSAiZ3ppcCIpOwotCQkJCWV4aXQoMSk7Ci0jZW5kaWYK LQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIENPTVBSRVNTSU9OX0xaNDoKLQkJCWlmIChjb21wcmVz c2xldmVsID4gMTIpCi0JCQl7Ci0JCQkJcGdfbG9nX2Vycm9yKCJjb21wcmVzc2lvbiBsZXZlbCAl ZCBvZiBtZXRob2QgJXMgaGlnaGVyIHRoYW4gbWF4aW11bSBvZiAxMiIsCi0JCQkJCQkJIGNvbXBy ZXNzbGV2ZWwsICJsejQiKTsKLQkJCQlleGl0KDEpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2Ug Q09NUFJFU1NJT05fWlNURDoKLQkJCWlmIChjb21wcmVzc2xldmVsID4gMjIpCi0JCQl7Ci0JCQkJ cGdfbG9nX2Vycm9yKCJjb21wcmVzc2lvbiBsZXZlbCAlZCBvZiBtZXRob2QgJXMgaGlnaGVyIHRo YW4gbWF4aW11bSBvZiAyMiIsCi0JCQkJCQkJIGNvbXByZXNzbGV2ZWwsICJ6c3RkIik7Ci0JCQkJ ZXhpdCgxKTsKLQkJCX0KLQkJCWJyZWFrOwotCX0KLQogCS8qCiAJICogU2FuaXR5IGNoZWNrcyBm b3IgcHJvZ3Jlc3MgcmVwb3J0aW5nIG9wdGlvbnMuCiAJICovCkBAIC0zMDQwLDcgKzI5NjgsOCBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJZnJlZShsaW5rbG9jKTsKIAl9CiAKLQlC YXNlQmFja3VwKCk7CisJQmFzZUJhY2t1cChjb21wcmVzc2lvbl9hbGdvcml0aG0sIGNvbXByZXNz aW9uX2RldGFpbCwgY29tcHJlc3Nsb2MsCisJCQkgICAmY2xpZW50X2NvbXByZXNzKTsKIAogCXN1 Y2Nlc3MgPSB0cnVlOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFj a3VwL3QvMDEwX3BnX2Jhc2ViYWNrdXAucGwgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wMTBf cGdfYmFzZWJhY2t1cC5wbAppbmRleCBlZmVmZTk0N2Q5Li5lYTVlZjMxNTJjIDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wMTBfcGdfYmFzZWJhY2t1cC5wbAorKysgYi9zcmMv YmluL3BnX2Jhc2ViYWNrdXAvdC8wMTBfcGdfYmFzZWJhY2t1cC5wbApAQCAtNDIsMTUgKzQyLDE1 IEBAICRub2RlLT5jb21tYW5kX2ZhaWxzKFsncGdfYmFzZWJhY2t1cCddLAogIyBTYW5pdHkgY2hl Y2tzIGZvciBvcHRpb25zCiAkbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAogCVsgJ3BnX2Jhc2Vi YWNrdXAnLCAnLUQnLCAiJHRlbXBkaXIvYmFja3VwIiwgJy0tY29tcHJlc3MnLCAnbm9uZToxJyBd LAotCXFyL1xRcGdfYmFzZWJhY2t1cDogZXJyb3I6IGNhbm5vdCB1c2UgY29tcHJlc3Npb24gbGV2 ZWwgd2l0aCBtZXRob2Qgbm9uZS8sCisJcXIvXFFjb21wcmVzc2lvbiBhbGdvcml0aG0gIm5vbmUi IGRvZXMgbm90IGFjY2VwdCBhIGNvbXByZXNzaW9uIGxldmVsLywKIAknZmFpbHVyZSBpZiBtZXRo b2QgIm5vbmUiIHNwZWNpZmllZCB3aXRoIGNvbXByZXNzaW9uIGxldmVsJyk7CiAkbm9kZS0+Y29t bWFuZF9mYWlsc19saWtlKAogCVsgJ3BnX2Jhc2ViYWNrdXAnLCAnLUQnLCAiJHRlbXBkaXIvYmFj a3VwIiwgJy0tY29tcHJlc3MnLCAnbm9uZSsnIF0sCi0JcXIvXFFwZ19iYXNlYmFja3VwOiBlcnJv cjogaW52YWxpZCB2YWx1ZSAibm9uZSsiIGZvciBvcHRpb24vLAorCXFyL1xRdW5yZWNvZ25pemVk IGNvbXByZXNzaW9uIGFsZ29yaXRobSAibm9uZSsiLywKIAknZmFpbHVyZSBvbiBpbmNvcnJlY3Qg c2VwYXJhdG9yIHRvIGRlZmluZSBjb21wcmVzc2lvbiBsZXZlbCcpOwogJG5vZGUtPmNvbW1hbmRf ZmFpbHNfbGlrZSgKIAlbICdwZ19iYXNlYmFja3VwJywgJy1EJywgIiR0ZW1wZGlyL2JhY2t1cCIs ICctLWNvbXByZXNzJywgJ25vbmU6JyBdLAotCXFyL1xRcGdfYmFzZWJhY2t1cDogZXJyb3I6IG5v IGNvbXByZXNzaW9uIGxldmVsIGRlZmluZWQgZm9yIG1ldGhvZCBub25lLywKKwlxci9cUWNvbXBy ZXNzaW9uIGFsZ29yaXRobSAibm9uZSIgZG9lcyBub3QgYWNjZXB0IGEgY29tcHJlc3Npb24gbGV2 ZWwvLAogCSdmYWlsdXJlIG9uIG1pc3NpbmcgY29tcHJlc3Npb24gbGV2ZWwgdmFsdWUnKTsKIAog IyBTb21lIFdpbmRvd3MgQU5TSSBjb2RlIHBhZ2VzIG1heSByZWplY3QgdGhpcyBmaWxlbmFtZSwg aW4gd2hpY2ggY2FzZSB3ZQpAQCAtODksNiArODksNDEgQEAgcHJpbnQgJGNvbmYgIndhbF9sZXZl bCA9IHJlcGxpY2FcbiI7CiBjbG9zZSAkY29uZjsKICRub2RlLT5yZXN0YXJ0OwogCisjIE5vdyB0 aGF0IHdlIGhhdmUgYSBzZXJ2ZXIgdGhhdCBzdXBwb3J0cyByZXBsaWNhdGlvbiBjb21tYW5kcywg dGVzdCB3aGV0aGVyCisjIGNlcnRhaW4gc2NlbmFyaW9zIGZhaWwgb24gdGhlIGNsaWVudCBzaWRl IG9yIG9uIHRoZSBzZXJ2ZXIgc2lkZS4KKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAn cGdfYmFzZWJhY2t1cCcsICctRCcsICIkdGVtcGRpci9iYWNrdXAiLCAnLS1jb21wcmVzcycsICdn emlwOmxldmVsPTIzNicgXSwKKwlxci9cUXBnX2Jhc2ViYWNrdXA6IGVycm9yOiBpbnZhbGlkIGNv bXByZXNzaW9uIHNwZWNpZmljYXRpb246IGNvbXByZXNzaW9uIGFsZ29yaXRobSAiZ3ppcCIgZXhw ZWN0cyBhIGNvbXByZXNzaW9uIGxldmVsIGJldHdlZW4gMSBhbmQgOS8sCisJJ2NsaWVudCBmYWls dXJlIG9uIG91dC1vZi1yYW5nZSBjb21wcmVzc2lvbiBsZXZlbCcpOworJG5vZGUtPmNvbW1hbmRf ZmFpbHNfbGlrZSgKKwlbICdwZ19iYXNlYmFja3VwJywgJy1EJywgIiR0ZW1wZGlyL2JhY2t1cCIs ICctLWNvbXByZXNzJywgJ3NlcnZlci1nemlwOmxldmVsPTIzNicgXSwKKwlxci9cUXBnX2Jhc2Vi YWNrdXA6IGVycm9yOiBjb3VsZCBub3QgaW5pdGlhdGUgYmFzZSBiYWNrdXA6IEVSUk9SOiAgaW52 YWxpZCBjb21wcmVzc2lvbiBzcGVjaWZpY2F0aW9uOiBjb21wcmVzc2lvbiBhbGdvcml0aG0gImd6 aXAiIGV4cGVjdHMgYSBjb21wcmVzc2lvbiBsZXZlbCBiZXR3ZWVuIDEgYW5kIDkvLAorCSdzZXJ2 ZXIgZmFpbHVyZSBvbiBvdXQtb2YtcmFuZ2UgY29tcHJlc3Npb24gbGV2ZWwnKTsKKyRub2RlLT5j b21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfYmFzZWJhY2t1cCcsICctRCcsICIkdGVtcGRpci9i YWNrdXAiLCAnLS1jb21wcmVzcycsICdjbGllbnQtZXh0cmFzcXVpc2h5JyBdLAorCXFyL1xRcGdf YmFzZWJhY2t1cDogZXJyb3I6IHVucmVjb2duaXplZCBjb21wcmVzc2lvbiBhbGdvcml0aG0gImV4 dHJhc3F1aXNoeSIvLAorCSdjbGllbnQgZmFpbHVyZSBvbiBpbnZhbGlkIGNvbXByZXNzaW9uIGFs Z29yaXRobScpOworJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19iYXNlYmFja3Vw JywgJy1EJywgIiR0ZW1wZGlyL2JhY2t1cCIsICctLWNvbXByZXNzJywgJ3NlcnZlci1leHRyYXNx dWlzaHknIF0sCisJcXIvXFFwZ19iYXNlYmFja3VwOiBlcnJvcjogY291bGQgbm90IGluaXRpYXRl IGJhc2UgYmFja3VwOiBFUlJPUjogIHVucmVjb2duaXplZCBjb21wcmVzc2lvbiBhbGdvcml0aG0g ImV4dHJhc3F1aXNoeSIvLAorCSdzZXJ2ZXIgZmFpbHVyZSBvbiBpbnZhbGlkIGNvbXByZXNzaW9u IGFsZ29yaXRobScpOworJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19iYXNlYmFj a3VwJywgJy1EJywgIiR0ZW1wZGlyL2JhY2t1cCIsICctLWNvbXByZXNzJywgJ2d6aXA6dGh1bmsn IF0sCisJcXIvXFFwZ19iYXNlYmFja3VwOiBlcnJvcjogaW52YWxpZCBjb21wcmVzc2lvbiBzcGVj aWZpY2F0aW9uOiB1bmtub3duIGNvbXByZXNzaW9uIG9wdGlvbiAidGh1bmsiLywKKwknZmFpbHVy ZSBvbiBtaXNzaW5nIGNvbXByZXNzaW9uIGxldmVsIHZhbHVlJyk7Ciskbm9kZS0+Y29tbWFuZF9m YWlsc19saWtlKAorCVsgJ3BnX2Jhc2ViYWNrdXAnLCAnLUQnLCAiJHRlbXBkaXIvYmFja3VwIiwg Jy0tY29tcHJlc3MnLCAnZ3ppcDpsZXZlbD1oaWdoJyBdLAorCXFyL1xRcGdfYmFzZWJhY2t1cDog ZXJyb3I6IGludmFsaWQgY29tcHJlc3Npb24gc3BlY2lmaWNhdGlvbjogdmFsdWUgZm9yIGNvbXBy ZXNzaW9uIG9wdGlvbiAibGV2ZWwiIG11c3QgYmUgYW4gaW50ZWdlci8sCisJJ2ZhaWx1cmUgb24g bm9uLW51bWVyaWMgY29tcHJlc3Npb24gbGV2ZWwnKTsKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xp a2UoCisJWyAncGdfYmFzZWJhY2t1cCcsICctRCcsICIkdGVtcGRpci9iYWNrdXAiLCAnLS1jb21w cmVzcycsICdzZXJ2ZXItZ3ppcDp0aHVuaycgXSwKKwlxci9cUXBnX2Jhc2ViYWNrdXA6IGVycm9y OiBjb3VsZCBub3QgaW5pdGlhdGUgYmFzZSBiYWNrdXA6IEVSUk9SOiAgaW52YWxpZCBjb21wcmVz c2lvbiBzcGVjaWZpY2F0aW9uOiB1bmtub3duIGNvbXByZXNzaW9uIG9wdGlvbiAidGh1bmsiLywK KwknZmFpbHVyZSBvbiBtaXNzaW5nIGNvbXByZXNzaW9uIGxldmVsIHZhbHVlJyk7Ciskbm9kZS0+ Y29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2Jhc2ViYWNrdXAnLCAnLUQnLCAiJHRlbXBkaXIv YmFja3VwIiwgJy0tY29tcHJlc3MnLCAnc2VydmVyLWd6aXA6bGV2ZWw9aGlnaCcgXSwKKwlxci9c UXBnX2Jhc2ViYWNrdXA6IGVycm9yOiBjb3VsZCBub3QgaW5pdGlhdGUgYmFzZSBiYWNrdXA6IEVS Uk9SOiAgaW52YWxpZCBjb21wcmVzc2lvbiBzcGVjaWZpY2F0aW9uOiB2YWx1ZSBmb3IgY29tcHJl c3Npb24gb3B0aW9uICJsZXZlbCIgbXVzdCBiZSBhbiBpbnRlZ2VyLywKKwknZmFpbHVyZSBvbiBu b24tbnVtZXJpYyBjb21wcmVzc2lvbiBsZXZlbCcpOworCiAjIFdyaXRlIHNvbWUgZmlsZXMgdG8g dGVzdCB0aGF0IHRoZXkgYXJlIG5vdCBjb3BpZWQuCiBmb3JlYWNoIG15ICRmaWxlbmFtZSAoCiAJ cXcoYmFja3VwX2xhYmVsIHRhYmxlc3BhY2VfbWFwIHBvc3RncmVzcWwuYXV0by5jb25mLnRtcApk aWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9NYWtlZmlsZSBiL3NyYy9jb21tb24vTWFrZWZpbGUKaW5k ZXggMzFjMGRkMzY2ZC4uZjYyNzM0OTgzNSAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi9NYWtlZmls ZQorKysgYi9zcmMvY29tbW9uL01ha2VmaWxlCkBAIC00Nyw2ICs0Nyw3IEBAIExJQlMgKz0gJChQ VEhSRUFEX0xJQlMpCiAKIE9CSlNfQ09NTU9OID0gXAogCWFyY2hpdmUubyBcCisJYmFja3VwX2Nv bXByZXNzaW9uLm8gXAogCWJhc2U2NC5vIFwKIAljaGVja3N1bV9oZWxwZXIubyBcCiAJY29uZmln X2luZm8ubyBcCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL2JhY2t1cF9jb21wcmVzc2lvbi5jIGIv c3JjL2NvbW1vbi9iYWNrdXBfY29tcHJlc3Npb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi5iZjQyNmQ2YjdlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvbW1vbi9i YWNrdXBfY29tcHJlc3Npb24uYwpAQCAtMCwwICsxLDI1OCBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogYmFja3VwX2NvbXByZXNzaW9uLmMKKyAqCisgKiBTaGFyZWQgY29kZSBmb3IgYmFj a3VwIGNvbXByZXNzaW9uIG1ldGhvZHMgYW5kIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEEgY29t cHJlc3Npb24gc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgdGhlIHBhcmFtZXRlcnMgdGhhdCBzaG91 bGQgYmUgdXNlZAorICogd2hlbiBwZXJmb3JtaW5nIGNvbXByZXNzaW9uIHdpdGggYSBzcGVjaWZp YyBhbGdvcml0aG0uIFRoZSBzaW1wbGVzdAorICogcG9zc2libGUgY29tcHJlc3Npb24gc3BlY2lm aWNhdGlvbiBpcyBhbiBpbnRlZ2VyLCB3aGljaCBzZXRzIHRoZQorICogY29tcHJlc3Npb24gbGV2 ZWwuCisgKgorICogT3RoZXJ3aXNlLCBhIGNvbXByZXNzaW9uIHNwZWNpZmljYXRpb24gaXMgYSBj b21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpdGVtcywKKyAqIGVhY2ggaGF2aW5nIHRoZSBmb3JtIGtl eXdvcmQgb3Iga2V5d29yZD12YWx1ZS4KKyAqCisgKiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBv cnRlZCBrZXl3b3JkIGlzICJsZXZlbCIuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURF TlRJRklDQVRJT04KKyAqCQkgIHNyYy9jb21tb24vYmFja3VwX2NvbXByZXNzaW9uLmMKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYgRlJPTlRFTkQKKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorI2Vsc2UKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorI2VuZGlmCisKKyNpbmNsdWRl ICJjb21tb24vYmFja3VwX2NvbXByZXNzaW9uLmgiCisKK3N0YXRpYyBpbnQgZXhwZWN0X2ludGVn ZXJfdmFsdWUoY2hhciAqa2V5d29yZCwgY2hhciAqdmFsdWUsCisJCQkJCQkJCWJjX3NwZWNpZmlj YXRpb24gKnJlc3VsdCk7CisKKy8qCisgKiBMb29rIHVwIGEgY29tcHJlc3Npb24gYWxnb3JpdGht IGJ5IG5hbWUuIFJldHVybnMgdHJ1ZSBhbmQgc2V0cyAqYWxnb3JpdGhtCisgKiBpZiB0aGUgbmFt ZSBpcyByZWNvZ25pemVkLiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS4KKyAqLworYm9vbAorcGFy c2VfYmNfYWxnb3JpdGhtKGNoYXIgKm5hbWUsIGJjX2FsZ29yaXRobSAqYWxnb3JpdGhtKQorewor CWlmIChzdHJjbXAobmFtZSwgIm5vbmUiKSA9PSAwKQorCQkqYWxnb3JpdGhtID0gQkFDS1VQX0NP TVBSRVNTSU9OX05PTkU7CisJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJnemlwIikgPT0gMCkKKwkJ KmFsZ29yaXRobSA9IEJBQ0tVUF9DT01QUkVTU0lPTl9HWklQOworCWVsc2UgaWYgKHN0cmNtcChu YW1lLCAibHo0IikgPT0gMCkKKwkJKmFsZ29yaXRobSA9IEJBQ0tVUF9DT01QUkVTU0lPTl9MWjQ7 CisJZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ6c3RkIikgPT0gMCkKKwkJKmFsZ29yaXRobSA9IEJB Q0tVUF9DT01QUkVTU0lPTl9aU1REOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0 cnVlOworfQorCisvKgorICogR2V0IHRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIGNvcnJlc3BvbmRp bmcgdG8gYSBwYXJ0aWN1bGFyIGNvbXByZXNzaW9uCisgKiBhbGdvcml0aG0uCisgKi8KK2NvbnN0 IGNoYXIgKgorZ2V0X2JjX2FsZ29yaXRobV9uYW1lKGJjX2FsZ29yaXRobSBhbGdvcml0aG0pCit7 CisJc3dpdGNoIChhbGdvcml0aG0pCisJeworCQljYXNlIEJBQ0tVUF9DT01QUkVTU0lPTl9OT05F OgorCQkJcmV0dXJuICJub25lIjsKKwkJY2FzZSBCQUNLVVBfQ09NUFJFU1NJT05fR1pJUDoKKwkJ CXJldHVybiAiZ3ppcCI7CisJCWNhc2UgQkFDS1VQX0NPTVBSRVNTSU9OX0xaNDoKKwkJCXJldHVy biAibHo0IjsKKwkJY2FzZSBCQUNLVVBfQ09NUFJFU1NJT05fWlNURDoKKwkJCXJldHVybiAienN0 ZCI7CisJCS8qIG5vIGRlZmF1bHQsIHRvIHByb3Zva2UgY29tcGlsZXIgd2FybmluZ3MgaWYgdmFs dWVzIGFyZSBhZGRlZCAqLworCX0KKwlBc3NlcnQoZmFsc2UpOworfQorCisvKgorICogUGFyc2Ug YSBjb21wcmVzc2lvbiBzcGVjaWZpY2F0aW9uIGZvciBhIHNwZWNpZmllZCBhbGdvcml0aG0uCisg KgorICogU2VlIHRoZSBmaWxlIGhlYWRlciBjb21tZW50cyBmb3IgYSBicmllZiBkZXNjcmlwdGlv biBvZiB3aGF0IGEgY29tcHJlc3Npb24KKyAqIHNwZWNpZmljYXRpb24gaXMgZXhwZWN0ZWQgdG8g bG9vayBsaWtlLgorICoKKyAqIE9uIHJldHVybiwgYWxsIGZpZWxkcyBvZiB0aGUgcmVzdWx0IG9i amVjdCB3aWxsIGJlIGluaXRpYWxpemVkLgorICogSW4gcGFydGljdWxhciwgcmVzdWx0LT5wYXJz ZV9lcnJvciB3aWxsIGJlIE5VTEwgaWYgbm8gZXJyb3JzIG9jY3VycmVkCisgKiBkdXJpbmcgcGFy c2luZywgYW5kIHdpbGwgb3RoZXJ3aXNlIGNvbnRhaW4gYSBhbiBhcHByb3ByaWF0ZSBlcnJvciBt ZXNzYWdlLgorICogVGhlIGNhbGxlciBtYXkgZnJlZSB0aGlzIGVycm9yIG1lc3NhZ2Ugc3RyaW5n IHVzaW5nIHBmcmVlLCBpZiBkZXNpcmVkLgorICogTm90ZSwgaG93ZXZlciwgZXZlbiBpZiB0aGVy ZSdzIG5vIHBhcnNlIGVycm9yLCB0aGUgc3RyaW5nIG1pZ2h0IG5vdCBtYWtlCisgKiBzZW5zZTog ZS5nLiBmb3IgZ3ppcCwgbGV2ZWw9MTIgaXMgbm90IHNlbnNpYmxlLCBidXQgaXQgZG9lcyBwYXJz ZSBPSy4KKyAqCisgKiBVc2UgdmFsaWRhdGVfYmNfc3BlY2lmaWNhdGlvbigpIHRvIGZpbmQgb3V0 IHdoZXRoZXIgYSBjb21wcmVzc2lvbgorICogc3BlY2lmaWNhdGlvbiBpcyBzZW1hbnRpY2FsbHkg c2Vuc2libGUuCisgKi8KK3ZvaWQKK3BhcnNlX2JjX3NwZWNpZmljYXRpb24oYmNfYWxnb3JpdGht IGFsZ29yaXRobSwgY2hhciAqc3BlY2lmaWNhdGlvbiwKKwkJCQkJICAgYmNfc3BlY2lmaWNhdGlv biAqcmVzdWx0KQoreworCWludAkJYmFyZV9sZXZlbDsKKwljaGFyICAgKmJhcmVfbGV2ZWxfZW5k cDsKKworCS8qIEluaXRpYWwgc2V0dXAgb2YgcmVzdWx0IG9iamVjdC4gKi8KKwlyZXN1bHQtPmFs Z29yaXRobSA9IGFsZ29yaXRobTsKKwlyZXN1bHQtPm9wdGlvbnMgPSAwOworCXJlc3VsdC0+bGV2 ZWwgPSAtMTsKKwlyZXN1bHQtPnBhcnNlX2Vycm9yID0gTlVMTDsKKworCS8qIElmIHRoZXJlIGlz IG5vIHNwZWNpZmljYXRpb24sIHdlJ3JlIGRvbmUgYWxyZWFkeS4gKi8KKwlpZiAoc3BlY2lmaWNh dGlvbiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBBcyBhIHNwZWNpYWwgY2FzZSwgdGhlIHNw ZWNpZmljYXRpb24gY2FuIGJlIGEgYmFyZSBpbnRlZ2VyLiAqLworCWJhcmVfbGV2ZWwgPSBzdHJ0 b2woc3BlY2lmaWNhdGlvbiwgJmJhcmVfbGV2ZWxfZW5kcCwgMTApOworCWlmICgqYmFyZV9sZXZl bF9lbmRwID09ICdcMCcpCisJeworCQlyZXN1bHQtPmxldmVsID0gYmFyZV9sZXZlbDsKKwkJcmVz dWx0LT5vcHRpb25zIHw9IEJBQ0tVUF9DT01QUkVTU0lPTl9PUFRJT05fTEVWRUw7CisJCXJldHVy bjsKKwl9CisKKwkvKiBMb29rIGZvciBjb21tYS1zZXBhcmF0ZWQga2V5d29yZCBvciBrZXl3b3Jk PXZhbHVlIGVudHJpZXMuICovCisJd2hpbGUgKDEpCisJeworCQljaGFyICAgKmt3c3RhcnQ7CisJ CWNoYXIgICAqa3dlbmQ7CisJCWNoYXIgICAqdnN0YXJ0OworCQljaGFyICAgKnZlbmQ7CisJCWlu dAkJa3dsZW47CisJCWludAkJdmxlbjsKKwkJY2hhciAgICprZXl3b3JkOworCQljaGFyICAgKnZh bHVlOworCisJCS8qIEZpZ3VyZSBzdGFydCwgZW5kLCBhbmQgbGVuZ3RoIG9mIG5leHQga2V5d29y ZCBhbmQgYW55IHZhbHVlLiAqLworCQlrd3N0YXJ0ID0ga3dlbmQgPSBzcGVjaWZpY2F0aW9uOwor CQl3aGlsZSAoKmt3ZW5kICE9ICdcMCcgJiYgKmt3ZW5kICE9ICcsJyAmJiAqa3dlbmQgIT0gJz0n KQorCQkJKytrd2VuZDsKKwkJa3dsZW4gPSBrd2VuZCAtIGt3c3RhcnQ7CisJCWlmICgqa3dlbmQg IT0gJz0nKQorCQl7CisJCQl2c3RhcnQgPSB2ZW5kID0gTlVMTDsKKwkJCXZsZW4gPSAwOworCQl9 CisJCWVsc2UKKwkJeworCQkJdnN0YXJ0ID0gdmVuZCA9IGt3ZW5kICsgMTsKKwkJCXdoaWxlICgq dmVuZCAhPSAnXDAnICYmICp2ZW5kICE9ICcsJykKKwkJCQkrK3ZlbmQ7CisJCQl2bGVuID0gdmVu ZCAtIHZzdGFydDsKKwkJfQorCisJCS8qIFJlamVjdCBlbXB0eSBrZXl3b3JkLiAqLworCQlpZiAo a3dsZW4gPT0gMCkKKwkJeworCQkJcmVzdWx0LT5wYXJzZV9lcnJvciA9CisJCQkJcHN0cmR1cCgi Zm91bmQgZW1wdHkgc3RyaW5nIHdoZXJlIGEgY29tcHJlc3Npb24gb3B0aW9uIHdhcyBleHBlY3Rl ZCIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBFeHRyYWN0IGtleXdvcmQgYW5kIHZhbHVlIGFz IHNlcGFyYXRlIEMgc3RyaW5ncy4gKi8KKwkJa2V5d29yZCA9IHBhbGxvYyhrd2xlbiArIDEpOwor CQltZW1jcHkoa2V5d29yZCwga3dzdGFydCwga3dsZW4pOworCQlrZXl3b3JkW2t3bGVuXSA9ICdc MCc7CisJCWlmICh2bGVuID09IDApCisJCQl2YWx1ZSA9IE5VTEw7CisJCWVsc2UKKwkJeworCQkJ dmFsdWUgPSBwYWxsb2ModmxlbiArIDEpOworCQkJbWVtY3B5KHZhbHVlLCB2c3RhcnQsIHZsZW4p OworCQkJdmFsdWVbdmxlbl0gPSAnXDAnOworCQl9CisKKwkJLyogSGFuZGxlIHdoYXRldmVyIGtl eXdvcmQgd2UgZm91bmQuICovCisJCWlmIChzdHJjbXAoa2V5d29yZCwgImxldmVsIikgPT0gMCkK KwkJeworCQkJcmVzdWx0LT5sZXZlbCA9IGV4cGVjdF9pbnRlZ2VyX3ZhbHVlKGtleXdvcmQsIHZh bHVlLCByZXN1bHQpOworCQkJcmVzdWx0LT5vcHRpb25zIHw9IEJBQ0tVUF9DT01QUkVTU0lPTl9P UFRJT05fTEVWRUw7CisJCX0KKwkJZWxzZQorCQkJcmVzdWx0LT5wYXJzZV9lcnJvciA9CisJCQkJ cHNwcmludGYoInVua25vd24gY29tcHJlc3Npb24gb3B0aW9uIFwiJXNcIiIsIGtleXdvcmQpOwor CisJCS8qIFJlbGVhc2UgbWVtb3J5LCBqdXN0IHRvIGJlIHRpZHkuICovCisJCXBmcmVlKGtleXdv cmQpOworCQlpZiAodmFsdWUgIT0gTlVMTCkKKwkJCXBmcmVlKHZhbHVlKTsKKworCQkvKiBJZiB3 ZSBnb3QgYW4gZXJyb3Igb3IgaGF2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3Rv cC4gKi8KKwkJaWYgKHJlc3VsdC0+cGFyc2VfZXJyb3IgIT0gTlVMTCB8fCAqa3dlbmQgPT0gJ1ww JyB8fCAqdmVuZCA9PSAnXDAnKQorCQkJYnJlYWs7CisKKwkJLyogQWR2YW5jZSB0byBuZXh0IGVu dHJ5IGFuZCBsb29wIGFyb3VuZC4gKi8KKwkJc3BlY2lmaWNhdGlvbiA9IHZlbmQgPT0gTlVMTCA/ IGt3ZW5kICsgMSA6IHZlbmQgKyAxOworCX0KK30KKworLyoKKyAqIFBhcnNlICd2YWx1ZScgYXMg YW4gaW50ZWdlciBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCisgKgorICogSWYgcGFyc2luZyBmYWls cywgc2V0IHJlc3VsdC0+cGFyc2VfZXJyb3IgdG8gYW4gYXBwcm9wcmlhdGUgbWVzc2FnZQorICog YW5kIHJldHVybiAtMS4KKyAqLworc3RhdGljIGludAorZXhwZWN0X2ludGVnZXJfdmFsdWUoY2hh ciAqa2V5d29yZCwgY2hhciAqdmFsdWUsIGJjX3NwZWNpZmljYXRpb24gKnJlc3VsdCkKK3sKKwlp bnQJCWl2YWx1ZTsKKwljaGFyICAgKml2YWx1ZV9lbmRwOworCisJaXZhbHVlID0gc3RydG9sKHZh bHVlLCAmaXZhbHVlX2VuZHAsIDEwKTsKKwlpZiAoKml2YWx1ZV9lbmRwICE9ICdcMCcpCisJewor CQlyZXN1bHQtPnBhcnNlX2Vycm9yID0KKwkJCXBzcHJpbnRmKCJ2YWx1ZSBmb3IgY29tcHJlc3Np b24gb3B0aW9uIFwiJXNcIiBtdXN0IGJlIGFuIGludGVnZXIiLAorCQkJCQkga2V5d29yZCk7CisJ CXJldHVybiAtMTsKKwl9CisJcmV0dXJuIGl2YWx1ZTsKK30KKworLyoKKyAqIFJldHVybnMgTlVM TCBpZiB0aGUgY29tcHJlc3Npb24gc3BlY2lmaWNhdGlvbiBzdHJpbmcgd2FzIHN5bnRhY3RpY2Fs bHkKKyAqIHZhbGlkIGFuZCBzZW1hbnRpY2FsbHkgc2Vuc2libGUuICBPdGhlcndpc2UsIHJldHVy bnMgYW4gZXJyb3IgbWVzc2FnZS4KKyAqCisgKiBEb2VzIG5vdCB0ZXN0IHdoZXRoZXIgdGhpcyBi dWlsZCBvZiBQb3N0Z3JlU1FMIHN1cHBvcnRzIHRoZSByZXF1ZXN0ZWQKKyAqIGNvbXByZXNzaW9u IG1ldGhvZC4KKyAqLworY2hhciAqCit2YWxpZGF0ZV9iY19zcGVjaWZpY2F0aW9uKGJjX3NwZWNp ZmljYXRpb24gKnNwZWMpCit7CisJLyogSWYgaXQgZGlkbid0IGV2ZW4gcGFyc2UgT0ssIGl0J3Mg ZGVmaW5pdGVseSBubyBnb29kLiAqLworCWlmIChzcGVjLT5wYXJzZV9lcnJvciAhPSBOVUxMKQor CQlyZXR1cm4gc3BlYy0+cGFyc2VfZXJyb3I7CisKKwkvKgorCSAqIElmIGEgY29tcHJlc3Npb24g bGV2ZWwgd2FzIHNwZWNpZmllZCwgY2hlY2sgdGhhdCB0aGUgYWxnb3JpdGhtIGV4cGVjdHMKKwkg KiBhIGNvbXByZXNzaW9uIGxldmVsIGFuZCB0aGF0IHRoZSBsZXZlbCBpcyB3aXRoaW4gdGhlIGxl Z2FsIHJhbmdlIGZvcgorCSAqIHRoZSBhbGdvcml0aG0uCisJICovCisJaWYgKChzcGVjLT5vcHRp b25zICYgQkFDS1VQX0NPTVBSRVNTSU9OX09QVElPTl9MRVZFTCkgIT0gMCkKKwl7CisJCWludAkJ bWluX2xldmVsID0gMTsKKwkJaW50CQltYXhfbGV2ZWw7CisKKwkJaWYgKHNwZWMtPmFsZ29yaXRo bSA9PSBCQUNLVVBfQ09NUFJFU1NJT05fR1pJUCkKKwkJCW1heF9sZXZlbCA9IDk7CisJCWVsc2Ug aWYgKHNwZWMtPmFsZ29yaXRobSA9PSBCQUNLVVBfQ09NUFJFU1NJT05fTFo0KQorCQkJbWF4X2xl dmVsID0gMTI7CisJCWVsc2UgaWYgKHNwZWMtPmFsZ29yaXRobSA9PSBCQUNLVVBfQ09NUFJFU1NJ T05fWlNURCkKKwkJCW1heF9sZXZlbCA9IDIyOworCQllbHNlCisJCQlyZXR1cm4gcHNwcmludGYo ImNvbXByZXNzaW9uIGFsZ29yaXRobSBcIiVzXCIgZG9lcyBub3QgYWNjZXB0IGEgY29tcHJlc3Np b24gbGV2ZWwiLAorCQkJCQkJCWdldF9iY19hbGdvcml0aG1fbmFtZShzcGVjLT5hbGdvcml0aG0p KTsKKworCQlpZiAoc3BlYy0+bGV2ZWwgPCBtaW5fbGV2ZWwgfHwgc3BlYy0+bGV2ZWwgPiBtYXhf bGV2ZWwpCisJCQlyZXR1cm4gcHNwcmludGYoImNvbXByZXNzaW9uIGFsZ29yaXRobSBcIiVzXCIg ZXhwZWN0cyBhIGNvbXByZXNzaW9uIGxldmVsIGJldHdlZW4gJWQgYW5kICVkIiwKKwkJCQkJCQln ZXRfYmNfYWxnb3JpdGhtX25hbWUoc3BlYy0+YWxnb3JpdGhtKSwKKwkJCQkJCQltaW5fbGV2ZWws IG1heF9sZXZlbCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jb21tb24vYmFja3VwX2NvbXByZXNzaW9uLmggYi9zcmMvaW5jbHVkZS9jb21tb24vYmFj a3VwX2NvbXByZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u MDU2NWNiYzY1NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1vbi9iYWNrdXBf Y29tcHJlc3Npb24uaApAQCAtMCwwICsxLDQ0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBiYWNrdXBfY29tcHJlc3Npb24uaAorICoKKyAqIFNoYXJlZCBkZWZpbml0aW9ucyBmb3IgYmFj a3VwIGNvbXByZXNzaW9uIG1ldGhvZHMgYW5kIHNwZWNpZmljYXRpb25zLgorICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJICBzcmMvY29tbW9uL2JhY2t1cF9j b21wcmVzc2lvbi5oCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIEJBQ0tVUF9D T01QUkVTU0lPTl9ICisjZGVmaW5lIEJBQ0tVUF9DT01QUkVTU0lPTl9ICisKK3R5cGVkZWYgZW51 bSBiY19hbGdvcml0aG0KK3sKKwlCQUNLVVBfQ09NUFJFU1NJT05fTk9ORSwKKwlCQUNLVVBfQ09N UFJFU1NJT05fR1pJUCwKKwlCQUNLVVBfQ09NUFJFU1NJT05fTFo0LAorCUJBQ0tVUF9DT01QUkVT U0lPTl9aU1RECit9IGJjX2FsZ29yaXRobTsKKworI2RlZmluZQlCQUNLVVBfQ09NUFJFU1NJT05f T1BUSU9OX0xFVkVMCQkJKDEgPDwgMCkKKwordHlwZWRlZiBzdHJ1Y3QgYmNfc3BlY2lmaWNhdGlv bgoreworCWJjX2FsZ29yaXRobSBhbGdvcml0aG07CisJdW5zaWduZWQJb3B0aW9uczsJCS8qIE9S IG9mIEJBQ0tVUF9DT01QUkVTU0lPTl9PUFRJT04gY29uc3RhbnRzICovCisJaW50CQkJbGV2ZWw7 CisJY2hhcgkgICAqcGFyc2VfZXJyb3I7CS8qIE5VTEwgaWYgcGFyc2luZyB3YXMgT0ssIGVsc2Ug bWVzc2FnZSAqLworfSBiY19zcGVjaWZpY2F0aW9uOworCitleHRlcm4gYm9vbCBwYXJzZV9iY19h bGdvcml0aG0oY2hhciAqbmFtZSwgYmNfYWxnb3JpdGhtICphbGdvcml0aG0pOworZXh0ZXJuIGNv bnN0IGNoYXIgKmdldF9iY19hbGdvcml0aG1fbmFtZShiY19hbGdvcml0aG0gYWxnb3JpdGhtKTsK KworZXh0ZXJuIHZvaWQgcGFyc2VfYmNfc3BlY2lmaWNhdGlvbihiY19hbGdvcml0aG0gYWxnb3Jp dGhtLAorCQkJCQkJCQkgICBjaGFyICpzcGVjaWZpY2F0aW9uLAorCQkJCQkJCQkgICBiY19zcGVj aWZpY2F0aW9uICpyZXN1bHQpOworCitleHRlcm4gY2hhciAqdmFsaWRhdGVfYmNfc3BlY2lmaWNh dGlvbihiY19zcGVjaWZpY2F0aW9uICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2Jhc2ViYWNrdXBfc2luay5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vYmFzZWJhY2t1cF9zaW5rLmgKaW5kZXggYTdmMTY3NThhNC4uNjU0ZGYyODU3NiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vYmFzZWJhY2t1cF9zaW5rLmgKKysrIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vYmFzZWJhY2t1cF9zaW5rLmgKQEAgLTI3LDYgKzI3LDcgQEAK ICNkZWZpbmUgQkFTRUJBQ0tVUF9TSU5LX0gKIAogI2luY2x1ZGUgImFjY2Vzcy94bG9nX2ludGVy bmFsLmgiCisjaW5jbHVkZSAiY29tbW9uL2JhY2t1cF9jb21wcmVzc2lvbi5oIgogI2luY2x1ZGUg Im5vZGVzL3BnX2xpc3QuaCIKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMuICovCkBAIC0yODMs OSArMjg0LDkgQEAgZXh0ZXJuIHZvaWQgYmJzaW5rX2ZvcndhcmRfY2xlYW51cChiYnNpbmsgKnNp bmspOwogCiAvKiBDb25zdHJ1Y3RvcnMgZm9yIHZhcmlvdXMgdHlwZXMgb2Ygc2lua3MuICovCiBl eHRlcm4gYmJzaW5rICpiYnNpbmtfY29weXN0cmVhbV9uZXcoYm9vbCBzZW5kX3RvX2NsaWVudCk7 Ci1leHRlcm4gYmJzaW5rICpiYnNpbmtfZ3ppcF9uZXcoYmJzaW5rICpuZXh0LCBpbnQgY29tcHJl c3NsZXZlbCk7Ci1leHRlcm4gYmJzaW5rICpiYnNpbmtfbHo0X25ldyhiYnNpbmsgKm5leHQsIGlu dCBjb21wcmVzc2xldmVsKTsKLWV4dGVybiBiYnNpbmsgKmJic2lua196c3RkX25ldyhiYnNpbmsg Km5leHQsIGludCBjb21wcmVzc2xldmVsKTsKK2V4dGVybiBiYnNpbmsgKmJic2lua19nemlwX25l dyhiYnNpbmsgKm5leHQsIGJjX3NwZWNpZmljYXRpb24gKik7CitleHRlcm4gYmJzaW5rICpiYnNp bmtfbHo0X25ldyhiYnNpbmsgKm5leHQsIGJjX3NwZWNpZmljYXRpb24gKik7CitleHRlcm4gYmJz aW5rICpiYnNpbmtfenN0ZF9uZXcoYmJzaW5rICpuZXh0LCBiY19zcGVjaWZpY2F0aW9uICopOwog ZXh0ZXJuIGJic2luayAqYmJzaW5rX3Byb2dyZXNzX25ldyhiYnNpbmsgKm5leHQsIGJvb2wgZXN0 aW1hdGVfYmFja3VwX3NpemUpOwogZXh0ZXJuIGJic2luayAqYmJzaW5rX3NlcnZlcl9uZXcoYmJz aW5rICpuZXh0LCBjaGFyICpwYXRobmFtZSk7CiBleHRlcm4gYmJzaW5rICpiYnNpbmtfdGhyb3R0 bGVfbmV3KGJic2luayAqbmV4dCwgdWludDMyIG1heHJhdGUpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL21zdmMvTWt2Y2J1aWxkLnBtIGIvc3JjL3Rvb2xzL21zdmMvTWt2Y2J1aWxkLnBtCmluZGV4 IDQ0MWQ2YWU2YmYuLmRlODY3NmQzMzkgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9tc3ZjL01rdmNi dWlsZC5wbQorKysgYi9zcmMvdG9vbHMvbXN2Yy9Na3ZjYnVpbGQucG0KQEAgLTEyNCw3ICsxMjQs NyBAQCBzdWIgbWt2Y2J1aWxkCiAJfQogCiAJb3VyIEBwZ2NvbW1vbmFsbGZpbGVzID0gcXcoCi0J ICBhcmNoaXZlLmMgYmFzZTY0LmMgY2hlY2tzdW1faGVscGVyLmMKKwkgIGFyY2hpdmUuYyBiYWNr dXBfY29tcHJlc3Npb24uYyBiYXNlNjQuYyBjaGVja3N1bV9oZWxwZXIuYwogCSAgY29uZmlnX2lu Zm8uYyBjb250cm9sZGF0YV91dGlscy5jIGQycy5jIGVuY25hbWVzLmMgZXhlYy5jCiAJICBmMnMu YyBmaWxlX3Blcm0uYyBmaWxlX3V0aWxzLmMgaGFzaGZuLmMgaXAuYyBqc29uYXBpLmMKIAkgIGtl eXdvcmRzLmMga3dsb29rdXAuYyBsaW5rLWNhbmFyeS5jIG1kNV9jb21tb24uYwpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCBlYWYzZTdhOGQ0Li4wMTc0OGNhYzA3IDEwMDY0NAotLS0gYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdApAQCAtMzc4OCwzICszNzg4LDUgQEAgeXlzY2FuX3QKIHpfc3RyZWFtCiB6 X3N0cmVhbXAKIHppY190CitiY19hbGdvcml0aG0KK2JjX3NwZWNpZmljYXRpb24KLS0gCjIuMjQu MyAoQXBwbGUgR2l0LTEyOCkKCg== --000000000000c813e005daab106f--