From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: Re: [PATCH] drm/i915: Engine relative MMIO Date: Mon, 6 May 2019 14:36:53 -0700 Message-ID: <20190506213653.GE26797@intel.com> References: <20190424015013.30540-1-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id BB33589C05 for ; Mon, 6 May 2019 21:36:31 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190424015013.30540-1-John.C.Harrison@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: John.C.Harrison@intel.com Cc: Intel-GFX@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBBcHIgMjMsIDIwMTkgYXQgMDY6NTA6MTNQTSAtMDcwMCwgSm9obi5DLkhhcnJpc29u QEludGVsLmNvbSB3cm90ZToKPiBGcm9tOiBKb2huIEhhcnJpc29uIDxKb2huLkMuSGFycmlzb25A SW50ZWwuY29tPgo+IAo+IFdpdGggdmlydHVhbCBlbmdpbmVzLCBpdCBpcyBubyBsb25nZXIgcG9z c2libGUgdG8ga25vdyB3aGljaCBzcGVjaWZpYwo+IHBoeXNpY2FsIGVuZ2luZSBhIGdpdmVuIHJl cXVlc3Qgd2lsbCBiZSBleGVjdXRlZCBvbiBhdCB0aGUgdGltZSB0aGF0Cj4gcmVxdWVzdCBpcyBn ZW5lcmF0ZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgcmVxdWVzdCBpdHNlbGYgbXVzdCBiZSBlbmdp bmUKPiBhZ25vc3RpYyAtIGFueSBkaXJlY3QgcmVnaXN0ZXIgd3JpdGVzIG11c3QgYmUgcmVsYXRp dmUgdG8gdGhlIGVuZ2luZQo+IGFuZCBub3QgYWJzb2x1dGUgYWRkcmVzc2VzLgo+IAo+IFRoZSBM UkkgY29tbWFuZCBoYXMgc3VwcG9ydCBmb3IgZW5naW5lIHJlbGF0aXZlIGFkZHJlc3NpbmcuIEhv d2V2ZXIsCj4gdGhlIG1lY2hhbmlzbSBpcyBub3QgdHJhbnNwYXJlbnQgdG8gdGhlIGRyaXZlci4g VGhlIHNjaGVtZSBmb3IgR2VuMTEKPiAoTUlfTFJJX0FERF9DU19NTUlPX1NUQVJUKSByZXF1aXJl cyB0aGUgTFJJIGFkZHJlc3MgdG8gaGF2ZSBubwo+IGFic29sdXRlIGVuZ2luZSBiYXNlIGNvbXBv bmVudC4gVGhlIGhhcmR3YXJlIHRoZW4gYWRkcyBvbiB0aGUgY29ycmVjdAo+IGVuZ2luZSBvZmZz ZXQgYXQgZXhlY3V0aW9uIHRpbWUuCj4gCj4gRHVlIHRvIHRoZSBub24tdHJpdmlhbCBhbmQgZGlm ZmVyaW5nIHNjaGVtZXMgb24gZGlmZmVyZW50IGhhcmR3YXJlLCBpdAo+IGlzIG5vdCBwb3NzaWJs ZSB0byBzaW1wbHkgdXBkYXRlIHRoZSBjb2RlIHRoYXQgY3JlYXRlcyB0aGUgTFJJCj4gY29tbWFu ZHMgdG8gc2V0IGEgcmVtYXAgZmxhZyBhbmQgbGV0IHRoZSBoYXJkd2FyZSBnZXQgb24gd2l0aCBp dC4KPiBJbnN0ZWFkLCB0aGlzIHBhdGNoIGFkZHMgZnVuY3Rpb24gd3JhcHBlcnMgZm9yIGdlbmVy YXRpbmcgdGhlIExSSQo+IGNvbW1hbmQgaXRzZWxmIGFuZCB0aGVuIGZvciBjb25zdHJ1Y3Rpbmcg dGhlIGNvcnJlY3QgYWRkcmVzcyB0byB1c2UKPiB3aXRoIHRoZSBMUkkuCj4gCj4gdjI6IEZpeCBi dWlsZCBicmVhayBpbiBHVlQuIFJlbW92ZSBmbGFncyBwYXJhbWV0ZXIgW3JldmlldyBmZWVkYmFj awo+IGZyb20gQ2hyaXMgV10uCj4gCj4gdjM6IEZpeCBidWlsZCBicmVhayBpbiBzZWxmdGVzdC4g UmViYXNlIHRvIG5ld2VyIGJhc2UgdHJlZSBhbmQgZml4Cj4gbWVyZ2UgY29uZmxpY3QuCj4gCj4g djQ6IE1vcmUgcmViYXNpbmcuIFJtb3ZlZCByZWxhdGl2ZSBhZGRyZXNzaW5nIHN1cHBvcnQgZnJv bSBHZW43LTkgb25seQo+IGNvZGUgcGF0aHMgW3JldmlldyBmZWVkYmFjayBmcm9tIENocmlzIFdd LgoKRmlyc3Qgb2YgYWxsLCB3b3VsZCB5b3UgaGF2ZSBhIHJlYmFzZWQgdmVyc2lvbiBhZnRlciBn dC8gPwoKU28sIGZyb20gbXkgcG9pbnQgb2YgdmlldyB2MyB3YXMgYmV0dGVyIHRoYW4gdGhpcyBi ZWNhdXNlIHRoaXMgc3ByZWFkCnRoZSBfX01JX0xPQURfUkVHSVNURVJfSU1NIGV2ZXJ5d2hlcmUu CgpNYXliZSBJIGp1c3QgZGlzYWdyZWUgd2l0aCBDaHJpcyBhbmQgSSdkIHByZWZlciBhIHNpbmds ZSBwbGFjZQpsaWtlIHYzLCBidXQgYW55d2F5IHdlIGNvdWxkIHByb2JhYmx5IGFycml2ZSBpbiBh biBpbnRlcm1lZGlhdGUKc29sdXRpb24gbGlrZTogQ291bGRuJ3Qgd2UgZG8gaW4gYSB3YXkgdGhh dCB3ZSBrZWVwIHRoZSBNSV9MUkkgd2l0aG91dAonX18nIGFuZCB1c2UgdGhpcyBuZXcgZnVuY3Rp b24gb25seSBvbiB0aGUgcGF0aHMgbmVlZGVkPwoKYW5kIG1heWJlIG5hbWUgdGhpcyBmdW5jdGlv biBnZW4xMV9nZXRfbHJpX2NtZD8gdG8gbWFrZSBpdCBjbGVhcgp0aGF0IGdlbjExKyBuZWVkcyB0 byB1c2UgdGhpcyBwYXRoLgoKPiAKPiBTaWduZWQtb2ZmLWJ5OiBKb2huIEhhcnJpc29uIDxKb2hu LkMuSGFycmlzb25ASW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv bW1pb19jb250ZXh0LmMgICAgICAgfCAxNiArKystCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfY21kX3BhcnNlci5jICAgICAgICB8ICA0ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2NvbnRleHQuYyAgICAgICB8IDEyICstLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9leGVjYnVmZmVyLmMgICAgfCAgMyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3BlcmYuYyAgICAgICAgICAgICAgfCAxOSArKystLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9lbmdpbmVfY3MuYyAgICAgICAgfCAxMSArKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZ3B1X2NvbW1hbmRzLmggICAgIHwgIDYgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfbHJjLmMgICAgICAgICAgICAgIHwgNzkgKysrKysrKysrKy0tLS0tLS0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmNfcmVnLmggICAgICAgICAgfCAgNCArLQo+ICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMgICAgICAgICAgICAgfCAxNyArKy0tCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyAgICAgICB8IDQ1ICsrKysr KysrKy0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCAgICAgICB8 ICA0ICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuYyAgICAgIHwg IDQgKy0KPiAgLi4uL2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF93b3JrYXJvdW5kcy5jICAgIHwg IDkgKystCj4gIDE0IGZpbGVzIGNoYW5nZWQsIDE1NCBpbnNlcnRpb25zKCspLCA3OSBkZWxldGlv bnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L21taW9fY29u dGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L21taW9fY29udGV4dC5jCj4gaW5kZXgg ZTdlMTRjODQyYmU0Li4xYjRkNzhlNTVlZDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Z0L21taW9fY29udGV4dC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0 L21taW9fY29udGV4dC5jCj4gQEAgLTE5OSwxNCArMTk5LDE0IEBAIHJlc3RvcmVfY29udGV4dF9t bWlvX2Zvcl9pbmhpYml0KHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LAo+ICAJaWYgKElTX0VSUihj cykpCj4gIAkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICAKPiAtCSpjcysrID0gTUlfTE9BRF9SRUdJ U1RFUl9JTU0oY291bnQpOwo+ICsJKmNzKysgPSBpOTE1X2dldF9scmlfY21kKHJlcS0+ZW5naW5l LCBjb3VudCk7Cj4gIAlmb3IgKG1taW8gPSBndnQtPmVuZ2luZV9tbWlvX2xpc3QubW1pbzsKPiAg CSAgICAgaTkxNV9tbWlvX3JlZ192YWxpZChtbWlvLT5yZWcpOyBtbWlvKyspIHsKPiAgCQlpZiAo bW1pby0+cmluZ19pZCAhPSByaW5nX2lkIHx8Cj4gIAkJICAgICFtbWlvLT5pbl9jb250ZXh0KQo+ ICAJCQljb250aW51ZTsKPiAgCj4gLQkJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChtbWlv LT5yZWcpOwo+ICsJCSpjcysrID0gaTkxNV9nZXRfbHJpX3JlZyhyZXEtPmVuZ2luZSwgbW1pby0+ cmVnKTsKPiAgCQkqY3MrKyA9IHZncHVfdnJlZ190KHZncHUsIG1taW8tPnJlZykgfAo+ICAJCQkJ KG1taW8tPm1hc2sgPDwgMTYpOwo+ICAJCWd2dF9kYmdfY29yZSgiYWRkIGxyaSByZWcgcGFpciAw eCV4OjB4JXggaW4gaW5oaWJpdCBjdHgsIHZncHU6JWQsIHJpbmRfaWQ6JWRcbiIsCj4gQEAgLTIz NCw3ICsyMzQsMTEgQEAgcmVzdG9yZV9yZW5kZXJfbW9jc19jb250cm9sX2Zvcl9pbmhpYml0KHN0 cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LAo+ICAJaWYgKElTX0VSUihjcykpCj4gIAkJcmV0dXJuIFBU Ul9FUlIoY3MpOwo+ICAKPiAtCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oR0VOOV9NT0NT X1NJWkUpOwo+ICsJLyoKPiArCSAqIEdFTjlfR0ZYX01PQ1MgaXMgbm90IGVuZ2luZSByZWxhdGl2 ZSwgdGhlcmVmb3JlIHRoZXJlIGlzIG5vCj4gKwkgKiBuZWVkIGZvciByZWxhdGl2ZSBhZGRyZXNz aW5nLgo+ICsJICovCj4gKwkqY3MrKyA9IF9fTUlfTE9BRF9SRUdJU1RFUl9JTU0oR0VOOV9NT0NT X1NJWkUpOwo+ICAKPiAgCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEdFTjlfTU9DU19TSVpFOyBp bmRleCsrKSB7Cj4gIAkJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU45X0dGWF9NT0NT KGluZGV4KSk7Cj4gQEAgLTI2MSw3ICsyNjUsMTEgQEAgcmVzdG9yZV9yZW5kZXJfbW9jc19sM2Nj X2Zvcl9pbmhpYml0KHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LAo+ICAJaWYgKElTX0VSUihjcykp Cj4gIAkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICAKPiAtCSpjcysrID0gTUlfTE9BRF9SRUdJU1RF Ul9JTU0oR0VOOV9NT0NTX1NJWkUgLyAyKTsKPiArCS8qCj4gKwkgKiBHRU45X0xOQ0ZDTU9DUyBp cyBub3QgZW5naW5lIHJlbGF0aXZlLCB0aGVyZWZvcmUgdGhlcmUgaXMgbm8KPiArCSAqIG5lZWQg Zm9yIHJlbGF0aXZlIGFkZHJlc3NpbmcuCj4gKwkgKi8KPiArCSpjcysrID0gX19NSV9MT0FEX1JF R0lTVEVSX0lNTShHRU45X01PQ1NfU0laRSAvIDIpOwo+ICAKPiAgCWZvciAoaW5kZXggPSAwOyBp bmRleCA8IEdFTjlfTU9DU19TSVpFIC8gMjsgaW5kZXgrKykgewo+ICAJCSpjcysrID0gaTkxNV9t bWlvX3JlZ19vZmZzZXQoR0VOOV9MTkNGQ01PQ1MoaW5kZXgpKTsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2NtZF9wYXJzZXIuYwo+IGluZGV4IDUwM2Q1NDhhNTVmNy4uOTFlYmUxOGFhY2M2IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfY21kX3BhcnNlci5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMKPiBAQCAtMjIwLDcgKzIy MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfY21kX2Rlc2NyaXB0b3IgY29tbW9u X2NtZHNbXSA9IHsKPiAgCUNNRCggIE1JX1NVU1BFTkRfRkxVU0gsICAgICAgICAgICAgICAgICBT TUksICAgIEYsICAxLCAgICAgIFMgICksCj4gIAlDTUQoICBNSV9TRU1BUEhPUkVfTUJPWCwgICAg ICAgICAgICAgICAgU01JLCAgICFGLCAgMHhGRiwgICBSICApLAo+ICAJQ01EKCAgTUlfU1RPUkVf RFdPUkRfSU5ERVgsICAgICAgICAgICAgIFNNSSwgICAhRiwgIDB4RkYsICAgUiAgKSwKPiAtCUNN RCggIE1JX0xPQURfUkVHSVNURVJfSU1NKDEpLCAgICAgICAgICBTTUksICAgIUYsICAweEZGLCAg IFcsCj4gKwlDTUQoICBfX01JX0xPQURfUkVHSVNURVJfSU1NKDEpLCAgICAgICAgU01JLCAgICFG LCAgMHhGRiwgICBXLAo+ICAJICAgICAgLnJlZyA9IHsgLm9mZnNldCA9IDEsIC5tYXNrID0gMHgw MDdGRkZGQywgLnN0ZXAgPSAyIH0gICAgKSwKPiAgCUNNRCggIE1JX1NUT1JFX1JFR0lTVEVSX01F TSwgICAgICAgICAgICBTTUksICAgIEYsICAzLCAgICAgVyB8IEIsCj4gIAkgICAgICAucmVnID0g eyAub2Zmc2V0ID0gMSwgLm1hc2sgPSAweDAwN0ZGRkZDIH0sCj4gQEAgLTExODIsNyArMTE4Miw3 IEBAIHN0YXRpYyBib29sIGNoZWNrX2NtZChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsCj4gIAkJCQkJcmV0dXJuIGZhbHNlOwo+ICAJCQkJfQo+ICAKPiAtCQkJCWlmIChkZXNj LT5jbWQudmFsdWUgPT0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSkgJiYKPiArCQkJCWlmIChkZXNj LT5jbWQudmFsdWUgPT0gX19NSV9MT0FEX1JFR0lTVEVSX0lNTSgxKSAmJgo+ICAJCQkJICAgIChv ZmZzZXQgKyAyID4gbGVuZ3RoIHx8Cj4gIAkJCQkgICAgIChjbWRbb2Zmc2V0ICsgMV0gJiByZWct Pm1hc2spICE9IHJlZy0+dmFsdWUpKSB7Cj4gIAkJCQkJRFJNX0RFQlVHX0RSSVZFUigiQ01EOiBS ZWplY3RlZCBMUkkgdG8gbWFza2VkIHJlZ2lzdGVyIDB4JTA4WFxuIiwKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4gaW5kZXggZGQ3MjhiMjZiNWFhLi5mMjVkYzYxM2My NjYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4gQEAgLTEw MzksMTEgKzEwMzksMTEgQEAgc3RhdGljIGludCBlbWl0X3BwZ3R0X3VwZGF0ZShzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSkKPiAgCQlpZiAoSVNfRVJSKGNzKSkKPiAgCQkJcmV0 dXJuIFBUUl9FUlIoY3MpOwo+ICAKPiAtCQkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDIp Owo+ICsJCSpjcysrID0gaTkxNV9nZXRfbHJpX2NtZChlbmdpbmUsIDIpOwo+ICAKPiAtCQkqY3Mr KyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBfVURXKGJhc2UsIDApKTsKPiAr CQkqY3MrKyA9IGk5MTVfZ2V0X2xyaV9yZWcoZW5naW5lLCBHRU44X1JJTkdfUERQX1VEVyhiYXNl LCAwKSk7Cj4gIAkJKmNzKysgPSB1cHBlcl8zMl9iaXRzKHBkX2RhZGRyKTsKPiAtCQkqY3MrKyA9 IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBfTERXKGJhc2UsIDApKTsKPiArCQkq Y3MrKyA9IGk5MTVfZ2V0X2xyaV9yZWcoZW5naW5lLCBHRU44X1JJTkdfUERQX0xEVyhiYXNlLCAw KSk7Cj4gIAkJKmNzKysgPSBsb3dlcl8zMl9iaXRzKHBkX2RhZGRyKTsKPiAgCj4gIAkJKmNzKysg PSBNSV9OT09QOwo+IEBAIC0xMDUzLDEzICsxMDUzLDEzIEBAIHN0YXRpYyBpbnQgZW1pdF9wcGd0 dF91cGRhdGUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHZvaWQgKmRhdGEpCj4gIAkJaWYgKElT X0VSUihjcykpCj4gIAkJCXJldHVybiBQVFJfRVJSKGNzKTsKPiAgCj4gLQkJKmNzKysgPSBNSV9M T0FEX1JFR0lTVEVSX0lNTSgyICogR0VOOF8zTFZMX1BEUEVTKTsKPiArCQkqY3MrKyA9IGk5MTVf Z2V0X2xyaV9jbWQoZW5naW5lLCAyICogR0VOOF8zTFZMX1BEUEVTKTsKPiAgCQlmb3IgKGkgPSBH RU44XzNMVkxfUERQRVM7IGktLTsgKSB7Cj4gIAkJCWNvbnN0IGRtYV9hZGRyX3QgcGRfZGFkZHIg PSBpOTE1X3BhZ2VfZGlyX2RtYV9hZGRyKHBwZ3R0LCBpKTsKPiAgCj4gLQkJCSpjcysrID0gaTkx NV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgaSkpOwo+ICsJCQkqY3Mr KyA9IGk5MTVfZ2V0X2xyaV9yZWcoZW5naW5lLCBHRU44X1JJTkdfUERQX1VEVyhiYXNlLCBpKSk7 Cj4gIAkJCSpjcysrID0gdXBwZXJfMzJfYml0cyhwZF9kYWRkcik7Cj4gLQkJCSpjcysrID0gaTkx NV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgaSkpOwo+ICsJCQkqY3Mr KyA9IGk5MTVfZ2V0X2xyaV9yZWcoZW5naW5lLCBHRU44X1JJTkdfUERQX0xEVyhiYXNlLCBpKSk7 Cj4gIAkJCSpjcysrID0gbG93ZXJfMzJfYml0cyhwZF9kYWRkcik7Cj4gIAkJfQo+ICAJCSpjcysr ID0gTUlfTk9PUDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f ZXhlY2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5j Cj4gaW5kZXggM2Q2NzJjOWVkYjk0Li45ODM4MDFmNDgxYmEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gQEAgLTE5NjUsNyArMTk2NSw4IEBAIHN0 YXRpYyBpbnQgaTkxNV9yZXNldF9nZW43X3NvbF9vZmZzZXRzKHN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJxKQo+ICAJaWYgKElTX0VSUihjcykpCj4gIAkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICAKPiAt CSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oNCk7Cj4gKwkvKiBHZW43IG9ubHkgc28gbm8g bmVlZCB0byBzdXBwb3J0IHJlbGF0aXZlIG9mZnNldHMgKi8KPiArCSpjcysrID0gX19NSV9MT0FE X1JFR0lTVEVSX0lNTSg0KTsKPiAgCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKPiAgCQkqY3Mr KyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjdfU09fV1JJVEVfT0ZGU0VUKGkpKTsKPiAgCQkq Y3MrKyA9IDA7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKPiBpbmRleCAzOWE0ODA0MDkxZDcu LjEwZDVhYjk5MTkwOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Bl cmYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCj4gQEAgLTE2Mjgs NyArMTYyOCw4IEBAIHN0YXRpYyB2b2lkIGhzd19kaXNhYmxlX21ldHJpY19zZXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgKiBpbiB0aGUgY2FzZSB0aGF0IHRoZSBPQSB1 bml0IGhhcyBiZWVuIGRpc2FibGVkLgo+ICAgKi8KPiAgc3RhdGljIHZvaWQKPiAtZ2VuOF91cGRh dGVfcmVnX3N0YXRlX3VubG9ja2VkKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiArZ2VuOF91 cGRhdGVfcmVnX3N0YXRlX3VubG9ja2VkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwK PiArCQkJICAgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAgCQkJICAgICAgIHUzMiAq cmVnX3N0YXRlLAo+ICAJCQkgICAgICAgY29uc3Qgc3RydWN0IGk5MTVfb2FfY29uZmlnICpvYV9j b25maWcpCj4gIHsKPiBAQCAtMTY0Nyw3ICsxNjQ4LDEyIEBAIGdlbjhfdXBkYXRlX3JlZ19zdGF0 ZV91bmxvY2tlZChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4gIAl9Owo+ICAJaW50IGk7Cj4g IAo+IC0JQ1RYX1JFRyhyZWdfc3RhdGUsIGN0eF9vYWN0eGN0cmwsIEdFTjhfT0FDVFhDT05UUk9M LAo+ICsJLyoKPiArCSAqIE5COiBUaGUgTFJJIGluc3RydWN0aW9uIGlzIGdlbmVyYXRlZCBieSB0 aGUgaGFyZHdhcmUuCj4gKwkgKiBTaG91bGQgd2UgcmVhZCBpdCBpbiBhbmQgYXNzZXJ0IHRoYXQg dGhlIG9mZnNldCBmbGFnIGlzIHNldD8KPiArCSAqLwo+ICsKPiArCUNUWF9SRUcoZW5naW5lLCBy ZWdfc3RhdGUsIGN0eF9vYWN0eGN0cmwsIEdFTjhfT0FDVFhDT05UUk9MLAo+ICAJCShpOTE1LT5w ZXJmLm9hLnBlcmlvZF9leHBvbmVudCA8PCBHRU44X09BX1RJTUVSX1BFUklPRF9TSElGVCkgfAo+ ICAJCShpOTE1LT5wZXJmLm9hLnBlcmlvZGljID8gR0VOOF9PQV9USU1FUl9FTkFCTEUgOiAwKSB8 Cj4gIAkJR0VOOF9PQV9DT1VOVEVSX1JFU1VNRSk7Cj4gQEAgLTE2NzQsMTAgKzE2ODAsMTAgQEAg Z2VuOF91cGRhdGVfcmVnX3N0YXRlX3VubG9ja2VkKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwK PiAgCQkJfQo+ICAJCX0KPiAgCj4gLQkJQ1RYX1JFRyhyZWdfc3RhdGUsIHN0YXRlX29mZnNldCwg ZmxleF9yZWdzW2ldLCB2YWx1ZSk7Cj4gKwkJQ1RYX1JFRyhlbmdpbmUsIHJlZ19zdGF0ZSwgc3Rh dGVfb2Zmc2V0LCBmbGV4X3JlZ3NbaV0sIHZhbHVlKTsKPiAgCX0KPiAgCj4gLQlDVFhfUkVHKHJl Z19zdGF0ZSwKPiArCUNUWF9SRUcoZW5naW5lLCByZWdfc3RhdGUsCj4gIAkJQ1RYX1JfUFdSX0NM S19TVEFURSwgR0VOOF9SX1BXUl9DTEtfU1RBVEUsCj4gIAkJZ2VuOF9tYWtlX3JwY3MoaTkxNSwg JmNlLT5zc2V1KSk7Cj4gIH0KPiBAQCAtMTc1Miw3ICsxNzU4LDcgQEAgc3RhdGljIGludCBnZW44 X2NvbmZpZ3VyZV9hbGxfY29udGV4dHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+ICAJCWNlLT5zdGF0ZS0+b2JqLT5tbS5kaXJ0eSA9IHRydWU7Cj4gIAkJcmVncyArPSBMUkNf U1RBVEVfUE4gKiBQQUdFX1NJWkUgLyBzaXplb2YoKnJlZ3MpOwo+ICAKPiAtCQlnZW44X3VwZGF0 ZV9yZWdfc3RhdGVfdW5sb2NrZWQoY2UsIHJlZ3MsIG9hX2NvbmZpZyk7Cj4gKwkJZ2VuOF91cGRh dGVfcmVnX3N0YXRlX3VubG9ja2VkKGVuZ2luZSwgY2UsIHJlZ3MsIG9hX2NvbmZpZyk7Cj4gIAo+ ICAJCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoY2UtPnN0YXRlLT5vYmopOwo+ICAJfQo+IEBA IC0yMTQ2LDcgKzIxNTIsOCBAQCB2b2lkIGk5MTVfb2FfaW5pdF9yZWdfc3RhdGUoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAKPiAgCXN0cmVhbSA9IGVuZ2luZS0+aTkxNS0+cGVy Zi5vYS5leGNsdXNpdmVfc3RyZWFtOwo+ICAJaWYgKHN0cmVhbSkKPiAtCQlnZW44X3VwZGF0ZV9y ZWdfc3RhdGVfdW5sb2NrZWQoY2UsIHJlZ3MsIHN0cmVhbS0+b2FfY29uZmlnKTsKPiArCQlnZW44 X3VwZGF0ZV9yZWdfc3RhdGVfdW5sb2NrZWQoZW5naW5lLCBjZSwgcmVncywKPiArCQkJCQkgICAg ICAgc3RyZWFtLT5vYV9jb25maWcpOwo+ICB9Cj4gIAo+ICAvKioKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9lbmdpbmVfY3MuYwo+IGluZGV4IGVlYTliZWMwNGYxYi4uZWUzM2NlMjY1ODIwIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMKPiBAQCAtMjQ2LDYgKzI0 NiwxNyBAQCBzdGF0aWMgdTMyIF9fZW5naW5lX21taW9fYmFzZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSwKPiAgCXJldHVybiBiYXNlc1tpXS5iYXNlOwo+ICB9Cj4gIAo+ICtib29sIGk5 MTVfZW5naW5lX2hhc19yZWxhdGl2ZV9scmkoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQo+ICt7Cj4gKwlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPCAxMSkKPiArCQly ZXR1cm4gZmFsc2U7Cj4gKwo+ICsJaWYgKGVuZ2luZS0+aWQgPT0gQkNTMCkKPiArCQlyZXR1cm4g ZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkIF9fc3By aW50X2VuZ2luZV9uYW1lKGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBlbmdpbmVfaW5mbyAqaW5m bykKPiAgewo+ICAJV0FSTl9PTihzbnByaW50ZihuYW1lLCBJTlRFTF9FTkdJTkVfQ1NfTUFYX05B TUUsICIlcyV1IiwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3B1 X2NvbW1hbmRzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ncHVfY29tbWFuZHMuaAo+ IGluZGV4IGEzNGVjZTUzYTc3MS4uZTc3ODRiM2ZiNzU5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2dwdV9jb21tYW5kcy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZ3B1X2NvbW1hbmRzLmgKPiBAQCAtMTIzLDkgKzEyMywxMyBAQAo+ICAgKiAg IHNpbXBseSBpZ25vcmVzIHRoZSByZWdpc3RlciBsb2FkIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9u cy4KPiAgICogLSBPbmUgY2FuIGFjdHVhbGx5IGxvYWQgYXJiaXRyYXJ5IG1hbnkgYXJiaXRyYXJ5 IHJlZ2lzdGVyczogU2ltcGx5IGlzc3VlIHgKPiAgICogICBhZGRyZXNzL3ZhbHVlIHBhaXJzLiBE b24ndCBvdmVyZHVlIGl0LCB0aG91Z2gsIHggPD0gMl40IG11c3QgaG9sZCEKPiArICogLSBOZXdl ciBoYXJkd2FyZSBzdXBwb3J0cyBlbmdpbmUgcmVsYXRpdmUgYWRkcmVzc2VzIGJ1dCBvbGRlciBo YXJkd2FyZSBkb2VzCj4gKyAqICAgbm90LiBTbyBuZXZlciBjYWxsIE1JX0xSSSBkaXJlY3RseSwg YWx3YXlzIHVzZSB0aGUgaTkxNV9nZXRfbHJpX2NtZCgpCj4gKyAqICAgYW5kIGk5MTVfZ2V0X2xy aV9yZWcoKSBoZWxwZXIgZnVuY3Rpb25zLgo+ICAgKi8KPiAtI2RlZmluZSBNSV9MT0FEX1JFR0lT VEVSX0lNTSh4KQlNSV9JTlNUUigweDIyLCAyKih4KS0xKQo+ICsjZGVmaW5lIF9fTUlfTE9BRF9S RUdJU1RFUl9JTU0oeCkJTUlfSU5TVFIoMHgyMiwgMiooeCktMSkKPiAgI2RlZmluZSAgIE1JX0xS SV9GT1JDRV9QT1NURUQJCSgxPDwxMikKPiArI2RlZmluZSAgIE1JX0xSSV9BRERfQ1NfTU1JT19T VEFSVF9HRU4xMQkoMTw8MTkpCj4gICNkZWZpbmUgTUlfU1RPUkVfUkVHSVNURVJfTUVNICAgICAg ICBNSV9JTlNUUigweDI0LCAxKQo+ICAjZGVmaW5lIE1JX1NUT1JFX1JFR0lTVEVSX01FTV9HRU44 ICAgTUlfSU5TVFIoMHgyNCwgMikKPiAgI2RlZmluZSAgIE1JX1NSTV9MUk1fR0xPQkFMX0dUVAkJ KDE8PDIyKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gaW5kZXggNGUwYTM1MWJmYmNhLi40 MWNiYmNkOWYwZGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJj LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+IEBAIC0xMzgzLDE0 ICsxMzgzLDE1IEBAIHN0YXRpYyBpbnQgZW1pdF9wZHBzKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx KQo+ICAJCXJldHVybiBQVFJfRVJSKGNzKTsKPiAgCj4gIAkvKiBFbnN1cmUgdGhlIExSSSBoYXZl IGxhbmRlZCBiZWZvcmUgd2UgaW52YWxpZGF0ZSAmIGNvbnRpbnVlICovCj4gLQkqY3MrKyA9IE1J X0xPQURfUkVHSVNURVJfSU1NKDIgKiBHRU44XzNMVkxfUERQRVMpIHwgTUlfTFJJX0ZPUkNFX1BP U1RFRDsKPiArCSpjcysrID0gaTkxNV9nZXRfbHJpX2NtZChlbmdpbmUsIDIgKiBHRU44XzNMVkxf UERQRVMpIHwKPiArCQkJCSBNSV9MUklfRk9SQ0VfUE9TVEVEOwo+ICAJZm9yIChpID0gR0VOOF8z TFZMX1BEUEVTOyBpLS07ICkgewo+ICAJCWNvbnN0IGRtYV9hZGRyX3QgcGRfZGFkZHIgPSBpOTE1 X3BhZ2VfZGlyX2RtYV9hZGRyKHBwZ3R0LCBpKTsKPiAgCQl1MzIgYmFzZSA9IGVuZ2luZS0+bW1p b19iYXNlOwo+ICAKPiAtCQkqY3MrKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19Q RFBfVURXKGJhc2UsIGkpKTsKPiArCQkqY3MrKyA9IGk5MTVfZ2V0X2xyaV9yZWcoZW5naW5lLCBH RU44X1JJTkdfUERQX1VEVyhiYXNlLCBpKSk7Cj4gIAkJKmNzKysgPSB1cHBlcl8zMl9iaXRzKHBk X2RhZGRyKTsKPiAtCQkqY3MrKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBf TERXKGJhc2UsIGkpKTsKPiArCQkqY3MrKyA9IGk5MTVfZ2V0X2xyaV9yZWcoZW5naW5lLCBHRU44 X1JJTkdfUERQX0xEVyhiYXNlLCBpKSk7Cj4gIAkJKmNzKysgPSBsb3dlcl8zMl9iaXRzKHBkX2Rh ZGRyKTsKPiAgCX0KPiAgCSpjcysrID0gTUlfTk9PUDsKPiBAQCAtMTQ2NCw3ICsxNDY1LDggQEAg Z2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNfd2Eoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLCB1MzIgKmJhdGNoKQo+ICAJKmJhdGNoKysgPSBpOTE1X3NjcmF0Y2hfb2Zmc2V0KGVuZ2lu ZS0+aTkxNSkgKyAyNTY7Cj4gIAkqYmF0Y2grKyA9IDA7Cj4gIAo+IC0JKmJhdGNoKysgPSBNSV9M T0FEX1JFR0lTVEVSX0lNTSgxKTsKPiArCS8qIEdlbjgvOSBvbmx5IHNvIG5vIG5lZWQgdG8gc3Vw cG9ydCByZWxhdGl2ZSBvZmZzZXRzICovCj4gKwkqYmF0Y2grKyA9IF9fTUlfTE9BRF9SRUdJU1RF Ul9JTU0oMSk7Cj4gIAkqYmF0Y2grKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfTDNTUUNS RUc0KTsKPiAgCSpiYXRjaCsrID0gMHg0MDQwMDAwMCB8IEdFTjhfTFFTQ19GTFVTSF9DT0hFUkVO VF9MSU5FUzsKPiAgCj4gQEAgLTE1MzUsMTMgKzE1MzcsMTQgQEAgc3RydWN0IGxyaSB7Cj4gIAl1 MzIgdmFsdWU7Cj4gIH07Cj4gIAo+IC1zdGF0aWMgdTMyICplbWl0X2xyaSh1MzIgKmJhdGNoLCBj b25zdCBzdHJ1Y3QgbHJpICpscmksIHVuc2lnbmVkIGludCBjb3VudCkKPiArc3RhdGljIHUzMiAq ZW1pdF9scmkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNoLAo+ICsJ CSAgICAgY29uc3Qgc3RydWN0IGxyaSAqbHJpLCB1bnNpZ25lZCBpbnQgY291bnQpCj4gIHsKPiAg CUdFTV9CVUdfT04oIWNvdW50IHx8IGNvdW50ID4gNjMpOwo+ICAKPiAtCSpiYXRjaCsrID0gTUlf TE9BRF9SRUdJU1RFUl9JTU0oY291bnQpOwo+ICsJKmJhdGNoKysgPSBpOTE1X2dldF9scmlfY21k KGVuZ2luZSwgY291bnQpOwo+ICAJZG8gewo+IC0JCSpiYXRjaCsrID0gaTkxNV9tbWlvX3JlZ19v ZmZzZXQobHJpLT5yZWcpOwo+ICsJCSpiYXRjaCsrID0gaTkxNV9nZXRfbHJpX3JlZyhlbmdpbmUs IGxyaS0+cmVnKTsKPiAgCQkqYmF0Y2grKyA9IGxyaS0+dmFsdWU7Cj4gIAl9IHdoaWxlIChscmkr KywgLS1jb3VudCk7Cj4gIAkqYmF0Y2grKyA9IE1JX05PT1A7Cj4gQEAgLTE1NzksNyArMTU4Miw3 IEBAIHN0YXRpYyB1MzIgKmdlbjlfaW5pdF9pbmRpcmVjdGN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsIHUzMiAqYmF0Y2gpCj4gIAkvKiBXYUZsdXNoQ29oZXJlbnRMM0NhY2hl TGluZXNBdENvbnRleHRTd2l0Y2g6c2tsLGJ4dCxnbGsgKi8KPiAgCWJhdGNoID0gZ2VuOF9lbWl0 X2ZsdXNoX2NvaGVyZW50bDNfd2EoZW5naW5lLCBiYXRjaCk7Cj4gIAo+IC0JYmF0Y2ggPSBlbWl0 X2xyaShiYXRjaCwgbHJpLCBBUlJBWV9TSVpFKGxyaSkpOwo+ICsJYmF0Y2ggPSBlbWl0X2xyaShl bmdpbmUsIGJhdGNoLCBscmksIEFSUkFZX1NJWkUobHJpKSk7Cj4gIAo+ICAJLyogV2FNZWRpYVBv b2xTdGF0ZUNtZEluV0FCQjpieHQsZ2xrICovCj4gIAlpZiAoSEFTX1BPT0xFRF9FVShlbmdpbmUt Pmk5MTUpKSB7Cj4gQEAgLTI3MjgsMTAgKzI3MzEsMTAgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3Rz X2luaXRfcmVnX3N0YXRlKHUzMiAqcmVncywKPiAgCSAqIHZhbHVlcyAoaW5jbHVkaW5nIGFsbCB0 aGUgbWlzc2luZyBNSV9MT0FEX1JFR0lTVEVSX0lNTSBjb21tYW5kcyB0aGF0Cj4gIAkgKiB3ZSBh cmUgbm90IGluaXRpYWxpemluZyBoZXJlKS4KPiAgCSAqLwo+IC0JcmVnc1tDVFhfTFJJX0hFQURF Ul8wXSA9IE1JX0xPQURfUkVHSVNURVJfSU1NKHJjcyA/IDE0IDogMTEpIHwKPiAtCQkJCSBNSV9M UklfRk9SQ0VfUE9TVEVEOwo+ICsJcmVnc1tDVFhfTFJJX0hFQURFUl8wXSA9IGk5MTVfZ2V0X2xy aV9jbWQoZW5naW5lLCByY3MgPyAxNCA6IDExKSB8Cj4gKwkJCQkJCSAgTUlfTFJJX0ZPUkNFX1BP U1RFRDsKPiAgCj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9DT05URVhUX0NPTlRST0wsIFJJTkdfQ09O VEVYVF9DT05UUk9MKGJhc2UpLAo+ICsJQ1RYX1JFRyhlbmdpbmUsIHJlZ3MsIENUWF9DT05URVhU X0NPTlRST0wsIFJJTkdfQ09OVEVYVF9DT05UUk9MKGJhc2UpLAo+ICAJCV9NQVNLRURfQklUX0RJ U0FCTEUoQ1RYX0NUUkxfRU5HSU5FX0NUWF9SRVNUT1JFX0lOSElCSVQpIHwKPiAgCQlfTUFTS0VE X0JJVF9FTkFCTEUoQ1RYX0NUUkxfSU5ISUJJVF9TWU5fQ1RYX1NXSVRDSCkpOwo+ICAJaWYgKElO VEVMX0dFTihlbmdpbmUtPmk5MTUpIDwgMTEpIHsKPiBAQCAtMjczOSwyMiArMjc0MiwyMyBAQCBz dGF0aWMgdm9pZCBleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUodTMyICpyZWdzLAo+ICAJCQlfTUFT S0VEX0JJVF9ESVNBQkxFKENUWF9DVFJMX0VOR0lORV9DVFhfU0FWRV9JTkhJQklUIHwKPiAgCQkJ CQkgICAgQ1RYX0NUUkxfUlNfQ1RYX0VOQUJMRSk7Cj4gIAl9Cj4gLQlDVFhfUkVHKHJlZ3MsIENU WF9SSU5HX0hFQUQsIFJJTkdfSEVBRChiYXNlKSwgMCk7Cj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9S SU5HX1RBSUwsIFJJTkdfVEFJTChiYXNlKSwgMCk7Cj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9SSU5H X0JVRkZFUl9TVEFSVCwgUklOR19TVEFSVChiYXNlKSwgMCk7Cj4gLQlDVFhfUkVHKHJlZ3MsIENU WF9SSU5HX0JVRkZFUl9DT05UUk9MLCBSSU5HX0NUTChiYXNlKSwKPiArCUNUWF9SRUcoZW5naW5l LCByZWdzLCBDVFhfUklOR19IRUFELCBSSU5HX0hFQUQoYmFzZSksIDApOwo+ICsJQ1RYX1JFRyhl bmdpbmUsIHJlZ3MsIENUWF9SSU5HX1RBSUwsIFJJTkdfVEFJTChiYXNlKSwgMCk7Cj4gKwlDVFhf UkVHKGVuZ2luZSwgcmVncywgQ1RYX1JJTkdfQlVGRkVSX1NUQVJULCBSSU5HX1NUQVJUKGJhc2Up LCAwKTsKPiArCUNUWF9SRUcoZW5naW5lLCByZWdzLCBDVFhfUklOR19CVUZGRVJfQ09OVFJPTCwg UklOR19DVEwoYmFzZSksCj4gIAkJUklOR19DVExfU0laRShyaW5nLT5zaXplKSB8IFJJTkdfVkFM SUQpOwo+IC0JQ1RYX1JFRyhyZWdzLCBDVFhfQkJfSEVBRF9VLCBSSU5HX0JCQUREUl9VRFcoYmFz ZSksIDApOwo+IC0JQ1RYX1JFRyhyZWdzLCBDVFhfQkJfSEVBRF9MLCBSSU5HX0JCQUREUihiYXNl KSwgMCk7Cj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9CQl9TVEFURSwgUklOR19CQlNUQVRFKGJhc2Up LCBSSU5HX0JCX1BQR1RUKTsKPiAtCUNUWF9SRUcocmVncywgQ1RYX1NFQ09ORF9CQl9IRUFEX1Us IFJJTkdfU0JCQUREUl9VRFcoYmFzZSksIDApOwo+IC0JQ1RYX1JFRyhyZWdzLCBDVFhfU0VDT05E X0JCX0hFQURfTCwgUklOR19TQkJBRERSKGJhc2UpLCAwKTsKPiAtCUNUWF9SRUcocmVncywgQ1RY X1NFQ09ORF9CQl9TVEFURSwgUklOR19TQkJTVEFURShiYXNlKSwgMCk7Cj4gKwlDVFhfUkVHKGVu Z2luZSwgcmVncywgQ1RYX0JCX0hFQURfVSwgUklOR19CQkFERFJfVURXKGJhc2UpLCAwKTsKPiAr CUNUWF9SRUcoZW5naW5lLCByZWdzLCBDVFhfQkJfSEVBRF9MLCBSSU5HX0JCQUREUihiYXNlKSwg MCk7Cj4gKwlDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX0JCX1NUQVRFLCBSSU5HX0JCU1RBVEUo YmFzZSksIFJJTkdfQkJfUFBHVFQpOwo+ICsJQ1RYX1JFRyhlbmdpbmUsIHJlZ3MsIENUWF9TRUNP TkRfQkJfSEVBRF9VLCBSSU5HX1NCQkFERFJfVURXKGJhc2UpLCAwKTsKPiArCUNUWF9SRUcoZW5n aW5lLCByZWdzLCBDVFhfU0VDT05EX0JCX0hFQURfTCwgUklOR19TQkJBRERSKGJhc2UpLCAwKTsK PiArCUNUWF9SRUcoZW5naW5lLCByZWdzLCBDVFhfU0VDT05EX0JCX1NUQVRFLCBSSU5HX1NCQlNU QVRFKGJhc2UpLCAwKTsKPiAgCWlmIChyY3MpIHsKPiAgCQlzdHJ1Y3QgaTkxNV9jdHhfd29ya2Fy b3VuZHMgKndhX2N0eCA9ICZlbmdpbmUtPndhX2N0eDsKPiAgCj4gLQkJQ1RYX1JFRyhyZWdzLCBD VFhfUkNTX0lORElSRUNUX0NUWCwgUklOR19JTkRJUkVDVF9DVFgoYmFzZSksIDApOwo+IC0JCUNU WF9SRUcocmVncywgQ1RYX1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VULAo+ICsJCUNUWF9SRUcoZW5n aW5lLCByZWdzLCBDVFhfUkNTX0lORElSRUNUX0NUWCwKPiArCQkJUklOR19JTkRJUkVDVF9DVFgo YmFzZSksIDApOwo+ICsJCUNUWF9SRUcoZW5naW5lLCByZWdzLCBDVFhfUkNTX0lORElSRUNUX0NU WF9PRkZTRVQsCj4gIAkJCVJJTkdfSU5ESVJFQ1RfQ1RYX09GRlNFVChiYXNlKSwgMCk7Cj4gIAkJ aWYgKHdhX2N0eC0+aW5kaXJlY3RfY3R4LnNpemUpIHsKPiAgCQkJdTMyIGdndHRfb2Zmc2V0ID0g aTkxNV9nZ3R0X29mZnNldCh3YV9jdHgtPnZtYSk7Cj4gQEAgLTI3NjcsNyArMjc3MSw4IEBAIHN0 YXRpYyB2b2lkIGV4ZWNsaXN0c19pbml0X3JlZ19zdGF0ZSh1MzIgKnJlZ3MsCj4gIAkJCQlpbnRl bF9scl9pbmRpcmVjdF9jdHhfb2Zmc2V0KGVuZ2luZSkgPDwgNjsKPiAgCQl9Cj4gIAo+IC0JCUNU WF9SRUcocmVncywgQ1RYX0JCX1BFUl9DVFhfUFRSLCBSSU5HX0JCX1BFUl9DVFhfUFRSKGJhc2Up LCAwKTsKPiArCQlDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX0JCX1BFUl9DVFhfUFRSLAo+ICsJ CQlSSU5HX0JCX1BFUl9DVFhfUFRSKGJhc2UpLCAwKTsKPiAgCQlpZiAod2FfY3R4LT5wZXJfY3R4 LnNpemUpIHsKPiAgCQkJdTMyIGdndHRfb2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNldCh3YV9jdHgt PnZtYSk7Cj4gIAo+IEBAIC0yNzc2LDE4ICsyNzgxLDE5IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0 c19pbml0X3JlZ19zdGF0ZSh1MzIgKnJlZ3MsCj4gIAkJfQo+ICAJfQo+ICAKPiAtCXJlZ3NbQ1RY X0xSSV9IRUFERVJfMV0gPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSg5KSB8IE1JX0xSSV9GT1JDRV9Q T1NURUQ7Cj4gKwlyZWdzW0NUWF9MUklfSEVBREVSXzFdID0gaTkxNV9nZXRfbHJpX2NtZChlbmdp bmUsIDkpIHwKPiArCQkJCQkJICBNSV9MUklfRk9SQ0VfUE9TVEVEOwo+ICAKPiAtCUNUWF9SRUco cmVncywgQ1RYX0NUWF9USU1FU1RBTVAsIFJJTkdfQ1RYX1RJTUVTVEFNUChiYXNlKSwgMCk7Cj4g KwlDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX0NUWF9USU1FU1RBTVAsIFJJTkdfQ1RYX1RJTUVT VEFNUChiYXNlKSwgMCk7Cj4gIAkvKiBQRFAgdmFsdWVzIHdlbGwgYmUgYXNzaWduZWQgbGF0ZXIg aWYgbmVlZGVkICovCj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9QRFAzX1VEVywgR0VOOF9SSU5HX1BE UF9VRFcoYmFzZSwgMyksIDApOwo+IC0JQ1RYX1JFRyhyZWdzLCBDVFhfUERQM19MRFcsIEdFTjhf UklOR19QRFBfTERXKGJhc2UsIDMpLCAwKTsKPiAtCUNUWF9SRUcocmVncywgQ1RYX1BEUDJfVURX LCBHRU44X1JJTkdfUERQX1VEVyhiYXNlLCAyKSwgMCk7Cj4gLQlDVFhfUkVHKHJlZ3MsIENUWF9Q RFAyX0xEVywgR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgMiksIDApOwo+IC0JQ1RYX1JFRyhyZWdz LCBDVFhfUERQMV9VRFcsIEdFTjhfUklOR19QRFBfVURXKGJhc2UsIDEpLCAwKTsKPiAtCUNUWF9S RUcocmVncywgQ1RYX1BEUDFfTERXLCBHRU44X1JJTkdfUERQX0xEVyhiYXNlLCAxKSwgMCk7Cj4g LQlDVFhfUkVHKHJlZ3MsIENUWF9QRFAwX1VEVywgR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgMCks IDApOwo+IC0JQ1RYX1JFRyhyZWdzLCBDVFhfUERQMF9MRFcsIEdFTjhfUklOR19QRFBfTERXKGJh c2UsIDApLCAwKTsKPiArIAlDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX1BEUDNfVURXLCBHRU44 X1JJTkdfUERQX1VEVyhiYXNlLCAzKSwgMCk7Cj4gKwlDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RY X1BEUDNfTERXLCBHRU44X1JJTkdfUERQX0xEVyhiYXNlLCAzKSwgMCk7Cj4gKwlDVFhfUkVHKGVu Z2luZSwgcmVncywgQ1RYX1BEUDJfVURXLCBHRU44X1JJTkdfUERQX1VEVyhiYXNlLCAyKSwgMCk7 Cj4gKwlDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX1BEUDJfTERXLCBHRU44X1JJTkdfUERQX0xE VyhiYXNlLCAyKSwgMCk7Cj4gKwlDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX1BEUDFfVURXLCBH RU44X1JJTkdfUERQX1VEVyhiYXNlLCAxKSwgMCk7Cj4gKwlDVFhfUkVHKGVuZ2luZSwgcmVncywg Q1RYX1BEUDFfTERXLCBHRU44X1JJTkdfUERQX0xEVyhiYXNlLCAxKSwgMCk7Cj4gKwlDVFhfUkVH KGVuZ2luZSwgcmVncywgQ1RYX1BEUDBfVURXLCBHRU44X1JJTkdfUERQX1VEVyhiYXNlLCAwKSwg MCk7Cj4gKwlDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX1BEUDBfTERXLCBHRU44X1JJTkdfUERQ X0xEVyhiYXNlLCAwKSwgMCk7Cj4gIAo+ICAJaWYgKGk5MTVfdm1faXNfNGx2bCgmcHBndHQtPnZt KSkgewo+ICAJCS8qIDY0YiBQUEdUVCAoNDhiaXQgY2Fub25pY2FsKQo+IEBAIC0yODAzLDggKzI4 MDksOSBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUodTMyICpyZWdzLAo+ ICAJfQo+ICAKPiAgCWlmIChyY3MpIHsKPiAtCQlyZWdzW0NUWF9MUklfSEVBREVSXzJdID0gTUlf TE9BRF9SRUdJU1RFUl9JTU0oMSk7Cj4gLQkJQ1RYX1JFRyhyZWdzLCBDVFhfUl9QV1JfQ0xLX1NU QVRFLCBHRU44X1JfUFdSX0NMS19TVEFURSwgMCk7Cj4gKwkJcmVnc1tDVFhfTFJJX0hFQURFUl8y XSA9IGk5MTVfZ2V0X2xyaV9jbWQoZW5naW5lLCAxKTsKPiArCQlDVFhfUkVHKGVuZ2luZSwgcmVn cywgQ1RYX1JfUFdSX0NMS19TVEFURSwKPiArCQkJR0VOOF9SX1BXUl9DTEtfU1RBVEUsIDApOwo+ ICAKPiAgCQlpOTE1X29hX2luaXRfcmVnX3N0YXRlKGVuZ2luZSwgY2UsIHJlZ3MpOwo+ICAJfQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmNfcmVnLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmNfcmVnLmgKPiBpbmRleCA1ZWY5MzJkODEwYTcuLjQw YjExNDJkMGQ3NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmNf cmVnLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmNfcmVnLmgKPiBAQCAt MzksMTAgKzM5LDEwIEBACj4gICNkZWZpbmUgQ1RYX1JfUFdSX0NMS19TVEFURQkJMHg0Mgo+ICAj ZGVmaW5lIENUWF9FTkQJCQkJMHg0NAo+ICAKPiAtI2RlZmluZSBDVFhfUkVHKHJlZ19zdGF0ZSwg cG9zLCByZWcsIHZhbCkgZG8geyBcCj4gKyNkZWZpbmUgQ1RYX1JFRyhlbmdpbmUsIHJlZ19zdGF0 ZSwgcG9zLCByZWcsIHZhbCkgZG8geyBcCj4gIAl1MzIgKnJlZ19zdGF0ZV9fID0gKHJlZ19zdGF0 ZSk7IFwKPiAgCWNvbnN0IHUzMiBwb3NfXyA9IChwb3MpOyBcCj4gLQkocmVnX3N0YXRlX18pWyhw b3NfXykgKyAwXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KHJlZyk7IFwKPiArCShyZWdfc3RhdGVf XylbKHBvc19fKSArIDBdID0gaTkxNV9nZXRfbHJpX3JlZygoZW5naW5lKSwgKHJlZykpOyBcCj4g IAkocmVnX3N0YXRlX18pWyhwb3NfXykgKyAxXSA9ICh2YWwpOyBcCj4gIH0gd2hpbGUgKDApCj4g IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMKPiBpbmRleCAyNzRiYTc4NTAwYzAuLmJiMTFk MGY2OGJiYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2NzLmMKPiBAQCAtMzIyLDkgKzMy Miw2IEBAIHN0YXRpYyB1MzIgZ2V0X2VudHJ5X2NvbnRyb2woY29uc3Qgc3RydWN0IGRybV9pOTE1 X21vY3NfdGFibGUgKnRhYmxlLAo+ICAvKioKPiAgICogaW50ZWxfbW9jc19pbml0X2VuZ2luZSgp IC0gZW1pdCB0aGUgbW9jcyBjb250cm9sIHRhYmxlCj4gICAqIEBlbmdpbmU6CVRoZSBlbmdpbmUg Zm9yIHdob20gdG8gZW1pdCB0aGUgcmVnaXN0ZXJzLgo+IC0gKgo+IC0gKiBUaGlzIGZ1bmN0aW9u IHNpbXBseSBlbWl0cyBhIE1JX0xPQURfUkVHSVNURVJfSU1NIGNvbW1hbmQgZm9yIHRoZQo+IC0g KiBnaXZlbiB0YWJsZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4KPiAgICovCj4gIHZv aWQgaW50ZWxfbW9jc19pbml0X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gIHsKPiBAQCAtMzc4LDE4ICszNzUsMjAgQEAgc3RhdGljIGludCBlbWl0X21vY3NfY29udHJv bF90YWJsZShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgCWlmIChJU19FUlIoY3MpKQo+ICAJ CXJldHVybiBQVFJfRVJSKGNzKTsKPiAgCj4gLQkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1N KHRhYmxlLT5uX2VudHJpZXMpOwo+ICsJKmNzKysgPSBpOTE1X2dldF9scmlfY21kKHJxLT5lbmdp bmUsIHRhYmxlLT5uX2VudHJpZXMpOwo+ICAKPiAgCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRh YmxlLT5zaXplOyBpbmRleCsrKSB7Cj4gIAkJdTMyIHZhbHVlID0gZ2V0X2VudHJ5X2NvbnRyb2wo dGFibGUsIGluZGV4KTsKPiAgCj4gLQkJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChtb2Nz X3JlZ2lzdGVyKGVuZ2luZSwgaW5kZXgpKTsKPiArCQkqY3MrKyA9IGk5MTVfZ2V0X2xyaV9yZWco cnEtPmVuZ2luZSwKPiArCQkJCQkgbW9jc19yZWdpc3RlcihlbmdpbmUsIGluZGV4KSk7Cj4gIAkJ KmNzKysgPSB2YWx1ZTsKPiAgCX0KPiAgCj4gIAkvKiBBbGwgcmVtYWluaW5nIGVudHJpZXMgYXJl IGFsc28gdW51c2VkICovCj4gIAlmb3IgKDsgaW5kZXggPCB0YWJsZS0+bl9lbnRyaWVzOyBpbmRl eCsrKSB7Cj4gLQkJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChtb2NzX3JlZ2lzdGVyKGVu Z2luZSwgaW5kZXgpKTsKPiArCQkqY3MrKyA9IGk5MTVfZ2V0X2xyaV9yZWcocnEtPmVuZ2luZSwK PiArCQkJCQkgbW9jc19yZWdpc3RlcihlbmdpbmUsIGluZGV4KSk7Cj4gIAkJKmNzKysgPSB1bnVz ZWRfdmFsdWU7Cj4gIAl9Cj4gIAo+IEBAIC00NDcsNyArNDQ2LDExIEBAIHN0YXRpYyBpbnQgZW1p dF9tb2NzX2wzY2NfdGFibGUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gIAlpZiAoSVNfRVJS KGNzKSkKPiAgCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gIAo+IC0JKmNzKysgPSBNSV9MT0FEX1JF R0lTVEVSX0lNTSh0YWJsZS0+bl9lbnRyaWVzIC8gMik7Cj4gKwkvKgo+ICsJICogR0VOOV9MTkNG Q01PQ1MgaXMgbm90IGVuZ2luZSByZWxhdGl2ZSwgdGhlcmVmb3JlIHRoZXJlIGlzIG5vCj4gKwkg KiBuZWVkIGZvciByZWxhdGl2ZSBhZGRyZXNzaW5nPwo+ICsJICovCj4gKwkqY3MrKyA9IF9fTUlf TE9BRF9SRUdJU1RFUl9JTU0odGFibGUtPm5fZW50cmllcyAvIDIpOwo+ICAKPiAgCWZvciAoaSA9 IDA7IGkgPCB0YWJsZS0+c2l6ZSAvIDI7IGkrKykgewo+ICAJCXUxNiBsb3cgPSBnZXRfZW50cnlf bDNjYyh0YWJsZSwgMiAqIGkpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVy LmMKPiBpbmRleCAzODQ0NTgxZjYyMmMuLjEwN2VkN2MwZDFmYSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPiBAQCAtMTU5MiwxMiArMTU5MiwxMyBAQCBzdGF0 aWMgaW50IGxvYWRfcGRfZGlyKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+ICAJaWYgKElTX0VS UihjcykpCj4gIAkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICAKPiAtCSpjcysrID0gTUlfTE9BRF9S RUdJU1RFUl9JTU0oMSk7Cj4gLQkqY3MrKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfUFBf RElSX0RDTFYoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiArCS8qIENhbiB0aGVzZSBub3QgYmUgbWVy Z2VkIGludG8gYSBzaW5nbGUgTFJJPz8/ICovCj4gKwkqY3MrKyA9IGk5MTVfZ2V0X2xyaV9jbWQo ZW5naW5lLCAxKTsKPiArCSpjcysrID0gaTkxNV9nZXRfbHJpX3JlZyhlbmdpbmUsIFJJTkdfUFBf RElSX0RDTFYoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiAgCSpjcysrID0gUFBfRElSX0RDTFZfMkc7 Cj4gIAo+IC0JKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgxKTsKPiAtCSpjcysrID0gaTkx NV9tbWlvX3JlZ19vZmZzZXQoUklOR19QUF9ESVJfQkFTRShlbmdpbmUtPm1taW9fYmFzZSkpOwo+ ICsJKmNzKysgPSBpOTE1X2dldF9scmlfY21kKGVuZ2luZSwgMSk7Cj4gKwkqY3MrKyA9IGk5MTVf Z2V0X2xyaV9yZWcoZW5naW5lLCBSSU5HX1BQX0RJUl9CQVNFKGVuZ2luZS0+bW1pb19iYXNlKSk7 Cj4gIAkqY3MrKyA9IHBwZ3R0LT5wZC5iYXNlLmdndHRfb2Zmc2V0IDw8IDEwOwo+ICAKPiAgCWlu dGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwo+IEBAIC0xNjYyLDcgKzE2NjMsMTEgQEAgc3RhdGlj IGlubGluZSBpbnQgbWlfc2V0X2NvbnRleHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBm bGFncykKPiAgCQlpZiAobnVtX2VuZ2luZXMpIHsKPiAgCQkJc3RydWN0IGludGVsX2VuZ2luZV9j cyAqc2lnbmFsbGVyOwo+ICAKPiAtCQkJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTShudW1f ZW5naW5lcyk7Cj4gKwkJCS8qCj4gKwkJCSAqIE11c3QgdXNlIGFic29sdXRlIGVuZ2luZSBhZGRy ZXNzIGFzIHRoZSByZWdpc3Rlcgo+ICsJCQkgKiB3cml0ZSBpcyB0YXJnZXRpbmcgYSBkaWZmZXJl bnQgZW5naW5lLgo+ICsJCQkgKi8KPiArCQkJKmNzKysgPSBfX01JX0xPQURfUkVHSVNURVJfSU1N KG51bV9lbmdpbmVzKTsKPiAgCQkJZm9yX2VhY2hfZW5naW5lKHNpZ25hbGxlciwgaTkxNSwgaWQp IHsKPiAgCQkJCWlmIChzaWduYWxsZXIgPT0gZW5naW5lKQo+ICAJCQkJCWNvbnRpbnVlOwo+IEBA IC0xNzA4LDcgKzE3MTMsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgbWlfc2V0X2NvbnRleHQoc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBmbGFncykKPiAgCQkJc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqc2lnbmFsbGVyOwo+ICAJCQlpOTE1X3JlZ190IGxhc3RfcmVnID0ge307IC8qIGtlZXAg Z2NjIHF1aWV0ICovCj4gIAo+IC0JCQkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKG51bV9l bmdpbmVzKTsKPiArCQkJLyoKPiArCQkJICogTXVzdCB1c2UgYWJzb2x1dGUgZW5naW5lIGFkZHJl c3MgYXMgdGhlIHJlZ2lzdGVyCj4gKwkJCSAqIHdyaXRlIGlzIHRhcmdldGluZyBhIGRpZmZlcmVu dCBlbmdpbmUuCj4gKwkJCSAqLwo+ICsJCQkqY3MrKyA9IF9fTUlfTE9BRF9SRUdJU1RFUl9JTU0o bnVtX2VuZ2luZXMpOwo+ICAJCQlmb3JfZWFjaF9lbmdpbmUoc2lnbmFsbGVyLCBpOTE1LCBpZCkg ewo+ICAJCQkJaWYgKHNpZ25hbGxlciA9PSBlbmdpbmUpCj4gIAkJCQkJY29udGludWU7Cj4gQEAg LTE3NTAsOSArMTc1OSw5IEBAIHN0YXRpYyBpbnQgcmVtYXBfbDMoc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEsIGludCBzbGljZSkKPiAgCSAqIGhlcmUgYmVjYXVzZSBubyBvdGhlciBjb2RlIHNob3Vs ZCBhY2Nlc3MgdGhlc2UgcmVnaXN0ZXJzIG90aGVyIHRoYW4KPiAgCSAqIGF0IGluaXRpYWxpemF0 aW9uIHRpbWUuCj4gIAkgKi8KPiAtCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oR0VON19M M0xPR19TSVpFLzQpOwo+ICsJKmNzKysgPSBpOTE1X2dldF9scmlfY21kKHJxLT5lbmdpbmUsIEdF TjdfTDNMT0dfU0laRS80KTsKPiAgCWZvciAoaSA9IDA7IGkgPCBHRU43X0wzTE9HX1NJWkUvNDsg aSsrKSB7Cj4gLQkJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU43X0wzTE9HKHNsaWNl LCBpKSk7Cj4gKwkJKmNzKysgPSBpOTE1X2dldF9scmlfcmVnKHJxLT5lbmdpbmUsIEdFTjdfTDNM T0coc2xpY2UsIGkpKTsKPiAgCQkqY3MrKyA9IHJlbWFwX2luZm9baV07Cj4gIAl9Cj4gIAkqY3Mr KyA9IE1JX05PT1A7Cj4gQEAgLTIzMzcsMyArMjM0NiwyMyBAQCBpbnQgaW50ZWxfaW5pdF92ZWJv eF9yaW5nX2J1ZmZlcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAo+ICAJcmV0 dXJuIGludGVsX2luaXRfcmluZ19idWZmZXIoZW5naW5lKTsKPiAgfQo+ICsKPiArdTMyIGk5MTVf Z2V0X2xyaV9jbWQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgd29y ZF9jb3VudCkKPiArewo+ICsJdTMyIHdvcmQ7Cj4gKwo+ICsJd29yZCA9IF9fTUlfTE9BRF9SRUdJ U1RFUl9JTU0od29yZF9jb3VudCk7Cj4gKwo+ICsJaWYgKGk5MTVfZW5naW5lX2hhc19yZWxhdGl2 ZV9scmkoZW5naW5lKSkKPiArCQl3b3JkIHw9IE1JX0xSSV9BRERfQ1NfTU1JT19TVEFSVF9HRU4x MTsKPiArCj4gKwlyZXR1cm4gd29yZDsKPiArfQo+ICsKPiArdTMyIGk5MTVfZ2V0X2xyaV9yZWco Y29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBpOTE1X3JlZ190IHJlZykKPiAr ewo+ICsJaWYgKCFpOTE1X2VuZ2luZV9oYXNfcmVsYXRpdmVfbHJpKGVuZ2luZSkpCj4gKwkJcmV0 dXJuIGk5MTVfbW1pb19yZWdfb2Zmc2V0KHJlZyk7Cj4gKwo+ICsJcmV0dXJuIGk5MTVfbW1pb19y ZWdfb2Zmc2V0KHJlZykgLSBlbmdpbmUtPm1taW9fYmFzZTsKPiArfQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiBpbmRleCA3MmM3YzMzN2FjZTkuLjI2MWIzYzQzMzA2 OSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiBAQCAtNTgw LDQgKzU4MCw4IEBAIGludGVsX2VuZ2luZV9nZXRfaGFuZ2NoZWNrX3NlcW5vKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCXJldHVybiBpbnRlbF9yZWFkX3N0YXR1c19wYWdlKGVu Z2luZSwgSTkxNV9HRU1fSFdTX0hBTkdDSEVDSyk7Cj4gIH0KPiAgCj4gK2Jvb2wgaTkxNV9lbmdp bmVfaGFzX3JlbGF0aXZlX2xyaShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Owo+ICt1MzIgaTkxNV9nZXRfbHJpX2NtZChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsIHUzMiB3b3JkX2NvdW50KTsKPiArdTMyIGk5MTVfZ2V0X2xyaV9yZWcoY29uc3Qgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBpOTE1X3JlZ190IHJlZyk7Cj4gKwo+ICAjZW5k aWYgLyogX0lOVEVMX1JJTkdCVUZGRVJfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3dvcmthcm91bmRzLmMKPiBpbmRleCBiM2NiZWQxZWUxYzkuLmE1MGM0Nzk5M2M4OCAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMuYwo+IEBAIC02MjksOSArNjI5 LDkgQEAgaW50IGludGVsX2VuZ2luZV9lbWl0X2N0eF93YShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSkKPiAgCWlmIChJU19FUlIoY3MpKQo+ICAJCXJldHVybiBQVFJfRVJSKGNzKTsKPiAgCj4gLQkq Y3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKHdhbC0+Y291bnQpOwo+ICsJKmNzKysgPSBpOTE1 X2dldF9scmlfY21kKHJxLT5lbmdpbmUsIHdhbC0+Y291bnQpOwo+ICAJZm9yIChpID0gMCwgd2Eg PSB3YWwtPmxpc3Q7IGkgPCB3YWwtPmNvdW50OyBpKyssIHdhKyspIHsKPiAtCQkqY3MrKyA9IGk5 MTVfbW1pb19yZWdfb2Zmc2V0KHdhLT5yZWcpOwo+ICsJCSpjcysrID0gaTkxNV9nZXRfbHJpX3Jl ZyhycS0+ZW5naW5lLCB3YS0+cmVnKTsKPiAgCQkqY3MrKyA9IHdhLT52YWw7Cj4gIAl9Cj4gIAkq Y3MrKyA9IE1JX05PT1A7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pbnRlbF93b3JrYXJvdW5kcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L2ludGVsX3dvcmthcm91bmRzLmMKPiBpbmRleCBhMzYzNzQ4YTdhNGYuLmRiZTNjZDRkNDk4MSAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfd29ya2Fy b3VuZHMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF93b3Jr YXJvdW5kcy5jCj4gQEAgLTQ0NCw2ICs0NDQsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2RpcnR5X3do aXRlbGlzdChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICAKPiAgCWZvciAoaSA9IDA7 IGkgPCBlbmdpbmUtPndoaXRlbGlzdC5jb3VudDsgaSsrKSB7Cj4gIAkJdTMyIHJlZyA9IGk5MTVf bW1pb19yZWdfb2Zmc2V0KGVuZ2luZS0+d2hpdGVsaXN0Lmxpc3RbaV0ucmVnKTsKPiArCQl1MzIg cmVnTFJJID0gaTkxNV9nZXRfbHJpX3JlZyhlbmdpbmUsIGVuZ2luZS0+d2hpdGVsaXN0Lmxpc3Rb aV0ucmVnKTsKPiAgCQl1NjQgYWRkciA9IHNjcmF0Y2gtPm5vZGUuc3RhcnQ7Cj4gIAkJc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnE7Cj4gIAkJdTMyIHNybSwgbHJtLCByc3ZkOwo+IEBAIC00NzYsOCAr NDc3LDggQEAgc3RhdGljIGludCBjaGVja19kaXJ0eV93aGl0ZWxpc3Qoc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKmN0eCwKPiAgCQlpZHggPSAxOwo+ICAJCWZvciAodiA9IDA7IHYgPCBBUlJBWV9T SVpFKHZhbHVlcyk7IHYrKykgewo+ICAJCQkvKiBMUkkgZ2FyYmFnZSAqLwo+IC0JCQkqY3MrKyA9 IE1JX0xPQURfUkVHSVNURVJfSU1NKDEpOwo+IC0JCQkqY3MrKyA9IHJlZzsKPiArCQkJKmNzKysg PSBpOTE1X2dldF9scmlfY21kKGVuZ2luZSwgMSk7Cj4gKwkJCSpjcysrID0gcmVnTFJJOwo+ICAJ CQkqY3MrKyA9IHZhbHVlc1t2XTsKPiAgCj4gIAkJCS8qIFNSTSByZXN1bHQgKi8KPiBAQCAtNDg5 LDggKzQ5MCw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfZGlydHlfd2hpdGVsaXN0KHN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpjdHgsCj4gIAkJfQo+ICAJCWZvciAodiA9IDA7IHYgPCBBUlJBWV9TSVpF KHZhbHVlcyk7IHYrKykgewo+ICAJCQkvKiBMUkkgZ2FyYmFnZSAqLwo+IC0JCQkqY3MrKyA9IE1J X0xPQURfUkVHSVNURVJfSU1NKDEpOwo+IC0JCQkqY3MrKyA9IHJlZzsKPiArCQkJKmNzKysgPSBp OTE1X2dldF9scmlfY21kKGVuZ2luZSwgMSk7Cj4gKwkJCSpjcysrID0gcmVnTFJJOwo+ICAJCQkq Y3MrKyA9IH52YWx1ZXNbdl07Cj4gIAo+ICAJCQkvKiBTUk0gcmVzdWx0ICovCj4gLS0gCj4gMi4y MS4wLjUuZ2FlYjU4MmE5ODMKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4