From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dmitry Antipov Newsgroups: gmane.emacs.devel Subject: 'struct window' cleanup #3 Date: Wed, 27 Jun 2012 11:10:34 +0400 Message-ID: <4FEAB1EA.3000307@yandex.ru> References: <4FE827B6.6020306@yandex.ru> <4FE89369.2000708@gmx.at> <4FE896A9.3090002@yandex.ru> <4FE9643C.1090201@gmx.at> <83a9zq9jhp.fsf@gnu.org> <83lij98nhj.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------050709080305010404010803" X-Trace: dough.gmane.org 1340780918 12525 80.91.229.3 (27 Jun 2012 07:08:38 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 27 Jun 2012 07:08:38 +0000 (UTC) Cc: emacs-devel@gnu.org To: undisclosed-recipients:; Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Jun 27 09:08:37 2012 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1SjmMb-0006S1-TZ for ged-emacs-devel@m.gmane.org; Wed, 27 Jun 2012 09:08:34 +0200 Original-Received: from localhost ([::1]:57635 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SjmMb-0001wz-OT for ged-emacs-devel@m.gmane.org; Wed, 27 Jun 2012 03:08:33 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:34666) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SjmMV-0001wd-0p for emacs-devel@gnu.org; Wed, 27 Jun 2012 03:08:30 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SjmMN-0003be-8O for emacs-devel@gnu.org; Wed, 27 Jun 2012 03:08:26 -0400 Original-Received: from forward15.mail.yandex.net ([95.108.130.119]:60151) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SjmMM-0003al-6J for emacs-devel@gnu.org; Wed, 27 Jun 2012 03:08:19 -0400 Original-Received: from smtp11.mail.yandex.net (smtp11.mail.yandex.net [95.108.130.67]) by forward15.mail.yandex.net (Yandex) with ESMTP id 616B89E132B for ; Wed, 27 Jun 2012 11:08:16 +0400 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1340780896; bh=sglHFxH+YcuwGrHmqqKVpoaLhgV24AeScsrLCX9N06Q=; h=To:Message-ID:Date:From:MIME-Version:CC:Subject:References: In-Reply-To:Content-Type; b=Vw5D0pVASFhxO0SNJsFNDtokBFoPRRur/NbT097QtsDea1NrKCUO4Fa1+HcdzXYFn Fsi2fcyQIZF1kHnbqv+WqHN6rhq6mRVVYDztzgqrdlGwwj+KlwItp6R825VdvBHLc3 FZps7Dek8RhGKLdoDHUtjW6gZ0e82y/wP/C4Ukok= Original-Received: from smtp11.mail.yandex.net (localhost [127.0.0.1]) by smtp11.mail.yandex.net (Yandex) with ESMTP id 4F2FE7E057C for ; Wed, 27 Jun 2012 11:08:16 +0400 (MSK) Original-Received: from 213-148-21-55.gelicon.ru (213-148-21-55.gelicon.ru [213.148.21.55]) by smtp11.mail.yandex.net (nwsmtp/Yandex) with ESMTP id 8FVKIw8V-8FVKtwJ8; Wed, 27 Jun 2012 11:08:15 +0400 X-Yandex-Rcpt-Suid: emacs-devel@gnu.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1340780896; bh=sglHFxH+YcuwGrHmqqKVpoaLhgV24AeScsrLCX9N06Q=; h=Message-ID:Date:From:User-Agent:MIME-Version:CC:Subject: References:In-Reply-To:Content-Type; b=ZcCzqDeh+ZlSjMUFQpAVU0V0h5VLrLxA1Ao8kJhhtYSXfm4isqVSJULYJ0WuWGdFf JdWyzX1IutsSWs+EakoV67lxcRpt6v+yBkp35leny7ATDspQsVSh5waxcu8/mRNiAg KQFL2Nx1/ElJgjlenJoRYBB3fj1CRMcEtPu/RTzg= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120614 Thunderbird/13.0.1 In-Reply-To: <83lij98nhj.fsf@gnu.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 95.108.130.119 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:151210 Archived-At: This is a multi-part message in MIME format. --------------050709080305010404010803 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit This patch changes the following slots of `struct window' from Lisp_Object to: use_time -> int sequence_number -> int last_modified -> EMACS_INT last_overlay_modified -> EMACS_INT last_point -> ptrdiff_t window_end_pos -> ptrdiff_t window_end_vpos -> ptrdiff_t Notes: 1. IIUC, `window_initialized' is redundant and obsolete. 2. Fields hscroll and min_hscroll are good candidates for conversion too, but this requires some redesign of `struct saved_window', most probably to yet another pseudovector. Special notes about hard stuff in xdisp.c: 1. Field window_end_valid is used in a tricky way which isn't quite clear for me :-), so I would like to not touch it at this time (hopefully I will get back to it later). 2. Since last_point is an integer, this check is no longer valid: /* Right after splitting windows, last_point may be nil. */ && INTEGERP (w->last_point); My tests never shows zero here, so I'm installing assertion instead. 3. The check: && INTEGERP (w->window_end_vpos) && XFASTINT (w->window_end_vpos) < w->current_matrix->nrows is transformed to: && w->window_end_vpos > 0 && w->window_end_vpos < w->current_matrix->nrows I never get w->window_end_vpos >= w->current_matrix->nrows, but run into w->window_end_vpos == 0 several times. At this moment, I have no ideas whether Gerd was correct about fixing window.c, so this needs more detailed investigations. Dmitry --------------050709080305010404010803 Content-Type: text/plain; charset=UTF-8; name="window_cleanup.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="window_cleanup.patch" PT09IGFkZGVkIGZpbGUgJ2FkbWluL2NvY2NpbmVsbGUvd2luZG93LmNvY2NpJwotLS0gYWRt aW4vY29jY2luZWxsZS93aW5kb3cuY29jY2kJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAor KysgYWRtaW4vY29jY2luZWxsZS93aW5kb3cuY29jY2kJMjAxMi0wNi0yNyAwNDo1MzozNSAr MDAwMApAQCAtMCwwICsxLDE0MCBAQAorLy8gTWFrZSBjaGFuZ2VzIG5lZWRlZCBhZnRlciBj b252ZXJ0aW5nIHNsb3RzIG9mIGBzdHJ1Y3Qgd2luZG93JworLy8gZnJvbSBMaXNwX09iamVj dCB0bzoKKy8vICAgLSBsYXN0X3BvaW50IC0+IHB0cmRpZmZfdAorLy8gICAtIGxhc3RfbW9k aWZpZWQgLT4gRU1BQ1NfSU5UCisvLyAgIC0gbGFzdF9vdmVybGF5X21vZGlmaWVkIC0+IEVN QUNTX0lOVAorLy8gICAtIHdpbmRvd19lbmRfcG9zIC0+IHB0cmRpZmZfdAorLy8gICAtIHdp bmRvd19lbmRfdnBvcyAtPiBwdHJkaWZmX3QKK0BACitleHByZXNzaW9uIEU7CitpZGVudGlm aWVyIFc7CitAQAorKAorLSBYU0VURkFTVElOVCAoWFdJTkRPVyAoVyktPmxhc3RfcG9pbnQs IEUpCisrIFhXSU5ET1cgKFcpLT5sYXN0X3BvaW50ID0gRQorfAorLSBYU0VURkFTVElOVCAo Vy0+bGFzdF9wb2ludCwgRSkKKysgVy0+bGFzdF9wb2ludCA9IEUKK3wKKy0gWEZBU1RJTlQg KFhXSU5ET1cgKFcpLT5sYXN0X3BvaW50KQorKyBYV0lORE9XIChXKS0+bGFzdF9wb2ludAor fAorLSBYRkFTVElOVCAoVy0+bGFzdF9wb2ludCkKKysgVy0+bGFzdF9wb2ludAorfAorLSBY SU5UIChYV0lORE9XIChXKS0+bGFzdF9wb2ludCkKKysgWFdJTkRPVyAoVyktPmxhc3RfcG9p bnQKK3wKKy0gWElOVCAoVy0+bGFzdF9wb2ludCkKKysgVy0+bGFzdF9wb2ludAorfAorLSBY V0lORE9XIChXKS0+bGFzdF9wb2ludCA9IG1ha2VfbnVtYmVyIChFKQorKyBYV0lORE9XIChX KS0+bGFzdF9wb2ludCA9IEUKK3wKKy0gVy0+bGFzdF9wb2ludCA9IG1ha2VfbnVtYmVyIChF KQorKyBXLT5sYXN0X3BvaW50ID0gRQorCit8CisKKy0gWFNFVEZBU1RJTlQgKFhXSU5ET1cg KFcpLT5sYXN0X21vZGlmaWVkLCBFKQorKyBYV0lORE9XIChXKS0+bGFzdF9tb2RpZmllZCA9 IEUKK3wKKy0gWFNFVEZBU1RJTlQgKFctPmxhc3RfbW9kaWZpZWQsIEUpCisrIFctPmxhc3Rf bW9kaWZpZWQgPSBFCit8CistIFhGQVNUSU5UIChYV0lORE9XIChXKS0+bGFzdF9tb2RpZmll ZCkKKysgWFdJTkRPVyAoVyktPmxhc3RfbW9kaWZpZWQKK3wKKy0gWEZBU1RJTlQgKFctPmxh c3RfbW9kaWZpZWQpCisrIFctPmxhc3RfbW9kaWZpZWQKK3wKKy0gWElOVCAoWFdJTkRPVyAo VyktPmxhc3RfbW9kaWZpZWQpCisrIFhXSU5ET1cgKFcpLT5sYXN0X21vZGlmaWVkCit8Cist IFhJTlQgKFctPmxhc3RfbW9kaWZpZWQpCisrIFctPmxhc3RfbW9kaWZpZWQKK3wKKy0gWFdJ TkRPVyAoVyktPmxhc3RfbW9kaWZpZWQgPSBtYWtlX251bWJlciAoRSkKKysgWFdJTkRPVyAo VyktPmxhc3RfbW9kaWZpZWQgPSBFCit8CistIFctPmxhc3RfbW9kaWZpZWQgPSBtYWtlX251 bWJlciAoRSkKKysgVy0+bGFzdF9tb2RpZmllZCA9IEUKKworfAorCistIFhTRVRGQVNUSU5U IChYV0lORE9XIChXKS0+bGFzdF9vdmVybGF5X21vZGlmaWVkLCBFKQorKyBYV0lORE9XIChX KS0+bGFzdF9vdmVybGF5X21vZGlmaWVkID0gRQorfAorLSBYU0VURkFTVElOVCAoVy0+bGFz dF9vdmVybGF5X21vZGlmaWVkLCBFKQorKyBXLT5sYXN0X292ZXJsYXlfbW9kaWZpZWQgPSBF Cit8CistIFhGQVNUSU5UIChYV0lORE9XIChXKS0+bGFzdF9vdmVybGF5X21vZGlmaWVkKQor KyBYV0lORE9XIChXKS0+bGFzdF9vdmVybGF5X21vZGlmaWVkCit8CistIFhGQVNUSU5UIChX LT5sYXN0X292ZXJsYXlfbW9kaWZpZWQpCisrIFctPmxhc3Rfb3ZlcmxheV9tb2RpZmllZAor fAorLSBYSU5UIChYV0lORE9XIChXKS0+bGFzdF9vdmVybGF5X21vZGlmaWVkKQorKyBYV0lO RE9XIChXKS0+bGFzdF9vdmVybGF5X21vZGlmaWVkCit8CistIFhJTlQgKFctPmxhc3Rfb3Zl cmxheV9tb2RpZmllZCkKKysgVy0+bGFzdF9vdmVybGF5X21vZGlmaWVkCit8CistIFhXSU5E T1cgKFcpLT5sYXN0X292ZXJsYXlfbW9kaWZpZWQgPSBtYWtlX251bWJlciAoRSkKKysgWFdJ TkRPVyAoVyktPmxhc3Rfb3ZlcmxheV9tb2RpZmllZCA9IEUKK3wKKy0gVy0+bGFzdF9vdmVy bGF5X21vZGlmaWVkID0gbWFrZV9udW1iZXIgKEUpCisrIFctPmxhc3Rfb3ZlcmxheV9tb2Rp ZmllZCA9IEUKKworfAorCistIFhTRVRGQVNUSU5UIChYV0lORE9XIChXKS0+d2luZG93X2Vu ZF9wb3MsIEUpCisrIFhXSU5ET1cgKFcpLT53aW5kb3dfZW5kX3BvcyA9IEUKK3wKKy0gWFNF VEZBU1RJTlQgKFctPndpbmRvd19lbmRfcG9zLCBFKQorKyBXLT53aW5kb3dfZW5kX3BvcyA9 IEUKK3wKKy0gWEZBU1RJTlQgKFhXSU5ET1cgKFcpLT53aW5kb3dfZW5kX3BvcykKKysgWFdJ TkRPVyAoVyktPndpbmRvd19lbmRfcG9zCit8CistIFhGQVNUSU5UIChXLT53aW5kb3dfZW5k X3BvcykKKysgVy0+d2luZG93X2VuZF9wb3MKK3wKKy0gWElOVCAoWFdJTkRPVyAoVyktPndp bmRvd19lbmRfcG9zKQorKyBYV0lORE9XIChXKS0+d2luZG93X2VuZF9wb3MKK3wKKy0gWElO VCAoVy0+d2luZG93X2VuZF9wb3MpCisrIFctPndpbmRvd19lbmRfcG9zCit8CistIFhXSU5E T1cgKFcpLT53aW5kb3dfZW5kX3BvcyA9IG1ha2VfbnVtYmVyIChFKQorKyBYV0lORE9XIChX KS0+d2luZG93X2VuZF9wb3MgPSBFCit8CistIFctPndpbmRvd19lbmRfcG9zID0gbWFrZV9u dW1iZXIgKEUpCisrIFctPndpbmRvd19lbmRfcG9zID0gRQorCit8CisKKy0gWFNFVEZBU1RJ TlQgKFhXSU5ET1cgKFcpLT53aW5kb3dfZW5kX3Zwb3MsIEUpCisrIFhXSU5ET1cgKFcpLT53 aW5kb3dfZW5kX3Zwb3MgPSBFCit8CistIFhTRVRGQVNUSU5UIChXLT53aW5kb3dfZW5kX3Zw b3MsIEUpCisrIFctPndpbmRvd19lbmRfdnBvcyA9IEUKK3wKKy0gWEZBU1RJTlQgKFhXSU5E T1cgKFcpLT53aW5kb3dfZW5kX3Zwb3MpCisrIFhXSU5ET1cgKFcpLT53aW5kb3dfZW5kX3Zw b3MKK3wKKy0gWEZBU1RJTlQgKFctPndpbmRvd19lbmRfdnBvcykKKysgVy0+d2luZG93X2Vu ZF92cG9zCit8CistIFhJTlQgKFhXSU5ET1cgKFcpLT53aW5kb3dfZW5kX3Zwb3MpCisrIFhX SU5ET1cgKFcpLT53aW5kb3dfZW5kX3Zwb3MKK3wKKy0gWElOVCAoVy0+d2luZG93X2VuZF92 cG9zKQorKyBXLT53aW5kb3dfZW5kX3Zwb3MKK3wKKy0gWFdJTkRPVyAoVyktPndpbmRvd19l bmRfdnBvcyA9IG1ha2VfbnVtYmVyIChFKQorKyBYV0lORE9XIChXKS0+d2luZG93X2VuZF92 cG9zID0gRQorfAorLSBXLT53aW5kb3dfZW5kX3Zwb3MgPSBtYWtlX251bWJlciAoRSkKKysg Vy0+d2luZG93X2VuZF92cG9zID0gRQorKQoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9kaXNw bmV3LmMnCi0tLSBzcmMvZGlzcG5ldy5jCTIwMTItMDYtMjQgMDQ6MTE6MTkgKzAwMDAKKysr IHNyYy9kaXNwbmV3LmMJMjAxMi0wNi0yNyAwNDo1Mjo0NyArMDAwMApAQCAtNjQzLDggKzY0 Myw3IEBACiAKIAkgICAgICAvKiBXaW5kb3cgZW5kIGlzIGludmFsaWQsIGlmIGluc2lkZSBv ZiB0aGUgcm93cyB0aGF0CiAJCSBhcmUgaW52YWxpZGF0ZWQgYmVsb3cuICAqLwotCSAgICAg IGlmIChJTlRFR0VSUCAody0+d2luZG93X2VuZF92cG9zKQotCQkgICYmIFhGQVNUSU5UICh3 LT53aW5kb3dfZW5kX3Zwb3MpID49IGkpCisJICAgICAgaWYgKHctPndpbmRvd19lbmRfdnBv cyA+PSBpKQogCQl3LT53aW5kb3dfZW5kX3ZhbGlkID0gUW5pbDsKIAogCSAgICAgIHdoaWxl IChpIDwgbWF0cml4LT5ucm93cykKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvZnJhbWUuYycK LS0tIHNyYy9mcmFtZS5jCTIwMTItMDYtMjYgMTQ6NDE6MDEgKzAwMDAKKysrIHNyYy9mcmFt ZS5jCTIwMTItMDYtMjcgMDQ6NTI6NDcgKzAwMDAKQEAgLTEzMSw3ICsxMzEsNyBAQAogewog ICBzdHJ1Y3Qgd2luZG93ICp3ID0gWFdJTkRPVyAod2luZG93KTsKIAotICBYU0VURkFTVElO VCAody0+bGFzdF9tb2RpZmllZCwgMCk7CisgIHctPmxhc3RfbW9kaWZpZWQgPSAwOwogICBY U0VURkFTVElOVCAody0+dG9wX2xpbmUsIFhGQVNUSU5UICh3LT50b3BfbGluZSkgKyBuKTsK ICAgWFNFVEZBU1RJTlQgKHctPnRvdGFsX2xpbmVzLCBYRkFTVElOVCAody0+dG90YWxfbGlu ZXMpIC0gbik7CiAKQEAgLTM1Niw4ICszNTYsNyBAQAogICBmLT5zZWxlY3RlZF93aW5kb3cg PSByb290X3dpbmRvdzsKICAgLyogTWFrZSBzdXJlIHRoaXMgd2luZG93IHNlZW1zIG1vcmUg cmVjZW50bHkgdXNlZCB0aGFuCiAgICAgIGEgbmV3bHktY3JlYXRlZCwgbmV2ZXItc2VsZWN0 ZWQgd2luZG93LiAgKi8KLSAgKyt3aW5kb3dfc2VsZWN0X2NvdW50OwotICBYU0VURkFTVElO VCAoWFdJTkRPVyAoZi0+c2VsZWN0ZWRfd2luZG93KS0+dXNlX3RpbWUsIHdpbmRvd19zZWxl Y3RfY291bnQpOworICBYV0lORE9XIChmLT5zZWxlY3RlZF93aW5kb3cpLT51c2VfdGltZSA9 ICsrd2luZG93X3NlbGVjdF9jb3VudDsKIAogICByZXR1cm4gZjsKIH0KCj09PSBtb2RpZmll ZCBmaWxlICdzcmMvbWluaWJ1Zi5jJwotLS0gc3JjL21pbmlidWYuYwkyMDEyLTA2LTE5IDE3 OjA1OjQxICswMDAwCisrKyBzcmMvbWluaWJ1Zi5jCTIwMTItMDYtMjcgMDQ6NTI6NDcgKzAw MDAKQEAgLTg4OCw4ICs4ODgsOCBAQAogCiAgIC8qIE1ha2Ugc3VyZSBtaW5pYnVmZmVyIHdp bmRvdyBpcyBlcmFzZWQsIG5vdCBpZ25vcmVkLiAgKi8KICAgd2luZG93c19vcl9idWZmZXJz X2NoYW5nZWQrKzsKLSAgWFNFVEZBU1RJTlQgKFhXSU5ET1cgKHdpbmRvdyktPmxhc3RfbW9k aWZpZWQsIDApOwotICBYU0VURkFTVElOVCAoWFdJTkRPVyAod2luZG93KS0+bGFzdF9vdmVy bGF5X21vZGlmaWVkLCAwKTsKKyAgWFdJTkRPVyAod2luZG93KS0+bGFzdF9tb2RpZmllZCA9 IDA7CisgIFhXSU5ET1cgKHdpbmRvdyktPmxhc3Rfb3ZlcmxheV9tb2RpZmllZCA9IDA7CiAK ICAgLyogSW4gY2FzZSB0aGUgcHJldmlvdXMgbWluaWJ1ZmZlciBkaXNwbGF5ZWQgaW4gdGhp cyBtaW5pd2luZG93IGlzCiAgICAgIGRlYWQsIHdlIG1heSBrZWVwIGRpc3BsYXlpbmcgdGhp cyBidWZmZXIgKHRobyBpdCdzIGluYWN0aXZlKSwgc28gcmVzZXQgaXQsCgo9PT0gbW9kaWZp ZWQgZmlsZSAnc3JjL3ByaW50LmMnCi0tLSBzcmMvcHJpbnQuYwkyMDEyLTA2LTI2IDAyOjMz OjUxICswMDAwCisrKyBzcmMvcHJpbnQuYwkyMDEyLTA2LTI3IDA0OjUyOjQ3ICswMDAwCkBA IC0xNzc0LDggKzE3NzQsNyBAQAogCXsKIAkgIGludCBsZW47CiAJICBzdHJvdXQgKCIjPHdp bmRvdyAiLCAtMSwgLTEsIHByaW50Y2hhcmZ1bik7Ci0JICBsZW4gPSBzcHJpbnRmIChidWYs ICIlInBJImQiLAotCQkJIFhGQVNUSU5UIChYV0lORE9XIChvYmopLT5zZXF1ZW5jZV9udW1i ZXIpKTsKKwkgIGxlbiA9IHNwcmludGYgKGJ1ZiwgIiVkIiwgWFdJTkRPVyAob2JqKS0+c2Vx dWVuY2VfbnVtYmVyKTsKIAkgIHN0cm91dCAoYnVmLCBsZW4sIGxlbiwgcHJpbnRjaGFyZnVu KTsKIAkgIGlmICghTklMUCAoWFdJTkRPVyAob2JqKS0+YnVmZmVyKSkKIAkgICAgewoKPT09 IG1vZGlmaWVkIGZpbGUgJ3NyYy93aW5kb3cuYycKLS0tIHNyYy93aW5kb3cuYwkyMDEyLTA2 LTI2IDE0OjQxOjAxICswMDAwCisrKyBzcmMvd2luZG93LmMJMjAxMi0wNi0yNyAwNDo1Mjo0 NyArMDAwMApAQCAtMTE3LDkgKzExNyw2IEBACiAvKiBJbmNyZW1lbnRlZCBmb3IgZWFjaCB3 aW5kb3cgY3JlYXRlZC4gICovCiBzdGF0aWMgaW50IHNlcXVlbmNlX251bWJlcjsKIAotLyog Tm9uemVybyBhZnRlciBpbml0X3dpbmRvd19vbmNlIGhhcyBmaW5pc2hlZC4gICovCi1zdGF0 aWMgaW50IHdpbmRvd19pbml0aWFsaXplZDsKLQogLyogSG9vayB0byBydW4gd2hlbiB3aW5k b3cgY29uZmlnIGNoYW5nZXMuICAqLwogc3RhdGljIExpc3BfT2JqZWN0IFF3aW5kb3dfY29u ZmlndXJhdGlvbl9jaGFuZ2VfaG9vazsKIApAQCAtMzMxLDggKzMyOCw3IEBACiAKICAgaWYg KE5JTFAgKG5vcmVjb3JkKSkKICAgICB7Ci0gICAgICArK3dpbmRvd19zZWxlY3RfY291bnQ7 Ci0gICAgICBYU0VURkFTVElOVCAody0+dXNlX3RpbWUsIHdpbmRvd19zZWxlY3RfY291bnQp OworICAgICAgdy0+dXNlX3RpbWUgPSArK3dpbmRvd19zZWxlY3RfY291bnQ7CiAgICAgICBy ZWNvcmRfYnVmZmVyICh3LT5idWZmZXIpOwogICAgIH0KIApAQCAtNDk5LDcgKzQ5NSw3IEBA CiBzZWxlY3RlZCBvbmUuICAqLykKICAgKExpc3BfT2JqZWN0IHdpbmRvdykKIHsKLSAgcmV0 dXJuIGRlY29kZV93aW5kb3cgKHdpbmRvdyktPnVzZV90aW1lOworICByZXR1cm4gbWFrZV9u dW1iZXIgKGRlY29kZV93aW5kb3cgKHdpbmRvdyktPnVzZV90aW1lKTsKIH0KIAwKIERFRlVO ICgid2luZG93LXRvdGFsLWhlaWdodCIsIEZ3aW5kb3dfdG90YWxfaGVpZ2h0LCBTd2luZG93 X3RvdGFsX2hlaWdodCwgMCwgMSwgMCwKQEAgLTEzMTQsOCArMTMxMCw4IEBACiAKICAgaWYg KCEgTklMUCAodXBkYXRlKQogICAgICAgJiYgISAoISBOSUxQICh3LT53aW5kb3dfZW5kX3Zh bGlkKQotCSAgICAmJiBYRkFTVElOVCAody0+bGFzdF9tb2RpZmllZCkgPj0gQlVGX01PRElG RiAoYikKLQkgICAgJiYgWEZBU1RJTlQgKHctPmxhc3Rfb3ZlcmxheV9tb2RpZmllZCkgPj0g QlVGX09WRVJMQVlfTU9ESUZGIChiKSkKKwkgICAgJiYgdy0+bGFzdF9tb2RpZmllZCA+PSBC VUZfTU9ESUZGIChiKQorCSAgICAmJiB3LT5sYXN0X292ZXJsYXlfbW9kaWZpZWQgPj0gQlVG X09WRVJMQVlfTU9ESUZGIChiKSkKICAgICAgICYmICFub25pbnRlcmFjdGl2ZSkKICAgICB7 CiAgICAgICBzdHJ1Y3QgdGV4dF9wb3Mgc3RhcnRwOwpAQCAtMTM1NSw3ICsxMzUxLDcgQEAK IAlzZXRfYnVmZmVyX2ludGVybmFsIChvbGRfYnVmZmVyKTsKICAgICB9CiAgIGVsc2UKLSAg ICBYU0VUSU5UICh2YWx1ZSwgQlVGX1ogKGIpIC0gWEZBU1RJTlQgKHctPndpbmRvd19lbmRf cG9zKSk7CisgICAgWFNFVElOVCAodmFsdWUsIEJVRl9aIChiKSAtIHctPndpbmRvd19lbmRf cG9zKTsKIAogICByZXR1cm4gdmFsdWU7CiB9CkBAIC0xMzk4LDggKzEzOTQsOCBAQAogICBp ZiAoTklMUCAobm9mb3JjZSkpCiAgICAgdy0+Zm9yY2Vfc3RhcnQgPSAxOwogICB3LT51cGRh dGVfbW9kZV9saW5lID0gMTsKLSAgWFNFVEZBU1RJTlQgKHctPmxhc3RfbW9kaWZpZWQsIDAp OwotICBYU0VURkFTVElOVCAody0+bGFzdF9vdmVybGF5X21vZGlmaWVkLCAwKTsKKyAgdy0+ bGFzdF9tb2RpZmllZCA9IDA7CisgIHctPmxhc3Rfb3ZlcmxheV9tb2RpZmllZCA9IDA7CiAg IGlmICghRVEgKHdpbmRvdywgc2VsZWN0ZWRfd2luZG93KSkKICAgICB3aW5kb3dzX29yX2J1 ZmZlcnNfY2hhbmdlZCsrOwogCkBAIC0xNTExLDggKzE1MDcsOCBAQAogICBpZiAoTklMUCAo dy0+d2luZG93X2VuZF92YWxpZCkKICAgICAgIHx8IGN1cnJlbnRfYnVmZmVyLT5jbGlwX2No YW5nZWQKICAgICAgIHx8IGN1cnJlbnRfYnVmZmVyLT5wcmV2ZW50X3JlZGlzcGxheV9vcHRp bWl6YXRpb25zX3AKLSAgICAgIHx8IFhGQVNUSU5UICh3LT5sYXN0X21vZGlmaWVkKSA8IEJV Rl9NT0RJRkYgKGIpCi0gICAgICB8fCBYRkFTVElOVCAody0+bGFzdF9vdmVybGF5X21vZGlm aWVkKSA8IEJVRl9PVkVSTEFZX01PRElGRiAoYikpCisgICAgICB8fCB3LT5sYXN0X21vZGlm aWVkIDwgQlVGX01PRElGRiAoYikKKyAgICAgIHx8IHctPmxhc3Rfb3ZlcmxheV9tb2RpZmll ZCA8IEJVRl9PVkVSTEFZX01PRElGRiAoYikpCiAgICAgcmV0dXJuIFFuaWw7CiAKICAgaWYg KE5JTFAgKGxpbmUpKQpAQCAtMTg0Miw4ICsxODM4LDggQEAKICAgICAgIG4tPnBoeXNfY3Vy c29yX3dpZHRoID0gLTE7CiAgICAgICBuLT5tdXN0X2JlX3VwZGF0ZWRfcCA9IDA7CiAgICAg ICBuLT5wc2V1ZG9fd2luZG93X3AgPSAwOwotICAgICAgWFNFVEZBU1RJTlQgKG4tPndpbmRv d19lbmRfdnBvcywgMCk7Ci0gICAgICBYU0VURkFTVElOVCAobi0+d2luZG93X2VuZF9wb3Ms IDApOworICAgICAgbi0+d2luZG93X2VuZF92cG9zID0gMDsKKyAgICAgIG4tPndpbmRvd19l bmRfcG9zID0gMDsKICAgICAgIG4tPndpbmRvd19lbmRfdmFsaWQgPSBRbmlsOwogICAgICAg bi0+ZnJvemVuX3dpbmRvd19zdGFydF9wID0gMDsKICAgICB9CkBAIC0yOTkwLDggKzI5ODYs OCBAQAogICAgIFhTRVRJTlQgKEJWQVIgKGIsIGRpc3BsYXlfY291bnQpLCBYSU5UIChCVkFS IChiLCBkaXNwbGF5X2NvdW50KSkgKyAxKTsKICAgQlZBUiAoYiwgZGlzcGxheV90aW1lKSA9 IEZjdXJyZW50X3RpbWUgKCk7CiAKLSAgWFNFVEZBU1RJTlQgKHctPndpbmRvd19lbmRfcG9z LCAwKTsKLSAgWFNFVEZBU1RJTlQgKHctPndpbmRvd19lbmRfdnBvcywgMCk7CisgIHctPndp bmRvd19lbmRfcG9zID0gMDsKKyAgdy0+d2luZG93X2VuZF92cG9zID0gMDsKICAgbWVtc2V0 ICgmdy0+bGFzdF9jdXJzb3IsIDAsIHNpemVvZiB3LT5sYXN0X2N1cnNvcik7CiAgIHctPndp bmRvd19lbmRfdmFsaWQgPSBRbmlsOwogICBpZiAoIShrZWVwX21hcmdpbnNfcCAmJiBzYW1l YnVmKSkKQEAgLTMwMTEsOCArMzAwNyw4IEBACiAJCQkgICAgIGJ1ZmZlcik7CiAgICAgICB3 LT5zdGFydF9hdF9saW5lX2JlZyA9IDA7CiAgICAgICB3LT5mb3JjZV9zdGFydCA9IDA7Ci0g ICAgICBYU0VURkFTVElOVCAody0+bGFzdF9tb2RpZmllZCwgMCk7Ci0gICAgICBYU0VURkFT VElOVCAody0+bGFzdF9vdmVybGF5X21vZGlmaWVkLCAwKTsKKyAgICAgIHctPmxhc3RfbW9k aWZpZWQgPSAwOworICAgICAgdy0+bGFzdF9vdmVybGF5X21vZGlmaWVkID0gMDsKICAgICB9 CiAgIC8qIE1heWJlIHdlIGNvdWxkIG1vdmUgdGhpcyBpbnRvIHRoZSBgaWYnIGJ1dCBpdCdz IG5vdCBvYnZpb3VzbHkgc2FmZSBhbmQKICAgICAgSSBkb3VidCBpdCdzIHdvcnRoIHRoZSB0 cm91YmxlLiAgKi8KQEAgLTMwMjEsNyArMzAxNyw3IEBACiAgIC8qIFdlIG11c3Qgc2VsZWN0 IEJVRkZFUiBmb3IgcnVubmluZyB0aGUgd2luZG93LXNjcm9sbC1mdW5jdGlvbnMuICAqLwog ICAvKiBXZSBjYW4ndCBjaGVjayAhIE5JTFAgKFZ3aW5kb3dfc2Nyb2xsX2Z1bmN0aW9ucykg aGVyZQogICAgICBiZWNhdXNlIHRoYXQgbWlnaHQgaXRzZWxmIGJlIGEgbG9jYWwgdmFyaWFi bGUuICAqLwotICBpZiAod2luZG93X2luaXRpYWxpemVkKQorICBpZiAoaW5pdGlhbGl6ZWQp CiAgICAgewogICAgICAgcmVjb3JkX3Vud2luZF9wcm90ZWN0IChGc2V0X2J1ZmZlciwgRmN1 cnJlbnRfYnVmZmVyICgpKTsKICAgICAgIEZzZXRfYnVmZmVyIChidWZmZXIpOwpAQCAtMzI1 MCw4ICszMjQ2LDcgQEAKIAkgIHNpemVvZiAoTGlzcF9PYmplY3QpICogVkVDU0laRSAoc3Ry dWN0IHdpbmRvdykpOwogICBYU0VUV0lORE9XIChwYXJlbnQsIHApOwogCi0gICsrc2VxdWVu Y2VfbnVtYmVyOwotICBYU0VURkFTVElOVCAocC0+c2VxdWVuY2VfbnVtYmVyLCBzZXF1ZW5j ZV9udW1iZXIpOworICBwLT5zZXF1ZW5jZV9udW1iZXIgPSArK3NlcXVlbmNlX251bWJlcjsK IAogICByZXBsYWNlX3dpbmRvdyAod2luZG93LCBwYXJlbnQsIDEpOwogCkBAIC0zMjkwLDE3 ICszMjg1LDEyIEBACiAgIHctPnBvaW50bSA9IEZtYWtlX21hcmtlciAoKTsKICAgWFNFVEZB U1RJTlQgKHctPmhzY3JvbGwsIDApOwogICBYU0VURkFTVElOVCAody0+bWluX2hzY3JvbGws IDApOwotICBYU0VURkFTVElOVCAody0+dXNlX3RpbWUsIDApOwotICArK3NlcXVlbmNlX251 bWJlcjsKLSAgWFNFVEZBU1RJTlQgKHctPnNlcXVlbmNlX251bWJlciwgc2VxdWVuY2VfbnVt YmVyKTsKLSAgWFNFVEZBU1RJTlQgKHctPmxhc3RfcG9pbnQsIDApOwogICB3LT52ZXJ0aWNh bF9zY3JvbGxfYmFyX3R5cGUgPSBRdDsKLSAgWFNFVEZBU1RJTlQgKHctPndpbmRvd19lbmRf cG9zLCAwKTsKLSAgWFNFVEZBU1RJTlQgKHctPndpbmRvd19lbmRfdnBvcywgMCk7CiAKICAg LyogSW5pdGlhbGl6ZSBub24tTGlzcCBkYXRhLiAgTm90ZSB0aGF0IGFsbG9jYXRlX3dpbmRv dyB6ZXJvZXMgb3V0IGFsbAogICAgICBub24tTGlzcCBkYXRhLCBzbyBkbyBpdCBvbmx5IGZv ciBzbG90cyB3aGljaCBzaG91bGQgbm90IGJlIHplcm8uICAqLwogICB3LT5ucm93c19zY2Fs ZV9mYWN0b3IgPSB3LT5uY29sc19zY2FsZV9mYWN0b3IgPSAxOworICB3LT5zZXF1ZW5jZV9u dW1iZXIgPSArK3NlcXVlbmNlX251bWJlcjsKICAgdy0+cGh5c19jdXJzb3JfdHlwZSA9IC0x OwogICB3LT5waHlzX2N1cnNvcl93aWR0aCA9IC0xOwogCkBAIC0zNDkyLDggKzM0ODIsOCBA QAogICAgIH0KIAogICAvKiBDbGVhciBvdXQgc29tZSByZWRpc3BsYXkgY2FjaGVzLiAgKi8K LSAgWFNFVEZBU1RJTlQgKHctPmxhc3RfbW9kaWZpZWQsIDApOwotICBYU0VURkFTVElOVCAo dy0+bGFzdF9vdmVybGF5X21vZGlmaWVkLCAwKTsKKyAgdy0+bGFzdF9tb2RpZmllZCA9IDA7 CisgIHctPmxhc3Rfb3ZlcmxheV9tb2RpZmllZCA9IDA7CiB9CiAKIApAQCAtNDAyNSw4ICs0 MDE1LDggQEAKICAgICAgIC8qIEdyb3cgdGhlIG1pbmktd2luZG93LiAgKi8KICAgICAgIFhT RVRGQVNUSU5UICh3LT50b3BfbGluZSwgWEZBU1RJTlQgKHItPnRvcF9saW5lKSArIFhGQVNU SU5UIChyLT50b3RhbF9saW5lcykpOwogICAgICAgWFNFVEZBU1RJTlQgKHctPnRvdGFsX2xp bmVzLCBYRkFTVElOVCAody0+dG90YWxfbGluZXMpIC0gWElOVCAodmFsdWUpKTsKLSAgICAg IFhTRVRGQVNUSU5UICh3LT5sYXN0X21vZGlmaWVkLCAwKTsKLSAgICAgIFhTRVRGQVNUSU5U ICh3LT5sYXN0X292ZXJsYXlfbW9kaWZpZWQsIDApOworICAgICAgdy0+bGFzdF9tb2RpZmll ZCA9IDA7CisgICAgICB3LT5sYXN0X292ZXJsYXlfbW9kaWZpZWQgPSAwOwogCiAgICAgICBh ZGp1c3RfZ2x5cGhzIChmKTsKICAgICAgIFVOQkxPQ0tfSU5QVVQ7CkBAIC00MDYxLDggKzQw NTEsOCBAQAogCSAgWFNFVEZBU1RJTlQgKHctPnRvcF9saW5lLCBYRkFTVElOVCAoci0+dG9w X2xpbmUpICsgWEZBU1RJTlQgKHItPnRvdGFsX2xpbmVzKSk7CiAJICBYU0VURkFTVElOVCAo dy0+dG90YWxfbGluZXMsIDEpOwogCi0JICBYU0VURkFTVElOVCAody0+bGFzdF9tb2RpZmll ZCwgMCk7Ci0JICBYU0VURkFTVElOVCAody0+bGFzdF9vdmVybGF5X21vZGlmaWVkLCAwKTsK KwkgIHctPmxhc3RfbW9kaWZpZWQgPSAwOworCSAgdy0+bGFzdF9vdmVybGF5X21vZGlmaWVk ID0gMDsKIAogCSAgYWRqdXN0X2dseXBocyAoZik7CiAJICBVTkJMT0NLX0lOUFVUOwpAQCAt NDI4OSw4ICs0Mjc5LDggQEAKIAkJCQkJIHctPmJ1ZmZlcik7CiAJCSAgdy0+c3RhcnRfYXRf bGluZV9iZWcgPSAxOwogCQkgIHctPnVwZGF0ZV9tb2RlX2xpbmUgPSAxOwotCQkgIFhTRVRG QVNUSU5UICh3LT5sYXN0X21vZGlmaWVkLCAwKTsKLQkJICBYU0VURkFTVElOVCAody0+bGFz dF9vdmVybGF5X21vZGlmaWVkLCAwKTsKKwkJICB3LT5sYXN0X21vZGlmaWVkID0gMDsKKwkJ ICB3LT5sYXN0X292ZXJsYXlfbW9kaWZpZWQgPSAwOwogCQkgIC8qIFNldCBmb3JjZV9zdGFy dCBzbyB0aGF0IHJlZGlzcGxheV93aW5kb3cgd2lsbCBydW4gdGhlCiAJCSAgICAgd2luZG93 LXNjcm9sbC1mdW5jdGlvbnMuICAqLwogCQkgIHctPmZvcmNlX3N0YXJ0ID0gMTsKQEAgLTQ0 MzUsOCArNDQyNSw4IEBACiAgICAgICBieXRlcG9zID0gWE1BUktFUiAody0+c3RhcnQpLT5i eXRlcG9zOwogICAgICAgdy0+c3RhcnRfYXRfbGluZV9iZWcgPSAocG9zID09IEJFR1YgfHwg RkVUQ0hfQllURSAoYnl0ZXBvcyAtIDEpID09ICdcbicpOwogICAgICAgdy0+dXBkYXRlX21v ZGVfbGluZSA9IDE7Ci0gICAgICBYU0VURkFTVElOVCAody0+bGFzdF9tb2RpZmllZCwgMCk7 Ci0gICAgICBYU0VURkFTVElOVCAody0+bGFzdF9vdmVybGF5X21vZGlmaWVkLCAwKTsKKyAg ICAgIHctPmxhc3RfbW9kaWZpZWQgPSAwOworICAgICAgdy0+bGFzdF9vdmVybGF5X21vZGlm aWVkID0gMDsKICAgICAgIC8qIFNldCBmb3JjZV9zdGFydCBzbyB0aGF0IHJlZGlzcGxheV93 aW5kb3cgd2lsbCBydW4gdGhlCiAJIHdpbmRvdy1zY3JvbGwtZnVuY3Rpb25zLiAgKi8KICAg ICAgIHctPmZvcmNlX3N0YXJ0ID0gMTsKQEAgLTQ2MzQsOCArNDYyNCw4IEBACiAgICAgICBz ZXRfbWFya2VyX3Jlc3RyaWN0ZWRfYm90aCAody0+c3RhcnQsIHctPmJ1ZmZlciwgcG9zLCBw b3NfYnl0ZSk7CiAgICAgICB3LT5zdGFydF9hdF9saW5lX2JlZyA9ICFOSUxQIChib2xwKTsK ICAgICAgIHctPnVwZGF0ZV9tb2RlX2xpbmUgPSAxOwotICAgICAgWFNFVEZBU1RJTlQgKHct Pmxhc3RfbW9kaWZpZWQsIDApOwotICAgICAgWFNFVEZBU1RJTlQgKHctPmxhc3Rfb3Zlcmxh eV9tb2RpZmllZCwgMCk7CisgICAgICB3LT5sYXN0X21vZGlmaWVkID0gMDsKKyAgICAgIHct Pmxhc3Rfb3ZlcmxheV9tb2RpZmllZCA9IDA7CiAgICAgICAvKiBTZXQgZm9yY2Vfc3RhcnQg c28gdGhhdCByZWRpc3BsYXlfd2luZG93IHdpbGwgcnVuCiAJIHRoZSB3aW5kb3ctc2Nyb2xs LWZ1bmN0aW9ucy4gICovCiAgICAgICB3LT5mb3JjZV9zdGFydCA9IDE7CkBAIC01NTc1LDgg KzU1NjUsOCBAQAogCQl9CiAJICAgIH0KIAotCSAgWFNFVEZBU1RJTlQgKHctPmxhc3RfbW9k aWZpZWQsIDApOwotCSAgWFNFVEZBU1RJTlQgKHctPmxhc3Rfb3ZlcmxheV9tb2RpZmllZCwg MCk7CisJICB3LT5sYXN0X21vZGlmaWVkID0gMDsKKwkgIHctPmxhc3Rfb3ZlcmxheV9tb2Rp ZmllZCA9IDA7CiAKIAkgIC8qIFJlaW5zdGFsbCB0aGUgc2F2ZWQgYnVmZmVyIGFuZCBwb2lu dGVycyBpbnRvIGl0LiAgKi8KIAkgIGlmIChOSUxQIChwLT5idWZmZXIpKQpAQCAtNjQ3OCw4 ICs2NDY4LDYgQEAKICAgbWluaWJ1Zl93aW5kb3cgPSBmLT5taW5pYnVmZmVyX3dpbmRvdzsK ICAgc2VsZWN0ZWRfd2luZG93ID0gZi0+c2VsZWN0ZWRfd2luZG93OwogICBsYXN0X25vbm1p bmlidWZfZnJhbWUgPSBmOwotCi0gIHdpbmRvd19pbml0aWFsaXplZCA9IDE7CiB9CiAKIHZv aWQKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvd2luZG93LmgnCi0tLSBzcmMvd2luZG93LmgJ MjAxMi0wNi0wMSAwMzo0MTowMyArMDAwMAorKysgc3JjL3dpbmRvdy5oCTIwMTItMDYtMjcg MDY6MjQ6MjUgKzAwMDAKQEAgLTE0NywyNCArMTQ3LDEwIEBACiAgICAgICAgdGhlIHVzZXIg aGFzIHNldCwgYnkgc2V0LXdpbmRvdy1oc2Nyb2xsIGZvciBleGFtcGxlLiAgKi8KICAgICBM aXNwX09iamVjdCBtaW5faHNjcm9sbDsKIAotICAgIC8qIE51bWJlciBzYXlpbmcgaG93IHJl Y2VudGx5IHdpbmRvdyB3YXMgc2VsZWN0ZWQuICAqLwotICAgIExpc3BfT2JqZWN0IHVzZV90 aW1lOwotCi0gICAgLyogVW5pcXVlIG51bWJlciBvZiB3aW5kb3cgYXNzaWduZWQgd2hlbiBp dCB3YXMgY3JlYXRlZC4gICovCi0gICAgTGlzcF9PYmplY3Qgc2VxdWVuY2VfbnVtYmVyOwot CiAgICAgLyogTm8gcGVybWFuZW50IG1lYW5pbmc7IHVzZWQgYnkgc2F2ZS13aW5kb3ctZXhj dXJzaW9uJ3MKICAgICAgICBib29ra2VlcGluZy4gICovCiAgICAgTGlzcF9PYmplY3QgdGVt c2xvdDsKIAotICAgIC8qIHRleHQubW9kaWZpZWQgb2YgZGlzcGxheWVkIGJ1ZmZlciBhcyBv ZiBsYXN0IHRpbWUgZGlzcGxheQotICAgICAgIGNvbXBsZXRlZC4gICovCi0gICAgTGlzcF9P YmplY3QgbGFzdF9tb2RpZmllZDsKLSAgICAvKiBCVUZfT1ZFUkxBWV9NT0RJRklFRCBvZiBk aXNwbGF5ZWQgYnVmZmVyIGFzIG9mIGxhc3QgY29tcGxldGUgdXBkYXRlLiAgKi8KLSAgICBM aXNwX09iamVjdCBsYXN0X292ZXJsYXlfbW9kaWZpZWQ7Ci0gICAgLyogVmFsdWUgb2YgcG9p bnQgYXQgdGhhdCB0aW1lLiAgKi8KLSAgICBMaXNwX09iamVjdCBsYXN0X3BvaW50OwotCiAg ICAgLyogVGhpcyB3aW5kb3cncyB2ZXJ0aWNhbCBzY3JvbGwgYmFyLiAgVGhpcyBmaWVsZCBp cyBvbmx5IGZvciB1c2UKICAgICAgICBieSB0aGUgd2luZG93LXN5c3RlbS1kZXBlbmRlbnQg Y29kZSB3aGljaCBpbXBsZW1lbnRzIHRoZQogICAgICAgIHNjcm9sbCBiYXJzOyBpdCBjYW4g c3RvcmUgYW55dGhpbmcgaXQgbGlrZXMgaGVyZS4gIElmIHRoaXMKQEAgLTE5MSwxNiArMTc3 LDEwIEBACiAgICAgICAgbm8gc2Nyb2xsIGJhci4gIEEgdmFsdWUgb2YgdCBtZWFucyB1c2Ug ZnJhbWUgdmFsdWUuICAqLwogICAgIExpc3BfT2JqZWN0IHZlcnRpY2FsX3Njcm9sbF9iYXJf dHlwZTsKIAotICAgIC8qIFogLSB0aGUgYnVmZmVyIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGds eXBoIGluIHRoZSBjdXJyZW50IG1hdHJpeAotICAgICAgIG9mIFcuICBPbmx5IHZhbGlkIGlm IFdJTkRPV19FTkRfVkFMSUQgaXMgbm90IG5pbC4gICovCi0gICAgTGlzcF9PYmplY3Qgd2lu ZG93X2VuZF9wb3M7Ci0gICAgLyogR2x5cGggbWF0cml4IHJvdyBvZiB0aGUgbGFzdCBnbHlw aCBpbiB0aGUgY3VycmVudCBtYXRyaXgKLSAgICAgICBvZiBXLiAgT25seSB2YWxpZCBpZiBX SU5ET1dfRU5EX1ZBTElEIGlzIG5vdCBuaWwuICAqLwotICAgIExpc3BfT2JqZWN0IHdpbmRv d19lbmRfdnBvczsKLSAgICAvKiB0IGlmIHdpbmRvd19lbmRfcG9zIGlzIHRydWx5IHZhbGlk LgotICAgICAgIFRoaXMgaXMgbmlsIGlmIG5vbnRyaXZpYWwgcmVkaXNwbGF5IGlzIHByZWVt cHRlZAotICAgICAgIHNpbmNlIGluIHRoYXQgY2FzZSB0aGUgZnJhbWUgaW1hZ2UgdGhhdCB3 aW5kb3dfZW5kX3BvcwotICAgICAgIGRpZCBub3QgZ2V0IG9udG8gdGhlIGZyYW1lLiAgKi8K KyAgICAvKiB0IGlmIHdpbmRvd19lbmRfcG9zIGlzIHRydWx5IHZhbGlkLiAgVGhpcyBpcyBu aWwgaWYgbm9udHJpdmlhbAorICAgICAgIHJlZGlzcGxheSBpcyBwcmVlbXB0ZWQgc2luY2Ug aW4gdGhhdCBjYXNlIHRoZSBmcmFtZSBpbWFnZSB0aGF0CisgICAgICAgd2luZG93X2VuZF9w b3MgZGlkIG5vdCBnZXQgb250byB0aGUgZnJhbWUuICBGSVhNRTogY2hlY2sgd2hldGhlcgor ICAgICAgIHRoaXMgbWF5IGJlIGNvbnZlcnRlZCB0byBhIGJpdGZpZWxkIG9yIGV2ZW4gZWxp bWluYXRlZCBhdCBhbGwuICAqLwogICAgIExpc3BfT2JqZWN0IHdpbmRvd19lbmRfdmFsaWQ7 CiAKICAgICAvKiBEaXNwbGF5LXRhYmxlIHRvIHVzZSBmb3IgZGlzcGxheWluZyBjaGFycyBp biB0aGlzIHdpbmRvdy4KQEAgLTI1NCw2ICsyMzQsMzEgQEAKICAgICBzdHJ1Y3QgZ2x5cGhf bWF0cml4ICpjdXJyZW50X21hdHJpeDsKICAgICBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICpkZXNp cmVkX21hdHJpeDsKIAorICAgIC8qIE51bWJlciBzYXlpbmcgaG93IHJlY2VudGx5IHdpbmRv dyB3YXMgc2VsZWN0ZWQuICAqLworICAgIGludCB1c2VfdGltZTsKKworICAgIC8qIFVuaXF1 ZSBudW1iZXIgb2Ygd2luZG93IGFzc2lnbmVkIHdoZW4gaXQgd2FzIGNyZWF0ZWQuICAqLwor ICAgIGludCBzZXF1ZW5jZV9udW1iZXI7CisKKyAgICAvKiBEaXNwbGF5ZWQgYnVmZmVyJ3Mg dGV4dCBtb2RpZmljYXRpb24gZXZlbnRzIGNvdW50ZXIgYXMgb2YgbGFzdCB0aW1lCisgICAg ICAgZGlzcGxheSBjb21wbGV0ZWQuICAqLworICAgIEVNQUNTX0lOVCBsYXN0X21vZGlmaWVk OworCisgICAgLyogRGlzcGxheWVkIGJ1ZmZlcidzIG92ZXJsYXlzIG1vZGlmaWNhdGlvbiBl dmVudHMgY291bnRlciBhcyBvZiBsYXN0CisgICAgICAgY29tcGxldGUgdXBkYXRlLiAgKi8K KyAgICBFTUFDU19JTlQgbGFzdF9vdmVybGF5X21vZGlmaWVkOworCisgICAgLyogVmFsdWUg b2YgcG9pbnQgYXQgdGhhdCB0aW1lLiAgKi8KKyAgICBwdHJkaWZmX3QgbGFzdF9wb2ludDsK KworICAgIC8qIFogLSB0aGUgYnVmZmVyIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGdseXBoIGlu IHRoZSBjdXJyZW50IG1hdHJpeAorICAgICAgIG9mIFcuICBPbmx5IHZhbGlkIGlmIFdJTkRP V19FTkRfVkFMSUQgaXMgbm90IG5pbC4gICovCisgICAgcHRyZGlmZl90IHdpbmRvd19lbmRf cG9zOworCisgICAgLyogR2x5cGggbWF0cml4IHJvdyBvZiB0aGUgbGFzdCBnbHlwaCBpbiB0 aGUgY3VycmVudCBtYXRyaXgKKyAgICAgICBvZiBXLiAgT25seSB2YWxpZCBpZiBXSU5ET1df RU5EX1ZBTElEIGlzIG5vdCBuaWwuICAqLworICAgIHB0cmRpZmZfdCB3aW5kb3dfZW5kX3Zw b3M7CisKICAgICAvKiBTY2FsaW5nIGZhY3RvciBmb3IgdGhlIGdseXBoX21hdHJpeCBzaXpl IGNhbGN1bGF0aW9uIGluIHRoaXMgd2luZG93LgogICAgICAgIFVzZWQgaWYgd2luZG93IGNv bnRhaW5zIG1hbnkgc21hbGwgaW1hZ2VzIG9yIHVzZXMgcHJvcG9ydGlvbmFsIGZvbnRzLAog ICAgICAgIGFzIHRoZSBub3JtYWwgIG1heSB5aWVsZCBhIG1hdHJpeCB3aGljaCBpcyB0b28g c21hbGwuICAqLwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy94ZGlzcC5jJwotLS0gc3JjL3hk aXNwLmMJMjAxMi0wNi0yNiAwMjozMzo1MSArMDAwMAorKysgc3JjL3hkaXNwLmMJMjAxMi0w Ni0yNyAwNjo1Nzo0MyArMDAwMApAQCAtMjUwOCw3ICsyNTA4LDcgQEAKICAgICB7CiAgICAg ICBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3c7CiAgICAgICB4YXNzZXJ0ICgocm93ID0gTUFUUklY X1JPVyAody0+Y3VycmVudF9tYXRyaXgsCi0JCQkJICBYRkFTVElOVCAody0+d2luZG93X2Vu ZF92cG9zKSksCisJCQkJICB3LT53aW5kb3dfZW5kX3Zwb3MpLAogCQkhcm93LT5lbmFibGVk X3AKIAkJfHwgTUFUUklYX1JPV19ESVNQTEFZU19URVhUX1AgKHJvdykKIAkJfHwgTUFUUklY X1JPV19WUE9TIChyb3csIHctPmN1cnJlbnRfbWF0cml4KSA9PSAwKSk7CkBAIC04ODUwLDcg Kzg4NTAsNyBAQAogICAgICAgJiYgaXQtPmN1cnJlbnRfeCA9PSBpdC0+bGFzdF92aXNpYmxl X3ggLSAxCiAgICAgICAmJiBpdC0+YyAhPSAnXG4nCiAgICAgICAmJiBpdC0+YyAhPSAnXHQn Ci0gICAgICAmJiBpdC0+dnBvcyA8IFhGQVNUSU5UIChpdC0+dy0+d2luZG93X2VuZF92cG9z KSkKKyAgICAgICYmIGl0LT52cG9zIDwgaXQtPnctPndpbmRvd19lbmRfdnBvcykKICAgICB7 CiAgICAgICBpdC0+Y29udGludWF0aW9uX2xpbmVzX3dpZHRoICs9IGl0LT5jdXJyZW50X3g7 CiAgICAgICBpdC0+Y3VycmVudF94ID0gaXQtPmhwb3MgPSBpdC0+bWF4X2FzY2VudCA9IGl0 LT5tYXhfZGVzY2VudCA9IDA7CkBAIC0xMjUwOCw4ICsxMjUwOCw4IEBACiAgIGludCB1bmNo YW5nZWRfcCA9IDE7CiAKICAgLyogSWYgdGV4dCBvciBvdmVybGF5cyBoYXZlIGNoYW5nZWQs IHNlZSB3aGVyZS4gICovCi0gIGlmIChYRkFTVElOVCAody0+bGFzdF9tb2RpZmllZCkgPCBN T0RJRkYKLSAgICAgIHx8IFhGQVNUSU5UICh3LT5sYXN0X292ZXJsYXlfbW9kaWZpZWQpIDwg T1ZFUkxBWV9NT0RJRkYpCisgIGlmICh3LT5sYXN0X21vZGlmaWVkIDwgTU9ESUZGCisgICAg ICB8fCB3LT5sYXN0X292ZXJsYXlfbW9kaWZpZWQgPCBPVkVSTEFZX01PRElGRikKICAgICB7 CiAgICAgICAvKiBHYXAgaW4gdGhlIGxpbmU/ICAqLwogICAgICAgaWYgKEdQVCA8IHN0YXJ0 IHx8IFogLSBHUFQgPCBlbmQpCkBAIC0xMjc4OCw5ICsxMjc4OCw5IEBACiAJcHQgPSBtYXJr ZXJfcG9zaXRpb24gKHctPnBvaW50bSk7CiAKICAgICAgIGlmICgody0+Y3VycmVudF9tYXRy aXgtPmJ1ZmZlciAhPSBYQlVGRkVSICh3LT5idWZmZXIpCi0JICAgfHwgcHQgIT0gWElOVCAo dy0+bGFzdF9wb2ludCkpCisJICAgfHwgcHQgIT0gdy0+bGFzdF9wb2ludCkKIAkgICYmIGNo ZWNrX3BvaW50X2luX2NvbXBvc2l0aW9uICh3LT5jdXJyZW50X21hdHJpeC0+YnVmZmVyLAot CQkJCQkgWElOVCAody0+bGFzdF9wb2ludCksCisJCQkJCSB3LT5sYXN0X3BvaW50LAogCQkJ CQkgWEJVRkZFUiAody0+YnVmZmVyKSwgcHQpKQogCWItPmNsaXBfY2hhbmdlZCA9IDE7CiAg ICAgfQpAQCAtMTMwMTIsOSArMTMwMTIsOSBAQAogICBpZiAoIU5JTFAgKHctPmNvbHVtbl9u dW1iZXJfZGlzcGxheWVkKQogICAgICAgLyogVGhpcyBhbHRlcm5hdGl2ZSBxdWlja2x5IGlk ZW50aWZpZXMgYSBjb21tb24gY2FzZQogCSB3aGVyZSBubyBjaGFuZ2UgaXMgbmVlZGVkLiAg Ki8KLSAgICAgICYmICEoUFQgPT0gWEZBU1RJTlQgKHctPmxhc3RfcG9pbnQpCi0JICAgJiYg WEZBU1RJTlQgKHctPmxhc3RfbW9kaWZpZWQpID49IE1PRElGRgotCSAgICYmIFhGQVNUSU5U ICh3LT5sYXN0X292ZXJsYXlfbW9kaWZpZWQpID49IE9WRVJMQVlfTU9ESUZGKQorICAgICAg JiYgIShQVCA9PSB3LT5sYXN0X3BvaW50CisJICAgJiYgdy0+bGFzdF9tb2RpZmllZCA+PSBN T0RJRkYKKwkgICAmJiB3LT5sYXN0X292ZXJsYXlfbW9kaWZpZWQgPj0gT1ZFUkxBWV9NT0RJ RkYpCiAgICAgICAmJiAoWEZBU1RJTlQgKHctPmNvbHVtbl9udW1iZXJfZGlzcGxheWVkKSAh PSBjdXJyZW50X2NvbHVtbiAoKSkpCiAgICAgdy0+dXBkYXRlX21vZGVfbGluZSA9IDE7CiAK QEAgLTEzMDc3LDggKzEzMDc3LDggQEAKICAgICB9CiAgIGVsc2UgaWYgKEVRIChzZWxlY3Rl ZF93aW5kb3csIG1pbmlidWZfd2luZG93KQogCSAgICYmIChjdXJyZW50X2J1ZmZlci0+Y2xp cF9jaGFuZ2VkCi0JICAgICAgIHx8IFhGQVNUSU5UICh3LT5sYXN0X21vZGlmaWVkKSA8IE1P RElGRgotCSAgICAgICB8fCBYRkFTVElOVCAody0+bGFzdF9vdmVybGF5X21vZGlmaWVkKSA8 IE9WRVJMQVlfTU9ESUZGKQorCSAgICAgICB8fCB3LT5sYXN0X21vZGlmaWVkIDwgTU9ESUZG CisJICAgICAgIHx8IHctPmxhc3Rfb3ZlcmxheV9tb2RpZmllZCA8IE9WRVJMQVlfTU9ESUZG KQogCSAgICYmIHJlc2l6ZV9taW5pX3dpbmRvdyAodywgMCkpCiAgICAgewogICAgICAgLyog UmVzaXplZCBhY3RpdmUgbWluaS13aW5kb3cgdG8gZml0IHRoZSBzaXplIG9mIHdoYXQgaXQg aXMKQEAgLTEzMTQzLDggKzEzMTQzLDggQEAKIAkgICAgICB8fCBGRVRDSF9CWVRFIChCWVRF UE9TICh0bGJ1ZnBvcykpID09ICdcbicpKQogCS8qIEZvcm1lciBjb250aW51YXRpb24gbGlu ZSBoYXMgZGlzYXBwZWFyZWQgYnkgYmVjb21pbmcgZW1wdHkuICAqLwogCWdvdG8gY2FuY2Vs OwotICAgICAgZWxzZSBpZiAoWEZBU1RJTlQgKHctPmxhc3RfbW9kaWZpZWQpIDwgTU9ESUZG Ci0JICAgICAgIHx8IFhGQVNUSU5UICh3LT5sYXN0X292ZXJsYXlfbW9kaWZpZWQpIDwgT1ZF UkxBWV9NT0RJRkYKKyAgICAgIGVsc2UgaWYgKHctPmxhc3RfbW9kaWZpZWQgPCBNT0RJRkYK KwkgICAgICAgfHwgdy0+bGFzdF9vdmVybGF5X21vZGlmaWVkIDwgT1ZFUkxBWV9NT0RJRkYK IAkgICAgICAgfHwgTUlOSV9XSU5ET1dfUCAodykpCiAJewogCSAgLyogV2UgaGF2ZSB0byBo YW5kbGUgdGhlIGNhc2Ugb2YgY29udGludWF0aW9uIGFyb3VuZCBhCkBAIC0xMzIyNCwxMiAr MTMyMjQsMTIgQEAKIAkJIGFkanVzdGVkLiAgKi8KIAkgICAgICBpZiAoKGl0LmdseXBoX3Jv dyAtIDEpLT5kaXNwbGF5c190ZXh0X3ApCiAJCXsKLQkJICBpZiAoWEZBU1RJTlQgKHctPndp bmRvd19lbmRfdnBvcykgPCB0aGlzX2xpbmVfdnBvcykKLQkJICAgIFhTRVRJTlQgKHctPndp bmRvd19lbmRfdnBvcywgdGhpc19saW5lX3Zwb3MpOworCQkgIGlmICh3LT53aW5kb3dfZW5k X3Zwb3MgPCB0aGlzX2xpbmVfdnBvcykKKwkJICAgIHctPndpbmRvd19lbmRfdnBvcyA9IHRo aXNfbGluZV92cG9zOwogCQl9Ci0JICAgICAgZWxzZSBpZiAoWEZBU1RJTlQgKHctPndpbmRv d19lbmRfdnBvcykgPT0gdGhpc19saW5lX3Zwb3MKKwkgICAgICBlbHNlIGlmICh3LT53aW5k b3dfZW5kX3Zwb3MgPT0gdGhpc19saW5lX3Zwb3MKIAkJICAgICAgICYmIHRoaXNfbGluZV92 cG9zID4gMCkKLQkJWFNFVElOVCAody0+d2luZG93X2VuZF92cG9zLCB0aGlzX2xpbmVfdnBv cyAtIDEpOworCQl3LT53aW5kb3dfZW5kX3Zwb3MgPSB0aGlzX2xpbmVfdnBvcyAtIDE7CiAJ ICAgICAgdy0+d2luZG93X2VuZF92YWxpZCA9IFFuaWw7CiAKIAkgICAgICAvKiBVcGRhdGUg aGludDogTm8gbmVlZCB0byB0cnkgdG8gc2Nyb2xsIGluIHVwZGF0ZV93aW5kb3cuICAqLwpA QCAtMTMyNDgsNyArMTMyNDgsNyBAQAogCSAgICBnb3RvIGNhbmNlbDsKIAl9CiAgICAgICBl bHNlIGlmICgvKiBDdXJzb3IgcG9zaXRpb24gaGFzbid0IGNoYW5nZWQuICAqLwotCSAgICAg ICBQVCA9PSBYRkFTVElOVCAody0+bGFzdF9wb2ludCkKKwkgICAgICAgUFQgPT0gdy0+bGFz dF9wb2ludAogCSAgICAgICAvKiBNYWtlIHN1cmUgdGhlIGN1cnNvciB3YXMgbGFzdCBkaXNw bGF5ZWQKIAkJICBpbiB0aGlzIHdpbmRvdy4gIE90aGVyd2lzZSB3ZSBoYXZlIHRvIHJlcG9z aXRpb24gaXQuICAqLwogCSAgICAgICAmJiAwIDw9IHctPmN1cnNvci52cG9zCkBAIC0xMzY2 NCwxMCArMTM2NjQsOCBAQAogICAgIHsKICAgICAgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVG RkVSICh3LT5idWZmZXIpOwogCi0gICAgICB3LT5sYXN0X21vZGlmaWVkCi0JPSBtYWtlX251 bWJlciAoYWNjdXJhdGVfcCA/IEJVRl9NT0RJRkYgKGIpIDogMCk7Ci0gICAgICB3LT5sYXN0 X292ZXJsYXlfbW9kaWZpZWQKLQk9IG1ha2VfbnVtYmVyIChhY2N1cmF0ZV9wID8gQlVGX09W RVJMQVlfTU9ESUZGIChiKSA6IDApOworICAgICAgdy0+bGFzdF9tb2RpZmllZCA9IGFjY3Vy YXRlX3AgPyBCVUZfTU9ESUZGIChiKSA6IDA7CisgICAgICB3LT5sYXN0X292ZXJsYXlfbW9k aWZpZWQgPSBhY2N1cmF0ZV9wID8gQlVGX09WRVJMQVlfTU9ESUZGIChiKSA6IDA7CiAgICAg ICB3LT5sYXN0X2hhZF9zdGFyCiAJPSBCVUZfTU9ESUZGIChiKSA+IEJVRl9TQVZFX01PRElG RiAoYik7CiAKQEAgLTEzNjg5LDkgKzEzNjg3LDkgQEAKIAkgIHctPmxhc3RfY3Vyc29yX29m Zl9wID0gdy0+Y3Vyc29yX29mZl9wOwogCiAJICBpZiAodyA9PSBYV0lORE9XIChzZWxlY3Rl ZF93aW5kb3cpKQotCSAgICB3LT5sYXN0X3BvaW50ID0gbWFrZV9udW1iZXIgKEJVRl9QVCAo YikpOworCSAgICB3LT5sYXN0X3BvaW50ID0gQlVGX1BUIChiKTsKIAkgIGVsc2UKLQkgICAg dy0+bGFzdF9wb2ludCA9IG1ha2VfbnVtYmVyIChYTUFSS0VSICh3LT5wb2ludG0pLT5jaGFy cG9zKTsKKwkgICAgdy0+bGFzdF9wb2ludCA9IFhNQVJLRVIgKHctPnBvaW50bSktPmNoYXJw b3M7CiAJfQogICAgIH0KIApAQCAtMTQ5MzIsNiArMTQ5MzAsMTEgQEAKICAgICByZXR1cm4g cmM7CiAjZW5kaWYKIAorICAvKiBQcmV2aW91c2x5IHRoZXJlIHdhcyBhIHJ1bnRpbWUgY2hl Y2sgd2hldGhlciBsYXN0X3BvaW50IGlzIG5vbi1uaWwuCisgICAgIE5vdyBpdCdzIGNvbnZl cnRlZCB0byBwdHJkaWZmX3QsIHNvIHplcm8gbWVhbnMgaW52YWxpZCBwb3NpdGlvbiBpbgor ICAgICBhIGJ1ZmZlci4gICovCisgIGVhc3NlcnQgKHctPmxhc3RfcG9pbnQgPiAwKTsKKwog ICAvKiBIYW5kbGUgY2FzZSB3aGVyZSB0ZXh0IGhhcyBub3QgY2hhbmdlZCwgb25seSBwb2lu dCwgYW5kIGl0IGhhcwogICAgICBub3QgbW92ZWQgb2ZmIHRoZSBmcmFtZS4gICovCiAgIGlm ICgvKiBQb2ludCBtYXkgYmUgaW4gdGhpcyB3aW5kb3cuICAqLwpAQCAtMTQ5NTIsOCArMTQ5 NTUsNiBAQAogCSAgICYmICFOSUxQIChCVkFSIChjdXJyZW50X2J1ZmZlciwgbWFya19hY3Rp dmUpKSkKICAgICAgICYmIE5JTFAgKHctPnJlZ2lvbl9zaG93aW5nKQogICAgICAgJiYgTklM UCAoVnNob3dfdHJhaWxpbmdfd2hpdGVzcGFjZSkKLSAgICAgIC8qIFJpZ2h0IGFmdGVyIHNw bGl0dGluZyB3aW5kb3dzLCBsYXN0X3BvaW50IG1heSBiZSBuaWwuICAqLwotICAgICAgJiYg SU5URUdFUlAgKHctPmxhc3RfcG9pbnQpCiAgICAgICAvKiBUaGlzIGNvZGUgaXMgbm90IHVz ZWQgZm9yIG1pbmktYnVmZmVyIGZvciB0aGUgc2FrZSBvZiB0aGUgY2FzZQogCSBvZiByZWRp c3BsYXlpbmcgdG8gcmVwbGFjZSBhbiBlY2hvIGFyZWEgbWVzc2FnZTsgc2luY2UgaW4KIAkg dGhhdCBjYXNlIHRoZSBtaW5pLWJ1ZmZlciBjb250ZW50cyBwZXIgc2UgYXJlIHVzdWFsbHkK QEAgLTE0OTYyLDEyICsxNDk2MywxMSBAQAogCSBoYW5kbGVzIHRoZSBzYW1lIGNhc2VzLiAg Ki8KICAgICAgICYmICFFUSAod2luZG93LCBtaW5pYnVmX3dpbmRvdykKICAgICAgIC8qIFdo ZW4gc3BsaXR0aW5nIHdpbmRvd3Mgb3IgZm9yIG5ldyB3aW5kb3dzLCBpdCBoYXBwZW5zIHRo YXQKLQkgcmVkaXNwbGF5IGlzIGNhbGxlZCB3aXRoIGEgbmlsIHdpbmRvd19lbmRfdnBvcyBv ciBvbmUgYmVpbmcKLQkgbGFyZ2VyIHRoYW4gdGhlIHdpbmRvdy4gIFRoaXMgc2hvdWxkIHJl YWxseSBiZSBmaXhlZCBpbgotCSB3aW5kb3cuYy4gIEkgZG9uJ3QgaGF2ZSB0aGlzIG9uIG15 IGxpc3QsIG5vdywgc28gd2UgZG8KLQkgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBhcyB0aGUg b2xkIHJlZGlzcGxheSBjb2RlLiAgLS1nZXJkLiAgKi8KLSAgICAgICYmIElOVEVHRVJQICh3 LT53aW5kb3dfZW5kX3Zwb3MpCi0gICAgICAmJiBYRkFTVElOVCAody0+d2luZG93X2VuZF92 cG9zKSA8IHctPmN1cnJlbnRfbWF0cml4LT5ucm93cworCSByZWRpc3BsYXkgaXMgY2FsbGVk IHdpdGggYSB6ZXJvIHdpbmRvd19lbmRfdnBvcyBvciBvbmUgYmVpbmcKKwkgbGFyZ2VyIHRo YW4gdGhlIHdpbmRvdy4gIEZJWE1FOiBHZXJkIGhhcyBzYWlkIHRoYXQgdGhpcyBzaG91bGQK KwkgYmUgZml4ZWQgaW4gd2luZG93LmM7IGFueXdheSwgdGhpcyBuZWVkcyB0byBiZSBjaGVj a2VkLiAgKi8KKyAgICAgICYmIHctPndpbmRvd19lbmRfdnBvcyA+IDAKKyAgICAgICYmIHct PndpbmRvd19lbmRfdnBvcyA8IHctPmN1cnJlbnRfbWF0cml4LT5ucm93cwogICAgICAgJiYg KEZSQU1FX1dJTkRPV19QIChmKQogCSAgfHwgIW92ZXJsYXlfYXJyb3dfaW5fY3VycmVudF9i dWZmZXJfcCAoKSkpCiAgICAgewpAQCAtMTUwMTEsNyArMTUwMTEsNyBAQAogCSAgaW50IHNj cm9sbF9wID0gMCwgbXVzdF9zY3JvbGwgPSAwOwogCSAgaW50IGxhc3RfeSA9IHdpbmRvd190 ZXh0X2JvdHRvbV95ICh3KSAtIHRoaXNfc2Nyb2xsX21hcmdpbjsKIAotCSAgaWYgKFBUID4g WEZBU1RJTlQgKHctPmxhc3RfcG9pbnQpKQorCSAgaWYgKFBUID4gdy0+bGFzdF9wb2ludCkK IAkgICAgewogCSAgICAgIC8qIFBvaW50IGhhcyBtb3ZlZCBmb3J3YXJkLiAgKi8KIAkgICAg ICB3aGlsZSAoTUFUUklYX1JPV19FTkRfQ0hBUlBPUyAocm93KSA8IFBUCkBAIC0xNTA0Niw3 ICsxNTA0Niw3IEBACiAJCSAgICAgICYmICFNQVRSSVhfUk9XX0VORFNfSU5fTUlERExFX09G X0NIQVJfUCAocm93KSkpCiAJCXNjcm9sbF9wID0gMTsKIAkgICAgfQotCSAgZWxzZSBpZiAo UFQgPCBYRkFTVElOVCAody0+bGFzdF9wb2ludCkpCisJICBlbHNlIGlmIChQVCA8IHctPmxh c3RfcG9pbnQpCiAJICAgIHsKIAkgICAgICAvKiBDdXJzb3IgaGFzIHRvIGJlIG1vdmVkIGJh Y2t3YXJkLiAgTm90ZSB0aGF0IFBUID49CiAJCSBDSEFSUE9TIChzdGFydHApIGJlY2F1c2Ug b2YgdGhlIG91dGVyIGlmLXN0YXRlbWVudC4gICovCkBAIC0xNTI3OSw3ICsxNTI3OSw3IEBA CiAgICAgICBzdGFydCA9IG1hcmtlcl9wb3NpdGlvbiAody0+c3RhcnQpIC0gQlVGX0JFR1Yg KGJ1Zik7CiAgICAgICAvKiBJIGRvbid0IHRoaW5rIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBi ZSByaWdodC4gIEZvciB0aGUKIAkgbW9tZW50LCB3ZSdsbCBwcmV0ZW5kIGl0IGlzLiAgKi8K LSAgICAgIGVuZCA9IEJVRl9aIChidWYpIC0gWEZBU1RJTlQgKHctPndpbmRvd19lbmRfcG9z KSAtIEJVRl9CRUdWIChidWYpOworICAgICAgZW5kID0gQlVGX1ogKGJ1ZikgLSB3LT53aW5k b3dfZW5kX3BvcyAtIEJVRl9CRUdWIChidWYpOwogCiAgICAgICBpZiAoZW5kIDwgc3RhcnQp CiAJZW5kID0gc3RhcnQ7CkBAIC0xNTM5Miw4ICsxNTM5Miw4IEBACiAgICAgPSAoIU5JTFAg KHctPndpbmRvd19lbmRfdmFsaWQpCiAgICAgICAgJiYgIWN1cnJlbnRfYnVmZmVyLT5jbGlw X2NoYW5nZWQKICAgICAgICAmJiAhY3VycmVudF9idWZmZXItPnByZXZlbnRfcmVkaXNwbGF5 X29wdGltaXphdGlvbnNfcAotICAgICAgICYmIFhGQVNUSU5UICh3LT5sYXN0X21vZGlmaWVk KSA+PSBNT0RJRkYKLSAgICAgICAmJiBYRkFTVElOVCAody0+bGFzdF9vdmVybGF5X21vZGlm aWVkKSA+PSBPVkVSTEFZX01PRElGRik7CisgICAgICAgJiYgdy0+bGFzdF9tb2RpZmllZCA+ PSBNT0RJRkYKKyAgICAgICAmJiB3LT5sYXN0X292ZXJsYXlfbW9kaWZpZWQgPj0gT1ZFUkxB WV9NT0RJRkYpOwogCiAgIC8qIFJ1biB0aGUgd2luZG93LWJvdHRvbS1jaGFuZ2UtZnVuY3Rp b25zCiAgICAgIGlmIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHRleHQgb24gdGhlIHNjcmVl biBoYXMgY2hhbmdlZApAQCAtMTU0MTUsOCArMTU0MTUsOCBAQAogICBidWZmZXJfdW5jaGFu Z2VkX3AKICAgICA9ICghTklMUCAody0+d2luZG93X2VuZF92YWxpZCkKICAgICAgICAmJiAh Y3VycmVudF9idWZmZXItPmNsaXBfY2hhbmdlZAotICAgICAgICYmIFhGQVNUSU5UICh3LT5s YXN0X21vZGlmaWVkKSA+PSBNT0RJRkYKLSAgICAgICAmJiBYRkFTVElOVCAody0+bGFzdF9v dmVybGF5X21vZGlmaWVkKSA+PSBPVkVSTEFZX01PRElGRik7CisgICAgICAgJiYgdy0+bGFz dF9tb2RpZmllZCA+PSBNT0RJRkYKKyAgICAgICAmJiB3LT5sYXN0X292ZXJsYXlfbW9kaWZp ZWQgPj0gT1ZFUkxBWV9NT0RJRkYpOwogCiAgIC8qIFdoZW4gd2luZG93c19vcl9idWZmZXJz X2NoYW5nZWQgaXMgbm9uLXplcm8sIHdlIGNhbid0IHJlbHkgb24KICAgICAgdGhlIHdpbmRv dyBlbmQgYmVpbmcgdmFsaWQsIHNvIHNldCBpdCB0byBuaWwgdGhlcmUuICAqLwpAQCAtMTU0 NDEsOSArMTU0NDEsOSBAQAogICBpZiAoIU5JTFAgKHctPmNvbHVtbl9udW1iZXJfZGlzcGxh eWVkKQogICAgICAgLyogVGhpcyBhbHRlcm5hdGl2ZSBxdWlja2x5IGlkZW50aWZpZXMgYSBj b21tb24gY2FzZQogCSB3aGVyZSBubyBjaGFuZ2UgaXMgbmVlZGVkLiAgKi8KLSAgICAgICYm ICEoUFQgPT0gWEZBU1RJTlQgKHctPmxhc3RfcG9pbnQpCi0JICAgJiYgWEZBU1RJTlQgKHct Pmxhc3RfbW9kaWZpZWQpID49IE1PRElGRgotCSAgICYmIFhGQVNUSU5UICh3LT5sYXN0X292 ZXJsYXlfbW9kaWZpZWQpID49IE9WRVJMQVlfTU9ESUZGKQorICAgICAgJiYgIShQVCA9PSB3 LT5sYXN0X3BvaW50CisJICAgJiYgdy0+bGFzdF9tb2RpZmllZCA+PSBNT0RJRkYKKwkgICAm JiB3LT5sYXN0X292ZXJsYXlfbW9kaWZpZWQgPj0gT1ZFUkxBWV9NT0RJRkYpCiAgICAgICAm JiAoWEZBU1RJTlQgKHctPmNvbHVtbl9udW1iZXJfZGlzcGxheWVkKSAhPSBjdXJyZW50X2Nv bHVtbiAoKSkpCiAgICAgdXBkYXRlX21vZGVfbGluZSA9IDE7CiAKQEAgLTE1NTU5LDggKzE1 NTU5LDggQEAKIAkgIHN0YXJ0cCA9IHJ1bl93aW5kb3dfc2Nyb2xsX2Z1bmN0aW9ucyAod2lu ZG93LCBzdGFydHApOwogCX0KIAotICAgICAgdy0+bGFzdF9tb2RpZmllZCA9IG1ha2VfbnVt YmVyICgwKTsKLSAgICAgIHctPmxhc3Rfb3ZlcmxheV9tb2RpZmllZCA9IG1ha2VfbnVtYmVy ICgwKTsKKyAgICAgIHctPmxhc3RfbW9kaWZpZWQgPSAwOworICAgICAgdy0+bGFzdF9vdmVy bGF5X21vZGlmaWVkID0gMDsKICAgICAgIGlmIChDSEFSUE9TIChzdGFydHApIDwgQkVHVikK IAlTRVRfVEVYVF9QT1MgKHN0YXJ0cCwgQkVHViwgQkVHVl9CWVRFKTsKICAgICAgIGVsc2Ug aWYgKENIQVJQT1MgKHN0YXJ0cCkgPiBaVikKQEAgLTE1Njg1LDggKzE1Njg1LDggQEAKIAkg ICAmJiAoQ0hBUlBPUyAoc3RhcnRwKSA8IFpWCiAJICAgICAgIC8qIEF2b2lkIHN0YXJ0aW5n IGF0IGVuZCBvZiBidWZmZXIuICAqLwogCSAgICAgICB8fCBDSEFSUE9TIChzdGFydHApID09 IEJFR1YKLQkgICAgICAgfHwgKFhGQVNUSU5UICh3LT5sYXN0X21vZGlmaWVkKSA+PSBNT0RJ RkYKLQkJICAgJiYgWEZBU1RJTlQgKHctPmxhc3Rfb3ZlcmxheV9tb2RpZmllZCkgPj0gT1ZF UkxBWV9NT0RJRkYpKSkKKwkgICAgICAgfHwgKHctPmxhc3RfbW9kaWZpZWQgPj0gTU9ESUZG CisJCSAgICYmIHctPmxhc3Rfb3ZlcmxheV9tb2RpZmllZCA+PSBPVkVSTEFZX01PRElGRikp KQogICAgIHsKICAgICAgIGludCBkMSwgZDIsIGQzLCBkNCwgZDUsIGQ2OwogCkBAIC0xNTc3 Myw4ICsxNTc3Myw4IEBACiAKICB0cnlfdG9fc2Nyb2xsOgogCi0gIHctPmxhc3RfbW9kaWZp ZWQgPSBtYWtlX251bWJlciAoMCk7Ci0gIHctPmxhc3Rfb3ZlcmxheV9tb2RpZmllZCA9IG1h a2VfbnVtYmVyICgwKTsKKyAgdy0+bGFzdF9tb2RpZmllZCA9IDA7CisgIHctPmxhc3Rfb3Zl cmxheV9tb2RpZmllZCA9IDA7CiAKICAgLyogUmVkaXNwbGF5IHRoZSBtb2RlIGxpbmUuICBT ZWxlY3QgdGhlIGJ1ZmZlciBwcm9wZXJseSBmb3IgdGhhdC4gICovCiAgIGlmICghdXBkYXRl X21vZGVfbGluZSkKQEAgLTE1OTYyLDcgKzE1OTYyLDcgQEAKICAgaWYgKHctPmN1cnNvci52 cG9zIDwgMCkKICAgICB7CiAgICAgICBpZiAoIU5JTFAgKHctPndpbmRvd19lbmRfdmFsaWQp Ci0JICAmJiBQVCA+PSBaIC0gWEZBU1RJTlQgKHctPndpbmRvd19lbmRfcG9zKSkKKwkgICYm IFBUID49IFogLSB3LT53aW5kb3dfZW5kX3BvcykKIAl7CiAJICBjbGVhcl9nbHlwaF9tYXRy aXggKHctPmRlc2lyZWRfbWF0cml4KTsKIAkgIG1vdmVfaXRfYnlfbGluZXMgKCZpdCwgMSk7 CkBAIC0xNjI1MSw3ICsxNjI1MSw3IEBACiAgICAgfQogCiAgIC8qIElmIGJvdHRvbSBtb3Zl ZCBvZmYgZW5kIG9mIGZyYW1lLCBjaGFuZ2UgbW9kZSBsaW5lIHBlcmNlbnRhZ2UuICAqLwot ICBpZiAoWEZBU1RJTlQgKHctPndpbmRvd19lbmRfcG9zKSA8PSAwCisgIGlmICh3LT53aW5k b3dfZW5kX3BvcyA8PSAwCiAgICAgICAmJiBaICE9IElUX0NIQVJQT1MgKGl0KSkKICAgICB3 LT51cGRhdGVfbW9kZV9saW5lID0gMTsKIApAQCAtMTYyNjMsMTggKzE2MjYzLDE2IEBACiAg ICAgICB4YXNzZXJ0IChNQVRSSVhfUk9XX0RJU1BMQVlTX1RFWFRfUCAobGFzdF90ZXh0X3Jv dykpOwogICAgICAgdy0+d2luZG93X2VuZF9ieXRlcG9zCiAJPSBaX0JZVEUgLSBNQVRSSVhf Uk9XX0VORF9CWVRFUE9TIChsYXN0X3RleHRfcm93KTsKLSAgICAgIHctPndpbmRvd19lbmRf cG9zCi0JPSBtYWtlX251bWJlciAoWiAtIE1BVFJJWF9ST1dfRU5EX0NIQVJQT1MgKGxhc3Rf dGV4dF9yb3cpKTsKLSAgICAgIHctPndpbmRvd19lbmRfdnBvcwotCT0gbWFrZV9udW1iZXIg KE1BVFJJWF9ST1dfVlBPUyAobGFzdF90ZXh0X3Jvdywgdy0+ZGVzaXJlZF9tYXRyaXgpKTsK LSAgICAgIHhhc3NlcnQgKE1BVFJJWF9ST1cgKHctPmRlc2lyZWRfbWF0cml4LCBYRkFTVElO VCAody0+d2luZG93X2VuZF92cG9zKSkKKyAgICAgIHctPndpbmRvd19lbmRfcG9zID0gWiAt IE1BVFJJWF9ST1dfRU5EX0NIQVJQT1MgKGxhc3RfdGV4dF9yb3cpOworICAgICAgdy0+d2lu ZG93X2VuZF92cG9zID0gTUFUUklYX1JPV19WUE9TIChsYXN0X3RleHRfcm93LCB3LT5kZXNp cmVkX21hdHJpeCk7CisgICAgICB4YXNzZXJ0IChNQVRSSVhfUk9XICh3LT5kZXNpcmVkX21h dHJpeCwgdy0+d2luZG93X2VuZF92cG9zKQogCSAgICAgICAtPmRpc3BsYXlzX3RleHRfcCk7 CiAgICAgfQogICBlbHNlCiAgICAgewogICAgICAgdy0+d2luZG93X2VuZF9ieXRlcG9zID0g Wl9CWVRFIC0gWlZfQllURTsKLSAgICAgIHctPndpbmRvd19lbmRfcG9zID0gbWFrZV9udW1i ZXIgKFogLSBaVik7Ci0gICAgICB3LT53aW5kb3dfZW5kX3Zwb3MgPSBtYWtlX251bWJlciAo MCk7CisgICAgICB3LT53aW5kb3dfZW5kX3BvcyA9IFogLSBaVjsKKyAgICAgIHctPndpbmRv d19lbmRfdnBvcyA9IDA7CiAgICAgfQogCiAgIC8qIEJ1dCB0aGF0IGlzIG5vdCB2YWxpZCBp bmZvIHVudGlsIHJlZGlzcGxheSBmaW5pc2hlcy4gICovCkBAIC0xNjUwMiwyNyArMTY1MDAs MjIgQEAKIAl7CiAJICB3LT53aW5kb3dfZW5kX2J5dGVwb3MKIAkgICAgPSBaX0JZVEUgLSBN QVRSSVhfUk9XX0VORF9CWVRFUE9TIChsYXN0X3JldXNlZF90ZXh0X3Jvdyk7Ci0JICB3LT53 aW5kb3dfZW5kX3BvcwotCSAgICA9IG1ha2VfbnVtYmVyIChaIC0gTUFUUklYX1JPV19FTkRf Q0hBUlBPUyAobGFzdF9yZXVzZWRfdGV4dF9yb3cpKTsKLQkgIHctPndpbmRvd19lbmRfdnBv cwotCSAgICA9IG1ha2VfbnVtYmVyIChNQVRSSVhfUk9XX1ZQT1MgKGxhc3RfcmV1c2VkX3Rl eHRfcm93LAotCQkJCQkgICAgdy0+Y3VycmVudF9tYXRyaXgpKTsKKwkgIHctPndpbmRvd19l bmRfcG9zID0gWiAtIE1BVFJJWF9ST1dfRU5EX0NIQVJQT1MgKGxhc3RfcmV1c2VkX3RleHRf cm93KTsKKwkgIHctPndpbmRvd19lbmRfdnBvcyA9IE1BVFJJWF9ST1dfVlBPUyAobGFzdF9y ZXVzZWRfdGV4dF9yb3csIHctPmN1cnJlbnRfbWF0cml4KTsKIAl9CiAgICAgICBlbHNlIGlm IChsYXN0X3RleHRfcm93KQogCXsKIAkgIHctPndpbmRvd19lbmRfYnl0ZXBvcwogCSAgICA9 IFpfQllURSAtIE1BVFJJWF9ST1dfRU5EX0JZVEVQT1MgKGxhc3RfdGV4dF9yb3cpOwotCSAg dy0+d2luZG93X2VuZF9wb3MKLQkgICAgPSBtYWtlX251bWJlciAoWiAtIE1BVFJJWF9ST1df RU5EX0NIQVJQT1MgKGxhc3RfdGV4dF9yb3cpKTsKLQkgIHctPndpbmRvd19lbmRfdnBvcwot CSAgICA9IG1ha2VfbnVtYmVyIChNQVRSSVhfUk9XX1ZQT1MgKGxhc3RfdGV4dF9yb3csIHct PmRlc2lyZWRfbWF0cml4KSk7CisJICB3LT53aW5kb3dfZW5kX3BvcyA9IFogLSBNQVRSSVhf Uk9XX0VORF9DSEFSUE9TIChsYXN0X3RleHRfcm93KTsKKwkgIHctPndpbmRvd19lbmRfdnBv cyA9IE1BVFJJWF9ST1dfVlBPUyAobGFzdF90ZXh0X3Jvdywgdy0+ZGVzaXJlZF9tYXRyaXgp OwogCX0KICAgICAgIGVsc2UKIAl7CiAJICAvKiBUaGlzIHdpbmRvdyBtdXN0IGJlIGNvbXBs ZXRlbHkgZW1wdHkuICAqLwogCSAgdy0+d2luZG93X2VuZF9ieXRlcG9zID0gWl9CWVRFIC0g WlZfQllURTsKLQkgIHctPndpbmRvd19lbmRfcG9zID0gbWFrZV9udW1iZXIgKFogLSBaVik7 Ci0JICB3LT53aW5kb3dfZW5kX3Zwb3MgPSBtYWtlX251bWJlciAoMCk7CisJICB3LT53aW5k b3dfZW5kX3BvcyA9IFogLSBaVjsKKwkgIHctPndpbmRvd19lbmRfdnBvcyA9IDA7CiAJfQog ICAgICAgdy0+d2luZG93X2VuZF92YWxpZCA9IFFuaWw7CiAKQEAgLTE2NzA1LDE1ICsxNjY5 OCwxMyBAQAogCXsKIAkgIHctPndpbmRvd19lbmRfYnl0ZXBvcwogCSAgICA9IFpfQllURSAt IE1BVFJJWF9ST1dfRU5EX0JZVEVQT1MgKGxhc3RfdGV4dF9yb3cpOwotCSAgdy0+d2luZG93 X2VuZF9wb3MKLQkgICAgPSBtYWtlX251bWJlciAoWiAtIE1BVFJJWF9ST1dfRU5EX0NIQVJQ T1MgKGxhc3RfdGV4dF9yb3cpKTsKLQkgIHctPndpbmRvd19lbmRfdnBvcwotCSAgICA9IG1h a2VfbnVtYmVyIChNQVRSSVhfUk9XX1ZQT1MgKGxhc3RfdGV4dF9yb3csIHctPmRlc2lyZWRf bWF0cml4KSk7CisJICB3LT53aW5kb3dfZW5kX3BvcyA9IFogLSBNQVRSSVhfUk9XX0VORF9D SEFSUE9TIChsYXN0X3RleHRfcm93KTsKKwkgIHctPndpbmRvd19lbmRfdnBvcyA9IE1BVFJJ WF9ST1dfVlBPUyAobGFzdF90ZXh0X3Jvdywgdy0+ZGVzaXJlZF9tYXRyaXgpOwogCX0KICAg ICAgIGVsc2UKIAl7CiAJICB3LT53aW5kb3dfZW5kX3Zwb3MKLQkgICAgPSBtYWtlX251bWJl ciAoWEZBU1RJTlQgKHctPndpbmRvd19lbmRfdnBvcykgLSBucm93c19zY3JvbGxlZCk7CisJ ICAgID0gbWFrZV9udW1iZXIgKHctPndpbmRvd19lbmRfdnBvcyAtIG5yb3dzX3Njcm9sbGVk KTsKIAl9CiAKICAgICAgIHctPndpbmRvd19lbmRfdmFsaWQgPSBRbmlsOwpAQCAtMTY4NTQs MTEgKzE2ODQ1LDExIEBACiAgIC8qIEEgdmFsdWUgb2Ygd2luZG93X2VuZF9wb3MgPj0gRU5E X1VOQ0hBTkdFRCBtZWFucyB0aGF0IHRoZSB3aW5kb3cKICAgICAgZW5kIGlzIGluIHRoZSBy YW5nZSBvZiBjaGFuZ2VkIHRleHQuICBJZiBzbywgdGhlcmUgaXMgbm8KICAgICAgdW5jaGFu Z2VkIHJvdyBhdCB0aGUgZW5kIG9mIFcncyBjdXJyZW50IG1hdHJpeC4gICovCi0gIGlmIChY RkFTVElOVCAody0+d2luZG93X2VuZF9wb3MpID49IEVORF9VTkNIQU5HRUQpCisgIGlmICh3 LT53aW5kb3dfZW5kX3BvcyA+PSBFTkRfVU5DSEFOR0VEKQogICAgIHJldHVybiBOVUxMOwog CiAgIC8qIFNldCByb3cgdG8gdGhlIGxhc3Qgcm93IGluIFcncyBjdXJyZW50IG1hdHJpeCBk aXNwbGF5aW5nIHRleHQuICAqLwotICByb3cgPSBNQVRSSVhfUk9XICh3LT5jdXJyZW50X21h dHJpeCwgWEZBU1RJTlQgKHctPndpbmRvd19lbmRfdnBvcykpOworICByb3cgPSBNQVRSSVhf Uk9XICh3LT5jdXJyZW50X21hdHJpeCwgdy0+d2luZG93X2VuZF92cG9zKTsKIAogICAvKiBJ ZiBtYXRyaXggaXMgZW50aXJlbHkgZW1wdHksIG5vIHVuY2hhbmdlZCByb3cgZXhpc3RzLiAg Ki8KICAgaWYgKE1BVFJJWF9ST1dfRElTUExBWVNfVEVYVF9QIChyb3cpKQpAQCAtMTY4Njks NyArMTY4NjAsNyBAQAogCSBidWZmZXIgcG9zaXRpb25zIGluIHRoZSBjdXJyZW50IG1hdHJp eCB0byBjdXJyZW50IGJ1ZmZlcgogCSBwb3NpdGlvbnMgZm9yIGNoYXJhY3RlcnMgbm90IGlu IGNoYW5nZWQgdGV4dC4gICovCiAgICAgICBwdHJkaWZmX3QgWl9vbGQgPQotCU1BVFJJWF9S T1dfRU5EX0NIQVJQT1MgKHJvdykgKyBYRkFTVElOVCAody0+d2luZG93X2VuZF9wb3MpOwor CU1BVFJJWF9ST1dfRU5EX0NIQVJQT1MgKHJvdykgKyB3LT53aW5kb3dfZW5kX3BvczsKICAg ICAgIHB0cmRpZmZfdCBaX0JZVEVfb2xkID0KIAlNQVRSSVhfUk9XX0VORF9CWVRFUE9TIChy b3cpICsgdy0+d2luZG93X2VuZF9ieXRlcG9zOwogICAgICAgcHRyZGlmZl90IGxhc3RfdW5j aGFuZ2VkX3BvcywgbGFzdF91bmNoYW5nZWRfcG9zX29sZDsKQEAgLTE3MTMzLDcgKzE3MTI0 LDcgQEAKICAgICBHSVZFX1VQICg1KTsKIAogICAvKiBBbm90aGVyIHdheSB0byBwcmV2ZW50 IHJlZGlzcGxheSBvcHRpbWl6YXRpb25zLiAgKi8KLSAgaWYgKFhGQVNUSU5UICh3LT5sYXN0 X21vZGlmaWVkKSA9PSAwKQorICBpZiAody0+bGFzdF9tb2RpZmllZCA9PSAwKQogICAgIEdJ VkVfVVAgKDYpOwogCiAgIC8qIFZlcmlmeSB0aGF0IHdpbmRvdyBpcyBub3QgaHNjcm9sbGVk LiAgKi8KQEAgLTE3MjA1LDcgKzE3MTk2LDcgQEAKICAgICAgVGhpcyBjYXNlIGhhcHBlbnMg d2l0aCBzdGVhbHRoLWZvbnRpZmljYXRpb24uICBOb3RlIHRoYXQgYWx0aG91Z2gKICAgICAg dGhlIGRpc3BsYXkgaXMgdW5jaGFuZ2VkLCBnbHlwaCBwb3NpdGlvbnMgaW4gdGhlIG1hdHJp eCBoYXZlIHRvCiAgICAgIGJlIGFkanVzdGVkLCBvZiBjb3Vyc2UuICAqLwotICByb3cgPSBN QVRSSVhfUk9XICh3LT5jdXJyZW50X21hdHJpeCwgWEZBU1RJTlQgKHctPndpbmRvd19lbmRf dnBvcykpOworICByb3cgPSBNQVRSSVhfUk9XICh3LT5jdXJyZW50X21hdHJpeCwgdy0+d2lu ZG93X2VuZF92cG9zKTsKICAgaWYgKE1BVFJJWF9ST1dfRElTUExBWVNfVEVYVF9QIChyb3cp CiAgICAgICAmJiAoKGxhc3RfY2hhbmdlZF9jaGFycG9zIDwgQ0hBUlBPUyAoc3RhcnQpCiAJ ICAgJiYgQ0hBUlBPUyAoc3RhcnQpID09IEJFR1YpCkBAIC0xNzIxNyw3ICsxNzIwOCw3IEBA CiAKICAgICAgIC8qIENvbXB1dGUgaG93IG1hbnkgY2hhcnMvYnl0ZXMgaGF2ZSBiZWVuIGFk ZGVkIHRvIG9yIHJlbW92ZWQKIAkgZnJvbSB0aGUgYnVmZmVyLiAgKi8KLSAgICAgIFpfb2xk ID0gTUFUUklYX1JPV19FTkRfQ0hBUlBPUyAocm93KSArIFhGQVNUSU5UICh3LT53aW5kb3df ZW5kX3Bvcyk7CisgICAgICBaX29sZCA9IE1BVFJJWF9ST1dfRU5EX0NIQVJQT1MgKHJvdykg KyB3LT53aW5kb3dfZW5kX3BvczsKICAgICAgIFpfQllURV9vbGQgPSBNQVRSSVhfUk9XX0VO RF9CWVRFUE9TIChyb3cpICsgdy0+d2luZG93X2VuZF9ieXRlcG9zOwogICAgICAgWl9kZWx0 YSA9IFogLSBaX29sZDsKICAgICAgIFpfZGVsdGFfYnl0ZXMgPSBaX0JZVEUgLSBaX0JZVEVf b2xkOwpAQCAtMTcyODgsOCArMTcyNzksNyBAQAogCXsKIAkgIC8qIFdlIGhhdmUgdG8gY29t cHV0ZSB0aGUgd2luZG93IGVuZCBhbmV3IHNpbmNlIHRleHQKIAkgICAgIGNvdWxkIGhhdmUg YmVlbiBhZGRlZC9yZW1vdmVkIGFmdGVyIGl0LiAgKi8KLQkgIHctPndpbmRvd19lbmRfcG9z Ci0JICAgID0gbWFrZV9udW1iZXIgKFogLSBNQVRSSVhfUk9XX0VORF9DSEFSUE9TIChyb3cp KTsKKwkgIHctPndpbmRvd19lbmRfcG9zID0gWiAtIE1BVFJJWF9ST1dfRU5EX0NIQVJQT1Mg KHJvdyk7CiAJICB3LT53aW5kb3dfZW5kX2J5dGVwb3MKIAkgICAgPSBaX0JZVEUgLSBNQVRS SVhfUk9XX0VORF9CWVRFUE9TIChyb3cpOwogCkBAIC0xNzMyNCw3ICsxNzMxNCw3IEBACiAK ICAgLyogR2l2ZSB1cCBpZiB0aGUgd2luZG93IGVuZHMgaW4gc3RyaW5ncy4gIE92ZXJsYXkg c3RyaW5ncwogICAgICBhdCB0aGUgZW5kIGFyZSBkaWZmaWN1bHQgdG8gaGFuZGxlLCBzbyBk b24ndCB0cnkuICAqLwotICByb3cgPSBNQVRSSVhfUk9XIChjdXJyZW50X21hdHJpeCwgWEZB U1RJTlQgKHctPndpbmRvd19lbmRfdnBvcykpOworICByb3cgPSBNQVRSSVhfUk9XIChjdXJy ZW50X21hdHJpeCwgdy0+d2luZG93X2VuZF92cG9zKTsKICAgaWYgKE1BVFJJWF9ST1dfU1RB UlRfQ0hBUlBPUyAocm93KSA9PSBNQVRSSVhfUk9XX0VORF9DSEFSUE9TIChyb3cpKQogICAg IEdJVkVfVVAgKDIwKTsKIApAQCAtMTc2NjcsNyArMTc2NTcsNyBAQAogICAgICAgLyogU2V0 IGxhc3Rfcm93IHRvIHRoZSBnbHlwaCByb3cgaW4gdGhlIGN1cnJlbnQgbWF0cml4IHdoZXJl IHRoZQogCSB3aW5kb3cgZW5kIGxpbmUgaXMgZm91bmQuICBJdCBoYXMgYmVlbiBtb3ZlZCB1 cCBvciBkb3duIGluCiAJIHRoZSBtYXRyaXggYnkgZHZwb3MuICAqLwotICAgICAgaW50IGxh c3RfdnBvcyA9IFhGQVNUSU5UICh3LT53aW5kb3dfZW5kX3Zwb3MpICsgZHZwb3M7CisgICAg ICBpbnQgbGFzdF92cG9zID0gdy0+d2luZG93X2VuZF92cG9zICsgZHZwb3M7CiAgICAgICBz dHJ1Y3QgZ2x5cGhfcm93ICpsYXN0X3JvdyA9IE1BVFJJWF9ST1cgKGN1cnJlbnRfbWF0cml4 LCBsYXN0X3Zwb3MpOwogCiAgICAgICAvKiBJZiBsYXN0X3JvdyBpcyB0aGUgd2luZG93IGVu ZCBsaW5lLCBpdCBzaG91bGQgZGlzcGxheSB0ZXh0LiAgKi8KQEAgLTE3NzIzLDIxICsxNzcx MywxOCBAQAogCQkJCQkgICBmaXJzdF91bmNoYW5nZWRfYXRfZW5kX3Jvdyk7CiAgICAgICB4 YXNzZXJ0IChyb3cgJiYgTUFUUklYX1JPV19ESVNQTEFZU19URVhUX1AgKHJvdykpOwogCi0g ICAgICB3LT53aW5kb3dfZW5kX3BvcyA9IG1ha2VfbnVtYmVyIChaIC0gTUFUUklYX1JPV19F TkRfQ0hBUlBPUyAocm93KSk7CisgICAgICB3LT53aW5kb3dfZW5kX3BvcyA9IFogLSBNQVRS SVhfUk9XX0VORF9DSEFSUE9TIChyb3cpOwogICAgICAgdy0+d2luZG93X2VuZF9ieXRlcG9z ID0gWl9CWVRFIC0gTUFUUklYX1JPV19FTkRfQllURVBPUyAocm93KTsKLSAgICAgIHctPndp bmRvd19lbmRfdnBvcwotCT0gbWFrZV9udW1iZXIgKE1BVFJJWF9ST1dfVlBPUyAocm93LCB3 LT5jdXJyZW50X21hdHJpeCkpOworICAgICAgdy0+d2luZG93X2VuZF92cG9zID0gTUFUUklY X1JPV19WUE9TIChyb3csIHctPmN1cnJlbnRfbWF0cml4KTsKICAgICAgIHhhc3NlcnQgKHct PndpbmRvd19lbmRfYnl0ZXBvcyA+PSAwKTsKICAgICAgIElGX0RFQlVHIChkZWJ1Z19tZXRo b2RfYWRkICh3LCAiQSIpKTsKICAgICB9CiAgIGVsc2UgaWYgKGxhc3RfdGV4dF9yb3dfYXRf ZW5kKQogICAgIHsKLSAgICAgIHctPndpbmRvd19lbmRfcG9zCi0JPSBtYWtlX251bWJlciAo WiAtIE1BVFJJWF9ST1dfRU5EX0NIQVJQT1MgKGxhc3RfdGV4dF9yb3dfYXRfZW5kKSk7Cisg ICAgICB3LT53aW5kb3dfZW5kX3BvcyA9IFogLSBNQVRSSVhfUk9XX0VORF9DSEFSUE9TIChs YXN0X3RleHRfcm93X2F0X2VuZCk7CiAgICAgICB3LT53aW5kb3dfZW5kX2J5dGVwb3MKIAk9 IFpfQllURSAtIE1BVFJJWF9ST1dfRU5EX0JZVEVQT1MgKGxhc3RfdGV4dF9yb3dfYXRfZW5k KTsKLSAgICAgIHctPndpbmRvd19lbmRfdnBvcwotCT0gbWFrZV9udW1iZXIgKE1BVFJJWF9S T1dfVlBPUyAobGFzdF90ZXh0X3Jvd19hdF9lbmQsIGRlc2lyZWRfbWF0cml4KSk7CisgICAg ICB3LT53aW5kb3dfZW5kX3Zwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKGxhc3RfdGV4dF9yb3df YXRfZW5kLCBkZXNpcmVkX21hdHJpeCk7CiAgICAgICB4YXNzZXJ0ICh3LT53aW5kb3dfZW5k X2J5dGVwb3MgPj0gMCk7CiAgICAgICBJRl9ERUJVRyAoZGVidWdfbWV0aG9kX2FkZCAodywg IkIiKSk7CiAgICAgfQpAQCAtMTc3NDYsMTIgKzE3NzMzLDEwIEBACiAgICAgICAvKiBXZSBo YXZlIGRpc3BsYXllZCBlaXRoZXIgdG8gdGhlIGVuZCBvZiB0aGUgd2luZG93IG9yIGF0IHRo ZQogCSBlbmQgb2YgdGhlIHdpbmRvdywgaS5lLiB0aGUgbGFzdCByb3cgd2l0aCB0ZXh0IGlz IHRvIGJlIGZvdW5kCiAJIGluIHRoZSBkZXNpcmVkIG1hdHJpeC4gICovCi0gICAgICB3LT53 aW5kb3dfZW5kX3BvcwotCT0gbWFrZV9udW1iZXIgKFogLSBNQVRSSVhfUk9XX0VORF9DSEFS UE9TIChsYXN0X3RleHRfcm93KSk7CisgICAgICB3LT53aW5kb3dfZW5kX3BvcyA9IFogLSBN QVRSSVhfUk9XX0VORF9DSEFSUE9TIChsYXN0X3RleHRfcm93KTsKICAgICAgIHctPndpbmRv d19lbmRfYnl0ZXBvcwogCT0gWl9CWVRFIC0gTUFUUklYX1JPV19FTkRfQllURVBPUyAobGFz dF90ZXh0X3Jvdyk7Ci0gICAgICB3LT53aW5kb3dfZW5kX3Zwb3MKLQk9IG1ha2VfbnVtYmVy IChNQVRSSVhfUk9XX1ZQT1MgKGxhc3RfdGV4dF9yb3csIGRlc2lyZWRfbWF0cml4KSk7Cisg ICAgICB3LT53aW5kb3dfZW5kX3Zwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKGxhc3RfdGV4dF9y b3csIGRlc2lyZWRfbWF0cml4KTsKICAgICAgIHhhc3NlcnQgKHctPndpbmRvd19lbmRfYnl0 ZXBvcyA+PSAwKTsKICAgICB9CiAgIGVsc2UgaWYgKGZpcnN0X3VuY2hhbmdlZF9hdF9lbmRf cm93ID09IE5VTEwKQEAgLTE3NzYxLDcgKzE3NzQ2LDcgQEAKICAgICAgIC8qIERpc3BsYXll ZCB0byBlbmQgb2Ygd2luZG93LCBidXQgbm8gbGluZSBjb250YWluaW5nIHRleHQgd2FzCiAJ IGRpc3BsYXllZC4gIExpbmVzIHdlcmUgZGVsZXRlZCBhdCB0aGUgZW5kIG9mIHRoZSB3aW5k b3cuICAqLwogICAgICAgaW50IGZpcnN0X3Zwb3MgPSBXSU5ET1dfV0FOVFNfSEVBREVSX0xJ TkVfUCAodykgPyAxIDogMDsKLSAgICAgIGludCB2cG9zID0gWEZBU1RJTlQgKHctPndpbmRv d19lbmRfdnBvcyk7CisgICAgICBpbnQgdnBvcyA9IHctPndpbmRvd19lbmRfdnBvczsKICAg ICAgIHN0cnVjdCBnbHlwaF9yb3cgKmN1cnJlbnRfcm93ID0gY3VycmVudF9tYXRyaXgtPnJv d3MgKyB2cG9zOwogICAgICAgc3RydWN0IGdseXBoX3JvdyAqZGVzaXJlZF9yb3cgPSBkZXNp cmVkX21hdHJpeC0+cm93cyArIHZwb3M7CiAKQEAgLTE3Nzc5LDggKzE3NzY0LDggQEAKIAl9 CiAKICAgICAgIHhhc3NlcnQgKHJvdyAhPSBOVUxMKTsKLSAgICAgIHctPndpbmRvd19lbmRf dnBvcyA9IG1ha2VfbnVtYmVyICh2cG9zICsgMSk7Ci0gICAgICB3LT53aW5kb3dfZW5kX3Bv cyA9IG1ha2VfbnVtYmVyIChaIC0gTUFUUklYX1JPV19FTkRfQ0hBUlBPUyAocm93KSk7Cisg ICAgICB3LT53aW5kb3dfZW5kX3Zwb3MgPSB2cG9zICsgMTsKKyAgICAgIHctPndpbmRvd19l bmRfcG9zID0gWiAtIE1BVFJJWF9ST1dfRU5EX0NIQVJQT1MgKHJvdyk7CiAgICAgICB3LT53 aW5kb3dfZW5kX2J5dGVwb3MgPSBaX0JZVEUgLSBNQVRSSVhfUk9XX0VORF9CWVRFUE9TIChy b3cpOwogICAgICAgeGFzc2VydCAody0+d2luZG93X2VuZF9ieXRlcG9zID49IDApOwogICAg ICAgSUZfREVCVUcgKGRlYnVnX21ldGhvZF9hZGQgKHcsICJDIikpOwpAQCAtMTc3ODgsOCAr MTc3NzMsOCBAQAogICBlbHNlCiAgICAgYWJvcnQgKCk7CiAKLSAgSUZfREVCVUcgKGRlYnVn X2VuZF9wb3MgPSBYRkFTVElOVCAody0+d2luZG93X2VuZF9wb3MpOwotCSAgICBkZWJ1Z19l bmRfdnBvcyA9IFhGQVNUSU5UICh3LT53aW5kb3dfZW5kX3Zwb3MpKTsKKyAgSUZfREVCVUcg KGRlYnVnX2VuZF9wb3MgPSB3LT53aW5kb3dfZW5kX3BvczsKKwkgICAgZGVidWdfZW5kX3Zw b3MgPSB3LT53aW5kb3dfZW5kX3Zwb3MpOwogCiAgIC8qIFJlY29yZCB0aGF0IGRpc3BsYXkg aGFzIG5vdCBiZWVuIGNvbXBsZXRlZC4gICovCiAgIHctPndpbmRvd19lbmRfdmFsaWQgPSBR bmlsOwpAQCAtMjE0MDgsNyArMjEzOTMsNyBAQAogCXB0cmRpZmZfdCBwb3MgPSBtYXJrZXJf cG9zaXRpb24gKHctPnN0YXJ0KTsKIAlwdHJkaWZmX3QgdG90YWwgPSBCVUZfWlYgKGIpIC0g QlVGX0JFR1YgKGIpOwogCi0JaWYgKFhGQVNUSU5UICh3LT53aW5kb3dfZW5kX3BvcykgPD0g QlVGX1ogKGIpIC0gQlVGX1pWIChiKSkKKwlpZiAody0+d2luZG93X2VuZF9wb3MgPD0gQlVG X1ogKGIpIC0gQlVGX1pWIChiKSkKIAkgIHsKIAkgICAgaWYgKHBvcyA8PSBCVUZfQkVHViAo YikpCiAJICAgICAgcmV0dXJuICJBbGwiOwpAQCAtMjE0MzcsNyArMjE0MjIsNyBAQAogICAg IGNhc2UgJ1AnOgogICAgICAgewogCXB0cmRpZmZfdCB0b3Bwb3MgPSBtYXJrZXJfcG9zaXRp b24gKHctPnN0YXJ0KTsKLQlwdHJkaWZmX3QgYm90cG9zID0gQlVGX1ogKGIpIC0gWEZBU1RJ TlQgKHctPndpbmRvd19lbmRfcG9zKTsKKwlwdHJkaWZmX3QgYm90cG9zID0gQlVGX1ogKGIp IC0gdy0+d2luZG93X2VuZF9wb3M7CiAJcHRyZGlmZl90IHRvdGFsID0gQlVGX1pWIChiKSAt IEJVRl9CRUdWIChiKTsKIAogCWlmIChib3Rwb3MgPj0gQlVGX1pWIChiKSkKQEAgLTI2MzEx LDcgKzI2Mjk2LDcgQEAKICAgLyogRmluZCB0aGUgcm93cyBjb3JyZXNwb25kaW5nIHRvIFNU QVJUX0NIQVJQT1MgYW5kIEVORF9DSEFSUE9TLiAgKi8KICAgcm93c19mcm9tX3Bvc19yYW5n ZSAodywgc3RhcnRfY2hhcnBvcywgZW5kX2NoYXJwb3MsIGRpc3Bfc3RyaW5nLCAmcjEsICZy Mik7CiAgIGlmIChyMSA9PSBOVUxMKQotICAgIHIxID0gTUFUUklYX1JPVyAody0+Y3VycmVu dF9tYXRyaXgsIFhGQVNUSU5UICh3LT53aW5kb3dfZW5kX3Zwb3MpKTsKKyAgICByMSA9IE1B VFJJWF9ST1cgKHctPmN1cnJlbnRfbWF0cml4LCB3LT53aW5kb3dfZW5kX3Zwb3MpOwogICAv KiBJZiB0aGUgYmVmb3JlLXN0cmluZyBvciBkaXNwbGF5LXN0cmluZyBjb250YWlucyBuZXds aW5lcywKICAgICAgcm93c19mcm9tX3Bvc19yYW5nZSBza2lwcyB0byBpdHMgbGFzdCByb3cu ICBNb3ZlIGJhY2suICAqLwogICBpZiAoIU5JTFAgKGJlZm9yZV9zdHJpbmcpIHx8ICFOSUxQ IChkaXNwX3N0cmluZykpCkBAIC0yNjMzMyw3ICsyNjMxOCw3IEBACiAgICAgfQogICBpZiAo cjIgPT0gTlVMTCkKICAgICB7Ci0gICAgICByMiA9IE1BVFJJWF9ST1cgKHctPmN1cnJlbnRf bWF0cml4LCBYRkFTVElOVCAody0+d2luZG93X2VuZF92cG9zKSk7CisgICAgICByMiA9IE1B VFJJWF9ST1cgKHctPmN1cnJlbnRfbWF0cml4LCB3LT53aW5kb3dfZW5kX3Zwb3MpOwogICAg ICAgaGxpbmZvLT5tb3VzZV9mYWNlX3Bhc3RfZW5kID0gMTsKICAgICB9CiAgIGVsc2UgaWYg KCFOSUxQIChhZnRlcl9zdHJpbmcpKQpAQCAtMjYzNDEsNyArMjYzMjYsNyBAQAogICAgICAg LyogSWYgdGhlIGFmdGVyLXN0cmluZyBoYXMgbmV3bGluZXMsIGFkdmFuY2UgdG8gaXRzIGxh c3Qgcm93LiAgKi8KICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKm5leHQ7CiAgICAgICBzdHJ1 Y3QgZ2x5cGhfcm93ICpsYXN0Ci0JPSBNQVRSSVhfUk9XICh3LT5jdXJyZW50X21hdHJpeCwg WEZBU1RJTlQgKHctPndpbmRvd19lbmRfdnBvcykpOworCT0gTUFUUklYX1JPVyAody0+Y3Vy cmVudF9tYXRyaXgsIHctPndpbmRvd19lbmRfdnBvcyk7CiAKICAgICAgIGZvciAobmV4dCA9 IHIyICsgMTsKIAkgICBuZXh0IDw9IGxhc3QKQEAgLTI3NDEwLDggKzI3Mzk1LDggQEAKICAg YiA9IFhCVUZGRVIgKHctPmJ1ZmZlcik7CiAgIGlmIChwYXJ0ID09IE9OX1RFWFQKICAgICAg ICYmIEVRICh3LT53aW5kb3dfZW5kX3ZhbGlkLCB3LT5idWZmZXIpCi0gICAgICAmJiBYRkFT VElOVCAody0+bGFzdF9tb2RpZmllZCkgPT0gQlVGX01PRElGRiAoYikKLSAgICAgICYmIFhG QVNUSU5UICh3LT5sYXN0X292ZXJsYXlfbW9kaWZpZWQpID09IEJVRl9PVkVSTEFZX01PRElG RiAoYikpCisgICAgICAmJiB3LT5sYXN0X21vZGlmaWVkID09IEJVRl9NT0RJRkYgKGIpCisg ICAgICAmJiB3LT5sYXN0X292ZXJsYXlfbW9kaWZpZWQgPT0gQlVGX09WRVJMQVlfTU9ESUZG IChiKSkKICAgICB7CiAgICAgICBpbnQgaHBvcywgdnBvcywgZHgsIGR5LCBhcmVhID0gTEFT VF9BUkVBOwogICAgICAgcHRyZGlmZl90IHBvczsKQEAgLTI3NjQ4LDcgKzI3NjMzLDcgQEAK IAkJICBMaXNwX09iamVjdCBsaW0yID0KIAkJICAgIE5JTFAgKEJWQVIgKFhCVUZGRVIgKGJ1 ZmZlciksIGJpZGlfZGlzcGxheV9yZW9yZGVyaW5nKSkKIAkJICAgID8gbWFrZV9udW1iZXIg KEJVRl9aIChYQlVGRkVSIChidWZmZXIpKQotCQkJCSAgIC0gWEZBU1RJTlQgKHctPndpbmRv d19lbmRfcG9zKSkKKwkJCQkgICAtIHctPndpbmRvd19lbmRfcG9zKQogCQkgICAgOiBRbmls OwogCiAJCSAgaWYgKE5JTFAgKG92ZXJsYXkpKQoK --------------050709080305010404010803--