From mboxrd@z Thu Jan 1 00:00:00 1970 From: Martin Wilck Subject: Re: [PATCH v3] multipath-tools: intermittent IO error accounting to improve reliability Date: Mon, 04 Sep 2017 22:59:41 +0200 Message-ID: <1504558781.4605.14.camel@suse.com> References: <1504533992-13392-1-git-send-email-guanjunxiong@huawei.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1504533992-13392-1-git-send-email-guanjunxiong@huawei.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com To: Guan Junxiong , dm-devel@redhat.com, christophe.varoqui@opensvc.com, hare@suse.de, bmarzins@redhat.com, xose.vazquez@gmail.com Cc: chengjike.cheng@huawei.com, niuhaoxin@huawei.com, shenhong09@huawei.com List-Id: dm-devel.ids SGkgR3VhbiwKCnNvbWUgcmVtYXJrcyBiZWxvdy4gVGhpcyBwYXRjaCBpcyBxdWl0ZSBiaWcgLSBJ J3ZlIGRvbmUgbXkgYmVzdCBidXQKdGhpcyBzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCBhbiBleHRl bnNpdmUgcmV2aWV3LgoKT24gTW9uLCAyMDE3LTA5LTA0IGF0IDIyOjA2ICswODAwLCBHdWFuIEp1 bnhpb25nIHdyb3RlOgo+IFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBtZXRob2Qgb2YgcGF0aCBzdGF0 ZSBjaGVja2luZyBiYXNlZCBvbgo+IGFjY291bnRpbmcKPiBJTyBlcnJvci4gVGhpcyBpcyB1c2Vm dWwgaW4gbWFueSBzY2VuYXJpb3Mgc3VjaCBhcyBpbnRlcm1pdHRlbnQgSU8KPiBlcnJvcgo+IGFu IGEgcGF0aCBkdWUgdG8gbmV0d29yayBjb25nZXN0aW9uLCBvciBhIHNoYWt5IGxpbmsuCj4gCj4g VGhyZWUgcGFyYW1ldGVycyBhcmUgYWRkZWQgZm9yIHRoZSBhZG1pbjogInBhdGhfaW9fZXJyX3Nh bXBsZV90aW1lIiwKPiAicGF0aF9pb19lcnJfcmF0ZV90aHJlc2hvbGQiIGFuZCAicGF0aF9pb19l cnJfcmVjb3ZlcnlfdGltZSIuCj4gSWYgcGF0aF9pb19lcnJfc2FtcGxlX3RpbWUgYW5kIHBhdGhf aW9fZXJyX3JlY292ZXJ5X3RpbWUgYXJlIHNldCB0byBhCj4gdmFsdWUgZ3JlYXRlciB0aGFuIDAs IHdoZW4gYSBwYXRoIGZhaWwgZXZlbnQgb2NjdXJzIGR1ZSB0byBhbiBJTwo+IGVycm9yLAo+IG11 bHRpcGF0aGQgd2lsbCBlbnF1ZXVlIHRoaXMgcGF0aCBpbnRvIGEgcXVldWUgb2Ygd2hpY2ggZWFj aCBtZW1iZXIKPiBpcwo+IHNlbnQgYSBjb3VwbGUgb2YgY29udGludW91cyBkaXJlY3QgcmVhZGlu ZyBhc3luY2hyb25vdXMgaW8gYXQgYSBmaXhlZAo+IHNhbXBsZSByYXRlIG9mIDEwSFouIFRoZSBJ TyBhY2NvdW50aW5nIHByb2Nlc3MgZm9yIGEgcGF0aCB3aWxsIGxhc3QKPiBmb3IKPiBwYXRoX2lv X2Vycl9zYW1wbGVfdGltZS4gSWYgdGhlIElPIGVycm9yIHJhdGUgb24gYSBwYXJ0aWN1bGFyIHBh dGggaXMKPiBncmVhdGVyIHRoYW4gdGhlIHBhdGhfaW9fZXJyX3JhdGVfdGhyZXNob2xkLCB0aGVu IHRoZSBwYXRoIHdpbGwgbm90Cj4gcmVpbnN0YXRlIGZvciByZWNvdmVyX3RpbWUgc2Vjb25kcyB1 bmxlc3MgdGhlcmUgaXMgb25seSBvbmUgYWN0aXZlCj4gcGF0aC4KPiAKPiBJZiByZWNvdmVyX3Rp bWUgZXhwaXJlcywgd2Ugd2lsbCByZXNjaGVkdWxlIHRoaXMgSU8gZXJyb3IgY2hlY2tpbmcKPiBw cm9jZXNzLiBJZiB0aGUgcGF0aCBpcyBnb29kIGVub3VnaCwgd2Ugd2lsbCBjbGFpbSBpdCBnb29k Lgo+IAo+IFRoaXMgaGVscHMgdXMgcGxhY2UgdGhlIHBhdGggaW4gZGVsYXllZCBzdGF0ZSBpZiB3 ZSBoaXQgYSBsb3Qgb2YKPiBpbnRlcm1pdHRlbnQgSU8gZXJyb3JzIG9uIGEgcGFydGljdWxhciBw YXRoIGR1ZSB0byBuZXR3b3JrL3RhcmdldAo+IGlzc3VlcyBhbmQgaXNvbGF0ZSBzdWNoIGRlZ3Jh ZGVkIHBhdGggYW5kIGFsbG93IHRoZSBhZG1pbiB0byByZWN0aWZ5Cj4gdGhlIGVycm9ycyBvbiBh IHBhdGguCj4gCj4gU2lnbmVkLW9mZi1ieTogSnVueGlvbmcgR3VhbiA8Z3Vhbmp1bnhpb25nQGh1 YXdlaS5jb20+Cj4gLS0tCj4gCj4gQ2hhbmdlcyBmcm9tIFYyOgo+ICogZml4IHVuY29uZGlzdGlv bmFsIHJlc2NlZHVsZSBmb3J2ZXJ2ZXIKPiAqIHVzZSBzY3JpcHQvY2hlY2twYXRjaC5wbCBpbiBM aW51eCB0byBjbGVhbnVwIGluZm9ybWFsIGNvZGluZyBzdHlsZQo+ICogZml4ICJjb250aW5vdXMi IGFuZCAiaW50ZXJuZWwiIHR5cG9zCj4gCj4gQ2hhbmdlcyBmcm9tIFYxOgo+ICogc2VuZCBjb250 aW5vdXMgSU8gaW5zdGVhZCBvZiBhIHNpbmdsZSBJTyBpbiBhIHNhbXBsZSBpbnRlcnZhbAo+IChN YXJ0aW4pCj4gKiB3aGVuIHJlY292ZXIgdGltZSBleHBpcmVzLCB3ZSByZXNjaGVkdWxlIHRoZSBj aGVja2luZyBwcm9jZXNzCj4gKEhhbm5lcykKPiAqIFVzZSB0aGUgZXJyb3IgcmF0ZSB0aHJlc2hv bGQgYXMgYSBwZXJtaWxsYWdlIGluc3RlYWQgb2YgSU8KPiBudW1iZXIoTWFydGluKQo+ICogVXNl IGEgY29tbW9uIGlvX2NvbnRleHQgZm9yIGxpYmFpbyBmb3IgYWxsIHBhdGhzIChNYXJ0aW4pCj4g KiBPdGhlciBzbWFsbCBmaXhlcyAoTWFydGluKQo+IAo+IAo+ICBsaWJtdWx0aXBhdGgvTWFrZWZp bGUgICAgICB8ICAgNSArLQo+ICBsaWJtdWx0aXBhdGgvY29uZmlnLmggICAgICB8ICAgOSArCj4g IGxpYm11bHRpcGF0aC9jb25maWd1cmUuYyAgIHwgICAzICsKPiAgbGlibXVsdGlwYXRoL2RpY3Qu YyAgICAgICAgfCAgNDEgKysrCj4gIGxpYm11bHRpcGF0aC9pb19lcnJfc3RhdC5jIHwgNzE3Cj4g KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGxpYm11bHRp cGF0aC9pb19lcnJfc3RhdC5oIHwgIDE1ICsKPiAgbGlibXVsdGlwYXRoL3Byb3BzZWwuYyAgICAg fCAgNTMgKysrKwo+ICBsaWJtdWx0aXBhdGgvcHJvcHNlbC5oICAgICB8ICAgMyArCj4gIGxpYm11 bHRpcGF0aC9zdHJ1Y3RzLmggICAgIHwgICA3ICsKPiAgbGlibXVsdGlwYXRoL3VldmVudC5jICAg ICAgfCAgMzYgKystCj4gIGxpYm11bHRpcGF0aC91ZXZlbnQuaCAgICAgIHwgICAyICsKPiAgbXVs dGlwYXRoL211bHRpcGF0aC5jb25mLjUgfCAgNDMgKysrCj4gIG11bHRpcGF0aGQvbWFpbi5jICAg ICAgICAgIHwgIDU2ICsrKysKPiAgMTMgZmlsZXMgY2hhbmdlZCwgOTg2IGluc2VydGlvbnMoKyks IDQgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJtdWx0aXBhdGgvaW9fZXJy X3N0YXQuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGlibXVsdGlwYXRoL2lvX2Vycl9zdGF0LmgK PiAKPiBkaWZmIC0tZ2l0IGEvbGlibXVsdGlwYXRoL01ha2VmaWxlIGIvbGlibXVsdGlwYXRoL01h a2VmaWxlCj4gaW5kZXggYjMyNDRmYzcuLmRjZTczYWZlIDEwMDY0NAo+IC0tLSBhL2xpYm11bHRp cGF0aC9NYWtlZmlsZQo+ICsrKyBiL2xpYm11bHRpcGF0aC9NYWtlZmlsZQo+IEBAIC05LDcgKzks NyBAQCBMSUJTID0gJChERVZMSUIpLiQoU09OQU1FKQo+ICAKPiAgQ0ZMQUdTICs9ICQoTElCX0NG TEFHUykgLUkkKG1wYXRoY21kZGlyKQo+ICAKPiAtTElCREVQUyArPSAtbHB0aHJlYWQgLWxkbCAt bGRldm1hcHBlciAtbHVkZXYgLUwkKG1wYXRoY21kZGlyKQo+IC1sbXBhdGhjbWQgLWx1cmN1Cj4g K0xJQkRFUFMgKz0gLWxwdGhyZWFkIC1sZGwgLWxkZXZtYXBwZXIgLWx1ZGV2IC1MJChtcGF0aGNt ZGRpcikKPiAtbG1wYXRoY21kIC1sdXJjdSAtbGFpbwo+ICAKPiAgaWZkZWYgU1lTVEVNRAo+ICAJ Q0ZMQUdTICs9IC1EVVNFX1NZU1RFTUQ9JChTWVNURU1EKQo+IEBAIC00Miw3ICs0Miw4IEBAIE9C SlMgPSBtZW1vcnkubyBwYXJzZXIubyB2ZWN0b3IubyBkZXZtYXBwZXIubwo+IGNhbGxvdXQubyBc Cj4gIAlwZ3BvbGljaWVzLm8gZGVidWcubyBkZWZhdWx0cy5vIHVldmVudC5vIHRpbWUtdXRpbC5v IFwKPiAgCXN3aXRjaGdyb3VwLm8gdXhzb2NrLm8gcHJpbnQubyBhbGlhcy5vIGxvZ19wdGhyZWFk Lm8gXAo+ICAJbG9nLm8gY29uZmlndXJlLm8gc3RydWN0c192ZWMubyBzeXNmcy5vIHByaW8ubyBj aGVja2Vycy5vIFwKPiAtCWxvY2subyB3YWl0ZXIubyBmaWxlLm8gd3dpZHMubyBwcmlvcml0aXpl cnMvYWx1YV9ydHBnLm8KPiArCWxvY2subyB3YWl0ZXIubyBmaWxlLm8gd3dpZHMubyBwcmlvcml0 aXplcnMvYWx1YV9ydHBnLm8gXAo+ICsJaW9fZXJyX3N0YXQubwo+ICAKPiAgYWxsOiAkKExJQlMp Cj4gIAo+IGRpZmYgLS1naXQgYS9saWJtdWx0aXBhdGgvY29uZmlnLmggYi9saWJtdWx0aXBhdGgv Y29uZmlnLmgKPiBpbmRleCBmZmM2OWI1Zi4uMjE1ZDI5ZTkgMTAwNjQ0Cj4gLS0tIGEvbGlibXVs dGlwYXRoL2NvbmZpZy5oCj4gKysrIGIvbGlibXVsdGlwYXRoL2NvbmZpZy5oCj4gQEAgLTc1LDYg Kzc1LDkgQEAgc3RydWN0IGh3ZW50cnkgewo+ICAJaW50IHNhbl9wYXRoX2Vycl90aHJlc2hvbGQ7 Cj4gIAlpbnQgc2FuX3BhdGhfZXJyX2ZvcmdldF9yYXRlOwo+ICAJaW50IHNhbl9wYXRoX2Vycl9y ZWNvdmVyeV90aW1lOwo+ICsJaW50IHBhdGhfaW9fZXJyX3NhbXBsZV90aW1lOwo+ICsJaW50IHBh dGhfaW9fZXJyX3JhdGVfdGhyZXNob2xkOwo+ICsJaW50IHBhdGhfaW9fZXJyX3JlY292ZXJ5X3Rp bWU7Cj4gIAlpbnQgc2tpcF9rcGFydHg7Cj4gIAlpbnQgbWF4X3NlY3RvcnNfa2I7Cj4gIAljaGFy ICogYmxfcHJvZHVjdDsKPiBAQCAtMTA2LDYgKzEwOSw5IEBAIHN0cnVjdCBtcGVudHJ5IHsKPiAg CWludCBzYW5fcGF0aF9lcnJfdGhyZXNob2xkOwo+ICAJaW50IHNhbl9wYXRoX2Vycl9mb3JnZXRf cmF0ZTsKPiAgCWludCBzYW5fcGF0aF9lcnJfcmVjb3ZlcnlfdGltZTsKPiArCWludCBwYXRoX2lv X2Vycl9zYW1wbGVfdGltZTsKPiArCWludCBwYXRoX2lvX2Vycl9yYXRlX3RocmVzaG9sZDsKPiAr CWludCBwYXRoX2lvX2Vycl9yZWNvdmVyeV90aW1lOwo+ICAJaW50IHNraXBfa3BhcnR4Owo+ICAJ aW50IG1heF9zZWN0b3JzX2tiOwo+ICAJdWlkX3QgdWlkOwo+IEBAIC0xNTUsNiArMTYxLDkgQEAg c3RydWN0IGNvbmZpZyB7Cj4gIAlpbnQgc2FuX3BhdGhfZXJyX3RocmVzaG9sZDsKPiAgCWludCBz YW5fcGF0aF9lcnJfZm9yZ2V0X3JhdGU7Cj4gIAlpbnQgc2FuX3BhdGhfZXJyX3JlY292ZXJ5X3Rp bWU7Cj4gKwlpbnQgcGF0aF9pb19lcnJfc2FtcGxlX3RpbWU7Cj4gKwlpbnQgcGF0aF9pb19lcnJf cmF0ZV90aHJlc2hvbGQ7Cj4gKwlpbnQgcGF0aF9pb19lcnJfcmVjb3ZlcnlfdGltZTsKPiAgCWlu dCB1eHNvY2tfdGltZW91dDsKPiAgCWludCBzdHJpY3RfdGltaW5nOwo+ICAJaW50IHJldHJpZ2dl cl90cmllczsKPiBkaWZmIC0tZ2l0IGEvbGlibXVsdGlwYXRoL2NvbmZpZ3VyZS5jIGIvbGlibXVs dGlwYXRoL2NvbmZpZ3VyZS5jCj4gaW5kZXggNzRiNmY1MmEuLjgxZGM5N2Q5IDEwMDY0NAo+IC0t LSBhL2xpYm11bHRpcGF0aC9jb25maWd1cmUuYwo+ICsrKyBiL2xpYm11bHRpcGF0aC9jb25maWd1 cmUuYwo+IEBAIC0yOTgsNiArMjk4LDkgQEAgaW50IHNldHVwX21hcChzdHJ1Y3QgbXVsdGlwYXRo ICptcHAsIGNoYXIKPiAqcGFyYW1zLCBpbnQgcGFyYW1zX3NpemUpCj4gIAlzZWxlY3Rfc2FuX3Bh dGhfZXJyX3RocmVzaG9sZChjb25mLCBtcHApOwo+ICAJc2VsZWN0X3Nhbl9wYXRoX2Vycl9mb3Jn ZXRfcmF0ZShjb25mLCBtcHApOwo+ICAJc2VsZWN0X3Nhbl9wYXRoX2Vycl9yZWNvdmVyeV90aW1l KGNvbmYsIG1wcCk7Cj4gKwlzZWxlY3RfcGF0aF9pb19lcnJfc2FtcGxlX3RpbWUoY29uZiwgbXBw KTsKPiArCXNlbGVjdF9wYXRoX2lvX2Vycl9yYXRlX3RocmVzaG9sZChjb25mLCBtcHApOwo+ICsJ c2VsZWN0X3BhdGhfaW9fZXJyX3JlY292ZXJ5X3RpbWUoY29uZiwgbXBwKTsKPiAgCXNlbGVjdF9z a2lwX2twYXJ0eChjb25mLCBtcHApOwo+ICAJc2VsZWN0X21heF9zZWN0b3JzX2tiKGNvbmYsIG1w cCk7Cj4gIAo+IGRpZmYgLS1naXQgYS9saWJtdWx0aXBhdGgvZGljdC5jIGIvbGlibXVsdGlwYXRo L2RpY3QuYwo+IGluZGV4IDlkYzEwOTA0Li4xOGIxZmRiMSAxMDA2NDQKPiAtLS0gYS9saWJtdWx0 aXBhdGgvZGljdC5jCj4gKysrIGIvbGlibXVsdGlwYXRoL2RpY3QuYwo+IEBAIC0xMTA4LDYgKzEx MDgsMzUgQEAgZGVjbGFyZV9od19oYW5kbGVyKHNhbl9wYXRoX2Vycl9yZWNvdmVyeV90aW1lLAo+ IHNldF9vZmZfaW50X3VuZGVmKQo+ICBkZWNsYXJlX2h3X3NucHJpbnQoc2FuX3BhdGhfZXJyX3Jl Y292ZXJ5X3RpbWUsIHByaW50X29mZl9pbnRfdW5kZWYpCj4gIGRlY2xhcmVfbXBfaGFuZGxlcihz YW5fcGF0aF9lcnJfcmVjb3ZlcnlfdGltZSwgc2V0X29mZl9pbnRfdW5kZWYpCj4gIGRlY2xhcmVf bXBfc25wcmludChzYW5fcGF0aF9lcnJfcmVjb3ZlcnlfdGltZSwgcHJpbnRfb2ZmX2ludF91bmRl ZikKPiArZGVjbGFyZV9kZWZfaGFuZGxlcihwYXRoX2lvX2Vycl9zYW1wbGVfdGltZSwgc2V0X29m Zl9pbnRfdW5kZWYpCj4gK2RlY2xhcmVfZGVmX3NucHJpbnRfZGVmaW50KHBhdGhfaW9fZXJyX3Nh bXBsZV90aW1lLAo+IHByaW50X29mZl9pbnRfdW5kZWYsCj4gKwkJCSAgIERFRkFVTFRfRVJSX0NI RUNLUykKPiArZGVjbGFyZV9vdnJfaGFuZGxlcihwYXRoX2lvX2Vycl9zYW1wbGVfdGltZSwgc2V0 X29mZl9pbnRfdW5kZWYpCj4gK2RlY2xhcmVfb3ZyX3NucHJpbnQocGF0aF9pb19lcnJfc2FtcGxl X3RpbWUsIHByaW50X29mZl9pbnRfdW5kZWYpCj4gK2RlY2xhcmVfaHdfaGFuZGxlcihwYXRoX2lv X2Vycl9zYW1wbGVfdGltZSwgc2V0X29mZl9pbnRfdW5kZWYpCj4gK2RlY2xhcmVfaHdfc25wcmlu dChwYXRoX2lvX2Vycl9zYW1wbGVfdGltZSwgcHJpbnRfb2ZmX2ludF91bmRlZikKPiArZGVjbGFy ZV9tcF9oYW5kbGVyKHBhdGhfaW9fZXJyX3NhbXBsZV90aW1lLCBzZXRfb2ZmX2ludF91bmRlZikK PiArZGVjbGFyZV9tcF9zbnByaW50KHBhdGhfaW9fZXJyX3NhbXBsZV90aW1lLCBwcmludF9vZmZf aW50X3VuZGVmKQo+ICtkZWNsYXJlX2RlZl9oYW5kbGVyKHBhdGhfaW9fZXJyX3JhdGVfdGhyZXNo b2xkLCBzZXRfb2ZmX2ludF91bmRlZikKPiArZGVjbGFyZV9kZWZfc25wcmludF9kZWZpbnQocGF0 aF9pb19lcnJfcmF0ZV90aHJlc2hvbGQsCj4gcHJpbnRfb2ZmX2ludF91bmRlZiwKPiArCQkJICAg REVGQVVMVF9FUlJfQ0hFQ0tTKQo+ICtkZWNsYXJlX292cl9oYW5kbGVyKHBhdGhfaW9fZXJyX3Jh dGVfdGhyZXNob2xkLCBzZXRfb2ZmX2ludF91bmRlZikKPiArZGVjbGFyZV9vdnJfc25wcmludChw YXRoX2lvX2Vycl9yYXRlX3RocmVzaG9sZCwgcHJpbnRfb2ZmX2ludF91bmRlZikKPiArZGVjbGFy ZV9od19oYW5kbGVyKHBhdGhfaW9fZXJyX3JhdGVfdGhyZXNob2xkLCBzZXRfb2ZmX2ludF91bmRl ZikKPiArZGVjbGFyZV9od19zbnByaW50KHBhdGhfaW9fZXJyX3JhdGVfdGhyZXNob2xkLCBwcmlu dF9vZmZfaW50X3VuZGVmKQo+ICtkZWNsYXJlX21wX2hhbmRsZXIocGF0aF9pb19lcnJfcmF0ZV90 aHJlc2hvbGQsIHNldF9vZmZfaW50X3VuZGVmKQo+ICtkZWNsYXJlX21wX3NucHJpbnQocGF0aF9p b19lcnJfcmF0ZV90aHJlc2hvbGQsIHByaW50X29mZl9pbnRfdW5kZWYpCj4gK2RlY2xhcmVfZGVm X2hhbmRsZXIocGF0aF9pb19lcnJfcmVjb3ZlcnlfdGltZSwgc2V0X29mZl9pbnRfdW5kZWYpCj4g K2RlY2xhcmVfZGVmX3NucHJpbnRfZGVmaW50KHBhdGhfaW9fZXJyX3JlY292ZXJ5X3RpbWUsCj4g cHJpbnRfb2ZmX2ludF91bmRlZiwKPiArCQkJICAgREVGQVVMVF9FUlJfQ0hFQ0tTKQo+ICtkZWNs YXJlX292cl9oYW5kbGVyKHBhdGhfaW9fZXJyX3JlY292ZXJ5X3RpbWUsIHNldF9vZmZfaW50X3Vu ZGVmKQo+ICtkZWNsYXJlX292cl9zbnByaW50KHBhdGhfaW9fZXJyX3JlY292ZXJ5X3RpbWUsIHBy aW50X29mZl9pbnRfdW5kZWYpCj4gK2RlY2xhcmVfaHdfaGFuZGxlcihwYXRoX2lvX2Vycl9yZWNv dmVyeV90aW1lLCBzZXRfb2ZmX2ludF91bmRlZikKPiArZGVjbGFyZV9od19zbnByaW50KHBhdGhf aW9fZXJyX3JlY292ZXJ5X3RpbWUsIHByaW50X29mZl9pbnRfdW5kZWYpCj4gK2RlY2xhcmVfbXBf aGFuZGxlcihwYXRoX2lvX2Vycl9yZWNvdmVyeV90aW1lLCBzZXRfb2ZmX2ludF91bmRlZikKPiAr ZGVjbGFyZV9tcF9zbnByaW50KHBhdGhfaW9fZXJyX3JlY292ZXJ5X3RpbWUsIHByaW50X29mZl9p bnRfdW5kZWYpCj4gKwo+ICsKPiAgc3RhdGljIGludAo+ICBkZWZfdXhzb2NrX3RpbWVvdXRfaGFu ZGxlcihzdHJ1Y3QgY29uZmlnICpjb25mLCB2ZWN0b3Igc3RydmVjKQo+ICB7Cj4gQEAgLTE0NDMs NiArMTQ3Miw5IEBAIGluaXRfa2V5d29yZHModmVjdG9yIGtleXdvcmRzKQo+ICAJaW5zdGFsbF9r ZXl3b3JkKCJzYW5fcGF0aF9lcnJfdGhyZXNob2xkIiwKPiAmZGVmX3Nhbl9wYXRoX2Vycl90aHJl c2hvbGRfaGFuZGxlciwKPiAmc25wcmludF9kZWZfc2FuX3BhdGhfZXJyX3RocmVzaG9sZCk7Cj4g IAlpbnN0YWxsX2tleXdvcmQoInNhbl9wYXRoX2Vycl9mb3JnZXRfcmF0ZSIsCj4gJmRlZl9zYW5f cGF0aF9lcnJfZm9yZ2V0X3JhdGVfaGFuZGxlciwKPiAmc25wcmludF9kZWZfc2FuX3BhdGhfZXJy X2ZvcmdldF9yYXRlKTsKPiAgCWluc3RhbGxfa2V5d29yZCgic2FuX3BhdGhfZXJyX3JlY292ZXJ5 X3RpbWUiLAo+ICZkZWZfc2FuX3BhdGhfZXJyX3JlY292ZXJ5X3RpbWVfaGFuZGxlciwKPiAmc25w cmludF9kZWZfc2FuX3BhdGhfZXJyX3JlY292ZXJ5X3RpbWUpOwo+ICsJaW5zdGFsbF9rZXl3b3Jk KCJwYXRoX2lvX2Vycl9zYW1wbGVfdGltZSIsCj4gJmRlZl9wYXRoX2lvX2Vycl9zYW1wbGVfdGlt ZV9oYW5kbGVyLAo+ICZzbnByaW50X2RlZl9wYXRoX2lvX2Vycl9zYW1wbGVfdGltZSk7Cj4gKwlp bnN0YWxsX2tleXdvcmQoInBhdGhfaW9fZXJyX3JhdGVfdGhyZXNob2xkIiwKPiAmZGVmX3BhdGhf aW9fZXJyX3JhdGVfdGhyZXNob2xkX2hhbmRsZXIsCj4gJnNucHJpbnRfZGVmX3BhdGhfaW9fZXJy X3JhdGVfdGhyZXNob2xkKTsKPiArCWluc3RhbGxfa2V5d29yZCgicGF0aF9pb19lcnJfcmVjb3Zl cnlfdGltZSIsCj4gJmRlZl9wYXRoX2lvX2Vycl9yZWNvdmVyeV90aW1lX2hhbmRsZXIsCj4gJnNu cHJpbnRfZGVmX3BhdGhfaW9fZXJyX3JlY292ZXJ5X3RpbWUpOwo+ICAKPiAgCWluc3RhbGxfa2V5 d29yZCgiZmluZF9tdWx0aXBhdGhzIiwKPiAmZGVmX2ZpbmRfbXVsdGlwYXRoc19oYW5kbGVyLCAm c25wcmludF9kZWZfZmluZF9tdWx0aXBhdGhzKTsKPiAgCWluc3RhbGxfa2V5d29yZCgidXhzb2Nr X3RpbWVvdXQiLAo+ICZkZWZfdXhzb2NrX3RpbWVvdXRfaGFuZGxlciwgJnNucHJpbnRfZGVmX3V4 c29ja190aW1lb3V0KTsKPiBAQCAtMTUzMCw2ICsxNTYyLDkgQEAgaW5pdF9rZXl3b3Jkcyh2ZWN0 b3Iga2V5d29yZHMpCj4gIAlpbnN0YWxsX2tleXdvcmQoInNhbl9wYXRoX2Vycl90aHJlc2hvbGQi LAo+ICZod19zYW5fcGF0aF9lcnJfdGhyZXNob2xkX2hhbmRsZXIsCj4gJnNucHJpbnRfaHdfc2Fu X3BhdGhfZXJyX3RocmVzaG9sZCk7Cj4gIAlpbnN0YWxsX2tleXdvcmQoInNhbl9wYXRoX2Vycl9m b3JnZXRfcmF0ZSIsCj4gJmh3X3Nhbl9wYXRoX2Vycl9mb3JnZXRfcmF0ZV9oYW5kbGVyLAo+ICZz bnByaW50X2h3X3Nhbl9wYXRoX2Vycl9mb3JnZXRfcmF0ZSk7Cj4gIAlpbnN0YWxsX2tleXdvcmQo InNhbl9wYXRoX2Vycl9yZWNvdmVyeV90aW1lIiwKPiAmaHdfc2FuX3BhdGhfZXJyX3JlY292ZXJ5 X3RpbWVfaGFuZGxlciwKPiAmc25wcmludF9od19zYW5fcGF0aF9lcnJfcmVjb3ZlcnlfdGltZSk7 Cj4gKwlpbnN0YWxsX2tleXdvcmQoInBhdGhfaW9fZXJyX3NhbXBsZV90aW1lIiwKPiAmaHdfcGF0 aF9pb19lcnJfc2FtcGxlX3RpbWVfaGFuZGxlciwKPiAmc25wcmludF9od19wYXRoX2lvX2Vycl9z YW1wbGVfdGltZSk7Cj4gKwlpbnN0YWxsX2tleXdvcmQoInBhdGhfaW9fZXJyX3JhdGVfdGhyZXNo b2xkIiwKPiAmaHdfcGF0aF9pb19lcnJfcmF0ZV90aHJlc2hvbGRfaGFuZGxlciwKPiAmc25wcmlu dF9od19wYXRoX2lvX2Vycl9yYXRlX3RocmVzaG9sZCk7Cj4gKwlpbnN0YWxsX2tleXdvcmQoInBh dGhfaW9fZXJyX3JlY292ZXJ5X3RpbWUiLAo+ICZod19wYXRoX2lvX2Vycl9yZWNvdmVyeV90aW1l X2hhbmRsZXIsCj4gJnNucHJpbnRfaHdfcGF0aF9pb19lcnJfcmVjb3ZlcnlfdGltZSk7Cj4gIAlp bnN0YWxsX2tleXdvcmQoInNraXBfa3BhcnR4IiwgJmh3X3NraXBfa3BhcnR4X2hhbmRsZXIsCj4g JnNucHJpbnRfaHdfc2tpcF9rcGFydHgpOwo+ICAJaW5zdGFsbF9rZXl3b3JkKCJtYXhfc2VjdG9y c19rYiIsCj4gJmh3X21heF9zZWN0b3JzX2tiX2hhbmRsZXIsICZzbnByaW50X2h3X21heF9zZWN0 b3JzX2tiKTsKPiAgCWluc3RhbGxfc3VibGV2ZWxfZW5kKCk7Cj4gQEAgLTE1NjMsNiArMTU5OCw5 IEBAIGluaXRfa2V5d29yZHModmVjdG9yIGtleXdvcmRzKQo+ICAJaW5zdGFsbF9rZXl3b3JkKCJz YW5fcGF0aF9lcnJfdGhyZXNob2xkIiwKPiAmb3ZyX3Nhbl9wYXRoX2Vycl90aHJlc2hvbGRfaGFu ZGxlciwKPiAmc25wcmludF9vdnJfc2FuX3BhdGhfZXJyX3RocmVzaG9sZCk7Cj4gIAlpbnN0YWxs X2tleXdvcmQoInNhbl9wYXRoX2Vycl9mb3JnZXRfcmF0ZSIsCj4gJm92cl9zYW5fcGF0aF9lcnJf Zm9yZ2V0X3JhdGVfaGFuZGxlciwKPiAmc25wcmludF9vdnJfc2FuX3BhdGhfZXJyX2ZvcmdldF9y YXRlKTsKPiAgCWluc3RhbGxfa2V5d29yZCgic2FuX3BhdGhfZXJyX3JlY292ZXJ5X3RpbWUiLAo+ ICZvdnJfc2FuX3BhdGhfZXJyX3JlY292ZXJ5X3RpbWVfaGFuZGxlciwKPiAmc25wcmludF9vdnJf c2FuX3BhdGhfZXJyX3JlY292ZXJ5X3RpbWUpOwo+ICsJaW5zdGFsbF9rZXl3b3JkKCJwYXRoX2lv X2Vycl9zYW1wbGVfdGltZSIsCj4gJm92cl9wYXRoX2lvX2Vycl9zYW1wbGVfdGltZV9oYW5kbGVy LAo+ICZzbnByaW50X292cl9wYXRoX2lvX2Vycl9zYW1wbGVfdGltZSk7Cj4gKwlpbnN0YWxsX2tl eXdvcmQoInBhdGhfaW9fZXJyX3JhdGVfdGhyZXNob2xkIiwKPiAmb3ZyX3BhdGhfaW9fZXJyX3Jh dGVfdGhyZXNob2xkX2hhbmRsZXIsCj4gJnNucHJpbnRfb3ZyX3BhdGhfaW9fZXJyX3JhdGVfdGhy ZXNob2xkKTsKPiArCWluc3RhbGxfa2V5d29yZCgicGF0aF9pb19lcnJfcmVjb3ZlcnlfdGltZSIs Cj4gJm92cl9wYXRoX2lvX2Vycl9yZWNvdmVyeV90aW1lX2hhbmRsZXIsCj4gJnNucHJpbnRfb3Zy X3BhdGhfaW9fZXJyX3JlY292ZXJ5X3RpbWUpOwo+ICAKPiAgCWluc3RhbGxfa2V5d29yZCgic2tp cF9rcGFydHgiLCAmb3ZyX3NraXBfa3BhcnR4X2hhbmRsZXIsCj4gJnNucHJpbnRfb3ZyX3NraXBf a3BhcnR4KTsKPiAgCWluc3RhbGxfa2V5d29yZCgibWF4X3NlY3RvcnNfa2IiLAo+ICZvdnJfbWF4 X3NlY3RvcnNfa2JfaGFuZGxlciwgJnNucHJpbnRfb3ZyX21heF9zZWN0b3JzX2tiKTsKPiBAQCAt MTU5NSw2ICsxNjMzLDkgQEAgaW5pdF9rZXl3b3Jkcyh2ZWN0b3Iga2V5d29yZHMpCj4gIAlpbnN0 YWxsX2tleXdvcmQoInNhbl9wYXRoX2Vycl90aHJlc2hvbGQiLAo+ICZtcF9zYW5fcGF0aF9lcnJf dGhyZXNob2xkX2hhbmRsZXIsCj4gJnNucHJpbnRfbXBfc2FuX3BhdGhfZXJyX3RocmVzaG9sZCk7 Cj4gIAlpbnN0YWxsX2tleXdvcmQoInNhbl9wYXRoX2Vycl9mb3JnZXRfcmF0ZSIsCj4gJm1wX3Nh bl9wYXRoX2Vycl9mb3JnZXRfcmF0ZV9oYW5kbGVyLAo+ICZzbnByaW50X21wX3Nhbl9wYXRoX2Vy cl9mb3JnZXRfcmF0ZSk7Cj4gIAlpbnN0YWxsX2tleXdvcmQoInNhbl9wYXRoX2Vycl9yZWNvdmVy eV90aW1lIiwKPiAmbXBfc2FuX3BhdGhfZXJyX3JlY292ZXJ5X3RpbWVfaGFuZGxlciwKPiAmc25w cmludF9tcF9zYW5fcGF0aF9lcnJfcmVjb3ZlcnlfdGltZSk7Cj4gKwlpbnN0YWxsX2tleXdvcmQo InBhdGhfaW9fZXJyX3NhbXBsZV90aW1lIiwKPiAmbXBfcGF0aF9pb19lcnJfc2FtcGxlX3RpbWVf aGFuZGxlciwKPiAmc25wcmludF9tcF9wYXRoX2lvX2Vycl9zYW1wbGVfdGltZSk7Cj4gKwlpbnN0 YWxsX2tleXdvcmQoInBhdGhfaW9fZXJyX3JhdGVfdGhyZXNob2xkIiwKPiAmbXBfcGF0aF9pb19l cnJfcmF0ZV90aHJlc2hvbGRfaGFuZGxlciwKPiAmc25wcmludF9tcF9wYXRoX2lvX2Vycl9yYXRl X3RocmVzaG9sZCk7Cj4gKwlpbnN0YWxsX2tleXdvcmQoInBhdGhfaW9fZXJyX3JlY292ZXJ5X3Rp bWUiLAo+ICZtcF9wYXRoX2lvX2Vycl9yZWNvdmVyeV90aW1lX2hhbmRsZXIsCj4gJnNucHJpbnRf bXBfcGF0aF9pb19lcnJfcmVjb3ZlcnlfdGltZSk7Cj4gIAlpbnN0YWxsX2tleXdvcmQoInNraXBf a3BhcnR4IiwgJm1wX3NraXBfa3BhcnR4X2hhbmRsZXIsCj4gJnNucHJpbnRfbXBfc2tpcF9rcGFy dHgpOwo+ICAJaW5zdGFsbF9rZXl3b3JkKCJtYXhfc2VjdG9yc19rYiIsCj4gJm1wX21heF9zZWN0 b3JzX2tiX2hhbmRsZXIsICZzbnByaW50X21wX21heF9zZWN0b3JzX2tiKTsKPiAgCWluc3RhbGxf c3VibGV2ZWxfZW5kKCk7Cj4gZGlmZiAtLWdpdCBhL2xpYm11bHRpcGF0aC9pb19lcnJfc3RhdC5j IGIvbGlibXVsdGlwYXRoL2lvX2Vycl9zdGF0LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwLi41YjQxY2IzNQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJtdWx0aXBh dGgvaW9fZXJyX3N0YXQuYwo+IEBAIC0wLDAgKzEsNzE3IEBACj4gKy8qCj4gKyAqIChDKSBDb3B5 cmlnaHQgSFVBV0VJIFRlY2hub2xvZ3kgQ29ycC4gMjAxNywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4K PiArICoKPiArICogaW9fZXJyX3N0YXQuYwo+ICsgKiB2ZXJzaW9uIDEuMAo+ICsgKgo+ICsgKiBJ TyBlcnJvciBzdHJlYW0gc3RhdGlzdGljIHByb2Nlc3MgZm9yIHBhdGggZmFpbHVyZSBldmVudCBm cm9tCj4ga2VybmVsCj4gKyAqCj4gKyAqIEF1dGhvcihzKTogR3VhbiBKdW54aW9uZyAyMDE3IDxn dWFuanVueGlvbmdAaHVhd2VpLmNvbT4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHJlbGVhc2Vk IHVuZGVyIHRoZSBHUEwgdmVyc2lvbiAyLCBvciBhbnkgbGF0ZXIKPiB2ZXJzaW9uLgo+ICsgKi8K PiArCj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiArI2luY2x1ZGUgPHB0aHJlYWQuaD4KPiArI2lu Y2x1ZGUgPHNpZ25hbC5oPgo+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiArI2luY2x1ZGUgPHN5cy9z dGF0Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2ZzLmg+ Cj4gKyNpbmNsdWRlIDxsaWJhaW8uaD4KPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4gKyNpbmNsdWRl IDxzeXMvbW1hbi5oPgo+ICsKPiArI2luY2x1ZGUgInZlY3Rvci5oIgo+ICsjaW5jbHVkZSAibWVt b3J5LmgiCj4gKyNpbmNsdWRlICJjaGVja2Vycy5oIgo+ICsjaW5jbHVkZSAiY29uZmlnLmgiCj4g KyNpbmNsdWRlICJzdHJ1Y3RzLmgiCj4gKyNpbmNsdWRlICJzdHJ1Y3RzX3ZlYy5oIgo+ICsjaW5j bHVkZSAiZGV2bWFwcGVyLmgiCj4gKyNpbmNsdWRlICJkZWJ1Zy5oIgo+ICsjaW5jbHVkZSAibG9j ay5oIgo+ICsjaW5jbHVkZSAidGltZS11dGlsLmgiCj4gKyNpbmNsdWRlICJpb19lcnJfc3RhdC5o Igo+ICsKPiArI2RlZmluZSBJT1RJTUVPVVRfU0VDCQkJNjAKPiArI2RlZmluZSBGTEFLWV9QQVRI RkFJTF9USFJFU0hPTEQJMgo+ICsjZGVmaW5lIEZMQUtZX1BBVEhGQUlMX1RJTUVfRlJBTUUJNjAK PiArI2RlZmluZSBDT05DVVJfTlJfRVZFTlQJCQkzMgo+ICsKPiArI2RlZmluZSBpb19lcnJfc3Rh dF9sb2cocHJpbywgZm10LCBhcmdzLi4uKSBcCj4gKwljb25kbG9nKHByaW8sICJpbyBlcnJvciBz dGF0aXN0aWM6ICIgZm10LCAjI2FyZ3MpCj4gKwo+ICsKPiArc3RydWN0IGlvX2Vycl9zdGF0X3Bh dGh2ZWMgewo+ICsJcHRocmVhZF9tdXRleF90IG11dGV4Owo+ICsJdmVjdG9yCQlwYXRodmVjOwo+ ICt9Owo+ICsKPiArc3RydWN0IGRpb19jdHggewo+ICsJc3RydWN0IHRpbWVzcGVjCWlvX3N0YXJ0 dGltZTsKPiArCWludAkJYmxrc2l6ZTsKPiArCXVuc2lnbmVkIGNoYXIJKmJ1ZjsKPiArCXVuc2ln bmVkIGNoYXIJKnB0cjsKPiArCXN0cnVjdCBpb2NiCWlvOwo+ICt9Owo+ICsKPiArc3RydWN0IGlv X2Vycl9zdGF0X3BhdGggewo+ICsJY2hhcgkJZGV2bmFtZVtGSUxFX05BTUVfU0laRV07Cj4gKwlp bnQJCWZkOwo+ICsJc3RydWN0IGRpb19jdHgJKipkaW9fY3R4X2FycmF5Owo+ICsJaW50CQlpb19l cnJfbnI7Cj4gKwlpbnQJCWlvX25yOwo+ICsJc3RydWN0IHRpbWVzcGVjCXN0YXJ0X3RpbWU7Cj4g Kwo+ICsJaW50CQl0b3RhbF90aW1lOwo+ICsJaW50CQllcnJfcmF0ZV90aHJlc2hvbGQ7Cj4gK307 Cj4gKwo+ICtwdGhyZWFkX3QJCWlvX2Vycl9zdGF0X3RocjsKPiArcHRocmVhZF9hdHRyX3QJCWlv X2Vycl9zdGF0X2F0dHI7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGlvX2Vycl9zdGF0X3BhdGh2ZWMg KnBhdGhzOwo+ICtzdHJ1Y3QgdmVjdG9ycyAqdmVjczsKPiAraW9fY29udGV4dF90CWlvY3R4Owo+ ICsKPiArc3RhdGljIHZvaWQgY2FuY2VsX2luZmxpZ2h0X2lvKHN0cnVjdCBpb19lcnJfc3RhdF9w YXRoICpwcCk7Cj4gKwo+ICtzdGF0aWMgdm9pZCByY3VfdW5yZWdpc3Rlcih2b2lkICpwYXJhbSkK PiArewo+ICsJcmN1X3VucmVnaXN0ZXJfdGhyZWFkKCk7Cj4gK30KPiArCj4gK3N0cnVjdCBpb19l cnJfc3RhdF9wYXRoICpmaW5kX2Vycl9wYXRoX2J5X2Rldih2ZWN0b3IgcGF0aHZlYywgY2hhcgo+ ICpkZXYpCj4gK3sKPiArCWludCBpOwo+ICsJc3RydWN0IGlvX2Vycl9zdGF0X3BhdGggKnBwOwo+ ICsKPiArCWlmICghcGF0aHZlYykKPiArCQlyZXR1cm4gTlVMTDsKPiArCXZlY3Rvcl9mb3JlYWNo X3Nsb3QocGF0aHZlYywgcHAsIGkpCj4gKwkJaWYgKCFzdHJjbXAocHAtPmRldm5hbWUsIGRldikp Cj4gKwkJCXJldHVybiBwcDsKPiArCj4gKwlpb19lcnJfc3RhdF9sb2coNCwgIiVzOiBub3QgZm91 bmQgaW4gY2hlY2sgcXVldWUiLCBkZXYpOwo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGluaXRfZWFjaF9kaW9fY3R4KHN0cnVjdCBkaW9fY3R4ICpjdCwgaW50IGJs a3NpemUsCj4gKwkJdW5zaWduZWQgbG9uZyBwZ3NpemUpCj4gK3sKPiArCWN0LT5ibGtzaXplID0g Ymxrc2l6ZTsKPiArCWN0LT5idWYgPSAodW5zaWduZWQgY2hhciAqKU1BTExPQyhibGtzaXplICsg cGdzaXplKTsKPiArCWlmICghY3QtPmJ1ZikKPiArCQlyZXR1cm4gMTsKPiArCWN0LT5wdHIgPSAo dW5zaWduZWQgY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpY3QtPmJ1ZiArCj4gKwkJCQlwZ3NpemUg LSAxKSAmICh+KHBnc2l6ZSAtIDEpKSk7CgoKVGhpcyBsb29rcyB0byBtZSBhcyBpZiB5b3Ugc2hv dWxkIHJhdGhlciB1c2UgcG9zaXhfbWVtYWxpZ24oKS4KCj4gKwljdC0+aW9fc3RhcnR0aW1lLnR2 X3NlYyA9IDA7Cj4gKwljdC0+aW9fc3RhcnR0aW1lLnR2X25zZWMgPSAwOwo+ICsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkZWluaXRfZWFjaF9kaW9fY3R4KHN0cnVjdCBk aW9fY3R4ICpjdCkKPiArewo+ICsJaWYgKGN0LT5idWYpCj4gKwkJRlJFRShjdC0+YnVmKTsKPiAr fQo+ICsKPiArc3RhdGljIGludCBzZXR1cF9kaXJlY3Rpb19jdHgoc3RydWN0IGlvX2Vycl9zdGF0 X3BhdGggKnApCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgcGdzaXplID0gZ2V0cGFnZXNpemUoKTsK PiArCWNoYXIgZnBhdGhbRklMRV9OQU1FX1NJWkUrNl07Cj4gKwlpbnQgYmxrc2l6ZTsKPiArCWlu dCBpOwo+ICsKPiArCXNucHJpbnRmKGZwYXRoLCBGSUxFX05BTUVfU0laRSwgIi9kZXYvJXMiLCBw LT5kZXZuYW1lKTsKCk15IGNvbXBpbGVyIHNwaXRzIG91dCB3YXJuaW5ncyBvbiB0aGlzIG9uZS4g UGxlYXNlIHVzZSBQQVRIX01BWCBmb3IgdGhlCmxlbmd0aCBvZiAiZnBhdGgiIHJhdGhlciB0aGFu IEZJTEVfTkFNRV9TSVpFLgoKPiArCWlmIChwLT5mZCA8IDApCj4gKwkJcC0+ZmQgPSBvcGVuKGZw YXRoLCBPX1JET05MWSB8IE9fRElSRUNUKTsKPiArCWlmIChwLT5mZCA8IDApCj4gKwkJcmV0dXJu IDE7Cj4gKwo+ICsJcC0+ZGlvX2N0eF9hcnJheSA9IE1BTExPQyhzaXplb2Yoc3RydWN0IGRpb19j dHggKikgKgo+IENPTkNVUl9OUl9FVkVOVCk7Cj4gKwlpZiAoIXAtPmRpb19jdHhfYXJyYXkpCj4g KwkJZ290byBmYWlsX2Nsb3NlOwo+ICsJZm9yIChpID0gMDsgaSA8IENPTkNVUl9OUl9FVkVOVDsg aSsrKSB7Cj4gKwkJcC0+ZGlvX2N0eF9hcnJheVtpXSA9IE1BTExPQyhzaXplb2Yoc3RydWN0Cj4g ZGlvX2N0eCkpOwo+ICsJCWlmICghcC0+ZGlvX2N0eF9hcnJheVtpXSkKPiArCQkJZ290byBmcmVl X3BkY3R4Owo+ICsJfQoKV2h5IGRvbid0IHlvdSBzaW1wbHkgbWFrZSBkaW9fY3R4X2FycmF5IGFu IGFycmF5IG9mIGRpb19jdHggKHJhdGhlcgp0aGFuIGRpb19jdHgqKSBhbmQgYWxsb2NhdGUgQ09O Q1VSX05fRVZFTlQqc2l6ZW9mKGRpb19jdHgpPwoKPiArCj4gKwlpZiAoaW9jdGwocC0+ZmQsIEJM S0JTWkdFVCwgJmJsa3NpemUpIDwgMCkgewo+ICsJCWlvX2Vycl9zdGF0X2xvZyg0LCAiJXM6Y2Fu bm90IGdldCBibG9ja3NpemUsIHNldAo+IGRlZmF1bHQgNTEyIiwKPiArCQkJCXAtPmRldm5hbWUp Owo+ICsJCWJsa3NpemUgPSA1MTI7Cj4gKwl9Cj4gKwkvKgo+ICsJICogU2FuaXR5IGNoZWNrIGZv ciBibG9jayBzaXplCj4gKwkgKi8KPiArCWlmIChibGtzaXplID4gNDA5NikKPiArCQlibGtzaXpl ID0gNDA5NjsKCkkgdGhpbmsgdGhpcyBpc24ndCBuZWNlc3NhcnkuCgo+ICsJaWYgKCFibGtzaXpl KQo+ICsJCWdvdG8gZnJlZV9wZGN0eDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQ09OQ1VSX05S X0VWRU5UOyBpKyspIHsKPiArCQlpZiAoaW5pdF9lYWNoX2Rpb19jdHgocC0+ZGlvX2N0eF9hcnJh eVtpXSwgYmxrc2l6ZSwKPiBwZ3NpemUpKQo+ICsJCQlnb3RvIGRlaW5pdDsKPiArCX0KPiArCXJl dHVybiAwOwo+ICsKPiArZGVpbml0Ogo+ICsJZm9yIChpID0gMDsgaSA8IENPTkNVUl9OUl9FVkVO VDsgaSsrKQo+ICsJCWRlaW5pdF9lYWNoX2Rpb19jdHgocC0+ZGlvX2N0eF9hcnJheVtpXSk7Cj4g K2ZyZWVfcGRjdHg6Cj4gKwlmb3IgKGkgPSAwOyBpIDwgQ09OQ1VSX05SX0VWRU5UOyBpKyspIHsK PiArCQlpZiAocC0+ZGlvX2N0eF9hcnJheVtpXSkKPiArCQkJRlJFRShwLT5kaW9fY3R4X2FycmF5 W2ldKTsKPiArCX0KPiArCUZSRUUocC0+ZGlvX2N0eF9hcnJheSk7Cj4gK2ZhaWxfY2xvc2U6Cj4g KwljbG9zZShwLT5mZCk7Cj4gKwo+ICsJcmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGRlc3Ryb3lfZGlyZWN0aW9fY3R4KHN0cnVjdCBpb19lcnJfc3RhdF9wYXRoICpwKQo+ICt7Cj4g KwlpbnQgaTsKPiArCj4gKwlpZiAoIXAgfHwgIXAtPmRpb19jdHhfYXJyYXkpCj4gKwkJcmV0dXJu Owo+ICsJY2FuY2VsX2luZmxpZ2h0X2lvKHApOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBDT05D VVJfTlJfRVZFTlQ7IGkrKykgewo+ICsJCWRlaW5pdF9lYWNoX2Rpb19jdHgocC0+ZGlvX2N0eF9h cnJheVtpXSk7Cj4gKwkJRlJFRShwLT5kaW9fY3R4X2FycmF5W2ldKTsKPiArCX0KPiArCj4gKwlG UkVFKHAtPmRpb19jdHhfYXJyYXkpOwo+ICsJaWYgKHAtPmZkID4gMCkKPiArCQljbG9zZShwLT5m ZCk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaW9fZXJyX3N0YXRfcGF0aCAqYWxsb2NfaW9f ZXJyX3N0YXRfcGF0aCh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgaW9fZXJyX3N0YXRfcGF0aCAqcDsK PiArCj4gKwlwID0gKHN0cnVjdCBpb19lcnJfc3RhdF9wYXRoICopTUFMTE9DKHNpemVvZigqcCkp Owo+ICsJaWYgKCFwKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCW1lbXNldChwLT5kZXZuYW1l LCAwLCBzaXplb2YocC0+ZGV2bmFtZSkpOwo+ICsJcC0+aW9fZXJyX25yID0gMDsKPiArCXAtPmlv X25yID0gMDsKPiArCXAtPnRvdGFsX3RpbWUgPSAwOwo+ICsJcC0+c3RhcnRfdGltZS50dl9zZWMg PSAwOwo+ICsJcC0+c3RhcnRfdGltZS50dl9uc2VjID0gMDsKPiArCXAtPmVycl9yYXRlX3RocmVz aG9sZCA9IDA7Cj4gKwlwLT5mZCA9IC0xOwo+ICsKPiArCXJldHVybiBwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBmcmVlX2lvX2Vycl9zdGF0X3BhdGgoc3RydWN0IGlvX2Vycl9zdGF0X3BhdGgg KnApCj4gK3sKPiArCUZSRUUocCk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaW9fZXJyX3N0 YXRfcGF0aHZlYyAqYWxsb2NfcGF0aHZlYyh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgaW9fZXJyX3N0 YXRfcGF0aHZlYyAqcDsKPiArCWludCByOwo+ICsKPiArCXAgPSAoc3RydWN0IGlvX2Vycl9zdGF0 X3BhdGh2ZWMgKilNQUxMT0Moc2l6ZW9mKCpwKSk7Cj4gKwlpZiAoIXApCj4gKwkJcmV0dXJuIE5V TEw7Cj4gKwlwLT5wYXRodmVjID0gdmVjdG9yX2FsbG9jKCk7Cj4gKwlpZiAoIXAtPnBhdGh2ZWMp Cj4gKwkJZ290byBvdXRfZnJlZV9zdHJ1Y3RfcGF0aHZlYzsKPiArCXIgPSBwdGhyZWFkX211dGV4 X2luaXQoJnAtPm11dGV4LCBOVUxMKTsKPiArCWlmIChyKQo+ICsJCWdvdG8gb3V0X2ZyZWVfbWVt YmVyX3BhdGh2ZWM7Cj4gKwo+ICsJcmV0dXJuIHA7Cj4gKwo+ICtvdXRfZnJlZV9tZW1iZXJfcGF0 aHZlYzoKPiArCXZlY3Rvcl9mcmVlKHAtPnBhdGh2ZWMpOwo+ICtvdXRfZnJlZV9zdHJ1Y3RfcGF0 aHZlYzoKPiArCUZSRUUocCk7Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgZnJlZV9pb19lcnJfcGF0aHZlYyhzdHJ1Y3QgaW9fZXJyX3N0YXRfcGF0aHZlYyAqcCkKPiAr ewo+ICsJc3RydWN0IGlvX2Vycl9zdGF0X3BhdGggKnBhdGg7Cj4gKwlpbnQgaTsKPiArCj4gKwlp ZiAoIXApCj4gKwkJcmV0dXJuOwo+ICsJcHRocmVhZF9tdXRleF9kZXN0cm95KCZwLT5tdXRleCk7 Cj4gKwlpZiAoIXAtPnBhdGh2ZWMpIHsKPiArCQl2ZWN0b3JfZm9yZWFjaF9zbG90KHAtPnBhdGh2 ZWMsIHBhdGgsIGkpIHsKPiArCQkJZGVzdHJveV9kaXJlY3Rpb19jdHgocGF0aCk7Cj4gKwkJCWZy ZWVfaW9fZXJyX3N0YXRfcGF0aChwYXRoKTsKPiArCQl9Cj4gKwkJdmVjdG9yX2ZyZWUocC0+cGF0 aHZlYyk7Cj4gKwl9Cj4gKwlGUkVFKHApOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiByZXR1cm4gdmFs dWUKPiArICogMDogZW5xdWV1ZSBPSwo+ICsgKiAxOiBmYWlscyBiZWNhdXNlIG9mIGludGVybmFs IGVycm9yCj4gKyAqIDI6IGZhaWxzIGJlY2F1c2Ugb2YgZXhpc3RpbmcgYWxyZWFkeQo+ICsgKi8K PiArc3RhdGljIGludCBlbnF1ZXVlX2lvX2Vycl9zdGF0X2J5X3BhdGgoc3RydWN0IHBhdGggKnBh dGgpCj4gK3sKPiArCXN0cnVjdCBpb19lcnJfc3RhdF9wYXRoICpwOwo+ICsKPiArCXB0aHJlYWRf bXV0ZXhfbG9jaygmcGF0aHMtPm11dGV4KTsKPiArCXAgPSBmaW5kX2Vycl9wYXRoX2J5X2Rldihw YXRocy0+cGF0aHZlYywgcGF0aC0+ZGV2KTsKPiArCWlmIChwKSB7Cj4gKwkJcHRocmVhZF9tdXRl eF91bmxvY2soJnBhdGhzLT5tdXRleCk7Cj4gKwkJcmV0dXJuIDI7Cj4gKwl9Cj4gKwlwdGhyZWFk X211dGV4X3VubG9jaygmcGF0aHMtPm11dGV4KTsKPiArCj4gKwlwID0gYWxsb2NfaW9fZXJyX3N0 YXRfcGF0aCgpOwo+ICsJaWYgKCFwKQo+ICsJCXJldHVybiAxOwo+ICsKPiArCW1lbWNweShwLT5k ZXZuYW1lLCBwYXRoLT5kZXYsIHNpemVvZihwLT5kZXZuYW1lKSk7Cj4gKwlwLT50b3RhbF90aW1l ID0gcGF0aC0+bXBwLT5wYXRoX2lvX2Vycl9zYW1wbGVfdGltZTsKPiArCXAtPmVycl9yYXRlX3Ro cmVzaG9sZCA9IHBhdGgtPm1wcC0KPiA+cGF0aF9pb19lcnJfcmF0ZV90aHJlc2hvbGQ7Cj4gKwo+ ICsJaWYgKHNldHVwX2RpcmVjdGlvX2N0eChwKSkKPiArCQlnb3RvIGZyZWVfaW9lcnJfcGF0aDsK PiArCXB0aHJlYWRfbXV0ZXhfbG9jaygmcGF0aHMtPm11dGV4KTsKPiArCWlmICghdmVjdG9yX2Fs bG9jX3Nsb3QocGF0aHMtPnBhdGh2ZWMpKQo+ICsJCWdvdG8gdW5sb2NrX2Rlc3Ryb3k7Cj4gKwl2 ZWN0b3Jfc2V0X3Nsb3QocGF0aHMtPnBhdGh2ZWMsIHApOwo+ICsJcHRocmVhZF9tdXRleF91bmxv Y2soJnBhdGhzLT5tdXRleCk7Cj4gKwo+ICsJaW9fZXJyX3N0YXRfbG9nKDIsICIlczogZW5xdWV1 ZSBwYXRoICVzIHRvIGNoZWNrIiwKPiArCQkJcGF0aC0+bXBwLT5hbGlhcywgcGF0aC0+ZGV2KTsK ClNvIHlvdSBjaG9zZSBub3QgdG8gZmFpbCB0aGUgcGF0aCBpbiB0aGUga2VybmVsIGZvciB0aGUg dGltZSBvZiB0aGUKdGVzdC4gQXMgSSBub3RlZCBwcmV2aW91c2x5LCB0aGF0IG1pZ2h0IG1ha2Ug dGhlIHRlc3QgbW9yZSByZWxpYWJsZS4gCk9mIGNvdXJzZSB5b3Ugc2hvdWxkbid0IGRvIGl0IGlm IHRoaXMgaXMgdGhlIGxhc3QgcmVtYWluaW5nIGFjdGl2ZQpwYXRoLCBidXQgaW4gdGhhdCBjYXNl IEkgZG9uJ3QgdGhpbmsgeW91IHNob3VsZCBldmVuIHN0YXJ0IHRlc3RpbmcuCgo+ICsJcmV0dXJu IDA7Cj4gKwo+ICt1bmxvY2tfZGVzdHJveToKPiArCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwYXRo cy0+bXV0ZXgpOwo+ICsJZGVzdHJveV9kaXJlY3Rpb19jdHgocCk7Cj4gK2ZyZWVfaW9lcnJfcGF0 aDoKPiArCWZyZWVfaW9fZXJyX3N0YXRfcGF0aChwKTsKPiArCj4gKwlyZXR1cm4gMTsKPiArfQo+ ICsKPiAraW50IGlvX2Vycl9zdGF0X2hhbmRsZV9wYXRoZmFpbChzdHJ1Y3QgcGF0aCAqcGF0aCkK PiArewo+ICsJc3RydWN0IHRpbWVzcGVjIGN1cnJfdGltZTsKPiArCj4gKwlpZiAocGF0aC0+aW9f ZXJyX2Rpc2FibGVfcmVpbnN0YXRlKSB7Cj4gKwkJaW9fZXJyX3N0YXRfbG9nKDMsICIlczogcmVp bnN0YXRlIGlzIGFscmVhZHkKPiBkaXNhYmxlZCIsCj4gKwkJCQlwYXRoLT5kZXYpOwo+ICsJCXJl dHVybiAxOwo+ICsJfQo+ICsJaWYgKHBhdGgtPmlvX2Vycl9wYXRoZmFpbF9jbnQgPT0gLTEpCj4g KwkJcmV0dXJuIDE7Cj4gKwo+ICsJaWYgKCFwYXRoLT5tcHApCj4gKwkJcmV0dXJuIDE7Cj4gKwlp ZiAocGF0aC0+bXBwLT5wYXRoX2lvX2Vycl9zYW1wbGVfdGltZSA8PSAwIHx8Cj4gKwkJcGF0aC0+ bXBwLT5wYXRoX2lvX2Vycl9yZWNvdmVyeV90aW1lIDw9IDAgfHwKPiArCQlwYXRoLT5tcHAtPnBh dGhfaW9fZXJyX3JhdGVfdGhyZXNob2xkIDwgMCkgewo+ICsJCWlvX2Vycl9zdGF0X2xvZyg0LCAi JXM6IHBhcmFtZXRlciBub3Qgc2V0IiwgcGF0aC0KPiA+bXBwLT5hbGlhcyk7Cj4gKwkJcmV0dXJu IDE7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIFRoZSB0ZXN0IHNob3VsZCBvbmx5IGJlIHN0YXJ0 ZWQgZm9yIHBhdGhzIHRoYXQgaGF2ZQo+IGZhaWxlZAo+ICsJICogcmVwZWF0ZWRseSBpbiBhIGNl cnRhaW4gdGltZSBmcmFtZSwgc28gdGhhdCB3ZSBoYXZlCj4gcmVhc29uCj4gKwkgKiB0byBhc3N1 bWUgdGhleSdyZSBmbGFreS4gV2l0aG91dCBib3RoZXIgdGhlIGFkbWluIHRvCj4gY29uZmlndXJl Cj4gKwkgKiB0aGUgcmVwZWF0ZWQgY291bnQgdGhyZXNob2xkIGFuZCB0aW1lIGZyYW1lLCB3ZSBh c3N1bWUgYQo+IHBhdGgKPiArCSAqIHdoaWNoIGZhaWxzIGF0IGxlYXN0IHR3aWNlIHdpdGhpbiA2 MCBzZWNvbmRzIGlzIGZsYWt5Lgo+ICsJICovCj4gKwlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19N T05PVE9OSUMsICZjdXJyX3RpbWUpICE9IDApCj4gKwkJcmV0dXJuIDE7Cj4gKwlpZiAocGF0aC0+ aW9fZXJyX3BhdGhmYWlsX2NudCA9PSAwKSB7Cj4gKwkJcGF0aC0+aW9fZXJyX3BhdGhmYWlsX2Nu dCsrOwo+ICsJCXBhdGgtPmlvX2Vycl9wYXRoZmFpbF9zdGFydHRpbWUgPSBjdXJyX3RpbWUudHZf c2VjOwo+ICsJCWlvX2Vycl9zdGF0X2xvZyg1LCAiJXM6IHN0YXJ0IHBhdGggZmxha2luZXNzIHBy ZS0KPiBjaGVja2luZyIsCj4gKwkJCQlwYXRoLT5kZXYpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ ICsJaWYgKChjdXJyX3RpbWUudHZfc2VjIC0gcGF0aC0+aW9fZXJyX3BhdGhmYWlsX3N0YXJ0dGlt ZSkgPgo+ICsJCQlGTEFLWV9QQVRIRkFJTF9USU1FX0ZSQU1FKSB7Cj4gKwkJcGF0aC0+aW9fZXJy X3BhdGhmYWlsX2NudCA9IDA7Cj4gKwkJcGF0aC0+aW9fZXJyX3BhdGhmYWlsX3N0YXJ0dGltZSA9 IGN1cnJfdGltZS50dl9zZWM7Cj4gKwkJaW9fZXJyX3N0YXRfbG9nKDUsICIlczogcmVzdGFydCBw YXRoIGZsYWtpbmVzcyBwcmUtCj4gY2hlY2tpbmciLAo+ICsJCQkJcGF0aC0+ZGV2KTsKPiArCX0K PiArCXBhdGgtPmlvX2Vycl9wYXRoZmFpbF9jbnQrKzsKPiArCWlmIChwYXRoLT5pb19lcnJfcGF0 aGZhaWxfY250ID49IEZMQUtZX1BBVEhGQUlMX1RIUkVTSE9MRCkgewo+ICsJCXBhdGgtPmlvX2Vy cl9wYXRoZmFpbF9jbnQgPSAtMTsKPiArCQlyZXR1cm4gZW5xdWV1ZV9pb19lcnJfc3RhdF9ieV9w YXRoKHBhdGgpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgaGl0X2lv X2Vycl9yZWNvdmVyeV90aW1lKHN0cnVjdCBwYXRoICpwcCkKPiArewo+ICsJc3RydWN0IHRpbWVz cGVjIGN1cnJfdGltZTsKPiArCWludCByOwo+ICsKPiArCWlmIChwcC0+aW9fZXJyX2Rpc2FibGVf cmVpbnN0YXRlID09IDApCj4gKwkJcmV0dXJuIDE7Cj4gKwlpZiAoY2xvY2tfZ2V0dGltZShDTE9D S19NT05PVE9OSUMsICZjdXJyX3RpbWUpICE9IDApCj4gKwkJcmV0dXJuIDE7Cj4gKwlpZiAocHAt Pm1wcC0+bnJfYWN0aXZlIDw9IDApIHsKPiArCQlpb19lcnJfc3RhdF9sb2coMiwgIiVzOiByZWNv dmVyIHBhdGggZWFybHkiLCBwcC0KPiA+ZGV2KTsKPiArCQlnb3RvIHJlY292ZXI7Cj4gKwl9Cj4g KwlpZiAoKGN1cnJfdGltZS50dl9zZWMgLSBwcC0+aW9fZXJyX2Rpc19yZWluc3RhdGVfdGltZSkg Pgo+ICsJCQlwcC0+bXBwLT5wYXRoX2lvX2Vycl9yZWNvdmVyeV90aW1lKSB7Cj4gKwkJaW9fZXJy X3N0YXRfbG9nKDQsICIlczogcmVzY2hlZHVsZSBjaGVja2luZyBhZnRlciAlZAo+IHNlY29uZHMi LAo+ICsJCQkJcHAtPmRldiwgcHAtPm1wcC0KPiA+cGF0aF9pb19lcnJfc2FtcGxlX3RpbWUpOwo+ ICsJCS8qCj4gKwkJICogdG8gcmVzY2hlZHVsZSBpbyBlcnJvciBjaGVja2luZyBhZ2Fpbgo+ICsJ CSAqIGlmIHRoZSBwYXRoIGlzIGdvb2QgZW5vdWdoLCB3ZSBjbGFpbSBpdCBpcyBnb29kCj4gKwkJ ICogYW5kIGNhbiBiZSByZWluc2F0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSBpbiB0aGUKPiArCQkg KiBjaGVja19wYXRoIHJvdXRpbmUuCj4gKwkJICovCj4gKwkJcHAtPmlvX2Vycl9wYXRoZmFpbF9j bnQgPSAtMTsKPiArCQlwcC0+aW9fZXJyX2Rpc19yZWluc3RhdGVfdGltZSA9IGN1cnJfdGltZS50 dl9zZWM7Cj4gKwkJciA9IGVucXVldWVfaW9fZXJyX3N0YXRfYnlfcGF0aChwcCk7Cj4gKwkJLyoK PiArCQkgKiBFbnF1ZXVlIGZhaWxzIGJlY2F1c2Ugb2YgaW50ZXJuYWwgZXJyb3IuCj4gKwkJICog SW4gdGhpcyBjYXNlICwgd2UgcmVjb3ZlciB0aGlzIHBhdGgKPiArCQkgKiBPciBlbHNlLCAgcmV0 dXJuIGhpIHRvIHNldCBwYXRoIHN0YXRlIHRvCj4gUEFUSF9ERUxBWUVECj4gKwkJICovCj4gKwkJ aWYgKHIgPT0gMSkgewo+ICsJCQlpb19lcnJfc3RhdF9sb2coMywgIiVzOiBlbnF1ZXVlIGZhaWxz LCB0bwo+IHJlY292ZXIiLAo+ICsJCQkJCXBwLT5kZXYpOwo+ICsJCQlnb3RvIHJlY292ZXI7Cj4g KwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAxOwo+ICsKPiArcmVjb3ZlcjoKPiArCXBwLT5pb19l cnJfcGF0aGZhaWxfY250ID0gMDsKPiArCXBwLT5pb19lcnJfZGlzYWJsZV9yZWluc3RhdGUgPSAw Owo+ICsJcHAtPnRpY2sgPSAxOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg ZGVsZXRlX2lvX2Vycl9zdGF0X2J5X2FkZHIoc3RydWN0IGlvX2Vycl9zdGF0X3BhdGggKnApCj4g K3sKPiArCWludCBpOwo+ICsKPiArCWkgPSBmaW5kX3Nsb3QocGF0aHMtPnBhdGh2ZWMsIHApOwo+ ICsJaWYgKGkgIT0gLTEpCj4gKwkJdmVjdG9yX2RlbF9zbG90KHBhdGhzLT5wYXRodmVjLCBpKTsK PiArCj4gKwlkZXN0cm95X2RpcmVjdGlvX2N0eChwKTsKPiArCWZyZWVfaW9fZXJyX3N0YXRfcGF0 aChwKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYWNjb3VudF9h c3luY19pb19zdGF0ZShzdHJ1Y3QgaW9fZXJyX3N0YXRfcGF0aCAqcHAsIGludAo+IHJjKQo+ICt7 Cj4gKwlzd2l0Y2ggKHJjKSB7Cj4gKwljYXNlIFBBVEhfRE9XTjoKPiArCWNhc2UgUEFUSF9USU1F T1VUOgo+ICsJCXBwLT5pb19lcnJfbnIrKzsKPiArCQlicmVhazsKPiArCWNhc2UgUEFUSF9VTkNI RUNLRUQ6Cj4gKwljYXNlIFBBVEhfVVA6Cj4gKwljYXNlIFBBVEhfUEVORElORzoKPiArCQlicmVh azsKPiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg cG9sbF9pb19lcnJfc3RhdChzdHJ1Y3QgdmVjdG9ycyAqdmVjcywgc3RydWN0Cj4gaW9fZXJyX3N0 YXRfcGF0aCAqcHApCj4gK3sKPiArCXN0cnVjdCB0aW1lc3BlYyBjdXJydGltZSwgZGlmZnRpbWU7 Cj4gKwlzdHJ1Y3QgcGF0aCAqcGF0aDsKPiArCWRvdWJsZSBlcnJfcmF0ZTsKPiArCj4gKwlpZiAo Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZjdXJydGltZSkgIT0gMCkKPiArCQlyZXR1 cm4gMTsKPiArCXRpbWVzcGVjc3ViKCZjdXJydGltZSwgJnBwLT5zdGFydF90aW1lLCAmZGlmZnRp bWUpOwo+ICsJaWYgKGRpZmZ0aW1lLnR2X3NlYyA8IHBwLT50b3RhbF90aW1lKQo+ICsJCXJldHVy biAwOwo+ICsKPiArCWlvX2Vycl9zdGF0X2xvZyg0LCAiY2hlY2sgZW5kIGZvciAlcyIsIHBwLT5k ZXZuYW1lKTsKPiArCj4gKwllcnJfcmF0ZSA9IHBwLT5pb19uciA9PSAwID8gMCA6IChwcC0+aW9f ZXJyX25yICogMTAwMC4wZikgLwo+IHBwLT5pb19ucjsKPiArCWlvX2Vycl9zdGF0X2xvZyg1LCAi JXM6IElPIGVycm9yIHJhdGUgKCUuMWYvMTAwMCkiLAo+ICsJCQlwcC0+ZGV2bmFtZSwgZXJyX3Jh dGUpOwo+ICsJcHRocmVhZF9jbGVhbnVwX3B1c2goY2xlYW51cF9sb2NrLCAmdmVjcy0+bG9jayk7 Cj4gKwlsb2NrKCZ2ZWNzLT5sb2NrKTsKPiArCXB0aHJlYWRfdGVzdGNhbmNlbCgpOwo+ICsJcGF0 aCA9IGZpbmRfcGF0aF9ieV9kZXYodmVjcy0+cGF0aHZlYywgcHAtPmRldm5hbWUpOwo+ICsJaWYg KCFwYXRoKSB7Cj4gKwkJaW9fZXJyX3N0YXRfbG9nKDQsICJwYXRoICVzIG5vdCBmb3VuZCciLCBw cC0KPiA+ZGV2bmFtZSk7Cj4gKwl9IGVsc2UgaWYgKGVycl9yYXRlIDw9IHBwLT5lcnJfcmF0ZV90 aHJlc2hvbGQpIHsKPiArCQlwYXRoLT5pb19lcnJfcGF0aGZhaWxfY250ID0gMDsKPiArCQlwYXRo LT5pb19lcnJfZGlzYWJsZV9yZWluc3RhdGUgPSAwOwo+ICsJCWlvX2Vycl9zdGF0X2xvZyg0LCAi JXM6ICglZC8lZCkgZ29vZCB0byBlbmFibGUKPiByZWluc3RhdGluZyIsCj4gKwkJCQlwcC0+ZGV2 bmFtZSwgcHAtPmlvX2Vycl9uciwgcHAtCj4gPmlvX25yKTsKPiArCX0gZWxzZSBpZiAocGF0aC0+ bXBwICYmIHBhdGgtPm1wcC0+bnJfYWN0aXZlID4gMSkgewo+ICsJCWRtX2ZhaWxfcGF0aChwYXRo LT5tcHAtPmFsaWFzLCBwYXRoLT5kZXZfdCk7Cj4gKwkJdXBkYXRlX3F1ZXVlX21vZGVfZGVsX3Bh dGgocGF0aC0+bXBwKTsKPiArCQlpb19lcnJfc3RhdF9sb2coMiwgIiVzOiBwcm9hY3RpdmVseSBm YWlsIGRtIHBhdGgKPiAlcyIsCj4gKwkJCQlwYXRoLT5tcHAtPmFsaWFzLCBwYXRoLT5kZXYpOwo+ ICsJCXBhdGgtPmlvX2Vycl9kaXNhYmxlX3JlaW5zdGF0ZSA9IDE7Cj4gKwkJcGF0aC0+aW9fZXJy X2Rpc19yZWluc3RhdGVfdGltZSA9IGN1cnJ0aW1lLnR2X3NlYzsKPiArCQlpb19lcnJfc3RhdF9s b2coMywgIiVzOiB0byBkaXNhYmxlICVzIHRvIHJlaW5zdGF0ZSIsCj4gKwkJCQlwYXRoLT5tcHAt PmFsaWFzLCBwYXRoLT5kZXYpOwo+ICsKPiArCQkvKgo+ICsJCSAqIHNjaGVkdWxlIHBhdGggY2hl Y2sgYXMgc29vbiBhcyBwb3NzaWJsZSB0bwo+ICsJCSAqIHVwZGF0ZSBwYXRoIHN0YXRlIHRvIGRl bGF5ZWQgc3RhdGUKPiArCQkgKi8KPiArCQlwYXRoLT50aWNrID0gMTsKPiArCX0gZWxzZSB7Cj4g KwkJcGF0aC0+aW9fZXJyX3BhdGhmYWlsX2NudCA9IDA7Cj4gKwkJcGF0aC0+aW9fZXJyX2Rpc2Fi bGVfcmVpbnN0YXRlID0gMDsKPiArCQlpb19lcnJfc3RhdF9sb2coNCwgIiVzOiB0aGVyZSBpcyBv cnBoYW4gcGF0aCwgZW5hYmxlCj4gcmVpbnN0YXRpbmciLAo+ICsJCQkJcHAtPmRldm5hbWUpOwo+ ICsJfQo+ICsJbG9ja19jbGVhbnVwX3BvcCh2ZWNzLT5sb2NrKTsKPiArCj4gKwlkZWxldGVfaW9f ZXJyX3N0YXRfYnlfYWRkcihwcCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgc2VuZF9lYWNoX2FzeW5jX2lvKHN0cnVjdCBkaW9fY3R4ICpjdCwgaW50IGZkLCBjaGFy ICpkZXYpCj4gK3sKPiArCWludCByYyA9IC0xOwo+ICsKPiArCWlmIChjdC0+aW9fc3RhcnR0aW1l LnR2X25zZWMgPT0gMCAmJgo+ICsJCQljdC0+aW9fc3RhcnR0aW1lLnR2X3NlYyA9PSAwKSB7Cj4g KwkJc3RydWN0IGlvY2IgKmlvc1sxXSA9IHsgJmN0LT5pbyB9Owo+ICsKPiArCQlpZiAoY2xvY2tf Z2V0dGltZShDTE9DS19NT05PVE9OSUMsICZjdC0KPiA+aW9fc3RhcnR0aW1lKSAhPSAwKSB7Cj4g KwkJCWN0LT5pb19zdGFydHRpbWUudHZfc2VjID0gMDsKPiArCQkJY3QtPmlvX3N0YXJ0dGltZS50 dl9uc2VjID0gMDsKPiArCQkJcmV0dXJuIHJjOwo+ICsJCX0KPiArCQlpb19wcmVwX3ByZWFkKCZj dC0+aW8sIGZkLCBjdC0+cHRyLCBjdC0+Ymxrc2l6ZSwgMCk7Cj4gKwkJaWYgKGlvX3N1Ym1pdChp b2N0eCwgMSwgaW9zKSAhPSAxKSB7Cj4gKwkJCWlvX2Vycl9zdGF0X2xvZyg1LCAiJXM6IGlvX3N1 Ym1pdCBlcnJvciAlaSIsCj4gKwkJCQkJZGV2LCBlcnJubyk7Cj4gKwkJCXJldHVybiByYzsKPiAr CQl9Cj4gKwl9Cj4gKwlyYyA9IDA7Cj4gKwo+ICsJcmV0dXJuIHJjOwo+ICt9CgpZb3UgcmV0dXJu IDAgaGVyZSBib3RoIGlmIHlvdSBzdWJtaXQgSU8gYW5kIGlmIHlvdSBkb24ndCBldmVuIHRyeQpi ZWNhdXNlIGlvX3N0YXJ0dGltZSBpcyBhbHJlYWR5IHNldCAuLi4KCj4gKwo+ICtzdGF0aWMgdm9p ZCBzZW5kX2JhdGNoX2FzeW5jX2lvcyhzdHJ1Y3QgaW9fZXJyX3N0YXRfcGF0aCAqcHApCj4gK3sK PiArCWludCBpOwo+ICsJc3RydWN0IGRpb19jdHggKmN0Owo+ICsKPiArCWZvciAoaSA9IDA7IGkg PCBDT05DVVJfTlJfRVZFTlQ7IGkrKykgewo+ICsJCWN0ID0gcHAtPmRpb19jdHhfYXJyYXlbaV07 Cj4gKwkJaWYgKCFzZW5kX2VhY2hfYXN5bmNfaW8oY3QsIHBwLT5mZCwgcHAtPmRldm5hbWUpKQo+ ICsJCQlwcC0+aW9fbnIrKzsKCi4uLiBhbmQgaGVyZSB5b3UgaW5jcmVhc2UgaW9fbnIgZm9yIHJj ID09IDAuIElzIHRoYXQgY29ycmVjdD8KCj4gKwl9Cj4gKwlpZiAocHAtPnN0YXJ0X3RpbWUudHZf c2VjID09IDAgJiYgcHAtPnN0YXJ0X3RpbWUudHZfbnNlYyA9PQo+IDAgJiYKPiArCQljbG9ja19n ZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnBwLT5zdGFydF90aW1lKSkgewo+ICsJCXBwLT5zdGFy dF90aW1lLnR2X3NlYyA9IDA7Cj4gKwkJcHAtPnN0YXJ0X3RpbWUudHZfbnNlYyA9IDA7Cj4gKwl9 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdHJ5X3RvX2NhbmNlbF90aW1lb3V0X2lvKHN0cnVjdCBk aW9fY3R4ICpjdCwgc3RydWN0Cj4gdGltZXNwZWMgKnQsCj4gKwkJY2hhciAqZGV2KQo+ICt7Cj4g KwlzdHJ1Y3QgdGltZXNwZWMJZGlmZnRpbWU7Cj4gKwlzdHJ1Y3QgaW9fZXZlbnQJZXZlbnQ7Cj4g KwlpbnQJCXJjID0gUEFUSF9VTkNIRUNLRUQ7Cj4gKwlpbnQJCXI7Cj4gKwo+ICsJdGltZXNwZWNz dWIodCwgJmN0LT5pb19zdGFydHRpbWUsICZkaWZmdGltZSk7Cj4gKwlpZiAoZGlmZnRpbWUudHZf c2VjID4gSU9USU1FT1VUX1NFQykgewo+ICsJCXN0cnVjdCBpb2NiICppb3NbMV0gPSB7ICZjdC0+ aW8gfTsKPiArCj4gKwkJaW9fZXJyX3N0YXRfbG9nKDUsICIlczogYWJvcnQgY2hlY2sgb24gdGlt ZW91dCIsCj4gZGV2KTsKPiArCQlyID0gaW9fY2FuY2VsKGlvY3R4LCBpb3NbMF0sICZldmVudCk7 Cj4gKwkJaWYgKHIpIHsKPiArCQkJaW9fZXJyX3N0YXRfbG9nKDUsICIlczogaW9fY2FuY2VsIGVy cm9yICVpIiwKPiArCQkJCQlkZXYsIGVycm5vKTsKPiArCQl9IGVsc2Ugewo+ICsJCQljdC0+aW9f c3RhcnR0aW1lLnR2X3NlYyA9IDA7Cj4gKwkJCWN0LT5pb19zdGFydHRpbWUudHZfbnNlYyA9IDA7 Cj4gKwkJfQo+ICsJCXJjID0gUEFUSF9USU1FT1VUOwo+ICsJfSBlbHNlIHsKPiArCQlyYyA9IFBB VEhfUEVORElORzsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGhhbmRsZV9hc3luY19pb190aW1lb3V0KHZvaWQpCj4gK3sKPiArCXN0cnVjdCBpb19lcnJf c3RhdF9wYXRoICpwcDsKPiArCXN0cnVjdCB0aW1lc3BlYyBjdXJyX3RpbWU7Cj4gKwlpbnQJCXJj ID0gUEFUSF9VTkNIRUNLRUQ7Cj4gKwlpbnQJCWksIGo7Cj4gKwo+ICsJaWYgKGNsb2NrX2dldHRp bWUoQ0xPQ0tfTU9OT1RPTklDLCAmY3Vycl90aW1lKSAhPSAwKQo+ICsJCXJldHVybjsKPiArCXZl Y3Rvcl9mb3JlYWNoX3Nsb3QocGF0aHMtPnBhdGh2ZWMsIHBwLCBpKSB7Cj4gKwkJZm9yIChqID0g MDsgaiA8IENPTkNVUl9OUl9FVkVOVDsgaisrKSB7Cj4gKwkJCXJjID0gdHJ5X3RvX2NhbmNlbF90 aW1lb3V0X2lvKHBwLQo+ID5kaW9fY3R4X2FycmF5W2pdLAo+ICsJCQkJCSZjdXJyX3RpbWUsIHBw LT5kZXZuYW1lKTsKPiArCQkJYWNjb3VudF9hc3luY19pb19zdGF0ZShwcCwgcmMpOwo+ICsJCX0K PiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY2FuY2VsX2luZmxpZ2h0X2lvKHN0cnVjdCBp b19lcnJfc3RhdF9wYXRoICpwcCkKPiArewo+ICsJc3RydWN0IGlvX2V2ZW50IGV2ZW50Owo+ICsJ aW50IGksIHI7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IENPTkNVUl9OUl9FVkVOVDsgaSsrKSB7 Cj4gKwkJc3RydWN0IGRpb19jdHggKmN0ID0gcHAtPmRpb19jdHhfYXJyYXlbaV07Cj4gKwkJc3Ry dWN0IGlvY2IgKmlvc1sxXSA9IHsgJmN0LT5pbyB9Owo+ICsKPiArCQlpZiAoY3QtPmlvX3N0YXJ0 dGltZS50dl9zZWMgPT0gMAo+ICsJCQkJJiYgY3QtPmlvX3N0YXJ0dGltZS50dl9uc2VjID09IDAp Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCWlvX2Vycl9zdGF0X2xvZyg1LCAiJXM6IGFib3J0IGluZmxp Z2ggaW8iLAo+ICsJCQkJcHAtPmRldm5hbWUpOwo+ICsJCXIgPSBpb19jYW5jZWwoaW9jdHgsIGlv c1swXSwgJmV2ZW50KTsKPiArCQlpZiAocikgewo+ICsJCQlpb19lcnJfc3RhdF9sb2coNSwgIiVz OiBpb19jYW5jZWwgZXJyb3IgJWQsCj4gJWkiLAo+ICsJCQkJCXBwLT5kZXZuYW1lLCByLCBlcnJu byk7Cj4gKwkJfSBlbHNlIHsKPiArCQkJY3QtPmlvX3N0YXJ0dGltZS50dl9zZWMgPSAwOwo+ICsJ CQljdC0+aW9fc3RhcnR0aW1lLnR2X25zZWMgPSAwOwo+ICsJCX0KPiArCX0KPiArfQo+ICsKPiAr c3RhdGljIGlubGluZSBpbnQgaGFuZGxlX2RvbmVfZGlvX2N0eChzdHJ1Y3QgZGlvX2N0eCAqY3Qs IHN0cnVjdAo+IGlvX2V2ZW50ICpldikKPiArewo+ICsJY3QtPmlvX3N0YXJ0dGltZS50dl9zZWMg PSAwOwo+ICsJY3QtPmlvX3N0YXJ0dGltZS50dl9uc2VjID0gMDsKPiArCXJldHVybiAoZXYtPnJl cyA9PSBjdC0+Ymxrc2l6ZSkgPyBQQVRIX1VQIDogUEFUSF9ET1dOOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBoYW5kbGVfYXN5bmNfaW9fZG9uZV9ldmVudChzdHJ1Y3QgaW9fZXZlbnQgKmlvX2V2 dCkKPiArewo+ICsJc3RydWN0IGlvX2Vycl9zdGF0X3BhdGggKnBwOwo+ICsJc3RydWN0IGRpb19j dHggKmN0Owo+ICsJaW50IHJjID0gUEFUSF9VTkNIRUNLRUQ7Cj4gKwlpbnQgaSwgajsKPiArCj4g Kwl2ZWN0b3JfZm9yZWFjaF9zbG90KHBhdGhzLT5wYXRodmVjLCBwcCwgaSkgewo+ICsJCWZvciAo aiA9IDA7IGogPCBDT05DVVJfTlJfRVZFTlQ7IGorKykgewo+ICsJCQljdCA9IHBwLT5kaW9fY3R4 X2FycmF5W2pdOwo+ICsJCQlpZiAoJmN0LT5pbyA9PSBpb19ldnQtPm9iaikgewo+ICsJCQkJcmMg PSBoYW5kbGVfZG9uZV9kaW9fY3R4KGN0LAo+IGlvX2V2dCk7Cj4gKwkJCQlhY2NvdW50X2FzeW5j X2lvX3N0YXRlKHBwLCByYyk7Cj4gKwkJCQlyZXR1cm47Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHByb2Nlc3NfYXN5bmNfaW9zX2V2ZW50KGludCB0aW1lb3V0 X3NlY3MsIGNoYXIgKmRldikKPiArewo+ICsJc3RydWN0IGlvX2V2ZW50IGV2ZW50c1tDT05DVVJf TlJfRVZFTlRdOwo+ICsJaW50CQlpLCBuOwo+ICsJc3RydWN0IHRpbWVzcGVjCXRpbWVvdXQgPSB7 IC50dl9zZWMgPSB0aW1lb3V0X3NlY3MgfTsKPiArCj4gKwllcnJubyA9IDA7Cj4gKwluID0gaW9f Z2V0ZXZlbnRzKGlvY3R4LCAxTCwgQ09OQ1VSX05SX0VWRU5ULCBldmVudHMsCj4gJnRpbWVvdXQp Owo+ICsJaWYgKG4gPCAwKSB7Cj4gKwkJaW9fZXJyX3N0YXRfbG9nKDMsICIlczogYXN5bmMgaW8g ZXZlbnRzIHJldHVybmVkICVkCj4gKGVycm5vPSVzKSIsCj4gKwkJCQlkZXYsIG4sIHN0cmVycm9y KGVycm5vKSk7Cj4gKwl9IGVsc2UgaWYgKG4gPT0gMEwpIHsKPiArCQloYW5kbGVfYXN5bmNfaW9f dGltZW91dCgpOwo+ICsJfSBlbHNlIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQo+ICsJ CQloYW5kbGVfYXN5bmNfaW9fZG9uZV9ldmVudCgmZXZlbnRzW2ldKTsKPiArCX0KPiArfQoKSSdt IG5vdCBzdXJlIHRoaXMgaXMgY29ycmVjdC4gWW91IGhhbmRsZSB0aW1lb3V0cyBvbmx5IGlmIGlv X2dldGV2ZW50cwpyZXR1cm5zIDAuIEJ1dCBpdCBiZWNhdXNlIG5vdCBhbGwgSU9zIGhhdmUgbmVj ZXNzYXJpbHkgdGhlIHNhbWUgc3RhcnQKdGltZSwgaXQgY291bGQgYmUgdGhhdCBzb21lIGhhdmUg dGltZWQgb3V0IHdoaWxlIG90aGVycyBoYXZlbid0LiBPciBhbQpJIG92ZXJsb29raW5nIHNvbWV0 aGluZz8gQXQgbGVhc3QgdGhpcyBkZXNlcnZlcyBzb21lIGNvbW1lbnRzLgoKPiArCj4gK3N0YXRp YyB2b2lkIHNlcnZpY2VfcGF0aHModm9pZCkKPiArewo+ICsJc3RydWN0IGlvX2Vycl9zdGF0X3Bh dGggKnBwOwo+ICsJaW50IGk7Cj4gKwo+ICsJcHRocmVhZF9tdXRleF9sb2NrKCZwYXRocy0+bXV0 ZXgpOwo+ICsJdmVjdG9yX2ZvcmVhY2hfc2xvdChwYXRocy0+cGF0aHZlYywgcHAsIGkpIHsKPiAr CQlzZW5kX2JhdGNoX2FzeW5jX2lvcyhwcCk7Cj4gKwkJcHJvY2Vzc19hc3luY19pb3NfZXZlbnQo SU9USU1FT1VUX1NFQywgcHAtPmRldm5hbWUpOwo+ICsJCXBvbGxfaW9fZXJyX3N0YXQodmVjcywg cHApOwo+ICsJfQo+ICsJcHRocmVhZF9tdXRleF91bmxvY2soJnBhdGhzLT5tdXRleCk7Cj4gK30K ClRoZXJlJ3MgYW5vdGhlciBwcm9ibGVtIGhlcmUuIFlvdSB3YWl0IHVwIHRvIElPVElNRU9VVF9T RUMgc2Vjb25kcyBmb3IKZWFjaCBwYXRoLiBUaGlzIHdpbGwgbG9vcCB0YWtlIGEgbWludXRlIGZv ciBldmVyeSBwYXRoIHRoYXQgaXMgZG93bi4KWW91J2xsIGVuZCB1cCB3YWl0aW5nIG11Y2ggdG9v IGxvbmcgZm9yIHRoZSBsYXRlIHBhdGhzIGluIHRoZSBsb29wLiBZb3UKc2hvdWxkIHJhdGhlciBz ZXQgYW4gZW5kIHRpbWUgYW5kIHdhaXQgb25seSB0aGUgZGlmZmVyZW5jZSBFTkQtTk9XKCkKCgo+ IAo+ICtzdGF0aWMgdm9pZCAqaW9fZXJyX3N0YXRfbG9vcCh2b2lkICpkYXRhKQo+ICt7Cj4gKwl2 ZWNzID0gKHN0cnVjdCB2ZWN0b3JzICopZGF0YTsKPiArCXB0aHJlYWRfY2xlYW51cF9wdXNoKHJj dV91bnJlZ2lzdGVyLCBOVUxMKTsKPiArCXJjdV9yZWdpc3Rlcl90aHJlYWQoKTsKPiArCj4gKwlt bG9ja2FsbChNQ0xfQ1VSUkVOVCB8IE1DTF9GVVRVUkUpOwo+ICsJd2hpbGUgKDEpIHsKPiArCQlz ZXJ2aWNlX3BhdGhzKCk7Cj4gKwkJdXNsZWVwKDEwMDAwMCk7Cj4gKwl9Cj4gKwo+ICsJcHRocmVh ZF9jbGVhbnVwX3BvcCgxKTsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtpbnQgc3RhcnRf aW9fZXJyX3N0YXRfdGhyZWFkKHZvaWQgKmRhdGEpCj4gK3sKPiArCWlmIChpb19zZXR1cChDT05D VVJfTlJfRVZFTlQsICZpb2N0eCkgIT0gMCkgewo+ICsJCWlvX2Vycl9zdGF0X2xvZyg0LCAiaW9f c2V0dXAgZmFpbGVkIik7Cj4gKwkJcmV0dXJuIDE7Cj4gKwl9Cj4gKwlwYXRocyA9IGFsbG9jX3Bh dGh2ZWMoKTsKPiArCWlmICghcGF0aHMpCj4gKwkJZ290byBkZXN0cm95X2N0eDsKPiArCj4gKwlp ZiAocHRocmVhZF9jcmVhdGUoJmlvX2Vycl9zdGF0X3RociwgJmlvX2Vycl9zdGF0X2F0dHIsCj4g KwkJCQlpb19lcnJfc3RhdF9sb29wLCBkYXRhKSkgewo+ICsJCWlvX2Vycl9zdGF0X2xvZygwLCAi Y2Fubm90IGNyZWF0ZSBpb19lcnJvciBzdGF0aXN0aWMKPiB0aHJlYWQiKTsKPiArCQlnb3RvIG91 dF9mcmVlOwo+ICsJfQo+ICsJaW9fZXJyX3N0YXRfbG9nKDMsICJ0aHJlYWQgc3RhcnRlZCIpOwo+ ICsJcmV0dXJuIDA7Cj4gKwo+ICtvdXRfZnJlZToKPiArCWZyZWVfaW9fZXJyX3BhdGh2ZWMocGF0 aHMpOwo+ICtkZXN0cm95X2N0eDoKPiArCWlvX2Rlc3Ryb3koaW9jdHgpOwo+ICsJaW9fZXJyX3N0 YXRfbG9nKDAsICJmYWlsZWQgdG8gc3RhcnQgaW9fZXJyb3Igc3RhdGlzdGljCj4gdGhyZWFkIik7 Cj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArdm9pZCBzdG9wX2lvX2Vycl9zdGF0X3RocmVhZCh2 b2lkKQo+ICt7Cj4gKwlwdGhyZWFkX2NhbmNlbChpb19lcnJfc3RhdF90aHIpOwo+ICsJcHRocmVh ZF9raWxsKGlvX2Vycl9zdGF0X3RociwgU0lHVVNSMik7Cj4gKwlmcmVlX2lvX2Vycl9wYXRodmVj KHBhdGhzKTsKPiArCWlvX2Rlc3Ryb3koaW9jdHgpOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2xpYm11 bHRpcGF0aC9pb19lcnJfc3RhdC5oIGIvbGlibXVsdGlwYXRoL2lvX2Vycl9zdGF0LmgKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi45NzY4NTYxNwo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9saWJtdWx0aXBhdGgvaW9fZXJyX3N0YXQuaAo+IEBAIC0wLDAgKzEsMTUgQEAK PiArI2lmbmRlZiBfSU9fRVJSX1NUQVRfSAo+ICsjZGVmaW5lIF9JT19FUlJfU1RBVF9ICj4gKwo+ ICsjaW5jbHVkZSAidmVjdG9yLmgiCj4gKyNpbmNsdWRlICJsb2NrLmgiCj4gKwo+ICsKPiArZXh0 ZXJuIHB0aHJlYWRfYXR0cl90IGlvX2Vycl9zdGF0X2F0dHI7Cj4gKwo+ICtpbnQgc3RhcnRfaW9f ZXJyX3N0YXRfdGhyZWFkKHZvaWQgKmRhdGEpOwo+ICt2b2lkIHN0b3BfaW9fZXJyX3N0YXRfdGhy ZWFkKHZvaWQpOwo+ICtpbnQgaW9fZXJyX3N0YXRfaGFuZGxlX3BhdGhmYWlsKHN0cnVjdCBwYXRo ICpwYXRoKTsKPiAraW50IGhpdF9pb19lcnJfcmVjb3ZlcnlfdGltZShzdHJ1Y3QgcGF0aCAqcHAp Owo+ICsKPiArI2VuZGlmIC8qIF9JT19FUlJfU1RBVF9IICovCj4gZGlmZiAtLWdpdCBhL2xpYm11 bHRpcGF0aC9wcm9wc2VsLmMgYi9saWJtdWx0aXBhdGgvcHJvcHNlbC5jCj4gaW5kZXggMTc1ZmJl MTEuLjlkMmMzYzA5IDEwMDY0NAo+IC0tLSBhL2xpYm11bHRpcGF0aC9wcm9wc2VsLmMKPiArKysg Yi9saWJtdWx0aXBhdGgvcHJvcHNlbC5jCj4gQEAgLTczMSw2ICs3MzEsNyBAQCBvdXQ6Cj4gIAly ZXR1cm4gMDsKPiAgCj4gIH0KPiArCj4gIGludCBzZWxlY3Rfc2FuX3BhdGhfZXJyX3RocmVzaG9s ZChzdHJ1Y3QgY29uZmlnICpjb25mLCBzdHJ1Y3QKPiBtdWx0aXBhdGggKm1wKQo+ICB7Cj4gIAlj aGFyICpvcmlnaW4sIGJ1ZmZbMTJdOwo+IEBAIC03NjEsNiArNzYyLDcgQEAgb3V0Ogo+ICAJcmV0 dXJuIDA7Cj4gIAo+ICB9Cj4gKwo+ICBpbnQgc2VsZWN0X3Nhbl9wYXRoX2Vycl9yZWNvdmVyeV90 aW1lKHN0cnVjdCBjb25maWcgKmNvbmYsIHN0cnVjdAo+IG11bHRpcGF0aCAqbXApCj4gIHsKPiAg CWNoYXIgKm9yaWdpbiwgYnVmZlsxMl07Cj4gQEAgLTc3Niw2ICs3NzgsNTcgQEAgb3V0Ogo+ICAJ cmV0dXJuIDA7Cj4gIAo+ICB9Cj4gKwo+ICtpbnQgc2VsZWN0X3BhdGhfaW9fZXJyX3NhbXBsZV90 aW1lKHN0cnVjdCBjb25maWcgKmNvbmYsIHN0cnVjdAo+IG11bHRpcGF0aCAqbXApCj4gK3sKPiAr CWNoYXIgKm9yaWdpbiwgYnVmZlsxMl07Cj4gKwo+ICsJbXBfc2V0X21wZShwYXRoX2lvX2Vycl9z YW1wbGVfdGltZSk7Cj4gKwltcF9zZXRfb3ZyKHBhdGhfaW9fZXJyX3NhbXBsZV90aW1lKTsKPiAr CW1wX3NldF9od2UocGF0aF9pb19lcnJfc2FtcGxlX3RpbWUpOwo+ICsJbXBfc2V0X2NvbmYocGF0 aF9pb19lcnJfc2FtcGxlX3RpbWUpOwo+ICsJbXBfc2V0X2RlZmF1bHQocGF0aF9pb19lcnJfc2Ft cGxlX3RpbWUsIERFRkFVTFRfRVJSX0NIRUNLUyk7Cj4gK291dDoKPiArCXByaW50X29mZl9pbnRf dW5kZWYoYnVmZiwgMTIsICZtcC0+cGF0aF9pb19lcnJfc2FtcGxlX3RpbWUpOwo+ICsJY29uZGxv ZygzLCAiJXM6IHBhdGhfaW9fZXJyX3NhbXBsZV90aW1lID0gJXMgJXMiLCBtcC0+YWxpYXMsIAo+ IGJ1ZmYsCj4gKwkJCW9yaWdpbik7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IHNlbGVj dF9wYXRoX2lvX2Vycl9yYXRlX3RocmVzaG9sZChzdHJ1Y3QgY29uZmlnICpjb25mLCBzdHJ1Y3QK PiBtdWx0aXBhdGggKm1wKQo+ICt7Cj4gKwljaGFyICpvcmlnaW4sIGJ1ZmZbMTJdOwo+ICsKPiAr CW1wX3NldF9tcGUocGF0aF9pb19lcnJfcmF0ZV90aHJlc2hvbGQpOwo+ICsJbXBfc2V0X292cihw YXRoX2lvX2Vycl9yYXRlX3RocmVzaG9sZCk7Cj4gKwltcF9zZXRfaHdlKHBhdGhfaW9fZXJyX3Jh dGVfdGhyZXNob2xkKTsKPiArCW1wX3NldF9jb25mKHBhdGhfaW9fZXJyX3JhdGVfdGhyZXNob2xk KTsKPiArCW1wX3NldF9kZWZhdWx0KHBhdGhfaW9fZXJyX3JhdGVfdGhyZXNob2xkLAo+IERFRkFV TFRfRVJSX0NIRUNLUyk7Cj4gK291dDoKPiArCXByaW50X29mZl9pbnRfdW5kZWYoYnVmZiwgMTIs ICZtcC0KPiA+cGF0aF9pb19lcnJfcmF0ZV90aHJlc2hvbGQpOwo+ICsJY29uZGxvZygzLCAiJXM6 IHBhdGhfaW9fZXJyX3JhdGVfdGhyZXNob2xkID0gJXMgJXMiLCBtcC0KPiA+YWxpYXMsIGJ1ZmYs Cj4gKwkJCW9yaWdpbik7Cj4gKwlyZXR1cm4gMDsKPiArCj4gK30KPiArCj4gK2ludCBzZWxlY3Rf cGF0aF9pb19lcnJfcmVjb3ZlcnlfdGltZShzdHJ1Y3QgY29uZmlnICpjb25mLCBzdHJ1Y3QKPiBt dWx0aXBhdGggKm1wKQo+ICt7Cj4gKwljaGFyICpvcmlnaW4sIGJ1ZmZbMTJdOwo+ICsKPiArCW1w X3NldF9tcGUocGF0aF9pb19lcnJfcmVjb3ZlcnlfdGltZSk7Cj4gKwltcF9zZXRfb3ZyKHBhdGhf aW9fZXJyX3JlY292ZXJ5X3RpbWUpOwo+ICsJbXBfc2V0X2h3ZShwYXRoX2lvX2Vycl9yZWNvdmVy eV90aW1lKTsKPiArCW1wX3NldF9jb25mKHBhdGhfaW9fZXJyX3JlY292ZXJ5X3RpbWUpOwo+ICsJ bXBfc2V0X2RlZmF1bHQocGF0aF9pb19lcnJfcmVjb3ZlcnlfdGltZSwKPiBERUZBVUxUX0VSUl9D SEVDS1MpOwo+ICtvdXQ6Cj4gKwlwcmludF9vZmZfaW50X3VuZGVmKGJ1ZmYsIDEyLCAmbXAtCj4g PnBhdGhfaW9fZXJyX3JlY292ZXJ5X3RpbWUpOwo+ICsJY29uZGxvZygzLCAiJXM6IHBhdGhfaW9f ZXJyX3JlY292ZXJ5X3RpbWUgPSAlcyAlcyIsIG1wLQo+ID5hbGlhcywgYnVmZiwKPiArCQkJb3Jp Z2luKTsKPiArCXJldHVybiAwOwo+ICsKPiArfQo+ICsKPiAgaW50IHNlbGVjdF9za2lwX2twYXJ0 eCAoc3RydWN0IGNvbmZpZyAqY29uZiwgc3RydWN0IG11bHRpcGF0aCAqIG1wKQo+ICB7Cj4gIAlj aGFyICpvcmlnaW47Cj4gZGlmZiAtLWdpdCBhL2xpYm11bHRpcGF0aC9wcm9wc2VsLmggYi9saWJt dWx0aXBhdGgvcHJvcHNlbC5oCj4gaW5kZXggZjhlOTZkODUuLjFiMmI1NzE0IDEwMDY0NAo+IC0t LSBhL2xpYm11bHRpcGF0aC9wcm9wc2VsLmgKPiArKysgYi9saWJtdWx0aXBhdGgvcHJvcHNlbC5o Cj4gQEAgLTI4LDYgKzI4LDkgQEAgaW50IHNlbGVjdF9tYXhfc2VjdG9yc19rYiAoc3RydWN0IGNv bmZpZyAqY29uZiwKPiBzdHJ1Y3QgbXVsdGlwYXRoICogbXApOwo+ICBpbnQgc2VsZWN0X3Nhbl9w YXRoX2Vycl9mb3JnZXRfcmF0ZShzdHJ1Y3QgY29uZmlnICpjb25mLCBzdHJ1Y3QKPiBtdWx0aXBh dGggKm1wKTsKPiAgaW50IHNlbGVjdF9zYW5fcGF0aF9lcnJfdGhyZXNob2xkKHN0cnVjdCBjb25m aWcgKmNvbmYsIHN0cnVjdAo+IG11bHRpcGF0aCAqbXApOwo+ICBpbnQgc2VsZWN0X3Nhbl9wYXRo X2Vycl9yZWNvdmVyeV90aW1lKHN0cnVjdCBjb25maWcgKmNvbmYsIHN0cnVjdAo+IG11bHRpcGF0 aCAqbXApOwo+ICtpbnQgc2VsZWN0X3BhdGhfaW9fZXJyX3NhbXBsZV90aW1lKHN0cnVjdCBjb25m aWcgKmNvbmYsIHN0cnVjdAo+IG11bHRpcGF0aCAqbXApOwo+ICtpbnQgc2VsZWN0X3BhdGhfaW9f ZXJyX3JhdGVfdGhyZXNob2xkKHN0cnVjdCBjb25maWcgKmNvbmYsIHN0cnVjdAo+IG11bHRpcGF0 aCAqbXApOwo+ICtpbnQgc2VsZWN0X3BhdGhfaW9fZXJyX3JlY292ZXJ5X3RpbWUoc3RydWN0IGNv bmZpZyAqY29uZiwgc3RydWN0Cj4gbXVsdGlwYXRoICptcCk7Cj4gIHZvaWQgcmVjb25jaWxlX2Zl YXR1cmVzX3dpdGhfb3B0aW9ucyhjb25zdCBjaGFyICppZCwgY2hhcgo+ICoqZmVhdHVyZXMsCj4g IAkJCQkgICAgIGludCogbm9fcGF0aF9yZXRyeSwKPiAgCQkJCSAgICAgaW50ICpyZXRhaW5faHdo YW5kbGVyKTsKPiBkaWZmIC0tZ2l0IGEvbGlibXVsdGlwYXRoL3N0cnVjdHMuaCBiL2xpYm11bHRp cGF0aC9zdHJ1Y3RzLmgKPiBpbmRleCA4ZWE5ODRkOS4uMWFiOGNiOWIgMTAwNjQ0Cj4gLS0tIGEv bGlibXVsdGlwYXRoL3N0cnVjdHMuaAo+ICsrKyBiL2xpYm11bHRpcGF0aC9zdHJ1Y3RzLmgKPiBA QCAtMjM1LDYgKzIzNSwxMCBAQCBzdHJ1Y3QgcGF0aCB7Cj4gIAl0aW1lX3QgZGlzX3JlaW5zdGF0 ZV90aW1lOwo+ICAJaW50IGRpc2FibGVfcmVpbnN0YXRlOwo+ICAJaW50IHNhbl9wYXRoX2Vycl9m b3JnZXRfcmF0ZTsKPiArCXRpbWVfdCBpb19lcnJfZGlzX3JlaW5zdGF0ZV90aW1lOwo+ICsJaW50 IGlvX2Vycl9kaXNhYmxlX3JlaW5zdGF0ZTsKPiArCWludCBpb19lcnJfcGF0aGZhaWxfY250Owo+ ICsJaW50IGlvX2Vycl9wYXRoZmFpbF9zdGFydHRpbWU7Cj4gIAkvKiBjb25maWdsZXQgcG9pbnRl cnMgKi8KPiAgCXN0cnVjdCBod2VudHJ5ICogaHdlOwo+ICB9Owo+IEBAIC0yNjksNiArMjczLDkg QEAgc3RydWN0IG11bHRpcGF0aCB7Cj4gIAlpbnQgc2FuX3BhdGhfZXJyX3RocmVzaG9sZDsKPiAg CWludCBzYW5fcGF0aF9lcnJfZm9yZ2V0X3JhdGU7Cj4gIAlpbnQgc2FuX3BhdGhfZXJyX3JlY292 ZXJ5X3RpbWU7Cj4gKwlpbnQgcGF0aF9pb19lcnJfc2FtcGxlX3RpbWU7Cj4gKwlpbnQgcGF0aF9p b19lcnJfcmF0ZV90aHJlc2hvbGQ7Cj4gKwlpbnQgcGF0aF9pb19lcnJfcmVjb3ZlcnlfdGltZTsK PiAgCWludCBza2lwX2twYXJ0eDsKPiAgCWludCBtYXhfc2VjdG9yc19rYjsKPiAgCWludCBmb3Jj ZV9yZWFkb25seTsKPiBkaWZmIC0tZ2l0IGEvbGlibXVsdGlwYXRoL3VldmVudC5jIGIvbGlibXVs dGlwYXRoL3VldmVudC5jCj4gaW5kZXggZWI0NGRhNTYuLjU2ZGUxMzIwIDEwMDY0NAo+IC0tLSBh L2xpYm11bHRpcGF0aC91ZXZlbnQuYwo+ICsrKyBiL2xpYm11bHRpcGF0aC91ZXZlbnQuYwo+IEBA IC05MDQsOCArOTA0LDggQEAgY2hhciAqdWV2ZW50X2dldF9kbV9uYW1lKHN0cnVjdCB1ZXZlbnQg KnVldikKPiAgCWludCBpOwo+ICAKPiAgCWZvciAoaSA9IDA7IHVldi0+ZW52cFtpXSAhPSBOVUxM OyBpKyspIHsKPiAtCQlpZiAoIXN0cm5jbXAodWV2LT5lbnZwW2ldLCAiRE1fTkFNRSIsIDYpICYm Cj4gLQkJICAgIHN0cmxlbih1ZXYtPmVudnBbaV0pID4gNykgewo+ICsJCWlmICghc3RybmNtcCh1 ZXYtPmVudnBbaV0sICJETV9OQU1FIiwgNykgJiYKPiArCQkgICAgc3RybGVuKHVldi0+ZW52cFtp XSkgPiA4KSB7Cj4gIAkJCXAgPSBNQUxMT0Moc3RybGVuKHVldi0+ZW52cFtpXSArIDgpICsgMSk7 Cj4gIAkJCXN0cmNweShwLCB1ZXYtPmVudnBbaV0gKyA4KTsKPiAgCQkJYnJlYWs7CgpUaGFua3Mg Zm9yIHNwb3R0aW5nLiBQbGVhc2UgcG9zdCB0aGlzIGFzIGEgc2VwYXJhdGUsIGJ1Z2ZpeCBwYXRj aC4KCgo+IEBAIC05MTMsMyArOTEzLDM1IEBAIGNoYXIgKnVldmVudF9nZXRfZG1fbmFtZShzdHJ1 Y3QgdWV2ZW50ICp1ZXYpCj4gIAl9Cj4gIAlyZXR1cm4gcDsKPiAgfQo+ICsKPiArY2hhciAqdWV2 ZW50X2dldF9kbV9wYXRoKHN0cnVjdCB1ZXZlbnQgKnVldikKPiArewo+ICsJY2hhciAqcCA9IE5V TEw7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyB1ZXYtPmVudnBbaV0gIT0gTlVMTDsg aSsrKSB7Cj4gKwkJaWYgKCFzdHJuY21wKHVldi0+ZW52cFtpXSwgIkRNX1BBVEgiLCA3KSAmJgo+ ICsJCSAgICBzdHJsZW4odWV2LT5lbnZwW2ldKSA+IDgpIHsKPiArCQkJcCA9IE1BTExPQyhzdHJs ZW4odWV2LT5lbnZwW2ldICsgOCkgKyAxKTsKPiArCQkJc3RyY3B5KHAsIHVldi0+ZW52cFtpXSAr IDgpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwlyZXR1cm4gcDsKPiArfQo+ICsKPiAr Y2hhciAqdWV2ZW50X2dldF9kbV9hY3Rpb24oc3RydWN0IHVldmVudCAqdWV2KQo+ICt7Cj4gKwlj aGFyICpwID0gTlVMTDsKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IHVldi0+ZW52cFtp XSAhPSBOVUxMOyBpKyspIHsKPiArCQlpZiAoIXN0cm5jbXAodWV2LT5lbnZwW2ldLCAiRE1fQUNU SU9OIiwgOSkgJiYKPiArCQkgICAgc3RybGVuKHVldi0+ZW52cFtpXSkgPiAxMCkgewo+ICsJCQlw ID0gTUFMTE9DKHN0cmxlbih1ZXYtPmVudnBbaV0gKyAxMCkgKyAxKTsKPiArCQkJc3RyY3B5KHAs IHVldi0+ZW52cFtpXSArIDEwKTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsJcmV0dXJu IHA7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvbGlibXVsdGlwYXRoL3VldmVudC5oIGIvbGlibXVsdGlw YXRoL3VldmVudC5oCj4gaW5kZXggNjFhNDIwNzEuLjZmNWFmMGFmIDEwMDY0NAo+IC0tLSBhL2xp Ym11bHRpcGF0aC91ZXZlbnQuaAo+ICsrKyBiL2xpYm11bHRpcGF0aC91ZXZlbnQuaAo+IEBAIC0z Nyw1ICszNyw3IEBAIGludCB1ZXZlbnRfZ2V0X21ham9yKHN0cnVjdCB1ZXZlbnQgKnVldik7Cj4g IGludCB1ZXZlbnRfZ2V0X21pbm9yKHN0cnVjdCB1ZXZlbnQgKnVldik7Cj4gIGludCB1ZXZlbnRf Z2V0X2Rpc2tfcm8oc3RydWN0IHVldmVudCAqdWV2KTsKPiAgY2hhciAqdWV2ZW50X2dldF9kbV9u YW1lKHN0cnVjdCB1ZXZlbnQgKnVldik7Cj4gK2NoYXIgKnVldmVudF9nZXRfZG1fcGF0aChzdHJ1 Y3QgdWV2ZW50ICp1ZXYpOwo+ICtjaGFyICp1ZXZlbnRfZ2V0X2RtX2FjdGlvbihzdHJ1Y3QgdWV2 ZW50ICp1ZXYpOwo+ICAKPiAgI2VuZGlmIC8qIF9VRVZFTlRfSCAqLwo+IGRpZmYgLS1naXQgYS9t dWx0aXBhdGgvbXVsdGlwYXRoLmNvbmYuNSBiL211bHRpcGF0aC9tdWx0aXBhdGguY29uZi41Cj4g aW5kZXggZDlhYzI3OWYuLmM0NDA2MTI4IDEwMDY0NAo+IC0tLSBhL211bHRpcGF0aC9tdWx0aXBh dGguY29uZi41Cj4gKysrIGIvbXVsdGlwYXRoL211bHRpcGF0aC5jb25mLjUKPiBAQCAtODQ5LDYg Kzg0OSw0OSBAQCBUaGUgZGVmYXVsdCBpczogXGZCbm9cZlIKPiAgLgo+ICAuCj4gIC5UUAo+ICsu QiBwYXRoX2lvX2Vycl9zYW1wbGVfdGltZQo+ICtPbmUgb2YgdGhlIHRocmVlIHBhcmFtZXRlcnMg b2Ygc3VwcG9ydGluZyBwYXRoIGNoZWNrIGJhc2VkIG9uCj4gYWNjb3VudGluZyBJTwo+ICtlcnJv ciBzdWNoIGFzIGludGVybWl0dGVudCBlcnJvci4gSWYgaXQgaXMgc2V0IHRvIGEgdmFsdWUgZ3Jl YXRlcgo+IHRoYW4gMCwKPiArd2hlbiBhIHBhdGggZmFpbCBldmVudCBvY2N1cnMgZHVlIHRvIGFu IElPIGVycm9yLCBtdWx0aXBhdGhkIHdpbGwKPiBlbnF1ZXVlIHRoaXMKPiArcGF0aCBpbnRvIGEg cXVldWUgb2Ygd2hpY2ggbWVtYmVycyBhcmUgc2VudCBhIGNvdXBsZSBvZiBjb250aW51b3VzCj4g ZGlyZWN0Cj4gK3JlYWRpbmcgYWlvIGF0IGEgZml4ZWQgc2FtcGxlIHJhdGUgb2YgMTBIWi4gVGhl IElPIGFjY291bnRpbmcKPiBwcm9jZXNzIGZvciBhCj4gK3BhdGggd2lsbCBsYXN0IGZvciBcZklw YXRoX2lvX2Vycl9zYW1wbGVfdGltZVxmUi4gSWYgdGhlIHJhdGUgb2YgSU8KPiBlcnJvciBvbgo+ ICthIHBhcnRpY3VsYXIgcGF0aCBpcyBncmVhdGVyIHRoYW4gdGhlCj4gXGZJcGF0aF9pb19lcnJf cmF0ZV90aHJlc2hvbGRcZlIsIHRoZW4KPiArdGhlIHBhdGggd2lsbCBub3QgcmVpbnN0YXRlIGZv ciBcZklwYXRoX2lvX2Vycl9yYXRlX3RocmVzaG9sZFxmUgo+IHNlY29uZHMgdW5sZXNzCj4gK3Ro ZXJlIGlzIG9ubHkgb25lIGFjdGl2ZSBwYXRoLgo+ICsuUlMKPiArLlRQCj4gK1RoZSBkZWZhdWx0 IGlzOiBcZkJub1xmUgo+ICsuUkUKPiArLgo+ICsuCj4gKy5UUAo+ICsuQiBwYXRoX2lvX2Vycl9y YXRlX3RocmVzaG9sZAo+ICtUaGUgZXJyb3IgcmF0ZSB0aHJlc2hvbGQgYXMgYSBwZXJtaWxsYWdl ICgxLzEwMDApLiBPbmUgb2YgdGhlIHRocmVlCj4gcGFyYW1ldGVycwo+ICtvZiBzdXBwb3J0aW5n IHBhdGggY2hlY2sgYmFzZWQgb24gYWNjb3VudGluZyBJTyBlcnJvciBzdWNoIGFzCj4gaW50ZXJt aXR0ZW50Cj4gK2Vycm9yLiBSZWZlciB0byBcZklwYXRoX2lvX2Vycl9zYW1wbGVfdGltZVxmUi4g SWYgdGhlIHJhdGUgb2YgSU8KPiBlcnJvcnMgb24gYQo+ICtwYXJ0aWN1bGFyIHBhdGggaXMgZ3Jl YXRlciB0aGFuIHRoaXMgcGFyYW1ldGVyLCB0aGVuIHRoZSBwYXRoIHdpbGwKPiBub3QKPiArcmVp bnN0YXRlIGZvciBcZklwYXRoX2lvX2Vycl9yYXRlX3RocmVzaG9sZFxmUiBzZWNvbmRzIHVubGVz cyB0aGVyZQo+IGlzIG9ubHkgb25lCj4gK2FjdGl2ZSBwYXRoLgo+ICsuUlMKPiArLlRQCj4gK1Ro ZSBkZWZhdWx0IGlzOiBcZkJub1xmUgo+ICsuUkUKPiArLgo+ICsuCj4gKy5UUAo+ICsuQiBwYXRo X2lvX2Vycl9yZWNvdmVyeV90aW1lCj4gK09uZSBvZiB0aGUgdGhyZWUgcGFyYW1ldGVycyBvZiBz dXBwb3J0aW5nIHBhdGggY2hlY2sgYmFzZWQgb24KPiBhY2NvdW50aW5nIElPCj4gK2Vycm9yIHN1 Y2ggYXMgaW50ZXJtaXR0ZW50IGVycm9yLiBSZWZlciB0bwo+IFxmSXBhdGhfaW9fZXJyX3NhbXBs ZV90aW1lXGZSLiBJZgo+ICt0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gYSBwb3NpdGl2ZSB2YWx1 ZSwgdGhlIHBhdGggd2hpY2ggaGFzIG1hbnkKPiBlcnJvciB3aWxsCj4gK25vdCByZWluc2F0ZSB0 aWxsIFxmSXBhdGhfaW9fZXJyX3JlY292ZXJ5X3RpbWVcZlIgc2Vjb25kcy4KPiArLlJTCj4gKy5U UAo+ICtUaGUgZGVmYXVsdCBpczogXGZCbm9cZlIKPiArLlJFCj4gKy4KPiArLgo+ICsuVFAKPiAg LkIgZGVsYXlfd2F0Y2hfY2hlY2tzCj4gIElmIHNldCB0byBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAw LCBtdWx0aXBhdGhkIHdpbGwgd2F0Y2ggcGF0aHMgdGhhdAo+IGhhdmUKPiAgcmVjZW50bHkgYmVj b21lIHZhbGlkIGZvciB0aGlzIG1hbnkgY2hlY2tzLiBJZiB0aGV5IGZhaWwgYWdhaW4gd2hpbGUK PiB0aGV5IGFyZQo+IGRpZmYgLS1naXQgYS9tdWx0aXBhdGhkL21haW4uYyBiL211bHRpcGF0aGQv bWFpbi5jCj4gaW5kZXggNGJlMmM1NzkuLjU3NThjZGQxIDEwMDY0NAo+IC0tLSBhL211bHRpcGF0 aGQvbWFpbi5jCj4gKysrIGIvbXVsdGlwYXRoZC9tYWluLmMKPiBAQCAtODQsNiArODQsNyBAQCBp bnQgdXhzb2NrX3RpbWVvdXQ7Cj4gICNpbmNsdWRlICJjbGlfaGFuZGxlcnMuaCIKPiAgI2luY2x1 ZGUgImxvY2suaCIKPiAgI2luY2x1ZGUgIndhaXRlci5oIgo+ICsjaW5jbHVkZSAiaW9fZXJyX3N0 YXQuaCIKPiAgI2luY2x1ZGUgInd3aWRzLmgiCj4gICNpbmNsdWRlICIuLi90aGlyZC1wYXJ0eS92 YWxncmluZC9kcmQuaCIKPiAgCj4gQEAgLTEwNTAsNiArMTA1MSw0MSBAQCBvdXQ6Cj4gIH0KPiAg Cj4gIHN0YXRpYyBpbnQKPiArdWV2X3BhdGhmYWlsX2NoZWNrKHN0cnVjdCB1ZXZlbnQgKnVldiwg c3RydWN0IHZlY3RvcnMgKnZlY3MpCj4gK3sKPiArCWNoYXIgKmFjdGlvbiA9IE5VTEwsICpkZXZ0 ID0gTlVMTDsKPiArCXN0cnVjdCBwYXRoICpwcDsKPiArCWludCByOwo+ICsKPiArCWFjdGlvbiA9 IHVldmVudF9nZXRfZG1fYWN0aW9uKHVldik7Cj4gKwlpZiAoIWFjdGlvbikKPiArCQlyZXR1cm4g MTsKPiArCWlmIChzdHJuY21wKGFjdGlvbiwgIlBBVEhfRkFJTEVEIiwgMTEpKQo+ICsJCWdvdG8g b3V0Owo+ICsJZGV2dCA9IHVldmVudF9nZXRfZG1fcGF0aCh1ZXYpOwo+ICsJaWYgKCFkZXZ0KSB7 Cj4gKwkJY29uZGxvZygzLCAiJXM6IE5vIERNX1BBVEggaW4gdWV2ZW50IiwgdWV2LT5rZXJuZWwp Owo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCXB0aHJlYWRfY2xlYW51cF9wdXNoKGNsZWFu dXBfbG9jaywgJnZlY3MtPmxvY2spOwo+ICsJbG9jaygmdmVjcy0+bG9jayk7Cj4gKwlwdGhyZWFk X3Rlc3RjYW5jZWwoKTsKPiArCXBwID0gZmluZF9wYXRoX2J5X2RldnQodmVjcy0+cGF0aHZlYywg ZGV2dCk7Cj4gKwlyID0gaW9fZXJyX3N0YXRfaGFuZGxlX3BhdGhmYWlsKHBwKTsKPiArCWxvY2tf Y2xlYW51cF9wb3AodmVjcy0+bG9jayk7Cj4gKwo+ICsJaWYgKHIpCj4gKwkJY29uZGxvZygzLCAi aW9fZXJyX3N0YXQ6IGZhaWxzIHRvIGVucXVldWUgJXMiLCBwcC0KPiA+ZGV2KTsKPiArCUZSRUUo ZGV2dCk7Cj4gKwlGUkVFKGFjdGlvbik7Cj4gKwlyZXR1cm4gMDsKPiArb3V0Ogo+ICsJRlJFRShh Y3Rpb24pOwo+ICsJcmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiAgbWFwX2Rpc2Nv dmVyeSAoc3RydWN0IHZlY3RvcnMgKiB2ZWNzKQo+ICB7Cj4gIAlzdHJ1Y3QgbXVsdGlwYXRoICog bXBwOwo+IEBAIC0xMTM0LDYgKzExNzAsNyBAQCB1ZXZfdHJpZ2dlciAoc3RydWN0IHVldmVudCAq IHVldiwgdm9pZCAqCj4gdHJpZ2dlcl9kYXRhKQo+ICAJaWYgKCFzdHJuY21wKHVldi0+a2VybmVs LCAiZG0tIiwgMykpIHsKPiAgCQlpZiAoIXN0cm5jbXAodWV2LT5hY3Rpb24sICJjaGFuZ2UiLCA2 KSkgewo+ICAJCQlyID0gdWV2X2FkZF9tYXAodWV2LCB2ZWNzKTsKPiArCQkJdWV2X3BhdGhmYWls X2NoZWNrKHVldiwgdmVjcyk7Cj4gIAkJCWdvdG8gb3V0Owo+ICAJCX0KPiAgCQlpZiAoIXN0cm5j bXAodWV2LT5hY3Rpb24sICJyZW1vdmUiLCA2KSkgewoKSXQncyBpbnRlcmVzdGluZyB0aGF0IHlv dSBoYXZlIGNob3NlbiB0byBhY3Qgb24ga2VybmVsIFBBVEhfRkFJTEVECmV2ZW50cyBoZXJlLiBU aGUgZXhpc3RpbmcgbXVsdGlwYXRoLXRvb2xzIGNvZGUgZG9lc24ndCBkbyB0aGF0LCBpdApyZWxp ZXMgb24gaXRzIGludGVybmFsIHN0YXRlIGluZm9ybWF0aW9uIChwYXRoaW5mbywgY2hlY2tlcnMp IGluc3RlYWQuCkkgYW0gbm90IHNheWluZyB0aGF0IHdoYXQgeW91J3JlIGRvaW5nIGlzIHdyb25n LCBidXQgaXQgZGVzZXJ2ZXMgc29tZQpleHBsYW5hdGlvbi4gCgpSZWdhcmRzCk1hcnRpbgoKCj4g QEAgLTE1NTMsNiArMTU5MCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfcGF0aF9yZWluc3RhdGVfc3Rh dGUoc3RydWN0Cj4gcGF0aCAqIHBwKSB7Cj4gIAkJY29uZGxvZygyLCAiJXMgOiBoaXQgZXJyb3Ig dGhyZXNob2xkLiBEZWxheWluZyBwYXRoCj4gcmVpbnN0YXRlbWVudCIsIHBwLT5kZXYpOwo+ICAJ CXBwLT5kaXNfcmVpbnN0YXRlX3RpbWUgPSBjdXJyX3RpbWUudHZfc2VjOwo+ICAJCXBwLT5kaXNh YmxlX3JlaW5zdGF0ZSA9IDE7Cj4gKwo+ICAJCXJldHVybiAxOwo+ICAJfSBlbHNlIHsKPiAgCQly ZXR1cm4gMDsKPiBAQCAtMTY4NCw2ICsxNzIyLDE2IEBAIGNoZWNrX3BhdGggKHN0cnVjdCB2ZWN0 b3JzICogdmVjcywgc3RydWN0IHBhdGgKPiAqIHBwLCBpbnQgdGlja3MpCj4gIAkJcmV0dXJuIDE7 Cj4gIAl9Cj4gIAo+ICsJaWYgKHBwLT5pb19lcnJfZGlzYWJsZV9yZWluc3RhdGUgJiYKPiBoaXRf aW9fZXJyX3JlY292ZXJ5X3RpbWUocHApKSB7Cj4gKwkJcHAtPnN0YXRlID0gUEFUSF9ERUxBWUVE Owo+ICsJCS8qCj4gKwkJICogdG8gcmVzY2hlZHVsZSBhcyBzb29uIGFzIHBvc3NpYmxlLHNvIHRo YXQgdGhpcwo+IHBhdGggY2FuCj4gKwkJICogYmUgcmVjb3ZlcmQgaW4gdGltZQo+ICsJCSAqLwo+ ICsJCXBwLT50aWNrID0gMTsKPiArCQlyZXR1cm4gMTsKPiArCX0KPiArCj4gIAlpZiAoKG5ld3N0 YXRlID09IFBBVEhfVVAgfHwgbmV3c3RhdGUgPT0gUEFUSF9HSE9TVCkgJiYKPiAgCSAgICAgcHAt PndhaXRfY2hlY2tzID4gMCkgewo+ICAJCWlmIChwcC0+bXBwLT5ucl9hY3RpdmUgPiAwKSB7Cj4g QEAgLTIzNzcsNiArMjQyNSw3IEBAIGNoaWxkICh2b2lkICogcGFyYW0pCj4gIAlzZXR1cF90aHJl YWRfYXR0cigmbWlzY19hdHRyLCA2NCAqIDEwMjQsIDApOwo+ICAJc2V0dXBfdGhyZWFkX2F0dHIo JnVldmVudF9hdHRyLCBERUZBVUxUX1VFVkVOVF9TVEFDS1NJWkUgKgo+IDEwMjQsIDApOwo+ICAJ c2V0dXBfdGhyZWFkX2F0dHIoJndhaXRlcl9hdHRyLCAzMiAqIDEwMjQsIDEpOwo+ICsJc2V0dXBf dGhyZWFkX2F0dHIoJmlvX2Vycl9zdGF0X2F0dHIsIDMyICogMTAyNCwgMSk7Cj4gIAo+ICAJaWYg KGxvZ3NpbmsgPT0gMSkgewo+ICAJCXNldHVwX3RocmVhZF9hdHRyKCZsb2dfYXR0ciwgNjQgKiAx MDI0LCAwKTsKPiBAQCAtMjQ5OSw2ICsyNTQ4LDEwIEBAIGNoaWxkICh2b2lkICogcGFyYW0pCj4g IAkvKgo+ICAJICogc3RhcnQgdGhyZWFkcwo+ICAJICovCj4gKwlyYyA9IHN0YXJ0X2lvX2Vycl9z dGF0X3RocmVhZCh2ZWNzKTsKPiArCWlmIChyYykKPiArCQlnb3RvIGZhaWxlZDsKPiArCj4gIAlp ZiAoKHJjID0gcHRocmVhZF9jcmVhdGUoJmNoZWNrX3RociwgJm1pc2NfYXR0ciwKPiBjaGVja2Vy bG9vcCwgdmVjcykpKSB7Cj4gIAkJY29uZGxvZygwLCJmYWlsZWQgdG8gY3JlYXRlIGNoZWNrZXIg bG9vcCB0aHJlYWQ6Cj4gJWQiLCByYyk7Cj4gIAkJZ290byBmYWlsZWQ7Cj4gQEAgLTI1NDgsNiAr MjYwMSw4IEBAIGNoaWxkICh2b2lkICogcGFyYW0pCj4gIAlyZW1vdmVfbWFwc19hbmRfc3RvcF93 YWl0ZXJzKHZlY3MpOwo+ICAJdW5sb2NrKCZ2ZWNzLT5sb2NrKTsKPiAgCj4gKwlzdG9wX2lvX2Vy cl9zdGF0X3RocmVhZCgpOwo+ICsKPiAgCXB0aHJlYWRfY2FuY2VsKGNoZWNrX3Rocik7Cj4gIAlw dGhyZWFkX2NhbmNlbCh1ZXZlbnRfdGhyKTsKPiAgCXB0aHJlYWRfY2FuY2VsKHV4bHNucl90aHIp Owo+IEBAIC0yNTkzLDYgKzI2NDgsNyBAQCBjaGlsZCAodm9pZCAqIHBhcmFtKQo+ICAJdWRldl91 bnJlZih1ZGV2KTsKPiAgCXVkZXYgPSBOVUxMOwo+ICAJcHRocmVhZF9hdHRyX2Rlc3Ryb3koJndh aXRlcl9hdHRyKTsKPiArCXB0aHJlYWRfYXR0cl9kZXN0cm95KCZpb19lcnJfc3RhdF9hdHRyKTsK PiAgI2lmZGVmIF9ERUJVR18KPiAgCWRiZ19mcmVlX2ZpbmFsKE5VTEwpOwo+ICAjZW5kaWYKCi0t IApEci4gTWFydGluIFdpbGNrIDxtd2lsY2tAc3VzZS5jb20+LCBUZWwuICs0OSAoMCk5MTEgNzQw NTMgMjEwNwpTVVNFIExpbnV4IEdtYkgsIEdGOiBGZWxpeCBJbWVuZMO2cmZmZXIsIEphbmUgU21p dGhhcmQsIEdyYWhhbSBOb3J0b24KSFJCIDIxMjg0IChBRyBOw7xybmJlcmcpCgotLQpkbS1kZXZl bCBtYWlsaW5nIGxpc3QKZG0tZGV2ZWxAcmVkaGF0LmNvbQpodHRwczovL3d3dy5yZWRoYXQuY29t L21haWxtYW4vbGlzdGluZm8vZG0tZGV2ZWw=