From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-01.nifty.com (conssluserg-01.nifty.com [210.131.2.80]) by sourceware.org (Postfix) with ESMTPS id 290C33857C79 for ; Tue, 11 Aug 2020 11:13:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 290C33857C79 Received: from Express5800-S70 (v038192.dynamic.ppp.asahi-net.or.jp [124.155.38.192]) (authenticated) by conssluserg-01.nifty.com with ESMTP id 07BBCoMo006364 for ; Tue, 11 Aug 2020 20:12:51 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-01.nifty.com 07BBCoMo006364 X-Nifty-SrcIP: [124.155.38.192] Date: Tue, 11 Aug 2020 20:12:58 +0900 From: Takashi Yano To: cygwin-developers@cygwin.com Subject: Re: New implementation of pseudo console support (experimental) Message-Id: <20200811201258.4bffb987ecdb96583c516bc2@nifty.ne.jp> In-Reply-To: <20200803212342.8b14a3164ed66bd521774fe4@nifty.ne.jp> References: <20200514183420.c246647a6d9e396d42c6b47e@nifty.ne.jp> <20200516092956.74369d694d611b1dcd095607@nifty.ne.jp> <20200516164735.2a2ef183788b151e9185ef41@nifty.ne.jp> <20200519224018.746f6324badd8a5762df42b1@nifty.ne.jp> <20200525195332.cf60ab2f38d167a76513740e@nifty.ne.jp> <20200526100955.30b1a2baea517e0565f30db6@nifty.ne.jp> <20200529004024.0c2ac3c68b588bda987e0837@nifty.ne.jp> <20200701204751.27609a8f5701010468521a87@nifty.ne.jp> <20200717111912.GG3784@calimero.vinschen.de> <20200718143024.45920213c7aa81912939d944@nifty.ne.jp> <20200720080613.GE16360@calimero.vinschen.de> <20200722031751.e02bf24a7519b43d80e5db71@nifty.ne.jp> <20200722174541.c8113635236fd217cb9ebb77@nifty.ne.jp> <20200723093328.709654ea6a539cb9b3251ab2@nifty.ne.jp> <20200724143842.020cea9ffa2f6e7ffe760f67@nifty.ne.jp> <20200724202219.16ad238f515da19db21d3a6c@nifty.ne.jp> <20200803111103.27ef6554df7f40d1142bceee@nifty.ne.jp> <20200803212342.8b14a3164ed66bd521774fe4@nifty.ne.jp> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Tue__11_Aug_2020_20_12_58_+0900_9/9heNvpkF+gehWP" X-Spam-Status: No, score=-0.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, NICE_REPLY_A, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: cygwin-developers@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component developers mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2020 11:13:29 -0000 This is a multi-part message in MIME format. --Multipart=_Tue__11_Aug_2020_20_12_58_+0900_9/9heNvpkF+gehWP Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Mon, 3 Aug 2020 21:23:42 +0900 Takashi Yano via Cygwin-developers wrote: > On Mon, 3 Aug 2020 11:11:03 +0900 > Takashi Yano via Cygwin-developers wrote: > > On Fri, 24 Jul 2020 20:22:19 +0900 > > Takashi Yano via Cygwin-developers wrote: > > > On Fri, 24 Jul 2020 14:38:42 +0900 > > > Takashi Yano via Cygwin-developers wrote: > > > > On Thu, 23 Jul 2020 09:33:28 +0900 > > > > Takashi Yano via Cygwin-developers wrote: > > > > > On Wed, 22 Jul 2020 17:45:41 +0900 > > > > > Takashi Yano via Cygwin-developers wrote: > > > > > > On Wed, 22 Jul 2020 03:17:51 +0900 > > > > > > Takashi Yano via Cygwin-developers wrote: > > > > > > > Hi Corinna, > > > > > > > > > > > > > > On Mon, 20 Jul 2020 10:06:13 +0200 > > > > > > > Corinna Vinschen wrote: > > > > > > > > On Jul 18 14:30, Takashi Yano via Cygwin-developers wrote: > > > > > > > > > Hi Corinna, > > > > > > > > > > > > > > > > > > On Fri, 17 Jul 2020 13:19:12 +0200 > > > > > > > > > Corinna Vinschen wrote: > > > > > > > > > > Hi Takashi, > > > > > > > > > > > > > > > > > > > > On Jul 1 20:47, Takashi Yano via Cygwin-developers wrote: > > > > > > > > > > > [...] > > > > > > > > > > > Revise the patch to fit the current git head. > > > > > > > > > > > > > > > > > > > > are you satisfied with the code? If you want to merge it, > > > > > > > > > > I'd bump Cygwin to 3.2. > > > > > > > > > > > > > > > > > > Since this new implementation has both advantages and disadvantages, > > > > > > > > > there might be some options. > > > > > > > > > > > > > > > > > > 1) Default to new implementation and leave the current one as an > > > > > > > > > alternative. Switch them using the environment CYGWIN. > > > > > > > > > 2) Default to current implementation and add the new one as an > > > > > > > > > alternative. Switch them using the environment CYGWIN. > > > > > > > > > 3) Adopt only new implementation and throw the current one away. > > > > > > > > > > > > > > > > > > What do you think? > > > > > > > > > > > > > > > > Do you really want to maintain twice as much code doing the same stuff > > > > > > > > and constantly having to ask users which version of the code they are > > > > > > > > running? The maintenance cost outweighs the advantages, IMHO. > > > > > > > > Personally I'd go for option 3. > > > > > > > > > > > > > > Personally, I feel a tinge of sadness to discard the current code, > > > > > > > however, your opinion sounds reasonable. > > > > > > > > > > > > > > I will submit a new patch in which all the codes specific to the > > > > > > > current implementation are removed. > > > > > > > > > > > > Attached is the patch in git format-patch format. > > > > > > All the codes specific to the current implementation are removed. > > > > > > > > > > > > Despite the utmost care, the changes are relatively large, so some > > > > > > degradation may exist. > > > > > > > > > > > > I will appreciate if you could test. > > > > > > > > > > There were still unused code. Please try attached patch instead. > > > > > > > > Changes: > > > > * Do not activate pseudo console if it is already activated for > > > > another process on same pty. > > > > > > Changes: > > > * Fix a bug in the latest change. > > > > Changes: > > * Fix a handle leak caused when spawn is called with mode != _P_OVERLAY. > > This patch cannot be applied cleanly against current git head. > Please use attached patch instead. Adapted to the current git head. -- Takashi Yano --Multipart=_Tue__11_Aug_2020_20_12_58_+0900_9/9heNvpkF+gehWP Content-Type: application/octet-stream; name="0001-Cygwin-pty-Implement-new-pseudo-console-support.patch" Content-Disposition: attachment; filename="0001-Cygwin-pty-Implement-new-pseudo-console-support.patch" Content-Transfer-Encoding: base64 RnJvbSA5YTcwY2I5ZDRlMDNlOWFjNGI5MzllMzA5ZjUxYzJhNGZmNDE5NmE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogVHVlLCAxMSBBdWcgMjAyMCAxOTo0MjoxMiArMDkwMApTdWJqZWN0OiBbUEFUQ0hd IEN5Z3dpbjogcHR5OiBJbXBsZW1lbnQgbmV3IHBzZXVkbyBjb25zb2xlIHN1cHBvcnQuCgotIElu IHRoaXMgaW1wbGVtZW50YXRpb24sIHBzZXVkbyBjb25zb2xlIGlzIGNyZWF0ZWQgZm9yIGVhY2gg bmF0aXZlCiAgY29uc29sZSBhcHAuIEFkdmFudGFnZXMgYW5kIGRpc2FkdmFudGFnZXMgb2YgdGhp cyBpbXBsZW1lbnRhdGlvbgogIG92ZXIgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIGFyZSBh cyBmb2xsb3dzLgoKICBBZHZhbnRhZ2VzOgogIDEpIE5vIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9u IGluIHB0eSBvdXRwdXQgZm9yIGN5Z3dpbiBwcm9jZXNzLgogICAgICBodHRwczovL2N5Z3dpbi5j b20vcGlwZXJtYWlsL2N5Z3dpbi8yMDIwLUZlYnJ1YXJ5LzI0Mzg1OC5odG1sCiAgMikgRnJlZSBm cm9tIHRoZSBwcm9ibGVtIGNhdXNlZCBieSBkaWZmZXJlbmNlIG9mIGJlaGF2aW91ciBvZiBjb250 cm9sCiAgICAgc2VxdWVuY2VzIGJldHdlZW4gcmVhbCB0ZXJtaW5hbCBhbmQgcHNldWRvIGNvbnNv bGUuCiAgICAgIGh0dHBzOi8vY3lnd2luLmNvbS9waXBlcm1haWwvY3lnd2luLzIwMTktRGVjZW1i ZXIvMjQzMjgxLmh0bWwKICAgICAgaHR0cHM6Ly9jeWd3aW4uY29tL3BpcGVybWFpbC9jeWd3aW4v MjAyMC1GZWJydWFyeS8yNDM4NTUuaHRtbAogIDMpIEZyZWUgZnJvbSB0aGUgcHJvYmxlbSBpbiBj Z2RiIGFuZCBlbWFjcyBndWQuCiAgICAgIGh0dHBzOi8vY3lnd2luLmNvbS9waXBlcm1haWwvY3ln d2luLzIwMjAtSmFudWFyeS8yNDM2MDEuaHRtbAogICAgICBodHRwczovL2N5Z3dpbi5jb20vcGlw ZXJtYWlsL2N5Z3dpbi8yMDIwLU1hcmNoLzI0NDE0Ni5odG1sCiAgNCkgUmVkcmF3aW5nIHNjcmVl biBvbiBleGVjdXRpbmcgbmF0aXZlIGNvbnNvbGUgYXBwcyBpcyBub3QgbmVjZXNzYXJ5LgogIDUp IGN5Z3dpbi1jb25zb2xlLWhlbHBlciBpcyBub3QgbmVjZXNzYXJ5IGZvciB0aGUgcHNldWRvIGNv bnNvbGUKICAgICBzdXBwb3J0LgogIDYpIFRoZSBjb2RlcyBmb3IgcHNldWRvIGNvbnNvbGUgc3Vw cG9ydCBhcmUgbXVjaCBzaW1wbGVyIHRoYW4gdGhhdAogICAgIG9mIHRoZSBwcmV2aW91cyBvbmUu CgogIERpc2FkdmFudGFnZXM6CiAgMSkgVGhlIGN5Z3dpbiBwcm9ncmFtIHdoaWNoIGNhbGxzIGNv bnNvbGUgQVBJIGRpcmVjdGx5IGRvZXMgbm90IHdvcmsuCiAgMikgVGhlIGFwcHMgd2hpY2ggdXNl IGNvbnNvbGUgQVBJIGNhbm5vdCBiZSBkZWJ1Z2dlZCB3aXRoIGdkYi4gVGhpcwogICAgIGlzIGJl Y2F1c2UgcHNldWRvIGNvbnNvbGUgaXMgbm90IGFjdGl2YXRlZCBzaW5jZSBnZGIgdXNlcwogICAg IENyZWF0ZVByb2Nlc3MoKSByYXRoZXIgdGhhbiBleGVjKCkuIEV2ZW4gd2l0aCB0aGlzIGxpbWl0 YXRpb24sCiAgICAgYXR0YWNoaW5nIGdkYiB0byBuYXRpdmUgYXBwcywgaW4gd2hpY2ggcHNldWRv IGNvbnNvbGUgaXMgYWxyZWFkeQogICAgIGFjdGl2YXRlZCwgd29ya3MuCiAgMykgVHlwZWFoZWFk IGtleSBpbnB1dHMgYXJlIGRpc2NhcmRlZCB3aGlsZSBuYXRpdmUgY29uc29sZSBhcHAgaXMKICAg ICBleGVjdXRlZC4gU2ltaXJhbGx5LCB0eXBlYWhlYWQga2V5IGlucHV0cyB3aGlsZSBjeWd3aW4g YXBwIGlzCiAgICAgZXhlY3V0ZWQgYXJlIG5vdCBpbmhlcml0ZWQgdG8gbmF0aXZlIGNvbnNvbGUg YXBwLgogIDQpIENvZGUgcGFnZSBjYW5ub3QgYmUgY2hhbmdlZCBieSBjaGNwLmNvbS4gQWNjdHVh bGx5LCBjaGNwIHdvcmtzCiAgICAgaXRzZWxmIGFuZCBjaGFuZ2VzIGNvZGUgcGFnZSBvZiBpdHMg b3duIHBzZXVkbyBjb25zb2xlLiAgSG93ZXZlciwKICAgICBzaW5jZSBwc2V1ZG8gY29uc29sZSBp cyByZWNyZWF0ZWQgZm9yIGFub3RoZXIgcHJvY2VzcywgaXQgY2Fubm90CiAgICAgaW5oZXJpdCB0 aGUgY29kZSBwYWdlLgogIDUpIHN5c3RlbV9wcmludGYoKSBkb2VzIG5vdCB3b3JrIGFmdGVyIHN0 ZGVyciBpcyBjbG9zZWQuIChTYW1lIHdpdGgKICAgICBjeWd3aW4gMy4wLjcpCiAgNikgU3RhcnR1 cCB0aW1lIG9mIG5hdGl2ZSBjb25zb2xlIGFwcHMgaXMgYWJvdXQgMyB0aW1lcyBzbG93ZXIgdGhh bgogICAgIHByZXZpb3VzIGltcGxlbWVuYXRpb24uCiAgNykgUHNldWRvIGNvbnNvbGUgY2Fubm90 IGJlIGFjdGl2YXRlZCBpZiBpdCBpcyBhbHJlYWR5IGFjdGl2YXRlZCBmb3IKICAgICBhbm90aGVy IHByb2Nlc3Mgb24gc2FtZSBwdHkuCi0tLQogd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MgICAgICAg ICAgIHwgICAzMiAtCiB3aW5zdXAvY3lnd2luL2ZoYW5kbGVyLmggICAgICAgICAgfCAgIDUzICst CiB3aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2NvbnNvbGUuY2MgfCAgIDQzIC0KIHdpbnN1cC9jeWd3 aW4vZmhhbmRsZXJfdHR5LmNjICAgICB8IDE3NzAgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIHdpbnN1cC9jeWd3aW4vZm9yay5jYyAgICAgICAgICAgICB8ICAgMzAgLQogd2luc3VwL2N5 Z3dpbi9zZWxlY3QuY2MgICAgICAgICAgIHwgICAgNSArLQogd2luc3VwL2N5Z3dpbi9zbWFsbHBy aW50LmNjICAgICAgIHwgICAgMiAtCiB3aW5zdXAvY3lnd2luL3NwYXduLmNjICAgICAgICAgICAg fCAgMTA1ICstCiB3aW5zdXAvY3lnd2luL3N0cmFjZS5jYyAgICAgICAgICAgfCAgICAyIC0KIHdp bnN1cC9jeWd3aW4vdHR5LmNjICAgICAgICAgICAgICB8ICAgMjAgKy0KIHdpbnN1cC9jeWd3aW4v dHR5LmggICAgICAgICAgICAgICB8ICAgMTMgKy0KIHdpbnN1cC9jeWd3aW4vd2luc3VwLmggICAg ICAgICAgICB8ICAgIDMgLQogMTIgZmlsZXMgY2hhbmdlZCwgMzQ5IGluc2VydGlvbnMoKyksIDE3 MjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MgYi93 aW5zdXAvY3lnd2luL2R0YWJsZS5jYwppbmRleCBlOWUwMDViMDguLjZhOTFlMzNiYyAxMDA2NDQK LS0tIGEvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MKKysrIGIvd2luc3VwL2N5Z3dpbi9kdGFibGUu Y2MKQEAgLTE0NywzOCArMTQ3LDYgQEAgZHRhYmxlOjpnZXRfZGVidWdnZXJfaW5mbyAoKQogdm9p ZAogZHRhYmxlOjpzdGRpb19pbml0ICgpCiB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSAr KykKLSAgICB7Ci0gICAgICBjb25zdCBpbnQgY2hrX29yZGVyW10gPSB7MSwgMCwgMn07Ci0gICAg ICBpbnQgZmQgPSBjaGtfb3JkZXJbaV07Ci0gICAgICBmaGFuZGxlcl9iYXNlICpmaCA9IGN5Z2hl YXAtPmZkdGFiW2ZkXTsKLSAgICAgIGlmIChmaCAmJiBmaC0+Z2V0X21ham9yICgpID09IERFVl9Q VFlTX01BSk9SKQotCXsKLQkgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9IChmaGFuZGxlcl9w dHlfc2xhdmUgKikgZmg7Ci0JICBpZiAocHR5cy0+Z2V0X3BzZXVkb19jb25zb2xlICgpKQotCSAg ICB7Ci0JICAgICAgYm9vbCBhdHRhY2hlZCA9ICEhZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNv bGVfcHJvY2Vzc19pZAotCQkocHR5cy0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpLCB0cnVlKTsK LQkgICAgICBpZiAoYXR0YWNoZWQpCi0JCWJyZWFrOwotCSAgICAgIGVsc2UKLQkJewotCQkgIC8q IE5vdCBhdHRhY2hlZCB0byBwc2V1ZG8gY29uc29sZSBpbiBmb3JrKCkgb3Igc3Bhd24oKQotCQkg ICAgIGJ5IHNvbWUgcmVhc29uLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGV4ZWN1dGFibGUgaXMKLQkJ ICAgICBhIHdpbmRvd3MgR1VJIGJpbmFyeSwgc3VjaCBhcyBtaW50dHkuICovCi0JCSAgRnJlZUNv bnNvbGUgKCk7Ci0JCSAgaWYgKEF0dGFjaENvbnNvbGUgKHB0eXMtPmdldF9oZWxwZXJfcHJvY2Vz c19pZCAoKSkpCi0JCSAgICB7Ci0JCSAgICAgIHB0eXMtPmZpeHVwX2FmdGVyX2F0dGFjaCAoZmFs c2UsIGZkKTsKLQkJICAgICAgYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotCX0KLSAgICAg IGVsc2UgaWYgKGZoICYmIGZoLT5nZXRfbWFqb3IgKCkgPT0gREVWX0NPTlNfTUFKT1IpCi0JYnJl YWs7Ci0gICAgfQotCiAgIGlmIChteXNlbGYtPmN5Z3N0YXJ0ZWQgfHwgSVNTVEFURSAobXlzZWxm LCBQSURfQ1lHUEFSRU5UKSkKICAgICB7CiAgICAgICB0dHlfbWluICp0ID0gY3lnd2luX3NoYXJl ZC0+dHR5LmdldF9jdHR5cCAoKTsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIu aCBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIuaAppbmRleCBhNTc3Y2E1NDIuLjlmZDk1YzA5OCAx MDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlci5oCisrKyBiL3dpbnN1cC9jeWd3aW4v ZmhhbmRsZXIuaApAQCAtMzI2LDE2ICszMjYsMTYgQEAgY2xhc3MgZmhhbmRsZXJfYmFzZQogICB2 aXJ0dWFsIHNpemVfdCAmcmFpeHB1dCAoKSB7IHJldHVybiByYS5yYWl4cHV0OyB9OwogICB2aXJ0 dWFsIHNpemVfdCAmcmFidWZsZW4gKCkgeyByZXR1cm4gcmEucmFidWZsZW47IH07CiAKLSAgdmly dHVhbCBib29sIGdldF9yZWFkYWhlYWRfdmFsaWQgKCkgeyByZXR1cm4gcmFpeGdldCAoKSA8IHJh bGVuICgpOyB9CisgIGJvb2wgZ2V0X3JlYWRhaGVhZF92YWxpZCAoKSB7IHJldHVybiByYWl4Z2V0 ICgpIDwgcmFsZW4gKCk7IH0KICAgaW50IHB1dHNfcmVhZGFoZWFkIChjb25zdCBjaGFyICpzLCBz aXplX3QgbGVuID0gKHNpemVfdCkgLTEpOwotICB2aXJ0dWFsIGludCBwdXRfcmVhZGFoZWFkIChj aGFyIHZhbHVlKTsKKyAgaW50IHB1dF9yZWFkYWhlYWQgKGNoYXIgdmFsdWUpOwogCiAgIGludCBn ZXRfcmVhZGFoZWFkICgpOwogICBpbnQgcGVla19yZWFkYWhlYWQgKGludCBxdWVyeXB1dCA9IDAp OwogCiAgIHZvaWQgc2V0X3JlYWRhaGVhZF92YWxpZCAoaW50IHZhbCwgaW50IGNoID0gLTEpOwog Ci0gIHZpcnR1YWwgaW50IGdldF9yZWFkYWhlYWRfaW50b19idWZmZXIgKGNoYXIgKmJ1Ziwgc2l6 ZV90IGJ1Zmxlbik7CisgIGludCBnZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyIChjaGFyICpidWYs IHNpemVfdCBidWZsZW4pOwogCiAgIGJvb2wgaGFzX2FjbHMgKCkgY29uc3QgeyByZXR1cm4gcGMu aGFzX2FjbHMgKCk7IH0KIApAQCAtMTkwNSw3ICsxOTA1LDcgQEAgY2xhc3MgZmhhbmRsZXJfdGVy bWlvczogcHVibGljIGZoYW5kbGVyX2Jhc2UKICAgaW50IGlvY3RsIChpbnQsIHZvaWQgKik7CiAg IHR0eV9taW4gKl90YzsKICAgdHR5ICpnZXRfdHR5cCAoKSB7cmV0dXJuICh0dHkgKikgdGMgKCk7 fQotICB2aXJ0dWFsIGludCBlYXRfcmVhZGFoZWFkIChpbnQgbik7CisgIGludCBlYXRfcmVhZGFo ZWFkIChpbnQgbik7CiAKICBwdWJsaWM6CiAgIHR0eV9taW4qJiB0YyAoKSB7cmV0dXJuIF90Yzt9 CkBAIC0yMTg0LDcgKzIxODQsNiBAQCBwcml2YXRlOgogICBzdGF0aWMgYm9vbCBuZWVkX2ludmlz aWJsZSAoKTsKICAgc3RhdGljIHZvaWQgZnJlZV9jb25zb2xlICgpOwogICBzdGF0aWMgY29uc3Qg Y2hhciAqZ2V0X25vbmFzY2lpX2tleSAoSU5QVVRfUkVDT1JEJiBpbnB1dF9yZWMsIGNoYXIgKik7 Ci0gIHN0YXRpYyBEV09SRCBnZXRfY29uc29sZV9wcm9jZXNzX2lkIChEV09SRCBwaWQsIGJvb2wg bWF0Y2gpOwogCiAgIGZoYW5kbGVyX2NvbnNvbGUgKHZvaWQgKikge30KIApAQCAtMjI2NCwxOSAr MjI2Myw3IEBAIGNsYXNzIGZoYW5kbGVyX3B0eV9jb21tb246IHB1YmxpYyBmaGFuZGxlcl90ZXJt aW9zCiAgICAgcmV0dXJuIGZoOwogICB9CiAKLSAgYm9vbCBhdHRhY2hfcGNvbl9pbl9mb3JrICh2 b2lkKQotICB7Ci0gICAgcmV0dXJuIGdldF90dHlwICgpLT5hdHRhY2hfcGNvbl9pbl9mb3JrOwot ICB9Ci0gIERXT1JEIGdldF9oZWxwZXJfcHJvY2Vzc19pZCAodm9pZCkKLSAgewotICAgIHJldHVy biBnZXRfdHR5cCAoKS0+aGVscGVyX3Byb2Nlc3NfaWQ7Ci0gIH0KLSAgSFBDT04gZ2V0X3BzZXVk b19jb25zb2xlICh2b2lkKQotICB7Ci0gICAgcmV0dXJuIGdldF90dHlwICgpLT5oX3BzZXVkb19j b25zb2xlOwotICB9Ci0gIGJvb2wgdG9fYmVfcmVhZF9mcm9tX3Bjb24gKHZvaWQpOworICB2b2lk IHJlc2l6ZV9wc2V1ZG9fY29uc29sZSAoc3RydWN0IHdpbnNpemUgKik7CiAKICBwcm90ZWN0ZWQ6 CiAgIEJPT0wgcHJvY2Vzc19vcG9zdF9vdXRwdXQgKEhBTkRMRSBoLApAQCAtMjI4NywyMyArMjI3 NCwxNSBAQCBjbGFzcyBmaGFuZGxlcl9wdHlfc2xhdmU6IHB1YmxpYyBmaGFuZGxlcl9wdHlfY29t bW9uCiB7CiAgIEhBTkRMRSBpbnVzZTsJCQkvLyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSB0dHkg aXMgaW4gdXNlCiAgIEhBTkRMRSBvdXRwdXRfaGFuZGxlX2N5ZywgaW9faGFuZGxlX2N5ZzsKLSAg RFdPUkQgcGlkX3Jlc3RvcmU7Ci0gIGludCBmZDsKIAogICAvKiBIZWxwZXIgZnVuY3Rpb25zIGZv ciBmY2htb2QgYW5kIGZjaG93bi4gKi8KICAgYm9vbCBmY2hfb3Blbl9oYW5kbGVzIChib29sIGNo b3duKTsKICAgaW50IGZjaF9zZXRfc2QgKHNlY3VyaXR5X2Rlc2NyaXB0b3IgJnNkLCBib29sIGNo b3duKTsKICAgdm9pZCBmY2hfY2xvc2VfaGFuZGxlcyAoKTsKIAotICBib29sIHRyeV9yZWF0dGFj aF9wY29uICgpOwotICB2b2lkIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLSAgaW5saW5lIHZv aWQgZnJlZV9hdHRhY2hlZF9jb25zb2xlICgpOwotCiAgcHVibGljOgogICAvKiBDb25zdHJ1Y3Rv ciAqLwogICBmaGFuZGxlcl9wdHlfc2xhdmUgKGludCk7Ci0gIC8qIERlc3RydWN0b3IgKi8KLSAg fmZoYW5kbGVyX3B0eV9zbGF2ZSAoKTsKIAogICB2b2lkIHNldF9vdXRwdXRfaGFuZGxlX2N5ZyAo SEFORExFIGgpIHsgb3V0cHV0X2hhbmRsZV9jeWcgPSBoOyB9CiAgIEhBTkRMRSYgZ2V0X291dHB1 dF9oYW5kbGVfY3lnICgpIHsgcmV0dXJuIG91dHB1dF9oYW5kbGVfY3lnOyB9CkBAIC0yMzE1LDkg KzIyOTQsNiBAQCBjbGFzcyBmaGFuZGxlcl9wdHlfc2xhdmU6IHB1YmxpYyBmaGFuZGxlcl9wdHlf Y29tbW9uCiAgIHNzaXplX3QgX19zdGRjYWxsIHdyaXRlIChjb25zdCB2b2lkICpwdHIsIHNpemVf dCBsZW4pOwogICB2b2lkIF9fcmVnMyByZWFkICh2b2lkICpwdHIsIHNpemVfdCYgbGVuKTsKICAg aW50IGluaXQgKEhBTkRMRSwgRFdPUkQsIG1vZGVfdCk7Ci0gIGludCBlYXRfcmVhZGFoZWFkIChp bnQgbik7Ci0gIGludCBnZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyIChjaGFyICpidWYsIHNpemVf dCBidWZsZW4pOwotICBib29sIGdldF9yZWFkYWhlYWRfdmFsaWQgKHZvaWQpOwogCiAgIGludCB0 Y3NldGF0dHIgKGludCBhLCBjb25zdCBzdHJ1Y3QgdGVybWlvcyAqdCk7CiAgIGludCB0Y2dldGF0 dHIgKHN0cnVjdCB0ZXJtaW9zICp0KTsKQEAgLTIzNTQsMjAgKzIzMzAsMTIgQEAgY2xhc3MgZmhh bmRsZXJfcHR5X3NsYXZlOiBwdWJsaWMgZmhhbmRsZXJfcHR5X2NvbW1vbgogICAgIGNvcHl0byAo ZmgpOwogICAgIHJldHVybiBmaDsKICAgfQotICB2b2lkIHNldF9zd2l0Y2hfdG9fcGNvbiAoaW50 IGZkKTsKKyAgYm9vbCBzZXR1cF9wc2V1ZG9jb25zb2xlIChTVEFSVFVQSU5GT0VYVyAqc2ksIGJv b2wgbm9wY29uKTsKKyAgdm9pZCBjbG9zZV9wc2V1ZG9jb25zb2xlICh2b2lkKTsKKyAgdm9pZCBz ZXRfc3dpdGNoX3RvX3Bjb24gKHZvaWQpOwogICB2b2lkIHJlc2V0X3N3aXRjaF90b19wY29uICh2 b2lkKTsKLSAgdm9pZCBwdXNoX3RvX3Bjb25fc2NyZWVuYnVmZmVyIChjb25zdCBjaGFyICpwdHIs IHNpemVfdCBsZW4sIGJvb2wgaXNfZWNobyk7CiAgIHZvaWQgbWFza19zd2l0Y2hfdG9fcGNvbl9p biAoYm9vbCBtYXNrKTsKLSAgdm9pZCBmaXh1cF9hZnRlcl9hdHRhY2ggKGJvb2wgbmF0aXZlX21h eWJlLCBpbnQgZmQpOwotICBib29sIGlzX2xpbmVfaW5wdXQgKHZvaWQpCi0gIHsKLSAgICByZXR1 cm4gZ2V0X3R0eXAgKCktPnRpLmNfbGZsYWcgJiBJQ0FOT047Ci0gIH0KICAgdm9pZCBzZXR1cF9s b2NhbGUgKHZvaWQpOwotICB2b2lkIHNldF9mcmVlY29uc29sZV9vbl9jbG9zZSAoYm9vbCB2YWwp OwotICB2b2lkIHRyaWdnZXJfcmVkcmF3X3NjcmVlbiAodm9pZCk7Ci0gIHZvaWQgcHVsbF9wY29u X2lucHV0ICh2b2lkKTsKLSAgdm9pZCB1cGRhdGVfcGNvbl9pbnB1dF9zdGF0ZSAoYm9vbCBuZWVk X2xvY2spOwogfTsKIAogI2RlZmluZSBfX3B0c25hbWUoYnVmLCB1bml0KSBfX3NtYWxsX3Nwcmlu dGYgKChidWYpLCAiL2Rldi9wdHklZCIsICh1bml0KSkKQEAgLTIzOTIsNyArMjM2MCw2IEBAIHB1 YmxpYzoKICAgaW50IHByb2Nlc3Nfc2xhdmVfb3V0cHV0IChjaGFyICpidWYsIHNpemVfdCBsZW4s IGludCBwa3Rtb2RlX29uKTsKICAgdm9pZCBkb2VjaG8gKGNvbnN0IHZvaWQgKnN0ciwgRFdPUkQg bGVuKTsKICAgaW50IGFjY2VwdF9pbnB1dCAoKTsKLSAgaW50IHB1dF9yZWFkYWhlYWQgKGNoYXIg dmFsdWUpOwogICBpbnQgb3BlbiAoaW50IGZsYWdzLCBtb2RlX3QgbW9kZSA9IDApOwogICB2b2lk IG9wZW5fc2V0dXAgKGludCBmbGFncyk7CiAgIHNzaXplX3QgX19zdGRjYWxsIHdyaXRlIChjb25z dCB2b2lkICpwdHIsIHNpemVfdCBsZW4pOwpAQCAtMjQzMSw5ICsyMzk4LDcgQEAgcHVibGljOgog ICAgIGNvcHl0byAoZmgpOwogICAgIHJldHVybiBmaDsKICAgfQotCi0gIGJvb2wgc2V0dXBfcHNl dWRvY29uc29sZSAodm9pZCk7Ci0gIHZvaWQgdHJhbnNmZXJfaW5wdXRfdG9fcGNvbiAodm9pZCk7 CisgIGJvb2wgdG9fYmVfcmVhZF9mcm9tX3Bjb24gKHZvaWQpOwogfTsKIAogY2xhc3MgZmhhbmRs ZXJfZGV2X251bGw6IHB1YmxpYyBmaGFuZGxlcl9iYXNlCmRpZmYgLS1naXQgYS93aW5zdXAvY3ln d2luL2ZoYW5kbGVyX2NvbnNvbGUuY2MgYi93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2NvbnNvbGUu Y2MKaW5kZXggNTI3NDFjZThiLi4wMmE1OTk2YTEgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4v ZmhhbmRsZXJfY29uc29sZS5jYworKysgYi93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2NvbnNvbGUu Y2MKQEAgLTEyMDYsMTggKzEyMDYsNiBAQCBmaGFuZGxlcl9jb25zb2xlOjpjbG9zZSAoKQogICBp ZiAoY29uX3JhLnJhYnVmKQogICAgIGZyZWUgKGNvbl9yYS5yYWJ1Zik7CiAKLSAgLyogSWYgYWxy ZWFkeSBhdHRhY2hlZCB0byBwc2V1ZG8gY29uc29sZSwgZG9uJ3QgY2FsbCBmcmVlX2NvbnNvbGUg KCkgKi8KLSAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxzZSk7Ci0gIHdoaWxlIChjZmQubmV4dCAo KSA+PSAwKQotICAgIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZTV9NQUpPUiB8fAot CWNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SKQotICAgICAgewotCWZoYW5kbGVy X3B0eV9jb21tb24gKnQgPQotCSAgKGZoYW5kbGVyX3B0eV9jb21tb24gKikgKGZoYW5kbGVyX2Jh c2UgKikgY2ZkOwotCWlmIChnZXRfY29uc29sZV9wcm9jZXNzX2lkICh0LT5nZXRfaGVscGVyX3By b2Nlc3NfaWQgKCksIHRydWUpKQotCSAgcmV0dXJuIDA7Ci0gICAgICB9Ci0KICAgaWYgKCFoYXZl X2V4ZWNlZCkKICAgICBmcmVlX2NvbnNvbGUgKCk7CiAgIHJldHVybiAwOwpAQCAtMzYxMSwzNyAr MzU5OSw2IEBAIGZoYW5kbGVyX2NvbnNvbGU6Om5lZWRfaW52aXNpYmxlICgpCiAgIHJldHVybiBi OwogfQogCi1EV09SRAotZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZCAo RFdPUkQgcGlkLCBib29sIG1hdGNoKQotewotICBEV09SRCB0bXA7Ci0gIERXT1JEIG51bSwgbnVt X3JlcTsKLSAgbnVtID0gMTsKLSAgbnVtX3JlcSA9IEdldENvbnNvbGVQcm9jZXNzTGlzdCAoJnRt cCwgbnVtKTsKLSAgRFdPUkQgKmxpc3Q7Ci0gIHdoaWxlICh0cnVlKQotICAgIHsKLSAgICAgIGxp c3QgPSAoRFdPUkQgKikKLQlIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBudW1fcmVx ICogc2l6ZW9mIChEV09SRCkpOwotICAgICAgbnVtID0gbnVtX3JlcTsKLSAgICAgIG51bV9yZXEg PSBHZXRDb25zb2xlUHJvY2Vzc0xpc3QgKGxpc3QsIG51bSk7Ci0gICAgICBpZiAobnVtX3JlcSA+ IG51bSkKLQlIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGxpc3QpOwotICAgICAgZWxz ZQotCWJyZWFrOwotICAgIH0KLSAgbnVtID0gbnVtX3JlcTsKLQotICB0bXAgPSAwOwotICBmb3Ig KERXT1JEIGk9MDsgaTxudW07IGkrKykKLSAgICBpZiAoKG1hdGNoICYmIGxpc3RbaV0gPT0gcGlk KSB8fCAoIW1hdGNoICYmIGxpc3RbaV0gIT0gcGlkKSkKLSAgICAgIC8qIExhc3Qgb25lIGlzIHRo ZSBvbGRlc3QuICovCi0gICAgICAvKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L3Rlcm1p bmFsL2lzc3Vlcy85NSAqLwotICAgICAgdG1wID0gbGlzdFtpXTsKLSAgSGVhcEZyZWUgKEdldFBy b2Nlc3NIZWFwICgpLCAwLCBsaXN0KTsKLSAgcmV0dXJuIHRtcDsKLX0KLQogRFdPUkQKIGZoYW5k bGVyX2NvbnNvbGU6Ol9fYWNxdWlyZV9pbnB1dF9tdXRleCAoY29uc3QgY2hhciAqZm4sIGludCBs biwgRFdPUkQgbXMpCiB7CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3R0eS5j YyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjCmluZGV4IDkyNDQ5YWQ3ZS4uOGIxNDEx MzEwIDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3R0eS5jYworKysgYi93aW5z dXAvY3lnd2luL2ZoYW5kbGVyX3R0eS5jYwpAQCAtMjUsNyArMjUsNiBAQCBkZXRhaWxzLiAqLwog I2luY2x1ZGUgImNoaWxkX2luZm8uaCIKICNpbmNsdWRlIDxhc20vc29ja2V0Lmg+CiAjaW5jbHVk ZSAiY3lnd2FpdC5oIgotI2luY2x1ZGUgInRsc19wYnVmLmgiCiAjaW5jbHVkZSAicmVnaXN0cnku aCIKIAogI2lmbmRlZiBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfUFNFVURPQ09OU09MRQpAQCAtMzMs NyArMzIsNiBAQCBkZXRhaWxzLiAqLwogI2VuZGlmIC8qIFBST0NfVEhSRUFEX0FUVFJJQlVURV9Q U0VVRE9DT05TT0xFICovCiAKIGV4dGVybiAiQyIgaW50IHNzY2FuZiAoY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICosIC4uLik7Ci1leHRlcm4gIkMiIGludCB0dHluYW1lX3IgKGludCwgY2hhcios IHNpemVfdCk7CiAKIGV4dGVybiAiQyIgewogICBIUkVTVUxUIFdJTkFQSSBDcmVhdGVQc2V1ZG9D b25zb2xlIChDT09SRCwgSEFORExFLCBIQU5ETEUsIERXT1JELCBIUENPTiAqKTsKQEAgLTYwLDIw ICs1OCwxMCBAQCBzdHJ1Y3QgcGlwZV9yZXBseSB7CiAgIERXT1JEIGVycm9yOwogfTsKIAotc3Rh dGljIGludCBwY29uX2F0dGFjaGVkX3RvID0gLTE7CiBzdGF0aWMgYm9vbCBpc0h5YnJpZDsKLXN0 YXRpYyBib29sIGRvX25vdF9yZXNldF9zd2l0Y2hfdG9fcGNvbjsKLXN0YXRpYyBib29sIGZyZWVj b25zb2xlX29uX2Nsb3NlID0gdHJ1ZTsKLXN0YXRpYyB0dHkgKmxhc3RfdHR5cCA9IE5VTEw7Ci0K LXZvaWQKLWNsZWFyX3Bjb25fYXR0YWNoZWRfdG8gKHZvaWQpCi17Ci0gIHBjb25fYXR0YWNoZWRf dG8gPSAtMTsKLX0KIAogc3RhdGljIHZvaWQKLXNldF9zd2l0Y2hfdG9fcGNvbiAodm9pZCkKK3Nl dF9zd2l0Y2hfdG9fcGNvbiAoSEFORExFIGgpCiB7CiAgIGN5Z2hlYXBfZmRlbnVtIGNmZCAoZmFs c2UpOwogICBpbnQgZmQ7CkBAIC04MiwyODAgKzcwLDE3IEBAIHNldF9zd2l0Y2hfdG9fcGNvbiAo dm9pZCkKICAgICAgIHsKIAlmaGFuZGxlcl9iYXNlICpmaCA9IGNmZDsKIAlmaGFuZGxlcl9wdHlf c2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICopIGZoOwotCWlmIChwdHlzLT5nZXRf cHNldWRvX2NvbnNvbGUgKCkpCi0JICB7Ci0JICAgIHB0eXMtPnNldF9zd2l0Y2hfdG9fcGNvbiAo ZmQpOwotCSAgICBwdHlzLT50cmlnZ2VyX3JlZHJhd19zY3JlZW4gKCk7Ci0JICAgIERXT1JEIG1v ZGUgPQotCSAgICAgIEVOQUJMRV9QUk9DRVNTRURfSU5QVVQgfCBFTkFCTEVfTElORV9JTlBVVCB8 IEVOQUJMRV9FQ0hPX0lOUFVUOwotCSAgICBTZXRDb25zb2xlTW9kZSAocHR5cy0+Z2V0X2hhbmRs ZSAoKSwgbW9kZSk7Ci0JICB9CisJaWYgKGggPT0gcHR5cy0+Z2V0X2hhbmRsZSAoKSkKKwkgIHB0 eXMtPnNldF9zd2l0Y2hfdG9fcGNvbiAoKTsKIAlyZXR1cm47CiAgICAgICB9Ci0gIC8qIE5vIHB0 eSBzbGF2ZSBvcGVuZWQgKi8KLSAgaWYgKGxhc3RfdHR5cCkgLyogTWFrZSBzeXN0ZW1fcHJpbnRm KCkgd29yayBhZnRlciBjbG9zaW5nIHB0eSBzbGF2ZSAqLwotICAgIGxhc3RfdHR5cC0+c2V0X3N3 aXRjaF90b19wY29uX291dCAodHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mb3JjZV9hdHRhY2hf dG9fcGNvbiAoSEFORExFIGgpCi17Ci0gIGJvb2wgYXR0YWNoX2RvbmUgPSBmYWxzZTsKLSAgZm9y IChpbnQgbiA9IDA7IG4gPCAyOyBuICsrKQotICAgIHsKLSAgICAgIC8qIEZpcnN0IHRpbWUsIGF0 dGFjaCB0byB0aGUgcHR5IHdob3NlIGhhbmRsZSB2YWx1ZSBpcyBtYXRjaC4KLQkgU2Vjb25kIHRp bWUsIHRyeSB0byBhdHRhY2ggdG8gYW55IHB0eS4gKi8KLSAgICAgIGN5Z2hlYXBfZmRlbnVtIGNm ZCAoZmFsc2UpOwotICAgICAgd2hpbGUgKGNmZC5uZXh0ICgpID49IDApCi0JaWYgKGNmZC0+Z2V0 X21ham9yICgpID09IERFVl9QVFlTX01BSk9SKQotCSAgewotCSAgICBmaGFuZGxlcl9iYXNlICpm aCA9IGNmZDsKLQkgICAgZmhhbmRsZXJfcHR5X3NsYXZlICpwdHlzID0gKGZoYW5kbGVyX3B0eV9z bGF2ZSAqKSBmaDsKLQkgICAgaWYgKCFwdHlzLT5nZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0JICAg ICAgY29udGludWU7Ci0JICAgIGlmIChuICE9IDAKLQkJfHwgaCA9PSBwdHlzLT5nZXRfaGFuZGxl ICgpCi0JCXx8IGggPT0gcHR5cy0+Z2V0X291dHB1dF9oYW5kbGUgKCkpCi0JICAgICAgewotCQlp ZiAoZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAotCQkJCSAgKHB0eXMt PmdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSkpCi0JCSAgYXR0YWNoX2RvbmUgPSB0cnVl OwotCQllbHNlCi0JCSAgewotCQkgICAgRnJlZUNvbnNvbGUgKCk7Ci0JCSAgICBpZiAoQXR0YWNo Q29uc29sZSAocHR5cy0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpKSkKLQkJICAgICAgewotCQkJ cGNvbl9hdHRhY2hlZF90byA9IHB0eXMtPmdldF9taW5vciAoKTsKLQkJCWF0dGFjaF9kb25lID0g dHJ1ZTsKLQkJICAgICAgfQotCQkgICAgZWxzZQotCQkgICAgICBwY29uX2F0dGFjaGVkX3RvID0g LTE7Ci0JCSAgfQotCQlicmVhazsKLQkgICAgICB9Ci0JICB9Ci0JZWxzZSBpZiAoY2ZkLT5nZXRf bWFqb3IgKCkgPT0gREVWX0NPTlNfTUFKT1IpCi0JICB7Ci0JICAgIGZoYW5kbGVyX2Jhc2UgKmZo ID0gY2ZkOwotCSAgICBmaGFuZGxlcl9jb25zb2xlICpjb25zID0gKGZoYW5kbGVyX2NvbnNvbGUg KikgZmg7Ci0JICAgIGlmIChuICE9IDAKLQkJfHwgaCA9PSBjb25zLT5nZXRfaGFuZGxlICgpCi0J CXx8IGggPT0gY29ucy0+Z2V0X291dHB1dF9oYW5kbGUgKCkpCi0JICAgICAgewotCQkvKiBJZiB0 aGUgcHJvY2VzcyBpcyBydW5uaW5nIG9uIGEgY29uc29sZSwKLQkJICAgdGhlIHBhcmVudCBwcm9j ZXNzIHNob3VsZCBiZSBhdHRhY2hlZAotCQkgICB0byB0aGUgc2FtZSBjb25zb2xlLiAqLwotCQlE V09SRCBhdHRhY2hfd3BpZDsKLQkJaWYgKG15c2VsZi0+cHBpZCA9PSAxKQotCQkgIGF0dGFjaF93 cGlkID0gQVRUQUNIX1BBUkVOVF9QUk9DRVNTOwotCQllbHNlCi0JCSAgewotCQkgICAgcGluZm8g cCAobXlzZWxmLT5wcGlkKTsKLQkJICAgIGF0dGFjaF93cGlkID0gcC0+ZHdQcm9jZXNzSWQ7Ci0J CSAgfQotCQlGcmVlQ29uc29sZSAoKTsKLQkJaWYgKEF0dGFjaENvbnNvbGUgKGF0dGFjaF93cGlk KSkKLQkJICB7Ci0JCSAgICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0JCSAgICBhdHRhY2hfZG9u ZSA9IHRydWU7Ci0JCSAgfQotCQllbHNlCi0JCSAgcGNvbl9hdHRhY2hlZF90byA9IC0xOwotCQli cmVhazsKLQkgICAgICB9Ci0JICB9Ci0gICAgICBpZiAoYXR0YWNoX2RvbmUpCi0JYnJlYWs7Ci0g ICAgfQotfQotCi12b2lkCi1zZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChIQU5ETEUg aCkKLXsKLSAgaWYgKEdldEZpbGVUeXBlIChoKSA9PSBGSUxFX1RZUEVfQ0hBUikKLSAgICB7Ci0g ICAgICBmb3JjZV9hdHRhY2hfdG9fcGNvbiAoaCk7Ci0gICAgICBEV09SRCBkdW1teTsKLSAgICAg IGlmICghaXNIeWJyaWQgJiYgKEdldENvbnNvbGVNb2RlIChoLCAmZHVtbXkpCi0JCQl8fCBHZXRM YXN0RXJyb3IgKCkgIT0gRVJST1JfSU5WQUxJRF9IQU5ETEUpKQotCXsKLQkgIGlzSHlicmlkID0g dHJ1ZTsKLQkgIHNldF9zd2l0Y2hfdG9fcGNvbiAoKTsKLQl9Ci0gICAgfQotfQotCi1pbmxpbmUg dm9pZAotZmhhbmRsZXJfcHR5X3NsYXZlOjpmcmVlX2F0dGFjaGVkX2NvbnNvbGUgKCkKLXsKLSAg Ym9vbCBhdHRhY2hlZCA9IGdldF90dHlwICgpID8KLSAgICBmaGFuZGxlcl9jb25zb2xlOjpnZXRf Y29uc29sZV9wcm9jZXNzX2lkIChnZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCksIHRydWUpCi0gICAg OiAoZ2V0X21pbm9yICgpID09IHBjb25fYXR0YWNoZWRfdG8pOwotICBpZiAoZnJlZWNvbnNvbGVf b25fY2xvc2UgJiYgYXR0YWNoZWQpCi0gICAgewotICAgICAgRnJlZUNvbnNvbGUgKCk7Ci0gICAg ICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0gICAgfQogfQogCiAjZGVmaW5lIERFRl9IT09LKG5h bWUpIHN0YXRpYyBfX3R5cGVvZl9fIChuYW1lKSAqbmFtZSMjX09yaWcKLURFRl9IT09LIChXcml0 ZUZpbGUpOwotREVGX0hPT0sgKFdyaXRlQ29uc29sZUEpOwotREVGX0hPT0sgKFdyaXRlQ29uc29s ZVcpOwotREVGX0hPT0sgKFJlYWRGaWxlKTsKLURFRl9IT09LIChSZWFkQ29uc29sZUEpOwotREVG X0hPT0sgKFJlYWRDb25zb2xlVyk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0cHV0QSk7Ci1E RUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0cHV0Vyk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0 cHV0Q2hhcmFjdGVyQSk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVyVyk7 Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0cHV0QXR0cmlidXRlKTsKLURFRl9IT09LIChTZXRD b25zb2xlQ3Vyc29yUG9zaXRpb24pOwotREVGX0hPT0sgKFNldENvbnNvbGVUZXh0QXR0cmlidXRl KTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVJbnB1dEEpOwotREVGX0hPT0sgKFdyaXRlQ29uc29s ZUlucHV0Vyk7Ci1ERUZfSE9PSyAoUmVhZENvbnNvbGVJbnB1dEEpOwotREVGX0hPT0sgKFJlYWRD b25zb2xlSW5wdXRXKTsKLURFRl9IT09LIChQZWVrQ29uc29sZUlucHV0QSk7Ci1ERUZfSE9PSyAo UGVla0NvbnNvbGVJbnB1dFcpOwogLyogQ3JlYXRlUHJvY2VzcygpIGlzIGhvb2tlZCBmb3IgR0RC IGV0Yy4gKi8KIERFRl9IT09LIChDcmVhdGVQcm9jZXNzQSk7CiBERUZfSE9PSyAoQ3JlYXRlUHJv Y2Vzc1cpOwogCi1zdGF0aWMgQk9PTCBXSU5BUEkKLVdyaXRlRmlsZV9Ib29rZWQKLSAgICAgKEhB TkRMRSBoLCBMUENWT0lEIHAsIERXT1JEIGwsIExQRFdPUkQgbiwgTFBPVkVSTEFQUEVEIG8pCi17 Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3JpdGVG aWxlX09yaWcgKGgsIHAsIGwsIG4sIG8pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNv bnNvbGVBX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQQ1ZPSUQgcCwgRFdPUkQgbCwgTFBEV09S RCBuLCBMUFZPSUQgbykKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7 Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVBX09yaWcgKGgsIHAsIGwsIG4sIG8pOwotfQotc3RhdGlj IEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVXX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQQ1ZP SUQgcCwgRFdPUkQgbCwgTFBEV09SRCBuLCBMUFZPSUQgbykKLXsKLSAgc2V0X2lzaHlicmlkX2Fu ZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVXX09yaWcgKGgsIHAs IGwsIG4sIG8pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1SZWFkRmlsZV9Ib29rZWQKLSAgICAg KEhBTkRMRSBoLCBMUFZPSUQgcCwgRFdPUkQgbCwgTFBEV09SRCBuLCBMUE9WRVJMQVBQRUQgbykK LXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBSZWFk RmlsZV9PcmlnIChoLCBwLCBsLCBuLCBvKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotUmVhZENv bnNvbGVBX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQVk9JRCBwLCBEV09SRCBsLCBMUERXT1JE IG4sIExQVk9JRCBvKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsK LSAgcmV0dXJuIFJlYWRDb25zb2xlQV9PcmlnIChoLCBwLCBsLCBuLCBvKTsKLX0KLXN0YXRpYyBC T09MIFdJTkFQSQotUmVhZENvbnNvbGVXX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQVk9JRCBw LCBEV09SRCBsLCBMUERXT1JEIG4sIExQVk9JRCBvKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3 aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFJlYWRDb25zb2xlV19PcmlnIChoLCBwLCBsLCBu LCBvKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotV3JpdGVDb25zb2xlT3V0cHV0QV9Ib29rZWQK LSAgICAgKEhBTkRMRSBoLCBDT05TVCBDSEFSX0lORk8gKnAsIENPT1JEIHMsIENPT1JEIGMsIFBT TUFMTF9SRUNUIHIpCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwot ICByZXR1cm4gV3JpdGVDb25zb2xlT3V0cHV0QV9PcmlnIChoLCBwLCBzLCBjLCByKTsKLX0KLXN0 YXRpYyBCT09MIFdJTkFQSQotV3JpdGVDb25zb2xlT3V0cHV0V19Ib29rZWQKLSAgICAgKEhBTkRM RSBoLCBDT05TVCBDSEFSX0lORk8gKnAsIENPT1JEIHMsIENPT1JEIGMsIFBTTUFMTF9SRUNUIHIp Ci17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3Jp dGVDb25zb2xlT3V0cHV0V19PcmlnIChoLCBwLCBzLCBjLCByKTsKLX0KLXN0YXRpYyBCT09MIFdJ TkFQSQotV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVyQV9Ib29rZWQKLSAgICAgKEhBTkRMRSBo LCBMUENTVFIgcCwgRFdPUkQgbCwgQ09PUkQgYywgTFBEV09SRCBuKQotewotICBzZXRfaXNoeWJy aWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFdyaXRlQ29uc29sZU91dHB1dENo YXJhY3RlckFfT3JpZyAoaCwgcCwgbCwgYywgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVdy aXRlQ29uc29sZU91dHB1dENoYXJhY3RlcldfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBDV1NU UiBwLCBEV09SRCBsLCBDT09SRCBjLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRf c3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVy V19PcmlnIChoLCBwLCBsLCBjLCBuKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotV3JpdGVDb25z b2xlT3V0cHV0QXR0cmlidXRlX0hvb2tlZAotICAgICAoSEFORExFIGgsIENPTlNUIFdPUkQgKmEs IERXT1JEIGwsIENPT1JEIGMsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0 Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVPdXRwdXRBdHRyaWJ1dGVfT3Jp ZyAoaCwgYSwgbCwgYywgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVNldENvbnNvbGVDdXJz b3JQb3NpdGlvbl9Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBDT09SRCBjKQotewotICBzZXRfaXNo eWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFNldENvbnNvbGVDdXJzb3JQ b3NpdGlvbl9PcmlnIChoLCBjKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotU2V0Q29uc29sZVRl eHRBdHRyaWJ1dGVfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgV09SRCBhKQotewotICBzZXRfaXNo eWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFNldENvbnNvbGVUZXh0QXR0 cmlidXRlX09yaWcgKGgsIGEpOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVJ bnB1dEFfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgQ09OU1QgSU5QVVRfUkVDT1JEICpyLCBEV09S RCBsLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgp OwotICByZXR1cm4gV3JpdGVDb25zb2xlSW5wdXRBX09yaWcgKGgsIHIsIGwsIG4pOwotfQotc3Rh dGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVJbnB1dFdfSG9va2VkCi0gICAgIChIQU5ETEUg aCwgQ09OU1QgSU5QVVRfUkVDT1JEICpyLCBEV09SRCBsLCBMUERXT1JEIG4pCi17Ci0gIHNldF9p c2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3JpdGVDb25zb2xlSW5w dXRXX09yaWcgKGgsIHIsIGwsIG4pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1SZWFkQ29uc29s ZUlucHV0QV9Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBQSU5QVVRfUkVDT1JEIHIsIERXT1JEIGws IExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0g IHJldHVybiBSZWFkQ29uc29sZUlucHV0QV9PcmlnIChoLCByLCBsLCBuKTsKLX0KLXN0YXRpYyBC T09MIFdJTkFQSQotUmVhZENvbnNvbGVJbnB1dFdfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgUElO UFVUX1JFQ09SRCByLCBEV09SRCBsLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRf c3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gUmVhZENvbnNvbGVJbnB1dFdfT3JpZyAoaCwg ciwgbCwgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVBlZWtDb25zb2xlSW5wdXRBX0hvb2tl ZAotICAgICAoSEFORExFIGgsIFBJTlBVVF9SRUNPUkQgciwgRFdPUkQgbCwgTFBEV09SRCBuKQot ewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFBlZWtD b25zb2xlSW5wdXRBX09yaWcgKGgsIHIsIGwsIG4pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Q ZWVrQ29uc29sZUlucHV0V19Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBQSU5QVVRfUkVDT1JEIHIs IERXT1JEIGwsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNv biAoaCk7Ci0gIHJldHVybiBQZWVrQ29uc29sZUlucHV0V19PcmlnIChoLCByLCBsLCBuKTsKLX0K LS8qIENyZWF0ZVByb2Nlc3MoKSBpcyBob29rZWQgZm9yIEdEQiBldGMuICovCiBzdGF0aWMgQk9P TCBXSU5BUEkKIENyZWF0ZVByb2Nlc3NBX0hvb2tlZAogICAgICAoTFBDU1RSIG4sIExQU1RSIGMs IExQU0VDVVJJVFlfQVRUUklCVVRFUyBwYSwgTFBTRUNVUklUWV9BVFRSSUJVVEVTIHRhLApAQCAt MzYzLDExICs4OCwxNCBAQCBDcmVhdGVQcm9jZXNzQV9Ib29rZWQKICAgICAgIExQU1RBUlRVUElO Rk9BIHNpLCBMUFBST0NFU1NfSU5GT1JNQVRJT04gcGkpCiB7CiAgIEhBTkRMRSBoOwotICBpZiAo c2ktPmR3RmxhZ3MgJiBTVEFSVEZfVVNFU1RESEFORExFUykKLSAgICBoID0gc2ktPmhTdGRPdXRw dXQ7Ci0gIGVsc2UKLSAgICBoID0gR2V0U3RkSGFuZGxlIChTVERfT1VUUFVUX0hBTkRMRSk7Ci0g IHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOworICBpZiAoIWlzSHlicmlkKQor ICAgIHsKKyAgICAgIGlmIChzaS0+ZHdGbGFncyAmIFNUQVJURl9VU0VTVERIQU5ETEVTKQorCWgg PSBzaS0+aFN0ZElucHV0OworICAgICAgZWxzZQorCWggPSBHZXRTdGRIYW5kbGUgKFNURF9JTlBV VF9IQU5ETEUpOworICAgICAgc2V0X3N3aXRjaF90b19wY29uIChoKTsKKyAgICB9CiAgIHJldHVy biBDcmVhdGVQcm9jZXNzQV9PcmlnIChuLCBjLCBwYSwgdGEsIGluaCwgZiwgZSwgZCwgc2ksIHBp KTsKIH0KIHN0YXRpYyBCT09MIFdJTkFQSQpAQCAtMzc3LDExICsxMDUsMTQgQEAgQ3JlYXRlUHJv Y2Vzc1dfSG9va2VkCiAgICAgICBMUFNUQVJUVVBJTkZPVyBzaSwgTFBQUk9DRVNTX0lORk9STUFU SU9OIHBpKQogewogICBIQU5ETEUgaDsKLSAgaWYgKHNpLT5kd0ZsYWdzICYgU1RBUlRGX1VTRVNU REhBTkRMRVMpCi0gICAgaCA9IHNpLT5oU3RkT3V0cHV0OwotICBlbHNlCi0gICAgaCA9IEdldFN0 ZEhhbmRsZSAoU1REX09VVFBVVF9IQU5ETEUpOwotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90 b19wY29uIChoKTsKKyAgaWYgKCFpc0h5YnJpZCkKKyAgICB7CisgICAgICBpZiAoc2ktPmR3Rmxh Z3MgJiBTVEFSVEZfVVNFU1RESEFORExFUykKKwloID0gc2ktPmhTdGRJbnB1dDsKKyAgICAgIGVs c2UKKwloID0gR2V0U3RkSGFuZGxlIChTVERfSU5QVVRfSEFORExFKTsKKyAgICAgIHNldF9zd2l0 Y2hfdG9fcGNvbiAoaCk7CisgICAgfQogICByZXR1cm4gQ3JlYXRlUHJvY2Vzc1dfT3JpZyAobiwg YywgcGEsIHRhLCBpbmgsIGYsIGUsIGQsIHNpLCBwaSk7CiB9CiAKQEAgLTQ2NCwxMCArMTk1LDYg QEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6Zmx1c2hfdG9fc2xhdmUgKCkKIHsKICAgaWYgKGdldF9y ZWFkYWhlYWRfdmFsaWQgKCkgJiYgIShnZXRfdHR5cCAoKS0+dGkuY19sZmxhZyAmIElDQU5PTikp CiAgICAgYWNjZXB0X2lucHV0ICgpOwotICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChpbnB1dF9tdXRl eCwgSU5GSU5JVEUpOwotICBpZiAoIWdldF90dHlwICgpLT5wY29uX2luX2VtcHR5ICYmICEoZ2V0 X3R0eXAgKCktPnRpLmNfbGZsYWcgJiBJQ0FOT04pKQotICAgIFNldEV2ZW50IChpbnB1dF9hdmFp bGFibGVfZXZlbnQpOwotICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKIH0KIAogRFdPUkQK QEAgLTUzMiwxNCArMjU5LDYgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6ZG9lY2hvIChjb25zdCB2 b2lkICpzdHIsIERXT1JEIGxlbikKICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7CiB9CiAKLWlu dAotZmhhbmRsZXJfcHR5X21hc3Rlcjo6cHV0X3JlYWRhaGVhZCAoY2hhciB2YWx1ZSkKLXsKLSAg aWYgKHRvX2JlX3JlYWRfZnJvbV9wY29uICgpKQotICAgIHJldHVybiAxOwotICByZXR1cm4gZmhh bmRsZXJfYmFzZTo6cHV0X3JlYWRhaGVhZCAodmFsdWUpOwotfQotCiBpbnQKIGZoYW5kbGVyX3B0 eV9tYXN0ZXI6OmFjY2VwdF9pbnB1dCAoKQogewpAQCAtNTUxLDkgKzI3MCwxMSBAQCBmaGFuZGxl cl9wdHlfbWFzdGVyOjphY2NlcHRfaW5wdXQgKCkKICAgY2hhciAqcCA9IHJhYnVmICgpICsgcmFp eGdldCAoKTsKICAgYnl0ZXNfbGVmdCA9IGVhdF9yZWFkYWhlYWQgKC0xKTsKIAorICBIQU5ETEUg d3JpdGVfdG8gPSBnZXRfb3V0cHV0X2hhbmRsZSAoKTsKICAgaWYgKHRvX2JlX3JlYWRfZnJvbV9w Y29uICgpKQotICAgIDsgLyogRG8gbm90aGluZyAqLwotICBlbHNlIGlmICghYnl0ZXNfbGVmdCkK KyAgICB3cml0ZV90byA9IHRvX3NsYXZlOworCisgIGlmICghYnl0ZXNfbGVmdCkKICAgICB7CiAg ICAgICB0ZXJtaW9zX3ByaW50ZiAoInNlbmRpbmcgRU9GIHRvIHNsYXZlIik7CiAgICAgICBnZXRf dHR5cCAoKS0+cmVhZF9yZXR2YWwgPSAwOwpAQCAtNTY0LDEwICsyODUsMTAgQEAgZmhhbmRsZXJf cHR5X21hc3Rlcjo6YWNjZXB0X2lucHV0ICgpCiAgICAgICBEV09SRCB3cml0dGVuID0gMDsKIAog ICAgICAgcGFyYW5vaWRfcHJpbnRmICgiYWJvdXQgdG8gd3JpdGUgJXUgY2hhcnMgdG8gc2xhdmUi LCBieXRlc19sZWZ0KTsKLSAgICAgIHJjID0gV3JpdGVGaWxlIChnZXRfb3V0cHV0X2hhbmRsZSAo KSwgcCwgYnl0ZXNfbGVmdCwgJndyaXR0ZW4sIE5VTEwpOworICAgICAgcmMgPSBXcml0ZUZpbGUg KHdyaXRlX3RvLCBwLCBieXRlc19sZWZ0LCAmd3JpdHRlbiwgTlVMTCk7CiAgICAgICBpZiAoIXJj KQogCXsKLQkgIGRlYnVnX3ByaW50ZiAoImVycm9yIHdyaXRpbmcgdG8gcGlwZSAlcCAlRSIsIGdl dF9vdXRwdXRfaGFuZGxlICgpKTsKKwkgIGRlYnVnX3ByaW50ZiAoImVycm9yIHdyaXRpbmcgdG8g cGlwZSAlcCAlRSIsIHdyaXRlX3RvKTsKIAkgIGdldF90dHlwICgpLT5yZWFkX3JldHZhbCA9IC0x OwogCSAgcmV0ID0gLTE7CiAJfQpAQCAtNzI1LDUyICs0NDYsMTIgQEAgb3V0OgogCiBmaGFuZGxl cl9wdHlfc2xhdmU6OmZoYW5kbGVyX3B0eV9zbGF2ZSAoaW50IHVuaXQpCiAgIDogZmhhbmRsZXJf cHR5X2NvbW1vbiAoKSwgaW51c2UgKE5VTEwpLCBvdXRwdXRfaGFuZGxlX2N5ZyAoTlVMTCksCi0g IGlvX2hhbmRsZV9jeWcgKE5VTEwpLCBwaWRfcmVzdG9yZSAoMCksIGZkICgtMSkKKyAgaW9faGFu ZGxlX2N5ZyAoTlVMTCkKIHsKICAgaWYgKHVuaXQgPj0gMCkKICAgICBkZXYgKCkucGFyc2UgKERF Vl9QVFlTX01BSk9SLCB1bml0KTsKIH0KIAotZmhhbmRsZXJfcHR5X3NsYXZlOjp+ZmhhbmRsZXJf cHR5X3NsYXZlICgpCi17Ci0gIGlmICghZ2V0X3R0eXAgKCkpCi0gICAgewotICAgICAgLyogV2h5 IGNvbWVzIGhlcmU/IFdobyBjbGVhcnMgX3RjPyAqLwotICAgICAgZnJlZV9hdHRhY2hlZF9jb25z b2xlICgpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAo KSkKLSAgICB7Ci0gICAgICBpbnQgdXNlZCA9IDA7Ci0gICAgICBpbnQgYXR0YWNoZWQgPSAwOwot ICAgICAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxzZSk7Ci0gICAgICB3aGlsZSAoY2ZkLm5leHQg KCkgPj0gMCkKLQl7Ci0JICBpZiAoY2ZkLT5nZXRfbWFqb3IgKCkgPT0gREVWX1BUWVNfTUFKT1Ig fHwKLQkgICAgICBjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfQ09OU19NQUpPUikKLQkgICAgdXNl ZCArKzsKLQkgIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUiAmJgotCSAg ICAgIGNmZC0+Z2V0X21pbm9yICgpID09IHBjb25fYXR0YWNoZWRfdG8pCi0JICAgIGF0dGFjaGVk ICsrOwotCX0KLQotICAgICAgLyogQ2FsbCBGcmVlQ29uc29sZSgpIGlmIG5vIHR0eSBpcyBvcGVu ZWQgYW5kIHRoZSBwcm9jZXNzCi0JIGlzIGF0dGFjaGVkIHRvIGNvbnNvbGUgY29ycmVzcG9uZGlu ZyB0byB0dHkuIFRoaXMgaXMKLQkgbmVlZGVkIHRvIG1ha2UgR05VIHNjcmVlbiBhbmQgdG11eCB3 b3JrIGluIFdpbmRvd3MgMTAKLQkgMTkwMy4gKi8KLSAgICAgIGlmIChhdHRhY2hlZCA9PSAwKQot CXsKLQkgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLQkgIGxhc3RfdHR5cCA9IGdldF90dHlwICgp OwotCX0KLSAgICAgIGlmICh1c2VkID09IDApCi0JewotCSAgaW5pdF9jb25zb2xlX2hhbmRsZXIg KGZhbHNlKTsKLQkgIGZyZWVfYXR0YWNoZWRfY29uc29sZSAoKTsKLQl9Ci0gICAgfQotfQotCiBp bnQKIGZoYW5kbGVyX3B0eV9zbGF2ZTo6b3BlbiAoaW50IGZsYWdzLCBtb2RlX3QpCiB7CkBAIC04 MzMsOCArNTE0LDggQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVf dCkKICAgICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKICAgfQogCi0gIGlmICghZ2V0X3R0eXAg KCktPmZyb21fbWFzdGVyICgpIHx8ICFnZXRfdHR5cCAoKS0+ZnJvbV9tYXN0ZXJfY3lnICgpIHx8 Ci0gICAgICAhZ2V0X3R0eXAgKCktPnRvX21hc3RlciAoKSB8fCAhZ2V0X3R0eXAgKCktPnRvX21h c3Rlcl9jeWcgKCkpCisgIGlmICghZ2V0X3R0eXAgKCktPmZyb21fbWFzdGVyICgpIHx8ICFnZXRf dHR5cCAoKS0+ZnJvbV9tYXN0ZXJfY3lnICgpCisgICAgICB8fCAhZ2V0X3R0eXAgKCktPnRvX21h c3RlciAoKSB8fCAhZ2V0X3R0eXAgKCktPnRvX21hc3Rlcl9jeWcgKCkpCiAgICAgewogICAgICAg ZXJybXNnID0gInB0eSBoYW5kbGVzIGhhdmUgYmVlbiBjbG9zZWQiOwogICAgICAgc2V0X2Vycm5v IChFQUNDRVMpOwpAQCAtOTIzLDggKzYwNCw4IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6b3BlbiAo aW50IGZsYWdzLCBtb2RlX3QpCiAgICAgICBmcm9tX21hc3Rlcl9jeWdfbG9jYWwgPSByZXBsLmZy b21fbWFzdGVyX2N5ZzsKICAgICAgIHRvX21hc3Rlcl9sb2NhbCA9IHJlcGwudG9fbWFzdGVyOwog ICAgICAgdG9fbWFzdGVyX2N5Z19sb2NhbCA9IHJlcGwudG9fbWFzdGVyX2N5ZzsKLSAgICAgIGlm ICghZnJvbV9tYXN0ZXJfbG9jYWwgfHwgIWZyb21fbWFzdGVyX2N5Z19sb2NhbCB8fAotCSAgIXRv X21hc3Rlcl9sb2NhbCB8fCAhdG9fbWFzdGVyX2N5Z19sb2NhbCkKKyAgICAgIGlmICghZnJvbV9t YXN0ZXJfbG9jYWwgfHwgIWZyb21fbWFzdGVyX2N5Z19sb2NhbAorCSAgfHwgIXRvX21hc3Rlcl9s b2NhbCB8fCAhdG9fbWFzdGVyX2N5Z19sb2NhbCkKIAl7CiAJICBTZXRMYXN0RXJyb3IgKHJlcGwu ZXJyb3IpOwogCSAgZXJybXNnID0gImVycm9yIGR1cGxpY2F0aW5nIHBpcGVzLCAlRSI7CkBAIC05 NTAsMjQgKzYzMSw3IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6b3BlbiAoaW50IGZsYWdzLCBtb2Rl X3QpCiAgIHNldF9vdXRwdXRfaGFuZGxlICh0b19tYXN0ZXJfbG9jYWwpOwogICBzZXRfb3V0cHV0 X2hhbmRsZV9jeWcgKHRvX21hc3Rlcl9jeWdfbG9jYWwpOwogCi0gIGlmICghZ2V0X3BzZXVkb19j b25zb2xlICgpKQotICAgIHsKLSAgICAgIGZoYW5kbGVyX2NvbnNvbGU6Om5lZWRfaW52aXNpYmxl ICgpOwotICAgICAgcGNvbl9hdHRhY2hlZF90byA9IC0xOwotICAgIH0KLSAgZWxzZSBpZiAoIWZo YW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQKLQkJCSAgICAgICAoR2V0Q3Vy cmVudFByb2Nlc3NJZCAoKSwgdHJ1ZSkpCi0gICAgewotICAgICAgZmhhbmRsZXJfY29uc29sZTo6 bmVlZF9pbnZpc2libGUgKCk7Ci0gICAgICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0gICAgfQot ICBlbHNlIGlmIChmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkCi0JCQkg ICAgICAgKGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSkpCi0gICAgLyogQXR0YWNoZWQg dG8gcGNvbiBvZiB0aGlzIHB0eSAqLwotICAgIHsKLSAgICAgIHBjb25fYXR0YWNoZWRfdG8gPSBn ZXRfbWlub3IgKCk7Ci0gICAgICBpbml0X2NvbnNvbGVfaGFuZGxlciAodHJ1ZSk7Ci0gICAgfQor ICBmaGFuZGxlcl9jb25zb2xlOjpuZWVkX2ludmlzaWJsZSAoKTsKIAogICBzZXRfb3Blbl9zdGF0 dXMgKCk7CiAgIHJldHVybiAxOwpAQCAtMTAyMSw4ICs2ODUsNyBAQCBmaGFuZGxlcl9wdHlfc2xh dmU6OmNsb3NlICgpCiAgIGlmICghRm9yY2VDbG9zZUhhbmRsZSAoZ2V0X2hhbmRsZV9jeWcgKCkp KQogICAgIHRlcm1pb3NfcHJpbnRmICgiQ2xvc2VIYW5kbGUgKGdldF9oYW5kbGVfY3lnICgpPCVw PiksICVFIiwKIAlnZXRfaGFuZGxlX2N5ZyAoKSk7Ci0gIGlmICghZ2V0X3BzZXVkb19jb25zb2xl ICgpICYmCi0gICAgICAodW5zaWduZWQpIG15c2VsZi0+Y3R0eSA9PSBGSERFViAoREVWX1BUWVNf TUFKT1IsIGdldF9taW5vciAoKSkpCisgIGlmICgodW5zaWduZWQpIG15c2VsZi0+Y3R0eSA9PSBG SERFViAoREVWX1BUWVNfTUFKT1IsIGdldF9taW5vciAoKSkpCiAgICAgZmhhbmRsZXJfY29uc29s ZTo6ZnJlZV9jb25zb2xlICgpOwkvKiBhc3N1bWVzIHRoYXQgd2UgYXJlIHRoZSBsYXN0IHB0eSBj bG9zZXIgKi8KICAgZmhhbmRsZXJfcHR5X2NvbW1vbjo6Y2xvc2UgKCk7CiAgIGlmICghRm9yY2VD bG9zZUhhbmRsZSAob3V0cHV0X211dGV4KSkKQEAgLTEwNzAsNDIzICs3MzMsMzEgQEAgZmhhbmRs ZXJfcHR5X3NsYXZlOjppbml0IChIQU5ETEUgaCwgRFdPUkQgYSwgbW9kZV90KQogICByZXR1cm4g cmV0OwogfQogCi1ib29sCi1maGFuZGxlcl9wdHlfc2xhdmU6OnRyeV9yZWF0dGFjaF9wY29uICh2 b2lkKQotewotICBwaWRfcmVzdG9yZSA9IDA7Ci0KLSAgLyogRG8gbm90IGRldGFjaCBmcm9tIHRo ZSBjb25zb2xlIGJlY2F1c2UgcmUtYXR0YWNoaW5nIHdpbGwKLSAgICAgZmFpbCBpZiBoZWxwZXIg cHJvY2VzcyBpcyBydW5uaW5nIGFzIHNlcnZpY2UgYWNjb3VudC4gKi8KLSAgaWYgKGdldF90dHlw KCktPmF0dGFjaF9wY29uX2luX2ZvcmspCi0gICAgcmV0dXJuIGZhbHNlOwotICBpZiAocGNvbl9h dHRhY2hlZF90byA+PSAwICYmCi0gICAgICBjeWd3aW5fc2hhcmVkLT50dHlbcGNvbl9hdHRhY2hl ZF90b10tPmF0dGFjaF9wY29uX2luX2ZvcmspCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIHBpZF9y ZXN0b3JlID0KLSAgICBmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChH ZXRDdXJyZW50UHJvY2Vzc0lkICgpLAotCQkJCQkgICAgICBmYWxzZSk7Ci0gIC8qIElmIHBpZF9y ZXN0b3JlIGlzIG5vdCBzZXQsIGdpdmUgdXAuICovCi0gIGlmICghcGlkX3Jlc3RvcmUpCi0gICAg cmV0dXJuIGZhbHNlOwotCi0gIEZyZWVDb25zb2xlICgpOwotICBpZiAoIUF0dGFjaENvbnNvbGUg KGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSkpCi0gICAgewotICAgICAgc3lzdGVtX3ByaW50ZiAo InB0eSVkOiBBdHRhY2hDb25zb2xlKGhlbHBlcj0lZCkgZmFpbGVkLiAweCUwOGx4IiwKLQkJICAg ICBnZXRfbWlub3IgKCksIGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgR2V0TGFzdEVycm9yICgp KTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIHJldHVybiB0cnVlOwotfQotCiB2b2lk Ci1maGFuZGxlcl9wdHlfc2xhdmU6OnJlc3RvcmVfcmVhdHRhY2hfcGNvbiAodm9pZCkKK2ZoYW5k bGVyX3B0eV9zbGF2ZTo6c2V0X3N3aXRjaF90b19wY29uICh2b2lkKQogewotICBpZiAocGlkX3Jl c3RvcmUpCisgIGlmICghZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luKQogICAgIHsKLSAg ICAgIEZyZWVDb25zb2xlICgpOwotICAgICAgaWYgKCFBdHRhY2hDb25zb2xlIChwaWRfcmVzdG9y ZSkpCi0JewotCSAgc3lzdGVtX3ByaW50ZiAoInB0eSVkOiBBdHRhY2hDb25zb2xlKHJlc3RvcmU9 JWQpIGZhaWxlZC4gMHglMDhseCIsCi0JCQkgZ2V0X21pbm9yICgpLCBwaWRfcmVzdG9yZSwgR2V0 TGFzdEVycm9yICgpKTsKLQkgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLQl9Ci0gICAgfQotICBw aWRfcmVzdG9yZSA9IDA7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gcmVxdWVzdHMgdHJhbnNmZXJp bmcgdGhlIGlucHV0IGRhdGEgZnJvbSB0aGUgaW5wdXQKLSAgIHBpcGUgZm9yIGN5Z3dpbiBhcHBz IHRvIHRoZSBvdGhlciBpbnB1dCBwaXBlIGZvciBuYXRpdmUgYXBwcy4gKi8KLXZvaWQKLWZoYW5k bGVyX3B0eV9zbGF2ZTo6cHVsbF9wY29uX2lucHV0ICh2b2lkKQotewotICBnZXRfdHR5cCAoKS0+ cmVxX3RyYW5zZmVyX2lucHV0X3RvX3Bjb24gPSB0cnVlOwotICB3aGlsZSAoZ2V0X3R0eXAgKCkt PnJlcV90cmFuc2Zlcl9pbnB1dF90b19wY29uKQotICAgIFNsZWVwICgxKTsKLX0KLQotdm9pZAot ZmhhbmRsZXJfcHR5X3NsYXZlOjp1cGRhdGVfcGNvbl9pbnB1dF9zdGF0ZSAoYm9vbCBuZWVkX2xv Y2spCi17Ci0gIGlmIChuZWVkX2xvY2spCi0gICAgV2FpdEZvclNpbmdsZU9iamVjdCAoaW5wdXRf bXV0ZXgsIElORklOSVRFKTsKLSAgLyogRmx1c2ggaW5wdXQgYnVmZmVyIGlmIGl0IGlzIHJlcXVl c3RlZCBieSBtYXN0ZXIuCi0gICAgIFRoaXMgaGFwcGVucyBpZiBeQyBpcyBwcmVzc2VkIGluIHBz ZXVkbyBjb25zb2xlIHNpZGUuICovCi0gIGlmIChnZXRfdHR5cCAoKS0+cmVxX2ZsdXNoX3Bjb25f aW5wdXQpCi0gICAgewotICAgICAgRmx1c2hDb25zb2xlSW5wdXRCdWZmZXIgKGdldF9oYW5kbGUg KCkpOwotICAgICAgZ2V0X3R0eXAgKCktPnJlcV9mbHVzaF9wY29uX2lucHV0ID0gZmFsc2U7Ci0g ICAgfQotICAvKiBQZWVrIGNvbnNvbGUgaW5wdXQgYnVmZmVyIGFuZCB1cGRhdGUgc3RhdGUuICov Ci0gIElOUFVUX1JFQ09SRCBpbnBbSU5SRUNfU0laRV07Ci0gIERXT1JEIG47Ci0gIEJPT0wgKFdJ TkFQSSAqUGVla0Z1bmMpCi0gICAgKEhBTkRMRSwgUElOUFVUX1JFQ09SRCwgRFdPUkQsIExQRFdP UkQpOwotICBQZWVrRnVuYyA9Ci0gICAgUGVla0NvbnNvbGVJbnB1dEFfT3JpZyA/IDogUGVla0Nv bnNvbGVJbnB1dDsKLSAgUGVla0Z1bmMgKGdldF9oYW5kbGUgKCksIGlucCwgSU5SRUNfU0laRSwg Jm4pOwotICBib29sIHNhd19hY2NlcHQgPSBmYWxzZTsKLSAgYm9vbCBwaXBlX2VtcHR5ID0gdHJ1 ZTsKLSAgd2hpbGUgKG4tLSA+IDApCi0gICAgaWYgKGlucFtuXS5FdmVudFR5cGUgPT0gS0VZX0VW RU5UICYmIGlucFtuXS5FdmVudC5LZXlFdmVudC5iS2V5RG93biAmJgotCWlucFtuXS5FdmVudC5L ZXlFdmVudC51Q2hhci5Bc2NpaUNoYXIpCi0gICAgICB7Ci0JcGlwZV9lbXB0eSA9IGZhbHNlOwot CWNoYXIgYyA9IGlucFtuXS5FdmVudC5LZXlFdmVudC51Q2hhci5Bc2NpaUNoYXI7Ci0JY29uc3Qg Y2hhciBzaWdzW10gPSB7Ci0JICAoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVklOVFJdLAot CSAgKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZRVUlUXSwKLQkgIChjaGFyKSBnZXRfdHR5 cCAoKS0+dGkuY19jY1tWU1VTUF0sCi0JfTsKLQljb25zdCBjaGFyIGVvbHNbXSA9IHsKLQkgIChj aGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9GXSwKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+ dGkuY19jY1tWRU9MXSwKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MMl0sCi0J ICAnXG4nLAotCSAgJ1xyJwotCX07Ci0JaWYgKGlzX2xpbmVfaW5wdXQgKCkgJiYgYyAmJiBtZW1j aHIgKGVvbHMsIGMsIHNpemVvZiAoZW9scykpKQotCSAgc2F3X2FjY2VwdCA9IHRydWU7Ci0JaWYg KChnZXRfdHR5cCAoKS0+dGkuY19sZmxhZyAmIElTSUcpCi0JICAgICYmIGMgJiYgbWVtY2hyIChz aWdzLCBjLCBzaXplb2YgKHNpZ3MpKSkKLQkgIHNhd19hY2NlcHQgPSB0cnVlOwotICAgICAgfQot ICBnZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSA9IHBpcGVfZW1wdHkgJiYgIShyYWxlbiAoKSA+ IHJhaXhnZXQgKCkpOwotICBpZiAoIWdldF9yZWFkYWhlYWRfdmFsaWQgKCkgJiYKLSAgICAgIChw aXBlX2VtcHR5IHx8IChpc19saW5lX2lucHV0ICgpICYmICFzYXdfYWNjZXB0KSkgJiYKLSAgICAg IGdldF90dHlwICgpLT5yZWFkX3JldHZhbCA9PSAxICYmIGJ5dGVzX2F2YWlsYWJsZSAobikgJiYg biA9PSAwKQotICAgIFJlc2V0RXZlbnQgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7Ci0gIGlmIChu ZWVkX2xvY2spCi0gICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7Ci19Ci0KLWludAotZmhh bmRsZXJfcHR5X3NsYXZlOjplYXRfcmVhZGFoZWFkIChpbnQgbikKLXsKLSAgaW50IG9yYWxlbiA9 IHJhbGVuICgpOwotICBpZiAobiA8IDApCi0gICAgbiA9IHJhbGVuICgpIC0gcmFpeGdldCAoKTsK LSAgaWYgKG4gPiAwICYmIHJhbGVuICgpID4gcmFpeGdldCAoKSkKLSAgICB7Ci0gICAgICBjb25z dCBjaGFyIGVvbHNbXSA9IHsKLQkoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPRl0sCi0J KGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0xdLAotCShjaGFyKSBnZXRfdHR5cCAoKS0+ dGkuY19jY1tWRU9MMl0sCi0JJ1xuJwotICAgICAgfTsKLSAgICAgIHdoaWxlIChuID4gMCAmJiBy YWxlbiAoKSA+IHJhaXhnZXQgKCkpCi0JewotCSAgaWYgKGlzX2xpbmVfaW5wdXQgKCkgJiYgcmFi dWYgKClbcmFsZW4gKCktMV0KLQkgICAgICAmJiBtZW1jaHIgKGVvbHMsIHJhYnVmICgpW3JhbGVu ICgpLTFdLCBzaXplb2YgKGVvbHMpKSkKLQkgICAgYnJlYWs7Ci0JICAtLSBuOwotCSAgLS0gcmFs ZW4gKCk7Ci0JfQotCi0gICAgICAvKiBJZiBJVVRGOCBpcyBzZXQsIHRoZSB0ZXJtaW5hbCBpcyBp biBVVEYtOCBtb2RlLiAgSWYgc28sIHdlIGVyYXNlCi0JIGEgY29tcGxldGUgVVRGLTggbXVsdGli eXRlIHNlcXVlbmNlIG9uIFZFUkFTRS9WV0VSQVNFLiAgT3RoZXJ3aXNlLAotCSBpZiB3ZSBvbmx5 IGVyYXNlIGEgc2luZ2xlIGJ5dGUsIGludmFsaWQgdW5pY29kZSBjaGFycyBhcmUgbGVmdCBpbgot CSB0aGUgaW5wdXQuICovCi0gICAgICBpZiAoZ2V0X3R0eXAgKCktPnRpLmNfaWZsYWcgJiBJVVRG OCkKLQl3aGlsZSAocmFsZW4gKCkgPiByYWl4Z2V0ICgpICYmCi0JICAgICAgICgodW5zaWduZWQg Y2hhcikgcmFidWYgKClbcmFsZW4gKCldICYgMHhjMCkgPT0gMHg4MCkKLQkgIC0tcmFsZW4gKCk7 Ci0gICAgfQotICBvcmFsZW4gPSBvcmFsZW4gLSByYWxlbiAoKTsKLSAgaWYgKHJhaXhnZXQgKCkg Pj0gcmFsZW4gKCkpCi0gICAgcmFpeGdldCAoKSA9IHJhaXhwdXQgKCkgPSByYWxlbiAoKSA9IDA7 Ci0gIGVsc2UgaWYgKHJhaXhwdXQgKCkgPiByYWxlbiAoKSkKLSAgICByYWl4cHV0ICgpID0gcmFs ZW4gKCk7Ci0KLSAgcmV0dXJuIG9yYWxlbjsKLX0KLQotaW50Ci1maGFuZGxlcl9wdHlfc2xhdmU6 OmdldF9yZWFkYWhlYWRfaW50b19idWZmZXIgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKLXsK LSAgaW50IGNoOwotICBpbnQgY29waWVkX2NoYXJzID0gMDsKLQotICB3aGlsZSAoYnVmbGVuKQot ICAgIGlmICgoY2ggPSBnZXRfcmVhZGFoZWFkICgpKSA8IDApCi0gICAgICBicmVhazsKLSAgICBl bHNlCi0gICAgICB7Ci0JY29uc3QgY2hhciBlb2xzW10gPSB7Ci0JICAoY2hhcikgZ2V0X3R0eXAg KCktPnRpLmNfY2NbVkVPRl0sCi0JICAoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPTF0s Ci0JICAoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPTDJdLAotCSAgJ1xuJwotCX07Ci0J YnVmW2NvcGllZF9jaGFycysrXSA9ICh1bnNpZ25lZCBjaGFyKShjaCAmIDB4ZmYpOwotCWJ1Zmxl bi0tOwotCWlmIChpc19saW5lX2lucHV0ICgpICYmIGNoICYmIG1lbWNociAoZW9scywgY2ggJiAw eGZmLCBzaXplb2YgKGVvbHMpKSkKLQkgIGJyZWFrOwotICAgICAgfQotCi0gIHJldHVybiBjb3Bp ZWRfY2hhcnM7Ci19Ci0KLWJvb2wKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6Z2V0X3JlYWRhaGVhZF92 YWxpZCAodm9pZCkKLXsKLSAgaWYgKGlzX2xpbmVfaW5wdXQgKCkpCi0gICAgewotICAgICAgY29u c3QgY2hhciBlb2xzW10gPSB7Ci0JKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0ZdLAot CShjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MXSwKLQkoY2hhcikgZ2V0X3R0eXAgKCkt PnRpLmNfY2NbVkVPTDJdLAotCSdcbicKLSAgICAgIH07Ci0gICAgICBmb3IgKHNpemVfdCBpPXJh aXhnZXQgKCk7IGk8cmFsZW4gKCk7IGkrKykKLQlpZiAocmFidWYgKClbaV0gJiYgbWVtY2hyIChl b2xzLCByYWJ1ZiAoKVtpXSwgc2l6ZW9mIChlb2xzKSkpCi0JICByZXR1cm4gdHJ1ZTsKLSAgICAg IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIGVsc2UKLSAgICByZXR1cm4gcmFsZW4gKCkgPiByYWl4 Z2V0ICgpOwotfQotCi12b2lkCi1maGFuZGxlcl9wdHlfc2xhdmU6OnNldF9zd2l0Y2hfdG9fcGNv biAoaW50IGZkX3NldCkKLXsKLSAgaWYgKGZkIDwgMCkKLSAgICBmZCA9IGZkX3NldDsKLSAgYWNx dWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRFKTsKLSAgaWYgKGZkID09IDAgJiYgIWdldF90dHlw ICgpLT5zd2l0Y2hfdG9fcGNvbl9pbikKLSAgICB7Ci0gICAgICBwdWxsX3Bjb25faW5wdXQgKCk7 Ci0gICAgICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IDAgfHwKLQkgICFwaW5mbyAoZ2V0 X3R0eXAgKCktPnBjb25fcGlkKSkKKyAgICAgIGlzSHlicmlkID0gdHJ1ZTsKKyAgICAgIGlmIChn ZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fCAhcGluZm8gKGdldF90dHlwICgpLT5wY29uX3Bp ZCkpCiAJZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gbXlzZWxmLT5waWQ7CiAgICAgICBnZXRfdHR5 cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0cnVlOwotICAgICAgaWYgKGlzSHlicmlkICYmICFn ZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0KQotCXsKLQkgIGdldF90dHlwICgpLT53YWl0 X3Bjb25fZndkICgpOwotCSAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCA9IHRydWU7 Ci0JfQogICAgIH0KLSAgZWxzZSBpZiAoKGZkID09IDEgfHwgZmQgPT0gMikgJiYgIWdldF90dHlw ICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQpCi0gICAgewotICAgICAgZ2V0X3R0eXAgKCktPndhaXRf cGNvbl9md2QgKCk7Ci0gICAgICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IDAgfHwKLQkg ICFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKLQlnZXRfdHR5cCAoKS0+cGNvbl9waWQg PSBteXNlbGYtPnBpZDsKLSAgICAgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQgPSB0 cnVlOwotICAgICAgaWYgKGlzSHlicmlkKQotCWdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9p biA9IHRydWU7Ci0gICAgfQotICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKIH0KIAogdm9pZAog ZmhhbmRsZXJfcHR5X3NsYXZlOjpyZXNldF9zd2l0Y2hfdG9fcGNvbiAodm9pZCkKIHsKLSAgaWYg KGdldF90dHlwICgpLT5wY29uX3BpZCAmJgotICAgICAgZ2V0X3R0eXAgKCktPnBjb25fcGlkICE9 IG15c2VsZi0+cGlkICYmCi0gICAgICAhIXBpbmZvIChnZXRfdHR5cCAoKS0+cGNvbl9waWQpKQor ICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkICYmIGdldF90dHlwICgpLT5wY29uX3BpZCAhPSBt eXNlbGYtPnBpZAorICAgICAgJiYgISFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKICAg ICAvKiBUaGVyZSBpcyBhIHByb2Nlc3Mgd2hpY2ggaXMgZ3JhYmJpbmcgcHNldWRvIGNvbnNvbGUu ICovCiAgICAgcmV0dXJuOwogICBpZiAoaXNIeWJyaWQpCiAgICAgcmV0dXJuOwotICBpZiAoZG9f bm90X3Jlc2V0X3N3aXRjaF90b19wY29uKQotICAgIHJldHVybjsKLSAgYWNxdWlyZV9vdXRwdXRf bXV0ZXggKElORklOSVRFKTsKLSAgaWYgKGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQp Ci0gICAgLyogV2FpdCBmb3IgcHR5X21hc3Rlcl9md2RfdGhyZWFkKCkgKi8KLSAgICBnZXRfdHR5 cCAoKS0+d2FpdF9wY29uX2Z3ZCAoKTsKICAgZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gMDsKICAg Z2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luID0gZmFsc2U7Ci0gIGdldF90dHlwICgpLT5z d2l0Y2hfdG9fcGNvbl9vdXQgPSBmYWxzZTsKLSAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7Ci0g IGluaXRfY29uc29sZV9oYW5kbGVyICh0cnVlKTsKLX0KLQotdm9pZAotZmhhbmRsZXJfcHR5X3Ns YXZlOjpwdXNoX3RvX3Bjb25fc2NyZWVuYnVmZmVyIChjb25zdCBjaGFyICpwdHIsIHNpemVfdCBs ZW4sCi0JCQkJCSAgICAgICBib29sIGlzX2VjaG8pCi17Ci0gIGJvb2wgYXR0YWNoZWQgPQotICAg ICEhZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZCAoZ2V0X2hlbHBlcl9w cm9jZXNzX2lkICgpLCB0cnVlKTsKLSAgaWYgKCFhdHRhY2hlZCAmJiBwY29uX2F0dGFjaGVkX3Rv ID09IGdldF9taW5vciAoKSkKLSAgICB7Ci0gICAgICBmb3IgKERXT1JEIHQwID0gR2V0VGlja0Nv dW50ICgpOyBHZXRUaWNrQ291bnQgKCkgLSB0MCA8IDEwMDsgKQotCXsKLQkgIFNsZWVwICgxKTsK LQkgIGF0dGFjaGVkID0gZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAot CQkJCSAgICAgIChnZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCksIHRydWUpOwotCSAgaWYgKGF0dGFj aGVkKQotCSAgICBicmVhazsKLQl9Ci0gICAgICBpZiAoIWF0dGFjaGVkKQotCXsKLQkgIHN5c3Rl bV9wcmludGYgKCJwdHklZDogcGNvbl9hdHRhY2hfdG8gbWlzbWF0Y2g/Pz8/Pz8iLCBnZXRfbWlu b3IgKCkpOwotCSAgcmV0dXJuOwotCX0KLSAgICB9Ci0KLSAgLyogSWYgbm90IGF0dGFjaGVkIHRv IHRoaXMgcHNldWRvIGNvbnNvbGUsIHRyeSB0byBhdHRhY2ggdGVtcG9yYXJpbHkuICovCi0gIHBp ZF9yZXN0b3JlID0gMDsKLSAgaWYgKHBjb25fYXR0YWNoZWRfdG8gIT0gZ2V0X21pbm9yICgpKQot ICAgIGlmICghdHJ5X3JlYXR0YWNoX3Bjb24gKCkpCi0gICAgICBnb3RvIGRldGFjaDsKLQotICBj aGFyICpidWY7Ci0gIHNpemVfdCBubGVuOwotICBEV09SRCBvcmlnQ1A7Ci0gIG9yaWdDUCA9IEdl dENvbnNvbGVPdXRwdXRDUCAoKTsKLSAgU2V0Q29uc29sZU91dHB1dENQIChnZXRfdHR5cCAoKS0+ dGVybV9jb2RlX3BhZ2UpOwotICAvKiBKdXN0IGNvcHkgKi8KLSAgYnVmID0gKGNoYXIgKikgSGVh cEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgbGVuKTsKLSAgbWVtY3B5IChidWYsIChjaGFy ICopcHRyLCBsZW4pOwotICBubGVuID0gbGVuOwotICBjaGFyICpwMCwgKnAxOwotICBwMCA9IHAx ID0gYnVmOwotICAvKiBSZW1vdmUgYWx0ZXJuYXRlIHNjcmVlbiBidWZmZXIgZHJhd2luZyAqLwot ICB3aGlsZSAocDAgJiYgcDEpCi0gICAgewotICAgICAgaWYgKCFnZXRfdHR5cCAoKS0+c2NyZWVu X2FsdGVybmF0ZWQpCi0JewotCSAgLyogQ2hlY2sgc3dpdGNoaW5nIHRvIGFsdGVybmF0ZSBzY3Jl ZW4gYnVmZmVyICovCi0JICBwMCA9IChjaGFyICopIG1lbW1lbSAocDEsIG5sZW4gLSAocDEtYnVm KSwgIlwwMzNbPzEwNDloIiwgOCk7Ci0JICBpZiAocDApCi0JICAgIHsKLQkgICAgICAvL3AwICs9 IDg7Ci0JICAgICAgZ2V0X3R0eXAgKCktPnNjcmVlbl9hbHRlcm5hdGVkID0gdHJ1ZTsKLQkgICAg ICBpZiAoZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCkKLQkJZG9fbm90X3Jlc2V0X3N3 aXRjaF90b19wY29uID0gdHJ1ZTsKLQkgICAgfQotCX0KLSAgICAgIGlmIChnZXRfdHR5cCAoKS0+ c2NyZWVuX2FsdGVybmF0ZWQpCi0JewotCSAgLyogQ2hlY2sgc3dpdGNoaW5nIHRvIG1haW4gc2Ny ZWVuIGJ1ZmZlciAqLwotCSAgcDEgPSAoY2hhciAqKSBtZW1tZW0gKHAwLCBubGVuIC0gKHAwLWJ1 ZiksICJcMDMzWz8xMDQ5bCIsIDgpOwotCSAgaWYgKHAxKQotCSAgICB7Ci0JICAgICAgcDEgKz0g ODsKLQkgICAgICBnZXRfdHR5cCAoKS0+c2NyZWVuX2FsdGVybmF0ZWQgPSBmYWxzZTsKLQkgICAg ICBkb19ub3RfcmVzZXRfc3dpdGNoX3RvX3Bjb24gPSBmYWxzZTsKLQkgICAgICBtZW1tb3ZlIChw MCwgcDEsIGJ1ZitubGVuIC0gcDEpOwotCSAgICAgIG5sZW4gLT0gcDEgLSBwMDsKLQkgICAgfQot CSAgZWxzZQotCSAgICBubGVuID0gcDAgLSBidWY7Ci0JfQotICAgIH0KLSAgaWYgKCFubGVuKSAv KiBOb3RoaW5nIHRvIGJlIHN5bmNocm9uaXplZCAqLwotICAgIGdvdG8gY2xlYW51cDsKLSAgaWYg KGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQgJiYgIWlzX2VjaG8pCi0gICAgZ290byBj bGVhbnVwOwotICAvKiBSZW1vdmUgRVNDIHNlcXVlbmNlIHdoaWNoIHJldHVybnMgcmVzdWx0cyB0 byBjb25zb2xlCi0gICAgIGlucHV0IGJ1ZmZlci4gV2l0aG91dCB0aGlzLCBjdXJzb3IgcG9zaXRp b24gcmVwb3J0Ci0gICAgIGlzIHB1dCBpbnRvIHRoZSBpbnB1dCBidWZmZXIgYXMgYSBnYXJiYWdl LiAqLwotICAvKiBSZW1vdmUgRVNDIHNlcXVlbmNlIHRvIHJlcG9ydCBjdXJzb3IgcG9zaXRpb24u ICovCi0gIHdoaWxlICgocDAgPSAoY2hhciAqKSBtZW1tZW0gKGJ1ZiwgbmxlbiwgIlwwMzNbNm4i LCA0KSkpCi0gICAgewotICAgICAgbWVtbW92ZSAocDAsIHAwKzQsIG5sZW4gLSAocDArNCAtIGJ1 ZikpOwotICAgICAgbmxlbiAtPSA0OwotICAgIH0KLSAgLyogUmVtb3ZlIEVTQyBzZXF1ZW5jZSB0 byByZXBvcnQgdGVybWluYWwgaWRlbnRpdHkuICovCi0gIHdoaWxlICgocDAgPSAoY2hhciAqKSBt ZW1tZW0gKGJ1ZiwgbmxlbiwgIlwwMzNbMGMiLCA0KSkpCi0gICAgewotICAgICAgbWVtbW92ZSAo cDAsIHAwKzQsIG5sZW4gLSAocDArNCAtIGJ1ZikpOwotICAgICAgbmxlbiAtPSA0OwotICAgIH0K LQotICAvKiBJZiB0aGUgRVNDIHNlcXVlbmNlIEVTQ1s/M2ggb3IgRVNDWz8zbCB3aGljaCBjbGVh cnMgY29uc29sZSBzY3JlZW4KLSAgICAgYnVmZmVyIGlzIHB1c2hlZCwgc2V0IG5lZWRfcmVkcmF3 X3NjcmVlbiB0byB0cmlnZ2VyIHJlZHJhdyBzY3JlZW4uICovCi0gIHAwID0gYnVmOwotICB3aGls ZSAoKHAwID0gKGNoYXIgKikgbWVtbWVtIChwMCwgbmxlbiAtIChwMCAtIGJ1ZiksICJcMDMzWz8i LCAzKSkpCi0gICAgewotICAgICAgcDAgKz0gMzsKLSAgICAgIGJvb2wgZXhpc3RfYXJnXzMgPSBm YWxzZTsKLSAgICAgIHdoaWxlIChwMCA8IGJ1ZiArIG5sZW4gJiYgKGlzZGlnaXQgKCpwMCkgfHwg KnAwID09ICc7JykpCi0JewotCSAgaW50IGFyZyA9IDA7Ci0JICB3aGlsZSAocDAgPCBidWYgKyBu bGVuICYmIGlzZGlnaXQgKCpwMCkpCi0JICAgIGFyZyA9IGFyZyAqIDEwICsgKCpwMCArKykgLSAn MCc7Ci0JICBpZiAoYXJnID09IDMpCi0JICAgIGV4aXN0X2FyZ18zID0gdHJ1ZTsKLQkgIGlmIChw MCA8IGJ1ZiArIG5sZW4gJiYgKnAwID09ICc7JykKLQkgICAgcDAgKys7Ci0JfQotICAgICAgaWYg KHAwIDwgYnVmICsgbmxlbiAmJiBleGlzdF9hcmdfMyAmJiAoKnAwID09ICdoJyB8fCAqcDAgPT0g J2wnKSkKLQlnZXRfdHR5cCAoKS0+bmVlZF9yZWRyYXdfc2NyZWVuID0gdHJ1ZTsKLSAgICAgIHAw ICsrOwotICAgICAgaWYgKHAwID49IGJ1ZiArIG5sZW4pCi0JYnJlYWs7Ci0gICAgfQotCi0gIGlu dCByZXRyeV9jb3VudDsKLSAgcmV0cnlfY291bnQgPSAwOwotICBEV09SRCBkd01vZGUsIGZsYWdz OwotICBmbGFncyA9IEVOQUJMRV9WSVJUVUFMX1RFUk1JTkFMX1BST0NFU1NJTkc7Ci0gIHdoaWxl ICghR2V0Q29uc29sZU1vZGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCAmZHdNb2RlKSkKLSAgICB7 Ci0gICAgICB0ZXJtaW9zX3ByaW50ZiAoIkdldENvbnNvbGVNb2RlIGZhaWxlZCwgJUUiKTsKLSAg ICAgIGludCBlcnJub19zYXZlID0gZXJybm87Ci0gICAgICAvKiBSZS1vcGVuIGhhbmRsZXMgKi8K LSAgICAgIHRoaXMtPm9wZW4gKDAsIDApOwotICAgICAgLyogRml4IHBzZXVkbyBjb25zb2xlIHdp bmRvdyBzaXplICovCi0gICAgICB0aGlzLT5pb2N0bCAoVElPQ1NXSU5TWiwgJmdldF90dHlwICgp LT53aW5zaXplKTsKLSAgICAgIGlmIChlcnJubyAhPSBlcnJub19zYXZlKQotCXNldF9lcnJubyAo ZXJybm9fc2F2ZSk7Ci0gICAgICBpZiAoKytyZXRyeV9jb3VudCA+IDMpCi0JZ290byBjbGVhbnVw OwotICAgIH0KLSAgaWYgKCEoZ2V0X3R0eXAgKCktPnRpLmNfb2ZsYWcgJiBPUE9TVCkgfHwKLSAg ICAgICEoZ2V0X3R0eXAgKCktPnRpLmNfb2ZsYWcgJiBPTkxDUikpCi0gICAgZmxhZ3MgfD0gRElT QUJMRV9ORVdMSU5FX0FVVE9fUkVUVVJOOwotICBTZXRDb25zb2xlTW9kZSAoZ2V0X291dHB1dF9o YW5kbGUgKCksIGR3TW9kZSB8IGZsYWdzKTsKLSAgY2hhciAqcDsKLSAgcCA9IGJ1ZjsKLSAgRFdP UkQgd0xlbiwgd3JpdHRlbjsKLSAgd3JpdHRlbiA9IDA7Ci0gIEJPT0wgKFdJTkFQSSAqV3JpdGVG dW5jKQotICAgIChIQU5ETEUsIExQQ1ZPSUQsIERXT1JELCBMUERXT1JELCBMUE9WRVJMQVBQRUQp OwotICBXcml0ZUZ1bmMgPSBXcml0ZUZpbGVfT3JpZyA/IFdyaXRlRmlsZV9PcmlnIDogV3JpdGVG aWxlOwotICB3aGlsZSAod3JpdHRlbiA8ICBubGVuKQotICAgIHsKLSAgICAgIGlmICghV3JpdGVG dW5jIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgcCwgbmxlbiAtIHdyaXR0ZW4sICZ3TGVuLCBOVUxM KSkKLQl7Ci0JICB0ZXJtaW9zX3ByaW50ZiAoIldyaXRlRmlsZSBmYWlsZWQsICVFIik7Ci0JICBi cmVhazsKLQl9Ci0gICAgICBlbHNlCi0JewotCSAgd3JpdHRlbiArPSB3TGVuOwotCSAgcCArPSB3 TGVuOwotCX0KLSAgICB9Ci0gIC8qIERldGFjaCBmcm9tIHBzZXVkbyBjb25zb2xlIGFuZCByZXN1 bWUuICovCi0gIGZsYWdzID0gRU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxfUFJPQ0VTU0lORzsKLSAg U2V0Q29uc29sZU1vZGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCBkd01vZGUgfCBmbGFncyk7Ci1j bGVhbnVwOgotICBTZXRDb25zb2xlT3V0cHV0Q1AgKG9yaWdDUCk7Ci0gIEhlYXBGcmVlIChHZXRQ cm9jZXNzSGVhcCAoKSwgMCwgYnVmKTsKLWRldGFjaDoKLSAgcmVzdG9yZV9yZWF0dGFjaF9wY29u ICgpOworICBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSA9IE5VTEw7CisgIGdldF90dHlw ICgpLT5wY29uX3N0YXJ0ID0gZmFsc2U7CiB9CiAKIHNzaXplX3QgX19zdGRjYWxsCkBAIC0xNTA1 LDQ0ICs3NzYsNyBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6OndyaXRlIChjb25zdCB2b2lkICpwdHIs IHNpemVfdCBsZW4pCiAgIHJlc2V0X3N3aXRjaF90b19wY29uICgpOwogCiAgIGFjcXVpcmVfb3V0 cHV0X211dGV4IChJTkZJTklURSk7Ci0gIGJvb2wgb3V0cHV0X3RvX3Bjb24gPSBnZXRfdHR5cCAo KS0+c3dpdGNoX3RvX3Bjb25fb3V0OwotICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKLQotICBV SU5UIHRhcmdldF9jb2RlX3BhZ2UgPSBvdXRwdXRfdG9fcGNvbiA/Ci0gICAgR2V0Q29uc29sZU91 dHB1dENQICgpIDogZ2V0X3R0eXAgKCktPnRlcm1fY29kZV9wYWdlOwotICBzc2l6ZV90IG5sZW47 Ci0gIGNoYXIgKmJ1ZiA9IGNvbnZlcnRfbWJfc3RyICh0YXJnZXRfY29kZV9wYWdlLCAoc2l6ZV90 ICopICZubGVuLAotCQkgZ2V0X3R0eXAgKCktPnRlcm1fY29kZV9wYWdlLCAoY29uc3QgY2hhciAq KSBwdHIsIGxlbik7Ci0KLSAgLyogSWYgbm90IGF0dGFjaGVkIHRvIHRoaXMgcHNldWRvIGNvbnNv bGUsIHRyeSB0byBhdHRhY2ggdGVtcG9yYXJpbHkuICovCi0gIHBpZF9yZXN0b3JlID0gMDsKLSAg Ym9vbCBmYWxsYmFjayA9IGZhbHNlOwotICBpZiAob3V0cHV0X3RvX3Bjb24gJiYgcGNvbl9hdHRh Y2hlZF90byAhPSBnZXRfbWlub3IgKCkpCi0gICAgaWYgKCF0cnlfcmVhdHRhY2hfcGNvbiAoKSkK LSAgICAgIGZhbGxiYWNrID0gdHJ1ZTsKLQotICBpZiAob3V0cHV0X3RvX3Bjb24gJiYgIWZhbGxi YWNrICYmCi0gICAgICAobWVtbWVtIChidWYsIG5sZW4sICJcMDMzWzZuIiwgNCkgfHwgbWVtbWVt IChidWYsIG5sZW4sICJcMDMzWzBjIiwgNCkpKQotICAgIHsKLSAgICAgIGdldF90dHlwICgpLT5w Y29uX2luX2VtcHR5ID0gZmFsc2U7Ci0gICAgICBpZiAoIWlzX2xpbmVfaW5wdXQgKCkpCi0JU2V0 RXZlbnQgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7Ci0gICAgfQotCi0gIERXT1JEIGR3TW9kZSwg ZmxhZ3M7Ci0gIGZsYWdzID0gRU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxfUFJPQ0VTU0lORzsKLSAg aWYgKCEoZ2V0X3R0eXAgKCktPnRpLmNfb2ZsYWcgJiBPUE9TVCkgfHwKLSAgICAgICEoZ2V0X3R0 eXAgKCktPnRpLmNfb2ZsYWcgJiBPTkxDUikpCi0gICAgZmxhZ3MgfD0gRElTQUJMRV9ORVdMSU5F X0FVVE9fUkVUVVJOOwotICBpZiAob3V0cHV0X3RvX3Bjb24gJiYgIWZhbGxiYWNrKQotICAgIHsK LSAgICAgIEdldENvbnNvbGVNb2RlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgJmR3TW9kZSk7Ci0g ICAgICBTZXRDb25zb2xlTW9kZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIGR3TW9kZSB8IGZsYWdz KTsKLSAgICB9Ci0gIEhBTkRMRSB0byA9IChvdXRwdXRfdG9fcGNvbiAmJiAhZmFsbGJhY2spID8K LSAgICBnZXRfb3V0cHV0X2hhbmRsZSAoKSA6IGdldF9vdXRwdXRfaGFuZGxlX2N5ZyAoKTsKLSAg YWNxdWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRFKTsKLSAgaWYgKCFwcm9jZXNzX29wb3N0X291 dHB1dCAodG8sIGJ1ZiwgbmxlbiwgZmFsc2UpKQorICBpZiAoIXByb2Nlc3Nfb3Bvc3Rfb3V0cHV0 IChnZXRfb3V0cHV0X2hhbmRsZV9jeWcgKCksIHB0ciwgdG93cml0ZSwgZmFsc2UpKQogICAgIHsK ICAgICAgIERXT1JEIGVyciA9IEdldExhc3RFcnJvciAoKTsKICAgICAgIHRlcm1pb3NfcHJpbnRm ICgiV3JpdGVGaWxlIGZhaWxlZCwgJUUiKTsKQEAgLTE1NTcsMjAgKzc5MSw2IEBAIGZoYW5kbGVy X3B0eV9zbGF2ZTo6d3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKICAgICAgIHRv d3JpdGUgPSAtMTsKICAgICB9CiAgIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwotICBtYl9zdHJf ZnJlZSAoYnVmKTsKLSAgZmxhZ3MgPSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9QUk9DRVNTSU5H OwotICBpZiAob3V0cHV0X3RvX3Bjb24gJiYgIWZhbGxiYWNrKQotICAgIFNldENvbnNvbGVNb2Rl IChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgZHdNb2RlIHwgZmxhZ3MpOwotCi0gIHJlc3RvcmVfcmVh dHRhY2hfcGNvbiAoKTsKLQotICAvKiBQdXNoIHNsYXZlIG91dHB1dCB0byBwc2V1ZG8gY29uc29s ZSBzY3JlZW4gYnVmZmVyICovCi0gIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewot ICAgICAgYWNxdWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRFKTsKLSAgICAgIHB1c2hfdG9fcGNv bl9zY3JlZW5idWZmZXIgKChjaGFyICopcHRyLCBsZW4sIGZhbHNlKTsKLSAgICAgIHJlbGVhc2Vf b3V0cHV0X211dGV4ICgpOwotICAgIH0KIAogICByZXR1cm4gdG93cml0ZTsKIH0KQEAgLTE1ODIs MTYgKzgwMiwxNSBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6Om1hc2tfc3dpdGNoX3RvX3Bjb25faW4g KGJvb2wgbWFzaykKIH0KIAogYm9vbAotZmhhbmRsZXJfcHR5X2NvbW1vbjo6dG9fYmVfcmVhZF9m cm9tX3Bjb24gKHZvaWQpCitmaGFuZGxlcl9wdHlfbWFzdGVyOjp0b19iZV9yZWFkX2Zyb21fcGNv biAodm9pZCkKIHsKLSAgcmV0dXJuICFnZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSB8fAotICAg IChnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gJiYgIWdldF90dHlwICgpLT5tYXNrX3N3 aXRjaF90b19wY29uX2luKTsKKyAgcmV0dXJuIGdldF90dHlwICgpLT5wY29uX3N0YXJ0CisgICAg fHwgKGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9pbiAmJiAhZ2V0X3R0eXAgKCktPm1hc2tf c3dpdGNoX3RvX3Bjb25faW4pOwogfQogCiB2b2lkIF9fcmVnMwogZmhhbmRsZXJfcHR5X3NsYXZl OjpyZWFkICh2b2lkICpwdHIsIHNpemVfdCYgbGVuKQogewotICBjaGFyICpwdHIwID0gKGNoYXIg KilwdHI7CiAgIHNzaXplX3QgdG90YWxyZWFkID0gMDsKICAgaW50IHZtaW4gPSAwOwogICBpbnQg dnRpbWUgPSAwOwkvKiBJbml0aWFsaXplZCB0byBwcmV2ZW50IC1XdW5pbml0aWFsaXplZCB3YXJu aW5nICovCkBAIC0xNjE2LDggKzgzNSw2IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6cmVhZCAodm9p ZCAqcHRyLCBzaXplX3QmIGxlbikKICAgICAgIG1hc2tfc3dpdGNoX3RvX3Bjb25faW4gKHRydWUp OwogICAgICAgcmVzZXRfc3dpdGNoX3RvX3Bjb24gKCk7CiAgICAgfQotICBpZiAodG9fYmVfcmVh ZF9mcm9tX3Bjb24gKCkpCi0gICAgdXBkYXRlX3Bjb25faW5wdXRfc3RhdGUgKHRydWUpOwogCiAg IGlmIChpc19ub25ibG9ja2luZyAoKSB8fCAhcHRyKSAvKiBJbmRpY2F0aW5nIHRjZmx1c2goKS4g Ki8KICAgICB0aW1lX3RvX3dhaXQgPSAwOwpAQCAtMTcwMyw5OCArOTIwLDIxIEBAIGZoYW5kbGVy X3B0eV9zbGF2ZTo6cmVhZCAodm9pZCAqcHRyLCBzaXplX3QmIGxlbikKIAkgICAgICBpZiAoIXRv dGFscmVhZCkKIAkJewogCQkgIHNldF9zaWdfZXJybm8gKEVBR0FJTik7Ci0JCSAgdG90YWxyZWFk ID0gLTE7Ci0JCX0KLQkgICAgICBnb3RvIG91dDsKLQkgICAgfQotCSAgY29udGludWU7Ci0JZGVm YXVsdDoKLQkgIHRlcm1pb3NfcHJpbnRmICgid2FpdCBmb3IgaW5wdXQgbXV0ZXggZmFpbGVkLCAl RSIpOwotCSAgaWYgKCF0b3RhbHJlYWQpCi0JICAgIHsKLQkgICAgICBfX3NldGVycm5vICgpOwot CSAgICAgIHRvdGFscmVhZCA9IC0xOwotCSAgICB9Ci0JICBnb3RvIG91dDsKLQl9Ci0gICAgICBp ZiAocHRyICYmIHRvX2JlX3JlYWRfZnJvbV9wY29uICgpKQotCXsKLQkgIGlmIChnZXRfcmVhZGFo ZWFkX3ZhbGlkICgpKQotCSAgICB7Ci0JICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7 Ci0JICAgICAgdG90YWxyZWFkID0gZ2V0X3JlYWRhaGVhZF9pbnRvX2J1ZmZlciAoKGNoYXIgKikg cHRyLCBsZW4pOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBpZiAoIXRyeV9yZWF0 dGFjaF9wY29uICgpKQotCQl7Ci0JCSAgcmVzdG9yZV9yZWF0dGFjaF9wY29uICgpOwotCQkgIGdv dG8gZG9fcmVhZF9jeWc7Ci0JCX0KLQotCSAgICAgIERXT1JEIGR3TW9kZTsKLQkgICAgICBHZXRD b25zb2xlTW9kZSAoZ2V0X2hhbmRsZSAoKSwgJmR3TW9kZSk7Ci0JICAgICAgRFdPUkQgZmxhZ3Mg PSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9JTlBVVDsKLQkgICAgICBpZiAoZHdNb2RlICE9IGZs YWdzKQotCQlTZXRDb25zb2xlTW9kZSAoZ2V0X2hhbmRsZSAoKSwgZmxhZ3MpOwotCSAgICAgIC8q IFJlYWQgZ2V0X2hhbmRsZSgpIGluc3RhZCBvZiBnZXRfaGFuZGxlX2N5ZygpICovCi0JICAgICAg Qk9PTCAoV0lOQVBJICpSZWFkRnVuYykKLQkJKEhBTkRMRSwgTFBWT0lELCBEV09SRCwgTFBEV09S RCwgTFBWT0lEKTsKLQkgICAgICBSZWFkRnVuYyA9IFJlYWRDb25zb2xlQV9PcmlnID8gUmVhZENv bnNvbGVBX09yaWcgOiBSZWFkQ29uc29sZUE7Ci0JICAgICAgRFdPUkQgcmxlbjsKLQkgICAgICBy ZWFkbGVuID0gTUlOIChsZW4sIHNpemVvZiAoYnVmKSk7Ci0JICAgICAgaWYgKCFSZWFkRnVuYyAo Z2V0X2hhbmRsZSAoKSwgYnVmLCByZWFkbGVuLCAmcmxlbiwgTlVMTCkpCi0JCXsKLQkJICB0ZXJt aW9zX3ByaW50ZiAoInJlYWQgZmFpbGVkLCAlRSIpOwotCQkgIFNldENvbnNvbGVNb2RlIChnZXRf aGFuZGxlICgpLCBkd01vZGUpOwotCQkgIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLQkJICBS ZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKLQkJICBzZXRfZXJybm8gKEVJTyk7Ci0JCSAgdG90 YWxyZWFkID0gLTE7Ci0JCSAgZ290byBvdXQ7Ci0JCX0KLQkgICAgICBTZXRDb25zb2xlTW9kZSAo Z2V0X2hhbmRsZSAoKSwgZHdNb2RlKTsKLQkgICAgICByZXN0b3JlX3JlYXR0YWNoX3Bjb24gKCk7 Ci0JICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7Ci0KLQkgICAgICBzc2l6ZV90IG5s ZW47Ci0JICAgICAgY2hhciAqbmJ1ZiA9IGNvbnZlcnRfbWJfc3RyIChnZXRfdHR5cCAoKS0+dGVy bV9jb2RlX3BhZ2UsCi0JCQkgICAgIChzaXplX3QgKikgJm5sZW4sIEdldENvbnNvbGVDUCAoKSwg YnVmLCBybGVuKTsKLQotCSAgICAgIHNzaXplX3QgcmV0OwotCSAgICAgIGxpbmVfZWRpdF9zdGF0 dXMgcmVzID0KLQkJbGluZV9lZGl0IChuYnVmLCBubGVuLCBnZXRfdHR5cCAoKS0+dGksICZyZXQp OwotCi0JICAgICAgbWJfc3RyX2ZyZWUgKG5idWYpOwotCi0JICAgICAgaWYgKHJlcyA9PSBsaW5l X2VkaXRfaW5wdXRfZG9uZSB8fCByZXMgPT0gbGluZV9lZGl0X29rKQotCQl0b3RhbHJlYWQgPSBn ZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyICgoY2hhciAqKSBwdHIsIGxlbik7Ci0JICAgICAgZWxz ZSBpZiAocmVzID4gbGluZV9lZGl0X3NpZ25hbGxlZCkKLQkJewotCQkgIHNldF9zaWdfZXJybm8g KEVJTlRSKTsKLQkJICB0b3RhbHJlYWQgPSAtMTsKLQkJfQotCSAgICAgIGVsc2UKLQkJewotCQkg IHVwZGF0ZV9wY29uX2lucHV0X3N0YXRlICh0cnVlKTsKLQkJICBjb250aW51ZTsKKwkJICB0b3Rh bHJlYWQgPSAtMTsKIAkJfQorCSAgICAgIGdvdG8gb3V0OworCSAgICB9CisJICBjb250aW51ZTsK KwlkZWZhdWx0OgorCSAgdGVybWlvc19wcmludGYgKCJ3YWl0IGZvciBpbnB1dCBtdXRleCBmYWls ZWQsICVFIik7CisJICBpZiAoIXRvdGFscmVhZCkKKwkgICAgeworCSAgICAgIF9fc2V0ZXJybm8g KCk7CisJICAgICAgdG90YWxyZWFkID0gLTE7CiAJICAgIH0KLQotCSAgdXBkYXRlX3Bjb25faW5w dXRfc3RhdGUgKHRydWUpOwotCSAgbWFza19zd2l0Y2hfdG9fcGNvbl9pbiAoZmFsc2UpOwogCSAg Z290byBvdXQ7CiAJfQotICAgICAgaWYgKCFwdHIgJiYgbGVuID09IFVJTlRfTUFYICYmICFnZXRf dHR5cCAoKS0+cGNvbl9pbl9lbXB0eSkKLQl7Ci0JICBGbHVzaENvbnNvbGVJbnB1dEJ1ZmZlciAo Z2V0X2hhbmRsZSAoKSk7Ci0JICBnZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSA9IHRydWU7Ci0J ICBEV09SRCBuOwotCSAgaWYgKGJ5dGVzX2F2YWlsYWJsZSAobikgJiYgbiA9PSAwKQotCSAgICBS ZXNldEV2ZW50IChpbnB1dF9hdmFpbGFibGVfZXZlbnQpOwotCX0KIAotZG9fcmVhZF9jeWc6CiAg ICAgICBpZiAoIWJ5dGVzX2F2YWlsYWJsZSAoYnl0ZXNfaW5fcGlwZSkpCiAJewogCSAgUmVsZWFz ZU11dGV4IChpbnB1dF9tdXRleCk7CkBAIC0xOTExLDE2ICsxMDUxLDYgQEAgZG9fcmVhZF9jeWc6 CiBvdXQ6CiAgIHRlcm1pb3NfcHJpbnRmICgiJWQgPSByZWFkKCVwLCAlbHUpIiwgdG90YWxyZWFk LCBwdHIsIGxlbik7CiAgIGxlbiA9IChzaXplX3QpIHRvdGFscmVhZDsKLSAgLyogUHVzaCBzbGF2 ZSByZWFkIGFzIGVjaG8gdG8gcHNldWRvIGNvbnNvbGUgc2NyZWVuIGJ1ZmZlci4gKi8KLSAgaWYg KGdldF9wc2V1ZG9fY29uc29sZSAoKSAmJiBwdHIwICYmIHRvdGFscmVhZCA+IDAgJiYKLSAgICAg IChnZXRfdHR5cCAoKS0+dGkuY19sZmxhZyAmIEVDSE8pKQotICAgIHsKLSAgICAgIGFjcXVpcmVf b3V0cHV0X211dGV4IChJTkZJTklURSk7Ci0gICAgICBwdXNoX3RvX3Bjb25fc2NyZWVuYnVmZmVy IChwdHIwLCBsZW4sIHRydWUpOwotICAgICAgaWYgKGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNv bl9vdXQpCi0JdHJpZ2dlcl9yZWRyYXdfc2NyZWVuICgpOwotICAgICAgcmVsZWFzZV9vdXRwdXRf bXV0ZXggKCk7Ci0gICAgfQogICBtYXNrX3N3aXRjaF90b19wY29uX2luIChmYWxzZSk7CiB9CiAK QEAgLTIwNjEsMzggKzExOTEsMTEgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjppb2N0bCAodW5zaWdu ZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogICAgICAgZ2V0X3R0eXAgKCktPndpbnNpemUgPSBnZXRf dHR5cCAoKS0+YXJnLndpbnNpemU7CiAgICAgICBicmVhazsKICAgICBjYXNlIFRJT0NTV0lOU1o6 Ci0gICAgICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQotCXsKLQkgIC8qIElmIG5vdCBhdHRh Y2hlZCB0byB0aGlzIHBzZXVkbyBjb25zb2xlLAotCSAgICAgdHJ5IHRvIGF0dGFjaCB0ZW1wb3Jh cmlseS4gKi8KLQkgIHBpZF9yZXN0b3JlID0gMDsKLQkgIGlmIChwY29uX2F0dGFjaGVkX3RvICE9 IGdldF9taW5vciAoKSkKLQkgICAgaWYgKCF0cnlfcmVhdHRhY2hfcGNvbiAoKSkKLQkgICAgICBn b3RvIGNsZWFudXA7Ci0KLQkgIENPT1JEIHNpemU7Ci0JICBzaXplLlggPSAoKHN0cnVjdCB3aW5z aXplICopIGFyZyktPndzX2NvbDsKLQkgIHNpemUuWSA9ICgoc3RydWN0IHdpbnNpemUgKikgYXJn KS0+d3Nfcm93OwotCSAgQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8gY3NiaTsKLQkgIGlmIChH ZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyAoZ2V0X291dHB1dF9oYW5kbGUgKCksICZjc2JpKSkK LQkgICAgaWYgKHNpemUuWCA9PSBjc2JpLnNyV2luZG93LlJpZ2h0IC0gY3NiaS5zcldpbmRvdy5M ZWZ0ICsgMSAmJgotCQlzaXplLlkgPT0gY3NiaS5zcldpbmRvdy5Cb3R0b20gLSBjc2JpLnNyV2lu ZG93LlRvcCArIDEpCi0JICAgICAgZ290byBjbGVhbnVwOwotCSAgaWYgKCFTZXRDb25zb2xlU2Ny ZWVuQnVmZmVyU2l6ZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIHNpemUpKQotCSAgICBnb3RvIGNs ZWFudXA7Ci0JICBTTUFMTF9SRUNUIHJlY3Q7Ci0JICByZWN0LkxlZnQgPSAwOwotCSAgcmVjdC5U b3AgPSAwOwotCSAgcmVjdC5SaWdodCA9IHNpemUuWC0xOwotCSAgcmVjdC5Cb3R0b20gPSBzaXpl LlktMTsKLQkgIFNldENvbnNvbGVXaW5kb3dJbmZvIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgVFJV RSwgJnJlY3QpOwotY2xlYW51cDoKLQkgIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLQl9Ci0K ICAgICAgIGlmIChnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19yb3cgIT0gKChzdHJ1Y3Qgd2luc2l6 ZSAqKSBhcmcpLT53c19yb3cKIAkgIHx8IGdldF90dHlwICgpLT53aW5zaXplLndzX2NvbCAhPSAo KHN0cnVjdCB3aW5zaXplICopIGFyZyktPndzX2NvbCkKIAl7CisJICBpZiAoZ2V0X3R0eXAgKCkt PmhfcHNldWRvX2NvbnNvbGUgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlkKQorCSAgICByZXNpemVf cHNldWRvX2NvbnNvbGUgKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpOwogCSAgZ2V0X3R0eXAgKCkt PmFyZy53aW5zaXplID0gKihzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmc7CiAJICBnZXRfdHR5cCAoKS0+ d2luc2l6ZSA9ICooc3RydWN0IHdpbnNpemUgKikgYXJnOwogCSAgZ2V0X3R0eXAgKCktPmtpbGxf cGdycCAoU0lHV0lOQ0gpOwpAQCAtMjM3OCw2ICsxNDgxLDI3IEBAIGZoYW5kbGVyX3B0eV9jb21t b246OmNsb3NlICgpCiAgIHJldHVybiAwOwogfQogCit2b2lkCitmaGFuZGxlcl9wdHlfY29tbW9u OjpyZXNpemVfcHNldWRvX2NvbnNvbGUgKHN0cnVjdCB3aW5zaXplICp3cykKK3sKKyAgQ09PUkQg c2l6ZTsKKyAgc2l6ZS5YID0gd3MtPndzX2NvbDsKKyAgc2l6ZS5ZID0gd3MtPndzX3JvdzsKKyAg cGluZm8gcCAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKTsKKyAgaWYgKHApCisgICAgeworICAgICAg SFBDT05fSU5URVJOQUwgaHBjb25fbG9jYWw7CisgICAgICBIQU5ETEUgcGNvbl9vd25lciA9CisJ T3BlblByb2Nlc3MgKFBST0NFU1NfRFVQX0hBTkRMRSwgRkFMU0UsIHAtPmV4ZWNfZHdQcm9jZXNz SWQpOworICAgICAgRHVwbGljYXRlSGFuZGxlIChwY29uX293bmVyLCBnZXRfdHR5cCAoKS0+aF9w Y29uX3dyaXRlX3BpcGUsCisJCSAgICAgICBHZXRDdXJyZW50UHJvY2VzcyAoKSwgJmhwY29uX2xv Y2FsLmhXcml0ZVBpcGUsCisJCSAgICAgICAwLCBUUlVFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1Mp OworICAgICAgUmVzaXplUHNldWRvQ29uc29sZSAoKEhQQ09OKSAmaHBjb25fbG9jYWwsIHNpemUp OworICAgICAgQ2xvc2VIYW5kbGUgKHBjb25fb3duZXIpOworICAgICAgQ2xvc2VIYW5kbGUgKGhw Y29uX2xvY2FsLmhXcml0ZVBpcGUpOworICAgIH0KK30KKwogdm9pZAogZmhhbmRsZXJfcHR5X21h c3Rlcjo6Y2xlYW51cCAoKQogewpAQCAtMjM5Myw3ICsxNTE3LDYgQEAgZmhhbmRsZXJfcHR5X21h c3Rlcjo6Y2xvc2UgKCkKIHsKICAgT0JKRUNUX0JBU0lDX0lORk9STUFUSU9OIG9iaTsKICAgTlRT VEFUVVMgc3RhdHVzOwotICBwaWRfdCBtYXN0ZXJfcGlkX3RtcCA9IGdldF90dHlwICgpLT5tYXN0 ZXJfcGlkOwogCiAgIHRlcm1pb3NfcHJpbnRmICgiY2xvc2luZyBmcm9tX21hc3RlciglcCkvZnJv bV9tYXN0ZXJfY3lnKCVwKS90b19tYXN0ZXIoJXApL3RvX21hc3Rlcl9jeWcoJXApIHNpbmNlIHdl IG93biB0aGVtKCV1KSIsCiAJCSAgZnJvbV9tYXN0ZXIsIGZyb21fbWFzdGVyX2N5ZywKQEAgLTI0 MzgsMzAgKzE1NjEsNiBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpjbG9zZSAoKQogICBlbHNlIGlm IChvYmkuSGFuZGxlQ291bnQgPT0gMSkKICAgICB7CiAgICAgICB0ZXJtaW9zX3ByaW50ZiAoIkNs b3NpbmcgbGFzdCBtYXN0ZXIgb2YgcHR5JWQiLCBnZXRfbWlub3IgKCkpOwotICAgICAgLyogQ2xv c2UgUHNldWRvIENvbnNvbGUgKi8KLSAgICAgIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0J ewotCSAgLyogVGVybWluYXRlIGhlbHBlciBwcm9jZXNzICovCi0JICBTZXRFdmVudCAoZ2V0X3R0 eXAgKCktPmhfaGVscGVyX2dvb2RieWUpOwotCSAgV2FpdEZvclNpbmdsZU9iamVjdCAoZ2V0X3R0 eXAgKCktPmhfaGVscGVyX3Byb2Nlc3MsIElORklOSVRFKTsKLQkgIENsb3NlSGFuZGxlIChnZXRf dHR5cCAoKS0+aF9oZWxwZXJfZ29vZGJ5ZSk7Ci0JICBDbG9zZUhhbmRsZSAoZ2V0X3R0eXAgKCkt PmhfaGVscGVyX3Byb2Nlc3MpOwotCSAgLyogRklYTUU6IFBzZXVkbyBjb25zb2xlIGNhbiBiZSBh Y2Nlc3NlZCB2aWEgaXRzIGhhbmRsZQotCSAgICAgb25seSBpbiB0aGUgcHJvY2VzcyB3aGljaCBj cmVhdGVkIGl0LiBXaGF0IGVsc2UgY2FuIHdlIGRvPyAqLwotCSAgaWYgKG1hc3Rlcl9waWRfdG1w ID09IG15c2VsZi0+cGlkKQotCSAgICB7Ci0JICAgICAgLyogQ2xvc2VQc2V1ZG9Db25zb2xlKCkg c2VlbXMgdG8gaGF2ZSBhIGJ1ZyB0aGF0IG9uZQotCQkgaW50ZXJuYWwgaGFuZGxlIHJlbWFpbnMg b3BlbmVkLiBUaGlzIGNhdXNlcyBoYW5kbGUgbGVhay4KLQkJIFRoaXMgaXMgYSB3b3JrYXJvdW5k IGZvciB0aGlzIHByb2JsZW0uICovCi0JICAgICAgSFBDT05fSU5URVJOQUwgKmhwID0gKEhQQ09O X0lOVEVSTkFMICopIGdldF9wc2V1ZG9fY29uc29sZSAoKTsKLQkgICAgICBIQU5ETEUgdG1wID0g aHAtPmhDb25Ib3N0UHJvY2VzczsKLQkgICAgICAvKiBSZWxlYXNlIHBzZXVkbyBjb25zb2xlICov Ci0JICAgICAgQ2xvc2VQc2V1ZG9Db25zb2xlIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpOwotCSAg ICAgIENsb3NlSGFuZGxlICh0bXApOwotCSAgICB9Ci0JICBnZXRfdHR5cCAoKS0+c3dpdGNoX3Rv X3Bjb25faW4gPSBmYWxzZTsKLQkgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQgPSBm YWxzZTsKLQl9CiAgICAgICBpZiAoZ2V0X3R0eXAgKCktPmdldHNpZCAoKSA+IDApCiAJa2lsbCAo Z2V0X3R0eXAgKCktPmdldHNpZCAoKSwgU0lHSFVQKTsKICAgICAgIFNldEV2ZW50IChpbnB1dF9h dmFpbGFibGVfZXZlbnQpOwpAQCAtMjQ2OSw5ICsxNTY4LDggQEAgZmhhbmRsZXJfcHR5X21hc3Rl cjo6Y2xvc2UgKCkKIAogICBpZiAoIUZvcmNlQ2xvc2VIYW5kbGUgKGZyb21fbWFzdGVyKSkKICAg ICB0ZXJtaW9zX3ByaW50ZiAoImVycm9yIGNsb3NpbmcgZnJvbV9tYXN0ZXIgJXAsICVFIiwgZnJv bV9tYXN0ZXIpOwotICBpZiAoZnJvbV9tYXN0ZXJfY3lnICE9IGZyb21fbWFzdGVyKSAvKiBBdm9p ZCBkb3VibGUgY2xvc2UuICovCi0gICAgaWYgKCFGb3JjZUNsb3NlSGFuZGxlIChmcm9tX21hc3Rl cl9jeWcpKQotICAgICAgdGVybWlvc19wcmludGYgKCJlcnJvciBjbG9zaW5nIGZyb21fbWFzdGVy X2N5ZyAlcCwgJUUiLCBmcm9tX21hc3Rlcl9jeWcpOworICBpZiAoIUZvcmNlQ2xvc2VIYW5kbGUg KGZyb21fbWFzdGVyX2N5ZykpCisgICAgdGVybWlvc19wcmludGYgKCJlcnJvciBjbG9zaW5nIGZy b21fbWFzdGVyX2N5ZyAlcCwgJUUiLCBmcm9tX21hc3Rlcl9jeWcpOwogICBpZiAoIUZvcmNlQ2xv c2VIYW5kbGUgKHRvX21hc3RlcikpCiAgICAgdGVybWlvc19wcmludGYgKCJlcnJvciBjbG9zaW5n IHRvX21hc3RlciAlcCwgJUUiLCB0b19tYXN0ZXIpOwogICBmcm9tX21hc3RlciA9IHRvX21hc3Rl ciA9IE5VTEw7CkBAIC0yNTEzLDcgKzE2MTEsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjp3cml0 ZSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuKQogCiAgIC8qIFdyaXRlIHRlcm1pbmFsIGlu cHV0IHRvIHRvX3NsYXZlIHBpcGUgaW5zdGVhZCBvZiBvdXRwdXRfaGFuZGxlCiAgICAgIGlmIGN1 cnJlbnQgYXBwbGljYXRpb24gaXMgbmF0aXZlIGNvbnNvbGUgYXBwbGljYXRpb24uICovCi0gIGlm ICh0b19iZV9yZWFkX2Zyb21fcGNvbiAoKSkKKyAgaWYgKHRvX2JlX3JlYWRfZnJvbV9wY29uICgp ICYmIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKQogICAgIHsKICAgICAgIHNpemVfdCBu bGVuOwogICAgICAgY2hhciAqYnVmID0gY29udmVydF9tYl9zdHIKQEAgLTI1MjEsNDAgKzE2MTks NTAgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6d3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90 IGxlbikKIAogICAgICAgV2FpdEZvclNpbmdsZU9iamVjdCAoaW5wdXRfbXV0ZXgsIElORklOSVRF KTsKIAotICAgICAgaWYgKG1lbWNociAoYnVmLCAnXDAwMycsIG5sZW4pKSAvKiBeQyBpbnRyIGtl eSBpbiBwY29uICovCi0JZ2V0X3R0eXAgKCktPnJlcV9mbHVzaF9wY29uX2lucHV0ID0gdHJ1ZTsK LQogICAgICAgRFdPUkQgd0xlbjsKLSAgICAgIFdyaXRlRmlsZSAodG9fc2xhdmUsIGJ1Ziwgbmxl biwgJndMZW4sIE5VTEwpOwotICAgICAgZ2V0X3R0eXAgKCktPnBjb25faW5fZW1wdHkgPSBmYWxz ZTsKLQotICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7CiAKLSAgICAgIC8qIFVzZSBs aW5lX2VkaXQgKCkgaW4gb3JkZXIgdG8gc2V0IGlucHV0X2F2YWlsYWJsZV9ldmVudC4gKi8KLSAg ICAgIGJvb2wgaXNfZWNobyA9IHRjICgpLT50aS5jX2xmbGFnICYgRUNITzsKLSAgICAgIGlmICgh Z2V0X3R0eXAgKCktPm1hc2tfc3dpdGNoX3RvX3Bjb25faW4pCisgICAgICBpZiAoZ2V0X3R0eXAg KCktPnBjb25fc3RhcnQpCiAJewotCSAgdGMgKCktPnRpLmNfbGZsYWcgJj0gfkVDSE87Ci0JICB0 aS5jX2xmbGFnICY9IH5FQ0hPOwotCX0KLSAgICAgIHRpLmNfbGZsYWcgJj0gfklTSUc7Ci0gICAg ICBsaW5lX2VkaXQgKGJ1ZiwgbmxlbiwgdGksICZyZXQpOwotICAgICAgaWYgKGlzX2VjaG8pCi0J dGMgKCktPnRpLmNfbGZsYWcgfD0gRUNITzsKLSAgICAgIGdldF90dHlwICgpLT5yZWFkX3JldHZh bCA9IDE7Ci0KLSAgICAgIGNvbnN0IGNoYXIgc2lnc1tdID0gewotCShjaGFyKSB0aS5jX2NjW1ZJ TlRSXSwKLQkoY2hhcikgdGkuY19jY1tWUVVJVF0sCi0JKGNoYXIpIHRpLmNfY2NbVlNVU1BdLAot ICAgICAgfTsKLSAgICAgIGlmICh0YyAoKS0+dGkuY19sZmxhZyAmIElTSUcpCi0JZm9yIChzaXpl X3QgaT0wOyBpPHNpemVvZiAoc2lncyk7IGkrKykKLQkgIGlmIChzaWdzW2ldICYmIG1lbWNociAo YnVmLCBzaWdzW2ldLCBubGVuKSkKKwkgIC8qIFBzZXVkbyBjb25kb2xlIHN1cHBvcnQgdXNlcyAi Q1NJNm4iIHRvIGdldCBjdXJzb3IgcG9zaXRpb24uCisJICAgICBJZiB0aGUgcmVwbHkgZm9yICJD U0k2biIgaXMgZGl2aWRlZCBpbnRvIG11bHRpcGxlIHdyaXRlcywKKwkgICAgIHBzZXVkbyBjb25z b2xlIHNvbWV0aW1lcyBkb2VzIG5vdCByZWNvZ25pemUgaXQuICBUaGVyZWZvcmUsCisJICAgICBw dXQgdGhlbSB0b2dldGhlciBpbnRvIHdwYnVmIGFuZCB3cml0ZSBhbGwgYXQgb25jZS4gKi8KKwkg IHN0YXRpYyBjb25zdCBpbnQgd3BidWZfbGVuID0gNjQ7CisJICBzdGF0aWMgY2hhciB3cGJ1Zlt3 cGJ1Zl9sZW5dOworCSAgc3RhdGljIGludCBpeHB1dCA9IDA7CisKKwkgIGlmIChpeHB1dCA9PSAw ICYmIGJ1ZlswXSAhPSAnXDAzMycpCisJICAgIHsgLyogZmFpbC1zYWZlICovCisJICAgICAgV3Jp dGVGaWxlICh0b19zbGF2ZSwgIlwwMzNbMTsxUiIsIDYsICZ3TGVuLCBOVUxMKTsgLyogZHVtbXkg Ki8KKwkgICAgICBnZXRfdHR5cCAoKS0+cGNvbl9zdGFydCA9IGZhbHNlOworCSAgICB9CisJICBl bHNlCiAJICAgIHsKLQkgICAgICBlYXRfcmVhZGFoZWFkICgtMSk7Ci0JICAgICAgU2V0RXZlbnQg KGlucHV0X2F2YWlsYWJsZV9ldmVudCk7CisJICAgICAgaWYgKGl4cHV0ICsgbmxlbiA8IHdwYnVm X2xlbikKKwkJZm9yIChzaXplX3QgaT0wOyBpPG5sZW47IGkrKykKKwkJICB3cGJ1ZltpeHB1dCsr XSA9IGJ1ZltpXTsKKwkgICAgICBlbHNlCisJCXsKKwkJICBXcml0ZUZpbGUgKHRvX3NsYXZlLCB3 cGJ1ZiwgaXhwdXQsICZ3TGVuLCBOVUxMKTsKKwkJICBpeHB1dCA9IDA7CisJCSAgZ2V0X3R0eXAg KCktPnBjb25fc3RhcnQgPSBmYWxzZTsKKwkJICBXcml0ZUZpbGUgKHRvX3NsYXZlLCBidWYsIG5s ZW4sICZ3TGVuLCBOVUxMKTsKKwkJfQorCSAgICAgIGlmIChpeHB1dCAmJiBtZW1jaHIgKHdwYnVm LCAnUicsIGl4cHV0KSkKKwkJeworCQkgIFdyaXRlRmlsZSAodG9fc2xhdmUsIHdwYnVmLCBpeHB1 dCwgJndMZW4sIE5VTEwpOworCQkgIGl4cHV0ID0gMDsKKwkJICBnZXRfdHR5cCAoKS0+cGNvbl9z dGFydCA9IGZhbHNlOworCQl9CisJICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7CisJ ICAgICAgbWJfc3RyX2ZyZWUgKGJ1Zik7CisJICAgICAgcmV0dXJuIGxlbjsKIAkgICAgfQorCX0K KworICAgICAgV3JpdGVGaWxlICh0b19zbGF2ZSwgYnVmLCBubGVuLCAmd0xlbiwgTlVMTCk7CisK KyAgICAgIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwogCiAgICAgICBtYl9zdHJfZnJlZSAo YnVmKTsKICAgICAgIHJldHVybiBsZW47CkBAIC0yNjMwLDE1ICsxNzM4LDggQEAgZmhhbmRsZXJf cHR5X21hc3Rlcjo6aW9jdGwgKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKICAgICAgIGlm IChnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19yb3cgIT0gKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcp LT53c19yb3cKIAkgIHx8IGdldF90dHlwICgpLT53aW5zaXplLndzX2NvbCAhPSAoKHN0cnVjdCB3 aW5zaXplICopIGFyZyktPndzX2NvbCkKIAl7Ci0JICAvKiBGSVhNRTogUHNldWRvIGNvbnNvbGUg Y2FuIGJlIGFjY2Vzc2VkIHZpYSBpdHMgaGFuZGxlCi0JICAgICBvbmx5IGluIHRoZSBwcm9jZXNz IHdoaWNoIGNyZWF0ZWQgaXQuIFdoYXQgZWxzZSBjYW4gd2UgZG8/ICovCi0JICBpZiAoZ2V0X3Bz ZXVkb19jb25zb2xlICgpICYmIGdldF90dHlwICgpLT5tYXN0ZXJfcGlkID09IG15c2VsZi0+cGlk KQotCSAgICB7Ci0JICAgICAgQ09PUkQgc2l6ZTsKLQkgICAgICBzaXplLlggPSAoKHN0cnVjdCB3 aW5zaXplICopIGFyZyktPndzX2NvbDsKLQkgICAgICBzaXplLlkgPSAoKHN0cnVjdCB3aW5zaXpl ICopIGFyZyktPndzX3JvdzsKLQkgICAgICBSZXNpemVQc2V1ZG9Db25zb2xlIChnZXRfcHNldWRv X2NvbnNvbGUgKCksIHNpemUpOwotCSAgICB9CisJICBpZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRv X2NvbnNvbGUgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlkKQorCSAgICByZXNpemVfcHNldWRvX2Nv bnNvbGUgKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpOwogCSAgZ2V0X3R0eXAgKCktPndpbnNpemUg PSAqKHN0cnVjdCB3aW5zaXplICopIGFyZzsKIAkgIGdldF90dHlwICgpLT5raWxsX3BncnAgKFNJ R1dJTkNIKTsKIAl9CkBAIC0yNzYzLDcgKzE4NjQsNyBAQCBnZXRfbG9jYWxlX2Zyb21fZW52IChj aGFyICpsb2NhbGUpCiAgIHN0cmNweSAobG9jYWxlLCBlbnYpOwogfQogCi1zdGF0aWMgTENJRAor c3RhdGljIHZvaWQKIGdldF9sYW5naW5mbyAoY2hhciAqbG9jYWxlX291dCwgY2hhciAqY2hhcnNl dF9vdXQpCiB7CiAgIC8qIEdldCBsb2NhbGUgZnJvbSBlbnZpcm9ubWVudCAqLwpAQCAtMjc3Niwx MSArMTg3Nyw2IEBAIGdldF9sYW5naW5mbyAoY2hhciAqbG9jYWxlX291dCwgY2hhciAqY2hhcnNl dF9vdXQpCiAgIGlmICghbG9jYWxlKQogICAgIGxvY2FsZSA9ICJDIjsKIAotICBjaGFyIHRtcF9s b2NhbGVbRU5DT0RJTkdfTEVOICsgMV07Ci0gIGNoYXIgKnJldCA9IF9fc2V0X2xvY2FsZV9mcm9t X2xvY2FsZV9hbGlhcyAobG9jYWxlLCB0bXBfbG9jYWxlKTsKLSAgaWYgKHJldCkKLSAgICBsb2Nh bGUgPSB0bXBfbG9jYWxlOwotCiAgIGNvbnN0IGNoYXIgKmNoYXJzZXQ7CiAgIHN0cnVjdCBsY19j dHlwZV9UICpsY19jdHlwZSA9IChzdHJ1Y3QgbGNfY3R5cGVfVCAqKSBsb2MubGNfY2F0W0xDX0NU WVBFXS5wdHI7CiAgIGlmICghbGNfY3R5cGUpCkBAIC0yODMwLDIzICsxOTI2LDkgQEAgZ2V0X2xh bmdpbmZvIChjaGFyICpsb2NhbGVfb3V0LCBjaGFyICpjaGFyc2V0X291dCkKICAgICAgIGNoYXJz ZXQgPSAiQ1A5MzIiOwogICAgIH0KIAotICB3Y2hhcl90IGxjW0VOQ09ESU5HX0xFTiArIDFdOwot ICB3Y2hhcl90ICpwOwotICBtYnN0b3djcyAobGMsIGxvY2FsZSwgRU5DT0RJTkdfTEVOKTsKLSAg cCA9IHdjc2NociAobGMsIEwnLicpOwotICBpZiAocCkKLSAgICAqcCA9IEwnXDAnOwotICBwID0g d2NzY2hyIChsYywgTCdfJyk7Ci0gIGlmIChwKQotICAgICpwID0gTCctJzsKLSAgTENJRCBsY2lk ID0gTG9jYWxlTmFtZVRvTENJRCAobGMsIDApOwotICBpZiAoIWxjaWQgJiYgIXN0cmNtcCAoY2hh cnNldCwgIkFTQ0lJIikpCi0gICAgcmV0dXJuIDA7Ci0KICAgLyogU2V0IHJlc3VsdHMgKi8KICAg c3RyY3B5IChsb2NhbGVfb3V0LCBuZXdfbG9jYWxlKTsKICAgc3RyY3B5IChjaGFyc2V0X291dCwg Y2hhcnNldCk7Ci0gIHJldHVybiBsY2lkOwogfQogCiB2b2lkCkBAIC0yODU0LDIxICsxOTM2LDcg QEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpzZXR1cF9sb2NhbGUgKHZvaWQpCiB7CiAgIGNoYXIgbG9j YWxlW0VOQ09ESU5HX0xFTiArIDFdID0gIkMiOwogICBjaGFyIGNoYXJzZXRbRU5DT0RJTkdfTEVO ICsgMV0gPSAiQVNDSUkiOwotICBMQ0lEIGxjaWQgPSBnZXRfbGFuZ2luZm8gKGxvY2FsZSwgY2hh cnNldCk7Ci0KLSAgLyogU2V0IGNvbnNvbGUgY29kZSBwYWdlIGZvcm0gbG9jYWxlICovCi0gIGlm IChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewotICAgICAgVUlOVCBjb2RlX3BhZ2U7Ci0g ICAgICBpZiAobGNpZCA9PSAwIHx8IGxjaWQgPT0gKExDSUQpIC0xKQotCWNvZGVfcGFnZSA9IDIw MTI3OyAvKiBBU0NJSSAqLwotICAgICAgZWxzZSBpZiAoIUdldExvY2FsZUluZm8gKGxjaWQsCi0J CQkgICAgICAgTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UgfCBMT0NBTEVfUkVUVVJOX05VTUJFUiwK LQkJCSAgICAgICAoY2hhciAqKSAmY29kZV9wYWdlLCBzaXplb2YgKGNvZGVfcGFnZSkpKQotCWNv ZGVfcGFnZSA9IDIwMTI3OyAvKiBBU0NJSSAqLwotICAgICAgU2V0Q29uc29sZUNQIChjb2RlX3Bh Z2UpOwotICAgICAgU2V0Q29uc29sZU91dHB1dENQIChjb2RlX3BhZ2UpOwotICAgIH0KKyAgZ2V0 X2xhbmdpbmZvIChsb2NhbGUsIGNoYXJzZXQpOwogCiAgIC8qIFNldCB0ZXJtaW5hbCBjb2RlIHBh Z2UgZnJvbSBsb2NhbGUgKi8KICAgLyogVGhpcyBjb2RlIGlzIGJvcnJvd2VkIGZyb20gbWludHR5 OiBjaGFyc2V0LmMgKi8KQEAgLTI4NzgsOSArMTk0Niw5IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6 c2V0dXBfbG9jYWxlICh2b2lkKQogICAgIGNoYXJzZXRfdVtpXSA9IHRvdXBwZXIgKGNoYXJzZXRb aV0pOwogICB1bnNpZ25lZCBpbnQgaXNvOwogICBVSU5UIGNwID0gMjAxMjc7IC8qIERlZmF1bHQg Zm9yIGZhbGxiYWNrICovCi0gIGlmIChzc2NhbmYgKGNoYXJzZXRfdSwgIklTTy04ODU5LSV1Iiwg JmlzbykgPT0gMSB8fAotICAgICAgc3NjYW5mIChjaGFyc2V0X3UsICJJU084ODU5LSV1IiwgJmlz bykgPT0gMSB8fAotICAgICAgc3NjYW5mIChjaGFyc2V0X3UsICJJU084ODU5JXUiLCAmaXNvKSA9 PSAxKQorICBpZiAoc3NjYW5mIChjaGFyc2V0X3UsICJJU08tODg1OS0ldSIsICZpc28pID09IDEK KyAgICAgIHx8IHNzY2FuZiAoY2hhcnNldF91LCAiSVNPODg1OS0ldSIsICZpc28pID09IDEKKyAg ICAgIHx8IHNzY2FuZiAoY2hhcnNldF91LCAiSVNPODg1OSV1IiwgJmlzbykgPT0gMSkKICAgICB7 CiAgICAgICBpZiAoaXNvICYmIGlzbyA8PSAxNiAmJiBpc28gIT0xMikKIAlnZXRfdHR5cCAoKS0+ dGVybV9jb2RlX3BhZ2UgPSAyODU5MCArIGlzbzsKQEAgLTI4OTYsOTAgKzE5NjQsOSBAQCBmaGFu ZGxlcl9wdHlfc2xhdmU6OnNldHVwX2xvY2FsZSAodm9pZCkKIAl9CiB9CiAKLXZvaWQKLWZoYW5k bGVyX3B0eV9zbGF2ZTo6c2V0X2ZyZWVjb25zb2xlX29uX2Nsb3NlIChib29sIHZhbCkKLXsKLSAg ZnJlZWNvbnNvbGVfb25fY2xvc2UgPSB2YWw7Ci19Ci0KLXZvaWQKLWZoYW5kbGVyX3B0eV9zbGF2 ZTo6dHJpZ2dlcl9yZWRyYXdfc2NyZWVuICh2b2lkKQotewotICAvKiBGb3JjaWJseSByZWRyYXcg c2NyZWVuIGJhc2VkIG9uIGNvbnNvbGUgc2NyZWVuIGJ1ZmZlci4gKi8KLSAgLyogVGhlIGZvbGxv d2luZyBjb2RlIHRyaWdnZXJzIHJlZHJhd2luZyB0aGUgc2NyZWVuLiAqLwotICBDT05TT0xFX1ND UkVFTl9CVUZGRVJfSU5GTyBzYmk7Ci0gIEdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvIChnZXRf b3V0cHV0X2hhbmRsZSAoKSwgJnNiaSk7Ci0gIFNNQUxMX1JFQ1QgcmVjdCA9IHswLCAwLAotICAg IChTSE9SVCkgKHNiaS5kd1NpemUuWCAtMSksIChTSE9SVCkgKHNiaS5kd1NpemUuWSAtIDEpfTsK LSAgQ09PUkQgZGVzdCA9IHswLCAwfTsKLSAgQ0hBUl9JTkZPIGZpbGwgPSB7JyAnLCAwfTsKLSAg U2Nyb2xsQ29uc29sZVNjcmVlbkJ1ZmZlciAoZ2V0X291dHB1dF9oYW5kbGUgKCksICZyZWN0LCBO VUxMLCBkZXN0LCAmZmlsbCk7Ci0gIGdldF90dHlwICgpLT5uZWVkX3JlZHJhd19zY3JlZW4gPSBm YWxzZTsKLX0KLQotdm9pZAotZmhhbmRsZXJfcHR5X3NsYXZlOjpmaXh1cF9hZnRlcl9hdHRhY2gg KGJvb2wgbmF0aXZlX21heWJlLCBpbnQgZmRfc2V0KQotewotICBpZiAoZmQgPCAwKQotICAgIGZk ID0gZmRfc2V0OwotICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQotICAgIHsKLSAgICAgIGlm IChmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChnZXRfaGVscGVyX3By b2Nlc3NfaWQgKCksCi0JCQkJCQkgICAgdHJ1ZSkpCi0JaWYgKHBjb25fYXR0YWNoZWRfdG8gIT0g Z2V0X21pbm9yICgpKQotCSAgewotCSAgICBwY29uX2F0dGFjaGVkX3RvID0gZ2V0X21pbm9yICgp OwotCSAgICBpbml0X2NvbnNvbGVfaGFuZGxlciAodHJ1ZSk7Ci0JICB9Ci0KLSNpZiAwIC8qIFRo aXMgaXMgZm9yIGRlYnVnIG9ubHkuICovCi0gICAgICBpc0h5YnJpZCA9IHRydWU7Ci0gICAgICBn ZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0cnVlOwotICAgICAgZ2V0X3R0eXAgKCkt PnN3aXRjaF90b19wY29uX291dCA9IHRydWU7Ci0jZW5kaWYKLQotICAgICAgaWYgKHBjb25fYXR0 YWNoZWRfdG8gPT0gZ2V0X21pbm9yICgpICYmIG5hdGl2ZV9tYXliZSkKLQl7Ci0JICBpZiAoZmQg PT0gMCkKLQkgICAgewotCSAgICAgIHB1bGxfcGNvbl9pbnB1dCAoKTsKLQkgICAgICBEV09SRCBt b2RlID0KLQkJRU5BQkxFX1BST0NFU1NFRF9JTlBVVCB8IEVOQUJMRV9MSU5FX0lOUFVUIHwgRU5B QkxFX0VDSE9fSU5QVVQ7Ci0JICAgICAgU2V0Q29uc29sZU1vZGUgKGdldF9oYW5kbGUgKCksIG1v ZGUpOwotCSAgICAgIGlmIChnZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fAotCQkgICFwaW5m byAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKLQkJZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gbXlz ZWxmLT5waWQ7Ci0JICAgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luID0gdHJ1ZTsK LQkgICAgfQotCSAgZWxzZSBpZiAoZmQgPT0gMSB8fCBmZCA9PSAyKQotCSAgICB7Ci0JICAgICAg RFdPUkQgbW9kZSA9IEVOQUJMRV9QUk9DRVNTRURfT1VUUFVUIHwgRU5BQkxFX1dSQVBfQVRfRU9M X09VVFBVVDsKLQkgICAgICBTZXRDb25zb2xlTW9kZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIG1v ZGUpOwotCSAgICAgIGFjcXVpcmVfb3V0cHV0X211dGV4IChJTkZJTklURSk7Ci0JICAgICAgaWYg KCFnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0KQotCQlnZXRfdHR5cCAoKS0+d2FpdF9w Y29uX2Z3ZCAoKTsKLQkgICAgICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IDAgfHwKLQkJ ICAhcGluZm8gKGdldF90dHlwICgpLT5wY29uX3BpZCkpCi0JCWdldF90dHlwICgpLT5wY29uX3Bp ZCA9IG15c2VsZi0+cGlkOwotCSAgICAgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQg PSB0cnVlOwotCSAgICAgIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwotCi0JICAgICAgaWYgKGdl dF90dHlwICgpLT5uZWVkX3JlZHJhd19zY3JlZW4pCi0JCXRyaWdnZXJfcmVkcmF3X3NjcmVlbiAo KTsKLQkgICAgfQotCSAgaW5pdF9jb25zb2xlX2hhbmRsZXIgKGZhbHNlKTsKLQl9Ci0gICAgICBl bHNlIGlmIChmZCA9PSAwICYmIG5hdGl2ZV9tYXliZSkKLQkvKiBSZWFkIGZyb20gdW5hdHRhY2hl ZCBwc2V1ZG8gY29uc29sZSBjYXVzZSBmcmVlemUsCi0JICAgdGhlcmVmb3JlLCBmYWxsYmFjayB0 byBsZWdhY3kgcHR5LiAqLwotCXNldF9oYW5kbGUgKGdldF9oYW5kbGVfY3lnICgpKTsKLSAgICB9 Ci19Ci0KIHZvaWQKIGZoYW5kbGVyX3B0eV9zbGF2ZTo6Zml4dXBfYWZ0ZXJfZm9yayAoSEFORExF IHBhcmVudCkKIHsKLSAgZml4dXBfYWZ0ZXJfYXR0YWNoIChmYWxzZSwgLTEpOwogICAvLyBmb3Jr X2ZpeHVwIChwYXJlbnQsIGludXNlLCAiaW51c2UiKTsKICAgLy8gZmhhbmRsZXJfcHR5X2NvbW1v bjo6Zml4dXBfYWZ0ZXJfZm9yayAocGFyZW50KTsKICAgcmVwb3J0X3R0eV9jb3VudHMgKHRoaXMs ICJpbmhlcml0ZWQiLCAiIik7CkBAIC0yOTkyLDcxICsxOTc5LDIyIEBAIGZoYW5kbGVyX3B0eV9z bGF2ZTo6Zml4dXBfYWZ0ZXJfZXhlYyAoKQogCiAgIGlmICghY2xvc2Vfb25fZXhlYyAoKSkKICAg ICBmaXh1cF9hZnRlcl9mb3JrIChOVUxMKTsJLyogTm8gcGFyZW50IGhhbmRsZSByZXF1aXJlZC4g Ki8KLSAgZWxzZSBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQotICAgIHsKLSAgICAgIGludCB1 c2VkID0gMDsKLSAgICAgIGludCBhdHRhY2hlZCA9IDA7Ci0gICAgICBjeWdoZWFwX2ZkZW51bSBj ZmQgKGZhbHNlKTsKLSAgICAgIHdoaWxlIChjZmQubmV4dCAoKSA+PSAwKQotCXsKLQkgIGlmIChj ZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUiB8fAotCSAgICAgIGNmZC0+Z2V0X21h am9yICgpID09IERFVl9DT05TX01BSk9SKQotCSAgICB1c2VkICsrOwotCSAgaWYgKGNmZC0+Z2V0 X21ham9yICgpID09IERFVl9QVFlTX01BSk9SICYmCi0JICAgICAgY2ZkLT5nZXRfbWlub3IgKCkg PT0gcGNvbl9hdHRhY2hlZF90bykKLQkgICAgYXR0YWNoZWQgKys7Ci0JfQotCi0gICAgICAvKiBD YWxsIEZyZWVDb25zb2xlKCkgaWYgbm8gdHR5IGlzIG9wZW5lZCBhbmQgdGhlIHByb2Nlc3MKLQkg aXMgYXR0YWNoZWQgdG8gY29uc29sZSBjb3JyZXNwb25kaW5nIHRvIHR0eS4gVGhpcyBpcwotCSBu ZWVkZWQgdG8gbWFrZSBHTlUgc2NyZWVuIGFuZCB0bXV4IHdvcmsgaW4gV2luZG93cyAxMAotCSAx OTAzLiAqLwotICAgICAgaWYgKGF0dGFjaGVkID09IDEgJiYgZ2V0X21pbm9yICgpID09IHBjb25f YXR0YWNoZWRfdG8pCi0JcGNvbl9hdHRhY2hlZF90byA9IC0xOwotICAgICAgaWYgKHVzZWQgPT0g MSAvKiBBYm91dCB0byBjbG9zZSB0aGlzIHR0eSAqLykKLQl7Ci0JICBpbml0X2NvbnNvbGVfaGFu ZGxlciAoZmFsc2UpOwotCSAgZnJlZV9hdHRhY2hlZF9jb25zb2xlICgpOwotCX0KLSAgICB9CiAK ICAgLyogU2V0IGxvY2FsZSAqLwogICBpZiAoZ2V0X3R0eXAgKCktPnRlcm1fY29kZV9wYWdlID09 IDApCiAgICAgc2V0dXBfbG9jYWxlICgpOwogCiAgIC8qIEhvb2sgQ29uc29sZSBBUEkgKi8KLSAg aWYgKGdldF9wc2V1ZG9fY29uc29sZSAoKSkKLSAgICB7CiAjZGVmaW5lIERPX0hPT0sobW9kdWxl LCBuYW1lKSBcCi0gICAgICBpZiAoIW5hbWUjI19PcmlnKSBcCi0JeyBcCi0JICB2b2lkICphcGkg PSBob29rX2FwaSAobW9kdWxlLCAjbmFtZSwgKHZvaWQgKikgbmFtZSMjX0hvb2tlZCk7IFwKLQkg IG5hbWUjI19PcmlnID0gKF9fdHlwZW9mX18gKG5hbWUpICopIGFwaTsgXAotCSAgLyppZiAoYXBp KSBzeXN0ZW1fcHJpbnRmICgjbmFtZSAiIGhvb2tlZC4iKTsqLyBcCi0JfQotICAgICAgRE9fSE9P SyAoTlVMTCwgV3JpdGVGaWxlKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdyaXRlQ29uc29sZUEp OwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlVyk7Ci0gICAgICBET19IT09LIChO VUxMLCBSZWFkRmlsZSk7Ci0gICAgICBET19IT09LIChOVUxMLCBSZWFkQ29uc29sZUEpOwotICAg ICAgRE9fSE9PSyAoTlVMTCwgUmVhZENvbnNvbGVXKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdy aXRlQ29uc29sZU91dHB1dEEpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlT3V0 cHV0Vyk7Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJB KTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdyaXRlQ29uc29sZU91dHB1dENoYXJhY3RlclcpOwot ICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlT3V0cHV0QXR0cmlidXRlKTsKLSAgICAg IERPX0hPT0sgKE5VTEwsIFNldENvbnNvbGVDdXJzb3JQb3NpdGlvbik7Ci0gICAgICBET19IT09L IChOVUxMLCBTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZSk7Ci0gICAgICBET19IT09LIChOVUxMLCBX cml0ZUNvbnNvbGVJbnB1dEEpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlSW5w dXRXKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFJlYWRDb25zb2xlSW5wdXRBKTsKLSAgICAgIERP X0hPT0sgKE5VTEwsIFJlYWRDb25zb2xlSW5wdXRXKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFBl ZWtDb25zb2xlSW5wdXRBKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFBlZWtDb25zb2xlSW5wdXRX KTsKLSAgICAgIC8qIENyZWF0ZVByb2Nlc3MoKSBpcyBob29rZWQgZm9yIEdEQiBldGMuICovCi0g ICAgICBET19IT09LIChOVUxMLCBDcmVhdGVQcm9jZXNzQSk7Ci0gICAgICBET19IT09LIChOVUxM LCBDcmVhdGVQcm9jZXNzVyk7CisgIGlmICghbmFtZSMjX09yaWcpIFwKKyAgICB7IFwKKyAgICAg IHZvaWQgKmFwaSA9IGhvb2tfYXBpIChtb2R1bGUsICNuYW1lLCAodm9pZCAqKSBuYW1lIyNfSG9v a2VkKTsgXAorICAgICAgbmFtZSMjX09yaWcgPSAoX190eXBlb2ZfXyAobmFtZSkgKikgYXBpOyBc CisgICAgICAvKmlmIChhcGkpIHN5c3RlbV9wcmludGYgKCNuYW1lICIgaG9va2VkLiIpOyovIFwK ICAgICB9CisgIC8qIENyZWF0ZVByb2Nlc3MoKSBpcyBob29rZWQgZm9yIEdEQiBldGMuICovCisg IERPX0hPT0sgKE5VTEwsIENyZWF0ZVByb2Nlc3NBKTsKKyAgRE9fSE9PSyAoTlVMTCwgQ3JlYXRl UHJvY2Vzc1cpOwogfQogCiAvKiBUaGlzIHRocmVhZCBmdW5jdGlvbiBoYW5kbGVzIHRoZSBtYXN0 ZXIgY29udHJvbCBwaXBlLiAgSXQgd2FpdHMgZm9yIGEKQEAgLTMyMDQsMjcgKzIxNDIsNiBAQCBy ZXBseToKICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQKLWZoYW5kbGVyX3B0eV9tYXN0ZXI6OnRyYW5z ZmVyX2lucHV0X3RvX3Bjb24gKHZvaWQpCi17Ci0gIFdhaXRGb3JTaW5nbGVPYmplY3QgKGlucHV0 X211dGV4LCBJTkZJTklURSk7Ci0gIERXT1JEIG47Ci0gIHNpemVfdCB0cmFuc2ZlcmVkID0gMDsK LSAgd2hpbGUgKDo6Ynl0ZXNfYXZhaWxhYmxlIChuLCBmcm9tX21hc3Rlcl9jeWcpICYmIG4pCi0g ICAgewotICAgICAgY2hhciBidWZbMTAyNF07Ci0gICAgICBSZWFkRmlsZSAoZnJvbV9tYXN0ZXJf Y3lnLCBidWYsIHNpemVvZiAoYnVmKSwgJm4sIDApOwotICAgICAgY2hhciAqcCA9IGJ1ZjsKLSAg ICAgIHdoaWxlICgocCA9IChjaGFyICopIG1lbWNociAocCwgJ1xuJywgbiAtIChwIC0gYnVmKSkp KQotCSpwID0gJ1xyJzsKLSAgICAgIGlmIChXcml0ZUZpbGUgKHRvX3NsYXZlLCBidWYsIG4sICZu LCAwKSkKLQl0cmFuc2ZlcmVkICs9IG47Ci0gICAgfQotICBpZiAodHJhbnNmZXJlZCkKLSAgICBn ZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSA9IGZhbHNlOwotICBSZWxlYXNlTXV0ZXggKGlucHV0 X211dGV4KTsKLX0KLQogc3RhdGljIERXT1JEIFdJTkFQSQogcHR5X21hc3Rlcl90aHJlYWQgKFZP SUQgKmFyZykKIHsKQEAgLTMyNDAsMjMgKzIxNTcsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpw dHlfbWFzdGVyX2Z3ZF90aHJlYWQgKCkKICAgdGVybWlvc19wcmludGYgKCJTdGFydGVkLiIpOwog ICBmb3IgKDs7KQogICAgIHsKLSAgICAgIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0Jewot CSAgZ2V0X3R0eXAgKCktPnBjb25fbGFzdF90aW1lID0gR2V0VGlja0NvdW50ICgpOwotCSAgd2hp bGUgKDo6Ynl0ZXNfYXZhaWxhYmxlIChybGVuLCBmcm9tX3NsYXZlKSAmJiBybGVuID09IDApCi0J ICAgIHsKLQkgICAgICAvKiBGb3JjaWJseSB0cmFuc2ZlciBpbnB1dCBpZiBpdCBpcyByZXF1ZXN0 ZWQgYnkgc2xhdmUuCi0JCSBUaGlzIGhhcHBlbnMgd2hlbiBpbnB1dCBkYXRhIHNob3VsZCBiZSB0 cmFuc2ZlcmVkCi0JCSBmcm9tIHRoZSBpbnB1dCBwaXBlIGZvciBjeWd3aW4gYXBwcyB0byB0aGUg aW5wdXQgcGlwZQotCQkgZm9yIG5hdGl2ZSBhcHBzLiAqLwotCSAgICAgIGlmIChnZXRfdHR5cCAo KS0+cmVxX3RyYW5zZmVyX2lucHV0X3RvX3Bjb24pCi0JCXsKLQkJICB0cmFuc2Zlcl9pbnB1dF90 b19wY29uICgpOwotCQkgIGdldF90dHlwICgpLT5yZXFfdHJhbnNmZXJfaW5wdXRfdG9fcGNvbiA9 IGZhbHNlOwotCQl9Ci0JICAgICAgU2xlZXAgKDEpOwotCSAgICB9Ci0JfQorICAgICAgZ2V0X3R0 eXAgKCktPnBjb25fbGFzdF90aW1lID0gR2V0VGlja0NvdW50ICgpOwogICAgICAgaWYgKCFSZWFk RmlsZSAoZnJvbV9zbGF2ZSwgb3V0YnVmLCBzaXplb2Ygb3V0YnVmLCAmcmxlbiwgTlVMTCkpCiAJ ewogCSAgdGVybWlvc19wcmludGYgKCJSZWFkRmlsZSBmb3IgZm9yd2FyZGluZyBmYWlsZWQsICVF Iik7CkBAIC0zMjY0LDE0ICsyMTY1LDkgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6cHR5X21hc3Rl cl9md2RfdGhyZWFkICgpCiAJfQogICAgICAgc3NpemVfdCB3bGVuID0gcmxlbjsKICAgICAgIGNo YXIgKnB0ciA9IG91dGJ1ZjsKLSAgICAgIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCisgICAg ICBpZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUpCiAJewotCSAgLyogQXZvaWQgZHVw bGljYXRpbmcgc2xhdmUgb3V0cHV0IHdoaWNoIGlzIGFscmVhZHkgc2VudCB0bwotCSAgICAgdG9f bWFzdGVyX2N5ZyAqLwotCSAgaWYgKCFnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0KQot CSAgICBjb250aW51ZTsKLQotCSAgLyogQXZvaWQgc2V0dGluZyB3aW5kb3cgdGl0bGUgdG8gImN5 Z3dpbi1jb25zb2xlLWhlbHBlci5leGUiICovCisJICAvKiBSZW1vdmUgQ1NJID4gUG0gbSAqLwog CSAgaW50IHN0YXRlID0gMDsKIAkgIGludCBzdGFydF9hdCA9IDA7CiAJICBmb3IgKERXT1JEIGk9 MDsgaTxybGVuOyBpKyspCkBAIC0zMjgxLDQzICsyMTc3LDggQEAgZmhhbmRsZXJfcHR5X21hc3Rl cjo6cHR5X21hc3Rlcl9md2RfdGhyZWFkICgpCiAJCXN0YXRlID0gMTsKIAkJY29udGludWU7CiAJ ICAgICAgfQotCSAgICBlbHNlIGlmICgoc3RhdGUgPT0gMSAmJiBvdXRidWZbaV0gPT0gJ10nKSB8 fAotCQkgICAgIChzdGF0ZSA9PSAyICYmIG91dGJ1ZltpXSA9PSAnMCcpIHx8Ci0JCSAgICAgKHN0 YXRlID09IDMgJiYgb3V0YnVmW2ldID09ICc7JykpCi0JICAgICAgewotCQlzdGF0ZSArKzsKLQkJ Y29udGludWU7Ci0JICAgICAgfQotCSAgICBlbHNlIGlmIChzdGF0ZSA9PSA0ICYmIG91dGJ1Zltp XSA9PSAnXGEnKQotCSAgICAgIHsKLQkJY29uc3QgY2hhciAqaGVscGVyX3N0ciA9ICJcXGJpblxc Y3lnd2luLWNvbnNvbGUtaGVscGVyLmV4ZSI7Ci0JCWlmIChtZW1tZW0gKCZvdXRidWZbc3RhcnRf YXRdLCBpICsgMSAtIHN0YXJ0X2F0LAotCQkJICAgIGhlbHBlcl9zdHIsIHN0cmxlbiAoaGVscGVy X3N0cikpKQotCQkgIHsKLQkJICAgIG1lbW1vdmUgKCZvdXRidWZbc3RhcnRfYXRdLCAmb3V0YnVm W2krMV0sIHJsZW4taS0xKTsKLQkJICAgIHJsZW4gPSB3bGVuID0gc3RhcnRfYXQgKyBybGVuIC0g aSAtIDE7Ci0JCSAgfQotCQlzdGF0ZSA9IDA7Ci0JCWNvbnRpbnVlOwotCSAgICAgIH0KLQkgICAg ZWxzZSBpZiAob3V0YnVmW2ldID09ICdcYScpCi0JICAgICAgewotCQlzdGF0ZSA9IDA7Ci0JCWNv bnRpbnVlOwotCSAgICAgIH0KLQotCSAgLyogUmVtb3ZlIENTSSA+IFBtIG0gKi8KLQkgIHN0YXRl ID0gMDsKLQkgIHN0YXJ0X2F0ID0gMDsKLQkgIGZvciAoRFdPUkQgaT0wOyBpPHJsZW47IGkrKykK LQkgICAgaWYgKG91dGJ1ZltpXSA9PSAnXDAzMycpCi0JICAgICAgewotCQlzdGFydF9hdCA9IGk7 Ci0JCXN0YXRlID0gMTsKLQkJY29udGludWU7Ci0JICAgICAgfQotCSAgICBlbHNlIGlmICgoc3Rh dGUgPT0gMSAmJiBvdXRidWZbaV0gPT0gJ1snKSB8fAotCQkgICAgIChzdGF0ZSA9PSAyICYmIG91 dGJ1ZltpXSA9PSAnPicpKQorCSAgICBlbHNlIGlmICgoc3RhdGUgPT0gMSAmJiBvdXRidWZbaV0g PT0gJ1snKQorCQkgICAgIHx8IChzdGF0ZSA9PSAyICYmIG91dGJ1ZltpXSA9PSAnPicpKQogCSAg ICAgIHsKIAkJc3RhdGUgKys7CiAJCWNvbnRpbnVlOwpAQCAtMzM4NiwyMDEgKzIyNDcsNiBAQCBw dHlfbWFzdGVyX2Z3ZF90aHJlYWQgKFZPSUQgKmFyZykKICAgcmV0dXJuICgoZmhhbmRsZXJfcHR5 X21hc3RlciAqKSBhcmcpLT5wdHlfbWFzdGVyX2Z3ZF90aHJlYWQgKCk7CiB9CiAKLS8qIElmIG1h c3RlciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgc2VydmljZSwgYXR0YWNoaW5nIHRvCi0gICBwc2V1 ZG8gY29uc29sZSBzaG91bGQgYmUgZG9uZSBpbiBmb3JrLiBJZiBhdHRhY2hpbmcKLSAgIGlzIGRv bmUgaW4gc3Bhd24gZm9yIGluZXRkIG9yIHNzaGQsIGl0IGZhaWxzIGJlY2F1c2UKLSAgIHRoZSBo ZWxwZXIgcHJvY2VzcyBpcyBydW5uaW5nIGFzIHByaXZpbGVnZWQgdXNlciB3aGlsZQotICAgc2xh dmUgcHJvY2VzcyBpcyBub3QuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkZXRlcm1pbmUKLSAg IGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgYSBzcnZpY2Ugb3Igbm90LiAqLwotaW5saW5l IHN0YXRpYyBib29sCi1pc19ydW5uaW5nX2FzX3NlcnZpY2UgKHZvaWQpCi17Ci0gIHJldHVybiBj aGVja190b2tlbl9tZW1iZXJzaGlwICh3ZWxsX2tub3duX3NlcnZpY2Vfc2lkKQotICAgIHx8IGN5 Z2hlYXAtPnVzZXIuc2F2ZWRfc2lkICgpID09IHdlbGxfa25vd25fc3lzdGVtX3NpZDsKLX0KLQot Ym9vbAotZmhhbmRsZXJfcHR5X21hc3Rlcjo6c2V0dXBfcHNldWRvY29uc29sZSAoKQotewotICBp ZiAoZGlzYWJsZV9wY29uKQotICAgIHJldHVybiBmYWxzZTsKLSAgLyogSWYgdGhlIGxlZ2FjeSBj b25zb2xlIG1vZGUgaXMgZW5hYmxlZCwgcHNldWRvIGNvbnNvbGUgc2VlbXMKLSAgICAgbm90IHRv IHdvcmsgYXMgZXhwZWN0ZWQuIFRvIGRldGVybWluZSBjb25zb2xlIG1vZGUsIHJlZ2lzdHJ5Ci0g ICAgIGtleSBGb3JjZVYyIGluIEhLRVlfQ1VSUkVOVF9VU0VSXENvbnNvbGUgaXMgY2hlY2tlZC4g Ki8KLSAgcmVnX2tleSByZWcgKEhLRVlfQ1VSUkVOVF9VU0VSLCBLRVlfUkVBRCwgTCJDb25zb2xl IiwgTlVMTCk7Ci0gIGlmIChyZWcuZXJyb3IgKCkpCi0gICAgcmV0dXJuIGZhbHNlOwotICBpZiAo cmVnLmdldF9kd29yZCAoTCJGb3JjZVYyIiwgMSkgPT0gMCkKLSAgICB7Ci0gICAgICB0ZXJtaW9z X3ByaW50ZiAoIlBzZXVkbyBjb25zb2xlIGlzIGRpc2FibGVkICIKLQkJICAgICAgImJlY2F1c2Ug dGhlIGxlZ2FjeSBjb25zb2xlIG1vZGUgaXMgZW5hYmxlZC4iKTsKLSAgICAgIHJldHVybiBmYWxz ZTsKLSAgICB9Ci0KLSAgLyogUHNldWRvIGNvbnNvbGUgc3VwcHJvdCBpcyByZWFsaXplZCB1c2lu ZyBhIHRyaWNreSB0ZWNobmljLgotICAgICBQVFkgbmVlZCB0aGUgcHNldWRvIGNvbnNvbGUgaGFu ZGxlcywgaG93ZXZlciwgdGhleSBjYW5ub3QKLSAgICAgYmUgcmV0cmlldmVkIGJ5IG5vcm1hbCBw cm9jZWR1cmUuIFRoZXJlZm9yZSwgcnVuIGEgaGVscGVyCi0gICAgIHByb2Nlc3MgaW4gYSBwc2V1 ZG8gY29uc29sZSBhbmQgZ2V0IHRoZW0gZnJvbSB0aGUgaGVscGVyLgotICAgICBTbGF2ZSBwcm9j ZXNzIHdpbGwgYXR0YWNoIHRvIHRoZSBwc2V1ZG8gY29uc29sZSBpbiB0aGUKLSAgICAgaGVscGVy IHByb2Nlc3MgdXNpbmcgQXR0YWNoQ29uc29sZSgpLiAqLwotICBDT09SRCBzaXplID0gewotICAg IChTSE9SVCkgZ2V0X3R0eXAgKCktPndpbnNpemUud3NfY29sLAotICAgIChTSE9SVCkgZ2V0X3R0 eXAgKCktPndpbnNpemUud3Nfcm93Ci0gIH07Ci0gIENyZWF0ZVBpcGUgKCZmcm9tX21hc3Rlciwg JnRvX3NsYXZlLCAmc2VjX25vbmUsIDApOwotICBTZXRMYXN0RXJyb3IgKEVSUk9SX1NVQ0NFU1Mp OwotICBIUkVTVUxUIHJlcyA9IENyZWF0ZVBzZXVkb0NvbnNvbGUgKHNpemUsIGZyb21fbWFzdGVy LCB0b19tYXN0ZXIsCi0JCQkJICAgICAwLCAmZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUp OwotICBpZiAocmVzICE9IFNfT0sgfHwgR2V0TGFzdEVycm9yICgpID09IEVSUk9SX1BST0NfTk9U X0ZPVU5EKQotICAgIHsKLSAgICAgIGlmIChyZXMgIT0gU19PSykKLQlzeXN0ZW1fcHJpbnRmICgi Q3JlYXRlUHNldWRvQ29uc29sZSgpIGZhaWxlZC4gJTA4eFxuIiwKLQkJICAgICAgIEdldExhc3RF cnJvciAoKSk7Ci0gICAgICBnb3RvIGZhbGxiYWNrOwotICAgIH0KLQotICAvKiBJZiBtYXN0ZXIg cHJvY2VzcyBpcyBydW5uaW5nIGFzIHNlcnZpY2UsIGF0dGFjaGluZyB0bwotICAgICBwc2V1ZG8g Y29uc29sZSBzaG91bGQgYmUgZG9uZSBpbiBmb3JrLiBJZiBhdHRhY2hpbmcKLSAgICAgaXMgZG9u ZSBpbiBzcGF3biBmb3IgaW5ldGQgb3Igc3NoZCwgaXQgZmFpbHMgYmVjYXVzZQotICAgICB0aGUg aGVscGVyIHByb2Nlc3MgaXMgcnVubmluZyBhcyBwcml2aWxlZ2VkIHVzZXIgd2hpbGUKLSAgICAg c2xhdmUgcHJvY2VzcyBpcyBub3QuICovCi0gIGlmIChpc19ydW5uaW5nX2FzX3NlcnZpY2UgKCkp Ci0gICAgZ2V0X3R0eXAgKCktPmF0dGFjaF9wY29uX2luX2ZvcmsgPSB0cnVlOwotCi0gIFNUQVJU VVBJTkZPRVhXIHNpX2hlbHBlcjsKLSAgSEFORExFIGhlbGxvLCBnb29kYnllOwotICBIQU5ETEUg aHIsIGh3OwotICBQUk9DRVNTX0lORk9STUFUSU9OIHBpX2hlbHBlcjsKLSAgSEFORExFIGhwQ29u SW4sIGhwQ29uT3V0OwotICB7Ci0gICAgU0laRV9UIGJ5dGVzUmVxdWlyZWQ7Ci0gICAgSW5pdGlh bGl6ZVByb2NUaHJlYWRBdHRyaWJ1dGVMaXN0IChOVUxMLCAyLCAwLCAmYnl0ZXNSZXF1aXJlZCk7 Ci0gICAgWmVyb01lbW9yeSAoJnNpX2hlbHBlciwgc2l6ZW9mIChzaV9oZWxwZXIpKTsKLSAgICBz aV9oZWxwZXIuU3RhcnR1cEluZm8uY2IgPSBzaXplb2YgKFNUQVJUVVBJTkZPRVhXKTsKLSAgICBz aV9oZWxwZXIubHBBdHRyaWJ1dGVMaXN0ID0gKFBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfTElTVCkK LSAgICAgIEhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGJ5dGVzUmVxdWlyZWQpOwot ICAgIGlmIChzaV9oZWxwZXIubHBBdHRyaWJ1dGVMaXN0ID09IE5VTEwpCi0gICAgICBnb3RvIGNs ZWFudXBfcHNldWRvX2NvbnNvbGU7Ci0gICAgaWYgKCFJbml0aWFsaXplUHJvY1RocmVhZEF0dHJp YnV0ZUxpc3QgKHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QsCi0JCQkJCSAgICAyLCAwLCAmYnl0 ZXNSZXF1aXJlZCkpCi0gICAgICBnb3RvIGNsZWFudXBfaGVhcDsKLSAgICBpZiAoIVVwZGF0ZVBy b2NUaHJlYWRBdHRyaWJ1dGUgKHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QsCi0JCQkJICAgIDAs Ci0JCQkJICAgIFBST0NfVEhSRUFEX0FUVFJJQlVURV9QU0VVRE9DT05TT0xFLAotCQkJCSAgICBn ZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSwKLQkJCQkgICAgc2l6ZW9mIChnZXRfdHR5cCAo KS0+aF9wc2V1ZG9fY29uc29sZSksCi0JCQkJICAgIE5VTEwsIE5VTEwpKQotICAgICAgZ290byBj bGVhbnVwX2hlYXA7Ci0gICAgLyogQ3JlYXRlIGV2ZW50cyBmb3Igc3RhcnQvc3RvcCBoZWxwZXIg cHJvY2Vzcy4gKi8KLSAgICBoZWxsbyA9IENyZWF0ZUV2ZW50ICgmc2VjX25vbmUsIHRydWUsIGZh bHNlLCBOVUxMKTsKLSAgICBnb29kYnllID0gQ3JlYXRlRXZlbnQgKCZzZWNfbm9uZSwgdHJ1ZSwg ZmFsc2UsIE5VTEwpOwotICAgIC8qIENyZWF0ZSBhIHBpcGUgZm9yIHJlY2VpdmluZyBwc2V1ZG8g Y29uc29sZSBoYW5kbGVzICovCi0gICAgQ3JlYXRlUGlwZSAoJmhyLCAmaHcsICZzZWNfbm9uZSwg MCk7Ci0gICAgLyogSW5oZXJpdCBvbmx5IGhhbmRsZXMgd2hpY2ggYXJlIG5lZWRlZCBieSBoZWxw ZXIuICovCi0gICAgSEFORExFIGhhbmRsZXNfdG9faW5oZXJpdFtdID0ge2hlbGxvLCBnb29kYnll LCBod307Ci0gICAgaWYgKCFVcGRhdGVQcm9jVGhyZWFkQXR0cmlidXRlIChzaV9oZWxwZXIubHBB dHRyaWJ1dGVMaXN0LAotCQkJCSAgICAwLAotCQkJCSAgICBQUk9DX1RIUkVBRF9BVFRSSUJVVEVf SEFORExFX0xJU1QsCi0JCQkJICAgIGhhbmRsZXNfdG9faW5oZXJpdCwKLQkJCQkgICAgc2l6ZW9m IChoYW5kbGVzX3RvX2luaGVyaXQpLAotCQkJCSAgICBOVUxMLCBOVUxMKSkKLSAgICAgIGdvdG8g Y2xlYW51cF9ldmVudF9hbmRfcGlwZXM7Ci0gICAgLyogQ3JlYXRlIGhlbHBlciBwcm9jZXNzICov Ci0gICAgV0NIQVIgY21kW01BWF9QQVRIXTsKLSAgICBwYXRoX2NvbnYgaGVscGVyICgiL2Jpbi9j eWd3aW4tY29uc29sZS1oZWxwZXIuZXhlIik7Ci0gICAgc2l6ZV90IGxlbiA9IGhlbHBlci5nZXRf d2lkZV93aW4zMl9wYXRoX2xlbiAoKTsKLSAgICBoZWxwZXIuZ2V0X3dpZGVfd2luMzJfcGF0aCAo Y21kKTsKLSAgICBfX3NtYWxsX3N3cHJpbnRmIChjbWQgKyBsZW4sIEwiICVwICVwICVwIiwgaGVs bG8sIGdvb2RieWUsIGh3KTsKLSAgICBzaV9oZWxwZXIuU3RhcnR1cEluZm8uZHdGbGFncyA9IFNU QVJURl9VU0VTVERIQU5ETEVTOwotICAgIHNpX2hlbHBlci5TdGFydHVwSW5mby5oU3RkSW5wdXQg PSBOVUxMOwotICAgIHNpX2hlbHBlci5TdGFydHVwSW5mby5oU3RkT3V0cHV0ID0gTlVMTDsKLSAg ICBzaV9oZWxwZXIuU3RhcnR1cEluZm8uaFN0ZEVycm9yID0gTlVMTDsKLSAgICBpZiAoIUNyZWF0 ZVByb2Nlc3NXIChOVUxMLCBjbWQsICZzZWNfbm9uZSwgJnNlY19ub25lLAotCQkJIFRSVUUsIEVY VEVOREVEX1NUQVJUVVBJTkZPX1BSRVNFTlQsCi0JCQkgTlVMTCwgTlVMTCwgJnNpX2hlbHBlci5T dGFydHVwSW5mbywgJnBpX2hlbHBlcikpCi0gICAgICBnb3RvIGNsZWFudXBfZXZlbnRfYW5kX3Bp cGVzOwotICAgIGZvciAoOzspCi0gICAgICB7Ci0gICAgICAgIERXT1JEIHdhaXRfcmVzdWx0ID0g V2FpdEZvclNpbmdsZU9iamVjdCAoaGVsbG8sIDUwMCk7Ci0JaWYgKHdhaXRfcmVzdWx0ID09IFdB SVRfT0JKRUNUXzApCi0JICBicmVhazsKLQlpZiAod2FpdF9yZXN1bHQgIT0gV0FJVF9USU1FT1VU KQotCSAgZ290byBjbGVhbnVwX2hlbHBlcl9wcm9jZXNzOwotCURXT1JEIGV4aXRfY29kZTsKLQlp ZiAoIUdldEV4aXRDb2RlUHJvY2VzcyhwaV9oZWxwZXIuaFByb2Nlc3MsICZleGl0X2NvZGUpKQot CSAgZ290byBjbGVhbnVwX2hlbHBlcl9wcm9jZXNzOwotCWlmIChleGl0X2NvZGUgPT0gU1RJTExf QUNUSVZFKQotCSAgY29udGludWU7Ci0JaWYgKGV4aXRfY29kZSAhPSAwIHx8Ci0JICAgIFdhaXRG b3JTaW5nbGVPYmplY3QgKGhlbGxvLCA1MDApICE9IFdBSVRfT0JKRUNUXzApCi0JICBnb3RvIGNs ZWFudXBfaGVscGVyX3Byb2Nlc3M7Ci0JYnJlYWs7Ci0gICAgICB9Ci0gICAgQ2xvc2VIYW5kbGUg KGhlbGxvKTsKLSAgICBDbG9zZUhhbmRsZSAocGlfaGVscGVyLmhUaHJlYWQpOwotICAgIC8qIFJl dHJpZXZlIHBzZXVkbyBjb25zb2xlIGhhbmRsZXMgKi8KLSAgICBEV09SRCByTGVuOwotICAgIGNo YXIgYnVmWzY0XTsKLSAgICBpZiAoIVJlYWRGaWxlIChociwgYnVmLCBzaXplb2YgKGJ1ZiksICZy TGVuLCBOVUxMKSkKLSAgICAgIGdvdG8gY2xlYW51cF9oZWxwZXJfcHJvY2VzczsKLSAgICBidWZb ckxlbl0gPSAnXDAnOwotICAgIHNzY2FuZiAoYnVmLCAiU3RkSGFuZGxlcz0lcCwlcCIsICZocENv bkluLCAmaHBDb25PdXQpOwotICAgIGlmICghRHVwbGljYXRlSGFuZGxlIChwaV9oZWxwZXIuaFBy b2Nlc3MsIGhwQ29uSW4sCi0JCQkgIEdldEN1cnJlbnRQcm9jZXNzICgpLCAmaHBDb25JbiwgMCwK LQkJCSAgVFJVRSwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKSkKLSAgICAgIGdvdG8gY2xlYW51cF9o ZWxwZXJfcHJvY2VzczsKLSAgICBpZiAoIUR1cGxpY2F0ZUhhbmRsZSAocGlfaGVscGVyLmhQcm9j ZXNzLCBocENvbk91dCwKLQkJCSAgR2V0Q3VycmVudFByb2Nlc3MgKCksICZocENvbk91dCwgMCwK LQkJCSAgVFJVRSwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKSkKLSAgICAgIGdvdG8gY2xlYW51cF9w Y29uX2luOwotICAgIENsb3NlSGFuZGxlIChocik7Ci0gICAgQ2xvc2VIYW5kbGUgKGh3KTsKLSAg ICAvKiBDbGVhbiB1cCAqLwotICAgIERlbGV0ZVByb2NUaHJlYWRBdHRyaWJ1dGVMaXN0IChzaV9o ZWxwZXIubHBBdHRyaWJ1dGVMaXN0KTsKLSAgICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCks IDAsIHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QpOwotICB9Ci0gIC8qIFNldHRpbmcgaW5mb3Jt YXRpb24gb2Ygc3R1ZmZzIHJlZ2FyZGluZyBwc2V1ZG8gY29uc29sZSAqLwotICBnZXRfdHR5cCAo KS0+aF9oZWxwZXJfZ29vZGJ5ZSA9IGdvb2RieWU7Ci0gIGdldF90dHlwICgpLT5oX2hlbHBlcl9w cm9jZXNzID0gcGlfaGVscGVyLmhQcm9jZXNzOwotICBnZXRfdHR5cCAoKS0+aGVscGVyX3Byb2Nl c3NfaWQgPSBwaV9oZWxwZXIuZHdQcm9jZXNzSWQ7Ci0gIENsb3NlSGFuZGxlIChmcm9tX21hc3Rl cik7Ci0gIENsb3NlSGFuZGxlICh0b19tYXN0ZXIpOwotICBmcm9tX21hc3RlciA9IGhwQ29uSW47 Ci0gIHRvX21hc3RlciA9IGhwQ29uT3V0OwotICBSZXNpemVQc2V1ZG9Db25zb2xlIChnZXRfdHR5 cCAoKS0+aF9wc2V1ZG9fY29uc29sZSwgc2l6ZSk7Ci0gIHJldHVybiB0cnVlOwotCi1jbGVhbnVw X3Bjb25faW46Ci0gIENsb3NlSGFuZGxlIChocENvbkluKTsKLWNsZWFudXBfaGVscGVyX3Byb2Nl c3M6Ci0gIFNldEV2ZW50IChnb29kYnllKTsKLSAgV2FpdEZvclNpbmdsZU9iamVjdCAocGlfaGVs cGVyLmhQcm9jZXNzLCBJTkZJTklURSk7Ci0gIENsb3NlSGFuZGxlIChwaV9oZWxwZXIuaFByb2Nl c3MpOwotICBnb3RvIHNraXBfY2xvc2VfaGVsbG87Ci1jbGVhbnVwX2V2ZW50X2FuZF9waXBlczoK LSAgQ2xvc2VIYW5kbGUgKGhlbGxvKTsKLXNraXBfY2xvc2VfaGVsbG86Ci0gIENsb3NlSGFuZGxl IChnb29kYnllKTsKLSAgQ2xvc2VIYW5kbGUgKGhyKTsKLSAgQ2xvc2VIYW5kbGUgKGh3KTsKLWNs ZWFudXBfaGVhcDoKLSAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBzaV9oZWxwZXIu bHBBdHRyaWJ1dGVMaXN0KTsKLWNsZWFudXBfcHNldWRvX2NvbnNvbGU6Ci0gIHsKLSAgICBIUENP Tl9JTlRFUk5BTCAqaHAgPSAoSFBDT05fSU5URVJOQUwgKikgZ2V0X3R0eXAgKCktPmhfcHNldWRv X2NvbnNvbGU7Ci0gICAgSEFORExFIHRtcCA9IGhwLT5oQ29uSG9zdFByb2Nlc3M7Ci0gICAgQ2xv c2VQc2V1ZG9Db25zb2xlIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpOwotICAgIENsb3NlSGFuZGxl ICh0bXApOwotICB9Ci1mYWxsYmFjazoKLSAgQ2xvc2VIYW5kbGUgKGZyb21fbWFzdGVyKTsKLSAg Q2xvc2VIYW5kbGUgKHRvX3NsYXZlKTsKLSAgZnJvbV9tYXN0ZXIgPSBmcm9tX21hc3Rlcl9jeWc7 Ci0gIHRvX3NsYXZlID0gTlVMTDsKLSAgZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUgPSBO VUxMOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KIGJvb2wKIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OnNl dHVwICgpCiB7CkBAIC0zNTkzLDExICsyMjU5LDYgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6c2V0 dXAgKCkKICAgaWYgKHVuaXQgPCAwKQogICAgIHJldHVybiBmYWxzZTsKIAotICAvKiBmcm9tX21h c3RlciBzaG91bGQgYmUgdXNlZCBmb3IgcHNldWRvIGNvbnNvbGUuCi0gICAgIEp1c3QgY29weSBm cm9tX21hc3Rlcl9jeWcgaGVyZSBmb3IgdGhlIGNhc2UgdGhhdAotICAgICBwc2V1ZG8gY29uc29s ZSBpcyBub3QgYXZhaWxhYmxlLiAqLwotICBmcm9tX21hc3RlciA9IGZyb21fbWFzdGVyX2N5ZzsK LQogICBQcm90ZWN0SGFuZGxlMSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIHRvX3B0eSk7CiAKICAg dHR5JiB0ID0gKmN5Z3dpbl9zaGFyZWQtPnR0eVt1bml0XTsKQEAgLTM2OTYsMTUgKzIzNTcsMjEg QEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6c2V0dXAgKCkKICAgICAgIGdvdG8gZXJyOwogICAgIH0K IAotICB0LndpbnNpemUud3NfY29sID0gODA7Ci0gIHQud2luc2l6ZS53c19yb3cgPSAyNTsKLQot ICBzZXR1cF9wc2V1ZG9jb25zb2xlICgpOworICBfX3NtYWxsX3NwcmludGYgKHBpcGVuYW1lLCAi cHR5JWQtdG8tc2xhdmUiLCB1bml0KTsKKyAgcmVzID0gZmhhbmRsZXJfcGlwZTo6Y3JlYXRlICgm c2VjX25vbmUsICZmcm9tX21hc3RlciwgJnRvX3NsYXZlLAorCQkJICAgICAgIGZoYW5kbGVyX3B0 eV9jb21tb246OnBpcGVzaXplLCBwaXBlbmFtZSwgMCk7CisgIGlmIChyZXMpCisgICAgeworICAg ICAgZXJyc3RyID0gImlucHV0IHBpcGUiOworICAgICAgZ290byBlcnI7CisgICAgfQogCiAgIHQu c2V0X2Zyb21fbWFzdGVyIChmcm9tX21hc3Rlcik7CiAgIHQuc2V0X2Zyb21fbWFzdGVyX2N5ZyAo ZnJvbV9tYXN0ZXJfY3lnKTsKICAgdC5zZXRfdG9fbWFzdGVyICh0b19tYXN0ZXIpOwogICB0LnNl dF90b19tYXN0ZXJfY3lnICh0b19tYXN0ZXJfY3lnKTsKKyAgdC53aW5zaXplLndzX2NvbCA9IDgw OworICB0LndpbnNpemUud3Nfcm93ID0gMjU7CiAgIHQubWFzdGVyX3BpZCA9IG15c2VsZi0+cGlk OwogCiAgIGRldiAoKS5wYXJzZSAoREVWX1BUWU1fTUFKT1IsIHVuaXQpOwpAQCAtMzcxNyw2ICsy Mzg0LDcgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6c2V0dXAgKCkKIGVycjoKICAgX19zZXRlcnJu byAoKTsKICAgY2xvc2VfbWF5YmUgKGZyb21fc2xhdmUpOworICBjbG9zZV9tYXliZSAodG9fc2xh dmUpOwogICBjbG9zZV9tYXliZSAoZ2V0X2hhbmRsZSAoKSk7CiAgIGNsb3NlX21heWJlIChnZXRf b3V0cHV0X2hhbmRsZSAoKSk7CiAgIGNsb3NlX21heWJlIChpbnB1dF9hdmFpbGFibGVfZXZlbnQp OwpAQCAtMzc3Niw5ICsyNDQ0LDYgQEAgZmhhbmRsZXJfcHR5X2NvbW1vbjo6cHJvY2Vzc19vcG9z dF9vdXRwdXQgKEhBTkRMRSBoLCBjb25zdCB2b2lkICpwdHIsIHNzaXplX3QmIGwKIHsKICAgc3Np emVfdCB0b3dyaXRlID0gbGVuOwogICBCT09MIHJlcyA9IFRSVUU7Ci0gIEJPT0wgKFdJTkFQSSAq V3JpdGVGdW5jKQotICAgIChIQU5ETEUsIExQQ1ZPSUQsIERXT1JELCBMUERXT1JELCBMUE9WRVJM QVBQRUQpOwotICBXcml0ZUZ1bmMgPSBXcml0ZUZpbGVfT3JpZyA/IFdyaXRlRmlsZV9PcmlnIDog V3JpdGVGaWxlOwogICB3aGlsZSAodG93cml0ZSkKICAgICB7CiAgICAgICBpZiAoIWlzX2VjaG8p CkBAIC0zODAxLDcgKzI0NjYsNyBAQCBmaGFuZGxlcl9wdHlfY29tbW9uOjpwcm9jZXNzX29wb3N0 X291dHB1dCAoSEFORExFIGgsIGNvbnN0IHZvaWQgKnB0ciwgc3NpemVfdCYgbAogICAgICAgaWYg KCEoZ2V0X3R0eXAgKCktPnRpLmNfb2ZsYWcgJiBPUE9TVCkpCS8vIHJhdyBvdXRwdXQgbW9kZQog CXsKIAkgIERXT1JEIG4gPSBNSU4gKE9VVF9CVUZGRVJfU0laRSwgdG93cml0ZSk7Ci0JICByZXMg PSBXcml0ZUZ1bmMgKGgsIHB0ciwgbiwgJm4sIE5VTEwpOworCSAgcmVzID0gV3JpdGVGaWxlICho LCBwdHIsIG4sICZuLCBOVUxMKTsKIAkgIGlmICghcmVzKQogCSAgICBicmVhazsKIAkgIHB0ciA9 IChjaGFyICopIHB0ciArIG47CkBAIC0zODUxLDcgKzI1MTYsNyBAQCBmaGFuZGxlcl9wdHlfY29t bW9uOjpwcm9jZXNzX29wb3N0X291dHB1dCAoSEFORExFIGgsIGNvbnN0IHZvaWQgKnB0ciwgc3Np emVfdCYgbAogCQkgIGJyZWFrOwogCQl9CiAJICAgIH0KLQkgIHJlcyA9IFdyaXRlRnVuYyAoaCwg b3V0YnVmLCBuLCAmbiwgTlVMTCk7CisJICByZXMgPSBXcml0ZUZpbGUgKGgsIG91dGJ1Ziwgbiwg Jm4sIE5VTEwpOwogCSAgaWYgKCFyZXMpCiAJICAgIGJyZWFrOwogCSAgcHRyID0gKGNoYXIgKikg cHRyICsgcmM7CkBAIC0zODYxLDMgKzI1MjYsMTM0IEBAIGZoYW5kbGVyX3B0eV9jb21tb246OnBy b2Nlc3Nfb3Bvc3Rfb3V0cHV0IChIQU5ETEUgaCwgY29uc3Qgdm9pZCAqcHRyLCBzc2l6ZV90JiBs CiAgIGxlbiAtPSB0b3dyaXRlOwogICByZXR1cm4gcmVzOwogfQorCitib29sCitmaGFuZGxlcl9w dHlfc2xhdmU6OnNldHVwX3BzZXVkb2NvbnNvbGUgKFNUQVJUVVBJTkZPRVhXICpzaSwgYm9vbCBu b3Bjb24pCit7CisKKyAgLyogU2V0dGluZyBzd2l0Y2hfdG9fcGNvbl9pbiBpcyBuZWNlc3Nhcnkg ZXZlbiBpZgorICAgICBwc2V1ZG8gY29uc29sZSB3aWxsIG5vdCBiZSBhY3RpdmF0ZWQuICovCisg IGZoYW5kbGVyX2Jhc2UgKmZoID0gOjpjeWdoZWFwLT5mZHRhYlswXTsKKyAgaWYgKGZoICYmIGZo LT5nZXRfbWFqb3IgKCkgPT0gREVWX1BUWVNfTUFKT1IpCisgICAgeworICAgICAgZmhhbmRsZXJf cHR5X3NsYXZlICpwdHlzID0gKGZoYW5kbGVyX3B0eV9zbGF2ZSAqKSBmaDsKKyAgICAgIHB0eXMt PmdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9pbiA9IHRydWU7CisgICAgICBpZiAocHR5cy0+ Z2V0X3R0eXAgKCktPnBjb25fcGlkID09IDAKKwkgIHx8ICFwaW5mbyAocHR5cy0+Z2V0X3R0eXAg KCktPnBjb25fcGlkKSkKKwlwdHlzLT5nZXRfdHR5cCAoKS0+cGNvbl9waWQgPSBteXNlbGYtPnBp ZDsKKyAgICB9CisKKyAgaWYgKG5vcGNvbikKKyAgICByZXR1cm4gZmFsc2U7CisgIGlmIChnZXRf dHR5cCAoKS0+cGNvbl9waWQgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlkICE9IG15c2VsZi0+cGlk CisgICAgICAmJiAhIXBpbmZvIChnZXRfdHR5cCAoKS0+cGNvbl9waWQpKQorICAgIHJldHVybiBm YWxzZTsKKyAgaWYgKGRpc2FibGVfcGNvbikKKyAgICByZXR1cm4gZmFsc2U7CisgIC8qIElmIHRo ZSBsZWdhY3kgY29uc29sZSBtb2RlIGlzIGVuYWJsZWQsIHBzZXVkbyBjb25zb2xlIHNlZW1zCisg ICAgIG5vdCB0byB3b3JrIGFzIGV4cGVjdGVkLiBUbyBkZXRlcm1pbmUgY29uc29sZSBtb2RlLCBy ZWdpc3RyeQorICAgICBrZXkgRm9yY2VWMiBpbiBIS0VZX0NVUlJFTlRfVVNFUlxDb25zb2xlIGlz IGNoZWNrZWQuICovCisgIHJlZ19rZXkgcmVnIChIS0VZX0NVUlJFTlRfVVNFUiwgS0VZX1JFQUQs IEwiQ29uc29sZSIsIE5VTEwpOworICBpZiAocmVnLmVycm9yICgpKQorICAgIHJldHVybiBmYWxz ZTsKKyAgaWYgKHJlZy5nZXRfZHdvcmQgKEwiRm9yY2VWMiIsIDEpID09IDApCisgICAgeworICAg ICAgdGVybWlvc19wcmludGYgKCJQc2V1ZG8gY29uc29sZSBpcyBkaXNhYmxlZCAiCisJCSAgICAg ICJiZWNhdXNlIHRoZSBsZWdhY3kgY29uc29sZSBtb2RlIGlzIGVuYWJsZWQuIik7CisgICAgICBy ZXR1cm4gZmFsc2U7CisgICAgfQorCisgIENPT1JEIHNpemUgPSB7CisgICAgKFNIT1JUKSBnZXRf dHR5cCAoKS0+d2luc2l6ZS53c19jb2wsCisgICAgKFNIT1JUKSBnZXRfdHR5cCAoKS0+d2luc2l6 ZS53c19yb3cKKyAgfTsKKyAgY29uc3QgRFdPUkQgaW5oZXJpdF9jdXJzb3IgPSAxOworICBTZXRM YXN0RXJyb3IgKEVSUk9SX1NVQ0NFU1MpOworICBIUkVTVUxUIHJlcyA9IENyZWF0ZVBzZXVkb0Nv bnNvbGUgKHNpemUsIGdldF9oYW5kbGUgKCksIGdldF9vdXRwdXRfaGFuZGxlICgpLAorCQkJCSAg ICAgaW5oZXJpdF9jdXJzb3IsCisJCQkJICAgICAmZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNv bGUpOworICBpZiAocmVzICE9IFNfT0sgfHwgR2V0TGFzdEVycm9yICgpID09IEVSUk9SX1BST0Nf Tk9UX0ZPVU5EKQorICAgIHsKKyAgICAgIGlmIChyZXMgIT0gU19PSykKKwlzeXN0ZW1fcHJpbnRm ICgiQ3JlYXRlUHNldWRvQ29uc29sZSgpIGZhaWxlZC4gJTA4eCAlMDh4XG4iLAorCQkgICAgICAg R2V0TGFzdEVycm9yICgpLCByZXMpOworICAgICAgZ290byBmYWxsYmFjazsKKyAgICB9CisKKyAg U0laRV9UIGJ5dGVzUmVxdWlyZWQ7CisgIEluaXRpYWxpemVQcm9jVGhyZWFkQXR0cmlidXRlTGlz dCAoTlVMTCwgMSwgMCwgJmJ5dGVzUmVxdWlyZWQpOworICBaZXJvTWVtb3J5IChzaSwgc2l6ZW9m ICgqc2kpKTsKKyAgc2ktPlN0YXJ0dXBJbmZvLmNiID0gc2l6ZW9mIChTVEFSVFVQSU5GT0VYVyk7 CisgIHNpLT5scEF0dHJpYnV0ZUxpc3QgPSAoUFBST0NfVEhSRUFEX0FUVFJJQlVURV9MSVNUKQor ICAgIEhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGJ5dGVzUmVxdWlyZWQpOworICBp ZiAoc2ktPmxwQXR0cmlidXRlTGlzdCA9PSBOVUxMKQorICAgIGdvdG8gY2xlYW51cF9wc2V1ZG9f Y29uc29sZTsKKyAgaWYgKCFJbml0aWFsaXplUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3QgKHNpLT5s cEF0dHJpYnV0ZUxpc3QsCisJCQkJCSAgMSwgMCwgJmJ5dGVzUmVxdWlyZWQpKQorICAgIGdvdG8g Y2xlYW51cF9oZWFwOworICBpZiAoIVVwZGF0ZVByb2NUaHJlYWRBdHRyaWJ1dGUgKHNpLT5scEF0 dHJpYnV0ZUxpc3QsCisJCQkJICAwLAorCQkJCSAgUFJPQ19USFJFQURfQVRUUklCVVRFX1BTRVVE T0NPTlNPTEUsCisJCQkJICBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSwKKwkJCQkgIHNp emVvZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUpLAorCQkJCSAgTlVMTCwgTlVMTCkp CisgICAgZ290byBjbGVhbnVwX2hlYXA7CisgIHNpLT5TdGFydHVwSW5mby5kd0ZsYWdzID0gU1RB UlRGX1VTRVNUREhBTkRMRVM7CisgIHNpLT5TdGFydHVwSW5mby5oU3RkSW5wdXQgPSBOVUxMOwor ICBzaS0+U3RhcnR1cEluZm8uaFN0ZE91dHB1dCA9IE5VTEw7CisgIHNpLT5TdGFydHVwSW5mby5o U3RkRXJyb3IgPSBOVUxMOworCisgIHsKKyAgICBmaGFuZGxlcl9iYXNlICpmaDAgPSA6OmN5Z2hl YXAtPmZkdGFiWzBdOworICAgIGlmIChmaDAgJiYgZmgwLT5nZXRfZGV2aWNlICgpICE9IGdldF9k ZXZpY2UgKCkpCisgICAgICBzaS0+U3RhcnR1cEluZm8uaFN0ZElucHV0ID0gZmgwLT5nZXRfaGFu ZGxlICgpOworICAgIGZoYW5kbGVyX2Jhc2UgKmZoMSA9IDo6Y3lnaGVhcC0+ZmR0YWJbMV07Cisg ICAgaWYgKGZoMSAmJiBmaDEtPmdldF9kZXZpY2UgKCkgIT0gZ2V0X2RldmljZSAoKSkKKyAgICAg IHNpLT5TdGFydHVwSW5mby5oU3RkT3V0cHV0ID0gZmgxLT5nZXRfb3V0cHV0X2hhbmRsZSAoKTsK KyAgICBmaGFuZGxlcl9iYXNlICpmaDIgPSA6OmN5Z2hlYXAtPmZkdGFiWzJdOworICAgIGlmIChm aDIgJiYgZmgyLT5nZXRfZGV2aWNlICgpICE9IGdldF9kZXZpY2UgKCkpCisgICAgICBzaS0+U3Rh cnR1cEluZm8uaFN0ZEVycm9yID0gZmgyLT5nZXRfb3V0cHV0X2hhbmRsZSAoKTsKKyAgfQorCisg IGlmIChnZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fCAhcGluZm8gKGdldF90dHlwICgpLT5w Y29uX3BpZCkpCisgICAgZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gbXlzZWxmLT5waWQ7CisKKyAg aWYgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlICYmIGdldF90dHlwICgpLT5wY29uX3Bp ZCA9PSBteXNlbGYtPnBpZCkKKyAgICB7CisgICAgICBIUENPTl9JTlRFUk5BTCAqaHAgPSAoSFBD T05fSU5URVJOQUwgKikgZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGU7CisgICAgICBnZXRf dHR5cCAoKS0+aF9wY29uX3dyaXRlX3BpcGUgPSBocC0+aFdyaXRlUGlwZTsKKyAgICB9CisgIGdl dF90dHlwICgpLT5wY29uX3N0YXJ0ID0gdHJ1ZTsKKyAgcmV0dXJuIHRydWU7CisKK2NsZWFudXBf aGVhcDoKKyAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBzaS0+bHBBdHRyaWJ1dGVM aXN0KTsKK2NsZWFudXBfcHNldWRvX2NvbnNvbGU6CisgIGlmIChnZXRfdHR5cCAoKS0+aF9wc2V1 ZG9fY29uc29sZSkKKyAgICB7CisgICAgICBIUENPTl9JTlRFUk5BTCAqaHAgPSAoSFBDT05fSU5U RVJOQUwgKikgZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGU7CisgICAgICBIQU5ETEUgdG1w ID0gaHAtPmhDb25Ib3N0UHJvY2VzczsKKyAgICAgIENsb3NlUHNldWRvQ29uc29sZSAoZ2V0X3R0 eXAgKCktPmhfcHNldWRvX2NvbnNvbGUpOworICAgICAgQ2xvc2VIYW5kbGUgKHRtcCk7CisgICAg fQorZmFsbGJhY2s6CisgIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlID0gTlVMTDsKKyAg cmV0dXJuIGZhbHNlOworfQorCit2b2lkCitmaGFuZGxlcl9wdHlfc2xhdmU6OmNsb3NlX3BzZXVk b2NvbnNvbGUgKHZvaWQpCit7CisgIGlmIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSkK KyAgICB7CisgICAgICBnZXRfdHR5cCAoKS0+d2FpdF9wY29uX2Z3ZCAoKTsKKyAgICAgIEhQQ09O X0lOVEVSTkFMICpocCA9IChIUENPTl9JTlRFUk5BTCAqKSBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9f Y29uc29sZTsKKyAgICAgIEhBTkRMRSB0bXAgPSBocC0+aENvbkhvc3RQcm9jZXNzOworICAgICAg Q2xvc2VQc2V1ZG9Db25zb2xlIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSk7CisgICAg ICBDbG9zZUhhbmRsZSAodG1wKTsKKyAgICAgIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xl ID0gTlVMTDsKKyAgICAgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9pbiA9IGZhbHNlOwor ICAgICAgZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gMDsKKyAgICAgIGdldF90dHlwICgpLT5wY29u X3N0YXJ0ID0gZmFsc2U7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9mb3Jr LmNjIGIvd2luc3VwL2N5Z3dpbi9mb3JrLmNjCmluZGV4IDdjMDdiMDYyZS4uMzgxNzJjYTFlIDEw MDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2ZvcmsuY2MKKysrIGIvd2luc3VwL2N5Z3dpbi9mb3Jr LmNjCkBAIC0xMzQsMzYgKzEzNCw2IEBAIGNoaWxkX2luZm86OnByZWZvcmsgKGJvb2wgZGV0YWNo ZWQpCiBpbnQgX19zdGRjYWxsCiBmcm9rOjpjaGlsZCAodm9sYXRpbGUgY2hhciAqIHZvbGF0aWxl IGhlcmUpCiB7Ci0gIGN5Z2hlYXBfZmRlbnVtIGNmZCAoZmFsc2UpOwotICB3aGlsZSAoY2ZkLm5l eHQgKCkgPj0gMCkKLSAgICBpZiAoY2ZkLT5nZXRfbWFqb3IgKCkgPT0gREVWX1BUWU1fTUFKT1Ip Ci0gICAgICB7Ci0JZmhhbmRsZXJfYmFzZSAqZmggPSBjZmQ7Ci0JZmhhbmRsZXJfcHR5X21hc3Rl ciAqcHR5bSA9IChmaGFuZGxlcl9wdHlfbWFzdGVyICopIGZoOwotCWlmIChwdHltLT5nZXRfcHNl dWRvX2NvbnNvbGUgKCkpCi0JICB7Ci0JICAgIGRlYnVnX3ByaW50ZiAoImZvdW5kIGEgUFRZIG1h c3RlciAlZDogaGVscGVyX1BJRD0lZCIsCi0JCQkgIHB0eW0tPmdldF9taW5vciAoKSwgcHR5bS0+ Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpKTsKLQkgICAgaWYgKGZoYW5kbGVyX2NvbnNvbGU6Omdl dF9jb25zb2xlX3Byb2Nlc3NfaWQgKAotCQkJCXB0eW0tPmdldF9oZWxwZXJfcHJvY2Vzc19pZCAo KSwgdHJ1ZSkpCi0JICAgICAgLyogQWxyZWFkeSBhdHRhY2hlZCAqLwotCSAgICAgIGJyZWFrOwot CSAgICBlbHNlCi0JICAgICAgewotCQlpZiAocHR5bS0+YXR0YWNoX3Bjb25faW5fZm9yayAoKSkK LQkJICB7Ci0JCSAgICBGcmVlQ29uc29sZSAoKTsKLQkJICAgIGlmICghQXR0YWNoQ29uc29sZSAo cHR5bS0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpKSkKLQkJICAgICAgLyogRXJyb3IgKi87Ci0J CSAgICBlbHNlCi0JCSAgICAgIGJyZWFrOwotCQkgIH0KLQkgICAgICB9Ci0JICB9Ci0gICAgICB9 Ci0gIGV4dGVybiB2b2lkIGNsZWFyX3Bjb25fYXR0YWNoZWRfdG8gKHZvaWQpOyAvKiBmaGFuZGxl cl90dHkuY2MgKi8KLSAgY2xlYXJfcGNvbl9hdHRhY2hlZF90byAoKTsKLQogICBIQU5ETEUmIGhQ YXJlbnQgPSBjaC5wYXJlbnQ7CiAKICAgc3luY193aXRoX3BhcmVudCAoImFmdGVyIGxvbmdqbXAi LCB0cnVlKTsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vc2VsZWN0LmNjIGIvd2luc3VwL2N5 Z3dpbi9zZWxlY3QuY2MKaW5kZXggNGE4ZjNiMmVjLi45ZjFhOGE1N2EgMTAwNjQ0Ci0tLSBhL3dp bnN1cC9jeWd3aW4vc2VsZWN0LmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vc2VsZWN0LmNjCkBAIC0x MjE1LDggKzEyMTUsNyBAQCB2ZXJpZnlfdHR5X3NsYXZlIChzZWxlY3RfcmVjb3JkICptZSwgZmRf c2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRzLAogCSAgIGZkX3NldCAqZXhjZXB0ZmRzKQog ewogICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICopIG1l LT5maDsKLSAgaWYgKG1lLT5yZWFkX3NlbGVjdGVkICYmICFwdHlzLT50b19iZV9yZWFkX2Zyb21f cGNvbiAoKSAmJgotICAgICAgSXNFdmVudFNpZ25hbGxlZCAocHR5cy0+aW5wdXRfYXZhaWxhYmxl X2V2ZW50KSkKKyAgaWYgKG1lLT5yZWFkX3NlbGVjdGVkICYmIElzRXZlbnRTaWduYWxsZWQgKHB0 eXMtPmlucHV0X2F2YWlsYWJsZV9ldmVudCkpCiAgICAgbWUtPnJlYWRfcmVhZHkgPSB0cnVlOwog ICByZXR1cm4gc2V0X2JpdHMgKG1lLCByZWFkZmRzLCB3cml0ZWZkcywgZXhjZXB0ZmRzKTsKIH0K QEAgLTEyMjksOCArMTIyOCw2IEBAIHBlZWtfcHR5X3NsYXZlIChzZWxlY3RfcmVjb3JkICpzLCBi b29sIGZyb21fc2VsZWN0KQogICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJf cHR5X3NsYXZlICopIGZoOwogCiAgIHB0eXMtPnJlc2V0X3N3aXRjaF90b19wY29uICgpOwotICBp ZiAocHR5cy0+dG9fYmVfcmVhZF9mcm9tX3Bjb24gKCkpCi0gICAgcHR5cy0+dXBkYXRlX3Bjb25f aW5wdXRfc3RhdGUgKHRydWUpOwogCiAgIGlmIChzLT5yZWFkX3NlbGVjdGVkKQogICAgIHsKZGlm ZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vc21hbGxwcmludC5jYyBiL3dpbnN1cC9jeWd3aW4vc21h bGxwcmludC5jYwppbmRleCA5Y2ZiNDE5ODcuLjRhMTRlZTNjZiAxMDA2NDQKLS0tIGEvd2luc3Vw L2N5Z3dpbi9zbWFsbHByaW50LmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vc21hbGxwcmludC5jYwpA QCAtNDA1LDcgKzQwNSw2IEBAIHNtYWxsX3ByaW50ZiAoY29uc3QgY2hhciAqZm10LCAuLi4pCiAg IGNvdW50ID0gX19zbWFsbF92c3ByaW50ZiAoYnVmLCBmbXQsIGFwKTsKICAgdmFfZW5kIChhcCk7 CiAKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoR2V0U3RkSGFuZGxlIChTVERf RVJST1JfSEFORExFKSk7CiAgIFdyaXRlRmlsZSAoR2V0U3RkSGFuZGxlIChTVERfRVJST1JfSEFO RExFKSwgYnVmLCBjb3VudCwgJmRvbmUsIE5VTEwpOwogICBGbHVzaEZpbGVCdWZmZXJzIChHZXRT dGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpKTsKIH0KQEAgLTQzMiw3ICs0MzEsNiBAQCBjb25z b2xlX3ByaW50ZiAoY29uc3QgY2hhciAqZm10LCAuLi4pCiAgIGNvdW50ID0gX19zbWFsbF92c3By aW50ZiAoYnVmLCBmbXQsIGFwKTsKICAgdmFfZW5kIChhcCk7CiAKLSAgc2V0X2lzaHlicmlkX2Fu ZF9zd2l0Y2hfdG9fcGNvbiAoY29uc29sZV9oYW5kbGUpOwogICBXcml0ZUZpbGUgKGNvbnNvbGVf aGFuZGxlLCBidWYsIGNvdW50LCAmZG9uZSwgTlVMTCk7CiAgIEZsdXNoRmlsZUJ1ZmZlcnMgKGNv bnNvbGVfaGFuZGxlKTsKIH0KZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vc3Bhd24uY2MgYi93 aW5zdXAvY3lnd2luL3NwYXduLmNjCmluZGV4IGU3MGNlYjg2ZC4uZDEyY2U3YjBhIDEwMDY0NAot LS0gYS93aW5zdXAvY3lnd2luL3NwYXduLmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vc3Bhd24uY2MK QEAgLTE3Nyw3ICsxNzcsNyBAQCBmaW5kX2V4ZWMgKGNvbnN0IGNoYXIgKm5hbWUsIHBhdGhfY29u diYgYnVmLCBjb25zdCBjaGFyICpzZWFyY2gsCiAvKiBVdGlsaXR5IGZvciBjaGlsZF9pbmZvX3Nw YXduOjp3b3JrZXIuICAqLwogCiBzdGF0aWMgSEFORExFCi1oYW5kbGUgKGludCBmZCwgYm9vbCB3 cml0aW5nLCBib29sIGlzY3lnd2luKQoraGFuZGxlIChpbnQgZmQsIGJvb2wgd3JpdGluZykKIHsK ICAgSEFORExFIGg7CiAgIGN5Z2hlYXBfZmRnZXQgY2ZkIChmZCk7CkBAIC0xODgsMTcgKzE4OCwz MCBAQCBoYW5kbGUgKGludCBmZCwgYm9vbCB3cml0aW5nLCBib29sIGlzY3lnd2luKQogICAgIGgg PSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKICAgZWxzZSBpZiAoIXdyaXRpbmcpCiAgICAgaCA9IGNm ZC0+Z2V0X2hhbmRsZSAoKTsKLSAgZWxzZSBpZiAoY2ZkLT5nZXRfbWFqb3IgKCkgPT0gREVWX1BU WVNfTUFKT1IgJiYgaXNjeWd3aW4pCi0gICAgewotICAgICAgZmhhbmRsZXJfcHR5X3NsYXZlICpw dHlzID0gKGZoYW5kbGVyX3B0eV9zbGF2ZSAqKShmaGFuZGxlcl9iYXNlICopIGNmZDsKLSAgICAg IGggPSBwdHlzLT5nZXRfb3V0cHV0X2hhbmRsZV9jeWcgKCk7Ci0gICAgfQogICBlbHNlCiAgICAg aCA9IGNmZC0+Z2V0X291dHB1dF9oYW5kbGUgKCk7CiAKICAgcmV0dXJuIGg7CiB9CiAKK3N0YXRp YyBib29sCitpc19jb25zb2xlX2FwcCAoV0NIQVIgKmZpbGVuYW1lKQoreworICBIQU5ETEUgaDsK KyAgY29uc3QgaW50IGlkX29mZnNldCA9IDkyOworICBoID0gQ3JlYXRlRmlsZVcgKGZpbGVuYW1l LCBHRU5FUklDX1JFQUQsIEZJTEVfU0hBUkVfUkVBRCwKKwkJICBOVUxMLCBPUEVOX0VYSVNUSU5H LCAwLCBOVUxMKTsKKyAgY2hhciBidWZbMTAyNF07CisgIERXT1JEIG47CisgIFJlYWRGaWxlICho LCBidWYsIHNpemVvZiAoYnVmKSwgJm4sIDApOworICBDbG9zZUhhbmRsZSAoaCk7CisgIGNoYXIg KnAgPSAoY2hhciAqKSBtZW1tZW0gKGJ1ZiwgbiwgIlBFXDBcMCIsIDQpOworICBpZiAocCAmJiBw ICsgaWRfb2Zmc2V0IDw9IGJ1ZiArIG4pCisgICAgcmV0dXJuIHBbaWRfb2Zmc2V0XSA9PSAnXDAw Myc7IC8qIDAyOiBHVUksIDAzOiBjb25zb2xlICovCisgIGVsc2UKKyAgICByZXR1cm4gZmFsc2U7 Cit9CisKIGludAogaXNjbWQgKGNvbnN0IGNoYXIgKmFyZ3YwLCBjb25zdCBjaGFyICp3aGF0KQog ewpAQCAtMjY2LDggKzI3OSw2IEBAIGNoaWxkX2luZm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hh ciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAogewogICBib29sIHJjOwogICBp bnQgcmVzID0gLTE7Ci0gIERXT1JEIHBpZF9yZXN0b3JlID0gMDsKLSAgYm9vbCBhdHRhY2hfdG9f Y29uc29sZSA9IGZhbHNlOwogICBwaWRfdCBjdHR5X3BnaWQgPSAwOwogCiAgIC8qIFNlYXJjaCBm b3IgQ1RUWSBhbmQgcmV0cmlldmUgaXRzIFBHSUQgKi8KQEAgLTU4Nyw5ICs1OTgsNyBAQCBjaGls ZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25zdCBjaGFyICpj b25zdCAqYXJndiwKIAkJCSBQUk9DRVNTX1FVRVJZX0xJTUlURURfSU5GT1JNQVRJT04pKQogCXNh ID0gJnNlY19ub25lX25paDsKIAotICAgICAgLyogQXR0YWNoIHRvIHBzZXVkbyBjb25zb2xlIGlm IHB0eSBzYWx2ZSBpcyB1c2VkICovCi0gICAgICBwaWRfcmVzdG9yZSA9IGZoYW5kbGVyX2NvbnNv bGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQKLQkoR2V0Q3VycmVudFByb2Nlc3NJZCAoKSwgZmFs c2UpOworICAgICAgZmhhbmRsZXJfcHR5X3NsYXZlICpwdHlzX3ByaW1hcnkgPSBOVUxMOwogICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpICsrKQogCXsKIAkgIGNvbnN0IGludCBjaGtfb3Jk ZXJbXSA9IHsxLCAwLCAyfTsKQEAgLTU5OCwyOSArNjA3LDExIEBAIGNoaWxkX2luZm9fc3Bhd246 OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAog CSAgaWYgKGZoICYmIGZoLT5nZXRfbWFqb3IgKCkgPT0gREVWX1BUWVNfTUFKT1IpCiAJICAgIHsK IAkgICAgICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICop IGZoOwotCSAgICAgIGlmIChwdHlzLT5nZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0JCXsKLQkJICBE V09SRCBoZWxwZXJfcHJvY2Vzc19pZCA9IHB0eXMtPmdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKTsK LQkJICBkZWJ1Z19wcmludGYgKCJmb3VuZCBhIFBUWSBzbGF2ZSAlZDogaGVscGVyX1BJRD0lZCIs Ci0JCQkJICAgIGZoLT5nZXRfbWlub3IgKCksIGhlbHBlcl9wcm9jZXNzX2lkKTsKLQkJICBpZiAo ZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAotCQkJCQkgICAgICAoaGVs cGVyX3Byb2Nlc3NfaWQsIHRydWUpKQotCQkgICAgLyogQWxyZWFkeSBhdHRhY2hlZCAqLwotCQkg ICAgYXR0YWNoX3RvX2NvbnNvbGUgPSB0cnVlOwotCQkgIGVsc2UgaWYgKCFhdHRhY2hfdG9fY29u c29sZSkKLQkJICAgIHsKLQkJICAgICAgRnJlZUNvbnNvbGUgKCk7Ci0JCSAgICAgIGlmIChBdHRh Y2hDb25zb2xlIChoZWxwZXJfcHJvY2Vzc19pZCkpCi0JCQlhdHRhY2hfdG9fY29uc29sZSA9IHRy dWU7Ci0JCSAgICB9Ci0JCSAgcHR5cy0+Zml4dXBfYWZ0ZXJfYXR0YWNoICghaXNjeWd3aW4gKCks IGZkKTsKLQkJICBpZiAobW9kZSA9PSBfUF9PVkVSTEFZKQotCQkgICAgcHR5cy0+c2V0X2ZyZWVj b25zb2xlX29uX2Nsb3NlIChpc2N5Z3dpbiAoKSk7Ci0JCX0KKwkgICAgICBpZiAocHR5c19wcmlt YXJ5ID09IE5VTEwpCisJCXB0eXNfcHJpbWFyeSA9IHB0eXM7CiAJICAgIH0KIAkgIGVsc2UgaWYg KGZoICYmIGZoLT5nZXRfbWFqb3IgKCkgPT0gREVWX0NPTlNfTUFKT1IpCiAJICAgIHsKLQkgICAg ICBhdHRhY2hfdG9fY29uc29sZSA9IHRydWU7CiAJICAgICAgZmhhbmRsZXJfY29uc29sZSAqY29u cyA9IChmaGFuZGxlcl9jb25zb2xlICopIGZoOwogCSAgICAgIGlmICh3aW5jYXAuaGFzX2Nvbl8y NGJpdF9jb2xvcnMgKCkgJiYgIWlzY3lnd2luICgpKQogCQlpZiAoZmQgPT0gMSB8fCBmZCA9PSAy KQpAQCAtNjMwLDE3ICs2MjEsMjggQEAgY2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBj aGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiAKICAgICAgIC8qIFNldCB1 cCBuZWVkZWQgaGFuZGxlcyBmb3Igc3RkaW8gKi8KICAgICAgIHNpLmR3RmxhZ3MgPSBTVEFSVEZf VVNFU1RESEFORExFUzsKLSAgICAgIHNpLmhTdGRJbnB1dCA9IGhhbmRsZSAoKGluX19zdGRpbiA8 IDAgPyAwIDogaW5fX3N0ZGluKSwgZmFsc2UsCi0JCQkgICAgIGlzY3lnd2luICgpKTsKLSAgICAg IHNpLmhTdGRPdXRwdXQgPSBoYW5kbGUgKChpbl9fc3Rkb3V0IDwgMCA/IDEgOiBpbl9fc3Rkb3V0 KSwgdHJ1ZSwKLQkJCSAgICAgIGlzY3lnd2luICgpKTsKLSAgICAgIHNpLmhTdGRFcnJvciA9IGhh bmRsZSAoMiwgdHJ1ZSwgaXNjeWd3aW4gKCkpOworICAgICAgc2kuaFN0ZElucHV0ID0gaGFuZGxl ICgoaW5fX3N0ZGluIDwgMCA/IDAgOiBpbl9fc3RkaW4pLCBmYWxzZSk7CisgICAgICBzaS5oU3Rk T3V0cHV0ID0gaGFuZGxlICgoaW5fX3N0ZG91dCA8IDAgPyAxIDogaW5fX3N0ZG91dCksIHRydWUp OworICAgICAgc2kuaFN0ZEVycm9yID0gaGFuZGxlICgyLCB0cnVlKTsKIAogICAgICAgc2kuY2Ig PSBzaXplb2YgKHNpKTsKIAogICAgICAgaWYgKCFpc2N5Z3dpbiAoKSkKIAlpbml0X2NvbnNvbGVf aGFuZGxlciAobXlzZWxmLT5jdHR5ID4gMCk7CiAKKyAgICAgIGJvb2wgZW5hYmxlX3Bjb24gPSBm YWxzZTsKKyAgICAgIFNUQVJUVVBJTkZPRVhXIHNpX3Bjb247CisgICAgICBaZXJvTWVtb3J5ICgm c2lfcGNvbiwgc2l6ZW9mIChzaV9wY29uKSk7CisgICAgICBTVEFSVFVQSU5GT1cgKnNpX3RtcCA9 ICZzaTsKKyAgICAgIGlmICghaXNjeWd3aW4gKCkgJiYgcHR5c19wcmltYXJ5ICYmIGlzX2NvbnNv bGVfYXBwIChydW5wYXRoKSkKKwlpZiAocHR5c19wcmltYXJ5LT5zZXR1cF9wc2V1ZG9jb25zb2xl ICgmc2lfcGNvbiwKKwkJCSAgICAgbW9kZSAhPSBfUF9PVkVSTEFZICYmIG1vZGUgIT0gX1BfV0FJ VCkpCisJICB7CisJICAgIGNfZmxhZ3MgfD0gRVhURU5ERURfU1RBUlRVUElORk9fUFJFU0VOVDsK KwkgICAgc2lfdG1wID0gJnNpX3Bjb24uU3RhcnR1cEluZm87CisJICAgIGVuYWJsZV9wY29uID0g dHJ1ZTsKKwkgIH0KKwogICAgIGxvb3A6CiAgICAgICAvKiBXaGVuIHJ1aWQgIT0gZXVpZCB3ZSBj cmVhdGUgdGhlIG5ldyBwcm9jZXNzIHVuZGVyIHRoZSBjdXJyZW50IG9yaWdpbmFsCiAJIGFjY291 bnQgYW5kIGltcGVyc29uYXRlIGluIGNoaWxkLCB0aGlzIHdheSBtYWludGFpbmluZyB0aGUgZGlm ZmVyZW50CkBAIC02NjksNyArNjcxLDcgQEAgY2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25z dCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiAJCQkgICAgICAgY19m bGFncywKIAkJCSAgICAgICBlbnZibG9jaywJLyogZW52aXJvbm1lbnQgKi8KIAkJCSAgICAgICBO VUxMLAotCQkJICAgICAgICZzaSwKKwkJCSAgICAgICBzaV90bXAsCiAJCQkgICAgICAgJnBpKTsK IAl9CiAgICAgICBlbHNlCkBAIC03MjMsNyArNzI1LDcgQEAgY2hpbGRfaW5mb19zcGF3bjo6d29y a2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiAJCQkg ICAgICAgY19mbGFncywKIAkJCSAgICAgICBlbnZibG9jaywJLyogZW52aXJvbm1lbnQgKi8KIAkJ CSAgICAgICBOVUxMLAotCQkJICAgICAgICZzaSwKKwkJCSAgICAgICBzaV90bXAsCiAJCQkgICAg ICAgJnBpKTsKIAkgIGlmIChod3N0KQogCSAgICB7CkBAIC03MzYsNiArNzM4LDExIEBAIGNoaWxk X2luZm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNv bnN0ICphcmd2LAogCSAgICAgIENsb3NlRGVza3RvcCAoaGRzayk7CiAJICAgIH0KIAl9CisgICAg ICBpZiAoZW5hYmxlX3Bjb24pCisJeworCSAgRGVsZXRlUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3Qg KHNpX3Bjb24ubHBBdHRyaWJ1dGVMaXN0KTsKKwkgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAo KSwgMCwgc2lfcGNvbi5scEF0dHJpYnV0ZUxpc3QpOworCX0KIAogICAgICAgaWYgKG1vZGUgIT0g X1BfT1ZFUkxBWSkKIAlTZXRIYW5kbGVJbmZvcm1hdGlvbiAobXlfd3JfcHJvY19waXBlLCBIQU5E TEVfRkxBR19JTkhFUklULApAQCAtOTA4LDYgKzkxNSwxMSBAQCBjaGlsZF9pbmZvX3NwYXduOjp3 b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25zdCBjaGFyICpjb25zdCAqYXJndiwKIAkg ICAgfQogCSAgaWYgKHNlbSkKIAkgICAgX19wb3NpeF9zcGF3bl9zZW1fcmVsZWFzZSAoc2VtLCAw KTsKKwkgIGlmIChlbmFibGVfcGNvbikKKwkgICAgeworCSAgICAgIFdhaXRGb3JTaW5nbGVPYmpl Y3QgKHBpLmhQcm9jZXNzLCBJTkZJTklURSk7CisJICAgICAgcHR5c19wcmltYXJ5LT5jbG9zZV9w c2V1ZG9jb25zb2xlICgpOworCSAgICB9CiAJICBteXNlbGYuZXhpdCAoRVhJVENPREVfTk9TRVQp OwogCSAgYnJlYWs7CiAJY2FzZSBfUF9XQUlUOgpAQCAtOTE1LDYgKzkyNyw4IEBAIGNoaWxkX2lu Zm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0 ICphcmd2LAogCSAgc3lzdGVtX2NhbGwuYXJtICgpOwogCSAgaWYgKHdhaXRwaWQgKGN5Z3BpZCwg JnJlcywgMCkgIT0gY3lncGlkKQogCSAgICByZXMgPSAtMTsKKwkgIGlmIChlbmFibGVfcGNvbikK KwkgICAgcHR5c19wcmltYXJ5LT5jbG9zZV9wc2V1ZG9jb25zb2xlICgpOwogCSAgYnJlYWs7CiAJ Y2FzZSBfUF9ERVRBQ0g6CiAJICByZXMgPSAwOwkvKiBMb3N0IGFsbCBtZW1vcnkgb2YgdGhpcyBj aGlsZC4gKi8KQEAgLTk0MSwyMSArOTU1LDYgQEAgY2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChj b25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiAgIGlmIChlbnZi bG9jaykKICAgICBmcmVlIChlbnZibG9jayk7CiAKLSAgaWYgKGF0dGFjaF90b19jb25zb2xlICYm IHBpZF9yZXN0b3JlKQotICAgIHsKLSAgICAgIEZyZWVDb25zb2xlICgpOwotICAgICAgQXR0YWNo Q29uc29sZSAocGlkX3Jlc3RvcmUpOwotICAgICAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxzZSk7 Ci0gICAgICBpbnQgZmQ7Ci0gICAgICB3aGlsZSAoKGZkID0gY2ZkLm5leHQgKCkpID49IDApCi0J aWYgKGNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SKQotCSAgewotCSAgICBmaGFu ZGxlcl9wdHlfc2xhdmUgKnB0eXMgPQotCSAgICAgIChmaGFuZGxlcl9wdHlfc2xhdmUgKikgKGZo YW5kbGVyX2Jhc2UgKikgY2ZkOwotCSAgICBwdHlzLT5maXh1cF9hZnRlcl9hdHRhY2ggKGZhbHNl LCBmZCk7Ci0JICB9Ci0gICAgfQotCiAgIHJldHVybiAoaW50KSByZXM7CiB9CiAKZGlmZiAtLWdp dCBhL3dpbnN1cC9jeWd3aW4vc3RyYWNlLmNjIGIvd2luc3VwL2N5Z3dpbi9zdHJhY2UuY2MKaW5k ZXggZjBhZWYzYTM2Li4zNWY4YTU5YWUgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vc3RyYWNl LmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vc3RyYWNlLmNjCkBAIC0yNjQsNyArMjY0LDYgQEAgc3Ry YWNlOjp2cHJudGYgKHVuc2lnbmVkIGNhdGVnb3J5LCBjb25zdCBjaGFyICpmdW5jLCBjb25zdCBj aGFyICpmbXQsIHZhX2xpc3QgYXAKICAgaWYgKGNhdGVnb3J5ICYgX1NUUkFDRV9TWVNURU0pCiAg ICAgewogICAgICAgRFdPUkQgZG9uZTsKLSAgICAgIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3Rv X3Bjb24gKEdldFN0ZEhhbmRsZSAoU1REX0VSUk9SX0hBTkRMRSkpOwogICAgICAgV3JpdGVGaWxl IChHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpLCBidWYsIGxlbiwgJmRvbmUsIDApOwog ICAgICAgRmx1c2hGaWxlQnVmZmVycyAoR2V0U3RkSGFuZGxlIChTVERfRVJST1JfSEFORExFKSk7 CiAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgbWVzc2FnZSBzaG93cyB1cCBvbiB0aGUgc2Ny ZWVuLCB0b28sIHNpbmNlIHRoaXMgaXMKQEAgLTI3Niw3ICsyNzUsNiBAQCBzdHJhY2U6OnZwcm50 ZiAodW5zaWduZWQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKmZtdCwg dmFfbGlzdCBhcAogCQkJCSAmc2VjX25vbmUsIE9QRU5fRVhJU1RJTkcsIDAsIDApOwogCSAgaWYg KGggIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCiAJICAgIHsKLQkgICAgICBzZXRfaXNoeWJyaWRf YW5kX3N3aXRjaF90b19wY29uIChoKTsKIAkgICAgICBXcml0ZUZpbGUgKGgsIGJ1ZiwgbGVuLCAm ZG9uZSwgMCk7CiAJICAgICAgQ2xvc2VIYW5kbGUgKGgpOwogCSAgICB9CmRpZmYgLS1naXQgYS93 aW5zdXAvY3lnd2luL3R0eS5jYyBiL3dpbnN1cC9jeWd3aW4vdHR5LmNjCmluZGV4IDRjYjY4Zjc3 Ni4uZDYwZjI3NTQ1IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3R0eS5jYworKysgYi93aW5z dXAvY3lnd2luL3R0eS5jYwpAQCAtMjM0LDIwICsyMzQsMTQgQEAgdHR5Ojppbml0ICgpCiAgIHdh c19vcGVuZWQgPSBmYWxzZTsKICAgbWFzdGVyX3BpZCA9IDA7CiAgIGlzX2NvbnNvbGUgPSBmYWxz ZTsKLSAgYXR0YWNoX3Bjb25faW5fZm9yayA9IGZhbHNlOwotICBoX3BzZXVkb19jb25zb2xlID0g TlVMTDsKICAgY29sdW1uID0gMDsKKyAgaF9wc2V1ZG9fY29uc29sZSA9IE5VTEw7CiAgIHN3aXRj aF90b19wY29uX2luID0gZmFsc2U7Ci0gIHN3aXRjaF90b19wY29uX291dCA9IGZhbHNlOwotICBz Y3JlZW5fYWx0ZXJuYXRlZCA9IGZhbHNlOwogICBtYXNrX3N3aXRjaF90b19wY29uX2luID0gZmFs c2U7CiAgIHBjb25fcGlkID0gMDsKICAgdGVybV9jb2RlX3BhZ2UgPSAwOwotICBuZWVkX3JlZHJh d19zY3JlZW4gPSB0cnVlOwogICBwY29uX2xhc3RfdGltZSA9IDA7Ci0gIHBjb25faW5fZW1wdHkg PSB0cnVlOwotICByZXFfdHJhbnNmZXJfaW5wdXRfdG9fcGNvbiA9IGZhbHNlOwotICByZXFfZmx1 c2hfcGNvbl9pbnB1dCA9IGZhbHNlOworICBwY29uX3N0YXJ0ID0gZmFsc2U7CiB9CiAKIEhBTkRM RQpAQCAtMjkzLDE2ICsyODcsNiBAQCB0dHlfbWluOjp0dHluYW1lICgpCiAgIHJldHVybiBkLm5h bWUgKCk7CiB9CiAKLXZvaWQKLXR0eTo6c2V0X3N3aXRjaF90b19wY29uX291dCAoYm9vbCB2KQot ewotICBpZiAoc3dpdGNoX3RvX3Bjb25fb3V0ICE9IHYpCi0gICAgewotICAgICAgd2FpdF9wY29u X2Z3ZCAoKTsKLSAgICAgIHN3aXRjaF90b19wY29uX291dCA9IHY7Ci0gICAgfQotfQotCiB2b2lk CiB0dHk6OndhaXRfcGNvbl9md2QgKHZvaWQpCiB7CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2lu L3R0eS5oIGIvd2luc3VwL2N5Z3dpbi90dHkuaAppbmRleCA5MjBlMzJiMTYuLmM0OTFkMzg5MSAx MDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi90dHkuaAorKysgYi93aW5zdXAvY3lnd2luL3R0eS5o CkBAIC05NCwyMSArOTQsMTMgQEAgcHJpdmF0ZToKICAgSEFORExFIF90b19tYXN0ZXI7CiAgIEhB TkRMRSBfdG9fbWFzdGVyX2N5ZzsKICAgSFBDT04gaF9wc2V1ZG9fY29uc29sZTsKLSAgSEFORExF IGhfaGVscGVyX3Byb2Nlc3M7Ci0gIERXT1JEIGhlbHBlcl9wcm9jZXNzX2lkOwotICBIQU5ETEUg aF9oZWxwZXJfZ29vZGJ5ZTsKLSAgYm9vbCBhdHRhY2hfcGNvbl9pbl9mb3JrOworICBib29sIHBj b25fc3RhcnQ7CiAgIGJvb2wgc3dpdGNoX3RvX3Bjb25faW47Ci0gIGJvb2wgc3dpdGNoX3RvX3Bj b25fb3V0OwotICBib29sIHNjcmVlbl9hbHRlcm5hdGVkOwogICBib29sIG1hc2tfc3dpdGNoX3Rv X3Bjb25faW47CiAgIHBpZF90IHBjb25fcGlkOwogICBVSU5UIHRlcm1fY29kZV9wYWdlOwotICBi b29sIG5lZWRfcmVkcmF3X3NjcmVlbjsKICAgRFdPUkQgcGNvbl9sYXN0X3RpbWU7Ci0gIGJvb2wg cGNvbl9pbl9lbXB0eTsKLSAgYm9vbCByZXFfdHJhbnNmZXJfaW5wdXRfdG9fcGNvbjsKLSAgYm9v bCByZXFfZmx1c2hfcGNvbl9pbnB1dDsKKyAgSEFORExFIGhfcGNvbl93cml0ZV9waXBlOwogCiBw dWJsaWM6CiAgIEhBTkRMRSBmcm9tX21hc3RlciAoKSBjb25zdCB7IHJldHVybiBfZnJvbV9tYXN0 ZXI7IH0KQEAgLTEzOCw3ICsxMzAsNiBAQCBwdWJsaWM6CiAgIHZvaWQgc2V0X21hc3Rlcl9jdGxf Y2xvc2VkICgpIHttYXN0ZXJfcGlkID0gLTE7fQogICBzdGF0aWMgdm9pZCBfX3N0ZGNhbGwgY3Jl YXRlX21hc3RlciAoaW50KTsKICAgc3RhdGljIHZvaWQgX19zdGRjYWxsIGluaXRfc2Vzc2lvbiAo KTsKLSAgdm9pZCBzZXRfc3dpdGNoX3RvX3Bjb25fb3V0IChib29sIHYpOwogICB2b2lkIHdhaXRf cGNvbl9md2QgKHZvaWQpOwogICBmcmllbmQgY2xhc3MgZmhhbmRsZXJfcHR5X2NvbW1vbjsKICAg ZnJpZW5kIGNsYXNzIGZoYW5kbGVyX3B0eV9tYXN0ZXI7CmRpZmYgLS1naXQgYS93aW5zdXAvY3ln d2luL3dpbnN1cC5oIGIvd2luc3VwL2N5Z3dpbi93aW5zdXAuaAppbmRleCA5YmZhMWE3YTYuLjc5 ODQ0Y2I4NyAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi93aW5zdXAuaAorKysgYi93aW5zdXAv Y3lnd2luL3dpbnN1cC5oCkBAIC0yMjQsOSArMjI0LDYgQEAgdm9pZCBpbml0X2NvbnNvbGVfaGFu ZGxlciAoYm9vbCk7CiAKIGV4dGVybiBib29sIHdzb2NrX3N0YXJ0ZWQ7CiAKLS8qIFBUWSByZWxh dGVkICovCi12b2lkIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKEhBTkRMRSBoKTsK LQogLyogUHJpbnRmIHR5cGUgZnVuY3Rpb25zICovCiBleHRlcm4gIkMiIHZvaWQgdmFwaV9mYXRh bCAoY29uc3QgY2hhciAqLCB2YV9saXN0IGFwKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsK IGV4dGVybiAiQyIgdm9pZCBhcGlfZmF0YWwgKGNvbnN0IGNoYXIgKiwgLi4uKSBfX2F0dHJpYnV0 ZV9fICgobm9yZXR1cm4pKTsKLS0gCjIuMjcuMAoK --Multipart=_Tue__11_Aug_2020_20_12_58_+0900_9/9heNvpkF+gehWP--