From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 13/21] drm/i915: Pull i915_vma_pin under the vm->mutex Date: Thu, 19 Sep 2019 14:37:01 +0100 Message-ID: References: <20190902040303.14195-1-chris@chris-wilson.co.uk> <20190902040303.14195-13-chris@chris-wilson.co.uk> <156874659243.5729.22780974956498892@skylake-alporthouse-com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id B34A16F508 for ; Thu, 19 Sep 2019 13:37:05 +0000 (UTC) In-Reply-To: <156874659243.5729.22780974956498892@skylake-alporthouse-com> 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 Ck9uIDE3LzA5LzIwMTkgMTk6NTYsIENocmlzIFdpbHNvbiB3cm90ZToKPiBRdW90aW5nIFR2cnRr byBVcnN1bGluICgyMDE5LTA5LTE3IDEzOjM3OjU1KQo+PiBPbiAwMi8wOS8yMDE5IDA1OjAyLCBD aHJpcyBXaWxzb24gd3JvdGU6Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX21tYW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9t bWFuLmMKPj4+IGluZGV4IDgyZGIyYjc4MzEyMy4uOWE4YzMwN2M1YWViIDEwMDY0NAo+Pj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYwo+Pj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYwo+Pj4gQEAgLTI1MSwxNiArMjUx LDYgQEAgdm1fZmF1bHRfdCBpOTE1X2dlbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKPj4+ ICAgICAgICAgICAgICAgIGdvdG8gZXJyX3JwbTsKPj4+ICAgICAgICB9Cj4+PiAgICAKPj4+IC0g ICAgIHJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7Cj4+PiAtICAgICBp ZiAocmV0KQo+Pj4gLSAgICAgICAgICAgICBnb3RvIGVycl9yZXNldDsKPj4+IC0KPj4+IC0gICAg IC8qIEFjY2VzcyB0byBzbm9vcGFibGUgcGFnZXMgdGhyb3VnaCB0aGUgR1RUIGlzIGluY29oZXJl bnQuICovCj4+PiAtICAgICBpZiAob2JqLT5jYWNoZV9sZXZlbCAhPSBJOTE1X0NBQ0hFX05PTkUg JiYgIUhBU19MTEMoaTkxNSkpIHsKPj4+IC0gICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKPj4+ IC0gICAgICAgICAgICAgZ290byBlcnJfdW5sb2NrOwo+Pj4gLSAgICAgfQo+Pj4gLQo+Pj4gICAg ICAgIC8qIE5vdyBwaW4gaXQgaW50byB0aGUgR1RUIGFzIG5lZWRlZCAqLwo+Pj4gICAgICAgIHZt YSA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3BpbihvYmosIE5VTEwsIDAsIDAsCj4+PiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBJTl9NQVBQQUJMRSB8Cj4+PiBAQCAtMjkz LDcgKzI4MywxMyBAQCB2bV9mYXVsdF90IGk5MTVfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAq dm1mKQo+Pj4gICAgICAgIH0KPj4+ICAgICAgICBpZiAoSVNfRVJSKHZtYSkpIHsKPj4+ICAgICAg ICAgICAgICAgIHJldCA9IFBUUl9FUlIodm1hKTsKPj4+IC0gICAgICAgICAgICAgZ290byBlcnJf dW5sb2NrOwo+Pj4gKyAgICAgICAgICAgICBnb3RvIGVycl9yZXNldDsKPj4+ICsgICAgIH0KPj4+ ICsKPj4+ICsgICAgIC8qIEFjY2VzcyB0byBzbm9vcGFibGUgcGFnZXMgdGhyb3VnaCB0aGUgR1RU IGlzIGluY29oZXJlbnQuICovCj4+PiArICAgICBpZiAob2JqLT5jYWNoZV9sZXZlbCAhPSBJOTE1 X0NBQ0hFX05PTkUgJiYgIUhBU19MTEMoaTkxNSkpIHsKPj4+ICsgICAgICAgICAgICAgcmV0ID0g LUVGQVVMVDsKPj4+ICsgICAgICAgICAgICAgZ290byBlcnJfdW5waW47Cj4+PiAgICAgICAgfQo+ Pgo+PiBXaHkgaGF2ZSB5b3UgbW92ZWQgdGhpcyBjaGVjayB0byBhZnRlciBwaW5uaW5nPwo+IAo+ IFNpbmNlIHdlJ3ZlIGRyb3BwZWQgdGhlIGxvY2sgYXJvdW5kIHRoaXMgY2hlY2ssIHRoZSBpbnRl bnQgaXMgdG8gdXNlIHRoZQo+IHBpbiBhcyBhIGd1YXJhbnRlZSB0aGF0IHRoZSB2bWEgY2Fubm90 IGJlIGNoYW5nZWQuIFdoYXQgd2UgYWN0dWFsbHkgd2FudAo+IGhlcmUsIGZvciBjbGFyaXR5LCBp cyB2bWEtPmNhY2hlX2xldmVsLgo+IAo+Pj4gICAgCj4+PiAgICAgICAgcmV0ID0gaTkxNV92bWFf cGluX2ZlbmNlKHZtYSk7Cj4+PiBAQCAtMzIxLDE0ICszMTcsMTIgQEAgdm1fZmF1bHRfdCBpOTE1 X2dlbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKPj4+ICAgICAgICAgICAgICAgIGludGVs X3dha2VyZWZfYXV0bygmaTkxNS0+Z2d0dC51c2VyZmF1bHRfd2FrZXJlZiwKPj4+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtc2Vjc190b19qaWZmaWVzX3RpbWVvdXQoQ09ORklH X0RSTV9JOTE1X1VTRVJGQVVMVF9BVVRPU1VTUEVORCkpOwo+Pj4gICAgCj4+PiAtICAgICBpOTE1 X3ZtYV9zZXRfZ2d0dF93cml0ZSh2bWEpOwo+Pj4gLQo+Pj4gKyAgICAgaWYgKHdyaXRlKQo+Pj4g KyAgICAgICAgICAgICBpOTE1X3ZtYV9zZXRfZ2d0dF93cml0ZSh2bWEpOwo+Pgo+PiBOb2lzZSBm b3Igd2hhdCB0aGlzIHBhdGNoIGlzIGNvbmNlcm5lZD8KPiAKPiBZZWFoLCBJIGhhZCB0byBzdGFy ZSBhdCBhbiBpbmNvcnJlY3QgX19zZXRfYml0KEdHVFRfV1JJVEUpIGZvciB0b28gbG9uZy4KPiAK Pj4KPj4+ICAgIGVycl9mZW5jZToKPj4+ICAgICAgICBpOTE1X3ZtYV91bnBpbl9mZW5jZSh2bWEp Owo+Pj4gICAgZXJyX3VucGluOgo+Pj4gICAgICAgIF9faTkxNV92bWFfdW5waW4odm1hKTsKPj4+ IC1lcnJfdW5sb2NrOgo+Pj4gLSAgICAgbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7 Cj4+PiAgICBlcnJfcmVzZXQ6Cj4+PiAgICAgICAgaW50ZWxfZ3RfcmVzZXRfdW5sb2NrKGdndHQt PnZtLmd0LCBzcmN1KTsKPj4+ICAgIGVycl9ycG06Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX29iamVjdC5jCj4+PiBpbmRleCAwZWY2MGRhZTIzYTcuLmRiZjliZTlhNzlm NCAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmpl Y3QuYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5j Cj4+PiBAQCAtMTU1LDIxICsxNTUsMzAgQEAgc3RhdGljIHZvaWQgX19pOTE1X2dlbV9mcmVlX29i amVjdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4+PiAgICAKPj4+ICAgICAgICB3 YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoJmk5MTUtPnJ1bnRpbWVfcG0pOwo+Pj4gICAg ICAgIGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2JqLCBvbiwgZnJlZWQsIGZyZWVkKSB7Cj4+ PiAtICAgICAgICAgICAgIHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCAqdm47Cj4+PiAtCj4+PiAgICAg ICAgICAgICAgICB0cmFjZV9pOTE1X2dlbV9vYmplY3RfZGVzdHJveShvYmopOwo+Pj4gICAgCj4+ PiAtICAgICAgICAgICAgIG11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+Pj4g LQo+Pj4gLSAgICAgICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodm1hLCB2biwgJm9i ai0+dm1hLmxpc3QsIG9ial9saW5rKSB7Cj4+PiAtICAgICAgICAgICAgICAgICAgICAgR0VNX0JV R19PTihpOTE1X3ZtYV9pc19hY3RpdmUodm1hKSk7Cj4+PiAtICAgICAgICAgICAgICAgICAgICAg YXRvbWljX2FuZCh+STkxNV9WTUFfUElOX01BU0ssICZ2bWEtPmZsYWdzKTsKPj4+IC0gICAgICAg ICAgICAgICAgICAgICBpOTE1X3ZtYV9kZXN0cm95KHZtYSk7Cj4+PiArICAgICAgICAgICAgIGlm ICghbGlzdF9lbXB0eSgmb2JqLT52bWEubGlzdCkpIHsKPj4+ICsgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAv Kgo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgdm1hIGtlZXBzIGFu IG9iamVjdCByZWZlcmVuY2Ugd2hpbGUKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgKiBpdCBp cyBhY3RpdmUsIHNvIGl0ICpzaG91bGQqIG5vdCBzbGVlcCB3aGlsZSB3ZQo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAqIGRlc3Ryb3kgaXQuIE91ciBkZWJ1ZyBjb2RlIGVycnMgaW5zaXRzIGl0 ICptaWdodCouCj4+PiArICAgICAgICAgICAgICAgICAgICAgICogRm9yIHRoZSBtb21lbnQsIHBs YXkgYWxvbmcuCj4+PiArICAgICAgICAgICAgICAgICAgICAgICovCj4+PiArICAgICAgICAgICAg ICAgICAgICAgc3Bpbl9sb2NrKCZvYmotPnZtYS5sb2NrKTsKPj4+ICsgICAgICAgICAgICAgICAg ICAgICB3aGlsZSAoKHZtYSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmb2JqLT52bWEubGlz dCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgaTkxNV92bWEsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqX2xpbmspKSkKPj4KPj4gV2hh dCBpcyB0aGUgcG9pbnQgb2YgaGF2aW5nIGEgd2hpbGUgbG9vcCBpbnNpZGUgdG9wLWxldmVsIGlm ICFsaXN0X2VtcHR5Cj4+IGNoZWNrPyBMb29rcyB0aGVvcmV0aWNhbGx5IHJhY3ksIGFuZCBldmVu IGlmIHRoYXQgaXMgaXJyZWxldmFudCwgaXQKPj4gd291bGQgYmUgY2xlYXJlciB0byBqdXN0IGRv IHRoZSB3aGlsZSBsb29wLgo+IAo+IFdlIGNhbid0IGFkZCBtb3JlIHZtYSB0byB0aGUgb2JqZWN0 LCBhcyB0aGVyZSBhcmUgbm8gbW9yZSByZWZzIHRvIHRoZQo+IG9iamVjdC4gVGhlIGNoYWxsZW5n ZSBpcyBpbiBkcm9wcGluZyB0aGUgbGlua3MuIEluIHRoZSBlbmQgaXQgbWFrZXMgbm8KPiBkaWZm ZXJlbmNlLCBpdCdzIGFuIHVubG9ja2VkIGNvbXBhcmUgYmVmb3JlIHRoZSBzcGlubG9jayAoYW5k IHVnbHkKPiBsb29wKS4KCkkgd2FzIHNpbXBseSB0aGlua2luZyBpdCB3b3VsZCBiZSBvbmUgaW5k ZW50IGxldmVsIGxlc3MgZm9yIHJlYWRhYmlsaXR5IApib3RoIG9uIHRoZSB2aXN1YWwgYW5kIGNv bmNlcHR1YWwgbGV2ZWwuIEJ1dCBkb2Vzbid0IG1hdHRlciBodWdlbHkuCgo+IAo+Pj4gICAgICAg IEdFTV9CVUdfT04oIWRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSk7Cj4+PiAgICAK Pj4+ICsgICAgIEdFTV9CVUdfT04odm1hLT5wYWdlcyk7Cj4+PiAgICAgICAgdm1hLT5wYWdlcyA9 IG9iai0+bW0ucGFnZXM7Cj4+PiArICAgICBhdG9taWNfc2V0KCZ2bWEtPnBhZ2VzX2NvdW50LCBJ OTE1X1ZNQV9QQUdFU19BQ1RJVkUpOwo+Pgo+PiBXaGF0IGlzIEk5MTVfVk1BX1BBR0VTX0FDVElW RSB1c2VkIGZvcj8gUGlubmVkPyBIYXMgcGFnZXM/Cj4gCj4gSXQncyBhIGNvdW50ZXIgZm9yIHRo ZSBudW1iZXIgb2YgdW5pcXVlIGJpbmRzIGFzIG9wcG9zZWQgdG8gY2FsbGVycwo+IG1lcmVseSBh Y3F1aXJpbmcgdGhlIHBhZ2VzIHByaW9yIHRvIGJpbmRpbmc7IHNvIHRoYXQgd2UgY2FuIGJhbGFu Y2UKPiB2bWFfdW5iaW5kX3BhZ2VzKCkgd2hpY2ggaXMgY2FsbGVkIG9uY2UgKGk5MTVfdm1hX3Vu YmluZCkgYnV0Cj4gaTkxNV92bWFfYmluZCgpIGNhbiBiZSBjYWxsZWQgZm9yIGJvdGggUElOX0dM T0JBTCBhbmQgUElOX1VTRVIuCj4gCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX3RpbGluZy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX3RpbGluZy5jCj4+PiBpbmRleCBjYTBjMmY0NTE3NDIuLmI5Y2ZhZTBlNDQzNSAxMDA2NDQK Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90aWxpbmcuYwo+Pj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3RpbGluZy5jCj4+PiBAQCAt MTgxLDIyICsxODEsMjUgQEAgc3RhdGljIGludAo+Pj4gICAgaTkxNV9nZW1fb2JqZWN0X2ZlbmNl X3ByZXBhcmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPj4+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHRpbGluZ19tb2RlLCB1bnNpZ25lZCBpbnQgc3RyaWRlKQo+ Pj4gICAgewo+Pj4gKyAgICAgc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9ICZ0b19pOTE1KG9iai0+ YmFzZS5kZXYpLT5nZ3R0Owo+Pj4gICAgICAgIHN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+Pj4gLSAg ICAgaW50IHJldDsKPj4+ICsgICAgIGludCByZXQgPSAwOwo+Pj4gICAgCj4+PiAgICAgICAgaWYg KHRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUpCj4+PiAgICAgICAgICAgICAgICByZXR1 cm4gMDsKPj4+ICAgIAo+Pj4gKyAgICAgbXV0ZXhfbG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+Pj4g ICAgICAgIGZvcl9lYWNoX2dndHRfdm1hKHZtYSwgb2JqKSB7Cj4+PiAgICAgICAgICAgICAgICBp ZiAoaTkxNV92bWFfZmVuY2VfcHJlcGFyZSh2bWEsIHRpbGluZ19tb2RlLCBzdHJpZGUpKQo+Pj4g ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4KPj4gdm1hX2ZlbmNlX3ByZXBhcmUg ZG9lc24ndCBuZWVkIHRvIGJlIHVuZGVyIG11dGV4LCBidXQgaXQncyBtdWNoIGVhc2llcgo+PiBm b3IgdGhpcyBsb29wLCB5ZXM/Cj4gCj4gZmVuY2VfcHJlcGFyZSBpcyBqdXN0IGEgc2ltcGxlIHBy ZWRpY2F0ZSwgc28gbm8uIFdoYXQgd2UgZG8gbmVlZCB0aG91Z2gKPiBpcyB0byBwdWxsIGl0IHVu ZGVyIHRoZSBvYmplY3QtbG9jayBzbyB0aGF0IHdlIGRvbid0IHByZXBhcmUgZm9yIG9uZQo+IHRp bGluZyBhbmQgYmluZCBhbm90aGVyLiBIbW0uCj4gCj4+PiBAQCAtMzMzLDcgKzM0NCwxMSBAQCBz dGF0aWMgaW50IGlndF9jaGVja19wYWdlX3NpemVzKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+Pj4g ICAgICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdm1hLT52bS0+aTkxNTsKPj4+ ICAgICAgICB1bnNpZ25lZCBpbnQgc3VwcG9ydGVkID0gSU5URUxfSU5GTyhpOTE1KS0+cGFnZV9z aXplczsKPj4+ICAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdm1hLT5v Ymo7Cj4+PiAtICAgICBpbnQgZXJyID0gMDsKPj4+ICsgICAgIGludCBlcnI7Cj4+PiArCj4+PiAr ICAgICBlcnIgPSBpOTE1X2FjdGl2ZV93YWl0KCZ2bWEtPmFjdGl2ZSk7Cj4+PiArICAgICBpZiAo ZXJyKQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gZXJyOwo+Pgo+PiBUb3VjaGVkIHVwb24gdGhp cyBpbiB0aGUgcHJldmlvdXMgZW1haWwsIGJ1dCBJIHRoaW5rIHdlIG5lZWQgdG8gcHV0IHNvbWUK Pj4gY2xlYXIgbm90ZXMgaW4gd3JpdGluZywgaW4gc29tZSBnb29kIHBsYWNlLCByZWdhcmRpbmcg d2hlbiBjYWxsZXJzIG5lZWQKPj4gdG8gZXhwbGljaXRseSBkbyB0aGlzIGFuZCB3aGVuIG5vdC4g RG9uJ3Qga25vdyB3aGVyZSB0aG91Z2guLiBjb21taXQKPj4gbWVzc2FnZSBpcyB3ZWFrLiBNYXli ZSBrZXJuZWwgZG9jIG5leHQgdG8gaTkxNV92bWFfdW5iaW5kPwo+IAo+IFRoZSBjb3VwbGUgb2Yg cGxhY2VzIHRoYXQgY2FyZSBhcmUgdGhlIGV4Y2VwdGlvbi4gVGhvdWdoIEknbQo+IGNvbnRlbXBs YXRpbmcgdXNpbmcgdGhlIGFzeW5jIGJpbmQgdG8gY2lyY3VtdmVudCB0aGUgc3RvcF9tYWNoaW5l KCkuLi4KPiAKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRl c3RzL2k5MTVfZ2VtX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVz dHMvaTkxNV9nZW1fY29udGV4dC5jCj4+PiBpbmRleCBkYTU0YTcxOGM3MTIuLmFhNjdjMDJiYTk4 YyAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkx NV9nZW1fY29udGV4dC5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRl c3RzL2k5MTVfZ2VtX2NvbnRleHQuYwo+Pj4gQEAgLTc0NywxMCArNzQ3LDcgQEAgZW1pdF9ycGNz X3F1ZXJ5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4+PiAgICAgICAgaWYgKGVy cikKPj4+ICAgICAgICAgICAgICAgIGdvdG8gc2tpcF9yZXF1ZXN0Owo+Pj4gICAgCj4+PiAtICAg ICBpOTE1X3ZtYV91bnBpbihiYXRjaCk7Cj4+PiAtICAgICBpOTE1X3ZtYV9jbG9zZShiYXRjaCk7 Cj4+PiAtICAgICBpOTE1X3ZtYV9wdXQoYmF0Y2gpOwo+Pj4gLQo+Pj4gKyAgICAgaTkxNV92bWFf dW5waW5fYW5kX3JlbGVhc2UoJmJhdGNoLCAwKTsKPj4KPj4gSXMgdGhpcyBjb25zb2xpZGF0aW9u IGVuYWJsZWQgYnkgdGhpcyBwYXRjaCBvciB3YXMgb3RoZXJ3aXNlIHBvc3NpYmxlPwo+IAo+IEF0 IHRoaXMgcG9pbnQsIGl0IGlzIGRlZHVwbGljYXRpb24uIFdoYXQgcHJvbXB0ZWQgdGhlIGNoYW5n ZSB3ZXJlIGEgZmV3Cj4gY2FsbGVycyBtaXhlZCB1cCB0aGUgcG90ZW50aWFsIHVzZSBhZnRlciBm cmVlIG9mIHZtYS0+b2JqLgo+IAo+PiBTb21ldGhpbmcgcmluZ3MgZmFtaWxpYXIgYWJvdXQgc29t ZSBwcm9ibGVtIHdpdGgKPj4gaTkxNV92bWFfdW5waW5fYW5kX3JlbGVhc2UgYnV0IEkgY2FuJ3Qg cmVtZW1iZXIgd2hhdC4uIFNlbWFudGljcyBhcmUgYQo+PiBiaXQgd2VpcmQgdGhvdWdoLi4gd2hl cmVhcyBwYXR0ZXJuIGJlZm9yZSB3YXMgdG8gaTkxNV92bWFfcHV0IGFmdGVyCj4+IGluc3RhbnRp YXRpbmcgYSB2bWEsIG5vdyBpdCBpcyB1bnBpbl9hbmRfcmVsZWFzZS4uIHJlbGVhc2UgYmVpbmcg YSBiaXQKPj4gb2YgYW4gb2RkIHRlcm0gaW4gdGhpcyBzcGFjZS4gVGhlcmUgd2FzL2lzIG5vIHN5 bW1ldHJ5IHdpdGggZ2V0L3B1dAo+PiBhbnl3YXkgc28gSSBndWVzcyBpdCdzIGZpbmUuCj4gCj4g SXQnbGwgYmUgYmFjayB0byBpOTE1X3ZtYV9wdXQoKSBldmVudHVhbGx5Lgo+IAo+Pj4gK3ZvaWQg aTkxNV9hY3RpdmVfc2V0X2V4Y2x1c2l2ZShzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZiwgc3RydWN0 IGRtYV9mZW5jZSAqZikKPj4+ICt7Cj4+PiArICAgICBHRU1fQlVHX09OKGk5MTVfYWN0aXZlX2lz X2lkbGUocmVmKSk7Cj4+PiArCj4+PiArICAgICBkbWFfZmVuY2VfZ2V0KGYpOwo+Pj4gKwo+Pj4g KyAgICAgcmN1X3JlYWRfbG9jaygpOwo+Pj4gKyAgICAgaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihy ZWYtPmV4Y2wpKSB7Cj4+PiArICAgICAgICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKm9sZDsKPj4+ ICsKPj4+ICsgICAgICAgICAgICAgb2xkID0gZG1hX2ZlbmNlX2dldF9yY3Vfc2FmZSgmcmVmLT5l eGNsKTsKPj4+ICsgICAgICAgICAgICAgaWYgKG9sZCkgewo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgIGlmIChkbWFfZmVuY2VfcmVtb3ZlX2NhbGxiYWNrKG9sZCwgJnJlZi0+ZXhjbF9jYikpCj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWNfZGVjKCZyZWYtPmNvdW50KTsK Pj4+ICsgICAgICAgICAgICAgICAgICAgICBkbWFfZmVuY2VfcHV0KG9sZCk7Cj4+PiArICAgICAg ICAgICAgIH0KPj4KPj4gUHV0IHNvbWUgY29tbWVudGFyeSBpbiBkZXNjcmliaW5nIHRoZSBidXNp bmVzcyBkb25lIHdpdGggcmVmLT5leGNsIGFuZAo+PiBjYWxsYmFja3MuIE9yIHRoaXMgZ29lcyBh d2F5IGxhdGVyPwo+IAo+IHZvaWQgaTkxNV9hY3RpdmVfc2V0X2V4Y2x1c2l2ZShzdHJ1Y3QgaTkx NV9hY3RpdmUgKnJlZiwgc3RydWN0IGRtYV9mZW5jZSAqZikKPiB7Cj4gICAgICAgICAgR0VNX0JV R19PTihpOTE1X2FjdGl2ZV9pc19pZGxlKHJlZikpOwo+IAo+ICAgICAgICAgIG11dGV4X2FjcXVp cmUoJnJlZi0+bXV0ZXguZGVwX21hcCwgMCwgMCwgX1RISVNfSVBfKTsKPiAgICAgICAgICBpZiAo IV9faTkxNV9hY3RpdmVfZmVuY2Vfc2V0KCZyZWYtPmV4Y2wsIGYpKQo+ICAgICAgICAgICAgICAg ICAgYXRvbWljX2luYygmcmVmLT5jb3VudCk7Cj4gICAgICAgICAgbXV0ZXhfcmVsZWFzZSgmcmVm LT5tdXRleC5kZXBfbWFwLCAwLCBfVEhJU19JUF8pOwo+IH0KCldoYXQgaXMgdGhpcz8KCj4gCj4+ PiArc3RhdGljIGludCBleGNsX3dhaXQoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYpCj4+PiArewo+ Pj4gKyAgICAgc3RydWN0IGRtYV9mZW5jZSAqb2xkOwo+Pj4gKyAgICAgaW50IGVyciA9IDA7Cj4+ PiArCj4+PiArICAgICBpZiAoIXJjdV9hY2Nlc3NfcG9pbnRlcihyZWYtPmV4Y2wpKQo+Pj4gKyAg ICAgICAgICAgICByZXR1cm4gMDsKPj4+ICsKPj4+ICsgICAgIHJjdV9yZWFkX2xvY2soKTsKPj4+ ICsgICAgIG9sZCA9IGRtYV9mZW5jZV9nZXRfcmN1X3NhZmUoJnJlZi0+ZXhjbCk7Cj4+PiArICAg ICByY3VfcmVhZF91bmxvY2soKTsKPj4KPj4gcmVmLT5leGNsIGNhbiBnbyBzb21ldGhpbmcgdG8g TlVMTCBidXQgbm90IE5VTEwgdG8gc29tZXRoaW5nIGluIGhlcmU/Cj4gCj4gWWVzLCBidXQgdGhl IHdhaXQgaXMgb24gdGhlIHNuYXBzaG90IG9mIGZlbmNlcyBhdCB0aGF0IG1vbWVudCBpbiB0aW1l Lgo+IEZvciB0aGluZ3MgbGlrZSB1bmJpbmQgaWYgaXQgYmVjb21lcyBidXN5IGFnYWluIGFmdGVy IHdlIHN0YXJ0LCB3aGF0IGlzCj4gdGhlIGJlc3QgY291cnNlIG9mIGFjdGlvbiAtLSBjdXJyZW50 bHkgd2Ugc3dlYXIgYW5kIHRyeSBhZ2Fpbi4KPiAKPiBUaGUgcHJvYmxlbSBpcyBtb3JlIGV2aWRl bnQgbGF0ZXIgaW4gdGhlIGNvbW1lbnQ6Cj4gCj4gLyogQW55IGZlbmNlIGFkZGVkIGFmdGVyIHRo ZSB3YWl0IGJlZ2lucyB3aWxsIG5vdCBiZSBhdXRvLXNpZ25hbGVkICovCj4gCj4gd2hpY2ggbWVh bnMgdGhlIHdhaXQgbWF5IGVuZCB3YWl0aW5nIGZvciB0aGUgYmFja2dyb3VuZCB3b3JrZXIgdG8g Zmx1c2gKPiBmZW5jZXMuCj4gCj4+PiAgICBpbnQgaTkxNV9yZXF1ZXN0X2F3YWl0X2FjdGl2ZShz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgc3RydWN0IGk5MTVfYWN0aXZlICpyZWYpCj4+PiAgICB7 Cj4+PiAtICAgICBzdHJ1Y3QgYWN0aXZlX25vZGUgKml0LCAqbjsKPj4+IC0gICAgIGludCBlcnI7 Cj4+PiAtCj4+PiAtICAgICBpZiAoUkJfRU1QVFlfUk9PVCgmcmVmLT50cmVlKSkKPj4+IC0gICAg ICAgICAgICAgcmV0dXJuIDA7Cj4+PiArICAgICBpbnQgZXJyID0gMDsKPj4+ICAgIAo+Pj4gLSAg ICAgLyogYXdhaXQgYWxsb2NhdGVzIGFuZCBzbyB3ZSBuZWVkIHRvIGF2b2lkIGhpdHRpbmcgdGhl IHNocmlua2VyICovCj4+PiAtICAgICBlcnIgPSBpOTE1X2FjdGl2ZV9hY3F1aXJlKHJlZik7Cj4+ PiAtICAgICBpZiAoZXJyKQo+Pj4gLSAgICAgICAgICAgICByZXR1cm4gZXJyOwo+Pj4gKyAgICAg aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihyZWYtPmV4Y2wpKSB7Cj4+Cj4+IGV4Y2xfd2FpdCB1c2Vk IGlmLW5vdC1yZXR1cm4gcGF0dGVybiwgYnV0IGVzc2VudGlhbHkgdGhlIHNhbWUgcXVlc3Rpb24K Pj4gYWJvdXQgcG9zc2libGUgcmFjZXMuIEkgZ3Vlc3MgdGhlcmUgYXJlbid0IGFueSBzaW5jZSBv bmx5IHJldGlyZW1lbnQgaXMKPj4gcmVsZXZhbnQgd2hpY2ggaXMgc29tZXRoaW5nLXRvLU5VTEwg YW5kIHRoYXQncyBoYW5kbGVkIGZpbmUuIEJ1dCBJIGFtCj4+IG5vdCBzdXJlLCBwb3NzaWJseSBj b21tZW50cyBhcmUgaW4gb3JkZXIuCj4gCj4gSXQncyB0aGUgc2FtZSBhcyBhbnkgb3RoZXIgd2Fp dCBvbiBhIHNldC1vZi1mZW5jZSwgdGhlIHdhaXQgaXMgb24gdGhlCj4gc25hcHNob3Qgb2YgZmVu Y2VzIGF0IHRoYXQgbW9tZW50Lgo+IAo+IElmIHlvdSBuZWVkIHN0cmljdGVyIGNvbnRyb2wgKHN1 Y2ggYXMgZW5zdXJpbmcgb3JkZXJpbmcgd2l0aGluIGEKPiBwYXJ0aWN1bGFyIHRpbWVsaW5lKSB5 b3UgaGF2ZSB0byBwcm92aWRlIHRoZSBvcmRlcmluZyBvbiB0aGF0IGV4dGVybmFsCj4gdGltZWxp bmUuIFRoYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHNpbXBseSB3YWl0aW5nIG9uIHRoZQo+ IGk5MTVfYWN0aXZlLCBhbmQgc2V0dGluZyBhIGZlbmNlIHdpdGhpbiBhbiBpOTE1X2FjdGl2ZV9m ZW5jZSAodGhlIGxhdHRlcgo+IGhhcyBhIHN0cmljdCBvcmRlcikuCj4gCj4+PiBAQCAtMTA5LDIw ICsxMjEsMzEgQEAgaW50IGk5MTVfZ2VtX29iamVjdF91bmJpbmQoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKPj4+ICAgICAgICBMSVNUX0hFQUQoc3RpbGxfaW5fbGlzdCk7Cj4+PiAg ICAgICAgaW50IHJldCA9IDA7Cj4+PiAgICAKPj4+IC0gICAgIGxvY2tkZXBfYXNzZXJ0X2hlbGQo Jm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7Cj4+PiAtCj4+PiAgICAgICAgc3Bpbl9sb2Nr KCZvYmotPnZtYS5sb2NrKTsKPj4+ICAgICAgICB3aGlsZSAoIXJldCAmJiAodm1hID0gbGlzdF9m aXJzdF9lbnRyeV9vcl9udWxsKCZvYmotPnZtYS5saXN0LAo+Pj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGk5MTVfdm1hLAo+Pj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Jq X2xpbmspKSkgewo+Pj4gKyAgICAgICAgICAgICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSA9IHZtYS0+dm07Cj4+PiArCj4+PiArICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsKPj4+ICsg ICAgICAgICAgICAgaWYgKCFpOTE1X3ZtX3RyeW9wZW4odm0pKQo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwo+Pgo+PiBUaGlzIGlzIHNvbWUgcmFjZSBiZXR3ZWVuIGRpZmZlcmVudCBw YXRocyBvZiB2bSBjbG9zaW5nL2Rlc3RydWN0aW9uIGFuZAo+PiB2bWEgY2xlYW51cD8gV2UgbmVl ZCBhIGNvbW1lbnQgYWJvdXQgaXQgc29tZXdoZXJlLi4gSGVyZSBJIGd1ZXNzIGlzIGEKPj4gZ29v ZCBwbGFjZS4KPiAKPiA0IGRpZmZlcmVudCBwYXRocyBhbGwgZmlnaHRpbmc7IGFuZCBjb29yZGlu YXRlIGJ5IHByZXZlbnRpbmcgdGhlIG90aGVyIDIKPiBkZXN0cnVjdGlvbiBwYXRocyBmcm9tIHJ1 bm5pbmcgYXMgdGhleSBydW4sIGFuZCBzcGlubG9ja3MgdG8gcHJldmVudCB0aGUKPiBvdGhlci4K PiAgIAo+PiBBbmQgd2h5IGJyZWFrIGFuZCBub3QgY29udGludWUsIHRoZXJlIHdpbGwgYmUgYSBz ZWNvbmQgY2FsbCBjb21pbmcgZnJvbQo+PiBzb21ld2hlcmUgd2hlbiBpdCBmYWlscz8KPiAKPiBJ dCBmYWlsZWQgdG8gdW5iaW5kIHRoZSBvYmplY3QsIHNvIGl0IHdvdWxkIGVuZCB1cCBpbiBhIGJ1 c3kgc3Bpbgo+IHByZXZlbnRpbmcgdGhlIGFjdHVhbCB2bSByZWxlYXNlIGZyb20gcmVtb3Zpbmcg dGhlIHZtYS4KCkJ1dCBpdCBjb3VsZCBwcm9jZWVkIHRvIHVuYmluZCB3aGF0IGNhbiBiZSB1bmJv dW5kLiBPdGhlcndpc2UgaXMgaXQgCmd1YXJhbnRlZWQgdG8gYmUgY2FsbGVkIGFnYWluIHdoZW4g aXQgZmFpbHMsIHNvIGV2ZW50dWFsbHkgaXQgd2lsbCBjbGVhbiAKdXAgZXZlcnl0aGluZz8KCj4g Cj4+PiBAQCAtMTAxNSwxNCArMTAxNiw5IEBAIGk5MTVfZ2VtX29iamVjdF9nZ3R0X3BpbihzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9TUEMpOwo+Pj4gICAgICAgICAgICAgICAgfQo+Pj4g ICAgCj4+PiAtICAgICAgICAgICAgIFdBUk4oaTkxNV92bWFfaXNfcGlubmVkKHZtYSksCj4+PiAt ICAgICAgICAgICAgICAgICAgImJvIGlzIGFscmVhZHkgcGlubmVkIGluIGdndHQgd2l0aCBpbmNv cnJlY3QgYWxpZ25tZW50OiIKPj4+IC0gICAgICAgICAgICAgICAgICAiIG9mZnNldD0lMDh4LCBy ZXEuYWxpZ25tZW50PSVsbHgsIgo+Pj4gLSAgICAgICAgICAgICAgICAgICIgcmVxLm1hcF9hbmRf ZmVuY2VhYmxlPSVkLCB2bWEtPm1hcF9hbmRfZmVuY2VhYmxlPSVkXG4iLAo+Pj4gLSAgICAgICAg ICAgICAgICAgIGk5MTVfZ2d0dF9vZmZzZXQodm1hKSwgYWxpZ25tZW50LAo+Pj4gLSAgICAgICAg ICAgICAgICAgICEhKGZsYWdzICYgUElOX01BUFBBQkxFKSwKPj4+IC0gICAgICAgICAgICAgICAg ICBpOTE1X3ZtYV9pc19tYXBfYW5kX2ZlbmNlYWJsZSh2bWEpKTsKPj4KPj4gV2h5IHJlbW92aW5n IHRoZSBXQVJOPwo+IAo+IEl0J3MgZnVuZGFtZW50YWxseSByYWN5LiBOb3QgdW50aWwgeW91IGxv Y2ssIGZsdXNoIHRoZSBhY3RpdmUsIGRvIHlvdQo+IGtub3cgd2hldGhlciBvciBub3QgdGhlIHZt YSBpcyBhY3R1YWxseSBwaW5uZWQuIChXaGVyZWFzIHByZXZpb3VzbHkgaXQKPiB3YXMgbG9ja2Vk IHVuZGVyIHN0cnVjdF9tdXRleC4pIFdpdGggbXVsdGlwbGUgc2ltdWx0YW5lb3VzIHBpbm5lcnMs IHRoZQo+IGNoYW5jZSB0aGF0IHdlIGVuZCB1cCB3aXRoIGEgcGluIHdlIGRvIG5vdCBsaWtlIGlz IGluY3JlYXNlZC4gKEhtbSwKPiBlYXJseSBvbiB0aGlzIGVudGlyZSBmdW5jdGlvbiB3YXMgdW5k ZXIgYSBzaW5nbGUgdm0tPm11dGV4LCB0aGF0IHJlbW92ZXMKPiBzb21lIHJhY2UgY29uZGl0aW9u cyB0aGF0IGN1cnJlbnRseSBjYXVzZSBhbiB1bmxpa2VseSBmYWlsdXJlIGF0IHRoZQo+IGVuZCwg YnV0IHN1Y2ggcmFjZXMgd291bGQgYmUgcGluZy1wb25naW5nLCBzbyBib3RoIHN0cmF0ZWdpZXMg aGF2ZSB0aGVpcgo+IGZhdWx0cy4pCj4gCj4+PiArICAgICAgICAgICAgIG11dGV4X2xvY2soJnZt YS0+dm0tPm11dGV4KTsKPj4+ICAgICAgICAgICAgICAgIHJldCA9IGk5MTVfdm1hX3VuYmluZCh2 bWEpOwo+Pj4gKyAgICAgICAgICAgICBtdXRleF91bmxvY2soJnZtYS0+dm0tPm11dGV4KTsKPj4+ ICAgICAgICAgICAgICAgIGlmIChyZXQpCj4+PiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBFUlJfUFRSKHJldCk7Cj4+PiAgICAgICAgfQo+IAo+Pj4gQEAgLTEyNywxNSArMTI2LDYgQEAg aTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fc2l6ZSwgYWxpZ25tZW50 LCBjYWNoZV9sZXZlbCwKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh cnQsIGVuZCwgbW9kZSk7Cj4+PiAgICAKPj4+IC0gICAgIC8qCj4+PiAtICAgICAgKiBSZXRpcmUg YmVmb3JlIHdlIHNlYXJjaCB0aGUgYWN0aXZlIGxpc3QuIEFsdGhvdWdoIHdlIGhhdmUKPj4+IC0g ICAgICAqIHJlYXNvbmFibGUgYWNjdXJhY3kgaW4gb3VyIHJldGlyZW1lbnQgbGlzdHMsIHdlIG1h eSBoYXZlCj4+PiAtICAgICAgKiBhIHN0cmF5IHBpbiAocHJldmVudGluZyBldmljdGlvbikgdGhh dCBjYW4gb25seSBiZSByZXNvbHZlZCBieQo+Pj4gLSAgICAgICogcmV0aXJpbmcuCj4+PiAtICAg ICAgKi8KPj4+IC0gICAgIGlmICghKGZsYWdzICYgUElOX05PTkJMT0NLKSkKPj4+IC0gICAgICAg ICAgICAgaTkxNV9yZXRpcmVfcmVxdWVzdHMoZGV2X3ByaXYpOwo+Pgo+PiBOb3QgbmVlZGVkIGFu eSBtb3JlIGJlY2F1c2U/Cj4gCj4gSXQncyBpbGxlZ2FsLCByZXF1aXJlcyBzdHJ1Y3RfbXV0ZXgs IHdlIGRvIG5vdCBob2xkIHN0cnVjdF9tdXRleC4gKFVudGlsCj4gdGhlIGVuZCBvZiB0aGlzIHNl cmllcyB3aGVuIGk5MTVfcmV0aXJlX3JlcXVlc3RzIGlzIGluZGVwZW5kZW50IG9mCj4gc3RydWN0 X211dGV4IGFuZCB3ZSByZXN0b3JlIGl0LikKPiAKPj4+IEBAIC0xNzUsNyArMTc4LDggQEAgc3Rh dGljIGludCBwcGd0dF9iaW5kX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPj4+ICAgIAo+Pj4g ICAgc3RhdGljIHZvaWQgcHBndHRfdW5iaW5kX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPj4+ ICAgIHsKPj4+IC0gICAgIHZtYS0+dm0tPmNsZWFyX3JhbmdlKHZtYS0+dm0sIHZtYS0+bm9kZS5z dGFydCwgdm1hLT5zaXplKTsKPj4+ICsgICAgIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSTkxNV9W TUFfQUxMT0NfQklULCBfX2k5MTVfdm1hX2ZsYWdzKHZtYSkpKQo+Pj4gKyAgICAgICAgICAgICB2 bWEtPnZtLT5jbGVhcl9yYW5nZSh2bWEtPnZtLCB2bWEtPm5vZGUuc3RhcnQsIHZtYS0+c2l6ZSk7 Cj4+Cj4+IFZNQSBib3VuZCBhbmQgYWxsb2NhdGVkIGFyZSBub3cgc3lub255bXM/Cj4gCj4gY2xl YXJfcmFuZ2UgZGVjcmVtZW50cyB0aGUgcHQgdXNlIGNvdW50ZXJzIHRoYXQgYWxsb2MgaW5jcmVt ZW50ZWQuCgpJIHRoaW5rIEkgd2FzIHRhc2tpbmcgZm9yIGEgZGVzY3JpcHRpb24gb2YgSTkxNV9W TUFfQUxMT0NfQklULCBidXQgbm90IApzdXJlIGFueSBtb3JlLgoKPiAKPj4+ICtzdHJ1Y3QgaTkx NV92bWFfd29yayAqaTkxNV92bWFfd29yayh2b2lkKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCBp OTE1X3ZtYV93b3JrICp2dzsKPj4+ICsKPj4+ICsgICAgIHZ3ID0ga3phbGxvYyhzaXplb2YoKnZ3 KSwgR0ZQX0tFUk5FTCk7Cj4+Cj4+IFRoaXMgY291bGQgYmUgcmVhc29uYWJseSBoaWdoIHRyYWZm aWMgdG8gd2FycmFudCBhIGRlZGljYXRlZCBzbGFiLgo+IAo+IEl0J3MgYWxzbyBub3QgZ29pbmcg dG8gc3Vydml2ZSBmb3IgbW9yZSB0aGFuIDIga2VybmVsIHJlbGVhc2VzLiA6KAo+IAo+Pj4gKyAg ICAgaWYgKCF2dykKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4+PiArCj4+PiArICAg ICBkbWFfZmVuY2Vfd29ya19pbml0KCZ2dy0+YmFzZSwgJmJpbmRfb3BzKTsKPj4KPj4gSG0sIG5l dyAoZm9yIG1lKSBBUEkuLiB3aGF0IGlzIHRoZSBhZHZhbnRhZ2UvbmVlZCBjb21wYXJlZCB0byBw bGFpbiB3b3JrZXJzPwo+IAo+IEl0IGlzIGEgcGxhaW4gd29ya2VyIHdpdGggdGhlIGRtYS1mZW5j ZSBjb3VwbGluZyB3ZSd2ZSBhbGwgZ3Jvd24gdG8KPiBjaGVyaXNoLgo+IAo+Pj4gQEAgLTMzMyw5 ICszNzUsMzIgQEAgaW50IGk5MTVfdm1hX2JpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEsIGVudW0g aTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKPj4+ICAgICAgICBHRU1fQlVHX09OKCF2bWEt PnBhZ2VzKTsKPj4+ICAgIAo+Pj4gICAgICAgIHRyYWNlX2k5MTVfdm1hX2JpbmQodm1hLCBiaW5k X2ZsYWdzKTsKPj4+IC0gICAgIHJldCA9IHZtYS0+b3BzLT5iaW5kX3ZtYSh2bWEsIGNhY2hlX2xl dmVsLCBiaW5kX2ZsYWdzKTsKPj4+IC0gICAgIGlmIChyZXQpCj4+PiAtICAgICAgICAgICAgIHJl dHVybiByZXQ7Cj4+PiArICAgICBpZiAod29yayAmJiAoYmluZF9mbGFncyAmIH52bWFfZmxhZ3Mp ICYgdm1hLT52bS0+YmluZF9hbGxvYykgewo+Pgo+PiBXaGF0IGlzIHRoZSBiaXR3aXNlIGxvZ2lj IGNoZWNraW5nIGZvcj8KPiAKPiBXaGV0aGVyIHdlIGFyZSBhZGRpbmcgYSBiaW5kIHRoYXQgcmVx dWlyZXMgYWxsb2NhdGlvbnMgdGhhdCB0aGUgY2FsbGVyCj4gcmVxdWlyZXMgdG8gYmUgYXN5bmMu Cj4gCj4+PiArICAgICAgICAgICAgIHdvcmstPnZtYSA9IHZtYTsKPj4+ICsgICAgICAgICAgICAg d29yay0+Y2FjaGVfbGV2ZWwgPSBjYWNoZV9sZXZlbDsKPj4+ICsgICAgICAgICAgICAgd29yay0+ ZmxhZ3MgPSBiaW5kX2ZsYWdzIHwgSTkxNV9WTUFfQUxMT0M7Cj4+PiArCj4+PiArICAgICAgICAg ICAgIC8qCj4+PiArICAgICAgICAgICAgICAqIE5vdGUgd2Ugb25seSB3YW50IHRvIGNoYWluIHVw IHRvIHRoZSBtaWdyYXRpb24gZmVuY2Ugb24KPj4+ICsgICAgICAgICAgICAgICogdGhlIHBhZ2Vz IChub3QgdGhlIG9iamVjdCBpdHNlbGYpLiBBcyB3ZSBkb24ndCB0cmFjayB0aGF0LAo+Pj4gKyAg ICAgICAgICAgICAgKiB5ZXQsIHdlIGhhdmUgdG8gdXNlIHRoZSBleGNsdXNpdmUgZmVuY2UgaW5z dGVhZC4KPj4+ICsgICAgICAgICAgICAgICoKPj4+ICsgICAgICAgICAgICAgICogQWxzbyBub3Rl IHRoYXQgd2UgZG8gbm90IHdhbnQgdG8gdHJhY2sgdGhlIGFzeW5jIHZtYSBhcwo+Pj4gKyAgICAg ICAgICAgICAgKiBwYXJ0IG9mIHRoZSBvYmotPnJlc3YtPmV4Y2xfZmVuY2UgYXMgaXQgb25seSBh ZmZlY3RzCj4+PiArICAgICAgICAgICAgICAqIGV4ZWN1dGlvbiBhbmQgbm90IGNvbnRlbnQgb3Ig b2JqZWN0J3MgYmFja2luZyBzdG9yZSBsaWZldGltZS4KPj4+ICsgICAgICAgICAgICAgICovCj4+ PiArICAgICAgICAgICAgIEdFTV9CVUdfT04oaTkxNV9hY3RpdmVfaGFzX2V4Y2x1c2l2ZSgmdm1h LT5hY3RpdmUpKTsKPj4+ICsgICAgICAgICAgICAgaTkxNV9hY3RpdmVfc2V0X2V4Y2x1c2l2ZSgm dm1hLT5hY3RpdmUsICZ3b3JrLT5iYXNlLmRtYSk7Cj4+Cj4+IE9oIHJpZ2h0LCBkbWFfZmVuY2Vf d29yayBzaW5jZSBpdCdzIG5vdCBhIHdvcmtlciBidXQgY2FsbGJhY2sgb24KPj4gc2lnbmFsbGlu ZyB0aGUgZmVuY2UuLi4gRnJvbSB3aGF0IGNvbnRleHQgaXQgZ2V0cyBjYWxsZWQgKGhvbGRpbmcg YW55Cj4+IGxvY2tzPykgYW5kIHdoaWNoIGxvY2tzIHRoZSBjYWxsYmFjayBjYW4vd2lsbCB0YWtl Pwo+IAo+IGRtYV9mZW5jZV93b3JrIGhhcyBhIGRtYV9mZW5jZV9jYiB0aGF0IHNjaGVkdWxlcyBh IHdvcmtfc3R1Y3Qgd2hpY2gKPiBleGVjdXRlcyBvdXIgZnVuY3Rpb24uIChBbmQgaXQgYWxzbyBo YXMgYSBkbWEtZmVuY2UgdGhyb3VnaCB3aGljaCB3ZSBjYW4KPiBzaWduYWwgdGhlIGNvbXBsZXRp b24vZXJyb3Igb2YgdGhhdCBmdW5jdGlvbi4pCgpBbmQgdGhpcyBpcyB0byBhdm9pZCBzb21lIGFs bG9jYXRpb24gc29tZXdoZXJlPwoKPiAKPj4+IEBAIC0zNjgsNyArNDMxLDggQEAgdm9pZCBfX2lv bWVtICppOTE1X3ZtYV9waW5faW9tYXAoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4+PiAgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZXJyOwo+Pj4gICAgICAgICAgICAgICAgfQo+Pj4gICAgCj4+ PiAtICAgICAgICAgICAgIHZtYS0+aW9tYXAgPSBwdHI7Cj4+PiArICAgICAgICAgICAgIGlmICh1 bmxpa2VseShjbXB4Y2hnKCZ2bWEtPmlvbWFwLCBOVUxMLCBwdHIpKSkKPj4+ICsgICAgICAgICAg ICAgICAgICAgICBpb19tYXBwaW5nX3VubWFwKHB0cik7Cj4+Cj4+IFdoeSB0aGlzIGNoYW5nZT8K PiAKPiBNdWx0aXBsZSBwaW5uZXJzIHJhY2UgdG8gc2VlIHdobyB3aW4gdGhlIGlvX21hcHBpbmcg Y29tcGV0aXRpb24uIEVhY2gKPiB0aHJlYWQgZG9lcyB0aGVpciBvd24gYWxsb2NhdGlvbiwgaWYg Zmlyc3QgdGhleSBwYXNzIG93bmVyc2hpcCB0byB0aGUKPiB2bWEsIGlmIGxhc3QgdGhleSBkZWxl dGUgdGhlaXIgb3duIGlvX21hcHBpbmcgYW5kIGdvIG9uIHRvIHVzZSB0aGUKPiB3aW5uZXIncyB2 bWEtPmlvbWFwLiBFeGNlcHQgYW4gaWRpb3QgZm9yZ290IHRvIHVwZGF0ZSB0aGUgbG9zZXIncyBw dHIKPiBoZXJlLgo+IAo+Pj4gQEAgLTU4MCwzNSArNjQwLDIxIEBAIGk5MTVfdm1hX2luc2VydChz dHJ1Y3QgaTkxNV92bWEgKnZtYSwgdTY0IHNpemUsIHU2NCBhbGlnbm1lbnQsIHU2NCBmbGFncykK Pj4+ICAgICAgICAgICAgICAgIHJldHVybiAtRU5PU1BDOwo+Pj4gICAgICAgIH0KPj4+ICAgIAo+ Pj4gLSAgICAgaWYgKHZtYS0+b2JqKSB7Cj4+PiAtICAgICAgICAgICAgIHJldCA9IGk5MTVfZ2Vt X29iamVjdF9waW5fcGFnZXModm1hLT5vYmopOwo+Pj4gLSAgICAgICAgICAgICBpZiAocmV0KQo+ Pj4gLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+PiAtCj4+PiArICAgICBjYWNo ZV9sZXZlbCA9IDA7Cj4+PiArICAgICBpZiAodm1hLT5vYmopCj4+PiAgICAgICAgICAgICAgICBj YWNoZV9sZXZlbCA9IHZtYS0+b2JqLT5jYWNoZV9sZXZlbDsKPj4+IC0gICAgIH0gZWxzZSB7Cj4+ PiAtICAgICAgICAgICAgIGNhY2hlX2xldmVsID0gMDsKPj4+IC0gICAgIH0KPj4+IC0KPj4+IC0g ICAgIEdFTV9CVUdfT04odm1hLT5wYWdlcyk7Cj4+PiAtCj4+PiAtICAgICByZXQgPSB2bWEtPm9w cy0+c2V0X3BhZ2VzKHZtYSk7Cj4+PiAtICAgICBpZiAocmV0KQo+Pj4gLSAgICAgICAgICAgICBn b3RvIGVycl91bnBpbjsKPj4+ICAgIAo+Pj4gICAgICAgIGlmIChmbGFncyAmIFBJTl9PRkZTRVRf RklYRUQpIHsKPj4+ICAgICAgICAgICAgICAgIHU2NCBvZmZzZXQgPSBmbGFncyAmIFBJTl9PRkZT RVRfTUFTSzsKPj4+ICAgICAgICAgICAgICAgIGlmICghSVNfQUxJR05FRChvZmZzZXQsIGFsaWdu bWVudCkgfHwKPj4+IC0gICAgICAgICAgICAgICAgIHJhbmdlX292ZXJmbG93cyhvZmZzZXQsIHNp emUsIGVuZCkpIHsKPj4+IC0gICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwo+Pj4g LSAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyX2NsZWFyOwo+Pj4gLSAgICAgICAgICAgICB9 Cj4+PiArICAgICAgICAgICAgICAgICByYW5nZV9vdmVyZmxvd3Mob2Zmc2V0LCBzaXplLCBlbmQp KQo+Pgo+PiBBIGxvdCBvZiBjaGVja3Mvb3BzIHJlbW92ZWQgZnJvbSBoZXJlLi4gSSB0aGluayBJ J2xsIG5lZWQgdG8gYXBwbHkgdG8KPj4gZmlndXJlIG91dCBob3cgZmxvd3Mgd29yay4gT3IgcmV2 aWV3IG9uIGhpZ2ggbGV2ZWwgYW5kIGhhdmUgZmFpdGggaW4gQ0kuCj4gCj4gQ2hlY2tzIGRpZG4n dCBnZXQgZHJvcHBlZCwganVzdCB0aGUgb3BzIG1vdmVkIHRvIHRoZSBjYWxsZXIuIFRob3NlIHRo YXQKPiBuZWVkIHRvIGJlIGRvbmUgYmVmb3JlIHRoZSBtdXRleCBoYXZlIHRvIGJlIGluIHRoZSBj YWxsZXIuIFRoaXMgZnVuY3Rpb24KPiBpcyBub3cgb25seSByZXNwb25zaWJsZSBmb3IgZmluZC9y ZXNlcnZpbmcgdGhlIHBsYWNlIGluIHRoZSBkcm1fbW0uCj4gCj4+PiArc3RhdGljIGJvb2wgdHJ5 X2Zhc3RfcGluKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4+PiAg ICB7Cj4+PiAtICAgICBjb25zdCB1bnNpZ25lZCBpbnQgYm91bmQgPSBhdG9taWNfcmVhZCgmdm1h LT5mbGFncyk7Cj4+PiAtICAgICBpbnQgcmV0Owo+Pj4gKyAgICAgdW5zaWduZWQgaW50IGJvdW5k Owo+Pj4gKyAgICAgYm9vbCBwaW5uZWQgPSB0cnVlOwo+Pj4gICAgCj4+PiAtICAgICBsb2NrZGVw X2Fzc2VydF9oZWxkKCZ2bWEtPnZtLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4+IC0gICAg IEdFTV9CVUdfT04oKGZsYWdzICYgKFBJTl9HTE9CQUwgfCBQSU5fVVNFUikpID09IDApOwo+Pj4g LSAgICAgR0VNX0JVR19PTigoZmxhZ3MgJiBQSU5fR0xPQkFMKSAmJiAhaTkxNV92bWFfaXNfZ2d0 dCh2bWEpKTsKPj4+ICsgICAgIGJvdW5kID0gYXRvbWljX3JlYWQoJnZtYS0+ZmxhZ3MpOwo+Pj4g KyAgICAgZG8gewo+Pj4gKyAgICAgICAgICAgICBpZiAodW5saWtlbHkoZmxhZ3MgJiB+Ym91bmQp KQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPj4KPj4gV2hhdCBpcyB0 aGlzIGNoZWNraW5nIGZvcj8KPiAKPiBJZiB0aGUgcmVxdWVzdGVkIGJpbmRpbmcgKGZsYWdzKSBp cyBhbHJlYWR5IGF2YWlsYWJsZSAoYm91bmQpLgo+IAo+Pj4gLSAgICAgaWYgKFdBUk5fT04oYm91 bmQgJiBJOTE1X1ZNQV9QSU5fT1ZFUkZMT1cpKSB7Cj4+PiAtICAgICAgICAgICAgIHJldCA9IC1F QlVTWTsKPj4+IC0gICAgICAgICAgICAgZ290byBlcnJfdW5waW47Cj4+PiArICAgICAgICAgICAg IGlmICh1bmxpa2VseShib3VuZCAmIChJOTE1X1ZNQV9PVkVSRkxPVyB8IEk5MTVfVk1BX0VSUk9S KSkpCj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+Pgo+PiBXaGF0IHdp bGwgdGhlIGNhbGxlciB0cnkgdG8gZG8gaW4gdGhlc2UgY2FzZXM/Cj4gCj4gTm90IGRvIHRoZSBl YXJseSByZXR1cm4uCgpIb3cgaXQgd2lsbCByZWNvdmVyIGZyb20gZXJyb3Igb3Igb3ZlcmZsb3cg d2FzIHRoZSBxdWVzdGlvbiBJIHdhcyBhaW1pbmcgCmF0LiBCdXQgdGhhdCBsb29rcyB0byBoYXZl IGJlZW4gYmVmb3JlIEkgZmlndXJlZCBvdXQgd2hhdCBkbyB5b3UgcmVhbGx5IAptZWFuIGJ5IGZh c3QgaW4gdGhpcyBjb250ZXh0LiBGYXN0L3Nsb3cgdGVybWlub2xvZ3kgaXMgbm90IHRoZSBjbGVh cmVzdCAKaGVyZSBidXQgSSBoYXZlIG5vIGJldHRlciBzdWdnZXN0aW9ucyBhdCB0aGUgbW9tZW50 LgoKPiAKPj4+ICsKPj4+ICsgICAgICAgICAgICAgaWYgKCEoYm91bmQgJiBJOTE1X1ZNQV9QSU5f TUFTSykpCj4+PiArICAgICAgICAgICAgICAgICAgICAgZ290byBzbG93Owo+Pgo+PiBTaW5jZSBm YXN0IHBhdGggY2FuIGdvIHRvIHNsb3csIG5vdCBzdXJlIHdoYXQgaXMgZmFzdCByZWZlcnJpbmcg dG8uCj4+Cj4+PiArCj4+PiArICAgICAgICAgICAgIEdFTV9CVUdfT04oKChib3VuZCArIDEpICYg STkxNV9WTUFfUElOX01BU0spID09IDApOwo+Pj4gKyAgICAgfSB3aGlsZSAoIWF0b21pY190cnlf Y21weGNoZygmdm1hLT5mbGFncywgJmJvdW5kLCBib3VuZCArIDEpKTsKPj4+ICsKPj4+ICsgICAg IHJldHVybiB0cnVlOwo+Pj4gKwo+Pj4gK3Nsb3c6Cj4+PiArICAgICAvKgo+Pj4gKyAgICAgICog SWYgcGluX2NvdW50PT0wLCBidXQgd2UgYXJlIGJvdW5kLCBjaGVjayB1bmRlciB0aGUgbG9jayB0 byBhdm9pZAo+Pj4gKyAgICAgICogcmFjaW5nIHdpdGggYSBjb25jdXJyZW50IGk5MTVfdm1hX3Vu YmluZCgpLgo+Pj4gKyAgICAgICovCj4+PiArICAgICBtdXRleF9sb2NrKCZ2bWEtPnZtLT5tdXRl eCk7Cj4+Cj4+IFRoaXMgaXMgbmV2ZXIgZnJvbSBwcm9jZXNzIGNvbnRleHQgdG8gbmVlZCB0byBi ZSBpbnRlcnJ1cHRpYmxlPwo+IAo+IEkgc3RhcnRlZCB3aXRoIGEgdHJpc3RhdGUgcmV0dXJuLCBk aWRuJ3QgbGlrZSBpdCBtdWNoICh0cnkoKSBtZWFucyBib29sCj4gdG8gbWUpLiBJdCBjYW4gYmUg X2ludGVycnVwdGlibGUgaGVyZSwgd2UgdGhlbiBkbyBhbiBhbGxvYyBiZWZvcmUgZ2l2aW5nCj4g dXAuCj4gCj4+PiArICAgICBkbyB7Cj4+PiArICAgICAgICAgICAgIGlmICh1bmxpa2VseShib3Vu ZCAmIChJOTE1X1ZNQV9PVkVSRkxPVyB8IEk5MTVfVk1BX0VSUk9SKSkpIHsKPj4+ICsgICAgICAg ICAgICAgICAgICAgICBwaW5uZWQgPSBmYWxzZTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBi cmVhazsKPj4+ICsgICAgICAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICBpZiAodW5s aWtlbHkoZmxhZ3MgJiB+Ym91bmQpKSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgcGlubmVk ID0gZmFsc2U7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgICAg ICAgIH0KPj4+ICsgICAgIH0gd2hpbGUgKCFhdG9taWNfdHJ5X2NtcHhjaGcoJnZtYS0+ZmxhZ3Ms ICZib3VuZCwgYm91bmQgKyAxKSk7Cj4+PiArICAgICBtdXRleF91bmxvY2soJnZtYS0+dm0tPm11 dGV4KTsKPj4KPj4gc2xvdyA9IDAgLT4gMSBwaW4gdHJhbnNpdGlvbiwgdGhlIHJlc3QgYXJlIGZh c3Q/Cj4gCj4gMSsgYXJlIGZhc3Q7IHVuYm91bmQgaXMgc2xvd2VzdC4KPiAKPj4+ICsKPj4+ICsg ICAgIHJldHVybiBwaW5uZWQ7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgdm1hX2dldF9w YWdlcyhzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPj4+ICt7Cj4+PiArICAgICBpbnQgZXJyID0gMDsK Pj4+ICsKPj4+ICsgICAgIGlmIChhdG9taWNfYWRkX3VubGVzcygmdm1hLT5wYWdlc19jb3VudCwg MSwgMCkpCj4+PiArICAgICAgICAgICAgIHJldHVybiAwOwo+Pj4gKwo+Pj4gKyAgICAgaWYgKG11 dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdm1hLT5wYWdlc19tdXRleCkpCj4+PiArICAgICAgICAg ICAgIHJldHVybiAtRUlOVFI7Cj4+PiArCj4+PiArICAgICBpZiAoIWF0b21pY19yZWFkKCZ2bWEt PnBhZ2VzX2NvdW50KSkgewo+Pj4gKyAgICAgICAgICAgICBpZiAodm1hLT5vYmopIHsKPj4+ICsg ICAgICAgICAgICAgICAgICAgICBlcnIgPSBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKHZtYS0+ b2JqKTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKQo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ290byB1bmxvY2s7Cj4+PiArICAgICAgICAgICAgIH0KPj4+ICsK Pj4+ICsgICAgICAgICAgICAgZXJyID0gdm1hLT5vcHMtPnNldF9wYWdlcyh2bWEpOwo+Pj4gKyAg ICAgICAgICAgICBpZiAoZXJyKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gdW5sb2Nr Owo+Pj4gICAgICAgIH0KPj4+ICsgICAgIGF0b21pY19pbmMoJnZtYS0+cGFnZXNfY291bnQpOwo+ Pj4gICAgCj4+PiAtICAgICBpZiAoKGJvdW5kICYgSTkxNV9WTUFfQklORF9NQVNLKSA9PSAwKSB7 Cj4+PiAtICAgICAgICAgICAgIHJldCA9IGk5MTVfdm1hX2luc2VydCh2bWEsIHNpemUsIGFsaWdu bWVudCwgZmxhZ3MpOwo+Pj4gLSAgICAgICAgICAgICBpZiAocmV0KQo+Pj4gLSAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZXJyX3VucGluOwo+Pj4gK3VubG9jazoKPj4+ICsgICAgIG11dGV4X3Vu bG9jaygmdm1hLT5wYWdlc19tdXRleCk7Cj4+PiArCj4+PiArICAgICByZXR1cm4gZXJyOwo+Pj4g K30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBfX3ZtYV9wdXRfcGFnZXMoc3RydWN0IGk5MTVfdm1h ICp2bWEsIHVuc2lnbmVkIGludCBjb3VudCkKPj4+ICt7Cj4+PiArICAgICBtdXRleF9sb2NrX25l c3RlZCgmdm1hLT5wYWdlc19tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwo+Pgo+PiBOZXN0 aW5nIGFubm90YXRpb24gb25seSBuZWVkZWQgb24gdGhlIHB1dCBwYXRoPyBDb21tZW50IHRvIGRl c2NyaWJlIHdoeQo+PiBpdCBpcyBuZWVkZWQgd291bGQgYmUgZ29vZC4KPiAKPiBJdCdzIGFuIGFs bG9jYXRpbmcgbXV0ZXgsIHNvIHdlIGNhbiBiZSBjYWxsZWQgZnJvbSB1bmRlcm5lYXRoIGFub3Ro ZXIKPiB2bWEtPnBhZ2VzX211dGV4LiBTdGFuZGFyZCBtaXNlcnkuCj4gCj4+PiArICAgICBHRU1f QlVHX09OKGF0b21pY19yZWFkKCZ2bWEtPnBhZ2VzX2NvdW50KSA8IGNvdW50KTsKPj4+ICsgICAg IGlmIChhdG9taWNfc3ViX3JldHVybihjb3VudCwgJnZtYS0+cGFnZXNfY291bnQpID09IDApIHsK Pj4+ICsgICAgICAgICAgICAgdm1hLT5vcHMtPmNsZWFyX3BhZ2VzKHZtYSk7Cj4+PiArICAgICAg ICAgICAgIEdFTV9CVUdfT04odm1hLT5wYWdlcyk7Cj4+PiArICAgICAgICAgICAgIGlmICh2bWEt Pm9iaikKPj4+ICsgICAgICAgICAgICAgICAgICAgICBpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFn ZXModm1hLT5vYmopOwo+Pj4gICAgICAgIH0KPj4+IC0gICAgIEdFTV9CVUdfT04oIWRybV9tbV9u b2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSk7Cj4+PiArICAgICBtdXRleF91bmxvY2soJnZtYS0+ cGFnZXNfbXV0ZXgpOwo+Pj4gK30KPj4+ICAgIAo+Pj4gLSAgICAgcmV0ID0gaTkxNV92bWFfYmlu ZCh2bWEsIHZtYS0+b2JqID8gdm1hLT5vYmotPmNhY2hlX2xldmVsIDogMCwgZmxhZ3MpOwo+Pj4g LSAgICAgaWYgKHJldCkKPj4+IC0gICAgICAgICAgICAgZ290byBlcnJfcmVtb3ZlOwo+Pj4gK3N0 YXRpYyB2b2lkIHZtYV9wdXRfcGFnZXMoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4+PiArewo+Pj4g KyAgICAgaWYgKGF0b21pY19hZGRfdW5sZXNzKCZ2bWEtPnBhZ2VzX2NvdW50LCAtMSwgMSkpCj4+ PiArICAgICAgICAgICAgIHJldHVybjsKPj4+ICAgIAo+Pj4gLSAgICAgR0VNX0JVR19PTighaTkx NV92bWFfaXNfYm91bmQodm1hLCBJOTE1X1ZNQV9CSU5EX01BU0spKTsKPj4+ICsgICAgIF9fdm1h X3B1dF9wYWdlcyh2bWEsIDEpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCB2bWFfdW5i aW5kX3BhZ2VzKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+Pj4gK3sKPj4+ICsgICAgIHVuc2lnbmVk IGludCBjb3VudDsKPj4+ICsKPj4+ICsgICAgIGxvY2tkZXBfYXNzZXJ0X2hlbGQoJnZtYS0+dm0t Pm11dGV4KTsKPj4+ICsKPj4+ICsgICAgIGNvdW50ID0gYXRvbWljX3JlYWQoJnZtYS0+cGFnZXNf Y291bnQpOwo+Pj4gKyAgICAgY291bnQgPj49IEk5MTVfVk1BX1BBR0VTX0JJQVM7Cj4+PiArICAg ICBHRU1fQlVHX09OKCFjb3VudCk7Cj4+PiArCj4+PiArICAgICBfX3ZtYV9wdXRfcGFnZXModm1h LCBjb3VudCB8IGNvdW50IDw8IEk5MTVfVk1BX1BBR0VTX0JJQVMpOwo+Pgo+PiBJIHRoaW5rIHdl IG5lZWQgZG9jdW1lbnRhdGlvbiBvbiB2YXJpb3VzIGZsYWdzIGFuZCBwb3NzaWJsZSBzdGF0ZXMu Cj4gCj4gSXQgbGl0ZXJhbGx5IGlzIGp1c3QgYSBiaWFzISAoMiBjb3VudGVycyB3aXRoaW4gb25l LikKPiAKPj4+ICtpbnQgaTkxNV92bWFfcGluKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCB1NjQgc2l6 ZSwgdTY0IGFsaWdubWVudCwgdTY0IGZsYWdzKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCBpOTE1 X3ZtYV93b3JrICp3b3JrID0gTlVMTDsKPj4+ICsgICAgIHVuc2lnbmVkIGludCBib3VuZDsKPj4+ ICsgICAgIGludCBlcnI7Cj4+PiArCj4+PiArICAgICBCVUlMRF9CVUdfT04oUElOX0dMT0JBTCAh PSBJOTE1X1ZNQV9HTE9CQUxfQklORCk7Cj4+PiArICAgICBCVUlMRF9CVUdfT04oUElOX1VTRVIg IT0gSTkxNV9WTUFfTE9DQUxfQklORCk7Cj4+PiArCj4+PiArICAgICBHRU1fQlVHX09OKGZsYWdz ICYgUElOX1VQREFURSk7Cj4+PiArICAgICBHRU1fQlVHX09OKCEoZmxhZ3MgJiAoUElOX1VTRVIg fCBQSU5fR0xPQkFMKSkpOwo+Pj4gICAgCj4+PiAtICAgICBpZiAoKGJvdW5kIF4gYXRvbWljX3Jl YWQoJnZtYS0+ZmxhZ3MpKSAmIEk5MTVfVk1BX0dMT0JBTF9CSU5EKQo+Pj4gLSAgICAgICAgICAg ICBfX2k5MTVfdm1hX3NldF9tYXBfYW5kX2ZlbmNlYWJsZSh2bWEpOwo+Pj4gKyAgICAgaWYgKHRy eV9mYXN0X3Bpbih2bWEsIGZsYWdzICYgSTkxNV9WTUFfQklORF9NQVNLKSkKPj4+ICsgICAgICAg ICAgICAgcmV0dXJuIDA7Cj4+PiArCj4+PiArICAgICBlcnIgPSB2bWFfZ2V0X3BhZ2VzKHZtYSk7 Cj4+PiArICAgICBpZiAoZXJyKQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gZXJyOwo+Pj4gKwo+ Pj4gKyAgICAgaWYgKGZsYWdzICYgUElOX1VTRVIpIHsKPj4+ICsgICAgICAgICAgICAgd29yayA9 IGk5MTVfdm1hX3dvcmsoKTsKPj4+ICsgICAgICAgICAgICAgaWYgKCF3b3JrKSB7Cj4+PiArICAg ICAgICAgICAgICAgICAgICAgZXJyID0gLUVOT01FTTsKPj4+ICsgICAgICAgICAgICAgICAgICAg ICBnb3RvIGVycl9wYWdlczsKPj4+ICsgICAgICAgICAgICAgfQo+Pj4gKyAgICAgfQo+Pgo+PiBH b29kIHBsYWNlIGZvciBhIGNvbW1lbnQgdG8gZXhwbGFpbiB3aHkgUElOX1VTRVIgbmVlZHMgdG8g Z28gdmlhIHdvcmtlcgo+PiBhbmQgdGhlIHJlc3QgZG9udC4KPiAKPiBQcm9iYWJseSB3aWxsIGNo YW5nZSBpZiBteSBwbGFucyBmb3IgYnN3L2J4dCBjb21lIHRvIGZydWl0aW9uLiBBbmQKPiBjZXJ0 YWlubHkgd2lsbCBjaGFuZ2UgYWdhaW4gYXMgd2Ugd2lsbCBuZWVkIHRvIHBhc3MgZG93biB0aGUg ZmVuY2UuLi4KPiAKPj4+ICsgICAgIGVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdm1h LT52bS0+bXV0ZXgpOwo+Pj4gKyAgICAgaWYgKGVycikKPj4+ICsgICAgICAgICAgICAgZ290byBl cnJfZmVuY2U7Cj4+PiArCj4+PiArICAgICBib3VuZCA9IGF0b21pY19yZWFkKCZ2bWEtPmZsYWdz KTsKPj4+ICsgICAgIGlmICh1bmxpa2VseShib3VuZCAmIEk5MTVfVk1BX0VSUk9SKSkgewo+Pj4g KyAgICAgICAgICAgICBlcnIgPSAtRU5PTUVNOwo+Pj4gKyAgICAgICAgICAgICBnb3RvIGVycl91 bmxvY2s7Cj4+PiArICAgICB9Cj4+PiAgICAKPj4+ICsgICAgIGlmICh1bmxpa2VseSghKChib3Vu ZCArIDEpICYgSTkxNV9WTUFfUElOX01BU0spKSkgewo+Pj4gKyAgICAgICAgICAgICBlcnIgPSAt RUFHQUlOOyAvKiBwaW5zIGFyZSBtZWFudCB0byBiZSBmYWlybHkgdGVtcG9yYXJ5ICovCj4+PiAr ICAgICAgICAgICAgIGdvdG8gZXJyX3VubG9jazsKPj4+ICsgICAgIH0KPj4KPj4gRGlkIG5vdCBn ZXQgd2hhdCB0aGlzIGlzPwo+IAo+IFRoZSBvdmVyZmxvdyB0ZXN0Lgo+IAo+Pj4gKyAgICAgaWYg KHVubGlrZWx5KCEoZmxhZ3MgJiB+Ym91bmQgJiBJOTE1X1ZNQV9CSU5EX01BU0spKSkgewo+Pj4g KyAgICAgICAgICAgICBfX2k5MTVfdm1hX3Bpbih2bWEpOwo+Pj4gKyAgICAgICAgICAgICBnb3Rv IGVycl91bmxvY2s7Cj4+PiArICAgICB9Cj4+Cj4+IE9yIHRoaXMuIChDb21tZW50IHBsZWFzZS4p Cj4gCj4gQWxyZWFkeSBib3VuZCBieSBhbm90aGVyIHRocmVhZC4KPiAKPj4+ICsKPj4+ICsgICAg IGVyciA9IGk5MTVfYWN0aXZlX2FjcXVpcmUoJnZtYS0+YWN0aXZlKTsKPj4KPj4gSXQncyBkcm9w cGVkIHNvbWV3aGVyZSB0byByZWxlYXNlIGl0IGludG8gbm9ybWFsIGZsb3dzPwo+IAo+IE5vdCBt YW55IGxpbmVzIGJlbG93IGJlZm9yZSB3ZSBleGl0LiBUaGUgYWN0aXZlIGlzIGFjcXVpcmVkIGFn YWluIGZvcgo+IHRoZSBhc3luYyBvcGVyYXRpb24gdG8gYXZvaWQgdGhlIGVhcmx5IHJlbGVhc2Ug KG9uIHRoZSBzdWNjZXNzIHBhdGgpLgo+IAo+Pj4gKyAgICAgaWYgKGVycikKPj4+ICsgICAgICAg ICAgICAgZ290byBlcnJfdW5sb2NrOwo+Pj4gKwo+Pj4gKyAgICAgaWYgKCEoYm91bmQgJiBJOTE1 X1ZNQV9CSU5EX01BU0spKSB7Cj4+PiArICAgICAgICAgICAgIGVyciA9IGk5MTVfdm1hX2luc2Vy dCh2bWEsIHNpemUsIGFsaWdubWVudCwgZmxhZ3MpOwo+Pj4gKyAgICAgICAgICAgICBpZiAoZXJy KQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyX2FjdGl2ZTsKPj4+ICsKPj4+ICsg ICAgICAgICAgICAgaWYgKGk5MTVfaXNfZ2d0dCh2bWEtPnZtKSkKPj4+ICsgICAgICAgICAgICAg ICAgICAgICBfX2k5MTVfdm1hX3NldF9tYXBfYW5kX2ZlbmNlYWJsZSh2bWEpOwo+Pj4gKyAgICAg fQo+Pj4gKwo+Pj4gKyAgICAgR0VNX0JVR19PTighdm1hLT5wYWdlcyk7Cj4+PiArICAgICBlcnIg PSBpOTE1X3ZtYV9iaW5kKHZtYSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgdm1hLT5v YmogPyB2bWEtPm9iai0+Y2FjaGVfbGV2ZWwgOiAwLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBmbGFncywgd29yayk7Cj4+PiArICAgICBpZiAoZXJyKQo+Pj4gKyAgICAgICAgICAgICBn b3RvIGVycl9yZW1vdmU7Cj4+PiArCj4+PiArICAgICAvKiBUaGVyZSBzaG91bGQgb25seSBiZSBh dCBtb3N0IDIgYWN0aXZlIGJpbmRpbmdzICh1c2VyLCBnbG9iYWwpICovCj4+Cj4+IHMvYmluZGlu Z3MvcGlucy8gPyBJIHRob3VnaHQgb25lIHZtYSBpcyBvbmUgYmluZGluZyBieSBkZWZpbml0aW9u Li4gc28gSQo+PiBhbSBjb25mdXNlZC4KPiAKPiBPaCBubywgdGhhdCB3b3VsZCBiZSBmYXIgdG9v IHNpbXBsZS4gT24gZ2VuNi03ICYgYnN3LCB0aGUgdm1hIGlzIGFsaWFzZWQuCj4gT25lIHZtYSwg dHdvIGJpbmRpbmcgKFBJTl9VU0VSIC0+IGdndHQtPmFsaWFzLCBQSU5fR0xPQkFMIC0+IGdndHQp LgoKT2theSBJIGFtIG5vdCBmYW1pbGlhciB3aXRoIHRoYXQgYW5kIHRoYXQncyBhIHByb2JsZW0g d2hlbiByZXZpZXdpbmcgdGhpcy4KCldoYXQgZnVuZGFtZW50YWxseSBoYXBwZW5zIHdoZW4gc29t ZW9uZSB0cmllZCB0byBQSU5fVVNFUiBhbmQgc28gZmFyIHZtYSAKaGFkIFBJTl9HTE9CQUwgKG9y IHZpY2UtdmVyc2EpIGluIGFsaWFzaW5nIGdndHQgd29ybGQ/IEkgc2VlIHRoYXQgd2UgZ28gCnRv IHRoZSAic2xvdyIgcGF0aC4gSnVzdCBpbmNyZWFzZXMgdGhlIHBpbiBjb3VudD8KCj4gCj4+PiAr ICAgICBHRU1fQlVHX09OKGJvdW5kICsgSTkxNV9WTUFfUEFHRVNfQUNUSVZFIDwgYm91bmQpOwo+ Pj4gKyAgICAgYXRvbWljX2FkZChJOTE1X1ZNQV9QQUdFU19BQ1RJVkUsICZ2bWEtPnBhZ2VzX2Nv dW50KTsKPj4+ICsgICAgIGxpc3RfbW92ZV90YWlsKCZ2bWEtPnZtX2xpbmssICZ2bWEtPnZtLT5i b3VuZF9saXN0KTsKPj4+ICsKPj4+ICsgICAgIF9faTkxNV92bWFfcGluKHZtYSk7Cj4+PiArICAg ICBHRU1fQlVHX09OKCFpOTE1X3ZtYV9pc19waW5uZWQodm1hKSk7Cj4+PiArICAgICBHRU1fQlVH X09OKCFpOTE1X3ZtYV9pc19ib3VuZCh2bWEsIGZsYWdzKSk7Cj4+PiAgICAgICAgR0VNX0JVR19P TihpOTE1X3ZtYV9taXNwbGFjZWQodm1hLCBzaXplLCBhbGlnbm1lbnQsIGZsYWdzKSk7Cj4+PiAt ICAgICByZXR1cm4gMDsKPj4+ICAgIAo+Pj4gICAgZXJyX3JlbW92ZToKPj4+IC0gICAgIGlmICgo Ym91bmQgJiBJOTE1X1ZNQV9CSU5EX01BU0spID09IDApIHsKPj4+ICsgICAgIGlmICghaTkxNV92 bWFfaXNfYm91bmQodm1hLCBJOTE1X1ZNQV9CSU5EX01BU0spKQo+Pj4gICAgICAgICAgICAgICAg aTkxNV92bWFfcmVtb3ZlKHZtYSk7Cj4+PiAtICAgICAgICAgICAgIEdFTV9CVUdfT04odm1hLT5w YWdlcyk7Cj4+PiAtICAgICAgICAgICAgIEdFTV9CVUdfT04oYXRvbWljX3JlYWQoJnZtYS0+Zmxh Z3MpICYgSTkxNV9WTUFfQklORF9NQVNLKTsKPj4+IC0gICAgIH0KPj4+IC1lcnJfdW5waW46Cj4+ PiAtICAgICBfX2k5MTVfdm1hX3VucGluKHZtYSk7Cj4+PiAtICAgICByZXR1cm4gcmV0Owo+Pj4g K2Vycl9hY3RpdmU6Cj4+PiArICAgICBpOTE1X2FjdGl2ZV9yZWxlYXNlKCZ2bWEtPmFjdGl2ZSk7 Cj4+PiArZXJyX3VubG9jazoKPj4+ICsgICAgIG11dGV4X3VubG9jaygmdm1hLT52bS0+bXV0ZXgp Owo+Pj4gK2Vycl9mZW5jZToKPj4+ICsgICAgIGlmICh3b3JrKQo+Pj4gKyAgICAgICAgICAgICBk bWFfZmVuY2Vfd29ya19jb21taXQoJndvcmstPmJhc2UpOwo+Pj4gK2Vycl9wYWdlczoKPj4+ICsg ICAgIHZtYV9wdXRfcGFnZXModm1hKTsKPj4+ICsgICAgIHJldHVybiBlcnI7Cj4+PiAgICB9Cj4g Cj4+PiAgICB2b2lkIGk5MTVfdm1hX3BhcmtlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkKPj4+IEBAIC04MzEsMTIgKzEwMTEsMzIgQEAgdm9pZCBpOTE1X3ZtYV9wYXJrZWQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4+PiAgICAKPj4+ICAgICAgICBzcGluX2xvY2tfaXJx KCZpOTE1LT5ndC5jbG9zZWRfbG9jayk7Cj4+PiAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKHZtYSwgbmV4dCwgJmk5MTUtPmd0LmNsb3NlZF92bWEsIGNsb3NlZF9saW5rKSB7Cj4+PiAt ICAgICAgICAgICAgIGxpc3RfZGVsX2luaXQoJnZtYS0+Y2xvc2VkX2xpbmspOwo+Pj4gKyAgICAg ICAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdm1hLT5vYmo7Cj4+PiAr ICAgICAgICAgICAgIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtID0gdm1hLT52bTsKPj4+ ICsKPj4+ICsgICAgICAgICAgICAgLyogWFhYIEFsbCB0byBhdm9pZCBrZWVwaW5nIGEgcmVmZXJl bmNlIG9uIGk5MTVfdm1hIGl0c2VsZiAqLwo+Pgo+PiBEb2VzIFhYWCBzaWduaWZ5IGl0IGlzIGEg dGVtcG9yYXJ5IHN0YXRlIG9mIGNvZGUsIG9yIGp1c3QgbGlrZSBhIGNvbW1lbnQKPj4gYnV0IG1v cmUgaW1wb3J0YW50IGluIHNvbWUgd2F5Pwo+IAo+IEl0J3MgYSBjcml0aXF1ZSBvZiB0aGUgdWds eSBjb2RlICh0aGUgY29tbWVudCB5b3UgYXNrZWQgZm9yIGJlZm9yZSkgdGhhdAo+IGlzIHJlcXVp cmVkIGJlY2F1c2UgSSBkaWRuJ3Qgd2FudCB0byBoYXZlIHRvIHRocm93IGF3YXkgdGhlIGVudGly ZSBsbWVtCj4gb2JqZWN0IGhhbmRsaW5nIGNvZGUuCj4gCj4+PiBAQCAtOTc2LDcgKzk3Nyw2IEBA IHN0YXRpYyBpbnQgaWd0X3ZtYV9yZW1hcHBlZF9ndHQodm9pZCAqYXJnKQo+Pj4gICAgCj4+PiAg ICBvdXQ6Cj4+PiAgICAgICAgaW50ZWxfcnVudGltZV9wbV9wdXQoJmk5MTUtPnJ1bnRpbWVfcG0s IHdha2VyZWYpOwo+Pj4gLSAgICAgbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4 KTsKPj4+ICAgICAgICBpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4+PiAgICAKPj4+ICAgICAg ICByZXR1cm4gZXJyOwo+Pj4KPj4KPj4gSW4gZ2VuZXJhbCwgZXZlbiB3aGVuIEkgZGlkIG5vdCBl eHBsaWNpdGx5IGFza2VkIGZvciBhIGNvbW1lbnQsIHBsYWNlcwo+PiB3aGVyZSB0aGluZ3Mgd2Vy ZW4ndCBjbGVhciB0byBtZSBzaG91bGQgYmUgY29uc2lkZXJlZCB0byBoYXZlIHRoZW0gYWRkZWQK Pj4gYW5kIHByb2JhYmx5IG1vcmUuCj4gCj4gSG93IGVsc2UgZG8gSSBrbm93IHdoYXQgaXNuJ3Qg Y2xlYXIgdG8geW91Li4uIDspCgpHb29kLCB3aGVuIGNhbiBJIGV4cGVjdCBhIG1vcmUgYW5ub3Rh dGVkIHZlcnNpb24/CgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeA==