From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] drm: atmel-hlcdc: Atomic mode-setting conversion Date: Thu, 5 Feb 2015 14:08:32 +0100 Message-ID: <20150205130832.GU14009@phenom.ffwll.local> References: <1423081251-11062-1-git-send-email-boris.brezillon@free-electrons.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f181.google.com (mail-wi0-f181.google.com [209.85.212.181]) by gabe.freedesktop.org (Postfix) with ESMTP id 25CF86E230 for ; Thu, 5 Feb 2015 05:07:11 -0800 (PST) Received: by mail-wi0-f181.google.com with SMTP id fb4so10412423wid.2 for ; Thu, 05 Feb 2015 05:07:10 -0800 (PST) Content-Disposition: inline In-Reply-To: <1423081251-11062-1-git-send-email-boris.brezillon@free-electrons.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Boris Brezillon Cc: Nicolas Ferre , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Alexandre Belloni , Jean-Christophe Plagniol-Villard , linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBGZWIgMDQsIDIwMTUgYXQgMDk6MjA6NTFQTSArMDEwMCwgQm9yaXMgQnJlemlsbG9u IHdyb3RlOgo+IENvbnZlcnQgdGhlIEhMQ0RDIGRyaXZlciB0byBhdG9taWMgbW9kZS1zZXR0aW5n Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGZy ZWUtZWxlY3Ryb25zLmNvbT4KCkp1c3QgYSBxdWljayBjb21tZW50OiBkcG1zIGlzbid0IHlldCBj b252ZXJ0ZWQgb3ZlciwgYW5kIGZyb20gZXhwZXJpZW5jZQp3aXRoIHRlZ3JhL21zbSB0aGF0IHBy b2JhYmx5IHdpbGwgeWllbGQgc29tZSBzdXJwcmlzZXMuIFNpbmNlIG9ubHkgd2l0aApkcG1zIHdp bGwgaXQgYmUgb2J2aW91cyBob3cgc3RyaWN0IHRoZSBhZGRlZCByZXF1aXJlbWVudHMgZnJvbSB0 aGUgYXRvbWljCmhlbHBlcnMgYXJlIDstKQotRGFuaWVsCgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9k cm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfY3J0Yy5jICAgfCAxNDIgKystLS0tCj4gIGRyaXZl cnMvZ3B1L2RybS9hdG1lbC1obGNkYy9hdG1lbF9obGNkY19kYy5jICAgICB8ICAgNCArCj4gIGRy aXZlcnMvZ3B1L2RybS9hdG1lbC1obGNkYy9hdG1lbF9obGNkY19kYy5oICAgICB8ICAgNSArLQo+ ICBkcml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfbGF5ZXIuYyAgfCAgIDQg Ky0KPiAgZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVsX2hsY2RjX2xheWVyLmggIHwg ICAzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9hdG1lbC1obGNkYy9hdG1lbF9obGNkY19vdXRwdXQu YyB8ICAgMyArCj4gIGRyaXZlcnMvZ3B1L2RybS9hdG1lbC1obGNkYy9hdG1lbF9obGNkY19wbGFu ZS5jICB8IDU1NiArKysrKysrKysrKysrLS0tLS0tLS0tLQo+ICA3IGZpbGVzIGNoYW5nZWQsIDM4 MyBpbnNlcnRpb25zKCspLCAzMzQgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hdG1lbC1obGNkYy9hdG1lbF9obGNkY19jcnRjLmMgYi9kcml2ZXJzL2dwdS9k cm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfY3J0Yy5jCj4gaW5kZXggMDQwOWI5MC4uYTY5Yzk2 NiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNf Y3J0Yy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVsX2hsY2RjX2Ny dGMuYwo+IEBAIC0xMTQsMjUgKzExNCwxNyBAQCBzdGF0aWMgdm9pZCBhdG1lbF9obGNkY19jcnRj X2RwbXMoc3RydWN0IGRybV9jcnRjICpjLCBpbnQgbW9kZSkKPiAgCWNydGMtPmRwbXMgPSBtb2Rl Owo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IGF0bWVsX2hsY2RjX2NydGNfbW9kZV9zZXQoc3RydWN0 IGRybV9jcnRjICpjLAo+IC0JCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwK PiAtCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkaiwKPiAtCQkJCSAgICAgaW50 IHgsIGludCB5LAo+IC0JCQkJICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpCj4g K3N0YXRpYyB2b2lkIGF0bWVsX2hsY2RjX2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2Ny dGMgKmMpCj4gIHsKPiAgCXN0cnVjdCBhdG1lbF9obGNkY19jcnRjICpjcnRjID0gZHJtX2NydGNf dG9fYXRtZWxfaGxjZGNfY3J0YyhjKTsKPiAgCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGNydGMt PmRjLT5obGNkYy0+cmVnbWFwOwo+IC0Jc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBjLT5wcmlt YXJ5Owo+IC0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqYWRqID0gJmMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOwo+ICAJdW5zaWduZWQgbG9u ZyBtb2RlX3JhdGU7Cj4gIAlzdHJ1Y3QgdmlkZW9tb2RlIHZtOwo+ICAJdW5zaWduZWQgbG9uZyBw cmF0ZTsKPiAgCXVuc2lnbmVkIGludCBjZmc7Cj4gIAlpbnQgZGl2Owo+ICAKPiAtCWlmIChhdG1l bF9obGNkY19kY19tb2RlX3ZhbGlkKGNydGMtPmRjLCBhZGopICE9IE1PREVfT0spCj4gLQkJcmV0 dXJuIC1FSU5WQUw7Cj4gLQo+ICAJdm0udmZyb250X3BvcmNoID0gYWRqLT5jcnRjX3ZzeW5jX3N0 YXJ0IC0gYWRqLT5jcnRjX3ZkaXNwbGF5Owo+ICAJdm0udmJhY2tfcG9yY2ggPSBhZGotPmNydGNf dnRvdGFsIC0gYWRqLT5jcnRjX3ZzeW5jX2VuZDsKPiAgCXZtLnZzeW5jX2xlbiA9IGFkai0+Y3J0 Y192c3luY19lbmQgLSBhZGotPmNydGNfdnN5bmNfc3RhcnQ7Cj4gQEAgLTE1Niw3ICsxNDgsNyBA QCBzdGF0aWMgaW50IGF0bWVsX2hsY2RjX2NydGNfbW9kZV9zZXQoc3RydWN0IGRybV9jcnRjICpj LAo+ICAJY2ZnID0gQVRNRUxfSExDRENfQ0xLUE9MOwo+ICAKPiAgCXByYXRlID0gY2xrX2dldF9y YXRlKGNydGMtPmRjLT5obGNkYy0+c3lzX2Nsayk7Cj4gLQltb2RlX3JhdGUgPSBtb2RlLT5jcnRj X2Nsb2NrICogMTAwMDsKPiArCW1vZGVfcmF0ZSA9IGFkai0+Y3J0Y19jbG9jayAqIDEwMDA7Cj4g IAlpZiAoKHByYXRlIC8gMikgPCBtb2RlX3JhdGUpIHsKPiAgCQlwcmF0ZSAqPSAyOwo+ICAJCWNm ZyB8PSBBVE1FTF9ITENEQ19DTEtTRUw7Cj4gQEAgLTE3NCwxMCArMTY2LDEwIEBAIHN0YXRpYyBp bnQgYXRtZWxfaGxjZGNfY3J0Y19tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmMsCj4gIAo+ICAJ Y2ZnID0gMDsKPiAgCj4gLQlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykK PiArCWlmIChhZGotPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpCj4gIAkJY2ZnIHw9IEFU TUVMX0hMQ0RDX1ZTUE9MOwo+ICAKPiAtCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdf TkhTWU5DKQo+ICsJaWYgKGFkai0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lOQykKPiAgCQlj ZmcgfD0gQVRNRUxfSExDRENfSFNQT0w7Cj4gIAo+ICAJcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21h cCwgQVRNRUxfSExDRENfQ0ZHKDUpLAo+IEBAIC0xODcsMzQgKzE3OSw2IEBAIHN0YXRpYyBpbnQg YXRtZWxfaGxjZGNfY3J0Y19tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmMsCj4gIAkJCSAgIEFU TUVMX0hMQ0RDX1ZTUFNVIHwgQVRNRUxfSExDRENfVlNQSE8gfAo+ICAJCQkgICBBVE1FTF9ITENE Q19HVUFSRFRJTUVfTUFTSywKPiAgCQkJICAgY2ZnKTsKPiAtCj4gLQlmYiA9IHBsYW5lLT5mYjsK PiAtCXBsYW5lLT5mYiA9IG9sZF9mYjsKPiAtCj4gLQlyZXR1cm4gYXRtZWxfaGxjZGNfcGxhbmVf dXBkYXRlX3dpdGhfbW9kZShwbGFuZSwgYywgZmIsIDAsIDAsCj4gLQkJCQkJCSAgYWRqLT5oZGlz cGxheSwgYWRqLT52ZGlzcGxheSwKPiAtCQkJCQkJICB4IDw8IDE2LCB5IDw8IDE2LAo+IC0JCQkJ CQkgIGFkai0+aGRpc3BsYXkgPDwgMTYsCj4gLQkJCQkJCSAgYWRqLT52ZGlzcGxheSA8PCAxNiwK PiAtCQkJCQkJICBhZGopOwo+IC19Cj4gLQo+IC1pbnQgYXRtZWxfaGxjZGNfY3J0Y19tb2RlX3Nl dF9iYXNlKHN0cnVjdCBkcm1fY3J0YyAqYywgaW50IHgsIGludCB5LAo+IC0JCQkJICAgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSA9IGMtPnByaW1hcnk7Cj4gLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lLT5m YjsKPiAtCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmMtPmh3bW9kZTsKPiAtCj4g LQlwbGFuZS0+ZmIgPSBvbGRfZmI7Cj4gLQo+IC0JcmV0dXJuIHBsYW5lLT5mdW5jcy0+dXBkYXRl X3BsYW5lKHBsYW5lLCBjLCBmYiwKPiAtCQkJCQkgIDAsIDAsCj4gLQkJCQkJICBtb2RlLT5oZGlz cGxheSwKPiAtCQkJCQkgIG1vZGUtPnZkaXNwbGF5LAo+IC0JCQkJCSAgeCA8PCAxNiwgeSA8PCAx NiwKPiAtCQkJCQkgIG1vZGUtPmhkaXNwbGF5IDw8IDE2LAo+IC0JCQkJCSAgbW9kZS0+dmRpc3Bs YXkgPDwgMTYpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBhdG1lbF9obGNkY19jcnRjX3ByZXBh cmUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+IEBAIC0yNTAsMTQgKzIxNCw0OCBAQCBzdGF0aWMg dm9pZCBhdG1lbF9obGNkY19jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAJ fQo+ICB9Cj4gIAo+ICtzdGF0aWMgaW50IGF0bWVsX2hsY2RjX2NydGNfYXRvbWljX2NoZWNrKHN0 cnVjdCBkcm1fY3J0YyAqYywKPiArCQkJCQkgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzKQo+ICt7 Cj4gKwlzdHJ1Y3QgYXRtZWxfaGxjZGNfY3J0YyAqY3J0YyA9IGRybV9jcnRjX3RvX2F0bWVsX2hs Y2RjX2NydGMoYyk7Cj4gKwo+ICsJaWYgKGF0bWVsX2hsY2RjX2RjX21vZGVfdmFsaWQoY3J0Yy0+ ZGMsICZzLT5hZGp1c3RlZF9tb2RlKSAhPSBNT0RFX09LKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhdG1lbF9obGNkY19jcnRj X2F0b21pY19iZWdpbihzdHJ1Y3QgZHJtX2NydGMgKmMpCj4gK3sKPiArCXN0cnVjdCBhdG1lbF9o bGNkY19jcnRjICpjcnRjID0gZHJtX2NydGNfdG9fYXRtZWxfaGxjZGNfY3J0YyhjKTsKPiArCj4g KwlpZiAoYy0+c3RhdGUtPmV2ZW50KSB7Cj4gKwkJYy0+c3RhdGUtPmV2ZW50LT5waXBlID0gZHJt X2NydGNfaW5kZXgoYyk7Cj4gKwo+ICsJCVdBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjKSAh PSAwKTsKPiArCj4gKwkJY3J0Yy0+ZXZlbnQgPSBjLT5zdGF0ZS0+ZXZlbnQ7Cj4gKwkJYy0+c3Rh dGUtPmV2ZW50ID0gTlVMTDsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXRtZWxfaGxj ZGNfY3J0Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwkvKiBU T0RPOiB3cml0ZSBjb21tb24gcGxhbmUgY29udHJvbCByZWdpc3RlciBpZiBhdmFpbGFibGUgKi8K PiArfQo+ICsKPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgbGNk Y19jcnRjX2hlbHBlcl9mdW5jcyA9IHsKPiAgCS5tb2RlX2ZpeHVwID0gYXRtZWxfaGxjZGNfY3J0 Y19tb2RlX2ZpeHVwLAo+ICAJLmRwbXMgPSBhdG1lbF9obGNkY19jcnRjX2RwbXMsCj4gLQkubW9k ZV9zZXQgPSBhdG1lbF9obGNkY19jcnRjX21vZGVfc2V0LAo+IC0JLm1vZGVfc2V0X2Jhc2UgPSBh dG1lbF9obGNkY19jcnRjX21vZGVfc2V0X2Jhc2UsCj4gKwkubW9kZV9zZXQgPSBkcm1faGVscGVy X2NydGNfbW9kZV9zZXQsCj4gKwkubW9kZV9zZXRfbm9mYiA9IGF0bWVsX2hsY2RjX2NydGNfbW9k ZV9zZXRfbm9mYiwKPiArCS5tb2RlX3NldF9iYXNlID0gZHJtX2hlbHBlcl9jcnRjX21vZGVfc2V0 X2Jhc2UsCj4gIAkucHJlcGFyZSA9IGF0bWVsX2hsY2RjX2NydGNfcHJlcGFyZSwKPiAgCS5jb21t aXQgPSBhdG1lbF9obGNkY19jcnRjX2NvbW1pdCwKPiAgCS5kaXNhYmxlID0gYXRtZWxfaGxjZGNf Y3J0Y19kaXNhYmxlLAo+ICsJLmF0b21pY19jaGVjayA9IGF0bWVsX2hsY2RjX2NydGNfYXRvbWlj X2NoZWNrLAo+ICsJLmF0b21pY19iZWdpbiA9IGF0bWVsX2hsY2RjX2NydGNfYXRvbWljX2JlZ2lu LAo+ICsJLmF0b21pY19mbHVzaCA9IGF0bWVsX2hsY2RjX2NydGNfYXRvbWljX2ZsdXNoLAo+ICB9 Owo+ICAKPiAgc3RhdGljIHZvaWQgYXRtZWxfaGxjZGNfY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1f Y3J0YyAqYykKPiBAQCAtMzA2LDYxICszMDQsMTMgQEAgdm9pZCBhdG1lbF9obGNkY19jcnRjX2ly cShzdHJ1Y3QgZHJtX2NydGMgKmMpCj4gIAlhdG1lbF9obGNkY19jcnRjX2ZpbmlzaF9wYWdlX2Zs aXAoZHJtX2NydGNfdG9fYXRtZWxfaGxjZGNfY3J0YyhjKSk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBp bnQgYXRtZWxfaGxjZGNfY3J0Y19wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjLAo+IC0JCQkJ ICAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gLQkJCQkgICAgICBzdHJ1Y3QgZHJt X3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudCwKPiAtCQkJCSAgICAgIHVpbnQzMl90IHBhZ2Vf ZmxpcF9mbGFncykKPiAtewo+IC0Jc3RydWN0IGF0bWVsX2hsY2RjX2NydGMgKmNydGMgPSBkcm1f Y3J0Y190b19hdG1lbF9obGNkY19jcnRjKGMpOwo+IC0Jc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5l X3VwZGF0ZV9yZXEgcmVxOwo+IC0Jc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBjLT5wcmltYXJ5 Owo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGMtPmRldjsKPiAtCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAtCj4gLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5l dmVudF9sb2NrLCBmbGFncyk7Cj4gLQlpZiAoY3J0Yy0+ZXZlbnQpCj4gLQkJcmV0ID0gLUVCVVNZ Owo+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4g LQo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCW1lbXNldCgmcmVxLCAwLCBz aXplb2YocmVxKSk7Cj4gLQlyZXEuY3J0Y194ID0gMDsKPiAtCXJlcS5jcnRjX3kgPSAwOwo+IC0J cmVxLmNydGNfaCA9IGMtPm1vZGUuY3J0Y192ZGlzcGxheTsKPiAtCXJlcS5jcnRjX3cgPSBjLT5t b2RlLmNydGNfaGRpc3BsYXk7Cj4gLQlyZXEuc3JjX3ggPSBjLT54IDw8IDE2Owo+IC0JcmVxLnNy Y195ID0gYy0+eSA8PCAxNjsKPiAtCXJlcS5zcmNfdyA9IHJlcS5jcnRjX3cgPDwgMTY7Cj4gLQly ZXEuc3JjX2ggPSByZXEuY3J0Y19oIDw8IDE2Owo+IC0JcmVxLmZiID0gZmI7Cj4gLQo+IC0JcmV0 ID0gYXRtZWxfaGxjZGNfcGxhbmVfcHJlcGFyZV91cGRhdGVfcmVxKHBsYW5lLCAmcmVxLCAmYy0+ aHdtb2RlKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlpZiAoZXZlbnQp IHsKPiAtCQlkcm1fdmJsYW5rX2dldChjLT5kZXYsIGNydGMtPmlkKTsKPiAtCQlzcGluX2xvY2tf aXJxc2F2ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4gLQkJY3J0Yy0+ZXZlbnQgPSBldmVu dDsKPiAtCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsK PiAtCX0KPiAtCj4gLQlyZXQgPSBhdG1lbF9obGNkY19wbGFuZV9hcHBseV91cGRhdGVfcmVxKHBs YW5lLCAmcmVxKTsKPiAtCWlmIChyZXQpCj4gLQkJY3J0Yy0+ZXZlbnQgPSBOVUxMOwo+IC0JZWxz ZQo+IC0JCXBsYW5lLT5mYiA9IGZiOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgYXRtZWxfaGxjZGNfY3J0Y19mdW5jcyA9 IHsKPiAtCS5wYWdlX2ZsaXAgPSBhdG1lbF9obGNkY19jcnRjX3BhZ2VfZmxpcCwKPiAtCS5zZXRf Y29uZmlnID0gZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcsCj4gKwkucGFnZV9mbGlwID0gZHJt X2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAo+ICsJLnNldF9jb25maWcgPSBkcm1fYXRvbWljX2hl bHBlcl9zZXRfY29uZmlnLAo+ICAJLmRlc3Ryb3kgPSBhdG1lbF9obGNkY19jcnRjX2Rlc3Ryb3ks Cj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0LAo+ICsJLmF0b21pY19k dXBsaWNhdGVfc3RhdGUgPSAgZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUs Cj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ry b3lfc3RhdGUsCj4gIH07Cj4gIAo+ICBpbnQgYXRtZWxfaGxjZGNfY3J0Y19jcmVhdGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldikKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhs Y2RjL2F0bWVsX2hsY2RjX2RjLmMgYi9kcml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxf aGxjZGNfZGMuYwo+IGluZGV4IDczMjBhNmMuLjQ3ZmQxNDcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVsX2hsY2RjX2RjLmMKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfZGMuYwo+IEBAIC0yMjIsNiArMjIyLDggQEAg c3RhdGljIHZvaWQgYXRtZWxfaGxjZGNfZmJfb3V0cHV0X3BvbGxfY2hhbmdlZChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5j cyBtb2RlX2NvbmZpZ19mdW5jcyA9IHsKPiAgCS5mYl9jcmVhdGUgPSBhdG1lbF9obGNkY19mYl9j cmVhdGUsCj4gIAkub3V0cHV0X3BvbGxfY2hhbmdlZCA9IGF0bWVsX2hsY2RjX2ZiX291dHB1dF9w b2xsX2NoYW5nZWQsCj4gKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ss Cj4gKwkuYXRvbWljX2NvbW1pdCA9IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdCwKPiAgfTsKPiAg Cj4gIHN0YXRpYyBpbnQgYXRtZWxfaGxjZGNfZGNfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4gQEAgLTMxOSw2ICszMjEsOCBAQCBzdGF0aWMgaW50IGF0bWVsX2hsY2RjX2Rj X2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCQlnb3RvIGVycl9wZXJpcGhfY2xrX2Rp c2FibGU7Cj4gIAl9Cj4gIAo+ICsJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7Cj4gKwo+ICAJ cmV0ID0gZHJtX3ZibGFua19pbml0KGRldiwgMSk7Cj4gIAlpZiAocmV0IDwgMCkgewo+ICAJCWRl dl9lcnIoZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB2YmxhbmtcbiIpOwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfZGMuaCBiL2Ry aXZlcnMvZ3B1L2RybS9hdG1lbC1obGNkYy9hdG1lbF9obGNkY19kYy5oCj4gaW5kZXggN2JjOTZh Zi4uYzE4ZGEyMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRt ZWxfaGxjZGNfZGMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hdG1lbC1obGNkYy9hdG1lbF9o bGNkY19kYy5oCj4gQEAgLTI2LDExICsyNiwxNCBAQAo+ICAjaW5jbHVkZSA8bGludXgvaXJxZG9t YWluLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9wd20uaD4KPiAgCj4gKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pYy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gICNpbmNs dWRlIDxkcm0vZHJtX2NydGMuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4K PiAgI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgo+ICAjaW5jbHVkZSA8ZHJtL2Ry bV9nZW1fY21hX2hlbHBlci5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgo+ICsjaW5j bHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4g IAo+ICAjaW5jbHVkZSAiYXRtZWxfaGxjZGNfbGF5ZXIuaCIKPiBAQCAtNjksNyArNzIsNiBAQCBz dHJ1Y3QgYXRtZWxfaGxjZGNfZGNfZGVzYyB7Cj4gICAqLwo+ICBzdHJ1Y3QgYXRtZWxfaGxjZGNf cGxhbmVfcHJvcGVydGllcyB7Cj4gIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICphbHBoYTsKPiAtCXN0 cnVjdCBkcm1fcHJvcGVydHkgKnJvdGF0aW9uOwo+ICB9Owo+ICAKPiAgLyoqCj4gQEAgLTg0LDcg Kzg2LDYgQEAgc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5lIHsKPiAgCXN0cnVjdCBkcm1fcGxhbmUg YmFzZTsKPiAgCXN0cnVjdCBhdG1lbF9obGNkY19sYXllciBsYXllcjsKPiAgCXN0cnVjdCBhdG1l bF9obGNkY19wbGFuZV9wcm9wZXJ0aWVzICpwcm9wZXJ0aWVzOwo+IC0JdW5zaWduZWQgaW50IHJv dGF0aW9uOwo+ICB9Owo+ICAKPiAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYXRtZWxfaGxjZGNfcGxh bmUgKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxj ZGNfbGF5ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9hdG1lbC1obGNkYy9hdG1lbF9obGNkY19sYXll ci5jCj4gaW5kZXggMDYzZDJhNy4uZDFkY2EzOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfbGF5ZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hdG1lbC1obGNkYy9hdG1lbF9obGNkY19sYXllci5jCj4gQEAgLTI5OCw3ICsyOTgsNyBAQCB2 b2lkIGF0bWVsX2hsY2RjX2xheWVyX2lycShzdHJ1Y3QgYXRtZWxfaGxjZGNfbGF5ZXIgKmxheWVy KQo+ICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGF5ZXItPmxvY2ssIGZsYWdzKTsKPiAgfQo+ ICAKPiAtaW50IGF0bWVsX2hsY2RjX2xheWVyX2Rpc2FibGUoc3RydWN0IGF0bWVsX2hsY2RjX2xh eWVyICpsYXllcikKPiArdm9pZCBhdG1lbF9obGNkY19sYXllcl9kaXNhYmxlKHN0cnVjdCBhdG1l bF9obGNkY19sYXllciAqbGF5ZXIpCj4gIHsKPiAgCXN0cnVjdCBhdG1lbF9obGNkY19sYXllcl9k bWFfY2hhbm5lbCAqZG1hID0gJmxheWVyLT5kbWE7Cj4gIAlzdHJ1Y3QgYXRtZWxfaGxjZGNfbGF5 ZXJfdXBkYXRlICp1cGQgPSAmbGF5ZXItPnVwZGF0ZTsKPiBAQCAtMzQwLDggKzM0MCw2IEBAIGlu dCBhdG1lbF9obGNkY19sYXllcl9kaXNhYmxlKHN0cnVjdCBhdG1lbF9obGNkY19sYXllciAqbGF5 ZXIpCj4gIAlkbWEtPnN0YXR1cyA9IEFUTUVMX0hMQ0RDX0xBWUVSX0RJU0FCTEVEOwo+ICAKPiAg CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxheWVyLT5sb2NrLCBmbGFncyk7Cj4gLQo+IC0JcmV0 dXJuIDA7Cj4gIH0KPiAgCj4gIGludCBhdG1lbF9obGNkY19sYXllcl91cGRhdGVfc3RhcnQoc3Ry dWN0IGF0bWVsX2hsY2RjX2xheWVyICpsYXllcikKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2F0bWVsLWhsY2RjL2F0bWVsX2hsY2RjX2xheWVyLmggYi9kcml2ZXJzL2dwdS9kcm0vYXRt ZWwtaGxjZGMvYXRtZWxfaGxjZGNfbGF5ZXIuaAo+IGluZGV4IDI3ZTU2YzAuLjliZWFiYzkgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVsX2hsY2RjX2xheWVy LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfbGF5ZXIu aAo+IEBAIC0xMjAsNiArMTIwLDcgQEAKPiAgI2RlZmluZSBBVE1FTF9ITENEQ19MQVlFUl9ESVND RU4JCUJJVCgxMSkKPiAgI2RlZmluZSBBVE1FTF9ITENEQ19MQVlFUl9HQV9TSElGVAkJMTYKPiAg I2RlZmluZSBBVE1FTF9ITENEQ19MQVlFUl9HQV9NQVNLCQlHRU5NQVNLKDIzLCBBVE1FTF9ITENE Q19MQVlFUl9HQV9TSElGVCkKPiArI2RlZmluZSBBVE1FTF9ITENEQ19MQVlFUl9HQSh4KQkJCSgo eCkgPDwgQVRNRUxfSExDRENfTEFZRVJfR0FfU0hJRlQpCj4gIAo+ICAjZGVmaW5lIEFUTUVMX0hM Q0RDX0xBWUVSX0NTQ19DRkcocCwgbykJCUFUTUVMX0hMQ0RDX0xBWUVSX0NGRyhwLCAocCktPmRl c2MtPmxheW91dC5jc2MgKyBvKQo+ICAKPiBAQCAtMzc2LDcgKzM3Nyw3IEBAIGludCBhdG1lbF9o bGNkY19sYXllcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIHZvaWQgYXRtZWxfaGxj ZGNfbGF5ZXJfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCQkgICAgICAgc3Ry dWN0IGF0bWVsX2hsY2RjX2xheWVyICpsYXllcik7Cj4gIAo+IC1pbnQgYXRtZWxfaGxjZGNfbGF5 ZXJfZGlzYWJsZShzdHJ1Y3QgYXRtZWxfaGxjZGNfbGF5ZXIgKmxheWVyKTsKPiArdm9pZCBhdG1l bF9obGNkY19sYXllcl9kaXNhYmxlKHN0cnVjdCBhdG1lbF9obGNkY19sYXllciAqbGF5ZXIpOwo+ ICAKPiAgaW50IGF0bWVsX2hsY2RjX2xheWVyX3VwZGF0ZV9zdGFydChzdHJ1Y3QgYXRtZWxfaGxj ZGNfbGF5ZXIgKmxheWVyKTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hdG1l bC1obGNkYy9hdG1lbF9obGNkY19vdXRwdXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9hdG1lbC1obGNk Yy9hdG1lbF9obGNkY19vdXRwdXQuYwo+IGluZGV4IGIwNDlmMjIuLjFlODE0YzcgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVsX2hsY2RjX291dHB1dC5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVsX2hsY2RjX291dHB1dC5jCj4g QEAgLTIzNCw2ICsyMzQsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVu Y3MgYXRtZWxfaGxjZGNfcGFuZWxfY29ubmVjdG9yX2Z1bmNzID0gewo+ICAJLmRldGVjdCA9IGF0 bWVsX2hsY2RjX3BhbmVsX2Nvbm5lY3Rvcl9kZXRlY3QsCj4gIAkuZmlsbF9tb2RlcyA9IGRybV9o ZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKPiAgCS5kZXN0cm95ID0gYXRtZWxf aGxjZGNfcGFuZWxfY29ubmVjdG9yX2Rlc3Ryb3ksCj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hl bHBlcl9jb25uZWN0b3JfcmVzZXQsCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ry b3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKPiAg fTsKPiAgCj4gIHN0YXRpYyBpbnQgYXRtZWxfaGxjZGNfY3JlYXRlX3BhbmVsX291dHB1dChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXRtZWwt aGxjZGMvYXRtZWxfaGxjZGNfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9hdG1lbC1obGNkYy9h dG1lbF9obGNkY19wbGFuZS5jCj4gaW5kZXggYzU4OTJkYy4uNGFhNDczYyAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfcGxhbmUuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9hdG1lbC1obGNkYy9hdG1lbF9obGNkY19wbGFuZS5jCj4gQEAgLTE5 LDYgKzE5LDUyIEBACj4gIAo+ICAjaW5jbHVkZSAiYXRtZWxfaGxjZGNfZGMuaCIKPiAgCj4gKy8q Kgo+ICsgKiBBdG1lbCBITENEQyBQbGFuZSBzdGF0ZSBzdHJ1Y3R1cmUuCj4gKyAqCj4gKyAqIEBi YXNlOiBEUk0gcGxhbmUgc3RhdGUKPiArICogQGNydGNfeDogeCBwb3NpdGlvbiBvZiB0aGUgcGxh bmUgcmVsYXRpdmUgdG8gdGhlIENSVEMKPiArICogQGNydGNfeTogeSBwb3NpdGlvbiBvZiB0aGUg cGxhbmUgcmVsYXRpdmUgdG8gdGhlIENSVEMKPiArICogQGNydGNfdzogdmlzaWJsZSB3aWR0aCBv ZiB0aGUgcGxhbmUKPiArICogQGNydGNfaDogdmlzaWJsZSBoZWlnaHQgb2YgdGhlIHBsYW5lCj4g KyAqIEBzcmNfeDogeCBidWZmZXIgcG9zaXRpb24KPiArICogQHNyY195OiB5IGJ1ZmZlciBwb3Np dGlvbgo+ICsgKiBAc3JjX3c6IGJ1ZmZlciB3aWR0aAo+ICsgKiBAc3JjX2g6IGJ1ZmZlciBoZWln aHQKPiArICogQGFscGhhOiBhbHBoYSBibGVuZGluZyBvZiB0aGUgcGxhbmUKPiArICogQGJwcDog Ynl0ZXMgcGVyIHBpeGVsIGRlZHVjZWQgZnJvbSBwaXhlbF9mb3JtYXQKPiArICogQG9mZnNldHM6 IG9mZnNldHMgdG8gYXBwbHkgdG8gdGhlIEdFTSBidWZmZXJzCj4gKyAqIEB4c3RyaWRlOiB2YWx1 ZSB0byBhZGQgdG8gdGhlIHBpeGVsIHBvaW50ZXIgYmV0d2VlbiBlYWNoIGxpbmUKPiArICogQHBz dHJpZGU6IHZhbHVlIHRvIGFkZCB0byB0aGUgcGl4ZWwgcG9pbnRlciBiZXR3ZWVuIGVhY2ggcGl4 ZWwKPiArICogQG5wbGFuZXM6IG51bWJlciBvZiBwbGFuZXMgKGRlZHVjZWQgZnJvbSBwaXhlbF9m b3JtYXQpCj4gKyAqLwo+ICtzdHJ1Y3QgYXRtZWxfaGxjZGNfcGxhbmVfc3RhdGUgewo+ICsJc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSBiYXNlOwo+ICsJaW50IGNydGNfeDsKPiArCWludCBjcnRjX3k7 Cj4gKwl1bnNpZ25lZCBpbnQgY3J0Y193Owo+ICsJdW5zaWduZWQgaW50IGNydGNfaDsKPiArCXVp bnQzMl90IHNyY194Owo+ICsJdWludDMyX3Qgc3JjX3k7Cj4gKwl1aW50MzJfdCBzcmNfdzsKPiAr CXVpbnQzMl90IHNyY19oOwo+ICsKPiArCXU4IGFscGhhOwo+ICsKPiArCS8qIFRoZXNlIGZpZWxk cyBhcmUgcHJpdmF0ZSBhbmQgc2hvdWxkIG5vdCBiZSB0b3VjaGVkICovCj4gKwlpbnQgYnBwW0FU TUVMX0hMQ0RDX01BWF9QTEFORVNdOwo+ICsJdW5zaWduZWQgaW50IG9mZnNldHNbQVRNRUxfSExD RENfTUFYX1BMQU5FU107Cj4gKwlpbnQgeHN0cmlkZVtBVE1FTF9ITENEQ19NQVhfUExBTkVTXTsK PiArCWludCBwc3RyaWRlW0FUTUVMX0hMQ0RDX01BWF9QTEFORVNdOwo+ICsJaW50IG5wbGFuZXM7 Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBhdG1lbF9obGNkY19wbGFuZV9zdGF0 ZSAqCj4gK2RybV9wbGFuZV9zdGF0ZV90b19hdG1lbF9obGNkY19wbGFuZV9zdGF0ZShzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlICpzKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKHMsIHN0cnVj dCBhdG1lbF9obGNkY19wbGFuZV9zdGF0ZSwgYmFzZSk7Cj4gK30KPiArCj4gICNkZWZpbmUgU1VC UElYRUxfTUFTSwkJCTB4ZmZmZgo+ICAKPiAgc3RhdGljIHVpbnQzMl90IHJnYl9mb3JtYXRzW10g PSB7Cj4gQEAgLTEyOCw3ICsxNzQsNyBAQCBzdGF0aWMgaW50IGF0bWVsX2hsY2RjX2Zvcm1hdF90 b19wbGFuZV9tb2RlKHUzMiBmb3JtYXQsIHUzMiAqbW9kZSkKPiAgCXJldHVybiAwOwo+ICB9Cj4g IAo+IC1zdGF0aWMgYm9vbCBhdG1lbF9obGNkY19mb3JtYXRfZW1iZWRkc19hbHBoYSh1MzIgZm9y bWF0KQo+ICtzdGF0aWMgYm9vbCBhdG1lbF9obGNkY19mb3JtYXRfZW1iZWRzX2FscGhhKHUzMiBm b3JtYXQpCj4gIHsKPiAgCWludCBpOwo+ICAKPiBAQCAtMjA0LDcgKzI1MCw3IEBAIHN0YXRpYyB1 MzIgaGVvX3Vwc2NhbGluZ195Y29lZltdID0gewo+ICAKPiAgc3RhdGljIHZvaWQKPiAgYXRtZWxf aGxjZGNfcGxhbmVfdXBkYXRlX3Bvc19hbmRfc2l6ZShzdHJ1Y3QgYXRtZWxfaGxjZGNfcGxhbmUg KnBsYW5lLAo+IC0JCQkJc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5lX3VwZGF0ZV9yZXEgKnJlcSkK PiArCQkJCSAgICAgIHN0cnVjdCBhdG1lbF9obGNkY19wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gIHsK PiAgCWNvbnN0IHN0cnVjdCBhdG1lbF9obGNkY19sYXllcl9jZmdfbGF5b3V0ICpsYXlvdXQgPQo+ ICAJCQkJCQkmcGxhbmUtPmxheWVyLmRlc2MtPmxheW91dDsKPiBAQCAtMjEzLDY5ICsyNTksNjkg QEAgYXRtZWxfaGxjZGNfcGxhbmVfdXBkYXRlX3Bvc19hbmRfc2l6ZShzdHJ1Y3QgYXRtZWxfaGxj ZGNfcGxhbmUgKnBsYW5lLAo+ICAJCWF0bWVsX2hsY2RjX2xheWVyX3VwZGF0ZV9jZmcoJnBsYW5l LT5sYXllciwKPiAgCQkJCQkgICAgIGxheW91dC0+c2l6ZSwKPiAgCQkJCQkgICAgIDB4ZmZmZmZm ZmYsCj4gLQkJCQkJICAgICAocmVxLT5jcnRjX3cgLSAxKSB8Cj4gLQkJCQkJICAgICAoKHJlcS0+ Y3J0Y19oIC0gMSkgPDwgMTYpKTsKPiArCQkJCQkgICAgIChzdGF0ZS0+Y3J0Y193IC0gMSkgfAo+ ICsJCQkJCSAgICAgKChzdGF0ZS0+Y3J0Y19oIC0gMSkgPDwgMTYpKTsKPiAgCj4gIAlpZiAobGF5 b3V0LT5tZW1zaXplKQo+ICAJCWF0bWVsX2hsY2RjX2xheWVyX3VwZGF0ZV9jZmcoJnBsYW5lLT5s YXllciwKPiAgCQkJCQkgICAgIGxheW91dC0+bWVtc2l6ZSwKPiAgCQkJCQkgICAgIDB4ZmZmZmZm ZmYsCj4gLQkJCQkJICAgICAocmVxLT5zcmNfdyAtIDEpIHwKPiAtCQkJCQkgICAgICgocmVxLT5z cmNfaCAtIDEpIDw8IDE2KSk7Cj4gKwkJCQkJICAgICAoc3RhdGUtPnNyY193IC0gMSkgfAo+ICsJ CQkJCSAgICAgKChzdGF0ZS0+c3JjX2ggLSAxKSA8PCAxNikpOwo+ICAKPiAgCWlmIChsYXlvdXQt PnBvcykKPiAgCQlhdG1lbF9obGNkY19sYXllcl91cGRhdGVfY2ZnKCZwbGFuZS0+bGF5ZXIsCj4g IAkJCQkJICAgICBsYXlvdXQtPnBvcywKPiAgCQkJCQkgICAgIDB4ZmZmZmZmZmYsCj4gLQkJCQkJ ICAgICByZXEtPmNydGNfeCB8Cj4gLQkJCQkJICAgICAocmVxLT5jcnRjX3kgIDw8IDE2KSk7Cj4g KwkJCQkJICAgICBzdGF0ZS0+Y3J0Y194IHwKPiArCQkJCQkgICAgIChzdGF0ZS0+Y3J0Y195ICA8 PCAxNikpOwo+ICAKPiAgCS8qIFRPRE86IHJld29yayB0aGUgcmVzY2FsaW5nIHBhcnQgKi8KPiAt CWlmIChyZXEtPmNydGNfdyAhPSByZXEtPnNyY193IHx8IHJlcS0+Y3J0Y19oICE9IHJlcS0+c3Jj X2gpIHsKPiArCWlmIChzdGF0ZS0+Y3J0Y193ICE9IHN0YXRlLT5zcmNfdyB8fCBzdGF0ZS0+Y3J0 Y19oICE9IHN0YXRlLT5zcmNfaCkgewo+ICAJCXUzMiBmYWN0b3JfcmVnID0gMDsKPiAgCj4gLQkJ aWYgKHJlcS0+Y3J0Y193ICE9IHJlcS0+c3JjX3cpIHsKPiArCQlpZiAoc3RhdGUtPmNydGNfdyAh PSBzdGF0ZS0+c3JjX3cpIHsKPiAgCQkJaW50IGk7Cj4gIAkJCXUzMiBmYWN0b3I7Cj4gIAkJCXUz MiAqY29lZmZfdGFiID0gaGVvX3Vwc2NhbGluZ194Y29lZjsKPiAgCQkJdTMyIG1heF9tZW1zaXpl Owo+ICAKPiAtCQkJaWYgKHJlcS0+Y3J0Y193IDwgcmVxLT5zcmNfdykKPiArCQkJaWYgKHN0YXRl LT5jcnRjX3cgPCBzdGF0ZS0+c3JjX3cpCj4gIAkJCQljb2VmZl90YWIgPSBoZW9fZG93bnNjYWxp bmdfeGNvZWY7Cj4gIAkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhlb191cHNjYWxpbmdf eGNvZWYpOyBpKyspCj4gIAkJCQlhdG1lbF9obGNkY19sYXllcl91cGRhdGVfY2ZnKCZwbGFuZS0+ bGF5ZXIsCj4gIAkJCQkJCQkgICAgIDE3ICsgaSwKPiAgCQkJCQkJCSAgICAgMHhmZmZmZmZmZiwK PiAgCQkJCQkJCSAgICAgY29lZmZfdGFiW2ldKTsKPiAtCQkJZmFjdG9yID0gKCg4ICogMjU2ICog cmVxLT5zcmNfdykgLSAoMjU2ICogNCkpIC8KPiAtCQkJCSByZXEtPmNydGNfdzsKPiArCQkJZmFj dG9yID0gKCg4ICogMjU2ICogc3RhdGUtPnNyY193KSAtICgyNTYgKiA0KSkgLwo+ICsJCQkJIHN0 YXRlLT5jcnRjX3c7Cj4gIAkJCWZhY3RvcisrOwo+IC0JCQltYXhfbWVtc2l6ZSA9ICgoZmFjdG9y ICogcmVxLT5jcnRjX3cpICsgKDI1NiAqIDQpKSAvCj4gKwkJCW1heF9tZW1zaXplID0gKChmYWN0 b3IgKiBzdGF0ZS0+Y3J0Y193KSArICgyNTYgKiA0KSkgLwo+ICAJCQkJICAgICAgMjA0ODsKPiAt CQkJaWYgKG1heF9tZW1zaXplID4gcmVxLT5zcmNfdykKPiArCQkJaWYgKG1heF9tZW1zaXplID4g c3RhdGUtPnNyY193KQo+ICAJCQkJZmFjdG9yLS07Cj4gIAkJCWZhY3Rvcl9yZWcgfD0gZmFjdG9y IHwgMHg4MDAwMDAwMDsKPiAgCQl9Cj4gIAo+IC0JCWlmIChyZXEtPmNydGNfaCAhPSByZXEtPnNy Y19oKSB7Cj4gKwkJaWYgKHN0YXRlLT5jcnRjX2ggIT0gc3RhdGUtPnNyY19oKSB7Cj4gIAkJCWlu dCBpOwo+ICAJCQl1MzIgZmFjdG9yOwo+ICAJCQl1MzIgKmNvZWZmX3RhYiA9IGhlb191cHNjYWxp bmdfeWNvZWY7Cj4gIAkJCXUzMiBtYXhfbWVtc2l6ZTsKPiAgCj4gLQkJCWlmIChyZXEtPmNydGNf dyA8IHJlcS0+c3JjX3cpCj4gKwkJCWlmIChzdGF0ZS0+Y3J0Y193IDwgc3RhdGUtPnNyY193KQo+ ICAJCQkJY29lZmZfdGFiID0gaGVvX2Rvd25zY2FsaW5nX3ljb2VmOwo+ICAJCQlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShoZW9fdXBzY2FsaW5nX3ljb2VmKTsgaSsrKQo+ICAJCQkJYXRtZWxf aGxjZGNfbGF5ZXJfdXBkYXRlX2NmZygmcGxhbmUtPmxheWVyLAo+ICAJCQkJCQkJICAgICAzMyAr IGksCj4gIAkJCQkJCQkgICAgIDB4ZmZmZmZmZmYsCj4gIAkJCQkJCQkgICAgIGNvZWZmX3RhYltp XSk7Cj4gLQkJCWZhY3RvciA9ICgoOCAqIDI1NiAqIHJlcS0+c3JjX3cpIC0gKDI1NiAqIDQpKSAv Cj4gLQkJCQkgcmVxLT5jcnRjX3c7Cj4gKwkJCWZhY3RvciA9ICgoOCAqIDI1NiAqIHN0YXRlLT5z cmNfdykgLSAoMjU2ICogNCkpIC8KPiArCQkJCSBzdGF0ZS0+Y3J0Y193Owo+ICAJCQlmYWN0b3Ir KzsKPiAtCQkJbWF4X21lbXNpemUgPSAoKGZhY3RvciAqIHJlcS0+Y3J0Y193KSArICgyNTYgKiA0 KSkgLwo+ICsJCQltYXhfbWVtc2l6ZSA9ICgoZmFjdG9yICogc3RhdGUtPmNydGNfdykgKyAoMjU2 ICogNCkpIC8KPiAgCQkJCSAgICAgIDIwNDg7Cj4gLQkJCWlmIChtYXhfbWVtc2l6ZSA+IHJlcS0+ c3JjX3cpCj4gKwkJCWlmIChtYXhfbWVtc2l6ZSA+IHN0YXRlLT5zcmNfdykKPiAgCQkJCWZhY3Rv ci0tOwo+ICAJCQlmYWN0b3JfcmVnIHw9IChmYWN0b3IgPDwgMTYpIHwgMHg4MDAwMDAwMDsKPiAg CQl9Cj4gQEAgLTI4Nyw3ICszMzMsNyBAQCBhdG1lbF9obGNkY19wbGFuZV91cGRhdGVfcG9zX2Fu ZF9zaXplKHN0cnVjdCBhdG1lbF9obGNkY19wbGFuZSAqcGxhbmUsCj4gIAo+ICBzdGF0aWMgdm9p ZAo+ICBhdG1lbF9obGNkY19wbGFuZV91cGRhdGVfZ2VuZXJhbF9zZXR0aW5ncyhzdHJ1Y3QgYXRt ZWxfaGxjZGNfcGxhbmUgKnBsYW5lLAo+IC0JCQkJc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5lX3Vw ZGF0ZV9yZXEgKnJlcSkKPiArCQkJCQlzdHJ1Y3QgYXRtZWxfaGxjZGNfcGxhbmVfc3RhdGUgKnN0 YXRlKQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3QgYXRtZWxfaGxjZGNfbGF5ZXJfY2ZnX2xheW91dCAq bGF5b3V0ID0KPiAgCQkJCQkJJnBsYW5lLT5sYXllci5kZXNjLT5sYXlvdXQ7Cj4gQEAgLTI5Nywx MCArMzQzLDExIEBAIGF0bWVsX2hsY2RjX3BsYW5lX3VwZGF0ZV9nZW5lcmFsX3NldHRpbmdzKHN0 cnVjdCBhdG1lbF9obGNkY19wbGFuZSAqcGxhbmUsCj4gIAkJY2ZnIHw9IEFUTUVMX0hMQ0RDX0xB WUVSX09WUiB8IEFUTUVMX0hMQ0RDX0xBWUVSX0lURVIyQkwgfAo+ICAJCSAgICAgICBBVE1FTF9I TENEQ19MQVlFUl9JVEVSOwo+ICAKPiAtCQlpZiAoYXRtZWxfaGxjZGNfZm9ybWF0X2VtYmVkZHNf YWxwaGEocmVxLT5mYi0+cGl4ZWxfZm9ybWF0KSkKPiArCQlpZiAoYXRtZWxfaGxjZGNfZm9ybWF0 X2VtYmVkc19hbHBoYShzdGF0ZS0+YmFzZS5mYi0+cGl4ZWxfZm9ybWF0KSkKPiAgCQkJY2ZnIHw9 IEFUTUVMX0hMQ0RDX0xBWUVSX0xBRU47Cj4gIAkJZWxzZQo+IC0JCQljZmcgfD0gQVRNRUxfSExD RENfTEFZRVJfR0FFTjsKPiArCQkJY2ZnIHw9IEFUTUVMX0hMQ0RDX0xBWUVSX0dBRU4gfAo+ICsJ CQkgICAgICAgQVRNRUxfSExDRENfTEFZRVJfR0Eoc3RhdGUtPmFscGhhKTsKPiAgCX0KPiAgCj4g IAlhdG1lbF9obGNkY19sYXllcl91cGRhdGVfY2ZnKCZwbGFuZS0+bGF5ZXIsCj4gQEAgLTMxMiwy NCArMzU5LDI2IEBAIGF0bWVsX2hsY2RjX3BsYW5lX3VwZGF0ZV9nZW5lcmFsX3NldHRpbmdzKHN0 cnVjdCBhdG1lbF9obGNkY19wbGFuZSAqcGxhbmUsCj4gIAkJCQkgICAgIEFUTUVMX0hMQ0RDX0xB WUVSX0lURVIyQkwgfAo+ICAJCQkJICAgICBBVE1FTF9ITENEQ19MQVlFUl9JVEVSIHwKPiAgCQkJ CSAgICAgQVRNRUxfSExDRENfTEFZRVJfR0FFTiB8Cj4gKwkJCQkgICAgIEFUTUVMX0hMQ0RDX0xB WUVSX0dBX01BU0sgfAo+ICAJCQkJICAgICBBVE1FTF9ITENEQ19MQVlFUl9MQUVOIHwKPiAgCQkJ CSAgICAgQVRNRUxfSExDRENfTEFZRVJfT1ZSIHwKPiAgCQkJCSAgICAgQVRNRUxfSExDRENfTEFZ RVJfRE1BLCBjZmcpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBhdG1lbF9obGNkY19wbGFuZV91 cGRhdGVfZm9ybWF0KHN0cnVjdCBhdG1lbF9obGNkY19wbGFuZSAqcGxhbmUsCj4gLQkJCQlzdHJ1 Y3QgYXRtZWxfaGxjZGNfcGxhbmVfdXBkYXRlX3JlcSAqcmVxKQo+ICsJCQkJCXN0cnVjdCBhdG1l bF9obGNkY19wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gIHsKPiAgCXUzMiBjZmc7Cj4gIAlpbnQgcmV0 Owo+ICAKPiAtCXJldCA9IGF0bWVsX2hsY2RjX2Zvcm1hdF90b19wbGFuZV9tb2RlKHJlcS0+ZmIt PnBpeGVsX2Zvcm1hdCwgJmNmZyk7Cj4gKwlyZXQgPSBhdG1lbF9obGNkY19mb3JtYXRfdG9fcGxh bmVfbW9kZShzdGF0ZS0+YmFzZS5mYi0+cGl4ZWxfZm9ybWF0LAo+ICsJCQkJCSAgICAgICAmY2Zn KTsKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWlmICgocmVxLT5mYi0+cGl4ZWxf Zm9ybWF0ID09IERSTV9GT1JNQVRfWVVWNDIyIHx8Cj4gLQkgICAgIHJlcS0+ZmItPnBpeGVsX2Zv cm1hdCA9PSBEUk1fRk9STUFUX05WNjEpICYmCj4gLQkgICAgKHBsYW5lLT5yb3RhdGlvbiAmIChC SVQoRFJNX1JPVEFURV85MCkgfCBCSVQoRFJNX1JPVEFURV8yNzApKSkpCj4gKwlpZiAoKHN0YXRl LT5iYXNlLmZiLT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9ZVVY0MjIgfHwKPiArCSAgICAg c3RhdGUtPmJhc2UuZmItPnBpeGVsX2Zvcm1hdCA9PSBEUk1fRk9STUFUX05WNjEpICYmCj4gKwkg ICAgKHN0YXRlLT5iYXNlLnJvdGF0aW9uICYgKEJJVChEUk1fUk9UQVRFXzkwKSB8IEJJVChEUk1f Uk9UQVRFXzI3MCkpKSkKPiAgCQljZmcgfD0gQVRNRUxfSExDRENfWVVWNDIyUk9UOwo+ICAKPiAg CWF0bWVsX2hsY2RjX2xheWVyX3VwZGF0ZV9jZmcoJnBsYW5lLT5sYXllciwKPiBAQCAtMzQxLDcg KzM5MCw3IEBAIHN0YXRpYyB2b2lkIGF0bWVsX2hsY2RjX3BsYW5lX3VwZGF0ZV9mb3JtYXQoc3Ry dWN0IGF0bWVsX2hsY2RjX3BsYW5lICpwbGFuZSwKPiAgCSAqIFJvdGF0aW9uIG9wdGltaXphdGlv biBpcyBub3Qgd29ya2luZyBvbiBSR0I4ODggKHJvdGF0aW9uIGlzIHN0aWxsCj4gIAkgKiB3b3Jr aW5nIGJ1dCB3aXRob3V0IGFueSBvcHRpbWl6YXRpb24pLgo+ICAJICovCj4gLQlpZiAocmVxLT5m Yi0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfUkdCODg4KQo+ICsJaWYgKHN0YXRlLT5iYXNl LmZiLT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9SR0I4ODgpCj4gIAkJY2ZnID0gQVRNRUxf SExDRENfTEFZRVJfRE1BX1JPVERJUzsKPiAgCWVsc2UKPiAgCQljZmcgPSAwOwo+IEBAIC0zNTIs NzMgKzQwMSw0NCBAQCBzdGF0aWMgdm9pZCBhdG1lbF9obGNkY19wbGFuZV91cGRhdGVfZm9ybWF0 KHN0cnVjdCBhdG1lbF9obGNkY19wbGFuZSAqcGxhbmUsCj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lk IGF0bWVsX2hsY2RjX3BsYW5lX3VwZGF0ZV9idWZmZXJzKHN0cnVjdCBhdG1lbF9obGNkY19wbGFu ZSAqcGxhbmUsCj4gLQkJCQlzdHJ1Y3QgYXRtZWxfaGxjZGNfcGxhbmVfdXBkYXRlX3JlcSAqcmVx KQo+ICsJCQkJCXN0cnVjdCBhdG1lbF9obGNkY19wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gIHsKPiAg CXN0cnVjdCBhdG1lbF9obGNkY19sYXllciAqbGF5ZXIgPSAmcGxhbmUtPmxheWVyOwo+ICAJY29u c3Qgc3RydWN0IGF0bWVsX2hsY2RjX2xheWVyX2NmZ19sYXlvdXQgKmxheW91dCA9Cj4gIAkJCQkJ CQkmbGF5ZXItPmRlc2MtPmxheW91dDsKPiAgCWludCBpOwo+ICAKPiAtCWF0bWVsX2hsY2RjX2xh eWVyX3VwZGF0ZV9zZXRfZmIoJnBsYW5lLT5sYXllciwgcmVxLT5mYiwgcmVxLT5vZmZzZXRzKTsK PiArCWF0bWVsX2hsY2RjX2xheWVyX3VwZGF0ZV9zZXRfZmIoJnBsYW5lLT5sYXllciwgc3RhdGUt PmJhc2UuZmIsCj4gKwkJCQkJc3RhdGUtPm9mZnNldHMpOwo+ICAKPiAtCWZvciAoaSA9IDA7IGkg PCByZXEtPm5wbGFuZXM7IGkrKykgewo+ICsJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5ucGxhbmVz OyBpKyspIHsKPiAgCQlpZiAobGF5b3V0LT54c3RyaWRlW2ldKSB7Cj4gIAkJCWF0bWVsX2hsY2Rj X2xheWVyX3VwZGF0ZV9jZmcoJnBsYW5lLT5sYXllciwKPiAgCQkJCQkJbGF5b3V0LT54c3RyaWRl W2ldLAo+ICAJCQkJCQkweGZmZmZmZmZmLAo+IC0JCQkJCQlyZXEtPnhzdHJpZGVbaV0pOwo+ICsJ CQkJCQlzdGF0ZS0+eHN0cmlkZVtpXSk7Cj4gIAkJfQo+ICAKPiAgCQlpZiAobGF5b3V0LT5wc3Ry aWRlW2ldKSB7Cj4gIAkJCWF0bWVsX2hsY2RjX2xheWVyX3VwZGF0ZV9jZmcoJnBsYW5lLT5sYXll ciwKPiAgCQkJCQkJbGF5b3V0LT5wc3RyaWRlW2ldLAo+ICAJCQkJCQkweGZmZmZmZmZmLAo+IC0J CQkJCQlyZXEtPnBzdHJpZGVbaV0pOwo+ICsJCQkJCQlzdGF0ZS0+cHN0cmlkZVtpXSk7Cj4gIAkJ fQo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IGF0bWVsX2hsY2RjX3BsYW5lX2NoZWNrX3Vw ZGF0ZV9yZXEoc3RydWN0IGRybV9wbGFuZSAqcCwKPiAtCQkJCXN0cnVjdCBhdG1lbF9obGNkY19w bGFuZV91cGRhdGVfcmVxICpyZXEsCj4gLQkJCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSkKPiArc3RhdGljIGludCBhdG1lbF9obGNkY19wbGFuZV9hdG9taWNfY2hlY2soc3Ry dWN0IGRybV9wbGFuZSAqcCwKPiArCQkJCQkgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnMpCj4g IHsKPiAgCXN0cnVjdCBhdG1lbF9obGNkY19wbGFuZSAqcGxhbmUgPSBkcm1fcGxhbmVfdG9fYXRt ZWxfaGxjZGNfcGxhbmUocCk7Cj4gKwlzdHJ1Y3QgYXRtZWxfaGxjZGNfcGxhbmVfc3RhdGUgKnN0 YXRlID0KPiArCQkJCWRybV9wbGFuZV9zdGF0ZV90b19hdG1lbF9obGNkY19wbGFuZV9zdGF0ZShz KTsKPiAgCWNvbnN0IHN0cnVjdCBhdG1lbF9obGNkY19sYXllcl9jZmdfbGF5b3V0ICpsYXlvdXQg PQo+ICAJCQkJCQkmcGxhbmUtPmxheWVyLmRlc2MtPmxheW91dDsKPiAtCj4gLQlpZiAoIWxheW91 dC0+c2l6ZSAmJgo+IC0JICAgIChtb2RlLT5oZGlzcGxheSAhPSByZXEtPmNydGNfdyB8fAo+IC0J ICAgICBtb2RlLT52ZGlzcGxheSAhPSByZXEtPmNydGNfaCkpCj4gLQkJcmV0dXJuIC1FSU5WQUw7 Cj4gLQo+IC0JaWYgKHBsYW5lLT5sYXllci5kZXNjLT5tYXhfaGVpZ2h0ICYmCj4gLQkgICAgcmVx LT5jcnRjX2ggPiBwbGFuZS0+bGF5ZXIuZGVzYy0+bWF4X2hlaWdodCkKPiAtCQlyZXR1cm4gLUVJ TlZBTDsKPiAtCj4gLQlpZiAocGxhbmUtPmxheWVyLmRlc2MtPm1heF93aWR0aCAmJgo+IC0JICAg IHJlcS0+Y3J0Y193ID4gcGxhbmUtPmxheWVyLmRlc2MtPm1heF93aWR0aCkKPiAtCQlyZXR1cm4g LUVJTlZBTDsKPiAtCj4gLQlpZiAoKHJlcS0+Y3J0Y19oICE9IHJlcS0+c3JjX2ggfHwgcmVxLT5j cnRjX3cgIT0gcmVxLT5zcmNfdykgJiYKPiAtCSAgICAoIWxheW91dC0+bWVtc2l6ZSB8fAo+IC0J ICAgICBhdG1lbF9obGNkY19mb3JtYXRfZW1iZWRkc19hbHBoYShyZXEtPmZiLT5waXhlbF9mb3Jt YXQpKSkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlpZiAocmVxLT5jcnRjX3ggPCAwIHx8 IHJlcS0+Y3J0Y195IDwgMCkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlpZiAocmVxLT5j cnRjX3cgKyByZXEtPmNydGNfeCA+IG1vZGUtPmhkaXNwbGF5IHx8Cj4gLQkgICAgcmVxLT5jcnRj X2ggKyByZXEtPmNydGNfeSA+IG1vZGUtPnZkaXNwbGF5KQo+IC0JCXJldHVybiAtRUlOVkFMOwo+ IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1pbnQgYXRtZWxfaGxjZGNfcGxhbmVfcHJlcGFy ZV91cGRhdGVfcmVxKHN0cnVjdCBkcm1fcGxhbmUgKnAsCj4gLQkJCQlzdHJ1Y3QgYXRtZWxfaGxj ZGNfcGxhbmVfdXBkYXRlX3JlcSAqcmVxLAo+IC0JCQkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUpCj4gLXsKPiAtCXN0cnVjdCBhdG1lbF9obGNkY19wbGFuZSAqcGxhbmUgPSBk cm1fcGxhbmVfdG9fYXRtZWxfaGxjZGNfcGxhbmUocCk7Cj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiA9IHN0YXRlLT5iYXNlLmZiOwo+ICsJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGU7Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gIAl1bnNp Z25lZCBpbnQgcGF0Y2hlZF9jcnRjX3c7Cj4gIAl1bnNpZ25lZCBpbnQgcGF0Y2hlZF9jcnRjX2g7 Cj4gIAl1bnNpZ25lZCBpbnQgcGF0Y2hlZF9zcmNfdzsKPiBAQCAtNDMwLDE5NiArNDUwLDIwMiBA QCBpbnQgYXRtZWxfaGxjZGNfcGxhbmVfcHJlcGFyZV91cGRhdGVfcmVxKHN0cnVjdCBkcm1fcGxh bmUgKnAsCj4gIAlpbnQgdnN1YiA9IDE7Cj4gIAlpbnQgaTsKPiAgCj4gLQlpZiAoKHJlcS0+c3Jj X3ggfCByZXEtPnNyY195IHwgcmVxLT5zcmNfdyB8IHJlcS0+c3JjX2gpICYKPiArCWlmICghc3Rh dGUtPmJhc2UuY3J0YyB8fCAhZmIpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJY3J0Y19zdGF0ZSA9 IHMtPnN0YXRlLT5jcnRjX3N0YXRlc1tkcm1fY3J0Y19pbmRleChzLT5jcnRjKV07Cj4gKwltb2Rl ID0gJmNydGNfc3RhdGUtPmFkanVzdGVkX21vZGU7Cj4gKwo+ICsJc3RhdGUtPnNyY194ID0gcy0+ c3JjX3g7Cj4gKwlzdGF0ZS0+c3JjX3kgPSBzLT5zcmNfeTsKPiArCXN0YXRlLT5zcmNfaCA9IHMt PnNyY19oOwo+ICsJc3RhdGUtPnNyY193ID0gcy0+c3JjX3c7Cj4gKwlzdGF0ZS0+Y3J0Y194ID0g cy0+Y3J0Y194Owo+ICsJc3RhdGUtPmNydGNfeSA9IHMtPmNydGNfeTsKPiArCXN0YXRlLT5jcnRj X2ggPSBzLT5jcnRjX2g7Cj4gKwlzdGF0ZS0+Y3J0Y193ID0gcy0+Y3J0Y193Owo+ICsJaWYgKChz dGF0ZS0+c3JjX3ggfCBzdGF0ZS0+c3JjX3kgfCBzdGF0ZS0+c3JjX3cgfCBzdGF0ZS0+c3JjX2gp ICYKPiAgCSAgICBTVUJQSVhFTF9NQVNLKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+ICAKPiAtCXJl cS0+c3JjX3ggPj49IDE2Owo+IC0JcmVxLT5zcmNfeSA+Pj0gMTY7Cj4gLQlyZXEtPnNyY193ID4+ PSAxNjsKPiAtCXJlcS0+c3JjX2ggPj49IDE2Owo+ICsJc3RhdGUtPnNyY194ID4+PSAxNjsKPiAr CXN0YXRlLT5zcmNfeSA+Pj0gMTY7Cj4gKwlzdGF0ZS0+c3JjX3cgPj49IDE2Owo+ICsJc3RhdGUt PnNyY19oID4+PSAxNjsKPiAgCj4gLQlyZXEtPm5wbGFuZXMgPSBkcm1fZm9ybWF0X251bV9wbGFu ZXMocmVxLT5mYi0+cGl4ZWxfZm9ybWF0KTsKPiAtCWlmIChyZXEtPm5wbGFuZXMgPiBBVE1FTF9I TENEQ19NQVhfUExBTkVTKQo+ICsJc3RhdGUtPm5wbGFuZXMgPSBkcm1fZm9ybWF0X251bV9wbGFu ZXMoZmItPnBpeGVsX2Zvcm1hdCk7Cj4gKwlpZiAoc3RhdGUtPm5wbGFuZXMgPiBBVE1FTF9ITENE Q19NQVhfUExBTkVTKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+ICAKPiAgCS8qCj4gIAkgKiBTd2Fw IHdpZHRoIGFuZCBzaXplIGluIGNhc2Ugb2YgOTAgb3IgMjcwIGRlZ3JlZXMgcm90YXRpb24KPiAg CSAqLwo+IC0JaWYgKHBsYW5lLT5yb3RhdGlvbiAmIChCSVQoRFJNX1JPVEFURV85MCkgfCBCSVQo RFJNX1JPVEFURV8yNzApKSkgewo+IC0JCXRtcCA9IHJlcS0+Y3J0Y193Owo+IC0JCXJlcS0+Y3J0 Y193ID0gcmVxLT5jcnRjX2g7Cj4gLQkJcmVxLT5jcnRjX2ggPSB0bXA7Cj4gLQkJdG1wID0gcmVx LT5zcmNfdzsKPiAtCQlyZXEtPnNyY193ID0gcmVxLT5zcmNfaDsKPiAtCQlyZXEtPnNyY19oID0g dG1wOwo+ICsJaWYgKHN0YXRlLT5iYXNlLnJvdGF0aW9uICYgKEJJVChEUk1fUk9UQVRFXzkwKSB8 IEJJVChEUk1fUk9UQVRFXzI3MCkpKSB7Cj4gKwkJdG1wID0gc3RhdGUtPmNydGNfdzsKPiArCQlz dGF0ZS0+Y3J0Y193ID0gc3RhdGUtPmNydGNfaDsKPiArCQlzdGF0ZS0+Y3J0Y19oID0gdG1wOwo+ ICsJCXRtcCA9IHN0YXRlLT5zcmNfdzsKPiArCQlzdGF0ZS0+c3JjX3cgPSBzdGF0ZS0+c3JjX2g7 Cj4gKwkJc3RhdGUtPnNyY19oID0gdG1wOwo+ICAJfQo+ICAKPiAtCWlmIChyZXEtPmNydGNfeCAr IHJlcS0+Y3J0Y193ID4gbW9kZS0+aGRpc3BsYXkpCj4gLQkJcGF0Y2hlZF9jcnRjX3cgPSBtb2Rl LT5oZGlzcGxheSAtIHJlcS0+Y3J0Y194Owo+ICsJaWYgKHN0YXRlLT5jcnRjX3ggKyBzdGF0ZS0+ Y3J0Y193ID4gbW9kZS0+aGRpc3BsYXkpCj4gKwkJcGF0Y2hlZF9jcnRjX3cgPSBtb2RlLT5oZGlz cGxheSAtIHN0YXRlLT5jcnRjX3g7Cj4gIAllbHNlCj4gLQkJcGF0Y2hlZF9jcnRjX3cgPSByZXEt PmNydGNfdzsKPiArCQlwYXRjaGVkX2NydGNfdyA9IHN0YXRlLT5jcnRjX3c7Cj4gIAo+IC0JaWYg KHJlcS0+Y3J0Y194IDwgMCkgewo+IC0JCXBhdGNoZWRfY3J0Y193ICs9IHJlcS0+Y3J0Y194Owo+ IC0JCXhfb2Zmc2V0ID0gLXJlcS0+Y3J0Y194Owo+IC0JCXJlcS0+Y3J0Y194ID0gMDsKPiArCWlm IChzdGF0ZS0+Y3J0Y194IDwgMCkgewo+ICsJCXBhdGNoZWRfY3J0Y193ICs9IHN0YXRlLT5jcnRj X3g7Cj4gKwkJeF9vZmZzZXQgPSAtc3RhdGUtPmNydGNfeDsKPiArCQlzdGF0ZS0+Y3J0Y194ID0g MDsKPiAgCX0KPiAgCj4gLQlpZiAocmVxLT5jcnRjX3kgKyByZXEtPmNydGNfaCA+IG1vZGUtPnZk aXNwbGF5KQo+IC0JCXBhdGNoZWRfY3J0Y19oID0gbW9kZS0+dmRpc3BsYXkgLSByZXEtPmNydGNf eTsKPiArCWlmIChzdGF0ZS0+Y3J0Y195ICsgc3RhdGUtPmNydGNfaCA+IG1vZGUtPnZkaXNwbGF5 KQo+ICsJCXBhdGNoZWRfY3J0Y19oID0gbW9kZS0+dmRpc3BsYXkgLSBzdGF0ZS0+Y3J0Y195Owo+ ICAJZWxzZQo+IC0JCXBhdGNoZWRfY3J0Y19oID0gcmVxLT5jcnRjX2g7Cj4gKwkJcGF0Y2hlZF9j cnRjX2ggPSBzdGF0ZS0+Y3J0Y19oOwo+ICAKPiAtCWlmIChyZXEtPmNydGNfeSA8IDApIHsKPiAt CQlwYXRjaGVkX2NydGNfaCArPSByZXEtPmNydGNfeTsKPiAtCQl5X29mZnNldCA9IC1yZXEtPmNy dGNfeTsKPiAtCQlyZXEtPmNydGNfeSA9IDA7Cj4gKwlpZiAoc3RhdGUtPmNydGNfeSA8IDApIHsK PiArCQlwYXRjaGVkX2NydGNfaCArPSBzdGF0ZS0+Y3J0Y195Owo+ICsJCXlfb2Zmc2V0ID0gLXN0 YXRlLT5jcnRjX3k7Cj4gKwkJc3RhdGUtPmNydGNfeSA9IDA7Cj4gIAl9Cj4gIAo+IC0JcGF0Y2hl ZF9zcmNfdyA9IERJVl9ST1VORF9DTE9TRVNUKHBhdGNoZWRfY3J0Y193ICogcmVxLT5zcmNfdywK PiAtCQkJCQkgIHJlcS0+Y3J0Y193KTsKPiAtCXBhdGNoZWRfc3JjX2ggPSBESVZfUk9VTkRfQ0xP U0VTVChwYXRjaGVkX2NydGNfaCAqIHJlcS0+c3JjX2gsCj4gLQkJCQkJICByZXEtPmNydGNfaCk7 Cj4gKwlwYXRjaGVkX3NyY193ID0gRElWX1JPVU5EX0NMT1NFU1QocGF0Y2hlZF9jcnRjX3cgKiBz dGF0ZS0+c3JjX3csCj4gKwkJCQkJICBzdGF0ZS0+Y3J0Y193KTsKPiArCXBhdGNoZWRfc3JjX2gg PSBESVZfUk9VTkRfQ0xPU0VTVChwYXRjaGVkX2NydGNfaCAqIHN0YXRlLT5zcmNfaCwKPiArCQkJ CQkgIHN0YXRlLT5jcnRjX2gpOwo+ICAKPiAtCWhzdWIgPSBkcm1fZm9ybWF0X2hvcnpfY2hyb21h X3N1YnNhbXBsaW5nKHJlcS0+ZmItPnBpeGVsX2Zvcm1hdCk7Cj4gLQl2c3ViID0gZHJtX2Zvcm1h dF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyhyZXEtPmZiLT5waXhlbF9mb3JtYXQpOwo+ICsJaHN1 YiA9IGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcoZmItPnBpeGVsX2Zvcm1hdCk7 Cj4gKwl2c3ViID0gZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyhmYi0+cGl4ZWxf Zm9ybWF0KTsKPiAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgcmVxLT5ucGxhbmVzOyBpKyspIHsKPiAr CWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnBsYW5lczsgaSsrKSB7Cj4gIAkJdW5zaWduZWQgaW50 IG9mZnNldCA9IDA7Cj4gIAkJaW50IHhkaXYgPSBpID8gaHN1YiA6IDE7Cj4gIAkJaW50IHlkaXYg PSBpID8gdnN1YiA6IDE7Cj4gIAo+IC0JCXJlcS0+YnBwW2ldID0gZHJtX2Zvcm1hdF9wbGFuZV9j cHAocmVxLT5mYi0+cGl4ZWxfZm9ybWF0LCBpKTsKPiAtCQlpZiAoIXJlcS0+YnBwW2ldKQo+ICsJ CXN0YXRlLT5icHBbaV0gPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCBp KTsKPiArCQlpZiAoIXN0YXRlLT5icHBbaV0pCj4gIAkJCXJldHVybiAtRUlOVkFMOwo+ICAKPiAt CQlzd2l0Y2ggKHBsYW5lLT5yb3RhdGlvbiAmIDB4Zikgewo+ICsJCXN3aXRjaCAoc3RhdGUtPmJh c2Uucm90YXRpb24gJiAweGYpIHsKPiAgCQljYXNlIEJJVChEUk1fUk9UQVRFXzkwKToKPiAtCQkJ b2Zmc2V0ID0gKCh5X29mZnNldCArIHJlcS0+c3JjX3kgKyBwYXRjaGVkX3NyY193IC0gMSkgLwo+ IC0JCQkJICB5ZGl2KSAqIHJlcS0+ZmItPnBpdGNoZXNbaV07Cj4gLQkJCW9mZnNldCArPSAoKHhf b2Zmc2V0ICsgcmVxLT5zcmNfeCkgLyB4ZGl2KSAqCj4gLQkJCQkgIHJlcS0+YnBwW2ldOwo+IC0J CQlyZXEtPnhzdHJpZGVbaV0gPSAoKHBhdGNoZWRfc3JjX3cgLSAxKSAvIHlkaXYpICoKPiAtCQkJ CQkgIHJlcS0+ZmItPnBpdGNoZXNbaV07Cj4gLQkJCXJlcS0+cHN0cmlkZVtpXSA9IC1yZXEtPmZi LT5waXRjaGVzW2ldIC0gcmVxLT5icHBbaV07Cj4gKwkJCW9mZnNldCA9ICgoeV9vZmZzZXQgKyBz dGF0ZS0+c3JjX3kgKyBwYXRjaGVkX3NyY193IC0gMSkgLwo+ICsJCQkJICB5ZGl2KSAqIGZiLT5w aXRjaGVzW2ldOwo+ICsJCQlvZmZzZXQgKz0gKCh4X29mZnNldCArIHN0YXRlLT5zcmNfeCkgLyB4 ZGl2KSAqCj4gKwkJCQkgIHN0YXRlLT5icHBbaV07Cj4gKwkJCXN0YXRlLT54c3RyaWRlW2ldID0g KChwYXRjaGVkX3NyY193IC0gMSkgLyB5ZGl2KSAqCj4gKwkJCQkJICBmYi0+cGl0Y2hlc1tpXTsK PiArCQkJc3RhdGUtPnBzdHJpZGVbaV0gPSAtZmItPnBpdGNoZXNbaV0gLSBzdGF0ZS0+YnBwW2ld Owo+ICAJCQlicmVhazsKPiAgCQljYXNlIEJJVChEUk1fUk9UQVRFXzE4MCk6Cj4gLQkJCW9mZnNl dCA9ICgoeV9vZmZzZXQgKyByZXEtPnNyY195ICsgcGF0Y2hlZF9zcmNfaCAtIDEpIC8KPiAtCQkJ CSAgeWRpdikgKiByZXEtPmZiLT5waXRjaGVzW2ldOwo+IC0JCQlvZmZzZXQgKz0gKCh4X29mZnNl dCArIHJlcS0+c3JjX3ggKyBwYXRjaGVkX3NyY193IC0gMSkgLwo+IC0JCQkJICAgeGRpdikgKiBy ZXEtPmJwcFtpXTsKPiAtCQkJcmVxLT54c3RyaWRlW2ldID0gKCgoKHBhdGNoZWRfc3JjX3cgLSAx KSAvIHhkaXYpIC0gMSkgKgo+IC0JCQkJCSAgIHJlcS0+YnBwW2ldKSAtIHJlcS0+ZmItPnBpdGNo ZXNbaV07Cj4gLQkJCXJlcS0+cHN0cmlkZVtpXSA9IC0yICogcmVxLT5icHBbaV07Cj4gKwkJCW9m ZnNldCA9ICgoeV9vZmZzZXQgKyBzdGF0ZS0+c3JjX3kgKyBwYXRjaGVkX3NyY19oIC0gMSkgLwo+ ICsJCQkJICB5ZGl2KSAqIGZiLT5waXRjaGVzW2ldOwo+ICsJCQlvZmZzZXQgKz0gKCh4X29mZnNl dCArIHN0YXRlLT5zcmNfeCArIHBhdGNoZWRfc3JjX3cgLSAxKSAvCj4gKwkJCQkgICB4ZGl2KSAq IHN0YXRlLT5icHBbaV07Cj4gKwkJCXN0YXRlLT54c3RyaWRlW2ldID0gKCgoKHBhdGNoZWRfc3Jj X3cgLSAxKSAvIHhkaXYpIC0gMSkgKgo+ICsJCQkJCSAgIHN0YXRlLT5icHBbaV0pIC0gZmItPnBp dGNoZXNbaV07Cj4gKwkJCXN0YXRlLT5wc3RyaWRlW2ldID0gLTIgKiBzdGF0ZS0+YnBwW2ldOwo+ ICAJCQlicmVhazsKPiAgCQljYXNlIEJJVChEUk1fUk9UQVRFXzI3MCk6Cj4gLQkJCW9mZnNldCA9 ICgoeV9vZmZzZXQgKyByZXEtPnNyY195KSAvIHlkaXYpICoKPiAtCQkJCSByZXEtPmZiLT5waXRj aGVzW2ldOwo+IC0JCQlvZmZzZXQgKz0gKCh4X29mZnNldCArIHJlcS0+c3JjX3ggKyBwYXRjaGVk X3NyY19oIC0gMSkgLwo+IC0JCQkJICAgeGRpdikgKiByZXEtPmJwcFtpXTsKPiAtCQkJcmVxLT54 c3RyaWRlW2ldID0gLSgoKHBhdGNoZWRfc3JjX3cgLSAxKSAvIHlkaXYpICoKPiAtCQkJCQkgICAg cmVxLT5mYi0+cGl0Y2hlc1tpXSkgLQo+IC0JCQkJCSAgKDIgKiByZXEtPmJwcFtpXSk7Cj4gLQkJ CXJlcS0+cHN0cmlkZVtpXSA9IHJlcS0+ZmItPnBpdGNoZXNbaV0gLSByZXEtPmJwcFtpXTsKPiAr CQkJb2Zmc2V0ID0gKCh5X29mZnNldCArIHN0YXRlLT5zcmNfeSkgLyB5ZGl2KSAqCj4gKwkJCQkg ZmItPnBpdGNoZXNbaV07Cj4gKwkJCW9mZnNldCArPSAoKHhfb2Zmc2V0ICsgc3RhdGUtPnNyY194 ICsgcGF0Y2hlZF9zcmNfaCAtIDEpIC8KPiArCQkJCSAgIHhkaXYpICogc3RhdGUtPmJwcFtpXTsK PiArCQkJc3RhdGUtPnhzdHJpZGVbaV0gPSAtKCgocGF0Y2hlZF9zcmNfdyAtIDEpIC8geWRpdikg Kgo+ICsJCQkJCSAgICBmYi0+cGl0Y2hlc1tpXSkgLQo+ICsJCQkJCSAgKDIgKiBzdGF0ZS0+YnBw W2ldKTsKPiArCQkJc3RhdGUtPnBzdHJpZGVbaV0gPSBmYi0+cGl0Y2hlc1tpXSAtIHN0YXRlLT5i cHBbaV07Cj4gIAkJCWJyZWFrOwo+ICAJCWNhc2UgQklUKERSTV9ST1RBVEVfMCk6Cj4gIAkJZGVm YXVsdDoKPiAtCQkJb2Zmc2V0ID0gKCh5X29mZnNldCArIHJlcS0+c3JjX3kpIC8geWRpdikgKgo+ IC0JCQkJIHJlcS0+ZmItPnBpdGNoZXNbaV07Cj4gLQkJCW9mZnNldCArPSAoKHhfb2Zmc2V0ICsg cmVxLT5zcmNfeCkgLyB4ZGl2KSAqCj4gLQkJCQkgIHJlcS0+YnBwW2ldOwo+IC0JCQlyZXEtPnhz dHJpZGVbaV0gPSByZXEtPmZiLT5waXRjaGVzW2ldIC0KPiArCQkJb2Zmc2V0ID0gKCh5X29mZnNl dCArIHN0YXRlLT5zcmNfeSkgLyB5ZGl2KSAqCj4gKwkJCQkgZmItPnBpdGNoZXNbaV07Cj4gKwkJ CW9mZnNldCArPSAoKHhfb2Zmc2V0ICsgc3RhdGUtPnNyY194KSAvIHhkaXYpICoKPiArCQkJCSAg c3RhdGUtPmJwcFtpXTsKPiArCQkJc3RhdGUtPnhzdHJpZGVbaV0gPSBmYi0+cGl0Y2hlc1tpXSAt Cj4gIAkJCQkJICAoKHBhdGNoZWRfc3JjX3cgLyB4ZGl2KSAqCj4gLQkJCQkJICAgcmVxLT5icHBb aV0pOwo+IC0JCQlyZXEtPnBzdHJpZGVbaV0gPSAwOwo+ICsJCQkJCSAgIHN0YXRlLT5icHBbaV0p Owo+ICsJCQlzdGF0ZS0+cHN0cmlkZVtpXSA9IDA7Cj4gIAkJCWJyZWFrOwo+ICAJCX0KPiAgCj4g LQkJcmVxLT5vZmZzZXRzW2ldID0gb2Zmc2V0ICsgcmVxLT5mYi0+b2Zmc2V0c1tpXTsKPiArCQlz dGF0ZS0+b2Zmc2V0c1tpXSA9IG9mZnNldCArIGZiLT5vZmZzZXRzW2ldOwo+ICAJfQo+ICAKPiAt CXJlcS0+c3JjX3cgPSBwYXRjaGVkX3NyY193Owo+IC0JcmVxLT5zcmNfaCA9IHBhdGNoZWRfc3Jj X2g7Cj4gLQlyZXEtPmNydGNfdyA9IHBhdGNoZWRfY3J0Y193Owo+IC0JcmVxLT5jcnRjX2ggPSBw YXRjaGVkX2NydGNfaDsKPiArCXN0YXRlLT5zcmNfdyA9IHBhdGNoZWRfc3JjX3c7Cj4gKwlzdGF0 ZS0+c3JjX2ggPSBwYXRjaGVkX3NyY19oOwo+ICsJc3RhdGUtPmNydGNfdyA9IHBhdGNoZWRfY3J0 Y193Owo+ICsJc3RhdGUtPmNydGNfaCA9IHBhdGNoZWRfY3J0Y19oOwo+ICAKPiAtCXJldHVybiBh dG1lbF9obGNkY19wbGFuZV9jaGVja191cGRhdGVfcmVxKHAsIHJlcSwgbW9kZSk7Cj4gLX0KPiAr CWlmICghbGF5b3V0LT5zaXplICYmCj4gKwkgICAgKG1vZGUtPmhkaXNwbGF5ICE9IHN0YXRlLT5j cnRjX3cgfHwKPiArCSAgICAgbW9kZS0+dmRpc3BsYXkgIT0gc3RhdGUtPmNydGNfaCkpCj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4gIAo+IC1pbnQgYXRtZWxfaGxjZGNfcGxhbmVfYXBwbHlfdXBkYXRl X3JlcShzdHJ1Y3QgZHJtX3BsYW5lICpwLAo+IC0JCQkJc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5l X3VwZGF0ZV9yZXEgKnJlcSkKPiAtewo+IC0Jc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5lICpwbGFu ZSA9IGRybV9wbGFuZV90b19hdG1lbF9obGNkY19wbGFuZShwKTsKPiAtCWludCByZXQ7Cj4gKwlp ZiAocGxhbmUtPmxheWVyLmRlc2MtPm1heF9oZWlnaHQgJiYKPiArCSAgICBzdGF0ZS0+Y3J0Y19o ID4gcGxhbmUtPmxheWVyLmRlc2MtPm1heF9oZWlnaHQpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g IAo+IC0JcmV0ID0gYXRtZWxfaGxjZGNfbGF5ZXJfdXBkYXRlX3N0YXJ0KCZwbGFuZS0+bGF5ZXIp Owo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJaWYgKHBsYW5lLT5sYXllci5kZXNj LT5tYXhfd2lkdGggJiYKPiArCSAgICBzdGF0ZS0+Y3J0Y193ID4gcGxhbmUtPmxheWVyLmRlc2Mt Pm1heF93aWR0aCkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4gLQlhdG1lbF9obGNkY19wbGFu ZV91cGRhdGVfcG9zX2FuZF9zaXplKHBsYW5lLCByZXEpOwo+IC0JYXRtZWxfaGxjZGNfcGxhbmVf dXBkYXRlX2dlbmVyYWxfc2V0dGluZ3MocGxhbmUsIHJlcSk7Cj4gLQlhdG1lbF9obGNkY19wbGFu ZV91cGRhdGVfZm9ybWF0KHBsYW5lLCByZXEpOwo+IC0JYXRtZWxfaGxjZGNfcGxhbmVfdXBkYXRl X2J1ZmZlcnMocGxhbmUsIHJlcSk7Cj4gKwlpZiAoKHN0YXRlLT5jcnRjX2ggIT0gc3RhdGUtPnNy Y19oIHx8IHN0YXRlLT5jcnRjX3cgIT0gc3RhdGUtPnNyY193KSAmJgo+ICsJICAgICghbGF5b3V0 LT5tZW1zaXplIHx8Cj4gKwkgICAgIGF0bWVsX2hsY2RjX2Zvcm1hdF9lbWJlZHNfYWxwaGEoc3Rh dGUtPmJhc2UuZmItPnBpeGVsX2Zvcm1hdCkpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICAKPiAt CWF0bWVsX2hsY2RjX2xheWVyX3VwZGF0ZV9jb21taXQoJnBsYW5lLT5sYXllcik7Cj4gKwlpZiAo c3RhdGUtPmNydGNfeCA8IDAgfHwgc3RhdGUtPmNydGNfeSA8IDApCj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwo+ICsJaWYgKHN0YXRlLT5jcnRjX3cgKyBzdGF0ZS0+Y3J0Y194ID4gbW9kZS0+aGRp c3BsYXkgfHwKPiArCSAgICBzdGF0ZS0+Y3J0Y19oICsgc3RhdGUtPmNydGNfeSA+IG1vZGUtPnZk aXNwbGF5KQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ IC1pbnQgYXRtZWxfaGxjZGNfcGxhbmVfdXBkYXRlX3dpdGhfbW9kZShzdHJ1Y3QgZHJtX3BsYW5l ICpwLAo+IC0JCQkJICAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAtCQkJCSAgICAgICBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiAtCQkJCSAgICAgICBpbnQgY3J0Y194LCBpbnQg Y3J0Y195LAo+IC0JCQkJICAgICAgIHVuc2lnbmVkIGludCBjcnRjX3csCj4gLQkJCQkgICAgICAg dW5zaWduZWQgaW50IGNydGNfaCwKPiAtCQkJCSAgICAgICB1aW50MzJfdCBzcmNfeCwgdWludDMy X3Qgc3JjX3ksCj4gLQkJCQkgICAgICAgdWludDMyX3Qgc3JjX3csIHVpbnQzMl90IHNyY19oLAo+ IC0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ICtzdGF0 aWMgaW50IGF0bWVsX2hsY2RjX3BsYW5lX3ByZXBhcmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcCwK PiArCQkJCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPiAgewo+ICAJc3RydWN0IGF0bWVs X2hsY2RjX3BsYW5lICpwbGFuZSA9IGRybV9wbGFuZV90b19hdG1lbF9obGNkY19wbGFuZShwKTsK PiAtCXN0cnVjdCBhdG1lbF9obGNkY19wbGFuZV91cGRhdGVfcmVxIHJlcTsKPiAtCWludCByZXQg PSAwOwo+IC0KPiAtCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7Cj4gLQlyZXEuY3J0Y194 ID0gY3J0Y194Owo+IC0JcmVxLmNydGNfeSA9IGNydGNfeTsKPiAtCXJlcS5jcnRjX3cgPSBjcnRj X3c7Cj4gLQlyZXEuY3J0Y19oID0gY3J0Y19oOwo+IC0JcmVxLnNyY194ID0gc3JjX3g7Cj4gLQly ZXEuc3JjX3kgPSBzcmNfeTsKPiAtCXJlcS5zcmNfdyA9IHNyY193Owo+IC0JcmVxLnNyY19oID0g c3JjX2g7Cj4gLQlyZXEuZmIgPSBmYjsKPiAtCj4gLQlyZXQgPSBhdG1lbF9obGNkY19wbGFuZV9w cmVwYXJlX3VwZGF0ZV9yZXEoJnBsYW5lLT5iYXNlLCAmcmVxLCBtb2RlKTsKPiAtCWlmIChyZXQp Cj4gLQkJcmV0dXJuIHJldDsKPiAgCj4gLQlpZiAoIXJlcS5jcnRjX2ggfHwgIXJlcS5jcnRjX3cp Cj4gLQkJcmV0dXJuIGF0bWVsX2hsY2RjX2xheWVyX2Rpc2FibGUoJnBsYW5lLT5sYXllcik7Cj4g KwlyZXR1cm4gYXRtZWxfaGxjZGNfbGF5ZXJfdXBkYXRlX3N0YXJ0KCZwbGFuZS0+bGF5ZXIpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhdG1lbF9obGNkY19wbGFuZV9jbGVhbnVwX2ZiKHN0cnVj dCBkcm1fcGxhbmUgKnAsCj4gKwkJCQkJIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+ICt7 Cj4gKwlzdHJ1Y3QgYXRtZWxfaGxjZGNfcGxhbmUgKnBsYW5lID0gZHJtX3BsYW5lX3RvX2F0bWVs X2hsY2RjX3BsYW5lKHApOwo+ICAKPiAtCXJldHVybiBhdG1lbF9obGNkY19wbGFuZV9hcHBseV91 cGRhdGVfcmVxKCZwbGFuZS0+YmFzZSwgJnJlcSk7Cj4gKwlhdG1lbF9obGNkY19sYXllcl91cGRh dGVfcm9sbGJhY2soJnBsYW5lLT5sYXllcik7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgYXRtZWxf aGxjZGNfcGxhbmVfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnAsCj4gLQkJCQkgICAgc3RydWN0 IGRybV9jcnRjICpjcnRjLAo+IC0JCQkJICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ IC0JCQkJICAgIGludCBjcnRjX3gsIGludCBjcnRjX3ksCj4gLQkJCQkgICAgdW5zaWduZWQgaW50 IGNydGNfdywgdW5zaWduZWQgaW50IGNydGNfaCwKPiAtCQkJCSAgICB1aW50MzJfdCBzcmNfeCwg dWludDMyX3Qgc3JjX3ksCj4gLQkJCQkgICAgdWludDMyX3Qgc3JjX3csIHVpbnQzMl90IHNyY19o KQo+ICtzdGF0aWMgdm9pZCBhdG1lbF9obGNkY19wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBk cm1fcGxhbmUgKnAsCj4gKwkJCQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zKQo+ ICB7Cj4gLQlyZXR1cm4gYXRtZWxfaGxjZGNfcGxhbmVfdXBkYXRlX3dpdGhfbW9kZShwLCBjcnRj LCBmYiwgY3J0Y194LCBjcnRjX3ksCj4gLQkJCQkJCSAgY3J0Y193LCBjcnRjX2gsIHNyY194LCBz cmNfeSwKPiAtCQkJCQkJICBzcmNfdywgc3JjX2gsICZjcnRjLT5od21vZGUpOwo+ICsJc3RydWN0 IGF0bWVsX2hsY2RjX3BsYW5lICpwbGFuZSA9IGRybV9wbGFuZV90b19hdG1lbF9obGNkY19wbGFu ZShwKTsKPiArCXN0cnVjdCBhdG1lbF9obGNkY19wbGFuZV9zdGF0ZSAqc3RhdGUgPQo+ICsJCQlk cm1fcGxhbmVfc3RhdGVfdG9fYXRtZWxfaGxjZGNfcGxhbmVfc3RhdGUocC0+c3RhdGUpOwo+ICsK PiArCWlmICghcC0+c3RhdGUtPmNydGMgfHwgIXAtPnN0YXRlLT5mYikKPiArCQlyZXR1cm47Cj4g Kwo+ICsJYXRtZWxfaGxjZGNfcGxhbmVfdXBkYXRlX3Bvc19hbmRfc2l6ZShwbGFuZSwgc3RhdGUp Owo+ICsJYXRtZWxfaGxjZGNfcGxhbmVfdXBkYXRlX2dlbmVyYWxfc2V0dGluZ3MocGxhbmUsIHN0 YXRlKTsKPiArCWF0bWVsX2hsY2RjX3BsYW5lX3VwZGF0ZV9mb3JtYXQocGxhbmUsIHN0YXRlKTsK PiArCWF0bWVsX2hsY2RjX3BsYW5lX3VwZGF0ZV9idWZmZXJzKHBsYW5lLCBzdGF0ZSk7Cj4gKwo+ ICsJYXRtZWxfaGxjZGNfbGF5ZXJfdXBkYXRlX2NvbW1pdCgmcGxhbmUtPmxheWVyKTsKPiAgfQo+ ICAKPiAtc3RhdGljIGludCBhdG1lbF9obGNkY19wbGFuZV9kaXNhYmxlKHN0cnVjdCBkcm1fcGxh bmUgKnApCj4gK3N0YXRpYyB2b2lkIGF0bWVsX2hsY2RjX3BsYW5lX2F0b21pY19kaXNhYmxlKHN0 cnVjdCBkcm1fcGxhbmUgKnAsCj4gKwkJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpv bGRfc3RhdGUpCj4gIHsKPiAgCXN0cnVjdCBhdG1lbF9obGNkY19wbGFuZSAqcGxhbmUgPSBkcm1f cGxhbmVfdG9fYXRtZWxfaGxjZGNfcGxhbmUocCk7Cj4gIAo+IC0JcmV0dXJuIGF0bWVsX2hsY2Rj X2xheWVyX2Rpc2FibGUoJnBsYW5lLT5sYXllcik7Cj4gKwlhdG1lbF9obGNkY19sYXllcl9kaXNh YmxlKCZwbGFuZS0+bGF5ZXIpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBhdG1lbF9obGNkY19w bGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnApCj4gQEAgLTYzNSwzOCArNjYxLDM2IEBA IHN0YXRpYyB2b2lkIGF0bWVsX2hsY2RjX3BsYW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAq cCkKPiAgCWRldm1fa2ZyZWUocC0+ZGV2LT5kZXYsIHBsYW5lKTsKPiAgfQo+ICAKPiAtc3RhdGlj IGludCBhdG1lbF9obGNkY19wbGFuZV9zZXRfYWxwaGEoc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5l ICpwbGFuZSwKPiAtCQkJCSAgICAgICB1OCBhbHBoYSkKPiArc3RhdGljIGludCBhdG1lbF9obGNk Y19wbGFuZV9hdG9taWNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fcGxhbmUgKnAsCj4gKwkJCQkJ CSBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzLAo+ICsJCQkJCQkgc3RydWN0IGRybV9wcm9wZXJ0 eSAqcHJvcGVydHksCj4gKwkJCQkJCSB1aW50NjRfdCB2YWwpCj4gIHsKPiAtCWF0bWVsX2hsY2Rj X2xheWVyX3VwZGF0ZV9zdGFydCgmcGxhbmUtPmxheWVyKTsKPiAtCWF0bWVsX2hsY2RjX2xheWVy X3VwZGF0ZV9jZmcoJnBsYW5lLT5sYXllciwKPiAtCQkJCSAgICAgcGxhbmUtPmxheWVyLmRlc2Mt PmxheW91dC5nZW5lcmFsX2NvbmZpZywKPiAtCQkJCSAgICAgQVRNRUxfSExDRENfTEFZRVJfR0Ff TUFTSywKPiAtCQkJCSAgICAgYWxwaGEgPDwgQVRNRUxfSExDRENfTEFZRVJfR0FfU0hJRlQpOwo+ IC0JYXRtZWxfaGxjZGNfbGF5ZXJfdXBkYXRlX2NvbW1pdCgmcGxhbmUtPmxheWVyKTsKPiAtCj4g LQlyZXR1cm4gMDsKPiAtfQo+ICsJc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5lICpwbGFuZSA9IGRy bV9wbGFuZV90b19hdG1lbF9obGNkY19wbGFuZShwKTsKPiArCXN0cnVjdCBhdG1lbF9obGNkY19w bGFuZV9wcm9wZXJ0aWVzICpwcm9wcyA9IHBsYW5lLT5wcm9wZXJ0aWVzOwo+ICsJc3RydWN0IGF0 bWVsX2hsY2RjX3BsYW5lX3N0YXRlICpzdGF0ZSA9Cj4gKwkJCWRybV9wbGFuZV9zdGF0ZV90b19h dG1lbF9obGNkY19wbGFuZV9zdGF0ZShzKTsKPiAgCj4gLXN0YXRpYyBpbnQgYXRtZWxfaGxjZGNf cGxhbmVfc2V0X3JvdGF0aW9uKHN0cnVjdCBhdG1lbF9obGNkY19wbGFuZSAqcGxhbmUsCj4gLQkJ CQkJICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCj4gLXsKPiAtCXBsYW5lLT5yb3RhdGlvbiA9IHJv dGF0aW9uOwo+ICsJaWYgKHByb3BlcnR5ID09IHByb3BzLT5hbHBoYSkKPiArCQlzdGF0ZS0+YWxw aGEgPSB2YWw7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gIAo+ICAJcmV0dXJuIDA7 Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgYXRtZWxfaGxjZGNfcGxhbmVfc2V0X3Byb3BlcnR5KHN0 cnVjdCBkcm1fcGxhbmUgKnAsCj4gLQkJCQkJICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0 eSwKPiAtCQkJCQkgIHVpbnQ2NF90IHZhbHVlKQo+ICtzdGF0aWMgaW50IGF0bWVsX2hsY2RjX3Bs YW5lX2F0b21pY19nZXRfcHJvcGVydHkoc3RydWN0IGRybV9wbGFuZSAqcCwKPiArCQkJCQljb25z dCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzLAo+ICsJCQkJCXN0cnVjdCBkcm1fcHJvcGVydHkg KnByb3BlcnR5LAo+ICsJCQkJCXVpbnQ2NF90ICp2YWwpCj4gIHsKPiAgCXN0cnVjdCBhdG1lbF9o bGNkY19wbGFuZSAqcGxhbmUgPSBkcm1fcGxhbmVfdG9fYXRtZWxfaGxjZGNfcGxhbmUocCk7Cj4g IAlzdHJ1Y3QgYXRtZWxfaGxjZGNfcGxhbmVfcHJvcGVydGllcyAqcHJvcHMgPSBwbGFuZS0+cHJv cGVydGllczsKPiArCWNvbnN0IHN0cnVjdCBhdG1lbF9obGNkY19wbGFuZV9zdGF0ZSAqc3RhdGUg PQo+ICsJCWNvbnRhaW5lcl9vZihzLCBjb25zdCBzdHJ1Y3QgYXRtZWxfaGxjZGNfcGxhbmVfc3Rh dGUsIGJhc2UpOwo+ICAKPiAgCWlmIChwcm9wZXJ0eSA9PSBwcm9wcy0+YWxwaGEpCj4gLQkJYXRt ZWxfaGxjZGNfcGxhbmVfc2V0X2FscGhhKHBsYW5lLCB2YWx1ZSk7Cj4gLQllbHNlIGlmIChwcm9w ZXJ0eSA9PSBwcm9wcy0+cm90YXRpb24pCj4gLQkJYXRtZWxfaGxjZGNfcGxhbmVfc2V0X3JvdGF0 aW9uKHBsYW5lLCB2YWx1ZSk7Cj4gKwkJKnZhbCA9IHN0YXRlLT5hbHBoYTsKPiAgCWVsc2UKPiAg CQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4gQEAgLTY5NCw4ICs3MTgsOCBAQCBzdGF0aWMgdm9pZCBh dG1lbF9obGNkY19wbGFuZV9pbml0X3Byb3BlcnRpZXMoc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5l ICpwbGFuZSwKPiAgCj4gIAlpZiAoZGVzYy0+bGF5b3V0LnhzdHJpZGUgJiYgZGVzYy0+bGF5b3V0 LnBzdHJpZGUpCj4gIAkJZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkoJnBsYW5lLT5iYXNlLmJh c2UsCj4gLQkJCQkJICAgcHJvcHMtPnJvdGF0aW9uLAo+IC0JCQkJCSAgIEJJVChEUk1fUk9UQVRF XzApKTsKPiArCQkJCXBsYW5lLT5iYXNlLmRldi0+bW9kZV9jb25maWcucm90YXRpb25fcHJvcGVy dHksCj4gKwkJCQlCSVQoRFJNX1JPVEFURV8wKSk7Cj4gIAo+ICAJaWYgKGRlc2MtPmxheW91dC5j c2MpIHsKPiAgCQkvKgo+IEBAIC03MTcsMTEgKzc0MSw3NSBAQCBzdGF0aWMgdm9pZCBhdG1lbF9o bGNkY19wbGFuZV9pbml0X3Byb3BlcnRpZXMoc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5lICpwbGFu ZSwKPiAgCX0KPiAgfQo+ICAKPiArc3RhdGljIHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNz IGF0bWVsX2hsY2RjX2xheWVyX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5wcmVwYXJlX2Zi ID0gYXRtZWxfaGxjZGNfcGxhbmVfcHJlcGFyZV9mYiwKPiArCS5jbGVhbnVwX2ZiID0gYXRtZWxf aGxjZGNfcGxhbmVfY2xlYW51cF9mYiwKPiArCS5hdG9taWNfY2hlY2sgPSBhdG1lbF9obGNkY19w bGFuZV9hdG9taWNfY2hlY2ssCj4gKwkuYXRvbWljX3VwZGF0ZSA9IGF0bWVsX2hsY2RjX3BsYW5l X2F0b21pY191cGRhdGUsCj4gKwkuYXRvbWljX2Rpc2FibGUgPSBhdG1lbF9obGNkY19wbGFuZV9h dG9taWNfZGlzYWJsZSwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIGF0bWVsX2hsY2RjX3BsYW5l X3Jlc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnApCj4gK3sKPiArCXN0cnVjdCBhdG1lbF9obGNkY19w bGFuZV9zdGF0ZSAqc3RhdGU7Cj4gKwo+ICsJaWYgKHAtPnN0YXRlKSB7Cj4gKwkJc3RhdGUgPSBk cm1fcGxhbmVfc3RhdGVfdG9fYXRtZWxfaGxjZGNfcGxhbmVfc3RhdGUocC0+c3RhdGUpOwo+ICsK PiArCQlpZiAoc3RhdGUtPmJhc2UuZmIpCj4gKwkJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5j ZShzdGF0ZS0+YmFzZS5mYik7Cj4gKwo+ICsJCWtmcmVlKHN0YXRlKTsKPiArCQlwLT5zdGF0ZSA9 IE5VTEw7Cj4gKwl9Cj4gKwo+ICsJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBf S0VSTkVMKTsKPiArCWlmIChzdGF0ZSkgewo+ICsJCXN0YXRlLT5hbHBoYSA9IDI1NTsKPiArCQlw LT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsKPiArCQlwLT5zdGF0ZS0+cGxhbmUgPSBwOwo+ICsJfQo+ ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqCj4gK2F0bWVsX2hsY2Rj X3BsYW5lX2F0b21pY19kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcCkKPiArewo+ ICsJc3RydWN0IGF0bWVsX2hsY2RjX3BsYW5lX3N0YXRlICpzdGF0ZSA9Cj4gKwkJCWRybV9wbGFu ZV9zdGF0ZV90b19hdG1lbF9obGNkY19wbGFuZV9zdGF0ZShwLT5zdGF0ZSk7Cj4gKwlzdHJ1Y3Qg YXRtZWxfaGxjZGNfcGxhbmVfc3RhdGUgKmNvcHk7Cj4gKwo+ICsJY29weSA9IGttZW1kdXAoc3Rh dGUsIHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghY29weSkKPiArCQlyZXR1 cm4gTlVMTDsKPiArCj4gKwlpZiAoY29weS0+YmFzZS5mYikKPiArCQlkcm1fZnJhbWVidWZmZXJf cmVmZXJlbmNlKGNvcHktPmJhc2UuZmIpOwo+ICsKPiArCXJldHVybiAmY29weS0+YmFzZTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgYXRtZWxfaGxjZGNfcGxhbmVfYXRvbWljX2Rlc3Ryb3lfc3Rh dGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gKwkJCQkJCSAgIHN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKnMpCj4gK3sKPiArCXN0cnVjdCBhdG1lbF9obGNkY19wbGFuZV9zdGF0ZSAqc3RhdGUg PQo+ICsJCQlkcm1fcGxhbmVfc3RhdGVfdG9fYXRtZWxfaGxjZGNfcGxhbmVfc3RhdGUocyk7Cj4g Kwo+ICsJaWYgKHMtPmZiKQo+ICsJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZShzLT5mYik7 Cj4gKwo+ICsJa2ZyZWUoc3RhdGUpOwo+ICt9Cj4gKwo+ICBzdGF0aWMgc3RydWN0IGRybV9wbGFu ZV9mdW5jcyBsYXllcl9wbGFuZV9mdW5jcyA9IHsKPiAtCS51cGRhdGVfcGxhbmUgPSBhdG1lbF9o bGNkY19wbGFuZV91cGRhdGUsCj4gLQkuZGlzYWJsZV9wbGFuZSA9IGF0bWVsX2hsY2RjX3BsYW5l X2Rpc2FibGUsCj4gLQkuc2V0X3Byb3BlcnR5ID0gYXRtZWxfaGxjZGNfcGxhbmVfc2V0X3Byb3Bl cnR5LAo+ICsJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwK PiArCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKPiAr CS5zZXRfcHJvcGVydHkgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9zZXRfcHJvcGVydHksCj4g IAkuZGVzdHJveSA9IGF0bWVsX2hsY2RjX3BsYW5lX2Rlc3Ryb3ksCj4gKwkucmVzZXQgPSBhdG1l bF9obGNkY19wbGFuZV9yZXNldCwKPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gYXRtZWxf aGxjZGNfcGxhbmVfYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVzdHJveV9z dGF0ZSA9IGF0bWVsX2hsY2RjX3BsYW5lX2F0b21pY19kZXN0cm95X3N0YXRlLAo+ICsJLmF0b21p Y19zZXRfcHJvcGVydHkgPSBhdG1lbF9obGNkY19wbGFuZV9hdG9taWNfc2V0X3Byb3BlcnR5LAo+ ICsJLmF0b21pY19nZXRfcHJvcGVydHkgPSBhdG1lbF9obGNkY19wbGFuZV9hdG9taWNfZ2V0X3By b3BlcnR5LAo+ICB9Owo+ICAKPiAgc3RhdGljIHN0cnVjdCBhdG1lbF9obGNkY19wbGFuZSAqCj4g QEAgLTc1NSw2ICs4NDMsOSBAQCBhdG1lbF9obGNkY19wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgCj4g Kwlkcm1fcGxhbmVfaGVscGVyX2FkZCgmcGxhbmUtPmJhc2UsCj4gKwkJCSAgICAgJmF0bWVsX2hs Y2RjX2xheWVyX3BsYW5lX2hlbHBlcl9mdW5jcyk7Cj4gKwo+ICAJLyogU2V0IGRlZmF1bHQgcHJv cGVydHkgdmFsdWVzKi8KPiAgCWF0bWVsX2hsY2RjX3BsYW5lX2luaXRfcHJvcGVydGllcyhwbGFu ZSwgZGVzYywgcHJvcHMpOwo+ICAKPiBAQCAtNzc0LDEyICs4NjUsMTMgQEAgYXRtZWxfaGxjZGNf cGxhbmVfY3JlYXRlX3Byb3BlcnRpZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCWlmICgh cHJvcHMtPmFscGhhKQo+ICAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICAKPiAtCXByb3Bz LT5yb3RhdGlvbiA9IGRybV9tb2RlX2NyZWF0ZV9yb3RhdGlvbl9wcm9wZXJ0eShkZXYsCj4gLQkJ CQkJCUJJVChEUk1fUk9UQVRFXzApIHwKPiAtCQkJCQkJQklUKERSTV9ST1RBVEVfOTApIHwKPiAt CQkJCQkJQklUKERSTV9ST1RBVEVfMTgwKSB8Cj4gLQkJCQkJCUJJVChEUk1fUk9UQVRFXzI3MCkp Owo+IC0JaWYgKCFwcm9wcy0+cm90YXRpb24pCj4gKwlkZXYtPm1vZGVfY29uZmlnLnJvdGF0aW9u X3Byb3BlcnR5ID0KPiArCQkJZHJtX21vZGVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KGRldiwK PiArCQkJCQkJCSAgQklUKERSTV9ST1RBVEVfMCkgfAo+ICsJCQkJCQkJICBCSVQoRFJNX1JPVEFU RV85MCkgfAo+ICsJCQkJCQkJICBCSVQoRFJNX1JPVEFURV8xODApIHwKPiArCQkJCQkJCSAgQklU KERSTV9ST1RBVEVfMjcwKSk7Cj4gKwlpZiAoIWRldi0+bW9kZV9jb25maWcucm90YXRpb25fcHJv cGVydHkpCj4gIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gIAo+ICAJcmV0dXJuIHByb3Bz Owo+IC0tIAo+IDEuOS4xCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRl bCBDb3Jwb3JhdGlvbgorNDEgKDApIDc5IDM2NSA1NyA0OCAtIGh0dHA6Ly9ibG9nLmZmd2xsLmNo Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==