From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 1/3] drm/i915: Generalise GPU activity tracking Date: Thu, 31 Jan 2019 11:25:10 +0000 Message-ID: References: <20190130205039.20959-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 374AE6E68F for ; Thu, 31 Jan 2019 11:25:05 +0000 (UTC) In-Reply-To: <20190130205039.20959-1-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDMwLzAxLzIwMTkgMjA6NTAsIENocmlzIFdpbHNvbiB3cm90ZToKPiBXZSBjdXJyZW50bHkg dHJhY2sgR1BVIG1lbW9yeSB1c2FnZSBpbnNpZGUgVk1BLCBzdWNoIHRoYXQgd2UgbmV2ZXIKPiBy ZWxlYXNlIG1lbW9yeSB1c2VkIGJ5IHRoZSBHUFUgdW50aWwgYWZ0ZXIgaXQgaGFzIGZpbmlzaGVk IGFjY2Vzc2luZyBpdC4KPiBIb3dldmVyLCB3ZSBtYXkgd2FudCB0byB0cmFjayBvdGhlciByZXNv dXJjZXMgYXNpZGUgZnJvbSBWTUEsIG9yIHdlIG1heQo+IHdhbnQgdG8gc3BsaXQgYSBWTUEgaW50 byBtdWx0aXBsZSBpbmRlcGVuZGVudCByZWdpb25zIGFuZCB0cmFjayBlYWNoCj4gc2VwYXJhdGVs eS4gRm9yIHRoaXMgcHVycG9zZSwgZ2VuZXJhbGlzZSBvdXIgcmVxdWVzdCB0cmFja2luZyAoYWtp biB0bwo+IHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QpIHNvIHRoYXQgd2UgY2FuIGVtYmVkIGl0 IGludG8gb3RoZXIgb2JqZWN0cy4KPiAKCkNoYW5nZWxvZyB3aGVyZSBhcnQgdGhvdT8KCj4gU2ln bmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0t Cj4gSWRlYXMgZm9yIG5hbWVzPwo+IAo+IGk5MTVfYWN0aXZpdHlfdHJhY2tlcgo+IGk5MTVfYWN0 aXZlX29iamVjdAo+IGk5MTVfYWN0aXZlX3JlZmVyZW5jZSAvLyB0ZW1wdGluZwo+IGdwdV9yZWFk X2xvY2sgKGk5MTVfcmVhZF9sb2NrIHdhcyB0aGUgZmlyc3QgbmFtZSBJIHRyaWVkKQo+IAo+IEZ3 aXcsIGJ5IHRoZSBlbmQgdGhlcmUgd2lsbCBiZSBub3RoaW5nIGk5MTUgc3BlY2lmaWMgdG8gdGhp cyBzbyBwZXJoYXBzCj4gZG1hX3JlYWRfbG9jayBpc24ndCBzbyBiYWQ/Cj4gCj4gaTkxNV9hY3Rp dmVfcmVxdWVzdCAtPiBkbWFfcmVhZF9mZW5jZQo+IAo+IFBvc3NpYmlsaXRpZXMgdGhlcmUuCgpp OTE1X2FjdGl2ZV9yZWZlcmVuY2Ugc291bmRzIGdvb2QuCgppOTE1X2FjdGl2ZV9yZWZlcmVuY2Vf cmVmIHRob3VnaD8gOikgaTkxNV9hY3RpdmVfcmVmZXJlbmNlXwoKPiAtQ2hyaXMKPiAtLS0KPiAg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgNCArLQo+ ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmUuYyAgICAgICAgICAgIHwgMjI4ICsr KysrKysrKysrKysrKysrKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmUuaCAg ICAgICAgICAgIHwgIDYyICsrKysrCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2 ZV90eXBlcy5oICAgICAgfCAgMjYgKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5jICAgICAgICAgICB8ICAgMyArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92 bWEuYyAgICAgICAgICAgICAgIHwgMTczICsrKy0tLS0tLS0tLS0KPiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfdm1hLmggICAgICAgICAgICAgICB8ICAgOSArLQo+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfYWN0aXZlLmMgIHwgMTU4ICsrKysrKysrKysrKwo+ICAg Li4uL2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmggIHwgICAzICstCj4g ICA5IGZpbGVzIGNoYW5nZWQsIDUxMiBpbnNlcnRpb25zKCspLCAxNTQgZGVsZXRpb25zKC0pCj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmUuYwo+ ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZlLmgK PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZV90 eXBlcy5oCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL2k5MTVfYWN0aXZlLmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IDIxMGQwZTg3 NzdiNi4uMTc4N2UxMjk5YjFiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtNTcsNyAr NTcsOSBAQCBpOTE1LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBpOTE1X2RlYnVnZnMubyBpbnRlbF9w aXBlX2NyYy5vCj4gICBpOTE1LSQoQ09ORklHX1BFUkZfRVZFTlRTKSArPSBpOTE1X3BtdS5vCj4g ICAKPiAgICMgR0VNIGNvZGUKPiAtaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKPiAraTkx NS15ICs9IFwKPiArCSAgaTkxNV9hY3RpdmUubyBcCj4gKwkgIGk5MTVfY21kX3BhcnNlci5vIFwK PiAgIAkgIGk5MTVfZ2VtX2JhdGNoX3Bvb2wubyBcCj4gICAJICBpOTE1X2dlbV9jbGZsdXNoLm8g XAo+ICAgCSAgaTkxNV9nZW1fY29udGV4dC5vIFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9hY3RpdmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZl LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTE5NTBkNzc4 Y2FiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0 aXZlLmMKPiBAQCAtMCwwICsxLDIyOCBAQAo+ICsvKgo+ICsgKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogTUlUCj4gKyAqCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9u Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKyNpbmNsdWRlICJpOTE1X2Fj dGl2ZS5oIgo+ICsKPiArI2RlZmluZSBCS0wocmVmKSAoJihyZWYpLT5pOTE1LT5kcm0uc3RydWN0 X211dGV4KQo+ICsKPiArc3RydWN0IGFjdGl2ZV9ub2RlIHsKPiArCXN0cnVjdCBpOTE1X2dlbV9h Y3RpdmUgYmFzZTsKPiArCXN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmOwo+ICsJc3RydWN0IHJiX25v ZGUgbm9kZTsKPiArCXU2NCB0aW1lbGluZTsKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkCj4gK19f YWN0aXZlX3JldGlyZShzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZikKPiArewo+ICsJR0VNX0JVR19P TighcmVmLT5jb3VudCk7Cj4gKwlpZiAoIS0tcmVmLT5jb3VudCkKPiArCQlyZWYtPnJldGlyZShy ZWYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtub2RlX3JldGlyZShzdHJ1Y3QgaTkxNV9n ZW1fYWN0aXZlICpiYXNlLCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiArewo+ICsJX19hY3Rp dmVfcmV0aXJlKGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgYWN0aXZlX25vZGUsIGJhc2UpLT5y ZWYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtsYXN0X3JldGlyZShzdHJ1Y3QgaTkxNV9n ZW1fYWN0aXZlICpiYXNlLCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiArewo+ICsJX19hY3Rp dmVfcmV0aXJlKGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgaTkxNV9hY3RpdmUsIGxhc3QpKTsK PiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBpOTE1X2dlbV9hY3RpdmUgKgo+ICthY3RpdmVfaW5z dGFuY2Uoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYsIHU2NCBpZHgpCj4gK3sKPiArCXN0cnVjdCBh Y3RpdmVfbm9kZSAqbm9kZTsKPiArCXN0cnVjdCByYl9ub2RlICoqcCwgKnBhcmVudDsKPiArCXN0 cnVjdCBpOTE1X3JlcXVlc3QgKm9sZDsKPiArCj4gKwkvKgo+ICsJICogV2UgdHJhY2sgdGhlIG1v c3QgcmVjZW50bHkgdXNlZCB0aW1lbGluZSB0byBza2lwIGEgcmJ0cmVlIHNlYXJjaAo+ICsJICog Zm9yIHRoZSBjb21tb24gY2FzZSwgdW5kZXIgdHlwaWNhbCBsb2FkcyB3ZSBuZXZlciBuZWVkIHRo ZSByYnRyZWUKPiArCSAqIGF0IGFsbC4gV2UgY2FuIHJldXNlIHRoZSBsYXN0IHNsb3QgaWYgaXQg aXMgZW1wdHksIHRoYXQgaXMKPiArCSAqIGFmdGVyIHRoZSBwcmV2aW91cyBhY3Rpdml0eSBoYXMg YmVlbiByZXRpcmVkLCBvciBpZiBpdCBtYXRjaGVzIHRoZQo+ICsJICogY3VycmVudCB0aW1lbGlu ZS4KPiArCSAqCj4gKwkgKiBOb3RlIHRoYXQgd2UgYWxsb3cgdGhlIHRpbWVsaW5lIHRvIGJlIGFj dGl2ZSBzaW11bHRhbmVvdXNseSBpbgo+ICsJICogdGhlIHJidHJlZSBhbmQgdGhlIGxhc3QgY2Fj aGUuIFdlIGRvIHRoaXMgdG8gYXZvaWQgaGF2aW5nCj4gKwkgKiB0byBzZWFyY2ggYW5kIHJlcGxh Y2UgdGhlIHJidHJlZSBlbGVtZW50IGZvciBhIG5ldyB0aW1lbGluZSwgd2l0aAo+ICsJICogdGhl IGNvc3QgYmVpbmcgdGhhdCB3ZSBtdXN0IGJlIGF3YXJlIHRoYXQgdGhlIHJlZiBtYXkgYmUgcmV0 aXJlZAo+ICsJICogdHdpY2UgZm9yIHRoZSBzYW1lIHRpbWVsaW5lIChhcyB0aGUgb2xkZXIgcmJ0 cmVlIGVsZW1lbnQgd2lsbCBiZQo+ICsJICogcmV0aXJlZCBiZWZvcmUgdGhlIG5ldyByZXF1ZXN0 IGFkZGVkIHRvIGxhc3QpLgo+ICsJICovCj4gKwlvbGQgPSBpOTE1X2dlbV9hY3RpdmVfcmF3KCZy ZWYtPmxhc3QsIEJLTChyZWYpKTsKPiArCWlmICghb2xkIHx8IG9sZC0+ZmVuY2UuY29udGV4dCA9 PSBpZHgpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJLyogTW92ZSB0aGUgY3VycmVudGx5IGFjdGl2 ZSBmZW5jZSBpbnRvIHRoZSByYnRyZWUgKi8KPiArCWlkeCA9IG9sZC0+ZmVuY2UuY29udGV4dDsK PiArCj4gKwlwYXJlbnQgPSBOVUxMOwo+ICsJcCA9ICZyZWYtPnRyZWUucmJfbm9kZTsKPiArCXdo aWxlICgqcCkgewo+ICsJCXBhcmVudCA9ICpwOwo+ICsKPiArCQlub2RlID0gcmJfZW50cnkocGFy ZW50LCBzdHJ1Y3QgYWN0aXZlX25vZGUsIG5vZGUpOwo+ICsJCWlmIChub2RlLT50aW1lbGluZSA9 PSBpZHgpCj4gKwkJCWdvdG8gcmVwbGFjZTsKPiArCj4gKwkJaWYgKG5vZGUtPnRpbWVsaW5lIDwg aWR4KQo+ICsJCQlwID0gJnBhcmVudC0+cmJfcmlnaHQ7Cj4gKwkJZWxzZQo+ICsJCQlwID0gJnBh cmVudC0+cmJfbGVmdDsKPiArCX0KPiArCj4gKwlub2RlID0ga21hbGxvYyhzaXplb2YoKm5vZGUp LCBHRlBfS0VSTkVMKTsKPiArCj4gKwkvKiBrbWFsbG9jIG1heSByZXRpcmUgdGhlIHJlZi0+bGFz dCAodGhhbmtzIHNocmlua2VyKSEgKi8KPiArCWlmICh1bmxpa2VseSghaTkxNV9nZW1fYWN0aXZl X3JhdygmcmVmLT5sYXN0LCBCS0wocmVmKSkpKSB7Cj4gKwkJa2ZyZWUobm9kZSk7Cj4gKwkJZ290 byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKHVubGlrZWx5KCFub2RlKSkKPiArCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKPiArCj4gKwlpbml0X3JlcXVlc3RfYWN0aXZlKCZub2RlLT5iYXNlLCBu b2RlX3JldGlyZSk7Cj4gKwlub2RlLT5yZWYgPSByZWY7Cj4gKwlub2RlLT50aW1lbGluZSA9IGlk eDsKPiArCj4gKwlyYl9saW5rX25vZGUoJm5vZGUtPm5vZGUsIHBhcmVudCwgcCk7Cj4gKwlyYl9p bnNlcnRfY29sb3IoJm5vZGUtPm5vZGUsICZyZWYtPnRyZWUpOwo+ICsKPiArcmVwbGFjZToKPiAr CS8qCj4gKwkgKiBPdmVyd3JpdGUgdGhlIHByZXZpb3VzIGFjdGl2ZSBzbG90IGluIHRoZSByYnRy ZWUgd2l0aCBsYXN0LAo+ICsJICogbGVhdmluZyBsYXN0IHplcm9lZC4gSWYgdGhlIHByZXZpb3Vz IHNsb3QgaXMgc3RpbGwgYWN0aXZlLAo+ICsJICogd2UgbXVzdCBiZSBjYXJlZnVsIGFzIHdlIG5v dyBvbmx5IGV4cGVjdCB0byByZWNlaXZlIG9uZSByZXRpcmUKPiArCSAqIGNhbGxiYWNrIG5vdCB0 d28sIGFuZCBzbyBtdWNoIHVuZG8gdGhlIGFjdGl2ZSBjb3VudGluZyBmb3IgdGhlCj4gKwkgKiBv dmVyd3JpdHRlbiBzbG90Lgo+ICsJICovCj4gKwlpZiAoaTkxNV9nZW1fYWN0aXZlX2lzc2V0KCZu b2RlLT5iYXNlKSkgewo+ICsJCS8qIFJldGlyZSBvdXJzZWx2ZXMgZnJvbSB0aGUgb2xkIHJxLT5h Y3RpdmVfbGlzdCAqLwo+ICsJCV9fbGlzdF9kZWxfZW50cnkoJm5vZGUtPmJhc2UubGluayk7Cj4g KwkJcmVmLT5jb3VudC0tOwo+ICsJCUdFTV9CVUdfT04oIXJlZi0+Y291bnQpOwo+ICsJfQo+ICsJ R0VNX0JVR19PTihsaXN0X2VtcHR5KCZyZWYtPmxhc3QubGluaykpOwo+ICsJbGlzdF9yZXBsYWNl X2luaXQoJnJlZi0+bGFzdC5saW5rLCAmbm9kZS0+YmFzZS5saW5rKTsKPiArCW5vZGUtPmJhc2Uu cmVxdWVzdCA9IGZldGNoX2FuZF96ZXJvKCZyZWYtPmxhc3QucmVxdWVzdCk7Cj4gKwo+ICtvdXQ6 Cj4gKwlyZXR1cm4gJnJlZi0+bGFzdDsKPiArfQo+ICsKPiArdm9pZCBpOTE1X2FjdGl2ZV9pbml0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICsJCSAgICAgIHN0cnVjdCBpOTE1X2Fj dGl2ZSAqcmVmLAo+ICsJCSAgICAgIHZvaWQgKCpyZXRpcmUpKHN0cnVjdCBpOTE1X2FjdGl2ZSAq cmVmKSkKPiArewo+ICsJcmVmLT5pOTE1ID0gaTkxNTsKPiArCXJlZi0+cmV0aXJlID0gcmV0aXJl Owo+ICsJcmVmLT50cmVlID0gUkJfUk9PVDsKPiArCWluaXRfcmVxdWVzdF9hY3RpdmUoJnJlZi0+ bGFzdCwgbGFzdF9yZXRpcmUpOwo+ICsJcmVmLT5jb3VudCA9IDA7Cj4gK30KPiArCj4gK2ludCBp OTE1X2FjdGl2ZV9yZWYoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYsCj4gKwkJICAgIHU2NCB0aW1l bGluZSwKPiArCQkgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gK3sKPiArCXN0cnVjdCBp OTE1X2dlbV9hY3RpdmUgKmFjdGl2ZTsKPiArCj4gKwlhY3RpdmUgPSBhY3RpdmVfaW5zdGFuY2Uo cmVmLCB0aW1lbGluZSk7Cj4gKwlpZiAoSVNfRVJSKGFjdGl2ZSkpCj4gKwkJcmV0dXJuIFBUUl9F UlIoYWN0aXZlKTsKPiArCj4gKwlpZiAoIWk5MTVfZ2VtX2FjdGl2ZV9pc3NldChhY3RpdmUpKQo+ ICsJCXJlZi0+Y291bnQrKzsKPiArCWk5MTVfZ2VtX2FjdGl2ZV9zZXQoYWN0aXZlLCBycSk7Cj4g Kwo+ICsJR0VNX0JVR19PTighcmVmLT5jb3VudCk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr Ym9vbCBpOTE1X2FjdGl2ZV9hY3F1aXJlKHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmKQo+ICt7Cj4g Kwlsb2NrZGVwX2Fzc2VydF9oZWxkKEJLTChyZWYpKTsKPiArCXJldHVybiAhcmVmLT5jb3VudCsr Owo+ICt9Cj4gKwo+ICt2b2lkIGk5MTVfYWN0aXZlX3JlbGVhc2Uoc3RydWN0IGk5MTVfYWN0aXZl ICpyZWYpCj4gK3sKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoQktMKHJlZikpOwo+ICsJX19hY3Rp dmVfcmV0aXJlKHJlZik7Cj4gK30KPiArCj4gK2ludCBpOTE1X2FjdGl2ZV93YWl0KHN0cnVjdCBp OTE1X2FjdGl2ZSAqcmVmKQo+ICt7Cj4gKwlzdHJ1Y3QgYWN0aXZlX25vZGUgKml0LCAqbjsKPiAr CWludCByZXQgPSAwOwo+ICsKPiArCWlmIChpOTE1X2FjdGl2ZV9hY3F1aXJlKHJlZikpCj4gKwkJ Z290byBvdXRfcmVsZWFzZTsKPiArCj4gKwlyZXQgPSBpOTE1X2dlbV9hY3RpdmVfcmV0aXJlKCZy ZWYtPmxhc3QsIEJLTChyZWYpKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBvdXRfcmVsZWFzZTsK PiArCj4gKwlyYnRyZWVfcG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXQsIG4sICZyZWYt PnRyZWUsIG5vZGUpIHsKPiArCQlyZXQgPSBpOTE1X2dlbV9hY3RpdmVfcmV0aXJlKCZpdC0+YmFz ZSwgQktMKHJlZikpOwo+ICsJCWlmIChyZXQpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsKPiArb3V0 X3JlbGVhc2U6Cj4gKwlpOTE1X2FjdGl2ZV9yZWxlYXNlKHJlZik7Cj4gKwlyZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9faTkxNV9yZXF1ZXN0X2F3YWl0X2FjdGl2ZShzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSwKPiArCQkJCSAgICAgICBzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlICph Y3RpdmUpCj4gK3sKPiArCXN0cnVjdCBpOTE1X3JlcXVlc3QgKmJhcnJpZXIgPQo+ICsJCWk5MTVf Z2VtX2FjdGl2ZV9yYXcoYWN0aXZlLCAmcnEtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsK PiArCXJldHVybiBiYXJyaWVyID8gaTkxNV9yZXF1ZXN0X2F3YWl0X2RtYV9mZW5jZShycSwgJmJh cnJpZXItPmZlbmNlKSA6IDA7Cj4gK30KPiArCj4gK2ludCBpOTE1X3JlcXVlc3RfYXdhaXRfYWN0 aXZlKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCBzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZikKPiAr ewo+ICsJc3RydWN0IGFjdGl2ZV9ub2RlICppdCwgKm47Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJl dCA9IF9faTkxNV9yZXF1ZXN0X2F3YWl0X2FjdGl2ZShycSwgJnJlZi0+bGFzdCk7Cj4gKwlpZiAo cmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9l bnRyeV9zYWZlKGl0LCBuLCAmcmVmLT50cmVlLCBub2RlKSB7Cj4gKwkJcmV0ID0gX19pOTE1X3Jl cXVlc3RfYXdhaXRfYWN0aXZlKHJxLCAmaXQtPmJhc2UpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJl dHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV9h Y3RpdmVfZmluaShzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZikKPiArewo+ICsJc3RydWN0IGFjdGl2 ZV9ub2RlICppdCwgKm47Cj4gKwo+ICsJR0VNX0JVR19PTihpOTE1X2dlbV9hY3RpdmVfaXNzZXQo JnJlZi0+bGFzdCkpOwo+ICsKPiArCXJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2Fm ZShpdCwgbiwgJnJlZi0+dHJlZSwgbm9kZSkgewo+ICsJCUdFTV9CVUdfT04oaTkxNV9nZW1fYWN0 aXZlX2lzc2V0KCZpdC0+YmFzZSkpOwo+ICsJCWtmcmVlKGl0KTsKPiArCX0KPiArCXJlZi0+dHJl ZSA9IFJCX1JPT1Q7Cj4gK30KPiArCj4gKyNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9T RUxGVEVTVCkKPiArI2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X2FjdGl2ZS5jIgo+ICsjZW5kaWYK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmUuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZlLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uOGJkN2NmNzU3ZDFhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZlLmgKPiBAQCAtMCwwICsxLDYyIEBACj4gKy8q Cj4gKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPiArICoKPiArICogQ29weXJpZ2h0 IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICovCj4gKwo+ICsjaWZuZGVmIF9JOTE1X0FD VElWRV9IXwo+ICsjZGVmaW5lIF9JOTE1X0FDVElWRV9IXwo+ICsKPiArI2luY2x1ZGUgImk5MTVf YWN0aXZlX3R5cGVzLmgiCj4gKwo+ICsvKgo+ICsgKiBHUFUgYWN0aXZpdHkgdHJhY2tpbmcKPiAr ICoKPiArICogRWFjaCBzZXQgb2YgY29tbWFuZHMgc3VibWl0dGVkIHRvIHRoZSBHUFUgY29tcHJv bWlzZXMgYSBzaW5nbGUgcmVxdWVzdCB0aGF0Cj4gKyAqIHNpZ25hbHMgYSBmZW5jZSB1cG9uIGNv bXBsZXRpb24uIHN0cnVjdCBpOTE1X3JlcXVlc3QgY29tYmluZXMgdGhlCj4gKyAqIGNvbW1hbmQg c3VibWlzc2lvbiwgc2NoZWR1bGluZyBhbmQgZmVuY2Ugc2lnbmFsaW5nIHJvbGVzLiBJZiB3ZSB3 YW50IHRvIHNlZQo+ICsgKiBpZiBhIHBhcnRpY3VsYXIgdGFzayBpcyBjb21wbGV0ZSwgd2UgbmVl ZCB0byBncmFiIHRoZSBmZW5jZSAoc3RydWN0Cj4gKyAqIGk5MTVfcmVxdWVzdCkgZm9yIHRoYXQg dGFzayBhbmQgY2hlY2sgb3Igd2FpdCBmb3IgaXQgdG8gYmUgc2lnbmFsZWQuIE1vcmUKPiArICog b2Z0ZW4gdGhvdWdoIHdlIHdhbnQgdG8gdHJhY2sgdGhlIHN0YXR1cyBvZiBhIGJ1bmNoIG9mIHRh c2tzLCBmb3IgZXhhbXBsZQo+ICsgKiB0byB3YWl0IGZvciB0aGUgR1BVIHRvIGZpbmlzaCBhY2Nl c3Npbmcgc29tZSBtZW1vcnkgYWNyb3NzIGEgdmFyaWV0eSBvZgo+ICsgKiBkaWZmZXJlbnQgY29t bWFuZCBwaXBlbGluZXMgZnJvbSBkaWZmZXJlbnQgY2xpZW50cy4gV2UgY291bGQgY2hvb3NlIHRv Cj4gKyAqIHRyYWNrIGV2ZXJ5IHNpbmdsZSByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFz aywgYnV0IGtub3dpbmcgdGhhdAo+ICsgKiBlYWNoIHJlcXVlc3QgYmVsb25ncyB0byBhbiBvcmRl cmVkIHRpbWVsaW5lIChsYXRlciByZXF1ZXN0cyB3aXRoaW4gYQo+ICsgKiB0aW1lbGluZSBtdXN0 IHdhaXQgZm9yIGVhcmxpZXIgcmVxdWVzdHMpLCB3ZSBuZWVkIG9ubHkgdHJhY2sgdGhlCj4gKyAq IGxhdGVzdCByZXF1ZXN0IGluIGVhY2ggdGltZWxpbmUgdG8gZGV0ZXJtaW5lIHRoZSBvdmVyYWxs IHN0YXR1cyBvZiB0aGUKPiArICogdGFzay4KPiArICoKPiArICogc3RydWN0IGk5MTVfYWN0aXZl IHByb3ZpZGVzIHRoaXMgdHJhY2tpbmcgYWNyb3NzIHRpbWVsaW5lcy4gSXQgYnVpbGRzIGEKPiAr ICogY29tcG9zaXRlIHNoYXJlZC1mZW5jZSwgYW5kIGlzIHVwZGF0ZWQgYXMgbmV3IHdvcmsgaXMg c3VibWl0dGVkIHRvIHRoZSB0YXNrLAo+ICsgKiBmb3JtaW5nIGEgc25hcHNob3Qgb2YgdGhlIGN1 cnJlbnQgc3RhdHVzLiBJdCBzaG91bGQgYmUgZW1iZWRkZWQgaW50byB0aGUKPiArICogZGlmZmVy ZW50IHJlc291cmNlcyB0aGF0IG5lZWQgdG8gdHJhY2sgdGhlaXIgYXNzb2NpYXRlZCBHUFUgYWN0 aXZpdHkgdG8KPiArICogcHJvdmlkZSBhIGNhbGxiYWNrIHdoZW4gdGhhdCBHUFUgYWN0aXZpdHkg aGFzIGNlYXNlZCwgb3Igb3RoZXJ3aXNlIHRvCj4gKyAqIHByb3ZpZGUgYSBzZXJpYWxpc2F0aW9u IHBvaW50IGVpdGhlciBmb3IgcmVxdWVzdCBzdWJtaXNzaW9uIG9yIGZvciBDUFUKPiArICogc3lu Y2hyb25pc2F0aW9uLgo+ICsgKi8KPiArCj4gK3ZvaWQgaTkxNV9hY3RpdmVfaW5pdChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiArCQkgICAgICBzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJl ZiwKPiArCQkgICAgICB2b2lkICgqcmV0aXJlKShzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZikpOwo+ ICsKPiAraW50IGk5MTVfYWN0aXZlX3JlZihzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZiwKPiArCQkg ICAgdTY0IHRpbWVsaW5lLAo+ICsJCSAgICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSk7Cj4gKwo+ ICtpbnQgaTkxNV9hY3RpdmVfd2FpdChzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZik7Cj4gKwo+ICtp bnQgaTkxNV9yZXF1ZXN0X2F3YWl0X2FjdGl2ZShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAr CQkJICAgICAgc3RydWN0IGk5MTVfYWN0aXZlICpyZWYpOwo+ICsKPiArYm9vbCBpOTE1X2FjdGl2 ZV9hY3F1aXJlKHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmKTsKPiArdm9pZCBpOTE1X2FjdGl2ZV9y ZWxlYXNlKHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmKTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgYm9v bAo+ICtpOTE1X2FjdGl2ZV9pc19pZGxlKGNvbnN0IHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmKQo+ ICt7Cj4gKwlyZXR1cm4gIXJlZi0+Y291bnQ7Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV9hY3RpdmVf ZmluaShzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZik7Cj4gKwo+ICsjZW5kaWYgLyogX0k5MTVfQUNU SVZFX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZl X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZV90eXBlcy5oCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjQxMWU1MDJlZDhkZAo+IC0t LSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZV90eXBl cy5oCj4gQEAgLTAsMCArMSwyNiBAQAo+ICsvKgo+ICsgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogTUlUCj4gKyAqCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4g KyAqLwo+ICsKPiArI2lmbmRlZiBfSTkxNV9BQ1RJVkVfVFlQRVNfSF8KPiArI2RlZmluZSBfSTkx NV9BQ1RJVkVfVFlQRVNfSF8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KPiArCj4g KyNpbmNsdWRlICJpOTE1X3JlcXVlc3QuaCIKPiArCj4gK3N0cnVjdCBkcm1faTkxNV9wcml2YXRl Owo+ICsKPiArc3RydWN0IGk5MTVfYWN0aXZlIHsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1Owo+ICsKPiArCXN0cnVjdCByYl9yb290IHRyZWU7Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1f YWN0aXZlIGxhc3Q7Cj4gKwl1bnNpZ25lZCBpbnQgY291bnQ7Cj4gKwo+ICsJdm9pZCAoKnJldGly ZSkoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYpOwo+ICt9Owo+ICsKPiArI2VuZGlmIC8qIF9JOTE1 X0FDVElWRV9UWVBFU19IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gaW5k ZXggNDliMDA5OTZhMTVlLi5lNjI1NjU5YzAzYTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuYwo+IEBAIC0xOTE3LDE0ICsxOTE3LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV92 bWEgKnBkX3ZtYV9jcmVhdGUoc3RydWN0IGdlbjZfaHdfcHBndHQgKnBwZ3R0LCBpbnQgc2l6ZSkK PiAgIAlpZiAoIXZtYSkKPiAgIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gICAKPiArCWk5 MTVfYWN0aXZlX2luaXQoaTkxNSwgJnZtYS0+YWN0aXZlLCBOVUxMKTsKPiAgIAlpbml0X3JlcXVl c3RfYWN0aXZlKCZ2bWEtPmxhc3RfZmVuY2UsIE5VTEwpOwo+ICAgCj4gICAJdm1hLT52bSA9ICZn Z3R0LT52bTsKPiAgIAl2bWEtPm9wcyA9ICZwZF92bWFfb3BzOwo+ICAgCXZtYS0+cHJpdmF0ZSA9 IHBwZ3R0Owo+ICAgCj4gLQl2bWEtPmFjdGl2ZSA9IFJCX1JPT1Q7Cj4gLQo+ICAgCXZtYS0+c2l6 ZSA9IHNpemU7Cj4gICAJdm1hLT5mZW5jZV9zaXplID0gc2l6ZTsKPiAgIAl2bWEtPmZsYWdzID0g STkxNV9WTUFfR0dUVDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92 bWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmMKPiBpbmRleCBkODNiOGFkNWY4 NTkuLmQ0NzcyMDYxZTY0MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3ZtYS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYwo+IEBAIC02Mywy MiArNjMsMjMgQEAgc3RhdGljIHZvaWQgdm1hX3ByaW50X2FsbG9jYXRvcihzdHJ1Y3QgaTkxNV92 bWEgKnZtYSwgY29uc3QgY2hhciAqcmVhc29uKQo+ICAgCj4gICAjZW5kaWYKPiAgIAo+IC1zdHJ1 Y3QgaTkxNV92bWFfYWN0aXZlIHsKPiAtCXN0cnVjdCBpOTE1X2dlbV9hY3RpdmUgYmFzZTsKPiAt CXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+IC0Jc3RydWN0IHJiX25vZGUgbm9kZTsKPiAtCXU2NCB0 aW1lbGluZTsKPiAtfTsKPiArc3RhdGljIHZvaWQgb2JqX2J1bXBfbXJ1KHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKPiAgIAo+IC1zdGF0aWMgdm9pZAo+IC1fX2k5MTVf dm1hX3JldGlyZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEp Cj4gKwlzcGluX2xvY2soJmk5MTUtPm1tLm9ial9sb2NrKTsKPiArCWlmIChvYmotPmJpbmRfY291 bnQpCj4gKwkJbGlzdF9tb3ZlX3RhaWwoJm9iai0+bW0ubGluaywgJmk5MTUtPm1tLmJvdW5kX2xp c3QpOwo+ICsJc3Bpbl91bmxvY2soJmk5MTUtPm1tLm9ial9sb2NrKTsKPiArCj4gKwlvYmotPm1t LmRpcnR5ID0gdHJ1ZTsgLyogYmUgcGFyYW5vaWQgICovCj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IF9faTkxNV92bWFfcmV0aXJlKHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmKQo+ICAgewo+ICsJc3Ry dWN0IGk5MTVfdm1hICp2bWEgPSBjb250YWluZXJfb2YocmVmLCB0eXBlb2YoKnZtYSksIGFjdGl2 ZSk7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+b2JqOwo+ICAg Cj4gLQlHRU1fQlVHX09OKCFpOTE1X3ZtYV9pc19hY3RpdmUodm1hKSk7Cj4gLQlpZiAoLS12bWEt PmFjdGl2ZV9jb3VudCkKPiAtCQlyZXR1cm47Cj4gLQo+ICAgCUdFTV9CVUdfT04oIWk5MTVfZ2Vt X29iamVjdF9pc19hY3RpdmUob2JqKSk7Cj4gICAJaWYgKC0tb2JqLT5hY3RpdmVfY291bnQpCj4g ICAJCXJldHVybjsKPiBAQCAtOTAsMTYgKzkxLDEyIEBAIF9faTkxNV92bWFfcmV0aXJlKHN0cnVj dCBpOTE1X3ZtYSAqdm1hLCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAgIAkJcmVzZXJ2YXRp b25fb2JqZWN0X3VubG9jayhvYmotPnJlc3YpOwo+ICAgCX0KPiAgIAo+IC0JLyogQnVtcCBvdXIg cGxhY2Ugb24gdGhlIGJvdW5kIGxpc3QgdG8ga2VlcCBpdCByb3VnaGx5IGluIExSVSBvcmRlcgo+ ICsJLyoKPiArCSAqIEJ1bXAgb3VyIHBsYWNlIG9uIHRoZSBib3VuZCBsaXN0IHRvIGtlZXAgaXQg cm91Z2hseSBpbiBMUlUgb3JkZXIKPiAgIAkgKiBzbyB0aGF0IHdlIGRvbid0IHN0ZWFsIGZyb20g cmVjZW50bHkgdXNlZCBidXQgaW5hY3RpdmUgb2JqZWN0cwo+ICAgCSAqICh1bmxlc3Mgd2UgYXJl IGZvcmNlZCB0byBvZmMhKQo+ICAgCSAqLwo+IC0Jc3Bpbl9sb2NrKCZycS0+aTkxNS0+bW0ub2Jq X2xvY2spOwo+IC0JaWYgKG9iai0+YmluZF9jb3VudCkKPiAtCQlsaXN0X21vdmVfdGFpbCgmb2Jq LT5tbS5saW5rLCAmcnEtPmk5MTUtPm1tLmJvdW5kX2xpc3QpOwo+IC0Jc3Bpbl91bmxvY2soJnJx LT5pOTE1LT5tbS5vYmpfbG9jayk7Cj4gLQo+IC0Jb2JqLT5tbS5kaXJ0eSA9IHRydWU7IC8qIGJl IHBhcmFub2lkICAqLwo+ICsJb2JqX2J1bXBfbXJ1KG9iaik7Cj4gICAKPiAgIAlpZiAoaTkxNV9n ZW1fb2JqZWN0X2hhc19hY3RpdmVfcmVmZXJlbmNlKG9iaikpIHsKPiAgIAkJaTkxNV9nZW1fb2Jq ZWN0X2NsZWFyX2FjdGl2ZV9yZWZlcmVuY2Uob2JqKTsKPiBAQCAtMTA3LDIxICsxMDQsNiBAQCBf X2k5MTVfdm1hX3JldGlyZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEpCj4gICAJfQo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkCj4gLWk5MTVfdm1hX3JldGly ZShzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlICpiYXNlLCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkK PiAtewo+IC0Jc3RydWN0IGk5MTVfdm1hX2FjdGl2ZSAqYWN0aXZlID0KPiAtCQljb250YWluZXJf b2YoYmFzZSwgdHlwZW9mKCphY3RpdmUpLCBiYXNlKTsKPiAtCj4gLQlfX2k5MTVfdm1hX3JldGly ZShhY3RpdmUtPnZtYSwgcnEpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC1pOTE1X3ZtYV9s YXN0X3JldGlyZShzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlICpiYXNlLCBzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycSkKPiAtewo+IC0JX19pOTE1X3ZtYV9yZXRpcmUoY29udGFpbmVyX29mKGJhc2UsIHN0 cnVjdCBpOTE1X3ZtYSwgbGFzdF9hY3RpdmUpLCBycSk7Cj4gLX0KPiAtCj4gICBzdGF0aWMgc3Ry dWN0IGk5MTVfdm1hICoKPiAgIHZtYV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKPiAgIAkgICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiBAQCAtMTM3LDEw ICsxMTksOSBAQCB2bWFfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4g ICAJaWYgKHZtYSA9PSBOVUxMKQo+ICAgCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAgIAo+ IC0Jdm1hLT5hY3RpdmUgPSBSQl9ST09UOwo+IC0KPiAtCWluaXRfcmVxdWVzdF9hY3RpdmUoJnZt YS0+bGFzdF9hY3RpdmUsIGk5MTVfdm1hX2xhc3RfcmV0aXJlKTsKPiArCWk5MTVfYWN0aXZlX2lu aXQodm0tPmk5MTUsICZ2bWEtPmFjdGl2ZSwgX19pOTE1X3ZtYV9yZXRpcmUpOwo+ICAgCWluaXRf cmVxdWVzdF9hY3RpdmUoJnZtYS0+bGFzdF9mZW5jZSwgTlVMTCk7Cj4gKwo+ICAgCXZtYS0+dm0g PSB2bTsKPiAgIAl2bWEtPm9wcyA9ICZ2bS0+dm1hX29wczsKPiAgIAl2bWEtPm9iaiA9IG9iajsK PiBAQCAtODIzLDcgKzgwNCw2IEBAIHZvaWQgaTkxNV92bWFfcmVvcGVuKHN0cnVjdCBpOTE1X3Zt YSAqdm1hKQo+ICAgc3RhdGljIHZvaWQgX19pOTE1X3ZtYV9kZXN0cm95KHN0cnVjdCBpOTE1X3Zt YSAqdm1hKQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdm1hLT52 bS0+aTkxNTsKPiAtCXN0cnVjdCBpOTE1X3ZtYV9hY3RpdmUgKml0ZXIsICpuOwo+ICAgCj4gICAJ R0VNX0JVR19PTih2bWEtPm5vZGUuYWxsb2NhdGVkKTsKPiAgIAlHRU1fQlVHX09OKHZtYS0+ZmVu Y2UpOwo+IEBAIC04NDMsMTAgKzgyMyw3IEBAIHN0YXRpYyB2b2lkIF9faTkxNV92bWFfZGVzdHJv eShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIAkJc3Bpbl91bmxvY2soJm9iai0+dm1hLmxvY2sp Owo+ICAgCX0KPiAgIAo+IC0JcmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0 ZXIsIG4sICZ2bWEtPmFjdGl2ZSwgbm9kZSkgewo+IC0JCUdFTV9CVUdfT04oaTkxNV9nZW1fYWN0 aXZlX2lzc2V0KCZpdGVyLT5iYXNlKSk7Cj4gLQkJa2ZyZWUoaXRlcik7Cj4gLQl9Cj4gKwlpOTE1 X2FjdGl2ZV9maW5pKCZ2bWEtPmFjdGl2ZSk7Cj4gICAKPiAgIAlrbWVtX2NhY2hlX2ZyZWUoaTkx NS0+dm1hcywgdm1hKTsKPiAgIH0KPiBAQCAtOTMxLDEwNCArOTA4LDE1IEBAIHN0YXRpYyB2b2lk IGV4cG9ydF9mZW5jZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAgIAlyZXNlcnZhdGlvbl9vYmpl Y3RfdW5sb2NrKHJlc3YpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBzdHJ1Y3QgaTkxNV9nZW1fYWN0 aXZlICphY3RpdmVfaW5zdGFuY2Uoc3RydWN0IGk5MTVfdm1hICp2bWEsIHU2NCBpZHgpCj4gLXsK PiAtCXN0cnVjdCBpOTE1X3ZtYV9hY3RpdmUgKmFjdGl2ZTsKPiAtCXN0cnVjdCByYl9ub2RlICoq cCwgKnBhcmVudDsKPiAtCXN0cnVjdCBpOTE1X3JlcXVlc3QgKm9sZDsKPiAtCj4gLQkvKgo+IC0J ICogV2UgdHJhY2sgdGhlIG1vc3QgcmVjZW50bHkgdXNlZCB0aW1lbGluZSB0byBza2lwIGEgcmJ0 cmVlIHNlYXJjaAo+IC0JICogZm9yIHRoZSBjb21tb24gY2FzZSwgdW5kZXIgdHlwaWNhbCBsb2Fk cyB3ZSBuZXZlciBuZWVkIHRoZSByYnRyZWUKPiAtCSAqIGF0IGFsbC4gV2UgY2FuIHJldXNlIHRo ZSBsYXN0X2FjdGl2ZSBzbG90IGlmIGl0IGlzIGVtcHR5LCB0aGF0IGlzCj4gLQkgKiBhZnRlciB0 aGUgcHJldmlvdXMgYWN0aXZpdHkgaGFzIGJlZW4gcmV0aXJlZCwgb3IgaWYgdGhlIGFjdGl2ZQo+ IC0JICogbWF0Y2hlcyB0aGUgY3VycmVudCB0aW1lbGluZS4KPiAtCSAqCj4gLQkgKiBOb3RlIHRo YXQgd2UgYWxsb3cgdGhlIHRpbWVsaW5lIHRvIGJlIGFjdGl2ZSBzaW11bHRhbmVvdXNseSBpbgo+ IC0JICogdGhlIHJidHJlZSBhbmQgdGhlIGxhc3RfYWN0aXZlIGNhY2hlLiBXZSBkbyB0aGlzIHRv IGF2b2lkIGhhdmluZwo+IC0JICogdG8gc2VhcmNoIGFuZCByZXBsYWNlIHRoZSByYnRyZWUgZWxl bWVudCBmb3IgYSBuZXcgdGltZWxpbmUsIHdpdGgKPiAtCSAqIHRoZSBjb3N0IGJlaW5nIHRoYXQg d2UgbXVzdCBiZSBhd2FyZSB0aGF0IHRoZSB2bWEgbWF5IGJlIHJldGlyZWQKPiAtCSAqIHR3aWNl IGZvciB0aGUgc2FtZSB0aW1lbGluZSAoYXMgdGhlIG9sZGVyIHJidHJlZSBlbGVtZW50IHdpbGwg YmUKPiAtCSAqIHJldGlyZWQgYmVmb3JlIHRoZSBuZXcgcmVxdWVzdCBhZGRlZCB0byBsYXN0X2Fj dGl2ZSkuCj4gLQkgKi8KPiAtCW9sZCA9IGk5MTVfZ2VtX2FjdGl2ZV9yYXcoJnZtYS0+bGFzdF9h Y3RpdmUsCj4gLQkJCQkgICZ2bWEtPnZtLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCWlm ICghb2xkIHx8IG9sZC0+ZmVuY2UuY29udGV4dCA9PSBpZHgpCj4gLQkJZ290byBvdXQ7Cj4gLQo+ IC0JLyogTW92ZSB0aGUgY3VycmVudGx5IGFjdGl2ZSBmZW5jZSBpbnRvIHRoZSByYnRyZWUgKi8K PiAtCWlkeCA9IG9sZC0+ZmVuY2UuY29udGV4dDsKPiAtCj4gLQlwYXJlbnQgPSBOVUxMOwo+IC0J cCA9ICZ2bWEtPmFjdGl2ZS5yYl9ub2RlOwo+IC0Jd2hpbGUgKCpwKSB7Cj4gLQkJcGFyZW50ID0g KnA7Cj4gLQo+IC0JCWFjdGl2ZSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGk5MTVfdm1hX2Fj dGl2ZSwgbm9kZSk7Cj4gLQkJaWYgKGFjdGl2ZS0+dGltZWxpbmUgPT0gaWR4KQo+IC0JCQlnb3Rv IHJlcGxhY2U7Cj4gLQo+IC0JCWlmIChhY3RpdmUtPnRpbWVsaW5lIDwgaWR4KQo+IC0JCQlwID0g JnBhcmVudC0+cmJfcmlnaHQ7Cj4gLQkJZWxzZQo+IC0JCQlwID0gJnBhcmVudC0+cmJfbGVmdDsK PiAtCX0KPiAtCj4gLQlhY3RpdmUgPSBrbWFsbG9jKHNpemVvZigqYWN0aXZlKSwgR0ZQX0tFUk5F TCk7Cj4gLQo+IC0JLyoga21hbGxvYyBtYXkgcmV0aXJlIHRoZSB2bWEtPmxhc3RfYWN0aXZlIHJl cXVlc3QgKHRoYW5rcyBzaHJpbmtlcikhICovCj4gLQlpZiAodW5saWtlbHkoIWk5MTVfZ2VtX2Fj dGl2ZV9yYXcoJnZtYS0+bGFzdF9hY3RpdmUsCj4gLQkJCQkJICAmdm1hLT52bS0+aTkxNS0+ZHJt LnN0cnVjdF9tdXRleCkpKSB7Cj4gLQkJa2ZyZWUoYWN0aXZlKTsKPiAtCQlnb3RvIG91dDsKPiAt CX0KPiAtCj4gLQlpZiAodW5saWtlbHkoIWFjdGl2ZSkpCj4gLQkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7Cj4gLQo+IC0JaW5pdF9yZXF1ZXN0X2FjdGl2ZSgmYWN0aXZlLT5iYXNlLCBpOTE1X3Zt YV9yZXRpcmUpOwo+IC0JYWN0aXZlLT52bWEgPSB2bWE7Cj4gLQlhY3RpdmUtPnRpbWVsaW5lID0g aWR4Owo+IC0KPiAtCXJiX2xpbmtfbm9kZSgmYWN0aXZlLT5ub2RlLCBwYXJlbnQsIHApOwo+IC0J cmJfaW5zZXJ0X2NvbG9yKCZhY3RpdmUtPm5vZGUsICZ2bWEtPmFjdGl2ZSk7Cj4gLQo+IC1yZXBs YWNlOgo+IC0JLyoKPiAtCSAqIE92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgYWN0aXZlIHNsb3QgaW4g dGhlIHJidHJlZSB3aXRoIGxhc3RfYWN0aXZlLAo+IC0JICogbGVhdmluZyBsYXN0X2FjdGl2ZSB6 ZXJvZWQuIElmIHRoZSBwcmV2aW91cyBzbG90IGlzIHN0aWxsIGFjdGl2ZSwKPiAtCSAqIHdlIG11 c3QgYmUgY2FyZWZ1bCBhcyB3ZSBub3cgb25seSBleHBlY3QgdG8gcmVjZWl2ZSBvbmUgcmV0aXJl Cj4gLQkgKiBjYWxsYmFjayBub3QgdHdvLCBhbmQgc28gbXVjaCB1bmRvIHRoZSBhY3RpdmUgY291 bnRpbmcgZm9yIHRoZQo+IC0JICogb3ZlcndyaXR0ZW4gc2xvdC4KPiAtCSAqLwo+IC0JaWYgKGk5 MTVfZ2VtX2FjdGl2ZV9pc3NldCgmYWN0aXZlLT5iYXNlKSkgewo+IC0JCS8qIFJldGlyZSBvdXJz ZWx2ZXMgZnJvbSB0aGUgb2xkIHJxLT5hY3RpdmVfbGlzdCAqLwo+IC0JCV9fbGlzdF9kZWxfZW50 cnkoJmFjdGl2ZS0+YmFzZS5saW5rKTsKPiAtCQl2bWEtPmFjdGl2ZV9jb3VudC0tOwo+IC0JCUdF TV9CVUdfT04oIXZtYS0+YWN0aXZlX2NvdW50KTsKPiAtCX0KPiAtCUdFTV9CVUdfT04obGlzdF9l bXB0eSgmdm1hLT5sYXN0X2FjdGl2ZS5saW5rKSk7Cj4gLQlsaXN0X3JlcGxhY2VfaW5pdCgmdm1h LT5sYXN0X2FjdGl2ZS5saW5rLCAmYWN0aXZlLT5iYXNlLmxpbmspOwo+IC0JYWN0aXZlLT5iYXNl LnJlcXVlc3QgPSBmZXRjaF9hbmRfemVybygmdm1hLT5sYXN0X2FjdGl2ZS5yZXF1ZXN0KTsKPiAt Cj4gLW91dDoKPiAtCXJldHVybiAmdm1hLT5sYXN0X2FjdGl2ZTsKPiAtfQo+IC0KPiAgIGludCBp OTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAgIAkJCSAgICBz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgIAkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4g ICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+b2JqOwo+IC0J c3RydWN0IGk5MTVfZ2VtX2FjdGl2ZSAqYWN0aXZlOwo+ICAgCj4gICAJbG9ja2RlcF9hc3NlcnRf aGVsZCgmcnEtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCUdFTV9CVUdfT04oIWRybV9t bV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSk7Cj4gICAKPiAtCWFjdGl2ZSA9IGFjdGl2ZV9p bnN0YW5jZSh2bWEsIHJxLT5mZW5jZS5jb250ZXh0KTsKPiAtCWlmIChJU19FUlIoYWN0aXZlKSkK PiAtCQlyZXR1cm4gUFRSX0VSUihhY3RpdmUpOwo+IC0KPiAgIAkvKgo+ICAgCSAqIEFkZCBhIHJl ZmVyZW5jZSBpZiB3ZSdyZSBuZXdseSBlbnRlcmluZyB0aGUgYWN0aXZlIGxpc3QuCj4gICAJICog VGhlIG9yZGVyIGluIHdoaWNoIHdlIGFkZCBvcGVyYXRpb25zIHRvIHRoZSByZXRpcmVtZW50IHF1 ZXVlIGlzCj4gQEAgLTEwMzcsOSArOTI1LDE1IEBAIGludCBpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2 ZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAgIAkgKiBhZGQgdGhlIGFjdGl2ZSByZWZlcmVuY2Ug Zmlyc3QgYW5kIHF1ZXVlIGZvciBpdCB0byBiZSBkcm9wcGVkCj4gICAJICogKmxhc3QqLgo+ICAg CSAqLwo+IC0JaWYgKCFpOTE1X2dlbV9hY3RpdmVfaXNzZXQoYWN0aXZlKSAmJiAhdm1hLT5hY3Rp dmVfY291bnQrKykKPiArCWlmICghdm1hLT5hY3RpdmUuY291bnQpCj4gICAJCW9iai0+YWN0aXZl X2NvdW50Kys7Cj4gLQlpOTE1X2dlbV9hY3RpdmVfc2V0KGFjdGl2ZSwgcnEpOwo+ICsKPiArCWlm ICh1bmxpa2VseShpOTE1X2FjdGl2ZV9yZWYoJnZtYS0+YWN0aXZlLCBycS0+ZmVuY2UuY29udGV4 dCwgcnEpKSkgewo+ICsJCWlmICghdm1hLT5hY3RpdmUuY291bnQpCj4gKwkJCW9iai0+YWN0aXZl X2NvdW50LS07Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9CgpZb3UgZGlkIG5vdCBsaWtlIHN0 cmVhbWxpbmluZyB0aGUgb2JqLT5hY3RpdmVfY291bnQgZmlkZGxpbmcgYnkgbWFraW5nIAppOTE1 X2FjdGl2ZV9yZWYgcmV0dXJuIHRoZSBvbGQgcmVmIGNvdW50IG9yIGVycm9yPwoKPiArCj4gICAJ R0VNX0JVR19PTighaTkxNV92bWFfaXNfYWN0aXZlKHZtYSkpOwo+ICAgCUdFTV9CVUdfT04oIW9i ai0+YWN0aXZlX2NvdW50KTsKPiAgIAo+IEBAIC0xMDczLDggKzk2Nyw2IEBAIGludCBpOTE1X3Zt YV91bmJpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gICAJICovCj4gICAJbWlnaHRfc2xlZXAo KTsKPiAgIAlpZiAoaTkxNV92bWFfaXNfYWN0aXZlKHZtYSkpIHsKPiAtCQlzdHJ1Y3QgaTkxNV92 bWFfYWN0aXZlICphY3RpdmUsICpuOwo+IC0KPiAgIAkJLyoKPiAgIAkJICogV2hlbiBhIGNsb3Nl ZCBWTUEgaXMgcmV0aXJlZCwgaXQgaXMgdW5ib3VuZCAtIGVlay4KPiAgIAkJICogSW4gb3JkZXIg dG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHJlY3Vyc2l2ZWx5IGNsb3NlZCwKPiBAQCAtMTA5MCwx OSArOTgyLDEwIEBAIGludCBpOTE1X3ZtYV91bmJpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4g ICAJCSAqLwo+ICAgCQlfX2k5MTVfdm1hX3Bpbih2bWEpOwo+ICAgCj4gLQkJcmV0ID0gaTkxNV9n ZW1fYWN0aXZlX3JldGlyZSgmdm1hLT5sYXN0X2FjdGl2ZSwKPiAtCQkJCQkgICAgICZ2bWEtPnZt LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCQlyZXQgPSBpOTE1X2FjdGl2ZV93YWl0KCZ2 bWEtPmFjdGl2ZSk7Cj4gICAJCWlmIChyZXQpCj4gICAJCQlnb3RvIHVucGluOwo+ICAgCj4gLQkJ cmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9lbnRyeV9zYWZlKGFjdGl2ZSwgbiwKPiAtCQkJCQkJ ICAgICAmdm1hLT5hY3RpdmUsIG5vZGUpIHsKPiAtCQkJcmV0ID0gaTkxNV9nZW1fYWN0aXZlX3Jl dGlyZSgmYWN0aXZlLT5iYXNlLAo+IC0JCQkJCQkgICAgICZ2bWEtPnZtLT5pOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKPiAtCQkJaWYgKHJldCkKPiAtCQkJCWdvdG8gdW5waW47Cj4gLQkJfQo+IC0K PiAgIAkJcmV0ID0gaTkxNV9nZW1fYWN0aXZlX3JldGlyZSgmdm1hLT5sYXN0X2ZlbmNlLAo+ICAg CQkJCQkgICAgICZ2bWEtPnZtLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIHVucGluOgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV92bWEuaAo+IGluZGV4IDU3OTNhYmU1MDlhMi4uM2MwM2Q0NTY5NDgx IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmgKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5oCj4gQEAgLTM0LDYgKzM0LDcgQEAKPiAgICNp bmNsdWRlICJpOTE1X2dlbV9mZW5jZV9yZWcuaCIKPiAgICNpbmNsdWRlICJpOTE1X2dlbV9vYmpl Y3QuaCIKPiAgIAo+ICsjaW5jbHVkZSAiaTkxNV9hY3RpdmUuaCIKPiAgICNpbmNsdWRlICJpOTE1 X3JlcXVlc3QuaCIKPiAgIAo+ICAgZW51bSBpOTE1X2NhY2hlX2xldmVsOwo+IEBAIC0xMDgsOSAr MTA5LDcgQEAgc3RydWN0IGk5MTVfdm1hIHsKPiAgICNkZWZpbmUgSTkxNV9WTUFfVVNFUkZBVUxU CUJJVChJOTE1X1ZNQV9VU0VSRkFVTFRfQklUKQo+ICAgI2RlZmluZSBJOTE1X1ZNQV9HR1RUX1dS SVRFCUJJVCgxNSkKPiAgIAo+IC0JdW5zaWduZWQgaW50IGFjdGl2ZV9jb3VudDsKPiAtCXN0cnVj dCByYl9yb290IGFjdGl2ZTsKPiAtCXN0cnVjdCBpOTE1X2dlbV9hY3RpdmUgbGFzdF9hY3RpdmU7 Cj4gKwlzdHJ1Y3QgaTkxNV9hY3RpdmUgYWN0aXZlOwo+ICAgCXN0cnVjdCBpOTE1X2dlbV9hY3Rp dmUgbGFzdF9mZW5jZTsKPiAgIAo+ICAgCS8qKgo+IEBAIC0xNTQsOSArMTUzLDkgQEAgaTkxNV92 bWFfaW5zdGFuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIHZvaWQgaTkx NV92bWFfdW5waW5fYW5kX3JlbGVhc2Uoc3RydWN0IGk5MTVfdm1hICoqcF92bWEsIHVuc2lnbmVk IGludCBmbGFncyk7Cj4gICAjZGVmaW5lIEk5MTVfVk1BX1JFTEVBU0VfTUFQIEJJVCgwKQo+ICAg Cj4gLXN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X3ZtYV9pc19hY3RpdmUoc3RydWN0IGk5MTVfdm1h ICp2bWEpCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X3ZtYV9pc19hY3RpdmUoY29uc3Qgc3Ry dWN0IGk5MTVfdm1hICp2bWEpCj4gICB7Cj4gLQlyZXR1cm4gdm1hLT5hY3RpdmVfY291bnQ7Cj4g KwlyZXR1cm4gIWk5MTVfYWN0aXZlX2lzX2lkbGUoJnZtYS0+YWN0aXZlKTsKPiAgIH0KPiAgIAo+ ICAgaW50IF9fbXVzdF9jaGVjayBpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgaTkxNV92 bWEgKnZtYSwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5 MTVfYWN0aXZlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9hY3RpdmUu Ywo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5jMDVjYTM2Njcy OWEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L2k5MTVfYWN0aXZlLmMKPiBAQCAtMCwwICsxLDE1OCBAQAo+ICsvKgo+ICsgKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogTUlUCj4gKyAqCj4gKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENv cnBvcmF0aW9uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3QuaCIKPiAr Cj4gKyNpbmNsdWRlICJpZ3RfZmx1c2hfdGVzdC5oIgo+ICsjaW5jbHVkZSAibGliX3N3X2ZlbmNl LmgiCj4gKwo+ICtzdHJ1Y3QgbGl2ZV9hY3RpdmUgewo+ICsJc3RydWN0IGk5MTVfYWN0aXZlIGJh c2U7Cj4gKwlib29sIHJldGlyZWQ7Cj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2xpdmVfYWN0 aXZlX3JldGlyZShzdHJ1Y3QgaTkxNV9hY3RpdmUgKmJhc2UpCj4gK3sKPiArCXN0cnVjdCBsaXZl X2FjdGl2ZSAqYWN0aXZlID0gY29udGFpbmVyX29mKGJhc2UsIHR5cGVvZigqYWN0aXZlKSwgYmFz ZSk7Cj4gKwo+ICsJYWN0aXZlLT5yZXRpcmVkID0gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBfX2xpdmVfYWN0aXZlX3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICsJ CQkgICAgICAgc3RydWN0IGxpdmVfYWN0aXZlICphY3RpdmUpCj4gK3sKPiArCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCXN0cnVjdCBpOTE1X3N3X2ZlbmNlICpzdWJtaXQ7Cj4g KwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiArCXVuc2lnbmVkIGludCBjb3VudCA9IDA7Cj4g KwlpbnQgZXJyID0gMDsKPiArCj4gKwlpOTE1X2FjdGl2ZV9pbml0KGk5MTUsICZhY3RpdmUtPmJh c2UsIF9fbGl2ZV9hY3RpdmVfcmV0aXJlKTsKPiArCWFjdGl2ZS0+cmV0aXJlZCA9IGZhbHNlOwo+ ICsKPiArCWlmICghaTkxNV9hY3RpdmVfYWNxdWlyZSgmYWN0aXZlLT5iYXNlKSkgewo+ICsJCXBy X2VycigiRmlyc3QgaTkxNV9hY3RpdmVfYWNxdWlyZSBzaG91bGQgcmVwb3J0IGJlaW5nIGlkbGVc biIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXN1Ym1pdCA9IGhlYXBfZmVu Y2VfY3JlYXRlKEdGUF9LRVJORUwpOwo+ICsKPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5 MTUsIGlkKSB7Cj4gKwkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gKwo+ICsJCXJxID0gaTkx NV9yZXF1ZXN0X2FsbG9jKGVuZ2luZSwgaTkxNS0+a2VybmVsX2NvbnRleHQpOwo+ICsJCWlmIChJ U19FUlIocnEpKSB7Cj4gKwkJCWVyciA9IFBUUl9FUlIocnEpOwo+ICsJCQlicmVhazsKPiArCQl9 Cj4gKwo+ICsJCWVyciA9IGk5MTVfc3dfZmVuY2VfYXdhaXRfc3dfZmVuY2VfZ2ZwKCZycS0+c3Vi bWl0LAo+ICsJCQkJCQkgICAgICAgc3VibWl0LAo+ICsJCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7 Cj4gKwkJaWYgKGVyciA8IDApIHsKPiArCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgc3Vi bWlzc2lvbiBmZW5jZSFcbiIpOwo+ICsJCQlpOTE1X3JlcXVlc3RfYWRkKHJxKTsKPiArCQkJYnJl YWs7Cj4gKwkJfQo+ICsKPiArCQllcnIgPSBpOTE1X2FjdGl2ZV9yZWYoJmFjdGl2ZS0+YmFzZSwg cnEtPmZlbmNlLmNvbnRleHQsIHJxKTsKPiArCQlpZiAoZXJyKSB7Cj4gKwkJCXByX2VycigiRmFp bGVkIHRvIHRyYWNrIGFjdGl2ZSByZWYhXG4iKTsKPiArCQkJaTkxNV9yZXF1ZXN0X2FkZChycSk7 Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJaTkxNV9yZXF1ZXN0X2FkZChycSk7CgpJIGd1 ZXNzIHlvdSBjb3VsZCBjb25zb2xpZGF0ZSBhbGwgaTkxNV9yZXF1ZXN0X2FkZCdzIHRvIGEgc2lu Z2xlIAppbnN0YW5jZSBqdXN0IGFmdGVyIGVyciA9IGk5MTVfc3dfZmVuY2VfYXdhaXQuLgoKPiAr CQljb3VudCsrOwo+ICsJfQo+ICsKPiArCWk5MTVfYWN0aXZlX3JlbGVhc2UoJmFjdGl2ZS0+YmFz ZSk7Cj4gKwlpZiAoYWN0aXZlLT5yZXRpcmVkKSB7CgpJZiBycSBhbGxvY2F0aW9uIGZhaWxlZCB3 ZSBnZXQgaGVyZSBkdWUgaTkxNV9hY3RpdmVfcmVsZWFzZSByZXRpcmluZyB0aGUgCnRyYWNrZXIu Cgo+ICsJCXByX2VycigiaTkxNV9hY3RpdmUgcmV0aXJlZCBiZWZvcmUgc3VibWlzc2lvbiFcbiIp Owo+ICsJCWVyciA9IC1FSU5WQUw7Cj4gKwl9Cj4gKwlpZiAoYWN0aXZlLT5iYXNlLmNvdW50ICE9 IGNvdW50KSB7Cj4gKwkJcHJfZXJyKCJpOTE1X2FjdGl2ZSBub3QgdHJhY2tpbmcgYWxsIHJlcXVl c3RzLCBmb3VuZCAlZCwgZXhwZWN0ZWQgJWRcbiIsCj4gKwkJICAgICAgIGFjdGl2ZS0+YmFzZS5j b3VudCwgY291bnQpOwo+ICsJCWVyciA9IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaTkxNV9zd19m ZW5jZV9jb21taXQoc3VibWl0KTsKPiArCWhlYXBfZmVuY2VfcHV0KHN1Ym1pdCk7Cj4gKwo+ICsJ cmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludCBsaXZlX2FjdGl2ZV93YWl0KHZvaWQg KmFyZykKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7Cj4gKwlz dHJ1Y3QgbGl2ZV9hY3RpdmUgYWN0aXZlOwo+ICsJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4g KwlpbnQgZXJyOwo+ICsKPiArCS8qIENoZWNrIHRoYXQgd2UgZ2V0IGEgY2FsbGJhY2sgd2hlbiBy ZXF1ZXN0cyByZXRpcmUgdXBvbiB3YWl0aW5nICovCj4gKwo+ICsJbXV0ZXhfbG9jaygmaTkxNS0+ ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkx NSk7Cj4gKwo+ICsJZXJyID0gX19saXZlX2FjdGl2ZV9zZXR1cChpOTE1LCAmYWN0aXZlKTsKPiAr Cj4gKwlpOTE1X2FjdGl2ZV93YWl0KCZhY3RpdmUuYmFzZSk7Cj4gKwlpZiAoIWFjdGl2ZS5yZXRp cmVkKSB7Cj4gKwkJcHJfZXJyKCJpOTE1X2FjdGl2ZSBub3QgcmV0aXJlZCBhZnRlciB3YWl0aW5n IVxuIik7Cj4gKwkJZXJyID0gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlpOTE1X2FjdGl2ZV9maW5p KCZhY3RpdmUuYmFzZSk7Cj4gKwlpZiAoaWd0X2ZsdXNoX3Rlc3QoaTkxNSwgSTkxNV9XQUlUX0xP Q0tFRCkpCj4gKwkJZXJyID0gLUVJTzsKPiArCj4gKwlpbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1 LCB3YWtlcmVmKTsKPiArCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g KwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGxpdmVfYWN0aXZlX3JldGlyZSh2 b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOwo+ ICsJc3RydWN0IGxpdmVfYWN0aXZlIGFjdGl2ZTsKPiArCWludGVsX3dha2VyZWZfdCB3YWtlcmVm Owo+ICsJaW50IGVycjsKPiArCj4gKwkvKiBDaGVjayB0aGF0IHdlIGdldCBhIGNhbGxiYWNrIHdo ZW4gcmVxdWVzdHMgYXJlIGluZGlyZWN0bHkgcmV0aXJlZCAqLwo+ICsKPiArCW11dGV4X2xvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1f Z2V0KGk5MTUpOwo+ICsKPiArCWVyciA9IF9fbGl2ZV9hY3RpdmVfc2V0dXAoaTkxNSwgJmFjdGl2 ZSk7Cj4gKwo+ICsJLyogd2FpdHMgZm9yICYgcmV0aXJlcyBhbGwgcmVxdWVzdHMgKi8KPiArCWlm IChpZ3RfZmx1c2hfdGVzdChpOTE1LCBJOTE1X1dBSVRfTE9DS0VEKSkKPiArCQllcnIgPSAtRUlP Owo+ICsKPiArCWlmICghYWN0aXZlLnJldGlyZWQpIHsKPiArCQlwcl9lcnIoImk5MTVfYWN0aXZl IG5vdCByZXRpcmVkIGFmdGVyIGZsdXNoaW5nIVxuIik7Cj4gKwkJZXJyID0gLUVJTlZBTDsKPiAr CX0KPiArCj4gKwlpOTE1X2FjdGl2ZV9maW5pKCZhY3RpdmUuYmFzZSk7Cj4gKwlpbnRlbF9ydW50 aW1lX3BtX3B1dChpOTE1LCB3YWtlcmVmKTsKPiArCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0 cnVjdF9tdXRleCk7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtpbnQgaTkxNV9hY3RpdmVf bGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCXN0 YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7Cj4gKwkJU1VCVEVTVChs aXZlX2FjdGl2ZV93YWl0KSwKPiArCQlTVUJURVNUKGxpdmVfYWN0aXZlX3JldGlyZSksCj4gKwl9 Owo+ICsKPiArCWlmIChpOTE1X3Rlcm1pbmFsbHlfd2VkZ2VkKCZpOTE1LT5ncHVfZXJyb3IpKQo+ ICsJCXJldHVybiAwOwo+ICsKPiArCXJldHVybiBpOTE1X3N1YnRlc3RzKHRlc3RzLCBpOTE1KTsK PiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9s aXZlX3NlbGZ0ZXN0cy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2 ZV9zZWxmdGVzdHMuaAo+IGluZGV4IDc2YjRmODdmYzg1My4uNmQ3NjY5MjVhZDA0IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3Rz LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0 ZXN0cy5oCj4gQEAgLTEyLDggKzEyLDkgQEAKPiAgIHNlbGZ0ZXN0KHNhbml0eWNoZWNrLCBpOTE1 X2xpdmVfc2FuaXR5Y2hlY2spIC8qIGtlZXAgZmlyc3QgKGlndCBzZWxmY2hlY2spICovCj4gICBz ZWxmdGVzdCh1bmNvcmUsIGludGVsX3VuY29yZV9saXZlX3NlbGZ0ZXN0cykKPiAgIHNlbGZ0ZXN0 KHdvcmthcm91bmRzLCBpbnRlbF93b3JrYXJvdW5kc19saXZlX3NlbGZ0ZXN0cykKPiAtc2VsZnRl c3QocmVxdWVzdHMsIGk5MTVfcmVxdWVzdF9saXZlX3NlbGZ0ZXN0cykKPiAgIHNlbGZ0ZXN0KHRp bWVsaW5lcywgaTkxNV90aW1lbGluZV9saXZlX3NlbGZ0ZXN0cykKPiArc2VsZnRlc3QocmVxdWVz dHMsIGk5MTVfcmVxdWVzdF9saXZlX3NlbGZ0ZXN0cykKPiArc2VsZnRlc3QoYWN0aXZlLCBpOTE1 X2FjdGl2ZV9saXZlX3NlbGZ0ZXN0cykKPiAgIHNlbGZ0ZXN0KG9iamVjdHMsIGk5MTVfZ2VtX29i amVjdF9saXZlX3NlbGZ0ZXN0cykKPiAgIHNlbGZ0ZXN0KGRtYWJ1ZiwgaTkxNV9nZW1fZG1hYnVm X2xpdmVfc2VsZnRlc3RzKQo+ICAgc2VsZnRlc3QoY29oZXJlbmN5LCBpOTE1X2dlbV9jb2hlcmVu Y3lfbGl2ZV9zZWxmdGVzdHMpCj4gCgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=