From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH v2] drm/msm: remove hw rotation support Date: Fri, 2 Mar 2018 15:01:26 -0500 Message-ID: <20180302200126.GT223881@art_vandelay> References: <1520016676-8306-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1520016676-8306-1-git-send-email-jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Jeykumar Sankaran Cc: jeykumar-jfJNa2p1gH1BDgjK7y7TUQ@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org T24gRnJpLCBNYXIgMDIsIDIwMTggYXQgMTA6NTE6MTZBTSAtMDgwMCwgSmV5a3VtYXIgU2Fua2Fy YW4gd3JvdGU6Cj4gUmVtb3ZlIEhXIGlubGluZSByb3RhdGlvbiBzdXBwb3J0IGZyb20gRFBVIGRy aXZlci4KPiAKPiBjaGFuZ2VzIHNpbmNlIHYxOgo+ICAgICAtIHJlYmFzZWQgb24gZm9yLW5leHQt c3RhZ2luZwo+IAo+IFNpZ25lZC1vZmYtYnk6IEpleWt1bWFyIFNhbmthcmFuIDxqc2Fua2FAY29k ZWF1cm9yYS5vcmc+CgpQdXNoZWQgdG8gZm9yLW5leHQtc3RhZ2luZywgaXQnbGwgbW92ZSB0byBm b3ItbmV4dCBvbmNlIGV2ZXJ5dGhpbmcgaGFzIHJldmlld3MuCgpTZWFuCgo+IC0tLQo+ICBkcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jICAgICAgICAgICB8ICAxMjYgKy0K PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCAgICAgICAgICAgfCAg IDMzIC0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyAgICAg ICAgfCAgIDE3ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVy LmggICAgICAgIHwgICAxMCAtCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9l bmNvZGVyX3BoeXMuaCAgIHwgICAgNCAtCj4gIC4uLi9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2VuY29kZXJfcGh5c192aWQuYyAgIHwgICA3MiAtCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od19jYXRhbG9nLmMgICAgIHwgIDE4OCAtLS0KPiAgZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaCAgICAgfCAgIDU5IC0KPiAgZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2N0bC5jICAgICAgICAgfCAgIDUxIC0KPiAgZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2N0bC5oICAgICAgICAgfCAgIDM2IC0K PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGYuYyAgICAgICAgfCAg IDIxIC0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGYuaCAgICAg ICAgfCAgICA0IC0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X21kc3Mu aCAgICAgICAgfCAgIDEzIC0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3JvdC5jICAgICAgICAgfCAgOTYxIC0tLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X3JvdC5oICAgICAgICAgfCAgMTkwIC0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5jICAgICAgICB8ICAgNDkgLQo+ICBkcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5oICAgICAgICB8ICAgNjYgLQo+ ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyAgICAgICAgICB8IDE0 MTYgKy0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X3BsYW5lLmggICAgICAgICAgfCAgIDc3ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9ybS5jICAgICAgICAgICAgIHwgICAyMiAtCj4gIGRyaXZlcnMvZ3B1L2RybS9t c20vbXNtX2Rydi5oICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArLQo+ICAyMSBmaWxlcyBj aGFuZ2VkLCAzNyBpbnNlcnRpb25zKCspLCAzMzg5IGRlbGV0aW9ucygtKQo+ICBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3JvdC5jCj4gIGRl bGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcm90 LmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Ny dGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKPiBpbmRleCA4 NTY4YzI5Li5iZjQ2Y2YxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9jcnRjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf Y3J0Yy5jCj4gQEAgLTgxMSwxMiArODExLDExIEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVu ZF9zZXR1cF9taXhlcihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAlzdHJ1Y3QgZHB1X2h3X3N0 YWdlX2NmZyAqc3RhZ2VfY2ZnOwo+ICAJc3RydWN0IGRwdV9yZWN0IHBsYW5lX2NydGNfcm9pOwo+ ICAKPiAtCXUzMiBmbHVzaF9tYXNrLCBmbHVzaF9zYnVmOwo+ICsJdTMyIGZsdXNoX21hc2s7Cj4g IAl1aW50MzJfdCBzdGFnZV9pZHgsIGxtX2lkeDsKPiAgCWludCB6cG9zX2NudFtEUFVfU1RBR0Vf TUFYICsgMV0gPSB7IDAgfTsKPiAgCWludCBpOwo+ICAJYm9vbCBiZ19hbHBoYV9lbmFibGUgPSBm YWxzZTsKPiAtCXUzMiBwcmVmaWxsID0gMDsKPiAgCj4gIAlpZiAoIWRwdV9jcnRjIHx8ICFtaXhl cikgewo+ICAJCURQVV9FUlJPUigiaW52YWxpZCBkcHVfY3J0YyBvciBtaXhlclxuIik7Cj4gQEAg LTgyOCw5ICs4MjcsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0dXBfbWl4ZXIo c3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJc3RhZ2VfY2ZnID0gJmRwdV9jcnRjLT5zdGFnZV9j Zmc7Cj4gIAljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Cj4gIAo+IC0J Y3N0YXRlLT5zYnVmX3ByZWZpbGxfbGluZSA9IDA7Cj4gLQlkcHVfY3J0Yy0+c2J1Zl9mbHVzaF9t YXNrID0gMHgwOwo+IC0KPiAgCWRybV9hdG9taWNfY3J0Y19mb3JfZWFjaF9wbGFuZShwbGFuZSwg Y3J0Yykgewo+ICAJCXN0YXRlID0gcGxhbmUtPnN0YXRlOwo+ICAJCWlmICghc3RhdGUpCj4gQEAg LTg0NCwxNCArODQwLDcgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5kX3NldHVwX21peGVy KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCQlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUo c3RhdGUpOwo+ICAJCWZiID0gc3RhdGUtPmZiOwo+ICAKPiAtCQlwcmVmaWxsID0gZHB1X3BsYW5l X3JvdF9jYWxjX3ByZWZpbGwocGxhbmUpOwo+IC0JCWlmIChwcmVmaWxsID4gY3N0YXRlLT5zYnVm X3ByZWZpbGxfbGluZSkKPiAtCQkJY3N0YXRlLT5zYnVmX3ByZWZpbGxfbGluZSA9IHByZWZpbGw7 Cj4gLQo+IC0JCWRwdV9wbGFuZV9nZXRfY3RsX2ZsdXNoKHBsYW5lLCBjdGwsICZmbHVzaF9tYXNr LCAmZmx1c2hfc2J1Zik7Cj4gLQo+IC0JCS8qIHNhdmUgc2J1ZiBmbHVzaCB2YWx1ZSBmb3IgbGF0 ZXIgKi8KPiAtCQlkcHVfY3J0Yy0+c2J1Zl9mbHVzaF9tYXNrIHw9IGZsdXNoX3NidWY7Cj4gKwkJ ZHB1X3BsYW5lX2dldF9jdGxfZmx1c2gocGxhbmUsIGN0bCwgJmZsdXNoX21hc2spOwo+ICAKPiAg CQlEUFVfREVCVUcoImNydGMgJWQgc3RhZ2U6JWQgLSBwbGFuZSAlZCBzc3BwICVkIGZiICVkXG4i LAo+ICAJCQkJY3J0Yy0+YmFzZS5pZCwKPiBAQCAtODc0LDggKzg2Myw3IEBAIHN0YXRpYyB2b2lk IF9kcHVfY3J0Y19ibGVuZF9zZXR1cF9taXhlcihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAkJ CQlzdGF0ZS0+c3JjX3ggPj4gMTYsIHN0YXRlLT5zcmNfeSA+PiAxNiwKPiAgCQkJCXN0YXRlLT5z cmNfdyA+PiAxNiwgc3RhdGUtPnNyY19oID4+IDE2LAo+ICAJCQkJc3RhdGUtPmNydGNfeCwgc3Rh dGUtPmNydGNfeSwKPiAtCQkJCXN0YXRlLT5jcnRjX3csIHN0YXRlLT5jcnRjX2gsCj4gLQkJCQlm bHVzaF9zYnVmICE9IDApOwo+ICsJCQkJc3RhdGUtPmNydGNfdywgc3RhdGUtPmNydGNfaCk7Cj4g IAo+ICAJCXN0YWdlX2lkeCA9IHpwb3NfY250W3BzdGF0ZS0+c3RhZ2VdKys7Cj4gIAkJc3RhZ2Vf Y2ZnLT5zdGFnZVtwc3RhdGUtPnN0YWdlXVtzdGFnZV9pZHhdID0KPiBAQCAtMjIwOSw2NCArMjE5 Nyw2IEBAIHN0YXRpYyBpbnQgX2RwdV9jcnRjX3dhaXRfZm9yX2ZyYW1lX2RvbmUoc3RydWN0IGRy bV9jcnRjICpjcnRjKQo+ICAJcmV0dXJuIHJjOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBfZHB1 X2NydGNfY29tbWl0X2tpY2tvZmZfcm90KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAtCQlzdHJ1 Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRybV9wbGFuZSAqcGxh bmU7Cj4gLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwo+IC0Jc3RydWN0IGRwdV9od19jdGwg KmN0bCwgKm1hc3Rlcl9jdGw7Cj4gLQl1MzIgZmx1c2hfbWFzazsKPiAtCWludCBpOwo+IC0KPiAt CWlmICghY3J0YyB8fCAhY3N0YXRlKQo+IC0JCXJldHVybjsKPiAtCj4gLQlkcHVfY3J0YyA9IHRv X2RwdV9jcnRjKGNydGMpOwo+IC0KPiAtCS8qCj4gLQkgKiBVcGRhdGUgc2J1ZiBjb25maWd1cmF0 aW9uIGFuZCBmbHVzaCBiaXRzIGlmIGEgZmx1c2gKPiAtCSAqIG1hc2sgaGFzIGJlZW4gZGVmaW5l ZCBmb3IgZWl0aGVyIHRoZSBjdXJyZW50IG9yCj4gLQkgKiBwcmV2aW91cyBjb21taXQuCj4gLQkg Kgo+IC0JICogVXBkYXRlcyBhcmUgYWxzbyByZXF1aXJlZCBmb3IgdGhlIGZpcnN0IGNvbW1pdCBh ZnRlcgo+IC0JICogc2J1Zl9mbHVzaF9tYXNrIGJlY29tZXMgMHgwLCB0byBwcm9wZXJseSB0cmFu c2l0aW9uCj4gLQkgKiB0aGUgaGFyZHdhcmUgb3V0IG9mIHNidWYgbW9kZS4KPiAtCSAqLwo+IC0J aWYgKCFkcHVfY3J0Yy0+c2J1Zl9mbHVzaF9tYXNrX29sZCAmJiAhZHB1X2NydGMtPnNidWZfZmx1 c2hfbWFzaykKPiAtCQlyZXR1cm47Cj4gLQo+IC0JZmx1c2hfbWFzayA9IGRwdV9jcnRjLT5zYnVm X2ZsdXNoX21hc2tfb2xkIHwgZHB1X2NydGMtPnNidWZfZmx1c2hfbWFzazsKPiAtCWRwdV9jcnRj LT5zYnVmX2ZsdXNoX21hc2tfb2xkID0gZHB1X2NydGMtPnNidWZfZmx1c2hfbWFzazsKPiAtCj4g LQlEUFVfQVRSQUNFX0JFR0lOKCJjcnRjX2tpY2tvZmZfcm90Iik7Cj4gLQo+IC0JaWYgKGNzdGF0 ZS0+c2J1Zl9jZmcucm90X29wX21vZGUgIT0gRFBVX0NUTF9ST1RfT1BfTU9ERV9PRkZMSU5FKSB7 Cj4gLQkJZHJtX2F0b21pY19jcnRjX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBjcnRjKSB7Cj4gLQkJ CWRwdV9wbGFuZV9raWNrb2ZmKHBsYW5lKTsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JbWFzdGVyX2N0 bCA9IE5VTEw7Cj4gLQlmb3IgKGkgPSAwOyBpIDwgZHB1X2NydGMtPm51bV9taXhlcnM7IGkrKykg ewo+IC0JCWN0bCA9IGRwdV9jcnRjLT5taXhlcnNbaV0uaHdfY3RsOwo+IC0JCWlmICghY3RsIHx8 ICFjdGwtPm9wcy5zZXR1cF9zYnVmX2NmZyB8fAo+IC0JCQkJIWN0bC0+b3BzLnVwZGF0ZV9wZW5k aW5nX2ZsdXNoKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJaWYgKCFtYXN0ZXJfY3RsIHx8IG1h c3Rlcl9jdGwtPmlkeCA+IGN0bC0+aWR4KQo+IC0JCQltYXN0ZXJfY3RsID0gY3RsOwo+IC0KPiAt CQljdGwtPm9wcy5zZXR1cF9zYnVmX2NmZyhjdGwsICZjc3RhdGUtPnNidWZfY2ZnKTsKPiAtCQlj dGwtPm9wcy51cGRhdGVfcGVuZGluZ19mbHVzaChjdGwsIGZsdXNoX21hc2spOwo+IC0JfQo+IC0K PiAtCWlmIChjc3RhdGUtPnNidWZfY2ZnLnJvdF9vcF9tb2RlID09IERQVV9DVExfUk9UX09QX01P REVfSU5MSU5FX0FTWU5DICYmCj4gLQkJCW1hc3Rlcl9jdGwgJiYgbWFzdGVyX2N0bC0+b3BzLnRy aWdnZXJfcm90X3N0YXJ0KQo+IC0JCW1hc3Rlcl9jdGwtPm9wcy50cmlnZ2VyX3JvdF9zdGFydCht YXN0ZXJfY3RsKTsKPiAtCj4gLQlEUFVfQVRSQUNFX0VORCgiY3J0Y19raWNrb2ZmX3JvdCIpOwo+ IC19Cj4gLQo+ICB2b2lkIGRwdV9jcnRjX2NvbW1pdF9raWNrb2ZmKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKPiAgewo+ICAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwo+IEBAIC0yMzAzLDEw ICsyMjMzLDYgQEAgdm9pZCBkcHVfY3J0Y19jb21taXRfa2lja29mZihzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCj4gIAo+ICAJRFBVX0FUUkFDRV9CRUdJTigiY3J0Y19jb21taXQiKTsKPiAgCj4gLQkv KiBkZWZhdWx0IHRvIEFTWU5DIG1vZGUgZm9yIGlubGluZSByb3RhdGlvbiAqLwo+IC0JY3N0YXRl LT5zYnVmX2NmZy5yb3Rfb3BfbW9kZSA9IGRwdV9jcnRjLT5zYnVmX2ZsdXNoX21hc2sgPwo+IC0J CURQVV9DVExfUk9UX09QX01PREVfSU5MSU5FX0FTWU5DIDogRFBVX0NUTF9ST1RfT1BfTU9ERV9P RkZMSU5FOwo+IC0KPiAgCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9j b25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7Cj4gIAkJc3RydWN0IGRwdV9lbmNvZGVyX2tpY2tv ZmZfcGFyYW1zIHBhcmFtcyA9IHsgMCB9Owo+ICAKPiBAQCAtMjMxNywyOSArMjI0Myw5IEBAIHZv aWQgZHB1X2NydGNfY29tbWl0X2tpY2tvZmYoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAJCSAq IEVuY29kZXIgd2lsbCBmbHVzaC9zdGFydCBub3csIHVubGVzcyBpdCBoYXMgYSB0eCBwZW5kaW5n Lgo+ICAJCSAqIElmIHNvLCBpdCBtYXkgZGVsYXkgYW5kIGZsdXNoIGF0IGFuIGlycSBldmVudCAo ZS5nLiBwcGRvbmUpCj4gIAkJICovCj4gLQkJcGFyYW1zLmlubGluZV9yb3RhdGVfcHJlZmlsbCA9 IGNzdGF0ZS0+c2J1Zl9wcmVmaWxsX2xpbmU7Cj4gIAkJZHB1X2VuY29kZXJfcHJlcGFyZV9mb3Jf a2lja29mZihlbmNvZGVyLCAmcGFyYW1zKTsKPiAtCj4gLQkJLyoKPiAtCQkgKiBGb3IgaW5saW5l IEFTWU5DIG1vZGVzLCB0aGUgZmx1c2ggYml0cyBhcmUgbm90IHdyaXR0ZW4KPiAtCQkgKiB0byBo YXJkd2FyZSBhdG9taWNhbGx5LCBzbyBhdm9pZCB1c2luZyBpdCBpZiBhIHZpZGVvCj4gLQkJICog bW9kZSBlbmNvZGVyIGlzIGFjdGl2ZSBvbiB0aGlzIENSVEMuCj4gLQkJICovCj4gLQkJaWYgKGNz dGF0ZS0+c2J1Zl9jZmcucm90X29wX21vZGUgPT0KPiAtCQkJCURQVV9DVExfUk9UX09QX01PREVf SU5MSU5FX0FTWU5DICYmCj4gLQkJCQlkcHVfZW5jb2Rlcl9nZXRfaW50Zl9tb2RlKGVuY29kZXIp ID09Cj4gLQkJCQlJTlRGX01PREVfVklERU8pCj4gLQkJCWNzdGF0ZS0+c2J1Zl9jZmcucm90X29w X21vZGUgPQo+IC0JCQkJRFBVX0NUTF9ST1RfT1BfTU9ERV9JTkxJTkVfU1lOQzsKPiAgCX0KPiAg Cj4gLQkvKgo+IC0JICogRm9yIEFTWU5DIGlubGluZSBtb2Rlcywga2ljayBvZmYgdGhlIHJvdGF0 b3Igbm93IHNvIHRoYXQgdGhlIEgvVwo+IC0JICogY2FuIHN0YXJ0IGFzIHNvb24gYXMgaXQncyBy ZWFkeS4KPiAtCSAqLwo+IC0JaWYgKGNzdGF0ZS0+c2J1Zl9jZmcucm90X29wX21vZGUgPT0gRFBV X0NUTF9ST1RfT1BfTU9ERV9JTkxJTkVfQVNZTkMpCj4gLQkJX2RwdV9jcnRjX2NvbW1pdF9raWNr b2ZmX3JvdChjcnRjLCBjc3RhdGUpOwo+IC0KPiAgCS8qIHdhaXQgZm9yIGZyYW1lX2V2ZW50X2Rv bmUgY29tcGxldGlvbiAqLwo+ICAJRFBVX0FUUkFDRV9CRUdJTigid2FpdF9mb3JfZnJhbWVfZG9u ZV9ldmVudCIpOwo+ICAJcmV0ID0gX2RwdV9jcnRjX3dhaXRfZm9yX2ZyYW1lX2RvbmUoY3J0Yyk7 Cj4gQEAgLTIzNTQsMjQgKzIyNjAsMTAgQEAgdm9pZCBkcHVfY3J0Y19jb21taXRfa2lja29mZihz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJmRwdV9jcnRj LT5mcmFtZV9wZW5kaW5nKSA9PSAxKSB7Cj4gIAkJLyogYWNxdWlyZSBiYW5kd2lkdGggYW5kIG90 aGVyIHJlc291cmNlcyAqLwo+ICAJCURQVV9ERUJVRygiY3J0YyVkIGZpcnN0IGNvbW1pdFxuIiwg Y3J0Yy0+YmFzZS5pZCk7Cj4gLQkJRFBVX0VWVDMyKERSTUlEKGNydGMpLCBjc3RhdGUtPnNidWZf Y2ZnLnJvdF9vcF9tb2RlLAo+IC0JCQkJRFBVX0VWVExPR19GVU5DX0NBU0UxKTsKPiAtCX0gZWxz ZSB7Cj4gKwl9IGVsc2UKPiAgCQlEUFVfREVCVUcoImNydGMlZCBjb21taXRcbiIsIGNydGMtPmJh c2UuaWQpOwo+IC0JCURQVV9FVlQzMihEUk1JRChjcnRjKSwgY3N0YXRlLT5zYnVmX2NmZy5yb3Rf b3BfbW9kZSwKPiAtCQkJCURQVV9FVlRMT0dfRlVOQ19DQVNFMik7Cj4gLQl9Cj4gLQlkcHVfY3J0 Yy0+cGxheV9jb3VudCsrOwo+ICAKPiAtCS8qCj4gLQkgKiBGb3IgU1lOQyBpbmxpbmUgbW9kZXMs IGRlbGF5IHRoZSBraWNrIG9mZiB1bnRpbCBhZnRlciB0aGUKPiAtCSAqIHdhaXQgZm9yIGZyYW1l IGRvbmUgaW4gY2FzZSB0aGUgd2FpdCB0aW1lcyBvdXQuCj4gLQkgKgo+IC0JICogQWxzbyBwZXJm b3JtIGEgZmluYWwga2lja29mZiB3aGVuIHRyYW5zaXRpb25pbmcgYmFjayB0bwo+IC0JICogb2Zm bGluZSBtb2RlLgo+IC0JICovCj4gLQlpZiAoY3N0YXRlLT5zYnVmX2NmZy5yb3Rfb3BfbW9kZSAh PSBEUFVfQ1RMX1JPVF9PUF9NT0RFX0lOTElORV9BU1lOQykKPiAtCQlfZHB1X2NydGNfY29tbWl0 X2tpY2tvZmZfcm90KGNydGMsIGNzdGF0ZSk7Cj4gKwlkcHVfY3J0Yy0+cGxheV9jb3VudCsrOwo+ ICAKPiAgCWRwdV92YmlmX2NsZWFyX2Vycm9ycyhkcHVfa21zKTsKPiAgCj4gQEAgLTMzNDksMTQg KzMyNDEsNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0 IGRybV9jcnRjICpjcnRjLAo+ICAJCQkiZHJhbV9pYiIsIDB4MCwgMCwgVTY0X01BWCwKPiAgCQkJ Y2F0YWxvZy0+cGVyZi5tYXhfYndfaGlnaCAqIDEwMDBVTEwsCj4gIAkJCUNSVENfUFJPUF9EUkFN X0lCKTsKPiAtCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZkcHVfY3J0Yy0+cHJvcGVydHlf aW5mbywKPiAtCQkJInJvdF9wcmVmaWxsX2J3IiwgMCwgMCwgVTY0X01BWCwKPiAtCQkJY2F0YWxv Zy0+cGVyZi5tYXhfYndfaGlnaCAqIDEwMDBVTEwsCj4gLQkJCUNSVENfUFJPUF9ST1RfUFJFRklM TF9CVyk7Cj4gLQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmZHB1X2NydGMtPnByb3BlcnR5 X2luZm8sCj4gLQkJCSJyb3RfY2xrIiwgMCwgMCwgVTY0X01BWCwKPiAtCQkJZHB1X2ttcy0+cGVy Zi5tYXhfY29yZV9jbGtfcmF0ZSwKPiAtCQkJQ1JUQ19QUk9QX1JPVF9DTEspOwo+ICAKPiAgCW1z bV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKPiAgCQki aWRsZV90aW1lb3V0IiwgSURMRV9USU1FT1VULCAwLCBVNjRfTUFYLCAwLAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaAo+IGluZGV4IDVjNzNlZjAuLmRmMGRjZTMgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaAo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKPiBAQCAtMTg2LDgg KzE4Niw2IEBAIHN0cnVjdCBkcHVfY3J0Y19ldmVudCB7Cj4gICAqIEBtaXNyX2VuYWJsZSAgIDog Ym9vbGVhbiBlbnRyeSBpbmRpY2F0ZXMgbWlzciBlbmFibGUvZGlzYWJsZSBzdGF0dXMuCj4gICAq IEBtaXNyX2ZyYW1lX2NvdW50ICA6IG1pc3IgZnJhbWUgY291bnQgcHJvdmlkZWQgYnkgY2xpZW50 Cj4gICAqIEBtaXNyX2RhdGEgICAgIDogc3RvcmUgbWlzciBkYXRhIGJlZm9yZSB0dXJuaW5nIG9m ZiB0aGUgY2xvY2tzLgo+IC0gKiBAc2J1Zl9mbHVzaF9tYXNrOiBmbHVzaCBtYXNrIGZvciBpbmxp bmUgcm90YXRvcgo+IC0gKiBAc2J1Zl9mbHVzaF9tYXNrX29sZDogaW5saW5lIHJvdGF0b3IgZmx1 c2ggbWFzayBmb3IgcHJldmlvdXMgY29tbWl0Cj4gICAqIEBwb3dlcl9ldmVudCAgIDogcmVnaXN0 ZXJlZCBwb3dlciBldmVudCBoYW5kbGUKPiAgICogQGN1cl9wZXJmICAgICAgOiBjdXJyZW50IHBl cmZvcm1hbmNlIGNvbW1pdHRlZCB0byBjbG9jay9iYW5kd2lkdGggZHJpdmVyCj4gICAqIEBycF9s b2NrICAgICAgIDogc2VyaWFsaXphdGlvbiBsb2NrIGZvciByZXNvdXJjZSBwb29sCj4gQEAgLTI0 NSw5ICsyNDMsNiBAQCBzdHJ1Y3QgZHB1X2NydGMgewo+ICAJdTMyIG1pc3JfZnJhbWVfY291bnQ7 Cj4gIAl1MzIgbWlzcl9kYXRhW0NSVENfRFVBTF9NSVhFUlNdOwo+ICAKPiAtCXUzMiBzYnVmX2Zs dXNoX21hc2s7Cj4gLQl1MzIgc2J1Zl9mbHVzaF9tYXNrX29sZDsKPiAtCj4gIAlzdHJ1Y3QgZHB1 X3Bvd2VyX2V2ZW50ICpwb3dlcl9ldmVudDsKPiAgCj4gIAlzdHJ1Y3QgZHB1X2NvcmVfcGVyZl9w YXJhbXMgY3VyX3BlcmY7Cj4gQEAgLTI3MCwxMiArMjY1LDYgQEAgc3RydWN0IGRwdV9jcnRjX3Jl c19vcHMgewo+ICAJdm9pZCAoKnB1dCkodm9pZCAqdmFsKTsKPiAgfTsKPiAgCj4gLS8qIGNydGMg cmVzb3VyY2UgdHlwZSAoMHgwLTB4ZmZmZiByZXNlcnZlZCBmb3IgaHcgYmxvY2sgdHlwZSAqLwo+ IC0jZGVmaW5lIERQVV9DUlRDX1JFU19ST1RfT1VUX0ZCTwkweDEwMDAwCj4gLSNkZWZpbmUgRFBV X0NSVENfUkVTX1JPVF9PVVRfRkIJCTB4MTAwMDEKPiAtI2RlZmluZSBEUFVfQ1JUQ19SRVNfUk9U X1BMQU5FCQkweDEwMDAyCj4gLSNkZWZpbmUgRFBVX0NSVENfUkVTX1JPVF9JTl9GQgkJMHgxMDAw Mwo+IC0KPiAgI2RlZmluZSBEUFVfQ1JUQ19SRVNfRkxBR19GUkVFCQlCSVQoMCkKPiAgCj4gIC8q Kgo+IEBAIC0zMzcsOCArMzI2LDYgQEAgc3RydWN0IGRwdV9jcnRjX3Jlc3Bvb2wgewo+ICAgKiBA ZHNfZGlydHk6IEJvb2xlYW4gdG8gaW5kaWNhdGUgaWYgZGlydHkgb3Igbm90Cj4gICAqIEBkc19j Zmc6IERlc3RpbmF0aW9uIHNjYWxlciBjb25maWcKPiAgICogQG5ld19wZXJmOiBuZXcgcGVyZm9y bWFuY2Ugc3RhdGUgYmVpbmcgcmVxdWVzdGVkCj4gLSAqIEBzYnVmX2NmZzogc3RyZWFtIGJ1ZmZl ciBjb25maWd1cmF0aW9uCj4gLSAqIEBzYnVmX3ByZWZpbGxfbGluZTogbnVtYmVyIG9mIGxpbmUg Zm9yIGlubGluZSByb3RhdG9yIHByZWZldGNoCj4gICAqLwo+ICBzdHJ1Y3QgZHB1X2NydGNfc3Rh dGUgewo+ICAJc3RydWN0IGRybV9jcnRjX3N0YXRlIGJhc2U7Cj4gQEAgLTM2NCw5ICszNTEsNiBA QCBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgewo+ICAJc3RydWN0IGRwdV9od19kc19jZmcgZHNfY2Zn W0RQVV9NQVhfRFNfQ09VTlRdOwo+ICAKPiAgCXN0cnVjdCBkcHVfY29yZV9wZXJmX3BhcmFtcyBu ZXdfcGVyZjsKPiAtCXN0cnVjdCBkcHVfY3RsX3NidWZfY2ZnIHNidWZfY2ZnOwo+IC0JdTMyIHNi dWZfcHJlZmlsbF9saW5lOwo+IC0KPiAgCXN0cnVjdCBkcHVfY3J0Y19yZXNwb29sIHJwOwo+ICB9 Owo+ICAKPiBAQCAtNTEzLDIzICs0OTcsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZHB1X2NydGNf aXNfZW5hYmxlZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIH0KPiAgCj4gIC8qKgo+IC0gKiBk cHVfY3J0Y19nZXRfaW5saW5lX3ByZWZpbGwgLSBnZXQgY3VycmVudCBpbmxpbmUgcm90YXRpb24g cHJlZmlsbAo+IC0gKiBAY3J0YzogUG9pbnRlciB0byBjcnRjCj4gLSAqIHJldHVybjogbnVtYmVy IG9mIHByZWZpbGwgbGluZXMKPiAtICovCj4gLXN0YXRpYyBpbmxpbmUgdTMyIGRwdV9jcnRjX2dl dF9pbmxpbmVfcHJlZmlsbChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gLXsKPiAtCXN0cnVjdCBk cHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwo+IC0KPiAtCWlmICghY3J0YyB8fCAhY3J0Yy0+c3RhdGUp Cj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+ c3RhdGUpOwo+IC0JcmV0dXJuIGNzdGF0ZS0+c2J1Zl9jZmcucm90X29wX21vZGUgIT0gRFBVX0NU TF9ST1RfT1BfTU9ERV9PRkZMSU5FID8KPiAtCQljc3RhdGUtPnNidWZfcHJlZmlsbF9saW5lIDog MDsKPiAtfQo+IC0KPiAtLyoqCj4gICAqIGRwdV9jcnRjX2V2ZW50X3F1ZXVlIC0gcmVxdWVzdCBl dmVudCBjYWxsYmFjawo+ICAgKiBAY3J0YzogUG9pbnRlciB0byBkcm0gY3J0YyBzdHJ1Y3R1cmUK PiAgICogQGZ1bmM6IFBvaW50ZXIgdG8gY2FsbGJhY2sgZnVuY3Rpb24KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKPiBpbmRleCBjMDFlYTg1Li43ODg2YWU3 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVy LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCj4g QEAgLTEyMjUsOCArMTIyNSw3IEBAIHN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY19kaXNhYmxl KHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jKQo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50 IF9kcHVfZW5jb2Rlcl91cGRhdGVfcnNjX2NsaWVudCgKPiAtCQlzdHJ1Y3QgZHJtX2VuY29kZXIg KmRybV9lbmMsCj4gLQkJc3RydWN0IGRwdV9lbmNvZGVyX3JzY19jb25maWcgKmNvbmZpZywgYm9v bCBlbmFibGUpCj4gKwkJc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLCBib29sIGVuYWJsZSkK PiAgewo+ICAJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmM7Cj4gIAlzdHJ1Y3QgZHJt X2NydGMgKmNydGM7Cj4gQEAgLTEyNjUsMTMgKzEyNjQsMTEgQEAgc3RhdGljIGludCBfZHB1X2Vu Y29kZXJfdXBkYXRlX3JzY19jbGllbnQoCj4gIAkJKCgoZGlzcF9pbmZvLT5jYXBhYmlsaXRpZXMg JiBNU01fRElTUExBWV9DQVBfQ01EX01PREUpICYmCj4gIAkJICBkaXNwX2luZm8tPmlzX3ByaW1h cnkpID8gRFBVX1JTQ19DTURfU1RBVEUgOgo+ICAJCURQVV9SU0NfVklEX1NUQVRFKSA6IERQVV9S U0NfSURMRV9TVEFURTsKPiAtCXByZWZpbGxfbGluZXMgPSBjb25maWcgPyBtb2RlX2luZm8tPnBy ZWZpbGxfbGluZXMgKwo+IC0JCWNvbmZpZy0+aW5saW5lX3JvdGF0ZV9wcmVmaWxsIDogbW9kZV9p bmZvLT5wcmVmaWxsX2xpbmVzOwo+ICAKPiAgCS8qIGNvbXBhcmUgc3BlY2lmaWMgaXRlbXMgYW5k IHJlY29uZmlndXJlIHRoZSByc2MgKi8KPiAgCWlmICgocnNjX2NvbmZpZy0+ZnBzICE9IG1vZGVf aW5mby0+ZnJhbWVfcmF0ZSkgfHwKPiAgCSAgICAocnNjX2NvbmZpZy0+dnRvdGFsICE9IG1vZGVf aW5mby0+dnRvdGFsKSB8fAo+IC0JICAgIChyc2NfY29uZmlnLT5wcmVmaWxsX2xpbmVzICE9IHBy ZWZpbGxfbGluZXMpIHx8Cj4gKwkgICAgKHJzY19jb25maWctPnByZWZpbGxfbGluZXMgIT0gbW9k ZV9pbmZvLT5wcmVmaWxsX2xpbmVzKSB8fAo+ICAJICAgIChyc2NfY29uZmlnLT5qaXR0ZXJfbnVt ZXIgIT0gbW9kZV9pbmZvLT5qaXR0ZXJfbnVtZXIpIHx8Cj4gIAkgICAgKHJzY19jb25maWctPmpp dHRlcl9kZW5vbSAhPSBtb2RlX2luZm8tPmppdHRlcl9kZW5vbSkpIHsKPiAgCQlyc2NfY29uZmln LT5mcHMgPSBtb2RlX2luZm8tPmZyYW1lX3JhdGU7Cj4gQEAgLTEzOTMsMTYgKzEzOTAsMTIgQEAg c3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2xfcnNjX3VwZGF0ZSgKPiAg CQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsIGJvb2wgZW5hYmxlKQo+ICB7Cj4gIAlzdHJ1 Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3ZpcnQoZHJtX2Vu Yyk7Cj4gLQlzdHJ1Y3QgZHB1X2VuY29kZXJfcnNjX2NvbmZpZyByc2NfY2ZnID0geyAwIH07Cj4g IAlpbnQgaTsKPiAgCj4gIAlpZiAoZW5hYmxlKSB7Cj4gLQkJcnNjX2NmZy5pbmxpbmVfcm90YXRl X3ByZWZpbGwgPQo+IC0JCQkJZHB1X2NydGNfZ2V0X2lubGluZV9wcmVmaWxsKGRybV9lbmMtPmNy dGMpOwo+IC0KPiAtCQlfZHB1X2VuY29kZXJfdXBkYXRlX3JzY19jbGllbnQoZHJtX2VuYywgJnJz Y19jZmcsIHRydWUpOwo+ICsJCV9kcHVfZW5jb2Rlcl91cGRhdGVfcnNjX2NsaWVudChkcm1fZW5j LCB0cnVlKTsKPiAgCX0gZWxzZSB7Cj4gLQkJX2RwdV9lbmNvZGVyX3VwZGF0ZV9yc2NfY2xpZW50 KGRybV9lbmMsIE5VTEwsIGZhbHNlKTsKPiArCQlfZHB1X2VuY29kZXJfdXBkYXRlX3JzY19jbGll bnQoZHJtX2VuYywgZmFsc2UpOwo+ICAKPiAgCQkvKioKPiAgCQkgKiBkaXNhYmxlIHRoZSB2c3lu YyBzb3VyY2UgYWZ0ZXIgdXBkYXRpbmcgdGhlIHJzYyBzdGF0ZS4gcnNjCj4gQEAgLTE3NDQsNyAr MTczNyw3IEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbChzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmRybV9lbmMsCj4gIAo+ICAJCV9kcHVfZW5jb2Rlcl9pcnFfY29udHJvbChk cm1fZW5jLCB0cnVlKTsKPiAgCj4gLQkJX2RwdV9lbmNvZGVyX3VwZGF0ZV9yc2NfY2xpZW50KGRy bV9lbmMsIE5VTEwsIHRydWUpOwo+ICsJCV9kcHVfZW5jb2Rlcl91cGRhdGVfcnNjX2NsaWVudChk cm1fZW5jLCB0cnVlKTsKPiAgCj4gIAkJRFBVX0VWVDMyKERSTUlEKGRybV9lbmMpLCBzd19ldmVu dCwgZHB1X2VuYy0+cmNfc3RhdGUsCj4gIAkJCQlEUFVfRU5DX1JDX1NUQVRFX09OLCBEUFVfRVZU TE9HX0ZVTkNfQ0FTRTYpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfZW5jb2Rlci5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Vu Y29kZXIuaAo+IGluZGV4IDg2YTM4MDAuLjRjNTU2MGIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgKPiBAQCAtNTAsMjQgKzUwLDE0IEBAIHN0cnVj dCBkcHVfZW5jb2Rlcl9od19yZXNvdXJjZXMgewo+ICAKPiAgLyoqCj4gICAqIGRwdV9lbmNvZGVy X2tpY2tvZmZfcGFyYW1zIC0gaW5mbyBlbmNvZGVyIHJlcXVpcmVzIGF0IGtpY2tvZmYKPiAtICog QGlubGluZV9yb3RhdGVfcHJlZmlsbDogbnVtYmVyIG9mIGxpbmVzIHRvIHByZWZpbGwgZm9yIGlu bGluZSByb3RhdGlvbgo+ICAgKiBAYWZmZWN0ZWRfZGlzcGxheXM6ICBiaXRtYXNrLCBiaXQgc2V0 IG1lYW5zIHRoZSBST0kgb2YgdGhlIGNvbW1pdCBsaWVzIHdpdGhpbgo+ICAgKiAgICAgICAgICAg ICAgICAgICAgICB0aGUgYm91bmRzIG9mIHRoZSBwaHlzaWNhbCBkaXNwbGF5IGF0IHRoZSBiaXQg aW5kZXgKPiAgICovCj4gIHN0cnVjdCBkcHVfZW5jb2Rlcl9raWNrb2ZmX3BhcmFtcyB7Cj4gLQl1 MzIgaW5saW5lX3JvdGF0ZV9wcmVmaWxsOwo+ICAJdW5zaWduZWQgbG9uZyBhZmZlY3RlZF9kaXNw bGF5czsKPiAgfTsKPiAgCj4gIC8qKgo+IC0gKiBkcHVfZW5jb2Rlcl9yc2NfY29uZmlnIC0gcnNj IGNvbmZpZ3VyYXRpb24gZm9yIGVuY29kZXIKPiAtICogQGlubGluZV9yb3RhdGVfcHJlZmlsbDog bnVtYmVyIG9mIGxpbmVzIHRvIHByZWZpbGwgZm9yIGlubGluZSByb3RhdGlvbgo+IC0gKi8KPiAt c3RydWN0IGRwdV9lbmNvZGVyX3JzY19jb25maWcgewo+IC0JdTMyIGlubGluZV9yb3RhdGVfcHJl ZmlsbDsKPiAtfTsKPiAtCj4gLS8qKgo+ICAgKiBkcHVfZW5jb2Rlcl9nZXRfaHdfcmVzb3VyY2Vz IC0gUG9wdWxhdGUgdGFibGUgb2YgcmVxdWlyZWQgaGFyZHdhcmUgcmVzb3VyY2VzCj4gICAqIEBl bmNvZGVyOgllbmNvZGVyIHBvaW50ZXIKPiAgICogQGh3X3JlczoJcmVzb3VyY2UgdGFibGUgdG8g cG9wdWxhdGUgd2l0aCBlbmNvZGVyIHJlcXVpcmVkIHJlc291cmNlcwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzLmggYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzLmgKPiBpbmRleCA3MWNkMmYy Li5lOTQ4NGZlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9lbmNvZGVyX3BoeXMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9lbmNvZGVyX3BoeXMuaAo+IEBAIC0yODcsMTUgKzI4NywxMSBAQCBzdGF0aWMgaW5saW5lIGlu dCBkcHVfZW5jb2Rlcl9waHlzX2luY19wZW5kaW5nKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpw aHlzKQo+ICAgKiBAYmFzZToJQmFzZWNsYXNzIHBoeXNpY2FsIGVuY29kZXIgc3RydWN0dXJlCj4g ICAqIEBod19pbnRmOglIYXJkd2FyZSBpbnRlcmZhY2UgdG8gdGhlIGludGYgcmVnaXN0ZXJzCj4g ICAqIEB0aW1pbmdfcGFyYW1zOiBDdXJyZW50IHRpbWluZyBwYXJhbWV0ZXIKPiAtICogQHJvdF9m ZXRjaDoJUHJlZmlsbCBmb3IgaW5saW5lIHJvdGF0aW9uCj4gLSAqIEByb3RfZmV0Y2hfdmFsaWQ6 IHRydWUgaWYgcm90X2ZldGNoIGlzIHVwZGF0ZWQgKHJlc2V0IGluIGVuYyBlbmFibGUpCj4gICAq Lwo+ICBzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c192aWQgewo+ICAJc3RydWN0IGRwdV9lbmNvZGVy X3BoeXMgYmFzZTsKPiAgCXN0cnVjdCBkcHVfaHdfaW50ZiAqaHdfaW50ZjsKPiAgCXN0cnVjdCBp bnRmX3RpbWluZ19wYXJhbXMgdGltaW5nX3BhcmFtczsKPiAtCXN0cnVjdCBpbnRmX3Byb2dfZmV0 Y2ggcm90X2ZldGNoOwo+IC0JYm9vbCByb3RfZmV0Y2hfdmFsaWQ7Cj4gIH07Cj4gIAo+ICAvKioK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJf cGh5c192aWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3Bo eXNfdmlkLmMKPiBpbmRleCBlZGFhZDA0Li4yN2VhMmIxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jCj4gQEAgLTIy OSw3MyArMjI5LDYgQEAgc3RhdGljIHZvaWQgcHJvZ3JhbW1hYmxlX2ZldGNoX2NvbmZpZyhzdHJ1 Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMsCj4gIAlzcGluX3VubG9ja19pcnFyZXN0b3Jl KHBoeXNfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3MpOwo+ICB9Cj4gIAo+IC0vKgo+IC0g KiBwcm9ncmFtbWFibGVfcm90X2ZldGNoX2NvbmZpZzogUHJvZ3JhbXMgUk9UIHRvIHByZWZldGNo IGxpbmVzIGJ5IG9mZnNldHRpbmcKPiAtICoJdGhlIHN0YXJ0IG9mIGZldGNoIGludG8gdGhlIHZl cnRpY2FsIGZyb250IHBvcmNoIGZvciBjYXNlcyB3aGVyZSB0aGUKPiAtICoJdnN5bmMgcHVsc2Ug d2lkdGggYW5kIHZlcnRpY2FsIGJhY2sgcG9yY2ggdGltZSBpcyBpbnN1ZmZpY2llbnQKPiAtICoK PiAtICoJR2V0cyAjIG9mIGxpbmVzIHRvIHByZS1mZXRjaCwgdGhlbiBjYWxjdWxhdGUgVlNZTkMg Y291bnRlciB2YWx1ZS4KPiAtICoJSFcgbGF5ZXIgcmVxdWlyZXMgVlNZTkMgY291bnRlciBvZiBm aXJzdCBwaXhlbCBvZiB0Z3QgVkZQIGxpbmUuCj4gLSAqIEBwaHlzX2VuYzogUG9pbnRlciB0byBw aHlzaWNhbCBlbmNvZGVyCj4gLSAqIEByb3RfZmV0Y2hfbGluZXM6IG51bWJlciBvZiBsaW5lIHRv IHByZWZpbGwsIG9yIDAgdG8gZGlzYWJsZQo+IC0gKi8KPiAtc3RhdGljIHZvaWQgcHJvZ3JhbW1h YmxlX3JvdF9mZXRjaF9jb25maWcoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLAo+ IC0JCXUzMiByb3RfZmV0Y2hfbGluZXMpCj4gLXsKPiAtCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlz X3ZpZCAqdmlkX2VuYyA9Cj4gLQkJdG9fZHB1X2VuY29kZXJfcGh5c192aWQocGh5c19lbmMpOwo+ IC0Jc3RydWN0IGludGZfcHJvZ19mZXRjaCBmID0geyAwIH07Cj4gLQlzdHJ1Y3QgaW50Zl90aW1p bmdfcGFyYW1zICp0aW1pbmc7Cj4gLQl1MzIgdmZwX2ZldGNoX2xpbmVzID0gMDsKPiAtCXUzMiBo b3Jpel90b3RhbCA9IDA7Cj4gLQl1MzIgdmVydF90b3RhbCA9IDA7Cj4gLQl1MzIgcm90X2ZldGNo X3N0YXJ0X3ZzeW5jX2NvdW50ZXIgPSAwOwo+IC0JdTMyIGZsdXNoX21hc2sgPSAwOwo+IC0JdW5z aWduZWQgbG9uZyBsb2NrX2ZsYWdzOwo+IC0KPiAtCWlmICghcGh5c19lbmMgfHwgIXZpZF9lbmMt Pmh3X2ludGYgfHwgIXBoeXNfZW5jLT5od19jdGwgfHwKPiAtCQkJIXBoeXNfZW5jLT5od19jdGwt Pm9wcy5nZXRfYml0bWFza19pbnRmIHx8Cj4gLQkJCSFwaHlzX2VuYy0+aHdfY3RsLT5vcHMudXBk YXRlX3BlbmRpbmdfZmx1c2ggfHwKPiAtCQkJIXZpZF9lbmMtPmh3X2ludGYtPm9wcy5zZXR1cF9y b3Rfc3RhcnQpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCXRpbWluZyA9ICZ2aWRfZW5jLT50aW1pbmdf cGFyYW1zOwo+IC0JdmZwX2ZldGNoX2xpbmVzID0gcHJvZ3JhbW1hYmxlX2ZldGNoX2dldF9udW1f bGluZXModmlkX2VuYywgdGltaW5nKTsKPiAtCWlmICh2ZnBfZmV0Y2hfbGluZXMgJiYgcm90X2Zl dGNoX2xpbmVzKSB7Cj4gLQkJdmVydF90b3RhbCA9IGdldF92ZXJ0aWNhbF90b3RhbCh0aW1pbmcp Owo+IC0JCWhvcml6X3RvdGFsID0gZ2V0X2hvcml6b250YWxfdG90YWwodGltaW5nKTsKPiAtCQlp ZiAodmVydF90b3RhbCA+PSAodmZwX2ZldGNoX2xpbmVzICsgcm90X2ZldGNoX2xpbmVzKSkgewo+ IC0JCQlyb3RfZmV0Y2hfc3RhcnRfdnN5bmNfY291bnRlciA9Cj4gLQkJCSAgICAodmVydF90b3Rh bCAtIHZmcF9mZXRjaF9saW5lcyAtIHJvdF9mZXRjaF9saW5lcykgKgo+IC0JCQkgICAgaG9yaXpf dG90YWwgKyAxOwo+IC0JCQlmLmVuYWJsZSA9IDE7Cj4gLQkJCWYuZmV0Y2hfc3RhcnQgPSByb3Rf ZmV0Y2hfc3RhcnRfdnN5bmNfY291bnRlcjsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JLyogcmV0dXJu IGlmIHJvdF9mZXRjaCBkb2VzIG5vdCBjaGFuZ2Ugc2luY2UgbGFzdCB1cGRhdGUgKi8KPiAtCWlm ICh2aWRfZW5jLT5yb3RfZmV0Y2hfdmFsaWQgJiYKPiAtCQkJIW1lbWNtcCgmdmlkX2VuYy0+cm90 X2ZldGNoLCAmZiwgc2l6ZW9mKGYpKSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JRFBVX0RFQlVHX1ZJ REVOQyh2aWRfZW5jLAo+IC0JCSJyb3RfZmV0Y2hfbGluZXMgJXUgdmZwX2ZldGNoX2xpbmVzICV1 IHJvdF9mZXRjaF9zdGFydF92c3luY19jb3VudGVyICV1XG4iLAo+IC0JCXJvdF9mZXRjaF9saW5l cywgdmZwX2ZldGNoX2xpbmVzLAo+IC0JCXJvdF9mZXRjaF9zdGFydF92c3luY19jb3VudGVyKTsK PiAtCj4gLQlwaHlzX2VuYy0+aHdfY3RsLT5vcHMuZ2V0X2JpdG1hc2tfaW50ZigKPiAtCQkJcGh5 c19lbmMtPmh3X2N0bCwgJmZsdXNoX21hc2ssIHZpZF9lbmMtPmh3X2ludGYtPmlkeCk7Cj4gLQlw aHlzX2VuYy0+aHdfY3RsLT5vcHMudXBkYXRlX3BlbmRpbmdfZmx1c2goCj4gLQkJCXBoeXNfZW5j LT5od19jdGwsIGZsdXNoX21hc2spOwo+IC0KPiAtCXNwaW5fbG9ja19pcnFzYXZlKHBoeXNfZW5j LT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3MpOwo+IC0JdmlkX2VuYy0+aHdfaW50Zi0+b3BzLnNl dHVwX3JvdF9zdGFydCh2aWRfZW5jLT5od19pbnRmLCAmZik7Cj4gLQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKHBoeXNfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3MpOwo+IC0KPiAtCXZpZF9l bmMtPnJvdF9mZXRjaCA9IGY7Cj4gLQl2aWRfZW5jLT5yb3RfZmV0Y2hfdmFsaWQgPSB0cnVlOwo+ IC19Cj4gLQo+ICBzdGF0aWMgYm9vbCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9tb2RlX2ZpeHVwKAo+ ICAJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYywKPiAgCQljb25zdCBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiBAQCAtNjAyLDkgKzUzNSw2IEBAIHN0YXRpYyB2b2lk IGRwdV9lbmNvZGVyX3BoeXNfdmlkX2VuYWJsZShzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5 c19lbmMpCj4gIAlpZiAoV0FSTl9PTighdmlkX2VuYy0+aHdfaW50Zi0+b3BzLmVuYWJsZV90aW1p bmcpKQo+ICAJCXJldHVybjsKPiAgCj4gLQkvKiByZXNldCBzdGF0ZSB2YXJpYWJsZXMgdW50aWwg YWZ0ZXIgZmlyc3QgdXBkYXRlICovCj4gLQl2aWRfZW5jLT5yb3RfZmV0Y2hfdmFsaWQgPSBmYWxz ZTsKPiAtCj4gIAlkcHVfZW5jb2Rlcl9oZWxwZXJfc3BsaXRfY29uZmlnKHBoeXNfZW5jLCB2aWRf ZW5jLT5od19pbnRmLT5pZHgpOwo+ICAKPiAgCWRwdV9lbmNvZGVyX3BoeXNfdmlkX3NldHVwX3Rp bWluZ19lbmdpbmUocGh5c19lbmMpOwo+IEBAIC03NDEsOCArNjcxLDYgQEAgc3RhdGljIHZvaWQg ZHB1X2VuY29kZXJfcGh5c192aWRfcHJlcGFyZV9mb3Jfa2lja29mZigKPiAgCQlkcHVfZW5jb2Rl cl9oZWxwZXJfdW5yZWdpc3Rlcl9pcnEocGh5c19lbmMsIElOVFJfSURYX1ZTWU5DKTsKPiAgCQlE UFVfREJHX0RVTVAoImFsbCIsICJkYmdfYnVzIiwgInZiaWZfZGJnX2J1cyIsICJwYW5pYyIpOwo+ ICAJfQo+IC0KPiAtCXByb2dyYW1tYWJsZV9yb3RfZmV0Y2hfY29uZmlnKHBoeXNfZW5jLCBwYXJh bXMtPmlubGluZV9yb3RhdGVfcHJlZmlsbCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGRwdV9l bmNvZGVyX3BoeXNfdmlkX2Rpc2FibGUoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5j KQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0 YWxvZy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYwo+ IGluZGV4IDI4OWI5ZmYuLjcwMTk2MjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMKPiBAQCAtMTQsOSArMTQsNiBAQAo+ICAjaW5jbHVk ZSA8bGludXgvc2xhYi5oPgo+ICAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+ICAjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gLSNpZiBJU19FTkFCTEVEKENPTkZJR19E Uk1fTVNNX1JPVEFUT1IpCj4gLSNpbmNsdWRlIDxsaW51eC9zb2MvcWNvbS9sbGNjLXFjb20uaD4K PiAtI2VuZGlmCj4gICNpbmNsdWRlICJkcHVfaHdfbWRzcy5oIgo+ICAjaW5jbHVkZSAiZHB1X2h3 X2NhdGFsb2cuaCIKPiAgI2luY2x1ZGUgImRwdV9od19jYXRhbG9nX2Zvcm1hdC5oIgo+IEBAIC05 NCw4ICs5MSw2IEBACj4gICAqLwo+ICAjZGVmaW5lIFBST1BfQklUVkFMVUVfQUNDRVNTKHAsIGks IGosIGspCSgocCArIGkpLT5iaXRfdmFsdWVbal1ba10pCj4gIAo+IC0jZGVmaW5lIERFRkFVTFRf U0JVRl9IRUFEUk9PTQkJKDIwKQo+IC0KPiAgLyoKPiAgICogRGVmYXVsdCBwYXJhbWV0ZXIgdmFs dWVzCj4gICAqLwo+IEBAIC0zMzMsMTMgKzMyOCw2IEBAIGVudW0gewo+ICAJUkVHX0RNQV9QUk9Q X01BWAo+ICB9Owo+ICAKPiAtZW51bSB7Cj4gLQlJTkxJTkVfUk9UX1hJTiwKPiAtCUlOTElORV9S T1RfWElOX1RZUEUsCj4gLQlJTkxJTkVfUk9UX0NMS19DVFJMLAo+IC0JSU5MSU5FX1JPVF9QUk9Q X01BWAo+IC19Owo+IC0KPiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKPiAgICogZHRzIHByb3BlcnR5IGRlZmluaXRpb24KPiAg ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCj4gQEAgLTkyMyw5ICs5MTEsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X3NzcHBfc2V0dXBf dmlnKHN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9jZmcsCj4gIAkJCSJzc3BwX3NjYWxlciV1Iiwg c3NwcC0+aWQgLSBTU1BQX1ZJRzApOwo+ICAJfQo+ICAKPiAtCWlmIChkcHVfY2ZnLT5oYXNfc2J1 ZikKPiAtCQlzZXRfYml0KERQVV9TU1BQX1NCVUYsICZzc3BwLT5mZWF0dXJlcyk7Cj4gLQo+ICAJ c2Jsay0+Y3NjX2Jsay5pZCA9IERQVV9TU1BQX0NTQzsKPiAgCXNucHJpbnRmKHNibGstPmNzY19i bGsubmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwKPiAgCQkJInNzcHBfY3NjJXUiLCBzc3BwLT5p ZCAtIFNTUFBfVklHMCk7Cj4gQEAgLTEyOTUsOCArMTI4MCw2IEBAIHN0YXRpYyBpbnQgZHB1X2N0 bF9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAo+ICAJCQlzZXRfYml0KERQVV9DVExf U1BMSVRfRElTUExBWSwgJmN0bC0+ZmVhdHVyZXMpOwo+ICAJCWlmIChpIDwgTUFYX1BQX1NQTElU X0RJU1BMQVlfQ1RMKQo+ICAJCQlzZXRfYml0KERQVV9DVExfUElOR1BPTkdfU1BMSVQsICZjdGwt PmZlYXR1cmVzKTsKPiAtCQlpZiAoZHB1X2NmZy0+aGFzX3NidWYpCj4gLQkJCXNldF9iaXQoRFBV X0NUTF9TQlVGLCAmY3RsLT5mZWF0dXJlcyk7Cj4gIAl9Cj4gIAo+ICBlbmQ6Cj4gQEAgLTE1MzQs OSArMTUxNyw2IEBAIHN0YXRpYyBpbnQgZHB1X2ludGZfcGFyc2VfZHQoc3RydWN0IGRldmljZV9u b2RlICpucCwKPiAgCQkJaW50Zi0+Y29udHJvbGxlcl9pZCA9IG5vbmVfY291bnQ7Cj4gIAkJCW5v bmVfY291bnQrKzsKPiAgCQl9Cj4gLQo+IC0JCWlmIChkcHVfY2ZnLT5oYXNfc2J1ZikKPiAtCQkJ c2V0X2JpdChEUFVfSU5URl9ST1RfU1RBUlQsICZpbnRmLT5mZWF0dXJlcyk7Cj4gIAl9Cj4gIAo+ ICBlbmQ6Cj4gQEAgLTE3NjEsMTcwICsxNzQxLDYgQEAgc3RhdGljIHZvaWQgX2RwdV9kc3BwX3Nl dHVwX2Jsb2NrcyhzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnLAo+ICAJfQo+ICB9Cj4gIAo+ IC0jaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX01TTV9ST1RBVE9SKQo+IC1zdGF0aWMgc3RydWN0 IGRwdV9wcm9wX3R5cGUgaW5saW5lX3JvdF9wcm9wW0lOTElORV9ST1RfUFJPUF9NQVhdID0gewo+ IC0Je0lOTElORV9ST1RfWElOLCAicWNvbSxkcHUtaW5saW5lLXJvdC14aW4iLCBmYWxzZSwKPiAt CQkJCQkJCVBST1BfVFlQRV9VMzJfQVJSQVl9LAo+IC0Je0lOTElORV9ST1RfWElOX1RZUEUsICJx Y29tLGRwdS1pbmxpbmUtcm90LXhpbi10eXBlIiwgZmFsc2UsCj4gLQkJCQkJCQlQUk9QX1RZUEVf U1RSSU5HX0FSUkFZfSwKPiAtCXtJTkxJTkVfUk9UX0NMS19DVFJMLCAicWNvbSxkcHUtaW5saW5l LXJvdC1jbGstY3RybCIsIGZhbHNlLAo+IC0JCQkJCQlQUk9QX1RZUEVfQklUX09GRlNFVF9BUlJB WX0sCj4gLX07Cj4gLQo+IC1zdGF0aWMgdm9pZCBfZHB1X2lubGluZV9yb3RfcGFyc2VfZHQoc3Ry dWN0IGRldmljZV9ub2RlICpucCwKPiAtCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnLCBz dHJ1Y3QgZHB1X3JvdF9jZmcgKnJvdCkKPiAtewo+IC0JaW50IHJjLCBwcm9wX2NvdW50W0lOTElO RV9ST1RfUFJPUF9NQVhdLCBpLCBqLCBpbmRleDsKPiAtCXN0cnVjdCBkcHVfcHJvcF92YWx1ZSAq cHJvcF92YWx1ZSA9IE5VTEw7Cj4gLQlib29sIHByb3BfZXhpc3RzW0lOTElORV9ST1RfUFJPUF9N QVhdOwo+IC0JdTMyIG9mZl9jb3VudCwgc3NwcF9jb3VudCA9IDAsIHdiX2NvdW50ID0gMDsKPiAt CWNvbnN0IGNoYXIgKnR5cGU7Cj4gLQo+IC0JcHJvcF92YWx1ZSA9IGtjYWxsb2MoSU5MSU5FX1JP VF9QUk9QX01BWCwKPiAtCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSksIEdGUF9LRVJO RUwpOwo+IC0JaWYgKCFwcm9wX3ZhbHVlKQo+IC0JCXJldHVybjsKPiAtCj4gLQlyYyA9IF92YWxp ZGF0ZV9kdF9lbnRyeShucCwgaW5saW5lX3JvdF9wcm9wLAo+IC0JCQlBUlJBWV9TSVpFKGlubGlu ZV9yb3RfcHJvcCksIHByb3BfY291bnQsICZvZmZfY291bnQpOwo+IC0JaWYgKHJjKQo+IC0JCWdv dG8gZW5kOwo+IC0KPiAtCXJjID0gX3JlYWRfZHRfZW50cnkobnAsIGlubGluZV9yb3RfcHJvcCwg QVJSQVlfU0laRShpbmxpbmVfcm90X3Byb3ApLAo+IC0JCQlwcm9wX2NvdW50LCBwcm9wX2V4aXN0 cywgcHJvcF92YWx1ZSk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7Cj4gLQo+IC0JZm9yIChp ID0gMDsgaSA8IG9mZl9jb3VudDsgaSsrKSB7Cj4gLQkJcm90LT52YmlmX2NmZ1tpXS54aW5faWQg PSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQkJCQkJSU5MSU5FX1JPVF9YSU4s IGkpOwo+IC0JCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KG5wLAo+IC0JCQkJaW5saW5l X3JvdF9wcm9wW0lOTElORV9ST1RfWElOX1RZUEVdLnByb3BfbmFtZSwKPiAtCQkJCWksICZ0eXBl KTsKPiAtCj4gLQkJaWYgKCFzdHJjbXAodHlwZSwgInNzcHAiKSkgewo+IC0JCQlyb3QtPnZiaWZf Y2ZnW2ldLm51bSA9IElOTElORV9ST1QwX1NTUFAgKyBzc3BwX2NvdW50Owo+IC0JCQlyb3QtPnZi aWZfY2ZnW2ldLmlzX3JlYWQgPSB0cnVlOwo+IC0JCQlyb3QtPnZiaWZfY2ZnW2ldLmNsa19jdHJs ID0KPiAtCQkJCQlEUFVfQ0xLX0NUUkxfSU5MSU5FX1JPVDBfU1NQUAo+IC0JCQkJCSsgc3NwcF9j b3VudDsKPiAtCQkJc3NwcF9jb3VudCsrOwo+IC0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0eXBlLCAi d2IiKSkgewo+IC0JCQlyb3QtPnZiaWZfY2ZnW2ldLm51bSA9IElOTElORV9ST1QwX1dCICsgd2Jf Y291bnQ7Cj4gLQkJCXJvdC0+dmJpZl9jZmdbaV0uaXNfcmVhZCA9IGZhbHNlOwo+IC0JCQlyb3Qt PnZiaWZfY2ZnW2ldLmNsa19jdHJsID0KPiAtCQkJCQlEUFVfQ0xLX0NUUkxfSU5MSU5FX1JPVDBf V0IKPiAtCQkJCQkrIHdiX2NvdW50Owo+IC0JCQl3Yl9jb3VudCsrOwo+IC0JCX0gZWxzZSB7Cj4g LQkJCURQVV9FUlJPUigiaW52YWxpZCByb3RhdG9yIHZiaWYgdHlwZTolc1xuIiwgdHlwZSk7Cj4g LQkJCWdvdG8gZW5kOwo+IC0JCX0KPiAtCj4gLQkJaW5kZXggPSByb3QtPnZiaWZfY2ZnW2ldLmNs a19jdHJsOwo+IC0JCWlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gRFBVX0NMS19DVFJMX01BWCkg ewo+IC0JCQlEUFVfRVJST1IoImludmFsaWQgY2xrX2N0cmwgZW51bTolZFxuIiwgaW5kZXgpOwo+ IC0JCQlnb3RvIGVuZDsKPiAtCQl9Cj4gLQo+IC0JCWZvciAoaiA9IDA7IGogPCBkcHVfY2ZnLT5t ZHBfY291bnQ7IGorKykgewo+IC0JCQlkcHVfY2ZnLT5tZHBbal0uY2xrX2N0cmxzW2luZGV4XS5y ZWdfb2ZmID0KPiAtCQkJCVBST1BfQklUVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCQkJ CUlOTElORV9ST1RfQ0xLX0NUUkwsIGksIDApOwo+IC0JCQlkcHVfY2ZnLT5tZHBbal0uY2xrX2N0 cmxzW2luZGV4XS5iaXRfb2ZmID0KPiAtCQkJCVBST1BfQklUVkFMVUVfQUNDRVNTKHByb3BfdmFs dWUsCj4gLQkJCQkJCUlOTElORV9ST1RfQ0xLX0NUUkwsIGksIDEpOwo+IC0JCX0KPiAtCj4gLQkJ RFBVX0RFQlVHKCJyb3QtIHhpbjolZCwgbnVtOiVkLCByZDolZCwgY2xrOiVkOjB4JXgvJWRcbiIs Cj4gLQkJCQlyb3QtPnZiaWZfY2ZnW2ldLnhpbl9pZCwKPiAtCQkJCXJvdC0+dmJpZl9jZmdbaV0u bnVtLAo+IC0JCQkJcm90LT52YmlmX2NmZ1tpXS5pc19yZWFkLAo+IC0JCQkJcm90LT52YmlmX2Nm Z1tpXS5jbGtfY3RybCwKPiAtCQkJCWRwdV9jZmctPm1kcFswXS5jbGtfY3RybHNbaW5kZXhdLnJl Z19vZmYsCj4gLQkJCQlkcHVfY2ZnLT5tZHBbMF0uY2xrX2N0cmxzW2luZGV4XS5iaXRfb2ZmKTsK PiAtCX0KPiAtCj4gLQlyb3QtPnZiaWZfaWR4ID0gVkJJRl9SVDsKPiAtCXJvdC0+eGluX2NvdW50 ID0gb2ZmX2NvdW50Owo+IC0KPiAtZW5kOgo+IC0Ja2ZyZWUocHJvcF92YWx1ZSk7Cj4gLX0KPiAt I2VuZGlmCj4gLQo+IC1zdGF0aWMgaW50IGRwdV9yb3RfcGFyc2VfZHQoc3RydWN0IGRldmljZV9u b2RlICpucCwKPiAtCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnKQo+IC17Cj4gLSNpZiBJ U19FTkFCTEVEKENPTkZJR19EUk1fTVNNX1JPVEFUT1IpCj4gLQlzdHJ1Y3QgZHB1X3JvdF9jZmcg KnJvdDsKPiAtCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Cj4gLQlzdHJ1Y3Qgb2ZfcGhh bmRsZV9hcmdzIHBoYXJnczsKPiAtCXN0cnVjdCBsbGNjX3NsaWNlX2Rlc2MgKnNsaWNlOwo+IC0J aW50IHJjID0gMCwgaTsKPiAtCj4gLQlpZiAoIWRwdV9jZmcpIHsKPiAtCQlEUFVfRVJST1IoImlu dmFsaWQgYXJndW1lbnRcbiIpOwo+IC0JCXJjID0gLUVJTlZBTDsKPiAtCQlnb3RvIGVuZDsKPiAt CX0KPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgUk9UX01BWDsgaSsrKSB7Cj4gLQkJcm90ID0gZHB1 X2NmZy0+cm90ICsgZHB1X2NmZy0+cm90X2NvdW50Owo+IC0JCXJvdC0+YmFzZSA9IDA7Cj4gLQkJ cm90LT5sZW4gPSAwOwo+IC0KPiAtCQlyYyA9IG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzKG5w LAo+IC0JCQkJInFjb20sZHB1LWlubGluZS1yb3RhdG9yIiwgIiNsaXN0LWNlbGxzIiwKPiAtCQkJ CWksICZwaGFyZ3MpOwo+IC0JCWlmIChyYykgewo+IC0JCQlyYyA9IDA7Cj4gLQkJCWJyZWFrOwo+ IC0JCX0gZWxzZSBpZiAoIXBoYXJncy5ucCB8fCAhcGhhcmdzLmFyZ3NfY291bnQpIHsKPiAtCQkJ cmMgPSAtRUlOVkFMOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQo+IC0JCXJvdC0+aWQgPSBST1Rf MCArIHBoYXJncy5hcmdzWzBdOwo+IC0KPiAtCQlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9k ZShwaGFyZ3MubnApOwo+IC0JCWlmIChwZGV2KSB7Cj4gLQkJCXNsaWNlID0gbGxjY19zbGljZV9n ZXRkKCZwZGV2LT5kZXYsICJyb3RhdG9yIik7Cj4gLQkJCWlmIChJU19FUlJfT1JfTlVMTChzbGlj ZSkpIHsKPiAtCQkJCXJvdC0+cGRldiA9IE5VTEw7Cj4gLQkJCQlEUFVfRVJST1IoImZhaWxlZCB0 byBnZXQgc3lzdGVtIGNhY2hlICVsZFxuIiwKPiAtCQkJCQkJUFRSX0VSUihzbGljZSkpOwo+IC0J CQl9IGVsc2Ugewo+IC0JCQkJcm90LT5zY2lkID0gbGxjY19nZXRfc2xpY2VfaWQoc2xpY2UpOwo+ IC0JCQkJcm90LT5zbGljZV9zaXplID0gbGxjY19nZXRfc2xpY2Vfc2l6ZShzbGljZSk7Cj4gLQkJ CQlyb3QtPnBkZXYgPSBwZGV2Owo+IC0JCQkJbGxjY19zbGljZV9wdXRkKHNsaWNlKTsKPiAtCQkJ CURQVV9ERUJVRygicm90OiVkIHNjaWQ6JWQgc2xpY2Vfc2l6ZTolenVrYlxuIiwKPiAtCQkJCQkJ cm90LT5pZCwgcm90LT5zY2lkLAo+IC0JCQkJCQlyb3QtPnNsaWNlX3NpemUpOwo+IC0JCQkJX2Rw dV9pbmxpbmVfcm90X3BhcnNlX2R0KG5wLCBkcHVfY2ZnLCByb3QpOwo+IC0JCQkJZHB1X2NmZy0+ cm90X2NvdW50Kys7Cj4gLQkJCX0KPiAtCQl9IGVsc2Ugewo+IC0JCQlyb3QtPnBkZXYgPSBOVUxM Owo+IC0JCQlEUFVfRVJST1IoImludmFsaWQgZHB1IHJvdGF0b3Igbm9kZVxuIik7Cj4gLQkJfQo+ IC0KPiAtCQlvZl9ub2RlX3B1dChwaGFyZ3MubnApOwo+IC0JfQo+IC0KPiAtCWlmIChkcHVfY2Zn LT5yb3RfY291bnQpIHsKPiAtCQlkcHVfY2ZnLT5oYXNfc2J1ZiA9IHRydWU7Cj4gLQkJZHB1X2Nm Zy0+c2J1Zl9oZWFkcm9vbSA9IERFRkFVTFRfU0JVRl9IRUFEUk9PTTsKPiAtCX0KPiAtCj4gLWVu ZDoKPiAtCXJldHVybiByYzsKPiAtI2Vsc2UKPiAtCXJldHVybiAwOwo+IC0jZW5kaWYKPiAtfQo+ IC0KPiAgc3RhdGljIGludCBkcHVfZHNwcF90b3BfcGFyc2VfZHQoc3RydWN0IGRldmljZV9ub2Rl ICpucCwKPiAgCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnKQo+ICB7Cj4gQEAgLTMyMTks MTAgKzMwMzUsNiBAQCBzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfaHdfY2F0YWxvZ19pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBod19yZXYpCj4gIAlpZiAocmMpCj4gIAkJZ290byBl bmQ7Cj4gIAo+IC0JcmMgPSBkcHVfcm90X3BhcnNlX2R0KG5wLCBkcHVfY2ZnKTsKPiAtCWlmIChy YykKPiAtCQlnb3RvIGVuZDsKPiAtCj4gIAlyYyA9IGRwdV9jdGxfcGFyc2VfZHQobnAsIGRwdV9j ZmcpOwo+ICAJaWYgKHJjKQo+ICAJCWdvdG8gZW5kOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5oIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaAo+IGluZGV4IGFhNWIyNTYuLjQwMmU5MjkgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cu aAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmgK PiBAQCAtMTE5LDcgKzExOSw2IEBAIGVudW0gewo+ICAgKiBARFBVX1NTUFBfRVhDTF9SRUNULCAg ICAgIFNTUFAgc3VwcG9ydHMgZXhjbHVzaW9uIHJlY3QKPiAgICogQERQVV9TU1BQX1NNQVJUX0RN QV9WMSwgICBTbWFydERNQSAxLjAgc3VwcG9ydAo+ICAgKiBARFBVX1NTUFBfU01BUlRfRE1BX1Yy LCAgIFNtYXJ0RE1BIDIuMCBzdXBwb3J0Cj4gLSAqIEBEUFVfU1NQUF9TQlVGLCAgICAgICAgICAg U1NQUCBzdXBwb3J0IGlubGluZSBzdHJlYW0gYnVmZmVyCj4gICAqIEBEUFVfU1NQUF9UU19QUkVG SUxMICAgICAgU3VwcG9ydHMgcHJlZmlsbCB3aXRoIHRyYWZmaWMgc2hhcGVyCj4gICAqIEBEUFVf U1NQUF9UU19QUkVGSUxMX1JFQzEgU3VwcG9ydHMgcHJlZmlsbCB3aXRoIHRyYWZmaWMgc2hhcGVy IG11bHRpcmVjCj4gICAqIEBEUFVfU1NQUF9DRFAgICAgICAgICAgICAgU3VwcG9ydHMgY2xpZW50 IGRyaXZlbiBwcmVmZXRjaAo+IEBAIC0xNDIsNyArMTQxLDYgQEAgZW51bSB7Cj4gIAlEUFVfU1NQ UF9FWENMX1JFQ1QsCj4gIAlEUFVfU1NQUF9TTUFSVF9ETUFfVjEsCj4gIAlEUFVfU1NQUF9TTUFS VF9ETUFfVjIsCj4gLQlEUFVfU1NQUF9TQlVGLAo+ICAJRFBVX1NTUFBfVFNfUFJFRklMTCwKPiAg CURQVV9TU1BQX1RTX1BSRUZJTExfUkVDMSwKPiAgCURQVV9TU1BQX0NEUCwKPiBAQCAtMjE5LDI3 ICsyMTcsMTUgQEAgZW51bSB7Cj4gICAqIENUTCBzdWItYmxvY2tzCj4gICAqIEBEUFVfQ1RMX1NQ TElUX0RJU1BMQVkgICAgICAgQ1RMIHN1cHBvcnRzIHZpZGVvIG1vZGUgc3BsaXQgZGlzcGxheQo+ ICAgKiBARFBVX0NUTF9QSU5HUE9OR19TUExJVCAgICAgIENUTCBzdXBwb3J0cyBwaW5ncG9uZyBz cGxpdAo+IC0gKiBARFBVX0NUTF9TQlVGICAgICAgICAgICAgICAgIENUTCBzdXBwb3J0cyBpbmxp bmUgc3RyZWFtIGJ1ZmZlcgo+ICAgKiBARFBVX0NUTF9NQVgKPiAgICovCj4gIGVudW0gewo+ICAJ RFBVX0NUTF9TUExJVF9ESVNQTEFZID0gMHgxLAo+ICAJRFBVX0NUTF9QSU5HUE9OR19TUExJVCwK PiAtCURQVV9DVExfU0JVRiwKPiAgCURQVV9DVExfTUFYCj4gIH07Cj4gIAo+ICAvKioKPiAtICog SU5URiBzdWItYmxvY2tzCj4gLSAqIEBEUFVfSU5URl9ST1RfU1RBUlQgICAgICAgICAgSU5URiBz dXBwb3J0cyByb3RhdG9yIHN0YXJ0IHRyaWdnZXIKPiAtICogQERQVV9JTlRGX01BWAo+IC0gKi8K PiAtZW51bSB7Cj4gLQlEUFVfSU5URl9ST1RfU1RBUlQgPSAweDEsCj4gLQlEUFVfSU5URl9NQVgK PiAtfTsKPiAtCj4gLS8qKgo+ICAgKiBXQiBzdWItYmxvY2tzIGFuZCBmZWF0dXJlcwo+ICAgKiBA RFBVX1dCX0xJTkVfTU9ERSAgICAgICAgV3JpdGViYWNrIG1vZHVsZSBzdXBwb3J0cyBsaW5lL2xp bmVhciBtb2RlCj4gICAqIEBEUFVfV0JfQkxPQ0tfTU9ERSAgICAgICBXcml0ZWJhY2sgbW9kdWxl IHN1cHBvcnRzIGJsb2NrIG1vZGUgcmVhZAo+IEBAIC03MTAsNDQgKzY5Niw2IEBAIHN0cnVjdCBk cHVfd2JfY2ZnIHsKPiAgfTsKPiAgCj4gIC8qKgo+IC0gKiBzdHJ1Y3QgZHB1X3JvdF92YmlmX2Nm ZyAtIGlubGluZSByb3RhdG9yIHZiaWYgY29uZmlncwo+IC0gKiBAeGluX2lkICAgICAgICAgICAg IHhpbiBjbGllbnQgaWQKPiAtICogQG51bSAgICAgICAgICAgICAgICBlbnVtIGlkZW50aWZ5aW5n IHRoaXMgYmxvY2sKPiAtICogQGlzX3JlYWQgICAgICAgICAgICBpbmRpY2F0ZXMgcmVhZC93cml0 ZSBjbGllbnQKPiAtICogQGNsa19jdHJsICAgICAgICAgICBpbmRleCB0byBjbGsgY29udHJvbAo+ IC0gKi8KPiAtc3RydWN0IGRwdV9yb3RfdmJpZl9jZmcgewo+IC0JdTMyIHhpbl9pZDsKPiAtCXUz MiBudW07Cj4gLQlib29sIGlzX3JlYWQ7Cj4gLQllbnVtIGRwdV9jbGtfY3RybF90eXBlIGNsa19j dHJsOwo+IC19Owo+IC0KPiAtLyoqCj4gLSAqIHN0cnVjdCBkcHVfcm90X2NmZyAtIGluZm9ybWF0 aW9uIG9mIHJvdGF0b3IgYmxvY2tzCj4gLSAqIEBpZCAgICAgICAgICAgICAgICAgZW51bSBpZGVu dGlmeWluZyB0aGlzIGJsb2NrCj4gLSAqIEBiYXNlICAgICAgICAgICAgICAgcmVnaXN0ZXIgb2Zm c2V0IG9mIHRoaXMgYmxvY2sKPiAtICogQGxlbiAgICAgICAgICAgICAgICBsZW5ndGggb2YgaGFy ZHdhcmUgYmxvY2sKPiAtICogQGZlYXR1cmVzICAgICAgICAgICBiaXQgbWFzayBpZGVudGlmeWlu ZyBzdWItYmxvY2tzL2ZlYXR1cmVzCj4gLSAqIEBwZGV2ICAgICAgICAgICAgICAgcHJpdmF0ZSBk ZXZpY2UgaGFuZGxlCj4gLSAqIEBzY2lkICAgICAgICAgICAgICAgc3ViY2FjaGUgaWRlbnRpZmll cgo+IC0gKiBAc2xpY2Vfc2l6ZSAgICAgICAgIHN1YmNhY2hlIHNsaWNlIHNpemUKPiAtICogQHZi aWZfaWR4ICAgICAgICAgICB2YmlmIGlkZW50aWZpZXIKPiAtICogQHhpbl9jb3VudCAgICAgICAg ICBudW1iZXIgb2YgeGluIGNsaWVudHMKPiAtICogQHZiaWZfY2ZnICAgICAgICAgICB2YmlmIHNl dHRpbmdzIHJlbGF0ZWQgdG8gcm90YXRvcgo+IC0gKi8KPiAtc3RydWN0IGRwdV9yb3RfY2ZnIHsK PiAtCURQVV9IV19CTEtfSU5GTzsKPiAtCXZvaWQgKnBkZXY7Cj4gLQlpbnQgc2NpZDsKPiAtCXNp emVfdCBzbGljZV9zaXplOwo+IC0JdTMyIHZiaWZfaWR4Owo+IC0KPiAtCXUzMiB4aW5fY291bnQ7 Cj4gLQlzdHJ1Y3QgZHB1X3JvdF92YmlmX2NmZyB2YmlmX2NmZ1tNQVhfQkxPQ0tTXTsKPiAtfTsK PiAtCj4gLS8qKgo+ICAgKiBzdHJ1Y3QgZHB1X3ZiaWZfZHluYW1pY19vdF9jZmcgLSBkeW5hbWlj IE9UIHNldHRpbmcKPiAgICogQHBwcyAgICAgICAgICAgICAgICBwaXhlbCBwZXIgc2Vjb25kcwo+ ICAgKiBAb3RfbGltaXQgICAgICAgICAgIE9UIGxpbWl0IHRvIHVzZSB1cCB0byBzcGVjaWZpZWQg cGl4ZWwgcGVyIHNlY29uZAo+IEBAIC05MDksOCArODU3LDYgQEAgc3RydWN0IGRwdV9wZXJmX2Nm ZyB7Cj4gICAqIEBoYXNfY2RwICAgICAgICAgICAgQ2xpZW50IGRyaXZlbiBwcmVmZXRjaCBmZWF0 dXJlIHN0YXR1cwo+ICAgKiBAaGFzX3diX3Vid2MgICAgICAgIFVCV0MgZmVhdHVyZSBzdXBwb3J0 ZWQgb24gV0IKPiAgICogQHVid2NfdmVyc2lvbiAgICAgICBVQldDIGZlYXR1cmUgdmVyc2lvbiAo MHgwIGZvciBub3Qgc3VwcG9ydGVkKQo+IC0gKiBAaGFzX3NidWYgICAgICAgICAgIGluZGljYXRl IGlmIHN0cmVhbSBidWZmZXIgaXMgYXZhaWxhYmxlCj4gLSAqIEBzYnVmX2hlYWRyb29tICAgICAg c3RyZWFtIGJ1ZmZlciBoZWFkcm9vbSBpbiBsaW5lcwo+ICAgKiBAaGFzX2lkbGVfcGMgICAgICAg IGluZGljYXRlIGlmIGlkbGUgcG93ZXIgY29sbGFwc2UgZmVhdHVyZSBpcyBzdXBwb3J0ZWQKPiAg ICogQGRtYV9mb3JtYXRzICAgICAgICBTdXBwb3J0ZWQgZm9ybWF0cyBmb3IgZG1hIHBpcGUKPiAg ICogQGN1cnNvcl9mb3JtYXRzICAgICBTdXBwb3J0ZWQgZm9ybWF0cyBmb3IgY3Vyc29yIHBpcGUK PiBAQCAtOTM0LDggKzg4MCw2IEBAIHN0cnVjdCBkcHVfbWRzc19jZmcgewo+ICAJYm9vbCBoYXNf ZGltX2xheWVyOwo+ICAJYm9vbCBoYXNfd2JfdWJ3YzsKPiAgCXUzMiB1YndjX3ZlcnNpb247Cj4g LQlib29sIGhhc19zYnVmOwo+IC0JdTMyIHNidWZfaGVhZHJvb207Cj4gIAlib29sIGhhc19pZGxl X3BjOwo+ICAJdTMyIHZiaWZfcW9zX25sdmw7Cj4gIAl1MzIgdHNfcHJlZmlsbF9yZXY7Cj4gQEAg LTk3OCw5ICs5MjIsNiBAQCBzdHJ1Y3QgZHB1X21kc3NfY2ZnIHsKPiAgCXUzMiB3Yl9jb3VudDsK PiAgCXN0cnVjdCBkcHVfd2JfY2ZnIHdiW01BWF9CTE9DS1NdOwo+ICAKPiAtCXUzMiByb3RfY291 bnQ7Cj4gLQlzdHJ1Y3QgZHB1X3JvdF9jZmcgcm90W01BWF9CTE9DS1NdOwo+IC0KPiAgCXUzMiB2 YmlmX2NvdW50Owo+ICAJc3RydWN0IGRwdV92YmlmX2NmZyB2YmlmW01BWF9CTE9DS1NdOwo+ICAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2N0bC5j IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2N0bC5jCj4gaW5kZXggNDRl ZjczNy4uNjkyMmQ4YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfY3RsLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfY3RsLmMKPiBAQCAtMzEsMTIgKzMxLDggQEAKPiAgI2RlZmluZSAgIENUTF9QUkVQQVJFICAg ICAgICAgICAgICAgICAgIDB4MGQwCj4gICNkZWZpbmUgICBDVExfU1dfUkVTRVQgICAgICAgICAg ICAgICAgICAweDAzMAo+ICAjZGVmaW5lICAgQ1RMX0xBWUVSX0VYVE5fT0ZGU0VUICAgICAgICAg MHg0MAo+IC0jZGVmaW5lICAgQ1RMX1JPVF9UT1AgICAgICAgICAgICAgICAgICAgMHgwQzAKPiAt I2RlZmluZSAgIENUTF9ST1RfRkxVU0ggICAgICAgICAgICAgICAgIDB4MEM0Cj4gLSNkZWZpbmUg ICBDVExfUk9UX1NUQVJUICAgICAgICAgICAgICAgICAweDBDQwo+ICAKPiAgI2RlZmluZSBDVExf TUlYRVJfQk9SREVSX09VVCAgICAgICAgICAgIEJJVCgyNCkKPiAtI2RlZmluZSBDVExfRkxVU0hf TUFTS19ST1QgICAgICAgICAgICAgIEJJVCgyNykKPiAgI2RlZmluZSBDVExfRkxVU0hfTUFTS19D VEwgICAgICAgICAgICAgIEJJVCgxNykKPiAgCj4gICNkZWZpbmUgRFBVX1JFR19SRVNFVF9USU1F T1VUX1VTICAgICAgICAyMDAwCj4gQEAgLTg3LDE2ICs4Myw2IEBAIHN0YXRpYyBpbmxpbmUgdm9p ZCBkcHVfaHdfY3RsX3RyaWdnZXJfcGVuZGluZyhzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4KQo+ICAJ RFBVX1JFR19XUklURSgmY3R4LT5odywgQ1RMX1BSRVBBUkUsIDB4MSk7Cj4gIH0KPiAgCj4gLXN0 YXRpYyBpbmxpbmUgdm9pZCBkcHVfaHdfY3RsX3RyaWdnZXJfcm90X3N0YXJ0KHN0cnVjdCBkcHVf aHdfY3RsICpjdHgpCj4gLXsKPiAtCS8qIFJPVCBmbHVzaCBiaXQgaXMgbGF0Y2hlZCBkdXJpbmcg Uk9UIHN0YXJ0LCBzbyBzZXQgaXQgZmlyc3QgKi8KPiAtCWlmIChDVExfRkxVU0hfTUFTS19ST1Qg JiBjdHgtPnBlbmRpbmdfZmx1c2hfbWFzaykgewo+IC0JCWN0eC0+cGVuZGluZ19mbHVzaF9tYXNr ICY9IH5DVExfRkxVU0hfTUFTS19ST1Q7Cj4gLQkJRFBVX1JFR19XUklURSgmY3R4LT5odywgQ1RM X0ZMVVNILCBDVExfRkxVU0hfTUFTS19ST1QpOwo+IC0JfQo+IC0JRFBVX1JFR19XUklURSgmY3R4 LT5odywgQ1RMX1JPVF9TVEFSVCwgQklUKDApKTsKPiAtfQo+IC0KPiAgc3RhdGljIGlubGluZSB2 b2lkIGRwdV9od19jdGxfY2xlYXJfcGVuZGluZ19mbHVzaChzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4 KQo+ICB7Cj4gIAljdHgtPnBlbmRpbmdfZmx1c2hfbWFzayA9IDB4MDsKPiBAQCAtMTI1LDEzICsx MTEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHB1X2h3X2N0bF90cmlnZ2VyX2ZsdXNoKHN0cnVj dCBkcHVfaHdfY3RsICpjdHgpCj4gIHN0YXRpYyBpbmxpbmUgdTMyIGRwdV9od19jdGxfZ2V0X2Zs dXNoX3JlZ2lzdGVyKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgpCj4gIHsKPiAgCXN0cnVjdCBkcHVf aHdfYmxrX3JlZ19tYXAgKmMgPSAmY3R4LT5odzsKPiAtCXUzMiByb3Rfb3BfbW9kZTsKPiAtCj4g LQlyb3Rfb3BfbW9kZSA9IERQVV9SRUdfUkVBRChjLCBDVExfUk9UX1RPUCkgJiAweDM7Cj4gLQo+ IC0JLyogcm90YXRlIGZsdXNoIGJpdCBpcyB1bmRlZmluZWQgaWYgb2ZmbGluZSBtb2RlLCBzbyBp Z25vcmUgaXQgKi8KPiAtCWlmIChyb3Rfb3BfbW9kZSA9PSBEUFVfQ1RMX1JPVF9PUF9NT0RFX09G RkxJTkUpCj4gLQkJcmV0dXJuIERQVV9SRUdfUkVBRChjLCBDVExfRkxVU0gpICYgfkNUTF9GTFVT SF9NQVNLX1JPVDsKPiAgCj4gIAlyZXR1cm4gRFBVX1JFR19SRUFEKGMsIENUTF9GTFVTSCk7Cj4g IH0KPiBAQCAtMjkzLDE5ICsyNzIsNiBAQCBzdGF0aWMgaW5saW5lIGludCBkcHVfaHdfY3RsX2dl dF9iaXRtYXNrX3diKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsCj4gIAlyZXR1cm4gMDsKPiAgfQo+ ICAKPiAtc3RhdGljIGlubGluZSBpbnQgZHB1X2h3X2N0bF9nZXRfYml0bWFza19yb3Qoc3RydWN0 IGRwdV9od19jdGwgKmN0eCwKPiAtCQl1MzIgKmZsdXNoYml0cywgZW51bSBkcHVfcm90IHJvdCkK PiAtewo+IC0Jc3dpdGNoIChyb3QpIHsKPiAtCWNhc2UgUk9UXzA6Cj4gLQkJKmZsdXNoYml0cyB8 PSBDVExfRkxVU0hfTUFTS19ST1Q7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCXJldHVy biAtRUlOVkFMOwo+IC0JfQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gIHN0YXRpYyBpbmxpbmUg aW50IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfY2RtKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsCj4g IAkJdTMyICpmbHVzaGJpdHMsIGVudW0gZHB1X2NkbSBjZG0pCj4gIHsKPiBAQCAtNTUyLDE3ICs1 MTgsNiBAQCBzdGF0aWMgdm9pZCBkcHVfaHdfY3RsX2ludGZfY2ZnKHN0cnVjdCBkcHVfaHdfY3Rs ICpjdHgsCj4gIAlEUFVfUkVHX1dSSVRFKGMsIENUTF9UT1AsIGludGZfY2ZnKTsKPiAgfQo+ICAK PiAtc3RhdGljIHZvaWQgZHB1X2h3X2N0bF9zZXR1cF9zYnVmX2NmZyhzdHJ1Y3QgZHB1X2h3X2N0 bCAqY3R4LAo+IC0Jc3RydWN0IGRwdV9jdGxfc2J1Zl9jZmcgKmNmZykKPiAtewo+IC0Jc3RydWN0 IGRwdV9od19ibGtfcmVnX21hcCAqYyA9ICZjdHgtPmh3Owo+IC0JdTMyIHZhbDsKPiAtCj4gLQl2 YWwgPSBjZmctPnJvdF9vcF9tb2RlICYgMHgzOwo+IC0KPiAtCURQVV9SRUdfV1JJVEUoYywgQ1RM X1JPVF9UT1AsIHZhbCk7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkIGRwdV9od19yZWdfZG1hX2Zs dXNoKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgpCj4gIHsKPiAgCXN0cnVjdCBkcHVfaHdfcmVnX2Rt YV9vcHMgKm9wcyA9IGRwdV9yZWdfZG1hX2dldF9vcHMoKTsKPiBAQCAtNTk0LDEyICs1NDksNiBA QCBzdGF0aWMgdm9pZCBfc2V0dXBfY3RsX29wcyhzdHJ1Y3QgZHB1X2h3X2N0bF9vcHMgKm9wcywK PiAgCW9wcy0+Z2V0X2JpdG1hc2tfY2RtID0gZHB1X2h3X2N0bF9nZXRfYml0bWFza19jZG07Cj4g IAlvcHMtPmdldF9iaXRtYXNrX3diID0gZHB1X2h3X2N0bF9nZXRfYml0bWFza193YjsKPiAgCW9w cy0+cmVnX2RtYV9mbHVzaCA9IGRwdV9od19yZWdfZG1hX2ZsdXNoOwo+IC0KPiAtCWlmIChjYXAg JiBCSVQoRFBVX0NUTF9TQlVGKSkgewo+IC0JCW9wcy0+Z2V0X2JpdG1hc2tfcm90ID0gZHB1X2h3 X2N0bF9nZXRfYml0bWFza19yb3Q7Cj4gLQkJb3BzLT5zZXR1cF9zYnVmX2NmZyA9IGRwdV9od19j dGxfc2V0dXBfc2J1Zl9jZmc7Cj4gLQkJb3BzLT50cmlnZ2VyX3JvdF9zdGFydCA9IGRwdV9od19j dGxfdHJpZ2dlcl9yb3Rfc3RhcnQ7Cj4gLQl9Cj4gIH07Cj4gIAo+ICBzdGF0aWMgc3RydWN0IGRw dV9od19ibGtfb3BzIGRwdV9od19vcHMgPSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9od19jdGwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19jdGwuaAo+IGluZGV4IDQ3YTZhMGIuLmQzNDM1YmUgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2N0bC5oCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2N0bC5oCj4gQEAgLTI5LDIwICsyOSw2IEBA IGVudW0gZHB1X2N0bF9tb2RlX3NlbCB7Cj4gIAlEUFVfQ1RMX01PREVfU0VMX0NNRAo+ICB9Owo+ ICAKPiAtLyoqCj4gLSAqIGRwdV9jdGxfcm90X29wX21vZGUgLSBpbmxpbmUgcm90YXRpb24gbW9k ZQo+IC0gKiBEUFVfQ1RMX1JPVF9PUF9NT0RFX09GRkxJTkU6IG9mZmxpbmUgcm90YXRpb24KPiAt ICogRFBVX0NUTF9ST1RfT1BfTU9ERV9SRVNFUlZFRDogcmVzZXJ2ZWQKPiAtICogRFBVX0NUTF9S T1RfT1BfTU9ERV9JTkxJTkVfU1lOQzogaW5saW5lIHJvdGF0aW9uIHN5bmNocm9ub3VzIG1vZGUK PiAtICogRFBVX0NUTF9ST1RfT1BfTU9ERV9JTkxJTkVfQVNZTkM6IGlubGluZSByb3RhdGlvbiBh c3luY2hyb25vdXMgbW9kZQo+IC0gKi8KPiAtZW51bSBkcHVfY3RsX3JvdF9vcF9tb2RlIHsKPiAt CURQVV9DVExfUk9UX09QX01PREVfT0ZGTElORSwKPiAtCURQVV9DVExfUk9UX09QX01PREVfUkVT RVJWRUQsCj4gLQlEUFVfQ1RMX1JPVF9PUF9NT0RFX0lOTElORV9TWU5DLAo+IC0JRFBVX0NUTF9S T1RfT1BfTU9ERV9JTkxJTkVfQVNZTkMsCj4gLX07Cj4gLQo+ICBzdHJ1Y3QgZHB1X2h3X2N0bDsK PiAgLyoqCj4gICAqIHN0cnVjdCBkcHVfaHdfc3RhZ2VfY2ZnIC0gYmxlbmRpbmcgc3RhZ2UgY2Zn Cj4gQEAgLTcyLDE0ICs1OCw2IEBAIHN0cnVjdCBkcHVfaHdfaW50Zl9jZmcgewo+ICB9Owo+ICAK PiAgLyoqCj4gLSAqIHN0cnVjdCBkcHVfY3RsX3NidWZfY2ZnIC0gY29udHJvbCBmb3Igc3RyZWFt IGJ1ZmZlciBjb25maWd1cmF0aW9uCj4gLSAqIEByb3Rfb3BfbW9kZTogcm90YXRvciBvcGVyYXRp b24gbW9kZQo+IC0gKi8KPiAtc3RydWN0IGRwdV9jdGxfc2J1Zl9jZmcgewo+IC0JZW51bSBkcHVf Y3RsX3JvdF9vcF9tb2RlIHJvdF9vcF9tb2RlOwo+IC19Owo+IC0KPiAtLyoqCj4gICAqIHN0cnVj dCBkcHVfaHdfY3RsX29wcyAtIEludGVyZmFjZSB0byB0aGUgd2IgSHcgZHJpdmVyIGZ1bmN0aW9u cwo+ICAgKiBBc3N1bXB0aW9uIGlzIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBhZnRl ciBjbG9ja3MgYXJlIGVuYWJsZWQKPiAgICovCj4gQEAgLTEwMCwxMyArNzgsNiBAQCBzdHJ1Y3Qg ZHB1X2h3X2N0bF9vcHMgewo+ICAJdm9pZCAoKnRyaWdnZXJfcGVuZGluZykoc3RydWN0IGRwdV9o d19jdGwgKmN0eCk7Cj4gIAo+ICAJLyoqCj4gLQkgKiBraWNrb2ZmIHJvdGF0b3Igb3BlcmF0aW9u IGZvciBTdyBjb250cm9sbGVkIGludGVyZmFjZXMKPiAtCSAqIERTSSBjbWQgbW9kZSBhbmQgV0Ig aW50ZXJmYWNlIGFyZSBTVyBjb250cm9sbGVkCj4gLQkgKiBAY3R4ICAgICAgIDogY3RsIHBhdGgg Y3R4IHBvaW50ZXIKPiAtCSAqLwo+IC0Jdm9pZCAoKnRyaWdnZXJfcm90X3N0YXJ0KShzdHJ1Y3Qg ZHB1X2h3X2N0bCAqY3R4KTsKPiAtCj4gLQkvKioKPiAgCSAqIENsZWFyIHRoZSB2YWx1ZSBvZiB0 aGUgY2FjaGVkIHBlbmRpbmdfZmx1c2hfbWFzawo+ICAJICogTm8gZWZmZWN0IG9uIGhhcmR3YXJl Cj4gIAkgKiBAY3R4ICAgICAgIDogY3RsIHBhdGggY3R4IHBvaW50ZXIKPiBAQCAtMTg5LDEwICsx NjAsNiBAQCBzdHJ1Y3QgZHB1X2h3X2N0bF9vcHMgewo+ICAJCXUzMiAqZmx1c2hiaXRzLAo+ICAJ CWVudW0gZHB1X3diIGJsayk7Cj4gIAo+IC0JaW50ICgqZ2V0X2JpdG1hc2tfcm90KShzdHJ1Y3Qg ZHB1X2h3X2N0bCAqY3R4LAo+IC0JCXUzMiAqZmx1c2hiaXRzLAo+IC0JCWVudW0gZHB1X3JvdCBi bGspOwo+IC0KPiAgCS8qKgo+ICAJICogU2V0IGFsbCBibGVuZCBzdGFnZXMgdG8gZGlzYWJsZWQK PiAgCSAqIEBjdHggICAgICAgOiBjdGwgcGF0aCBjdHggcG9pbnRlcgo+IEBAIC0yMDgsOSArMTc1 LDYgQEAgc3RydWN0IGRwdV9od19jdGxfb3BzIHsKPiAgCXZvaWQgKCpzZXR1cF9ibGVuZHN0YWdl KShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAo+ICAJCWVudW0gZHB1X2xtIGxtLCBzdHJ1Y3QgZHB1 X2h3X3N0YWdlX2NmZyAqY2ZnKTsKPiAgCj4gLQl2b2lkICgqc2V0dXBfc2J1Zl9jZmcpKHN0cnVj dCBkcHVfaHdfY3RsICpjdHgsCj4gLQkJc3RydWN0IGRwdV9jdGxfc2J1Zl9jZmcgKmNmZyk7Cj4g LQo+ICAJLyoqCj4gIAkgKiBGbHVzaCB0aGUgcmVnIGRtYSBieSBzZW5kaW5nIGxhc3QgY29tbWFu ZC4KPiAgCSAqIEBjdHggICAgICAgOiBjdGwgcGF0aCBjdHggcG9pbnRlcgo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5jIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGYuYwo+IGluZGV4IDgzMDIzNjAuLjczODZk NDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2lu dGYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19pbnRmLmMK PiBAQCAtMjMwLDI1ICsyMzAsNiBAQCBzdGF0aWMgdm9pZCBkcHVfaHdfaW50Zl9zZXR1cF9wcmdf ZmV0Y2goCj4gIAlEUFVfUkVHX1dSSVRFKGMsIElOVEZfQ09ORklHLCBmZXRjaF9lbmFibGUpOwo+ ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBkcHVfaHdfaW50Zl9zZXR1cF9yb3Rfc3RhcnQoCj4gLQkJ c3RydWN0IGRwdV9od19pbnRmICppbnRmLAo+IC0JCWNvbnN0IHN0cnVjdCBpbnRmX3Byb2dfZmV0 Y2ggKmZldGNoKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjID0gJmludGYt Pmh3Owo+IC0JaW50IGZldGNoX2VuYWJsZTsKPiAtCj4gLQlmZXRjaF9lbmFibGUgPSBEUFVfUkVH X1JFQUQoYywgSU5URl9DT05GSUcpOwo+IC0JaWYgKGZldGNoLT5lbmFibGUpIHsKPiAtCQlmZXRj aF9lbmFibGUgfD0gQklUKDE5KTsKPiAtCQlEUFVfUkVHX1dSSVRFKGMsIElOVEZfUFJPR19ST1Rf U1RBUlQsCj4gLQkJCQlmZXRjaC0+ZmV0Y2hfc3RhcnQpOwo+IC0JfSBlbHNlIHsKPiAtCQlmZXRj aF9lbmFibGUgJj0gfkJJVCgxOSk7Cj4gLQl9Cj4gLQo+IC0JRFBVX1JFR19XUklURShjLCBJTlRG X0NPTkZJRywgZmV0Y2hfZW5hYmxlKTsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQgZHB1X2h3X2lu dGZfZ2V0X3N0YXR1cygKPiAgCQlzdHJ1Y3QgZHB1X2h3X2ludGYgKmludGYsCj4gIAkJc3RydWN0 IGludGZfc3RhdHVzICpzKQo+IEBAIC0zMTEsOCArMjkyLDYgQEAgc3RhdGljIHZvaWQgX3NldHVw X2ludGZfb3BzKHN0cnVjdCBkcHVfaHdfaW50Zl9vcHMgKm9wcywKPiAgCW9wcy0+c2V0dXBfbWlz ciA9IGRwdV9od19pbnRmX3NldHVwX21pc3I7Cj4gIAlvcHMtPmNvbGxlY3RfbWlzciA9IGRwdV9o d19pbnRmX2NvbGxlY3RfbWlzcjsKPiAgCW9wcy0+Z2V0X2xpbmVfY291bnQgPSBkcHVfaHdfaW50 Zl9nZXRfbGluZV9jb3VudDsKPiAtCWlmIChjYXAgJiBCSVQoRFBVX0lOVEZfUk9UX1NUQVJUKSkK PiAtCQlvcHMtPnNldHVwX3JvdF9zdGFydCA9IGRwdV9od19pbnRmX3NldHVwX3JvdF9zdGFydDsK PiAgfQo+ICAKPiAgc3RhdGljIHN0cnVjdCBkcHVfaHdfYmxrX29wcyBkcHVfaHdfb3BzID0gewo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5o IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGYuaAo+IGluZGV4IDlj NTRhMTkuLmE3OWQ3MzUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X2ludGYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19pbnRmLmgKPiBAQCAtNTcsNyArNTcsNiBAQCBzdHJ1Y3QgaW50Zl9zdGF0dXMgewo+ICAg KiAgQXNzdW1wdGlvbiBpcyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgY2xv Y2tzIGFyZSBlbmFibGVkCj4gICAqIEAgc2V0dXBfdGltaW5nX2dlbiA6IHByb2dyYW1zIHRoZSB0 aW1pbmcgZW5naW5lCj4gICAqIEAgc2V0dXBfcHJvZ19mZXRjaCA6IGVuYWJsZXMvZGlzYWJsZXMg dGhlIHByb2dyYW1tYWJsZSBmZXRjaCBsb2dpYwo+IC0gKiBAIHNldHVwX3JvdF9zdGFydCAgOiBl bmFibGVzL2Rpc2FibGVzIHRoZSByb3RhdG9yIHN0YXJ0IHRyaWdnZXIKPiAgICogQCBlbmFibGVf dGltaW5nOiBlbmFibGUvZGlzYWJsZSB0aW1pbmcgZW5naW5lCj4gICAqIEAgZ2V0X3N0YXR1czog cmV0dXJucyBpZiB0aW1pbmcgZW5naW5lIGlzIGVuYWJsZWQgb3Igbm90Cj4gICAqIEAgc2V0dXBf bWlzcjogZW5hYmxlcy9kaXNhYmxlcyBNSVNSIGluIEhXIHJlZ2lzdGVyCj4gQEAgLTcyLDkgKzcx LDYgQEAgc3RydWN0IGRwdV9od19pbnRmX29wcyB7Cj4gIAl2b2lkICgqc2V0dXBfcHJnX2ZldGNo KShzdHJ1Y3QgZHB1X2h3X2ludGYgKmludGYsCj4gIAkJCWNvbnN0IHN0cnVjdCBpbnRmX3Byb2df ZmV0Y2ggKmZldGNoKTsKPiAgCj4gLQl2b2lkICgqc2V0dXBfcm90X3N0YXJ0KShzdHJ1Y3QgZHB1 X2h3X2ludGYgKmludGYsCj4gLQkJCWNvbnN0IHN0cnVjdCBpbnRmX3Byb2dfZmV0Y2ggKmZldGNo KTsKPiAtCj4gIAl2b2lkICgqZW5hYmxlX3RpbWluZykoc3RydWN0IGRwdV9od19pbnRmICppbnRm LAo+ICAJCQl1OCBlbmFibGUpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X21kc3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19tZHNzLmgKPiBpbmRleCAwOTRhNDE4Li41ZWRlMmI1IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19tZHNzLmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbWRzcy5oCj4gQEAgLTEwNyw3ICsxMDcsNiBA QCBlbnVtIGRwdV9od19ibGtfdHlwZSB7Cj4gIAlEUFVfSFdfQkxLX0lOVEYsCj4gIAlEUFVfSFdf QkxLX1dCLAo+ICAJRFBVX0hXX0JMS19EU0MsCj4gLQlEUFVfSFdfQkxLX1JPVCwKPiAgCURQVV9I V19CTEtfTUFYLAo+ICB9Owo+ICAKPiBAQCAtMjk5LDE4ICsyOTgsNiBAQCBlbnVtIGRwdV9pb21t dV9kb21haW4gewo+ICAJRFBVX0lPTU1VX0RPTUFJTl9NQVgKPiAgfTsKPiAgCj4gLWVudW0gZHB1 X3JvdCB7Cj4gLQlST1RfMCA9IDEsCj4gLQlST1RfTUFYCj4gLX07Cj4gLQo+IC1lbnVtIGRwdV9p bmxpbmVfcm90IHsKPiAtCUlOTElORV9ST1RfTk9ORSwKPiAtCUlOTElORV9ST1QwX1NTUFAsCj4g LQlJTkxJTkVfUk9UMF9XQiwKPiAtCUlOTElORV9ST1RfTUFYCj4gLX07Cj4gLQo+ICAvKioKPiAg ICogRFBVIEhXLENvbXBvbmVudCBvcmRlciBjb2xvciBtYXAKPiAgICovCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yb3QuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yb3QuYwo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IGIyMGE2NDAuLjAwMDAwMDAKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaHdfcm90LmMKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsOTYxICswLDAgQEAK PiAtLyogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLgo+IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+IC0gKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQK PiAtICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+IC0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+IC0gKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gLSAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gLSAqLwo+IC0K PiAtI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybTolczolZF0gIiBmbXQsIF9fZnVuY19fLCBfX0xJ TkVfXwo+IC0KPiAtI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KPiAtCj4gLSNpbmNsdWRlICJkcHVfa21zLmgiCj4gLSNpbmNsdWRl ICJkcHVfaHdfbWRzcy5oIgo+IC0jaW5jbHVkZSAiZHB1X2h3aW8uaCIKPiAtI2luY2x1ZGUgImRw dV9od19jYXRhbG9nLmgiCj4gLSNpbmNsdWRlICJkcHVfaHdfcm90LmgiCj4gLSNpbmNsdWRlICJk cHVfZm9ybWF0cy5oIgo+IC0jaW5jbHVkZSAiZHB1X3JvdGF0b3JfaW5saW5lLmgiCj4gLQo+IC0j ZGVmaW5lIERQVV9NT0RJRkxFUihfbW9kaWZpZXJfKSAoKF9tb2RpZmllcl8pICYgMHgwMGZmZmZm ZmZmZmZmZmZmVUxMKQo+IC0jZGVmaW5lIERQVV9NT0RJRklFUl9JU19USUxFKF9tb2RpZmllcl8p IFwKPiAtCURQVV9NT0RJRkxFUigoX21vZGlmaWVyXykgJiBEUk1fRk9STUFUX01PRF9RQ09NX1RJ TEUpCj4gLSNkZWZpbmUgRFBVX01PRElGSUVSX0lTX1VCV0MoX21vZGlmaWVyXykgXAo+IC0JRFBV X01PRElGTEVSKChfbW9kaWZpZXJfKSAmIERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NFRCkK PiAtI2RlZmluZSBEUFVfTU9ESUZJRVJfSVNfMTBCKF9tb2RpZmllcl8pIFwKPiAtCURQVV9NT0RJ RkxFUigoX21vZGlmaWVyXykgJiBEUk1fRk9STUFUX01PRF9RQ09NX0RYKQo+IC0jZGVmaW5lIERQ VV9NT0RJRklFUl9JU19USUdIVChfbW9kaWZpZXJfKSBcCj4gLQlEUFVfTU9ESUZMRVIoKF9tb2Rp Zmllcl8pICYgRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUdIVCkKPiAtCj4gLS8qKgo+IC0gKiBfcm90 X29mZnNldCAtIHVwZGF0ZSByZWdpc3RlciBtYXAgb2YgdGhlIGdpdmVuIHJvdGF0b3IgaW5zdGFu Y2UKPiAtICogQHJvdDogcm90YXRvciBpZGVudGlmaWVyCj4gLSAqIEBtOiBQb2ludGVyIHRvIG1k c3MgY2F0YWxvZwo+IC0gKiBAYWRkcjogaS9vIGFkZHJlc3MgbWFwcGluZwo+IC0gKiBAYjogUG9p bnRlciB0byByZWdpc3RlciBibG9jayBtYXBwaW5nIHN0cnVjdHVyZQo+IC0gKiByZXR1cm46IFBv aW50ZXIgdG8gcm90YXRvciBjb25maWd1cmF0aW9uIG9mIHRoZSBnaXZlbiBpbnN0YW5jZQo+IC0g Ki8KPiAtc3RhdGljIHN0cnVjdCBkcHVfcm90X2NmZyAqX3JvdF9vZmZzZXQoZW51bSBkcHVfcm90 IHJvdCwKPiAtCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptLAo+IC0JCXZvaWQgX19pb21lbSAqYWRk ciwKPiAtCQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpiKQo+IC17Cj4gLQlpbnQgaTsKPiAt Cj4gLQlmb3IgKGkgPSAwOyBpIDwgbS0+cm90X2NvdW50OyBpKyspIHsKPiAtCQlpZiAocm90ID09 IG0tPnJvdFtpXS5pZCkgewo+IC0JCQliLT5iYXNlX29mZiA9IGFkZHI7Cj4gLQkJCWItPmJsa19v ZmYgPSBtLT5yb3RbaV0uYmFzZTsKPiAtCQkJYi0+aHd2ZXJzaW9uID0gbS0+aHd2ZXJzaW9uOwo+ IC0JCQliLT5sb2dfbWFzayA9IERQVV9EQkdfTUFTS19ST1Q7Cj4gLQkJCXJldHVybiAmbS0+cm90 W2ldOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiAtfQo+ IC0KPiAtLyoqCj4gLSAqIF9kcHVfaHdfcm90X3JlZ19kdW1wIC0gcGVyZm9ybSByZWdpc3RlciBk dW1wCj4gLSAqIEBwdHI6IHByaXZhdGUgcG9pbnRlciB0byByb3RhdG9yIHBsYXRmb3JtIGRldmlj ZQo+IC0gKiByZXR1cm46IE5vbmUKPiAtICovCj4gLXN0YXRpYyB2b2lkIF9kcHVfaHdfcm90X3Jl Z19kdW1wKHZvaWQgKnB0cikKPiAtewo+IC0JZHB1X3JvdGF0b3JfaW5saW5lX3JlZ19kdW1wKChz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopIHB0cik7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBkcHVf aHdfcm90X3N0YXJ0IC0gc3RhcnQgcm90YXRvciBiZWZvcmUgYW55IGNvbW1pdAo+IC0gKiBAaHc6 IFBvaW50ZXIgdG8gcm90YXRvciBoYXJkd2FyZSBkcml2ZXIKPiAtICogcmV0dXJuOiAwIGlmIHN1 Y2Nlc3M7IGVycm9yIGNvZGUgb3RoZXJ3aXNlCj4gLSAqLwo+IC1zdGF0aWMgaW50IGRwdV9od19y b3Rfc3RhcnQoc3RydWN0IGRwdV9od19yb3QgKmh3KQo+IC17Cj4gLQlzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2Owo+IC0JaW50IHJjOwo+IC0KPiAtCWlmICghaHcgfHwgIWh3LT5jYXBzIHx8 ICFody0+Y2Fwcy0+cGRldikgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbWV0ZXJzXG4i KTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlwZGV2ID0gaHctPmNhcHMtPnBk ZXY7Cj4gLQo+IC0JcmMgPSBkcHVfZGJnX3JlZ19yZWdpc3Rlcl9jYihody0+bmFtZSwgX2RwdV9o d19yb3RfcmVnX2R1bXAsIHBkZXYpOwo+IC0JaWYgKHJjKQo+IC0JCURQVV9FUlJPUigiZmFpbGVk IHRvIHJlZ2lzdGVyIGRlYnVnIGR1bXAgJWRcbiIsIHJjKTsKPiAtCj4gLQlody0+cm90X2N0eCA9 IGRwdV9yb3RhdG9yX2lubGluZV9vcGVuKHBkZXYpOwo+IC0JaWYgKElTX0VSUl9PUl9OVUxMKGh3 LT5yb3RfY3R4KSkgewo+IC0JCXJjID0gUFRSX0VSUihody0+cm90X2N0eCk7Cj4gLQkJaHctPnJv dF9jdHggPSBOVUxMOwo+IC0JCXJldHVybiByYzsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAt fQo+IC0KPiAtLyoqCj4gLSAqIGRwdV9od19yb3Rfc3RvcCAtIHN0b3Agcm90YXRvciBhZnRlciBm aW5hbCBjb21taXQKPiAtICogQGh3OiBQb2ludGVyIHRvIHJvdGF0b3IgaGFyZHdhcmUgZHJpdmVy Cj4gLSAqIHJldHVybjogbm9uZQo+IC0gKi8KPiAtc3RhdGljIHZvaWQgZHB1X2h3X3JvdF9zdG9w KHN0cnVjdCBkcHVfaHdfcm90ICpodykKPiAtewo+IC0JaWYgKCFodyB8fCAhaHctPmNhcHMgfHwg IWh3LT5jYXBzLT5wZGV2KSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtZXRlclxuIik7 Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCWRwdV9yb3RhdG9yX2lubGluZV9yZWxlYXNlKGh3 LT5yb3RfY3R4KTsKPiAtCWh3LT5yb3RfY3R4ID0gTlVMTDsKPiAtCj4gLQlkcHVfZGJnX3JlZ191 bnJlZ2lzdGVyX2NiKGh3LT5uYW1lLCBfZHB1X2h3X3JvdF9yZWdfZHVtcCwKPiAtCQkJaHctPmNh cHMtPnBkZXYpOwo+IC19Cj4gLQo+IC0vKioKPiAtICogZHB1X2h3X3JvdF90b192NGwyX3BpeGZt dCAtIGNvbnZlcnQgZHJtIHBpeGVsIGZvcm1hdCB0byB2NGwyIHBpeGVsIGZvcm1hdAo+IC0gKiBA ZHJtX3BpeGZtdDogZHJtIGZvdXJjYyBwaXhlbCBmb3JtYXQKPiAtICogQGRybV9tb2RpZmllcjog ZHJtIHBpeGVsIGZvcm1hdCBtb2RpZmllcgo+IC0gKiBAcGl4Zm10OiBQb2ludGVyIHRvIHY0bDIg Zm91cmNjIHBpeGVsIGZvcm1hdCAob3V0cHV0KQo+IC0gKiByZXR1cm46IDAgaWYgc3VjY2Vzczsg ZXJyb3IgY29kZSBvdGhlcndpc2UKPiAtICovCj4gLXN0YXRpYyBpbnQgZHB1X2h3X3JvdF90b192 NGwyX3BpeGZtdCh1MzIgZHJtX3BpeGZtdCwgdTY0IGRybV9tb2RpZmllciwKPiAtCQl1MzIgKnBp eGZtdCkKPiAtewo+IC0JdTMyIHJjID0gMDsKPiAtCj4gLQlpZiAoIXBpeGZtdCkKPiAtCQlyZXR1 cm4gLUVJTlZBTDsKPiAtCj4gLQlzd2l0Y2ggKGRybV9waXhmbXQpIHsKPiAtCWNhc2UgRFJNX0ZP Uk1BVF9CR1I1NjU6Cj4gLQkJaWYgKERQVV9NT0RJRklFUl9JU19VQldDKGRybV9tb2RpZmllcikp Cj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9SR0JfNTY1X1VCV0M7Cj4gLQkJZWxzZQo+IC0J CQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfUkdCXzU2NTsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFJN X0ZPUk1BVF9CR1JBODg4ODoKPiAtCQlpZiAoRFBVX01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlm aWVyKSkKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0FSR0JfODg4OF9USUxFOwo+IC0JCWVs c2UKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0FSR0JfODg4ODsKPiAtCQlicmVhazsKPiAt CWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4ODoKPiAtCQlpZiAoRFBVX01PRElGSUVSX0lTX1RJTEUo ZHJtX21vZGlmaWVyKSkKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1hSR0JfODg4OF9USUxF Owo+IC0JCWVsc2UKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1hSR0JfODg4ODsKPiAtCQli cmVhazsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKPiAtCQlpZiAoRFBVX01PRElGSUVS X0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0FCR1Jf ODg4OF9USUxFOwo+IC0JCWVsc2UKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0FCR1JfODg4 ODsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9SR0JYODg4ODoKPiAtCQlpZiAoRFBV X01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhf Rk1UX1hCR1JfODg4OF9USUxFOwo+IC0JCWVsc2UKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1U X1hCR1JfODg4ODsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKPiAt CQlpZiAoRFBVX01PRElGSUVSX0lTX1VCV0MoZHJtX21vZGlmaWVyKSkKPiAtCQkJKnBpeGZtdCA9 IERQVV9QSVhfRk1UX1JHQkFfODg4OF9VQldDOwo+IC0JCWVsc2UgaWYgKERQVV9NT0RJRklFUl9J U19USUxFKGRybV9tb2RpZmllcikpCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9SR0JBXzg4 ODhfVElMRTsKPiAtCQllbHNlCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9SR0JBXzg4ODg7 Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Cj4gLQkJaWYgKERQVV9N T0RJRklFUl9JU19VQldDKGRybV9tb2RpZmllcikpCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZN VF9SR0JYXzg4ODhfVUJXQzsKPiAtCQllbHNlIGlmIChEUFVfTU9ESUZJRVJfSVNfVElMRShkcm1f bW9kaWZpZXIpKQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfUkdCWF84ODg4X1RJTEU7Cj4g LQkJZWxzZQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfUkdCWF84ODg4Owo+IC0JCWJyZWFr Owo+IC0JY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4Ogo+IC0JCWlmIChEUFVfTU9ESUZJRVJfSVNf VElMRShkcm1fbW9kaWZpZXIpKQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfQkdSQV84ODg4 X1RJTEU7Cj4gLQkJZWxzZQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfQkdSQV84ODg4Owo+ IC0JCWJyZWFrOwo+IC0JY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4Ogo+IC0JCWlmIChEUFVfTU9E SUZJRVJfSVNfVElMRShkcm1fbW9kaWZpZXIpKQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRf QkdSWF84ODg4X1RJTEU7Cj4gLQkJZWxzZQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfQkdS WF84ODg4Owo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUk1fRk9STUFUX05WMTI6Cj4gLQkJaWYgKERQ VV9NT0RJRklFUl9JU19VQldDKGRybV9tb2RpZmllcikpIHsKPiAtCQkJaWYgKERQVV9NT0RJRklF Ul9JU18xMEIoZHJtX21vZGlmaWVyKSkgewo+IC0JCQkJaWYgKERQVV9NT0RJRklFUl9JU19USUdI VChkcm1fbW9kaWZpZXIpKQo+IC0JCQkJCSpwaXhmbXQgPQo+IC0JCQkJCURQVV9QSVhfRk1UX1lf Q0JDUl9IMlYyX1RQMTBfVUJXQzsKPiAtCQkJCWVsc2UKPiAtCQkJCQkqcGl4Zm10ID0KPiAtCQkJ CQlEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9QMDEwX1VCV0M7Cj4gLQkJCX0gZWxzZSB7Cj4gLQkJ CQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjJfVUJXQzsKPiAtCQkJfQo+IC0JCX0g ZWxzZSBpZiAoRFBVX01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkgewo+IC0JCQlpZiAo RFBVX01PRElGSUVSX0lTXzEwQihkcm1fbW9kaWZpZXIpKSB7Cj4gLQkJCQlpZiAoRFBVX01PRElG SUVSX0lTX1RJR0hUKGRybV9tb2RpZmllcikpCj4gLQkJCQkJKnBpeGZtdCA9Cj4gLQkJCQkJRFBV X1BJWF9GTVRfWV9DQkNSX0gyVjJfVFAxMDsKPiAtCQkJCWVsc2UKPiAtCQkJCQkqcGl4Zm10ID0K PiAtCQkJCQlEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9QMDEwX1RJTEU7Cj4gLQkJCX0gZWxzZSB7 Cj4gLQkJCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjJfVElMRTsKPiAtCQkJfQo+ IC0JCX0gZWxzZSB7Cj4gLQkJCWlmIChEUFVfTU9ESUZJRVJfSVNfMTBCKGRybV9tb2RpZmllcikp IHsKPiAtCQkJCWlmIChEUFVfTU9ESUZJRVJfSVNfVElHSFQoZHJtX21vZGlmaWVyKSkKPiAtCQkJ CQkqcGl4Zm10ID0KPiAtCQkJCQlEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9UUDEwOwo+IC0JCQkJ ZWxzZQo+IC0JCQkJCSpwaXhmbXQgPQo+IC0JCQkJCURQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyX1Aw MTA7Cj4gLQkJCX0gZWxzZSB7Cj4gLQkJCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfWV9DQkNSX0gy VjI7Cj4gLQkJCX0KPiAtCQl9Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9GT1JNQVRfTlYyMToK PiAtCQlpZiAoRFBVX01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKPiAtCQkJKnBpeGZt dCA9IERQVV9QSVhfRk1UX1lfQ1JDQl9IMlYyX1RJTEU7Cj4gLQkJZWxzZQo+IC0JCQkqcGl4Zm10 ID0gRFBVX1BJWF9GTVRfWV9DUkNCX0gyVjI7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9GT1JN QVRfQkdSQTEwMTAxMDI6Cj4gLQkJaWYgKERQVV9NT0RJRklFUl9JU19USUxFKGRybV9tb2RpZmll cikpCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9BUkdCXzIxMDEwMTBfVElMRTsKPiAtCQll bHNlCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9BUkdCXzIxMDEwMTA7Cj4gLQkJYnJlYWs7 Cj4gLQljYXNlIERSTV9GT1JNQVRfQkdSWDEwMTAxMDI6Cj4gLQkJaWYgKERQVV9NT0RJRklFUl9J U19USUxFKGRybV9tb2RpZmllcikpCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9YUkdCXzIx MDEwMTBfVElMRTsKPiAtCQllbHNlCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9YUkdCXzIx MDEwMTA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9GT1JNQVRfUkdCQTEwMTAxMDI6Cj4gLQkJ aWYgKERQVV9NT0RJRklFUl9JU19USUxFKGRybV9tb2RpZmllcikpCj4gLQkJCSpwaXhmbXQgPSBE UFVfUElYX0ZNVF9BQkdSXzIxMDEwMTBfVElMRTsKPiAtCQllbHNlCj4gLQkJCSpwaXhmbXQgPSBE UFVfUElYX0ZNVF9BQkdSXzIxMDEwMTA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9GT1JNQVRf UkdCWDEwMTAxMDI6Cj4gLQkJaWYgKERQVV9NT0RJRklFUl9JU19USUxFKGRybV9tb2RpZmllcikp Cj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9YQkdSXzIxMDEwMTBfVElMRTsKPiAtCQllbHNl Cj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9YQkdSXzIxMDEwMTA7Cj4gLQkJYnJlYWs7Cj4g LQljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6Cj4gLQkJaWYgKERQVV9NT0RJRklFUl9JU19U SUxFKGRybV9tb2RpZmllcikpCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9CR1JBXzEwMTAx MDJfVElMRTsKPiAtCQllbHNlCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9CR1JBXzEwMTAx MDI7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6Cj4gLQkJaWYg KERQVV9NT0RJRklFUl9JU19USUxFKGRybV9tb2RpZmllcikpCj4gLQkJCSpwaXhmbXQgPSBEUFVf UElYX0ZNVF9CR1JYXzEwMTAxMDJfVElMRTsKPiAtCQllbHNlCj4gLQkJCSpwaXhmbXQgPSBEUFVf UElYX0ZNVF9CR1JYXzEwMTAxMDI7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9GT1JNQVRfQUJH UjIxMDEwMTA6Cj4gLQkJaWYgKERQVV9NT0RJRklFUl9JU19VQldDKGRybV9tb2RpZmllcikpCj4g LQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9SR0JBXzEwMTAxMDJfVUJXQzsKPiAtCQllbHNlIGlm IChEUFVfTU9ESUZJRVJfSVNfVElMRShkcm1fbW9kaWZpZXIpKQo+IC0JCQkqcGl4Zm10ID0gRFBV X1BJWF9GTVRfUkdCQV8xMDEwMTAyX1RJTEU7Cj4gLQkJZWxzZQo+IC0JCQkqcGl4Zm10ID0gRFBV X1BJWF9GTVRfUkdCQV8xMDEwMTAyOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUk1fRk9STUFUX1hC R1IyMTAxMDEwOgo+IC0JCWlmIChEUFVfTU9ESUZJRVJfSVNfVUJXQyhkcm1fbW9kaWZpZXIpKQo+ IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfUkdCWF8xMDEwMTAyX1VCV0M7Cj4gLQkJZWxzZSBp ZiAoRFBVX01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKPiAtCQkJKnBpeGZtdCA9IERQ VV9QSVhfRk1UX1JHQlhfMTAxMDEwMl9USUxFOwo+IC0JCWVsc2UKPiAtCQkJKnBpeGZtdCA9IERQ VV9QSVhfRk1UX1JHQlhfMTAxMDEwMjsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJRFBV X0VSUk9SKCJpbnZhbGlkIGRybSBwaXhlbCBmb3JtYXQgJWMlYyVjJWMvJWxseFxuIiwKPiAtCQkJ CWRybV9waXhmbXQgPj4gMCwgZHJtX3BpeGZtdCA+PiA4LAo+IC0JCQkJZHJtX3BpeGZtdCA+PiAx NiwgZHJtX3BpeGZtdCA+PiAyNCwKPiAtCQkJCWRybV9tb2RpZmllcik7Cj4gLQkJcmMgPSAtRUlO VkFMOwo+IC0JCWJyZWFrOwo+IC0JfQo+IC0KPiAtCXJldHVybiByYzsKPiAtfQo+IC0KPiAtLyoq Cj4gLSAqIGRwdV9od19yb3RfdG9fZHJtX3BpeGZtdCAtIGNvbnZlcnQgdjRsMiBwaXhlbCBmb3Jt YXQgdG8gZHJtIHBpeGVsIGZvcm1hdAo+IC0gKiBAcGl4Zm10OiB2NGwyIGZvdXJjYyBwaXhlbCBm b3JtYXQKPiAtICogQGRybV9waXhmbXQ6IFBvaW50ZXIgdG8gZHJtIGZvcnVjYyBwaXhlbCBmb3Jt YXQgKG91dHB1dCkKPiAtICogQGRybV9tb2RpZmllcjogUG9pbnRlciB0byBkcm0gcGl4ZWwgZm9y bWF0IG1vZGlmaWVyIChvdXRwdXQpCj4gLSAqIHJldHVybjogMCBpZiBzdWNjZXNzOyBlcnJvciBj b2RlIG90aGVyd2lzZQo+IC0gKi8KPiAtc3RhdGljIGludCBkcHVfaHdfcm90X3RvX2RybV9waXhm bXQodTMyIHBpeGZtdCwgdTMyICpkcm1fcGl4Zm10LAo+IC0JCXU2NCAqZHJtX21vZGlmaWVyKQo+ IC17Cj4gLQl1MzIgcmMgPSAwOwo+IC0KPiAtCXN3aXRjaCAocGl4Zm10KSB7Cj4gLQljYXNlIERQ VV9QSVhfRk1UX1JHQl81NjU6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX0JHUjU2NTsK PiAtCQkqZHJtX21vZGlmaWVyID0gMDsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFBVX1BJWF9GTVRf UkdCXzU2NV9VQldDOgo+IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9CR1I1NjU7Cj4gLQkJ KmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NFRCB8Cj4gLQkJCQlE Uk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1U X1JHQkFfODg4ODoKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfQUJHUjg4ODg7Cj4gLQkJ KmRybV9tb2RpZmllciA9IDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX1JHQlhf ODg4ODoKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfWEJHUjg4ODg7Cj4gLQkJKmRybV9t b2RpZmllciA9IDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX0JHUkFfODg4ODoK PiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfQVJHQjg4ODg7Cj4gLQkJKmRybV9tb2RpZmll ciA9IDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX0JHUlhfODg4ODoKPiAtCQkq ZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfWFJHQjg4ODg7Cj4gLQkJKmRybV9tb2RpZmllciA9IDA7 Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyX1VCV0M6Cj4gLQkJ KmRybV9waXhmbXQgPSBEUk1fRk9STUFUX05WMTI7Cj4gLQkJKmRybV9tb2RpZmllciA9IERSTV9G T1JNQVRfTU9EX1FDT01fQ09NUFJFU1NFRCB8Cj4gLQkJCQlEUk1fRk9STUFUX01PRF9RQ09NX1RJ TEU7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX1lfQ1JDQl9IMlYyOgo+IC0JCSpk cm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9OVjIxOwo+IC0JCSpkcm1fbW9kaWZpZXIgPSAwOwo+IC0J CWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9SR0JBXzg4ODhfVUJXQzoKPiAtCQkqZHJtX3Bp eGZtdCA9IERSTV9GT1JNQVRfQUJHUjg4ODg7Cj4gLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JN QVRfTU9EX1FDT01fQ09NUFJFU1NFRCB8Cj4gLQkJCQlEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7 Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX1JHQlhfODg4OF9VQldDOgo+IC0JCSpk cm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9YQkdSODg4ODsKPiAtCQkqZHJtX21vZGlmaWVyID0gRFJN X0ZPUk1BVF9NT0RfUUNPTV9DT01QUkVTU0VEIHwKPiAtCQkJCURSTV9GT1JNQVRfTU9EX1FDT01f VElMRTsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjI6Cj4gLQkJ KmRybV9waXhmbXQgPSBEUk1fRk9STUFUX05WMTI7Cj4gLQkJKmRybV9tb2RpZmllciA9IDA7Cj4g LQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX0FSR0JfODg4ODoKPiAtCQkqZHJtX3BpeGZt dCA9IERSTV9GT1JNQVRfQkdSQTg4ODg7Cj4gLQkJKmRybV9tb2RpZmllciA9IDA7Cj4gLQkJYnJl YWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX1hSR0JfODg4ODoKPiAtCQkqZHJtX3BpeGZtdCA9IERS TV9GT1JNQVRfQkdSWDg4ODg7Cj4gLQkJKmRybV9tb2RpZmllciA9IDA7Cj4gLQkJYnJlYWs7Cj4g LQljYXNlIERQVV9QSVhfRk1UX0FCR1JfODg4ODoKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JN QVRfUkdCQTg4ODg7Cj4gLQkJKmRybV9tb2RpZmllciA9IDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNl IERQVV9QSVhfRk1UX1hCR1JfODg4ODoKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfUkdC WDg4ODg7Cj4gLQkJKmRybV9tb2RpZmllciA9IDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9Q SVhfRk1UX0FSR0JfMjEwMTAxMDoKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfQkdSQTEw MTAxMDI7Cj4gLQkJKmRybV9tb2RpZmllciA9IDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9Q SVhfRk1UX1hSR0JfMjEwMTAxMDoKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfQkdSWDEw MTAxMDI7Cj4gLQkJKmRybV9tb2RpZmllciA9IDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9Q SVhfRk1UX0FCR1JfMjEwMTAxMDoKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfUkdCQTEw MTAxMDI7Cj4gLQkJKmRybV9tb2RpZmllciA9IDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9Q SVhfRk1UX1hCR1JfMjEwMTAxMDoKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfUkdCWDEw MTAxMDI7Cj4gLQkJKmRybV9tb2RpZmllciA9IDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9Q SVhfRk1UX0JHUkFfMTAxMDEwMjoKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfQVJHQjIx MDEwMTA7Cj4gLQkJKmRybV9tb2RpZmllciA9IDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9Q SVhfRk1UX0JHUlhfMTAxMDEwMjoKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfWFJHQjIx MDEwMTA7Cj4gLQkJKmRybV9tb2RpZmllciA9IDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9Q SVhfRk1UX1JHQkFfODg4OF9USUxFOgo+IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9BQkdS ODg4ODsKPiAtCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwo+IC0J CWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9SR0JYXzg4ODhfVElMRToKPiAtCQkqZHJtX3Bp eGZtdCA9IERSTV9GT1JNQVRfWEJHUjg4ODg7Cj4gLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JN QVRfTU9EX1FDT01fVElMRTsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFBVX1BJWF9GTVRfQkdSQV84 ODg4X1RJTEU6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX0FSR0I4ODg4Owo+IC0JCSpk cm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Cj4gLQkJYnJlYWs7Cj4gLQlj YXNlIERQVV9QSVhfRk1UX0JHUlhfODg4OF9USUxFOgo+IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZP Uk1BVF9YUkdCODg4ODsKPiAtCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9U SUxFOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9ZX0NSQ0JfSDJWMl9USUxFOgo+ IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9OVjIxOwo+IC0JCSpkcm1fbW9kaWZpZXIgPSBE Uk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1U X1lfQ0JDUl9IMlYyX1RJTEU6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX05WMTI7Cj4g LQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKPiAtCQlicmVhazsK PiAtCWNhc2UgRFBVX1BJWF9GTVRfQVJHQl84ODg4X1RJTEU6Cj4gLQkJKmRybV9waXhmbXQgPSBE Uk1fRk9STUFUX0JHUkE4ODg4Owo+IC0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9R Q09NX1RJTEU7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX1hSR0JfODg4OF9USUxF Ogo+IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9CR1JYODg4ODsKPiAtCQkqZHJtX21vZGlm aWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVf UElYX0ZNVF9BQkdSXzg4ODhfVElMRToKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfUkdC QTg4ODg7Cj4gLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKPiAt CQlicmVhazsKPiAtCWNhc2UgRFBVX1BJWF9GTVRfWEJHUl84ODg4X1RJTEU6Cj4gLQkJKmRybV9w aXhmbXQgPSBEUk1fRk9STUFUX1JHQlg4ODg4Owo+IC0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9S TUFUX01PRF9RQ09NX1RJTEU7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX0FSR0Jf MjEwMTAxMF9USUxFOgo+IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9CR1JBMTAxMDEwMjsK PiAtCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwo+IC0JCWJyZWFr Owo+IC0JY2FzZSBEUFVfUElYX0ZNVF9YUkdCXzIxMDEwMTBfVElMRToKPiAtCQkqZHJtX3BpeGZt dCA9IERSTV9GT1JNQVRfQkdSWDEwMTAxMDI7Cj4gLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JN QVRfTU9EX1FDT01fVElMRTsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFBVX1BJWF9GTVRfQUJHUl8y MTAxMDEwX1RJTEU6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1JHQkExMDEwMTAyOwo+ IC0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Cj4gLQkJYnJlYWs7 Cj4gLQljYXNlIERQVV9QSVhfRk1UX1hCR1JfMjEwMTAxMF9USUxFOgo+IC0JCSpkcm1fcGl4Zm10 ID0gRFJNX0ZPUk1BVF9SR0JYMTAxMDEwMjsKPiAtCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1B VF9NT0RfUUNPTV9USUxFOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9CR1JBXzEw MTAxMDJfVElMRToKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfQVJHQjIxMDEwMTA7Cj4g LQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKPiAtCQlicmVhazsK PiAtCWNhc2UgRFBVX1BJWF9GTVRfQkdSWF8xMDEwMTAyX1RJTEU6Cj4gLQkJKmRybV9waXhmbXQg PSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOwo+IC0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFU X01PRF9RQ09NX1RJTEU7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX1JHQkFfMTAx MDEwMl9VQldDOgo+IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDsKPiAt CQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9DT01QUkVTU0VEIHwKPiAtCQkJ CURSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFBVX1BJWF9G TVRfUkdCWF8xMDEwMTAyX1VCV0M6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1hCR1Iy MTAxMDEwOwo+IC0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX0NPTVBSRVNT RUQgfAo+IC0JCQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwo+IC0JCWJyZWFrOwo+IC0JY2Fz ZSBEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9QMDEwOgo+IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZP Uk1BVF9OVjEyOwo+IC0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX0RYOwo+ IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9QMDEwX1RJTEU6Cj4g LQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX05WMTI7Cj4gLQkJKmRybV9tb2RpZmllciA9IERS TV9GT1JNQVRfTU9EX1FDT01fVElMRSB8Cj4gLQkJCQlEUk1fRk9STUFUX01PRF9RQ09NX0RYOwo+ IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9QMDEwX1VCV0M6Cj4g LQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX05WMTI7Cj4gLQkJKmRybV9tb2RpZmllciA9IERS TV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NFRCB8Cj4gLQkJCQlEUk1fRk9STUFUX01PRF9RQ09N X1RJTEUgfAo+IC0JCQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9EWDsKPiAtCQlicmVhazsKPiAtCWNh c2UgRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjJfVFAxMDoKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9G T1JNQVRfTlYxMjsKPiAtCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxF IHwKPiAtCQkJCURSTV9GT1JNQVRfTU9EX1FDT01fRFggfAo+IC0JCQkJRFJNX0ZPUk1BVF9NT0Rf UUNPTV9USUdIVDsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjJf VFAxMF9VQldDOgo+IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9OVjEyOwo+IC0JCSpkcm1f bW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX0NPTVBSRVNTRUQgfAo+IC0JCQkJRFJNX0ZP Uk1BVF9NT0RfUUNPTV9USUxFIHwKPiAtCQkJCURSTV9GT1JNQVRfTU9EX1FDT01fRFggfAo+IC0J CQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUdIVDsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4g LQkJRFBVX0RFQlVHKCJpbnZhbGlkIHY0bDIgcGl4ZWwgZm9ybWF0ICVjJWMlYyVjXG4iLAo+IC0J CQkJcGl4Zm10ID4+IDAsIHBpeGZtdCA+PiA4LAo+IC0JCQkJcGl4Zm10ID4+IDE2LCBwaXhmbXQg Pj4gMjQpOwo+IC0JCXJjID0gLUVJTlZBTDsKPiAtCQlicmVhazsKPiAtCX0KPiAtCj4gLQlyZXR1 cm4gcmM7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBkcHVfaHdfcm90X3RvX3Y0bDJfYnVmZmVyIC0g Y29udmVydCBkcm0gYnVmZmVyIHRvIHY0bDIgYnVmZmVyCj4gLSAqIEBkcm1fcGl4Zm10OiBwaXhl bCBmb3JtYXQgaW4gZHJtIGZvdXJjYwo+IC0gKiBAZHJtX21vZGlmaWVyOiBwaXhlbCBmb3JtYXQg bW9kaWZpZXIKPiAtICogQGRybV9hZGRyOiBkcm0gYnVmZmVyIGFkZHJlc3MgcGVyIHBsYW5lCj4g LSAqIEBkcm1fbGVuOiBkcm0gYnVmZmVyIGxlbmd0aCBwZXIgcGxhbmUKPiAtICogQGRybV9wbGFu ZXM6IGRybSBidWZmZXIgbnVtYmVyIG9mIHBsYW5lcwo+IC0gKiBAdjRsX2FkZHI6IHY0bDIgYnVm ZmVyIGFkZHJlc3MgcGVyIHBsYW5lCj4gLSAqIEB2NGxfbGVuOiB2NGwyIGJ1ZmZlciBsZW5ndGgg cGVyIHBsYW5lCj4gLSAqIEB2NGxfcGxhbmVzOiB2NGwyIGJ1ZmZlciBudW1iZXIgb2YgcGxhbmVz Cj4gLSAqLwo+IC1zdGF0aWMgdm9pZCBkcHVfaHdfcm90X3RvX3Y0bDJfYnVmZmVyKHUzMiBkcm1f cGl4Zm10LCB1NjQgZHJtX21vZGlmaWVyLAo+IC0JCWRtYV9hZGRyX3QgKmRybV9hZGRyLCB1MzIg KmRybV9sZW4sIHUzMiAqZHJtX3BsYW5lcywKPiAtCQlkbWFfYWRkcl90ICp2NGxfYWRkciwgdTMy ICp2NGxfbGVuLCB1MzIgKnY0bF9wbGFuZXMpCj4gLXsKPiAtCWludCBpLCB0b3RhbF9zaXplID0g MDsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgRFBVX1JPVEFUT1JfSU5MSU5FX1BMQU5FX01BWDsg aSsrKSB7Cj4gLQkJdjRsX2FkZHJbaV0gPSBkcm1fYWRkcltpXTsKPiAtCQl2NGxfbGVuW2ldID0g ZHJtX2xlbltpXTsKPiAtCQl0b3RhbF9zaXplICs9IGRybV9sZW5baV07Cj4gLQkJRFBVX0RFQlVH KCJkcm1bJWRdOiVwYWQvJXhcbiIsIGksICZkcm1fYWRkcltpXSwgZHJtX2xlbltpXSk7Cj4gLQl9 Cj4gLQo+IC0JaWYgKERQVV9NT0RJRklFUl9JU19VQldDKGRybV9tb2RpZmllcikpIHsKPiAtCQkv KiB2NGwyIGRyaXZlciB1c2VzIHBsYW5lWzBdIGFzIHNpbmdsZSB1YndjIGJ1ZmZlciBwbGFuZSAq Lwo+IC0JCXY0bF9hZGRyWzBdID0gZHJtX2FkZHJbMl07Cj4gLQkJdjRsX2xlblswXSA9IHRvdGFs X3NpemU7Cj4gLQkJKnY0bF9wbGFuZXMgPSAxOwo+IC0JCURQVV9ERUJVRygidjRsMlswXTolcGFk LyV4LyVkXG4iLCAmdjRsX2FkZHJbMF0sIHY0bF9sZW5bMF0sCj4gLQkJCQkqdjRsX3BsYW5lcyk7 Cj4gLQl9IGVsc2Ugewo+IC0JCSp2NGxfcGxhbmVzID0gKmRybV9wbGFuZXM7Cj4gLQl9Cj4gLX0K PiAtCj4gLS8qKgo+IC0gKiBkcHVfaHdfcm90X2NvbW1pdCAtIGNvbW1pdC9leGVjdXRlIGdpdmVu IHJvdGF0b3IgY29tbWFuZAo+IC0gKiBAaHc6IFBvaW50ZXIgdG8gcm90YXRvciBoYXJkd2FyZSBk cml2ZXIKPiAtICogQGRhdGE6IFBvaW50ZXIgdG8gY29tbWFuZCBkZXNjcmlwdG9yCj4gLSAqIEBo d19jbWQ6IHR5cGUgb2YgY29tbWFuZCB0byBiZSBleGVjdXRlZAo+IC0gKiByZXR1cm46IDAgaWYg c3VjY2VzczsgZXJyb3IgY29kZSBvdGhlcndpc2UKPiAtICovCj4gLXN0YXRpYyBpbnQgZHB1X2h3 X3JvdF9jb21taXQoc3RydWN0IGRwdV9od19yb3QgKmh3LCBzdHJ1Y3QgZHB1X2h3X3JvdF9jbWQg KmRhdGEsCj4gLQkJZW51bSBkcHVfaHdfcm90X2NtZF90eXBlIGh3X2NtZCkKPiAtewo+IC0Jc3Ry dWN0IGRwdV9yb3RhdG9yX2lubGluZV9jbWQgcm90X2NtZDsKPiAtCWVudW0gZHB1X3JvdGF0b3Jf aW5saW5lX2NtZF90eXBlIGNtZF90eXBlOwo+IC0Jdm9pZCAqcHJpdl9oYW5kbGUgPSBOVUxMOwo+ IC0JaW50IHJjOwo+IC0KPiAtCWlmICghaHcgfHwgIWRhdGEpIHsKPiAtCQlEUFVfRVJST1IoImlu dmFsaWQgcGFyYW1ldGVyXG4iKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlt ZW1zZXQoJnJvdF9jbWQsIDAsIHNpemVvZihzdHJ1Y3QgZHB1X3JvdGF0b3JfaW5saW5lX2NtZCkp Owo+IC0KPiAtCXN3aXRjaCAoaHdfY21kKSB7Cj4gLQljYXNlIERQVV9IV19ST1RfQ01EX1ZBTElE QVRFOgo+IC0JCWNtZF90eXBlID0gRFBVX1JPVEFUT1JfSU5MSU5FX0NNRF9WQUxJREFURTsKPiAt CQlicmVhazsKPiAtCWNhc2UgRFBVX0hXX1JPVF9DTURfQ09NTUlUOgo+IC0JCWNtZF90eXBlID0g RFBVX1JPVEFUT1JfSU5MSU5FX0NNRF9DT01NSVQ7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9I V19ST1RfQ01EX1NUQVJUOgo+IC0JCWNtZF90eXBlID0gRFBVX1JPVEFUT1JfSU5MSU5FX0NNRF9T VEFSVDsKPiAtCQlwcml2X2hhbmRsZSA9IGRhdGEtPnByaXZfaGFuZGxlOwo+IC0JCWJyZWFrOwo+ IC0JY2FzZSBEUFVfSFdfUk9UX0NNRF9DTEVBTlVQOgo+IC0JCWNtZF90eXBlID0gRFBVX1JPVEFU T1JfSU5MSU5FX0NNRF9DTEVBTlVQOwo+IC0JCXByaXZfaGFuZGxlID0gZGF0YS0+cHJpdl9oYW5k bGU7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBodyBy b3RhdG9yIGNvbW1hbmQgJWRcbiIsIGh3X2NtZCk7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9 Cj4gLQo+IC0Jcm90X2NtZC5zZXF1ZW5jZV9pZCA9IGRhdGEtPnNlcXVlbmNlX2lkOwo+IC0Jcm90 X2NtZC52aWRlb19tb2RlID0gZGF0YS0+dmlkZW9fbW9kZTsKPiAtCXJvdF9jbWQuZnBzID0gZGF0 YS0+ZnBzOwo+IC0KPiAtCS8qCj4gLQkgKiBEUk0gcm90YXRpb24gcHJvcGVydHkgaXMgc3BlY2lm aWVkIGluIGNvdW50ZXIgY2xvY2t3aXNlIGRpcmVjdGlvbgo+IC0JICogd2hlcmVhcyByb3RhdG9y IGgvdyByb3RhdGVzIGluIGNsb2Nrd2lzZSBkaXJlY3Rpb24uCj4gLQkgKiBDb252ZXJ0IHJvdGF0 aW9uIHByb3BlcnR5IHRvIGNsb2Nrd2lzZSA5MCBieSB0b2dnbGluZyBoL3YgZmxpcAo+IC0JICov Cj4gLQlyb3RfY21kLnJvdDkwID0gZGF0YS0+cm90OTA7Cj4gLQlyb3RfY21kLmhmbGlwID0gZGF0 YS0+cm90OTAgPyAhZGF0YS0+aGZsaXAgOiBkYXRhLT5oZmxpcDsKPiAtCXJvdF9jbWQudmZsaXAg PSBkYXRhLT5yb3Q5MCA/ICFkYXRhLT52ZmxpcCA6IGRhdGEtPnZmbGlwOwo+IC0KPiAtCXJvdF9j bWQuY2xrcmF0ZSA9IGRhdGEtPmNsa3JhdGU7Cj4gLQlyb3RfY21kLmRhdGFfYncgPSAwOwo+IC0J cm90X2NtZC5wcmVmaWxsX2J3ID0gZGF0YS0+cHJlZmlsbF9idzsKPiAtCXJvdF9jbWQuc3JjX3dp ZHRoID0gZGF0YS0+c3JjX3dpZHRoOwo+IC0Jcm90X2NtZC5zcmNfaGVpZ2h0ID0gZGF0YS0+c3Jj X2hlaWdodDsKPiAtCXJvdF9jbWQuc3JjX3JlY3RfeCA9IGRhdGEtPnNyY19yZWN0X3g7Cj4gLQly b3RfY21kLnNyY19yZWN0X3kgPSBkYXRhLT5zcmNfcmVjdF95Owo+IC0Jcm90X2NtZC5zcmNfcmVj dF93ID0gZGF0YS0+c3JjX3JlY3RfdzsKPiAtCXJvdF9jbWQuc3JjX3JlY3RfaCA9IGRhdGEtPnNy Y19yZWN0X2g7Cj4gLQlyb3RfY21kLmRzdF93cml0ZWJhY2sgPSBkYXRhLT5kc3Rfd3JpdGViYWNr Owo+IC0Jcm90X2NtZC5kc3RfcmVjdF94ID0gZGF0YS0+ZHN0X3JlY3RfeDsKPiAtCXJvdF9jbWQu ZHN0X3JlY3RfeSA9IGRhdGEtPmRzdF9yZWN0X3k7Cj4gLQlyb3RfY21kLmRzdF9yZWN0X3cgPSBk YXRhLT5kc3RfcmVjdF93Owo+IC0Jcm90X2NtZC5kc3RfcmVjdF9oID0gZGF0YS0+ZHN0X3JlY3Rf aDsKPiAtCXJvdF9jbWQucHJpdl9oYW5kbGUgPSBwcml2X2hhbmRsZTsKPiAtCj4gLQlyYyA9IGRw dV9od19yb3RfdG9fdjRsMl9waXhmbXQoZGF0YS0+c3JjX3BpeGVsX2Zvcm1hdCwKPiAtCQkJZGF0 YS0+c3JjX21vZGlmaWVyLCAmcm90X2NtZC5zcmNfcGl4Zm10KTsKPiAtCWlmIChyYykgewo+IC0J CURQVV9FUlJPUigiaW52YWxpZCBzcmMgZm9ybWF0ICVkXG4iLCByYyk7Cj4gLQkJcmV0dXJuIHJj Owo+IC0JfQo+IC0KPiAtCS8qIGNhbGN1bGF0ZSBwcmVmZXJyZWQgb3V0cHV0IGZvcm1hdCBkdXJp bmcgdmFsaWRhdGlvbiAqLwo+IC0JaWYgKGh3X2NtZCA9PSBEUFVfSFdfUk9UX0NNRF9WQUxJREFU RSkgewo+IC0JCXJjID0gZHB1X3JvdGF0b3JfaW5saW5lX2dldF9kc3RfcGl4Zm10KGh3LT5jYXBz LT5wZGV2LAo+IC0JCQkJcm90X2NtZC5zcmNfcGl4Zm10LCAmcm90X2NtZC5kc3RfcGl4Zm10KTsK PiAtCQlpZiAocmMpIHsKPiAtCQkJRFBVX0VSUk9SKCJpbnZhbGlkIHNyYyBmb3JtYXQgJWRcbiIs IHJjKTsKPiAtCQkJcmV0dXJuIHJjOwo+IC0JCX0KPiAtCj4gLQkJcmMgPSBkcHVfaHdfcm90X3Rv X2RybV9waXhmbXQocm90X2NtZC5kc3RfcGl4Zm10LAo+IC0JCQkJJmRhdGEtPmRzdF9waXhlbF9m b3JtYXQsICZkYXRhLT5kc3RfbW9kaWZpZXIpOwo+IC0JCWlmIChyYykgewo+IC0JCQlEUFVfRVJS T1IoImludmFsaWQgZHN0IGZvcm1hdCAlYyVjJWMlY1xuIiwKPiAtCQkJCQlyb3RfY21kLmRzdF9w aXhmbXQgPj4gMCwKPiAtCQkJCQlyb3RfY21kLmRzdF9waXhmbXQgPj4gOCwKPiAtCQkJCQlyb3Rf Y21kLmRzdF9waXhmbXQgPj4gMTYsCj4gLQkJCQkJcm90X2NtZC5kc3RfcGl4Zm10ID4+IDI0KTsK PiAtCQkJcmV0dXJuIHJjOwo+IC0JCX0KPiAtCj4gLQkJZGF0YS0+ZHN0X2Zvcm1hdCA9IGRwdV9n ZXRfZHB1X2Zvcm1hdF9leHQoCj4gLQkJCQlkYXRhLT5kc3RfcGl4ZWxfZm9ybWF0LCBkYXRhLT5k c3RfbW9kaWZpZXIpOwo+IC0JCWlmICghZGF0YS0+ZHN0X2Zvcm1hdCkgewo+IC0JCQlEUFVfRVJS T1IoImZhaWxlZCB0byBnZXQgZHN0IGZvcm1hdFxuIik7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+ IC0JCX0KPiAtCX0gZWxzZSB7Cj4gLQkJcmMgPSBkcHVfaHdfcm90X3RvX3Y0bDJfcGl4Zm10KGRh dGEtPmRzdF9waXhlbF9mb3JtYXQsCj4gLQkJCQlkYXRhLT5kc3RfbW9kaWZpZXIsICZyb3RfY21k LmRzdF9waXhmbXQpOwo+IC0JCWlmIChyYykgewo+IC0JCQlEUFVfRVJST1IoImludmFsaWQgZHN0 IGZvcm1hdCAlZFxuIiwgcmMpOwo+IC0JCQlyZXR1cm4gcmM7Cj4gLQkJfQo+IC0KPiAtCQlkcHVf aHdfcm90X3RvX3Y0bDJfYnVmZmVyKGRhdGEtPnNyY19waXhlbF9mb3JtYXQsCj4gLQkJCQlkYXRh LT5zcmNfbW9kaWZpZXIsCj4gLQkJCQlkYXRhLT5zcmNfaW92YSwgZGF0YS0+c3JjX2xlbiwKPiAt CQkJCSZkYXRhLT5zcmNfcGxhbmVzLAo+IC0JCQkJcm90X2NtZC5zcmNfYWRkciwgcm90X2NtZC5z cmNfbGVuLAo+IC0JCQkJJnJvdF9jbWQuc3JjX3BsYW5lcyk7Cj4gLQo+IC0JCWRwdV9od19yb3Rf dG9fdjRsMl9idWZmZXIoZGF0YS0+ZHN0X3BpeGVsX2Zvcm1hdCwKPiAtCQkJCWRhdGEtPmRzdF9t b2RpZmllciwKPiAtCQkJCWRhdGEtPmRzdF9pb3ZhLCBkYXRhLT5kc3RfbGVuLAo+IC0JCQkJJmRh dGEtPmRzdF9wbGFuZXMsCj4gLQkJCQlyb3RfY21kLmRzdF9hZGRyLCByb3RfY21kLmRzdF9sZW4s Cj4gLQkJCQkmcm90X2NtZC5kc3RfcGxhbmVzKTsKPiAtCX0KPiAtCj4gLQkvKiBvbmx5IHByb2Nl c3MgYW55IGNvbW1hbmQgaWYgY2xpZW50IGlzIG1hc3RlciBvciBmb3IgdmFsaWRhdGlvbiAqLwo+ IC0JaWYgKGRhdGEtPm1hc3RlciB8fCBod19jbWQgPT0gRFBVX0hXX1JPVF9DTURfVkFMSURBVEUp IHsKPiAtCQlEUFVfREVCVUcoImRpc3BhdGNoIHNlcTolZCBjbWQ6JWRcbiIsIGRhdGEtPnNlcXVl bmNlX2lkLAo+IC0JCQkJaHdfY21kKTsKPiAtCj4gLQkJcmMgPSBkcHVfcm90YXRvcl9pbmxpbmVf Y29tbWl0KGh3LT5yb3RfY3R4LCAmcm90X2NtZCwgY21kX3R5cGUpOwo+IC0JCWlmIChyYykKPiAt CQkJcmV0dXJuIHJjOwo+IC0KPiAtCQkvKiByZXR1cm4gdG8gY2FsbGVyICovCj4gLQkJZGF0YS0+ cHJpdl9oYW5kbGUgPSByb3RfY21kLnByaXZfaGFuZGxlOwo+IC0JfSBlbHNlIHsKPiAtCQlEUFVf REVCVUcoImJ5cGFzcyBzZXE6JWQgY21kOiVkXG4iLCBkYXRhLT5zZXF1ZW5jZV9pZCwgaHdfY21k KTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGRwdV9od19y b3RfZ2V0X2Zvcm1hdF9jYXBzIC0gZ2V0IHBpeGVsIGZvcm1hdCBjYXBhYmlsaXR5Cj4gLSAqIEBo dzogUG9pbnRlciB0byByb3RhdG9yIGhhcmR3YXJlIGRyaXZlcgo+IC0gKiByZXR1cm46IFBvaW50 ZXIgdG8gcGl4ZWwgZm9ybWF0IGNhcGFiaWxpdHkgYXJyYXk6IE5VTEwgb3RoZXJ3aXNlCj4gLSAq Lwo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQgKmRwdV9od19yb3Rf Z2V0X2Zvcm1hdF9jYXBzKAo+IC0JCXN0cnVjdCBkcHVfaHdfcm90ICpodykKPiAtewo+IC0JaW50 IHJjLCBpLCBqLCBsZW47Cj4gLQl1MzIgKnY0bF9waXhmbXRzOwo+IC0Jc3RydWN0IGRwdV9mb3Jt YXRfZXh0ZW5kZWQgKmRybV9waXhmbXRzOwo+IC0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl djsKPiAtCj4gLQlpZiAoIWh3IHx8ICFody0+Y2FwcyB8fCAhaHctPmNhcHMtPnBkZXYpIHsKPiAt CQlEUFVfRVJST1IoImludmFsaWQgcm90YXRvciBod1xuIik7Cj4gLQkJcmV0dXJuIE5VTEw7Cj4g LQl9Cj4gLQo+IC0JcGRldiA9IGh3LT5jYXBzLT5wZGV2Owo+IC0KPiAtCWlmIChody0+Zm9ybWF0 X2NhcHMpCj4gLQkJcmV0dXJuIGh3LT5mb3JtYXRfY2FwczsKPiAtCj4gLQlsZW4gPSBkcHVfcm90 YXRvcl9pbmxpbmVfZ2V0X3BpeGZtdF9jYXBzKHBkZXYsIHRydWUsIE5VTEwsIDApOwo+IC0JaWYg KGxlbiA8IDApIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgcGl4Zm10IGNhcHMgJWRcbiIsIGxl bik7Cj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQl9Cj4gLQo+IC0JdjRsX3BpeGZtdHMgPSBrY2FsbG9j KGxlbiwgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOwo+IC0JaWYgKCF2NGxfcGl4Zm10cykKPiAt CQlnb3RvIGRvbmU7Cj4gLQo+IC0JZHB1X3JvdGF0b3JfaW5saW5lX2dldF9waXhmbXRfY2Fwcyhw ZGV2LCB0cnVlLCB2NGxfcGl4Zm10cywgbGVuKTsKPiAtCj4gLQkvKiBhbGxvY2F0ZSBvbmUgbW9y ZSB0byBpbmRpY2F0ZSB0ZXJtaW5hdGlvbiAqLwo+IC0JZHJtX3BpeGZtdHMgPSBremFsbG9jKChs ZW4gKyAxKSAqIHNpemVvZihzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCksCj4gLQkJCUdGUF9L RVJORUwpOwo+IC0JaWYgKCFkcm1fcGl4Zm10cykKPiAtCQlnb3RvIGRvbmU7Cj4gLQo+IC0JZm9y IChpID0gMCwgaiA9IDA7IGkgPCBsZW47IGkrKykgewo+IC0JCXJjID0gZHB1X2h3X3JvdF90b19k cm1fcGl4Zm10KHY0bF9waXhmbXRzW2ldLAo+IC0JCQkJJmRybV9waXhmbXRzW2pdLmZvdXJjY19m b3JtYXQsCj4gLQkJCQkmZHJtX3BpeGZtdHNbal0ubW9kaWZpZXIpOwo+IC0JCWlmICghcmMpIHsK PiAtCQkJRFBVX0RFQlVHKCIlZDogdmw0MjolYyVjJWMlYyA9PiBkcm06JWMlYyVjJWMvMHglbGx4 XG4iLAo+IC0JCQkJaSwgdjRsX3BpeGZtdHNbaV0gPj4gMCwgdjRsX3BpeGZtdHNbaV0gPj4gOCwK PiAtCQkJCXY0bF9waXhmbXRzW2ldID4+IDE2LCB2NGxfcGl4Zm10c1tpXSA+PiAyNCwKPiAtCQkJ CWRybV9waXhmbXRzW2pdLmZvdXJjY19mb3JtYXQgPj4gMCwKPiAtCQkJCWRybV9waXhmbXRzW2pd LmZvdXJjY19mb3JtYXQgPj4gOCwKPiAtCQkJCWRybV9waXhmbXRzW2pdLmZvdXJjY19mb3JtYXQg Pj4gMTYsCj4gLQkJCQlkcm1fcGl4Zm10c1tqXS5mb3VyY2NfZm9ybWF0ID4+IDI0LAo+IC0JCQkJ ZHJtX3BpeGZtdHNbal0ubW9kaWZpZXIpOwo+IC0JCQlqKys7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJ RFBVX0RFQlVHKCIlZDogdmw0MjolYyVjJWMlYyBub3QgbWFwcGVkXG4iLAo+IC0JCQkJaSwgdjRs X3BpeGZtdHNbaV0gPj4gMCwgdjRsX3BpeGZtdHNbaV0gPj4gOCwKPiAtCQkJCXY0bF9waXhmbXRz W2ldID4+IDE2LCB2NGxfcGl4Zm10c1tpXSA+PiAyNCk7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCWh3 LT5mb3JtYXRfY2FwcyA9IGRybV9waXhmbXRzOwo+IC1kb25lOgo+IC0Ja2ZyZWUodjRsX3BpeGZt dHMpOwo+IC0KPiAtCXJldHVybiBody0+Zm9ybWF0X2NhcHM7Cj4gLX0KPiAtCj4gLS8qKgo+IC0g KiBkcHVfaHdfcm90X2dldF9kb3duc2NhbGVfY2FwcyAtIGdldCBzY2FsaW5nIGNhcGFiaWxpdHkg c3RyaW5nCj4gLSAqIEBodzogUG9pbnRlciB0byByb3RhdG9yIGhhcmR3YXJlIGRyaXZlcgo+IC0g KiByZXR1cm46IFBvaW50ZXIgdG8gY2FwYWJpbGl0eSBzdHJpbmc6IE5VTEwgb3RoZXJ3aXNlCj4g LSAqLwo+IC1zdGF0aWMgY29uc3QgY2hhciAqZHB1X2h3X3JvdF9nZXRfZG93bnNjYWxlX2NhcHMo c3RydWN0IGRwdV9od19yb3QgKmh3KQo+IC17Cj4gLQlpbnQgbGVuOwo+IC0Jc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldjsKPiAtCj4gLQlpZiAoIWh3IHx8ICFody0+Y2FwcyB8fCAhaHctPmNh cHMtPnBkZXYpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgcm90YXRvciBod1xuIik7Cj4gLQkJ cmV0dXJuIE5VTEw7Cj4gLQl9Cj4gLQo+IC0JcGRldiA9IGh3LT5jYXBzLT5wZGV2Owo+IC0KPiAt CWlmIChody0+ZG93bnNjYWxlX2NhcHMpCj4gLQkJcmV0dXJuIGh3LT5kb3duc2NhbGVfY2FwczsK PiAtCj4gLQlsZW4gPSBkcHVfcm90YXRvcl9pbmxpbmVfZ2V0X2Rvd25zY2FsZV9jYXBzKHBkZXYs IE5VTEwsIDApOwo+IC0JaWYgKGxlbiA8IDApIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgc2Nh bGluZyBjYXBzICVkXG4iLCBsZW4pOwo+IC0JCXJldHVybiBOVUxMOwo+IC0JfQo+IC0KPiAtCS8q IGFkZCBvbmUgZm9yIGVuZGluZyB6ZXJvICovCj4gLQlsZW4gKz0gMTsKPiAtCWh3LT5kb3duc2Nh bGVfY2FwcyA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKPiAtCWRwdV9yb3RhdG9yX2lubGlu ZV9nZXRfZG93bnNjYWxlX2NhcHMocGRldiwgaHctPmRvd25zY2FsZV9jYXBzLCBsZW4pOwo+IC0K PiAtCXJldHVybiBody0+ZG93bnNjYWxlX2NhcHM7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBkcHVf aHdfcm90X2dldF9jYWNoZV9zaXplIC0gZ2V0IGNhY2hlIHNpemUKPiAtICogQGh3OiBQb2ludGVy IHRvIHJvdGF0b3IgaGFyZHdhcmUgZHJpdmVyCj4gLSAqIHJldHVybjogc2l6ZSBvZiBjYWNoZQo+ IC0gKi8KPiAtc3RhdGljIHNpemVfdCBkcHVfaHdfcm90X2dldF9jYWNoZV9zaXplKHN0cnVjdCBk cHVfaHdfcm90ICpodykKPiAtewo+IC0JaWYgKCFodyB8fCAhaHctPmNhcHMpIHsKPiAtCQlEUFVf RVJST1IoImludmFsaWQgcm90YXRvciBod1xuIik7Cj4gLQkJcmV0dXJuIDA7Cj4gLQl9Cj4gLQo+ IC0JcmV0dXJuIGh3LT5jYXBzLT5zbGljZV9zaXplOwo+IC19Cj4gLQo+IC0vKioKPiAtICogZHB1 X2h3X3JvdF9nZXRfbWF4bGluZXdpZHRoIC0gZ2V0IG1heGltdW0gbGluZSB3aWR0aCBvZiByb3Rh dG9yCj4gLSAqIEBodzogUG9pbnRlciB0byByb3RhdG9yIGhhcmR3YXJlIGRyaXZlcgo+IC0gKiBy ZXR1cm46IG1heGltdW0gbGluZSB3aWR0aAo+IC0gKi8KPiAtc3RhdGljIGludCBkcHVfaHdfcm90 X2dldF9tYXhsaW5ld2lkdGgoc3RydWN0IGRwdV9od19yb3QgKmh3KQo+IC17Cj4gLQlzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2Owo+IC0KPiAtCWlmICghaHcgfHwgIWh3LT5jYXBzIHx8ICFo dy0+Y2Fwcy0+cGRldikgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCByb3RhdG9yIGh3XG4iKTsK PiAtCQlyZXR1cm4gMDsKPiAtCX0KPiAtCj4gLQlwZGV2ID0gaHctPmNhcHMtPnBkZXY7Cj4gLQo+ IC0JcmV0dXJuIGRwdV9yb3RhdG9yX2lubGluZV9nZXRfbWF4bGluZXdpZHRoKHBkZXYpOwo+IC19 Cj4gLQo+IC0vKioKPiAtICogX3NldHVwX3JvdF9vcHMgLSBzZXR1cCByb3RhdG9yIG9wZXJhdGlv bnMKPiAtICogQG9wczogUG9pbnRlciB0byBvcGVyYXRpb24gdGFibGUKPiAtICogQGZlYXR1cmVz OiBhdmFpbGFibGUgZmVhdHVyZSBiaXRtYXNrCj4gLSAqIHJldHVybjogbm9uZQo+IC0gKi8KPiAt c3RhdGljIHZvaWQgX3NldHVwX3JvdF9vcHMoc3RydWN0IGRwdV9od19yb3Rfb3BzICpvcHMsIHVu c2lnbmVkIGxvbmcgZmVhdHVyZXMpCj4gLXsKPiAtCW9wcy0+Y29tbWl0ID0gZHB1X2h3X3JvdF9j b21taXQ7Cj4gLQlvcHMtPmdldF9mb3JtYXRfY2FwcyA9IGRwdV9od19yb3RfZ2V0X2Zvcm1hdF9j YXBzOwo+IC0Jb3BzLT5nZXRfZG93bnNjYWxlX2NhcHMgPSBkcHVfaHdfcm90X2dldF9kb3duc2Nh bGVfY2FwczsKPiAtCW9wcy0+Z2V0X2NhY2hlX3NpemUgPSBkcHVfaHdfcm90X2dldF9jYWNoZV9z aXplOwo+IC0Jb3BzLT5nZXRfbWF4bGluZXdpZHRoID0gZHB1X2h3X3JvdF9nZXRfbWF4bGluZXdp ZHRoOwo+IC19Cj4gLQo+IC0vKioKPiAtICogZHB1X2h3X3JvdF9ibGtfc3RvcCAtIHN0b3Agcm90 YXRvciBibG9jawo+IC0gKiBAaHdfYmxrOiBQb2ludGVyIHRvIGJhc2UgaGFyZHdhcmUgYmxvY2sK PiAtICogcmV0dXJuOiBub25lCj4gLSAqLwo+IC1zdGF0aWMgdm9pZCBkcHVfaHdfcm90X2Jsa19z dG9wKHN0cnVjdCBkcHVfaHdfYmxrICpod19ibGspCj4gLXsKPiAtCXN0cnVjdCBkcHVfaHdfcm90 ICpod19yb3QgPSB0b19kcHVfaHdfcm90KGh3X2Jsayk7Cj4gLQo+IC0JRFBVX0RFQlVHKCJ0eXBl OiVkIGlkOiVkXG4iLCBod19ibGstPnR5cGUsIGh3X2Jsay0+aWQpOwo+IC0KPiAtCWRwdV9od19y b3Rfc3RvcChod19yb3QpOwo+IC19Cj4gLQo+IC0vKioKPiAtICogZHB1X2h3X3JvdF9ibGtfc3Rh cnQgLSBhcnQgcm90YXRvciBibG9jawo+IC0gKiBAaHdfYmxrOiBQb2ludGVyIHRvIGJhc2UgaGFy ZHdhcmUgYmxvY2sKPiAtICogcmV0dXJuOiAwIGlmIHN1Y2Nlc3M7IGVycm9yIGNvZGUgb3RoZXJ3 aXNlCj4gLSAqLwo+IC1zdGF0aWMgaW50IGRwdV9od19yb3RfYmxrX3N0YXJ0KHN0cnVjdCBkcHVf aHdfYmxrICpod19ibGspCj4gLXsKPiAtCXN0cnVjdCBkcHVfaHdfcm90ICpod19yb3QgPSB0b19k cHVfaHdfcm90KGh3X2Jsayk7Cj4gLQlpbnQgcmMgPSAwOwo+IC0KPiAtCURQVV9ERUJVRygidHlw ZTolZCBpZDolZFxuIiwgaHdfYmxrLT50eXBlLCBod19ibGstPmlkKTsKPiAtCj4gLQlyYyA9IGRw dV9od19yb3Rfc3RhcnQoaHdfcm90KTsKPiAtCj4gLQlyZXR1cm4gcmM7Cj4gLX0KPiAtCj4gLXN0 YXRpYyBzdHJ1Y3QgZHB1X2h3X2Jsa19vcHMgZHB1X2h3X3JvdF9vcHMgPSB7Cj4gLQkuc3RhcnQg PSBkcHVfaHdfcm90X2Jsa19zdGFydCwKPiAtCS5zdG9wID0gZHB1X2h3X3JvdF9ibGtfc3RvcCwK PiAtfTsKPiAtCj4gLS8qKgo+IC0gKiBkcHVfaHdfcm90X2luaXQgLSBjcmVhdGUvaW5pdGlhbGl6 ZSBnaXZlbiByb3RhdG9yIGluc3RhbmNlCj4gLSAqIEBpZHg6IGluZGV4IG9mIGdpdmVuIHJvdGF0 b3IKPiAtICogQGFkZHI6IGkvbyBhZGRyZXNzIG1hcHBpbmcKPiAtICogQG06IFBvaW50ZXIgdG8g bWRzcyBjYXRhbG9nCj4gLSAqIHJldHVybjogUG9pbnRlciB0byBoYXJkd2FyZSByb3RhdG9yIGRy aXZlciBvZiB0aGUgZ2l2ZW4gaW5zdGFuY2UKPiAtICovCj4gLXN0cnVjdCBkcHVfaHdfcm90ICpk cHVfaHdfcm90X2luaXQoZW51bSBkcHVfcm90IGlkeCwKPiAtCQl2b2lkIF9faW9tZW0gKmFkZHIs Cj4gLQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqbSkKPiAtewo+IC0Jc3RydWN0IGRwdV9od19yb3Qg KmM7Cj4gLQlzdHJ1Y3QgZHB1X3JvdF9jZmcgKmNmZzsKPiAtCWludCByYzsKPiAtCj4gLQljID0g a3phbGxvYyhzaXplb2YoKmMpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghYykKPiAtCQlyZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsKPiAtCj4gLQljZmcgPSBfcm90X29mZnNldChpZHgsIG0sIGFkZHIs ICZjLT5odyk7Cj4gLQlpZiAoSVNfRVJSKGNmZykpIHsKPiAtCQlXQVJOKDEsICJVbmFibGUgdG8g ZmluZCByb3QgaWR4PSVkXG4iLCBpZHgpOwo+IC0JCWtmcmVlKGMpOwo+IC0JCXJldHVybiBFUlJf UFRSKC1FSU5WQUwpOwo+IC0JfQo+IC0KPiAtCS8qIEFzc2lnbiBvcHMgKi8KPiAtCWMtPmlkeCA9 IGlkeDsKPiAtCWMtPmNhcHMgPSBjZmc7Cj4gLQlfc2V0dXBfcm90X29wcygmYy0+b3BzLCBjLT5j YXBzLT5mZWF0dXJlcyk7Cj4gLQlzbnByaW50ZihjLT5uYW1lLCBBUlJBWV9TSVpFKGMtPm5hbWUp LCAiZHB1X3JvdF8lZCIsIGlkeCAtIFJPVF8wKTsKPiAtCj4gLQlyYyA9IGRwdV9od19ibGtfaW5p dCgmYy0+YmFzZSwgRFBVX0hXX0JMS19ST1QsIGlkeCwgJmRwdV9od19yb3Rfb3BzKTsKPiAtCWlm IChyYykgewo+IC0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGluaXQgaHcgYmxrICVkXG4iLCByYyk7 Cj4gLQkJZ290byBibGtfaW5pdF9lcnJvcjsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gYzsKPiAtCj4g LWJsa19pbml0X2Vycm9yOgo+IC0Ja3pmcmVlKGMpOwo+IC0KPiAtCXJldHVybiBFUlJfUFRSKHJj KTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGRwdV9od19yb3RfZGVzdHJveSAtIGRlc3Ryb3kgZ2l2 ZW4gaGFyZHdhcmUgcm90YXRvciBkcml2ZXIKPiAtICogQGh3X3JvdDogUG9pbnRlciB0byBoYXJk d2FyZSByb3RhdG9yIGRyaXZlcgo+IC0gKiByZXR1cm46IG5vbmUKPiAtICovCj4gLXZvaWQgZHB1 X2h3X3JvdF9kZXN0cm95KHN0cnVjdCBkcHVfaHdfcm90ICpod19yb3QpCj4gLXsKPiAtCWlmICho d19yb3QpIHsKPiAtCQlkcHVfaHdfYmxrX2Rlc3Ryb3koJmh3X3JvdC0+YmFzZSk7Cj4gLQkJa2Zy ZWUoaHdfcm90LT5kb3duc2NhbGVfY2Fwcyk7Cj4gLQkJa2ZyZWUoaHdfcm90LT5mb3JtYXRfY2Fw cyk7Cj4gLQl9Cj4gLQlrZnJlZShod19yb3QpOwo+IC19Cj4gLQo+IC1zdHJ1Y3QgZHB1X2h3X3Jv dCAqZHB1X2h3X3JvdF9nZXQoc3RydWN0IGRwdV9od19yb3QgKmh3X3JvdCkKPiAtewo+IC0Jc3Ry dWN0IGRwdV9od19ibGsgKmh3X2JsayA9IGRwdV9od19ibGtfZ2V0KGh3X3JvdCA/ICZod19yb3Qt PmJhc2UgOgo+IC0JCQlOVUxMLCBEUFVfSFdfQkxLX1JPVCwgLTEpOwo+IC0KPiAtCXJldHVybiBJ U19FUlJfT1JfTlVMTChod19ibGspID8gTlVMTCA6IHRvX2RwdV9od19yb3QoaHdfYmxrKTsKPiAt fQo+IC0KPiAtdm9pZCBkcHVfaHdfcm90X3B1dChzdHJ1Y3QgZHB1X2h3X3JvdCAqaHdfcm90KQo+ IC17Cj4gLQlzdHJ1Y3QgZHB1X2h3X2JsayAqaHdfYmxrID0gaHdfcm90ID8gJmh3X3JvdC0+YmFz ZSA6IE5VTEw7Cj4gLQo+IC0JZHB1X2h3X2Jsa19wdXQoaHdfYmxrKTsKPiAtfQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcm90LmggYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcm90LmgKPiBkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCBkZjE1ZWQ1Li4wMDAwMDAwCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X3JvdC5oCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDE5MCArMCww IEBACj4gLS8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KPiAtICoKPiAtICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiAtICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YW5kCj4gLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgo+IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiAtICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiAtICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ IC0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+IC0gKi8K PiAtCj4gLSNpZm5kZWYgX0RQVV9IV19ST1RfSAo+IC0jZGVmaW5lIF9EUFVfSFdfUk9UX0gKPiAt Cj4gLSNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgo+IC0jaW5jbHVkZSAiZHB1X2h3X21kc3Mu aCIKPiAtI2luY2x1ZGUgImRwdV9od191dGlsLmgiCj4gLSNpbmNsdWRlICJkcHVfaHdfYmxrLmgi Cj4gLQo+IC0jZGVmaW5lIERQVV9IV19ST1RfTkFNRV9TSVpFCTgwCj4gLQo+IC1zdHJ1Y3QgZHB1 X2h3X3JvdDsKPiAtCj4gLS8qKgo+IC0gKiBlbnVtIGRwdV9od19yb3RfY21kX3R5cGUgLSB0eXBl IG9mIHJvdGF0b3IgaGFyZHdhcmUgY29tbWFuZAo+IC0gKiBARFBVX0hXX1JPVF9DTURfVkFMRElB VEU6IHZhbGlkYXRlIHJvdGF0b3IgY29tbWFuZDsgZG8gbm90IGNvbW1pdAo+IC0gKiBARFBVX0hX X1JPVF9DTURfQ09NTUlUOiBjb21taXQvZXhlY3V0ZSByb3RhdG9yIGNvbW1hbmQKPiAtICogQERQ VV9IV19ST1RfQ01EX1NUQVJUOiBtZHAgaXMgcmVhZHkgdG8gc3RhcnQKPiAtICogQERQVV9IV19S T1RfQ01EX0NMRUFOVVA6IGNsZWFudXAgcm90YXRvciBjb21tYW5kIGFmdGVyIGl0IGlzIGRvbmUK PiAtICovCj4gLWVudW0gZHB1X2h3X3JvdF9jbWRfdHlwZSB7Cj4gLQlEUFVfSFdfUk9UX0NNRF9W QUxJREFURSwKPiAtCURQVV9IV19ST1RfQ01EX0NPTU1JVCwKPiAtCURQVV9IV19ST1RfQ01EX1NU QVJULAo+IC0JRFBVX0hXX1JPVF9DTURfQ0xFQU5VUCwKPiAtfTsKPiAtCj4gLS8qKgo+IC0gKiBz dHJ1Y3QgZHB1X2h3X3JvdF9jbWQgLSBkZWZpbml0aW9uIG9mIGhhcmR3YXJlIHJvdGF0aW9uIGNv bW1hbmQKPiAtICogQG1hc3RlcjogdHJ1ZSBpZiBjbGllbnQgaXMgdGhlIG1hc3RlciBpbiBzb3Vy Y2Ugc3BsaXQgaW5saW5lIHJvdGF0aW9uCj4gLSAqIEBzZXF1ZW5jZV9pZDogY29tbWFuZCBzZXF1 ZW5jZSBpZGVudGlmaWVyCj4gLSAqIEBmcHM6IGZyYW1lIHJhdGUgb2YgdGhlIHN0cmVhbSBpbiBm cmFtZSBwZXIgc2Vjb25kCj4gLSAqIEByb3Q5MDogdHJ1ZSBpZiByb3RhdGlvbiA5MCBpbiBjb3Vu dGVyIGNsb2Nrd2lzZSBpcyByZXF1aXJlZAo+IC0gKiBAaGZsaXA6IHRydWUgaWYgaG9yaXpvbnRh bCBmbGlwIGlzIHJlcXVpcmVkIHByaW9yIHRvIHJvdGF0aW9uCj4gLSAqIEB2ZmxpcDogdHJ1ZSBp ZiB2ZXJ0aWNhbCBmbGlwIGlzIHJlcXVpcmVkIHByaW9yIHRvIHJvdGF0aW9uCj4gLSAqIEB2aWRl b19tb2RlOiB0cnVlIGlmIHJvdGF0b3IgaXMgZmVlZGluZyBpbnRvIHZpZGVvIGludGVyZmFjZQo+ IC0gKiBAY2xrcmF0ZSA6IGNsb2NrIHJhdGUgaW4gSHoKPiAtICogQHByZWZpbGxfYnc6IHByZWZp bGwgYmFuZHdpZHRoIGluIEJwcyAodmlkZW8gbW9kZSBvbmx5KQo+IC0gKiBAc3JjX2lvdmE6IHNv dXJjZSBpL28gdmlydHVhbCBhZGRyZXNzCj4gLSAqIEBzcmNfbGVuOiBzb3VyY2UgaS9vIGJ1ZmZl ciBsZW5ndGgKPiAtICogQHNyY19wbGFuZXM6IHNvdXJjZSBwbGFuZSBudW1iZXIKPiAtICogQHNy Y19mb3JtYXQ6IHBvaW50ZXIgdG8gc291cmNlIGRwdSBwaXhlbCBmb3JtYXQKPiAtICogQHNyY19w aXhlbF9mb3JtYXQ6IHNvdXJjZSBwaXhlbCBmb3JtYXQgaW4gZHJtIGZvdXJjYwo+IC0gKiBAc3Jj X21vZGlmaWVyOiBzb3VyY2UgcGl4ZWwgZm9ybWF0IG1vZGlmaWVyCj4gLSAqIEBzcmNfd2lkdGg6 IHNvdXJjZSB3aWR0aCBpbiBwaXhlbAo+IC0gKiBAc3JjX2hlaWdodDogc291cmNlIGhlaWdodCBp biBwaXhlbAo+IC0gKiBAc3JjX3JlY3RfeDogc291cmNlIHJlY3RhbmdsZSB4IGNvb3JkaW5hdGUK PiAtICogQHNyY19yZWN0X3k6IHNvdXJjZSByZWN0YW5nbGUgeSBjb29yZGluYXRlCj4gLSAqIEBz cmNfcmVjdF93OiBzb3VyY2UgcmVjdGFuZ2xlIHdpZHRoCj4gLSAqIEBzcmNfcmVjdF9oOiBzb3Vy Y2UgcmVjdGFuZ2xlIGhlaWdodAo+IC0gKiBAZHN0X3dyaXRlYmFjazogdHJ1ZSBpZiB3cml0ZWJh Y2sgb2Ygcm90YXRlZCBvdXRwdXQgaXMgcmVxdWlyZWQKPiAtICogQGRzdF9pb3ZhOiBkZXN0aW5h dGlvbiBpL28gdmlydHVhbCBhZGRyZXNzCj4gLSAqIEBkc3RfbGVuOiBkZXN0aW5hdGlvbiBpL28g YnVmZmVyIGxlbmd0aAo+IC0gKiBAZHN0X3BsYW5lczogZGVzdGluYXRpb24gcGxhbmUgbnVtYmVy Cj4gLSAqIEBkc3RfZm9ybWF0OiBwb2ludGVyIHRvIGRlc3RpbmF0aW9uIGRwdSBwaXhlbCBmb3Jt YXQgKGlucHV0L291dHB1dCkKPiAtICogQGRzdF9waXhlbF9mb3JtYXQ6IGRlc3RpbmF0aW9uIHBp eGVsIGZvcm1hdCBpbiBkcm0gZm91cmNjIChpbnB1dC9vdXRwdXQpCj4gLSAqIEBkc3RfbW9kaWZp ZXI6IGRlc3RpbmF0aW9uIHBpeGVsIGZvcm1hdCBtb2RpZmllciAoaW5wdXQvb3V0cHV0KQo+IC0g KiBAZHN0X3JlY3RfeDogZGVzdGluYXRpb24gcmVjdGFuZ2xlIHggY29vcmRpbmF0ZQo+IC0gKiBA ZHN0X3JlY3RfeTogZGVzdGluYXRpb24gcmVjdGFuZ2xlIHkgY29vcmRpbmF0ZQo+IC0gKiBAZHN0 X3JlY3RfdzogZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpZHRoCj4gLSAqIEBkc3RfcmVjdF9oOiBk ZXN0aW5hdGlvbiByZWN0YW5nbGUgaGVpZ2h0Cj4gLSAqIEBwcml2X2hhbmRsZTogcHJpdmF0ZSBo YW5kbGUgb2Ygcm90YXRvciBkcml2ZXIgKG91dHB1dCkKPiAtICovCj4gLXN0cnVjdCBkcHVfaHdf cm90X2NtZCB7Cj4gLQlib29sIG1hc3RlcjsKPiAtCXUzMiBzZXF1ZW5jZV9pZDsKPiAtCXUzMiBm cHM7Cj4gLQlib29sIHJvdDkwOwo+IC0JYm9vbCBoZmxpcDsKPiAtCWJvb2wgdmZsaXA7Cj4gLQli b29sIHZpZGVvX21vZGU7Cj4gLQl1NjQgY2xrcmF0ZTsKPiAtCXU2NCBwcmVmaWxsX2J3Owo+IC0J ZG1hX2FkZHJfdCBzcmNfaW92YVs0XTsKPiAtCXUzMiBzcmNfbGVuWzRdOwo+IC0JdTMyIHNyY19w bGFuZXM7Cj4gLQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqc3JjX2Zvcm1hdDsKPiAtCXUzMiBz cmNfcGl4ZWxfZm9ybWF0Owo+IC0JdTY0IHNyY19tb2RpZmllcjsKPiAtCXUzMiBzcmNfd2lkdGg7 Cj4gLQl1MzIgc3JjX2hlaWdodDsKPiAtCXUzMiBzcmNfc3RyaWRlOwo+IC0JdTMyIHNyY19yZWN0 X3g7Cj4gLQl1MzIgc3JjX3JlY3RfeTsKPiAtCXUzMiBzcmNfcmVjdF93Owo+IC0JdTMyIHNyY19y ZWN0X2g7Cj4gLQlib29sIGRzdF93cml0ZWJhY2s7Cj4gLQlkbWFfYWRkcl90IGRzdF9pb3ZhWzRd Owo+IC0JdTMyIGRzdF9sZW5bNF07Cj4gLQl1MzIgZHN0X3BsYW5lczsKPiAtCWNvbnN0IHN0cnVj dCBkcHVfZm9ybWF0ICpkc3RfZm9ybWF0Owo+IC0JdTMyIGRzdF9waXhlbF9mb3JtYXQ7Cj4gLQl1 NjQgZHN0X21vZGlmaWVyOwo+IC0JdTMyIGRzdF9yZWN0X3g7Cj4gLQl1MzIgZHN0X3JlY3RfeTsK PiAtCXUzMiBkc3RfcmVjdF93Owo+IC0JdTMyIGRzdF9yZWN0X2g7Cj4gLQl2b2lkICpwcml2X2hh bmRsZTsKPiAtfTsKPiAtCj4gLS8qKgo+IC0gKiBzdHJ1Y3QgZHB1X2h3X3JvdF9vcHMgLSBpbnRl cmZhY2UgdG8gdGhlIHJvdGF0b3IgaHcgZHJpdmVyIGZ1bmN0aW9ucwo+IC0gKiBBc3N1bXB0aW9u IGlzIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBhZnRlciBjbG9ja3MgYXJlIGVuYWJs ZWQKPiAtICovCj4gLXN0cnVjdCBkcHVfaHdfcm90X29wcyB7Cj4gLQlpbnQgKCpjb21taXQpKHN0 cnVjdCBkcHVfaHdfcm90ICpodywgc3RydWN0IGRwdV9od19yb3RfY21kICpkYXRhLAo+IC0JCQll bnVtIGRwdV9od19yb3RfY21kX3R5cGUgY21kKTsKPiAtCWNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0 X2V4dGVuZGVkICooKmdldF9mb3JtYXRfY2FwcykoCj4gLQkJCXN0cnVjdCBkcHVfaHdfcm90ICpo dyk7Cj4gLQljb25zdCBjaGFyICooKmdldF9kb3duc2NhbGVfY2Fwcykoc3RydWN0IGRwdV9od19y b3QgKmh3KTsKPiAtCXNpemVfdCAoKmdldF9jYWNoZV9zaXplKShzdHJ1Y3QgZHB1X2h3X3JvdCAq aHcpOwo+IC0JaW50ICgqZ2V0X21heGxpbmV3aWR0aCkoc3RydWN0IGRwdV9od19yb3QgKmh3KTsK PiAtfTsKPiAtCj4gLS8qKgo+IC0gKiBzdHJ1Y3QgZHB1X2h3X3JvdCA6IFJPVCBkcml2ZXIgb2Jq ZWN0Cj4gLSAqIEBiYXNlOiBodyBibG9jayBiYXNlIG9iamVjdAo+IC0gKiBAaHc6IGhhcmR3YXJl IGFkZHJlc3MgbWFwCj4gLSAqIEBpZHg6IGluc3RhbmNlIGluZGV4Cj4gLSAqIEBjYXBzOiBjYXBh YmlsaXRpZXMgYml0bWFzawo+IC0gKiBAb3BzOiBvcGVyYXRpb24gdGFibGUKPiAtICogQHJvdF9j dHg6IHBvaW50ZXIgdG8gcHJpdmF0ZSByb3RhdG9yIGNvbnRleHQKPiAtICogQGZvcm1hdF9jYXBz OiBwb2ludGVyIHRvIHBpeGVsIGZvcm1hdCBjYXBhYmlsaXR5ICBhcnJheQo+IC0gKiBAZG93bnNj YWxlX2NhcHM6IHBvaW50ZXIgdG8gc2NhbGluZyBjYXBhYmlsaXR5IHN0cmluZwo+IC0gKi8KPiAt c3RydWN0IGRwdV9od19yb3Qgewo+IC0Jc3RydWN0IGRwdV9od19ibGsgYmFzZTsKPiAtCXN0cnVj dCBkcHVfaHdfYmxrX3JlZ19tYXAgaHc7Cj4gLQljaGFyIG5hbWVbRFBVX0hXX1JPVF9OQU1FX1NJ WkVdOwo+IC0JaW50IGlkeDsKPiAtCWNvbnN0IHN0cnVjdCBkcHVfcm90X2NmZyAqY2FwczsKPiAt CXN0cnVjdCBkcHVfaHdfcm90X29wcyBvcHM7Cj4gLQl2b2lkICpyb3RfY3R4Owo+IC0Jc3RydWN0 IGRwdV9mb3JtYXRfZXh0ZW5kZWQgKmZvcm1hdF9jYXBzOwo+IC0JY2hhciAqZG93bnNjYWxlX2Nh cHM7Cj4gLX07Cj4gLQo+IC0vKioKPiAtICogZHB1X2h3X3JvdF9pbml0IC0gaW5pdGlhbGl6ZSBh bmQgcmV0dXJuIHJvdGF0b3IgaHcgZHJpdmVyIG9iamVjdC4KPiAtICogQGlkeDogIHdiX3BhdGgg aW5kZXggZm9yIHdoaWNoIGRyaXZlciBvYmplY3QgaXMgcmVxdWlyZWQKPiAtICogQGFkZHI6IG1h cHBlZCByZWdpc3RlciBpbyBhZGRyZXNzIG9mIE1EUAo+IC0gKiBAbSA6ICAgcG9pbnRlciB0byBt ZHNzIGNhdGFsb2cgZGF0YQo+IC0gKi8KPiAtc3RydWN0IGRwdV9od19yb3QgKmRwdV9od19yb3Rf aW5pdChlbnVtIGRwdV9yb3QgaWR4LAo+IC0JCXZvaWQgX19pb21lbSAqYWRkciwKPiAtCQlzdHJ1 Y3QgZHB1X21kc3NfY2ZnICptKTsKPiAtCj4gLS8qKgo+IC0gKiBkcHVfaHdfcm90X2Rlc3Ryb3kg LSBkZXN0cm95IHJvdGF0b3IgaHcgZHJpdmVyIG9iamVjdC4KPiAtICogQGh3X3JvdDogIFBvaW50 ZXIgdG8gcm90YXRvciBodyBkcml2ZXIgb2JqZWN0Cj4gLSAqLwo+IC12b2lkIGRwdV9od19yb3Rf ZGVzdHJveShzdHJ1Y3QgZHB1X2h3X3JvdCAqaHdfcm90KTsKPiAtCj4gLS8qKgo+IC0gKiB0b19k cHVfaHdfcm90IC0gY29udmVydCBiYXNlIG9iamVjdCBkcHVfaHdfYmFzZSB0byByb3RhdG9yIG9i amVjdAo+IC0gKiBAaHc6IFBvaW50ZXIgdG8gYmFzZSBoYXJkd2FyZSBibG9jawo+IC0gKiByZXR1 cm46IFBvaW50ZXIgdG8gcm90YXRvciBoYXJkd2FyZSBibG9jawo+IC0gKi8KPiAtc3RhdGljIGlu bGluZSBzdHJ1Y3QgZHB1X2h3X3JvdCAqdG9fZHB1X2h3X3JvdChzdHJ1Y3QgZHB1X2h3X2JsayAq aHcpCj4gLXsKPiAtCXJldHVybiBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBkcHVfaHdfcm90LCBi YXNlKTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGRwdV9od19yb3RfZ2V0IC0gZ2V0IG5leHQgYXZh aWxhYmxlIGhhcmR3YXJlIHJvdGF0b3IsIG9yIGluY3JlbWVudCByZWZlcmVuY2UKPiAtICoJY291 bnQgaWYgaGFyZHdhcmUgcm90YXRvciBwcm92aWRlZAo+IC0gKiBAaHdfcm90OiBQb2ludGVyIHRv IGhhcmR3YXJlIHJvdGF0b3IKPiAtICogcmV0dXJuOiBQb2ludGVyIHRvIHJvdGF0b3IgaGFyZHdh cmUgYmxvY2sgaWYgc3VjY2VzczsgTlVMTCBvdGhlcndpc2UKPiAtICovCj4gLXN0cnVjdCBkcHVf aHdfcm90ICpkcHVfaHdfcm90X2dldChzdHJ1Y3QgZHB1X2h3X3JvdCAqaHdfcm90KTsKPiAtCj4g LS8qKgo+IC0gKiBkcHVfaHdfcm90X3B1dCAtIHB1dCB0aGUgZ2l2ZW4gaGFyZHdhcmUgcm90YXRv cgo+IC0gKiBAaHdfcm90OiBQb2ludGVyIHRvIGhhcmR3YXJlIHJvdGF0b3IKPiAtICogcmV0dXJu OiBub25lCj4gLSAqLwo+IC12b2lkIGRwdV9od19yb3RfcHV0KHN0cnVjdCBkcHVfaHdfcm90ICpo d19yb3QpOwo+IC0KPiAtI2VuZGlmIC8qX0RQVV9IV19ST1RfSCAqLwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuYwo+IGluZGV4IDNmZWNmMzMuLjUzNDMxODQg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmMKPiBA QCAtMTAyLDExICsxMDIsNiBAQAo+ICAjZGVmaW5lIFNTUFBfUU9TX0NUUkxfQ1JFUV9WQkxBTktf TUFTSyAgICAgMHgzCj4gICNkZWZpbmUgU1NQUF9RT1NfQ1RSTF9DUkVRX1ZCTEFOS19PRkYgICAg ICAyMAo+ICAKPiAtI2RlZmluZSBTU1BQX1NZU19DQUNIRV9NT0RFICAgICAgICAgICAgICAgIDB4 MUJDCj4gLSNkZWZpbmUgU1NQUF9TQlVGX1NUQVRVU19QTEFORTAgICAgICAgICAgICAweDFDMAo+ IC0jZGVmaW5lIFNTUFBfU0JVRl9TVEFUVVNfUExBTkUxICAgICAgICAgICAgMHgxQzQKPiAtI2Rl ZmluZSBTU1BQX1NCVUZfU1RBVFVTX1BMQU5FX0VNUFRZICAgICAgIEJJVCgxNikKPiAtCj4gIC8q IERQVV9TU1BQX1NDQUxFUl9RU0VFRDIgKi8KPiAgI2RlZmluZSBTQ0FMRV9DT05GSUcgICAgICAg ICAgICAgICAgICAgICAgIDB4MDQKPiAgI2RlZmluZSBDT01QMF8zX1BIQVNFX1NURVBfWCAgICAg ICAgICAgICAgIDB4MTAKPiBAQCAtNzU5LDQ1ICs3NTQsNiBAQCBzdGF0aWMgdm9pZCBkcHVfaHdf c3NwcF9zZXR1cF9xb3NfY3RybChzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKPiAgCURQVV9SRUdf V1JJVEUoJmN0eC0+aHcsIFNTUFBfUU9TX0NUUkwgKyBpZHgsIHFvc19jdHJsKTsKPiAgfQo+ICAK PiAtc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBfc3lzX2NhY2hlKHN0cnVjdCBkcHVfaHdf cGlwZSAqY3R4LAo+IC0JCXN0cnVjdCBkcHVfaHdfcGlwZV9zY19jZmcgKmNmZykKPiAtewo+IC0J dTMyIGlkeCwgdmFsOwo+IC0KPiAtCWlmIChfc3NwcF9zdWJibGtfb2Zmc2V0KGN0eCwgRFBVX1NT UFBfU1JDLCAmaWR4KSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JaWYgKCFjZmcpCj4gLQkJcmV0dXJu Owo+IC0KPiAtCXZhbCA9ICgoY2ZnLT5vcF9tb2RlICYgMHgzKSA8PCAxOCkgfAo+IC0JCQkoKGNm Zy0+cmRfZW4gJiAweDEpIDw8IDE1KSB8Cj4gLQkJCSgoY2ZnLT5yZF9zY2lkICYgMHgxZikgPDwg OCkgfAo+IC0JCQkoKGNmZy0+cmRfbm9hbGxvY2F0ZSAmIDB4MSkgPDwgNCkgfAo+IC0JCQkoKGNm Zy0+cmRfb3BfdHlwZSAmIDB4ZikgPDwgMCk7Cj4gLQo+IC0JRFBVX1JFR19XUklURSgmY3R4LT5o dywgU1NQUF9TWVNfQ0FDSEVfTU9ERSArIGlkeCwgdmFsKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZv aWQgZHB1X2h3X3NzcHBfZ2V0X3NidWZfc3RhdHVzKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAo+ IC0JCXN0cnVjdCBkcHVfaHdfcGlwZV9zYnVmX3N0YXR1cyAqc3RhdHVzKQo+IC17Cj4gLQl1MzIg aWR4LCB2YWw7Cj4gLQo+IC0JaWYgKF9zc3BwX3N1YmJsa19vZmZzZXQoY3R4LCBEUFVfU1NQUF9T UkMsICZpZHgpKQo+IC0JCXJldHVybjsKPiAtCj4gLQlpZiAoIXN0YXR1cykKPiAtCQlyZXR1cm47 Cj4gLQo+IC0JdmFsID0gRFBVX1JFR19SRUFEKCZjdHgtPmh3LCBTU1BQX1NCVUZfU1RBVFVTX1BM QU5FMCArIGlkeCk7Cj4gLQlzdGF0dXMtPmVtcHR5WzBdID0gdmFsICYgU1NQUF9TQlVGX1NUQVRV U19QTEFORV9FTVBUWSA/IHRydWUgOiBmYWxzZTsKPiAtCXN0YXR1cy0+cmRfcHRyWzBdID0gdmFs ICYgMHhmZmZmOwo+IC0JdmFsID0gRFBVX1JFR19SRUFEKCZjdHgtPmh3LCBTU1BQX1NCVUZfU1RB VFVTX1BMQU5FMSArIGlkeCk7Cj4gLQlzdGF0dXMtPmVtcHR5WzFdID0gdmFsICYgU1NQUF9TQlVG X1NUQVRVU19QTEFORV9FTVBUWSA/IHRydWUgOiBmYWxzZTsKPiAtCXN0YXR1cy0+cmRfcHRyWzFd ID0gdmFsICYgMHhmZmZmOwo+IC19Cj4gLQo+ICBzdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9zZXR1 cF90c19wcmVmaWxsKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAo+ICAJCXN0cnVjdCBkcHVfaHdf cGlwZV90c19jZmcgKmNmZywKPiAgCQllbnVtIGRwdV9zc3BwX211bHRpcmVjdF9pbmRleCBpbmRl eCkKPiBAQCAtOTMxLDExICs4ODcsNiBAQCBzdGF0aWMgdm9pZCBfc2V0dXBfbGF5ZXJfb3BzKHN0 cnVjdCBkcHVfaHdfcGlwZSAqYywKPiAgCQkJCWRwdV9zZXR1cF9waXBlX3BhX21lbWNvbF92MV83 Owo+ICAJfQo+ICAKPiAtCWlmICh0ZXN0X2JpdChEUFVfU1NQUF9TQlVGLCAmZmVhdHVyZXMpKSB7 Cj4gLQkJYy0+b3BzLnNldHVwX3N5c19jYWNoZSA9IGRwdV9od19zc3BwX3NldHVwX3N5c19jYWNo ZTsKPiAtCQljLT5vcHMuZ2V0X3NidWZfc3RhdHVzID0gZHB1X2h3X3NzcHBfZ2V0X3NidWZfc3Rh dHVzOwo+IC0JfQo+IC0KPiAgCWlmICh0ZXN0X2JpdChEUFVfU1NQUF9DRFAsICZmZWF0dXJlcykp Cj4gIAkJYy0+b3BzLnNldHVwX2NkcCA9IGRwdV9od19zc3BwX3NldHVwX2NkcDsKPiAgfQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5oIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuaAo+IGluZGV4IGRlOTcx ZjEuLmEzMmVjYzYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X3NzcHAuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d19zc3BwLmgKPiBAQCAtMjI0LDQxICsyMjQsNiBAQCBzdHJ1Y3QgZHB1X2h3X3BpcGVfY2RwX2Nm ZyB7Cj4gIH07Cj4gIAo+ICAvKioKPiAtICogZW51bSBzeXN0ZW0gY2FjaGUgcm90YXRpb24gb3Bl cmF0aW9uIG1vZGUKPiAtICovCj4gLWVudW0gewo+IC0JRFBVX1BJUEVfU0NfT1BfTU9ERV9PRkZM SU5FLAo+IC0JRFBVX1BJUEVfU0NfT1BfTU9ERV9JTkxJTkVfU0lOR0xFLAo+IC0JRFBVX1BJUEVf U0NfT1BfTU9ERV9JTkxJTkVfTEVGVCwKPiAtCURQVV9QSVBFX1NDX09QX01PREVfSU5MSU5FX1JJ R0hULAo+IC19Owo+IC0KPiAtLyoqCj4gLSAqIGVudW0gc3lzdGVtIGNhY2hlIHJlYWQgb3BlcmF0 aW9uIHR5cGUKPiAtICovCj4gLWVudW0gewo+IC0JRFBVX1BJUEVfU0NfUkRfT1BfVFlQRV9DQUNI RUFCTEUsCj4gLQlEUFVfUElQRV9TQ19SRF9PUF9UWVBFX0lOVkFMSURBVEUsCj4gLQlEUFVfUElQ RV9TQ19SRF9PUF9UWVBFX0VWSUNUSU9OLAo+IC19Owo+IC0KPiAtLyoqCj4gLSAqIHN0cnVjdCBk cHVfaHdfcGlwZV9zY19jZmcgLSBzeXN0ZW0gY2FjaGUgY29uZmlndXJhdGlvbgo+IC0gKiBAb3Bf bW9kZTogcm90YXRpb24gb3BlcmF0aW5nIG1vZGUKPiAtICogQHJkX2VuOiBzeXN0ZW0gY2FjaGUg cmVhZCBlbmFibGUKPiAtICogQHJkX3NjaWQ6IHN5c3RlbSBjYWNoZSByZWFkIGJsb2NrIGlkCj4g LSAqIEByZF9ub2FsbG9jYXRlOiBzeXN0ZW0gY2FjaGUgcmVhZCBubyBhbGxvY2F0ZSBhdHRyaWJ1 dGUKPiAtICogQHJkX29wX3R5cGU6IHN5c3RlbSBjYWNoZSByZWFkIG9wZXJhdGlvbiB0eXBlCj4g LSAqLwo+IC1zdHJ1Y3QgZHB1X2h3X3BpcGVfc2NfY2ZnIHsKPiAtCXUzMiBvcF9tb2RlOwo+IC0J Ym9vbCByZF9lbjsKPiAtCXUzMiByZF9zY2lkOwo+IC0JYm9vbCByZF9ub2FsbG9jYXRlOwo+IC0J dTMyIHJkX29wX3R5cGU7Cj4gLX07Cj4gLQo+IC0vKioKPiAgICogc3RydWN0IGRwdV9od19waXBl X3RzX2NmZyAtIHRyYWZmaWMgc2hhcGVyIGNvbmZpZ3VyYXRpb24KPiAgICogQHNpemU6IHNpemUg dG8gcHJlZmlsbCBpbiBieXRlcywgb3IgemVybyB0byBkaXNhYmxlCj4gICAqIEB0aW1lOiB0aW1l IHRvIHByZWZpbGwgaW4gdXNlYywgb3IgemVybyB0byBkaXNhYmxlCj4gQEAgLTI2OSwyMSArMjM0 LDYgQEAgc3RydWN0IGRwdV9od19waXBlX3RzX2NmZyB7Cj4gIH07Cj4gIAo+ICAvKioKPiAtICog TWF4aW11bSBudW1iZXIgb2Ygc3RyZWFtIGJ1ZmZlciBwbGFuZQo+IC0gKi8KPiAtI2RlZmluZSBE UFVfUElQRV9TQlVGX1BMQU5FX05VTQkyCj4gLQo+IC0vKioKPiAtICogc3RydWN0IGRwdV9od19w aXBlX3NidWZfc3RhdHVzIC0gc3RyZWFtIGJ1ZmZlciBzdGF0dXMKPiAtICogQGVtcHR5OiBpbmRp Y2F0ZSBpZiBzdHJlYW0gYnVmZmVyIGlzIGVtcHR5IG9mIG5vdAo+IC0gKiBAcmRfcHRyOiBjdXJy ZW50IHJlYWQgcG9pbnRlciBvZiBzdHJlYW0gYnVmZmVyCj4gLSAqLwo+IC1zdHJ1Y3QgZHB1X2h3 X3BpcGVfc2J1Zl9zdGF0dXMgewo+IC0JYm9vbCBlbXB0eVtEUFVfUElQRV9TQlVGX1BMQU5FX05V TV07Cj4gLQl1MzIgcmRfcHRyW0RQVV9QSVBFX1NCVUZfUExBTkVfTlVNXTsKPiAtfTsKPiAtCj4g LS8qKgo+ICAgKiBzdHJ1Y3QgZHB1X2h3X3NzcHBfb3BzIC0gaW50ZXJmYWNlIHRvIHRoZSBTU1BQ IEh3IGRyaXZlciBmdW5jdGlvbnMKPiAgICogQ2FsbGVyIG11c3QgY2FsbCB0aGUgaW5pdCBmdW5j dGlvbiB0byBnZXQgdGhlIHBpcGUgY29udGV4dCBmb3IgZWFjaCBwaXBlCj4gICAqIEFzc3VtcHRp b24gaXMgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGNsb2NrcyBhcmUgZW5h YmxlZAo+IEBAIC00NzIsMjIgKzQyMiw2IEBAIHN0cnVjdCBkcHVfaHdfc3NwcF9vcHMgewo+ICAJ dTMyICgqZ2V0X3NjYWxlcl92ZXIpKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4KTsKPiAgCj4gIAkv KioKPiAtCSAqIHNldHVwX3N5c19jYWNoZSAtIHNldHVwIHN5c3RlbSBjYWNoZSBjb25maWd1cmF0 aW9uCj4gLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAo+IC0JICogQGNmZzogUG9p bnRlciB0byBzeXN0ZW0gY2FjaGUgY29uZmlndXJhdGlvbgo+IC0JICovCj4gLQl2b2lkICgqc2V0 dXBfc3lzX2NhY2hlKShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKPiAtCQkJc3RydWN0IGRwdV9o d19waXBlX3NjX2NmZyAqY2ZnKTsKPiAtCj4gLQkvKioKPiAtCSAqIGdldF9zYnVmX3N0YXR1cyAt IGdldCBzdHJlYW0gYnVmZmVyIHN0YXR1cwo+IC0JICogQGN0eDogUG9pbnRlciB0byBwaXBlIGNv bnRleHQKPiAtCSAqIEBzdGF0dXM6IFBvaW50ZXIgdG8gc3RyZWFtIGJ1ZmZlciBzdGF0dXMKPiAt CSAqLwo+IC0Jdm9pZCAoKmdldF9zYnVmX3N0YXR1cykoc3RydWN0IGRwdV9od19waXBlICpjdHgs Cj4gLQkJCXN0cnVjdCBkcHVfaHdfcGlwZV9zYnVmX3N0YXR1cyAqc3RhdHVzKTsKPiAtCj4gLQkv KioKPiAgCSAqIHNldHVwX3RzX3ByZWZpbGwgLSBzZXR1cCBwcmVmaWxsIHRyYWZmaWMgc2hhcGVy Cj4gIAkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAo+ICAJICogQGNmZzogUG9pbnRl ciB0byB0cmFmZmljIHNoYXBlciBjb25maWd1cmF0aW9uCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X3BsYW5lLmMKPiBpbmRleCA3NzlkMzVkLi5jNjU3ZTZiIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKPiBAQCAtMzUsNyArMzUsNiBA QAo+ICAjaW5jbHVkZSAiZHB1X3ZiaWYuaCIKPiAgI2luY2x1ZGUgImRwdV9wbGFuZS5oIgo+ICAj aW5jbHVkZSAiZHB1X2NvbG9yX3Byb2Nlc3NpbmcuaCIKPiAtI2luY2x1ZGUgImRwdV9od19yb3Qu aCIKPiAgCj4gIHN0YXRpYyBib29sIHN1c3BlbmRfYmxhbmsgPSB0cnVlOwo+ICBtb2R1bGVfcGFy YW0oc3VzcGVuZF9ibGFuaywgYm9vbCwgMDQwMCk7Cj4gQEAgLTk5LDEwICs5OCw3IEBAIGVudW0g ZHB1X3BsYW5lX3FvcyB7Cj4gICAqIEBjc2NfcHRyOiBQb2ludHMgdG8gZHB1X2NzY19jZmcgc3Ry dWN0dXJlIHRvIHVzZSBmb3IgY3VycmVudAo+ICAgKiBAbXBsYW5lX2xpc3Q6IExpc3Qgb2YgbXVs dGlyZWN0IHBsYW5lcyBvZiB0aGUgc2FtZSBwaXBlCj4gICAqIEBjYXRhbG9nOiBQb2ludHMgdG8g ZHB1IGNhdGFsb2cgc3RydWN0dXJlCj4gLSAqIEBzYnVmX21vZGU6IGZvcmNlIHN0cmVhbSBidWZm ZXIgbW9kZSBpZiBzZXQKPiAtICogQHNidWZfd3JpdGViYWNrOiBmb3JjZSBzdHJlYW0gYnVmZmVy IHdyaXRlYmFjayBpZiBzZXQKPiAgICogQHJldmFsaWRhdGU6IGZvcmNlIHJldmFsaWRhdGlvbiBv ZiBhbGwgdGhlIHBsYW5lIHByb3BlcnRpZXMKPiAtICogQGJsb2Jfcm90X2NhcHM6IFBvaW50ZXIg dG8gcm90YXRvciBjYXBhYmlsaXR5IGJsb2IKPiAgICovCj4gIHN0cnVjdCBkcHVfcGxhbmUgewo+ ICAJc3RydWN0IGRybV9wbGFuZSBiYXNlOwo+IEBAIC0xMjQsOCArMTIwLDYgQEAgc3RydWN0IGRw dV9wbGFuZSB7Cj4gIAlib29sIGlzX3ZpcnR1YWw7Cj4gIAlzdHJ1Y3QgbGlzdF9oZWFkIG1wbGFu ZV9saXN0Owo+ICAJc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZzsKPiAtCXUzMiBzYnVmX21v ZGU7Cj4gLQl1MzIgc2J1Zl93cml0ZWJhY2s7Cj4gIAlib29sIHJldmFsaWRhdGU7Cj4gIAo+ICAJ c3RydWN0IGRwdV9jc2NfY2ZnIGNzY19jZmc7Cj4gQEAgLTEzOSw3ICsxMzMsNiBAQCBzdHJ1Y3Qg ZHB1X3BsYW5lIHsKPiAgCXN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyBwcm9wZXJ0eV9pbmZvOwo+ ICAJc3RydWN0IG1zbV9wcm9wZXJ0eV9kYXRhIHByb3BlcnR5X2RhdGFbUExBTkVfUFJPUF9DT1VO VF07Cj4gIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2JfaW5mbzsKPiAtCXN0cnVjdCBk cm1fcHJvcGVydHlfYmxvYiAqYmxvYl9yb3RfY2FwczsKPiAgCj4gIAkvKiBkZWJ1Z2ZzIHJlbGF0 ZWQgc3R1ZmYgKi8KPiAgCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKPiBAQCAtMTYzLDI3 ICsxNTYsNiBAQCBzdGF0aWMgc3RydWN0IGRwdV9rbXMgKl9kcHVfcGxhbmVfZ2V0X2ttcyhzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiAgCXJldHVybiB0b19kcHVfa21zKHByaXYtPmttcyk7Cj4g IH0KPiAgCj4gLS8qKgo+IC0gKiBfZHB1X3BsYW5lX2dldF9jcnRjX3N0YXRlIC0gb2J0YWluIGNy dGMgc3RhdGUgYXR0YWNoZWQgdG8gZ2l2ZW4gcGxhbmUgc3RhdGUKPiAtICogQHBzdGF0ZTogUG9p bnRlciB0byBkcm0gcGxhbmUgc3RhdGUKPiAtICogcmV0dXJuOiBQb2ludGVyIHRvIGNydGMgc3Rh dGUgaWYgc3VjY2VzczsgcG9pbnRlciBlcnJvciwgb3RoZXJ3aXNlCj4gLSAqLwo+IC1zdGF0aWMg c3RydWN0IGRybV9jcnRjX3N0YXRlICpfZHB1X3BsYW5lX2dldF9jcnRjX3N0YXRlKAo+IC0JCXN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRybV9jcnRjX3N0 YXRlICpjc3RhdGU7Cj4gLQo+IC0JaWYgKCFwc3RhdGUgfHwgIXBzdGF0ZS0+Y3J0YykKPiAtCQly ZXR1cm4gTlVMTDsKPiAtCj4gLQlpZiAocHN0YXRlLT5zdGF0ZSkKPiAtCQljc3RhdGUgPSBkcm1f YXRvbWljX2dldF9jcnRjX3N0YXRlKHBzdGF0ZS0+c3RhdGUsIHBzdGF0ZS0+Y3J0Yyk7Cj4gLQll bHNlCj4gLQkJY3N0YXRlID0gcHN0YXRlLT5jcnRjLT5zdGF0ZTsKPiAtCj4gLQlyZXR1cm4gY3N0 YXRlOwo+IC19Cj4gLQo+ICBzdGF0aWMgYm9vbCBkcHVfcGxhbmVfZW5hYmxlZChzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpzdGF0ZSkKPiAgewo+ICAJcmV0dXJuIHN0YXRlICYmIHN0YXRlLT5mYiAm JiBzdGF0ZS0+Y3J0YzsKPiBAQCAtMTkxLDE5ICsxNjMsNyBAQCBzdGF0aWMgYm9vbCBkcHVfcGxh bmVfZW5hYmxlZChzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiAgCj4gIHN0YXRpYyBi b29sIGRwdV9wbGFuZV9zc3BwX2VuYWJsZWQoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUp Cj4gIHsKPiAtCXJldHVybiBzdGF0ZSAmJiB0b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUpLT5yb3Qu b3V0X2ZiICYmIHN0YXRlLT5jcnRjOwo+IC19Cj4gLQo+IC0vKioKPiAtICogZHB1X3BsYW5lX2Ny dGNfZW5hYmxlZCAtIGRldGVybWluZSBpZiBjcnRjIG9mIGdpdmVuIHBsYW5lIHN0YXRlIGlzIGVu YWJsZWQKPiAtICogQHN0YXRlOiBQb2ludGVyIHRvIGRybSBwbGFuZSBzdGF0ZQo+IC0gKiByZXR1 cm46IHRydWUgaWYgcGxhbmUgYW5kIHRoZSBhc3NvY2lhdGVkIGNydGMgYXJlIGJvdGggZW5hYmxl ZAo+IC0gKi8KPiAtc3RhdGljIGJvb2wgZHB1X3BsYW5lX2NydGNfZW5hYmxlZChzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpzdGF0ZSkKPiAtewo+IC0JcmV0dXJuIGRwdV9wbGFuZV9lbmFibGVkKHN0 YXRlKSAmJiBzdGF0ZS0+Y3J0Yy0+c3RhdGUgJiYKPiAtCQkJc3RhdGUtPmNydGMtPnN0YXRlLT5h Y3RpdmUgJiYKPiAtCQkJc3RhdGUtPmNydGMtPnN0YXRlLT5lbmFibGU7Cj4gKwlyZXR1cm4gc3Rh dGUgJiYgc3RhdGUtPmNydGM7Cj4gIH0KPiAgCj4gIC8qKgo+IEBAIC0yMTgsMTAgKzE3OCw4IEBA IHN0YXRpYyBpbmxpbmUgaW50IF9kcHVfcGxhbmVfY2FsY19maWxsX2xldmVsKHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lLAo+ICB7Cj4gIAlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LCAqdG1wOwo+ICAJ c3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwo+IC0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rf c3RhdGUgKnJzdGF0ZTsKPiAgCXUzMiBmaXhlZF9idWZmX3NpemU7Cj4gIAl1MzIgdG90YWxfZmw7 Cj4gLQl1MzIgaGZsaXBfYnl0ZXM7Cj4gIAo+ICAJaWYgKCFwbGFuZSB8fCAhZm10IHx8ICFwbGFu ZS0+c3RhdGUgfHwgIXNyY193aWR0aCB8fCAhZm10LT5icHApIHsKPiAgCQlEUFVfRVJST1IoImlu dmFsaWQgYXJndW1lbnRzXG4iKTsKPiBAQCAtMjMwLDcgKzE4OCw2IEBAIHN0YXRpYyBpbmxpbmUg aW50IF9kcHVfcGxhbmVfY2FsY19maWxsX2xldmVsKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ ICAKPiAgCXBkcHUgPSB0b19kcHVfcGxhbmUocGxhbmUpOwo+ICAJcHN0YXRlID0gdG9fZHB1X3Bs YW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7Cj4gLQlyc3RhdGUgPSAmcHN0YXRlLT5yb3Q7Cj4gIAlm aXhlZF9idWZmX3NpemUgPSBwZHB1LT5waXBlX3NibGstPnBpeGVsX3JhbV9zaXplOwo+ICAKPiAg CWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmcGRwdS0+bXBsYW5lX2xpc3QsIG1wbGFuZV9saXN0 KSB7Cj4gQEAgLTI0MiwzNiArMTk5LDMwIEBAIHN0YXRpYyBpbmxpbmUgaW50IF9kcHVfcGxhbmVf Y2FsY19maWxsX2xldmVsKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJCXNyY193aWR0aCA9 IG1heF90KHUzMiwgc3JjX3dpZHRoLCB0bXAtPnBpcGVfY2ZnLnNyY19yZWN0LncpOwo+ICAJfQo+ ICAKPiAtCWlmICgocnN0YXRlLT5vdXRfcm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1gpICYm Cj4gLQkJCURQVV9GT1JNQVRfSVNfTElORUFSKGZtdCkpCj4gLQkJaGZsaXBfYnl0ZXMgPSAoc3Jj X3dpZHRoICsgMzIpICogZm10LT5icHA7Cj4gLQllbHNlCj4gLQkJaGZsaXBfYnl0ZXMgPSAwOwo+ IC0KPiAgCWlmIChmbXQtPmZldGNoX3BsYW5lcyA9PSBEUFVfUExBTkVfUFNFVURPX1BMQU5BUikg ewo+ICAJCWlmIChmbXQtPmNocm9tYV9zYW1wbGUgPT0gRFBVX0NIUk9NQV80MjApIHsKPiAgCQkJ LyogTlYxMiAqLwo+IC0JCQl0b3RhbF9mbCA9IChmaXhlZF9idWZmX3NpemUgLyAyIC0gaGZsaXBf Ynl0ZXMpIC8KPiArCQkJdG90YWxfZmwgPSAoZml4ZWRfYnVmZl9zaXplIC8gMikgLwo+ICAJCQkJ KChzcmNfd2lkdGggKyAzMikgKiBmbXQtPmJwcCk7Cj4gIAkJfSBlbHNlIHsKPiAgCQkJLyogbm9u IE5WMTIgKi8KPiAtCQkJdG90YWxfZmwgPSAoZml4ZWRfYnVmZl9zaXplIC8gMiAtIGhmbGlwX2J5 dGVzKSAqIDIgLwo+ICsJCQl0b3RhbF9mbCA9IChmaXhlZF9idWZmX3NpemUgLyAyKSAqIDIgLwo+ ICAJCQkJKChzcmNfd2lkdGggKyAzMikgKiBmbXQtPmJwcCk7Cj4gIAkJfQo+ICAJfSBlbHNlIHsK PiAgCQlpZiAocHN0YXRlLT5tdWx0aXJlY3RfbW9kZSA9PSBEUFVfU1NQUF9NVUxUSVJFQ1RfUEFS QUxMRUwpIHsKPiAtCQkJdG90YWxfZmwgPSAoZml4ZWRfYnVmZl9zaXplIC8gMiAtIGhmbGlwX2J5 dGVzKSAqIDIgLwo+ICsJCQl0b3RhbF9mbCA9IChmaXhlZF9idWZmX3NpemUgLyAyKSAqIDIgLwo+ ICAJCQkJKChzcmNfd2lkdGggKyAzMikgKiBmbXQtPmJwcCk7Cj4gIAkJfSBlbHNlIHsKPiAtCQkJ dG90YWxfZmwgPSAoZml4ZWRfYnVmZl9zaXplIC0gaGZsaXBfYnl0ZXMpICogMiAvCj4gKwkJCXRv dGFsX2ZsID0gKGZpeGVkX2J1ZmZfc2l6ZSkgKiAyIC8KPiAgCQkJCSgoc3JjX3dpZHRoICsgMzIp ICogZm10LT5icHApOwo+ICAJCX0KPiAgCX0KPiAgCj4gLQlEUFVfREVCVUcoInBsYW5lJXU6IHBu dW06JWQgZm10OiAlNC40cyB3OiV1IGhmOiVkIGZsOiV1XG4iLAo+ICsJRFBVX0RFQlVHKCJwbGFu ZSV1OiBwbnVtOiVkIGZtdDogJTQuNHMgdzoldSBmbDoldVxuIiwKPiAgCQkJcGxhbmUtPmJhc2Uu aWQsIHBkcHUtPnBpcGUgLSBTU1BQX1ZJRzAsCj4gIAkJCShjaGFyICopJmZtdC0+YmFzZS5waXhl bF9mb3JtYXQsCj4gLQkJCXNyY193aWR0aCwgaGZsaXBfYnl0ZXMsIHRvdGFsX2ZsKTsKPiArCQkJ c3JjX3dpZHRoLCB0b3RhbF9mbCk7Cj4gIAo+ICAJcmV0dXJuIHRvdGFsX2ZsOwo+ICB9Cj4gQEAg LTY3Niw5MCArNjI3LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXRfdHNfcHJlZmlsbChz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgfQo+ICAKPiAgLyoqCj4gLSAqIF9kcHVfcGxhbmVf aW5saW5lX3JvdF9zZXRfb3RfbGltaXQgLSBzZXQgT1QgbGltaXQgZm9yIHRoZSBnaXZlbiBpbmxp bmUKPiAtICogcm90YXRpb24geGluIGNsaWVudAo+IC0gKiBAcGxhbmU6IHBvaW50ZXIgdG8gZHJt IHBsYW5lCj4gLSAqIEBjcnRjOiBwb2ludGVyIHRvIGRybSBjcnRjCj4gLSAqIEBjZmc6IHBvaW50 ZXIgdG8gcm90YXRvciB2YmlmIGNvbmZpZwo+IC0gKiBAcmVjdF93OiByb3RhdG9yIGZyYW1lIHdp ZHRoCj4gLSAqIEByZWN0X2g6IHJvdGF0b3IgZnJhbWUgaGVpZ2h0Cj4gLSAqLwo+IC1zdGF0aWMg dm9pZCBfZHB1X3BsYW5lX2lubGluZV9yb3Rfc2V0X290X2xpbWl0KHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAo+IC0JCXN0cnVjdCBkcm1fY3J0YyAqY3J0YywgY29uc3Qgc3RydWN0IGRwdV9yb3Rf dmJpZl9jZmcgKmNmZywKPiAtCQl1MzIgcmVjdF93LCB1MzIgcmVjdF9oKQo+IC17Cj4gLQlzdHJ1 Y3QgZHB1X3ZiaWZfc2V0X290X3BhcmFtcyBvdF9wYXJhbXM7Cj4gLQlzdHJ1Y3QgbXNtX2RybV9w cml2YXRlICpwcml2Owo+IC0Jc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7Cj4gLQo+IC0JaWYgKCFw bGFuZSB8fCAhcGxhbmUtPmRldikgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudHNc biIpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQlwcml2ID0gcGxhbmUtPmRldi0+ZGV2X3By aXZhdGU7Cj4gLQlpZiAoIXByaXYgfHwgIXByaXYtPmttcykgewo+IC0JCURQVV9FUlJPUigiaW52 YWxpZCBLTVMgcmVmZXJlbmNlXG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0JZHB1X2tt cyA9IHRvX2RwdV9rbXMocHJpdi0+a21zKTsKPiAtCj4gLQltZW1zZXQoJm90X3BhcmFtcywgMCwg c2l6ZW9mKG90X3BhcmFtcykpOwo+IC0Jb3RfcGFyYW1zLnhpbl9pZCA9IGNmZy0+eGluX2lkOwo+ IC0Jb3RfcGFyYW1zLm51bSA9IGNmZy0+bnVtOwo+IC0Jb3RfcGFyYW1zLndpZHRoID0gcmVjdF93 Owo+IC0Jb3RfcGFyYW1zLmhlaWdodCA9IHJlY3RfaDsKPiAtCW90X3BhcmFtcy5pc193ZmQgPSBm YWxzZTsKPiAtCW90X3BhcmFtcy5mcmFtZV9yYXRlID0gY3J0Yy0+bW9kZS52cmVmcmVzaDsKPiAt CW90X3BhcmFtcy52YmlmX2lkeCA9IFZCSUZfUlQ7Cj4gLQlvdF9wYXJhbXMuY2xrX2N0cmwgPSBj ZmctPmNsa19jdHJsOwo+IC0Jb3RfcGFyYW1zLnJkID0gY2ZnLT5pc19yZWFkOwo+IC0KPiAtCWRw dV92YmlmX3NldF9vdF9saW1pdChkcHVfa21zLCAmb3RfcGFyYW1zKTsKPiAtfQo+IC0KPiAtLyoq Cj4gLSAqIF9kcHVfcGxhbmVfaW5saW5lX3JvdF9zZXRfcW9zX3JlbWFwIC0gc2V0IHZiaWYgUW9T IGZvciB0aGUgZ2l2ZW4gaW5saW5lCj4gLSAqIHJvdGF0aW9uIHhpbiBjbGllbnQKPiAtICogQHBs YW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQo+IC0gKiBAY2ZnOiBQb2ludGVyIHRvIHJvdGF0b3Ig dmJpZiBjZmcKPiAtICovCj4gLXN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfaW5saW5lX3JvdF9zZXRf cW9zX3JlbWFwKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+IC0JCWNvbnN0IHN0cnVjdCBkcHVf cm90X3ZiaWZfY2ZnICpjZmcpCj4gLXsKPiAtCXN0cnVjdCBkcHVfdmJpZl9zZXRfcW9zX3BhcmFt cyBxb3NfcGFyYW1zOwo+IC0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKPiAtCXN0cnVj dCBkcHVfa21zICpkcHVfa21zOwo+IC0KPiAtCWlmICghcGxhbmUgfHwgIXBsYW5lLT5kZXYpIHsK PiAtCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRzXG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9 Cj4gLQo+IC0JcHJpdiA9IHBsYW5lLT5kZXYtPmRldl9wcml2YXRlOwo+IC0JaWYgKCFwcml2IHx8 ICFwcml2LT5rbXMpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgS01TIHJlZmVyZW5jZVxuIik7 Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCWRwdV9rbXMgPSB0b19kcHVfa21zKHByaXYtPmtt cyk7Cj4gLQo+IC0JbWVtc2V0KCZxb3NfcGFyYW1zLCAwLCBzaXplb2YocW9zX3BhcmFtcykpOwo+ IC0JcW9zX3BhcmFtcy52YmlmX2lkeCA9IFZCSUZfUlQ7Cj4gLQlxb3NfcGFyYW1zLnhpbl9pZCA9 IGNmZy0+eGluX2lkOwo+IC0JcW9zX3BhcmFtcy5jbGtfY3RybCA9IGNmZy0+Y2xrX2N0cmw7Cj4g LQlxb3NfcGFyYW1zLm51bSA9IGNmZy0+bnVtOwo+IC0JcW9zX3BhcmFtcy5pc19ydCA9IHRydWU7 Cj4gLQo+IC0JRFBVX0RFQlVHKCJ2YmlmOiVkIHhpbjolZCBudW06JWQgcnQ6JWQgY2xrX2N0cmw6 JWRcbiIsCj4gLQkJCXFvc19wYXJhbXMudmJpZl9pZHgsIHFvc19wYXJhbXMueGluX2lkLAo+IC0J CQlxb3NfcGFyYW1zLm51bSwgcW9zX3BhcmFtcy5pc19ydCwgcW9zX3BhcmFtcy5jbGtfY3RybCk7 Cj4gLQo+IC0JZHB1X3ZiaWZfc2V0X3Fvc19yZW1hcChkcHVfa21zLCAmcW9zX3BhcmFtcyk7Cj4g LX0KPiAtCj4gLS8qKgo+ICAgKiBfZHB1X3BsYW5lX2dldF9hc3BhY2U6IGdldHMgdGhlIGFkZHJl c3Mgc3BhY2UKPiAgICovCj4gIHN0YXRpYyBpbnQgX2RwdV9wbGFuZV9nZXRfYXNwYWNlKAo+IEBA IC03NjgsNyArNjM1LDYgQEAgc3RhdGljIGludCBfZHB1X3BsYW5lX2dldF9hc3BhY2UoCj4gIAkJ c3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqKmFzcGFjZSkKPiAgewo+ICAJc3RydWN0IGRw dV9rbXMgKmttczsKPiAtCWludCBtb2RlOwo+ICAKPiAgCWlmICghcGRwdSB8fCAhcHN0YXRlIHx8 ICFhc3BhY2UpIHsKPiAgCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7Cj4gQEAg LTEzNzcsMTEwMiArMTI0Myw2IEBAIHN0YXRpYyBpbnQgX2RwdV9wbGFuZV9jb2xvcl9maWxsKHN0 cnVjdCBkcHVfcGxhbmUgKnBkcHUsCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtLyoqCj4gLSAq IF9kcHVfcGxhbmVfZmJfZ2V0L3B1dCAtIGZyYW1lYnVmZmVyIGNhbGxiYWNrIGZvciBjcnRjIHJl cyBvcHMKPiAtICovCj4gLXN0YXRpYyB2b2lkICpfZHB1X3BsYW5lX2ZiX2dldCh2b2lkICpmYiwg dTMyIHR5cGUsIHU2NCB0YWcpCj4gLXsKPiAtCWRybV9mcmFtZWJ1ZmZlcl9nZXQoZmIpOwo+IC0J cmV0dXJuIGZiOwo+IC19Cj4gLXN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfZmJfcHV0KHZvaWQgKmZi KQo+IC17Cj4gLQlkcm1fZnJhbWVidWZmZXJfcHV0KGZiKTsKPiAtfQo+IC1zdGF0aWMgc3RydWN0 IGRwdV9jcnRjX3Jlc19vcHMgZmJfcmVzX29wcyA9IHsKPiAtCS5wdXQgPSBfZHB1X3BsYW5lX2Zi X3B1dCwKPiAtCS5nZXQgPSBfZHB1X3BsYW5lX2ZiX2dldCwKPiAtfTsKPiAtCj4gLS8qKgo+IC0g KiBfZHB1X3BsYW5lX2Zib19nZXQvcHV0IC0gZnJhbWVidWZmZXIgb2JqZWN0IGNhbGxiYWNrIGZv ciBjcnRjIHJlcyBvcHMKPiAtICovCj4gLXN0YXRpYyB2b2lkICpfZHB1X3BsYW5lX2Zib19nZXQo dm9pZCAqZmJvLCB1MzIgdHlwZSwgdTY0IHRhZykKPiAtewo+IC0JZHB1X2ttc19mYm9fcmVmZXJl bmNlKGZibyk7Cj4gLQlyZXR1cm4gZmJvOwo+IC19Cj4gLXN0YXRpYyB2b2lkIF9kcHVfcGxhbmVf ZmJvX3B1dCh2b2lkICpmYm8pCj4gLXsKPiAtCWRwdV9rbXNfZmJvX3VucmVmZXJlbmNlKGZibyk7 Cj4gLX0KPiAtc3RhdGljIHN0cnVjdCBkcHVfY3J0Y19yZXNfb3BzIGZib19yZXNfb3BzID0gewo+ IC0JLnB1dCA9IF9kcHVfcGxhbmVfZmJvX3B1dCwKPiAtCS5nZXQgPSBfZHB1X3BsYW5lX2Zib19n ZXQsCj4gLX07Cj4gLQo+IC0vKioKPiAtICogZHB1X3BsYW5lX3JvdF9jYWxjX3ByZWZpbGwgLSBj YWxjdWxhdGUgcm90YXRvciBzdGFydCBwcmVmaWxsCj4gLSAqIEBwbGFuZTogUG9pbnRlciB0byBk cm0gcGxhbmUKPiAtICogcmV0dXJuOiBwcmVmaWxsIHRpbWUgaW4gbGluZQo+IC0gKi8KPiAtdTMy IGRwdV9wbGFuZV9yb3RfY2FsY19wcmVmaWxsKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+IC17 Cj4gLQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZTsKPiAtCXN0cnVjdCBkcHVfcGxhbmVf c3RhdGUgKnBzdGF0ZTsKPiAtCXN0cnVjdCBkcHVfcGxhbmVfcm90X3N0YXRlICpyc3RhdGU7Cj4g LQlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKPiAtCXUzMiBibG9ja3NpemUgPSAxMjg7Cj4gLQl1 MzIgcHJlZmlsbF9saW5lID0gMDsKPiAtCj4gLQlpZiAoIXBsYW5lIHx8ICFwbGFuZS0+c3RhdGUg fHwgIXBsYW5lLT5zdGF0ZS0+ZmIpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVy c1xuIik7Cj4gLQkJcmV0dXJuIDA7Cj4gLQl9Cj4gLQo+IC0JZHB1X2ttcyA9IF9kcHVfcGxhbmVf Z2V0X2ttcyhwbGFuZSk7Cj4gLQlzdGF0ZSA9IHBsYW5lLT5zdGF0ZTsKPiAtCXBzdGF0ZSA9IHRv X2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7Cj4gLQlyc3RhdGUgPSAmcHN0YXRlLT5yb3Q7Cj4gLQo+ IC0JaWYgKCFkcHVfa21zIHx8ICFkcHVfa21zLT5jYXRhbG9nKSB7Cj4gLQkJRFBVX0VSUk9SKCJp bnZhbGlkIGttc1xuIik7Cj4gLQkJcmV0dXJuIDA7Cj4gLQl9Cj4gLQo+IC0JaWYgKHJzdGF0ZS0+ b3V0X2ZiX2Zvcm1hdCkKPiAtCQlkcHVfZm9ybWF0X2dldF9ibG9ja19zaXplKHJzdGF0ZS0+b3V0 X2ZiX2Zvcm1hdCwKPiAtCQkJCSZibG9ja3NpemUsICZibG9ja3NpemUpOwo+IC0KPiAtCXByZWZp bGxfbGluZSA9IGJsb2Nrc2l6ZSArIGRwdV9rbXMtPmNhdGFsb2ctPnNidWZfaGVhZHJvb207Cj4g LQlwcmVmaWxsX2xpbmUgPSBtdWx0X2ZyYWMocHJlZmlsbF9saW5lLCByc3RhdGUtPm91dF9zcmNf aCA+PiAxNiwKPiAtCQkJc3RhdGUtPmNydGNfaCk7Cj4gLQlEUFVfREVCVUcoCj4gLQkJInBsYW5l JWQuJWQgYmxrOiV1IGhlYWQ6JXUgdmRzdC92c3JjOiV1LyV1IHByZWZpbGw6JXVcbiIsCj4gLQkJ CXBsYW5lLT5iYXNlLmlkLCByc3RhdGUtPnNlcXVlbmNlX2lkLAo+IC0JCQlibG9ja3NpemUsIGRw dV9rbXMtPmNhdGFsb2ctPnNidWZfaGVhZHJvb20sCj4gLQkJCXN0YXRlLT5jcnRjX2gsIHJzdGF0 ZS0+b3V0X3NyY19oID4+IDE2LAo+IC0JCQlwcmVmaWxsX2xpbmUpOwo+IC0KPiAtCXJldHVybiBw cmVmaWxsX2xpbmU7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBkcHVfcGxhbmVfcm90X2NhbGNfY2Zn IC0gY2FsY3VsYXRlIHJvdGF0b3Ivc3NwcCBjb25maWd1cmF0aW9uIGJ5Cj4gLSAqCWVudW1lcmF0 aW5nIG92ZXIgYWxsIHBsYW5lcyBhdHRhY2hlZCB0byB0aGUgc2FtZSByb3RhdG9yCj4gLSAqIEBw bGFuZTogUG9pbnRlciB0byBkcm0gcGxhbmUKPiAtICogQHN0YXRlOiBQb2ludGVyIHRvIGRybSBz dGF0ZSB0byBiZSB1cGRhdGVkCj4gLSAqIHJldHVybjogMCBpZiBzdWNjZXNzOyBlcnJvciBjb2Rl IG90aGVyd2lzZQo+IC0gKi8KPiAtc3RhdGljIGludCBkcHVfcGxhbmVfcm90X2NhbGNfY2ZnKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+IC0JCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRl KQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7Cj4gLQlzdHJ1Y3QgZHB1 X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRlOwo+IC0Jc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3Rh dGU7Cj4gLQlzdHJ1Y3QgZHJtX3JlY3QgKmluX3JvdCwgKm91dF9yb3Q7Cj4gLQlzdHJ1Y3QgZHJt X3BsYW5lICphdHRhY2hlZF9wbGFuZTsKPiAtCXUzMiBkc3RfeCwgZHN0X3ksIGRzdF93LCBkc3Rf aDsKPiAtCWludCBmb3VuZCA9IDA7Cj4gLQlpbnQgeHBvcyA9IDA7Cj4gLQlpbnQgcmV0Owo+IC0K PiAtCWlmICghcGxhbmUgfHwgIXN0YXRlIHx8ICFzdGF0ZS0+c3RhdGUpIHsKPiAtCQlEUFVfRVJS T1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4g LQo+IC0JY3N0YXRlID0gX2RwdV9wbGFuZV9nZXRfY3J0Y19zdGF0ZShzdGF0ZSk7Cj4gLQlpZiAo SVNfRVJSX09SX05VTEwoY3N0YXRlKSkgewo+IC0JCXJldCA9IFBUUl9FUlIoY3N0YXRlKTsKPiAt CQlEUFVfRVJST1IoImludmFsaWQgY3J0YyBzdGF0ZSAlZFxuIiwgcmV0KTsKPiAtCQlyZXR1cm4g cmV0Owo+IC0JfQo+IC0KPiAtCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7Cj4g LQlyc3RhdGUgPSAmcHN0YXRlLT5yb3Q7Cj4gLQo+IC0JaW5fcm90ID0gJnJzdGF0ZS0+aW5fcm90 X3JlY3Q7Cj4gLQkqaW5fcm90ID0gZHJtX3BsYW5lX3N0YXRlX3NyYyhzdGF0ZSk7Cj4gLQo+IC0J b3V0X3JvdCA9ICZyc3RhdGUtPm91dF9yb3RfcmVjdDsKPiAtCWRzdF94ID0gZHB1X3BsYW5lX2dl dF9wcm9wZXJ0eShwc3RhdGUsIFBMQU5FX1BST1BfUk9UX0RTVF9YKTsKPiAtCWRzdF95ID0gZHB1 X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsIFBMQU5FX1BST1BfUk9UX0RTVF9ZKTsKPiAtCWRz dF93ID0gZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsIFBMQU5FX1BST1BfUk9UX0RTVF9X KTsKPiAtCWRzdF9oID0gZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsIFBMQU5FX1BST1Bf Uk9UX0RTVF9IKTsKPiAtCj4gLQlpZiAoIWRzdF93ICYmICFkc3RfaCkgewo+IC0JCXJzdGF0ZS0+ b3V0X3JvdF9yZWN0ID0gcnN0YXRlLT5pbl9yb3RfcmVjdDsKPiAtCQlkcm1fcmVjdF9yb3RhdGUo JnJzdGF0ZS0+b3V0X3JvdF9yZWN0LCBzdGF0ZS0+ZmItPndpZHRoIDw8IDE2LAo+IC0JCQkJc3Rh dGUtPmZiLT5oZWlnaHQgPDwgMTYsIHJzdGF0ZS0+aW5fcm90YXRpb24pOwo+IC0JfSBlbHNlIHsK PiAtCQlvdXRfcm90LT54MSA9IGRzdF94Owo+IC0JCW91dF9yb3QtPnkxID0gZHN0X3k7Cj4gLQkJ b3V0X3JvdC0+eDIgPSBkc3RfeCArIGRzdF93Owo+IC0JCW91dF9yb3QtPnkyID0gZHN0X3kgKyBk c3RfaDsKPiAtCX0KPiAtCj4gLQlyc3RhdGUtPm91dF9zcmNfcmVjdCA9IHJzdGF0ZS0+b3V0X3Jv dF9yZWN0Owo+IC0KPiAtCS8qIGVudW1lcmF0aW5nIG92ZXIgYWxsIHBsYW5lcyBhdHRhY2hlZCB0 byB0aGUgc2FtZSByb3RhdG9yICovCj4gLQlkcm1fYXRvbWljX2NydGNfc3RhdGVfZm9yX2VhY2hf cGxhbmUoYXR0YWNoZWRfcGxhbmUsIGNzdGF0ZSkgewo+IC0JCXN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKmF0dGFjaGVkX3N0YXRlOwo+IC0JCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKmF0dGFjaGVk X3BzdGF0ZTsKPiAtCQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqYXR0YWNoZWRfcnN0YXRl Owo+IC0JCXN0cnVjdCBkcm1fcmVjdCBhdHRhY2hlZF9vdXRfcmVjdDsKPiAtCj4gLQkJYXR0YWNo ZWRfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9leGlzdGluZ19wbGFuZV9zdGF0ZSgKPiAtCQkJCXN0 YXRlLT5zdGF0ZSwgYXR0YWNoZWRfcGxhbmUpOwo+IC0KPiAtCQlpZiAoIWF0dGFjaGVkX3N0YXRl KQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJYXR0YWNoZWRfcHN0YXRlID0gdG9fZHB1X3BsYW5l X3N0YXRlKGF0dGFjaGVkX3N0YXRlKTsKPiAtCQlhdHRhY2hlZF9yc3RhdGUgPSAmYXR0YWNoZWRf cHN0YXRlLT5yb3Q7Cj4gLQo+IC0JCWlmIChhdHRhY2hlZF9zdGF0ZS0+ZmIgIT0gc3RhdGUtPmZi KQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJaWYgKGRwdV9wbGFuZV9nZXRfcHJvcGVydHkocHN0 YXRlLCBQTEFORV9QUk9QX1JPVEFUSU9OKSAhPQo+IC0JCQlkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5 KGF0dGFjaGVkX3BzdGF0ZSwKPiAtCQkJCVBMQU5FX1BST1BfUk9UQVRJT04pKQo+IC0JCQljb250 aW51ZTsKPiAtCj4gLQkJZm91bmQrKzsKPiAtCj4gLQkJLyogc2tpcCBpdHNlbGYgKi8KPiAtCQlp ZiAoYXR0YWNoZWRfcGxhbmUgPT0gcGxhbmUpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAtCQkvKiBm aW5kIGJvdW5kaW5nIHJvdGF0b3Igc291cmNlIHJvaSAqLwo+IC0JCWlmIChhdHRhY2hlZF9zdGF0 ZS0+c3JjX3ggPCBpbl9yb3QtPngxKQo+IC0JCQlpbl9yb3QtPngxID0gYXR0YWNoZWRfc3RhdGUt PnNyY194Owo+IC0KPiAtCQlpZiAoYXR0YWNoZWRfc3RhdGUtPnNyY195IDwgaW5fcm90LT55MSkK PiAtCQkJaW5fcm90LT55MSA9IGF0dGFjaGVkX3N0YXRlLT5zcmNfeTsKPiAtCj4gLQkJaWYgKGF0 dGFjaGVkX3N0YXRlLT5zcmNfeCArIGF0dGFjaGVkX3N0YXRlLT5zcmNfdyA+IGluX3JvdC0+eDIp Cj4gLQkJCWluX3JvdC0+eDIgPSBhdHRhY2hlZF9zdGF0ZS0+c3JjX3ggKwo+IC0JCQkJYXR0YWNo ZWRfc3RhdGUtPnNyY193Owo+IC0KPiAtCQlpZiAoYXR0YWNoZWRfc3RhdGUtPnNyY195ICsgYXR0 YWNoZWRfc3RhdGUtPnNyY19oID4gaW5fcm90LT55MikKPiAtCQkJaW5fcm90LT55MiA9IGF0dGFj aGVkX3N0YXRlLT5zcmNfeSArCj4gLQkJCQlhdHRhY2hlZF9zdGF0ZS0+c3JjX2g7Cj4gLQo+IC0J CS8qIGZpbmQgYm91bmRpbmcgcm90YXRvciBkZXN0aW5hdGlvbiByb2kgKi8KPiAtCQlkc3RfeCA9 IGRwdV9wbGFuZV9nZXRfcHJvcGVydHkoYXR0YWNoZWRfcHN0YXRlLAo+IC0JCQkJUExBTkVfUFJP UF9ST1RfRFNUX1gpOwo+IC0JCWRzdF95ID0gZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShhdHRhY2hl ZF9wc3RhdGUsCj4gLQkJCQlQTEFORV9QUk9QX1JPVF9EU1RfWSk7Cj4gLQkJZHN0X3cgPSBkcHVf cGxhbmVfZ2V0X3Byb3BlcnR5KGF0dGFjaGVkX3BzdGF0ZSwKPiAtCQkJCVBMQU5FX1BST1BfUk9U X0RTVF9XKTsKPiAtCQlkc3RfaCA9IGRwdV9wbGFuZV9nZXRfcHJvcGVydHkoYXR0YWNoZWRfcHN0 YXRlLAo+IC0JCQkJUExBTkVfUFJPUF9ST1RfRFNUX0gpOwo+IC0JCWlmICghZHN0X3cgJiYgIWRz dF9oKSB7Cj4gLQkJCWF0dGFjaGVkX291dF9yZWN0ID0gZHJtX3BsYW5lX3N0YXRlX3NyYyhhdHRh Y2hlZF9zdGF0ZSk7Cj4gLQkJCWRybV9yZWN0X3JvdGF0ZSgmYXR0YWNoZWRfb3V0X3JlY3QsCj4g LQkJCQkJc3RhdGUtPmZiLT53aWR0aCA8PCAxNiwKPiAtCQkJCQlzdGF0ZS0+ZmItPmhlaWdodCA8 PCAxNiwKPiAtCQkJCQlyc3RhdGUtPmluX3JvdGF0aW9uKTsKPiAtCQl9IGVsc2Ugewo+IC0JCQlh dHRhY2hlZF9vdXRfcmVjdC54MSA9IGRzdF94Owo+IC0JCQlhdHRhY2hlZF9vdXRfcmVjdC55MSA9 IGRzdF95Owo+IC0JCQlhdHRhY2hlZF9vdXRfcmVjdC54MiA9IGRzdF94ICsgZHN0X3c7Cj4gLQkJ CWF0dGFjaGVkX291dF9yZWN0LnkyID0gZHN0X3kgKyBkc3RfaDsKPiAtCQl9Cj4gLQo+IC0JCS8q IGNoZWNrIHNvdXJjZSBzcGxpdCBsZWZ0L3JpZ2h0IG1pc21hdGNoICovCj4gLQkJaWYgKGF0dGFj aGVkX291dF9yZWN0LnkxICE9IHJzdGF0ZS0+b3V0X3NyY19yZWN0LnkxIHx8Cj4gLQkJCWF0dGFj aGVkX291dF9yZWN0LnkyICE9IHJzdGF0ZS0+b3V0X3NyY19yZWN0LnkyKSB7Cj4gLQkJCURQVV9F UlJPUigKPiAtCQkJCSJwbGFuZSVkLiV1IHNyYzolZHglZCslZCslZCByb3Q6MHglbGx4IGZiOiVk IHBsYW5lJWQuJXUgc3JjOiVkeCVkKyVkKyVkIHJvdDoweCVsbHggZmI6JWQgbWlzbWF0Y2hcbiIs Cj4gLQkJCQkJcGxhbmUtPmJhc2UuaWQsCj4gLQkJCQkJcnN0YXRlLT5zZXF1ZW5jZV9pZCwKPiAt CQkJCQlzdGF0ZS0+c3JjX3cgPj4gMTYsCj4gLQkJCQkJc3RhdGUtPnNyY19oID4+IDE2LAo+IC0J CQkJCXN0YXRlLT5zcmNfeCA+PiAxNiwKPiAtCQkJCQlzdGF0ZS0+c3JjX3kgPj4gMTYsCj4gLQkJ CQkJZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsCj4gLQkJCQkJCQlQTEFORV9QUk9QX1JP VEFUSU9OKSwKPiAtCQkJCQlzdGF0ZS0+ZmIgPwo+IC0JCQkJCQlzdGF0ZS0+ZmItPmJhc2UuaWQg Ogo+IC0JCQkJCQktMSwKPiAtCQkJCQlhdHRhY2hlZF9wbGFuZS0+YmFzZS5pZCwKPiAtCQkJCQlh dHRhY2hlZF9yc3RhdGUtPnNlcXVlbmNlX2lkLAo+IC0JCQkJCWF0dGFjaGVkX3N0YXRlLT5zcmNf dyA+PiAxNiwKPiAtCQkJCQlhdHRhY2hlZF9zdGF0ZS0+c3JjX2ggPj4gMTYsCj4gLQkJCQkJYXR0 YWNoZWRfc3RhdGUtPnNyY194ID4+IDE2LAo+IC0JCQkJCWF0dGFjaGVkX3N0YXRlLT5zcmNfeSA+ PiAxNiwKPiAtCQkJCQlkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KGF0dGFjaGVkX3BzdGF0ZSwKPiAt CQkJCQkJCVBMQU5FX1BST1BfUk9UQVRJT04pLAo+IC0JCQkJCWF0dGFjaGVkX3N0YXRlLT5mYiA/ Cj4gLQkJCQkJCWF0dGFjaGVkX3N0YXRlLT5mYi0+YmFzZS5pZCA6Cj4gLQkJCQkJCS0xKTsKPiAt CQkJRFBVX0VSUk9SKAo+IC0JCQkJInBsYW5lJWQuJXUgc3NwcDolZHglZCslZCslZCBwbGFuZSVk LiV1IHNzcHA6JWR4JWQrJWQrJWRcbiIsCj4gLQkJCQkJcGxhbmUtPmJhc2UuaWQsCj4gLQkJCQkJ cnN0YXRlLT5zZXF1ZW5jZV9pZCwKPiAtCQkJCQkocnN0YXRlLT5vdXRfc3JjX3JlY3QueDIgLQo+ IC0JCQkJCQlyc3RhdGUtPm91dF9zcmNfcmVjdC54MSkgPj4gMTYsCj4gLQkJCQkJKHJzdGF0ZS0+ b3V0X3NyY19yZWN0LnkyIC0KPiAtCQkJCQkJcnN0YXRlLT5vdXRfc3JjX3JlY3QueTEpID4+IDE2 LAo+IC0JCQkJCXJzdGF0ZS0+b3V0X3NyY19yZWN0LngxID4+IDE2LAo+IC0JCQkJCXJzdGF0ZS0+ b3V0X3NyY19yZWN0LnkxID4+IDE2LAo+IC0JCQkJCWF0dGFjaGVkX3BsYW5lLT5iYXNlLmlkLAo+ IC0JCQkJCWF0dGFjaGVkX3JzdGF0ZS0+c2VxdWVuY2VfaWQsCj4gLQkJCQkJKGF0dGFjaGVkX291 dF9yZWN0LngyIC0KPiAtCQkJCQkJYXR0YWNoZWRfb3V0X3JlY3QueDEpID4+IDE2LAo+IC0JCQkJ CShhdHRhY2hlZF9vdXRfcmVjdC55MiAtCj4gLQkJCQkJCWF0dGFjaGVkX291dF9yZWN0LnkxKSA+ PiAxNiwKPiAtCQkJCQlhdHRhY2hlZF9vdXRfcmVjdC54MSA+PiAxNiwKPiAtCQkJCQlhdHRhY2hl ZF9vdXRfcmVjdC55MSA+PiAxNik7Cj4gLQkJCURQVV9FVlQzMihEUk1JRChwbGFuZSksCj4gLQkJ CQkJcnN0YXRlLT5zZXF1ZW5jZV9pZCwKPiAtCQkJCQlyc3RhdGUtPm91dF9zcmNfcmVjdC54MSA+ PiAxNiwKPiAtCQkJCQlyc3RhdGUtPm91dF9zcmNfcmVjdC55MSA+PiAxNiwKPiAtCQkJCQkocnN0 YXRlLT5vdXRfc3JjX3JlY3QueDIgLQo+IC0JCQkJCQlyc3RhdGUtPm91dF9zcmNfcmVjdC54MSkg Pj4gMTYsCj4gLQkJCQkJKHJzdGF0ZS0+b3V0X3NyY19yZWN0LnkyIC0KPiAtCQkJCQkJcnN0YXRl LT5vdXRfc3JjX3JlY3QueTEpID4+IDE2LAo+IC0JCQkJCWF0dGFjaGVkX3BsYW5lLT5iYXNlLmlk LAo+IC0JCQkJCWF0dGFjaGVkX3JzdGF0ZS0+c2VxdWVuY2VfaWQsCj4gLQkJCQkJYXR0YWNoZWRf b3V0X3JlY3QueDEgPj4gMTYsCj4gLQkJCQkJYXR0YWNoZWRfb3V0X3JlY3QueTEgPj4gMTYsCj4g LQkJCQkJKGF0dGFjaGVkX291dF9yZWN0LngyIC0KPiAtCQkJCQkJYXR0YWNoZWRfb3V0X3JlY3Qu eDEpID4+IDE2LAo+IC0JCQkJCShhdHRhY2hlZF9vdXRfcmVjdC55MiAtCj4gLQkJCQkJCWF0dGFj aGVkX291dF9yZWN0LnkxKSA+PiAxNiwKPiAtCQkJCQlEUFVfRVZUTE9HX0VSUk9SKTsKPiAtCQkJ cmV0dXJuIC1FSU5WQUw7Cj4gLQkJfQo+IC0KPiAtCQkvKiBmaW5kIHJlbGF0aXZlIHNzcHAgcG9z aXRpb24gKi8KPiAtCQlpZiAoYXR0YWNoZWRfb3V0X3JlY3QueDEgPCByc3RhdGUtPm91dF9zcmNf cmVjdC54MSkKPiAtCQkJeHBvcysrOwo+IC0KPiAtCQlpZiAoYXR0YWNoZWRfb3V0X3JlY3QueDEg PCBvdXRfcm90LT54MSkKPiAtCQkJb3V0X3JvdC0+eDEgPSBhdHRhY2hlZF9vdXRfcmVjdC54MTsK PiAtCj4gLQkJaWYgKGF0dGFjaGVkX291dF9yZWN0LnkxIDwgb3V0X3JvdC0+eTEpCj4gLQkJCW91 dF9yb3QtPnkxID0gYXR0YWNoZWRfb3V0X3JlY3QueTE7Cj4gLQo+IC0JCWlmIChhdHRhY2hlZF9v dXRfcmVjdC54MiA+IG91dF9yb3QtPngyKQo+IC0JCQlvdXRfcm90LT54MiA9IGF0dGFjaGVkX291 dF9yZWN0LngyOwo+IC0KPiAtCQlpZiAoYXR0YWNoZWRfb3V0X3JlY3QueTIgPiBvdXRfcm90LT55 MikKPiAtCQkJb3V0X3JvdC0+eTIgPSBhdHRhY2hlZF9vdXRfcmVjdC55MjsKPiAtCj4gLQkJRFBV X0RFQlVHKCJwbGFuZSVkLiV1IHNyY194OiVkIHNzcHA6JWR4JWQrJWQrJWQvJWR4JWQrJWQrJWRc biIsCj4gLQkJCWF0dGFjaGVkX3BsYW5lLT5iYXNlLmlkLAo+IC0JCQlhdHRhY2hlZF9yc3RhdGUt PnNlcXVlbmNlX2lkLAo+IC0JCQlhdHRhY2hlZF9yc3RhdGUtPm91dF9zcmNfcmVjdC54MSA+PiAx NiwKPiAtCQkJYXR0YWNoZWRfc3RhdGUtPnNyY193ID4+IDE2LAo+IC0JCQlhdHRhY2hlZF9zdGF0 ZS0+c3JjX2ggPj4gMTYsCj4gLQkJCWF0dGFjaGVkX3N0YXRlLT5zcmNfeCA+PiAxNiwKPiAtCQkJ YXR0YWNoZWRfc3RhdGUtPnNyY195ID4+IDE2LAo+IC0JCQlkcm1fcmVjdF93aWR0aCgmYXR0YWNo ZWRfcnN0YXRlLT5vdXRfc3JjX3JlY3QpID4+IDE2LAo+IC0JCQlkcm1fcmVjdF9oZWlnaHQoJmF0 dGFjaGVkX3JzdGF0ZS0+b3V0X3NyY19yZWN0KSA+PiAxNiwKPiAtCQkJYXR0YWNoZWRfcnN0YXRl LT5vdXRfc3JjX3JlY3QueDEgPj4gMTYsCj4gLQkJCWF0dGFjaGVkX3JzdGF0ZS0+b3V0X3NyY19y ZWN0LnkxID4+IDE2KTsKPiAtCX0KPiAtCj4gLQlyc3RhdGUtPm91dF94cG9zID0geHBvczsKPiAt CXJzdGF0ZS0+bnBsYW5lID0gZm91bmQ7Cj4gLQo+IC0JRFBVX0RFQlVHKCJwbGFuZSVkLiV1IHhw b3M6JWQvJWQgcm90OiVkeCVkKyVkKyVkLyVkeCVkKyVkKyVkXG4iLAo+IC0JCQlwbGFuZS0+YmFz ZS5pZCwgcnN0YXRlLT5zZXF1ZW5jZV9pZCwKPiAtCQkJcnN0YXRlLT5vdXRfeHBvcywgcnN0YXRl LT5ucGxhbmUsCj4gLQkJCWRybV9yZWN0X3dpZHRoKGluX3JvdCkgPj4gMTYsCj4gLQkJCWRybV9y ZWN0X2hlaWdodChpbl9yb3QpID4+IDE2LAo+IC0JCQlpbl9yb3QtPngxID4+IDE2LCBpbl9yb3Qt PnkxID4+IDE2LAo+IC0JCQlkcm1fcmVjdF93aWR0aCgmcnN0YXRlLT5vdXRfcm90X3JlY3QpID4+ IDE2LAo+IC0JCQlkcm1fcmVjdF9oZWlnaHQoJnJzdGF0ZS0+b3V0X3JvdF9yZWN0KSA+PiAxNiwK PiAtCQkJcnN0YXRlLT5vdXRfcm90X3JlY3QueDEgPj4gMTYsCj4gLQkJCXJzdGF0ZS0+b3V0X3Jv dF9yZWN0LnkxID4+IDE2KTsKPiAtCURQVV9FVlQzMihEUk1JRChwbGFuZSksIHJzdGF0ZS0+c2Vx dWVuY2VfaWQsCj4gLQkJCXJzdGF0ZS0+b3V0X3hwb3MsIHJzdGF0ZS0+bnBsYW5lLAo+IC0JCQlp bl9yb3QtPngxID4+IDE2LCBpbl9yb3QtPnkxID4+IDE2LAo+IC0JCQlkcm1fcmVjdF93aWR0aChp bl9yb3QpID4+IDE2LAo+IC0JCQlkcm1fcmVjdF9oZWlnaHQoaW5fcm90KSA+PiAxNiwKPiAtCQkJ cnN0YXRlLT5vdXRfcm90X3JlY3QueDEgPj4gMTYsCj4gLQkJCXJzdGF0ZS0+b3V0X3JvdF9yZWN0 LnkxID4+IDE2LAo+IC0JCQlkcm1fcmVjdF93aWR0aCgmcnN0YXRlLT5vdXRfcm90X3JlY3QpID4+ IDE2LAo+IC0JCQlkcm1fcmVjdF9oZWlnaHQoJnJzdGF0ZS0+b3V0X3JvdF9yZWN0KSA+PiAxNik7 Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBkcHVfcGxhbmVfcm90X3N1 Ym1pdF9jb21tYW5kIC0gY29tbWl0IGdpdmVuIHN0YXRlIGZvciB0aGUgcm90YXRvciBzdGFnZQo+ IC0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCj4gLSAqIEBzdGF0ZTogUG9pbnRlciB0 byB0aGUgc3RhdGUgdG8gYmUgY29tbWl0dGVkCj4gLSAqIEBod19jbWQ6IHJvdGF0b3IgY29tbWFu ZCB0eXBlCj4gLSAqIHJldHVybjogMCBpZiBzdWNjZXNzOyBlcnJvciBjb2RlIG90aGVyd2lzZQo+ IC0gKi8KPiAtc3RhdGljIGludCBkcHVfcGxhbmVfcm90X3N1Ym1pdF9jb21tYW5kKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAo+IC0JCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLCBlbnVt IGRwdV9od19yb3RfY21kX3R5cGUgaHdfY21kKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lICpw ZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKPiAtCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBz dGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lX3Jv dF9zdGF0ZSAqcnN0YXRlID0gJnBzdGF0ZS0+cm90Owo+IC0Jc3RydWN0IGRwdV9od19yb3RfY21k ICpyb3RfY21kOwo+IC0Jc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGU7Cj4gLQlzdHJ1Y3Qg ZHB1X2NydGNfc3RhdGUgKmRwdV9jc3RhdGU7Cj4gLQlpbnQgcmV0LCBpOwo+IC0JaW50IGZiX21v ZGU7Cj4gLQo+IC0JaWYgKCFwbGFuZSB8fCAhc3RhdGUgfHwgIXN0YXRlLT5mYiB8fCAhcnN0YXRl LT5yb3RfaHcpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7Cj4gLQkJ cmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JY3N0YXRlID0gX2RwdV9wbGFuZV9nZXRfY3J0 Y19zdGF0ZShzdGF0ZSk7Cj4gLQlpZiAoSVNfRVJSX09SX05VTEwoY3N0YXRlKSkgewo+IC0JCURQ VV9FUlJPUigiaW52YWxpZCBjcnRjIHN0YXRlICVsZFxuIiwgUFRSX0VSUihjc3RhdGUpKTsKPiAt CQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCWRwdV9jc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0 ZShjc3RhdGUpOwo+IC0KPiAtCXJvdF9jbWQgPSAmcnN0YXRlLT5yb3RfY21kOwo+IC0KPiAtCXJv dF9jbWQtPm1hc3RlciA9IChyc3RhdGUtPm91dF94cG9zID09IDApOwo+IC0Jcm90X2NtZC0+c2Vx dWVuY2VfaWQgPSByc3RhdGUtPnNlcXVlbmNlX2lkOwo+IC0Jcm90X2NtZC0+ZnBzID0gcHN0YXRl LT5iYXNlLmNydGMgJiYgcHN0YXRlLT5iYXNlLmNydGMtPnN0YXRlID8KPiAtCQlkcm1fbW9kZV92 cmVmcmVzaCgmcHN0YXRlLT5iYXNlLmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlKSA6Cj4gLQkJ REVGQVVMVF9SRUZSRVNIX1JBVEU7Cj4gLQlyb3RfY21kLT5yb3Q5MCA9IHJzdGF0ZS0+cm90OTA7 Cj4gLQlyb3RfY21kLT5oZmxpcCA9IHJzdGF0ZS0+aGZsaXA7Cj4gLQlyb3RfY21kLT52ZmxpcCA9 IHJzdGF0ZS0+dmZsaXA7Cj4gLQo+IC0Jcm90X2NtZC0+cHJlZmlsbF9idyA9IGRwdV9jcnRjX2dl dF9wcm9wZXJ0eShkcHVfY3N0YXRlLAo+IC0JCQlDUlRDX1BST1BfUk9UX1BSRUZJTExfQlcpOwo+ IC0Jcm90X2NtZC0+Y2xrcmF0ZSA9IGRwdV9jcnRjX2dldF9wcm9wZXJ0eShkcHVfY3N0YXRlLAo+ IC0JCQlDUlRDX1BST1BfUk9UX0NMSyk7Cj4gLQlyb3RfY21kLT5kc3Rfd3JpdGViYWNrID0gcGRw dS0+c2J1Zl93cml0ZWJhY2s7Cj4gLQo+IC0JaWYgKGRwdV9jcnRjX2dldF9pbnRmX21vZGUoc3Rh dGUtPmNydGMpID09IElOVEZfTU9ERV9WSURFTykKPiAtCQlyb3RfY21kLT52aWRlb19tb2RlID0g dHJ1ZTsKPiAtCWVsc2UKPiAtCQlyb3RfY21kLT52aWRlb19tb2RlID0gZmFsc2U7Cj4gLQo+IC0J cm90X2NtZC0+c3JjX3BpeGVsX2Zvcm1hdCA9IHN0YXRlLT5mYi0+Zm9ybWF0LT5mb3JtYXQ7Cj4g LQlyb3RfY21kLT5zcmNfbW9kaWZpZXIgPSBzdGF0ZS0+ZmItPm1vZGlmaWVyOwo+IC0Jcm90X2Nt ZC0+c3JjX3N0cmlkZSA9IHN0YXRlLT5mYi0+cGl0Y2hlc1swXTsKPiAtCj4gLQlyb3RfY21kLT5z cmNfZm9ybWF0ID0gdG9fZHB1X2Zvcm1hdChtc21fZnJhbWVidWZmZXJfZm9ybWF0KHN0YXRlLT5m YikpOwo+IC0JaWYgKCFyb3RfY21kLT5zcmNfZm9ybWF0KSB7Cj4gLQkJRFBVX0VSUk9SKCJmYWls ZWQgdG8gZ2V0IHNyYyBmb3JtYXRcbiIpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0K PiAtCXJvdF9jbWQtPnNyY193aWR0aCA9IHN0YXRlLT5mYi0+d2lkdGg7Cj4gLQlyb3RfY21kLT5z cmNfaGVpZ2h0ID0gc3RhdGUtPmZiLT5oZWlnaHQ7Cj4gLQlyb3RfY21kLT5zcmNfcmVjdF94ID0g cnN0YXRlLT5pbl9yb3RfcmVjdC54MSA+PiAxNjsKPiAtCXJvdF9jbWQtPnNyY19yZWN0X3kgPSBy c3RhdGUtPmluX3JvdF9yZWN0LnkxID4+IDE2Owo+IC0Jcm90X2NtZC0+c3JjX3JlY3RfdyA9IGRy bV9yZWN0X3dpZHRoKCZyc3RhdGUtPmluX3JvdF9yZWN0KSA+PiAxNjsKPiAtCXJvdF9jbWQtPnNy Y19yZWN0X2ggPSBkcm1fcmVjdF9oZWlnaHQoJnJzdGF0ZS0+aW5fcm90X3JlY3QpID4+IDE2Owo+ IC0Jcm90X2NtZC0+ZHN0X3JlY3RfeCA9IDA7Cj4gLQlyb3RfY21kLT5kc3RfcmVjdF95ID0gMDsK PiAtCXJvdF9jbWQtPmRzdF9yZWN0X3cgPSBkcm1fcmVjdF93aWR0aCgmcnN0YXRlLT5vdXRfcm90 X3JlY3QpID4+IDE2Owo+IC0Jcm90X2NtZC0+ZHN0X3JlY3RfaCA9IGRybV9yZWN0X2hlaWdodCgm cnN0YXRlLT5vdXRfcm90X3JlY3QpID4+IDE2Owo+IC0KPiAtCWlmIChod19jbWQgPT0gRFBVX0hX X1JPVF9DTURfQ09NTUlUKSB7Cj4gLQkJc3RydWN0IGRwdV9od19mbXRfbGF5b3V0IGxheW91dDsK PiAtCj4gLQkJbWVtc2V0KCZsYXlvdXQsIDAsIHNpemVvZihzdHJ1Y3QgZHB1X2h3X2ZtdF9sYXlv dXQpKTsKPiAtCQlkcHVfZm9ybWF0X3BvcHVsYXRlX2xheW91dChwc3RhdGUtPmFzcGFjZSwgc3Rh dGUtPmZiLAo+IC0JCQkJJmxheW91dCk7Cj4gLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo cm90X2NtZC0+c3JjX2lvdmEpOyBpKyspIHsKPiAtCQkJcm90X2NtZC0+c3JjX2lvdmFbaV0gPSBs YXlvdXQucGxhbmVfYWRkcltpXTsKPiAtCQkJcm90X2NtZC0+c3JjX2xlbltpXSA9IGxheW91dC5w bGFuZV9zaXplW2ldOwo+IC0JCX0KPiAtCQlyb3RfY21kLT5zcmNfcGxhbmVzID0gbGF5b3V0Lm51 bV9wbGFuZXM7Cj4gLQo+IC0JCW1lbXNldCgmbGF5b3V0LCAwLCBzaXplb2Yoc3RydWN0IGRwdV9o d19mbXRfbGF5b3V0KSk7Cj4gLQkJZHB1X2Zvcm1hdF9wb3B1bGF0ZV9sYXlvdXQocHN0YXRlLT5h c3BhY2UsIHJzdGF0ZS0+b3V0X2ZiLAo+IC0JCQkJJmxheW91dCk7Cj4gLQkJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUocm90X2NtZC0+ZHN0X2lvdmEpOyBpKyspIHsKPiAtCQkJcm90X2NtZC0+ ZHN0X2lvdmFbaV0gPSBsYXlvdXQucGxhbmVfYWRkcltpXTsKPiAtCQkJcm90X2NtZC0+ZHN0X2xl bltpXSA9IGxheW91dC5wbGFuZV9zaXplW2ldOwo+IC0JCX0KPiAtCQlyb3RfY21kLT5kc3RfcGxh bmVzID0gbGF5b3V0Lm51bV9wbGFuZXM7Cj4gLQo+IC0JCS8qIFZCSUYgcmVtYXBwZXIgc2V0dGlu Z3MgKi8KPiAtCQlmb3IgKGkgPSAwOyBpIDwgcnN0YXRlLT5yb3RfaHctPmNhcHMtPnhpbl9jb3Vu dDsgaSsrKSB7Cj4gLQkJCWNvbnN0IHN0cnVjdCBkcHVfcm90X3ZiaWZfY2ZnICpjZmcgPQo+IC0J CQkJCSZyc3RhdGUtPnJvdF9ody0+Y2Fwcy0+dmJpZl9jZmdbaV07Cj4gLQo+IC0JCQlfZHB1X3Bs YW5lX2lubGluZV9yb3Rfc2V0X3Fvc19yZW1hcChwbGFuZSwgY2ZnKTsKPiAtCj4gLQkJCWlmIChj ZmctPmlzX3JlYWQpIHsKPiAtCQkJCV9kcHVfcGxhbmVfaW5saW5lX3JvdF9zZXRfb3RfbGltaXQo cGxhbmUsCj4gLQkJCQkJc3RhdGUtPmNydGMsIGNmZywgcm90X2NtZC0+c3JjX3JlY3RfdywKPiAt CQkJCQlyb3RfY21kLT5zcmNfcmVjdF9oKTsKPiAtCQkJfSBlbHNlIHsKPiAtCQkJCV9kcHVfcGxh bmVfaW5saW5lX3JvdF9zZXRfb3RfbGltaXQocGxhbmUsCj4gLQkJCQkJc3RhdGUtPmNydGMsIGNm Zywgcm90X2NtZC0+ZHN0X3JlY3RfdywKPiAtCQkJCQlyb3RfY21kLT5kc3RfcmVjdF9oKTsKPiAt CQkJfQo+IC0JCX0KPiAtCX0KPiAtCj4gLQlyZXQgPSByc3RhdGUtPnJvdF9ody0+b3BzLmNvbW1p dChyc3RhdGUtPnJvdF9odywgcm90X2NtZCwgaHdfY21kKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0 dXJuIHJldDsKPiAtCj4gLQlyc3RhdGUtPm91dF9yb3RhdGlvbiA9IHJzdGF0ZS0+aW5fcm90YXRp b247Cj4gLQlyc3RhdGUtPm91dF9mYl9mbGFncyA9IHJvdF9jbWQtPmRzdF9tb2RpZmllciA/Cj4g LQkJCURSTV9NT0RFX0ZCX01PRElGSUVSUyA6IDA7Cj4gLQlyc3RhdGUtPm91dF9mYl9mb3JtYXQg PSByb3RfY21kLT5kc3RfZm9ybWF0Owo+IC0JcnN0YXRlLT5vdXRfZmJfcGl4ZWxfZm9ybWF0ID0g cm90X2NtZC0+ZHN0X3BpeGVsX2Zvcm1hdDsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShyc3RhdGUtPm91dF9mYl9tb2RpZmllcik7IGkrKykKPiAtCQlyc3RhdGUtPm91dF9mYl9t b2RpZmllcltpXSA9IHJvdF9jbWQtPmRzdF9tb2RpZmllcjsKPiAtCj4gLQlyc3RhdGUtPm91dF9m Yl93aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZyc3RhdGUtPm91dF9yb3RfcmVjdCkgPj4gMTY7Cj4g LQlyc3RhdGUtPm91dF9mYl9oZWlnaHQgPSBkcm1fcmVjdF9oZWlnaHQoJnJzdGF0ZS0+b3V0X3Jv dF9yZWN0KSA+PiAxNjsKPiAtCXJzdGF0ZS0+b3V0X3NyY194ID0gcnN0YXRlLT5vdXRfc3JjX3Jl Y3QueDEgLSByc3RhdGUtPm91dF9yb3RfcmVjdC54MTsKPiAtCXJzdGF0ZS0+b3V0X3NyY195ID0g cnN0YXRlLT5vdXRfc3JjX3JlY3QueTEgLSByc3RhdGUtPm91dF9yb3RfcmVjdC55MTsKPiAtCXJz dGF0ZS0+b3V0X3NyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnJzdGF0ZS0+b3V0X3NyY19yZWN0KTsK PiAtCXJzdGF0ZS0+b3V0X3NyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZyc3RhdGUtPm91dF9zcmNf cmVjdCk7Cj4gLQo+IC0JaWYgKHJvdF9jbWQtPnJvdDkwKQo+IC0JCXJzdGF0ZS0+b3V0X3JvdGF0 aW9uICY9IH5EUk1fTU9ERV9ST1RBVEVfOTA7Cj4gLQo+IC0JaWYgKHJvdF9jbWQtPmhmbGlwKQo+ IC0JCXJzdGF0ZS0+b3V0X3JvdGF0aW9uICY9IH5EUk1fTU9ERV9SRUZMRUNUX1g7Cj4gLQo+IC0J aWYgKHJvdF9jbWQtPnZmbGlwKQo+IC0JCXJzdGF0ZS0+b3V0X3JvdGF0aW9uICY9IH5EUk1fTU9E RV9SRUZMRUNUX1k7Cj4gLQo+IC0JRFBVX0RFQlVHKAo+IC0JCSJwbGFuZSVkLiVkIHJvdDolZC8l YyVjJWMlYy8lZHglZC8lNC40cy8lbGx4LyVkeCVkKyVkKyVkXG4iLAo+IC0JCQlwbGFuZS0+YmFz ZS5pZCwgcnN0YXRlLT5zZXF1ZW5jZV9pZCwgaHdfY21kLAo+IC0JCQlyb3RfY21kLT5yb3Q5MCA/ ICdyJyA6ICdfJywKPiAtCQkJcm90X2NtZC0+aGZsaXAgPyAnaCcgOiAnXycsCj4gLQkJCXJvdF9j bWQtPnZmbGlwID8gJ3YnIDogJ18nLAo+IC0JCQlyb3RfY21kLT52aWRlb19tb2RlID8gJ1YnIDog J0MnLAo+IC0JCQlzdGF0ZS0+ZmItPndpZHRoLCBzdGF0ZS0+ZmItPmhlaWdodCwKPiAtCQkJKGNo YXIgKikgJnN0YXRlLT5mYi0+Zm9ybWF0LT5mb3JtYXQsCj4gLQkJCXN0YXRlLT5mYi0+bW9kaWZp ZXIsCj4gLQkJCWRybV9yZWN0X3dpZHRoKCZyc3RhdGUtPmluX3JvdF9yZWN0KSA+PiAxNiwKPiAt CQkJZHJtX3JlY3RfaGVpZ2h0KCZyc3RhdGUtPmluX3JvdF9yZWN0KSA+PiAxNiwKPiAtCQkJcnN0 YXRlLT5pbl9yb3RfcmVjdC54MSA+PiAxNiwKPiAtCQkJcnN0YXRlLT5pbl9yb3RfcmVjdC55MSA+ PiAxNik7Cj4gLQo+IC0JRFBVX0RFQlVHKCJwbGFuZSVkLiVkIHNzcHA6JWQvJXgvJWR4JWQvJTQu NHMvJWxseC8lZHglZCslZCslZFxuIiwKPiAtCQkJcGxhbmUtPmJhc2UuaWQsIHJzdGF0ZS0+c2Vx dWVuY2VfaWQsIGh3X2NtZCwKPiAtCQkJcnN0YXRlLT5vdXRfcm90YXRpb24sCj4gLQkJCXJzdGF0 ZS0+b3V0X2ZiX3dpZHRoLCByc3RhdGUtPm91dF9mYl9oZWlnaHQsCj4gLQkJCShjaGFyICopICZy c3RhdGUtPm91dF9mYl9waXhlbF9mb3JtYXQsCj4gLQkJCXJzdGF0ZS0+b3V0X2ZiX21vZGlmaWVy WzBdLAo+IC0JCQlyc3RhdGUtPm91dF9zcmNfdyA+PiAxNiwgcnN0YXRlLT5vdXRfc3JjX2ggPj4g MTYsCj4gLQkJCXJzdGF0ZS0+b3V0X3NyY194ID4+IDE2LCByc3RhdGUtPm91dF9zcmNfeSA+PiAx Nik7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIF9kcHVfcGxhbmVf cm90X2dldF9mYiAtIGF0dGVtcHQgdG8gZ2V0IHByZXZpb3VzbHkgYWxsb2NhdGVkIGZiL2Zibwo+ IC0gKglJZiBhbiBmYi9mYm8gd2FzIGFscmVhZHkgY3JlYXRlZCwgZWl0aGVyIGZyb20gYSBwcmV2 aW91cyBmcmFtZSBvcgo+IC0gKglmcm9tIGFub3RoZXIgcGxhbmUgaW4gdGhlIGN1cnJlbnQgY29t bWl0IGN5Y2xlLCBhdHRlbXB0IHRvIHJldXNlCj4gLSAqCWl0IGZvciB0aGlzIGNvbW1pdCBjeWNs ZSBhcyB3ZWxsLgo+IC0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCj4gLSAqIEBjc3Rh dGU6IFBvaW50ZXIgdG8gY3J0YyBzdGF0ZQo+IC0gKiBAcnN0YXRlOiBQb2ludGVyIHRvIHJvdGF0 b3IgcGxhbmUgc3RhdGUKPiAtICovCj4gLXN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfcm90X2dldF9m YihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAtCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNz dGF0ZSwKPiAtCQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRlKQo+IC17Cj4gLQlz dHJ1Y3QgZHB1X2ttc19mYm8gKmZibzsKPiAtCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ IC0KPiAtCWlmICghcGxhbmUgfHwgIWNzdGF0ZSB8fCAhcnN0YXRlIHx8ICFyc3RhdGUtPnJvdF9o dykKPiAtCQlyZXR1cm47Cj4gLQo+IC0JZmJvID0gZHB1X2NydGNfcmVzX2dldChjc3RhdGUsIERQ VV9DUlRDX1JFU19ST1RfT1VUX0ZCTywKPiAtCQkJKHU2NCkgJnJzdGF0ZS0+cm90X2h3LT5iYXNl KTsKPiAtCWZiID0gZHB1X2NydGNfcmVzX2dldChjc3RhdGUsIERQVV9DUlRDX1JFU19ST1RfT1VU X0ZCLAo+IC0JCQkodTY0KSAmcnN0YXRlLT5yb3RfaHctPmJhc2UpOwo+IC0JaWYgKGZiICYmIGZi bykgewo+IC0JCURQVV9ERUJVRygicGxhbmUlZC4lZCBnZXQgZmIvZmJvXG4iLCBwbGFuZS0+YmFz ZS5pZCwKPiAtCQkJCXJzdGF0ZS0+c2VxdWVuY2VfaWQpOwo+IC0JfSBlbHNlIGlmIChmYm8pIHsK PiAtCQlkcHVfY3J0Y19yZXNfcHV0KGNzdGF0ZSwgRFBVX0NSVENfUkVTX1JPVF9PVVRfRkJPLAo+ IC0JCQkJKHU2NCkgJnJzdGF0ZS0+cm90X2h3LT5iYXNlKTsKPiAtCQlmYm8gPSBOVUxMOwo+IC0J fSBlbHNlIGlmIChmYikgewo+IC0JCWRwdV9jcnRjX3Jlc19wdXQoY3N0YXRlLCBEUFVfQ1JUQ19S RVNfUk9UX09VVF9GQiwKPiAtCQkJCSh1NjQpICZyc3RhdGUtPnJvdF9ody0+YmFzZSk7Cj4gLQkJ ZmIgPSBOVUxMOwo+IC0JfQo+IC0KPiAtCXJzdGF0ZS0+b3V0X2ZibyA9IGZibzsKPiAtCXJzdGF0 ZS0+b3V0X2ZiID0gZmI7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBkcHVfcGxhbmVfcm90X3ByZXBh cmVfZmIgLSBwcmVwYXJlIGZyYW1lYnVmZmVyIG9mIHRoZSBuZXcgc3RhdGUKPiAtICoJZm9yIHJv dGF0b3IgKHByZS1zc3BwKSBzdGFnZQo+IC0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5l Cj4gLSAqIEBuZXdfc3RhdGU6IFBvaW50ZXIgdG8gbmV3IGRybSBwbGFuZSBzdGF0ZQo+IC0gKiBy ZXR1cm46IDAgaWYgc3VjY2VzczsgZXJyb3IgY29kZSBvdGhlcndpc2UKPiAtICovCj4gLXN0YXRp YyBpbnQgZHB1X3BsYW5lX3JvdF9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ IC0JCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm5ld19zdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIgPSBuZXdfc3RhdGUtPmZiOwo+IC0Jc3RydWN0IGRwdV9wbGFuZV9z dGF0ZSAqbmV3X3BzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShuZXdfc3RhdGUpOwo+IC0Jc3Ry dWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKm5ld19yc3RhdGUgPSAmbmV3X3BzdGF0ZS0+cm90Owo+ IC0Jc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGU7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCURQ VV9ERUJVRygicGxhbmUlZC4lZCBGQlsldV0gc2J1ZjolZCByb3Q6JWQgY3J0YzolZFxuIiwKPiAt CQkJcGxhbmUtPmJhc2UuaWQsCj4gLQkJCW5ld19yc3RhdGUtPnNlcXVlbmNlX2lkLCBmYiA/IGZi LT5iYXNlLmlkIDogMCwKPiAtCQkJISFuZXdfcnN0YXRlLT5vdXRfc2J1ZiwgISFuZXdfcnN0YXRl LT5yb3RfaHcsCj4gLQkJCWRwdV9wbGFuZV9jcnRjX2VuYWJsZWQobmV3X3N0YXRlKSk7Cj4gLQo+ IC0JaWYgKCFuZXdfcnN0YXRlLT5vdXRfc2J1ZiB8fCAhbmV3X3JzdGF0ZS0+cm90X2h3KQo+IC0J CXJldHVybiAwOwo+IC0KPiAtCWNzdGF0ZSA9IF9kcHVfcGxhbmVfZ2V0X2NydGNfc3RhdGUobmV3 X3N0YXRlKTsKPiAtCWlmIChJU19FUlIoY3N0YXRlKSkgewo+IC0JCXJldCA9IFBUUl9FUlIoY3N0 YXRlKTsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgY3J0YyBzdGF0ZSAlZFxuIiwgcmV0KTsKPiAt CQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAtCS8qIG5lZWQgdG8gcmUtY2FsYyBiYXNlZCBvbiBh bGwgbmV3bHkgdmFsaWRhdGVkIHBsYW5lIHN0YXRlcyAqLwo+IC0JcmV0ID0gZHB1X3BsYW5lX3Jv dF9jYWxjX2NmZyhwbGFuZSwgbmV3X3N0YXRlKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJl dDsKPiAtCj4gLQkvKiBjaGVjayBpZiBzdHJlYW0gYnVmZmVyIGlzIGFscmVhZHkgYXR0YWNoZWQg dG8gcm90YXRvciAqLwo+IC0JaWYgKGRwdV9wbGFuZV9lbmFibGVkKG5ld19zdGF0ZSkgJiYgIW5l d19yc3RhdGUtPm91dF9mYikKPiAtCQlfZHB1X3BsYW5lX3JvdF9nZXRfZmIocGxhbmUsIGNzdGF0 ZSwgbmV3X3JzdGF0ZSk7Cj4gLQo+IC0JLyogY3JlYXRlIG5ldyBzdHJlYW0gYnVmZmVyIGlmIGl0 IGlzIG5vdCBhdmFpbGFibGUgKi8KPiAtCWlmIChkcHVfcGxhbmVfZW5hYmxlZChuZXdfc3RhdGUp ICYmICFuZXdfcnN0YXRlLT5vdXRfZmIpIHsKPiAtCQl1MzIgZmJfdyA9IGRybV9yZWN0X3dpZHRo KCZuZXdfcnN0YXRlLT5vdXRfcm90X3JlY3QpID4+IDE2Owo+IC0JCXUzMiBmYl9oID0gZHJtX3Jl Y3RfaGVpZ2h0KCZuZXdfcnN0YXRlLT5vdXRfcm90X3JlY3QpID4+IDE2Owo+IC0KPiAtCQlEUFVf REVCVUcoInBsYW5lJWQuJWQgYWxsb2NhdGUgZmIvZmJvXG4iLCBwbGFuZS0+YmFzZS5pZCwKPiAt CQkJCW5ld19yc3RhdGUtPnNlcXVlbmNlX2lkKTsKPiAtCj4gLQkJLyogY2hlY2sgaWYgb3V0X2Zi IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gcm90YXRvciAqLwo+IC0JCW5ld19yc3RhdGUtPm91dF9m Ym8gPSBkcHVfa21zX2Zib19hbGxvYyhwbGFuZS0+ZGV2LCBmYl93LCBmYl9oLAo+IC0JCQkJbmV3 X3JzdGF0ZS0+b3V0X2ZiX3BpeGVsX2Zvcm1hdCwKPiAtCQkJCW5ld19yc3RhdGUtPm91dF9mYl9t b2RpZmllciwKPiAtCQkJCW5ld19yc3RhdGUtPm91dF9mYl9mbGFncyk7Cj4gLQkJaWYgKCFuZXdf cnN0YXRlLT5vdXRfZmJvKSB7Cj4gLQkJCURQVV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIGlu bGluZSBidWZmZXIgb2JqZWN0XG4iKTsKPiAtCQkJcmV0ID0gLUVJTlZBTDsKPiAtCQkJZ290byBl cnJvcl9jcmVhdGVfZmJvOwo+IC0JCX0KPiAtCj4gLQkJcmV0ID0gZHB1X2NydGNfcmVzX2FkZChj c3RhdGUsIERQVV9DUlRDX1JFU19ST1RfT1VUX0ZCTywKPiAtCQkJCSh1NjQpICZuZXdfcnN0YXRl LT5yb3RfaHctPmJhc2UsCj4gLQkJCQluZXdfcnN0YXRlLT5vdXRfZmJvLCAmZmJvX3Jlc19vcHMp Owo+IC0JCWlmIChyZXQpIHsKPiAtCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWRkIGNydGMgcmVz b3VyY2VcbiIpOwo+IC0JCQlnb3RvIGVycm9yX2NyZWF0ZV9mYm9fcmVzOwo+IC0JCX0KPiAtCj4g LQkJbmV3X3JzdGF0ZS0+b3V0X2ZiID0gZHB1X2ttc19mYm9fY3JlYXRlX2ZiKHBsYW5lLT5kZXYs Cj4gLQkJCQluZXdfcnN0YXRlLT5vdXRfZmJvKTsKPiAtCQlpZiAoIW5ld19yc3RhdGUtPm91dF9m Yikgewo+IC0JCQlEUFVfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgaW5saW5lIGZyYW1lYnVmZmVy XG4iKTsKPiAtCQkJcmV0ID0gLUVJTlZBTDsKPiAtCQkJZ290byBlcnJvcl9jcmVhdGVfZmI7Cj4g LQkJfQo+IC0JCURQVV9FVlQzMl9WRVJCT1NFKERSTUlEKHBsYW5lKSwgbmV3X3JzdGF0ZS0+c2Vx dWVuY2VfaWQsCj4gLQkJCQluZXdfcnN0YXRlLT5vdXRfZmItPmJhc2UuaWQpOwo+IC0KPiAtCQly ZXQgPSBkcHVfY3J0Y19yZXNfYWRkKGNzdGF0ZSwgRFBVX0NSVENfUkVTX1JPVF9PVVRfRkIsCj4g LQkJCQkodTY0KSAmbmV3X3JzdGF0ZS0+cm90X2h3LT5iYXNlLAo+IC0JCQkJbmV3X3JzdGF0ZS0+ b3V0X2ZiLCAmZmJfcmVzX29wcyk7Cj4gLQkJaWYgKHJldCkgewo+IC0JCQlEUFVfRVJST1IoImZh aWxlZCB0byBhZGQgY3J0YyByZXNvdXJjZSAlZFxuIiwgcmV0KTsKPiAtCQkJZ290byBlcnJvcl9j cmVhdGVfZmJfcmVzOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQkvKiBwcmVwYXJlIHJvdGF0b3IgaW5w dXQgYnVmZmVyICovCj4gLQlyZXQgPSBtc21fZnJhbWVidWZmZXJfcHJlcGFyZShuZXdfc3RhdGUt PmZiLCBuZXdfcHN0YXRlLT5hc3BhY2UpOwo+IC0JaWYgKHJldCkgewo+IC0JCURQVV9FUlJPUigi ZmFpbGVkIHRvIHByZXBhcmUgaW5wdXQgZnJhbWVidWZmZXIsICVkXG4iLCByZXQpOwo+IC0JCWdv dG8gZXJyb3JfcHJlcGFyZV9pbnB1dF9idWZmZXI7Cj4gLQl9Cj4gLQo+IC0JLyogcHJlcGFyZSBy b3RhdG9yIG91dHB1dCBidWZmZXIgKi8KPiAtCWlmIChkcHVfcGxhbmVfZW5hYmxlZChuZXdfc3Rh dGUpICYmIG5ld19yc3RhdGUtPm91dF9mYikgewo+IC0JCURQVV9ERUJVRygicGxhbmUlZC4lZCBw cmVwYXJlIGZiL2Zib1xuIiwgcGxhbmUtPmJhc2UuaWQsCj4gLQkJCQluZXdfcnN0YXRlLT5zZXF1 ZW5jZV9pZCk7Cj4gLQo+IC0JCXJldCA9IG1zbV9mcmFtZWJ1ZmZlcl9wcmVwYXJlKG5ld19yc3Rh dGUtPm91dF9mYiwKPiAtCQkJCW5ld19wc3RhdGUtPmFzcGFjZSk7Cj4gLQkJaWYgKHJldCkgewo+ IC0JCQlEUFVfRVJST1IoImZhaWxlZCB0byBwcmVwYXJlIGlubGluZSBmcmFtZWJ1ZmZlciwgJWRc biIsCj4gLQkJCQkJcmV0KTsKPiAtCQkJZ290byBlcnJvcl9wcmVwYXJlX291dHB1dF9idWZmZXI7 Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC0KPiAtZXJyb3JfcHJlcGFyZV9vdXRw dXRfYnVmZmVyOgo+IC0JbXNtX2ZyYW1lYnVmZmVyX2NsZWFudXAobmV3X3N0YXRlLT5mYiwgbmV3 X3BzdGF0ZS0+YXNwYWNlKTsKPiAtZXJyb3JfcHJlcGFyZV9pbnB1dF9idWZmZXI6Cj4gLQlkcHVf Y3J0Y19yZXNfcHV0KGNzdGF0ZSwgRFBVX0NSVENfUkVTX1JPVF9PVVRfRkIsCj4gLQkJCSh1NjQp ICZuZXdfcnN0YXRlLT5yb3RfaHctPmJhc2UpOwo+IC1lcnJvcl9jcmVhdGVfZmJfcmVzOgo+IC0J bmV3X3JzdGF0ZS0+b3V0X2ZiID0gTlVMTDsKPiAtZXJyb3JfY3JlYXRlX2ZiOgo+IC0JZHB1X2Ny dGNfcmVzX3B1dChjc3RhdGUsIERQVV9DUlRDX1JFU19ST1RfT1VUX0ZCTywKPiAtCQkJKHU2NCkg Jm5ld19yc3RhdGUtPnJvdF9ody0+YmFzZSk7Cj4gLWVycm9yX2NyZWF0ZV9mYm9fcmVzOgo+IC0J bmV3X3JzdGF0ZS0+b3V0X2ZibyA9IE5VTEw7Cj4gLWVycm9yX2NyZWF0ZV9mYm86Cj4gLQlyZXR1 cm4gcmV0Owo+IC19Cj4gLQo+IC0vKioKPiAtICogZHB1X3BsYW5lX3JvdF9jbGVhbnVwX2ZiIC0g Y2xlYW51cCBmcmFtZWJ1ZmZlciBvZiBwcmV2aW91cyBzdGF0ZSBmb3IgdGhlCj4gLSAqCXJvdGF0 b3IgKHByZS1zc3BwKSBzdGFnZQo+IC0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCj4g LSAqIEBvbGRfc3RhdGU6IFBvaW50ZXIgdG8gcHJldmlvdXMgZHJtIHBsYW5lIHN0YXRlCj4gLSAq IHJldHVybjogbm9uZQo+IC0gKi8KPiAtc3RhdGljIHZvaWQgZHB1X3BsYW5lX3JvdF9jbGVhbnVw X2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+IC0JCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg Km9sZF9zdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqb2xkX3BzdGF0ZSA9 IHRvX2RwdV9wbGFuZV9zdGF0ZShvbGRfc3RhdGUpOwo+IC0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rf c3RhdGUgKm9sZF9yc3RhdGUgPSAmb2xkX3BzdGF0ZS0+cm90Owo+IC0Jc3RydWN0IGRwdV9od19y b3RfY21kICpjbWQgPSAmb2xkX3JzdGF0ZS0+cm90X2NtZDsKPiAtCXN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqY3N0YXRlOwo+IC0JaW50IHJldDsKPiAtCj4gLQlEUFVfREVCVUcoInBsYW5lJWQuJWQg RkJbJXVdIHNidWY6JWQgcm90OiVkIGNydGM6JWRcbiIsIHBsYW5lLT5iYXNlLmlkLAo+IC0JCQlv bGRfcnN0YXRlLT5zZXF1ZW5jZV9pZCwgb2xkX3N0YXRlLT5mYi0+YmFzZS5pZCwKPiAtCQkJISFv bGRfcnN0YXRlLT5vdXRfc2J1ZiwgISFvbGRfcnN0YXRlLT5yb3RfaHcsCj4gLQkJCWRwdV9wbGFu ZV9jcnRjX2VuYWJsZWQob2xkX3N0YXRlKSk7Cj4gLQo+IC0JaWYgKCFvbGRfcnN0YXRlLT5vdXRf c2J1ZiB8fCAhb2xkX3JzdGF0ZS0+cm90X2h3KQo+IC0JCXJldHVybjsKPiAtCj4gLQljc3RhdGUg PSBfZHB1X3BsYW5lX2dldF9jcnRjX3N0YXRlKG9sZF9zdGF0ZSk7Cj4gLQlpZiAoSVNfRVJSKGNz dGF0ZSkpIHsKPiAtCQlyZXQgPSBQVFJfRVJSKGNzdGF0ZSk7Cj4gLQkJRFBVX0VSUk9SKCJpbnZh bGlkIGNydGMgc3RhdGUgJWRcbiIsIHJldCk7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCWlm IChkcHVfcGxhbmVfY3J0Y19lbmFibGVkKG9sZF9zdGF0ZSkpIHsKPiAtCQlyZXQgPSBvbGRfcnN0 YXRlLT5yb3RfaHctPm9wcy5jb21taXQob2xkX3JzdGF0ZS0+cm90X2h3LCBjbWQsCj4gLQkJCQlE UFVfSFdfUk9UX0NNRF9DTEVBTlVQKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlEUFVfRVJST1IoImZh aWxlZCB0byBjbGVhbnVwIHJvdGF0b3IgYnVmZmVyc1xuIik7Cj4gLQl9Cj4gLQo+IC0JaWYgKGRw dV9wbGFuZV9lbmFibGVkKG9sZF9zdGF0ZSkpIHsKPiAtCQlpZiAob2xkX3JzdGF0ZS0+b3V0X2Zi KSB7Cj4gLQkJCW1zbV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKG9sZF9yc3RhdGUtPm91dF9mYiwKPiAt CQkJCQlvbGRfcHN0YXRlLT5hc3BhY2UpOwo+IC0JCQlkcHVfY3J0Y19yZXNfcHV0KGNzdGF0ZSwg RFBVX0NSVENfUkVTX1JPVF9PVVRfRkIsCj4gLQkJCQkJKHU2NCkgJm9sZF9yc3RhdGUtPnJvdF9o dy0+YmFzZSk7Cj4gLQkJCW9sZF9yc3RhdGUtPm91dF9mYiA9IE5VTEw7Cj4gLQkJCWRwdV9jcnRj X3Jlc19wdXQoY3N0YXRlLCBEUFVfQ1JUQ19SRVNfUk9UX09VVF9GQk8sCj4gLQkJCQkJKHU2NCkg Jm9sZF9yc3RhdGUtPnJvdF9ody0+YmFzZSk7Cj4gLQkJCW9sZF9yc3RhdGUtPm91dF9mYm8gPSBO VUxMOwo+IC0JCX0KPiAtCj4gLQkJbXNtX2ZyYW1lYnVmZmVyX2NsZWFudXAob2xkX3N0YXRlLT5m Yiwgb2xkX3BzdGF0ZS0+YXNwYWNlKTsKPiAtCX0KPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGRwdV9w bGFuZV9yb3RfYXRvbWljX2NoZWNrIC0gdmVyaWZ5IHJvdGF0b3IgdXBkYXRlIG9mIHRoZSBnaXZl biBzdGF0ZQo+IC0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCj4gLSAqIEBzdGF0ZTog UG9pbnRlciB0byBkcm0gcGxhbmUgc3RhdGUgdG8gYmUgdmFsaWRhdGVkCj4gLSAqIHJldHVybjog MCBpZiBzdWNjZXNzOyBlcnJvciBjb2RlIG90aGVyd2lzZQo+IC0gKi8KPiAtc3RhdGljIGludCBk cHVfcGxhbmVfcm90X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAtCQlz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRwdV9wbGFuZSAq cGRwdTsKPiAtCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZSwgKm9sZF9wc3RhdGU7Cj4g LQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRlLCAqb2xkX3JzdGF0ZTsKPiAtCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3N0YXRlOwo+IC0Jc3RydWN0IGRwdV9od19ibGsgKmh3X2Js azsKPiAtCWludCBpLCByZXQgPSAwOwo+IC0KPiAtCWlmICghcGxhbmUgfHwgIXN0YXRlKSB7Cj4g LQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lL3N0YXRlXG4iKTsKPiAtCQlyZXR1cm4gLUVJTlZB TDsKPiAtCX0KPiAtCj4gLQlwZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKPiAtCXBzdGF0ZSA9 IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7Cj4gLQlvbGRfcHN0YXRlID0gdG9fZHB1X3BsYW5l X3N0YXRlKHBsYW5lLT5zdGF0ZSk7Cj4gLQlyc3RhdGUgPSAmcHN0YXRlLT5yb3Q7Cj4gLQlvbGRf cnN0YXRlID0gJm9sZF9wc3RhdGUtPnJvdDsKPiAtCj4gLQkvKiBjc3RhdGUgd2lsbCBiZSBudWxs IGlmIGNydGMgaXMgZGlzY29ubmVjdGVkIGZyb20gcGxhbmUgKi8KPiAtCWNzdGF0ZSA9IF9kcHVf cGxhbmVfZ2V0X2NydGNfc3RhdGUoc3RhdGUpOwo+IC0JaWYgKElTX0VSUihjc3RhdGUpKSB7Cj4g LQkJcmV0ID0gUFRSX0VSUihjc3RhdGUpOwo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBjcnRjIHN0 YXRlICVkXG4iLCByZXQpOwo+IC0JCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0JRFBVX0RFQlVH KCJwbGFuZSVkLiVkIEZCWyV1XSBzYnVmOiVkIHJvdDolZCBjcnRjOiVkXG4iLCBwbGFuZS0+YmFz ZS5pZCwKPiAtCQkJcnN0YXRlLT5zZXF1ZW5jZV9pZCwgc3RhdGUtPmZiID8gc3RhdGUtPmZiLT5i YXNlLmlkIDogMCwKPiAtCQkJISFyc3RhdGUtPm91dF9zYnVmLCAhIXJzdGF0ZS0+cm90X2h3LAo+ IC0JCQlkcHVfcGxhbmVfY3J0Y19lbmFibGVkKHN0YXRlKSk7Cj4gLQo+IC0JcnN0YXRlLT5pbl9y b3RhdGlvbiA9IGRybV9yb3RhdGlvbl9zaW1wbGlmeSgKPiAtCQkJZHB1X3BsYW5lX2dldF9wcm9w ZXJ0eShwc3RhdGUsIFBMQU5FX1BST1BfUk9UQVRJT04pLAo+IC0JCQlEUk1fTU9ERV9ST1RBVEVf MCB8IERSTV9NT0RFX1JPVEFURV85MCB8Cj4gLQkJCURSTV9NT0RFX1JFRkxFQ1RfWCB8IERSTV9N T0RFX1JFRkxFQ1RfWSk7Cj4gLQlyc3RhdGUtPnJvdDkwID0gcnN0YXRlLT5pbl9yb3RhdGlvbiAm IERSTV9NT0RFX1JPVEFURV85MCA/IHRydWUgOiBmYWxzZTsKPiAtCXJzdGF0ZS0+aGZsaXAgPSBy c3RhdGUtPmluX3JvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9YID8gdHJ1ZSA6IGZhbHNlOwo+ IC0JcnN0YXRlLT52ZmxpcCA9IHJzdGF0ZS0+aW5fcm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNU X1kgPyB0cnVlIDogZmFsc2U7Cj4gLQlyc3RhdGUtPm91dF9zYnVmID0gcGRwdS0+c2J1Zl9tb2Rl IHx8IHJzdGF0ZS0+cm90OTA7Cj4gLQo+IC0JaWYgKGRwdV9wbGFuZV9lbmFibGVkKHN0YXRlKSAm JiByc3RhdGUtPm91dF9zYnVmKSB7Cj4gLQkJRFBVX0RFQlVHKCJwbGFuZSVkLiVkIGFjcXVpcmUg cm90YXRvciwgZmIgJWRcbiIsCj4gLQkJCQlwbGFuZS0+YmFzZS5pZCwgcnN0YXRlLT5zZXF1ZW5j ZV9pZCwKPiAtCQkJCXN0YXRlLT5mYiA/IHN0YXRlLT5mYi0+YmFzZS5pZCA6IC0xKTsKPiAtCj4g LQkJaHdfYmxrID0gZHB1X2NydGNfcmVzX2dldChjc3RhdGUsIERQVV9IV19CTEtfUk9ULAo+IC0J CQkJKHU2NCkgc3RhdGUtPmZiKTsKPiAtCQlpZiAoIWh3X2Jsaykgewo+IC0JCQlEUFVfRVJST1Io InBsYW5lJWQuJWQgbm8gYXZhaWxhYmxlIHJvdGF0b3IsIGZiICVkXG4iLAo+IC0JCQkJCXBsYW5l LT5iYXNlLmlkLCByc3RhdGUtPnNlcXVlbmNlX2lkLAo+IC0JCQkJCXN0YXRlLT5mYiA/IHN0YXRl LT5mYi0+YmFzZS5pZCA6IC0xKTsKPiAtCQkJRFBVX0VWVDMyKERSTUlEKHBsYW5lKSwgcnN0YXRl LT5zZXF1ZW5jZV9pZCwKPiAtCQkJCQlEUFVfRVZUTE9HX0VSUk9SKTsKPiAtCQkJcmV0dXJuIC1F SU5WQUw7Cj4gLQkJfQo+IC0KPiAtCQlyc3RhdGUtPnJvdF9odyA9IHRvX2RwdV9od19yb3QoaHdf YmxrKTsKPiAtCj4gLQkJaWYgKCFyc3RhdGUtPnJvdF9ody0+b3BzLmNvbW1pdCkgewo+IC0JCQlE UFVfRVJST1IoInBsYW5lJWQuJWQgaW52YWxpZCByb3RhdG9yIG9wc1xuIiwKPiAtCQkJCQlwbGFu ZS0+YmFzZS5pZCwgcnN0YXRlLT5zZXF1ZW5jZV9pZCk7Cj4gLQkJCWRwdV9jcnRjX3Jlc19wdXQo Y3N0YXRlLAo+IC0JCQkJCURQVV9IV19CTEtfUk9ULCAodTY0KSBzdGF0ZS0+ZmIpOwo+IC0JCQly c3RhdGUtPnJvdF9odyA9IE5VTEw7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0JCX0KPiAtCj4g LQkJcnN0YXRlLT5pbl9mYiA9IHN0YXRlLT5mYjsKPiAtCX0gZWxzZSB7Cj4gLQkJcnN0YXRlLT5p bl9mYiA9IE5VTEw7Cj4gLQkJcnN0YXRlLT5yb3RfaHcgPSBOVUxMOwo+IC0JfQo+IC0KPiAtCWlm IChkcHVfcGxhbmVfZW5hYmxlZChzdGF0ZSkgJiYgcnN0YXRlLT5vdXRfc2J1ZiAmJiByc3RhdGUt PnJvdF9odykgewo+IC0JCXVpbnQzMl90IGZiX2lkOwo+IC0KPiAtCQlmYl9pZCA9IHN0YXRlLT5m YiA/IHN0YXRlLT5mYi0+YmFzZS5pZCA6IC0xOwo+IC0JCURQVV9ERUJVRygicGxhbmUlZC4lZCB1 c2Ugcm90YXRvciwgZmIgJWRcbiIsCj4gLQkJCQlwbGFuZS0+YmFzZS5pZCwgcnN0YXRlLT5zZXF1 ZW5jZV9pZCwgZmJfaWQpOwo+IC0KPiAtCQlyZXQgPSBkcHVfcGxhbmVfcm90X2NhbGNfY2ZnKHBs YW5lLCBzdGF0ZSk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiAtCj4gLQkJcmV0 ID0gZHB1X3BsYW5lX3JvdF9zdWJtaXRfY29tbWFuZChwbGFuZSwgc3RhdGUsCj4gLQkJCQlEUFVf SFdfUk9UX0NNRF9WQUxJREFURSk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiAt Cj4gLQkJaWYgKHJzdGF0ZS0+bnBsYW5lICE9IG9sZF9yc3RhdGUtPm5wbGFuZSB8fAo+IC0JCQkJ cnN0YXRlLT5vdXRfeHBvcyAhPSBvbGRfcnN0YXRlLT5vdXRfeHBvcykKPiAtCQkJcHN0YXRlLT5k aXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfRk9STUFUIHwKPiAtCQkJCURQVV9QTEFORV9ESVJUWV9S RUNUUzsKPiAtCj4gLQkJLyogY2hlY2sgaWYgc3RyZWFtIGJ1ZmZlciBpcyBhbHJlYWR5IGF0dGFj aGVkIHRvIHJvdGF0b3IgKi8KPiAtCQlfZHB1X3BsYW5lX3JvdF9nZXRfZmIocGxhbmUsIGNzdGF0 ZSwgcnN0YXRlKTsKPiAtCj4gLQkJLyogcmVsZWFzZSBidWZmZXIgaWYgb3V0cHV0IGZvcm1hdCBj b25maWd1cmF0aW9uIGNoYW5nZXMgKi8KPiAtCQlpZiAocnN0YXRlLT5vdXRfZmIgJiYKPiAtCQkJ KChyc3RhdGUtPm91dF9mYl9oZWlnaHQgIT0gcnN0YXRlLT5vdXRfZmItPmhlaWdodCkgfHwKPiAt CQkJKHJzdGF0ZS0+b3V0X2ZiX3dpZHRoICE9IHJzdGF0ZS0+b3V0X2ZiLT53aWR0aCkgfHwKPiAt CQkJKHJzdGF0ZS0+b3V0X2ZiX3BpeGVsX2Zvcm1hdCAhPQo+IC0JCQkJCXJzdGF0ZS0+b3V0X2Zi LT5mb3JtYXQtPmZvcm1hdCkgfHwKPiAtCQkJKHJzdGF0ZS0+b3V0X2ZiX21vZGlmaWVyWzBdICE9 Cj4gLQkJCQkJcnN0YXRlLT5vdXRfZmItPm1vZGlmaWVyKSB8fAo+IC0JCQkocnN0YXRlLT5vdXRf ZmJfZmxhZ3MgIT0gcnN0YXRlLT5vdXRfZmItPmZsYWdzKSkpIHsKPiAtCj4gLQkJCURQVV9ERUJV RygicGxhbmUlZC4lZCByZWxlYXNlIGZiL2Zib1xuIiwgcGxhbmUtPmJhc2UuaWQsCj4gLQkJCQkJ cnN0YXRlLT5zZXF1ZW5jZV9pZCk7Cj4gLQkJCURQVV9FVlQzMl9WRVJCT1NFKERSTUlEKHBsYW5l KSwKPiAtCQkJCQlyc3RhdGUtPnNlcXVlbmNlX2lkLCBmYl9pZCk7Cj4gLQo+IC0JCQlkcHVfY3J0 Y19yZXNfcHV0KGNzdGF0ZSwgRFBVX0NSVENfUkVTX1JPVF9PVVRfRkIsCj4gLQkJCQkJKHU2NCkg JnJzdGF0ZS0+cm90X2h3LT5iYXNlKTsKPiAtCQkJcnN0YXRlLT5vdXRfZmIgPSBOVUxMOwo+IC0J CQlkcHVfY3J0Y19yZXNfcHV0KGNzdGF0ZSwgRFBVX0NSVENfUkVTX1JPVF9PVVRfRkJPLAo+IC0J CQkJCSh1NjQpICZyc3RhdGUtPnJvdF9ody0+YmFzZSk7Cj4gLQkJCXJzdGF0ZS0+b3V0X2ZibyA9 IE5VTEw7Cj4gLQkJfQo+IC0JfSBlbHNlIHsKPiAtCj4gLQkJRFBVX0RFQlVHKCJwbGFuZSVkLiVk IGJ5cGFzcyByb3RhdG9yXG4iLCBwbGFuZS0+YmFzZS5pZCwKPiAtCQkJCXJzdGF0ZS0+c2VxdWVu Y2VfaWQpOwo+IC0KPiAtCQkvKiBieXBhc3Mgcm90YXRvciAtIGluaXRpYWxpemUgb3V0cHV0IHNl dHRpbmcgYXMgaW5wdXQgKi8KPiAtCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyc3RhdGUt Pm91dF9mYl9tb2RpZmllcik7IGkrKykKPiAtCQkJcnN0YXRlLT5vdXRfZmJfbW9kaWZpZXJbaV0g PSBzdGF0ZS0+ZmIgPwo+IC0JCQkJc3RhdGUtPmZiLT5tb2RpZmllciA6IDB4MDsKPiAtCj4gLQkJ aWYgKHN0YXRlLT5mYikgewo+IC0JCQlyc3RhdGUtPm91dF9mYl9waXhlbF9mb3JtYXQgPSBzdGF0 ZS0+ZmItPmZvcm1hdC0+Zm9ybWF0Owo+IC0JCQlyc3RhdGUtPm91dF9mYl9mbGFncyA9IHN0YXRl LT5mYi0+ZmxhZ3M7Cj4gLQkJCXJzdGF0ZS0+b3V0X2ZiX3dpZHRoID0gc3RhdGUtPmZiLT53aWR0 aDsKPiAtCQkJcnN0YXRlLT5vdXRfZmJfaGVpZ2h0ID0gc3RhdGUtPmZiLT5oZWlnaHQ7Cj4gLQkJ fSBlbHNlIHsKPiAtCQkJcnN0YXRlLT5vdXRfZmJfcGl4ZWxfZm9ybWF0ID0gMHgwOwo+IC0JCQly c3RhdGUtPm91dF9mYl9mbGFncyA9IDB4MDsKPiAtCQkJcnN0YXRlLT5vdXRfZmJfd2lkdGggPSAw Owo+IC0JCQlyc3RhdGUtPm91dF9mYl9oZWlnaHQgPSAwOwo+IC0JCX0KPiAtCj4gLQkJcnN0YXRl LT5vdXRfcm90YXRpb24gPSByc3RhdGUtPmluX3JvdGF0aW9uOwo+IC0JCXJzdGF0ZS0+b3V0X3Ny Y194ID0gc3RhdGUtPnNyY194Owo+IC0JCXJzdGF0ZS0+b3V0X3NyY195ID0gc3RhdGUtPnNyY195 Owo+IC0JCXJzdGF0ZS0+b3V0X3NyY193ID0gc3RhdGUtPnNyY193Owo+IC0JCXJzdGF0ZS0+b3V0 X3NyY19oID0gc3RhdGUtPnNyY19oOwo+IC0KPiAtCQlyc3RhdGUtPm91dF9mYl9mb3JtYXQgPSBO VUxMOwo+IC0JCXJzdGF0ZS0+b3V0X3NidWYgPSBmYWxzZTsKPiAtCQlyc3RhdGUtPm91dF9mYiA9 IHN0YXRlLT5mYjsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC0vKioKPiAt ICogZHB1X3BsYW5lX3JvdF9hdG9taWNfdXBkYXRlIC0gcGVyZm9ybSBhdG9taWMgdXBkYXRlIGZv ciByb3RhdG9yIHN0YWdlCj4gLSAqIEBwbGFuZTogUG9pbnRlciB0byBkcm0gcGxhbmUKPiAtICog QG9sZF9zdGF0ZTogUG9pbnRlciB0byBwcmV2aW91cyBzdGF0ZQo+IC0gKiByZXR1cm46IG5vbmUK PiAtICovCj4gLXN0YXRpYyB2b2lkIGRwdV9wbGFuZV9yb3RfYXRvbWljX3VwZGF0ZShzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKPiAtCQkJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0 ZSkKPiAtewo+IC0Jc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGU7Cj4gLQlzdHJ1Y3QgZHB1 X3BsYW5lX3N0YXRlICpwc3RhdGU7Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0 YXRlOwo+IC0JaW50IHJldCA9IDA7Cj4gLQo+IC0JaWYgKCFwbGFuZSB8fCAhcGxhbmUtPnN0YXRl KSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lL3N0YXRlXG4iKTsKPiAtCQlyZXR1cm47 Cj4gLQl9Cj4gLQo+IC0Jc3RhdGUgPSBwbGFuZS0+c3RhdGU7Cj4gLQlwc3RhdGUgPSB0b19kcHVf cGxhbmVfc3RhdGUoc3RhdGUpOwo+IC0JcnN0YXRlID0gJnBzdGF0ZS0+cm90Owo+IC0KPiAtCURQ VV9ERUJVRygicGxhbmUlZC4lZCBzYnVmOiVkIHJvdDolZCBjcnRjOiVkXG4iLCBwbGFuZS0+YmFz ZS5pZCwKPiAtCQkJcnN0YXRlLT5zZXF1ZW5jZV9pZCwKPiAtCQkJISFyc3RhdGUtPm91dF9zYnVm LCAhIXJzdGF0ZS0+cm90X2h3LAo+IC0JCQlkcHVfcGxhbmVfY3J0Y19lbmFibGVkKHBsYW5lLT5z dGF0ZSkpOwo+IC0KPiAtCWlmICghZHB1X3BsYW5lX2NydGNfZW5hYmxlZChzdGF0ZSkpCj4gLQkJ cmV0dXJuOwo+IC0KPiAtCWlmICghcnN0YXRlLT5vdXRfc2J1ZiB8fCAhcnN0YXRlLT5yb3RfaHcp Cj4gLQkJcmV0dXJuOwo+IC0KPiAtCWRwdV9wbGFuZV9yb3Rfc3VibWl0X2NvbW1hbmQocGxhbmUs IHN0YXRlLCBEUFVfSFdfUk9UX0NNRF9DT01NSVQpOwo+IC0KPiAtCXJldHVybjsKPiAtCj4gLWVy cm9yX3ByZXBhcmVfb3V0cHV0X2J1ZmZlcjoKPiAtCW1zbV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKHN0 YXRlLT5mYiwgcHN0YXRlLT5hc3BhY2UpOwo+IC19Cj4gLQo+IC12b2lkIGRwdV9wbGFuZV9raWNr b2ZmKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lX3N0 YXRlICpwc3RhdGU7Cj4gLQo+IC0JaWYgKCFwbGFuZSB8fCAhcGxhbmUtPnN0YXRlKSB7Cj4gLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0J cHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7Cj4gLQo+IC0JaWYgKCFw c3RhdGUtPnJvdC5yb3RfaHcgfHwgIXBzdGF0ZS0+cm90LnJvdF9ody0+b3BzLmNvbW1pdCkKPiAt CQlyZXR1cm47Cj4gLQo+IC0JcHN0YXRlLT5yb3Qucm90X2h3LT5vcHMuY29tbWl0KHBzdGF0ZS0+ cm90LnJvdF9odywKPiAtCQkJJnBzdGF0ZS0+cm90LnJvdF9jbWQsCj4gLQkJCURQVV9IV19ST1Rf Q01EX1NUQVJUKTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGRwdV9wbGFuZV9yb3RfZGVzdHJveV9z dGF0ZSAtIGRlc3Ryb3kgc3RhdGUgZm9yIHJvdGF0b3Igc3RhZ2UKPiAtICogQHBsYW5lOiBQb2lu dGVyIHRvIGRybSBwbGFuZQo+IC0gKiBAc3RhdGU6IFBvaW50ZXIgdG8gc3RhdGUgdG8gYmUgZGVz dHJveWVkCj4gLSAqIHJldHVybjogbm9uZQo+IC0gKi8KPiAtc3RhdGljIHZvaWQgZHB1X3BsYW5l X3JvdF9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+IC0JCXN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpw c3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUpOwo+IC0Jc3RydWN0IGRwdV9wbGFuZV9y b3Rfc3RhdGUgKnJzdGF0ZSA9ICZwc3RhdGUtPnJvdDsKPiAtCj4gLQlEUFVfREVCVUcoInBsYW5l JWQuJWQgc2J1ZjolZCByb3Q6JWQgY3J0YzolZFxuIiwgcGxhbmUtPmJhc2UuaWQsCj4gLQkJCXJz dGF0ZS0+c2VxdWVuY2VfaWQsCj4gLQkJCSEhcnN0YXRlLT5vdXRfc2J1ZiwgISFyc3RhdGUtPnJv dF9odywKPiAtCQkJZHB1X3BsYW5lX2NydGNfZW5hYmxlZChzdGF0ZSkpOwo+IC19Cj4gLQo+IC0v KioKPiAtICogZHB1X3BsYW5lX3JvdF9kdXBsaWNhdGVfc3RhdGUgLSBkdXBsaWNhdGUgc3RhdGUg Zm9yIHJvdGF0b3Igc3RhZ2UKPiAtICogQHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQo+IC0g KiBAbmV3X3N0YXRlOiBQb2ludGVyIHRvIGR1cGxpY2F0ZWQgc3RhdGUKPiAtICogcmV0dXJuOiAw IGlmIHN1Y2Nlc3M7IGVycm9yIGNvZGUgb3RoZXJ3aXNlCj4gLSAqLwo+IC1zdGF0aWMgaW50IGRw dV9wbGFuZV9yb3RfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+IC0J CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm5ld19zdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRwdV9w bGFuZV9zdGF0ZSAqcHN0YXRlICA9IHRvX2RwdV9wbGFuZV9zdGF0ZShuZXdfc3RhdGUpOwo+IC0J c3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKnJzdGF0ZSA9ICZwc3RhdGUtPnJvdDsKPiAtCj4g LQlyc3RhdGUtPnNlcXVlbmNlX2lkKys7Cj4gLQo+IC0JRFBVX0RFQlVHKCJwbGFuZSVkLiVkIHNi dWY6JWQgcm90OiVkXG4iLCBwbGFuZS0+YmFzZS5pZCwKPiAtCQkJcnN0YXRlLT5zZXF1ZW5jZV9p ZCwKPiAtCQkJISFyc3RhdGUtPm91dF9zYnVmLCAhIXJzdGF0ZS0+cm90X2h3KTsKPiAtCj4gLQly c3RhdGUtPnJvdF9odyA9IE5VTEw7Cj4gLQlyc3RhdGUtPm91dF9mYiA9IE5VTEw7Cj4gLQlyc3Rh dGUtPm91dF9mYm8gPSBOVUxMOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC0vKioKPiAt ICogZHB1X3BsYW5lX3JvdF9pbnN0YWxsX2NhcHMgLSBpbnN0YWxsIHBsYW5lIHJvdGF0b3IgY2Fw YWJpbGl0aWVzCj4gLSAqIEBwbGFuZTogUG9pbnRlciB0byBkcm0gcGxhbmUKPiAtICogcmV0dXJu OiBub25lCj4gLSAqLwo+IC1zdGF0aWMgdm9pZCBkcHVfcGxhbmVfcm90X2luc3RhbGxfY2Fwcyhz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiAtewo+IC0Jc3RydWN0IGRwdV9wbGFuZSAqcGRwdSA9 IHRvX2RwdV9wbGFuZShwbGFuZSk7Cj4gLQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRl ZCAqZm9ybWF0X2xpc3Q7Cj4gLQlzdHJ1Y3QgZHB1X2ttc19pbmZvICppbmZvOwo+IC0Jc3RydWN0 IGRwdV9od19yb3QgKnJvdF9odzsKPiAtCWNvbnN0IGNoYXIgKmRvd25zY2FsZV9jYXBzOwo+IC0K PiAtCWlmICghcGRwdS0+Y2F0YWxvZyB8fCAhKHBkcHUtPmZlYXR1cmVzICYgQklUKERQVV9TU1BQ X1NCVUYpKSB8fAo+IC0JCQkhcGRwdS0+Y2F0YWxvZy0+cm90X2NvdW50KQo+IC0JCXJldHVybjsK PiAtCj4gLQlpZiAocGRwdS0+YmxvYl9yb3RfY2FwcykKPiAtCQlyZXR1cm47Cj4gLQo+IC0JaW5m byA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVfa21zX2luZm8pLCBHRlBfS0VSTkVMKTsKPiAt CWlmICghaW5mbykKPiAtCQlyZXR1cm47Cj4gLQo+IC0Jcm90X2h3ID0gZHB1X2h3X3JvdF9nZXQo TlVMTCk7Cj4gLQlpZiAoIXJvdF9odyB8fCAhcm90X2h3LT5vcHMuZ2V0X2Zvcm1hdF9jYXBzIHx8 Cj4gLQkJCSFyb3RfaHctPm9wcy5nZXRfZG93bnNjYWxlX2NhcHMpIHsKPiAtCQlEUFVfRVJST1Io ImludmFsaWQgcm90YXRvciBod1xuIik7Cj4gLQkJZ290byBlcnJvcl9yb3Q7Cj4gLQl9Cj4gLQo+ IC0JZHB1X2ttc19pbmZvX3Jlc2V0KGluZm8pOwo+IC0KPiAtCWZvcm1hdF9saXN0ID0gcm90X2h3 LT5vcHMuZ2V0X2Zvcm1hdF9jYXBzKHJvdF9odyk7Cj4gLQlpZiAoZm9ybWF0X2xpc3QpIHsKPiAt CQlkcHVfa21zX2luZm9fc3RhcnQoaW5mbywgInBpeGVsX2Zvcm1hdHMiKTsKPiAtCQl3aGlsZSAo Zm9ybWF0X2xpc3QtPmZvdXJjY19mb3JtYXQpIHsKPiAtCQkJZHB1X2ttc19pbmZvX2FwcGVuZF9m b3JtYXQoaW5mbywKPiAtCQkJCQlmb3JtYXRfbGlzdC0+Zm91cmNjX2Zvcm1hdCwKPiAtCQkJCQlm b3JtYXRfbGlzdC0+bW9kaWZpZXIpOwo+IC0JCQkrK2Zvcm1hdF9saXN0Owo+IC0JCX0KPiAtCQlk cHVfa21zX2luZm9fc3RvcChpbmZvKTsKPiAtCX0KPiAtCj4gLQlkb3duc2NhbGVfY2FwcyA9IHJv dF9ody0+b3BzLmdldF9kb3duc2NhbGVfY2Fwcyhyb3RfaHcpOwo+IC0JaWYgKGRvd25zY2FsZV9j YXBzKSB7Cj4gLQkJZHB1X2ttc19pbmZvX3N0YXJ0KGluZm8sICJkb3duc2NhbGVfcmF0aW9zIik7 Cj4gLQkJZHB1X2ttc19pbmZvX2FwcGVuZChpbmZvLCBkb3duc2NhbGVfY2Fwcyk7Cj4gLQkJZHB1 X2ttc19pbmZvX3N0b3AoaW5mbyk7Cj4gLQl9Cj4gLQo+IC0JaWYgKHJvdF9ody0+b3BzLmdldF9j YWNoZV9zaXplKQo+IC0JCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJjYWNoZV9zaXpl IiwKPiAtCQkJCXJvdF9ody0+b3BzLmdldF9jYWNoZV9zaXplKHJvdF9odykpOwo+IC0KPiAtCWlm IChyb3RfaHctPm9wcy5nZXRfbWF4bGluZXdpZHRoKQo+IC0JCWRwdV9rbXNfaW5mb19hZGRfa2V5 aW50KGluZm8sICJtYXhfbGluZXdpZHRoIiwKPiAtCQkJCXJvdF9ody0+b3BzLmdldF9tYXhsaW5l d2lkdGgocm90X2h3KSk7Cj4gLQo+IC0JbXNtX3Byb3BlcnR5X3NldF9ibG9iKCZwZHB1LT5wcm9w ZXJ0eV9pbmZvLCAmcGRwdS0+YmxvYl9yb3RfY2FwcywKPiAtCQkJaW5mby0+ZGF0YSwgRFBVX0tN U19JTkZPX0RBVEFMRU4oaW5mbyksCj4gLQkJCVBMQU5FX1BST1BfUk9UX0NBUFNfVjEpOwo+IC0K PiAtCWRwdV9od19yb3RfcHV0KHJvdF9odyk7Cj4gLWVycm9yX3JvdDoKPiAtCWtmcmVlKGluZm8p Owo+IC19Cj4gLQo+IC0vKioKPiAtICogZHB1X3BsYW5lX3JvdF9pbnN0YWxsX3Byb3BlcnRpZXMg LSBpbnN0YWxsIHBsYW5lIHJvdGF0b3IgcHJvcGVydGllcwo+IC0gKiBAcGxhbmU6IFBvaW50ZXIg dG8gZHJtIHBsYW5lCj4gLSAqIEBjYXRhbG9nOiBQb2ludGVyIHRvIG1kc3MgY29uZmlndXJhdGlv bgo+IC0gKiByZXR1cm46IG5vbmUKPiAtICovCj4gLXN0YXRpYyB2b2lkIGRwdV9wbGFuZV9yb3Rf aW5zdGFsbF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+IC0Jc3RydWN0IGRw dV9tZHNzX2NmZyAqY2F0YWxvZykKPiAtewo+IC0Jc3RydWN0IGRwdV9wbGFuZSAqcGRwdSA9IHRv X2RwdV9wbGFuZShwbGFuZSk7Cj4gLQl1bnNpZ25lZCBsb25nIHN1cHBvcnRlZF9yb3RhdGlvbnMg PSBEUk1fTU9ERV9ST1RBVEVfMCB8Cj4gLQkJCURSTV9NT0RFX1JFRkxFQ1RfWCB8IERSTV9NT0RF X1JFRkxFQ1RfWTsKPiAtCj4gLQlpZiAoIXBsYW5lIHx8ICFwZHB1KSB7Cj4gLQkJRFBVX0VSUk9S KCJpbnZhbGlkIHBsYW5lXG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9IGVsc2UgaWYgKCFjYXRhbG9n KSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNhdGFsb2dcbiIpOwo+IC0JCXJldHVybjsKPiAt CX0KPiAtCj4gLQlpZiAoKHBkcHUtPmZlYXR1cmVzICYgQklUKERQVV9TU1BQX1NCVUYpKSAmJiBj YXRhbG9nLT5yb3RfY291bnQpCj4gLQkJc3VwcG9ydGVkX3JvdGF0aW9ucyB8PSBEUk1fTU9ERV9S T1RBVEVfMCB8IERSTV9NT0RFX1JPVEFURV85MCB8Cj4gLQkJCQlEUk1fTU9ERV9ST1RBVEVfMTgw IHwgRFJNX01PREVfUk9UQVRFXzI3MDsKPiAtCj4gLQltc21fcHJvcGVydHlfaW5zdGFsbF9yb3Rh dGlvbigmcGRwdS0+cHJvcGVydHlfaW5mbywgcGxhbmUsCj4gLQkJCURSTV9NT0RFX1JPVEFURV8w LCBzdXBwb3J0ZWRfcm90YXRpb25zLAo+IC0JCQlQTEFORV9QUk9QX1JPVEFUSU9OKTsKPiAtCj4g LQlpZiAoIShwZHB1LT5mZWF0dXJlcyAmIEJJVChEUFVfU1NQUF9TQlVGKSkgfHwgIWNhdGFsb2ct PnJvdF9jb3VudCkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFu Z2UoJnBkcHUtPnByb3BlcnR5X2luZm8sICJyb3RfZHN0X3giLAo+IC0JCQkwLCAwLCBVNjRfTUFY LCAwLCBQTEFORV9QUk9QX1JPVF9EU1RfWCk7Cj4gLQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5n ZSgmcGRwdS0+cHJvcGVydHlfaW5mbywgInJvdF9kc3RfeSIsCj4gLQkJCTAsIDAsIFU2NF9NQVgs IDAsIFBMQU5FX1BST1BfUk9UX0RTVF9ZKTsKPiAtCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3Jhbmdl KCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAicm90X2RzdF93IiwKPiAtCQkJMCwgMCwgVTY0X01BWCwg MCwgUExBTkVfUFJPUF9ST1RfRFNUX1cpOwo+IC0JbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2Uo JnBkcHUtPnByb3BlcnR5X2luZm8sICJyb3RfZHN0X2giLAo+IC0JCQkwLCAwLCBVNjRfTUFYLCAw LCBQTEFORV9QUk9QX1JPVF9EU1RfSCk7Cj4gLQltc21fcHJvcGVydHlfaW5zdGFsbF9ibG9iKCZw ZHB1LT5wcm9wZXJ0eV9pbmZvLCAicm90X2NhcHNfdjEiLAo+IC0JCURSTV9NT0RFX1BST1BfSU1N VVRBQkxFLCBQTEFORV9QUk9QX1JPVF9DQVBTX1YxKTsKPiAtfQo+IC0KPiAgdm9pZCBkcHVfcGxh bmVfY2xlYXJfbXVsdGlyZWN0KGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKmRybV9zdGF0 ZSkKPiAgewo+ICAJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwo+IEBAIC0yNjA1LDEz ICsxMzc1LDExIEBAIGludCBkcHVfcGxhbmVfdmFsaWRhdGVfbXVsdGlyZWN0X3YyKHN0cnVjdCBk cHVfbXVsdGlyZWN0X3BsYW5lX3N0YXRlcyAqcGxhbmUpCj4gICAqIEBwbGFuZTogUG9pbnRlciB0 byBkcm0gcGxhbmUgc3RydWN0dXJlCj4gICAqIEBjdGw6IFBvaW50ZXIgdG8gaGFyZHdhcmUgY29u dHJvbCBkcml2ZXIKPiAgICogQGZsdXNoX3NzcHA6IFBvaW50ZXIgdG8gc3NwcCBmbHVzaCBjb250 cm9sIHdvcmQKPiAtICogQGZsdXNoX3JvdDogUG9pbnRlciB0byByb3RhdG9yIGZsdXNoIGNvbnRy b2wgd29yZAo+ICAgKi8KPiAgdm9pZCBkcHVfcGxhbmVfZ2V0X2N0bF9mbHVzaChzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwgc3RydWN0IGRwdV9od19jdGwgKmN0bCwKPiAtCQl1MzIgKmZsdXNoX3Nz cHAsIHUzMiAqZmx1c2hfcm90KQo+ICsJCXUzMiAqZmx1c2hfc3NwcCkKPiAgewo+ICAJc3RydWN0 IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwo+IC0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUg KnJzdGF0ZTsKPiAgCj4gIAlpZiAoIXBsYW5lIHx8ICFmbHVzaF9zc3BwKSB7Cj4gIAkJRFBVX0VS Uk9SKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOwo+IEBAIC0yNjE5LDE3ICsxMzg3LDggQEAgdm9p ZCBkcHVfcGxhbmVfZ2V0X2N0bF9mbHVzaChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgc3RydWN0 IGRwdV9od19jdGwgKmN0bCwKPiAgCX0KPiAgCj4gIAlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3Rh dGUocGxhbmUtPnN0YXRlKTsKPiAtCXJzdGF0ZSA9ICZwc3RhdGUtPnJvdDsKPiAgCj4gIAkqZmx1 c2hfc3NwcCA9IGN0bC0+b3BzLmdldF9iaXRtYXNrX3NzcHAoY3RsLCBkcHVfcGxhbmVfcGlwZShw bGFuZSkpOwo+IC0KPiAtCWlmICghZmx1c2hfcm90KQo+IC0JCXJldHVybjsKPiAtCj4gLQkqZmx1 c2hfcm90ID0gMHgwOwo+IC0JaWYgKHJzdGF0ZSAmJiByc3RhdGUtPm91dF9zYnVmICYmIHJzdGF0 ZS0+cm90X2h3ICYmCj4gLQkJCWN0bC0+b3BzLmdldF9iaXRtYXNrX3JvdCkKPiAtCQljdGwtPm9w cy5nZXRfYml0bWFza19yb3QoY3RsLCBmbHVzaF9yb3QsIHJzdGF0ZS0+cm90X2h3LT5pZHgpOwo+ ICB9Cj4gIAo+ICBzdGF0aWMgaW50IGRwdV9wbGFuZV9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAo+IEBAIC0yNjM4LDcgKzEzOTcsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9w cmVwYXJlX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIgPSBuZXdfc3RhdGUtPmZiOwo+ICAJc3RydWN0IGRwdV9wbGFuZSAqcGRwdSA9IHRv X2RwdV9wbGFuZShwbGFuZSk7Cj4gIAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGUgPSB0 b19kcHVfcGxhbmVfc3RhdGUobmV3X3N0YXRlKTsKPiAtCXN0cnVjdCBkcHVfcGxhbmVfcm90X3N0 YXRlICpuZXdfcnN0YXRlOwo+ICAJc3RydWN0IGRwdV9od19mbXRfbGF5b3V0IGxheW91dDsKPiAg CXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZTsKPiAgCXN0cnVjdCBtc21fZ2Vt X29iamVjdCAqbXNtX29iajsKPiBAQCAtMjY1OSwxNiArMTQxNyw4IEBAIHN0YXRpYyBpbnQgZHB1 X3BsYW5lX3ByZXBhcmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAkvKiBjYWNoZSBh c3BhY2UgKi8KPiAgCXBzdGF0ZS0+YXNwYWNlID0gYXNwYWNlOwo+ICAKPiAtCXJldCA9IGRwdV9w bGFuZV9yb3RfcHJlcGFyZV9mYihwbGFuZSwgbmV3X3N0YXRlKTsKPiAtCWlmIChyZXQpIHsKPiAt CQlEUFVfRVJST1IoImZhaWxlZCB0byBwcmVwYXJlIHJvdCBmcmFtZWJ1ZmZlclxuIik7Cj4gLQkJ cmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gLQluZXdfcnN0YXRlID0gJnRvX2RwdV9wbGFuZV9zdGF0 ZShuZXdfc3RhdGUpLT5yb3Q7Cj4gLQo+ICAJaWYgKHBzdGF0ZS0+YXNwYWNlKSB7Cj4gLQkJcmV0 ID0gbXNtX2ZyYW1lYnVmZmVyX3ByZXBhcmUobmV3X3JzdGF0ZS0+b3V0X2ZiLAo+ICsJCXJldCA9 IG1zbV9mcmFtZWJ1ZmZlcl9wcmVwYXJlKG5ld19zdGF0ZS0+ZmIsCj4gIAkJCQlwc3RhdGUtPmFz cGFjZSk7Cj4gIAkJaWYgKHJldCkgewo+ICAJCQlEUFVfRVJST1IoImZhaWxlZCB0byBwcmVwYXJl IGZyYW1lYnVmZmVyXG4iKTsKPiBAQCAtMjY3OCw3ICsxNDI4LDcgQEAgc3RhdGljIGludCBkcHVf cGxhbmVfcHJlcGFyZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCj4gIAkvKiB2YWxp ZGF0ZSBmcmFtZWJ1ZmZlciBsYXlvdXQgYmVmb3JlIGNvbW1pdCAqLwo+ICAJcmV0ID0gZHB1X2Zv cm1hdF9wb3B1bGF0ZV9sYXlvdXQocHN0YXRlLT5hc3BhY2UsCj4gLQkJCW5ld19yc3RhdGUtPm91 dF9mYiwgJmxheW91dCk7Cj4gKwkJCW5ld19zdGF0ZS0+ZmIsICZsYXlvdXQpOwo+ICAJaWYgKHJl dCkgewo+ICAJCURQVV9FUlJPUl9QTEFORShwZHB1LCAiZmFpbGVkIHRvIGdldCBmb3JtYXQgbGF5 b3V0LCAlZFxuIiwgcmV0KTsKPiAgCQlyZXR1cm4gcmV0Owo+IEBAIC0yNjk4LDcgKzE0NDgsNiBA QCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfY2xlYW51cF9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKPiAgewo+ICAJc3RydWN0IGRwdV9wbGFuZSAqcGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7 Cj4gIAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpvbGRfcHN0YXRlOwo+IC0Jc3RydWN0IGRwdV9w bGFuZV9yb3Rfc3RhdGUgKm9sZF9yc3RhdGU7Cj4gIAo+ICAJaWYgKCFvbGRfc3RhdGUgfHwgIW9s ZF9zdGF0ZS0+ZmIpCj4gIAkJcmV0dXJuOwo+IEBAIC0yNzA3LDExICsxNDU2LDcgQEAgc3RhdGlj IHZvaWQgZHB1X3BsYW5lX2NsZWFudXBfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAo+ ICAJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJGQlsldV1cbiIsIG9sZF9zdGF0ZS0+ZmItPmJhc2Uu aWQpOwo+ICAKPiAtCW9sZF9yc3RhdGUgPSAmb2xkX3BzdGF0ZS0+cm90Owo+IC0KPiAtCW1zbV9m cmFtZWJ1ZmZlcl9jbGVhbnVwKG9sZF9yc3RhdGUtPm91dF9mYiwgb2xkX3BzdGF0ZS0+YXNwYWNl KTsKPiAtCj4gLQlkcHVfcGxhbmVfcm90X2NsZWFudXBfZmIocGxhbmUsIG9sZF9zdGF0ZSk7Cj4g Kwltc21fZnJhbWVidWZmZXJfY2xlYW51cChvbGRfc3RhdGUtPmZiLCBvbGRfcHN0YXRlLT5hc3Bh Y2UpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNr X21vZGVfY2hhbmdlZChzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAo+IEBAIC0yNzIwLDggKzE0NjUs NiBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrX21vZGVfY2hhbmdl ZChzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAo+ICB7Cj4gIAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRl ICpwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUpOwo+ICAJc3RydWN0IGRwdV9wbGFu ZV9zdGF0ZSAqb2xkX3BzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShvbGRfc3RhdGUpOwo+IC0J c3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKnJzdGF0ZSA9ICZwc3RhdGUtPnJvdDsKPiAtCXN0 cnVjdCBkcHVfcGxhbmVfcm90X3N0YXRlICpvbGRfcnN0YXRlID0gJm9sZF9wc3RhdGUtPnJvdDsK PiAgCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCAqb2xkX2ZiOwo+ICAKPiAgCS8qIG5vIG5l ZWQgdG8gY2hlY2sgaXQgYWdhaW4gKi8KPiBAQCAtMjc0MCwxMiArMTQ4Myw2IEBAIHN0YXRpYyB2 b2lkIF9kcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2tfbW9kZV9jaGFuZ2VkKHN0cnVjdCBkcHVf cGxhbmUgKnBkcHUsCj4gIAkJCXBzdGF0ZS0+bXVsdGlyZWN0X21vZGUgIT0gb2xkX3BzdGF0ZS0+ bXVsdGlyZWN0X21vZGUpIHsKPiAgCQlEUFVfREVCVUdfUExBTkUocGRwdSwgIm11bHRpcmVjdCBj b25maWcgdXBkYXRlZFxuIik7Cj4gIAkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlf QUxMOwo+IC0JfSBlbHNlIGlmIChyc3RhdGUtPm91dF9zcmNfdyAhPSBvbGRfcnN0YXRlLT5vdXRf c3JjX3cgfHwKPiAtCQkgICByc3RhdGUtPm91dF9zcmNfaCAhPSBvbGRfcnN0YXRlLT5vdXRfc3Jj X2ggfHwKPiAtCQkgICByc3RhdGUtPm91dF9zcmNfeCAhPSBvbGRfcnN0YXRlLT5vdXRfc3JjX3gg fHwKPiAtCQkgICByc3RhdGUtPm91dF9zcmNfeSAhPSBvbGRfcnN0YXRlLT5vdXRfc3JjX3kpIHsK PiAtCQlEUFVfREVCVUdfUExBTkUocGRwdSwgInNyYyByZWN0IHVwZGF0ZWRcbiIpOwo+IC0JCXBz dGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX1JFQ1RTOwo+ICAJfSBlbHNlIGlmIChzdGF0 ZS0+Y3J0Y193ICE9IG9sZF9zdGF0ZS0+Y3J0Y193IHx8Cj4gIAkJICAgc3RhdGUtPmNydGNfaCAh PSBvbGRfc3RhdGUtPmNydGNfaCB8fAo+ICAJCSAgIHN0YXRlLT5jcnRjX3ggIT0gb2xkX3N0YXRl LT5jcnRjX3ggfHwKPiBAQCAtMjc2MCw4ICsxNDk3LDggQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFu ZV9zc3BwX2F0b21pY19jaGVja19tb2RlX2NoYW5nZWQoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwK PiAgCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9QTEFORV9ESVJUWV9SRUNUUzsKPiAgCX0KPiAgCj4g LQlmYiA9IHJzdGF0ZS0+b3V0X2ZiOwo+IC0Jb2xkX2ZiID0gb2xkX3JzdGF0ZS0+b3V0X2ZiOwo+ ICsJZmIgPSBzdGF0ZS0+ZmI7Cj4gKwlvbGRfZmIgPSBvbGRfc3RhdGUtPmZiOwo+ICAKPiAgCWlm ICghZmIgfHwgIW9sZF9mYikgewo+ICAJCURQVV9ERUJVR19QTEFORShwZHB1LCAiY2FuJ3QgY29t cGFyZSBmYiBoYW5kbGVzXG4iKTsKPiBAQCAtMjkxMSw3ICsxNjQ4LDYgQEAgc3RhdGljIGludCBk cHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAlp bnQgcmV0ID0gMDsKPiAgCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHU7Cj4gIAlzdHJ1Y3QgZHB1X3Bs YW5lX3N0YXRlICpwc3RhdGU7Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRl Owo+ICAJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdDsKPiAgCXN0cnVjdCBkcHVfcmVjdCBz cmMsIGRzdDsKPiAgCXVpbnQzMl90IGRlY2lfdywgZGVjaV9oLCBzcmNfZGVjaV93LCBzcmNfZGVj aV9oOwo+IEBAIC0yOTI3LDcgKzE2NjMsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0 b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCj4gIAlwZHB1ID0gdG9fZHB1 X3BsYW5lKHBsYW5lKTsKPiAgCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7Cj4g LQlyc3RhdGUgPSAmcHN0YXRlLT5yb3Q7Cj4gIAo+ICAJaWYgKCFwZHB1LT5waXBlX3NibGspIHsK PiAgCQlEUFVfRVJST1JfUExBTkUocGRwdSwgImludmFsaWQgY2F0YWxvZ1xuIik7Cj4gQEAgLTI5 MzksOCArMTY3NCw4IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJZGVjaV9oID0gZHB1X3BsYW5lX2dldF9wcm9wZXJ0 eShwc3RhdGUsIFBMQU5FX1BST1BfVl9ERUNJTUFURSk7Cj4gIAo+ICAJLyogc3JjIHZhbHVlcyBh cmUgaW4gUTE2IGZpeGVkIHBvaW50LCBjb252ZXJ0IHRvIGludGVnZXIgKi8KPiAtCVBPUFVMQVRF X1JFQ1QoJnNyYywgcnN0YXRlLT5vdXRfc3JjX3gsIHJzdGF0ZS0+b3V0X3NyY195LAo+IC0JCQly c3RhdGUtPm91dF9zcmNfdywgcnN0YXRlLT5vdXRfc3JjX2gsIHExNl9kYXRhKTsKPiArCVBPUFVM QVRFX1JFQ1QoJnNyYywgc3RhdGUtPnNyY194LCBzdGF0ZS0+c3JjX3ksIHN0YXRlLT5zcmNfdywK PiArCQlzdGF0ZS0+c3JjX2gsIHExNl9kYXRhKTsKPiAgCVBPUFVMQVRFX1JFQ1QoJmRzdCwgc3Rh dGUtPmNydGNfeCwgc3RhdGUtPmNydGNfeSwgc3RhdGUtPmNydGNfdywKPiAgCQlzdGF0ZS0+Y3J0 Y19oLCAhcTE2X2RhdGEpOwo+ICAKPiBAQCAtMjk1NywxOCArMTY5Miw2IEBAIHN0YXRpYyBpbnQg ZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJ aWYgKCFkcHVfcGxhbmVfZW5hYmxlZChzdGF0ZSkpCj4gIAkJZ290byBtb2Rlc2V0X3VwZGF0ZTsK PiAgCj4gLQlEUFVfREVCVUcoCj4gLQkJInBsYW5lJWQuJXUgc3NwcDoleC8lZHglZC8lNC40cy8l bGx4LyVkeCVkKyVkKyVkIGNydGM6JWR4JWQrJWQrJWRcbiIsCj4gLQkJCXBsYW5lLT5iYXNlLmlk LCByc3RhdGUtPnNlcXVlbmNlX2lkLAo+IC0JCQlyc3RhdGUtPm91dF9yb3RhdGlvbiwKPiAtCQkJ cnN0YXRlLT5vdXRfZmJfd2lkdGgsIHJzdGF0ZS0+b3V0X2ZiX2hlaWdodCwKPiAtCQkJKGNoYXIg KikgJnJzdGF0ZS0+b3V0X2ZiX3BpeGVsX2Zvcm1hdCwKPiAtCQkJcnN0YXRlLT5vdXRfZmJfbW9k aWZpZXJbMF0sCj4gLQkJCXJzdGF0ZS0+b3V0X3NyY193ID4+IDE2LCByc3RhdGUtPm91dF9zcmNf aCA+PiAxNiwKPiAtCQkJcnN0YXRlLT5vdXRfc3JjX3ggPj4gMTYsIHJzdGF0ZS0+b3V0X3NyY195 ID4+IDE2LAo+IC0JCQlzdGF0ZS0+Y3J0Y193LCBzdGF0ZS0+Y3J0Y19oLAo+IC0JCQlzdGF0ZS0+ Y3J0Y194LCBzdGF0ZS0+Y3J0Y195KTsKPiAtCj4gIAlmbXQgPSB0b19kcHVfZm9ybWF0KG1zbV9m cmFtZWJ1ZmZlcl9mb3JtYXQoc3RhdGUtPmZiKSk7Cj4gIAo+ICAJbWluX3NyY19zaXplID0gRFBV X0ZPUk1BVF9JU19ZVVYoZm10KSA/IDIgOiAxOwo+IEBAIC0yOTgyLDExICsxNzA1LDExIEBAIHN0 YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAo+ICAJCXJldCA9IC1FSU5WQUw7Cj4gIAo+ICAJLyogY2hlY2sgc3JjIGJvdW5kcyAqLwo+ IC0JfSBlbHNlIGlmIChyc3RhdGUtPm91dF9mYl93aWR0aCA+IE1BWF9JTUdfV0lEVEggfHwKPiAt CQlyc3RhdGUtPm91dF9mYl9oZWlnaHQgPiBNQVhfSU1HX0hFSUdIVCB8fAo+ICsJfSBlbHNlIGlm IChzdGF0ZS0+ZmItPndpZHRoID4gTUFYX0lNR19XSURUSCB8fAo+ICsJCXN0YXRlLT5mYi0+aGVp Z2h0ID4gTUFYX0lNR19IRUlHSFQgfHwKPiAgCQlzcmMudyA8IG1pbl9zcmNfc2l6ZSB8fCBzcmMu aCA8IG1pbl9zcmNfc2l6ZSB8fAo+IC0JCUNIRUNLX0xBWUVSX0JPVU5EUyhzcmMueCwgc3JjLncs IHJzdGF0ZS0+b3V0X2ZiX3dpZHRoKSB8fAo+IC0JCUNIRUNLX0xBWUVSX0JPVU5EUyhzcmMueSwg c3JjLmgsIHJzdGF0ZS0+b3V0X2ZiX2hlaWdodCkpIHsKPiArCQlDSEVDS19MQVlFUl9CT1VORFMo c3JjLngsIHNyYy53LCBzdGF0ZS0+ZmItPndpZHRoKSB8fAo+ICsJCUNIRUNLX0xBWUVSX0JPVU5E UyhzcmMueSwgc3JjLmgsIHN0YXRlLT5mYi0+aGVpZ2h0KSkgewo+ICAJCURQVV9FUlJPUl9QTEFO RShwZHB1LCAiaW52YWxpZCBzb3VyY2UgJXUsICV1LCAldXgldVxuIiwKPiAgCQkJc3JjLngsIHNy Yy55LCBzcmMudywgc3JjLmgpOwo+ICAJCXJldCA9IC1FMkJJRzsKPiBAQCAtMzA0MSw4ICsxNzY0 LDggQEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCj4gIAkJCXNyY19kZWNpX3csIHNyY19kZWNpX2gsIGRzdC53LCBkc3QuaCk7 Cj4gIAkJcmV0ID0gLUUyQklHOwo+ICAJfSBlbHNlIGlmIChfZHB1X3BsYW5lX3ZhbGlkYXRlX3Nj YWxlcl92MihwZHB1LCBwc3RhdGUsIGZtdCwKPiAtCQkJCXJzdGF0ZS0+b3V0X2ZiX3dpZHRoLAo+ IC0JCQkJcnN0YXRlLT5vdXRfZmJfaGVpZ2h0LAo+ICsJCQkJc3RhdGUtPmZiLT53aWR0aCwKPiAr CQkJCXN0YXRlLT5mYi0+aGVpZ2h0LAo+ICAJCQkJc3JjLncsIHNyYy5oLCBkZWNpX3csIGRlY2lf aCkpIHsKPiAgCQlyZXQgPSAtRUlOVkFMOwo+ICAJfQo+IEBAIC0zMDk5LDEwICsxODIyLDYgQEAg c3RhdGljIGludCBkcHVfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAo+ICAKPiAgCURQVV9ERUJVR19QTEFORShwZHB1LCAiXG4iKTsKPiAgCj4gLQlyZXQgPSBkcHVf cGxhbmVfcm90X2F0b21pY19jaGVjayhwbGFuZSwgc3RhdGUpOwo+IC0JaWYgKHJldCkKPiAtCQln b3RvIGV4aXQ7Cj4gLQo+ICAJcmV0ID0gZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrKHBsYW5l LCBzdGF0ZSk7Cj4gIAo+ICBleGl0Ogo+IEBAIC0zMTY3LDcgKzE4ODYsNiBAQCBzdGF0aWMgaW50 IGRwdV9wbGFuZV9zc3BwX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4g IAlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZTsKPiAgCXN0cnVjdCBkcHVfcGxhbmVfc3Rh dGUgKnBzdGF0ZTsKPiAgCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKm9sZF9wc3RhdGU7Cj4gLQlz dHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRlOwo+ICAJY29uc3Qgc3RydWN0IGRwdV9m b3JtYXQgKmZtdDsKPiAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiAgCXN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiOwo+IEBAIC0zMTkwLDEyICsxOTA4LDExIEBAIHN0YXRpYyBpbnQgZHB1X3Bs YW5lX3NzcHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCXN0YXRl ID0gcGxhbmUtPnN0YXRlOwo+ICAKPiAgCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0 ZSk7Cj4gLQlyc3RhdGUgPSAmcHN0YXRlLT5yb3Q7Cj4gIAo+ICAJb2xkX3BzdGF0ZSA9IHRvX2Rw dV9wbGFuZV9zdGF0ZShvbGRfc3RhdGUpOwo+ICAKPiAgCWNydGMgPSBzdGF0ZS0+Y3J0YzsKPiAt CWZiID0gcnN0YXRlLT5vdXRfZmI7Cj4gKwlmYiA9IHN0YXRlLT5mYjsKPiAgCWlmICghY3J0YyB8 fCAhZmIpIHsKPiAgCQlEUFVfRVJST1JfUExBTkUocGRwdSwgImludmFsaWQgY3J0YyAlZCBvciBm YiAlZFxuIiwKPiAgCQkJCWNydGMgIT0gMCwgZmIgIT0gMCk7Cj4gQEAgLTMyMDQsMTggKzE5MjEs NiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCj4gIAlmbXQgPSB0b19kcHVfZm9ybWF0KG1zbV9mcmFtZWJ1ZmZlcl9mb3Jt YXQoZmIpKTsKPiAgCW5wbGFuZXMgPSBmbXQtPm51bV9wbGFuZXM7Cj4gIAo+IC0JRFBVX0RFQlVH KAo+IC0JCSJwbGFuZSVkLiVkIHNzcHA6JWR4JWQvJTQuNHMvJWxseC8lZHglZCslZCslZC8leCBj cnRjOiVkeCVkKyVkKyVkXG4iLAo+IC0JCQlwbGFuZS0+YmFzZS5pZCwgcnN0YXRlLT5zZXF1ZW5j ZV9pZCwKPiAtCQkJcnN0YXRlLT5vdXRfZmJfd2lkdGgsIHJzdGF0ZS0+b3V0X2ZiX2hlaWdodCwK PiAtCQkJKGNoYXIgKikgJnJzdGF0ZS0+b3V0X2ZiX3BpeGVsX2Zvcm1hdCwKPiAtCQkJcnN0YXRl LT5vdXRfZmJfbW9kaWZpZXJbMF0sCj4gLQkJCXJzdGF0ZS0+b3V0X3NyY193ID4+IDE2LCByc3Rh dGUtPm91dF9zcmNfaCA+PiAxNiwKPiAtCQkJcnN0YXRlLT5vdXRfc3JjX3ggPj4gMTYsIHJzdGF0 ZS0+b3V0X3NyY195ID4+IDE2LAo+IC0JCQlyc3RhdGUtPm91dF9yb3RhdGlvbiwKPiAtCQkJc3Rh dGUtPmNydGNfdywgc3RhdGUtPmNydGNfaCwKPiAtCQkJc3RhdGUtPmNydGNfeCwgc3RhdGUtPmNy dGNfeSk7Cj4gLQo+ICAJLyogZm9yY2UgcmVwcm9ncmFtbWluZyBvZiBhbGwgdGhlIHBhcmFtZXRl cnMsIGlmIHRoZSBmbGFnIGlzIHNldCAqLwo+ICAJaWYgKHBkcHUtPnJldmFsaWRhdGUpIHsKPiAg CQlEUFVfREVCVUcoInBsYW5lOiVkIC0gcmVjb25maWd1cmUgYWxsIHRoZSBwYXJhbWV0ZXJzXG4i LAo+IEBAIC0zMjQ3LDkgKzE5NTIsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21p Y191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAkJCS8qIHBvdGVudGlhbGx5IG5l ZWQgdG8gcmVmcmVzaCBldmVyeXRoaW5nICovCj4gIAkJCXBzdGF0ZS0+ZGlydHkgPSBEUFVfUExB TkVfRElSVFlfQUxMOwo+ICAJCQlicmVhazsKPiAtCQljYXNlIFBMQU5FX1BST1BfUk9UQVRJT046 Cj4gLQkJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX0ZPUk1BVDsKPiAtCQkJYnJl YWs7Cj4gIAkJY2FzZSBQTEFORV9QUk9QX0lORk86Cj4gIAkJY2FzZSBQTEFORV9QUk9QX0FMUEhB Ogo+ICAJCWNhc2UgUExBTkVfUFJPUF9CTEVORF9PUDoKPiBAQCAtMzI1OSwxMiArMTk2MSw2IEBA IHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKPiAgCQljYXNlIFBMQU5FX1BST1BfUFJFRklMTF9USU1FOgo+ICAJCQlwc3RhdGUt PmRpcnR5IHw9IERQVV9QTEFORV9ESVJUWV9QRVJGOwo+ICAJCQlicmVhazsKPiAtCQljYXNlIFBM QU5FX1BST1BfUk9UX0RTVF9YOgo+IC0JCWNhc2UgUExBTkVfUFJPUF9ST1RfRFNUX1k6Cj4gLQkJ Y2FzZSBQTEFORV9QUk9QX1JPVF9EU1RfVzoKPiAtCQljYXNlIFBMQU5FX1BST1BfUk9UX0RTVF9I Ogo+IC0JCQkvKiBoYW5kbGVkIGJ5IHJvdGF0b3IgYXRvbWljIHVwZGF0ZSAqLwo+IC0JCQlicmVh azsKPiAgCQlkZWZhdWx0Ogo+ICAJCQkvKiB1bmtub3duIHByb3BlcnR5LCByZWZyZXNoIGV2ZXJ5 dGhpbmcgKi8KPiAgCQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfQUxMOwo+IEBA IC0zMjk5LDggKzE5OTUsOCBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY191cGRh dGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAo+ICAJLyogdXBkYXRlIHJvaSBjb25maWcg Ki8KPiAgCWlmIChwc3RhdGUtPmRpcnR5ICYgRFBVX1BMQU5FX0RJUlRZX1JFQ1RTKSB7Cj4gLQkJ UE9QVUxBVEVfUkVDVCgmc3JjLCByc3RhdGUtPm91dF9zcmNfeCwgcnN0YXRlLT5vdXRfc3JjX3ks Cj4gLQkJCXJzdGF0ZS0+b3V0X3NyY193LCByc3RhdGUtPm91dF9zcmNfaCwgcTE2X2RhdGEpOwo+ ICsJCVBPUFVMQVRFX1JFQ1QoJnNyYywgc3RhdGUtPnNyY194LCBzdGF0ZS0+c3JjX3ksCj4gKwkJ CXN0YXRlLT5zcmNfdywgc3RhdGUtPnNyY19oLCBxMTZfZGF0YSk7Cj4gIAkJUE9QVUxBVEVfUkVD VCgmZHN0LCBzdGF0ZS0+Y3J0Y194LCBzdGF0ZS0+Y3J0Y195LAo+ICAJCQlzdGF0ZS0+Y3J0Y193 LCBzdGF0ZS0+Y3J0Y19oLCAhcTE2X2RhdGEpOwo+ICAKPiBAQCAtMzM3MCwxMSArMjA2Niw2IEBA IHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKPiAgCWlmICgocHN0YXRlLT5kaXJ0eSAmIERQVV9QTEFORV9ESVJUWV9GT1JNQVQp ICYmCj4gIAkJCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9mb3JtYXQpIHsKPiAgCQlzcmNfZmxh Z3MgPSAweDA7Cj4gLQkJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJyb3RhdGlvbiAweCVYXG4iLCBy c3RhdGUtPm91dF9yb3RhdGlvbik7Cj4gLQkJaWYgKHJzdGF0ZS0+b3V0X3JvdGF0aW9uICYgRFJN X01PREVfUkVGTEVDVF9YKQo+IC0JCQlzcmNfZmxhZ3MgfD0gRFBVX1NTUFBfRkxJUF9MUjsKPiAt CQlpZiAocnN0YXRlLT5vdXRfcm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1kpCj4gLQkJCXNy Y19mbGFncyB8PSBEUFVfU1NQUF9GTElQX1VEOwo+ICAKPiAgCQkvKiB1cGRhdGUgZm9ybWF0ICov Cj4gIAkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX2Zvcm1hdChwZHB1LT5waXBlX2h3LCBmbXQs IHNyY19mbGFncywKPiBAQCAtMzM5NywzOCArMjA4OCw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5l X3NzcHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCQkJcGRwdS0+ cGlwZV9ody0+b3BzLnNldHVwX2NkcChwZHB1LT5waXBlX2h3LCBjZHBfY2ZnKTsKPiAgCQl9Cj4g IAo+IC0JCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfc3lzX2NhY2hlKSB7Cj4gLQkJCWlm IChyc3RhdGUtPm91dF9zYnVmICYmIHJzdGF0ZS0+cm90X2h3KSB7Cj4gLQkJCQlpZiAocnN0YXRl LT5ucGxhbmUgPCAyKQo+IC0JCQkJCXBzdGF0ZS0+c2NfY2ZnLm9wX21vZGUgPQo+IC0JCQkJCURQ VV9QSVBFX1NDX09QX01PREVfSU5MSU5FX1NJTkdMRTsKPiAtCQkJCWVsc2UgaWYgKHJzdGF0ZS0+ b3V0X3hwb3MgPT0gMCkKPiAtCQkJCQlwc3RhdGUtPnNjX2NmZy5vcF9tb2RlID0KPiAtCQkJCQkJ RFBVX1BJUEVfU0NfT1BfTU9ERV9JTkxJTkVfTEVGVDsKPiAtCQkJCWVsc2UKPiAtCQkJCQlwc3Rh dGUtPnNjX2NmZy5vcF9tb2RlID0KPiAtCQkJCQlEUFVfUElQRV9TQ19PUF9NT0RFX0lOTElORV9S SUdIVDsKPiAtCj4gLQkJCQlwc3RhdGUtPnNjX2NmZy5yZF9lbiA9IHRydWU7Cj4gLQkJCQlwc3Rh dGUtPnNjX2NmZy5yZF9zY2lkID0KPiAtCQkJCQkJcnN0YXRlLT5yb3RfaHctPmNhcHMtPnNjaWQ7 Cj4gLQkJCQlwc3RhdGUtPnNjX2NmZy5yZF9ub2FsbG9jYXRlID0gdHJ1ZTsKPiAtCQkJCXBzdGF0 ZS0+c2NfY2ZnLnJkX29wX3R5cGUgPQo+IC0JCQkJCURQVV9QSVBFX1NDX1JEX09QX1RZUEVfQ0FD SEVBQkxFOwo+IC0JCQl9IGVsc2Ugewo+IC0JCQkJcHN0YXRlLT5zY19jZmcub3BfbW9kZSA9Cj4g LQkJCQkJCURQVV9QSVBFX1NDX09QX01PREVfT0ZGTElORTsKPiAtCQkJCXBzdGF0ZS0+c2NfY2Zn LnJkX2VuID0gZmFsc2U7Cj4gLQkJCQlwc3RhdGUtPnNjX2NmZy5yZF9zY2lkID0gMDsKPiAtCQkJ CXBzdGF0ZS0+c2NfY2ZnLnJkX25vYWxsb2NhdGUgPSB0cnVlOwo+IC0JCQkJcHN0YXRlLT5zY19j ZmcucmRfb3BfdHlwZSA9Cj4gLQkJCQkJRFBVX1BJUEVfU0NfUkRfT1BfVFlQRV9DQUNIRUFCTEU7 Cj4gLQkJCX0KPiAtCj4gLQkJCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9zeXNfY2FjaGUoCj4g LQkJCQkJcGRwdS0+cGlwZV9odywgJnBzdGF0ZS0+c2NfY2ZnKTsKPiAtCQl9Cj4gLQo+ICAJCS8q IHVwZGF0ZSBjc2MgKi8KPiAgCQlpZiAoRFBVX0ZPUk1BVF9JU19ZVVYoZm10KSkKPiAgCQkJX2Rw dV9wbGFuZV9zZXR1cF9jc2MocGRwdSk7Cj4gQEAgLTM1MjEsOCArMjE4MCw2IEBAIHN0YXRpYyB2 b2lkIGRwdV9wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAK PiAgCURQVV9ERUJVR19QTEFORShwZHB1LCAiXG4iKTsKPiAgCj4gLQlkcHVfcGxhbmVfcm90X2F0 b21pY191cGRhdGUocGxhbmUsIG9sZF9zdGF0ZSk7Cj4gLQo+ICAJaWYgKCFkcHVfcGxhbmVfc3Nw cF9lbmFibGVkKHN0YXRlKSkgewo+ICAJCV9kcHVfcGxhbmVfYXRvbWljX2Rpc2FibGUocGxhbmUs IG9sZF9zdGF0ZSk7Cj4gIAl9IGVsc2Ugewo+IEBAIC0zNjgxLDggKzIzMzgsNiBAQCBzdGF0aWMg dm9pZCBfZHB1X3BsYW5lX2luc3RhbGxfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKPiAgCQltc21fcHJvcGVydHlfaW5zdGFsbF92b2xhdGlsZV9yYW5nZSgmcGRwdS0+cHJvcGVy dHlfaW5mbywKPiAgCQkJImV4Y2xfcmVjdF92MSIsIDB4MCwgMCwgfjAsIDAsIFBMQU5FX1BST1Bf RVhDTF9SRUNUX1YxKTsKPiAgCj4gLQlkcHVfcGxhbmVfcm90X2luc3RhbGxfcHJvcGVydGllcyhw bGFuZSwgY2F0YWxvZyk7Cj4gLQo+ICAJbXNtX3Byb3BlcnR5X2luc3RhbGxfZW51bSgmcGRwdS0+ cHJvcGVydHlfaW5mbywgImJsZW5kX29wIiwgMHgwLCAwLAo+ICAJCWVfYmxlbmRfb3AsIEFSUkFZ X1NJWkUoZV9ibGVuZF9vcCksIFBMQU5FX1BST1BfQkxFTkRfT1ApOwo+ICAKPiBAQCAtNDAwNywx NSArMjY2Miw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX2F0b21pY19zZXRfcHJvcGVydHkoc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+IC1zdGF0aWMg aW50IGRwdV9wbGFuZV9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gLQkJ c3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVpbnQ2NF90IHZhbCkKPiAtewo+IC0JRFBV X0RFQlVHKCJcbiIpOwo+IC0KPiAtCXJldHVybiBkcHVfcGxhbmVfYXRvbWljX3NldF9wcm9wZXJ0 eShwbGFuZSwKPiAtCQkJcGxhbmUtPnN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKPiAtfQo+IC0KPiAg c3RhdGljIGludCBkcHVfcGxhbmVfYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKPiAgCQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwKPiAgCQlz dHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgKnZhbCkKPiBAQCAtNDAzMSw5 ICsyNjc3LDYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCX0gZWxzZSB7Cj4gIAkJRFBVX0RFQlVHX1BMQU5FKHBk cHUsICJcbiIpOwo+ICAJCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7Cj4gLSNp ZmRlZiBDT05GSUdfUUNPTV9EUFVfUk9UCj4gLQkJZHB1X3BsYW5lX3JvdF9pbnN0YWxsX2NhcHMo cGxhbmUpOwo+IC0jZW5kaWYKPiAgCQlyZXQgPSBtc21fcHJvcGVydHlfYXRvbWljX2dldCgmcGRw dS0+cHJvcGVydHlfaW5mbywKPiAgCQkJCSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlLCBwcm9wZXJ0 eSwgdmFsKTsKPiAgCX0KPiBAQCAtNDA4NCw4ICsyNzI3LDYgQEAgc3RhdGljIHZvaWQgZHB1X3Bs YW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAo+ICAJRFBVX0RF QlVHX1BMQU5FKHBkcHUsICJcbiIpOwo+ICAKPiAtCWRwdV9wbGFuZV9yb3RfZGVzdHJveV9zdGF0 ZShwbGFuZSwgJnBzdGF0ZS0+YmFzZSk7Cj4gLQo+ICAJLyogcmVtb3ZlIHJlZiBjb3VudCBmb3Ig ZnJhbWUgYnVmZmVycyAqLwo+ICAJaWYgKHN0YXRlLT5mYikKPiAgCQlkcm1fZnJhbWVidWZmZXJf cHV0KHN0YXRlLT5mYik7Cj4gQEAgLTQxMzAsOCArMjc3MSw2IEBAIHN0YXRpYyB2b2lkIGRwdV9w bGFuZV9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAKPiAgCV9fZHJt X2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHBsYW5lLCAmcHN0YXRlLT5iYXNl KTsKPiAgCj4gLQlkcHVfcGxhbmVfcm90X2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSwgJnBzdGF0ZS0+ YmFzZSk7Cj4gLQo+ICAJcmV0dXJuICZwc3RhdGUtPmJhc2U7Cj4gIH0KPiAgCj4gQEAgLTQzNTks MTMgKzI5OTgsNiBAQCBzdGF0aWMgaW50IF9kcHVfcGxhbmVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lKQo+ICAJCQkwNjAwLAo+ICAJCQlwZHB1LT5kZWJ1Z2ZzX3Jvb3QsCj4g IAkJCWttcywgJmRwdV9wbGFuZV9kYW5nZXJfZW5hYmxlKTsKPiAtCWRlYnVnZnNfY3JlYXRlX3Uz Migic2J1Zl9tb2RlIiwKPiAtCQkJMDYwMCwKPiAtCQkJcGRwdS0+ZGVidWdmc19yb290LCAmcGRw dS0+c2J1Zl9tb2RlKTsKPiAtCWRlYnVnZnNfY3JlYXRlX3UzMigic2J1Zl93cml0ZWJhY2siLAo+ IC0JCQkwNjAwLAo+IC0JCQlwZHB1LT5kZWJ1Z2ZzX3Jvb3QsCj4gLQkJCSZwZHB1LT5zYnVmX3dy aXRlYmFjayk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfcGxhbmUuaAo+IGluZGV4IGFkOWQ1Y2YuLjI1YjZiMTUgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmgKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuaAo+IEBAIC0yNCw3MSArMjQsOCBA QAo+ICAjaW5jbHVkZSAibXNtX3Byb3AuaCIKPiAgI2luY2x1ZGUgImRwdV9rbXMuaCIKPiAgI2lu Y2x1ZGUgImRwdV9od19tZHNzLmgiCj4gLSNpbmNsdWRlICJkcHVfaHdfcm90LmgiCj4gICNpbmNs dWRlICJkcHVfaHdfc3NwcC5oIgo+ICAKPiAtLyoqCj4gLSAqIHN0cnVjdCBkcHVfcGxhbmVfcm90 X3N0YXRlIC0gc3RhdGUgb2YgcHJlLXNzcHAgcm90YXRvciBzdGFnZQo+IC0gKiBAc2VxdWVuY2Vf aWQ6IHNlcXVlbmNlIGlkZW50aWZpZXIsIGluY3JlbWVudGVkIHBlciBzdGF0ZSBkdXBsaWNhdGlv bgo+IC0gKiBAcm90X2h3OiBQb2ludGVyIHRvIHJvdGF0b3IgaGFyZHdhcmUgZHJpdmVyCj4gLSAq IEByb3Q5MDogdHJ1ZSBpZiByb3RhdGlvbiBvZiA5MCBkZWdyZWUgaXMgcmVxdWlyZWQKPiAtICog QGhmbGlwOiB0cnVlIGlmIGhvcml6b250YWwgZmxpcCBpcyByZXF1aXJlZAo+IC0gKiBAdmZsaXA6 IHRydWUgaWYgdmVydGljYWwgZmxpcCBpcyByZXF1aXJlZAo+IC0gKiBAcm90X2NtZDogcm90YXRv ciBjb25maWd1cmF0aW9uIGNvbW1hbmQKPiAtICogQG5wbGFuZTogdG90YWwgbnVtYmVyIG9mIGRy bSBwbGFuZSBhdHRhY2hlZCB0byByb3RhdG9yCj4gLSAqIEBpbl9mYjogaW5wdXQgZmIgYXR0YWNo ZWQgdG8gcm90YXRvcgo+IC0gKiBAaW5fcm90YXRpb246IGlucHV0IHJvdGF0aW9uIHByb3BlcnR5 IG9mIHJvdGF0b3Igc3RhZ2UKPiAtICogQGluX3JvdF9yZWN0OiBpbnB1dCByZWN0YW5nbGUgb2Yg dGhlIHJvdGF0b3IgaW4gcGxhbmUgZmIgY29vcmRpbmF0ZQo+IC0gKiBAb3V0X3JvdGF0aW9uOiBv dXRwdXQgcm90YXRpb24gcHJvcGVydHkgb2Ygcm90YXRvciBzdGFnZQo+IC0gKiBAb3V0X3JvdF9y ZWN0OiBvdXRwdXQgcmVjdGFuZ2xlIG9mIHRoZSByb3RhdG9yIGluIHBsYW5lIGZiIGNvb3JkaW5h dGUKPiAtICogQG91dF9zcmNfcmVjdDogb3V0cHV0IHJlY3RhbmdsZSBvZiB0aGUgcGxhbmUgc291 cmNlIGluIHBsYW5lIGZiIGNvb3JkaW5hdGUKPiAtICogQG91dF9zcmNfeDogb3V0cHV0IHNyY194 IG9mIHJvdGF0b3Igc3RhZ2UgaW4gcm90YXRvciBvdXRwdXQgZmIgY29vcmRpbmF0ZQo+IC0gKiBA b3V0X3NyY195OiBvdXRwdXQgc3JjIHkgb2Ygcm90YXRvciBzdGFnZSBpbiByb3RhdG9yIG91dHB1 dCBmYiBjb29yZGluYXRlCj4gLSAqIEBvdXRfc3JjX3c6IG91dHB1dCBzcmMgdyBvZiByb3RhdG9y IHN0YWdlIGluIHJvdGF0b3Igb3V0cHV0IGZiIG9vb3JkaW5hdGUKPiAtICogQG91dF9zcmNfaDog b3V0cHV0IHNyYyBoIG9mIHJvdGF0b3Igc3RhZ2UgaW4gcm90YXRvciBvdXRwdXQgZmIgY29vcmRp bmF0ZQo+IC0gKiBAb3V0X2ZiX3dpZHRoOiBvdXRwdXQgZnJhbWVidWZmZXIgd2lkdGggb2Ygcm90 YXRvciBzdGFnZQo+IC0gKiBAb3V0X2ZiX2hlaWdodDogb3V0cHV0IGZyYW1lYnVmZmVyIGhlaWdo dCBvZiByb3RhdG9yIHN0YWdlCj4gLSAqIEBvdXRfZmJfcGl4ZWxfZm9ybWF0OiBvdXRwdXQgZnJh bWVidWZmZXIgcGl4ZWwgZm9ybWF0IG9mIHJvdGF0b3Igc3RhZ2UKPiAtICogQG91dF9mYl9tb2Rp Zmllcjogb3V0cHV0IGZyYW1lYnVmZmVyIG1vZGlmaWVyIG9mIHJvdGF0b3Igc3RhZ2UKPiAtICog QG91dF9mYl9mbGFnczogb3V0cHV0IGZyYW1lYnVmZmVyIGZsYWdzIG9mIHJvdGF0b3Igc3RhZ2UK PiAtICogQG91dF9zYnVmOiB0cnVlIGlmIG91dHB1dCBzdHJlYW1pbmcgYnVmZmVyIGlzIHJlcXVp cmVkCj4gLSAqIEBvdXRfZmJfZm9ybWF0OiBQb2ludGVyIHRvIG91dHB1dCBmcmFtZWJ1ZmZlciBm b3JtYXQgb2Ygcm90YXRvciBzdGFnZQo+IC0gKiBAb3V0X2ZiOiBQb2ludGVyIHRvIG91dHB1dCBk cm0gZnJhbWVidWZmZXIgb2Ygcm90YXRvciBzdGFnZQo+IC0gKiBAb3V0X2ZibzogZnJhbWVidWZm ZXIgb2JqZWN0IG9mIG91dHB1dCBzdHJlYW1pbmcgYnVmZmVyCj4gLSAqIEBvdXRfeHBvczogcmVs YXRpdmUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcGxhbmUgKDAgLSBsZWZ0bW9zdCkKPiAt ICovCj4gLXN0cnVjdCBkcHVfcGxhbmVfcm90X3N0YXRlIHsKPiAtCXUzMiBzZXF1ZW5jZV9pZDsK PiAtCXN0cnVjdCBkcHVfaHdfcm90ICpyb3RfaHc7Cj4gLQlib29sIHJvdDkwOwo+IC0JYm9vbCBo ZmxpcDsKPiAtCWJvb2wgdmZsaXA7Cj4gLQlzdHJ1Y3QgZHB1X2h3X3JvdF9jbWQgcm90X2NtZDsK PiAtCWludCBucGxhbmU7Cj4gLQkvKiBpbnB1dCAqLwo+IC0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqaW5fZmI7Cj4gLQlzdHJ1Y3QgZHJtX3JlY3QgaW5fcm90X3JlY3Q7Cj4gLQl1MzIgaW5fcm90 YXRpb247Cj4gLQkvKiBvdXRwdXQgKi8KPiAtCXN0cnVjdCBkcm1fcmVjdCBvdXRfcm90X3JlY3Q7 Cj4gLQlzdHJ1Y3QgZHJtX3JlY3Qgb3V0X3NyY19yZWN0Owo+IC0JdTMyIG91dF9yb3RhdGlvbjsK PiAtCXUzMiBvdXRfc3JjX3g7Cj4gLQl1MzIgb3V0X3NyY195Owo+IC0JdTMyIG91dF9zcmNfdzsK PiAtCXUzMiBvdXRfc3JjX2g7Cj4gLQl1MzIgb3V0X2ZiX3dpZHRoOwo+IC0JdTMyIG91dF9mYl9o ZWlnaHQ7Cj4gLQl1MzIgb3V0X2ZiX3BpeGVsX2Zvcm1hdDsKPiAtCXU2NCBvdXRfZmJfbW9kaWZp ZXJbNF07Cj4gLQl1MzIgb3V0X2ZiX2ZsYWdzOwo+IC0JYm9vbCBvdXRfc2J1ZjsKPiAtCWNvbnN0 IHN0cnVjdCBkcHVfZm9ybWF0ICpvdXRfZmJfZm9ybWF0Owo+IC0Jc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqb3V0X2ZiOwo+IC0Jc3RydWN0IGRwdV9rbXNfZmJvICpvdXRfZmJvOwo+IC0JaW50IG91 dF94cG9zOwo+IC19Owo+IC0KPiAgLyogZGlydHkgYml0cyBmb3IgdXBkYXRlIGZ1bmN0aW9uICov Cj4gICNkZWZpbmUgRFBVX1BMQU5FX0RJUlRZX1JFQ1RTCTB4MQo+ICAjZGVmaW5lIERQVV9QTEFO RV9ESVJUWV9GT1JNQVQJMHgyCj4gQEAgLTE1MSwxMCArODgsNiBAQCBzdHJ1Y3QgZHB1X3BsYW5l X3N0YXRlIHsKPiAgCXN0cnVjdCBkcHVfaHdfcGl4ZWxfZXh0IHBpeGVsX2V4dDsKPiAgCWVudW0g ZHB1X3BsYW5lX3NjbGNoZWNrX3N0YXRlIHNjYWxlcl9jaGVja19zdGF0ZTsKPiAgCj4gLQkvKiBA c2NfY2ZnOiBzeXN0ZW1fY2FjaGUgY29uZmlndXJhdGlvbiAqLwo+IC0Jc3RydWN0IGRwdV9od19w aXBlX3NjX2NmZyBzY19jZmc7Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSByb3Q7Cj4g LQo+ICAJc3RydWN0IGRwdV9od19waXBlX2NkcF9jZmcgY2RwX2NmZzsKPiAgfTsKPiAgCj4gQEAg LTIwMCwxNyArMTMzLDkgQEAgc3RydWN0IGRwdV9tdWx0aXJlY3RfcGxhbmVfc3RhdGVzIHsKPiAg ICogQHBsYW5lOiAgIFBvaW50ZXIgdG8gRFJNIHBsYW5lIG9iamVjdAo+ICAgKiBAY3RsOiBQb2lu dGVyIHRvIGNvbnRyb2wgaGFyZHdhcmUKPiAgICogQGZsdXNoX3NzcHA6IFBvaW50ZXIgdG8gc3Nw cCBmbHVzaCBjb250cm9sIHdvcmQKPiAtICogQGZsdXNoX3JvdDogUG9pbnRlciB0byByb3RhdG9y IGZsdXNoIGNvbnRyb2wgd29yZAo+ICAgKi8KPiAgdm9pZCBkcHVfcGxhbmVfZ2V0X2N0bF9mbHVz aChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgc3RydWN0IGRwdV9od19jdGwgKmN0bCwKPiAtCQl1 MzIgKmZsdXNoX3NzcHAsIHUzMiAqZmx1c2hfcm90KTsKPiAtCj4gLS8qKgo+IC0gKiBkcHVfcGxh bmVfcm90X2NhbGNfcHJlZmlsbCAtIGNhbGN1bGF0ZSByb3RhdG9yIHN0YXJ0IHByZWZpbGwKPiAt ICogQHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQo+IC0gKiByZXR1cm46IHByZWZpbGwgdGlt ZSBpbiBsaW5lCj4gLSAqLwo+IC11MzIgZHB1X3BsYW5lX3JvdF9jYWxjX3ByZWZpbGwoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUpOwo+ICsJCXUzMiAqZmx1c2hfc3NwcCk7Cj4gIAo+ICAvKioKPiAg ICogZHB1X3BsYW5lX3Jlc3RvcmUgLSByZXN0b3JlIGh3IHN0YXRlIGlmIHByZXZpb3VzbHkgcG93 ZXIgY29sbGFwc2VkCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9ybS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKPiBpbmRl eCAzYTI2MTJhLi4xZDgxYjFiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9ybS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X3JtLmMKPiBAQCAtMjUsOSArMjUsNiBAQAo+ICAjaW5jbHVkZSAiZHB1X2VuY29kZXIuaCIKPiAg I2luY2x1ZGUgImRwdV9jb25uZWN0b3IuaCIKPiAgI2luY2x1ZGUgImRwdV9od19kc2MuaCIKPiAt I2lmZGVmIENPTkZJR19EUk1fTVNNX1JPVEFUT1IKPiAtI2luY2x1ZGUgImRwdV9od19yb3QuaCIK PiAtI2VuZGlmCj4gIAo+ICAjZGVmaW5lIFJFU0VSVkVEX0JZX09USEVSKGgsIHIpIFwKPiAgCSgo aCktPnJzdnAgJiYgKChoKS0+cnN2cC0+ZW5jX2lkICE9IChyKS0+ZW5jX2lkKSkKPiBAQCAtMjU5 LDExICsyNTYsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X3JtX2h3X2Rlc3Ryb3koZW51bSBkcHVfaHdf YmxrX3R5cGUgdHlwZSwgdm9pZCAqaHcpCj4gIAljYXNlIERQVV9IV19CTEtfRFNDOgo+ICAJCWRw dV9od19kc2NfZGVzdHJveShodyk7Cj4gIAkJYnJlYWs7Cj4gLSNpZmRlZiBDT05GSUdfRFJNX01T TV9ST1RBVE9SCj4gLQljYXNlIERQVV9IV19CTEtfUk9UOgo+IC0JCWRwdV9od19yb3RfZGVzdHJv eShodyk7Cj4gLQkJYnJlYWs7Cj4gLSNlbmRpZgo+ICAJY2FzZSBEUFVfSFdfQkxLX1NTUFA6Cj4g IAkJLyogU1NQUHMgYXJlIG5vdCBtYW5hZ2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyICovCj4g IAljYXNlIERQVV9IV19CTEtfVE9QOgo+IEBAIC0zNTIsMTEgKzM0NCw2IEBAIHN0YXRpYyBpbnQg X2RwdV9ybV9od19ibGtfY3JlYXRlKAo+ICAJY2FzZSBEUFVfSFdfQkxLX0RTQzoKPiAgCQlodyA9 IGRwdV9od19kc2NfaW5pdChpZCwgbW1pbywgY2F0KTsKPiAgCQlicmVhazsKPiAtI2lmZGVmIENP TkZJR19EUk1fTVNNX1JPVEFUT1IKPiAtCWNhc2UgRFBVX0hXX0JMS19ST1Q6Cj4gLQkJaHcgPSBk cHVfaHdfcm90X2luaXQoaWQsIG1taW8sIGNhdCk7Cj4gLQkJYnJlYWs7Cj4gLSNlbmRpZgo+ICAJ Y2FzZSBEUFVfSFdfQkxLX1NTUFA6Cj4gIAkJLyogU1NQUHMgYXJlIG5vdCBtYW5hZ2VkIGJ5IHRo ZSByZXNvdXJjZSBtYW5hZ2VyICovCj4gIAljYXNlIERQVV9IV19CTEtfVE9QOgo+IEBAIC01MTAs MTUgKzQ5Nyw2IEBAIGludCBkcHVfcm1faW5pdChzdHJ1Y3QgZHB1X3JtICpybSwKPiAgCQl9Cj4g IAl9Cj4gIAo+IC0JZm9yIChpID0gMDsgaSA8IGNhdC0+cm90X2NvdW50OyBpKyspIHsKPiAtCQly YyA9IF9kcHVfcm1faHdfYmxrX2NyZWF0ZShybSwgY2F0LCBtbWlvLCBEUFVfSFdfQkxLX1JPVCwK PiAtCQkJCWNhdC0+cm90W2ldLmlkLCAmY2F0LT5yb3RbaV0pOwo+IC0JCWlmIChyYykgewo+IC0J CQlEUFVfRVJST1IoImZhaWxlZDogcm90IGh3IG5vdCBhdmFpbGFibGVcbiIpOwo+IC0JCQlnb3Rv IGZhaWw7Cj4gLQkJfQo+IC0JfQo+IC0KPiAgCWZvciAoaSA9IDA7IGkgPCBjYXQtPmN0bF9jb3Vu dDsgaSsrKSB7Cj4gIAkJcmMgPSBfZHB1X3JtX2h3X2Jsa19jcmVhdGUocm0sIGNhdCwgbW1pbywg RFBVX0hXX0JMS19DVEwsCj4gIAkJCQljYXQtPmN0bFtpXS5pZCwgJmNhdC0+Y3RsW2ldKTsKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmggYi9kcml2ZXJzL2dwdS9k cm0vbXNtL21zbV9kcnYuaAo+IGluZGV4IDY4NWM3MjguLjU5MWVkMmUgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L21zbV9kcnYuaAo+IEBAIC0xMDQsMTUgKzEwNCwxMCBAQCBlbnVtIG1zbV9tZHBfcGxhbmVfcHJv cGVydHkgewo+ICAJUExBTkVfUFJPUF9WQUxVRV9BREpVU1QsCj4gIAlQTEFORV9QUk9QX0NPTlRS QVNUX0FESlVTVCwKPiAgCVBMQU5FX1BST1BfRVhDTF9SRUNUX1YxLAo+IC0JUExBTkVfUFJPUF9S T1RfRFNUX1gsCj4gLQlQTEFORV9QUk9QX1JPVF9EU1RfWSwKPiAtCVBMQU5FX1BST1BfUk9UX0RT VF9XLAo+IC0JUExBTkVfUFJPUF9ST1RfRFNUX0gsCj4gIAlQTEFORV9QUk9QX1BSRUZJTExfU0la RSwKPiAgCVBMQU5FX1BST1BfUFJFRklMTF9USU1FLAo+ICAKPiAgCS8qIGVudW0vYml0bWFzayBw cm9wZXJ0aWVzICovCj4gLQlQTEFORV9QUk9QX1JPVEFUSU9OLAo+ICAJUExBTkVfUFJPUF9CTEVO RF9PUCwKPiAgCVBMQU5FX1BST1BfU1JDX0NPTkZJRywKPiAgCj4gQEAgLTEzOCw4ICsxMzMsNiBA QCBlbnVtIG1zbV9tZHBfY3J0Y19wcm9wZXJ0eSB7Cj4gIAlDUlRDX1BST1BfTExDQ19JQiwKPiAg CUNSVENfUFJPUF9EUkFNX0FCLAo+ICAJQ1JUQ19QUk9QX0RSQU1fSUIsCj4gLQlDUlRDX1BST1Bf Uk9UX1BSRUZJTExfQlcsCj4gLQlDUlRDX1BST1BfUk9UX0NMSywKPiAgCUNSVENfUFJPUF9JRExF X1RJTUVPVVQsCj4gIAlDUlRDX1BST1BfREVTVF9TQ0FMRVIsCj4gIAo+IEBAIC01ODksNyArNTgy LDcgQEAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICptc21fZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJs ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICB2b2lkICptc21fZ2VtX2dldF92YWRkcihzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gIHZvaWQgKm1zbV9nZW1fZ2V0X3ZhZGRyX2FjdGl2 ZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gIHZvaWQgbXNtX2dlbV9wdXRfdmFkZHIo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+IC1pbnQgbXNtX2dlbV9tYWR2aXNlKHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1bnNpZ25lZCBtYWR2KTsKPiAraW50IG1zbV9nZW1fbWFk dmlzZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdW5zaWduZWQgaW50IG1hZHYpOwo+ICBp bnQgbXNtX2dlbV9zeW5jX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKPiAgCQlz dHJ1Y3QgbXNtX2ZlbmNlX2NvbnRleHQgKmZjdHgsIGJvb2wgZXhjbHVzaXZlKTsKPiAgdm9pZCBt c21fZ2VtX21vdmVfdG9fYWN0aXZlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAo+IEBAIC02 MjgsNyArNjIxLDcgQEAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbXNtX2ZyYW1lYnVmZmVyX2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKipi b3MpOwo+ICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICptc21fZnJhbWVidWZmZXJfY3JlYXRlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJc3RydWN0IGRybV9maWxlICpmaWxlLCBjb25zdCBz dHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9jbWQpOwo+IC1zdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICogbXNtX2FsbG9jX3N0b2xlbl9mYihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICtzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICptc21fYWxsb2Nfc3RvbGVuX2ZiKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4gIAkJaW50IHcsIGludCBoLCBpbnQgcCwgdWludDMyX3QgZm9ybWF0KTsKPiAgCj4g IHN0cnVjdCBkcm1fZmJfaGVscGVyICptc21fZmJkZXZfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKPiAtLSAKPiBUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBt ZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAo+IGEgTGludXggRm91bmRhdGlvbiBDb2xs YWJvcmF0aXZlIFByb2plY3QKPiAKCi0tIApTZWFuIFBhdWwsIFNvZnR3YXJlIEVuZ2luZWVyLCBH b29nbGUgLyBDaHJvbWl1bSBPUwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9m cmVlZHJlbm8K