From owner-freebsd-net@FreeBSD.ORG Mon Jan 31 12:52:31 2011 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B4B1D1065693; Mon, 31 Jan 2011 12:52:31 +0000 (UTC) (envelope-from ivo.vachkov@gmail.com) Received: from mail-qw0-f54.google.com (mail-qw0-f54.google.com [209.85.216.54]) by mx1.freebsd.org (Postfix) with ESMTP id 82AC88FC12; Mon, 31 Jan 2011 12:52:30 +0000 (UTC) Received: by qwj9 with SMTP id 9so5286257qwj.13 for ; Mon, 31 Jan 2011 04:52:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; bh=Tw3Sv0zglsAU1lsKvFiuI5HPDRQPZzRLp254oM0gdjg=; b=r67arro8ZcGY2s55eKzLUdqoXyGKNugTBTqA1cmpX8+vCZysfgH+HPVgvuFQLNO6yB RtTtCzBX07xzmXFhamtE+r10tt3hA5aF0j2MqJkZxCwPDZE1gVTvWvvzbFMXZvxY+37J tjYcnH16gAvtfHZFp02SMYG6a/rMG8nXDIvKo= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; b=YpGrw4OlPeO6vKO1X4Aav1GDXrOqwxtz2sg40cNfw4D8AoKfxBiOGp5H0LAi0vPm8z v53xAE2+pl1ewDRDit93Go8lW5GzitVnWgf3P03FQORWjnuIZnQcgwjDB33/jwPyXG03 RsN5s+JpfglhIS7Qz1fIp5zy6gOvs/lbmuiyw= Received: by 10.229.82.14 with SMTP id z14mr4059691qck.257.1296478349631; Mon, 31 Jan 2011 04:52:29 -0800 (PST) MIME-Version: 1.0 Received: by 10.220.193.9 with HTTP; Mon, 31 Jan 2011 04:52:09 -0800 (PST) In-Reply-To: <4D437B13.1070405@FreeBSD.org> References: <4D411CC6.1090202@gont.com.ar> <4D431258.8040704@FreeBSD.org> <4D437B13.1070405@FreeBSD.org> From: Ivo Vachkov Date: Mon, 31 Jan 2011 14:52:09 +0200 Message-ID: To: Doug Barton Content-Type: multipart/mixed; boundary=00163646d5be7d227c049b23e38f Cc: FreeBSD Net , bz@freebsd.org Subject: Re: Proposed patch for Port Randomization modifications according to RFC6056 X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 31 Jan 2011 12:52:31 -0000 --00163646d5be7d227c049b23e38f Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hello, I attach the latest version of the port randomization code as a patch against RELENG_8. Changelog: 1) sysctl variable names are changed to: - 'net.inet.ip.portrange.randomalg.version' - representing the algorithm of choice. - 'net.inet.ip.portrange.randomalg.alg5_tradeoff' - representing the Algorithm 5 computational tradeoff value (the 'N' value in the Algorithm 5 description in the RFC 6056). 2) Code comments are synchronized with the current variable names. Ivo Vachkov On Sat, Jan 29, 2011 at 4:27 AM, Doug Barton wrote: > On 01/28/2011 11:57, Ivo Vachkov wrote: >> >> On Fri, Jan 28, 2011 at 9:00 PM, Doug Barton =C2=A0wr= ote: > >>> How does net.inet.ip.portrange.randomalg sound? I would also suggest th= at >>> the second sysctl be named net.inet.ip.portrange.randomalg.alg5_tradeof= f >>> so >>> that one could do 'sysctl net.inet.ip.portrange.randomalg' and see both >>> values. But I won't quibble on that. :) >>> >> >> I have no objections with this. Since this is my first attempt to >> contribute something back to the community I decided to see how it's >> done before. So I found: >> net.inet.tcp.rfc1323 >> net.inet.tcp.rfc3465 >> net.inet.tcp.rfc3390 >> net.inet.tcp.rfc3042 >> which probably led me in a wrong direction :) > > Yeah, I had actually intended to say something to the effect of "there ar= e > plenty of unfortunate examples in the tree already so your doing it that = way > is totally understandable" but I trimmed it. > >> I understand your point and agree with it. However, my somewhat >> limited understanding of the sysctl internal organization is telling >> me that tree node does not support values. Am I wrong? > > You are likely correct. :) =C2=A0It's an inconvenient fact that often for= get > because that's not the sandbox that I usually play in. > >> If my reasoning >> is correct, maybe I can create the sysctl variables with the following >> names: >> - net.inet.ip.portrange.randomalg (Tree Node) >> - net.inet.ip.portrange.randomalg.alg[orithm] (Leaf Node, to store the >> selected algorithm) > > I would go with "version" to increase the visual distinctiveness. I searc= hed > the current tree and there doesn't seem to be a clear winner for how to > portray "this is the current N/M that is in use" but "version" seems to h= ave > the most representatives. > >> - net.inet.ip.portrange.randomalg.alg5_tradeoff (Leaf Node, to store >> the Algorithm 5 trade-off value) > > I'm assuming this is the "N" value mentioned in the RFC. If so, I commend > you on your choice of "tradeoff" to represent it. :) > > > hth, > > Doug > > -- > > =C2=A0 =C2=A0 =C2=A0 =C2=A0Nothin' ever doesn't change, but nothin' chang= es much. > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0-- OK Go > > =C2=A0 =C2=A0 =C2=A0 =C2=A0Breadth of IT experience, and depth of knowled= ge in the DNS. > =C2=A0 =C2=A0 =C2=A0 =C2=A0Yours for the right price. =C2=A0:) =C2=A0http= ://SupersetSolutions.com/ > > --=20 "UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity." Dennis Ritchie --00163646d5be7d227c049b23e38f Content-Type: text/x-patch; charset=US-ASCII; name="20110131-freebsd-RELENG_8-rfc6056.patch" Content-Disposition: attachment; filename="20110131-freebsd-RELENG_8-rfc6056.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gjldn5a20 ZGlmZiAtciAwZDY3ZjljOTgyZjcgc3JjL3N5cy9uZXRpbmV0L2luX3BjYi5jCi0tLSBhL3NyYy9z eXMvbmV0aW5ldC9pbl9wY2IuYwlNb24gSmFuIDMxIDExOjM1OjI0IDIwMTEgKzAyMDAKKysrIGIv c3JjL3N5cy9uZXRpbmV0L2luX3BjYi5jCU1vbiBKYW4gMzEgMTQ6Mjk6NTIgMjAxMSArMDIwMApA QCAtODEsNiArODEsOCBAQAogI2luY2x1ZGUgPG5ldGlwc2VjL2tleS5oPgogI2VuZGlmIC8qIElQ U0VDICovCiAKKyNpbmNsdWRlIDxzeXMvbWQ1Lmg+CQorCiAjaW5jbHVkZSA8c2VjdXJpdHkvbWFj L21hY19mcmFtZXdvcmsuaD4KIAogLyoKQEAgLTEwOSw2ICsxMTEsOCBAQAogVk5FVF9ERUZJTkUo aW50LCBpcHBvcnRfc3RvcHJhbmRvbSk7CQkvKiB0b2dnbGVkIGJ5IGlwcG9ydF90aWNrICovCiBW TkVUX0RFRklORShpbnQsIGlwcG9ydF90Y3BhbGxvY3MpOwogc3RhdGljIFZORVRfREVGSU5FKGlu dCwgaXBwb3J0X3RjcGxhc3Rjb3VudCk7CitWTkVUX0RFRklORSh1X2ludCwgaXBwb3J0X3JhbmRv bWFsZ192ZXIpID0gMTsJLyogdXNlciBjb250cm9sbGVkIHZpYSBzeXNjdGwgKi8KK1ZORVRfREVG SU5FKHVfaW50LCBpcHBvcnRfcmFuZG9tYWxnX2FsZzVfdHJhZGVvZmYpID0gNTAwOwkvKiB1c2Vy IGNvbnRyb2xsZWQgdmlhIHN5c2N0bCAqLwogCiAjZGVmaW5lCVZfaXBwb3J0X3RjcGxhc3Rjb3Vu dAkJVk5FVChpcHBvcnRfdGNwbGFzdGNvdW50KQogCkBAIC0xNDEsNyArMTQ1LDY4IEBACiAKICN1 bmRlZiBSQU5HRUNISwogCisvKgorICogVXBkYXRlcyBWX2lwcG9ydF9yYW5kb21hbGdfdmVyIHRv IHRoZSBwcm92aWRlZCB2YWx1ZQorICogYW5kIGVuc3VyZXMgaXQgaXMgaW4gdGhlIHN1cHBvcnRl ZCByYW5nZSAoMSAtIDUpCisgKi8KK3N0YXRpYyBpbnQKK3N5c2N0bF9uZXRfcmFuZG9tYWxnX3Zl cnNpb25fY2hlY2soU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwl1X2ludCBhbGdvcml0aG0gPSAq KHVfaW50ICopYXJnMTsKKwlpbnQgZXJyb3I7CisKKyNpZmRlZiBWSU1BR0UKKwllcnJvciA9IHZu ZXRfc3lzY3RsX2hhbmRsZV91aW50KG9pZHAsICZhbGdvcml0aG0sIDAsIHJlcSk7CisjZWxzZQor CWVycm9yID0gc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJmFsZ29yaXRobSwgMCwgcmVxKTsKKyNl bmRpZgorCisJaWYgKGVycm9yID09IDApIHsKKwkJc3dpdGNoIChhbGdvcml0aG0pIHsKKwkJY2Fz ZSBJTlBfUkZDNjA1Nl9BTEdfMToKKwkJY2FzZSBJTlBfUkZDNjA1Nl9BTEdfMjoKKwkJY2FzZSBJ TlBfUkZDNjA1Nl9BTEdfMzoKKwkJY2FzZSBJTlBfUkZDNjA1Nl9BTEdfNDoKKwkJY2FzZSBJTlBf UkZDNjA1Nl9BTEdfNToKKwkJCVZfaXBwb3J0X3JhbmRvbWFsZ192ZXIgPSBhbGdvcml0aG07CisJ CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorCX0gCQorCisJ cmV0dXJuIChlcnJvcik7Cit9CisKKy8qCisgKiBVcGRhdGVzIFZfaXBwb3J0X3JhbmRvbWFsZ19h bGc1X3RyYWRlb2ZmIHRvIHByb3ZpZGVkIHZhbHVlCisgKiBhbmQgZW5zdXJlcyBpdCBpcyBpbiB0 aGUgc3VwcG9ydGVkIHJhbmdlICgxIC0gNjU1MzYpCisgKi8KK3N0YXRpYyBpbnQKK3N5c2N0bF9u ZXRfcmFuZG9tYWxnX2FsZzVfdHJhZGVvZmZfY2hlY2soU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sK Kwl1X2ludCB0cmFkZW9mZiA9ICoodV9pbnQgKilhcmcxOworCWludCBlcnJvcjsKKworI2lmZGVm IFZJTUFHRQorCWVycm9yID0gdm5ldF9zeXNjdGxfaGFuZGxlX3VpbnQob2lkcCwgJnRyYWRlb2Zm LCAwLCByZXEpOworI2Vsc2UKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZ0cmFk ZW9mZiwgMCwgcmVxKTsKKyNlbmRpZgorCisJaWYgKGVycm9yID09IDApIHsKKwkJaWYgKHRyYWRl b2ZmIDwgMSB8fCB0cmFkZW9mZiA+IDY1NTM2KQorCQkJcmV0dXJuIChFSU5WQUwpOworCQllbHNl CisJCQlWX2lwcG9ydF9yYW5kb21hbGdfYWxnNV90cmFkZW9mZiA9IHRyYWRlb2ZmOworCX0KKwor CXJldHVybiAoZXJyb3IpOworfQorCiBTWVNDVExfTk9ERShfbmV0X2luZXRfaXAsIElQUFJPVE9f SVAsIHBvcnRyYW5nZSwgQ1RMRkxBR19SVywgMCwgIklQIFBvcnRzIik7CitTWVNDVExfTk9ERShf bmV0X2luZXRfaXBfcG9ydHJhbmdlLCBJUFBST1RPX0lQLCByYW5kb21hbGcsIENUTEZMQUdfUlcs IDAsIAorCSJQb3J0IFJhbmRvbWl6YXRpb24gQWxnb3JpdGhtcyIpOwogCiBTWVNDVExfVk5FVF9Q Uk9DKF9uZXRfaW5ldF9pcF9wb3J0cmFuZ2UsIE9JRF9BVVRPLCBsb3dmaXJzdCwKIAlDVExUWVBF X0lOVHxDVExGTEFHX1JXLCAmVk5FVF9OQU1FKGlwcG9ydF9sb3dmaXJzdGF1dG8pLCAwLApAQCAt MTc0LDYgKzIzOSwxNSBAQAogCSZWTkVUX05BTUUoaXBwb3J0X3JhbmRvbXRpbWUpLCAwLAogCSJN aW5pbXVtIHRpbWUgdG8ga2VlcCBzZXF1ZW50YWwgcG9ydCAiCiAJImFsbG9jYXRpb24gYmVmb3Jl IHN3aXRjaGluZyB0byBhIHJhbmRvbSBvbmUiKTsKK1NZU0NUTF9WTkVUX1BST0MoX25ldF9pbmV0 X2lwX3BvcnRyYW5nZV9yYW5kb21hbGcsIE9JRF9BVVRPLCB2ZXJzaW9uLAorCUNUTFRZUEVfVUlO VHxDVExGTEFHX1JXLCAmVk5FVF9OQU1FKGlwcG9ydF9yYW5kb21hbGdfdmVyKSwgMCwKKwkmc3lz Y3RsX25ldF9yYW5kb21hbGdfdmVyc2lvbl9jaGVjaywgIklVIiwgCisJIlJGQyA2MDU2IFBvcnQg cmFuZG9taXphdGlvbiBhbGdvcml0aG0iKTsKK1NZU0NUTF9WTkVUX1BST0MoX25ldF9pbmV0X2lw X3BvcnRyYW5nZV9yYW5kb21hbGcsIE9JRF9BVVRPLAorCWFsZzVfdHJhZGVvZmYsIENUTFRZUEVf VUlOVHxDVExGTEFHX1JXLAorCSZWTkVUX05BTUUoaXBwb3J0X3JhbmRvbWFsZ19hbGc1X3RyYWRl b2ZmKSwgMCwKKwkmc3lzY3RsX25ldF9yYW5kb21hbGdfYWxnNV90cmFkZW9mZl9jaGVjaywgIklV IiwKKwkiUkZDIDYwNTYgQWxnb3JpdGhtIDUgY29tcHV0YXRpb25hbCB0cmFkZS1vZmYiKTsKIAog LyoKICAqIGluX3BjYi5jOiBtYW5hZ2UgdGhlIFByb3RvY29sIENvbnRyb2wgQmxvY2tzLgpAQCAt NDY4LDIxICs1NDIsMTc3IEBACiAJCQlsYXN0ID0gYXV4OwogCQl9CiAKLQkJaWYgKGRvcmFuZG9t KQotCQkJKmxhc3Rwb3J0ID0gZmlyc3QgKwotCQkJCSAgICAoYXJjNHJhbmRvbSgpICUgKGxhc3Qg LSBmaXJzdCkpOwotCiAJCWNvdW50ID0gbGFzdCAtIGZpcnN0OwogCi0JCWRvIHsKLQkJCWlmIChj b3VudC0tIDwgMCkJLyogY29tcGxldGVseSB1c2VkPyAqLwotCQkJCXJldHVybiAoRUFERFJOT1RB VkFJTCk7Ci0JCQkrKypsYXN0cG9ydDsKLQkJCWlmICgqbGFzdHBvcnQgPCBmaXJzdCB8fCAqbGFz dHBvcnQgPiBsYXN0KQotCQkJCSpsYXN0cG9ydCA9IGZpcnN0OwotCQkJbHBvcnQgPSBodG9ucygq bGFzdHBvcnQpOwotCQl9IHdoaWxlIChpbl9wY2Jsb29rdXBfbG9jYWwocGNiaW5mbywgbGFkZHIs Ci0JCSAgICBscG9ydCwgd2lsZCwgY3JlZCkpOworCQkvKiAKKwkJICogQWNjb3JkaW5nIHRvIFJG QyA2MDU2IHRoZXJlIGFyZSA1IChmaXZlKSBwb3NzaWJsZSBhbGdvcml0aG1zCisJCSAqIGZvciBy YW5kb20gcG9ydCBhbGxvY2F0aW9uLiBVc2FnZSBvZiBhIHBhcnRpY3VsYXIgYWxnb3JpdGhtCisJ CSAqIGlzIHNwZWNpZmllZCB3aXRoIHRoZSAnbmV0LmluZXQuaXAucG9ydHJhbmdlLnJhbmRvbWFs Zy52ZXJzaW9uJworCQkgKiBzeXNjdGwgdmFyaWFibGUuIERlZmF1bHQgdmFsdWUgaXMgMSwgd2hp Y2ggcmVwcmVzZW50cyB0aGUKKwkJICogbGVnYWN5IHJhbmRvbSBwb3J0IGFsbG9jYXRpb24gYWxn b3JpdGhtIGluIEZyZWVCU0QuCisJCSAqLworCQlpZiAoZG9yYW5kb20pIHsKKwkJCXN3aXRjaCAo Vl9pcHBvcnRfcmFuZG9tYWxnX3ZlcikgeworCQkJY2FzZSBJTlBfUkZDNjA1Nl9BTEdfNToJLyog UmFuZG9tLUluY3JlbWVudHMgUG9ydCBTZWxlY3Rpb24gKi8KKwkJCQlkbyB7CisJCQkJCWlmIChj b3VudC0tIDwgMCkJLyogY29tcGxldGVseSB1c2VkPyAqLworCQkJCQkJcmV0dXJuIChFQUREUk5P VEFWQUlMKTsKKworCQkJCQkqbGFzdHBvcnQgPSBmaXJzdCArICgoYXJjNHJhbmRvbSgpICUgNjU1 MzYpICsgCisJCQkJCSAgICAoYXJjNHJhbmRvbSgpICUgVl9pcHBvcnRfcmFuZG9tYWxnX2FsZzVf dHJhZGVvZmYpICsgMSk7CisKKwkJCQkJaWYgKCpsYXN0cG9ydCA8IGZpcnN0IHx8ICpsYXN0cG9y dCA+IGxhc3QpCisJCQkJCQkqbGFzdHBvcnQgPSBmaXJzdDsKKwkJCQkJbHBvcnQgPSBodG9ucygq bGFzdHBvcnQpOworCQkJCX0gd2hpbGUgKGluX3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCBsYWRk ciwKKwkJCQkgICAgbHBvcnQsIHdpbGQsIGNyZWQpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgSU5Q X1JGQzYwNTZfQUxHXzQ6CS8qIERvdWJsZS1IYXNoIFBvcnQgU2VsZWN0aW9uIEFsZ29yaXRobSAq LworCQkJCXsKKwkJCQkJTUQ1X0NUWCBmX2N0eDsKKwkJCQkJTUQ1X0NUWCBnX2N0eDsKKwkJCQkJ dV9pbnQzMl90IEZbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKwkJCQkJdV9pbnQzMl90IEdbNF0gPSB7 IDAsIDAsIDAsIDAgfTsKKwkJCQkJdV9pbnQzMl90IHNlY3JldF9mWzRdID0geyAwLCAwLCAwLCAw IH07CisJCQkJCXVfaW50MzJfdCBzZWNyZXRfZ1s0XSA9IHsgMCwgMCwgMCwgMCB9OworCQkJCQl1 X2ludDE2X3QgdGFibGVbMTZdOyAKKwkJCQkJdV9pbnQzMl90IGluZGV4ID0gMDsKKwkJCQkJdV9p bnQzMl90IG9mZnNldCA9IDA7CisKKwkJCQkJc2VjcmV0X2ZbMF0gPSBhcmM0cmFuZG9tKCk7CisJ CQkJCXNlY3JldF9mWzFdID0gYXJjNHJhbmRvbSgpOworCQkJCQlzZWNyZXRfZlsyXSA9IGFyYzRy YW5kb20oKTsKKwkJCQkJc2VjcmV0X2ZbM10gPSBhcmM0cmFuZG9tKCk7CisKKwkJCQkJc2VjcmV0 X2dbMF0gPSBhcmM0cmFuZG9tKCk7CisJCQkJCXNlY3JldF9nWzFdID0gYXJjNHJhbmRvbSgpOwor CQkJCQlzZWNyZXRfZ1syXSA9IGFyYzRyYW5kb20oKTsKKwkJCQkJc2VjcmV0X2dbM10gPSBhcmM0 cmFuZG9tKCk7CisKKwkJCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc2l6ZW9mKHRhYmxlKTsg aW5kZXgrKykKKwkJCQkJCXRhYmxlW2luZGV4XSA9IGFyYzRyYW5kb20oKSAlIDY1NTM2OworCisJ CQkJCU1ENUluaXQoJmZfY3R4KTsKKwkJCQkJTUQ1VXBkYXRlKCZmX2N0eCwgKHVfY2hhciAqKSZp bnAtPmlucF9sYWRkciwKKwkJCQkJICAgIHNpemVvZihpbnAtPmlucF9sYWRkcikpOworCQkJCQlN RDVVcGRhdGUoJmZfY3R4LCAodV9jaGFyICopJmlucC0+aW5wX2ZhZGRyLAorCQkJCQkgICAgc2l6 ZW9mKGlucC0+aW5wX2ZhZGRyKSk7CisJCQkJCU1ENVVwZGF0ZSgmZl9jdHgsICh1X2NoYXIgKikm aW5wLT5pbnBfZnBvcnQsCisJCQkJCSAgICBzaXplb2YoaW5wLT5pbnBfZnBvcnQpKTsKKwkJCQkJ TUQ1VXBkYXRlKCZmX2N0eCwgKHVfY2hhciAqKXNlY3JldF9mLAorCQkJCQkgICAgc2l6ZW9mKHNl Y3JldF9mKSk7CisJCQkJCU1ENUZpbmFsKCh1X2NoYXIgKikmRiwgJmZfY3R4KTsKKworCQkJCQlv ZmZzZXQgPSAoKEZbMF0gXiBGWzFdKSBeIChGWzJdIF4gRlszXSkpOworCisJCQkJCU1ENUluaXQo JmdfY3R4KTsKKwkJCQkJTUQ1VXBkYXRlKCZnX2N0eCwgKHVfY2hhciAqKSZpbnAtPmlucF9sYWRk ciwKKwkJCQkJICAgIHNpemVvZihpbnAtPmlucF9sYWRkcikpOworCQkJCQlNRDVVcGRhdGUoJmdf Y3R4LCAodV9jaGFyICopJmlucC0+aW5wX2ZhZGRyLAorCQkJCQkgICAgc2l6ZW9mKGlucC0+aW5w X2ZhZGRyKSk7CisJCQkJCU1ENVVwZGF0ZSgmZ19jdHgsICh1X2NoYXIgKikmaW5wLT5pbnBfZnBv cnQsCisJCQkJCSAgICBzaXplb2YoaW5wLT5pbnBfZnBvcnQpKTsKKwkJCQkJTUQ1VXBkYXRlKCZn X2N0eCwgKHVfY2hhciAqKXNlY3JldF9nLAorCQkJCQkgICAgc2l6ZW9mKHNlY3JldF9nKSk7CisJ CQkJCU1ENUZpbmFsKCh1X2NoYXIgKikmRywgJmdfY3R4KTsKKworCQkJCQlpbmRleCA9ICgoR1sw XSBeIEdbMV0pIF4gKEdbMl0gXiBHWzNdKSkgJSBzaXplb2YodGFibGUpOworCisJCQkJCWRvIHsK KwkJCQkJCWlmIChjb3VudC0tIDwgMCkJLyogY29tcGxldGVseSB1c2VkPyAqLworCQkJCQkJCXJl dHVybiAoRUFERFJOT1RBVkFJTCk7CisKKwkJCQkJCSpsYXN0cG9ydCA9IGZpcnN0ICsgCisJCQkJ CQkgICAgKG9mZnNldCArIHRhYmxlW2luZGV4XSsrKSAlIGNvdW50OworCisJCQkJCQlpZiAoKmxh c3Rwb3J0IDwgZmlyc3QgfHwgKmxhc3Rwb3J0ID4gbGFzdCkKKwkJCQkJCQkqbGFzdHBvcnQgPSBm aXJzdDsKKwkJCQkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKKwkJCQkJfSB3aGlsZSAoaW5f cGNibG9va3VwX2xvY2FsKHBjYmluZm8sIGxhZGRyLAorCQkJCQkgICAgbHBvcnQsIHdpbGQsIGNy ZWQpKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIElOUF9SRkM2MDU2X0FMR18zOgkvKiBT aW1wbGUgSGFzaC1CYXNlZCBQb3J0IFNlbGVjdGlvbiBBbGdvcml0aG0gKi8KKwkJCQl7CisJCQkJ CU1ENV9DVFggZl9jdHg7CisJCQkJCXVfaW50MzJfdCBGWzRdID0geyAwLCAwLCAwLCAwIH07CisJ CQkJCXVfaW50MzJfdCBzZWNyZXRfZls0XSA9IHsgMCwgMCwgMCwgMCB9OworCQkJCQl1X2ludDMy X3Qgb2Zmc2V0ID0gMDsKKworCQkJCQlzZWNyZXRfZlswXSA9IGFyYzRyYW5kb20oKTsKKwkJCQkJ c2VjcmV0X2ZbMV0gPSBhcmM0cmFuZG9tKCk7CisJCQkJCXNlY3JldF9mWzJdID0gYXJjNHJhbmRv bSgpOworCQkJCQlzZWNyZXRfZlszXSA9IGFyYzRyYW5kb20oKTsKKworCQkJCQlNRDVJbml0KCZm X2N0eCk7CisJCQkJCU1ENVVwZGF0ZSgmZl9jdHgsICh1X2NoYXIgKikmaW5wLT5pbnBfbGFkZHIs CisJCQkJCSAgICBzaXplb2YoaW5wLT5pbnBfbGFkZHIpKTsKKwkJCQkJTUQ1VXBkYXRlKCZmX2N0 eCwgKHVfY2hhciAqKSZpbnAtPmlucF9mYWRkciwKKwkJCQkJICAgIHNpemVvZihpbnAtPmlucF9m YWRkcikpOworCQkJCQlNRDVVcGRhdGUoJmZfY3R4LCAodV9jaGFyICopJmlucC0+aW5wX2Zwb3J0 LAorCQkJCQkgICAgc2l6ZW9mKGlucC0+aW5wX2Zwb3J0KSk7CisJCQkJCU1ENVVwZGF0ZSgmZl9j dHgsICh1X2NoYXIgKilzZWNyZXRfZiwKKwkJCQkJICAgIHNpemVvZihzZWNyZXRfZikpOworCQkJ CQlNRDVGaW5hbCgodV9jaGFyICopJkYsICZmX2N0eCk7CisKKwkJCQkJb2Zmc2V0ID0gKChGWzBd IF4gRlsxXSkgXiAoRlsyXSBeIEZbM10pKTsKKworCQkJCQlkbyB7CisJCQkJCQlpZiAoY291bnQt LSA8IDApCS8qIGNvbXBsZXRlbHkgdXNlZD8gKi8KKwkJCQkJCQlyZXR1cm4gKEVBRERSTk9UQVZB SUwpOworCisJCQkJCQkqbGFzdHBvcnQgPSBmaXJzdCArICgoYXJjNHJhbmRvbSgpICUgNjU1MzYp ICsgCisJCQkJCQkgICAgKG9mZnNldCAlIDY1NTM2KSkgJSBjb3VudDsKKworCQkJCQkJaWYgKCps YXN0cG9ydCA8IGZpcnN0IHx8ICpsYXN0cG9ydCA+IGxhc3QpCisJCQkJCQkJKmxhc3Rwb3J0ID0g Zmlyc3Q7CisJCQkJCQlscG9ydCA9IGh0b25zKCpsYXN0cG9ydCk7CisJCQkJCX0gd2hpbGUgKGlu X3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCBsYWRkciwKKwkJCQkJICAgIGxwb3J0LCB3aWxkLCBj cmVkKSk7CQkJCQorCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgSU5QX1JGQzYwNTZfQUxHXzI6 CS8qIFNpbXBsZSBQb3J0IFJhbmRvbWl6YXRpb24gQWxnb3JpdGhtIElJICovCisJCQkJZG8gewor CQkJCQlpZiAoY291bnQtLSA8IDApCS8qIGNvbXBsZXRlbHkgdXNlZD8gKi8KKwkJCQkJCXJldHVy biAoRUFERFJOT1RBVkFJTCk7CisKKwkJCQkJKmxhc3Rwb3J0ID0gZmlyc3QgKyAoYXJjNHJhbmRv bSgpICUgKGxhc3QgLSBmaXJzdCkpOworCisJCQkJCWlmICgqbGFzdHBvcnQgPCBmaXJzdCB8fCAq bGFzdHBvcnQgPiBsYXN0KQorCQkJCQkJKmxhc3Rwb3J0ID0gZmlyc3Q7CisJCQkJCWxwb3J0ID0g aHRvbnMoKmxhc3Rwb3J0KTsKKwkJCQl9IHdoaWxlIChpbl9wY2Jsb29rdXBfbG9jYWwocGNiaW5m bywgbGFkZHIsCisJCQkJICAgIGxwb3J0LCB3aWxkLCBjcmVkKSk7CisJCQkJYnJlYWs7CisJCQlj YXNlIElOUF9SRkM2MDU2X0FMR18xOgkvKiBTaW1wbGUgUG9ydCBSYW5kb21pemF0aW9uIEFsZ29y aXRobSBJICovCisJCQlkZWZhdWx0OgorCQkJCSpsYXN0cG9ydCA9IGZpcnN0ICsgKGFyYzRyYW5k b20oKSAlIChsYXN0IC0gZmlyc3QpKTsKKworCQkJCWRvIHsKKwkJCQkJaWYgKGNvdW50LS0gPCAw KQkvKiBjb21wbGV0ZWx5IHVzZWQ/ICovCisJCQkJCQlyZXR1cm4gKEVBRERSTk9UQVZBSUwpOwor CisJCQkJCSsrKmxhc3Rwb3J0OworCisJCQkJCWlmICgqbGFzdHBvcnQgPCBmaXJzdCB8fCAqbGFz dHBvcnQgPiBsYXN0KQorCQkJCQkJKmxhc3Rwb3J0ID0gZmlyc3Q7CisJCQkJCWxwb3J0ID0gaHRv bnMoKmxhc3Rwb3J0KTsKKwkJCQl9IHdoaWxlIChpbl9wY2Jsb29rdXBfbG9jYWwocGNiaW5mbywg bGFkZHIsCisJCQkJICAgIGxwb3J0LCB3aWxkLCBjcmVkKSk7CisJCQl9CisJCX0gZWxzZSB7CisJ CQlkbyB7CisJCQkJaWYgKGNvdW50LS0gPCAwKSAgICAgICAgLyogY29tcGxldGVseSB1c2VkPyAq LworCQkJCQlyZXR1cm4gKEVBRERSTk9UQVZBSUwpOworCQorCQkJCSsrKmxhc3Rwb3J0OworCisJ CQkJaWYgKCpsYXN0cG9ydCA8IGZpcnN0IHx8ICpsYXN0cG9ydCA+IGxhc3QpCisJCQkJCSpsYXN0 cG9ydCA9IGZpcnN0OworCQkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKKwkJCX0gd2hpbGUg KGluX3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCBsYWRkciwKKwkJCSAgICBscG9ydCwgd2lsZCwg Y3JlZCkpOworCQl9CiAJfQogCSpsYWRkcnAgPSBsYWRkci5zX2FkZHI7CiAJKmxwb3J0cCA9IGxw b3J0OwpkaWZmIC1yIDBkNjdmOWM5ODJmNyBzcmMvc3lzL25ldGluZXQvaW5fcGNiLmgKLS0tIGEv c3JjL3N5cy9uZXRpbmV0L2luX3BjYi5oCU1vbiBKYW4gMzEgMTE6MzU6MjQgMjAxMSArMDIwMAor KysgYi9zcmMvc3lzL25ldGluZXQvaW5fcGNiLmgJTW9uIEphbiAzMSAxNDoyOTo1MiAyMDExICsw MjAwCkBAIC00NTIsNiArNDUyLDE1IEBACiAKICNkZWZpbmUJSU5QX0NIRUNLX1NPQ0tBRihzbywg YWYpCShJTlBfU09DS0FGKHNvKSA9PSBhZikKIAorLyoKKyAqIFJGQzYwNTYgUG9ydCBSYW5kb21p emF0aW9uIEFsZ29yaXRobXMKKyAqLworI2RlZmluZQlJTlBfUkZDNjA1Nl9BTEdfMQkxCS8qIFNp bXBsZSBQb3J0IFJhbmRvbWl6YXRpb24gQWxnb3JpdGhtIEkgKi8KKyNkZWZpbmUJSU5QX1JGQzYw NTZfQUxHXzIJMgkvKiBTaW1wbGUgUG9ydCBSYW5kb21pemF0aW9uIEFsZ29yaXRobSBJSSAqLwor I2RlZmluZQlJTlBfUkZDNjA1Nl9BTEdfMwkzCS8qIFNpbXBsZSBIYXNoLUJhc2VkIFBvcnQgU2Vs ZWN0aW9uIEFsZ29yaXRobSAqLworI2RlZmluZQlJTlBfUkZDNjA1Nl9BTEdfNAk0CS8qIERvdWJs ZS1IYXNoIFBvcnQgU2VsZWN0aW9uIEFsZ29yaXRobSAqLworI2RlZmluZQlJTlBfUkZDNjA1Nl9B TEdfNQk1CS8qIFJhbmRvbS1JbmNyZW1lbnRzIFBvcnQgU2VsZWN0aW9uIEFsZ29yaXRobSAqLwor CiAjaWZkZWYgX0tFUk5FTAogVk5FVF9ERUNMQVJFKGludCwgaXBwb3J0X3Jlc2VydmVkaGlnaCk7 CiBWTkVUX0RFQ0xBUkUoaW50LCBpcHBvcnRfcmVzZXJ2ZWRsb3cpOwpAQCAtNDY2LDYgKzQ3NSw4 IEBACiBWTkVUX0RFQ0xBUkUoaW50LCBpcHBvcnRfcmFuZG9tdGltZSk7CiBWTkVUX0RFQ0xBUkUo aW50LCBpcHBvcnRfc3RvcHJhbmRvbSk7CiBWTkVUX0RFQ0xBUkUoaW50LCBpcHBvcnRfdGNwYWxs b2NzKTsKK1ZORVRfREVDTEFSRSh1X2ludCwgaXBwb3J0X3JhbmRvbWFsZ192ZXIpOworVk5FVF9E RUNMQVJFKHVfaW50LCBpcHBvcnRfcmFuZG9tYWxnX2FsZzVfdHJhZGVvZmYpOwogCiAjZGVmaW5l CVZfaXBwb3J0X3Jlc2VydmVkaGlnaAlWTkVUKGlwcG9ydF9yZXNlcnZlZGhpZ2gpCiAjZGVmaW5l CVZfaXBwb3J0X3Jlc2VydmVkbG93CVZORVQoaXBwb3J0X3Jlc2VydmVkbG93KQpAQCAtNDgwLDYg KzQ5MSw4IEBACiAjZGVmaW5lCVZfaXBwb3J0X3JhbmRvbXRpbWUJVk5FVChpcHBvcnRfcmFuZG9t dGltZSkKICNkZWZpbmUJVl9pcHBvcnRfc3RvcHJhbmRvbQlWTkVUKGlwcG9ydF9zdG9wcmFuZG9t KQogI2RlZmluZQlWX2lwcG9ydF90Y3BhbGxvY3MJVk5FVChpcHBvcnRfdGNwYWxsb2NzKQorI2Rl ZmluZSBWX2lwcG9ydF9yYW5kb21hbGdfdmVyCVZORVQoaXBwb3J0X3JhbmRvbWFsZ192ZXIpCisj ZGVmaW5lIFZfaXBwb3J0X3JhbmRvbWFsZ19hbGc1X3RyYWRlb2ZmCVZORVQoaXBwb3J0X3JhbmRv bWFsZ19hbGc1X3RyYWRlb2ZmKQogCiBleHRlcm4gc3RydWN0IGNhbGxvdXQgaXBwb3J0X3RpY2tf Y2FsbG91dDsKIApkaWZmIC1yIDBkNjdmOWM5ODJmNyBzcmMvc3lzL25ldGluZXQ2L2luNl9zcmMu YwotLS0gYS9zcmMvc3lzL25ldGluZXQ2L2luNl9zcmMuYwlNb24gSmFuIDMxIDExOjM1OjI0IDIw MTEgKzAyMDAKKysrIGIvc3JjL3N5cy9uZXRpbmV0Ni9pbjZfc3JjLmMJTW9uIEphbiAzMSAxNDoy OTo1MiAyMDExICswMjAwCkBAIC0xMDgsNiArMTA4LDggQEAKICNpbmNsdWRlIDxuZXRpbmV0Ni9z Y29wZTZfdmFyLmg+CiAjaW5jbHVkZSA8bmV0aW5ldDYvbmQ2Lmg+CiAKKyNpbmNsdWRlIDxzeXMv bWQ1Lmg+CisKIHN0YXRpYyBzdHJ1Y3QgbXR4IGFkZHJzZWxfbG9jazsKICNkZWZpbmUJQUREUlNF TF9MT0NLX0lOSVQoKQltdHhfaW5pdCgmYWRkcnNlbF9sb2NrLCAiYWRkcnNlbF9sb2NrIiwgTlVM TCwgTVRYX0RFRikKICNkZWZpbmUJQUREUlNFTF9MT0NLKCkJCW10eF9sb2NrKCZhZGRyc2VsX2xv Y2spCkBAIC05MTksMjMgKzkyMSwxOTUgQEAKIAkJbGFzdCA9IGF1eDsKIAl9CiAKLQlpZiAoZG9y YW5kb20pCi0JCSpsYXN0cG9ydCA9IGZpcnN0ICsgKGFyYzRyYW5kb20oKSAlIChsYXN0IC0gZmly c3QpKTsKLQogCWNvdW50ID0gbGFzdCAtIGZpcnN0OwogCi0JZG8gewotCQlpZiAoY291bnQtLSA8 IDApIHsJLyogY29tcGxldGVseSB1c2VkPyAqLwotCQkJLyogVW5kbyBhbiBhZGRyZXNzIGJpbmQg dGhhdCBtYXkgaGF2ZSBvY2N1cnJlZC4gKi8KLQkJCWlucC0+aW42cF9sYWRkciA9IGluNmFkZHJf YW55OwotCQkJcmV0dXJuIChFQUREUk5PVEFWQUlMKTsKKwkvKgorCSAqIEFjY29yZGluZyB0byBS RkMgNjA1NiB0aGVyZSBhcmUgNSAoZml2ZSkgcG9zc2libGUgYWxnb3JpdGhtcworCSAqIGZvciBy YW5kb20gcG9ydCBhbGxvY2F0aW9uLiBVc2FnZSBvZiBhIHBhcnRpY3VsYXIgYWxnb3JpdGhtCisJ ICogaXMgc3BlY2lmaWVkIHdpdGggdGhlICduZXQuaW5ldC5pcC5wb3J0cmFuZ2UucmFuZG9tYWxn LnZlcnNpb24nCisJICogc3lzY3RsIHZhcmlhYmxlLiBEZWZhdWx0IHZhbHVlIGlzIDEsIHdoaWNo IHJlcHJlc2VudHMgdGhlCisJICogbGVnYWN5IHJhbmRvbSBwb3J0IGFsbG9jYXRpb24gYWxnb3Jp dGhtIGluIEZyZWVCU0QuCisJICovCisJaWYgKGRvcmFuZG9tKSB7CisJCXN3aXRjaCAoVl9pcHBv cnRfcmFuZG9tYWxnX3ZlcikgeworCQljYXNlIElOUF9SRkM2MDU2X0FMR181OgkvKiBSYW5kb20t SW5jcmVtZW50cyBQb3J0IFNlbGVjdGlvbiAqLworCQkJZG8geworCQkJCWlmIChjb3VudC0tIDwg MCkgewkvKiBjb21wbGV0ZWx5IHVzZWQ/ICovCisJCQkJCS8qIFVuZG8gYW4gYWRkcmVzcyBiaW5k IHRoYXQgbWF5IGhhdmUgb2NjdXJyZWQuICovCisJCQkJCWlucC0+aW42cF9sYWRkciA9IGluNmFk ZHJfYW55OworCQkJCQlyZXR1cm4gKEVBRERSTk9UQVZBSUwpOworCQkJCX0KKworCQkJCSpsYXN0 cG9ydCA9IGZpcnN0ICsgKChhcmM0cmFuZG9tKCkgJSA2NTUzNikgKworCQkJCSAgICAoYXJjNHJh bmRvbSgpICUgVl9pcHBvcnRfcmFuZG9tYWxnX2FsZzVfdHJhZGVvZmYpICsgMSk7CisKKwkJCQlp ZiAoKmxhc3Rwb3J0IDwgZmlyc3QgfHwgKmxhc3Rwb3J0ID4gbGFzdCkKKwkJCQkJKmxhc3Rwb3J0 ID0gZmlyc3Q7CisJCQkJbHBvcnQgPSBodG9ucygqbGFzdHBvcnQpOworCQkJfSB3aGlsZSAoaW42 X3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCAmaW5wLT5pbjZwX2xhZGRyLAorCQkJICAgIGxwb3J0 LCB3aWxkLCBjcmVkKSk7CisJCQlicmVhazsKKwkJY2FzZSBJTlBfUkZDNjA1Nl9BTEdfNDogLyog RG91YmxlLUhhc2ggUG9ydCBTZWxlY3Rpb24gQWxnb3JpdGhtICovCisJCQl7CisJCQkJTUQ1X0NU WCBmX2N0eDsKKwkJCQlNRDVfQ1RYIGdfY3R4OworCQkJCXVfaW50MzJfdCBGWzRdID0geyAwLCAw LCAwLCAwIH07CisJCQkJdV9pbnQzMl90IEdbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKwkJCQl1X2lu dDMyX3Qgc2VjcmV0X2ZbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKwkJCQl1X2ludDMyX3Qgc2VjcmV0 X2dbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKwkJCQl1X2ludDE2X3QgdGFibGVbMTZdOworCQkJCXVf aW50MzJfdCBpbmRleCA9IDA7CisJCQkJdV9pbnQzMl90IG9mZnNldCA9IDA7CisKKwkJCQlzZWNy ZXRfZlswXSA9IGFyYzRyYW5kb20oKTsKKwkJCQlzZWNyZXRfZlsxXSA9IGFyYzRyYW5kb20oKTsK KwkJCQlzZWNyZXRfZlsyXSA9IGFyYzRyYW5kb20oKTsKKwkJCQlzZWNyZXRfZlszXSA9IGFyYzRy YW5kb20oKTsKKworCQkJCXNlY3JldF9nWzBdID0gYXJjNHJhbmRvbSgpOworCQkJCXNlY3JldF9n WzFdID0gYXJjNHJhbmRvbSgpOworCQkJCXNlY3JldF9nWzJdID0gYXJjNHJhbmRvbSgpOworCQkJ CXNlY3JldF9nWzNdID0gYXJjNHJhbmRvbSgpOworCisJCQkJZm9yIChpbmRleCA9IDA7IGluZGV4 IDwgc2l6ZW9mKHRhYmxlKTsgaW5kZXgrKykKKwkJCQkJdGFibGVbaW5kZXhdID0gYXJjNHJhbmRv bSgpICUgNjU1MzY7CisKKwkJCQlNRDVJbml0KCZmX2N0eCk7CisJCQkJTUQ1VXBkYXRlKCZmX2N0 eCwgKHVfY2hhciAqKSZpbnAtPmluNnBfbGFkZHIsCisJCQkJICAgIHNpemVvZihpbnAtPmluNnBf bGFkZHIpKTsKKwkJCQlNRDVVcGRhdGUoJmZfY3R4LCAodV9jaGFyICopJmlucC0+aW42cF9mYWRk ciwKKwkJCQkgICAgc2l6ZW9mKGlucC0+aW42cF9mYWRkcikpOworCQkJCU1ENVVwZGF0ZSgmZl9j dHgsICh1X2NoYXIgKikmaW5wLT5pbnBfZnBvcnQsCisJCQkJICAgIHNpemVvZihpbnAtPmlucF9m cG9ydCkpOworCQkJCU1ENVVwZGF0ZSgmZl9jdHgsICh1X2NoYXIgKilzZWNyZXRfZiwKKwkJCQkg ICAgc2l6ZW9mKHNlY3JldF9mKSk7CisJCQkJTUQ1RmluYWwoKHVfY2hhciAqKSZGLCAmZl9jdHgp OworCisJCQkJb2Zmc2V0ID0gKChGWzBdIF4gRlsxXSkgXiAoRlsyXSBeIEZbM10pKTsKKworCQkJ CU1ENUluaXQoJmdfY3R4KTsKKwkJCQlNRDVVcGRhdGUoJmdfY3R4LCAodV9jaGFyICopJmlucC0+ aW42cF9sYWRkciwKKwkJCQkgICAgc2l6ZW9mKGlucC0+aW42cF9sYWRkcikpOworCQkJCU1ENVVw ZGF0ZSgmZ19jdHgsICh1X2NoYXIgKikmaW5wLT5pbjZwX2ZhZGRyLAorCQkJCSAgICBzaXplb2Yo aW5wLT5pbjZwX2ZhZGRyKSk7CisJCQkJTUQ1VXBkYXRlKCZnX2N0eCwgKHVfY2hhciAqKSZpbnAt PmlucF9mcG9ydCwKKwkJCQkgICAgc2l6ZW9mKGlucC0+aW5wX2Zwb3J0KSk7CisJCQkJTUQ1VXBk YXRlKCZnX2N0eCwgKHVfY2hhciAqKXNlY3JldF9nLAorCQkJCSAgICBzaXplb2Yoc2VjcmV0X2cp KTsKKwkJCQlNRDVGaW5hbCgodV9jaGFyICopJkcsICZnX2N0eCk7CisKKwkJCQlpbmRleCA9ICgo R1swXSBeIEdbMV0pIF4gKEdbMl0gXiBHWzNdKSkgJSBzaXplb2YodGFibGUpOworCisJCQkJZG8g eworCQkJCQlpZiAoY291bnQtLSA8IDApIHsJLyogY29tcGxldGVseSB1c2VkPyAqLworCQkJCQkJ LyogVW5kbyBhbiBhZGRyZXNzIGJpbmQgdGhhdCBtYXkgaGF2ZSBvY2N1cnJlZC4gKi8KKwkJCQkJ CWlucC0+aW42cF9sYWRkciA9IGluNmFkZHJfYW55OworCQkJCQkJcmV0dXJuIChFQUREUk5PVEFW QUlMKTsKKwkJCQkJfQorCisJCQkJCSpsYXN0cG9ydCA9IGZpcnN0ICsKKwkJCQkJICAgIChvZmZz ZXQgKyB0YWJsZVtpbmRleF0rKykgJSBjb3VudDsKKworCQkJCQlpZiAoKmxhc3Rwb3J0IDwgZmly c3QgfHwgKmxhc3Rwb3J0ID4gbGFzdCkKKwkJCQkJCSpsYXN0cG9ydCA9IGZpcnN0OworCQkJCQls cG9ydCA9IGh0b25zKCpsYXN0cG9ydCk7CisJCQkJfSB3aGlsZSAoaW42X3BjYmxvb2t1cF9sb2Nh bChwY2JpbmZvLCAmaW5wLT5pbjZwX2xhZGRyLAorCQkJCSAgICBscG9ydCwgd2lsZCwgY3JlZCkp OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSU5QX1JGQzYwNTZfQUxHXzM6IC8qIFNpbXBsZSBI YXNoLUJhc2VkIFBvcnQgU2VsZWN0aW9uIEFsZ29yaXRobSAqLworCQkJeworCQkJCU1ENV9DVFgg Zl9jdHg7CisJCQkJdV9pbnQzMl90IEZbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKwkJCQl1X2ludDMy X3Qgc2VjcmV0X2ZbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKwkJCQl1X2ludDMyX3Qgb2Zmc2V0ID0g MDsKKworCQkJCXNlY3JldF9mWzBdID0gYXJjNHJhbmRvbSgpOworCQkJCXNlY3JldF9mWzFdID0g YXJjNHJhbmRvbSgpOworCQkJCXNlY3JldF9mWzJdID0gYXJjNHJhbmRvbSgpOworCQkJCXNlY3Jl dF9mWzNdID0gYXJjNHJhbmRvbSgpOworCisJCQkJTUQ1SW5pdCgmZl9jdHgpOworCQkJCU1ENVVw ZGF0ZSgmZl9jdHgsICh1X2NoYXIgKikmaW5wLT5pbjZwX2xhZGRyLAorCQkJCSAgICBzaXplb2Yo aW5wLT5pbjZwX2xhZGRyKSk7CisJCQkJTUQ1VXBkYXRlKCZmX2N0eCwgKHVfY2hhciAqKSZpbnAt PmluNnBfZmFkZHIsCisJCQkJICAgIHNpemVvZihpbnAtPmluNnBfZmFkZHIpKTsKKwkJCQlNRDVV cGRhdGUoJmZfY3R4LCAodV9jaGFyICopJmlucC0+aW5wX2Zwb3J0LAorCQkJCSAgICBzaXplb2Yo aW5wLT5pbnBfZnBvcnQpKTsKKwkJCQlNRDVVcGRhdGUoJmZfY3R4LCAodV9jaGFyICopc2VjcmV0 X2YsCisJCQkJICAgIHNpemVvZihzZWNyZXRfZikpOworCQkJCU1ENUZpbmFsKCh1X2NoYXIgKikm RiwgJmZfY3R4KTsKKworCQkJCW9mZnNldCA9ICgoRlswXSBeIEZbMV0pIF4gKEZbMl0gXiBGWzNd KSk7CisKKwkJCQlkbyB7CisJCQkJCWlmIChjb3VudC0tIDwgMCkgewkvKiBjb21wbGV0ZWx5IHVz ZWQ/ICovCisJCQkJCQkvKiBVbmRvIGFuIGFkZHJlc3MgYmluZCB0aGF0IG1heSBoYXZlIG9jY3Vy cmVkLiAqLworCQkJCQkJaW5wLT5pbjZwX2xhZGRyID0gaW42YWRkcl9hbnk7CisJCQkJCQlyZXR1 cm4gKEVBRERSTk9UQVZBSUwpOworCQkJCQl9CisKKwkJCQkJKmxhc3Rwb3J0ID0gZmlyc3QgKyAo KGFyYzRyYW5kb20oKSAlIDY1NTM2KSArCisJCQkJCSAgICAob2Zmc2V0ICUgNjU1MzYpKSAlIGNv dW50OworCisJCQkJCWlmICgqbGFzdHBvcnQgPCBmaXJzdCB8fCAqbGFzdHBvcnQgPiBsYXN0KQor CQkJCQkJKmxhc3Rwb3J0ID0gZmlyc3Q7CisJCQkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsK KwkJCQl9IHdoaWxlIChpbjZfcGNibG9va3VwX2xvY2FsKHBjYmluZm8sICZpbnAtPmluNnBfbGFk ZHIsCisJCQkJICAgIGxwb3J0LCB3aWxkLCBjcmVkKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2Fz ZSBJTlBfUkZDNjA1Nl9BTEdfMjoJLyogU2ltcGxlIFBvcnQgUmFuZG9taXphdGlvbiBBbGdvcml0 aG0gSUkgKi8KKwkJCWRvIHsKKwkJCQlpZiAoY291bnQtLSA8IDApIHsJLyogY29tcGxldGVseSB1 c2VkPyAqLworCQkJCQkvKiBVbmRvIGFuIGFkZHJlc3MgYmluZCB0aGF0IG1heSBoYXZlIG9jY3Vy cmVkLiAqLworCQkJCQlpbnAtPmluNnBfbGFkZHIgPSBpbjZhZGRyX2FueTsKKwkJCQkJcmV0dXJu IChFQUREUk5PVEFWQUlMKTsKKwkJCQl9CisKKwkJCQkqbGFzdHBvcnQgPSBmaXJzdCArIChhcmM0 cmFuZG9tKCkgJSAobGFzdCAtIGZpcnN0KSk7CisKKwkJCQlpZiAoKmxhc3Rwb3J0IDwgZmlyc3Qg fHwgKmxhc3Rwb3J0ID4gbGFzdCkKKwkJCQkJKmxhc3Rwb3J0ID0gZmlyc3Q7CisJCQkJbHBvcnQg PSBodG9ucygqbGFzdHBvcnQpOworCQkJfSB3aGlsZSAoaW42X3BjYmxvb2t1cF9sb2NhbChwY2Jp bmZvLCAmaW5wLT5pbjZwX2xhZGRyLAorCQkJICAgIGxwb3J0LCB3aWxkLCBjcmVkKSk7CisJCQli cmVhazsKKwkJY2FzZSBJTlBfUkZDNjA1Nl9BTEdfMToJLyogU2ltcGxlIFBvcnQgUmFuZG9taXph dGlvbiBBbGdvcml0aG0gSSAqLworCQlkZWZhdWx0OgorCQkJKmxhc3Rwb3J0ID0gZmlyc3QgKyAo YXJjNHJhbmRvbSgpICUgKGxhc3QgLSBmaXJzdCkpOworCisJCQlkbyB7CisJCQkJaWYgKGNvdW50 LS0gPCAwKSB7CS8qIGNvbXBsZXRlbHkgdXNlZD8gKi8KKwkJCQkJLyogVW5kbyBhbiBhZGRyZXNz IGJpbmQgdGhhdCBtYXkgaGF2ZSBvY2N1cnJlZC4gKi8KKwkJCQkJaW5wLT5pbjZwX2xhZGRyID0g aW42YWRkcl9hbnk7CisJCQkJCXJldHVybiAoRUFERFJOT1RBVkFJTCk7CisJCQkJfQorCisJCQkJ KysqbGFzdHBvcnQ7CisKKwkJCQlpZiAoKmxhc3Rwb3J0IDwgZmlyc3QgfHwgKmxhc3Rwb3J0ID4g bGFzdCkKKwkJCQkJKmxhc3Rwb3J0ID0gZmlyc3Q7CisJCQkJbHBvcnQgPSBodG9ucygqbGFzdHBv cnQpOworCQkJfSB3aGlsZSAoaW42X3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCAmaW5wLT5pbjZw X2xhZGRyLAorCQkJICAgIGxwb3J0LCB3aWxkLCBjcmVkKSk7CiAJCX0KLQkJKysqbGFzdHBvcnQ7 Ci0JCWlmICgqbGFzdHBvcnQgPCBmaXJzdCB8fCAqbGFzdHBvcnQgPiBsYXN0KQotCQkJKmxhc3Rw b3J0ID0gZmlyc3Q7Ci0JCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKLQl9IHdoaWxlIChpbjZf cGNibG9va3VwX2xvY2FsKHBjYmluZm8sICZpbnAtPmluNnBfbGFkZHIsCi0JICAgIGxwb3J0LCB3 aWxkLCBjcmVkKSk7CisJfSBlbHNlIHsKKwkJZG8geworCQkJaWYgKGNvdW50LS0gPCAwKSB7CS8q IGNvbXBsZXRlbHkgdXNlZD8gKi8KKwkJCQkvKiBVbmRvIGFuIGFkZHJlc3MgYmluZCB0aGF0IG1h eSBoYXZlIG9jY3VycmVkLiAqLworCQkJCWlucC0+aW42cF9sYWRkciA9IGluNmFkZHJfYW55Owor CQkJCXJldHVybiAoRUFERFJOT1RBVkFJTCk7CisJCQl9CisKKwkJCSsrKmxhc3Rwb3J0OworCisJ CQlpZiAoKmxhc3Rwb3J0IDwgZmlyc3QgfHwgKmxhc3Rwb3J0ID4gbGFzdCkKKwkJCQkqbGFzdHBv cnQgPSBmaXJzdDsKKwkJCWxwb3J0ID0gaHRvbnMoKmxhc3Rwb3J0KTsKKwkJfSB3aGlsZSAoaW42 X3BjYmxvb2t1cF9sb2NhbChwY2JpbmZvLCAmaW5wLT5pbjZwX2xhZGRyLAorCQkgICAgbHBvcnQs IHdpbGQsIGNyZWQpKTsKKwl9CiAKIAlpbnAtPmlucF9scG9ydCA9IGxwb3J0OwogCWlmIChpbl9w Y2JpbnNoYXNoKGlucCkgIT0gMCkgewo= --00163646d5be7d227c049b23e38f--