From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from [59.151.112.132] (helo=heian.cn.fujitsu.com) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1ag6p8-0006ws-Ae for kexec@lists.infradead.org; Wed, 16 Mar 2016 08:29:05 +0000 Message-ID: <56E918CC.3010409@cn.fujitsu.com> Date: Wed, 16 Mar 2016 16:26:52 +0800 From: =?UTF-8?B?Ilpob3UsIFdlbmppYW4v5ZGo5paH5YmRIg==?= MIME-Version: 1.0 Subject: Re: [PATCH v4] Improve the performance of --num-threads -d 31 References: <1457483231-2092-1-git-send-email-zhouwj-fnst@cn.fujitsu.com> <20160315063430.GA12981@dhcp-128-25.nay.redhat.com> <56E7B5D9.30303@cn.fujitsu.com> <20160315093316.GA13722@dhcp-128-25.nay.redhat.com> <56E8BD1D.5010209@cn.fujitsu.com> <20160316080422.GA8137@dhcp-128-25.nay.redhat.com> In-Reply-To: <20160316080422.GA8137@dhcp-128-25.nay.redhat.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "kexec" Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: Minfei Huang Cc: kexec@lists.infradead.org T24gMDMvMTYvMjAxNiAwNDowNCBQTSwgTWluZmVpIEh1YW5nIHdyb3RlOgo+IE9uIDAzLzE2LzE2 IGF0IDA5OjU1YW0sICJaaG91LCBXZW5qaWFuL+WRqOaWh+WJkSIgd3JvdGU6Cj4+IEhpIE1pbmZl aSwKPj4KPj4gSSBoYXZlIHNvbWUgcXVlc3Rpb25zLgo+Pgo+PiBJZiB0aGUgdmFsdWUgb2YgbnVt LXRocmVhZHMgaXMgOCwKPj4gMS4gSG93IG11Y2ggaXMgdGhlIGZyZWUgbWVtb3J5IGJlZm9yZSBy dW5uaW5nIG1ha2VkdW1wZmlsZSBmYWlsZWQ/Cj4KPiBIbW0sIHRoaXMgbWFjaGluZSBpcyByZXNl cnZlZCBieSBvdGhlciwgSSBoYXZlIG5vIGFjY2VzcyB0byB0YWtlIGEgbG9vawo+IGFib3V0IHJl c2VydmVkIG1lbW9yeS4gQWxsIG9mIHRoZSBjb25maWd1cmF0aW9uIGFyZSBzZXQgYnkgZGVmYXVs dC4KPiBNYXliZSBpdCdzIGFib3V0IDQyME0uCj4KCkkgZG9uJ3QgbWVhbiB0aGUgcmVzZXJ2ZWQg bWVtb3J5LgpJIG1lYW4gdGhlIGZyZWUgbWVtb3J5LgoKPj4KPj4gMi4gSG93IG11Y2ggaXMgdGhl IGZyZWUgbWVtb3J5IGJlZm9yZSBydW5uaW5nIG1ha2VkdW1wZmlsZSBzdWNjZXNzPwo+Cj4gSSBk b24ndCBtZW10aW9uIHRoaXMgZHVyaW5nIHRlc3RpbmcgaXQuCj4KPj4KPj4KPj4gQW5kIHRoZSBm b2xsb3dpbmcgcmVzdWx0IGlzIHZlcnkgc3RyYW5nZSBpZiBhbGwgY2FjaGUgaGFzIGJlZW4gZHJv cHBlZC4KPj4gbWFrZWR1bXBmaWxlIC0tbnVtLXRocmVhZHMgMzAgLWQgMzEKPj4gICAgICByZWFs ICAgIDBtMC4wMDZzCj4+ICAgICAgdXNlciAgICAwbTAuMDAycwo+PiAgICAgIHN5cyAwbTAuMDA0 cwo+Cj4gRm9yIHRoaXMgY2FzZSwgbWFrZWR1bXBmaWxlIGZhaWxzIHRvIGR1bXAgdm1jb3JlIHdp dGggb3B0aW9uCj4gLS1udW0tdGhyZWFkcyAzMC4KPgo+IEkgc3VzcGVjdCB0aGUgZm9sbG93aW5n IG91dHB1dCBmcm9tIHN0cmFjZS4KPgo+Pj4gMTMxMyBtbWFwKE5VTEwsIDE4NDQ2NzQ0MDQ4NTg0 Mzg4NjA4LCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywg LTEsIDApID0gLTEgRU5PTUVNIChDYW5ub3QgYWxsb2NhdGUgbWVtb3J5KQo+Pj4gMTMxNCBtbWFw KE5VTEwsIDE4NDQ2NzQ0MDQ4NTg0NTIzNzc2LCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BS SVZBVEV8TUFQX0FOT05ZTU9VUywgLTEsIDApID0gLTEgRU5PTUVNIChDYW5ub3QgYWxsb2NhdGUg bWVtb3J5KQo+Pj4gMTMxNSBtbWFwKE5VTEwsIDEzNDIxNzcyOCwgUFJPVF9OT05FLCBNQVBfUFJJ VkFURXxNQVBfQU5PTllNT1VTfE1BUF9OT1JFU0VSVkUsIC0xLCAwKSA9IDB4N2Y1OTI3YmIyMDAw CgpJIHNlZS4KCklzIHRoZXJlIGFueSBlcnJvciBtZXNzYWdlcz8KU3VjaCBhcyAib3V0IG9mIG1l bW9yeSI/CgpIb3cgYWJvdXQgaXQgd2l0aG91dCB0aGUgcGF0Y2g/CgpXaWxsIGl0IG9jY3VyIGlm IGRvdWJsZSB0aGUgcmVzZXJ2ZWQgbWVtb3J5PwoKQlRXLCBjYW4gaXQgYmUgcmVwcm9kdWNlZCBp biBvdGhlciBtYWNoaW5lcz8KSSBoYXZlbid0IGdldCBzdWNoIHJlc3VsdCBpbiBteSBtYWNoaW5l IHlldC4KCkluIG15IG1hY2hpbmUsIHRoZSBudW1iZXIgb2YgZnJlZSBtZW1vcnkgd2lsbCBub3Qg YWx3YXlzIHRoZSBzYW1lCmFmdGVyIGV4ZWN1dGluZyBtYWtlZHVtcGZpbGUgZWFjaCB0aW1lLgpT byBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIG1lbW9yeSwgbWFrZWR1bXBmaWxlIHdpbGwgZmFpbCBz b21ldGltZXMuCkJ1dCBJJ20gbm90IHN1cmUgd2hldGhlciB0aGV5IGFyZSB0aGUgc2FtZSBpc3N1 ZS4KCi0tIApUaGFua3MKWmhvdQoKPgo+IFRoYW5rcwo+IE1pbmZlaQo+Cj4+Cj4+IC0tCj4+IFRo YW5rcwo+PiBaaG91Cj4+Cj4+IE9uIDAzLzE1LzIwMTYgMDU6MzMgUE0sIE1pbmZlaSBIdWFuZyB3 cm90ZToKPj4+IE9uIDAzLzE1LzE2IGF0IDAzOjEycG0sICJaaG91LCBXZW5qaWFuL+WRqOaWh+WJ kSIgd3JvdGU6Cj4+Pj4gSGVsbG8gTWluZmVpLAo+Pj4+Cj4+Pj4gSSBndWVzcyB0aGUgcmVzdWx0 IGlzIGFmZmVjdGVkIGJ5IHRoZSBjYWNoZXMuCj4+Pj4gSG93IGFib3V0IGV4ZWN1dGluZyB0aGUg Zm9sbG93aW5nIGNvbW1hbmQgYmVmb3JlIHJ1bm5pbmcgbWFrZWR1bXBmaWxlIGVhY2ggdGltZT8K Pj4+PiAjIGVjaG8gMyA+IC9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcwo+Pj4KPj4+IEhpLCBaaG91 Lgo+Pj4KPj4+IFNlZW0gdGhlcmUgaXMgYSBidWcgZHVyaW5nIGR1bXBpbmcgdm1jb3JlIHdpdGgg b3B0aW9uIG51bS10aHJlYWRzLgo+Pj4KPj4+IDEzMDcgb3BlbigiL3Byb2MvbWVtaW5mbyIsIE9f UkRPTkxZKSAgICAgICAgID0gNAo+Pj4gMTMwOCBmc3RhdCg0LCB7c3RfbW9kZT1TX0lGUkVHfDA0 NDQsIHN0X3NpemU9MCwgLi4ufSkgPSAwCj4+PiAxMzA5IG1tYXAoTlVMTCwgNDA5NiwgUFJPVF9S RUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKSA9IDB4N2Y1 OTMyMmQzMDAwCj4+PiAxMzEwIHJlYWQoNCwgIk1lbVRvdGFsOiAgICAgICAgIDM4NTQ1MiBrQlxu TWVtRiIuLi4sIDEwMjQpID0gMTAyNAo+Pj4gMTMxMSBjbG9zZSg0KSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgPSAwCj4+PiAxMzEyIG11bm1hcCgweDdmNTkzMjJkMzAwMCwgNDA5Nikg ICAgICAgICAgICA9IDAKPj4+IDEzMTMgbW1hcChOVUxMLCAxODQ0Njc0NDA0ODU4NDM4ODYwOCwg UFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKSA9 IC0xIEVOT01FTSAoQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSkKPj4+IDEzMTQgbW1hcChOVUxMLCAx ODQ0Njc0NDA0ODU4NDUyMzc3NiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1B UF9BTk9OWU1PVVMsIC0xLCAwKSA9IC0xIEVOT01FTSAoQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSkK Pj4+IDEzMTUgbW1hcChOVUxMLCAxMzQyMTc3MjgsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEV8TUFQ X0FOT05ZTU9VU3xNQVBfTk9SRVNFUlZFLCAtMSwgMCkgPSAweDdmNTkyN2JiMjAwMAo+Pj4gMTMx NiBtdW5tYXAoMHg3ZjU5MjdiYjIwMDAsIDQ1MTM3OTIpICAgICAgICAgPSAwCj4+PiAxMzE3IG11 bm1hcCgweDdmNTkyYzAwMDAwMCwgNjI1OTUwNzIpICAgICAgICA9IDAKPj4+IDEzMTggbXByb3Rl Y3QoMHg3ZjU5MjgwMDAwMDAsIDEzNTE2OCwgUFJPVF9SRUFEfFBST1RfV1JJVEUpID0gMAo+Pj4g MTMxOSBtbWFwKE5VTEwsIDE4NDQ2NzQ0MDQ4NTg0Mzg4NjA4LCBQUk9UX1JFQUR8UFJPVF9XUklU RSwgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgLTEsIDApID0gLTEgRU5PTUVNIChDYW5ub3Qg YWxsb2NhdGUgbWVtb3J5KQo+Pj4KPj4+IFRoYW5rcwo+Pj4gTWluZmVpCj4+Pgo+Pj4+Cj4+Pj4g LS0KPj4+PiBUaGFua3MKPj4+PiBaaG91Cj4+Pj4KPj4+PiBPbiAwMy8xNS8yMDE2IDAyOjM0IFBN LCBNaW5mZWkgSHVhbmcgd3JvdGU6Cj4+Pj4+IEhpLCBaaG91Lgo+Pj4+Pgo+Pj4+PiBJIGhhdmUg YXBwbGllZCB0aGlzIHBhdGNoIGJhc2Ugb24gMS41LjkuIFRoZXJlIGFyZSBzZXZlcmFsIHRlc3Rj YXNlcyBJCj4+Pj4+IGhhdmUgdGVzdGVkLgo+Pj4+Pgo+Pj4+PiAtIG1ha2VkdW1wZmlsZSAtLW51 bS10aHJlYWRzIDY0IC1kIDMxCj4+Pj4+ICAgICAgcmVhbCAgICAwbTAuMDEwcwo+Pj4+PiAgICAg IHVzZXIgICAgMG0wLjAwMnMKPj4+Pj4gICAgICBzeXMgMG0wLjAwOXMKPj4+Pj4KPj4+Pj4gLSBt YWtlZHVtcGZpbGUgLS1udW0tdGhyZWFkcyAzMSAtZCAzMQo+Pj4+PiAgICAgIHJlYWwgICAgMm00 MC45MTVzCj4+Pj4+ICAgICAgdXNlciAgICAxMG01MC45MDBzCj4+Pj4+ICAgICAgc3lzIDIzbTku NjY0cwo+Pj4+Pgo+Pj4+PiBtYWtlZHVtcGZpbGUgLS1udW0tdGhyZWFkcyAzMCAtZCAzMQo+Pj4+ PiAgICAgIHJlYWwgICAgMG0wLjAwNnMKPj4+Pj4gICAgICB1c2VyICAgIDBtMC4wMDJzCj4+Pj4+ ICAgICAgc3lzIDBtMC4wMDRzCj4+Pj4+Cj4+Pj4+IG1ha2VkdW1wZmlsZSAtLW51bS10aHJlYWRz IDMyIC1kIDMxCj4+Pj4+ICAgICAgcmVhbCAgICAwbTAuMDA3cwo+Pj4+PiAgICAgIHVzZXIgICAg MG0wLjAwMnMKPj4+Pj4gICAgICBzeXMgMG0wLjAwNXMKPj4+Pj4KPj4+Pj4gLSBtYWtlZHVtcGZp bGUgLS1udW0tdGhyZWFkcyA4IC1kIDMxCj4+Pj4+ICAgICAgcmVhbCAgICAybTMyLjY5MnMKPj4+ Pj4gICAgICB1c2VyICAgIDdtNC42MzBzCj4+Pj4+ICAgICAgc3lzIDJtMC4zNjlzCj4+Pj4+Cj4+ Pj4+IC0gbWFrZWR1bXBmaWxlIC0tbnVtLXRocmVhZHMgMSAtZCAzMQo+Pj4+PiAgICAgIHJlYWwg ICAgNG00Mi40MjNzCj4+Pj4+ICAgICAgdXNlciAgICA3bTI3LjE1M3MKPj4+Pj4gICAgICBzeXMg MG0yMi40OTBzCj4+Pj4+Cj4+Pj4+IC0gbWFrZWR1bXBmaWxlLm9yaWcgLWQgMzEKPj4+Pj4gICAg ICByZWFsICAgIDRtMS4yOTdzCj4+Pj4+ICAgICAgdXNlciAgICAzbTM5LjY5NnMKPj4+Pj4gICAg ICBzeXMgMG0xNS4yMDBzCj4+Pj4+Cj4+Pj4+IFRoaXMgcGF0Y2ggaGFzIGEgaHVnZSBpbmNyZW1l bnQgdG8gdGhlIGZpbHRlciBwZXJmb3JtYW5jZSB1bmRlciAzMS4gQnV0Cj4+Pj4+IGl0IGlzIG5v dCBzdGFibGUsIHNpbmNlIG1ha2VkdW1wZmlsZSBmYWlscyB0byBkdW1wIHZtY29yZSBpbnRlcm1p dHRlbnRseS4KPj4+Pj4gWW91IGNhbiBmaW5kIHRoZSBhYm92ZSB0ZXN0IHJlc3VsdCwgbWFrZWR1 bXBmaWxlIGZhaWxzIHRvIGR1bXAgdm1jb3JlCj4+Pj4+IHdpdGggb3B0aW9uIC0tbnVtLXRocmVh ZHMgNjQsIGFsc28gaXQgbWF5IG9jY3VyIHdpdGggb3B0aW9uCj4+Pj4+IC0tbnVtYmVyLXRocmVh ZHMgOC4KPj4+Pj4KPj4+Pj4gVGhhbmtzCj4+Pj4+IE1pbmZlaQo+Pj4+Pgo+Pj4+PiBPbiAwMy8w OS8xNiBhdCAwODoyN2FtLCBaaG91IFdlbmppYW4gd3JvdGU6Cj4+Pj4+PiB2NDoKPj4+Pj4+ICAg ICAgICAgIDEuIGZpeCBhIGJ1ZyBjYXVzZWQgYnkgdGhlIGxvZ2ljCj4+Pj4+PiB2MzoKPj4+Pj4+ ICAgICAgICAgIDEuIHJlbW92ZSBzb21lIHVudXNlZCB2YXJpYWJsZXMKPj4+Pj4+ICAgICAgICAg IDIuIGZpeCBhIGJ1ZyBjYXVzZWQgYnkgdGhlIHdyb25nIGxvZ2ljCj4+Pj4+PiAgICAgICAgICAz LiBmaXggYSBidWcgY2F1c2VkIGJ5IG9wdGltaXNpbmcKPj4+Pj4+ICAgICAgICAgIDQuIGltcHJv dmUgbW9yZSBwZXJmb3JtYW5jZSBieSB1c2luZyBNaW5vcnUgVXN1aSdzIGNvZGUKPj4+Pj4+Cj4+ Pj4+PiBtdWx0aS10aHJlYWRzIGltcGxlbWVudGF0aW9uIHdpbGwgaW50cm9kdWNlIGV4dHJhIGNv c3Qgd2hlbiBoYW5kbGluZwo+Pj4+Pj4gZWFjaCBwYWdlLiBUaGUgb3JpZ2luIGltcGxlbWVudGF0 aW9uIHdpbGwgYWxzbyBkbyB0aGUgZXh0cmEgd29yayBmb3IKPj4+Pj4+IGZpbHRlcmVkIHBhZ2Vz LiBTbyB0aGVyZSBpcyBhIGJpZyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbgo+Pj4+Pj4gLS1u dW0tdGhyZWFkcyAtZCAzMS4KPj4+Pj4+IFRoZSBuZXcgaW1wbGVtZW50YXRpb24gd29uJ3QgZG8g dGhlIGV4dHJhIHdvcmsgZm9yIGZpbHRlcmVkIHBhZ2VzIGFueQo+Pj4+Pj4gbW9yZS4gU28gdGhl IHBlcmZvcm1hbmNlIG9mIC1kIDMxIGlzIGNsb3NlIHRvIHRoYXQgb2Ygc2VyaWFsIHByb2Nlc3Np bmcuCj4+Pj4+Pgo+Pj4+Pj4gVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBpcyBqdXN0IGxpa2UgdGhl IGZvbGxvd2luZzoKPj4+Pj4+ICAgICAgICAgICogVGhlIGJhc2ljIGlkZWEgaXMgcHJvZHVjZXIg cHJvZHVjaW5nIHBhZ2UgYW5kIGNvbnN1bWVyIHdyaXRpbmcgcGFnZS4KPj4+Pj4+ICAgICAgICAg ICogRWFjaCBwcm9kdWNlciBoYXZlIGEgcGFnZV9mbGFnX2J1ZiBsaXN0IHdoaWNoIGlzIHVzZWQg Zm9yIHN0b3JpbmcKPj4+Pj4+ICAgICAgICAgICAgcGFnZSdzIGRlc2NyaXB0aW9uLgo+Pj4+Pj4g ICAgICAgICAgKiBUaGUgc2l6ZSBvZiBwYWdlX2ZsYWdfYnVmIGlzIGxpdHRsZSBzbyBpdCB3b24n dCB0YWtlIHRvbyBtdWNoIG1lbW9yeS4KPj4+Pj4+ICAgICAgICAgICogQW5kIGFsbCBwcm9kdWNl cnMgd2lsbCBzaGFyZSBhIHBhZ2VfZGF0YV9idWYgYXJyYXkgd2hpY2ggaXMKPj4+Pj4+ICAgICAg ICAgICAgdXNlZCBmb3Igc3RvcmluZyBwYWdlJ3MgY29tcHJlc3NlZCBkYXRhLgo+Pj4+Pj4gICAg ICAgICAgKiBUaGUgbWFpbiB0aHJlYWQgaXMgdGhlIGNvbnN1bWVyLiBJdCB3aWxsIGZpbmQgdGhl IG5leHQgcGZuIGFuZCB3cml0ZQo+Pj4+Pj4gICAgICAgICAgICBpdCBpbnRvIGZpbGUuCj4+Pj4+ PiAgICAgICAgICAqIFRoZSBuZXh0IHBmbiBpcyBzbWFsbGVzdCBwZm4gaW4gYWxsIHBhZ2VfZmxh Z19idWYuCj4+Pj4+Pgo+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogTWlub3J1IFVzdWkgPG1pbi11c3Vp QHRpLmpwLm5lYy5jb20+Cj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBaaG91IFdlbmppYW4gPHpob3V3 ai1mbnN0QGNuLmZ1aml0c3UuY29tPgo+Pj4+Pj4gLS0tCj4+Pj4+PiAgIG1ha2VkdW1wZmlsZS5j IHwgMjk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQo+Pj4+Pj4gICBtYWtlZHVtcGZpbGUuaCB8ICAzNSArKysrLS0tCj4+Pj4+PiAgIDIg ZmlsZXMgY2hhbmdlZCwgMjAyIGluc2VydGlvbnMoKyksIDEzMSBkZWxldGlvbnMoLSkKPj4+Pj4+ Cj4+Pj4+PiBkaWZmIC0tZ2l0IGEvbWFrZWR1bXBmaWxlLmMgYi9tYWtlZHVtcGZpbGUuYwo+Pj4+ Pj4gaW5kZXggZmEwYjc3OS4uMmIwODY0YSAxMDA2NDQKPj4+Pj4+IC0tLSBhL21ha2VkdW1wZmls ZS5jCj4+Pj4+PiArKysgYi9tYWtlZHVtcGZpbGUuYwo+Pj4+Pj4gQEAgLTM0ODMsNyArMzQ4Myw4 IEBAIGluaXRpYWxfZm9yX3BhcmFsbGVsKCkKPj4+Pj4+ICAgCXVuc2lnbmVkIGxvbmcgcGFnZV9k YXRhX2J1Zl9zaXplOwo+Pj4+Pj4gICAJdW5zaWduZWQgbG9uZyBsaW1pdF9zaXplOwo+Pj4+Pj4g ICAJaW50IHBhZ2VfZGF0YV9udW07Cj4+Pj4+PiAtCWludCBpOwo+Pj4+Pj4gKwlzdHJ1Y3QgcGFn ZV9mbGFnICpjdXJyZW50Owo+Pj4+Pj4gKwlpbnQgaSwgajsKPj4+Pj4+Cj4+Pj4+PiAgIAlsZW5f YnVmX291dCA9IGNhbGN1bGF0ZV9sZW5fYnVmX291dChpbmZvLT5wYWdlX3NpemUpOwo+Pj4+Pj4K Pj4+Pj4+IEBAIC0zNTYwLDEwICszNTYxLDE2IEBAIGluaXRpYWxfZm9yX3BhcmFsbGVsKCkKPj4+ Pj4+Cj4+Pj4+PiAgIAlsaW1pdF9zaXplID0gKGdldF9mcmVlX21lbW9yeV9zaXplKCkKPj4+Pj4+ ICAgCQkgICAgICAtIE1BUF9SRUdJT04gKiBpbmZvLT5udW1fdGhyZWFkcykgKiAwLjY7Cj4+Pj4+ PiArCWlmIChsaW1pdF9zaXplIDwgMCkgewo+Pj4+Pj4gKwkJTVNHKCJGcmVlIG1lbW9yeSBpcyBu b3QgZW5vdWdoIGZvciBtdWx0aS10aHJlYWRzXG4iKTsKPj4+Pj4+ICsJCXJldHVybiBGQUxTRTsK Pj4+Pj4+ICsJfQo+Pj4+Pj4KPj4+Pj4+ICAgCXBhZ2VfZGF0YV9udW0gPSBsaW1pdF9zaXplIC8g cGFnZV9kYXRhX2J1Zl9zaXplOwo+Pj4+Pj4gKwlpbmZvLT5udW1fYnVmZmVycyA9IDMgKiBpbmZv LT5udW1fdGhyZWFkczsKPj4+Pj4+Cj4+Pj4+PiAtCWluZm8tPm51bV9idWZmZXJzID0gTUlOKE5V TV9CVUZGRVJTLCBwYWdlX2RhdGFfbnVtKTsKPj4+Pj4+ICsJaW5mby0+bnVtX2J1ZmZlcnMgPSBN QVgoaW5mby0+bnVtX2J1ZmZlcnMsIE5VTV9CVUZGRVJTKTsKPj4+Pj4+ICsJaW5mby0+bnVtX2J1 ZmZlcnMgPSBNSU4oaW5mby0+bnVtX2J1ZmZlcnMsIHBhZ2VfZGF0YV9udW0pOwo+Pj4+Pj4KPj4+ Pj4+ICAgCURFQlVHX01TRygiTnVtYmVyIG9mIHN0cnVjdCBwYWdlX2RhdGEgZm9yIHByb2R1Y2Uv Y29uc3VtZTogJWRcbiIsCj4+Pj4+PiAgIAkJCWluZm8tPm51bV9idWZmZXJzKTsKPj4+Pj4+IEBA IC0zNTg4LDYgKzM1OTUsMzYgQEAgaW5pdGlhbF9mb3JfcGFyYWxsZWwoKQo+Pj4+Pj4gICAJfQo+ Pj4+Pj4KPj4+Pj4+ICAgCS8qCj4+Pj4+PiArCSAqIGluaXRpYWwgcGFnZV9mbGFnIGZvciBlYWNo IHRocmVhZAo+Pj4+Pj4gKwkgKi8KPj4+Pj4+ICsJaWYgKChpbmZvLT5wYWdlX2ZsYWdfYnVmID0g bWFsbG9jKHNpemVvZih2b2lkICopICogaW5mby0+bnVtX3RocmVhZHMpKQo+Pj4+Pj4gKwkgICAg PT0gTlVMTCkgewo+Pj4+Pj4gKwkJTVNHKCJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBhZ2Vf ZmxhZ19idWYuICVzXG4iLAo+Pj4+Pj4gKwkJCQlzdHJlcnJvcihlcnJubykpOwo+Pj4+Pj4gKwkJ cmV0dXJuIEZBTFNFOwo+Pj4+Pj4gKwl9Cj4+Pj4+PiArCW1lbXNldChpbmZvLT5wYWdlX2ZsYWdf YnVmLCAwLCBzaXplb2Yodm9pZCAqKSAqIGluZm8tPm51bV90aHJlYWRzKTsKPj4+Pj4+ICsKPj4+ Pj4+ICsJZm9yIChpID0gMDsgaSA8IGluZm8tPm51bV90aHJlYWRzOyBpKyspIHsKPj4+Pj4+ICsJ CWlmICgoaW5mby0+cGFnZV9mbGFnX2J1ZltpXSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBh Z2VfZmxhZykpKSA9PSBOVUxMKSB7Cj4+Pj4+PiArCQkJTVNHKCJDYW4ndCBhbGxvY2F0ZSBtZW1v cnkgZm9yIHBhZ2VfZmxhZy4gJXNcbiIsCj4+Pj4+PiArCQkJCXN0cmVycm9yKGVycm5vKSk7Cj4+ Pj4+PiArCQkJcmV0dXJuIEZBTFNFOwo+Pj4+Pj4gKwkJfQo+Pj4+Pj4gKwkJY3VycmVudCA9IGlu Zm8tPnBhZ2VfZmxhZ19idWZbaV07Cj4+Pj4+PiArCj4+Pj4+PiArCQlmb3IgKGogPSAxOyBqIDwg TlVNX0JVRkZFUlM7IGorKykgewo+Pj4+Pj4gKwkJCWlmICgoY3VycmVudC0+bmV4dCA9IGNhbGxv YygxLCBzaXplb2Yoc3RydWN0IHBhZ2VfZmxhZykpKSA9PSBOVUxMKSB7Cj4+Pj4+PiArCQkJCU1T RygiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBwYWdlX2ZsYWcuICVzXG4iLAo+Pj4+Pj4gKwkJ CQkJc3RyZXJyb3IoZXJybm8pKTsKPj4+Pj4+ICsJCQkJcmV0dXJuIEZBTFNFOwo+Pj4+Pj4gKwkJ CX0KPj4+Pj4+ICsJCQljdXJyZW50ID0gY3VycmVudC0+bmV4dDsKPj4+Pj4+ICsJCX0KPj4+Pj4+ ICsJCWN1cnJlbnQtPm5leHQgPSBpbmZvLT5wYWdlX2ZsYWdfYnVmW2ldOwo+Pj4+Pj4gKwl9Cj4+ Pj4+PiArCj4+Pj4+PiArCS8qCj4+Pj4+PiAgIAkgKiBpbml0aWFsIGZkX21lbW9yeSBmb3IgdGhy ZWFkcwo+Pj4+Pj4gICAJICovCj4+Pj4+PiAgIAlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX3Ro cmVhZHM7IGkrKykgewo+Pj4+Pj4gQEAgLTM2MTIsNyArMzY0OSw4IEBAIGluaXRpYWxfZm9yX3Bh cmFsbGVsKCkKPj4+Pj4+ICAgdm9pZAo+Pj4+Pj4gICBmcmVlX2Zvcl9wYXJhbGxlbCgpCj4+Pj4+ PiAgIHsKPj4+Pj4+IC0JaW50IGk7Cj4+Pj4+PiArCWludCBpLCBqOwo+Pj4+Pj4gKwlzdHJ1Y3Qg cGFnZV9mbGFnICpjdXJyZW50Owo+Pj4+Pj4KPj4+Pj4+ICAgCWlmIChpbmZvLT50aHJlYWRzICE9 IE5VTEwpIHsKPj4+Pj4+ICAgCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX3RocmVhZHM7IGkr Kykgewo+Pj4+Pj4gQEAgLTM2NTUsNiArMzY5MywxOSBAQCBmcmVlX2Zvcl9wYXJhbGxlbCgpCj4+ Pj4+PiAgIAkJZnJlZShpbmZvLT5wYWdlX2RhdGFfYnVmKTsKPj4+Pj4+ICAgCX0KPj4+Pj4+Cj4+ Pj4+PiArCWlmIChpbmZvLT5wYWdlX2ZsYWdfYnVmICE9IE5VTEwpIHsKPj4+Pj4+ICsJCWZvciAo aSA9IDA7IGkgPCBpbmZvLT5udW1fdGhyZWFkczsgaSsrKSB7Cj4+Pj4+PiArCQkJZm9yIChqID0g MDsgaiA8IE5VTV9CVUZGRVJTOyBqKyspIHsKPj4+Pj4+ICsJCQkJaWYgKGluZm8tPnBhZ2VfZmxh Z19idWZbaV0gIT0gTlVMTCkgewo+Pj4+Pj4gKwkJCQkJY3VycmVudCA9IGluZm8tPnBhZ2VfZmxh Z19idWZbaV07Cj4+Pj4+PiArCQkJCQlpbmZvLT5wYWdlX2ZsYWdfYnVmW2ldID0gY3VycmVudC0+ bmV4dDsKPj4+Pj4+ICsJCQkJCWZyZWUoY3VycmVudCk7Cj4+Pj4+PiArCQkJCX0KPj4+Pj4+ICsJ CQl9Cj4+Pj4+PiArCQl9Cj4+Pj4+PiArCQlmcmVlKGluZm8tPnBhZ2VfZmxhZ19idWYpOwo+Pj4+ Pj4gKwl9Cj4+Pj4+PiArCj4+Pj4+PiAgIAlpZiAoaW5mby0+cGFyYWxsZWxfaW5mbyA9PSBOVUxM KQo+Pj4+Pj4gICAJCXJldHVybjsKPj4+Pj4+Cj4+Pj4+PiBAQCAtNzA3NSwxMSArNzEyNiwxMSBA QCB2b2lkICoKPj4+Pj4+ICAga2R1bXBfdGhyZWFkX2Z1bmN0aW9uX2N5Y2xpYyh2b2lkICphcmcp IHsKPj4+Pj4+ICAgCXZvaWQgKnJldHZhbCA9IFBUSFJFQURfRkFJTDsKPj4+Pj4+ICAgCXN0cnVj dCB0aHJlYWRfYXJncyAqa2R1bXBfdGhyZWFkX2FyZ3MgPSAoc3RydWN0IHRocmVhZF9hcmdzICop YXJnOwo+Pj4+Pj4gLQlzdHJ1Y3QgcGFnZV9kYXRhICpwYWdlX2RhdGFfYnVmID0ga2R1bXBfdGhy ZWFkX2FyZ3MtPnBhZ2VfZGF0YV9idWY7Cj4+Pj4+PiArCXZvbGF0aWxlIHN0cnVjdCBwYWdlX2Rh dGEgKnBhZ2VfZGF0YV9idWYgPSBrZHVtcF90aHJlYWRfYXJncy0+cGFnZV9kYXRhX2J1ZjsKPj4+ Pj4+ICsJdm9sYXRpbGUgc3RydWN0IHBhZ2VfZmxhZyAqcGFnZV9mbGFnX2J1ZiA9IGtkdW1wX3Ro cmVhZF9hcmdzLT5wYWdlX2ZsYWdfYnVmOwo+Pj4+Pj4gICAJc3RydWN0IGN5Y2xlICpjeWNsZSA9 IGtkdW1wX3RocmVhZF9hcmdzLT5jeWNsZTsKPj4+Pj4+IC0JaW50IHBhZ2VfZGF0YV9udW0gPSBr ZHVtcF90aHJlYWRfYXJncy0+cGFnZV9kYXRhX251bTsKPj4+Pj4+IC0JbWRmX3Bmbl90IHBmbjsK Pj4+Pj4+IC0JaW50IGluZGV4Owo+Pj4+Pj4gKwltZGZfcGZuX3QgcGZuID0gY3ljbGUtPnN0YXJ0 X3BmbjsKPj4+Pj4+ICsJaW50IGluZGV4ID0ga2R1bXBfdGhyZWFkX2FyZ3MtPnRocmVhZF9udW07 Cj4+Pj4+PiAgIAlpbnQgYnVmX3JlYWR5Owo+Pj4+Pj4gICAJaW50IGR1bXBhYmxlOwo+Pj4+Pj4g ICAJaW50IGZkX21lbW9yeSA9IDA7Cj4+Pj4+PiBAQCAtNzEyNSw0NyArNzE3Niw0OCBAQCBrZHVt cF90aHJlYWRfZnVuY3Rpb25fY3ljbGljKHZvaWQgKmFyZykgewo+Pj4+Pj4gICAJCQkJCQlrZHVt cF90aHJlYWRfYXJncy0+dGhyZWFkX251bSk7Cj4+Pj4+PiAgIAl9Cj4+Pj4+Pgo+Pj4+Pj4gLQl3 aGlsZSAoMSkgewo+Pj4+Pj4gLQkJLyogZ2V0IG5leHQgcGZuICovCj4+Pj4+PiAtCQlwdGhyZWFk X211dGV4X2xvY2soJmluZm8tPmN1cnJlbnRfcGZuX211dGV4KTsKPj4+Pj4+IC0JCXBmbiA9IGlu Zm8tPmN1cnJlbnRfcGZuOwo+Pj4+Pj4gLQkJaW5mby0+Y3VycmVudF9wZm4rKzsKPj4+Pj4+IC0J CXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZpbmZvLT5jdXJyZW50X3Bmbl9tdXRleCk7Cj4+Pj4+PiAt Cj4+Pj4+PiAtCQlpZiAocGZuID49IGtkdW1wX3RocmVhZF9hcmdzLT5lbmRfcGZuKQo+Pj4+Pj4g LQkJCWJyZWFrOwo+Pj4+Pj4gLQo+Pj4+Pj4gLQkJaW5kZXggPSAtMTsKPj4+Pj4+ICsJLyoKPj4+ Pj4+ICsJICogZmlsdGVyZWQgcGFnZSB3b24ndCB0YWtlIGFueXRoaW5nCj4+Pj4+PiArCSAqIHVu ZmlsdGVyZWQgemVybyBwYWdlIHdpbGwgb25seSB0YWtlIGEgcGFnZV9mbGFnX2J1Zgo+Pj4+Pj4g KwkgKiB1bmZpbHRlcmVkIG5vbi16ZXJvIHBhZ2Ugd2lsbCB0YWtlIGEgcGFnZV9mbGFnX2J1ZiBh bmQgYSBwYWdlX2RhdGFfYnVmCj4+Pj4+PiArCSAqLwo+Pj4+Pj4gKwl3aGlsZSAocGZuIDwgY3lj bGUtPmVuZF9wZm4pIHsKPj4+Pj4+ICAgCQlidWZfcmVhZHkgPSBGQUxTRTsKPj4+Pj4+Cj4+Pj4+ PiArCQlwdGhyZWFkX211dGV4X2xvY2soJmluZm8tPnBhZ2VfZGF0YV9tdXRleCk7Cj4+Pj4+PiAr CQl3aGlsZSAocGFnZV9kYXRhX2J1ZltpbmRleF0udXNlZCAhPSBGQUxTRSkgewo+Pj4+Pj4gKwkJ CWluZGV4ID0gKGluZGV4ICsgMSkgJSBpbmZvLT5udW1fYnVmZmVyczsKPj4+Pj4+ICsJCX0KPj4+ Pj4+ICsJCXBhZ2VfZGF0YV9idWZbaW5kZXhdLnVzZWQgPSBUUlVFOwo+Pj4+Pj4gKwkJcHRocmVh ZF9tdXRleF91bmxvY2soJmluZm8tPnBhZ2VfZGF0YV9tdXRleCk7Cj4+Pj4+PiArCj4+Pj4+PiAg IAkJd2hpbGUgKGJ1Zl9yZWFkeSA9PSBGQUxTRSkgewo+Pj4+Pj4gICAJCQlwdGhyZWFkX3Rlc3Rj YW5jZWwoKTsKPj4+Pj4+IC0KPj4+Pj4+IC0JCQlpbmRleCA9IHBmbiAlIHBhZ2VfZGF0YV9udW07 Cj4+Pj4+PiAtCj4+Pj4+PiAtCQkJaWYgKHBmbiAtIGluZm8tPmNvbnN1bWVkX3BmbiA+IGluZm8t Pm51bV9idWZmZXJzKQo+Pj4+Pj4gKwkJCWlmIChwYWdlX2ZsYWdfYnVmLT5yZWFkeSA9PSBGTEFH X1JFQURZKQo+Pj4+Pj4gICAJCQkJY29udGludWU7Cj4+Pj4+Pgo+Pj4+Pj4gLQkJCWlmIChwYWdl X2RhdGFfYnVmW2luZGV4XS5yZWFkeSAhPSAwKQo+Pj4+Pj4gLQkJCQljb250aW51ZTsKPj4+Pj4+ IC0KPj4+Pj4+IC0JCQlwdGhyZWFkX211dGV4X2xvY2soJnBhZ2VfZGF0YV9idWZbaW5kZXhdLm11 dGV4KTsKPj4+Pj4+IC0KPj4+Pj4+IC0JCQlpZiAocGFnZV9kYXRhX2J1ZltpbmRleF0ucmVhZHkg IT0gMCkKPj4+Pj4+IC0JCQkJZ290byB1bmxvY2s7Cj4+Pj4+PiAtCj4+Pj4+PiAtCQkJYnVmX3Jl YWR5ID0gVFJVRTsKPj4+Pj4+ICsJCQkvKiBnZXQgbmV4dCBkdW1wYWJsZSBwZm4gKi8KPj4+Pj4+ ICsJCQlwdGhyZWFkX211dGV4X2xvY2soJmluZm8tPmN1cnJlbnRfcGZuX211dGV4KTsKPj4+Pj4+ ICsJCQlmb3IgKHBmbiA9IGluZm8tPmN1cnJlbnRfcGZuOyBwZm4gPCBjeWNsZS0+ZW5kX3Bmbjsg cGZuKyspIHsKPj4+Pj4+ICsJCQkJZHVtcGFibGUgPSBpc19kdW1wYWJsZSgKPj4+Pj4+ICsJCQkJ CWluZm8tPmZkX2JpdG1hcCA/ICZiaXRtYXBfcGFyYWxsZWwgOiBpbmZvLT5iaXRtYXAyLAo+Pj4+ Pj4gKwkJCQkJcGZuLAo+Pj4+Pj4gKwkJCQkJY3ljbGUpOwo+Pj4+Pj4gKwkJCQlpZiAoZHVtcGFi bGUpCj4+Pj4+PiArCQkJCQlicmVhazsKPj4+Pj4+ICsJCQl9Cj4+Pj4+PiArCQkJaW5mby0+Y3Vy cmVudF9wZm4gPSBwZm4gKyAxOwo+Pj4+Pj4KPj4+Pj4+IC0JCQlwYWdlX2RhdGFfYnVmW2luZGV4 XS5wZm4gPSBwZm47Cj4+Pj4+PiAtCQkJcGFnZV9kYXRhX2J1ZltpbmRleF0ucmVhZHkgPSAxOwo+ Pj4+Pj4gKwkJCXBhZ2VfZmxhZ19idWYtPnBmbiA9IHBmbjsKPj4+Pj4+ICsJCQlwYWdlX2ZsYWdf YnVmLT5yZWFkeSA9IEZMQUdfRklMTElORzsKPj4+Pj4+ICsJCQlwdGhyZWFkX211dGV4X3VubG9j aygmaW5mby0+Y3VycmVudF9wZm5fbXV0ZXgpOwo+Pj4+Pj4gKwkJCXNlbV9wb3N0KCZpbmZvLT5w YWdlX2ZsYWdfYnVmX3NlbSk7Cj4+Pj4+Pgo+Pj4+Pj4gLQkJCWR1bXBhYmxlID0gaXNfZHVtcGFi bGUoCj4+Pj4+PiAtCQkJCWluZm8tPmZkX2JpdG1hcCA/ICZiaXRtYXBfcGFyYWxsZWwgOiBpbmZv LT5iaXRtYXAyLAo+Pj4+Pj4gLQkJCQlwZm4sCj4+Pj4+PiAtCQkJCWN5Y2xlKTsKPj4+Pj4+IC0J CQlwYWdlX2RhdGFfYnVmW2luZGV4XS5kdW1wYWJsZSA9IGR1bXBhYmxlOwo+Pj4+Pj4gLQkJCWlm ICghZHVtcGFibGUpCj4+Pj4+PiAtCQkJCWdvdG8gdW5sb2NrOwo+Pj4+Pj4gKwkJCWlmIChwZm4g Pj0gY3ljbGUtPmVuZF9wZm4pIHsKPj4+Pj4+ICsJCQkJaW5mby0+Y3VycmVudF9wZm4gPSBjeWNs ZS0+ZW5kX3BmbjsKPj4+Pj4+ICsJCQkJcGFnZV9kYXRhX2J1ZltpbmRleF0udXNlZCA9IEZBTFNF Owo+Pj4+Pj4gKwkJCQlicmVhazsKPj4+Pj4+ICsJCQl9Cj4+Pj4+Pgo+Pj4+Pj4gICAJCQlpZiAo IXJlYWRfcGZuX3BhcmFsbGVsKGZkX21lbW9yeSwgcGZuLCBidWYsCj4+Pj4+PiAgIAkJCQkJICAg ICAgICZiaXRtYXBfbWVtb3J5X3BhcmFsbGVsLAo+Pj4+Pj4gQEAgLTcxNzgsMTEgKzcyMzAsMTEg QEAga2R1bXBfdGhyZWFkX2Z1bmN0aW9uX2N5Y2xpYyh2b2lkICphcmcpIHsKPj4+Pj4+Cj4+Pj4+ PiAgIAkJCWlmICgoaW5mby0+ZHVtcF9sZXZlbCAmIERMX0VYQ0xVREVfWkVSTykKPj4+Pj4+ICAg CQkJICAgICYmIGlzX3plcm9fcGFnZShidWYsIGluZm8tPnBhZ2Vfc2l6ZSkpIHsKPj4+Pj4+IC0J CQkJcGFnZV9kYXRhX2J1ZltpbmRleF0uemVybyA9IFRSVUU7Cj4+Pj4+PiAtCQkJCWdvdG8gdW5s b2NrOwo+Pj4+Pj4gKwkJCQlwYWdlX2ZsYWdfYnVmLT56ZXJvID0gVFJVRTsKPj4+Pj4+ICsJCQkJ Z290byBuZXh0Owo+Pj4+Pj4gICAJCQl9Cj4+Pj4+Pgo+Pj4+Pj4gLQkJCXBhZ2VfZGF0YV9idWZb aW5kZXhdLnplcm8gPSBGQUxTRTsKPj4+Pj4+ICsJCQlwYWdlX2ZsYWdfYnVmLT56ZXJvID0gRkFM U0U7Cj4+Pj4+Pgo+Pj4+Pj4gICAJCQkvKgo+Pj4+Pj4gICAJCQkgKiBDb21wcmVzcyB0aGUgcGFn ZSBkYXRhLgo+Pj4+Pj4gQEAgLTcyMTAsNiArNzI2Miw3IEBAIGtkdW1wX3RocmVhZF9mdW5jdGlv bl9jeWNsaWModm9pZCAqYXJnKSB7Cj4+Pj4+PiAgIAkJCQlwYWdlX2RhdGFfYnVmW2luZGV4XS5m bGFncyA9Cj4+Pj4+PiAgIAkJCQkJCQlEVU1QX0RIX0NPTVBSRVNTRURfTFpPOwo+Pj4+Pj4gICAJ CQkJcGFnZV9kYXRhX2J1ZltpbmRleF0uc2l6ZSAgPSBzaXplX291dDsKPj4+Pj4+ICsKPj4+Pj4+ ICAgCQkJCW1lbWNweShwYWdlX2RhdGFfYnVmW2luZGV4XS5idWYsIGJ1Zl9vdXQsIHNpemVfb3V0 KTsKPj4+Pj4+ICAgI2VuZGlmCj4+Pj4+PiAgICNpZmRlZiBVU0VTTkFQUFkKPj4+Pj4+IEBAIC03 MjMyLDEyICs3Mjg1LDE0IEBAIGtkdW1wX3RocmVhZF9mdW5jdGlvbl9jeWNsaWModm9pZCAqYXJn KSB7Cj4+Pj4+PiAgIAkJCQlwYWdlX2RhdGFfYnVmW2luZGV4XS5zaXplICA9IGluZm8tPnBhZ2Vf c2l6ZTsKPj4+Pj4+ICAgCQkJCW1lbWNweShwYWdlX2RhdGFfYnVmW2luZGV4XS5idWYsIGJ1Ziwg aW5mby0+cGFnZV9zaXplKTsKPj4+Pj4+ICAgCQkJfQo+Pj4+Pj4gLXVubG9jazoKPj4+Pj4+IC0J CQlwdGhyZWFkX211dGV4X3VubG9jaygmcGFnZV9kYXRhX2J1ZltpbmRleF0ubXV0ZXgpOwo+Pj4+ Pj4gKwkJCXBhZ2VfZmxhZ19idWYtPmluZGV4ID0gaW5kZXg7Cj4+Pj4+PiArCQkJYnVmX3JlYWR5 ID0gVFJVRTsKPj4+Pj4+ICtuZXh0Ogo+Pj4+Pj4gKwkJCXBhZ2VfZmxhZ19idWYtPnJlYWR5ID0g RkxBR19SRUFEWTsKPj4+Pj4+ICsJCQlwYWdlX2ZsYWdfYnVmID0gcGFnZV9mbGFnX2J1Zi0+bmV4 dDsKPj4+Pj4+Cj4+Pj4+PiAgIAkJfQo+Pj4+Pj4gICAJfQo+Pj4+Pj4gLQo+Pj4+Pj4gICAJcmV0 dmFsID0gTlVMTDsKPj4+Pj4+Cj4+Pj4+PiAgIGZhaWw6Cj4+Pj4+PiBAQCAtNzI2NSwxNCArNzMy MCwxNSBAQCB3cml0ZV9rZHVtcF9wYWdlc19wYXJhbGxlbF9jeWNsaWMoc3RydWN0IGNhY2hlX2Rh dGEgKmNkX2hlYWRlciwKPj4+Pj4+ICAgCXN0cnVjdCBwYWdlX2Rlc2MgcGQ7Cj4+Pj4+PiAgIAlz dHJ1Y3QgdGltZXZhbCB0dl9zdGFydDsKPj4+Pj4+ICAgCXN0cnVjdCB0aW1ldmFsIGxhc3QsIG5l dzsKPj4+Pj4+IC0JdW5zaWduZWQgbG9uZyBsb25nIGNvbnN1bWluZ19wZm47Cj4+Pj4+PiAgIAlw dGhyZWFkX3QgKip0aHJlYWRzID0gTlVMTDsKPj4+Pj4+ICAgCXN0cnVjdCB0aHJlYWRfYXJncyAq a2R1bXBfdGhyZWFkX2FyZ3MgPSBOVUxMOwo+Pj4+Pj4gICAJdm9pZCAqdGhyZWFkX3Jlc3VsdDsK Pj4+Pj4+IC0JaW50IHBhZ2VfZGF0YV9udW07Cj4+Pj4+PiArCWludCBwYWdlX2J1Zl9udW07Cj4+ Pj4+PiAgIAlzdHJ1Y3QgcGFnZV9kYXRhICpwYWdlX2RhdGFfYnVmID0gTlVMTDsKPj4+Pj4+ICAg CWludCBpOwo+Pj4+Pj4gICAJaW50IGluZGV4Owo+Pj4+Pj4gKwlpbnQgZW5kX2NvdW50LCBjb25z dW1pbmcsIGNoZWNrX2NvdW50Owo+Pj4+Pj4gKwltZGZfcGZuX3QgY3VycmVudF9wZm4sIHRlbXBf cGZuOwo+Pj4+Pj4KPj4+Pj4+ICAgCWlmIChpbmZvLT5mbGFnX2VsZl9kdW1wZmlsZSkKPj4+Pj4+ ICAgCQlyZXR1cm4gRkFMU0U7Cj4+Pj4+PiBAQCAtNzI4NCwxMyArNzM0MCw2IEBAIHdyaXRlX2tk dW1wX3BhZ2VzX3BhcmFsbGVsX2N5Y2xpYyhzdHJ1Y3QgY2FjaGVfZGF0YSAqY2RfaGVhZGVyLAo+ Pj4+Pj4gICAJCWdvdG8gb3V0Owo+Pj4+Pj4gICAJfQo+Pj4+Pj4KPj4+Pj4+IC0JcmVzID0gcHRo cmVhZF9tdXRleF9pbml0KCZpbmZvLT5jb25zdW1lZF9wZm5fbXV0ZXgsIE5VTEwpOwo+Pj4+Pj4g LQlpZiAocmVzICE9IDApIHsKPj4+Pj4+IC0JCUVSUk1TRygiQ2FuJ3QgaW5pdGlhbGl6ZSBjb25z dW1lZF9wZm5fbXV0ZXguICVzXG4iLAo+Pj4+Pj4gLQkJCQlzdHJlcnJvcihyZXMpKTsKPj4+Pj4+ IC0JCWdvdG8gb3V0Owo+Pj4+Pj4gLQl9Cj4+Pj4+PiAtCj4+Pj4+PiAgIAlyZXMgPSBwdGhyZWFk X211dGV4X2luaXQoJmluZm8tPmZpbHRlcl9tdXRleCwgTlVMTCk7Cj4+Pj4+PiAgIAlpZiAocmVz ICE9IDApIHsKPj4+Pj4+ICAgCQlFUlJNU0coIkNhbid0IGluaXRpYWxpemUgZmlsdGVyX211dGV4 LiAlc1xuIiwgc3RyZXJyb3IocmVzKSk7Cj4+Pj4+PiBAQCAtNzMxNCwzNiArNzM2MywyMyBAQCB3 cml0ZV9rZHVtcF9wYWdlc19wYXJhbGxlbF9jeWNsaWMoc3RydWN0IGNhY2hlX2RhdGEgKmNkX2hl YWRlciwKPj4+Pj4+ICAgCWVuZF9wZm4gICA9IGN5Y2xlLT5lbmRfcGZuOwo+Pj4+Pj4KPj4+Pj4+ ICAgCWluZm8tPmN1cnJlbnRfcGZuID0gc3RhcnRfcGZuOwo+Pj4+Pj4gLQlpbmZvLT5jb25zdW1l ZF9wZm4gPSBzdGFydF9wZm4gLSAxOwo+Pj4+Pj4KPj4+Pj4+ICAgCXRocmVhZHMgPSBpbmZvLT50 aHJlYWRzOwo+Pj4+Pj4gICAJa2R1bXBfdGhyZWFkX2FyZ3MgPSBpbmZvLT5rZHVtcF90aHJlYWRf YXJnczsKPj4+Pj4+Cj4+Pj4+PiAtCXBhZ2VfZGF0YV9udW0gPSBpbmZvLT5udW1fYnVmZmVyczsK Pj4+Pj4+ICsJcGFnZV9idWZfbnVtID0gaW5mby0+bnVtX2J1ZmZlcnM7Cj4+Pj4+PiAgIAlwYWdl X2RhdGFfYnVmID0gaW5mby0+cGFnZV9kYXRhX2J1ZjsKPj4+Pj4+ICsJcHRocmVhZF9tdXRleF9p bml0KCZpbmZvLT5wYWdlX2RhdGFfbXV0ZXgsIE5VTEwpOwo+Pj4+Pj4gKwlzZW1faW5pdCgmaW5m by0+cGFnZV9mbGFnX2J1Zl9zZW0sIDAsIDApOwo+Pj4+Pj4KPj4+Pj4+IC0JZm9yIChpID0gMDsg aSA8IHBhZ2VfZGF0YV9udW07IGkrKykgewo+Pj4+Pj4gLQkJLyoKPj4+Pj4+IC0JCSAqIHByb2R1 Y2VyIHdpbGwgdXNlIHBmbiBpbiBwYWdlX2RhdGFfYnVmIHRvIGRlY2lkZSB0aGUKPj4+Pj4+IC0J CSAqIGNvbnN1bWVkIHBmbgo+Pj4+Pj4gLQkJICovCj4+Pj4+PiAtCQlwYWdlX2RhdGFfYnVmW2ld LnBmbiA9IHN0YXJ0X3BmbiAtIDE7Cj4+Pj4+PiAtCQlwYWdlX2RhdGFfYnVmW2ldLnJlYWR5ID0g MDsKPj4+Pj4+IC0JCXJlcyA9IHB0aHJlYWRfbXV0ZXhfaW5pdCgmcGFnZV9kYXRhX2J1ZltpXS5t dXRleCwgTlVMTCk7Cj4+Pj4+PiAtCQlpZiAocmVzICE9IDApIHsKPj4+Pj4+IC0JCQlFUlJNU0co IkNhbid0IGluaXRpYWxpemUgbXV0ZXggb2YgcGFnZV9kYXRhX2J1Zi4gJXNcbiIsCj4+Pj4+PiAt CQkJCQlzdHJlcnJvcihyZXMpKTsKPj4+Pj4+IC0JCQlnb3RvIG91dDsKPj4+Pj4+IC0JCX0KPj4+ Pj4+IC0JfQo+Pj4+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgcGFnZV9idWZfbnVtOyBpKyspCj4+Pj4+ PiArCQlwYWdlX2RhdGFfYnVmW2ldLnVzZWQgPSBGQUxTRTsKPj4+Pj4+Cj4+Pj4+PiAgIAlmb3Ig KGkgPSAwOyBpIDwgaW5mby0+bnVtX3RocmVhZHM7IGkrKykgewo+Pj4+Pj4gICAJCWtkdW1wX3Ro cmVhZF9hcmdzW2ldLnRocmVhZF9udW0gPSBpOwo+Pj4+Pj4gICAJCWtkdW1wX3RocmVhZF9hcmdz W2ldLmxlbl9idWZfb3V0ID0gbGVuX2J1Zl9vdXQ7Cj4+Pj4+PiAtCQlrZHVtcF90aHJlYWRfYXJn c1tpXS5zdGFydF9wZm4gPSBzdGFydF9wZm47Cj4+Pj4+PiAtCQlrZHVtcF90aHJlYWRfYXJnc1tp XS5lbmRfcGZuID0gZW5kX3BmbjsKPj4+Pj4+IC0JCWtkdW1wX3RocmVhZF9hcmdzW2ldLnBhZ2Vf ZGF0YV9udW0gPSBwYWdlX2RhdGFfbnVtOwo+Pj4+Pj4gICAJCWtkdW1wX3RocmVhZF9hcmdzW2ld LnBhZ2VfZGF0YV9idWYgPSBwYWdlX2RhdGFfYnVmOwo+Pj4+Pj4gKwkJa2R1bXBfdGhyZWFkX2Fy Z3NbaV0ucGFnZV9mbGFnX2J1ZiA9IGluZm8tPnBhZ2VfZmxhZ19idWZbaV07Cj4+Pj4+PiAgIAkJ a2R1bXBfdGhyZWFkX2FyZ3NbaV0uY3ljbGUgPSBjeWNsZTsKPj4+Pj4+Cj4+Pj4+PiAgIAkJcmVz ID0gcHRocmVhZF9jcmVhdGUodGhyZWFkc1tpXSwgTlVMTCwKPj4+Pj4+IEBAIC03MzU2LDU1ICs3 MzkyLDg4IEBAIHdyaXRlX2tkdW1wX3BhZ2VzX3BhcmFsbGVsX2N5Y2xpYyhzdHJ1Y3QgY2FjaGVf ZGF0YSAqY2RfaGVhZGVyLAo+Pj4+Pj4gICAJCX0KPj4+Pj4+ICAgCX0KPj4+Pj4+Cj4+Pj4+PiAt CWNvbnN1bWluZ19wZm4gPSBzdGFydF9wZm47Cj4+Pj4+PiAtCWluZGV4ID0gLTE7Cj4+Pj4+PiAr CWVuZF9jb3VudCA9IDA7Cj4+Pj4+PiArCXdoaWxlICgxKSB7Cj4+Pj4+PiArCQljb25zdW1pbmcg PSAwOwo+Pj4+Pj4gKwkJY2hlY2tfY291bnQgPSAwOwo+Pj4+Pj4KPj4+Pj4+IC0JZ2V0dGltZW9m ZGF5KCZsYXN0LCBOVUxMKTsKPj4+Pj4+ICsJCS8qCj4+Pj4+PiArCQkgKiBUaGUgYmFzaWMgaWRl YSBpcyBwcm9kdWNlciBwcm9kdWNpbmcgcGFnZSBhbmQgY29uc3VtZXIgd3JpdGluZyBwYWdlLgo+ Pj4+Pj4gKwkJICogRWFjaCBwcm9kdWNlciBoYXZlIGEgcGFnZV9mbGFnX2J1ZiBsaXN0IHdoaWNo IGlzIHVzZWQgZm9yIHN0b3JpbmcgcGFnZSdzIGRlc2NyaXB0aW9uLgo+Pj4+Pj4gKwkJICogVGhl IHNpemUgb2YgcGFnZV9mbGFnX2J1ZiBpcyBsaXR0bGUgc28gaXQgd29uJ3QgdGFrZSB0b28gbXVj aCBtZW1vcnkuCj4+Pj4+PiArCQkgKiBBbmQgYWxsIHByb2R1Y2VycyB3aWxsIHNoYXJlIGEgcGFn ZV9kYXRhX2J1ZiBhcnJheSB3aGljaCBpcyB1c2VkIGZvciBzdG9yaW5nIHBhZ2UncyBjb21wcmVz c2VkIGRhdGEuCj4+Pj4+PiArCQkgKiBUaGUgbWFpbiB0aHJlYWQgaXMgdGhlIGNvbnN1bWVyLiBJ dCB3aWxsIGZpbmQgdGhlIG5leHQgcGZuIGFuZCB3cml0ZSBpdCBpbnRvIGZpbGUuCj4+Pj4+PiAr CQkgKiBUaGUgbmV4dCBwZm4gaXMgc21hbGxlc3QgcGZuIGluIGFsbCBwYWdlX2ZsYWdfYnVmLgo+ Pj4+Pj4gKwkJICovCj4+Pj4+PiArCQlzZW1fd2FpdCgmaW5mby0+cGFnZV9mbGFnX2J1Zl9zZW0p Owo+Pj4+Pj4gKwkJZ2V0dGltZW9mZGF5KCZsYXN0LCBOVUxMKTsKPj4+Pj4+ICsJCXdoaWxlICgx KSB7Cj4+Pj4+PiArCQkJY3VycmVudF9wZm4gPSBlbmRfcGZuOwo+Pj4+Pj4KPj4+Pj4+IC0Jd2hp bGUgKGNvbnN1bWluZ19wZm4gPCBlbmRfcGZuKSB7Cj4+Pj4+PiAtCQlpbmRleCA9IGNvbnN1bWlu Z19wZm4gJSBwYWdlX2RhdGFfbnVtOwo+Pj4+Pj4gKwkJCS8qCj4+Pj4+PiArCQkJICogcGFnZV9m bGFnX2J1ZiBpcyBpbiBjaXJjdWxhciBsaW5rZWQgbGlzdC4KPj4+Pj4+ICsJCQkgKiBUaGUgYXJy YXkgaW5mby0+cGFnZV9mbGFnX2J1ZltdIHJlY29yZHMgdGhlIGN1cnJlbnQgcGFnZV9mbGFnX2J1 ZiBpbiBlYWNoIHRocmVhZCdzCj4+Pj4+PiArCQkJICogcGFnZV9mbGFnX2J1ZiBsaXN0Lgo+Pj4+ Pj4gKwkJCSAqIGNvbnN1bWluZyBpcyB1c2VkIGZvciByZWNvcmRpbmcgaW4gd2hpY2ggdGhyZWFk IHRoZSBwZm4gaXMgdGhlIHNtYWxsZXN0Lgo+Pj4+Pj4gKwkJCSAqIGN1cnJlbnRfcGZuIGlzIHVz ZWQgZm9yIHJlY29yZGluZyB0aGUgdmFsdWUgb2YgcGZuIHdoZW4gY2hlY2tpbmcgdGhlIHBmbi4K Pj4+Pj4+ICsJCQkgKi8KPj4+Pj4+ICsJCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX3RocmVh ZHM7IGkrKykgewo+Pj4+Pj4gKwkJCQlpZiAoaW5mby0+cGFnZV9mbGFnX2J1ZltpXS0+cmVhZHkg PT0gRkxBR19VTlVTRUQpCj4+Pj4+PiArCQkJCQljb250aW51ZTsKPj4+Pj4+ICsJCQkJdGVtcF9w Zm4gPSBpbmZvLT5wYWdlX2ZsYWdfYnVmW2ldLT5wZm47Cj4+Pj4+Pgo+Pj4+Pj4gLQkJZ2V0dGlt ZW9mZGF5KCZuZXcsIE5VTEwpOwo+Pj4+Pj4gLQkJaWYgKG5ldy50dl9zZWMgLSBsYXN0LnR2X3Nl YyA+IFdBSVRfVElNRSkgewo+Pj4+Pj4gLQkJCUVSUk1TRygiQ2FuJ3QgZ2V0IGRhdGEgb2YgcGZu ICVsbHguXG4iLCBjb25zdW1pbmdfcGZuKTsKPj4+Pj4+IC0JCQlnb3RvIG91dDsKPj4+Pj4+IC0J CX0KPj4+Pj4+ICsJCQkJLyoKPj4+Pj4+ICsJCQkJICogY291bnQgaG93IG1hbnkgdGhyZWFkcyBo YXZlIHJlYWNoZWQgdGhlIGVuZC4KPj4+Pj4+ICsJCQkJICovCj4+Pj4+PiArCQkJCWlmICh0ZW1w X3BmbiA+PSBlbmRfcGZuKSB7Cj4+Pj4+PiArCQkJCQlpbmZvLT5wYWdlX2ZsYWdfYnVmW2ldLT5y ZWFkeSA9IEZMQUdfVU5VU0VEOwo+Pj4+Pj4gKwkJCQkJZW5kX2NvdW50Kys7Cj4+Pj4+PiArCQkJ CQljb250aW51ZTsKPj4+Pj4+ICsJCQkJfQo+Pj4+Pj4KPj4+Pj4+IC0JCS8qCj4+Pj4+PiAtCQkg KiBjaGVjayBwZm4gZmlyc3Qgd2l0aG91dCBtdXRleCBsb2NrZWQgdG8gcmVkdWNlIHRoZSB0aW1l Cj4+Pj4+PiAtCQkgKiB0cnlpbmcgdG8gbG9jayB0aGUgbXV0ZXgKPj4+Pj4+IC0JCSAqLwo+Pj4+ Pj4gLQkJaWYgKHBhZ2VfZGF0YV9idWZbaW5kZXhdLnBmbiAhPSBjb25zdW1pbmdfcGZuKQo+Pj4+ Pj4gLQkJCWNvbnRpbnVlOwo+Pj4+Pj4gKwkJCQlpZiAoY3VycmVudF9wZm4gPCB0ZW1wX3BmbikK Pj4+Pj4+ICsJCQkJCWNvbnRpbnVlOwo+Pj4+Pj4KPj4+Pj4+IC0JCWlmIChwdGhyZWFkX211dGV4 X3RyeWxvY2soJnBhZ2VfZGF0YV9idWZbaW5kZXhdLm11dGV4KSAhPSAwKQo+Pj4+Pj4gLQkJCWNv bnRpbnVlOwo+Pj4+Pj4gKwkJCQljaGVja19jb3VudCsrOwo+Pj4+Pj4gKwkJCQljb25zdW1pbmcg PSBpOwo+Pj4+Pj4gKwkJCQljdXJyZW50X3BmbiA9IHRlbXBfcGZuOwo+Pj4+Pj4gKwkJCX0KPj4+ Pj4+Cj4+Pj4+PiAtCQkvKiBjaGVjayB3aGV0aGVyIHRoZSBmb3VuZCBvbmUgaXMgcmVhZHkgdG8g YmUgY29uc3VtZWQgKi8KPj4+Pj4+IC0JCWlmIChwYWdlX2RhdGFfYnVmW2luZGV4XS5wZm4gIT0g Y29uc3VtaW5nX3BmbiB8fAo+Pj4+Pj4gLQkJICAgIHBhZ2VfZGF0YV9idWZbaW5kZXhdLnJlYWR5 ICE9IDEpIHsKPj4+Pj4+IC0JCQlnb3RvIHVubG9jazsKPj4+Pj4+ICsJCQkvKgo+Pj4+Pj4gKwkJ CSAqIElmIGFsbCB0aGUgdGhyZWFkcyBoYXZlIHJlYWNoZWQgdGhlIGVuZCwgd2Ugd2lsbCBmaW5p c2ggd3JpdGluZy4KPj4+Pj4+ICsJCQkgKi8KPj4+Pj4+ICsJCQlpZiAoZW5kX2NvdW50ID49IGlu Zm8tPm51bV90aHJlYWRzKQo+Pj4+Pj4gKwkJCQlnb3RvIGZpbmlzaDsKPj4+Pj4+ICsKPj4+Pj4+ ICsJCQkvKgo+Pj4+Pj4gKwkJCSAqIElmIHRoZSBwYWdlX2ZsYWdfYnVmIGlzIG5vdCByZWFkeSwg dGhlIHBmbiByZWNvcmRlZCBtYXkgYmUgY2hhbmdlZC4KPj4+Pj4+ICsJCQkgKiBTbyB3ZSBzaG91 bGQgcmVjaGVjay4KPj4+Pj4+ICsJCQkgKi8KPj4+Pj4+ICsJCQlpZiAoaW5mby0+cGFnZV9mbGFn X2J1Zltjb25zdW1pbmddLT5yZWFkeSAhPSBGTEFHX1JFQURZKSB7Cj4+Pj4+PiArCQkJCWdldHRp bWVvZmRheSgmbmV3LCBOVUxMKTsKPj4+Pj4+ICsJCQkJaWYgKG5ldy50dl9zZWMgLSBsYXN0LnR2 X3NlYyA+IFdBSVRfVElNRSkgewo+Pj4+Pj4gKwkJCQkJRVJSTVNHKCJDYW4ndCBnZXQgZGF0YSBv ZiBwZm4uXG4iKTsKPj4+Pj4+ICsJCQkJCWdvdG8gb3V0Owo+Pj4+Pj4gKwkJCQl9Cj4+Pj4+PiAr CQkJCWNvbnRpbnVlOwo+Pj4+Pj4gKwkJCX0KPj4+Pj4+ICsKPj4+Pj4+ICsJCQlpZiAoY3VycmVu dF9wZm4gPT0gaW5mby0+cGFnZV9mbGFnX2J1Zltjb25zdW1pbmddLT5wZm4pCj4+Pj4+PiArCQkJ CWJyZWFrOwo+Pj4+Pj4gICAJCX0KPj4+Pj4+Cj4+Pj4+PiAgIAkJaWYgKChudW1fZHVtcGVkICUg cGVyKSA9PSAwKQo+Pj4+Pj4gICAJCQlwcmludF9wcm9ncmVzcyhQUk9HUkVTU19DT1BZLCBudW1f ZHVtcGVkLCBpbmZvLT5udW1fZHVtcGFibGUpOwo+Pj4+Pj4KPj4+Pj4+IC0JCS8qIG5leHQgcGZu IGlzIGZvdW5kLCByZWZyZXNoIGxhc3QgaGVyZSAqLwo+Pj4+Pj4gLQkJbGFzdCA9IG5ldzsKPj4+ Pj4+IC0JCWNvbnN1bWluZ19wZm4rKzsKPj4+Pj4+IC0JCWluZm8tPmNvbnN1bWVkX3BmbisrOwo+ Pj4+Pj4gLQkJcGFnZV9kYXRhX2J1ZltpbmRleF0ucmVhZHkgPSAwOwo+Pj4+Pj4gLQo+Pj4+Pj4g LQkJaWYgKHBhZ2VfZGF0YV9idWZbaW5kZXhdLmR1bXBhYmxlID09IEZBTFNFKQo+Pj4+Pj4gLQkJ CWdvdG8gdW5sb2NrOwo+Pj4+Pj4gLQo+Pj4+Pj4gICAJCW51bV9kdW1wZWQrKzsKPj4+Pj4+Cj4+ Pj4+PiAtCQlpZiAocGFnZV9kYXRhX2J1ZltpbmRleF0uemVybyA9PSBUUlVFKSB7Cj4+Pj4+PiAr Cj4+Pj4+PiArCQlpZiAoaW5mby0+cGFnZV9mbGFnX2J1Zltjb25zdW1pbmddLT56ZXJvID09IFRS VUUpIHsKPj4+Pj4+ICAgCQkJaWYgKCF3cml0ZV9jYWNoZShjZF9oZWFkZXIsIHBkX3plcm8sIHNp emVvZihwYWdlX2Rlc2NfdCkpKQo+Pj4+Pj4gICAJCQkJZ290byBvdXQ7Cj4+Pj4+PiAgIAkJCXBm bl96ZXJvKys7Cj4+Pj4+PiAgIAkJfSBlbHNlIHsKPj4+Pj4+ICsJCQlpbmRleCA9IGluZm8tPnBh Z2VfZmxhZ19idWZbY29uc3VtaW5nXS0+aW5kZXg7Cj4+Pj4+PiAgIAkJCXBkLmZsYWdzICAgICAg PSBwYWdlX2RhdGFfYnVmW2luZGV4XS5mbGFnczsKPj4+Pj4+ICAgCQkJcGQuc2l6ZSAgICAgICA9 IHBhZ2VfZGF0YV9idWZbaW5kZXhdLnNpemU7Cj4+Pj4+PiAgIAkJCXBkLnBhZ2VfZmxhZ3MgPSAw Owo+Pj4+Pj4gQEAgLTc0MjAsMTIgKzc0ODksMTIgQEAgd3JpdGVfa2R1bXBfcGFnZXNfcGFyYWxs ZWxfY3ljbGljKHN0cnVjdCBjYWNoZV9kYXRhICpjZF9oZWFkZXIsCj4+Pj4+PiAgIAkJCSAqLwo+ Pj4+Pj4gICAJCQlpZiAoIXdyaXRlX2NhY2hlKGNkX3BhZ2UsIHBhZ2VfZGF0YV9idWZbaW5kZXhd LmJ1ZiwgcGQuc2l6ZSkpCj4+Pj4+PiAgIAkJCQlnb3RvIG91dDsKPj4+Pj4+IC0KPj4+Pj4+ICsJ CQlwYWdlX2RhdGFfYnVmW2luZGV4XS51c2VkID0gRkFMU0U7Cj4+Pj4+PiAgIAkJfQo+Pj4+Pj4g LXVubG9jazoKPj4+Pj4+IC0JCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwYWdlX2RhdGFfYnVmW2lu ZGV4XS5tdXRleCk7Cj4+Pj4+PiArCQlpbmZvLT5wYWdlX2ZsYWdfYnVmW2NvbnN1bWluZ10tPnJl YWR5ID0gRkxBR19VTlVTRUQ7Cj4+Pj4+PiArCQlpbmZvLT5wYWdlX2ZsYWdfYnVmW2NvbnN1bWlu Z10gPSBpbmZvLT5wYWdlX2ZsYWdfYnVmW2NvbnN1bWluZ10tPm5leHQ7Cj4+Pj4+PiAgIAl9Cj4+ Pj4+PiAtCj4+Pj4+PiArZmluaXNoOgo+Pj4+Pj4gICAJcmV0ID0gVFJVRTsKPj4+Pj4+ICAgCS8q Cj4+Pj4+PiAgIAkgKiBwcmludCBbMTAwICVdCj4+Pj4+PiBAQCAtNzQ2MywxNSArNzUzMiw5IEBA IG91dDoKPj4+Pj4+ICAgCQl9Cj4+Pj4+PiAgIAl9Cj4+Pj4+Pgo+Pj4+Pj4gLQlpZiAocGFnZV9k YXRhX2J1ZiAhPSBOVUxMKSB7Cj4+Pj4+PiAtCQlmb3IgKGkgPSAwOyBpIDwgcGFnZV9kYXRhX251 bTsgaSsrKSB7Cj4+Pj4+PiAtCQkJcHRocmVhZF9tdXRleF9kZXN0cm95KCZwYWdlX2RhdGFfYnVm W2ldLm11dGV4KTsKPj4+Pj4+IC0JCX0KPj4+Pj4+IC0JfQo+Pj4+Pj4gLQo+Pj4+Pj4gKwlzZW1f ZGVzdHJveSgmaW5mby0+cGFnZV9mbGFnX2J1Zl9zZW0pOwo+Pj4+Pj4gICAJcHRocmVhZF9yd2xv Y2tfZGVzdHJveSgmaW5mby0+dXNlbW1hcF9yd2xvY2spOwo+Pj4+Pj4gICAJcHRocmVhZF9tdXRl eF9kZXN0cm95KCZpbmZvLT5maWx0ZXJfbXV0ZXgpOwo+Pj4+Pj4gLQlwdGhyZWFkX211dGV4X2Rl c3Ryb3koJmluZm8tPmNvbnN1bWVkX3Bmbl9tdXRleCk7Cj4+Pj4+PiAgIAlwdGhyZWFkX211dGV4 X2Rlc3Ryb3koJmluZm8tPmN1cnJlbnRfcGZuX211dGV4KTsKPj4+Pj4+Cj4+Pj4+PiAgIAlyZXR1 cm4gcmV0Owo+Pj4+Pj4gQEAgLTc1NjQsNiArNzYyNyw3IEBAIHdyaXRlX2tkdW1wX3BhZ2VzX2N5 Y2xpYyhzdHJ1Y3QgY2FjaGVfZGF0YSAqY2RfaGVhZGVyLCBzdHJ1Y3QgY2FjaGVfZGF0YSAqY2Rf cGFnCj4+Pj4+PiAgIAkJbnVtX2R1bXBlZCsrOwo+Pj4+Pj4gICAJCWlmICghcmVhZF9wZm4ocGZu LCBidWYpKQo+Pj4+Pj4gICAJCQlnb3RvIG91dDsKPj4+Pj4+ICsKPj4+Pj4+ICAgCQlmaWx0ZXJf ZGF0YV9idWZmZXIoYnVmLCBwZm5fdG9fcGFkZHIocGZuKSwgaW5mby0+cGFnZV9zaXplKTsKPj4+ Pj4+Cj4+Pj4+PiAgIAkJLyoKPj4+Pj4+IGRpZmYgLS1naXQgYS9tYWtlZHVtcGZpbGUuaCBiL21h a2VkdW1wZmlsZS5oCj4+Pj4+PiBpbmRleCBlMGI1YmJmLi40YjMxNWMwIDEwMDY0NAo+Pj4+Pj4g LS0tIGEvbWFrZWR1bXBmaWxlLmgKPj4+Pj4+ICsrKyBiL21ha2VkdW1wZmlsZS5oCj4+Pj4+PiBA QCAtNDQsNiArNDQsNyBAQAo+Pj4+Pj4gICAjaW5jbHVkZSAicHJpbnRfaW5mby5oIgo+Pj4+Pj4g ICAjaW5jbHVkZSAic2FkdW1wX21vZC5oIgo+Pj4+Pj4gICAjaW5jbHVkZSA8cHRocmVhZC5oPgo+ Pj4+Pj4gKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KPj4+Pj4+Cj4+Pj4+PiAgIC8qCj4+Pj4+PiAg ICAqIFJlc3VsdCBvZiBjb21tYW5kCj4+Pj4+PiBAQCAtOTc3LDcgKzk3OCw3IEBAIHR5cGVkZWYg dW5zaWduZWQgbG9uZyBsb25nIGludCB1bG9uZ2xvbmc7Cj4+Pj4+PiAgICNkZWZpbmUgUEFHRV9E QVRBX05VTQkoNTApCj4+Pj4+PiAgICNkZWZpbmUgV0FJVF9USU1FCSg2MCAqIDEwKQo+Pj4+Pj4g ICAjZGVmaW5lIFBUSFJFQURfRkFJTAkoKHZvaWQgKiktMikKPj4+Pj4+IC0jZGVmaW5lIE5VTV9C VUZGRVJTCSg1MCkKPj4+Pj4+ICsjZGVmaW5lIE5VTV9CVUZGRVJTCSgyMCkKPj4+Pj4+Cj4+Pj4+ PiAgIHN0cnVjdCBtbWFwX2NhY2hlIHsKPj4+Pj4+ICAgCWNoYXIJKm1tYXBfYnVmOwo+Pj4+Pj4g QEAgLTk4NSwyOCArOTg2LDMzIEBAIHN0cnVjdCBtbWFwX2NhY2hlIHsKPj4+Pj4+ICAgCW9mZl90 ICAgbW1hcF9lbmRfb2Zmc2V0Owo+Pj4+Pj4gICB9Owo+Pj4+Pj4KPj4+Pj4+ICtlbnVtIHsKPj4+ Pj4+ICsJRkxBR19VTlVTRUQsCj4+Pj4+PiArCUZMQUdfUkVBRFksCj4+Pj4+PiArCUZMQUdfRklM TElORwo+Pj4+Pj4gK307Cj4+Pj4+PiArc3RydWN0IHBhZ2VfZmxhZyB7Cj4+Pj4+PiArCW1kZl9w Zm5fdCBwZm47Cj4+Pj4+PiArCWNoYXIgemVybzsKPj4+Pj4+ICsJY2hhciByZWFkeTsKPj4+Pj4+ ICsJc2hvcnQgaW5kZXg7Cj4+Pj4+PiArCXN0cnVjdCBwYWdlX2ZsYWcgKm5leHQ7Cj4+Pj4+PiAr fTsKPj4+Pj4+ICsKPj4+Pj4+ICAgc3RydWN0IHBhZ2VfZGF0YQo+Pj4+Pj4gICB7Cj4+Pj4+PiAt CW1kZl9wZm5fdCBwZm47Cj4+Pj4+PiAtCWludCBkdW1wYWJsZTsKPj4+Pj4+IC0JaW50IHplcm87 Cj4+Pj4+PiAtCXVuc2lnbmVkIGludCBmbGFnczsKPj4+Pj4+ICAgCWxvbmcgc2l6ZTsKPj4+Pj4+ ICAgCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKPj4+Pj4+IC0JcHRocmVhZF9tdXRleF90IG11dGV4Owo+ Pj4+Pj4gLQkvKgo+Pj4+Pj4gLQkgKiB3aGV0aGVyIHRoZSBwYWdlX2RhdGEgaXMgcmVhZHkgdG8g YmUgY29uc3VtZWQKPj4+Pj4+IC0JICovCj4+Pj4+PiAtCWludCByZWFkeTsKPj4+Pj4+ICsJaW50 IGZsYWdzOwo+Pj4+Pj4gKwlpbnQgdXNlZDsKPj4+Pj4+ICAgfTsKPj4+Pj4+Cj4+Pj4+PiAgIHN0 cnVjdCB0aHJlYWRfYXJncyB7Cj4+Pj4+PiAgIAlpbnQgdGhyZWFkX251bTsKPj4+Pj4+ICAgCXVu c2lnbmVkIGxvbmcgbGVuX2J1Zl9vdXQ7Cj4+Pj4+PiAtCW1kZl9wZm5fdCBzdGFydF9wZm4sIGVu ZF9wZm47Cj4+Pj4+PiAtCWludCBwYWdlX2RhdGFfbnVtOwo+Pj4+Pj4gICAJc3RydWN0IGN5Y2xl ICpjeWNsZTsKPj4+Pj4+ICAgCXN0cnVjdCBwYWdlX2RhdGEgKnBhZ2VfZGF0YV9idWY7Cj4+Pj4+ PiArCXN0cnVjdCBwYWdlX2ZsYWcgKnBhZ2VfZmxhZ19idWY7Cj4+Pj4+PiAgIH07Cj4+Pj4+Pgo+ Pj4+Pj4gICAvKgo+Pj4+Pj4gQEAgLTEyOTUsMTEgKzEzMDEsMTIgQEAgc3RydWN0IER1bXBJbmZv IHsKPj4+Pj4+ICAgCXB0aHJlYWRfdCAqKnRocmVhZHM7Cj4+Pj4+PiAgIAlzdHJ1Y3QgdGhyZWFk X2FyZ3MgKmtkdW1wX3RocmVhZF9hcmdzOwo+Pj4+Pj4gICAJc3RydWN0IHBhZ2VfZGF0YSAqcGFn ZV9kYXRhX2J1ZjsKPj4+Pj4+ICsJc3RydWN0IHBhZ2VfZmxhZyAqKnBhZ2VfZmxhZ19idWY7Cj4+ Pj4+PiArCXNlbV90IHBhZ2VfZmxhZ19idWZfc2VtOwo+Pj4+Pj4gICAJcHRocmVhZF9yd2xvY2tf dCB1c2VtbWFwX3J3bG9jazsKPj4+Pj4+ICAgCW1kZl9wZm5fdCBjdXJyZW50X3BmbjsKPj4+Pj4+ ICAgCXB0aHJlYWRfbXV0ZXhfdCBjdXJyZW50X3Bmbl9tdXRleDsKPj4+Pj4+IC0JbWRmX3Bmbl90 IGNvbnN1bWVkX3BmbjsKPj4+Pj4+IC0JcHRocmVhZF9tdXRleF90IGNvbnN1bWVkX3Bmbl9tdXRl eDsKPj4+Pj4+ICsJcHRocmVhZF9tdXRleF90IHBhZ2VfZGF0YV9tdXRleDsKPj4+Pj4+ICAgCXB0 aHJlYWRfbXV0ZXhfdCBmaWx0ZXJfbXV0ZXg7Cj4+Pj4+PiAgIH07Cj4+Pj4+PiAgIGV4dGVybiBz dHJ1Y3QgRHVtcEluZm8JCSppbmZvOwo+Pj4+Pj4gLS0KPj4+Pj4+IDEuOC4zLjEKPj4+Pj4+Cj4+ Pj4+Pgo+Pj4+Pj4KPj4+Pj4+Cj4+Pj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+Pj4+Pj4ga2V4ZWMgbWFpbGluZyBsaXN0Cj4+Pj4+PiBrZXhlY0Bs aXN0cy5pbmZyYWRlYWQub3JnCj4+Pj4+PiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2tleGVjCj4+Pj4+Cj4+Pj4+Cj4+Pj4KPj4+Pgo+Pj4+Cj4+Pj4gX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4+PiBrZXhlYyBtYWls aW5nIGxpc3QKPj4+PiBrZXhlY0BsaXN0cy5pbmZyYWRlYWQub3JnCj4+Pj4gaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9rZXhlYwo+Pgo+Pgo+PgoKCgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Ka2V4ZWMgbWFpbGluZyBs aXN0CmtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9rZXhlYwo=