From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH] drm/msm: remove hw rotation support Date: Fri, 2 Mar 2018 12:05:29 -0500 Message-ID: <20180302170529.GS223881@art_vandelay> References: <1519956947-9681-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: <1519956947-9681-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 T24gVGh1LCBNYXIgMDEsIDIwMTggYXQgMDY6MTU6NDdQTSAtMDgwMCwgSmV5a3VtYXIgU2Fua2Fy YW4gd3JvdGU6Cj4gUmVtb3ZlIEhXIGlubGluZSByb3RhdGlvbiBzdXBwb3J0IGZyb20gRFBVIGRy aXZlci4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBKZXlrdW1hciBTYW5rYXJhbiA8anNhbmthQGNvZGVh dXJvcmEub3JnPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0 Yy5jICAgICAgICAgICB8ICAxMjYgKy0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2NydGMuaCAgICAgICAgICAgfCAgIDMzIC0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2VuY29kZXIuYyAgICAgICAgfCAgIDE3ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmggICAgICAgIHwgICAxMCAtCj4gIGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMuaCAgIHwgICAgNCAtCj4gIC4uLi9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192aWQuYyAgIHwgICA3MiAtCj4g IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMgICAgIHwgIDE4 OCAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaCAg ICAgfCAgIDU5IC0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2N0bC5j ICAgICAgICAgfCAgIDUxIC0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X2N0bC5oICAgICAgICAgfCAgIDM2IC0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X2ludGYuYyAgICAgICAgfCAgIDIxIC0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2ludGYuaCAgICAgICAgfCAgICA0IC0KPiAgZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X21kc3MuaCAgICAgICAgfCAgIDEzIC0KPiAgZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3JvdC5jICAgICAgICAgfCAgOTYxIC0tLS0tLS0tLS0t LS0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3JvdC5oICAgICAgICAg fCAgMTkwIC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5j ICAgICAgICB8ICAgNDkgLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf c3NwcC5oICAgICAgICB8ICAgNjYgLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfcGxhbmUuYyAgICAgICAgICB8IDE0MTYgKy0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmggICAgICAgICAgfCAgIDc3ICstCj4g IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jICAgICAgICAgICAgIHwgICAy MiAtCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oICAgICAgICAgICAgICAgICAgICAg IHwgICAxMSArLQo+ICAyMSBmaWxlcyBjaGFuZ2VkLCAzNyBpbnNlcnRpb25zKCspLCAzMzg5IGRl bGV0aW9ucygtKQo+ICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X3JvdC5jCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfaHdfcm90LmgKClRoaXMgZG9lc24ndCBhcHBseSBjbGVhbmx5IHRv IGZvci1uZXh0LXN0YWdpbmcsIGNhbiB5b3UgcGxlYXNlIHJlYmFzZT8KClNlYW4KCj4gCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCj4gaW5kZXggYWIzNjU3OC4uMzE5 YjUxZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0 Yy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwo+IEBA IC04MjIsMTIgKzgyMiwxMSBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0dXBfbWl4 ZXIoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJc3RydWN0IGRwdV9od19zdGFnZV9jZmcgKnN0 YWdlX2NmZzsKPiAgCXN0cnVjdCBkcHVfcmVjdCBwbGFuZV9jcnRjX3JvaTsKPiAgCj4gLQl1MzIg Zmx1c2hfbWFzaywgZmx1c2hfc2J1ZjsKPiArCXUzMiBmbHVzaF9tYXNrOwo+ICAJdWludDMyX3Qg c3RhZ2VfaWR4LCBsbV9pZHg7Cj4gIAlpbnQgenBvc19jbnRbRFBVX1NUQUdFX01BWCArIDFdID0g eyAwIH07Cj4gIAlpbnQgaTsKPiAgCWJvb2wgYmdfYWxwaGFfZW5hYmxlID0gZmFsc2U7Cj4gLQl1 MzIgcHJlZmlsbCA9IDA7Cj4gIAo+ICAJaWYgKCFkcHVfY3J0YyB8fCAhbWl4ZXIpIHsKPiAgCQlE UFVfRVJST1IoImludmFsaWQgZHB1X2NydGMgb3IgbWl4ZXJcbiIpOwo+IEBAIC04MzksOSArODM4 LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5kX3NldHVwX21peGVyKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKPiAgCXN0YWdlX2NmZyA9ICZkcHVfY3J0Yy0+c3RhZ2VfY2ZnOwo+ICAJY3N0 YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwo+ICAKPiAtCWNzdGF0ZS0+c2J1 Zl9wcmVmaWxsX2xpbmUgPSAwOwo+IC0JZHB1X2NydGMtPnNidWZfZmx1c2hfbWFzayA9IDB4MDsK PiAtCj4gIAlkcm1fYXRvbWljX2NydGNfZm9yX2VhY2hfcGxhbmUocGxhbmUsIGNydGMpIHsKPiAg CQlzdGF0ZSA9IHBsYW5lLT5zdGF0ZTsKPiAgCQlpZiAoIXN0YXRlKQo+IEBAIC04NTUsMTQgKzg1 MSw3IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cF9taXhlcihzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCj4gIAkJcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHN0YXRlKTsKPiAg CQlmYiA9IHN0YXRlLT5mYjsKPiAgCj4gLQkJcHJlZmlsbCA9IGRwdV9wbGFuZV9yb3RfY2FsY19w cmVmaWxsKHBsYW5lKTsKPiAtCQlpZiAocHJlZmlsbCA+IGNzdGF0ZS0+c2J1Zl9wcmVmaWxsX2xp bmUpCj4gLQkJCWNzdGF0ZS0+c2J1Zl9wcmVmaWxsX2xpbmUgPSBwcmVmaWxsOwo+IC0KPiAtCQlk cHVfcGxhbmVfZ2V0X2N0bF9mbHVzaChwbGFuZSwgY3RsLCAmZmx1c2hfbWFzaywgJmZsdXNoX3Ni dWYpOwo+IC0KPiAtCQkvKiBzYXZlIHNidWYgZmx1c2ggdmFsdWUgZm9yIGxhdGVyICovCj4gLQkJ ZHB1X2NydGMtPnNidWZfZmx1c2hfbWFzayB8PSBmbHVzaF9zYnVmOwo+ICsJCWRwdV9wbGFuZV9n ZXRfY3RsX2ZsdXNoKHBsYW5lLCBjdGwsICZmbHVzaF9tYXNrKTsKPiAgCj4gIAkJRFBVX0RFQlVH KCJjcnRjICVkIHN0YWdlOiVkIC0gcGxhbmUgJWQgc3NwcCAlZCBmYiAlZFxuIiwKPiAgCQkJCWNy dGMtPmJhc2UuaWQsCj4gQEAgLTg4NSw4ICs4NzQsNyBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNf YmxlbmRfc2V0dXBfbWl4ZXIoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJCQkJc3RhdGUtPnNy Y194ID4+IDE2LCBzdGF0ZS0+c3JjX3kgPj4gMTYsCj4gIAkJCQlzdGF0ZS0+c3JjX3cgPj4gMTYs IHN0YXRlLT5zcmNfaCA+PiAxNiwKPiAgCQkJCXN0YXRlLT5jcnRjX3gsIHN0YXRlLT5jcnRjX3ks Cj4gLQkJCQlzdGF0ZS0+Y3J0Y193LCBzdGF0ZS0+Y3J0Y19oLAo+IC0JCQkJZmx1c2hfc2J1ZiAh PSAwKTsKPiArCQkJCXN0YXRlLT5jcnRjX3csIHN0YXRlLT5jcnRjX2gpOwo+ICAKPiAgCQlzdGFn ZV9pZHggPSB6cG9zX2NudFtwc3RhdGUtPnN0YWdlXSsrOwo+ICAJCXN0YWdlX2NmZy0+c3RhZ2Vb cHN0YXRlLT5zdGFnZV1bc3RhZ2VfaWR4XSA9Cj4gQEAgLTIzODcsNjQgKzIzNzUsNiBAQCBzdGF0 aWMgaW50IF9kcHVfY3J0Y193YWl0X2Zvcl9mcmFtZV9kb25lKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKPiAgCXJldHVybiByYzsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgX2RwdV9jcnRjX2NvbW1p dF9raWNrb2ZmX3JvdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gLQkJc3RydWN0IGRwdV9jcnRj X3N0YXRlICpjc3RhdGUpCj4gLXsKPiAtCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+IC0Jc3Ry dWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKPiAtCXN0cnVjdCBkcHVfaHdfY3RsICpjdGwsICptYXN0 ZXJfY3RsOwo+IC0JdTMyIGZsdXNoX21hc2s7Cj4gLQlpbnQgaTsKPiAtCj4gLQlpZiAoIWNydGMg fHwgIWNzdGF0ZSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JZHB1X2NydGMgPSB0b19kcHVfY3J0Yyhj cnRjKTsKPiAtCj4gLQkvKgo+IC0JICogVXBkYXRlIHNidWYgY29uZmlndXJhdGlvbiBhbmQgZmx1 c2ggYml0cyBpZiBhIGZsdXNoCj4gLQkgKiBtYXNrIGhhcyBiZWVuIGRlZmluZWQgZm9yIGVpdGhl ciB0aGUgY3VycmVudCBvcgo+IC0JICogcHJldmlvdXMgY29tbWl0Lgo+IC0JICoKPiAtCSAqIFVw ZGF0ZXMgYXJlIGFsc28gcmVxdWlyZWQgZm9yIHRoZSBmaXJzdCBjb21taXQgYWZ0ZXIKPiAtCSAq IHNidWZfZmx1c2hfbWFzayBiZWNvbWVzIDB4MCwgdG8gcHJvcGVybHkgdHJhbnNpdGlvbgo+IC0J ICogdGhlIGhhcmR3YXJlIG91dCBvZiBzYnVmIG1vZGUuCj4gLQkgKi8KPiAtCWlmICghZHB1X2Ny dGMtPnNidWZfZmx1c2hfbWFza19vbGQgJiYgIWRwdV9jcnRjLT5zYnVmX2ZsdXNoX21hc2spCj4g LQkJcmV0dXJuOwo+IC0KPiAtCWZsdXNoX21hc2sgPSBkcHVfY3J0Yy0+c2J1Zl9mbHVzaF9tYXNr X29sZCB8IGRwdV9jcnRjLT5zYnVmX2ZsdXNoX21hc2s7Cj4gLQlkcHVfY3J0Yy0+c2J1Zl9mbHVz aF9tYXNrX29sZCA9IGRwdV9jcnRjLT5zYnVmX2ZsdXNoX21hc2s7Cj4gLQo+IC0JRFBVX0FUUkFD RV9CRUdJTigiY3J0Y19raWNrb2ZmX3JvdCIpOwo+IC0KPiAtCWlmIChjc3RhdGUtPnNidWZfY2Zn LnJvdF9vcF9tb2RlICE9IERQVV9DVExfUk9UX09QX01PREVfT0ZGTElORSkgewo+IC0JCWRybV9h dG9taWNfY3J0Y19mb3JfZWFjaF9wbGFuZShwbGFuZSwgY3J0Yykgewo+IC0JCQlkcHVfcGxhbmVf a2lja29mZihwbGFuZSk7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCW1hc3Rlcl9jdGwgPSBOVUxMOwo+ IC0JZm9yIChpID0gMDsgaSA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBpKyspIHsKPiAtCQljdGwg PSBkcHVfY3J0Yy0+bWl4ZXJzW2ldLmh3X2N0bDsKPiAtCQlpZiAoIWN0bCB8fCAhY3RsLT5vcHMu c2V0dXBfc2J1Zl9jZmcgfHwKPiAtCQkJCSFjdGwtPm9wcy51cGRhdGVfcGVuZGluZ19mbHVzaCkK PiAtCQkJY29udGludWU7Cj4gLQo+IC0JCWlmICghbWFzdGVyX2N0bCB8fCBtYXN0ZXJfY3RsLT5p ZHggPiBjdGwtPmlkeCkKPiAtCQkJbWFzdGVyX2N0bCA9IGN0bDsKPiAtCj4gLQkJY3RsLT5vcHMu c2V0dXBfc2J1Zl9jZmcoY3RsLCAmY3N0YXRlLT5zYnVmX2NmZyk7Cj4gLQkJY3RsLT5vcHMudXBk YXRlX3BlbmRpbmdfZmx1c2goY3RsLCBmbHVzaF9tYXNrKTsKPiAtCX0KPiAtCj4gLQlpZiAoY3N0 YXRlLT5zYnVmX2NmZy5yb3Rfb3BfbW9kZSA9PSBEUFVfQ1RMX1JPVF9PUF9NT0RFX0lOTElORV9B U1lOQyAmJgo+IC0JCQltYXN0ZXJfY3RsICYmIG1hc3Rlcl9jdGwtPm9wcy50cmlnZ2VyX3JvdF9z dGFydCkKPiAtCQltYXN0ZXJfY3RsLT5vcHMudHJpZ2dlcl9yb3Rfc3RhcnQobWFzdGVyX2N0bCk7 Cj4gLQo+IC0JRFBVX0FUUkFDRV9FTkQoImNydGNfa2lja29mZl9yb3QiKTsKPiAtfQo+IC0KPiAg dm9pZCBkcHVfY3J0Y19jb21taXRfa2lja29mZihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIHsK PiAgCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKPiBAQCAtMjQ4MSwxMCArMjQxMSw2IEBA IHZvaWQgZHB1X2NydGNfY29tbWl0X2tpY2tvZmYoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAK PiAgCURQVV9BVFJBQ0VfQkVHSU4oImNydGNfY29tbWl0Iik7Cj4gIAo+IC0JLyogZGVmYXVsdCB0 byBBU1lOQyBtb2RlIGZvciBpbmxpbmUgcm90YXRpb24gKi8KPiAtCWNzdGF0ZS0+c2J1Zl9jZmcu cm90X29wX21vZGUgPSBkcHVfY3J0Yy0+c2J1Zl9mbHVzaF9tYXNrID8KPiAtCQlEUFVfQ1RMX1JP VF9PUF9NT0RFX0lOTElORV9BU1lOQyA6IERQVV9DVExfUk9UX09QX01PREVfT0ZGTElORTsKPiAt Cj4gIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29k ZXJfbGlzdCwgaGVhZCkgewo+ICAJCXN0cnVjdCBkcHVfZW5jb2Rlcl9raWNrb2ZmX3BhcmFtcyBw YXJhbXMgPSB7IDAgfTsKPiAgCj4gQEAgLTI0OTUsMjkgKzI0MjEsOSBAQCB2b2lkIGRwdV9jcnRj X2NvbW1pdF9raWNrb2ZmKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAgCQkgKiBFbmNvZGVyIHdp bGwgZmx1c2gvc3RhcnQgbm93LCB1bmxlc3MgaXQgaGFzIGEgdHggcGVuZGluZy4KPiAgCQkgKiBJ ZiBzbywgaXQgbWF5IGRlbGF5IGFuZCBmbHVzaCBhdCBhbiBpcnEgZXZlbnQgKGUuZy4gcHBkb25l KQo+ICAJCSAqLwo+IC0JCXBhcmFtcy5pbmxpbmVfcm90YXRlX3ByZWZpbGwgPSBjc3RhdGUtPnNi dWZfcHJlZmlsbF9saW5lOwo+ICAJCWRwdV9lbmNvZGVyX3ByZXBhcmVfZm9yX2tpY2tvZmYoZW5j b2RlciwgJnBhcmFtcyk7Cj4gLQo+IC0JCS8qCj4gLQkJICogRm9yIGlubGluZSBBU1lOQyBtb2Rl cywgdGhlIGZsdXNoIGJpdHMgYXJlIG5vdCB3cml0dGVuCj4gLQkJICogdG8gaGFyZHdhcmUgYXRv bWljYWxseSwgc28gYXZvaWQgdXNpbmcgaXQgaWYgYSB2aWRlbwo+IC0JCSAqIG1vZGUgZW5jb2Rl ciBpcyBhY3RpdmUgb24gdGhpcyBDUlRDLgo+IC0JCSAqLwo+IC0JCWlmIChjc3RhdGUtPnNidWZf Y2ZnLnJvdF9vcF9tb2RlID09Cj4gLQkJCQlEUFVfQ1RMX1JPVF9PUF9NT0RFX0lOTElORV9BU1lO QyAmJgo+IC0JCQkJZHB1X2VuY29kZXJfZ2V0X2ludGZfbW9kZShlbmNvZGVyKSA9PQo+IC0JCQkJ SU5URl9NT0RFX1ZJREVPKQo+IC0JCQljc3RhdGUtPnNidWZfY2ZnLnJvdF9vcF9tb2RlID0KPiAt CQkJCURQVV9DVExfUk9UX09QX01PREVfSU5MSU5FX1NZTkM7Cj4gIAl9Cj4gIAo+IC0JLyoKPiAt CSAqIEZvciBBU1lOQyBpbmxpbmUgbW9kZXMsIGtpY2sgb2ZmIHRoZSByb3RhdG9yIG5vdyBzbyB0 aGF0IHRoZSBIL1cKPiAtCSAqIGNhbiBzdGFydCBhcyBzb29uIGFzIGl0J3MgcmVhZHkuCj4gLQkg Ki8KPiAtCWlmIChjc3RhdGUtPnNidWZfY2ZnLnJvdF9vcF9tb2RlID09IERQVV9DVExfUk9UX09Q X01PREVfSU5MSU5FX0FTWU5DKQo+IC0JCV9kcHVfY3J0Y19jb21taXRfa2lja29mZl9yb3QoY3J0 YywgY3N0YXRlKTsKPiAtCj4gIAkvKiB3YWl0IGZvciBmcmFtZV9ldmVudF9kb25lIGNvbXBsZXRp b24gKi8KPiAgCURQVV9BVFJBQ0VfQkVHSU4oIndhaXRfZm9yX2ZyYW1lX2RvbmVfZXZlbnQiKTsK PiAgCXJldCA9IF9kcHVfY3J0Y193YWl0X2Zvcl9mcmFtZV9kb25lKGNydGMpOwo+IEBAIC0yNTMy LDI0ICsyNDM4LDEwIEBAIHZvaWQgZHB1X2NydGNfY29tbWl0X2tpY2tvZmYoc3RydWN0IGRybV9j cnRjICpjcnRjKQo+ICAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZkcHVfY3J0Yy0+ZnJhbWVfcGVu ZGluZykgPT0gMSkgewo+ICAJCS8qIGFjcXVpcmUgYmFuZHdpZHRoIGFuZCBvdGhlciByZXNvdXJj ZXMgKi8KPiAgCQlEUFVfREVCVUcoImNydGMlZCBmaXJzdCBjb21taXRcbiIsIGNydGMtPmJhc2Uu aWQpOwo+IC0JCURQVV9FVlQzMihEUk1JRChjcnRjKSwgY3N0YXRlLT5zYnVmX2NmZy5yb3Rfb3Bf bW9kZSwKPiAtCQkJCURQVV9FVlRMT0dfRlVOQ19DQVNFMSk7Cj4gLQl9IGVsc2Ugewo+ICsJfSBl bHNlCj4gIAkJRFBVX0RFQlVHKCJjcnRjJWQgY29tbWl0XG4iLCBjcnRjLT5iYXNlLmlkKTsKPiAt CQlEUFVfRVZUMzIoRFJNSUQoY3J0YyksIGNzdGF0ZS0+c2J1Zl9jZmcucm90X29wX21vZGUsCj4g LQkJCQlEUFVfRVZUTE9HX0ZVTkNfQ0FTRTIpOwo+IC0JfQo+IC0JZHB1X2NydGMtPnBsYXlfY291 bnQrKzsKPiAgCj4gLQkvKgo+IC0JICogRm9yIFNZTkMgaW5saW5lIG1vZGVzLCBkZWxheSB0aGUg a2ljayBvZmYgdW50aWwgYWZ0ZXIgdGhlCj4gLQkgKiB3YWl0IGZvciBmcmFtZSBkb25lIGluIGNh c2UgdGhlIHdhaXQgdGltZXMgb3V0Lgo+IC0JICoKPiAtCSAqIEFsc28gcGVyZm9ybSBhIGZpbmFs IGtpY2tvZmYgd2hlbiB0cmFuc2l0aW9uaW5nIGJhY2sgdG8KPiAtCSAqIG9mZmxpbmUgbW9kZS4K PiAtCSAqLwo+IC0JaWYgKGNzdGF0ZS0+c2J1Zl9jZmcucm90X29wX21vZGUgIT0gRFBVX0NUTF9S T1RfT1BfTU9ERV9JTkxJTkVfQVNZTkMpCj4gLQkJX2RwdV9jcnRjX2NvbW1pdF9raWNrb2ZmX3Jv dChjcnRjLCBjc3RhdGUpOwo+ICsJZHB1X2NydGMtPnBsYXlfY291bnQrKzsKPiAgCj4gIAlkcHVf dmJpZl9jbGVhcl9lcnJvcnMoZHB1X2ttcyk7Cj4gIAo+IEBAIC0zNTE5LDE0ICszNDExLDYgQEAg c3RhdGljIHZvaWQgZHB1X2NydGNfaW5zdGFsbF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKPiAgCQkJImRyYW1faWIiLCAweDAsIDAsIFU2NF9NQVgsCj4gIAkJCWNhdGFsb2ctPnBl cmYubWF4X2J3X2hpZ2ggKiAxMDAwVUxMLAo+ICAJCQlDUlRDX1BST1BfRFJBTV9JQik7Cj4gLQlt c21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCj4gLQkJ CSJyb3RfcHJlZmlsbF9idyIsIDAsIDAsIFU2NF9NQVgsCj4gLQkJCWNhdGFsb2ctPnBlcmYubWF4 X2J3X2hpZ2ggKiAxMDAwVUxMLAo+IC0JCQlDUlRDX1BST1BfUk9UX1BSRUZJTExfQlcpOwo+IC0J bXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAo+IC0J CQkicm90X2NsayIsIDAsIDAsIFU2NF9NQVgsCj4gLQkJCWRwdV9rbXMtPnBlcmYubWF4X2NvcmVf Y2xrX3JhdGUsCj4gLQkJCUNSVENfUFJPUF9ST1RfQ0xLKTsKPiAgCj4gIAltc21fcHJvcGVydHlf aW5zdGFsbF9yYW5nZSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCj4gIAkJImlkbGVfdGltZW91 dCIsIElETEVfVElNRU9VVCwgMCwgVTY0X01BWCwgMCwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9jcnRjLmgKPiBpbmRleCAxNWUzZWI2Li45ZGVjMGI5IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCj4gQEAgLTIwMSw4ICsyMDEsNiBAQCBz dHJ1Y3QgZHB1X2NydGNfZXZlbnQgewo+ICAgKiBAbWlzcl9lbmFibGUgICA6IGJvb2xlYW4gZW50 cnkgaW5kaWNhdGVzIG1pc3IgZW5hYmxlL2Rpc2FibGUgc3RhdHVzLgo+ICAgKiBAbWlzcl9mcmFt ZV9jb3VudCAgOiBtaXNyIGZyYW1lIGNvdW50IHByb3ZpZGVkIGJ5IGNsaWVudAo+ICAgKiBAbWlz cl9kYXRhICAgICA6IHN0b3JlIG1pc3IgZGF0YSBiZWZvcmUgdHVybmluZyBvZmYgdGhlIGNsb2Nr cy4KPiAtICogQHNidWZfZmx1c2hfbWFzazogZmx1c2ggbWFzayBmb3IgaW5saW5lIHJvdGF0b3IK PiAtICogQHNidWZfZmx1c2hfbWFza19vbGQ6IGlubGluZSByb3RhdG9yIGZsdXNoIG1hc2sgZm9y IHByZXZpb3VzIGNvbW1pdAo+ICAgKiBAcG93ZXJfZXZlbnQgICA6IHJlZ2lzdGVyZWQgcG93ZXIg ZXZlbnQgaGFuZGxlCj4gICAqIEBjdXJfcGVyZiAgICAgIDogY3VycmVudCBwZXJmb3JtYW5jZSBj b21taXR0ZWQgdG8gY2xvY2svYmFuZHdpZHRoIGRyaXZlcgo+ICAgKiBAcnBfbG9jayAgICAgICA6 IHNlcmlhbGl6YXRpb24gbG9jayBmb3IgcmVzb3VyY2UgcG9vbAo+IEBAIC0yNjUsOSArMjYzLDYg QEAgc3RydWN0IGRwdV9jcnRjIHsKPiAgCXUzMiBtaXNyX2ZyYW1lX2NvdW50Owo+ICAJdTMyIG1p c3JfZGF0YVtDUlRDX0RVQUxfTUlYRVJTXTsKPiAgCj4gLQl1MzIgc2J1Zl9mbHVzaF9tYXNrOwo+ IC0JdTMyIHNidWZfZmx1c2hfbWFza19vbGQ7Cj4gLQo+ICAJc3RydWN0IGRwdV9wb3dlcl9ldmVu dCAqcG93ZXJfZXZlbnQ7Cj4gIAo+ICAJc3RydWN0IGRwdV9jb3JlX3BlcmZfcGFyYW1zIGN1cl9w ZXJmOwo+IEBAIC0yOTAsMTIgKzI4NSw2IEBAIHN0cnVjdCBkcHVfY3J0Y19yZXNfb3BzIHsKPiAg CXZvaWQgKCpwdXQpKHZvaWQgKnZhbCk7Cj4gIH07Cj4gIAo+IC0vKiBjcnRjIHJlc291cmNlIHR5 cGUgKDB4MC0weGZmZmYgcmVzZXJ2ZWQgZm9yIGh3IGJsb2NrIHR5cGUgKi8KPiAtI2RlZmluZSBE UFVfQ1JUQ19SRVNfUk9UX09VVF9GQk8JMHgxMDAwMAo+IC0jZGVmaW5lIERQVV9DUlRDX1JFU19S T1RfT1VUX0ZCCQkweDEwMDAxCj4gLSNkZWZpbmUgRFBVX0NSVENfUkVTX1JPVF9QTEFORQkJMHgx MDAwMgo+IC0jZGVmaW5lIERQVV9DUlRDX1JFU19ST1RfSU5fRkIJCTB4MTAwMDMKPiAtCj4gICNk ZWZpbmUgRFBVX0NSVENfUkVTX0ZMQUdfRlJFRQkJQklUKDApCj4gIAo+ICAvKioKPiBAQCAtMzU3 LDggKzM0Niw2IEBAIHN0cnVjdCBkcHVfY3J0Y19yZXNwb29sIHsKPiAgICogQGRzX2RpcnR5OiBC b29sZWFuIHRvIGluZGljYXRlIGlmIGRpcnR5IG9yIG5vdAo+ICAgKiBAZHNfY2ZnOiBEZXN0aW5h dGlvbiBzY2FsZXIgY29uZmlnCj4gICAqIEBuZXdfcGVyZjogbmV3IHBlcmZvcm1hbmNlIHN0YXRl IGJlaW5nIHJlcXVlc3RlZAo+IC0gKiBAc2J1Zl9jZmc6IHN0cmVhbSBidWZmZXIgY29uZmlndXJh dGlvbgo+IC0gKiBAc2J1Zl9wcmVmaWxsX2xpbmU6IG51bWJlciBvZiBsaW5lIGZvciBpbmxpbmUg cm90YXRvciBwcmVmZXRjaAo+ICAgKi8KPiAgc3RydWN0IGRwdV9jcnRjX3N0YXRlIHsKPiAgCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSBiYXNlOwo+IEBAIC0zODQsOSArMzcxLDYgQEAgc3RydWN0IGRw dV9jcnRjX3N0YXRlIHsKPiAgCXN0cnVjdCBkcHVfaHdfZHNfY2ZnIGRzX2NmZ1tEUFVfTUFYX0RT X0NPVU5UXTsKPiAgCj4gIAlzdHJ1Y3QgZHB1X2NvcmVfcGVyZl9wYXJhbXMgbmV3X3BlcmY7Cj4g LQlzdHJ1Y3QgZHB1X2N0bF9zYnVmX2NmZyBzYnVmX2NmZzsKPiAtCXUzMiBzYnVmX3ByZWZpbGxf bGluZTsKPiAtCj4gIAlzdHJ1Y3QgZHB1X2NydGNfcmVzcG9vbCBycDsKPiAgfTsKPiAgCj4gQEAg LTU0MSwyMyArNTI1LDYgQEAgc3RhdGljIGlubGluZSBib29sIGRwdV9jcnRjX2lzX2VuYWJsZWQo c3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICB9Cj4gIAo+ICAvKioKPiAtICogZHB1X2NydGNfZ2V0 X2lubGluZV9wcmVmaWxsIC0gZ2V0IGN1cnJlbnQgaW5saW5lIHJvdGF0aW9uIHByZWZpbGwKPiAt ICogQGNydGM6IFBvaW50ZXIgdG8gY3J0Ywo+IC0gKiByZXR1cm46IG51bWJlciBvZiBwcmVmaWxs IGxpbmVzCj4gLSAqLwo+IC1zdGF0aWMgaW5saW5lIHUzMiBkcHVfY3J0Y19nZXRfaW5saW5lX3By ZWZpbGwoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2NydGNfc3Rh dGUgKmNzdGF0ZTsKPiAtCj4gLQlpZiAoIWNydGMgfHwgIWNydGMtPnN0YXRlKQo+IC0JCXJldHVy biAwOwo+IC0KPiAtCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKPiAt CXJldHVybiBjc3RhdGUtPnNidWZfY2ZnLnJvdF9vcF9tb2RlICE9IERQVV9DVExfUk9UX09QX01P REVfT0ZGTElORSA/Cj4gLQkJY3N0YXRlLT5zYnVmX3ByZWZpbGxfbGluZSA6IDA7Cj4gLX0KPiAt Cj4gLS8qKgo+ICAgKiBkcHVfY3J0Y19ldmVudF9xdWV1ZSAtIHJlcXVlc3QgZXZlbnQgY2FsbGJh Y2sKPiAgICogQGNydGM6IFBvaW50ZXIgdG8gZHJtIGNydGMgc3RydWN0dXJlCj4gICAqIEBmdW5j OiBQb2ludGVyIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfZW5jb2Rlci5jCj4gaW5kZXggOTFiOWUwNy4uZDE3NTI4NiAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwo+IEBAIC0xMjI1LDgg KzEyMjUsNyBAQCBzdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl9kc2NfZGlzYWJsZShzdHJ1Y3QgZHB1 X2VuY29kZXJfdmlydCAqZHB1X2VuYykKPiAgfQo+ICAKPiAgc3RhdGljIGludCBfZHB1X2VuY29k ZXJfdXBkYXRlX3JzY19jbGllbnQoCj4gLQkJc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAo+ IC0JCXN0cnVjdCBkcHVfZW5jb2Rlcl9yc2NfY29uZmlnICpjb25maWcsIGJvb2wgZW5hYmxlKQo+ ICsJCXN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywgYm9vbCBlbmFibGUpCj4gIHsKPiAgCXN0 cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOwo+ICAJc3RydWN0IGRybV9jcnRjICpjcnRj Owo+IEBAIC0xMjY1LDEzICsxMjY0LDExIEBAIHN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX3VwZGF0 ZV9yc2NfY2xpZW50KAo+ICAJCSgoKGRpc3BfaW5mby0+Y2FwYWJpbGl0aWVzICYgTVNNX0RJU1BM QVlfQ0FQX0NNRF9NT0RFKSAmJgo+ICAJCSAgZGlzcF9pbmZvLT5pc19wcmltYXJ5KSA/IERQVV9S U0NfQ01EX1NUQVRFIDoKPiAgCQlEUFVfUlNDX1ZJRF9TVEFURSkgOiBEUFVfUlNDX0lETEVfU1RB VEU7Cj4gLQlwcmVmaWxsX2xpbmVzID0gY29uZmlnID8gbW9kZV9pbmZvLT5wcmVmaWxsX2xpbmVz ICsKPiAtCQljb25maWctPmlubGluZV9yb3RhdGVfcHJlZmlsbCA6IG1vZGVfaW5mby0+cHJlZmls bF9saW5lczsKPiAgCj4gIAkvKiBjb21wYXJlIHNwZWNpZmljIGl0ZW1zIGFuZCByZWNvbmZpZ3Vy ZSB0aGUgcnNjICovCj4gIAlpZiAoKHJzY19jb25maWctPmZwcyAhPSBtb2RlX2luZm8tPmZyYW1l X3JhdGUpIHx8Cj4gIAkgICAgKHJzY19jb25maWctPnZ0b3RhbCAhPSBtb2RlX2luZm8tPnZ0b3Rh bCkgfHwKPiAtCSAgICAocnNjX2NvbmZpZy0+cHJlZmlsbF9saW5lcyAhPSBwcmVmaWxsX2xpbmVz KSB8fAo+ICsJICAgIChyc2NfY29uZmlnLT5wcmVmaWxsX2xpbmVzICE9IG1vZGVfaW5mby0+cHJl ZmlsbF9saW5lcykgfHwKPiAgCSAgICAocnNjX2NvbmZpZy0+aml0dGVyX251bWVyICE9IG1vZGVf aW5mby0+aml0dGVyX251bWVyKSB8fAo+ICAJICAgIChyc2NfY29uZmlnLT5qaXR0ZXJfZGVub20g IT0gbW9kZV9pbmZvLT5qaXR0ZXJfZGVub20pKSB7Cj4gIAkJcnNjX2NvbmZpZy0+ZnBzID0gbW9k ZV9pbmZvLT5mcmFtZV9yYXRlOwo+IEBAIC0xMzkzLDE2ICsxMzkwLDEyIEBAIHN0YXRpYyB2b2lk IF9kcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sX3JzY191cGRhdGUoCj4gIAkJc3RydWN0IGRy bV9lbmNvZGVyICpkcm1fZW5jLCBib29sIGVuYWJsZSkKPiAgewo+ICAJc3RydWN0IGRwdV9lbmNv ZGVyX3ZpcnQgKmRwdV9lbmMgPSB0b19kcHVfZW5jb2Rlcl92aXJ0KGRybV9lbmMpOwo+IC0Jc3Ry dWN0IGRwdV9lbmNvZGVyX3JzY19jb25maWcgcnNjX2NmZyA9IHsgMCB9Owo+ICAJaW50IGk7Cj4g IAo+ICAJaWYgKGVuYWJsZSkgewo+IC0JCXJzY19jZmcuaW5saW5lX3JvdGF0ZV9wcmVmaWxsID0K PiAtCQkJCWRwdV9jcnRjX2dldF9pbmxpbmVfcHJlZmlsbChkcm1fZW5jLT5jcnRjKTsKPiAtCj4g LQkJX2RwdV9lbmNvZGVyX3VwZGF0ZV9yc2NfY2xpZW50KGRybV9lbmMsICZyc2NfY2ZnLCB0cnVl KTsKPiArCQlfZHB1X2VuY29kZXJfdXBkYXRlX3JzY19jbGllbnQoZHJtX2VuYywgdHJ1ZSk7Cj4g IAl9IGVsc2Ugewo+IC0JCV9kcHVfZW5jb2Rlcl91cGRhdGVfcnNjX2NsaWVudChkcm1fZW5jLCBO VUxMLCBmYWxzZSk7Cj4gKwkJX2RwdV9lbmNvZGVyX3VwZGF0ZV9yc2NfY2xpZW50KGRybV9lbmMs IGZhbHNlKTsKPiAgCj4gIAkJLyoqCj4gIAkJICogZGlzYWJsZSB0aGUgdnN5bmMgc291cmNlIGFm dGVyIHVwZGF0aW5nIHRoZSByc2Mgc3RhdGUuIHJzYwo+IEBAIC0xNzQ0LDcgKzE3MzcsNyBAQCBz dGF0aWMgaW50IGRwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2woc3RydWN0IGRybV9lbmNvZGVy ICpkcm1fZW5jLAo+ICAKPiAgCQlfZHB1X2VuY29kZXJfaXJxX2NvbnRyb2woZHJtX2VuYywgdHJ1 ZSk7Cj4gIAo+IC0JCV9kcHVfZW5jb2Rlcl91cGRhdGVfcnNjX2NsaWVudChkcm1fZW5jLCBOVUxM LCB0cnVlKTsKPiArCQlfZHB1X2VuY29kZXJfdXBkYXRlX3JzY19jbGllbnQoZHJtX2VuYywgdHJ1 ZSk7Cj4gIAo+ICAJCURQVV9FVlQzMihEUk1JRChkcm1fZW5jKSwgc3dfZXZlbnQsIGRwdV9lbmMt PnJjX3N0YXRlLAo+ICAJCQkJRFBVX0VOQ19SQ19TVEFURV9PTiwgRFBVX0VWVExPR19GVU5DX0NB U0U2KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Vu Y29kZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgKPiBp bmRleCA2OWZiMjZjLi45MmI2ODMyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfZW5jb2Rlci5oCj4gQEAgLTUyLDI0ICs1MiwxNCBAQCBzdHJ1Y3QgZHB1X2VuY29k ZXJfaHdfcmVzb3VyY2VzIHsKPiAgCj4gIC8qKgo+ICAgKiBkcHVfZW5jb2Rlcl9raWNrb2ZmX3Bh cmFtcyAtIGluZm8gZW5jb2RlciByZXF1aXJlcyBhdCBraWNrb2ZmCj4gLSAqIEBpbmxpbmVfcm90 YXRlX3ByZWZpbGw6IG51bWJlciBvZiBsaW5lcyB0byBwcmVmaWxsIGZvciBpbmxpbmUgcm90YXRp b24KPiAgICogQGFmZmVjdGVkX2Rpc3BsYXlzOiAgYml0bWFzaywgYml0IHNldCBtZWFucyB0aGUg Uk9JIG9mIHRoZSBjb21taXQgbGllcyB3aXRoaW4KPiAgICogICAgICAgICAgICAgICAgICAgICAg dGhlIGJvdW5kcyBvZiB0aGUgcGh5c2ljYWwgZGlzcGxheSBhdCB0aGUgYml0IGluZGV4Cj4gICAq Lwo+ICBzdHJ1Y3QgZHB1X2VuY29kZXJfa2lja29mZl9wYXJhbXMgewo+IC0JdTMyIGlubGluZV9y b3RhdGVfcHJlZmlsbDsKPiAgCXVuc2lnbmVkIGxvbmcgYWZmZWN0ZWRfZGlzcGxheXM7Cj4gIH07 Cj4gIAo+ICAvKioKPiAtICogZHB1X2VuY29kZXJfcnNjX2NvbmZpZyAtIHJzYyBjb25maWd1cmF0 aW9uIGZvciBlbmNvZGVyCj4gLSAqIEBpbmxpbmVfcm90YXRlX3ByZWZpbGw6IG51bWJlciBvZiBs aW5lcyB0byBwcmVmaWxsIGZvciBpbmxpbmUgcm90YXRpb24KPiAtICovCj4gLXN0cnVjdCBkcHVf ZW5jb2Rlcl9yc2NfY29uZmlnIHsKPiAtCXUzMiBpbmxpbmVfcm90YXRlX3ByZWZpbGw7Cj4gLX07 Cj4gLQo+IC0vKioKPiAgICogZHB1X2VuY29kZXJfZ2V0X2h3X3Jlc291cmNlcyAtIFBvcHVsYXRl IHRhYmxlIG9mIHJlcXVpcmVkIGhhcmR3YXJlIHJlc291cmNlcwo+ICAgKiBAZW5jb2RlcjoJZW5j b2RlciBwb2ludGVyCj4gICAqIEBod19yZXM6CXJlc291cmNlIHRhYmxlIHRvIHBvcHVsYXRlIHdp dGggZW5jb2RlciByZXF1aXJlZCByZXNvdXJjZXMKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oCj4gaW5kZXggM2IwNTU2OS4uNmM5YjdkNiAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9w aHlzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9w aHlzLmgKPiBAQCAtMjkwLDE1ICsyOTAsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgZHB1X2VuY29k ZXJfcGh5c19pbmNfcGVuZGluZyhzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5cykKPiAgICog QGJhc2U6CUJhc2VjbGFzcyBwaHlzaWNhbCBlbmNvZGVyIHN0cnVjdHVyZQo+ICAgKiBAaHdfaW50 ZjoJSGFyZHdhcmUgaW50ZXJmYWNlIHRvIHRoZSBpbnRmIHJlZ2lzdGVycwo+ICAgKiBAdGltaW5n X3BhcmFtczogQ3VycmVudCB0aW1pbmcgcGFyYW1ldGVyCj4gLSAqIEByb3RfZmV0Y2g6CVByZWZp bGwgZm9yIGlubGluZSByb3RhdGlvbgo+IC0gKiBAcm90X2ZldGNoX3ZhbGlkOiB0cnVlIGlmIHJv dF9mZXRjaCBpcyB1cGRhdGVkIChyZXNldCBpbiBlbmMgZW5hYmxlKQo+ICAgKi8KPiAgc3RydWN0 IGRwdV9lbmNvZGVyX3BoeXNfdmlkIHsKPiAgCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzIGJhc2U7 Cj4gIAlzdHJ1Y3QgZHB1X2h3X2ludGYgKmh3X2ludGY7Cj4gIAlzdHJ1Y3QgaW50Zl90aW1pbmdf cGFyYW1zIHRpbWluZ19wYXJhbXM7Cj4gLQlzdHJ1Y3QgaW50Zl9wcm9nX2ZldGNoIHJvdF9mZXRj aDsKPiAtCWJvb2wgcm90X2ZldGNoX3ZhbGlkOwo+ICB9Owo+ICAKPiAgLyoqCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jCj4g aW5kZXggNjJjNmY1Yy4uMWE4ODI2NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192aWQuYwo+IEBAIC0yMjksNzMgKzIyOSw2 IEBAIHN0YXRpYyB2b2lkIHByb2dyYW1tYWJsZV9mZXRjaF9jb25maWcoc3RydWN0IGRwdV9lbmNv ZGVyX3BoeXMgKnBoeXNfZW5jLAo+ICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaHlzX2VuYy0+ ZW5jX3NwaW5sb2NrLCBsb2NrX2ZsYWdzKTsKPiAgfQo+ICAKPiAtLyoKPiAtICogcHJvZ3JhbW1h YmxlX3JvdF9mZXRjaF9jb25maWc6IFByb2dyYW1zIFJPVCB0byBwcmVmZXRjaCBsaW5lcyBieSBv ZmZzZXR0aW5nCj4gLSAqCXRoZSBzdGFydCBvZiBmZXRjaCBpbnRvIHRoZSB2ZXJ0aWNhbCBmcm9u dCBwb3JjaCBmb3IgY2FzZXMgd2hlcmUgdGhlCj4gLSAqCXZzeW5jIHB1bHNlIHdpZHRoIGFuZCB2 ZXJ0aWNhbCBiYWNrIHBvcmNoIHRpbWUgaXMgaW5zdWZmaWNpZW50Cj4gLSAqCj4gLSAqCUdldHMg IyBvZiBsaW5lcyB0byBwcmUtZmV0Y2gsIHRoZW4gY2FsY3VsYXRlIFZTWU5DIGNvdW50ZXIgdmFs dWUuCj4gLSAqCUhXIGxheWVyIHJlcXVpcmVzIFZTWU5DIGNvdW50ZXIgb2YgZmlyc3QgcGl4ZWwg b2YgdGd0IFZGUCBsaW5lLgo+IC0gKiBAcGh5c19lbmM6IFBvaW50ZXIgdG8gcGh5c2ljYWwgZW5j b2Rlcgo+IC0gKiBAcm90X2ZldGNoX2xpbmVzOiBudW1iZXIgb2YgbGluZSB0byBwcmVmaWxsLCBv ciAwIHRvIGRpc2FibGUKPiAtICovCj4gLXN0YXRpYyB2b2lkIHByb2dyYW1tYWJsZV9yb3RfZmV0 Y2hfY29uZmlnKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYywKPiAtCQl1MzIgcm90 X2ZldGNoX2xpbmVzKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c192aWQgKnZpZF9l bmMgPQo+IC0JCXRvX2RwdV9lbmNvZGVyX3BoeXNfdmlkKHBoeXNfZW5jKTsKPiAtCXN0cnVjdCBp bnRmX3Byb2dfZmV0Y2ggZiA9IHsgMCB9Owo+IC0Jc3RydWN0IGludGZfdGltaW5nX3BhcmFtcyAq dGltaW5nOwo+IC0JdTMyIHZmcF9mZXRjaF9saW5lcyA9IDA7Cj4gLQl1MzIgaG9yaXpfdG90YWwg PSAwOwo+IC0JdTMyIHZlcnRfdG90YWwgPSAwOwo+IC0JdTMyIHJvdF9mZXRjaF9zdGFydF92c3lu Y19jb3VudGVyID0gMDsKPiAtCXUzMiBmbHVzaF9tYXNrID0gMDsKPiAtCXVuc2lnbmVkIGxvbmcg bG9ja19mbGFnczsKPiAtCj4gLQlpZiAoIXBoeXNfZW5jIHx8ICF2aWRfZW5jLT5od19pbnRmIHx8 ICFwaHlzX2VuYy0+aHdfY3RsIHx8Cj4gLQkJCSFwaHlzX2VuYy0+aHdfY3RsLT5vcHMuZ2V0X2Jp dG1hc2tfaW50ZiB8fAo+IC0JCQkhcGh5c19lbmMtPmh3X2N0bC0+b3BzLnVwZGF0ZV9wZW5kaW5n X2ZsdXNoIHx8Cj4gLQkJCSF2aWRfZW5jLT5od19pbnRmLT5vcHMuc2V0dXBfcm90X3N0YXJ0KQo+ IC0JCXJldHVybjsKPiAtCj4gLQl0aW1pbmcgPSAmdmlkX2VuYy0+dGltaW5nX3BhcmFtczsKPiAt CXZmcF9mZXRjaF9saW5lcyA9IHByb2dyYW1tYWJsZV9mZXRjaF9nZXRfbnVtX2xpbmVzKHZpZF9l bmMsIHRpbWluZyk7Cj4gLQlpZiAodmZwX2ZldGNoX2xpbmVzICYmIHJvdF9mZXRjaF9saW5lcykg ewo+IC0JCXZlcnRfdG90YWwgPSBnZXRfdmVydGljYWxfdG90YWwodGltaW5nKTsKPiAtCQlob3Jp el90b3RhbCA9IGdldF9ob3Jpem9udGFsX3RvdGFsKHRpbWluZyk7Cj4gLQkJaWYgKHZlcnRfdG90 YWwgPj0gKHZmcF9mZXRjaF9saW5lcyArIHJvdF9mZXRjaF9saW5lcykpIHsKPiAtCQkJcm90X2Zl dGNoX3N0YXJ0X3ZzeW5jX2NvdW50ZXIgPQo+IC0JCQkgICAgKHZlcnRfdG90YWwgLSB2ZnBfZmV0 Y2hfbGluZXMgLSByb3RfZmV0Y2hfbGluZXMpICoKPiAtCQkJICAgIGhvcml6X3RvdGFsICsgMTsK PiAtCQkJZi5lbmFibGUgPSAxOwo+IC0JCQlmLmZldGNoX3N0YXJ0ID0gcm90X2ZldGNoX3N0YXJ0 X3ZzeW5jX2NvdW50ZXI7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCS8qIHJldHVybiBpZiByb3RfZmV0 Y2ggZG9lcyBub3QgY2hhbmdlIHNpbmNlIGxhc3QgdXBkYXRlICovCj4gLQlpZiAodmlkX2VuYy0+ cm90X2ZldGNoX3ZhbGlkICYmCj4gLQkJCSFtZW1jbXAoJnZpZF9lbmMtPnJvdF9mZXRjaCwgJmYs IHNpemVvZihmKSkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCURQVV9ERUJVR19WSURFTkModmlkX2Vu YywKPiAtCQkicm90X2ZldGNoX2xpbmVzICV1IHZmcF9mZXRjaF9saW5lcyAldSByb3RfZmV0Y2hf c3RhcnRfdnN5bmNfY291bnRlciAldVxuIiwKPiAtCQlyb3RfZmV0Y2hfbGluZXMsIHZmcF9mZXRj aF9saW5lcywKPiAtCQlyb3RfZmV0Y2hfc3RhcnRfdnN5bmNfY291bnRlcik7Cj4gLQo+IC0JcGh5 c19lbmMtPmh3X2N0bC0+b3BzLmdldF9iaXRtYXNrX2ludGYoCj4gLQkJCXBoeXNfZW5jLT5od19j dGwsICZmbHVzaF9tYXNrLCB2aWRfZW5jLT5od19pbnRmLT5pZHgpOwo+IC0JcGh5c19lbmMtPmh3 X2N0bC0+b3BzLnVwZGF0ZV9wZW5kaW5nX2ZsdXNoKAo+IC0JCQlwaHlzX2VuYy0+aHdfY3RsLCBm bHVzaF9tYXNrKTsKPiAtCj4gLQlzcGluX2xvY2tfaXJxc2F2ZShwaHlzX2VuYy0+ZW5jX3NwaW5s b2NrLCBsb2NrX2ZsYWdzKTsKPiAtCXZpZF9lbmMtPmh3X2ludGYtPm9wcy5zZXR1cF9yb3Rfc3Rh cnQodmlkX2VuYy0+aHdfaW50ZiwgJmYpOwo+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaHlz X2VuYy0+ZW5jX3NwaW5sb2NrLCBsb2NrX2ZsYWdzKTsKPiAtCj4gLQl2aWRfZW5jLT5yb3RfZmV0 Y2ggPSBmOwo+IC0JdmlkX2VuYy0+cm90X2ZldGNoX3ZhbGlkID0gdHJ1ZTsKPiAtfQo+IC0KPiAg c3RhdGljIGJvb2wgZHB1X2VuY29kZXJfcGh5c192aWRfbW9kZV9maXh1cCgKPiAgCQlzdHJ1Y3Qg ZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMsCj4gIAkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUsCj4gQEAgLTYyMCw5ICs1NTMsNiBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rl cl9waHlzX3ZpZF9lbmFibGUoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQo+ICAJ aWYgKFdBUk5fT04oIXZpZF9lbmMtPmh3X2ludGYtPm9wcy5lbmFibGVfdGltaW5nKSkKPiAgCQly ZXR1cm47Cj4gIAo+IC0JLyogcmVzZXQgc3RhdGUgdmFyaWFibGVzIHVudGlsIGFmdGVyIGZpcnN0 IHVwZGF0ZSAqLwo+IC0JdmlkX2VuYy0+cm90X2ZldGNoX3ZhbGlkID0gZmFsc2U7Cj4gLQo+ICAJ ZHB1X2VuY29kZXJfaGVscGVyX3NwbGl0X2NvbmZpZyhwaHlzX2VuYywgdmlkX2VuYy0+aHdfaW50 Zi0+aWR4KTsKPiAgCj4gIAlkcHVfZW5jb2Rlcl9waHlzX3ZpZF9zZXR1cF90aW1pbmdfZW5naW5l KHBoeXNfZW5jKTsKPiBAQCAtNzU5LDggKzY4OSw2IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVy X3BoeXNfdmlkX3ByZXBhcmVfZm9yX2tpY2tvZmYoCj4gIAkJZHB1X2VuY29kZXJfaGVscGVyX3Vu cmVnaXN0ZXJfaXJxKHBoeXNfZW5jLCBJTlRSX0lEWF9WU1lOQyk7Cj4gIAkJRFBVX0RCR19EVU1Q KCJhbGwiLCAiZGJnX2J1cyIsICJ2YmlmX2RiZ19idXMiLCAicGFuaWMiKTsKPiAgCX0KPiAtCj4g LQlwcm9ncmFtbWFibGVfcm90X2ZldGNoX2NvbmZpZyhwaHlzX2VuYywgcGFyYW1zLT5pbmxpbmVf cm90YXRlX3ByZWZpbGwpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlz X3ZpZF9kaXNhYmxlKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYykKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMKPiBpbmRleCAyODli OWZmLi43MDE5NjIwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19jYXRhbG9nLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfY2F0YWxvZy5jCj4gQEAgLTE0LDkgKzE0LDYgQEAKPiAgI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KPiAgI2luY2x1ZGUgPGxpbnV4 L3BsYXRmb3JtX2RldmljZS5oPgo+IC0jaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX01TTV9ST1RB VE9SKQo+IC0jaW5jbHVkZSA8bGludXgvc29jL3Fjb20vbGxjYy1xY29tLmg+Cj4gLSNlbmRpZgo+ ICAjaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKPiAgI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgi Cj4gICNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZ19mb3JtYXQuaCIKPiBAQCAtOTQsOCArOTEsNiBA QAo+ICAgKi8KPiAgI2RlZmluZSBQUk9QX0JJVFZBTFVFX0FDQ0VTUyhwLCBpLCBqLCBrKQkoKHAg KyBpKS0+Yml0X3ZhbHVlW2pdW2tdKQo+ICAKPiAtI2RlZmluZSBERUZBVUxUX1NCVUZfSEVBRFJP T00JCSgyMCkKPiAtCj4gIC8qCj4gICAqIERlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcwo+ICAgKi8K PiBAQCAtMzMzLDEzICszMjgsNiBAQCBlbnVtIHsKPiAgCVJFR19ETUFfUFJPUF9NQVgKPiAgfTsK PiAgCj4gLWVudW0gewo+IC0JSU5MSU5FX1JPVF9YSU4sCj4gLQlJTkxJTkVfUk9UX1hJTl9UWVBF LAo+IC0JSU5MSU5FX1JPVF9DTEtfQ1RSTCwKPiAtCUlOTElORV9ST1RfUFJPUF9NQVgKPiAtfTsK PiAtCj4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCj4gICAqIGR0cyBwcm9wZXJ0eSBkZWZpbml0aW9uCj4gICAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo+IEBA IC05MjMsOSArOTExLDYgQEAgc3RhdGljIHZvaWQgX2RwdV9zc3BwX3NldHVwX3ZpZyhzdHJ1Y3Qg ZHB1X21kc3NfY2ZnICpkcHVfY2ZnLAo+ICAJCQkic3NwcF9zY2FsZXIldSIsIHNzcHAtPmlkIC0g U1NQUF9WSUcwKTsKPiAgCX0KPiAgCj4gLQlpZiAoZHB1X2NmZy0+aGFzX3NidWYpCj4gLQkJc2V0 X2JpdChEUFVfU1NQUF9TQlVGLCAmc3NwcC0+ZmVhdHVyZXMpOwo+IC0KPiAgCXNibGstPmNzY19i bGsuaWQgPSBEUFVfU1NQUF9DU0M7Cj4gIAlzbnByaW50ZihzYmxrLT5jc2NfYmxrLm5hbWUsIERQ VV9IV19CTEtfTkFNRV9MRU4sCj4gIAkJCSJzc3BwX2NzYyV1Iiwgc3NwcC0+aWQgLSBTU1BQX1ZJ RzApOwo+IEBAIC0xMjk1LDggKzEyODAsNiBAQCBzdGF0aWMgaW50IGRwdV9jdGxfcGFyc2VfZHQo c3RydWN0IGRldmljZV9ub2RlICpucCwKPiAgCQkJc2V0X2JpdChEUFVfQ1RMX1NQTElUX0RJU1BM QVksICZjdGwtPmZlYXR1cmVzKTsKPiAgCQlpZiAoaSA8IE1BWF9QUF9TUExJVF9ESVNQTEFZX0NU TCkKPiAgCQkJc2V0X2JpdChEUFVfQ1RMX1BJTkdQT05HX1NQTElULCAmY3RsLT5mZWF0dXJlcyk7 Cj4gLQkJaWYgKGRwdV9jZmctPmhhc19zYnVmKQo+IC0JCQlzZXRfYml0KERQVV9DVExfU0JVRiwg JmN0bC0+ZmVhdHVyZXMpOwo+ICAJfQo+ICAKPiAgZW5kOgo+IEBAIC0xNTM0LDkgKzE1MTcsNiBA QCBzdGF0aWMgaW50IGRwdV9pbnRmX3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4g IAkJCWludGYtPmNvbnRyb2xsZXJfaWQgPSBub25lX2NvdW50Owo+ICAJCQlub25lX2NvdW50Kys7 Cj4gIAkJfQo+IC0KPiAtCQlpZiAoZHB1X2NmZy0+aGFzX3NidWYpCj4gLQkJCXNldF9iaXQoRFBV X0lOVEZfUk9UX1NUQVJULCAmaW50Zi0+ZmVhdHVyZXMpOwo+ICAJfQo+ICAKPiAgZW5kOgo+IEBA IC0xNzYxLDE3MCArMTc0MSw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfZHNwcF9zZXR1cF9ibG9ja3Mo c3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZywKPiAgCX0KPiAgfQo+ICAKPiAtI2lmIElTX0VO QUJMRUQoQ09ORklHX0RSTV9NU01fUk9UQVRPUikKPiAtc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90 eXBlIGlubGluZV9yb3RfcHJvcFtJTkxJTkVfUk9UX1BST1BfTUFYXSA9IHsKPiAtCXtJTkxJTkVf Uk9UX1hJTiwgInFjb20sZHB1LWlubGluZS1yb3QteGluIiwgZmFsc2UsCj4gLQkJCQkJCQlQUk9Q X1RZUEVfVTMyX0FSUkFZfSwKPiAtCXtJTkxJTkVfUk9UX1hJTl9UWVBFLCAicWNvbSxkcHUtaW5s aW5lLXJvdC14aW4tdHlwZSIsIGZhbHNlLAo+IC0JCQkJCQkJUFJPUF9UWVBFX1NUUklOR19BUlJB WX0sCj4gLQl7SU5MSU5FX1JPVF9DTEtfQ1RSTCwgInFjb20sZHB1LWlubGluZS1yb3QtY2xrLWN0 cmwiLCBmYWxzZSwKPiAtCQkJCQkJUFJPUF9UWVBFX0JJVF9PRkZTRVRfQVJSQVl9LAo+IC19Owo+ IC0KPiAtc3RhdGljIHZvaWQgX2RwdV9pbmxpbmVfcm90X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Vf bm9kZSAqbnAsCj4gLQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZywgc3RydWN0IGRwdV9y b3RfY2ZnICpyb3QpCj4gLXsKPiAtCWludCByYywgcHJvcF9jb3VudFtJTkxJTkVfUk9UX1BST1Bf TUFYXSwgaSwgaiwgaW5kZXg7Cj4gLQlzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUgKnByb3BfdmFsdWUg PSBOVUxMOwo+IC0JYm9vbCBwcm9wX2V4aXN0c1tJTkxJTkVfUk9UX1BST1BfTUFYXTsKPiAtCXUz MiBvZmZfY291bnQsIHNzcHBfY291bnQgPSAwLCB3Yl9jb3VudCA9IDA7Cj4gLQljb25zdCBjaGFy ICp0eXBlOwo+IC0KPiAtCXByb3BfdmFsdWUgPSBrY2FsbG9jKElOTElORV9ST1RfUFJPUF9NQVgs Cj4gLQkJCXNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKPiAtCWlm ICghcHJvcF92YWx1ZSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JcmMgPSBfdmFsaWRhdGVfZHRfZW50 cnkobnAsIGlubGluZV9yb3RfcHJvcCwKPiAtCQkJQVJSQVlfU0laRShpbmxpbmVfcm90X3Byb3Ap LCBwcm9wX2NvdW50LCAmb2ZmX2NvdW50KTsKPiAtCWlmIChyYykKPiAtCQlnb3RvIGVuZDsKPiAt Cj4gLQlyYyA9IF9yZWFkX2R0X2VudHJ5KG5wLCBpbmxpbmVfcm90X3Byb3AsIEFSUkFZX1NJWkUo aW5saW5lX3JvdF9wcm9wKSwKPiAtCQkJcHJvcF9jb3VudCwgcHJvcF9leGlzdHMsIHByb3BfdmFs dWUpOwo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBv ZmZfY291bnQ7IGkrKykgewo+IC0JCXJvdC0+dmJpZl9jZmdbaV0ueGluX2lkID0gUFJPUF9WQUxV RV9BQ0NFU1MocHJvcF92YWx1ZSwKPiAtCQkJCQkJCUlOTElORV9ST1RfWElOLCBpKTsKPiAtCQlv Zl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChucCwKPiAtCQkJCWlubGluZV9yb3RfcHJvcFtJ TkxJTkVfUk9UX1hJTl9UWVBFXS5wcm9wX25hbWUsCj4gLQkJCQlpLCAmdHlwZSk7Cj4gLQo+IC0J CWlmICghc3RyY21wKHR5cGUsICJzc3BwIikpIHsKPiAtCQkJcm90LT52YmlmX2NmZ1tpXS5udW0g PSBJTkxJTkVfUk9UMF9TU1BQICsgc3NwcF9jb3VudDsKPiAtCQkJcm90LT52YmlmX2NmZ1tpXS5p c19yZWFkID0gdHJ1ZTsKPiAtCQkJcm90LT52YmlmX2NmZ1tpXS5jbGtfY3RybCA9Cj4gLQkJCQkJ RFBVX0NMS19DVFJMX0lOTElORV9ST1QwX1NTUFAKPiAtCQkJCQkrIHNzcHBfY291bnQ7Cj4gLQkJ CXNzcHBfY291bnQrKzsKPiAtCQl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgIndiIikpIHsKPiAt CQkJcm90LT52YmlmX2NmZ1tpXS5udW0gPSBJTkxJTkVfUk9UMF9XQiArIHdiX2NvdW50Owo+IC0J CQlyb3QtPnZiaWZfY2ZnW2ldLmlzX3JlYWQgPSBmYWxzZTsKPiAtCQkJcm90LT52YmlmX2NmZ1tp XS5jbGtfY3RybCA9Cj4gLQkJCQkJRFBVX0NMS19DVFJMX0lOTElORV9ST1QwX1dCCj4gLQkJCQkJ KyB3Yl9jb3VudDsKPiAtCQkJd2JfY291bnQrKzsKPiAtCQl9IGVsc2Ugewo+IC0JCQlEUFVfRVJS T1IoImludmFsaWQgcm90YXRvciB2YmlmIHR5cGU6JXNcbiIsIHR5cGUpOwo+IC0JCQlnb3RvIGVu ZDsKPiAtCQl9Cj4gLQo+IC0JCWluZGV4ID0gcm90LT52YmlmX2NmZ1tpXS5jbGtfY3RybDsKPiAt CQlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IERQVV9DTEtfQ1RSTF9NQVgpIHsKPiAtCQkJRFBV X0VSUk9SKCJpbnZhbGlkIGNsa19jdHJsIGVudW06JWRcbiIsIGluZGV4KTsKPiAtCQkJZ290byBl bmQ7Cj4gLQkJfQo+IC0KPiAtCQlmb3IgKGogPSAwOyBqIDwgZHB1X2NmZy0+bWRwX2NvdW50OyBq KyspIHsKPiAtCQkJZHB1X2NmZy0+bWRwW2pdLmNsa19jdHJsc1tpbmRleF0ucmVnX29mZiA9Cj4g LQkJCQlQUk9QX0JJVFZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQkJCQlJTkxJTkVfUk9U X0NMS19DVFJMLCBpLCAwKTsKPiAtCQkJZHB1X2NmZy0+bWRwW2pdLmNsa19jdHJsc1tpbmRleF0u Yml0X29mZiA9Cj4gLQkJCQlQUk9QX0JJVFZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQkJ CQlJTkxJTkVfUk9UX0NMS19DVFJMLCBpLCAxKTsKPiAtCQl9Cj4gLQo+IC0JCURQVV9ERUJVRygi cm90LSB4aW46JWQsIG51bTolZCwgcmQ6JWQsIGNsazolZDoweCV4LyVkXG4iLAo+IC0JCQkJcm90 LT52YmlmX2NmZ1tpXS54aW5faWQsCj4gLQkJCQlyb3QtPnZiaWZfY2ZnW2ldLm51bSwKPiAtCQkJ CXJvdC0+dmJpZl9jZmdbaV0uaXNfcmVhZCwKPiAtCQkJCXJvdC0+dmJpZl9jZmdbaV0uY2xrX2N0 cmwsCj4gLQkJCQlkcHVfY2ZnLT5tZHBbMF0uY2xrX2N0cmxzW2luZGV4XS5yZWdfb2ZmLAo+IC0J CQkJZHB1X2NmZy0+bWRwWzBdLmNsa19jdHJsc1tpbmRleF0uYml0X29mZik7Cj4gLQl9Cj4gLQo+ IC0Jcm90LT52YmlmX2lkeCA9IFZCSUZfUlQ7Cj4gLQlyb3QtPnhpbl9jb3VudCA9IG9mZl9jb3Vu dDsKPiAtCj4gLWVuZDoKPiAtCWtmcmVlKHByb3BfdmFsdWUpOwo+IC19Cj4gLSNlbmRpZgo+IC0K PiAtc3RhdGljIGludCBkcHVfcm90X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4g LQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykKPiAtewo+IC0jaWYgSVNfRU5BQkxFRChD T05GSUdfRFJNX01TTV9ST1RBVE9SKQo+IC0Jc3RydWN0IGRwdV9yb3RfY2ZnICpyb3Q7Cj4gLQlz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owo+IC0Jc3RydWN0IG9mX3BoYW5kbGVfYXJncyBw aGFyZ3M7Cj4gLQlzdHJ1Y3QgbGxjY19zbGljZV9kZXNjICpzbGljZTsKPiAtCWludCByYyA9IDAs IGk7Cj4gLQo+IC0JaWYgKCFkcHVfY2ZnKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3Vt ZW50XG4iKTsKPiAtCQlyYyA9IC1FSU5WQUw7Cj4gLQkJZ290byBlbmQ7Cj4gLQl9Cj4gLQo+IC0J Zm9yIChpID0gMDsgaSA8IFJPVF9NQVg7IGkrKykgewo+IC0JCXJvdCA9IGRwdV9jZmctPnJvdCAr IGRwdV9jZmctPnJvdF9jb3VudDsKPiAtCQlyb3QtPmJhc2UgPSAwOwo+IC0JCXJvdC0+bGVuID0g MDsKPiAtCj4gLQkJcmMgPSBvZl9wYXJzZV9waGFuZGxlX3dpdGhfYXJncyhucCwKPiAtCQkJCSJx Y29tLGRwdS1pbmxpbmUtcm90YXRvciIsICIjbGlzdC1jZWxscyIsCj4gLQkJCQlpLCAmcGhhcmdz KTsKPiAtCQlpZiAocmMpIHsKPiAtCQkJcmMgPSAwOwo+IC0JCQlicmVhazsKPiAtCQl9IGVsc2Ug aWYgKCFwaGFyZ3MubnAgfHwgIXBoYXJncy5hcmdzX2NvdW50KSB7Cj4gLQkJCXJjID0gLUVJTlZB TDsKPiAtCQkJYnJlYWs7Cj4gLQkJfQo+IC0KPiAtCQlyb3QtPmlkID0gUk9UXzAgKyBwaGFyZ3Mu YXJnc1swXTsKPiAtCj4gLQkJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGhhcmdzLm5w KTsKPiAtCQlpZiAocGRldikgewo+IC0JCQlzbGljZSA9IGxsY2Nfc2xpY2VfZ2V0ZCgmcGRldi0+ ZGV2LCAicm90YXRvciIpOwo+IC0JCQlpZiAoSVNfRVJSX09SX05VTEwoc2xpY2UpKSB7Cj4gLQkJ CQlyb3QtPnBkZXYgPSBOVUxMOwo+IC0JCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IHN5c3Rl bSBjYWNoZSAlbGRcbiIsCj4gLQkJCQkJCVBUUl9FUlIoc2xpY2UpKTsKPiAtCQkJfSBlbHNlIHsK PiAtCQkJCXJvdC0+c2NpZCA9IGxsY2NfZ2V0X3NsaWNlX2lkKHNsaWNlKTsKPiAtCQkJCXJvdC0+ c2xpY2Vfc2l6ZSA9IGxsY2NfZ2V0X3NsaWNlX3NpemUoc2xpY2UpOwo+IC0JCQkJcm90LT5wZGV2 ID0gcGRldjsKPiAtCQkJCWxsY2Nfc2xpY2VfcHV0ZChzbGljZSk7Cj4gLQkJCQlEUFVfREVCVUco InJvdDolZCBzY2lkOiVkIHNsaWNlX3NpemU6JXp1a2JcbiIsCj4gLQkJCQkJCXJvdC0+aWQsIHJv dC0+c2NpZCwKPiAtCQkJCQkJcm90LT5zbGljZV9zaXplKTsKPiAtCQkJCV9kcHVfaW5saW5lX3Jv dF9wYXJzZV9kdChucCwgZHB1X2NmZywgcm90KTsKPiAtCQkJCWRwdV9jZmctPnJvdF9jb3VudCsr Owo+IC0JCQl9Cj4gLQkJfSBlbHNlIHsKPiAtCQkJcm90LT5wZGV2ID0gTlVMTDsKPiAtCQkJRFBV X0VSUk9SKCJpbnZhbGlkIGRwdSByb3RhdG9yIG5vZGVcbiIpOwo+IC0JCX0KPiAtCj4gLQkJb2Zf bm9kZV9wdXQocGhhcmdzLm5wKTsKPiAtCX0KPiAtCj4gLQlpZiAoZHB1X2NmZy0+cm90X2NvdW50 KSB7Cj4gLQkJZHB1X2NmZy0+aGFzX3NidWYgPSB0cnVlOwo+IC0JCWRwdV9jZmctPnNidWZfaGVh ZHJvb20gPSBERUZBVUxUX1NCVUZfSEVBRFJPT007Cj4gLQl9Cj4gLQo+IC1lbmQ6Cj4gLQlyZXR1 cm4gcmM7Cj4gLSNlbHNlCj4gLQlyZXR1cm4gMDsKPiAtI2VuZGlmCj4gLX0KPiAtCj4gIHN0YXRp YyBpbnQgZHB1X2RzcHBfdG9wX3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4gIAkJ c3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykKPiAgewo+IEBAIC0zMjE5LDEwICszMDM1LDYg QEAgc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2h3X2NhdGFsb2dfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB1MzIgaHdfcmV2KQo+ICAJaWYgKHJjKQo+ICAJCWdvdG8gZW5kOwo+ICAKPiAt CXJjID0gZHB1X3JvdF9wYXJzZV9kdChucCwgZHB1X2NmZyk7Cj4gLQlpZiAocmMpCj4gLQkJZ290 byBlbmQ7Cj4gLQo+ICAJcmMgPSBkcHVfY3RsX3BhcnNlX2R0KG5wLCBkcHVfY2ZnKTsKPiAgCWlm IChyYykKPiAgCQlnb3RvIGVuZDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19jYXRhbG9nLmgKPiBpbmRleCBhYTViMjU2Li40MDJlOTI5IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmgKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5oCj4gQEAgLTExOSw3 ICsxMTksNiBAQCBlbnVtIHsKPiAgICogQERQVV9TU1BQX0VYQ0xfUkVDVCwgICAgICBTU1BQIHN1 cHBvcnRzIGV4Y2x1c2lvbiByZWN0Cj4gICAqIEBEUFVfU1NQUF9TTUFSVF9ETUFfVjEsICAgU21h cnRETUEgMS4wIHN1cHBvcnQKPiAgICogQERQVV9TU1BQX1NNQVJUX0RNQV9WMiwgICBTbWFydERN QSAyLjAgc3VwcG9ydAo+IC0gKiBARFBVX1NTUFBfU0JVRiwgICAgICAgICAgIFNTUFAgc3VwcG9y dCBpbmxpbmUgc3RyZWFtIGJ1ZmZlcgo+ICAgKiBARFBVX1NTUFBfVFNfUFJFRklMTCAgICAgIFN1 cHBvcnRzIHByZWZpbGwgd2l0aCB0cmFmZmljIHNoYXBlcgo+ICAgKiBARFBVX1NTUFBfVFNfUFJF RklMTF9SRUMxIFN1cHBvcnRzIHByZWZpbGwgd2l0aCB0cmFmZmljIHNoYXBlciBtdWx0aXJlYwo+ ICAgKiBARFBVX1NTUFBfQ0RQICAgICAgICAgICAgIFN1cHBvcnRzIGNsaWVudCBkcml2ZW4gcHJl ZmV0Y2gKPiBAQCAtMTQyLDcgKzE0MSw2IEBAIGVudW0gewo+ICAJRFBVX1NTUFBfRVhDTF9SRUNU LAo+ICAJRFBVX1NTUFBfU01BUlRfRE1BX1YxLAo+ICAJRFBVX1NTUFBfU01BUlRfRE1BX1YyLAo+ IC0JRFBVX1NTUFBfU0JVRiwKPiAgCURQVV9TU1BQX1RTX1BSRUZJTEwsCj4gIAlEUFVfU1NQUF9U U19QUkVGSUxMX1JFQzEsCj4gIAlEUFVfU1NQUF9DRFAsCj4gQEAgLTIxOSwyNyArMjE3LDE1IEBA IGVudW0gewo+ICAgKiBDVEwgc3ViLWJsb2Nrcwo+ICAgKiBARFBVX0NUTF9TUExJVF9ESVNQTEFZ ICAgICAgIENUTCBzdXBwb3J0cyB2aWRlbyBtb2RlIHNwbGl0IGRpc3BsYXkKPiAgICogQERQVV9D VExfUElOR1BPTkdfU1BMSVQgICAgICBDVEwgc3VwcG9ydHMgcGluZ3Bvbmcgc3BsaXQKPiAtICog QERQVV9DVExfU0JVRiAgICAgICAgICAgICAgICBDVEwgc3VwcG9ydHMgaW5saW5lIHN0cmVhbSBi dWZmZXIKPiAgICogQERQVV9DVExfTUFYCj4gICAqLwo+ICBlbnVtIHsKPiAgCURQVV9DVExfU1BM SVRfRElTUExBWSA9IDB4MSwKPiAgCURQVV9DVExfUElOR1BPTkdfU1BMSVQsCj4gLQlEUFVfQ1RM X1NCVUYsCj4gIAlEUFVfQ1RMX01BWAo+ICB9Owo+ICAKPiAgLyoqCj4gLSAqIElOVEYgc3ViLWJs b2Nrcwo+IC0gKiBARFBVX0lOVEZfUk9UX1NUQVJUICAgICAgICAgIElOVEYgc3VwcG9ydHMgcm90 YXRvciBzdGFydCB0cmlnZ2VyCj4gLSAqIEBEUFVfSU5URl9NQVgKPiAtICovCj4gLWVudW0gewo+ IC0JRFBVX0lOVEZfUk9UX1NUQVJUID0gMHgxLAo+IC0JRFBVX0lOVEZfTUFYCj4gLX07Cj4gLQo+ IC0vKioKPiAgICogV0Igc3ViLWJsb2NrcyBhbmQgZmVhdHVyZXMKPiAgICogQERQVV9XQl9MSU5F X01PREUgICAgICAgIFdyaXRlYmFjayBtb2R1bGUgc3VwcG9ydHMgbGluZS9saW5lYXIgbW9kZQo+ ICAgKiBARFBVX1dCX0JMT0NLX01PREUgICAgICAgV3JpdGViYWNrIG1vZHVsZSBzdXBwb3J0cyBi bG9jayBtb2RlIHJlYWQKPiBAQCAtNzEwLDQ0ICs2OTYsNiBAQCBzdHJ1Y3QgZHB1X3diX2NmZyB7 Cj4gIH07Cj4gIAo+ICAvKioKPiAtICogc3RydWN0IGRwdV9yb3RfdmJpZl9jZmcgLSBpbmxpbmUg cm90YXRvciB2YmlmIGNvbmZpZ3MKPiAtICogQHhpbl9pZCAgICAgICAgICAgICB4aW4gY2xpZW50 IGlkCj4gLSAqIEBudW0gICAgICAgICAgICAgICAgZW51bSBpZGVudGlmeWluZyB0aGlzIGJsb2Nr Cj4gLSAqIEBpc19yZWFkICAgICAgICAgICAgaW5kaWNhdGVzIHJlYWQvd3JpdGUgY2xpZW50Cj4g LSAqIEBjbGtfY3RybCAgICAgICAgICAgaW5kZXggdG8gY2xrIGNvbnRyb2wKPiAtICovCj4gLXN0 cnVjdCBkcHVfcm90X3ZiaWZfY2ZnIHsKPiAtCXUzMiB4aW5faWQ7Cj4gLQl1MzIgbnVtOwo+IC0J Ym9vbCBpc19yZWFkOwo+IC0JZW51bSBkcHVfY2xrX2N0cmxfdHlwZSBjbGtfY3RybDsKPiAtfTsK PiAtCj4gLS8qKgo+IC0gKiBzdHJ1Y3QgZHB1X3JvdF9jZmcgLSBpbmZvcm1hdGlvbiBvZiByb3Rh dG9yIGJsb2Nrcwo+IC0gKiBAaWQgICAgICAgICAgICAgICAgIGVudW0gaWRlbnRpZnlpbmcgdGhp cyBibG9jawo+IC0gKiBAYmFzZSAgICAgICAgICAgICAgIHJlZ2lzdGVyIG9mZnNldCBvZiB0aGlz IGJsb2NrCj4gLSAqIEBsZW4gICAgICAgICAgICAgICAgbGVuZ3RoIG9mIGhhcmR3YXJlIGJsb2Nr Cj4gLSAqIEBmZWF0dXJlcyAgICAgICAgICAgYml0IG1hc2sgaWRlbnRpZnlpbmcgc3ViLWJsb2Nr cy9mZWF0dXJlcwo+IC0gKiBAcGRldiAgICAgICAgICAgICAgIHByaXZhdGUgZGV2aWNlIGhhbmRs ZQo+IC0gKiBAc2NpZCAgICAgICAgICAgICAgIHN1YmNhY2hlIGlkZW50aWZpZXIKPiAtICogQHNs aWNlX3NpemUgICAgICAgICBzdWJjYWNoZSBzbGljZSBzaXplCj4gLSAqIEB2YmlmX2lkeCAgICAg ICAgICAgdmJpZiBpZGVudGlmaWVyCj4gLSAqIEB4aW5fY291bnQgICAgICAgICAgbnVtYmVyIG9m IHhpbiBjbGllbnRzCj4gLSAqIEB2YmlmX2NmZyAgICAgICAgICAgdmJpZiBzZXR0aW5ncyByZWxh dGVkIHRvIHJvdGF0b3IKPiAtICovCj4gLXN0cnVjdCBkcHVfcm90X2NmZyB7Cj4gLQlEUFVfSFdf QkxLX0lORk87Cj4gLQl2b2lkICpwZGV2Owo+IC0JaW50IHNjaWQ7Cj4gLQlzaXplX3Qgc2xpY2Vf c2l6ZTsKPiAtCXUzMiB2YmlmX2lkeDsKPiAtCj4gLQl1MzIgeGluX2NvdW50Owo+IC0Jc3RydWN0 IGRwdV9yb3RfdmJpZl9jZmcgdmJpZl9jZmdbTUFYX0JMT0NLU107Cj4gLX07Cj4gLQo+IC0vKioK PiAgICogc3RydWN0IGRwdV92YmlmX2R5bmFtaWNfb3RfY2ZnIC0gZHluYW1pYyBPVCBzZXR0aW5n Cj4gICAqIEBwcHMgICAgICAgICAgICAgICAgcGl4ZWwgcGVyIHNlY29uZHMKPiAgICogQG90X2xp bWl0ICAgICAgICAgICBPVCBsaW1pdCB0byB1c2UgdXAgdG8gc3BlY2lmaWVkIHBpeGVsIHBlciBz ZWNvbmQKPiBAQCAtOTA5LDggKzg1Nyw2IEBAIHN0cnVjdCBkcHVfcGVyZl9jZmcgewo+ICAgKiBA aGFzX2NkcCAgICAgICAgICAgIENsaWVudCBkcml2ZW4gcHJlZmV0Y2ggZmVhdHVyZSBzdGF0dXMK PiAgICogQGhhc193Yl91YndjICAgICAgICBVQldDIGZlYXR1cmUgc3VwcG9ydGVkIG9uIFdCCj4g ICAqIEB1YndjX3ZlcnNpb24gICAgICAgVUJXQyBmZWF0dXJlIHZlcnNpb24gKDB4MCBmb3Igbm90 IHN1cHBvcnRlZCkKPiAtICogQGhhc19zYnVmICAgICAgICAgICBpbmRpY2F0ZSBpZiBzdHJlYW0g YnVmZmVyIGlzIGF2YWlsYWJsZQo+IC0gKiBAc2J1Zl9oZWFkcm9vbSAgICAgIHN0cmVhbSBidWZm ZXIgaGVhZHJvb20gaW4gbGluZXMKPiAgICogQGhhc19pZGxlX3BjICAgICAgICBpbmRpY2F0ZSBp ZiBpZGxlIHBvd2VyIGNvbGxhcHNlIGZlYXR1cmUgaXMgc3VwcG9ydGVkCj4gICAqIEBkbWFfZm9y bWF0cyAgICAgICAgU3VwcG9ydGVkIGZvcm1hdHMgZm9yIGRtYSBwaXBlCj4gICAqIEBjdXJzb3Jf Zm9ybWF0cyAgICAgU3VwcG9ydGVkIGZvcm1hdHMgZm9yIGN1cnNvciBwaXBlCj4gQEAgLTkzNCw4 ICs4ODAsNiBAQCBzdHJ1Y3QgZHB1X21kc3NfY2ZnIHsKPiAgCWJvb2wgaGFzX2RpbV9sYXllcjsK PiAgCWJvb2wgaGFzX3diX3Vid2M7Cj4gIAl1MzIgdWJ3Y192ZXJzaW9uOwo+IC0JYm9vbCBoYXNf c2J1ZjsKPiAtCXUzMiBzYnVmX2hlYWRyb29tOwo+ICAJYm9vbCBoYXNfaWRsZV9wYzsKPiAgCXUz MiB2YmlmX3Fvc19ubHZsOwo+ICAJdTMyIHRzX3ByZWZpbGxfcmV2Owo+IEBAIC05NzgsOSArOTIy LDYgQEAgc3RydWN0IGRwdV9tZHNzX2NmZyB7Cj4gIAl1MzIgd2JfY291bnQ7Cj4gIAlzdHJ1Y3Qg ZHB1X3diX2NmZyB3YltNQVhfQkxPQ0tTXTsKPiAgCj4gLQl1MzIgcm90X2NvdW50Owo+IC0Jc3Ry dWN0IGRwdV9yb3RfY2ZnIHJvdFtNQVhfQkxPQ0tTXTsKPiAtCj4gIAl1MzIgdmJpZl9jb3VudDsK PiAgCXN0cnVjdCBkcHVfdmJpZl9jZmcgdmJpZltNQVhfQkxPQ0tTXTsKPiAgCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jdGwuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jdGwuYwo+IGluZGV4IDQ0ZWY3MzcuLjY5MjJk OGEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2N0 bC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2N0bC5jCj4g QEAgLTMxLDEyICszMSw4IEBACj4gICNkZWZpbmUgICBDVExfUFJFUEFSRSAgICAgICAgICAgICAg ICAgICAweDBkMAo+ICAjZGVmaW5lICAgQ1RMX1NXX1JFU0VUICAgICAgICAgICAgICAgICAgMHgw MzAKPiAgI2RlZmluZSAgIENUTF9MQVlFUl9FWFROX09GRlNFVCAgICAgICAgIDB4NDAKPiAtI2Rl ZmluZSAgIENUTF9ST1RfVE9QICAgICAgICAgICAgICAgICAgIDB4MEMwCj4gLSNkZWZpbmUgICBD VExfUk9UX0ZMVVNIICAgICAgICAgICAgICAgICAweDBDNAo+IC0jZGVmaW5lICAgQ1RMX1JPVF9T VEFSVCAgICAgICAgICAgICAgICAgMHgwQ0MKPiAgCj4gICNkZWZpbmUgQ1RMX01JWEVSX0JPUkRF Ul9PVVQgICAgICAgICAgICBCSVQoMjQpCj4gLSNkZWZpbmUgQ1RMX0ZMVVNIX01BU0tfUk9UICAg ICAgICAgICAgICBCSVQoMjcpCj4gICNkZWZpbmUgQ1RMX0ZMVVNIX01BU0tfQ1RMICAgICAgICAg ICAgICBCSVQoMTcpCj4gIAo+ICAjZGVmaW5lIERQVV9SRUdfUkVTRVRfVElNRU9VVF9VUyAgICAg ICAgMjAwMAo+IEBAIC04NywxNiArODMsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHB1X2h3X2N0 bF90cmlnZ2VyX3BlbmRpbmcoc3RydWN0IGRwdV9od19jdGwgKmN0eCkKPiAgCURQVV9SRUdfV1JJ VEUoJmN0eC0+aHcsIENUTF9QUkVQQVJFLCAweDEpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW5saW5l IHZvaWQgZHB1X2h3X2N0bF90cmlnZ2VyX3JvdF9zdGFydChzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4 KQo+IC17Cj4gLQkvKiBST1QgZmx1c2ggYml0IGlzIGxhdGNoZWQgZHVyaW5nIFJPVCBzdGFydCwg c28gc2V0IGl0IGZpcnN0ICovCj4gLQlpZiAoQ1RMX0ZMVVNIX01BU0tfUk9UICYgY3R4LT5wZW5k aW5nX2ZsdXNoX21hc2spIHsKPiAtCQljdHgtPnBlbmRpbmdfZmx1c2hfbWFzayAmPSB+Q1RMX0ZM VVNIX01BU0tfUk9UOwo+IC0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIENUTF9GTFVTSCwgQ1RM X0ZMVVNIX01BU0tfUk9UKTsKPiAtCX0KPiAtCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIENUTF9S T1RfU1RBUlQsIEJJVCgwKSk7Cj4gLX0KPiAtCj4gIHN0YXRpYyBpbmxpbmUgdm9pZCBkcHVfaHdf Y3RsX2NsZWFyX3BlbmRpbmdfZmx1c2goc3RydWN0IGRwdV9od19jdGwgKmN0eCkKPiAgewo+ICAJ Y3R4LT5wZW5kaW5nX2ZsdXNoX21hc2sgPSAweDA7Cj4gQEAgLTEyNSwxMyArMTExLDYgQEAgc3Rh dGljIGlubGluZSB2b2lkIGRwdV9od19jdGxfdHJpZ2dlcl9mbHVzaChzdHJ1Y3QgZHB1X2h3X2N0 bCAqY3R4KQo+ICBzdGF0aWMgaW5saW5lIHUzMiBkcHVfaHdfY3RsX2dldF9mbHVzaF9yZWdpc3Rl cihzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4KQo+ICB7Cj4gIAlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdf bWFwICpjID0gJmN0eC0+aHc7Cj4gLQl1MzIgcm90X29wX21vZGU7Cj4gLQo+IC0Jcm90X29wX21v ZGUgPSBEUFVfUkVHX1JFQUQoYywgQ1RMX1JPVF9UT1ApICYgMHgzOwo+IC0KPiAtCS8qIHJvdGF0 ZSBmbHVzaCBiaXQgaXMgdW5kZWZpbmVkIGlmIG9mZmxpbmUgbW9kZSwgc28gaWdub3JlIGl0ICov Cj4gLQlpZiAocm90X29wX21vZGUgPT0gRFBVX0NUTF9ST1RfT1BfTU9ERV9PRkZMSU5FKQo+IC0J CXJldHVybiBEUFVfUkVHX1JFQUQoYywgQ1RMX0ZMVVNIKSAmIH5DVExfRkxVU0hfTUFTS19ST1Q7 Cj4gIAo+ICAJcmV0dXJuIERQVV9SRUdfUkVBRChjLCBDVExfRkxVU0gpOwo+ICB9Cj4gQEAgLTI5 MywxOSArMjcyLDYgQEAgc3RhdGljIGlubGluZSBpbnQgZHB1X2h3X2N0bF9nZXRfYml0bWFza193 YihzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRp YyBpbmxpbmUgaW50IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfcm90KHN0cnVjdCBkcHVfaHdfY3Rs ICpjdHgsCj4gLQkJdTMyICpmbHVzaGJpdHMsIGVudW0gZHB1X3JvdCByb3QpCj4gLXsKPiAtCXN3 aXRjaCAocm90KSB7Cj4gLQljYXNlIFJPVF8wOgo+IC0JCSpmbHVzaGJpdHMgfD0gQ1RMX0ZMVVNI X01BU0tfUk9UOwo+IC0JCWJyZWFrOwo+IC0JZGVmYXVsdDoKPiAtCQlyZXR1cm4gLUVJTlZBTDsK PiAtCX0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+ICBzdGF0aWMgaW5saW5lIGludCBkcHVfaHdf Y3RsX2dldF9iaXRtYXNrX2NkbShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAo+ICAJCXUzMiAqZmx1 c2hiaXRzLCBlbnVtIGRwdV9jZG0gY2RtKQo+ICB7Cj4gQEAgLTU1MiwxNyArNTE4LDYgQEAgc3Rh dGljIHZvaWQgZHB1X2h3X2N0bF9pbnRmX2NmZyhzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAo+ICAJ RFBVX1JFR19XUklURShjLCBDVExfVE9QLCBpbnRmX2NmZyk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2 b2lkIGRwdV9od19jdGxfc2V0dXBfc2J1Zl9jZmcoc3RydWN0IGRwdV9od19jdGwgKmN0eCwKPiAt CXN0cnVjdCBkcHVfY3RsX3NidWZfY2ZnICpjZmcpCj4gLXsKPiAtCXN0cnVjdCBkcHVfaHdfYmxr X3JlZ19tYXAgKmMgPSAmY3R4LT5odzsKPiAtCXUzMiB2YWw7Cj4gLQo+IC0JdmFsID0gY2ZnLT5y b3Rfb3BfbW9kZSAmIDB4MzsKPiAtCj4gLQlEUFVfUkVHX1dSSVRFKGMsIENUTF9ST1RfVE9QLCB2 YWwpOwo+IC19Cj4gLQo+ICBzdGF0aWMgdm9pZCBkcHVfaHdfcmVnX2RtYV9mbHVzaChzdHJ1Y3Qg ZHB1X2h3X2N0bCAqY3R4KQo+ICB7Cj4gIAlzdHJ1Y3QgZHB1X2h3X3JlZ19kbWFfb3BzICpvcHMg PSBkcHVfcmVnX2RtYV9nZXRfb3BzKCk7Cj4gQEAgLTU5NCwxMiArNTQ5LDYgQEAgc3RhdGljIHZv aWQgX3NldHVwX2N0bF9vcHMoc3RydWN0IGRwdV9od19jdGxfb3BzICpvcHMsCj4gIAlvcHMtPmdl dF9iaXRtYXNrX2NkbSA9IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfY2RtOwo+ICAJb3BzLT5nZXRf Yml0bWFza193YiA9IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfd2I7Cj4gIAlvcHMtPnJlZ19kbWFf Zmx1c2ggPSBkcHVfaHdfcmVnX2RtYV9mbHVzaDsKPiAtCj4gLQlpZiAoY2FwICYgQklUKERQVV9D VExfU0JVRikpIHsKPiAtCQlvcHMtPmdldF9iaXRtYXNrX3JvdCA9IGRwdV9od19jdGxfZ2V0X2Jp dG1hc2tfcm90Owo+IC0JCW9wcy0+c2V0dXBfc2J1Zl9jZmcgPSBkcHVfaHdfY3RsX3NldHVwX3Ni dWZfY2ZnOwo+IC0JCW9wcy0+dHJpZ2dlcl9yb3Rfc3RhcnQgPSBkcHVfaHdfY3RsX3RyaWdnZXJf cm90X3N0YXJ0Owo+IC0JfQo+ICB9Owo+ICAKPiAgc3RhdGljIHN0cnVjdCBkcHVfaHdfYmxrX29w cyBkcHVfaHdfb3BzID0gewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfY3RsLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf Y3RsLmgKPiBpbmRleCA0N2E2YTBiLi5kMzQzNWJlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jdGwuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19jdGwuaAo+IEBAIC0yOSwyMCArMjksNiBAQCBlbnVtIGRwdV9j dGxfbW9kZV9zZWwgewo+ICAJRFBVX0NUTF9NT0RFX1NFTF9DTUQKPiAgfTsKPiAgCj4gLS8qKgo+ IC0gKiBkcHVfY3RsX3JvdF9vcF9tb2RlIC0gaW5saW5lIHJvdGF0aW9uIG1vZGUKPiAtICogRFBV X0NUTF9ST1RfT1BfTU9ERV9PRkZMSU5FOiBvZmZsaW5lIHJvdGF0aW9uCj4gLSAqIERQVV9DVExf Uk9UX09QX01PREVfUkVTRVJWRUQ6IHJlc2VydmVkCj4gLSAqIERQVV9DVExfUk9UX09QX01PREVf SU5MSU5FX1NZTkM6IGlubGluZSByb3RhdGlvbiBzeW5jaHJvbm91cyBtb2RlCj4gLSAqIERQVV9D VExfUk9UX09QX01PREVfSU5MSU5FX0FTWU5DOiBpbmxpbmUgcm90YXRpb24gYXN5bmNocm9ub3Vz IG1vZGUKPiAtICovCj4gLWVudW0gZHB1X2N0bF9yb3Rfb3BfbW9kZSB7Cj4gLQlEUFVfQ1RMX1JP VF9PUF9NT0RFX09GRkxJTkUsCj4gLQlEUFVfQ1RMX1JPVF9PUF9NT0RFX1JFU0VSVkVELAo+IC0J RFBVX0NUTF9ST1RfT1BfTU9ERV9JTkxJTkVfU1lOQywKPiAtCURQVV9DVExfUk9UX09QX01PREVf SU5MSU5FX0FTWU5DLAo+IC19Owo+IC0KPiAgc3RydWN0IGRwdV9od19jdGw7Cj4gIC8qKgo+ICAg KiBzdHJ1Y3QgZHB1X2h3X3N0YWdlX2NmZyAtIGJsZW5kaW5nIHN0YWdlIGNmZwo+IEBAIC03Miwx NCArNTgsNiBAQCBzdHJ1Y3QgZHB1X2h3X2ludGZfY2ZnIHsKPiAgfTsKPiAgCj4gIC8qKgo+IC0g KiBzdHJ1Y3QgZHB1X2N0bF9zYnVmX2NmZyAtIGNvbnRyb2wgZm9yIHN0cmVhbSBidWZmZXIgY29u ZmlndXJhdGlvbgo+IC0gKiBAcm90X29wX21vZGU6IHJvdGF0b3Igb3BlcmF0aW9uIG1vZGUKPiAt ICovCj4gLXN0cnVjdCBkcHVfY3RsX3NidWZfY2ZnIHsKPiAtCWVudW0gZHB1X2N0bF9yb3Rfb3Bf bW9kZSByb3Rfb3BfbW9kZTsKPiAtfTsKPiAtCj4gLS8qKgo+ICAgKiBzdHJ1Y3QgZHB1X2h3X2N0 bF9vcHMgLSBJbnRlcmZhY2UgdG8gdGhlIHdiIEh3IGRyaXZlciBmdW5jdGlvbnMKPiAgICogQXNz dW1wdGlvbiBpcyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgY2xvY2tzIGFy ZSBlbmFibGVkCj4gICAqLwo+IEBAIC0xMDAsMTMgKzc4LDYgQEAgc3RydWN0IGRwdV9od19jdGxf b3BzIHsKPiAgCXZvaWQgKCp0cmlnZ2VyX3BlbmRpbmcpKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgp Owo+ICAKPiAgCS8qKgo+IC0JICoga2lja29mZiByb3RhdG9yIG9wZXJhdGlvbiBmb3IgU3cgY29u dHJvbGxlZCBpbnRlcmZhY2VzCj4gLQkgKiBEU0kgY21kIG1vZGUgYW5kIFdCIGludGVyZmFjZSBh cmUgU1cgY29udHJvbGxlZAo+IC0JICogQGN0eCAgICAgICA6IGN0bCBwYXRoIGN0eCBwb2ludGVy Cj4gLQkgKi8KPiAtCXZvaWQgKCp0cmlnZ2VyX3JvdF9zdGFydCkoc3RydWN0IGRwdV9od19jdGwg KmN0eCk7Cj4gLQo+IC0JLyoqCj4gIAkgKiBDbGVhciB0aGUgdmFsdWUgb2YgdGhlIGNhY2hlZCBw ZW5kaW5nX2ZsdXNoX21hc2sKPiAgCSAqIE5vIGVmZmVjdCBvbiBoYXJkd2FyZQo+ICAJICogQGN0 eCAgICAgICA6IGN0bCBwYXRoIGN0eCBwb2ludGVyCj4gQEAgLTE4OSwxMCArMTYwLDYgQEAgc3Ry dWN0IGRwdV9od19jdGxfb3BzIHsKPiAgCQl1MzIgKmZsdXNoYml0cywKPiAgCQllbnVtIGRwdV93 YiBibGspOwo+ICAKPiAtCWludCAoKmdldF9iaXRtYXNrX3JvdCkoc3RydWN0IGRwdV9od19jdGwg KmN0eCwKPiAtCQl1MzIgKmZsdXNoYml0cywKPiAtCQllbnVtIGRwdV9yb3QgYmxrKTsKPiAtCj4g IAkvKioKPiAgCSAqIFNldCBhbGwgYmxlbmQgc3RhZ2VzIHRvIGRpc2FibGVkCj4gIAkgKiBAY3R4 ICAgICAgIDogY3RsIHBhdGggY3R4IHBvaW50ZXIKPiBAQCAtMjA4LDkgKzE3NSw2IEBAIHN0cnVj dCBkcHVfaHdfY3RsX29wcyB7Cj4gIAl2b2lkICgqc2V0dXBfYmxlbmRzdGFnZSkoc3RydWN0IGRw dV9od19jdGwgKmN0eCwKPiAgCQllbnVtIGRwdV9sbSBsbSwgc3RydWN0IGRwdV9od19zdGFnZV9j ZmcgKmNmZyk7Cj4gIAo+IC0Jdm9pZCAoKnNldHVwX3NidWZfY2ZnKShzdHJ1Y3QgZHB1X2h3X2N0 bCAqY3R4LAo+IC0JCXN0cnVjdCBkcHVfY3RsX3NidWZfY2ZnICpjZmcpOwo+IC0KPiAgCS8qKgo+ ICAJICogRmx1c2ggdGhlIHJlZyBkbWEgYnkgc2VuZGluZyBsYXN0IGNvbW1hbmQuCj4gIAkgKiBA Y3R4ICAgICAgIDogY3RsIHBhdGggY3R4IHBvaW50ZXIKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19pbnRmLmMKPiBpbmRleCA4MzAyMzYwLi43Mzg2ZDQ2IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19pbnRmLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5jCj4gQEAgLTIzMCwy NSArMjMwLDYgQEAgc3RhdGljIHZvaWQgZHB1X2h3X2ludGZfc2V0dXBfcHJnX2ZldGNoKAo+ICAJ RFBVX1JFR19XUklURShjLCBJTlRGX0NPTkZJRywgZmV0Y2hfZW5hYmxlKTsKPiAgfQo+ICAKPiAt c3RhdGljIHZvaWQgZHB1X2h3X2ludGZfc2V0dXBfcm90X3N0YXJ0KAo+IC0JCXN0cnVjdCBkcHVf aHdfaW50ZiAqaW50ZiwKPiAtCQljb25zdCBzdHJ1Y3QgaW50Zl9wcm9nX2ZldGNoICpmZXRjaCkK PiAtewo+IC0Jc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYyA9ICZpbnRmLT5odzsKPiAtCWlu dCBmZXRjaF9lbmFibGU7Cj4gLQo+IC0JZmV0Y2hfZW5hYmxlID0gRFBVX1JFR19SRUFEKGMsIElO VEZfQ09ORklHKTsKPiAtCWlmIChmZXRjaC0+ZW5hYmxlKSB7Cj4gLQkJZmV0Y2hfZW5hYmxlIHw9 IEJJVCgxOSk7Cj4gLQkJRFBVX1JFR19XUklURShjLCBJTlRGX1BST0dfUk9UX1NUQVJULAo+IC0J CQkJZmV0Y2gtPmZldGNoX3N0YXJ0KTsKPiAtCX0gZWxzZSB7Cj4gLQkJZmV0Y2hfZW5hYmxlICY9 IH5CSVQoMTkpOwo+IC0JfQo+IC0KPiAtCURQVV9SRUdfV1JJVEUoYywgSU5URl9DT05GSUcsIGZl dGNoX2VuYWJsZSk7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkIGRwdV9od19pbnRmX2dldF9zdGF0 dXMoCj4gIAkJc3RydWN0IGRwdV9od19pbnRmICppbnRmLAo+ICAJCXN0cnVjdCBpbnRmX3N0YXR1 cyAqcykKPiBAQCAtMzExLDggKzI5Miw2IEBAIHN0YXRpYyB2b2lkIF9zZXR1cF9pbnRmX29wcyhz dHJ1Y3QgZHB1X2h3X2ludGZfb3BzICpvcHMsCj4gIAlvcHMtPnNldHVwX21pc3IgPSBkcHVfaHdf aW50Zl9zZXR1cF9taXNyOwo+ICAJb3BzLT5jb2xsZWN0X21pc3IgPSBkcHVfaHdfaW50Zl9jb2xs ZWN0X21pc3I7Cj4gIAlvcHMtPmdldF9saW5lX2NvdW50ID0gZHB1X2h3X2ludGZfZ2V0X2xpbmVf Y291bnQ7Cj4gLQlpZiAoY2FwICYgQklUKERQVV9JTlRGX1JPVF9TVEFSVCkpCj4gLQkJb3BzLT5z ZXR1cF9yb3Rfc3RhcnQgPSBkcHVfaHdfaW50Zl9zZXR1cF9yb3Rfc3RhcnQ7Cj4gIH0KPiAgCj4g IHN0YXRpYyBzdHJ1Y3QgZHB1X2h3X2Jsa19vcHMgZHB1X2h3X29wcyA9IHsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGYuaCBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19pbnRmLmgKPiBpbmRleCA5YzU0YTE5Li5hNzlk NzM1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19p bnRmLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5o Cj4gQEAgLTU3LDcgKzU3LDYgQEAgc3RydWN0IGludGZfc3RhdHVzIHsKPiAgICogIEFzc3VtcHRp b24gaXMgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGNsb2NrcyBhcmUgZW5h YmxlZAo+ICAgKiBAIHNldHVwX3RpbWluZ19nZW4gOiBwcm9ncmFtcyB0aGUgdGltaW5nIGVuZ2lu ZQo+ICAgKiBAIHNldHVwX3Byb2dfZmV0Y2ggOiBlbmFibGVzL2Rpc2FibGVzIHRoZSBwcm9ncmFt bWFibGUgZmV0Y2ggbG9naWMKPiAtICogQCBzZXR1cF9yb3Rfc3RhcnQgIDogZW5hYmxlcy9kaXNh YmxlcyB0aGUgcm90YXRvciBzdGFydCB0cmlnZ2VyCj4gICAqIEAgZW5hYmxlX3RpbWluZzogZW5h YmxlL2Rpc2FibGUgdGltaW5nIGVuZ2luZQo+ICAgKiBAIGdldF9zdGF0dXM6IHJldHVybnMgaWYg dGltaW5nIGVuZ2luZSBpcyBlbmFibGVkIG9yIG5vdAo+ICAgKiBAIHNldHVwX21pc3I6IGVuYWJs ZXMvZGlzYWJsZXMgTUlTUiBpbiBIVyByZWdpc3Rlcgo+IEBAIC03Miw5ICs3MSw2IEBAIHN0cnVj dCBkcHVfaHdfaW50Zl9vcHMgewo+ICAJdm9pZCAoKnNldHVwX3ByZ19mZXRjaCkoc3RydWN0IGRw dV9od19pbnRmICppbnRmLAo+ICAJCQljb25zdCBzdHJ1Y3QgaW50Zl9wcm9nX2ZldGNoICpmZXRj aCk7Cj4gIAo+IC0Jdm9pZCAoKnNldHVwX3JvdF9zdGFydCkoc3RydWN0IGRwdV9od19pbnRmICpp bnRmLAo+IC0JCQljb25zdCBzdHJ1Y3QgaW50Zl9wcm9nX2ZldGNoICpmZXRjaCk7Cj4gLQo+ICAJ dm9pZCAoKmVuYWJsZV90aW1pbmcpKHN0cnVjdCBkcHVfaHdfaW50ZiAqaW50ZiwKPiAgCQkJdTgg ZW5hYmxlKTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19tZHNzLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbWRz cy5oCj4gaW5kZXggMDk0YTQxOC4uNWVkZTJiNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbWRzcy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X21kc3MuaAo+IEBAIC0xMDcsNyArMTA3LDYgQEAgZW51bSBkcHVf aHdfYmxrX3R5cGUgewo+ICAJRFBVX0hXX0JMS19JTlRGLAo+ICAJRFBVX0hXX0JMS19XQiwKPiAg CURQVV9IV19CTEtfRFNDLAo+IC0JRFBVX0hXX0JMS19ST1QsCj4gIAlEUFVfSFdfQkxLX01BWCwK PiAgfTsKPiAgCj4gQEAgLTI5OSwxOCArMjk4LDYgQEAgZW51bSBkcHVfaW9tbXVfZG9tYWluIHsK PiAgCURQVV9JT01NVV9ET01BSU5fTUFYCj4gIH07Cj4gIAo+IC1lbnVtIGRwdV9yb3Qgewo+IC0J Uk9UXzAgPSAxLAo+IC0JUk9UX01BWAo+IC19Owo+IC0KPiAtZW51bSBkcHVfaW5saW5lX3JvdCB7 Cj4gLQlJTkxJTkVfUk9UX05PTkUsCj4gLQlJTkxJTkVfUk9UMF9TU1BQLAo+IC0JSU5MSU5FX1JP VDBfV0IsCj4gLQlJTkxJTkVfUk9UX01BWAo+IC19Owo+IC0KPiAgLyoqCj4gICAqIERQVSBIVyxD b21wb25lbnQgb3JkZXIgY29sb3IgbWFwCj4gICAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcm90LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaHdfcm90LmMKPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCBi MjBhNjQwLi4wMDAwMDAwCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X3JvdC5jCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDk2MSArMCwwIEBACj4gLS8qIENvcHly aWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KPiAtICoKPiAtICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiAtICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4gLSAqIG9ubHkg dmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKPiAtICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiAtICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+IC0gKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+IC0gKi8KPiAtCj4gLSNkZWZpbmUg cHJfZm10KGZtdCkJIltkcm06JXM6JWRdICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18KPiAtCj4g LSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+IC0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2 aWNlLmg+Cj4gLQo+IC0jaW5jbHVkZSAiZHB1X2ttcy5oIgo+IC0jaW5jbHVkZSAiZHB1X2h3X21k c3MuaCIKPiAtI2luY2x1ZGUgImRwdV9od2lvLmgiCj4gLSNpbmNsdWRlICJkcHVfaHdfY2F0YWxv Zy5oIgo+IC0jaW5jbHVkZSAiZHB1X2h3X3JvdC5oIgo+IC0jaW5jbHVkZSAiZHB1X2Zvcm1hdHMu aCIKPiAtI2luY2x1ZGUgImRwdV9yb3RhdG9yX2lubGluZS5oIgo+IC0KPiAtI2RlZmluZSBEUFVf TU9ESUZMRVIoX21vZGlmaWVyXykgKChfbW9kaWZpZXJfKSAmIDB4MDBmZmZmZmZmZmZmZmZmZlVM TCkKPiAtI2RlZmluZSBEUFVfTU9ESUZJRVJfSVNfVElMRShfbW9kaWZpZXJfKSBcCj4gLQlEUFVf TU9ESUZMRVIoKF9tb2RpZmllcl8pICYgRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFKQo+IC0jZGVm aW5lIERQVV9NT0RJRklFUl9JU19VQldDKF9tb2RpZmllcl8pIFwKPiAtCURQVV9NT0RJRkxFUigo X21vZGlmaWVyXykgJiBEUk1fRk9STUFUX01PRF9RQ09NX0NPTVBSRVNTRUQpCj4gLSNkZWZpbmUg RFBVX01PRElGSUVSX0lTXzEwQihfbW9kaWZpZXJfKSBcCj4gLQlEUFVfTU9ESUZMRVIoKF9tb2Rp Zmllcl8pICYgRFJNX0ZPUk1BVF9NT0RfUUNPTV9EWCkKPiAtI2RlZmluZSBEUFVfTU9ESUZJRVJf SVNfVElHSFQoX21vZGlmaWVyXykgXAo+IC0JRFBVX01PRElGTEVSKChfbW9kaWZpZXJfKSAmIERS TV9GT1JNQVRfTU9EX1FDT01fVElHSFQpCj4gLQo+IC0vKioKPiAtICogX3JvdF9vZmZzZXQgLSB1 cGRhdGUgcmVnaXN0ZXIgbWFwIG9mIHRoZSBnaXZlbiByb3RhdG9yIGluc3RhbmNlCj4gLSAqIEBy b3Q6IHJvdGF0b3IgaWRlbnRpZmllcgo+IC0gKiBAbTogUG9pbnRlciB0byBtZHNzIGNhdGFsb2cK PiAtICogQGFkZHI6IGkvbyBhZGRyZXNzIG1hcHBpbmcKPiAtICogQGI6IFBvaW50ZXIgdG8gcmVn aXN0ZXIgYmxvY2sgbWFwcGluZyBzdHJ1Y3R1cmUKPiAtICogcmV0dXJuOiBQb2ludGVyIHRvIHJv dGF0b3IgY29uZmlndXJhdGlvbiBvZiB0aGUgZ2l2ZW4gaW5zdGFuY2UKPiAtICovCj4gLXN0YXRp YyBzdHJ1Y3QgZHB1X3JvdF9jZmcgKl9yb3Rfb2Zmc2V0KGVudW0gZHB1X3JvdCByb3QsCj4gLQkJ c3RydWN0IGRwdV9tZHNzX2NmZyAqbSwKPiAtCQl2b2lkIF9faW9tZW0gKmFkZHIsCj4gLQkJc3Ry dWN0IGRwdV9od19ibGtfcmVnX21hcCAqYikKPiAtewo+IC0JaW50IGk7Cj4gLQo+IC0JZm9yIChp ID0gMDsgaSA8IG0tPnJvdF9jb3VudDsgaSsrKSB7Cj4gLQkJaWYgKHJvdCA9PSBtLT5yb3RbaV0u aWQpIHsKPiAtCQkJYi0+YmFzZV9vZmYgPSBhZGRyOwo+IC0JCQliLT5ibGtfb2ZmID0gbS0+cm90 W2ldLmJhc2U7Cj4gLQkJCWItPmh3dmVyc2lvbiA9IG0tPmh3dmVyc2lvbjsKPiAtCQkJYi0+bG9n X21hc2sgPSBEUFVfREJHX01BU0tfUk9UOwo+IC0JCQlyZXR1cm4gJm0tPnJvdFtpXTsKPiAtCQl9 Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gLX0KPiAtCj4gLS8qKgo+ IC0gKiBfZHB1X2h3X3JvdF9yZWdfZHVtcCAtIHBlcmZvcm0gcmVnaXN0ZXIgZHVtcAo+IC0gKiBA cHRyOiBwcml2YXRlIHBvaW50ZXIgdG8gcm90YXRvciBwbGF0Zm9ybSBkZXZpY2UKPiAtICogcmV0 dXJuOiBOb25lCj4gLSAqLwo+IC1zdGF0aWMgdm9pZCBfZHB1X2h3X3JvdF9yZWdfZHVtcCh2b2lk ICpwdHIpCj4gLXsKPiAtCWRwdV9yb3RhdG9yX2lubGluZV9yZWdfZHVtcCgoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqKSBwdHIpOwo+IC19Cj4gLQo+IC0vKioKPiAtICogZHB1X2h3X3JvdF9zdGFy dCAtIHN0YXJ0IHJvdGF0b3IgYmVmb3JlIGFueSBjb21taXQKPiAtICogQGh3OiBQb2ludGVyIHRv IHJvdGF0b3IgaGFyZHdhcmUgZHJpdmVyCj4gLSAqIHJldHVybjogMCBpZiBzdWNjZXNzOyBlcnJv ciBjb2RlIG90aGVyd2lzZQo+IC0gKi8KPiAtc3RhdGljIGludCBkcHVfaHdfcm90X3N0YXJ0KHN0 cnVjdCBkcHVfaHdfcm90ICpodykKPiAtewo+IC0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl djsKPiAtCWludCByYzsKPiAtCj4gLQlpZiAoIWh3IHx8ICFody0+Y2FwcyB8fCAhaHctPmNhcHMt PnBkZXYpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7Cj4gLQkJcmV0 dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JcGRldiA9IGh3LT5jYXBzLT5wZGV2Owo+IC0KPiAt CXJjID0gZHB1X2RiZ19yZWdfcmVnaXN0ZXJfY2IoaHctPm5hbWUsIF9kcHVfaHdfcm90X3JlZ19k dW1wLCBwZGV2KTsKPiAtCWlmIChyYykKPiAtCQlEUFVfRVJST1IoImZhaWxlZCB0byByZWdpc3Rl ciBkZWJ1ZyBkdW1wICVkXG4iLCByYyk7Cj4gLQo+IC0JaHctPnJvdF9jdHggPSBkcHVfcm90YXRv cl9pbmxpbmVfb3BlbihwZGV2KTsKPiAtCWlmIChJU19FUlJfT1JfTlVMTChody0+cm90X2N0eCkp IHsKPiAtCQlyYyA9IFBUUl9FUlIoaHctPnJvdF9jdHgpOwo+IC0JCWh3LT5yb3RfY3R4ID0gTlVM TDsKPiAtCQlyZXR1cm4gcmM7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLS8q Kgo+IC0gKiBkcHVfaHdfcm90X3N0b3AgLSBzdG9wIHJvdGF0b3IgYWZ0ZXIgZmluYWwgY29tbWl0 Cj4gLSAqIEBodzogUG9pbnRlciB0byByb3RhdG9yIGhhcmR3YXJlIGRyaXZlcgo+IC0gKiByZXR1 cm46IG5vbmUKPiAtICovCj4gLXN0YXRpYyB2b2lkIGRwdV9od19yb3Rfc3RvcChzdHJ1Y3QgZHB1 X2h3X3JvdCAqaHcpCj4gLXsKPiAtCWlmICghaHcgfHwgIWh3LT5jYXBzIHx8ICFody0+Y2Fwcy0+ cGRldikgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbWV0ZXJcbiIpOwo+IC0JCXJldHVy bjsKPiAtCX0KPiAtCj4gLQlkcHVfcm90YXRvcl9pbmxpbmVfcmVsZWFzZShody0+cm90X2N0eCk7 Cj4gLQlody0+cm90X2N0eCA9IE5VTEw7Cj4gLQo+IC0JZHB1X2RiZ19yZWdfdW5yZWdpc3Rlcl9j Yihody0+bmFtZSwgX2RwdV9od19yb3RfcmVnX2R1bXAsCj4gLQkJCWh3LT5jYXBzLT5wZGV2KTsK PiAtfQo+IC0KPiAtLyoqCj4gLSAqIGRwdV9od19yb3RfdG9fdjRsMl9waXhmbXQgLSBjb252ZXJ0 IGRybSBwaXhlbCBmb3JtYXQgdG8gdjRsMiBwaXhlbCBmb3JtYXQKPiAtICogQGRybV9waXhmbXQ6 IGRybSBmb3VyY2MgcGl4ZWwgZm9ybWF0Cj4gLSAqIEBkcm1fbW9kaWZpZXI6IGRybSBwaXhlbCBm b3JtYXQgbW9kaWZpZXIKPiAtICogQHBpeGZtdDogUG9pbnRlciB0byB2NGwyIGZvdXJjYyBwaXhl bCBmb3JtYXQgKG91dHB1dCkKPiAtICogcmV0dXJuOiAwIGlmIHN1Y2Nlc3M7IGVycm9yIGNvZGUg b3RoZXJ3aXNlCj4gLSAqLwo+IC1zdGF0aWMgaW50IGRwdV9od19yb3RfdG9fdjRsMl9waXhmbXQo dTMyIGRybV9waXhmbXQsIHU2NCBkcm1fbW9kaWZpZXIsCj4gLQkJdTMyICpwaXhmbXQpCj4gLXsK PiAtCXUzMiByYyA9IDA7Cj4gLQo+IC0JaWYgKCFwaXhmbXQpCj4gLQkJcmV0dXJuIC1FSU5WQUw7 Cj4gLQo+IC0Jc3dpdGNoIChkcm1fcGl4Zm10KSB7Cj4gLQljYXNlIERSTV9GT1JNQVRfQkdSNTY1 Ogo+IC0JCWlmIChEUFVfTU9ESUZJRVJfSVNfVUJXQyhkcm1fbW9kaWZpZXIpKQo+IC0JCQkqcGl4 Zm10ID0gRFBVX1BJWF9GTVRfUkdCXzU2NV9VQldDOwo+IC0JCWVsc2UKPiAtCQkJKnBpeGZtdCA9 IERQVV9QSVhfRk1UX1JHQl81NjU7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9GT1JNQVRfQkdS QTg4ODg6Cj4gLQkJaWYgKERQVV9NT0RJRklFUl9JU19USUxFKGRybV9tb2RpZmllcikpCj4gLQkJ CSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9BUkdCXzg4ODhfVElMRTsKPiAtCQllbHNlCj4gLQkJCSpw aXhmbXQgPSBEUFVfUElYX0ZNVF9BUkdCXzg4ODg7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9G T1JNQVRfQkdSWDg4ODg6Cj4gLQkJaWYgKERQVV9NT0RJRklFUl9JU19USUxFKGRybV9tb2RpZmll cikpCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9YUkdCXzg4ODhfVElMRTsKPiAtCQllbHNl Cj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9YUkdCXzg4ODg7Cj4gLQkJYnJlYWs7Cj4gLQlj YXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6Cj4gLQkJaWYgKERQVV9NT0RJRklFUl9JU19USUxFKGRy bV9tb2RpZmllcikpCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9BQkdSXzg4ODhfVElMRTsK PiAtCQllbHNlCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9BQkdSXzg4ODg7Cj4gLQkJYnJl YWs7Cj4gLQljYXNlIERSTV9GT1JNQVRfUkdCWDg4ODg6Cj4gLQkJaWYgKERQVV9NT0RJRklFUl9J U19USUxFKGRybV9tb2RpZmllcikpCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9YQkdSXzg4 ODhfVElMRTsKPiAtCQllbHNlCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9YQkdSXzg4ODg7 Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Cj4gLQkJaWYgKERQVV9N T0RJRklFUl9JU19VQldDKGRybV9tb2RpZmllcikpCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZN VF9SR0JBXzg4ODhfVUJXQzsKPiAtCQllbHNlIGlmIChEUFVfTU9ESUZJRVJfSVNfVElMRShkcm1f bW9kaWZpZXIpKQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfUkdCQV84ODg4X1RJTEU7Cj4g LQkJZWxzZQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfUkdCQV84ODg4Owo+IC0JCWJyZWFr Owo+IC0JY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogo+IC0JCWlmIChEUFVfTU9ESUZJRVJfSVNf VUJXQyhkcm1fbW9kaWZpZXIpKQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfUkdCWF84ODg4 X1VCV0M7Cj4gLQkJZWxzZSBpZiAoRFBVX01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkK PiAtCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1JHQlhfODg4OF9USUxFOwo+IC0JCWVsc2UKPiAt CQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1JHQlhfODg4ODsKPiAtCQlicmVhazsKPiAtCWNhc2Ug RFJNX0ZPUk1BVF9BUkdCODg4ODoKPiAtCQlpZiAoRFBVX01PRElGSUVSX0lTX1RJTEUoZHJtX21v ZGlmaWVyKSkKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0JHUkFfODg4OF9USUxFOwo+IC0J CWVsc2UKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0JHUkFfODg4ODsKPiAtCQlicmVhazsK PiAtCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiAtCQlpZiAoRFBVX01PRElGSUVSX0lTX1RJ TEUoZHJtX21vZGlmaWVyKSkKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0JHUlhfODg4OF9U SUxFOwo+IC0JCWVsc2UKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0JHUlhfODg4ODsKPiAt CQlicmVhazsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgo+IC0JCWlmIChEUFVfTU9ESUZJRVJf SVNfVUJXQyhkcm1fbW9kaWZpZXIpKSB7Cj4gLQkJCWlmIChEUFVfTU9ESUZJRVJfSVNfMTBCKGRy bV9tb2RpZmllcikpIHsKPiAtCQkJCWlmIChEUFVfTU9ESUZJRVJfSVNfVElHSFQoZHJtX21vZGlm aWVyKSkKPiAtCQkJCQkqcGl4Zm10ID0KPiAtCQkJCQlEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9U UDEwX1VCV0M7Cj4gLQkJCQllbHNlCj4gLQkJCQkJKnBpeGZtdCA9Cj4gLQkJCQkJRFBVX1BJWF9G TVRfWV9DQkNSX0gyVjJfUDAxMF9VQldDOwo+IC0JCQl9IGVsc2Ugewo+IC0JCQkJKnBpeGZtdCA9 IERQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyX1VCV0M7Cj4gLQkJCX0KPiAtCQl9IGVsc2UgaWYgKERQ VV9NT0RJRklFUl9JU19USUxFKGRybV9tb2RpZmllcikpIHsKPiAtCQkJaWYgKERQVV9NT0RJRklF Ul9JU18xMEIoZHJtX21vZGlmaWVyKSkgewo+IC0JCQkJaWYgKERQVV9NT0RJRklFUl9JU19USUdI VChkcm1fbW9kaWZpZXIpKQo+IC0JCQkJCSpwaXhmbXQgPQo+IC0JCQkJCURQVV9QSVhfRk1UX1lf Q0JDUl9IMlYyX1RQMTA7Cj4gLQkJCQllbHNlCj4gLQkJCQkJKnBpeGZtdCA9Cj4gLQkJCQkJRFBV X1BJWF9GTVRfWV9DQkNSX0gyVjJfUDAxMF9USUxFOwo+IC0JCQl9IGVsc2Ugewo+IC0JCQkJKnBp eGZtdCA9IERQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyX1RJTEU7Cj4gLQkJCX0KPiAtCQl9IGVsc2Ug ewo+IC0JCQlpZiAoRFBVX01PRElGSUVSX0lTXzEwQihkcm1fbW9kaWZpZXIpKSB7Cj4gLQkJCQlp ZiAoRFBVX01PRElGSUVSX0lTX1RJR0hUKGRybV9tb2RpZmllcikpCj4gLQkJCQkJKnBpeGZtdCA9 Cj4gLQkJCQkJRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjJfVFAxMDsKPiAtCQkJCWVsc2UKPiAtCQkJ CQkqcGl4Zm10ID0KPiAtCQkJCQlEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9QMDEwOwo+IC0JCQl9 IGVsc2Ugewo+IC0JCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyOwo+IC0JCQl9 Cj4gLQkJfQo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUk1fRk9STUFUX05WMjE6Cj4gLQkJaWYgKERQ VV9NT0RJRklFUl9JU19USUxFKGRybV9tb2RpZmllcikpCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElY X0ZNVF9ZX0NSQ0JfSDJWMl9USUxFOwo+IC0JCWVsc2UKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhf Rk1UX1lfQ1JDQl9IMlYyOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUk1fRk9STUFUX0JHUkExMDEw MTAyOgo+IC0JCWlmIChEUFVfTU9ESUZJRVJfSVNfVElMRShkcm1fbW9kaWZpZXIpKQo+IC0JCQkq cGl4Zm10ID0gRFBVX1BJWF9GTVRfQVJHQl8yMTAxMDEwX1RJTEU7Cj4gLQkJZWxzZQo+IC0JCQkq cGl4Zm10ID0gRFBVX1BJWF9GTVRfQVJHQl8yMTAxMDEwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBE Uk1fRk9STUFUX0JHUlgxMDEwMTAyOgo+IC0JCWlmIChEUFVfTU9ESUZJRVJfSVNfVElMRShkcm1f bW9kaWZpZXIpKQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfWFJHQl8yMTAxMDEwX1RJTEU7 Cj4gLQkJZWxzZQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfWFJHQl8yMTAxMDEwOwo+IC0J CWJyZWFrOwo+IC0JY2FzZSBEUk1fRk9STUFUX1JHQkExMDEwMTAyOgo+IC0JCWlmIChEUFVfTU9E SUZJRVJfSVNfVElMRShkcm1fbW9kaWZpZXIpKQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRf QUJHUl8yMTAxMDEwX1RJTEU7Cj4gLQkJZWxzZQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRf QUJHUl8yMTAxMDEwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUk1fRk9STUFUX1JHQlgxMDEwMTAy Ogo+IC0JCWlmIChEUFVfTU9ESUZJRVJfSVNfVElMRShkcm1fbW9kaWZpZXIpKQo+IC0JCQkqcGl4 Zm10ID0gRFBVX1BJWF9GTVRfWEJHUl8yMTAxMDEwX1RJTEU7Cj4gLQkJZWxzZQo+IC0JCQkqcGl4 Zm10ID0gRFBVX1BJWF9GTVRfWEJHUl8yMTAxMDEwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUk1f Rk9STUFUX0FSR0IyMTAxMDEwOgo+IC0JCWlmIChEUFVfTU9ESUZJRVJfSVNfVElMRShkcm1fbW9k aWZpZXIpKQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfQkdSQV8xMDEwMTAyX1RJTEU7Cj4g LQkJZWxzZQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfQkdSQV8xMDEwMTAyOwo+IC0JCWJy ZWFrOwo+IC0JY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgo+IC0JCWlmIChEUFVfTU9ESUZJ RVJfSVNfVElMRShkcm1fbW9kaWZpZXIpKQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfQkdS WF8xMDEwMTAyX1RJTEU7Cj4gLQkJZWxzZQo+IC0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfQkdS WF8xMDEwMTAyOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgo+ IC0JCWlmIChEUFVfTU9ESUZJRVJfSVNfVUJXQyhkcm1fbW9kaWZpZXIpKQo+IC0JCQkqcGl4Zm10 ID0gRFBVX1BJWF9GTVRfUkdCQV8xMDEwMTAyX1VCV0M7Cj4gLQkJZWxzZSBpZiAoRFBVX01PRElG SUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1JH QkFfMTAxMDEwMl9USUxFOwo+IC0JCWVsc2UKPiAtCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1JH QkFfMTAxMDEwMjsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoK PiAtCQlpZiAoRFBVX01PRElGSUVSX0lTX1VCV0MoZHJtX21vZGlmaWVyKSkKPiAtCQkJKnBpeGZt dCA9IERQVV9QSVhfRk1UX1JHQlhfMTAxMDEwMl9VQldDOwo+IC0JCWVsc2UgaWYgKERQVV9NT0RJ RklFUl9JU19USUxFKGRybV9tb2RpZmllcikpCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9S R0JYXzEwMTAxMDJfVElMRTsKPiAtCQllbHNlCj4gLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9S R0JYXzEwMTAxMDI7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCURQVV9FUlJPUigiaW52 YWxpZCBkcm0gcGl4ZWwgZm9ybWF0ICVjJWMlYyVjLyVsbHhcbiIsCj4gLQkJCQlkcm1fcGl4Zm10 ID4+IDAsIGRybV9waXhmbXQgPj4gOCwKPiAtCQkJCWRybV9waXhmbXQgPj4gMTYsIGRybV9waXhm bXQgPj4gMjQsCj4gLQkJCQlkcm1fbW9kaWZpZXIpOwo+IC0JCXJjID0gLUVJTlZBTDsKPiAtCQli cmVhazsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gcmM7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBkcHVf aHdfcm90X3RvX2RybV9waXhmbXQgLSBjb252ZXJ0IHY0bDIgcGl4ZWwgZm9ybWF0IHRvIGRybSBw aXhlbCBmb3JtYXQKPiAtICogQHBpeGZtdDogdjRsMiBmb3VyY2MgcGl4ZWwgZm9ybWF0Cj4gLSAq IEBkcm1fcGl4Zm10OiBQb2ludGVyIHRvIGRybSBmb3J1Y2MgcGl4ZWwgZm9ybWF0IChvdXRwdXQp Cj4gLSAqIEBkcm1fbW9kaWZpZXI6IFBvaW50ZXIgdG8gZHJtIHBpeGVsIGZvcm1hdCBtb2RpZmll ciAob3V0cHV0KQo+IC0gKiByZXR1cm46IDAgaWYgc3VjY2VzczsgZXJyb3IgY29kZSBvdGhlcndp c2UKPiAtICovCj4gLXN0YXRpYyBpbnQgZHB1X2h3X3JvdF90b19kcm1fcGl4Zm10KHUzMiBwaXhm bXQsIHUzMiAqZHJtX3BpeGZtdCwKPiAtCQl1NjQgKmRybV9tb2RpZmllcikKPiAtewo+IC0JdTMy IHJjID0gMDsKPiAtCj4gLQlzd2l0Y2ggKHBpeGZtdCkgewo+IC0JY2FzZSBEUFVfUElYX0ZNVF9S R0JfNTY1Ogo+IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9CR1I1NjU7Cj4gLQkJKmRybV9t b2RpZmllciA9IDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX1JHQl81NjVfVUJX QzoKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfQkdSNTY1Owo+IC0JCSpkcm1fbW9kaWZp ZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX0NPTVBSRVNTRUQgfAo+IC0JCQkJRFJNX0ZPUk1BVF9N T0RfUUNPTV9USUxFOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9SR0JBXzg4ODg6 Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX0FCR1I4ODg4Owo+IC0JCSpkcm1fbW9kaWZp ZXIgPSAwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9SR0JYXzg4ODg6Cj4gLQkJ KmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1hCR1I4ODg4Owo+IC0JCSpkcm1fbW9kaWZpZXIgPSAw Owo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9CR1JBXzg4ODg6Cj4gLQkJKmRybV9w aXhmbXQgPSBEUk1fRk9STUFUX0FSR0I4ODg4Owo+IC0JCSpkcm1fbW9kaWZpZXIgPSAwOwo+IC0J CWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9CR1JYXzg4ODg6Cj4gLQkJKmRybV9waXhmbXQg PSBEUk1fRk9STUFUX1hSR0I4ODg4Owo+IC0JCSpkcm1fbW9kaWZpZXIgPSAwOwo+IC0JCWJyZWFr Owo+IC0JY2FzZSBEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9VQldDOgo+IC0JCSpkcm1fcGl4Zm10 ID0gRFJNX0ZPUk1BVF9OVjEyOwo+IC0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9R Q09NX0NPTVBSRVNTRUQgfAo+IC0JCQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwo+IC0JCWJy ZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9ZX0NSQ0JfSDJWMjoKPiAtCQkqZHJtX3BpeGZtdCA9 IERSTV9GT1JNQVRfTlYyMTsKPiAtCQkqZHJtX21vZGlmaWVyID0gMDsKPiAtCQlicmVhazsKPiAt CWNhc2UgRFBVX1BJWF9GTVRfUkdCQV84ODg4X1VCV0M6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1f Rk9STUFUX0FCR1I4ODg4Owo+IC0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09N X0NPTVBSRVNTRUQgfAo+IC0JCQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwo+IC0JCWJyZWFr Owo+IC0JY2FzZSBEUFVfUElYX0ZNVF9SR0JYXzg4ODhfVUJXQzoKPiAtCQkqZHJtX3BpeGZtdCA9 IERSTV9GT1JNQVRfWEJHUjg4ODg7Cj4gLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9E X1FDT01fQ09NUFJFU1NFRCB8Cj4gLQkJCQlEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Cj4gLQkJ YnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyOgo+IC0JCSpkcm1fcGl4Zm10 ID0gRFJNX0ZPUk1BVF9OVjEyOwo+IC0JCSpkcm1fbW9kaWZpZXIgPSAwOwo+IC0JCWJyZWFrOwo+ IC0JY2FzZSBEUFVfUElYX0ZNVF9BUkdCXzg4ODg6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9S TUFUX0JHUkE4ODg4Owo+IC0JCSpkcm1fbW9kaWZpZXIgPSAwOwo+IC0JCWJyZWFrOwo+IC0JY2Fz ZSBEUFVfUElYX0ZNVF9YUkdCXzg4ODg6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX0JH Ulg4ODg4Owo+IC0JCSpkcm1fbW9kaWZpZXIgPSAwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVf UElYX0ZNVF9BQkdSXzg4ODg6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1JHQkE4ODg4 Owo+IC0JCSpkcm1fbW9kaWZpZXIgPSAwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZN VF9YQkdSXzg4ODg6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1JHQlg4ODg4Owo+IC0J CSpkcm1fbW9kaWZpZXIgPSAwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9BUkdC XzIxMDEwMTA6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX0JHUkExMDEwMTAyOwo+IC0J CSpkcm1fbW9kaWZpZXIgPSAwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9YUkdC XzIxMDEwMTA6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX0JHUlgxMDEwMTAyOwo+IC0J CSpkcm1fbW9kaWZpZXIgPSAwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9BQkdS XzIxMDEwMTA6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1JHQkExMDEwMTAyOwo+IC0J CSpkcm1fbW9kaWZpZXIgPSAwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9YQkdS XzIxMDEwMTA6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1JHQlgxMDEwMTAyOwo+IC0J CSpkcm1fbW9kaWZpZXIgPSAwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9CR1JB XzEwMTAxMDI6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOwo+IC0J CSpkcm1fbW9kaWZpZXIgPSAwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9CR1JY XzEwMTAxMDI6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOwo+IC0J CSpkcm1fbW9kaWZpZXIgPSAwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9SR0JB Xzg4ODhfVElMRToKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfQUJHUjg4ODg7Cj4gLQkJ KmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKPiAtCQlicmVhazsKPiAt CWNhc2UgRFBVX1BJWF9GTVRfUkdCWF84ODg4X1RJTEU6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1f Rk9STUFUX1hCR1I4ODg4Owo+IC0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09N X1RJTEU7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX0JHUkFfODg4OF9USUxFOgo+ IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9BUkdCODg4ODsKPiAtCQkqZHJtX21vZGlmaWVy ID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElY X0ZNVF9CR1JYXzg4ODhfVElMRToKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfWFJHQjg4 ODg7Cj4gLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKPiAtCQli cmVhazsKPiAtCWNhc2UgRFBVX1BJWF9GTVRfWV9DUkNCX0gyVjJfVElMRToKPiAtCQkqZHJtX3Bp eGZtdCA9IERSTV9GT1JNQVRfTlYyMTsKPiAtCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9N T0RfUUNPTV9USUxFOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJW Ml9USUxFOgo+IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9OVjEyOwo+IC0JCSpkcm1fbW9k aWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQ VV9QSVhfRk1UX0FSR0JfODg4OF9USUxFOgo+IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9C R1JBODg4ODsKPiAtCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwo+ IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9YUkdCXzg4ODhfVElMRToKPiAtCQkqZHJt X3BpeGZtdCA9IERSTV9GT1JNQVRfQkdSWDg4ODg7Cj4gLQkJKmRybV9tb2RpZmllciA9IERSTV9G T1JNQVRfTU9EX1FDT01fVElMRTsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFBVX1BJWF9GTVRfQUJH Ul84ODg4X1RJTEU6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1JHQkE4ODg4Owo+IC0J CSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Cj4gLQkJYnJlYWs7Cj4g LQljYXNlIERQVV9QSVhfRk1UX1hCR1JfODg4OF9USUxFOgo+IC0JCSpkcm1fcGl4Zm10ID0gRFJN X0ZPUk1BVF9SR0JYODg4ODsKPiAtCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNP TV9USUxFOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9BUkdCXzIxMDEwMTBfVElM RToKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfQkdSQTEwMTAxMDI7Cj4gLQkJKmRybV9t b2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKPiAtCQlicmVhazsKPiAtCWNhc2Ug RFBVX1BJWF9GTVRfWFJHQl8yMTAxMDEwX1RJTEU6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9S TUFUX0JHUlgxMDEwMTAyOwo+IC0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09N X1RJTEU7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX0FCR1JfMjEwMTAxMF9USUxF Ogo+IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9SR0JBMTAxMDEwMjsKPiAtCQkqZHJtX21v ZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBE UFVfUElYX0ZNVF9YQkdSXzIxMDEwMTBfVElMRToKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JN QVRfUkdCWDEwMTAxMDI7Cj4gLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01f VElMRTsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFBVX1BJWF9GTVRfQkdSQV8xMDEwMTAyX1RJTEU6 Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOwo+IC0JCSpkcm1fbW9k aWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQ VV9QSVhfRk1UX0JHUlhfMTAxMDEwMl9USUxFOgo+IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1B VF9YUkdCMjEwMTAxMDsKPiAtCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9U SUxFOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfUElYX0ZNVF9SR0JBXzEwMTAxMDJfVUJXQzoK PiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfQUJHUjIxMDEwMTA7Cj4gLQkJKmRybV9tb2Rp ZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NFRCB8Cj4gLQkJCQlEUk1fRk9STUFU X01PRF9RQ09NX1RJTEU7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX1JHQlhfMTAx MDEwMl9VQldDOgo+IC0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDsKPiAt CQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9DT01QUkVTU0VEIHwKPiAtCQkJ CURSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFBVX1BJWF9G TVRfWV9DQkNSX0gyVjJfUDAxMDoKPiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfTlYxMjsK PiAtCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9EWDsKPiAtCQlicmVhazsK PiAtCWNhc2UgRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjJfUDAxMF9USUxFOgo+IC0JCSpkcm1fcGl4 Zm10ID0gRFJNX0ZPUk1BVF9OVjEyOwo+IC0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01P RF9RQ09NX1RJTEUgfAo+IC0JCQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9EWDsKPiAtCQlicmVhazsK PiAtCWNhc2UgRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjJfUDAxMF9VQldDOgo+IC0JCSpkcm1fcGl4 Zm10ID0gRFJNX0ZPUk1BVF9OVjEyOwo+IC0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01P RF9RQ09NX0NPTVBSRVNTRUQgfAo+IC0JCQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFIHwKPiAt CQkJCURSTV9GT1JNQVRfTU9EX1FDT01fRFg7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhf Rk1UX1lfQ0JDUl9IMlYyX1RQMTA6Cj4gLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX05WMTI7 Cj4gLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRSB8Cj4gLQkJCQlE Uk1fRk9STUFUX01PRF9RQ09NX0RYIHwKPiAtCQkJCURSTV9GT1JNQVRfTU9EX1FDT01fVElHSFQ7 Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyX1RQMTBfVUJXQzoK PiAtCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfTlYxMjsKPiAtCQkqZHJtX21vZGlmaWVyID0g RFJNX0ZPUk1BVF9NT0RfUUNPTV9DT01QUkVTU0VEIHwKPiAtCQkJCURSTV9GT1JNQVRfTU9EX1FD T01fVElMRSB8Cj4gLQkJCQlEUk1fRk9STUFUX01PRF9RQ09NX0RYIHwKPiAtCQkJCURSTV9GT1JN QVRfTU9EX1FDT01fVElHSFQ7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCURQVV9ERUJV RygiaW52YWxpZCB2NGwyIHBpeGVsIGZvcm1hdCAlYyVjJWMlY1xuIiwKPiAtCQkJCXBpeGZtdCA+ PiAwLCBwaXhmbXQgPj4gOCwKPiAtCQkJCXBpeGZtdCA+PiAxNiwgcGl4Zm10ID4+IDI0KTsKPiAt CQlyYyA9IC1FSU5WQUw7Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIHJjOwo+IC19 Cj4gLQo+IC0vKioKPiAtICogZHB1X2h3X3JvdF90b192NGwyX2J1ZmZlciAtIGNvbnZlcnQgZHJt IGJ1ZmZlciB0byB2NGwyIGJ1ZmZlcgo+IC0gKiBAZHJtX3BpeGZtdDogcGl4ZWwgZm9ybWF0IGlu IGRybSBmb3VyY2MKPiAtICogQGRybV9tb2RpZmllcjogcGl4ZWwgZm9ybWF0IG1vZGlmaWVyCj4g LSAqIEBkcm1fYWRkcjogZHJtIGJ1ZmZlciBhZGRyZXNzIHBlciBwbGFuZQo+IC0gKiBAZHJtX2xl bjogZHJtIGJ1ZmZlciBsZW5ndGggcGVyIHBsYW5lCj4gLSAqIEBkcm1fcGxhbmVzOiBkcm0gYnVm ZmVyIG51bWJlciBvZiBwbGFuZXMKPiAtICogQHY0bF9hZGRyOiB2NGwyIGJ1ZmZlciBhZGRyZXNz IHBlciBwbGFuZQo+IC0gKiBAdjRsX2xlbjogdjRsMiBidWZmZXIgbGVuZ3RoIHBlciBwbGFuZQo+ IC0gKiBAdjRsX3BsYW5lczogdjRsMiBidWZmZXIgbnVtYmVyIG9mIHBsYW5lcwo+IC0gKi8KPiAt c3RhdGljIHZvaWQgZHB1X2h3X3JvdF90b192NGwyX2J1ZmZlcih1MzIgZHJtX3BpeGZtdCwgdTY0 IGRybV9tb2RpZmllciwKPiAtCQlkbWFfYWRkcl90ICpkcm1fYWRkciwgdTMyICpkcm1fbGVuLCB1 MzIgKmRybV9wbGFuZXMsCj4gLQkJZG1hX2FkZHJfdCAqdjRsX2FkZHIsIHUzMiAqdjRsX2xlbiwg dTMyICp2NGxfcGxhbmVzKQo+IC17Cj4gLQlpbnQgaSwgdG90YWxfc2l6ZSA9IDA7Cj4gLQo+IC0J Zm9yIChpID0gMDsgaSA8IERQVV9ST1RBVE9SX0lOTElORV9QTEFORV9NQVg7IGkrKykgewo+IC0J CXY0bF9hZGRyW2ldID0gZHJtX2FkZHJbaV07Cj4gLQkJdjRsX2xlbltpXSA9IGRybV9sZW5baV07 Cj4gLQkJdG90YWxfc2l6ZSArPSBkcm1fbGVuW2ldOwo+IC0JCURQVV9ERUJVRygiZHJtWyVkXTol cGFkLyV4XG4iLCBpLCAmZHJtX2FkZHJbaV0sIGRybV9sZW5baV0pOwo+IC0JfQo+IC0KPiAtCWlm IChEUFVfTU9ESUZJRVJfSVNfVUJXQyhkcm1fbW9kaWZpZXIpKSB7Cj4gLQkJLyogdjRsMiBkcml2 ZXIgdXNlcyBwbGFuZVswXSBhcyBzaW5nbGUgdWJ3YyBidWZmZXIgcGxhbmUgKi8KPiAtCQl2NGxf YWRkclswXSA9IGRybV9hZGRyWzJdOwo+IC0JCXY0bF9sZW5bMF0gPSB0b3RhbF9zaXplOwo+IC0J CSp2NGxfcGxhbmVzID0gMTsKPiAtCQlEUFVfREVCVUcoInY0bDJbMF06JXBhZC8leC8lZFxuIiwg JnY0bF9hZGRyWzBdLCB2NGxfbGVuWzBdLAo+IC0JCQkJKnY0bF9wbGFuZXMpOwo+IC0JfSBlbHNl IHsKPiAtCQkqdjRsX3BsYW5lcyA9ICpkcm1fcGxhbmVzOwo+IC0JfQo+IC19Cj4gLQo+IC0vKioK PiAtICogZHB1X2h3X3JvdF9jb21taXQgLSBjb21taXQvZXhlY3V0ZSBnaXZlbiByb3RhdG9yIGNv bW1hbmQKPiAtICogQGh3OiBQb2ludGVyIHRvIHJvdGF0b3IgaGFyZHdhcmUgZHJpdmVyCj4gLSAq IEBkYXRhOiBQb2ludGVyIHRvIGNvbW1hbmQgZGVzY3JpcHRvcgo+IC0gKiBAaHdfY21kOiB0eXBl IG9mIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQKPiAtICogcmV0dXJuOiAwIGlmIHN1Y2Nlc3M7IGVy cm9yIGNvZGUgb3RoZXJ3aXNlCj4gLSAqLwo+IC1zdGF0aWMgaW50IGRwdV9od19yb3RfY29tbWl0 KHN0cnVjdCBkcHVfaHdfcm90ICpodywgc3RydWN0IGRwdV9od19yb3RfY21kICpkYXRhLAo+IC0J CWVudW0gZHB1X2h3X3JvdF9jbWRfdHlwZSBod19jbWQpCj4gLXsKPiAtCXN0cnVjdCBkcHVfcm90 YXRvcl9pbmxpbmVfY21kIHJvdF9jbWQ7Cj4gLQllbnVtIGRwdV9yb3RhdG9yX2lubGluZV9jbWRf dHlwZSBjbWRfdHlwZTsKPiAtCXZvaWQgKnByaXZfaGFuZGxlID0gTlVMTDsKPiAtCWludCByYzsK PiAtCj4gLQlpZiAoIWh3IHx8ICFkYXRhKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFt ZXRlclxuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JbWVtc2V0KCZyb3Rf Y21kLCAwLCBzaXplb2Yoc3RydWN0IGRwdV9yb3RhdG9yX2lubGluZV9jbWQpKTsKPiAtCj4gLQlz d2l0Y2ggKGh3X2NtZCkgewo+IC0JY2FzZSBEUFVfSFdfUk9UX0NNRF9WQUxJREFURToKPiAtCQlj bWRfdHlwZSA9IERQVV9ST1RBVE9SX0lOTElORV9DTURfVkFMSURBVEU7Cj4gLQkJYnJlYWs7Cj4g LQljYXNlIERQVV9IV19ST1RfQ01EX0NPTU1JVDoKPiAtCQljbWRfdHlwZSA9IERQVV9ST1RBVE9S X0lOTElORV9DTURfQ09NTUlUOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUFVfSFdfUk9UX0NNRF9T VEFSVDoKPiAtCQljbWRfdHlwZSA9IERQVV9ST1RBVE9SX0lOTElORV9DTURfU1RBUlQ7Cj4gLQkJ cHJpdl9oYW5kbGUgPSBkYXRhLT5wcml2X2hhbmRsZTsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFBV X0hXX1JPVF9DTURfQ0xFQU5VUDoKPiAtCQljbWRfdHlwZSA9IERQVV9ST1RBVE9SX0lOTElORV9D TURfQ0xFQU5VUDsKPiAtCQlwcml2X2hhbmRsZSA9IGRhdGEtPnByaXZfaGFuZGxlOwo+IC0JCWJy ZWFrOwo+IC0JZGVmYXVsdDoKPiAtCQlEUFVfRVJST1IoImludmFsaWQgaHcgcm90YXRvciBjb21t YW5kICVkXG4iLCBod19jbWQpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCXJv dF9jbWQuc2VxdWVuY2VfaWQgPSBkYXRhLT5zZXF1ZW5jZV9pZDsKPiAtCXJvdF9jbWQudmlkZW9f bW9kZSA9IGRhdGEtPnZpZGVvX21vZGU7Cj4gLQlyb3RfY21kLmZwcyA9IGRhdGEtPmZwczsKPiAt Cj4gLQkvKgo+IC0JICogRFJNIHJvdGF0aW9uIHByb3BlcnR5IGlzIHNwZWNpZmllZCBpbiBjb3Vu dGVyIGNsb2Nrd2lzZSBkaXJlY3Rpb24KPiAtCSAqIHdoZXJlYXMgcm90YXRvciBoL3cgcm90YXRl cyBpbiBjbG9ja3dpc2UgZGlyZWN0aW9uLgo+IC0JICogQ29udmVydCByb3RhdGlvbiBwcm9wZXJ0 eSB0byBjbG9ja3dpc2UgOTAgYnkgdG9nZ2xpbmcgaC92IGZsaXAKPiAtCSAqLwo+IC0Jcm90X2Nt ZC5yb3Q5MCA9IGRhdGEtPnJvdDkwOwo+IC0Jcm90X2NtZC5oZmxpcCA9IGRhdGEtPnJvdDkwID8g IWRhdGEtPmhmbGlwIDogZGF0YS0+aGZsaXA7Cj4gLQlyb3RfY21kLnZmbGlwID0gZGF0YS0+cm90 OTAgPyAhZGF0YS0+dmZsaXAgOiBkYXRhLT52ZmxpcDsKPiAtCj4gLQlyb3RfY21kLmNsa3JhdGUg PSBkYXRhLT5jbGtyYXRlOwo+IC0Jcm90X2NtZC5kYXRhX2J3ID0gMDsKPiAtCXJvdF9jbWQucHJl ZmlsbF9idyA9IGRhdGEtPnByZWZpbGxfYnc7Cj4gLQlyb3RfY21kLnNyY193aWR0aCA9IGRhdGEt PnNyY193aWR0aDsKPiAtCXJvdF9jbWQuc3JjX2hlaWdodCA9IGRhdGEtPnNyY19oZWlnaHQ7Cj4g LQlyb3RfY21kLnNyY19yZWN0X3ggPSBkYXRhLT5zcmNfcmVjdF94Owo+IC0Jcm90X2NtZC5zcmNf cmVjdF95ID0gZGF0YS0+c3JjX3JlY3RfeTsKPiAtCXJvdF9jbWQuc3JjX3JlY3RfdyA9IGRhdGEt PnNyY19yZWN0X3c7Cj4gLQlyb3RfY21kLnNyY19yZWN0X2ggPSBkYXRhLT5zcmNfcmVjdF9oOwo+ IC0Jcm90X2NtZC5kc3Rfd3JpdGViYWNrID0gZGF0YS0+ZHN0X3dyaXRlYmFjazsKPiAtCXJvdF9j bWQuZHN0X3JlY3RfeCA9IGRhdGEtPmRzdF9yZWN0X3g7Cj4gLQlyb3RfY21kLmRzdF9yZWN0X3kg PSBkYXRhLT5kc3RfcmVjdF95Owo+IC0Jcm90X2NtZC5kc3RfcmVjdF93ID0gZGF0YS0+ZHN0X3Jl Y3RfdzsKPiAtCXJvdF9jbWQuZHN0X3JlY3RfaCA9IGRhdGEtPmRzdF9yZWN0X2g7Cj4gLQlyb3Rf Y21kLnByaXZfaGFuZGxlID0gcHJpdl9oYW5kbGU7Cj4gLQo+IC0JcmMgPSBkcHVfaHdfcm90X3Rv X3Y0bDJfcGl4Zm10KGRhdGEtPnNyY19waXhlbF9mb3JtYXQsCj4gLQkJCWRhdGEtPnNyY19tb2Rp ZmllciwgJnJvdF9jbWQuc3JjX3BpeGZtdCk7Cj4gLQlpZiAocmMpIHsKPiAtCQlEUFVfRVJST1Io ImludmFsaWQgc3JjIGZvcm1hdCAlZFxuIiwgcmMpOwo+IC0JCXJldHVybiByYzsKPiAtCX0KPiAt Cj4gLQkvKiBjYWxjdWxhdGUgcHJlZmVycmVkIG91dHB1dCBmb3JtYXQgZHVyaW5nIHZhbGlkYXRp b24gKi8KPiAtCWlmIChod19jbWQgPT0gRFBVX0hXX1JPVF9DTURfVkFMSURBVEUpIHsKPiAtCQly YyA9IGRwdV9yb3RhdG9yX2lubGluZV9nZXRfZHN0X3BpeGZtdChody0+Y2Fwcy0+cGRldiwKPiAt CQkJCXJvdF9jbWQuc3JjX3BpeGZtdCwgJnJvdF9jbWQuZHN0X3BpeGZtdCk7Cj4gLQkJaWYgKHJj KSB7Cj4gLQkJCURQVV9FUlJPUigiaW52YWxpZCBzcmMgZm9ybWF0ICVkXG4iLCByYyk7Cj4gLQkJ CXJldHVybiByYzsKPiAtCQl9Cj4gLQo+IC0JCXJjID0gZHB1X2h3X3JvdF90b19kcm1fcGl4Zm10 KHJvdF9jbWQuZHN0X3BpeGZtdCwKPiAtCQkJCSZkYXRhLT5kc3RfcGl4ZWxfZm9ybWF0LCAmZGF0 YS0+ZHN0X21vZGlmaWVyKTsKPiAtCQlpZiAocmMpIHsKPiAtCQkJRFBVX0VSUk9SKCJpbnZhbGlk IGRzdCBmb3JtYXQgJWMlYyVjJWNcbiIsCj4gLQkJCQkJcm90X2NtZC5kc3RfcGl4Zm10ID4+IDAs Cj4gLQkJCQkJcm90X2NtZC5kc3RfcGl4Zm10ID4+IDgsCj4gLQkJCQkJcm90X2NtZC5kc3RfcGl4 Zm10ID4+IDE2LAo+IC0JCQkJCXJvdF9jbWQuZHN0X3BpeGZtdCA+PiAyNCk7Cj4gLQkJCXJldHVy biByYzsKPiAtCQl9Cj4gLQo+IC0JCWRhdGEtPmRzdF9mb3JtYXQgPSBkcHVfZ2V0X2RwdV9mb3Jt YXRfZXh0KAo+IC0JCQkJZGF0YS0+ZHN0X3BpeGVsX2Zvcm1hdCwgZGF0YS0+ZHN0X21vZGlmaWVy KTsKPiAtCQlpZiAoIWRhdGEtPmRzdF9mb3JtYXQpIHsKPiAtCQkJRFBVX0VSUk9SKCJmYWlsZWQg dG8gZ2V0IGRzdCBmb3JtYXRcbiIpOwo+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiAtCQl9Cj4gLQl9 IGVsc2Ugewo+IC0JCXJjID0gZHB1X2h3X3JvdF90b192NGwyX3BpeGZtdChkYXRhLT5kc3RfcGl4 ZWxfZm9ybWF0LAo+IC0JCQkJZGF0YS0+ZHN0X21vZGlmaWVyLCAmcm90X2NtZC5kc3RfcGl4Zm10 KTsKPiAtCQlpZiAocmMpIHsKPiAtCQkJRFBVX0VSUk9SKCJpbnZhbGlkIGRzdCBmb3JtYXQgJWRc biIsIHJjKTsKPiAtCQkJcmV0dXJuIHJjOwo+IC0JCX0KPiAtCj4gLQkJZHB1X2h3X3JvdF90b192 NGwyX2J1ZmZlcihkYXRhLT5zcmNfcGl4ZWxfZm9ybWF0LAo+IC0JCQkJZGF0YS0+c3JjX21vZGlm aWVyLAo+IC0JCQkJZGF0YS0+c3JjX2lvdmEsIGRhdGEtPnNyY19sZW4sCj4gLQkJCQkmZGF0YS0+ c3JjX3BsYW5lcywKPiAtCQkJCXJvdF9jbWQuc3JjX2FkZHIsIHJvdF9jbWQuc3JjX2xlbiwKPiAt CQkJCSZyb3RfY21kLnNyY19wbGFuZXMpOwo+IC0KPiAtCQlkcHVfaHdfcm90X3RvX3Y0bDJfYnVm ZmVyKGRhdGEtPmRzdF9waXhlbF9mb3JtYXQsCj4gLQkJCQlkYXRhLT5kc3RfbW9kaWZpZXIsCj4g LQkJCQlkYXRhLT5kc3RfaW92YSwgZGF0YS0+ZHN0X2xlbiwKPiAtCQkJCSZkYXRhLT5kc3RfcGxh bmVzLAo+IC0JCQkJcm90X2NtZC5kc3RfYWRkciwgcm90X2NtZC5kc3RfbGVuLAo+IC0JCQkJJnJv dF9jbWQuZHN0X3BsYW5lcyk7Cj4gLQl9Cj4gLQo+IC0JLyogb25seSBwcm9jZXNzIGFueSBjb21t YW5kIGlmIGNsaWVudCBpcyBtYXN0ZXIgb3IgZm9yIHZhbGlkYXRpb24gKi8KPiAtCWlmIChkYXRh LT5tYXN0ZXIgfHwgaHdfY21kID09IERQVV9IV19ST1RfQ01EX1ZBTElEQVRFKSB7Cj4gLQkJRFBV X0RFQlVHKCJkaXNwYXRjaCBzZXE6JWQgY21kOiVkXG4iLCBkYXRhLT5zZXF1ZW5jZV9pZCwKPiAt CQkJCWh3X2NtZCk7Cj4gLQo+IC0JCXJjID0gZHB1X3JvdGF0b3JfaW5saW5lX2NvbW1pdChody0+ cm90X2N0eCwgJnJvdF9jbWQsIGNtZF90eXBlKTsKPiAtCQlpZiAocmMpCj4gLQkJCXJldHVybiBy YzsKPiAtCj4gLQkJLyogcmV0dXJuIHRvIGNhbGxlciAqLwo+IC0JCWRhdGEtPnByaXZfaGFuZGxl ID0gcm90X2NtZC5wcml2X2hhbmRsZTsKPiAtCX0gZWxzZSB7Cj4gLQkJRFBVX0RFQlVHKCJieXBh c3Mgc2VxOiVkIGNtZDolZFxuIiwgZGF0YS0+c2VxdWVuY2VfaWQsIGh3X2NtZCk7Cj4gLQl9Cj4g LQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBkcHVfaHdfcm90X2dldF9mb3Jt YXRfY2FwcyAtIGdldCBwaXhlbCBmb3JtYXQgY2FwYWJpbGl0eQo+IC0gKiBAaHc6IFBvaW50ZXIg dG8gcm90YXRvciBoYXJkd2FyZSBkcml2ZXIKPiAtICogcmV0dXJuOiBQb2ludGVyIHRvIHBpeGVs IGZvcm1hdCBjYXBhYmlsaXR5IGFycmF5OiBOVUxMIG90aGVyd2lzZQo+IC0gKi8KPiAtc3RhdGlj IGNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0X2V4dGVuZGVkICpkcHVfaHdfcm90X2dldF9mb3JtYXRf Y2FwcygKPiAtCQlzdHJ1Y3QgZHB1X2h3X3JvdCAqaHcpCj4gLXsKPiAtCWludCByYywgaSwgaiwg bGVuOwo+IC0JdTMyICp2NGxfcGl4Zm10czsKPiAtCXN0cnVjdCBkcHVfZm9ybWF0X2V4dGVuZGVk ICpkcm1fcGl4Zm10czsKPiAtCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Cj4gLQo+IC0J aWYgKCFodyB8fCAhaHctPmNhcHMgfHwgIWh3LT5jYXBzLT5wZGV2KSB7Cj4gLQkJRFBVX0VSUk9S KCJpbnZhbGlkIHJvdGF0b3IgaHdcbiIpOwo+IC0JCXJldHVybiBOVUxMOwo+IC0JfQo+IC0KPiAt CXBkZXYgPSBody0+Y2Fwcy0+cGRldjsKPiAtCj4gLQlpZiAoaHctPmZvcm1hdF9jYXBzKQo+IC0J CXJldHVybiBody0+Zm9ybWF0X2NhcHM7Cj4gLQo+IC0JbGVuID0gZHB1X3JvdGF0b3JfaW5saW5l X2dldF9waXhmbXRfY2FwcyhwZGV2LCB0cnVlLCBOVUxMLCAwKTsKPiAtCWlmIChsZW4gPCAwKSB7 Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBpeGZtdCBjYXBzICVkXG4iLCBsZW4pOwo+IC0JCXJl dHVybiBOVUxMOwo+IC0JfQo+IC0KPiAtCXY0bF9waXhmbXRzID0ga2NhbGxvYyhsZW4sIHNpemVv Zih1MzIpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghdjRsX3BpeGZtdHMpCj4gLQkJZ290byBkb25l Owo+IC0KPiAtCWRwdV9yb3RhdG9yX2lubGluZV9nZXRfcGl4Zm10X2NhcHMocGRldiwgdHJ1ZSwg djRsX3BpeGZtdHMsIGxlbik7Cj4gLQo+IC0JLyogYWxsb2NhdGUgb25lIG1vcmUgdG8gaW5kaWNh dGUgdGVybWluYXRpb24gKi8KPiAtCWRybV9waXhmbXRzID0ga3phbGxvYygobGVuICsgMSkgKiBz aXplb2Yoc3RydWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQpLAo+IC0JCQlHRlBfS0VSTkVMKTsKPiAt CWlmICghZHJtX3BpeGZtdHMpCj4gLQkJZ290byBkb25lOwo+IC0KPiAtCWZvciAoaSA9IDAsIGog PSAwOyBpIDwgbGVuOyBpKyspIHsKPiAtCQlyYyA9IGRwdV9od19yb3RfdG9fZHJtX3BpeGZtdCh2 NGxfcGl4Zm10c1tpXSwKPiAtCQkJCSZkcm1fcGl4Zm10c1tqXS5mb3VyY2NfZm9ybWF0LAo+IC0J CQkJJmRybV9waXhmbXRzW2pdLm1vZGlmaWVyKTsKPiAtCQlpZiAoIXJjKSB7Cj4gLQkJCURQVV9E RUJVRygiJWQ6IHZsNDI6JWMlYyVjJWMgPT4gZHJtOiVjJWMlYyVjLzB4JWxseFxuIiwKPiAtCQkJ CWksIHY0bF9waXhmbXRzW2ldID4+IDAsIHY0bF9waXhmbXRzW2ldID4+IDgsCj4gLQkJCQl2NGxf cGl4Zm10c1tpXSA+PiAxNiwgdjRsX3BpeGZtdHNbaV0gPj4gMjQsCj4gLQkJCQlkcm1fcGl4Zm10 c1tqXS5mb3VyY2NfZm9ybWF0ID4+IDAsCj4gLQkJCQlkcm1fcGl4Zm10c1tqXS5mb3VyY2NfZm9y bWF0ID4+IDgsCj4gLQkJCQlkcm1fcGl4Zm10c1tqXS5mb3VyY2NfZm9ybWF0ID4+IDE2LAo+IC0J CQkJZHJtX3BpeGZtdHNbal0uZm91cmNjX2Zvcm1hdCA+PiAyNCwKPiAtCQkJCWRybV9waXhmbXRz W2pdLm1vZGlmaWVyKTsKPiAtCQkJaisrOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCURQVV9ERUJVRygi JWQ6IHZsNDI6JWMlYyVjJWMgbm90IG1hcHBlZFxuIiwKPiAtCQkJCWksIHY0bF9waXhmbXRzW2ld ID4+IDAsIHY0bF9waXhmbXRzW2ldID4+IDgsCj4gLQkJCQl2NGxfcGl4Zm10c1tpXSA+PiAxNiwg djRsX3BpeGZtdHNbaV0gPj4gMjQpOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlody0+Zm9ybWF0X2Nh cHMgPSBkcm1fcGl4Zm10czsKPiAtZG9uZToKPiAtCWtmcmVlKHY0bF9waXhmbXRzKTsKPiAtCj4g LQlyZXR1cm4gaHctPmZvcm1hdF9jYXBzOwo+IC19Cj4gLQo+IC0vKioKPiAtICogZHB1X2h3X3Jv dF9nZXRfZG93bnNjYWxlX2NhcHMgLSBnZXQgc2NhbGluZyBjYXBhYmlsaXR5IHN0cmluZwo+IC0g KiBAaHc6IFBvaW50ZXIgdG8gcm90YXRvciBoYXJkd2FyZSBkcml2ZXIKPiAtICogcmV0dXJuOiBQ b2ludGVyIHRvIGNhcGFiaWxpdHkgc3RyaW5nOiBOVUxMIG90aGVyd2lzZQo+IC0gKi8KPiAtc3Rh dGljIGNvbnN0IGNoYXIgKmRwdV9od19yb3RfZ2V0X2Rvd25zY2FsZV9jYXBzKHN0cnVjdCBkcHVf aHdfcm90ICpodykKPiAtewo+IC0JaW50IGxlbjsKPiAtCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXY7Cj4gLQo+IC0JaWYgKCFodyB8fCAhaHctPmNhcHMgfHwgIWh3LT5jYXBzLT5wZGV2KSB7 Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHJvdGF0b3IgaHdcbiIpOwo+IC0JCXJldHVybiBOVUxM Owo+IC0JfQo+IC0KPiAtCXBkZXYgPSBody0+Y2Fwcy0+cGRldjsKPiAtCj4gLQlpZiAoaHctPmRv d25zY2FsZV9jYXBzKQo+IC0JCXJldHVybiBody0+ZG93bnNjYWxlX2NhcHM7Cj4gLQo+IC0JbGVu ID0gZHB1X3JvdGF0b3JfaW5saW5lX2dldF9kb3duc2NhbGVfY2FwcyhwZGV2LCBOVUxMLCAwKTsK PiAtCWlmIChsZW4gPCAwKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHNjYWxpbmcgY2FwcyAl ZFxuIiwgbGVuKTsKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCX0KPiAtCj4gLQkvKiBhZGQgb25lIGZv ciBlbmRpbmcgemVybyAqLwo+IC0JbGVuICs9IDE7Cj4gLQlody0+ZG93bnNjYWxlX2NhcHMgPSBr emFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Cj4gLQlkcHVfcm90YXRvcl9pbmxpbmVfZ2V0X2Rvd25z Y2FsZV9jYXBzKHBkZXYsIGh3LT5kb3duc2NhbGVfY2FwcywgbGVuKTsKPiAtCj4gLQlyZXR1cm4g aHctPmRvd25zY2FsZV9jYXBzOwo+IC19Cj4gLQo+IC0vKioKPiAtICogZHB1X2h3X3JvdF9nZXRf Y2FjaGVfc2l6ZSAtIGdldCBjYWNoZSBzaXplCj4gLSAqIEBodzogUG9pbnRlciB0byByb3RhdG9y IGhhcmR3YXJlIGRyaXZlcgo+IC0gKiByZXR1cm46IHNpemUgb2YgY2FjaGUKPiAtICovCj4gLXN0 YXRpYyBzaXplX3QgZHB1X2h3X3JvdF9nZXRfY2FjaGVfc2l6ZShzdHJ1Y3QgZHB1X2h3X3JvdCAq aHcpCj4gLXsKPiAtCWlmICghaHcgfHwgIWh3LT5jYXBzKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZh bGlkIHJvdGF0b3IgaHdcbiIpOwo+IC0JCXJldHVybiAwOwo+IC0JfQo+IC0KPiAtCXJldHVybiBo dy0+Y2Fwcy0+c2xpY2Vfc2l6ZTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGRwdV9od19yb3RfZ2V0 X21heGxpbmV3aWR0aCAtIGdldCBtYXhpbXVtIGxpbmUgd2lkdGggb2Ygcm90YXRvcgo+IC0gKiBA aHc6IFBvaW50ZXIgdG8gcm90YXRvciBoYXJkd2FyZSBkcml2ZXIKPiAtICogcmV0dXJuOiBtYXhp bXVtIGxpbmUgd2lkdGgKPiAtICovCj4gLXN0YXRpYyBpbnQgZHB1X2h3X3JvdF9nZXRfbWF4bGlu ZXdpZHRoKHN0cnVjdCBkcHVfaHdfcm90ICpodykKPiAtewo+IC0Jc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldjsKPiAtCj4gLQlpZiAoIWh3IHx8ICFody0+Y2FwcyB8fCAhaHctPmNhcHMtPnBk ZXYpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgcm90YXRvciBod1xuIik7Cj4gLQkJcmV0dXJu IDA7Cj4gLQl9Cj4gLQo+IC0JcGRldiA9IGh3LT5jYXBzLT5wZGV2Owo+IC0KPiAtCXJldHVybiBk cHVfcm90YXRvcl9pbmxpbmVfZ2V0X21heGxpbmV3aWR0aChwZGV2KTsKPiAtfQo+IC0KPiAtLyoq Cj4gLSAqIF9zZXR1cF9yb3Rfb3BzIC0gc2V0dXAgcm90YXRvciBvcGVyYXRpb25zCj4gLSAqIEBv cHM6IFBvaW50ZXIgdG8gb3BlcmF0aW9uIHRhYmxlCj4gLSAqIEBmZWF0dXJlczogYXZhaWxhYmxl IGZlYXR1cmUgYml0bWFzawo+IC0gKiByZXR1cm46IG5vbmUKPiAtICovCj4gLXN0YXRpYyB2b2lk IF9zZXR1cF9yb3Rfb3BzKHN0cnVjdCBkcHVfaHdfcm90X29wcyAqb3BzLCB1bnNpZ25lZCBsb25n IGZlYXR1cmVzKQo+IC17Cj4gLQlvcHMtPmNvbW1pdCA9IGRwdV9od19yb3RfY29tbWl0Owo+IC0J b3BzLT5nZXRfZm9ybWF0X2NhcHMgPSBkcHVfaHdfcm90X2dldF9mb3JtYXRfY2FwczsKPiAtCW9w cy0+Z2V0X2Rvd25zY2FsZV9jYXBzID0gZHB1X2h3X3JvdF9nZXRfZG93bnNjYWxlX2NhcHM7Cj4g LQlvcHMtPmdldF9jYWNoZV9zaXplID0gZHB1X2h3X3JvdF9nZXRfY2FjaGVfc2l6ZTsKPiAtCW9w cy0+Z2V0X21heGxpbmV3aWR0aCA9IGRwdV9od19yb3RfZ2V0X21heGxpbmV3aWR0aDsKPiAtfQo+ IC0KPiAtLyoqCj4gLSAqIGRwdV9od19yb3RfYmxrX3N0b3AgLSBzdG9wIHJvdGF0b3IgYmxvY2sK PiAtICogQGh3X2JsazogUG9pbnRlciB0byBiYXNlIGhhcmR3YXJlIGJsb2NrCj4gLSAqIHJldHVy bjogbm9uZQo+IC0gKi8KPiAtc3RhdGljIHZvaWQgZHB1X2h3X3JvdF9ibGtfc3RvcChzdHJ1Y3Qg ZHB1X2h3X2JsayAqaHdfYmxrKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2h3X3JvdCAqaHdfcm90ID0g dG9fZHB1X2h3X3JvdChod19ibGspOwo+IC0KPiAtCURQVV9ERUJVRygidHlwZTolZCBpZDolZFxu IiwgaHdfYmxrLT50eXBlLCBod19ibGstPmlkKTsKPiAtCj4gLQlkcHVfaHdfcm90X3N0b3AoaHdf cm90KTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGRwdV9od19yb3RfYmxrX3N0YXJ0IC0gYXJ0IHJv dGF0b3IgYmxvY2sKPiAtICogQGh3X2JsazogUG9pbnRlciB0byBiYXNlIGhhcmR3YXJlIGJsb2Nr Cj4gLSAqIHJldHVybjogMCBpZiBzdWNjZXNzOyBlcnJvciBjb2RlIG90aGVyd2lzZQo+IC0gKi8K PiAtc3RhdGljIGludCBkcHVfaHdfcm90X2Jsa19zdGFydChzdHJ1Y3QgZHB1X2h3X2JsayAqaHdf YmxrKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2h3X3JvdCAqaHdfcm90ID0gdG9fZHB1X2h3X3JvdCho d19ibGspOwo+IC0JaW50IHJjID0gMDsKPiAtCj4gLQlEUFVfREVCVUcoInR5cGU6JWQgaWQ6JWRc biIsIGh3X2Jsay0+dHlwZSwgaHdfYmxrLT5pZCk7Cj4gLQo+IC0JcmMgPSBkcHVfaHdfcm90X3N0 YXJ0KGh3X3JvdCk7Cj4gLQo+IC0JcmV0dXJuIHJjOwo+IC19Cj4gLQo+IC1zdGF0aWMgc3RydWN0 IGRwdV9od19ibGtfb3BzIGRwdV9od19yb3Rfb3BzID0gewo+IC0JLnN0YXJ0ID0gZHB1X2h3X3Jv dF9ibGtfc3RhcnQsCj4gLQkuc3RvcCA9IGRwdV9od19yb3RfYmxrX3N0b3AsCj4gLX07Cj4gLQo+ IC0vKioKPiAtICogZHB1X2h3X3JvdF9pbml0IC0gY3JlYXRlL2luaXRpYWxpemUgZ2l2ZW4gcm90 YXRvciBpbnN0YW5jZQo+IC0gKiBAaWR4OiBpbmRleCBvZiBnaXZlbiByb3RhdG9yCj4gLSAqIEBh ZGRyOiBpL28gYWRkcmVzcyBtYXBwaW5nCj4gLSAqIEBtOiBQb2ludGVyIHRvIG1kc3MgY2F0YWxv Zwo+IC0gKiByZXR1cm46IFBvaW50ZXIgdG8gaGFyZHdhcmUgcm90YXRvciBkcml2ZXIgb2YgdGhl IGdpdmVuIGluc3RhbmNlCj4gLSAqLwo+IC1zdHJ1Y3QgZHB1X2h3X3JvdCAqZHB1X2h3X3JvdF9p bml0KGVudW0gZHB1X3JvdCBpZHgsCj4gLQkJdm9pZCBfX2lvbWVtICphZGRyLAo+IC0JCXN0cnVj dCBkcHVfbWRzc19jZmcgKm0pCj4gLXsKPiAtCXN0cnVjdCBkcHVfaHdfcm90ICpjOwo+IC0Jc3Ry dWN0IGRwdV9yb3RfY2ZnICpjZmc7Cj4gLQlpbnQgcmM7Cj4gLQo+IC0JYyA9IGt6YWxsb2Moc2l6 ZW9mKCpjKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWMpCj4gLQkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7Cj4gLQo+IC0JY2ZnID0gX3JvdF9vZmZzZXQoaWR4LCBtLCBhZGRyLCAmYy0+aHcpOwo+ IC0JaWYgKElTX0VSUihjZmcpKSB7Cj4gLQkJV0FSTigxLCAiVW5hYmxlIHRvIGZpbmQgcm90IGlk eD0lZFxuIiwgaWR4KTsKPiAtCQlrZnJlZShjKTsKPiAtCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFM KTsKPiAtCX0KPiAtCj4gLQkvKiBBc3NpZ24gb3BzICovCj4gLQljLT5pZHggPSBpZHg7Cj4gLQlj LT5jYXBzID0gY2ZnOwo+IC0JX3NldHVwX3JvdF9vcHMoJmMtPm9wcywgYy0+Y2Fwcy0+ZmVhdHVy ZXMpOwo+IC0Jc25wcmludGYoYy0+bmFtZSwgQVJSQVlfU0laRShjLT5uYW1lKSwgImRwdV9yb3Rf JWQiLCBpZHggLSBST1RfMCk7Cj4gLQo+IC0JcmMgPSBkcHVfaHdfYmxrX2luaXQoJmMtPmJhc2Us IERQVV9IV19CTEtfUk9ULCBpZHgsICZkcHVfaHdfcm90X29wcyk7Cj4gLQlpZiAocmMpIHsKPiAt CQlEUFVfRVJST1IoImZhaWxlZCB0byBpbml0IGh3IGJsayAlZFxuIiwgcmMpOwo+IC0JCWdvdG8g YmxrX2luaXRfZXJyb3I7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIGM7Cj4gLQo+IC1ibGtfaW5pdF9l cnJvcjoKPiAtCWt6ZnJlZShjKTsKPiAtCj4gLQlyZXR1cm4gRVJSX1BUUihyYyk7Cj4gLX0KPiAt Cj4gLS8qKgo+IC0gKiBkcHVfaHdfcm90X2Rlc3Ryb3kgLSBkZXN0cm95IGdpdmVuIGhhcmR3YXJl IHJvdGF0b3IgZHJpdmVyCj4gLSAqIEBod19yb3Q6IFBvaW50ZXIgdG8gaGFyZHdhcmUgcm90YXRv ciBkcml2ZXIKPiAtICogcmV0dXJuOiBub25lCj4gLSAqLwo+IC12b2lkIGRwdV9od19yb3RfZGVz dHJveShzdHJ1Y3QgZHB1X2h3X3JvdCAqaHdfcm90KQo+IC17Cj4gLQlpZiAoaHdfcm90KSB7Cj4g LQkJZHB1X2h3X2Jsa19kZXN0cm95KCZod19yb3QtPmJhc2UpOwo+IC0JCWtmcmVlKGh3X3JvdC0+ ZG93bnNjYWxlX2NhcHMpOwo+IC0JCWtmcmVlKGh3X3JvdC0+Zm9ybWF0X2NhcHMpOwo+IC0JfQo+ IC0Ja2ZyZWUoaHdfcm90KTsKPiAtfQo+IC0KPiAtc3RydWN0IGRwdV9od19yb3QgKmRwdV9od19y b3RfZ2V0KHN0cnVjdCBkcHVfaHdfcm90ICpod19yb3QpCj4gLXsKPiAtCXN0cnVjdCBkcHVfaHdf YmxrICpod19ibGsgPSBkcHVfaHdfYmxrX2dldChod19yb3QgPyAmaHdfcm90LT5iYXNlIDoKPiAt CQkJTlVMTCwgRFBVX0hXX0JMS19ST1QsIC0xKTsKPiAtCj4gLQlyZXR1cm4gSVNfRVJSX09SX05V TEwoaHdfYmxrKSA/IE5VTEwgOiB0b19kcHVfaHdfcm90KGh3X2Jsayk7Cj4gLX0KPiAtCj4gLXZv aWQgZHB1X2h3X3JvdF9wdXQoc3RydWN0IGRwdV9od19yb3QgKmh3X3JvdCkKPiAtewo+IC0Jc3Ry dWN0IGRwdV9od19ibGsgKmh3X2JsayA9IGh3X3JvdCA/ICZod19yb3QtPmJhc2UgOiBOVUxMOwo+ IC0KPiAtCWRwdV9od19ibGtfcHV0KGh3X2Jsayk7Cj4gLX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3JvdC5oIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X3JvdC5oCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggZGYxNWVkNS4uMDAwMDAwMAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19yb3QuaAo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSwxOTAgKzAsMCBAQAo+IC0vKiBD b3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuCj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gLSAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+IC0gKiBv bmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KPiAtICoKPiAtICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gLSAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiAtICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAtICovCj4gLQo+IC0jaWZu ZGVmIF9EUFVfSFdfUk9UX0gKPiAtI2RlZmluZSBfRFBVX0hXX1JPVF9ICj4gLQo+IC0jaW5jbHVk ZSAiZHB1X2h3X2NhdGFsb2cuaCIKPiAtI2luY2x1ZGUgImRwdV9od19tZHNzLmgiCj4gLSNpbmNs dWRlICJkcHVfaHdfdXRpbC5oIgo+IC0jaW5jbHVkZSAiZHB1X2h3X2Jsay5oIgo+IC0KPiAtI2Rl ZmluZSBEUFVfSFdfUk9UX05BTUVfU0laRQk4MAo+IC0KPiAtc3RydWN0IGRwdV9od19yb3Q7Cj4g LQo+IC0vKioKPiAtICogZW51bSBkcHVfaHdfcm90X2NtZF90eXBlIC0gdHlwZSBvZiByb3RhdG9y IGhhcmR3YXJlIGNvbW1hbmQKPiAtICogQERQVV9IV19ST1RfQ01EX1ZBTERJQVRFOiB2YWxpZGF0 ZSByb3RhdG9yIGNvbW1hbmQ7IGRvIG5vdCBjb21taXQKPiAtICogQERQVV9IV19ST1RfQ01EX0NP TU1JVDogY29tbWl0L2V4ZWN1dGUgcm90YXRvciBjb21tYW5kCj4gLSAqIEBEUFVfSFdfUk9UX0NN RF9TVEFSVDogbWRwIGlzIHJlYWR5IHRvIHN0YXJ0Cj4gLSAqIEBEUFVfSFdfUk9UX0NNRF9DTEVB TlVQOiBjbGVhbnVwIHJvdGF0b3IgY29tbWFuZCBhZnRlciBpdCBpcyBkb25lCj4gLSAqLwo+IC1l bnVtIGRwdV9od19yb3RfY21kX3R5cGUgewo+IC0JRFBVX0hXX1JPVF9DTURfVkFMSURBVEUsCj4g LQlEUFVfSFdfUk9UX0NNRF9DT01NSVQsCj4gLQlEUFVfSFdfUk9UX0NNRF9TVEFSVCwKPiAtCURQ VV9IV19ST1RfQ01EX0NMRUFOVVAsCj4gLX07Cj4gLQo+IC0vKioKPiAtICogc3RydWN0IGRwdV9o d19yb3RfY21kIC0gZGVmaW5pdGlvbiBvZiBoYXJkd2FyZSByb3RhdGlvbiBjb21tYW5kCj4gLSAq IEBtYXN0ZXI6IHRydWUgaWYgY2xpZW50IGlzIHRoZSBtYXN0ZXIgaW4gc291cmNlIHNwbGl0IGlu bGluZSByb3RhdGlvbgo+IC0gKiBAc2VxdWVuY2VfaWQ6IGNvbW1hbmQgc2VxdWVuY2UgaWRlbnRp Zmllcgo+IC0gKiBAZnBzOiBmcmFtZSByYXRlIG9mIHRoZSBzdHJlYW0gaW4gZnJhbWUgcGVyIHNl Y29uZAo+IC0gKiBAcm90OTA6IHRydWUgaWYgcm90YXRpb24gOTAgaW4gY291bnRlciBjbG9ja3dp c2UgaXMgcmVxdWlyZWQKPiAtICogQGhmbGlwOiB0cnVlIGlmIGhvcml6b250YWwgZmxpcCBpcyBy ZXF1aXJlZCBwcmlvciB0byByb3RhdGlvbgo+IC0gKiBAdmZsaXA6IHRydWUgaWYgdmVydGljYWwg ZmxpcCBpcyByZXF1aXJlZCBwcmlvciB0byByb3RhdGlvbgo+IC0gKiBAdmlkZW9fbW9kZTogdHJ1 ZSBpZiByb3RhdG9yIGlzIGZlZWRpbmcgaW50byB2aWRlbyBpbnRlcmZhY2UKPiAtICogQGNsa3Jh dGUgOiBjbG9jayByYXRlIGluIEh6Cj4gLSAqIEBwcmVmaWxsX2J3OiBwcmVmaWxsIGJhbmR3aWR0 aCBpbiBCcHMgKHZpZGVvIG1vZGUgb25seSkKPiAtICogQHNyY19pb3ZhOiBzb3VyY2UgaS9vIHZp cnR1YWwgYWRkcmVzcwo+IC0gKiBAc3JjX2xlbjogc291cmNlIGkvbyBidWZmZXIgbGVuZ3RoCj4g LSAqIEBzcmNfcGxhbmVzOiBzb3VyY2UgcGxhbmUgbnVtYmVyCj4gLSAqIEBzcmNfZm9ybWF0OiBw b2ludGVyIHRvIHNvdXJjZSBkcHUgcGl4ZWwgZm9ybWF0Cj4gLSAqIEBzcmNfcGl4ZWxfZm9ybWF0 OiBzb3VyY2UgcGl4ZWwgZm9ybWF0IGluIGRybSBmb3VyY2MKPiAtICogQHNyY19tb2RpZmllcjog c291cmNlIHBpeGVsIGZvcm1hdCBtb2RpZmllcgo+IC0gKiBAc3JjX3dpZHRoOiBzb3VyY2Ugd2lk dGggaW4gcGl4ZWwKPiAtICogQHNyY19oZWlnaHQ6IHNvdXJjZSBoZWlnaHQgaW4gcGl4ZWwKPiAt ICogQHNyY19yZWN0X3g6IHNvdXJjZSByZWN0YW5nbGUgeCBjb29yZGluYXRlCj4gLSAqIEBzcmNf cmVjdF95OiBzb3VyY2UgcmVjdGFuZ2xlIHkgY29vcmRpbmF0ZQo+IC0gKiBAc3JjX3JlY3Rfdzog c291cmNlIHJlY3RhbmdsZSB3aWR0aAo+IC0gKiBAc3JjX3JlY3RfaDogc291cmNlIHJlY3Rhbmds ZSBoZWlnaHQKPiAtICogQGRzdF93cml0ZWJhY2s6IHRydWUgaWYgd3JpdGViYWNrIG9mIHJvdGF0 ZWQgb3V0cHV0IGlzIHJlcXVpcmVkCj4gLSAqIEBkc3RfaW92YTogZGVzdGluYXRpb24gaS9vIHZp cnR1YWwgYWRkcmVzcwo+IC0gKiBAZHN0X2xlbjogZGVzdGluYXRpb24gaS9vIGJ1ZmZlciBsZW5n dGgKPiAtICogQGRzdF9wbGFuZXM6IGRlc3RpbmF0aW9uIHBsYW5lIG51bWJlcgo+IC0gKiBAZHN0 X2Zvcm1hdDogcG9pbnRlciB0byBkZXN0aW5hdGlvbiBkcHUgcGl4ZWwgZm9ybWF0IChpbnB1dC9v dXRwdXQpCj4gLSAqIEBkc3RfcGl4ZWxfZm9ybWF0OiBkZXN0aW5hdGlvbiBwaXhlbCBmb3JtYXQg aW4gZHJtIGZvdXJjYyAoaW5wdXQvb3V0cHV0KQo+IC0gKiBAZHN0X21vZGlmaWVyOiBkZXN0aW5h dGlvbiBwaXhlbCBmb3JtYXQgbW9kaWZpZXIgKGlucHV0L291dHB1dCkKPiAtICogQGRzdF9yZWN0 X3g6IGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB4IGNvb3JkaW5hdGUKPiAtICogQGRzdF9yZWN0X3k6 IGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB5IGNvb3JkaW5hdGUKPiAtICogQGRzdF9yZWN0X3c6IGRl c3RpbmF0aW9uIHJlY3RhbmdsZSB3aWR0aAo+IC0gKiBAZHN0X3JlY3RfaDogZGVzdGluYXRpb24g cmVjdGFuZ2xlIGhlaWdodAo+IC0gKiBAcHJpdl9oYW5kbGU6IHByaXZhdGUgaGFuZGxlIG9mIHJv dGF0b3IgZHJpdmVyIChvdXRwdXQpCj4gLSAqLwo+IC1zdHJ1Y3QgZHB1X2h3X3JvdF9jbWQgewo+ IC0JYm9vbCBtYXN0ZXI7Cj4gLQl1MzIgc2VxdWVuY2VfaWQ7Cj4gLQl1MzIgZnBzOwo+IC0JYm9v bCByb3Q5MDsKPiAtCWJvb2wgaGZsaXA7Cj4gLQlib29sIHZmbGlwOwo+IC0JYm9vbCB2aWRlb19t b2RlOwo+IC0JdTY0IGNsa3JhdGU7Cj4gLQl1NjQgcHJlZmlsbF9idzsKPiAtCWRtYV9hZGRyX3Qg c3JjX2lvdmFbNF07Cj4gLQl1MzIgc3JjX2xlbls0XTsKPiAtCXUzMiBzcmNfcGxhbmVzOwo+IC0J Y29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKnNyY19mb3JtYXQ7Cj4gLQl1MzIgc3JjX3BpeGVsX2Zv cm1hdDsKPiAtCXU2NCBzcmNfbW9kaWZpZXI7Cj4gLQl1MzIgc3JjX3dpZHRoOwo+IC0JdTMyIHNy Y19oZWlnaHQ7Cj4gLQl1MzIgc3JjX3N0cmlkZTsKPiAtCXUzMiBzcmNfcmVjdF94Owo+IC0JdTMy IHNyY19yZWN0X3k7Cj4gLQl1MzIgc3JjX3JlY3RfdzsKPiAtCXUzMiBzcmNfcmVjdF9oOwo+IC0J Ym9vbCBkc3Rfd3JpdGViYWNrOwo+IC0JZG1hX2FkZHJfdCBkc3RfaW92YVs0XTsKPiAtCXUzMiBk c3RfbGVuWzRdOwo+IC0JdTMyIGRzdF9wbGFuZXM7Cj4gLQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1h dCAqZHN0X2Zvcm1hdDsKPiAtCXUzMiBkc3RfcGl4ZWxfZm9ybWF0Owo+IC0JdTY0IGRzdF9tb2Rp ZmllcjsKPiAtCXUzMiBkc3RfcmVjdF94Owo+IC0JdTMyIGRzdF9yZWN0X3k7Cj4gLQl1MzIgZHN0 X3JlY3RfdzsKPiAtCXUzMiBkc3RfcmVjdF9oOwo+IC0Jdm9pZCAqcHJpdl9oYW5kbGU7Cj4gLX07 Cj4gLQo+IC0vKioKPiAtICogc3RydWN0IGRwdV9od19yb3Rfb3BzIC0gaW50ZXJmYWNlIHRvIHRo ZSByb3RhdG9yIGh3IGRyaXZlciBmdW5jdGlvbnMKPiAtICogQXNzdW1wdGlvbiBpcyB0aGVzZSBm dW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgY2xvY2tzIGFyZSBlbmFibGVkCj4gLSAqLwo+ IC1zdHJ1Y3QgZHB1X2h3X3JvdF9vcHMgewo+IC0JaW50ICgqY29tbWl0KShzdHJ1Y3QgZHB1X2h3 X3JvdCAqaHcsIHN0cnVjdCBkcHVfaHdfcm90X2NtZCAqZGF0YSwKPiAtCQkJZW51bSBkcHVfaHdf cm90X2NtZF90eXBlIGNtZCk7Cj4gLQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCAq KCpnZXRfZm9ybWF0X2NhcHMpKAo+IC0JCQlzdHJ1Y3QgZHB1X2h3X3JvdCAqaHcpOwo+IC0JY29u c3QgY2hhciAqKCpnZXRfZG93bnNjYWxlX2NhcHMpKHN0cnVjdCBkcHVfaHdfcm90ICpodyk7Cj4g LQlzaXplX3QgKCpnZXRfY2FjaGVfc2l6ZSkoc3RydWN0IGRwdV9od19yb3QgKmh3KTsKPiAtCWlu dCAoKmdldF9tYXhsaW5ld2lkdGgpKHN0cnVjdCBkcHVfaHdfcm90ICpodyk7Cj4gLX07Cj4gLQo+ IC0vKioKPiAtICogc3RydWN0IGRwdV9od19yb3QgOiBST1QgZHJpdmVyIG9iamVjdAo+IC0gKiBA YmFzZTogaHcgYmxvY2sgYmFzZSBvYmplY3QKPiAtICogQGh3OiBoYXJkd2FyZSBhZGRyZXNzIG1h cAo+IC0gKiBAaWR4OiBpbnN0YW5jZSBpbmRleAo+IC0gKiBAY2FwczogY2FwYWJpbGl0aWVzIGJp dG1hc2sKPiAtICogQG9wczogb3BlcmF0aW9uIHRhYmxlCj4gLSAqIEByb3RfY3R4OiBwb2ludGVy IHRvIHByaXZhdGUgcm90YXRvciBjb250ZXh0Cj4gLSAqIEBmb3JtYXRfY2FwczogcG9pbnRlciB0 byBwaXhlbCBmb3JtYXQgY2FwYWJpbGl0eSAgYXJyYXkKPiAtICogQGRvd25zY2FsZV9jYXBzOiBw b2ludGVyIHRvIHNjYWxpbmcgY2FwYWJpbGl0eSBzdHJpbmcKPiAtICovCj4gLXN0cnVjdCBkcHVf aHdfcm90IHsKPiAtCXN0cnVjdCBkcHVfaHdfYmxrIGJhc2U7Cj4gLQlzdHJ1Y3QgZHB1X2h3X2Js a19yZWdfbWFwIGh3Owo+IC0JY2hhciBuYW1lW0RQVV9IV19ST1RfTkFNRV9TSVpFXTsKPiAtCWlu dCBpZHg7Cj4gLQljb25zdCBzdHJ1Y3QgZHB1X3JvdF9jZmcgKmNhcHM7Cj4gLQlzdHJ1Y3QgZHB1 X2h3X3JvdF9vcHMgb3BzOwo+IC0Jdm9pZCAqcm90X2N0eDsKPiAtCXN0cnVjdCBkcHVfZm9ybWF0 X2V4dGVuZGVkICpmb3JtYXRfY2FwczsKPiAtCWNoYXIgKmRvd25zY2FsZV9jYXBzOwo+IC19Owo+ IC0KPiAtLyoqCj4gLSAqIGRwdV9od19yb3RfaW5pdCAtIGluaXRpYWxpemUgYW5kIHJldHVybiBy b3RhdG9yIGh3IGRyaXZlciBvYmplY3QuCj4gLSAqIEBpZHg6ICB3Yl9wYXRoIGluZGV4IGZvciB3 aGljaCBkcml2ZXIgb2JqZWN0IGlzIHJlcXVpcmVkCj4gLSAqIEBhZGRyOiBtYXBwZWQgcmVnaXN0 ZXIgaW8gYWRkcmVzcyBvZiBNRFAKPiAtICogQG0gOiAgIHBvaW50ZXIgdG8gbWRzcyBjYXRhbG9n IGRhdGEKPiAtICovCj4gLXN0cnVjdCBkcHVfaHdfcm90ICpkcHVfaHdfcm90X2luaXQoZW51bSBk cHVfcm90IGlkeCwKPiAtCQl2b2lkIF9faW9tZW0gKmFkZHIsCj4gLQkJc3RydWN0IGRwdV9tZHNz X2NmZyAqbSk7Cj4gLQo+IC0vKioKPiAtICogZHB1X2h3X3JvdF9kZXN0cm95IC0gZGVzdHJveSBy b3RhdG9yIGh3IGRyaXZlciBvYmplY3QuCj4gLSAqIEBod19yb3Q6ICBQb2ludGVyIHRvIHJvdGF0 b3IgaHcgZHJpdmVyIG9iamVjdAo+IC0gKi8KPiAtdm9pZCBkcHVfaHdfcm90X2Rlc3Ryb3koc3Ry dWN0IGRwdV9od19yb3QgKmh3X3JvdCk7Cj4gLQo+IC0vKioKPiAtICogdG9fZHB1X2h3X3JvdCAt IGNvbnZlcnQgYmFzZSBvYmplY3QgZHB1X2h3X2Jhc2UgdG8gcm90YXRvciBvYmplY3QKPiAtICog QGh3OiBQb2ludGVyIHRvIGJhc2UgaGFyZHdhcmUgYmxvY2sKPiAtICogcmV0dXJuOiBQb2ludGVy IHRvIHJvdGF0b3IgaGFyZHdhcmUgYmxvY2sKPiAtICovCj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0 IGRwdV9od19yb3QgKnRvX2RwdV9od19yb3Qoc3RydWN0IGRwdV9od19ibGsgKmh3KQo+IC17Cj4g LQlyZXR1cm4gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgZHB1X2h3X3JvdCwgYmFzZSk7Cj4gLX0K PiAtCj4gLS8qKgo+IC0gKiBkcHVfaHdfcm90X2dldCAtIGdldCBuZXh0IGF2YWlsYWJsZSBoYXJk d2FyZSByb3RhdG9yLCBvciBpbmNyZW1lbnQgcmVmZXJlbmNlCj4gLSAqCWNvdW50IGlmIGhhcmR3 YXJlIHJvdGF0b3IgcHJvdmlkZWQKPiAtICogQGh3X3JvdDogUG9pbnRlciB0byBoYXJkd2FyZSBy b3RhdG9yCj4gLSAqIHJldHVybjogUG9pbnRlciB0byByb3RhdG9yIGhhcmR3YXJlIGJsb2NrIGlm IHN1Y2Nlc3M7IE5VTEwgb3RoZXJ3aXNlCj4gLSAqLwo+IC1zdHJ1Y3QgZHB1X2h3X3JvdCAqZHB1 X2h3X3JvdF9nZXQoc3RydWN0IGRwdV9od19yb3QgKmh3X3JvdCk7Cj4gLQo+IC0vKioKPiAtICog ZHB1X2h3X3JvdF9wdXQgLSBwdXQgdGhlIGdpdmVuIGhhcmR3YXJlIHJvdGF0b3IKPiAtICogQGh3 X3JvdDogUG9pbnRlciB0byBoYXJkd2FyZSByb3RhdG9yCj4gLSAqIHJldHVybjogbm9uZQo+IC0g Ki8KPiAtdm9pZCBkcHVfaHdfcm90X3B1dChzdHJ1Y3QgZHB1X2h3X3JvdCAqaHdfcm90KTsKPiAt Cj4gLSNlbmRpZiAvKl9EUFVfSFdfUk9UX0ggKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od19zc3BwLmMKPiBpbmRleCAzZmVjZjMzLi41MzQzMTg0IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5jCj4gQEAgLTEwMiwxMSAr MTAyLDYgQEAKPiAgI2RlZmluZSBTU1BQX1FPU19DVFJMX0NSRVFfVkJMQU5LX01BU0sgICAgIDB4 Mwo+ICAjZGVmaW5lIFNTUFBfUU9TX0NUUkxfQ1JFUV9WQkxBTktfT0ZGICAgICAgMjAKPiAgCj4g LSNkZWZpbmUgU1NQUF9TWVNfQ0FDSEVfTU9ERSAgICAgICAgICAgICAgICAweDFCQwo+IC0jZGVm aW5lIFNTUFBfU0JVRl9TVEFUVVNfUExBTkUwICAgICAgICAgICAgMHgxQzAKPiAtI2RlZmluZSBT U1BQX1NCVUZfU1RBVFVTX1BMQU5FMSAgICAgICAgICAgIDB4MUM0Cj4gLSNkZWZpbmUgU1NQUF9T QlVGX1NUQVRVU19QTEFORV9FTVBUWSAgICAgICBCSVQoMTYpCj4gLQo+ICAvKiBEUFVfU1NQUF9T Q0FMRVJfUVNFRUQyICovCj4gICNkZWZpbmUgU0NBTEVfQ09ORklHICAgICAgICAgICAgICAgICAg ICAgICAweDA0Cj4gICNkZWZpbmUgQ09NUDBfM19QSEFTRV9TVEVQX1ggICAgICAgICAgICAgICAw eDEwCj4gQEAgLTc1OSw0NSArNzU0LDYgQEAgc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBf cW9zX2N0cmwoc3RydWN0IGRwdV9od19waXBlICpjdHgsCj4gIAlEUFVfUkVHX1dSSVRFKCZjdHgt Pmh3LCBTU1BQX1FPU19DVFJMICsgaWR4LCBxb3NfY3RybCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2 b2lkIGRwdV9od19zc3BwX3NldHVwX3N5c19jYWNoZShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwK PiAtCQlzdHJ1Y3QgZHB1X2h3X3BpcGVfc2NfY2ZnICpjZmcpCj4gLXsKPiAtCXUzMiBpZHgsIHZh bDsKPiAtCj4gLQlpZiAoX3NzcHBfc3ViYmxrX29mZnNldChjdHgsIERQVV9TU1BQX1NSQywgJmlk eCkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlmICghY2ZnKQo+IC0JCXJldHVybjsKPiAtCj4gLQl2 YWwgPSAoKGNmZy0+b3BfbW9kZSAmIDB4MykgPDwgMTgpIHwKPiAtCQkJKChjZmctPnJkX2VuICYg MHgxKSA8PCAxNSkgfAo+IC0JCQkoKGNmZy0+cmRfc2NpZCAmIDB4MWYpIDw8IDgpIHwKPiAtCQkJ KChjZmctPnJkX25vYWxsb2NhdGUgJiAweDEpIDw8IDQpIHwKPiAtCQkJKChjZmctPnJkX29wX3R5 cGUgJiAweGYpIDw8IDApOwo+IC0KPiAtCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIFNTUFBfU1lT X0NBQ0hFX01PREUgKyBpZHgsIHZhbCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGRwdV9od19z c3BwX2dldF9zYnVmX3N0YXR1cyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKPiAtCQlzdHJ1Y3Qg ZHB1X2h3X3BpcGVfc2J1Zl9zdGF0dXMgKnN0YXR1cykKPiAtewo+IC0JdTMyIGlkeCwgdmFsOwo+ IC0KPiAtCWlmIChfc3NwcF9zdWJibGtfb2Zmc2V0KGN0eCwgRFBVX1NTUFBfU1JDLCAmaWR4KSkK PiAtCQlyZXR1cm47Cj4gLQo+IC0JaWYgKCFzdGF0dXMpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCXZh bCA9IERQVV9SRUdfUkVBRCgmY3R4LT5odywgU1NQUF9TQlVGX1NUQVRVU19QTEFORTAgKyBpZHgp Owo+IC0Jc3RhdHVzLT5lbXB0eVswXSA9IHZhbCAmIFNTUFBfU0JVRl9TVEFUVVNfUExBTkVfRU1Q VFkgPyB0cnVlIDogZmFsc2U7Cj4gLQlzdGF0dXMtPnJkX3B0clswXSA9IHZhbCAmIDB4ZmZmZjsK PiAtCXZhbCA9IERQVV9SRUdfUkVBRCgmY3R4LT5odywgU1NQUF9TQlVGX1NUQVRVU19QTEFORTEg KyBpZHgpOwo+IC0Jc3RhdHVzLT5lbXB0eVsxXSA9IHZhbCAmIFNTUFBfU0JVRl9TVEFUVVNfUExB TkVfRU1QVFkgPyB0cnVlIDogZmFsc2U7Cj4gLQlzdGF0dXMtPnJkX3B0clsxXSA9IHZhbCAmIDB4 ZmZmZjsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBfdHNfcHJlZmls bChzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKPiAgCQlzdHJ1Y3QgZHB1X2h3X3BpcGVfdHNfY2Zn ICpjZmcsCj4gIAkJZW51bSBkcHVfc3NwcF9tdWx0aXJlY3RfaW5kZXggaW5kZXgpCj4gQEAgLTkz MSwxMSArODg3LDYgQEAgc3RhdGljIHZvaWQgX3NldHVwX2xheWVyX29wcyhzdHJ1Y3QgZHB1X2h3 X3BpcGUgKmMsCj4gIAkJCQlkcHVfc2V0dXBfcGlwZV9wYV9tZW1jb2xfdjFfNzsKPiAgCX0KPiAg Cj4gLQlpZiAodGVzdF9iaXQoRFBVX1NTUFBfU0JVRiwgJmZlYXR1cmVzKSkgewo+IC0JCWMtPm9w cy5zZXR1cF9zeXNfY2FjaGUgPSBkcHVfaHdfc3NwcF9zZXR1cF9zeXNfY2FjaGU7Cj4gLQkJYy0+ b3BzLmdldF9zYnVmX3N0YXR1cyA9IGRwdV9od19zc3BwX2dldF9zYnVmX3N0YXR1czsKPiAtCX0K PiAtCj4gIAlpZiAodGVzdF9iaXQoRFBVX1NTUFBfQ0RQLCAmZmVhdHVyZXMpKQo+ICAJCWMtPm9w cy5zZXR1cF9jZHAgPSBkcHVfaHdfc3NwcF9zZXR1cF9jZHA7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuaCBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmgKPiBpbmRleCBkZTk3MWYxLi5hMzJlY2M2 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3Bw LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5oCj4g QEAgLTIyNCw0MSArMjI0LDYgQEAgc3RydWN0IGRwdV9od19waXBlX2NkcF9jZmcgewo+ICB9Owo+ ICAKPiAgLyoqCj4gLSAqIGVudW0gc3lzdGVtIGNhY2hlIHJvdGF0aW9uIG9wZXJhdGlvbiBtb2Rl Cj4gLSAqLwo+IC1lbnVtIHsKPiAtCURQVV9QSVBFX1NDX09QX01PREVfT0ZGTElORSwKPiAtCURQ VV9QSVBFX1NDX09QX01PREVfSU5MSU5FX1NJTkdMRSwKPiAtCURQVV9QSVBFX1NDX09QX01PREVf SU5MSU5FX0xFRlQsCj4gLQlEUFVfUElQRV9TQ19PUF9NT0RFX0lOTElORV9SSUdIVCwKPiAtfTsK PiAtCj4gLS8qKgo+IC0gKiBlbnVtIHN5c3RlbSBjYWNoZSByZWFkIG9wZXJhdGlvbiB0eXBlCj4g LSAqLwo+IC1lbnVtIHsKPiAtCURQVV9QSVBFX1NDX1JEX09QX1RZUEVfQ0FDSEVBQkxFLAo+IC0J RFBVX1BJUEVfU0NfUkRfT1BfVFlQRV9JTlZBTElEQVRFLAo+IC0JRFBVX1BJUEVfU0NfUkRfT1Bf VFlQRV9FVklDVElPTiwKPiAtfTsKPiAtCj4gLS8qKgo+IC0gKiBzdHJ1Y3QgZHB1X2h3X3BpcGVf c2NfY2ZnIC0gc3lzdGVtIGNhY2hlIGNvbmZpZ3VyYXRpb24KPiAtICogQG9wX21vZGU6IHJvdGF0 aW9uIG9wZXJhdGluZyBtb2RlCj4gLSAqIEByZF9lbjogc3lzdGVtIGNhY2hlIHJlYWQgZW5hYmxl Cj4gLSAqIEByZF9zY2lkOiBzeXN0ZW0gY2FjaGUgcmVhZCBibG9jayBpZAo+IC0gKiBAcmRfbm9h bGxvY2F0ZTogc3lzdGVtIGNhY2hlIHJlYWQgbm8gYWxsb2NhdGUgYXR0cmlidXRlCj4gLSAqIEBy ZF9vcF90eXBlOiBzeXN0ZW0gY2FjaGUgcmVhZCBvcGVyYXRpb24gdHlwZQo+IC0gKi8KPiAtc3Ry dWN0IGRwdV9od19waXBlX3NjX2NmZyB7Cj4gLQl1MzIgb3BfbW9kZTsKPiAtCWJvb2wgcmRfZW47 Cj4gLQl1MzIgcmRfc2NpZDsKPiAtCWJvb2wgcmRfbm9hbGxvY2F0ZTsKPiAtCXUzMiByZF9vcF90 eXBlOwo+IC19Owo+IC0KPiAtLyoqCj4gICAqIHN0cnVjdCBkcHVfaHdfcGlwZV90c19jZmcgLSB0 cmFmZmljIHNoYXBlciBjb25maWd1cmF0aW9uCj4gICAqIEBzaXplOiBzaXplIHRvIHByZWZpbGwg aW4gYnl0ZXMsIG9yIHplcm8gdG8gZGlzYWJsZQo+ICAgKiBAdGltZTogdGltZSB0byBwcmVmaWxs IGluIHVzZWMsIG9yIHplcm8gdG8gZGlzYWJsZQo+IEBAIC0yNjksMjEgKzIzNCw2IEBAIHN0cnVj dCBkcHVfaHdfcGlwZV90c19jZmcgewo+ICB9Owo+ICAKPiAgLyoqCj4gLSAqIE1heGltdW0gbnVt YmVyIG9mIHN0cmVhbSBidWZmZXIgcGxhbmUKPiAtICovCj4gLSNkZWZpbmUgRFBVX1BJUEVfU0JV Rl9QTEFORV9OVU0JMgo+IC0KPiAtLyoqCj4gLSAqIHN0cnVjdCBkcHVfaHdfcGlwZV9zYnVmX3N0 YXR1cyAtIHN0cmVhbSBidWZmZXIgc3RhdHVzCj4gLSAqIEBlbXB0eTogaW5kaWNhdGUgaWYgc3Ry ZWFtIGJ1ZmZlciBpcyBlbXB0eSBvZiBub3QKPiAtICogQHJkX3B0cjogY3VycmVudCByZWFkIHBv aW50ZXIgb2Ygc3RyZWFtIGJ1ZmZlcgo+IC0gKi8KPiAtc3RydWN0IGRwdV9od19waXBlX3NidWZf c3RhdHVzIHsKPiAtCWJvb2wgZW1wdHlbRFBVX1BJUEVfU0JVRl9QTEFORV9OVU1dOwo+IC0JdTMy IHJkX3B0cltEUFVfUElQRV9TQlVGX1BMQU5FX05VTV07Cj4gLX07Cj4gLQo+IC0vKioKPiAgICog c3RydWN0IGRwdV9od19zc3BwX29wcyAtIGludGVyZmFjZSB0byB0aGUgU1NQUCBIdyBkcml2ZXIg ZnVuY3Rpb25zCj4gICAqIENhbGxlciBtdXN0IGNhbGwgdGhlIGluaXQgZnVuY3Rpb24gdG8gZ2V0 IHRoZSBwaXBlIGNvbnRleHQgZm9yIGVhY2ggcGlwZQo+ICAgKiBBc3N1bXB0aW9uIGlzIHRoZXNl IGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBhZnRlciBjbG9ja3MgYXJlIGVuYWJsZWQKPiBAQCAt NDcyLDIyICs0MjIsNiBAQCBzdHJ1Y3QgZHB1X2h3X3NzcHBfb3BzIHsKPiAgCXUzMiAoKmdldF9z Y2FsZXJfdmVyKShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCk7Cj4gIAo+ICAJLyoqCj4gLQkgKiBz ZXR1cF9zeXNfY2FjaGUgLSBzZXR1cCBzeXN0ZW0gY2FjaGUgY29uZmlndXJhdGlvbgo+IC0JICog QGN0eDogUG9pbnRlciB0byBwaXBlIGNvbnRleHQKPiAtCSAqIEBjZmc6IFBvaW50ZXIgdG8gc3lz dGVtIGNhY2hlIGNvbmZpZ3VyYXRpb24KPiAtCSAqLwo+IC0Jdm9pZCAoKnNldHVwX3N5c19jYWNo ZSkoc3RydWN0IGRwdV9od19waXBlICpjdHgsCj4gLQkJCXN0cnVjdCBkcHVfaHdfcGlwZV9zY19j ZmcgKmNmZyk7Cj4gLQo+IC0JLyoqCj4gLQkgKiBnZXRfc2J1Zl9zdGF0dXMgLSBnZXQgc3RyZWFt IGJ1ZmZlciBzdGF0dXMKPiAtCSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBjb250ZXh0Cj4gLQkg KiBAc3RhdHVzOiBQb2ludGVyIHRvIHN0cmVhbSBidWZmZXIgc3RhdHVzCj4gLQkgKi8KPiAtCXZv aWQgKCpnZXRfc2J1Zl9zdGF0dXMpKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAo+IC0JCQlzdHJ1 Y3QgZHB1X2h3X3BpcGVfc2J1Zl9zdGF0dXMgKnN0YXR1cyk7Cj4gLQo+IC0JLyoqCj4gIAkgKiBz ZXR1cF90c19wcmVmaWxsIC0gc2V0dXAgcHJlZmlsbCB0cmFmZmljIHNoYXBlcgo+ICAJICogQGN0 eDogUG9pbnRlciB0byBwaXBlIGNvbnRleHQKPiAgCSAqIEBjZmc6IFBvaW50ZXIgdG8gdHJhZmZp YyBzaGFwZXIgY29uZmlndXJhdGlvbgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9wbGFuZS5jCj4gaW5kZXggOWU5YzlkMi4uMmQxZjI2NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCj4gQEAgLTM2LDcgKzM2LDYgQEAKPiAgI2luY2x1 ZGUgImRwdV92YmlmLmgiCj4gICNpbmNsdWRlICJkcHVfcGxhbmUuaCIKPiAgI2luY2x1ZGUgImRw dV9jb2xvcl9wcm9jZXNzaW5nLmgiCj4gLSNpbmNsdWRlICJkcHVfaHdfcm90LmgiCj4gIAo+ICBz dGF0aWMgYm9vbCBzdXNwZW5kX2JsYW5rID0gdHJ1ZTsKPiAgbW9kdWxlX3BhcmFtKHN1c3BlbmRf YmxhbmssIGJvb2wsIDA0MDApOwo+IEBAIC0xMDAsMTAgKzk5LDcgQEAgZW51bSBkcHVfcGxhbmVf cW9zIHsKPiAgICogQGNzY19wdHI6IFBvaW50cyB0byBkcHVfY3NjX2NmZyBzdHJ1Y3R1cmUgdG8g dXNlIGZvciBjdXJyZW50Cj4gICAqIEBtcGxhbmVfbGlzdDogTGlzdCBvZiBtdWx0aXJlY3QgcGxh bmVzIG9mIHRoZSBzYW1lIHBpcGUKPiAgICogQGNhdGFsb2c6IFBvaW50cyB0byBkcHUgY2F0YWxv ZyBzdHJ1Y3R1cmUKPiAtICogQHNidWZfbW9kZTogZm9yY2Ugc3RyZWFtIGJ1ZmZlciBtb2RlIGlm IHNldAo+IC0gKiBAc2J1Zl93cml0ZWJhY2s6IGZvcmNlIHN0cmVhbSBidWZmZXIgd3JpdGViYWNr IGlmIHNldAo+ICAgKiBAcmV2YWxpZGF0ZTogZm9yY2UgcmV2YWxpZGF0aW9uIG9mIGFsbCB0aGUg cGxhbmUgcHJvcGVydGllcwo+IC0gKiBAYmxvYl9yb3RfY2FwczogUG9pbnRlciB0byByb3RhdG9y IGNhcGFiaWxpdHkgYmxvYgo+ICAgKi8KPiAgc3RydWN0IGRwdV9wbGFuZSB7Cj4gIAlzdHJ1Y3Qg ZHJtX3BsYW5lIGJhc2U7Cj4gQEAgLTEyNSw4ICsxMjEsNiBAQCBzdHJ1Y3QgZHB1X3BsYW5lIHsK PiAgCWJvb2wgaXNfdmlydHVhbDsKPiAgCXN0cnVjdCBsaXN0X2hlYWQgbXBsYW5lX2xpc3Q7Cj4g IAlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nOwo+IC0JdTMyIHNidWZfbW9kZTsKPiAtCXUz MiBzYnVmX3dyaXRlYmFjazsKPiAgCWJvb2wgcmV2YWxpZGF0ZTsKPiAgCj4gIAlzdHJ1Y3QgZHB1 X2NzY19jZmcgY3NjX2NmZzsKPiBAQCAtMTQwLDcgKzEzNCw2IEBAIHN0cnVjdCBkcHVfcGxhbmUg ewo+ICAJc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvIHByb3BlcnR5X2luZm87Cj4gIAlzdHJ1Y3Qg bXNtX3Byb3BlcnR5X2RhdGEgcHJvcGVydHlfZGF0YVtQTEFORV9QUk9QX0NPVU5UXTsKPiAgCXN0 cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYl9pbmZvOwo+IC0Jc3RydWN0IGRybV9wcm9wZXJ0 eV9ibG9iICpibG9iX3JvdF9jYXBzOwo+ICAKPiAgCS8qIGRlYnVnZnMgcmVsYXRlZCBzdHVmZiAq Lwo+ICAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290Owo+IEBAIC0xNjQsMjcgKzE1Nyw2IEBA IHN0YXRpYyBzdHJ1Y3QgZHB1X2ttcyAqX2RwdV9wbGFuZV9nZXRfa21zKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lKQo+ICAJcmV0dXJuIHRvX2RwdV9rbXMocHJpdi0+a21zKTsKPiAgfQo+ICAKPiAt LyoqCj4gLSAqIF9kcHVfcGxhbmVfZ2V0X2NydGNfc3RhdGUgLSBvYnRhaW4gY3J0YyBzdGF0ZSBh dHRhY2hlZCB0byBnaXZlbiBwbGFuZSBzdGF0ZQo+IC0gKiBAcHN0YXRlOiBQb2ludGVyIHRvIGRy bSBwbGFuZSBzdGF0ZQo+IC0gKiByZXR1cm46IFBvaW50ZXIgdG8gY3J0YyBzdGF0ZSBpZiBzdWNj ZXNzOyBwb2ludGVyIGVycm9yLCBvdGhlcndpc2UKPiAtICovCj4gLXN0YXRpYyBzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKl9kcHVfcGxhbmVfZ2V0X2NydGNfc3RhdGUoCj4gLQkJc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqcHN0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNzdGF0 ZTsKPiAtCj4gLQlpZiAoIXBzdGF0ZSB8fCAhcHN0YXRlLT5jcnRjKQo+IC0JCXJldHVybiBOVUxM Owo+IC0KPiAtCWlmIChwc3RhdGUtPnN0YXRlKQo+IC0JCWNzdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X2NydGNfc3RhdGUocHN0YXRlLT5zdGF0ZSwgcHN0YXRlLT5jcnRjKTsKPiAtCWVsc2UKPiAtCQlj c3RhdGUgPSBwc3RhdGUtPmNydGMtPnN0YXRlOwo+IC0KPiAtCXJldHVybiBjc3RhdGU7Cj4gLX0K PiAtCj4gIHN0YXRpYyBib29sIGRwdV9wbGFuZV9lbmFibGVkKHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKnN0YXRlKQo+ICB7Cj4gIAlyZXR1cm4gc3RhdGUgJiYgc3RhdGUtPmZiICYmIHN0YXRlLT5j cnRjOwo+IEBAIC0xOTIsMTkgKzE2NCw3IEBAIHN0YXRpYyBib29sIGRwdV9wbGFuZV9lbmFibGVk KHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICAKPiAgc3RhdGljIGJvb2wgZHB1X3Bs YW5lX3NzcHBfZW5hYmxlZChzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiAgewo+IC0J cmV0dXJuIHN0YXRlICYmIHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSktPnJvdC5vdXRfZmIgJiYg c3RhdGUtPmNydGM7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBkcHVfcGxhbmVfY3J0Y19lbmFibGVk IC0gZGV0ZXJtaW5lIGlmIGNydGMgb2YgZ2l2ZW4gcGxhbmUgc3RhdGUgaXMgZW5hYmxlZAo+IC0g KiBAc3RhdGU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lIHN0YXRlCj4gLSAqIHJldHVybjogdHJ1ZSBp ZiBwbGFuZSBhbmQgdGhlIGFzc29jaWF0ZWQgY3J0YyBhcmUgYm90aCBlbmFibGVkCj4gLSAqLwo+ IC1zdGF0aWMgYm9vbCBkcHVfcGxhbmVfY3J0Y19lbmFibGVkKHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKnN0YXRlKQo+IC17Cj4gLQlyZXR1cm4gZHB1X3BsYW5lX2VuYWJsZWQoc3RhdGUpICYmIHN0 YXRlLT5jcnRjLT5zdGF0ZSAmJgo+IC0JCQlzdGF0ZS0+Y3J0Yy0+c3RhdGUtPmFjdGl2ZSAmJgo+ IC0JCQlzdGF0ZS0+Y3J0Yy0+c3RhdGUtPmVuYWJsZTsKPiArCXJldHVybiBzdGF0ZSAmJiBzdGF0 ZS0+Y3J0YzsKPiAgfQo+ICAKPiAgLyoqCj4gQEAgLTIxOSwxMCArMTc5LDggQEAgc3RhdGljIGlu bGluZSBpbnQgX2RwdV9wbGFuZV9jYWxjX2ZpbGxfbGV2ZWwoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCj4gIHsKPiAgCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHUsICp0bXA7Cj4gIAlzdHJ1Y3QgZHB1 X3BsYW5lX3N0YXRlICpwc3RhdGU7Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0 YXRlOwo+ICAJdTMyIGZpeGVkX2J1ZmZfc2l6ZTsKPiAgCXUzMiB0b3RhbF9mbDsKPiAtCXUzMiBo ZmxpcF9ieXRlczsKPiAgCj4gIAlpZiAoIXBsYW5lIHx8ICFmbXQgfHwgIXBsYW5lLT5zdGF0ZSB8 fCAhc3JjX3dpZHRoIHx8ICFmbXQtPmJwcCkgewo+ICAJCURQVV9FUlJPUigiaW52YWxpZCBhcmd1 bWVudHNcbiIpOwo+IEBAIC0yMzEsNyArMTg5LDYgQEAgc3RhdGljIGlubGluZSBpbnQgX2RwdV9w bGFuZV9jYWxjX2ZpbGxfbGV2ZWwoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAo+ICAJcGRw dSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7Cj4gIAlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUo cGxhbmUtPnN0YXRlKTsKPiAtCXJzdGF0ZSA9ICZwc3RhdGUtPnJvdDsKPiAgCWZpeGVkX2J1ZmZf c2l6ZSA9IHBkcHUtPnBpcGVfc2Jsay0+cGl4ZWxfcmFtX3NpemU7Cj4gIAo+ICAJbGlzdF9mb3Jf ZWFjaF9lbnRyeSh0bXAsICZwZHB1LT5tcGxhbmVfbGlzdCwgbXBsYW5lX2xpc3QpIHsKPiBAQCAt MjQzLDM2ICsyMDAsMzAgQEAgc3RhdGljIGlubGluZSBpbnQgX2RwdV9wbGFuZV9jYWxjX2ZpbGxf bGV2ZWwoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAkJc3JjX3dpZHRoID0gbWF4X3QodTMy LCBzcmNfd2lkdGgsIHRtcC0+cGlwZV9jZmcuc3JjX3JlY3Qudyk7Cj4gIAl9Cj4gIAo+IC0JaWYg KChyc3RhdGUtPm91dF9yb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWCkgJiYKPiAtCQkJRFBV X0ZPUk1BVF9JU19MSU5FQVIoZm10KSkKPiAtCQloZmxpcF9ieXRlcyA9IChzcmNfd2lkdGggKyAz MikgKiBmbXQtPmJwcDsKPiAtCWVsc2UKPiAtCQloZmxpcF9ieXRlcyA9IDA7Cj4gLQo+ICAJaWYg KGZtdC0+ZmV0Y2hfcGxhbmVzID09IERQVV9QTEFORV9QU0VVRE9fUExBTkFSKSB7Cj4gIAkJaWYg KGZtdC0+Y2hyb21hX3NhbXBsZSA9PSBEUFVfQ0hST01BXzQyMCkgewo+ICAJCQkvKiBOVjEyICov Cj4gLQkJCXRvdGFsX2ZsID0gKGZpeGVkX2J1ZmZfc2l6ZSAvIDIgLSBoZmxpcF9ieXRlcykgLwo+ ICsJCQl0b3RhbF9mbCA9IChmaXhlZF9idWZmX3NpemUgLyAyKSAvCj4gIAkJCQkoKHNyY193aWR0 aCArIDMyKSAqIGZtdC0+YnBwKTsKPiAgCQl9IGVsc2Ugewo+ICAJCQkvKiBub24gTlYxMiAqLwo+ IC0JCQl0b3RhbF9mbCA9IChmaXhlZF9idWZmX3NpemUgLyAyIC0gaGZsaXBfYnl0ZXMpICogMiAv Cj4gKwkJCXRvdGFsX2ZsID0gKGZpeGVkX2J1ZmZfc2l6ZSAvIDIpICogMiAvCj4gIAkJCQkoKHNy Y193aWR0aCArIDMyKSAqIGZtdC0+YnBwKTsKPiAgCQl9Cj4gIAl9IGVsc2Ugewo+ICAJCWlmIChw c3RhdGUtPm11bHRpcmVjdF9tb2RlID09IERQVV9TU1BQX01VTFRJUkVDVF9QQVJBTExFTCkgewo+ IC0JCQl0b3RhbF9mbCA9IChmaXhlZF9idWZmX3NpemUgLyAyIC0gaGZsaXBfYnl0ZXMpICogMiAv Cj4gKwkJCXRvdGFsX2ZsID0gKGZpeGVkX2J1ZmZfc2l6ZSAvIDIpICogMiAvCj4gIAkJCQkoKHNy Y193aWR0aCArIDMyKSAqIGZtdC0+YnBwKTsKPiAgCQl9IGVsc2Ugewo+IC0JCQl0b3RhbF9mbCA9 IChmaXhlZF9idWZmX3NpemUgLSBoZmxpcF9ieXRlcykgKiAyIC8KPiArCQkJdG90YWxfZmwgPSAo Zml4ZWRfYnVmZl9zaXplKSAqIDIgLwo+ICAJCQkJKChzcmNfd2lkdGggKyAzMikgKiBmbXQtPmJw cCk7Cj4gIAkJfQo+ICAJfQo+ICAKPiAtCURQVV9ERUJVRygicGxhbmUldTogcG51bTolZCBmbXQ6 ICU0LjRzIHc6JXUgaGY6JWQgZmw6JXVcbiIsCj4gKwlEUFVfREVCVUcoInBsYW5lJXU6IHBudW06 JWQgZm10OiAlNC40cyB3OiV1IGZsOiV1XG4iLAo+ICAJCQlwbGFuZS0+YmFzZS5pZCwgcGRwdS0+ cGlwZSAtIFNTUFBfVklHMCwKPiAgCQkJKGNoYXIgKikmZm10LT5iYXNlLnBpeGVsX2Zvcm1hdCwK PiAtCQkJc3JjX3dpZHRoLCBoZmxpcF9ieXRlcywgdG90YWxfZmwpOwo+ICsJCQlzcmNfd2lkdGgs IHRvdGFsX2ZsKTsKPiAgCj4gIAlyZXR1cm4gdG90YWxfZmw7Cj4gIH0KPiBAQCAtNjk2LDkwICs2 NDcsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldF9pbnB1dF9mZW5jZShzdHJ1Y3QgZHB1 X3BsYW5lICpwZHB1LAo+ICAJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICIweCVsbFhcbiIsIGZkKTsK PiAgfQo+ICAKPiAtLyoqCj4gLSAqIF9kcHVfcGxhbmVfaW5saW5lX3JvdF9zZXRfb3RfbGltaXQg LSBzZXQgT1QgbGltaXQgZm9yIHRoZSBnaXZlbiBpbmxpbmUKPiAtICogcm90YXRpb24geGluIGNs aWVudAo+IC0gKiBAcGxhbmU6IHBvaW50ZXIgdG8gZHJtIHBsYW5lCj4gLSAqIEBjcnRjOiBwb2lu dGVyIHRvIGRybSBjcnRjCj4gLSAqIEBjZmc6IHBvaW50ZXIgdG8gcm90YXRvciB2YmlmIGNvbmZp Zwo+IC0gKiBAcmVjdF93OiByb3RhdG9yIGZyYW1lIHdpZHRoCj4gLSAqIEByZWN0X2g6IHJvdGF0 b3IgZnJhbWUgaGVpZ2h0Cj4gLSAqLwo+IC1zdGF0aWMgdm9pZCBfZHB1X3BsYW5lX2lubGluZV9y b3Rfc2V0X290X2xpbWl0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+IC0JCXN0cnVjdCBkcm1f Y3J0YyAqY3J0YywgY29uc3Qgc3RydWN0IGRwdV9yb3RfdmJpZl9jZmcgKmNmZywKPiAtCQl1MzIg cmVjdF93LCB1MzIgcmVjdF9oKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X3ZiaWZfc2V0X290X3BhcmFt cyBvdF9wYXJhbXM7Cj4gLQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2Owo+IC0Jc3RydWN0 IGRwdV9rbXMgKmRwdV9rbXM7Cj4gLQo+IC0JaWYgKCFwbGFuZSB8fCAhcGxhbmUtPmRldikgewo+ IC0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudHNcbiIpOwo+IC0JCXJldHVybjsKPiAtCX0K PiAtCj4gLQlwcml2ID0gcGxhbmUtPmRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlpZiAoIXByaXYgfHwg IXByaXYtPmttcykgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBLTVMgcmVmZXJlbmNlXG4iKTsK PiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0JZHB1X2ttcyA9IHRvX2RwdV9rbXMocHJpdi0+a21z KTsKPiAtCj4gLQltZW1zZXQoJm90X3BhcmFtcywgMCwgc2l6ZW9mKG90X3BhcmFtcykpOwo+IC0J b3RfcGFyYW1zLnhpbl9pZCA9IGNmZy0+eGluX2lkOwo+IC0Jb3RfcGFyYW1zLm51bSA9IGNmZy0+ bnVtOwo+IC0Jb3RfcGFyYW1zLndpZHRoID0gcmVjdF93Owo+IC0Jb3RfcGFyYW1zLmhlaWdodCA9 IHJlY3RfaDsKPiAtCW90X3BhcmFtcy5pc193ZmQgPSBmYWxzZTsKPiAtCW90X3BhcmFtcy5mcmFt ZV9yYXRlID0gY3J0Yy0+bW9kZS52cmVmcmVzaDsKPiAtCW90X3BhcmFtcy52YmlmX2lkeCA9IFZC SUZfUlQ7Cj4gLQlvdF9wYXJhbXMuY2xrX2N0cmwgPSBjZmctPmNsa19jdHJsOwo+IC0Jb3RfcGFy YW1zLnJkID0gY2ZnLT5pc19yZWFkOwo+IC0KPiAtCWRwdV92YmlmX3NldF9vdF9saW1pdChkcHVf a21zLCAmb3RfcGFyYW1zKTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIF9kcHVfcGxhbmVfaW5saW5l X3JvdF9zZXRfcW9zX3JlbWFwIC0gc2V0IHZiaWYgUW9TIGZvciB0aGUgZ2l2ZW4gaW5saW5lCj4g LSAqIHJvdGF0aW9uIHhpbiBjbGllbnQKPiAtICogQHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFu ZQo+IC0gKiBAY2ZnOiBQb2ludGVyIHRvIHJvdGF0b3IgdmJpZiBjZmcKPiAtICovCj4gLXN0YXRp YyB2b2lkIF9kcHVfcGxhbmVfaW5saW5lX3JvdF9zZXRfcW9zX3JlbWFwKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAo+IC0JCWNvbnN0IHN0cnVjdCBkcHVfcm90X3ZiaWZfY2ZnICpjZmcpCj4gLXsK PiAtCXN0cnVjdCBkcHVfdmJpZl9zZXRfcW9zX3BhcmFtcyBxb3NfcGFyYW1zOwo+IC0Jc3RydWN0 IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKPiAtCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOwo+IC0K PiAtCWlmICghcGxhbmUgfHwgIXBsYW5lLT5kZXYpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQg YXJndW1lbnRzXG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0JcHJpdiA9IHBsYW5lLT5k ZXYtPmRldl9wcml2YXRlOwo+IC0JaWYgKCFwcml2IHx8ICFwcml2LT5rbXMpIHsKPiAtCQlEUFVf RVJST1IoImludmFsaWQgS01TIHJlZmVyZW5jZVxuIik7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0K PiAtCWRwdV9rbXMgPSB0b19kcHVfa21zKHByaXYtPmttcyk7Cj4gLQo+IC0JbWVtc2V0KCZxb3Nf cGFyYW1zLCAwLCBzaXplb2YocW9zX3BhcmFtcykpOwo+IC0JcW9zX3BhcmFtcy52YmlmX2lkeCA9 IFZCSUZfUlQ7Cj4gLQlxb3NfcGFyYW1zLnhpbl9pZCA9IGNmZy0+eGluX2lkOwo+IC0JcW9zX3Bh cmFtcy5jbGtfY3RybCA9IGNmZy0+Y2xrX2N0cmw7Cj4gLQlxb3NfcGFyYW1zLm51bSA9IGNmZy0+ bnVtOwo+IC0JcW9zX3BhcmFtcy5pc19ydCA9IHRydWU7Cj4gLQo+IC0JRFBVX0RFQlVHKCJ2Ymlm OiVkIHhpbjolZCBudW06JWQgcnQ6JWQgY2xrX2N0cmw6JWRcbiIsCj4gLQkJCXFvc19wYXJhbXMu dmJpZl9pZHgsIHFvc19wYXJhbXMueGluX2lkLAo+IC0JCQlxb3NfcGFyYW1zLm51bSwgcW9zX3Bh cmFtcy5pc19ydCwgcW9zX3BhcmFtcy5jbGtfY3RybCk7Cj4gLQo+IC0JZHB1X3ZiaWZfc2V0X3Fv c19yZW1hcChkcHVfa21zLCAmcW9zX3BhcmFtcyk7Cj4gLX0KPiAtCj4gIGludCBkcHVfcGxhbmVf d2FpdF9pbnB1dF9mZW5jZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgdWludDMyX3Qgd2FpdF9t cykKPiAgewo+ICAJc3RydWN0IGRwdV9wbGFuZSAqcGRwdTsKPiBAQCAtODQ3LDcgKzcxNCw2IEBA IHN0YXRpYyBpbnQgX2RwdV9wbGFuZV9nZXRfYXNwYWNlKAo+ICAJCXN0cnVjdCBtc21fZ2VtX2Fk ZHJlc3Nfc3BhY2UgKiphc3BhY2UpCj4gIHsKPiAgCXN0cnVjdCBkcHVfa21zICprbXM7Cj4gLQlp bnQgbW9kZTsKPiAgCj4gIAlpZiAoIXBkcHUgfHwgIXBzdGF0ZSB8fCAhYXNwYWNlKSB7Cj4gIAkJ RFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOwo+IEBAIC0xNDU2LDExMDIgKzEzMjIs NiBAQCBzdGF0aWMgaW50IF9kcHVfcGxhbmVfY29sb3JfZmlsbChzdHJ1Y3QgZHB1X3BsYW5lICpw ZHB1LAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLS8qKgo+IC0gKiBfZHB1X3BsYW5lX2ZiX2dl dC9wdXQgLSBmcmFtZWJ1ZmZlciBjYWxsYmFjayBmb3IgY3J0YyByZXMgb3BzCj4gLSAqLwo+IC1z dGF0aWMgdm9pZCAqX2RwdV9wbGFuZV9mYl9nZXQodm9pZCAqZmIsIHUzMiB0eXBlLCB1NjQgdGFn KQo+IC17Cj4gLQlkcm1fZnJhbWVidWZmZXJfZ2V0KGZiKTsKPiAtCXJldHVybiBmYjsKPiAtfQo+ IC1zdGF0aWMgdm9pZCBfZHB1X3BsYW5lX2ZiX3B1dCh2b2lkICpmYikKPiAtewo+IC0JZHJtX2Zy YW1lYnVmZmVyX3B1dChmYik7Cj4gLX0KPiAtc3RhdGljIHN0cnVjdCBkcHVfY3J0Y19yZXNfb3Bz IGZiX3Jlc19vcHMgPSB7Cj4gLQkucHV0ID0gX2RwdV9wbGFuZV9mYl9wdXQsCj4gLQkuZ2V0ID0g X2RwdV9wbGFuZV9mYl9nZXQsCj4gLX07Cj4gLQo+IC0vKioKPiAtICogX2RwdV9wbGFuZV9mYm9f Z2V0L3B1dCAtIGZyYW1lYnVmZmVyIG9iamVjdCBjYWxsYmFjayBmb3IgY3J0YyByZXMgb3BzCj4g LSAqLwo+IC1zdGF0aWMgdm9pZCAqX2RwdV9wbGFuZV9mYm9fZ2V0KHZvaWQgKmZibywgdTMyIHR5 cGUsIHU2NCB0YWcpCj4gLXsKPiAtCWRwdV9rbXNfZmJvX3JlZmVyZW5jZShmYm8pOwo+IC0JcmV0 dXJuIGZibzsKPiAtfQo+IC1zdGF0aWMgdm9pZCBfZHB1X3BsYW5lX2Zib19wdXQodm9pZCAqZmJv KQo+IC17Cj4gLQlkcHVfa21zX2Zib191bnJlZmVyZW5jZShmYm8pOwo+IC19Cj4gLXN0YXRpYyBz dHJ1Y3QgZHB1X2NydGNfcmVzX29wcyBmYm9fcmVzX29wcyA9IHsKPiAtCS5wdXQgPSBfZHB1X3Bs YW5lX2Zib19wdXQsCj4gLQkuZ2V0ID0gX2RwdV9wbGFuZV9mYm9fZ2V0LAo+IC19Owo+IC0KPiAt LyoqCj4gLSAqIGRwdV9wbGFuZV9yb3RfY2FsY19wcmVmaWxsIC0gY2FsY3VsYXRlIHJvdGF0b3Ig c3RhcnQgcHJlZmlsbAo+IC0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCj4gLSAqIHJl dHVybjogcHJlZmlsbCB0aW1lIGluIGxpbmUKPiAtICovCj4gLXUzMiBkcHVfcGxhbmVfcm90X2Nh bGNfcHJlZmlsbChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiAtewo+IC0Jc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqc3RhdGU7Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7Cj4g LQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRlOwo+IC0Jc3RydWN0IGRwdV9rbXMg KmRwdV9rbXM7Cj4gLQl1MzIgYmxvY2tzaXplID0gMTI4Owo+IC0JdTMyIHByZWZpbGxfbGluZSA9 IDA7Cj4gLQo+IC0JaWYgKCFwbGFuZSB8fCAhcGxhbmUtPnN0YXRlIHx8ICFwbGFuZS0+c3RhdGUt PmZiKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOwo+IC0JCXJldHVy biAwOwo+IC0JfQo+IC0KPiAtCWRwdV9rbXMgPSBfZHB1X3BsYW5lX2dldF9rbXMocGxhbmUpOwo+ IC0Jc3RhdGUgPSBwbGFuZS0+c3RhdGU7Cj4gLQlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUo c3RhdGUpOwo+IC0JcnN0YXRlID0gJnBzdGF0ZS0+cm90Owo+IC0KPiAtCWlmICghZHB1X2ttcyB8 fCAhZHB1X2ttcy0+Y2F0YWxvZykgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBrbXNcbiIpOwo+ IC0JCXJldHVybiAwOwo+IC0JfQo+IC0KPiAtCWlmIChyc3RhdGUtPm91dF9mYl9mb3JtYXQpCj4g LQkJZHB1X2Zvcm1hdF9nZXRfYmxvY2tfc2l6ZShyc3RhdGUtPm91dF9mYl9mb3JtYXQsCj4gLQkJ CQkmYmxvY2tzaXplLCAmYmxvY2tzaXplKTsKPiAtCj4gLQlwcmVmaWxsX2xpbmUgPSBibG9ja3Np emUgKyBkcHVfa21zLT5jYXRhbG9nLT5zYnVmX2hlYWRyb29tOwo+IC0JcHJlZmlsbF9saW5lID0g bXVsdF9mcmFjKHByZWZpbGxfbGluZSwgcnN0YXRlLT5vdXRfc3JjX2ggPj4gMTYsCj4gLQkJCXN0 YXRlLT5jcnRjX2gpOwo+IC0JRFBVX0RFQlVHKAo+IC0JCSJwbGFuZSVkLiVkIGJsazoldSBoZWFk OiV1IHZkc3QvdnNyYzoldS8ldSBwcmVmaWxsOiV1XG4iLAo+IC0JCQlwbGFuZS0+YmFzZS5pZCwg cnN0YXRlLT5zZXF1ZW5jZV9pZCwKPiAtCQkJYmxvY2tzaXplLCBkcHVfa21zLT5jYXRhbG9nLT5z YnVmX2hlYWRyb29tLAo+IC0JCQlzdGF0ZS0+Y3J0Y19oLCByc3RhdGUtPm91dF9zcmNfaCA+PiAx NiwKPiAtCQkJcHJlZmlsbF9saW5lKTsKPiAtCj4gLQlyZXR1cm4gcHJlZmlsbF9saW5lOwo+IC19 Cj4gLQo+IC0vKioKPiAtICogZHB1X3BsYW5lX3JvdF9jYWxjX2NmZyAtIGNhbGN1bGF0ZSByb3Rh dG9yL3NzcHAgY29uZmlndXJhdGlvbiBieQo+IC0gKgllbnVtZXJhdGluZyBvdmVyIGFsbCBwbGFu ZXMgYXR0YWNoZWQgdG8gdGhlIHNhbWUgcm90YXRvcgo+IC0gKiBAcGxhbmU6IFBvaW50ZXIgdG8g ZHJtIHBsYW5lCj4gLSAqIEBzdGF0ZTogUG9pbnRlciB0byBkcm0gc3RhdGUgdG8gYmUgdXBkYXRl ZAo+IC0gKiByZXR1cm46IDAgaWYgc3VjY2VzczsgZXJyb3IgY29kZSBvdGhlcndpc2UKPiAtICov Cj4gLXN0YXRpYyBpbnQgZHB1X3BsYW5lX3JvdF9jYWxjX2NmZyhzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiAtewo+IC0Jc3RydWN0 IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwo+IC0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUg KnJzdGF0ZTsKPiAtCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3N0YXRlOwo+IC0Jc3RydWN0IGRy bV9yZWN0ICppbl9yb3QsICpvdXRfcm90Owo+IC0Jc3RydWN0IGRybV9wbGFuZSAqYXR0YWNoZWRf cGxhbmU7Cj4gLQl1MzIgZHN0X3gsIGRzdF95LCBkc3RfdywgZHN0X2g7Cj4gLQlpbnQgZm91bmQg PSAwOwo+IC0JaW50IHhwb3MgPSAwOwo+IC0JaW50IHJldDsKPiAtCj4gLQlpZiAoIXBsYW5lIHx8 ICFzdGF0ZSB8fCAhc3RhdGUtPnN0YXRlKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFt ZXRlcnNcbiIpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWNzdGF0ZSA9IF9k cHVfcGxhbmVfZ2V0X2NydGNfc3RhdGUoc3RhdGUpOwo+IC0JaWYgKElTX0VSUl9PUl9OVUxMKGNz dGF0ZSkpIHsKPiAtCQlyZXQgPSBQVFJfRVJSKGNzdGF0ZSk7Cj4gLQkJRFBVX0VSUk9SKCJpbnZh bGlkIGNydGMgc3RhdGUgJWRcbiIsIHJldCk7Cj4gLQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4g LQlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUpOwo+IC0JcnN0YXRlID0gJnBzdGF0 ZS0+cm90Owo+IC0KPiAtCWluX3JvdCA9ICZyc3RhdGUtPmluX3JvdF9yZWN0Owo+IC0JKmluX3Jv dCA9IGRybV9wbGFuZV9zdGF0ZV9zcmMoc3RhdGUpOwo+IC0KPiAtCW91dF9yb3QgPSAmcnN0YXRl LT5vdXRfcm90X3JlY3Q7Cj4gLQlkc3RfeCA9IGRwdV9wbGFuZV9nZXRfcHJvcGVydHkocHN0YXRl LCBQTEFORV9QUk9QX1JPVF9EU1RfWCk7Cj4gLQlkc3RfeSA9IGRwdV9wbGFuZV9nZXRfcHJvcGVy dHkocHN0YXRlLCBQTEFORV9QUk9QX1JPVF9EU1RfWSk7Cj4gLQlkc3RfdyA9IGRwdV9wbGFuZV9n ZXRfcHJvcGVydHkocHN0YXRlLCBQTEFORV9QUk9QX1JPVF9EU1RfVyk7Cj4gLQlkc3RfaCA9IGRw dV9wbGFuZV9nZXRfcHJvcGVydHkocHN0YXRlLCBQTEFORV9QUk9QX1JPVF9EU1RfSCk7Cj4gLQo+ IC0JaWYgKCFkc3RfdyAmJiAhZHN0X2gpIHsKPiAtCQlyc3RhdGUtPm91dF9yb3RfcmVjdCA9IHJz dGF0ZS0+aW5fcm90X3JlY3Q7Cj4gLQkJZHJtX3JlY3Rfcm90YXRlKCZyc3RhdGUtPm91dF9yb3Rf cmVjdCwgc3RhdGUtPmZiLT53aWR0aCA8PCAxNiwKPiAtCQkJCXN0YXRlLT5mYi0+aGVpZ2h0IDw8 IDE2LCByc3RhdGUtPmluX3JvdGF0aW9uKTsKPiAtCX0gZWxzZSB7Cj4gLQkJb3V0X3JvdC0+eDEg PSBkc3RfeDsKPiAtCQlvdXRfcm90LT55MSA9IGRzdF95Owo+IC0JCW91dF9yb3QtPngyID0gZHN0 X3ggKyBkc3RfdzsKPiAtCQlvdXRfcm90LT55MiA9IGRzdF95ICsgZHN0X2g7Cj4gLQl9Cj4gLQo+ IC0JcnN0YXRlLT5vdXRfc3JjX3JlY3QgPSByc3RhdGUtPm91dF9yb3RfcmVjdDsKPiAtCj4gLQkv KiBlbnVtZXJhdGluZyBvdmVyIGFsbCBwbGFuZXMgYXR0YWNoZWQgdG8gdGhlIHNhbWUgcm90YXRv ciAqLwo+IC0JZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lKGF0dGFjaGVkX3Bs YW5lLCBjc3RhdGUpIHsKPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICphdHRhY2hlZF9zdGF0 ZTsKPiAtCQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICphdHRhY2hlZF9wc3RhdGU7Cj4gLQkJc3Ry dWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKmF0dGFjaGVkX3JzdGF0ZTsKPiAtCQlzdHJ1Y3QgZHJt X3JlY3QgYXR0YWNoZWRfb3V0X3JlY3Q7Cj4gLQo+IC0JCWF0dGFjaGVkX3N0YXRlID0gZHJtX2F0 b21pY19nZXRfZXhpc3RpbmdfcGxhbmVfc3RhdGUoCj4gLQkJCQlzdGF0ZS0+c3RhdGUsIGF0dGFj aGVkX3BsYW5lKTsKPiAtCj4gLQkJaWYgKCFhdHRhY2hlZF9zdGF0ZSkKPiAtCQkJY29udGludWU7 Cj4gLQo+IC0JCWF0dGFjaGVkX3BzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShhdHRhY2hlZF9z dGF0ZSk7Cj4gLQkJYXR0YWNoZWRfcnN0YXRlID0gJmF0dGFjaGVkX3BzdGF0ZS0+cm90Owo+IC0K PiAtCQlpZiAoYXR0YWNoZWRfc3RhdGUtPmZiICE9IHN0YXRlLT5mYikKPiAtCQkJY29udGludWU7 Cj4gLQo+IC0JCWlmIChkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KHBzdGF0ZSwgUExBTkVfUFJPUF9S T1RBVElPTikgIT0KPiAtCQkJZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShhdHRhY2hlZF9wc3RhdGUs Cj4gLQkJCQlQTEFORV9QUk9QX1JPVEFUSU9OKSkKPiAtCQkJY29udGludWU7Cj4gLQo+IC0JCWZv dW5kKys7Cj4gLQo+IC0JCS8qIHNraXAgaXRzZWxmICovCj4gLQkJaWYgKGF0dGFjaGVkX3BsYW5l ID09IHBsYW5lKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJLyogZmluZCBib3VuZGluZyByb3Rh dG9yIHNvdXJjZSByb2kgKi8KPiAtCQlpZiAoYXR0YWNoZWRfc3RhdGUtPnNyY194IDwgaW5fcm90 LT54MSkKPiAtCQkJaW5fcm90LT54MSA9IGF0dGFjaGVkX3N0YXRlLT5zcmNfeDsKPiAtCj4gLQkJ aWYgKGF0dGFjaGVkX3N0YXRlLT5zcmNfeSA8IGluX3JvdC0+eTEpCj4gLQkJCWluX3JvdC0+eTEg PSBhdHRhY2hlZF9zdGF0ZS0+c3JjX3k7Cj4gLQo+IC0JCWlmIChhdHRhY2hlZF9zdGF0ZS0+c3Jj X3ggKyBhdHRhY2hlZF9zdGF0ZS0+c3JjX3cgPiBpbl9yb3QtPngyKQo+IC0JCQlpbl9yb3QtPngy ID0gYXR0YWNoZWRfc3RhdGUtPnNyY194ICsKPiAtCQkJCWF0dGFjaGVkX3N0YXRlLT5zcmNfdzsK PiAtCj4gLQkJaWYgKGF0dGFjaGVkX3N0YXRlLT5zcmNfeSArIGF0dGFjaGVkX3N0YXRlLT5zcmNf aCA+IGluX3JvdC0+eTIpCj4gLQkJCWluX3JvdC0+eTIgPSBhdHRhY2hlZF9zdGF0ZS0+c3JjX3kg Kwo+IC0JCQkJYXR0YWNoZWRfc3RhdGUtPnNyY19oOwo+IC0KPiAtCQkvKiBmaW5kIGJvdW5kaW5n IHJvdGF0b3IgZGVzdGluYXRpb24gcm9pICovCj4gLQkJZHN0X3ggPSBkcHVfcGxhbmVfZ2V0X3By b3BlcnR5KGF0dGFjaGVkX3BzdGF0ZSwKPiAtCQkJCVBMQU5FX1BST1BfUk9UX0RTVF9YKTsKPiAt CQlkc3RfeSA9IGRwdV9wbGFuZV9nZXRfcHJvcGVydHkoYXR0YWNoZWRfcHN0YXRlLAo+IC0JCQkJ UExBTkVfUFJPUF9ST1RfRFNUX1kpOwo+IC0JCWRzdF93ID0gZHB1X3BsYW5lX2dldF9wcm9wZXJ0 eShhdHRhY2hlZF9wc3RhdGUsCj4gLQkJCQlQTEFORV9QUk9QX1JPVF9EU1RfVyk7Cj4gLQkJZHN0 X2ggPSBkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KGF0dGFjaGVkX3BzdGF0ZSwKPiAtCQkJCVBMQU5F X1BST1BfUk9UX0RTVF9IKTsKPiAtCQlpZiAoIWRzdF93ICYmICFkc3RfaCkgewo+IC0JCQlhdHRh Y2hlZF9vdXRfcmVjdCA9IGRybV9wbGFuZV9zdGF0ZV9zcmMoYXR0YWNoZWRfc3RhdGUpOwo+IC0J CQlkcm1fcmVjdF9yb3RhdGUoJmF0dGFjaGVkX291dF9yZWN0LAo+IC0JCQkJCXN0YXRlLT5mYi0+ d2lkdGggPDwgMTYsCj4gLQkJCQkJc3RhdGUtPmZiLT5oZWlnaHQgPDwgMTYsCj4gLQkJCQkJcnN0 YXRlLT5pbl9yb3RhdGlvbik7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJYXR0YWNoZWRfb3V0X3JlY3Qu eDEgPSBkc3RfeDsKPiAtCQkJYXR0YWNoZWRfb3V0X3JlY3QueTEgPSBkc3RfeTsKPiAtCQkJYXR0 YWNoZWRfb3V0X3JlY3QueDIgPSBkc3RfeCArIGRzdF93Owo+IC0JCQlhdHRhY2hlZF9vdXRfcmVj dC55MiA9IGRzdF95ICsgZHN0X2g7Cj4gLQkJfQo+IC0KPiAtCQkvKiBjaGVjayBzb3VyY2Ugc3Bs aXQgbGVmdC9yaWdodCBtaXNtYXRjaCAqLwo+IC0JCWlmIChhdHRhY2hlZF9vdXRfcmVjdC55MSAh PSByc3RhdGUtPm91dF9zcmNfcmVjdC55MSB8fAo+IC0JCQlhdHRhY2hlZF9vdXRfcmVjdC55MiAh PSByc3RhdGUtPm91dF9zcmNfcmVjdC55Mikgewo+IC0JCQlEUFVfRVJST1IoCj4gLQkJCQkicGxh bmUlZC4ldSBzcmM6JWR4JWQrJWQrJWQgcm90OjB4JWxseCBmYjolZCBwbGFuZSVkLiV1IHNyYzol ZHglZCslZCslZCByb3Q6MHglbGx4IGZiOiVkIG1pc21hdGNoXG4iLAo+IC0JCQkJCXBsYW5lLT5i YXNlLmlkLAo+IC0JCQkJCXJzdGF0ZS0+c2VxdWVuY2VfaWQsCj4gLQkJCQkJc3RhdGUtPnNyY193 ID4+IDE2LAo+IC0JCQkJCXN0YXRlLT5zcmNfaCA+PiAxNiwKPiAtCQkJCQlzdGF0ZS0+c3JjX3gg Pj4gMTYsCj4gLQkJCQkJc3RhdGUtPnNyY195ID4+IDE2LAo+IC0JCQkJCWRwdV9wbGFuZV9nZXRf cHJvcGVydHkocHN0YXRlLAo+IC0JCQkJCQkJUExBTkVfUFJPUF9ST1RBVElPTiksCj4gLQkJCQkJ c3RhdGUtPmZiID8KPiAtCQkJCQkJc3RhdGUtPmZiLT5iYXNlLmlkIDoKPiAtCQkJCQkJLTEsCj4g LQkJCQkJYXR0YWNoZWRfcGxhbmUtPmJhc2UuaWQsCj4gLQkJCQkJYXR0YWNoZWRfcnN0YXRlLT5z ZXF1ZW5jZV9pZCwKPiAtCQkJCQlhdHRhY2hlZF9zdGF0ZS0+c3JjX3cgPj4gMTYsCj4gLQkJCQkJ YXR0YWNoZWRfc3RhdGUtPnNyY19oID4+IDE2LAo+IC0JCQkJCWF0dGFjaGVkX3N0YXRlLT5zcmNf eCA+PiAxNiwKPiAtCQkJCQlhdHRhY2hlZF9zdGF0ZS0+c3JjX3kgPj4gMTYsCj4gLQkJCQkJZHB1 X3BsYW5lX2dldF9wcm9wZXJ0eShhdHRhY2hlZF9wc3RhdGUsCj4gLQkJCQkJCQlQTEFORV9QUk9Q X1JPVEFUSU9OKSwKPiAtCQkJCQlhdHRhY2hlZF9zdGF0ZS0+ZmIgPwo+IC0JCQkJCQlhdHRhY2hl ZF9zdGF0ZS0+ZmItPmJhc2UuaWQgOgo+IC0JCQkJCQktMSk7Cj4gLQkJCURQVV9FUlJPUigKPiAt CQkJCSJwbGFuZSVkLiV1IHNzcHA6JWR4JWQrJWQrJWQgcGxhbmUlZC4ldSBzc3BwOiVkeCVkKyVk KyVkXG4iLAo+IC0JCQkJCXBsYW5lLT5iYXNlLmlkLAo+IC0JCQkJCXJzdGF0ZS0+c2VxdWVuY2Vf aWQsCj4gLQkJCQkJKHJzdGF0ZS0+b3V0X3NyY19yZWN0LngyIC0KPiAtCQkJCQkJcnN0YXRlLT5v dXRfc3JjX3JlY3QueDEpID4+IDE2LAo+IC0JCQkJCShyc3RhdGUtPm91dF9zcmNfcmVjdC55MiAt Cj4gLQkJCQkJCXJzdGF0ZS0+b3V0X3NyY19yZWN0LnkxKSA+PiAxNiwKPiAtCQkJCQlyc3RhdGUt Pm91dF9zcmNfcmVjdC54MSA+PiAxNiwKPiAtCQkJCQlyc3RhdGUtPm91dF9zcmNfcmVjdC55MSA+ PiAxNiwKPiAtCQkJCQlhdHRhY2hlZF9wbGFuZS0+YmFzZS5pZCwKPiAtCQkJCQlhdHRhY2hlZF9y c3RhdGUtPnNlcXVlbmNlX2lkLAo+IC0JCQkJCShhdHRhY2hlZF9vdXRfcmVjdC54MiAtCj4gLQkJ CQkJCWF0dGFjaGVkX291dF9yZWN0LngxKSA+PiAxNiwKPiAtCQkJCQkoYXR0YWNoZWRfb3V0X3Jl Y3QueTIgLQo+IC0JCQkJCQlhdHRhY2hlZF9vdXRfcmVjdC55MSkgPj4gMTYsCj4gLQkJCQkJYXR0 YWNoZWRfb3V0X3JlY3QueDEgPj4gMTYsCj4gLQkJCQkJYXR0YWNoZWRfb3V0X3JlY3QueTEgPj4g MTYpOwo+IC0JCQlEUFVfRVZUMzIoRFJNSUQocGxhbmUpLAo+IC0JCQkJCXJzdGF0ZS0+c2VxdWVu Y2VfaWQsCj4gLQkJCQkJcnN0YXRlLT5vdXRfc3JjX3JlY3QueDEgPj4gMTYsCj4gLQkJCQkJcnN0 YXRlLT5vdXRfc3JjX3JlY3QueTEgPj4gMTYsCj4gLQkJCQkJKHJzdGF0ZS0+b3V0X3NyY19yZWN0 LngyIC0KPiAtCQkJCQkJcnN0YXRlLT5vdXRfc3JjX3JlY3QueDEpID4+IDE2LAo+IC0JCQkJCShy c3RhdGUtPm91dF9zcmNfcmVjdC55MiAtCj4gLQkJCQkJCXJzdGF0ZS0+b3V0X3NyY19yZWN0Lnkx KSA+PiAxNiwKPiAtCQkJCQlhdHRhY2hlZF9wbGFuZS0+YmFzZS5pZCwKPiAtCQkJCQlhdHRhY2hl ZF9yc3RhdGUtPnNlcXVlbmNlX2lkLAo+IC0JCQkJCWF0dGFjaGVkX291dF9yZWN0LngxID4+IDE2 LAo+IC0JCQkJCWF0dGFjaGVkX291dF9yZWN0LnkxID4+IDE2LAo+IC0JCQkJCShhdHRhY2hlZF9v dXRfcmVjdC54MiAtCj4gLQkJCQkJCWF0dGFjaGVkX291dF9yZWN0LngxKSA+PiAxNiwKPiAtCQkJ CQkoYXR0YWNoZWRfb3V0X3JlY3QueTIgLQo+IC0JCQkJCQlhdHRhY2hlZF9vdXRfcmVjdC55MSkg Pj4gMTYsCj4gLQkJCQkJRFBVX0VWVExPR19FUlJPUik7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+ IC0JCX0KPiAtCj4gLQkJLyogZmluZCByZWxhdGl2ZSBzc3BwIHBvc2l0aW9uICovCj4gLQkJaWYg KGF0dGFjaGVkX291dF9yZWN0LngxIDwgcnN0YXRlLT5vdXRfc3JjX3JlY3QueDEpCj4gLQkJCXhw b3MrKzsKPiAtCj4gLQkJaWYgKGF0dGFjaGVkX291dF9yZWN0LngxIDwgb3V0X3JvdC0+eDEpCj4g LQkJCW91dF9yb3QtPngxID0gYXR0YWNoZWRfb3V0X3JlY3QueDE7Cj4gLQo+IC0JCWlmIChhdHRh Y2hlZF9vdXRfcmVjdC55MSA8IG91dF9yb3QtPnkxKQo+IC0JCQlvdXRfcm90LT55MSA9IGF0dGFj aGVkX291dF9yZWN0LnkxOwo+IC0KPiAtCQlpZiAoYXR0YWNoZWRfb3V0X3JlY3QueDIgPiBvdXRf cm90LT54MikKPiAtCQkJb3V0X3JvdC0+eDIgPSBhdHRhY2hlZF9vdXRfcmVjdC54MjsKPiAtCj4g LQkJaWYgKGF0dGFjaGVkX291dF9yZWN0LnkyID4gb3V0X3JvdC0+eTIpCj4gLQkJCW91dF9yb3Qt PnkyID0gYXR0YWNoZWRfb3V0X3JlY3QueTI7Cj4gLQo+IC0JCURQVV9ERUJVRygicGxhbmUlZC4l dSBzcmNfeDolZCBzc3BwOiVkeCVkKyVkKyVkLyVkeCVkKyVkKyVkXG4iLAo+IC0JCQlhdHRhY2hl ZF9wbGFuZS0+YmFzZS5pZCwKPiAtCQkJYXR0YWNoZWRfcnN0YXRlLT5zZXF1ZW5jZV9pZCwKPiAt CQkJYXR0YWNoZWRfcnN0YXRlLT5vdXRfc3JjX3JlY3QueDEgPj4gMTYsCj4gLQkJCWF0dGFjaGVk X3N0YXRlLT5zcmNfdyA+PiAxNiwKPiAtCQkJYXR0YWNoZWRfc3RhdGUtPnNyY19oID4+IDE2LAo+ IC0JCQlhdHRhY2hlZF9zdGF0ZS0+c3JjX3ggPj4gMTYsCj4gLQkJCWF0dGFjaGVkX3N0YXRlLT5z cmNfeSA+PiAxNiwKPiAtCQkJZHJtX3JlY3Rfd2lkdGgoJmF0dGFjaGVkX3JzdGF0ZS0+b3V0X3Ny Y19yZWN0KSA+PiAxNiwKPiAtCQkJZHJtX3JlY3RfaGVpZ2h0KCZhdHRhY2hlZF9yc3RhdGUtPm91 dF9zcmNfcmVjdCkgPj4gMTYsCj4gLQkJCWF0dGFjaGVkX3JzdGF0ZS0+b3V0X3NyY19yZWN0Lngx ID4+IDE2LAo+IC0JCQlhdHRhY2hlZF9yc3RhdGUtPm91dF9zcmNfcmVjdC55MSA+PiAxNik7Cj4g LQl9Cj4gLQo+IC0JcnN0YXRlLT5vdXRfeHBvcyA9IHhwb3M7Cj4gLQlyc3RhdGUtPm5wbGFuZSA9 IGZvdW5kOwo+IC0KPiAtCURQVV9ERUJVRygicGxhbmUlZC4ldSB4cG9zOiVkLyVkIHJvdDolZHgl ZCslZCslZC8lZHglZCslZCslZFxuIiwKPiAtCQkJcGxhbmUtPmJhc2UuaWQsIHJzdGF0ZS0+c2Vx dWVuY2VfaWQsCj4gLQkJCXJzdGF0ZS0+b3V0X3hwb3MsIHJzdGF0ZS0+bnBsYW5lLAo+IC0JCQlk cm1fcmVjdF93aWR0aChpbl9yb3QpID4+IDE2LAo+IC0JCQlkcm1fcmVjdF9oZWlnaHQoaW5fcm90 KSA+PiAxNiwKPiAtCQkJaW5fcm90LT54MSA+PiAxNiwgaW5fcm90LT55MSA+PiAxNiwKPiAtCQkJ ZHJtX3JlY3Rfd2lkdGgoJnJzdGF0ZS0+b3V0X3JvdF9yZWN0KSA+PiAxNiwKPiAtCQkJZHJtX3Jl Y3RfaGVpZ2h0KCZyc3RhdGUtPm91dF9yb3RfcmVjdCkgPj4gMTYsCj4gLQkJCXJzdGF0ZS0+b3V0 X3JvdF9yZWN0LngxID4+IDE2LAo+IC0JCQlyc3RhdGUtPm91dF9yb3RfcmVjdC55MSA+PiAxNik7 Cj4gLQlEUFVfRVZUMzIoRFJNSUQocGxhbmUpLCByc3RhdGUtPnNlcXVlbmNlX2lkLAo+IC0JCQly c3RhdGUtPm91dF94cG9zLCByc3RhdGUtPm5wbGFuZSwKPiAtCQkJaW5fcm90LT54MSA+PiAxNiwg aW5fcm90LT55MSA+PiAxNiwKPiAtCQkJZHJtX3JlY3Rfd2lkdGgoaW5fcm90KSA+PiAxNiwKPiAt CQkJZHJtX3JlY3RfaGVpZ2h0KGluX3JvdCkgPj4gMTYsCj4gLQkJCXJzdGF0ZS0+b3V0X3JvdF9y ZWN0LngxID4+IDE2LAo+IC0JCQlyc3RhdGUtPm91dF9yb3RfcmVjdC55MSA+PiAxNiwKPiAtCQkJ ZHJtX3JlY3Rfd2lkdGgoJnJzdGF0ZS0+b3V0X3JvdF9yZWN0KSA+PiAxNiwKPiAtCQkJZHJtX3Jl Y3RfaGVpZ2h0KCZyc3RhdGUtPm91dF9yb3RfcmVjdCkgPj4gMTYpOwo+IC0KPiAtCXJldHVybiAw Owo+IC19Cj4gLQo+IC0vKioKPiAtICogZHB1X3BsYW5lX3JvdF9zdWJtaXRfY29tbWFuZCAtIGNv bW1pdCBnaXZlbiBzdGF0ZSBmb3IgdGhlIHJvdGF0b3Igc3RhZ2UKPiAtICogQHBsYW5lOiBQb2lu dGVyIHRvIGRybSBwbGFuZQo+IC0gKiBAc3RhdGU6IFBvaW50ZXIgdG8gdGhlIHN0YXRlIHRvIGJl IGNvbW1pdHRlZAo+IC0gKiBAaHdfY21kOiByb3RhdG9yIGNvbW1hbmQgdHlwZQo+IC0gKiByZXR1 cm46IDAgaWYgc3VjY2VzczsgZXJyb3IgY29kZSBvdGhlcndpc2UKPiAtICovCj4gLXN0YXRpYyBp bnQgZHB1X3BsYW5lX3JvdF9zdWJtaXRfY29tbWFuZChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK PiAtCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwgZW51bSBkcHVfaHdfcm90X2NtZF90 eXBlIGh3X2NtZCkKPiAtewo+IC0Jc3RydWN0IGRwdV9wbGFuZSAqcGRwdSA9IHRvX2RwdV9wbGFu ZShwbGFuZSk7Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGUgPSB0b19kcHVfcGxh bmVfc3RhdGUoc3RhdGUpOwo+IC0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKnJzdGF0ZSA9 ICZwc3RhdGUtPnJvdDsKPiAtCXN0cnVjdCBkcHVfaHdfcm90X2NtZCAqcm90X2NtZDsKPiAtCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3N0YXRlOwo+IC0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpk cHVfY3N0YXRlOwo+IC0JaW50IHJldCwgaTsKPiAtCWludCBmYl9tb2RlOwo+IC0KPiAtCWlmICgh cGxhbmUgfHwgIXN0YXRlIHx8ICFzdGF0ZS0+ZmIgfHwgIXJzdGF0ZS0+cm90X2h3KSB7Cj4gLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+ IC0JfQo+IC0KPiAtCWNzdGF0ZSA9IF9kcHVfcGxhbmVfZ2V0X2NydGNfc3RhdGUoc3RhdGUpOwo+ IC0JaWYgKElTX0VSUl9PUl9OVUxMKGNzdGF0ZSkpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQg Y3J0YyBzdGF0ZSAlbGRcbiIsIFBUUl9FUlIoY3N0YXRlKSk7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7 Cj4gLQl9Cj4gLQlkcHVfY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3N0YXRlKTsKPiAtCj4g LQlyb3RfY21kID0gJnJzdGF0ZS0+cm90X2NtZDsKPiAtCj4gLQlyb3RfY21kLT5tYXN0ZXIgPSAo cnN0YXRlLT5vdXRfeHBvcyA9PSAwKTsKPiAtCXJvdF9jbWQtPnNlcXVlbmNlX2lkID0gcnN0YXRl LT5zZXF1ZW5jZV9pZDsKPiAtCXJvdF9jbWQtPmZwcyA9IHBzdGF0ZS0+YmFzZS5jcnRjICYmIHBz dGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZSA/Cj4gLQkJZHJtX21vZGVfdnJlZnJlc2goJnBzdGF0ZS0+ YmFzZS5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZSkgOgo+IC0JCURFRkFVTFRfUkVGUkVTSF9S QVRFOwo+IC0Jcm90X2NtZC0+cm90OTAgPSByc3RhdGUtPnJvdDkwOwo+IC0Jcm90X2NtZC0+aGZs aXAgPSByc3RhdGUtPmhmbGlwOwo+IC0Jcm90X2NtZC0+dmZsaXAgPSByc3RhdGUtPnZmbGlwOwo+ IC0KPiAtCXJvdF9jbWQtPnByZWZpbGxfYncgPSBkcHVfY3J0Y19nZXRfcHJvcGVydHkoZHB1X2Nz dGF0ZSwKPiAtCQkJQ1JUQ19QUk9QX1JPVF9QUkVGSUxMX0JXKTsKPiAtCXJvdF9jbWQtPmNsa3Jh dGUgPSBkcHVfY3J0Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0ZSwKPiAtCQkJQ1JUQ19QUk9QX1JP VF9DTEspOwo+IC0Jcm90X2NtZC0+ZHN0X3dyaXRlYmFjayA9IHBkcHUtPnNidWZfd3JpdGViYWNr Owo+IC0KPiAtCWlmIChkcHVfY3J0Y19nZXRfaW50Zl9tb2RlKHN0YXRlLT5jcnRjKSA9PSBJTlRG X01PREVfVklERU8pCj4gLQkJcm90X2NtZC0+dmlkZW9fbW9kZSA9IHRydWU7Cj4gLQllbHNlCj4g LQkJcm90X2NtZC0+dmlkZW9fbW9kZSA9IGZhbHNlOwo+IC0KPiAtCXJvdF9jbWQtPnNyY19waXhl bF9mb3JtYXQgPSBzdGF0ZS0+ZmItPmZvcm1hdC0+Zm9ybWF0Owo+IC0Jcm90X2NtZC0+c3JjX21v ZGlmaWVyID0gc3RhdGUtPmZiLT5tb2RpZmllcjsKPiAtCXJvdF9jbWQtPnNyY19zdHJpZGUgPSBz dGF0ZS0+ZmItPnBpdGNoZXNbMF07Cj4gLQo+IC0Jcm90X2NtZC0+c3JjX2Zvcm1hdCA9IHRvX2Rw dV9mb3JtYXQobXNtX2ZyYW1lYnVmZmVyX2Zvcm1hdChzdGF0ZS0+ZmIpKTsKPiAtCWlmICghcm90 X2NtZC0+c3JjX2Zvcm1hdCkgewo+IC0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGdldCBzcmMgZm9y bWF0XG4iKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlyb3RfY21kLT5zcmNf d2lkdGggPSBzdGF0ZS0+ZmItPndpZHRoOwo+IC0Jcm90X2NtZC0+c3JjX2hlaWdodCA9IHN0YXRl LT5mYi0+aGVpZ2h0Owo+IC0Jcm90X2NtZC0+c3JjX3JlY3RfeCA9IHJzdGF0ZS0+aW5fcm90X3Jl Y3QueDEgPj4gMTY7Cj4gLQlyb3RfY21kLT5zcmNfcmVjdF95ID0gcnN0YXRlLT5pbl9yb3RfcmVj dC55MSA+PiAxNjsKPiAtCXJvdF9jbWQtPnNyY19yZWN0X3cgPSBkcm1fcmVjdF93aWR0aCgmcnN0 YXRlLT5pbl9yb3RfcmVjdCkgPj4gMTY7Cj4gLQlyb3RfY21kLT5zcmNfcmVjdF9oID0gZHJtX3Jl Y3RfaGVpZ2h0KCZyc3RhdGUtPmluX3JvdF9yZWN0KSA+PiAxNjsKPiAtCXJvdF9jbWQtPmRzdF9y ZWN0X3ggPSAwOwo+IC0Jcm90X2NtZC0+ZHN0X3JlY3RfeSA9IDA7Cj4gLQlyb3RfY21kLT5kc3Rf cmVjdF93ID0gZHJtX3JlY3Rfd2lkdGgoJnJzdGF0ZS0+b3V0X3JvdF9yZWN0KSA+PiAxNjsKPiAt CXJvdF9jbWQtPmRzdF9yZWN0X2ggPSBkcm1fcmVjdF9oZWlnaHQoJnJzdGF0ZS0+b3V0X3JvdF9y ZWN0KSA+PiAxNjsKPiAtCj4gLQlpZiAoaHdfY21kID09IERQVV9IV19ST1RfQ01EX0NPTU1JVCkg ewo+IC0JCXN0cnVjdCBkcHVfaHdfZm10X2xheW91dCBsYXlvdXQ7Cj4gLQo+IC0JCW1lbXNldCgm bGF5b3V0LCAwLCBzaXplb2Yoc3RydWN0IGRwdV9od19mbXRfbGF5b3V0KSk7Cj4gLQkJZHB1X2Zv cm1hdF9wb3B1bGF0ZV9sYXlvdXQocHN0YXRlLT5hc3BhY2UsIHN0YXRlLT5mYiwKPiAtCQkJCSZs YXlvdXQpOwo+IC0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJvdF9jbWQtPnNyY19pb3Zh KTsgaSsrKSB7Cj4gLQkJCXJvdF9jbWQtPnNyY19pb3ZhW2ldID0gbGF5b3V0LnBsYW5lX2FkZHJb aV07Cj4gLQkJCXJvdF9jbWQtPnNyY19sZW5baV0gPSBsYXlvdXQucGxhbmVfc2l6ZVtpXTsKPiAt CQl9Cj4gLQkJcm90X2NtZC0+c3JjX3BsYW5lcyA9IGxheW91dC5udW1fcGxhbmVzOwo+IC0KPiAt CQltZW1zZXQoJmxheW91dCwgMCwgc2l6ZW9mKHN0cnVjdCBkcHVfaHdfZm10X2xheW91dCkpOwo+ IC0JCWRwdV9mb3JtYXRfcG9wdWxhdGVfbGF5b3V0KHBzdGF0ZS0+YXNwYWNlLCByc3RhdGUtPm91 dF9mYiwKPiAtCQkJCSZsYXlvdXQpOwo+IC0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJv dF9jbWQtPmRzdF9pb3ZhKTsgaSsrKSB7Cj4gLQkJCXJvdF9jbWQtPmRzdF9pb3ZhW2ldID0gbGF5 b3V0LnBsYW5lX2FkZHJbaV07Cj4gLQkJCXJvdF9jbWQtPmRzdF9sZW5baV0gPSBsYXlvdXQucGxh bmVfc2l6ZVtpXTsKPiAtCQl9Cj4gLQkJcm90X2NtZC0+ZHN0X3BsYW5lcyA9IGxheW91dC5udW1f cGxhbmVzOwo+IC0KPiAtCQkvKiBWQklGIHJlbWFwcGVyIHNldHRpbmdzICovCj4gLQkJZm9yIChp ID0gMDsgaSA8IHJzdGF0ZS0+cm90X2h3LT5jYXBzLT54aW5fY291bnQ7IGkrKykgewo+IC0JCQlj b25zdCBzdHJ1Y3QgZHB1X3JvdF92YmlmX2NmZyAqY2ZnID0KPiAtCQkJCQkmcnN0YXRlLT5yb3Rf aHctPmNhcHMtPnZiaWZfY2ZnW2ldOwo+IC0KPiAtCQkJX2RwdV9wbGFuZV9pbmxpbmVfcm90X3Nl dF9xb3NfcmVtYXAocGxhbmUsIGNmZyk7Cj4gLQo+IC0JCQlpZiAoY2ZnLT5pc19yZWFkKSB7Cj4g LQkJCQlfZHB1X3BsYW5lX2lubGluZV9yb3Rfc2V0X290X2xpbWl0KHBsYW5lLAo+IC0JCQkJCXN0 YXRlLT5jcnRjLCBjZmcsIHJvdF9jbWQtPnNyY19yZWN0X3csCj4gLQkJCQkJcm90X2NtZC0+c3Jj X3JlY3RfaCk7Cj4gLQkJCX0gZWxzZSB7Cj4gLQkJCQlfZHB1X3BsYW5lX2lubGluZV9yb3Rfc2V0 X290X2xpbWl0KHBsYW5lLAo+IC0JCQkJCXN0YXRlLT5jcnRjLCBjZmcsIHJvdF9jbWQtPmRzdF9y ZWN0X3csCj4gLQkJCQkJcm90X2NtZC0+ZHN0X3JlY3RfaCk7Cj4gLQkJCX0KPiAtCQl9Cj4gLQl9 Cj4gLQo+IC0JcmV0ID0gcnN0YXRlLT5yb3RfaHctPm9wcy5jb21taXQocnN0YXRlLT5yb3RfaHcs IHJvdF9jbWQsIGh3X2NtZCk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0J cnN0YXRlLT5vdXRfcm90YXRpb24gPSByc3RhdGUtPmluX3JvdGF0aW9uOwo+IC0JcnN0YXRlLT5v dXRfZmJfZmxhZ3MgPSByb3RfY21kLT5kc3RfbW9kaWZpZXIgPwo+IC0JCQlEUk1fTU9ERV9GQl9N T0RJRklFUlMgOiAwOwo+IC0JcnN0YXRlLT5vdXRfZmJfZm9ybWF0ID0gcm90X2NtZC0+ZHN0X2Zv cm1hdDsKPiAtCXJzdGF0ZS0+b3V0X2ZiX3BpeGVsX2Zvcm1hdCA9IHJvdF9jbWQtPmRzdF9waXhl bF9mb3JtYXQ7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnN0YXRlLT5vdXRf ZmJfbW9kaWZpZXIpOyBpKyspCj4gLQkJcnN0YXRlLT5vdXRfZmJfbW9kaWZpZXJbaV0gPSByb3Rf Y21kLT5kc3RfbW9kaWZpZXI7Cj4gLQo+IC0JcnN0YXRlLT5vdXRfZmJfd2lkdGggPSBkcm1fcmVj dF93aWR0aCgmcnN0YXRlLT5vdXRfcm90X3JlY3QpID4+IDE2Owo+IC0JcnN0YXRlLT5vdXRfZmJf aGVpZ2h0ID0gZHJtX3JlY3RfaGVpZ2h0KCZyc3RhdGUtPm91dF9yb3RfcmVjdCkgPj4gMTY7Cj4g LQlyc3RhdGUtPm91dF9zcmNfeCA9IHJzdGF0ZS0+b3V0X3NyY19yZWN0LngxIC0gcnN0YXRlLT5v dXRfcm90X3JlY3QueDE7Cj4gLQlyc3RhdGUtPm91dF9zcmNfeSA9IHJzdGF0ZS0+b3V0X3NyY19y ZWN0LnkxIC0gcnN0YXRlLT5vdXRfcm90X3JlY3QueTE7Cj4gLQlyc3RhdGUtPm91dF9zcmNfdyA9 IGRybV9yZWN0X3dpZHRoKCZyc3RhdGUtPm91dF9zcmNfcmVjdCk7Cj4gLQlyc3RhdGUtPm91dF9z cmNfaCA9IGRybV9yZWN0X2hlaWdodCgmcnN0YXRlLT5vdXRfc3JjX3JlY3QpOwo+IC0KPiAtCWlm IChyb3RfY21kLT5yb3Q5MCkKPiAtCQlyc3RhdGUtPm91dF9yb3RhdGlvbiAmPSB+RFJNX01PREVf Uk9UQVRFXzkwOwo+IC0KPiAtCWlmIChyb3RfY21kLT5oZmxpcCkKPiAtCQlyc3RhdGUtPm91dF9y b3RhdGlvbiAmPSB+RFJNX01PREVfUkVGTEVDVF9YOwo+IC0KPiAtCWlmIChyb3RfY21kLT52Zmxp cCkKPiAtCQlyc3RhdGUtPm91dF9yb3RhdGlvbiAmPSB+RFJNX01PREVfUkVGTEVDVF9ZOwo+IC0K PiAtCURQVV9ERUJVRygKPiAtCQkicGxhbmUlZC4lZCByb3Q6JWQvJWMlYyVjJWMvJWR4JWQvJTQu NHMvJWxseC8lZHglZCslZCslZFxuIiwKPiAtCQkJcGxhbmUtPmJhc2UuaWQsIHJzdGF0ZS0+c2Vx dWVuY2VfaWQsIGh3X2NtZCwKPiAtCQkJcm90X2NtZC0+cm90OTAgPyAncicgOiAnXycsCj4gLQkJ CXJvdF9jbWQtPmhmbGlwID8gJ2gnIDogJ18nLAo+IC0JCQlyb3RfY21kLT52ZmxpcCA/ICd2JyA6 ICdfJywKPiAtCQkJcm90X2NtZC0+dmlkZW9fbW9kZSA/ICdWJyA6ICdDJywKPiAtCQkJc3RhdGUt PmZiLT53aWR0aCwgc3RhdGUtPmZiLT5oZWlnaHQsCj4gLQkJCShjaGFyICopICZzdGF0ZS0+ZmIt PmZvcm1hdC0+Zm9ybWF0LAo+IC0JCQlzdGF0ZS0+ZmItPm1vZGlmaWVyLAo+IC0JCQlkcm1fcmVj dF93aWR0aCgmcnN0YXRlLT5pbl9yb3RfcmVjdCkgPj4gMTYsCj4gLQkJCWRybV9yZWN0X2hlaWdo dCgmcnN0YXRlLT5pbl9yb3RfcmVjdCkgPj4gMTYsCj4gLQkJCXJzdGF0ZS0+aW5fcm90X3JlY3Qu eDEgPj4gMTYsCj4gLQkJCXJzdGF0ZS0+aW5fcm90X3JlY3QueTEgPj4gMTYpOwo+IC0KPiAtCURQ VV9ERUJVRygicGxhbmUlZC4lZCBzc3BwOiVkLyV4LyVkeCVkLyU0LjRzLyVsbHgvJWR4JWQrJWQr JWRcbiIsCj4gLQkJCXBsYW5lLT5iYXNlLmlkLCByc3RhdGUtPnNlcXVlbmNlX2lkLCBod19jbWQs Cj4gLQkJCXJzdGF0ZS0+b3V0X3JvdGF0aW9uLAo+IC0JCQlyc3RhdGUtPm91dF9mYl93aWR0aCwg cnN0YXRlLT5vdXRfZmJfaGVpZ2h0LAo+IC0JCQkoY2hhciAqKSAmcnN0YXRlLT5vdXRfZmJfcGl4 ZWxfZm9ybWF0LAo+IC0JCQlyc3RhdGUtPm91dF9mYl9tb2RpZmllclswXSwKPiAtCQkJcnN0YXRl LT5vdXRfc3JjX3cgPj4gMTYsIHJzdGF0ZS0+b3V0X3NyY19oID4+IDE2LAo+IC0JCQlyc3RhdGUt Pm91dF9zcmNfeCA+PiAxNiwgcnN0YXRlLT5vdXRfc3JjX3kgPj4gMTYpOwo+IC0KPiAtCXJldHVy biByZXQ7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBfZHB1X3BsYW5lX3JvdF9nZXRfZmIgLSBhdHRl bXB0IHRvIGdldCBwcmV2aW91c2x5IGFsbG9jYXRlZCBmYi9mYm8KPiAtICoJSWYgYW4gZmIvZmJv IHdhcyBhbHJlYWR5IGNyZWF0ZWQsIGVpdGhlciBmcm9tIGEgcHJldmlvdXMgZnJhbWUgb3IKPiAt ICoJZnJvbSBhbm90aGVyIHBsYW5lIGluIHRoZSBjdXJyZW50IGNvbW1pdCBjeWNsZSwgYXR0ZW1w dCB0byByZXVzZQo+IC0gKglpdCBmb3IgdGhpcyBjb21taXQgY3ljbGUgYXMgd2VsbC4KPiAtICog QHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQo+IC0gKiBAY3N0YXRlOiBQb2ludGVyIHRvIGNy dGMgc3RhdGUKPiAtICogQHJzdGF0ZTogUG9pbnRlciB0byByb3RhdG9yIHBsYW5lIHN0YXRlCj4g LSAqLwo+IC1zdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3JvdF9nZXRfZmIoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCj4gLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGUsCj4gLQkJc3RydWN0 IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKnJzdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRwdV9rbXNfZmJv ICpmYm87Cj4gLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiAtCj4gLQlpZiAoIXBsYW5l IHx8ICFjc3RhdGUgfHwgIXJzdGF0ZSB8fCAhcnN0YXRlLT5yb3RfaHcpCj4gLQkJcmV0dXJuOwo+ IC0KPiAtCWZibyA9IGRwdV9jcnRjX3Jlc19nZXQoY3N0YXRlLCBEUFVfQ1JUQ19SRVNfUk9UX09V VF9GQk8sCj4gLQkJCSh1NjQpICZyc3RhdGUtPnJvdF9ody0+YmFzZSk7Cj4gLQlmYiA9IGRwdV9j cnRjX3Jlc19nZXQoY3N0YXRlLCBEUFVfQ1JUQ19SRVNfUk9UX09VVF9GQiwKPiAtCQkJKHU2NCkg JnJzdGF0ZS0+cm90X2h3LT5iYXNlKTsKPiAtCWlmIChmYiAmJiBmYm8pIHsKPiAtCQlEUFVfREVC VUcoInBsYW5lJWQuJWQgZ2V0IGZiL2Zib1xuIiwgcGxhbmUtPmJhc2UuaWQsCj4gLQkJCQlyc3Rh dGUtPnNlcXVlbmNlX2lkKTsKPiAtCX0gZWxzZSBpZiAoZmJvKSB7Cj4gLQkJZHB1X2NydGNfcmVz X3B1dChjc3RhdGUsIERQVV9DUlRDX1JFU19ST1RfT1VUX0ZCTywKPiAtCQkJCSh1NjQpICZyc3Rh dGUtPnJvdF9ody0+YmFzZSk7Cj4gLQkJZmJvID0gTlVMTDsKPiAtCX0gZWxzZSBpZiAoZmIpIHsK PiAtCQlkcHVfY3J0Y19yZXNfcHV0KGNzdGF0ZSwgRFBVX0NSVENfUkVTX1JPVF9PVVRfRkIsCj4g LQkJCQkodTY0KSAmcnN0YXRlLT5yb3RfaHctPmJhc2UpOwo+IC0JCWZiID0gTlVMTDsKPiAtCX0K PiAtCj4gLQlyc3RhdGUtPm91dF9mYm8gPSBmYm87Cj4gLQlyc3RhdGUtPm91dF9mYiA9IGZiOwo+ IC19Cj4gLQo+IC0vKioKPiAtICogZHB1X3BsYW5lX3JvdF9wcmVwYXJlX2ZiIC0gcHJlcGFyZSBm cmFtZWJ1ZmZlciBvZiB0aGUgbmV3IHN0YXRlCj4gLSAqCWZvciByb3RhdG9yIChwcmUtc3NwcCkg c3RhZ2UKPiAtICogQHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQo+IC0gKiBAbmV3X3N0YXRl OiBQb2ludGVyIHRvIG5ldyBkcm0gcGxhbmUgc3RhdGUKPiAtICogcmV0dXJuOiAwIGlmIHN1Y2Nl c3M7IGVycm9yIGNvZGUgb3RoZXJ3aXNlCj4gLSAqLwo+IC1zdGF0aWMgaW50IGRwdV9wbGFuZV9y b3RfcHJlcGFyZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAtCQlzdHJ1Y3QgZHJtX3Bs YW5lX3N0YXRlICpuZXdfc3RhdGUpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gbmV3X3N0YXRlLT5mYjsKPiAtCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKm5ld19wc3RhdGUg PSB0b19kcHVfcGxhbmVfc3RhdGUobmV3X3N0YXRlKTsKPiAtCXN0cnVjdCBkcHVfcGxhbmVfcm90 X3N0YXRlICpuZXdfcnN0YXRlID0gJm5ld19wc3RhdGUtPnJvdDsKPiAtCXN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqY3N0YXRlOwo+IC0JaW50IHJldDsKPiAtCj4gLQlEUFVfREVCVUcoInBsYW5lJWQu JWQgRkJbJXVdIHNidWY6JWQgcm90OiVkIGNydGM6JWRcbiIsCj4gLQkJCXBsYW5lLT5iYXNlLmlk LAo+IC0JCQluZXdfcnN0YXRlLT5zZXF1ZW5jZV9pZCwgZmIgPyBmYi0+YmFzZS5pZCA6IDAsCj4g LQkJCSEhbmV3X3JzdGF0ZS0+b3V0X3NidWYsICEhbmV3X3JzdGF0ZS0+cm90X2h3LAo+IC0JCQlk cHVfcGxhbmVfY3J0Y19lbmFibGVkKG5ld19zdGF0ZSkpOwo+IC0KPiAtCWlmICghbmV3X3JzdGF0 ZS0+b3V0X3NidWYgfHwgIW5ld19yc3RhdGUtPnJvdF9odykKPiAtCQlyZXR1cm4gMDsKPiAtCj4g LQljc3RhdGUgPSBfZHB1X3BsYW5lX2dldF9jcnRjX3N0YXRlKG5ld19zdGF0ZSk7Cj4gLQlpZiAo SVNfRVJSKGNzdGF0ZSkpIHsKPiAtCQlyZXQgPSBQVFJfRVJSKGNzdGF0ZSk7Cj4gLQkJRFBVX0VS Uk9SKCJpbnZhbGlkIGNydGMgc3RhdGUgJWRcbiIsIHJldCk7Cj4gLQkJcmV0dXJuIHJldDsKPiAt CX0KPiAtCj4gLQkvKiBuZWVkIHRvIHJlLWNhbGMgYmFzZWQgb24gYWxsIG5ld2x5IHZhbGlkYXRl ZCBwbGFuZSBzdGF0ZXMgKi8KPiAtCXJldCA9IGRwdV9wbGFuZV9yb3RfY2FsY19jZmcocGxhbmUs IG5ld19zdGF0ZSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JLyogY2hl Y2sgaWYgc3RyZWFtIGJ1ZmZlciBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIHJvdGF0b3IgKi8KPiAt CWlmIChkcHVfcGxhbmVfZW5hYmxlZChuZXdfc3RhdGUpICYmICFuZXdfcnN0YXRlLT5vdXRfZmIp Cj4gLQkJX2RwdV9wbGFuZV9yb3RfZ2V0X2ZiKHBsYW5lLCBjc3RhdGUsIG5ld19yc3RhdGUpOwo+ IC0KPiAtCS8qIGNyZWF0ZSBuZXcgc3RyZWFtIGJ1ZmZlciBpZiBpdCBpcyBub3QgYXZhaWxhYmxl ICovCj4gLQlpZiAoZHB1X3BsYW5lX2VuYWJsZWQobmV3X3N0YXRlKSAmJiAhbmV3X3JzdGF0ZS0+ b3V0X2ZiKSB7Cj4gLQkJdTMyIGZiX3cgPSBkcm1fcmVjdF93aWR0aCgmbmV3X3JzdGF0ZS0+b3V0 X3JvdF9yZWN0KSA+PiAxNjsKPiAtCQl1MzIgZmJfaCA9IGRybV9yZWN0X2hlaWdodCgmbmV3X3Jz dGF0ZS0+b3V0X3JvdF9yZWN0KSA+PiAxNjsKPiAtCj4gLQkJRFBVX0RFQlVHKCJwbGFuZSVkLiVk IGFsbG9jYXRlIGZiL2Zib1xuIiwgcGxhbmUtPmJhc2UuaWQsCj4gLQkJCQluZXdfcnN0YXRlLT5z ZXF1ZW5jZV9pZCk7Cj4gLQo+IC0JCS8qIGNoZWNrIGlmIG91dF9mYiBpcyBhbHJlYWR5IGF0dGFj aGVkIHRvIHJvdGF0b3IgKi8KPiAtCQluZXdfcnN0YXRlLT5vdXRfZmJvID0gZHB1X2ttc19mYm9f YWxsb2MocGxhbmUtPmRldiwgZmJfdywgZmJfaCwKPiAtCQkJCW5ld19yc3RhdGUtPm91dF9mYl9w aXhlbF9mb3JtYXQsCj4gLQkJCQluZXdfcnN0YXRlLT5vdXRfZmJfbW9kaWZpZXIsCj4gLQkJCQlu ZXdfcnN0YXRlLT5vdXRfZmJfZmxhZ3MpOwo+IC0JCWlmICghbmV3X3JzdGF0ZS0+b3V0X2Zibykg ewo+IC0JCQlEUFVfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBpbmxpbmUgYnVmZmVyIG9iamVj dFxuIik7Cj4gLQkJCXJldCA9IC1FSU5WQUw7Cj4gLQkJCWdvdG8gZXJyb3JfY3JlYXRlX2ZibzsK PiAtCQl9Cj4gLQo+IC0JCXJldCA9IGRwdV9jcnRjX3Jlc19hZGQoY3N0YXRlLCBEUFVfQ1JUQ19S RVNfUk9UX09VVF9GQk8sCj4gLQkJCQkodTY0KSAmbmV3X3JzdGF0ZS0+cm90X2h3LT5iYXNlLAo+ IC0JCQkJbmV3X3JzdGF0ZS0+b3V0X2ZibywgJmZib19yZXNfb3BzKTsKPiAtCQlpZiAocmV0KSB7 Cj4gLQkJCURQVV9FUlJPUigiZmFpbGVkIHRvIGFkZCBjcnRjIHJlc291cmNlXG4iKTsKPiAtCQkJ Z290byBlcnJvcl9jcmVhdGVfZmJvX3JlczsKPiAtCQl9Cj4gLQo+IC0JCW5ld19yc3RhdGUtPm91 dF9mYiA9IGRwdV9rbXNfZmJvX2NyZWF0ZV9mYihwbGFuZS0+ZGV2LAo+IC0JCQkJbmV3X3JzdGF0 ZS0+b3V0X2Zibyk7Cj4gLQkJaWYgKCFuZXdfcnN0YXRlLT5vdXRfZmIpIHsKPiAtCQkJRFBVX0VS Uk9SKCJmYWlsZWQgdG8gY3JlYXRlIGlubGluZSBmcmFtZWJ1ZmZlclxuIik7Cj4gLQkJCXJldCA9 IC1FSU5WQUw7Cj4gLQkJCWdvdG8gZXJyb3JfY3JlYXRlX2ZiOwo+IC0JCX0KPiAtCQlEUFVfRVZU MzJfVkVSQk9TRShEUk1JRChwbGFuZSksIG5ld19yc3RhdGUtPnNlcXVlbmNlX2lkLAo+IC0JCQkJ bmV3X3JzdGF0ZS0+b3V0X2ZiLT5iYXNlLmlkKTsKPiAtCj4gLQkJcmV0ID0gZHB1X2NydGNfcmVz X2FkZChjc3RhdGUsIERQVV9DUlRDX1JFU19ST1RfT1VUX0ZCLAo+IC0JCQkJKHU2NCkgJm5ld19y c3RhdGUtPnJvdF9ody0+YmFzZSwKPiAtCQkJCW5ld19yc3RhdGUtPm91dF9mYiwgJmZiX3Jlc19v cHMpOwo+IC0JCWlmIChyZXQpIHsKPiAtCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWRkIGNydGMg cmVzb3VyY2UgJWRcbiIsIHJldCk7Cj4gLQkJCWdvdG8gZXJyb3JfY3JlYXRlX2ZiX3JlczsKPiAt CQl9Cj4gLQl9Cj4gLQo+IC0JLyogcHJlcGFyZSByb3RhdG9yIGlucHV0IGJ1ZmZlciAqLwo+IC0J cmV0ID0gbXNtX2ZyYW1lYnVmZmVyX3ByZXBhcmUobmV3X3N0YXRlLT5mYiwgbmV3X3BzdGF0ZS0+ YXNwYWNlKTsKPiAtCWlmIChyZXQpIHsKPiAtCQlEUFVfRVJST1IoImZhaWxlZCB0byBwcmVwYXJl IGlucHV0IGZyYW1lYnVmZmVyLCAlZFxuIiwgcmV0KTsKPiAtCQlnb3RvIGVycm9yX3ByZXBhcmVf aW5wdXRfYnVmZmVyOwo+IC0JfQo+IC0KPiAtCS8qIHByZXBhcmUgcm90YXRvciBvdXRwdXQgYnVm ZmVyICovCj4gLQlpZiAoZHB1X3BsYW5lX2VuYWJsZWQobmV3X3N0YXRlKSAmJiBuZXdfcnN0YXRl LT5vdXRfZmIpIHsKPiAtCQlEUFVfREVCVUcoInBsYW5lJWQuJWQgcHJlcGFyZSBmYi9mYm9cbiIs IHBsYW5lLT5iYXNlLmlkLAo+IC0JCQkJbmV3X3JzdGF0ZS0+c2VxdWVuY2VfaWQpOwo+IC0KPiAt CQlyZXQgPSBtc21fZnJhbWVidWZmZXJfcHJlcGFyZShuZXdfcnN0YXRlLT5vdXRfZmIsCj4gLQkJ CQluZXdfcHN0YXRlLT5hc3BhY2UpOwo+IC0JCWlmIChyZXQpIHsKPiAtCQkJRFBVX0VSUk9SKCJm YWlsZWQgdG8gcHJlcGFyZSBpbmxpbmUgZnJhbWVidWZmZXIsICVkXG4iLAo+IC0JCQkJCXJldCk7 Cj4gLQkJCWdvdG8gZXJyb3JfcHJlcGFyZV9vdXRwdXRfYnVmZmVyOwo+IC0JCX0KPiAtCX0KPiAt Cj4gLQlyZXR1cm4gMDsKPiAtCj4gLWVycm9yX3ByZXBhcmVfb3V0cHV0X2J1ZmZlcjoKPiAtCW1z bV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKG5ld19zdGF0ZS0+ZmIsIG5ld19wc3RhdGUtPmFzcGFjZSk7 Cj4gLWVycm9yX3ByZXBhcmVfaW5wdXRfYnVmZmVyOgo+IC0JZHB1X2NydGNfcmVzX3B1dChjc3Rh dGUsIERQVV9DUlRDX1JFU19ST1RfT1VUX0ZCLAo+IC0JCQkodTY0KSAmbmV3X3JzdGF0ZS0+cm90 X2h3LT5iYXNlKTsKPiAtZXJyb3JfY3JlYXRlX2ZiX3JlczoKPiAtCW5ld19yc3RhdGUtPm91dF9m YiA9IE5VTEw7Cj4gLWVycm9yX2NyZWF0ZV9mYjoKPiAtCWRwdV9jcnRjX3Jlc19wdXQoY3N0YXRl LCBEUFVfQ1JUQ19SRVNfUk9UX09VVF9GQk8sCj4gLQkJCSh1NjQpICZuZXdfcnN0YXRlLT5yb3Rf aHctPmJhc2UpOwo+IC1lcnJvcl9jcmVhdGVfZmJvX3JlczoKPiAtCW5ld19yc3RhdGUtPm91dF9m Ym8gPSBOVUxMOwo+IC1lcnJvcl9jcmVhdGVfZmJvOgo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0K PiAtLyoqCj4gLSAqIGRwdV9wbGFuZV9yb3RfY2xlYW51cF9mYiAtIGNsZWFudXAgZnJhbWVidWZm ZXIgb2YgcHJldmlvdXMgc3RhdGUgZm9yIHRoZQo+IC0gKglyb3RhdG9yIChwcmUtc3NwcCkgc3Rh Z2UKPiAtICogQHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQo+IC0gKiBAb2xkX3N0YXRlOiBQ b2ludGVyIHRvIHByZXZpb3VzIGRybSBwbGFuZSBzdGF0ZQo+IC0gKiByZXR1cm46IG5vbmUKPiAt ICovCj4gLXN0YXRpYyB2b2lkIGRwdV9wbGFuZV9yb3RfY2xlYW51cF9mYihzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCj4gLXsK PiAtCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKm9sZF9wc3RhdGUgPSB0b19kcHVfcGxhbmVfc3Rh dGUob2xkX3N0YXRlKTsKPiAtCXN0cnVjdCBkcHVfcGxhbmVfcm90X3N0YXRlICpvbGRfcnN0YXRl ID0gJm9sZF9wc3RhdGUtPnJvdDsKPiAtCXN0cnVjdCBkcHVfaHdfcm90X2NtZCAqY21kID0gJm9s ZF9yc3RhdGUtPnJvdF9jbWQ7Cj4gLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNzdGF0ZTsKPiAt CWludCByZXQ7Cj4gLQo+IC0JRFBVX0RFQlVHKCJwbGFuZSVkLiVkIEZCWyV1XSBzYnVmOiVkIHJv dDolZCBjcnRjOiVkXG4iLCBwbGFuZS0+YmFzZS5pZCwKPiAtCQkJb2xkX3JzdGF0ZS0+c2VxdWVu Y2VfaWQsIG9sZF9zdGF0ZS0+ZmItPmJhc2UuaWQsCj4gLQkJCSEhb2xkX3JzdGF0ZS0+b3V0X3Ni dWYsICEhb2xkX3JzdGF0ZS0+cm90X2h3LAo+IC0JCQlkcHVfcGxhbmVfY3J0Y19lbmFibGVkKG9s ZF9zdGF0ZSkpOwo+IC0KPiAtCWlmICghb2xkX3JzdGF0ZS0+b3V0X3NidWYgfHwgIW9sZF9yc3Rh dGUtPnJvdF9odykKPiAtCQlyZXR1cm47Cj4gLQo+IC0JY3N0YXRlID0gX2RwdV9wbGFuZV9nZXRf Y3J0Y19zdGF0ZShvbGRfc3RhdGUpOwo+IC0JaWYgKElTX0VSUihjc3RhdGUpKSB7Cj4gLQkJcmV0 ID0gUFRSX0VSUihjc3RhdGUpOwo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBjcnRjIHN0YXRlICVk XG4iLCByZXQpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQlpZiAoZHB1X3BsYW5lX2NydGNf ZW5hYmxlZChvbGRfc3RhdGUpKSB7Cj4gLQkJcmV0ID0gb2xkX3JzdGF0ZS0+cm90X2h3LT5vcHMu Y29tbWl0KG9sZF9yc3RhdGUtPnJvdF9odywgY21kLAo+IC0JCQkJRFBVX0hXX1JPVF9DTURfQ0xF QU5VUCk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gY2xlYW51cCBy b3RhdG9yIGJ1ZmZlcnNcbiIpOwo+IC0JfQo+IC0KPiAtCWlmIChkcHVfcGxhbmVfZW5hYmxlZChv bGRfc3RhdGUpKSB7Cj4gLQkJaWYgKG9sZF9yc3RhdGUtPm91dF9mYikgewo+IC0JCQltc21fZnJh bWVidWZmZXJfY2xlYW51cChvbGRfcnN0YXRlLT5vdXRfZmIsCj4gLQkJCQkJb2xkX3BzdGF0ZS0+ YXNwYWNlKTsKPiAtCQkJZHB1X2NydGNfcmVzX3B1dChjc3RhdGUsIERQVV9DUlRDX1JFU19ST1Rf T1VUX0ZCLAo+IC0JCQkJCSh1NjQpICZvbGRfcnN0YXRlLT5yb3RfaHctPmJhc2UpOwo+IC0JCQlv bGRfcnN0YXRlLT5vdXRfZmIgPSBOVUxMOwo+IC0JCQlkcHVfY3J0Y19yZXNfcHV0KGNzdGF0ZSwg RFBVX0NSVENfUkVTX1JPVF9PVVRfRkJPLAo+IC0JCQkJCSh1NjQpICZvbGRfcnN0YXRlLT5yb3Rf aHctPmJhc2UpOwo+IC0JCQlvbGRfcnN0YXRlLT5vdXRfZmJvID0gTlVMTDsKPiAtCQl9Cj4gLQo+ IC0JCW1zbV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKG9sZF9zdGF0ZS0+ZmIsIG9sZF9wc3RhdGUtPmFz cGFjZSk7Cj4gLQl9Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBkcHVfcGxhbmVfcm90X2F0b21pY19j aGVjayAtIHZlcmlmeSByb3RhdG9yIHVwZGF0ZSBvZiB0aGUgZ2l2ZW4gc3RhdGUKPiAtICogQHBs YW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQo+IC0gKiBAc3RhdGU6IFBvaW50ZXIgdG8gZHJtIHBs YW5lIHN0YXRlIHRvIGJlIHZhbGlkYXRlZAo+IC0gKiByZXR1cm46IDAgaWYgc3VjY2VzczsgZXJy b3IgY29kZSBvdGhlcndpc2UKPiAtICovCj4gLXN0YXRpYyBpbnQgZHB1X3BsYW5lX3JvdF9hdG9t aWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gLQkJc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqc3RhdGUpCj4gLXsKPiAtCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHU7Cj4gLQlzdHJ1Y3Qg ZHB1X3BsYW5lX3N0YXRlICpwc3RhdGUsICpvbGRfcHN0YXRlOwo+IC0Jc3RydWN0IGRwdV9wbGFu ZV9yb3Rfc3RhdGUgKnJzdGF0ZSwgKm9sZF9yc3RhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKmNzdGF0ZTsKPiAtCXN0cnVjdCBkcHVfaHdfYmxrICpod19ibGs7Cj4gLQlpbnQgaSwgcmV0 ID0gMDsKPiAtCj4gLQlpZiAoIXBsYW5lIHx8ICFzdGF0ZSkgewo+IC0JCURQVV9FUlJPUigiaW52 YWxpZCBwbGFuZS9zdGF0ZVxuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0J cGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7Cj4gLQlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3Rh dGUoc3RhdGUpOwo+IC0Jb2xkX3BzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShwbGFuZS0+c3Rh dGUpOwo+IC0JcnN0YXRlID0gJnBzdGF0ZS0+cm90Owo+IC0Jb2xkX3JzdGF0ZSA9ICZvbGRfcHN0 YXRlLT5yb3Q7Cj4gLQo+IC0JLyogY3N0YXRlIHdpbGwgYmUgbnVsbCBpZiBjcnRjIGlzIGRpc2Nv bm5lY3RlZCBmcm9tIHBsYW5lICovCj4gLQljc3RhdGUgPSBfZHB1X3BsYW5lX2dldF9jcnRjX3N0 YXRlKHN0YXRlKTsKPiAtCWlmIChJU19FUlIoY3N0YXRlKSkgewo+IC0JCXJldCA9IFBUUl9FUlIo Y3N0YXRlKTsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgY3J0YyBzdGF0ZSAlZFxuIiwgcmV0KTsK PiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAtCURQVV9ERUJVRygicGxhbmUlZC4lZCBGQlsl dV0gc2J1ZjolZCByb3Q6JWQgY3J0YzolZFxuIiwgcGxhbmUtPmJhc2UuaWQsCj4gLQkJCXJzdGF0 ZS0+c2VxdWVuY2VfaWQsIHN0YXRlLT5mYiA/IHN0YXRlLT5mYi0+YmFzZS5pZCA6IDAsCj4gLQkJ CSEhcnN0YXRlLT5vdXRfc2J1ZiwgISFyc3RhdGUtPnJvdF9odywKPiAtCQkJZHB1X3BsYW5lX2Ny dGNfZW5hYmxlZChzdGF0ZSkpOwo+IC0KPiAtCXJzdGF0ZS0+aW5fcm90YXRpb24gPSBkcm1fcm90 YXRpb25fc2ltcGxpZnkoCj4gLQkJCWRwdV9wbGFuZV9nZXRfcHJvcGVydHkocHN0YXRlLCBQTEFO RV9QUk9QX1JPVEFUSU9OKSwKPiAtCQkJRFJNX01PREVfUk9UQVRFXzAgfCBEUk1fTU9ERV9ST1RB VEVfOTAgfAo+IC0JCQlEUk1fTU9ERV9SRUZMRUNUX1ggfCBEUk1fTU9ERV9SRUZMRUNUX1kpOwo+ IC0JcnN0YXRlLT5yb3Q5MCA9IHJzdGF0ZS0+aW5fcm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVf OTAgPyB0cnVlIDogZmFsc2U7Cj4gLQlyc3RhdGUtPmhmbGlwID0gcnN0YXRlLT5pbl9yb3RhdGlv biAmIERSTV9NT0RFX1JFRkxFQ1RfWCA/IHRydWUgOiBmYWxzZTsKPiAtCXJzdGF0ZS0+dmZsaXAg PSByc3RhdGUtPmluX3JvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9ZID8gdHJ1ZSA6IGZhbHNl Owo+IC0JcnN0YXRlLT5vdXRfc2J1ZiA9IHBkcHUtPnNidWZfbW9kZSB8fCByc3RhdGUtPnJvdDkw Owo+IC0KPiAtCWlmIChkcHVfcGxhbmVfZW5hYmxlZChzdGF0ZSkgJiYgcnN0YXRlLT5vdXRfc2J1 Zikgewo+IC0JCURQVV9ERUJVRygicGxhbmUlZC4lZCBhY3F1aXJlIHJvdGF0b3IsIGZiICVkXG4i LAo+IC0JCQkJcGxhbmUtPmJhc2UuaWQsIHJzdGF0ZS0+c2VxdWVuY2VfaWQsCj4gLQkJCQlzdGF0 ZS0+ZmIgPyBzdGF0ZS0+ZmItPmJhc2UuaWQgOiAtMSk7Cj4gLQo+IC0JCWh3X2JsayA9IGRwdV9j cnRjX3Jlc19nZXQoY3N0YXRlLCBEUFVfSFdfQkxLX1JPVCwKPiAtCQkJCSh1NjQpIHN0YXRlLT5m Yik7Cj4gLQkJaWYgKCFod19ibGspIHsKPiAtCQkJRFBVX0VSUk9SKCJwbGFuZSVkLiVkIG5vIGF2 YWlsYWJsZSByb3RhdG9yLCBmYiAlZFxuIiwKPiAtCQkJCQlwbGFuZS0+YmFzZS5pZCwgcnN0YXRl LT5zZXF1ZW5jZV9pZCwKPiAtCQkJCQlzdGF0ZS0+ZmIgPyBzdGF0ZS0+ZmItPmJhc2UuaWQgOiAt MSk7Cj4gLQkJCURQVV9FVlQzMihEUk1JRChwbGFuZSksIHJzdGF0ZS0+c2VxdWVuY2VfaWQsCj4g LQkJCQkJRFBVX0VWVExPR19FUlJPUik7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0JCX0KPiAt Cj4gLQkJcnN0YXRlLT5yb3RfaHcgPSB0b19kcHVfaHdfcm90KGh3X2Jsayk7Cj4gLQo+IC0JCWlm ICghcnN0YXRlLT5yb3RfaHctPm9wcy5jb21taXQpIHsKPiAtCQkJRFBVX0VSUk9SKCJwbGFuZSVk LiVkIGludmFsaWQgcm90YXRvciBvcHNcbiIsCj4gLQkJCQkJcGxhbmUtPmJhc2UuaWQsIHJzdGF0 ZS0+c2VxdWVuY2VfaWQpOwo+IC0JCQlkcHVfY3J0Y19yZXNfcHV0KGNzdGF0ZSwKPiAtCQkJCQlE UFVfSFdfQkxLX1JPVCwgKHU2NCkgc3RhdGUtPmZiKTsKPiAtCQkJcnN0YXRlLT5yb3RfaHcgPSBO VUxMOwo+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiAtCQl9Cj4gLQo+IC0JCXJzdGF0ZS0+aW5fZmIg PSBzdGF0ZS0+ZmI7Cj4gLQl9IGVsc2Ugewo+IC0JCXJzdGF0ZS0+aW5fZmIgPSBOVUxMOwo+IC0J CXJzdGF0ZS0+cm90X2h3ID0gTlVMTDsKPiAtCX0KPiAtCj4gLQlpZiAoZHB1X3BsYW5lX2VuYWJs ZWQoc3RhdGUpICYmIHJzdGF0ZS0+b3V0X3NidWYgJiYgcnN0YXRlLT5yb3RfaHcpIHsKPiAtCQl1 aW50MzJfdCBmYl9pZDsKPiAtCj4gLQkJZmJfaWQgPSBzdGF0ZS0+ZmIgPyBzdGF0ZS0+ZmItPmJh c2UuaWQgOiAtMTsKPiAtCQlEUFVfREVCVUcoInBsYW5lJWQuJWQgdXNlIHJvdGF0b3IsIGZiICVk XG4iLAo+IC0JCQkJcGxhbmUtPmJhc2UuaWQsIHJzdGF0ZS0+c2VxdWVuY2VfaWQsIGZiX2lkKTsK PiAtCj4gLQkJcmV0ID0gZHB1X3BsYW5lX3JvdF9jYWxjX2NmZyhwbGFuZSwgc3RhdGUpOwo+IC0J CWlmIChyZXQpCj4gLQkJCXJldHVybiByZXQ7Cj4gLQo+IC0JCXJldCA9IGRwdV9wbGFuZV9yb3Rf c3VibWl0X2NvbW1hbmQocGxhbmUsIHN0YXRlLAo+IC0JCQkJRFBVX0hXX1JPVF9DTURfVkFMSURB VEUpOwo+IC0JCWlmIChyZXQpCj4gLQkJCXJldHVybiByZXQ7Cj4gLQo+IC0JCWlmIChyc3RhdGUt Pm5wbGFuZSAhPSBvbGRfcnN0YXRlLT5ucGxhbmUgfHwKPiAtCQkJCXJzdGF0ZS0+b3V0X3hwb3Mg IT0gb2xkX3JzdGF0ZS0+b3V0X3hwb3MpCj4gLQkJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5F X0RJUlRZX0ZPUk1BVCB8Cj4gLQkJCQlEUFVfUExBTkVfRElSVFlfUkVDVFM7Cj4gLQo+IC0JCS8q IGNoZWNrIGlmIHN0cmVhbSBidWZmZXIgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byByb3RhdG9yICov Cj4gLQkJX2RwdV9wbGFuZV9yb3RfZ2V0X2ZiKHBsYW5lLCBjc3RhdGUsIHJzdGF0ZSk7Cj4gLQo+ IC0JCS8qIHJlbGVhc2UgYnVmZmVyIGlmIG91dHB1dCBmb3JtYXQgY29uZmlndXJhdGlvbiBjaGFu Z2VzICovCj4gLQkJaWYgKHJzdGF0ZS0+b3V0X2ZiICYmCj4gLQkJCSgocnN0YXRlLT5vdXRfZmJf aGVpZ2h0ICE9IHJzdGF0ZS0+b3V0X2ZiLT5oZWlnaHQpIHx8Cj4gLQkJCShyc3RhdGUtPm91dF9m Yl93aWR0aCAhPSByc3RhdGUtPm91dF9mYi0+d2lkdGgpIHx8Cj4gLQkJCShyc3RhdGUtPm91dF9m Yl9waXhlbF9mb3JtYXQgIT0KPiAtCQkJCQlyc3RhdGUtPm91dF9mYi0+Zm9ybWF0LT5mb3JtYXQp IHx8Cj4gLQkJCShyc3RhdGUtPm91dF9mYl9tb2RpZmllclswXSAhPQo+IC0JCQkJCXJzdGF0ZS0+ b3V0X2ZiLT5tb2RpZmllcikgfHwKPiAtCQkJKHJzdGF0ZS0+b3V0X2ZiX2ZsYWdzICE9IHJzdGF0 ZS0+b3V0X2ZiLT5mbGFncykpKSB7Cj4gLQo+IC0JCQlEUFVfREVCVUcoInBsYW5lJWQuJWQgcmVs ZWFzZSBmYi9mYm9cbiIsIHBsYW5lLT5iYXNlLmlkLAo+IC0JCQkJCXJzdGF0ZS0+c2VxdWVuY2Vf aWQpOwo+IC0JCQlEUFVfRVZUMzJfVkVSQk9TRShEUk1JRChwbGFuZSksCj4gLQkJCQkJcnN0YXRl LT5zZXF1ZW5jZV9pZCwgZmJfaWQpOwo+IC0KPiAtCQkJZHB1X2NydGNfcmVzX3B1dChjc3RhdGUs IERQVV9DUlRDX1JFU19ST1RfT1VUX0ZCLAo+IC0JCQkJCSh1NjQpICZyc3RhdGUtPnJvdF9ody0+ YmFzZSk7Cj4gLQkJCXJzdGF0ZS0+b3V0X2ZiID0gTlVMTDsKPiAtCQkJZHB1X2NydGNfcmVzX3B1 dChjc3RhdGUsIERQVV9DUlRDX1JFU19ST1RfT1VUX0ZCTywKPiAtCQkJCQkodTY0KSAmcnN0YXRl LT5yb3RfaHctPmJhc2UpOwo+IC0JCQlyc3RhdGUtPm91dF9mYm8gPSBOVUxMOwo+IC0JCX0KPiAt CX0gZWxzZSB7Cj4gLQo+IC0JCURQVV9ERUJVRygicGxhbmUlZC4lZCBieXBhc3Mgcm90YXRvclxu IiwgcGxhbmUtPmJhc2UuaWQsCj4gLQkJCQlyc3RhdGUtPnNlcXVlbmNlX2lkKTsKPiAtCj4gLQkJ LyogYnlwYXNzIHJvdGF0b3IgLSBpbml0aWFsaXplIG91dHB1dCBzZXR0aW5nIGFzIGlucHV0ICov Cj4gLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnN0YXRlLT5vdXRfZmJfbW9kaWZpZXIp OyBpKyspCj4gLQkJCXJzdGF0ZS0+b3V0X2ZiX21vZGlmaWVyW2ldID0gc3RhdGUtPmZiID8KPiAt CQkJCXN0YXRlLT5mYi0+bW9kaWZpZXIgOiAweDA7Cj4gLQo+IC0JCWlmIChzdGF0ZS0+ZmIpIHsK PiAtCQkJcnN0YXRlLT5vdXRfZmJfcGl4ZWxfZm9ybWF0ID0gc3RhdGUtPmZiLT5mb3JtYXQtPmZv cm1hdDsKPiAtCQkJcnN0YXRlLT5vdXRfZmJfZmxhZ3MgPSBzdGF0ZS0+ZmItPmZsYWdzOwo+IC0J CQlyc3RhdGUtPm91dF9mYl93aWR0aCA9IHN0YXRlLT5mYi0+d2lkdGg7Cj4gLQkJCXJzdGF0ZS0+ b3V0X2ZiX2hlaWdodCA9IHN0YXRlLT5mYi0+aGVpZ2h0Owo+IC0JCX0gZWxzZSB7Cj4gLQkJCXJz dGF0ZS0+b3V0X2ZiX3BpeGVsX2Zvcm1hdCA9IDB4MDsKPiAtCQkJcnN0YXRlLT5vdXRfZmJfZmxh Z3MgPSAweDA7Cj4gLQkJCXJzdGF0ZS0+b3V0X2ZiX3dpZHRoID0gMDsKPiAtCQkJcnN0YXRlLT5v dXRfZmJfaGVpZ2h0ID0gMDsKPiAtCQl9Cj4gLQo+IC0JCXJzdGF0ZS0+b3V0X3JvdGF0aW9uID0g cnN0YXRlLT5pbl9yb3RhdGlvbjsKPiAtCQlyc3RhdGUtPm91dF9zcmNfeCA9IHN0YXRlLT5zcmNf eDsKPiAtCQlyc3RhdGUtPm91dF9zcmNfeSA9IHN0YXRlLT5zcmNfeTsKPiAtCQlyc3RhdGUtPm91 dF9zcmNfdyA9IHN0YXRlLT5zcmNfdzsKPiAtCQlyc3RhdGUtPm91dF9zcmNfaCA9IHN0YXRlLT5z cmNfaDsKPiAtCj4gLQkJcnN0YXRlLT5vdXRfZmJfZm9ybWF0ID0gTlVMTDsKPiAtCQlyc3RhdGUt Pm91dF9zYnVmID0gZmFsc2U7Cj4gLQkJcnN0YXRlLT5vdXRfZmIgPSBzdGF0ZS0+ZmI7Cj4gLQl9 Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGRwdV9wbGFuZV9yb3Rf YXRvbWljX3VwZGF0ZSAtIHBlcmZvcm0gYXRvbWljIHVwZGF0ZSBmb3Igcm90YXRvciBzdGFnZQo+ IC0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCj4gLSAqIEBvbGRfc3RhdGU6IFBvaW50 ZXIgdG8gcHJldmlvdXMgc3RhdGUKPiAtICogcmV0dXJuOiBub25lCj4gLSAqLwo+IC1zdGF0aWMg dm9pZCBkcHVfcGxhbmVfcm90X2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs Cj4gLQkJCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCj4gLXsKPiAtCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlOwo+IC0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0 YXRlOwo+IC0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKnJzdGF0ZTsKPiAtCWludCByZXQg PSAwOwo+IC0KPiAtCWlmICghcGxhbmUgfHwgIXBsYW5lLT5zdGF0ZSkgewo+IC0JCURQVV9FUlJP UigiaW52YWxpZCBwbGFuZS9zdGF0ZVxuIik7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCXN0 YXRlID0gcGxhbmUtPnN0YXRlOwo+IC0JcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHN0YXRl KTsKPiAtCXJzdGF0ZSA9ICZwc3RhdGUtPnJvdDsKPiAtCj4gLQlEUFVfREVCVUcoInBsYW5lJWQu JWQgc2J1ZjolZCByb3Q6JWQgY3J0YzolZFxuIiwgcGxhbmUtPmJhc2UuaWQsCj4gLQkJCXJzdGF0 ZS0+c2VxdWVuY2VfaWQsCj4gLQkJCSEhcnN0YXRlLT5vdXRfc2J1ZiwgISFyc3RhdGUtPnJvdF9o dywKPiAtCQkJZHB1X3BsYW5lX2NydGNfZW5hYmxlZChwbGFuZS0+c3RhdGUpKTsKPiAtCj4gLQlp ZiAoIWRwdV9wbGFuZV9jcnRjX2VuYWJsZWQoc3RhdGUpKQo+IC0JCXJldHVybjsKPiAtCj4gLQlp ZiAoIXJzdGF0ZS0+b3V0X3NidWYgfHwgIXJzdGF0ZS0+cm90X2h3KQo+IC0JCXJldHVybjsKPiAt Cj4gLQlkcHVfcGxhbmVfcm90X3N1Ym1pdF9jb21tYW5kKHBsYW5lLCBzdGF0ZSwgRFBVX0hXX1JP VF9DTURfQ09NTUlUKTsKPiAtCj4gLQlyZXR1cm47Cj4gLQo+IC1lcnJvcl9wcmVwYXJlX291dHB1 dF9idWZmZXI6Cj4gLQltc21fZnJhbWVidWZmZXJfY2xlYW51cChzdGF0ZS0+ZmIsIHBzdGF0ZS0+ YXNwYWNlKTsKPiAtfQo+IC0KPiAtdm9pZCBkcHVfcGxhbmVfa2lja29mZihzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSkKPiAtewo+IC0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwo+IC0K PiAtCWlmICghcGxhbmUgfHwgIXBsYW5lLT5zdGF0ZSkgewo+IC0JCURQVV9FUlJPUigiaW52YWxp ZCBwbGFuZVxuIik7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCXBzdGF0ZSA9IHRvX2RwdV9w bGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwo+IC0KPiAtCWlmICghcHN0YXRlLT5yb3Qucm90X2h3 IHx8ICFwc3RhdGUtPnJvdC5yb3RfaHctPm9wcy5jb21taXQpCj4gLQkJcmV0dXJuOwo+IC0KPiAt CXBzdGF0ZS0+cm90LnJvdF9ody0+b3BzLmNvbW1pdChwc3RhdGUtPnJvdC5yb3RfaHcsCj4gLQkJ CSZwc3RhdGUtPnJvdC5yb3RfY21kLAo+IC0JCQlEUFVfSFdfUk9UX0NNRF9TVEFSVCk7Cj4gLX0K PiAtCj4gLS8qKgo+IC0gKiBkcHVfcGxhbmVfcm90X2Rlc3Ryb3lfc3RhdGUgLSBkZXN0cm95IHN0 YXRlIGZvciByb3RhdG9yIHN0YWdlCj4gLSAqIEBwbGFuZTogUG9pbnRlciB0byBkcm0gcGxhbmUK PiAtICogQHN0YXRlOiBQb2ludGVyIHRvIHN0YXRlIHRvIGJlIGRlc3Ryb3llZAo+IC0gKiByZXR1 cm46IG5vbmUKPiAtICovCj4gLXN0YXRpYyB2b2lkIGRwdV9wbGFuZV9yb3RfZGVzdHJveV9zdGF0 ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpz dGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlID0gdG9fZHB1X3Bs YW5lX3N0YXRlKHN0YXRlKTsKPiAtCXN0cnVjdCBkcHVfcGxhbmVfcm90X3N0YXRlICpyc3RhdGUg PSAmcHN0YXRlLT5yb3Q7Cj4gLQo+IC0JRFBVX0RFQlVHKCJwbGFuZSVkLiVkIHNidWY6JWQgcm90 OiVkIGNydGM6JWRcbiIsIHBsYW5lLT5iYXNlLmlkLAo+IC0JCQlyc3RhdGUtPnNlcXVlbmNlX2lk LAo+IC0JCQkhIXJzdGF0ZS0+b3V0X3NidWYsICEhcnN0YXRlLT5yb3RfaHcsCj4gLQkJCWRwdV9w bGFuZV9jcnRjX2VuYWJsZWQoc3RhdGUpKTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGRwdV9wbGFu ZV9yb3RfZHVwbGljYXRlX3N0YXRlIC0gZHVwbGljYXRlIHN0YXRlIGZvciByb3RhdG9yIHN0YWdl Cj4gLSAqIEBwbGFuZTogUG9pbnRlciB0byBkcm0gcGxhbmUKPiAtICogQG5ld19zdGF0ZTogUG9p bnRlciB0byBkdXBsaWNhdGVkIHN0YXRlCj4gLSAqIHJldHVybjogMCBpZiBzdWNjZXNzOyBlcnJv ciBjb2RlIG90aGVyd2lzZQo+IC0gKi8KPiAtc3RhdGljIGludCBkcHVfcGxhbmVfcm90X2R1cGxp Y2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAtCQlzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpuZXdfc3RhdGUpCj4gLXsKPiAtCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0 ZSAgPSB0b19kcHVfcGxhbmVfc3RhdGUobmV3X3N0YXRlKTsKPiAtCXN0cnVjdCBkcHVfcGxhbmVf cm90X3N0YXRlICpyc3RhdGUgPSAmcHN0YXRlLT5yb3Q7Cj4gLQo+IC0JcnN0YXRlLT5zZXF1ZW5j ZV9pZCsrOwo+IC0KPiAtCURQVV9ERUJVRygicGxhbmUlZC4lZCBzYnVmOiVkIHJvdDolZFxuIiwg cGxhbmUtPmJhc2UuaWQsCj4gLQkJCXJzdGF0ZS0+c2VxdWVuY2VfaWQsCj4gLQkJCSEhcnN0YXRl LT5vdXRfc2J1ZiwgISFyc3RhdGUtPnJvdF9odyk7Cj4gLQo+IC0JcnN0YXRlLT5yb3RfaHcgPSBO VUxMOwo+IC0JcnN0YXRlLT5vdXRfZmIgPSBOVUxMOwo+IC0JcnN0YXRlLT5vdXRfZmJvID0gTlVM TDsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGRwdV9wbGFuZV9yb3Rf aW5zdGFsbF9jYXBzIC0gaW5zdGFsbCBwbGFuZSByb3RhdG9yIGNhcGFiaWxpdGllcwo+IC0gKiBA cGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCj4gLSAqIHJldHVybjogbm9uZQo+IC0gKi8KPiAt c3RhdGljIHZvaWQgZHB1X3BsYW5lX3JvdF9pbnN0YWxsX2NhcHMoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUpCj4gLXsKPiAtCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHUgPSB0b19kcHVfcGxhbmUocGxh bmUpOwo+IC0JY29uc3Qgc3RydWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQgKmZvcm1hdF9saXN0Owo+ IC0Jc3RydWN0IGRwdV9rbXNfaW5mbyAqaW5mbzsKPiAtCXN0cnVjdCBkcHVfaHdfcm90ICpyb3Rf aHc7Cj4gLQljb25zdCBjaGFyICpkb3duc2NhbGVfY2FwczsKPiAtCj4gLQlpZiAoIXBkcHUtPmNh dGFsb2cgfHwgIShwZHB1LT5mZWF0dXJlcyAmIEJJVChEUFVfU1NQUF9TQlVGKSkgfHwKPiAtCQkJ IXBkcHUtPmNhdGFsb2ctPnJvdF9jb3VudCkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JaWYgKHBkcHUt PmJsb2Jfcm90X2NhcHMpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWluZm8gPSBremFsbG9jKHNpemVv ZihzdHJ1Y3QgZHB1X2ttc19pbmZvKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWluZm8pCj4gLQkJ cmV0dXJuOwo+IC0KPiAtCXJvdF9odyA9IGRwdV9od19yb3RfZ2V0KE5VTEwpOwo+IC0JaWYgKCFy b3RfaHcgfHwgIXJvdF9ody0+b3BzLmdldF9mb3JtYXRfY2FwcyB8fAo+IC0JCQkhcm90X2h3LT5v cHMuZ2V0X2Rvd25zY2FsZV9jYXBzKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHJvdGF0b3Ig aHdcbiIpOwo+IC0JCWdvdG8gZXJyb3Jfcm90Owo+IC0JfQo+IC0KPiAtCWRwdV9rbXNfaW5mb19y ZXNldChpbmZvKTsKPiAtCj4gLQlmb3JtYXRfbGlzdCA9IHJvdF9ody0+b3BzLmdldF9mb3JtYXRf Y2Fwcyhyb3RfaHcpOwo+IC0JaWYgKGZvcm1hdF9saXN0KSB7Cj4gLQkJZHB1X2ttc19pbmZvX3N0 YXJ0KGluZm8sICJwaXhlbF9mb3JtYXRzIik7Cj4gLQkJd2hpbGUgKGZvcm1hdF9saXN0LT5mb3Vy Y2NfZm9ybWF0KSB7Cj4gLQkJCWRwdV9rbXNfaW5mb19hcHBlbmRfZm9ybWF0KGluZm8sCj4gLQkJ CQkJZm9ybWF0X2xpc3QtPmZvdXJjY19mb3JtYXQsCj4gLQkJCQkJZm9ybWF0X2xpc3QtPm1vZGlm aWVyKTsKPiAtCQkJKytmb3JtYXRfbGlzdDsKPiAtCQl9Cj4gLQkJZHB1X2ttc19pbmZvX3N0b3Ao aW5mbyk7Cj4gLQl9Cj4gLQo+IC0JZG93bnNjYWxlX2NhcHMgPSByb3RfaHctPm9wcy5nZXRfZG93 bnNjYWxlX2NhcHMocm90X2h3KTsKPiAtCWlmIChkb3duc2NhbGVfY2Fwcykgewo+IC0JCWRwdV9r bXNfaW5mb19zdGFydChpbmZvLCAiZG93bnNjYWxlX3JhdGlvcyIpOwo+IC0JCWRwdV9rbXNfaW5m b19hcHBlbmQoaW5mbywgZG93bnNjYWxlX2NhcHMpOwo+IC0JCWRwdV9rbXNfaW5mb19zdG9wKGlu Zm8pOwo+IC0JfQo+IC0KPiAtCWlmIChyb3RfaHctPm9wcy5nZXRfY2FjaGVfc2l6ZSkKPiAtCQlk cHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAiY2FjaGVfc2l6ZSIsCj4gLQkJCQlyb3RfaHct Pm9wcy5nZXRfY2FjaGVfc2l6ZShyb3RfaHcpKTsKPiAtCj4gLQlpZiAocm90X2h3LT5vcHMuZ2V0 X21heGxpbmV3aWR0aCkKPiAtCQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAibWF4X2xp bmV3aWR0aCIsCj4gLQkJCQlyb3RfaHctPm9wcy5nZXRfbWF4bGluZXdpZHRoKHJvdF9odykpOwo+ IC0KPiAtCW1zbV9wcm9wZXJ0eV9zZXRfYmxvYigmcGRwdS0+cHJvcGVydHlfaW5mbywgJnBkcHUt PmJsb2Jfcm90X2NhcHMsCj4gLQkJCWluZm8tPmRhdGEsIERQVV9LTVNfSU5GT19EQVRBTEVOKGlu Zm8pLAo+IC0JCQlQTEFORV9QUk9QX1JPVF9DQVBTX1YxKTsKPiAtCj4gLQlkcHVfaHdfcm90X3B1 dChyb3RfaHcpOwo+IC1lcnJvcl9yb3Q6Cj4gLQlrZnJlZShpbmZvKTsKPiAtfQo+IC0KPiAtLyoq Cj4gLSAqIGRwdV9wbGFuZV9yb3RfaW5zdGFsbF9wcm9wZXJ0aWVzIC0gaW5zdGFsbCBwbGFuZSBy b3RhdG9yIHByb3BlcnRpZXMKPiAtICogQHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQo+IC0g KiBAY2F0YWxvZzogUG9pbnRlciB0byBtZHNzIGNvbmZpZ3VyYXRpb24KPiAtICogcmV0dXJuOiBu b25lCj4gLSAqLwo+IC1zdGF0aWMgdm9pZCBkcHVfcGxhbmVfcm90X2luc3RhbGxfcHJvcGVydGll cyhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAtCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFs b2cpCj4gLXsKPiAtCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHUgPSB0b19kcHVfcGxhbmUocGxhbmUp Owo+IC0JdW5zaWduZWQgbG9uZyBzdXBwb3J0ZWRfcm90YXRpb25zID0gRFJNX01PREVfUk9UQVRF XzAgfAo+IC0JCQlEUk1fTU9ERV9SRUZMRUNUX1ggfCBEUk1fTU9ERV9SRUZMRUNUX1k7Cj4gLQo+ IC0JaWYgKCFwbGFuZSB8fCAhcGRwdSkgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBwbGFuZVxu Iik7Cj4gLQkJcmV0dXJuOwo+IC0JfSBlbHNlIGlmICghY2F0YWxvZykgewo+IC0JCURQVV9FUlJP UigiaW52YWxpZCBjYXRhbG9nXG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0JaWYgKChw ZHB1LT5mZWF0dXJlcyAmIEJJVChEUFVfU1NQUF9TQlVGKSkgJiYgY2F0YWxvZy0+cm90X2NvdW50 KQo+IC0JCXN1cHBvcnRlZF9yb3RhdGlvbnMgfD0gRFJNX01PREVfUk9UQVRFXzAgfCBEUk1fTU9E RV9ST1RBVEVfOTAgfAo+IC0JCQkJRFJNX01PREVfUk9UQVRFXzE4MCB8IERSTV9NT0RFX1JPVEFU RV8yNzA7Cj4gLQo+IC0JbXNtX3Byb3BlcnR5X2luc3RhbGxfcm90YXRpb24oJnBkcHUtPnByb3Bl cnR5X2luZm8sIHBsYW5lLAo+IC0JCQlEUk1fTU9ERV9ST1RBVEVfMCwgc3VwcG9ydGVkX3JvdGF0 aW9ucywKPiAtCQkJUExBTkVfUFJPUF9ST1RBVElPTik7Cj4gLQo+IC0JaWYgKCEocGRwdS0+ZmVh dHVyZXMgJiBCSVQoRFBVX1NTUFBfU0JVRikpIHx8ICFjYXRhbG9nLT5yb3RfY291bnQpCj4gLQkJ cmV0dXJuOwo+IC0KPiAtCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9wZXJ0 eV9pbmZvLCAicm90X2RzdF94IiwKPiAtCQkJMCwgMCwgVTY0X01BWCwgMCwgUExBTkVfUFJPUF9S T1RfRFNUX1gpOwo+IC0JbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJnBkcHUtPnByb3BlcnR5 X2luZm8sICJyb3RfZHN0X3kiLAo+IC0JCQkwLCAwLCBVNjRfTUFYLCAwLCBQTEFORV9QUk9QX1JP VF9EU1RfWSk7Cj4gLQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmcGRwdS0+cHJvcGVydHlf aW5mbywgInJvdF9kc3RfdyIsCj4gLQkJCTAsIDAsIFU2NF9NQVgsIDAsIFBMQU5FX1BST1BfUk9U X0RTVF9XKTsKPiAtCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9p bmZvLCAicm90X2RzdF9oIiwKPiAtCQkJMCwgMCwgVTY0X01BWCwgMCwgUExBTkVfUFJPUF9ST1Rf RFNUX0gpOwo+IC0JbXNtX3Byb3BlcnR5X2luc3RhbGxfYmxvYigmcGRwdS0+cHJvcGVydHlfaW5m bywgInJvdF9jYXBzX3YxIiwKPiAtCQlEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwgUExBTkVfUFJP UF9ST1RfQ0FQU19WMSk7Cj4gLX0KPiAtCj4gIHZvaWQgZHB1X3BsYW5lX2NsZWFyX211bHRpcmVj dChjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpkcm1fc3RhdGUpCj4gIHsKPiAgCXN0cnVj dCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZTsKPiBAQCAtMjY4NCwxMyArMTQ1NCwxMSBAQCBpbnQg ZHB1X3BsYW5lX3ZhbGlkYXRlX211bHRpcmVjdF92MihzdHJ1Y3QgZHB1X211bHRpcmVjdF9wbGFu ZV9zdGF0ZXMgKnBsYW5lKQo+ICAgKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lIHN0cnVj dHVyZQo+ICAgKiBAY3RsOiBQb2ludGVyIHRvIGhhcmR3YXJlIGNvbnRyb2wgZHJpdmVyCj4gICAq IEBmbHVzaF9zc3BwOiBQb2ludGVyIHRvIHNzcHAgZmx1c2ggY29udHJvbCB3b3JkCj4gLSAqIEBm bHVzaF9yb3Q6IFBvaW50ZXIgdG8gcm90YXRvciBmbHVzaCBjb250cm9sIHdvcmQKPiAgICovCj4g IHZvaWQgZHB1X3BsYW5lX2dldF9jdGxfZmx1c2goc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHN0 cnVjdCBkcHVfaHdfY3RsICpjdGwsCj4gLQkJdTMyICpmbHVzaF9zc3BwLCB1MzIgKmZsdXNoX3Jv dCkKPiArCQl1MzIgKmZsdXNoX3NzcHApCj4gIHsKPiAgCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUg KnBzdGF0ZTsKPiAtCXN0cnVjdCBkcHVfcGxhbmVfcm90X3N0YXRlICpyc3RhdGU7Cj4gIAo+ICAJ aWYgKCFwbGFuZSB8fCAhZmx1c2hfc3NwcCkgewo+ICAJCURQVV9FUlJPUigiaW52YWxpZCBwYXJh bWV0ZXJzXG4iKTsKPiBAQCAtMjY5OCwxNyArMTQ2Niw4IEBAIHZvaWQgZHB1X3BsYW5lX2dldF9j dGxfZmx1c2goc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBkcHVfaHdfY3RsICpjdGws Cj4gIAl9Cj4gIAo+ICAJcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7 Cj4gLQlyc3RhdGUgPSAmcHN0YXRlLT5yb3Q7Cj4gIAo+ICAJKmZsdXNoX3NzcHAgPSBjdGwtPm9w cy5nZXRfYml0bWFza19zc3BwKGN0bCwgZHB1X3BsYW5lX3BpcGUocGxhbmUpKTsKPiAtCj4gLQlp ZiAoIWZsdXNoX3JvdCkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JKmZsdXNoX3JvdCA9IDB4MDsKPiAt CWlmIChyc3RhdGUgJiYgcnN0YXRlLT5vdXRfc2J1ZiAmJiByc3RhdGUtPnJvdF9odyAmJgo+IC0J CQljdGwtPm9wcy5nZXRfYml0bWFza19yb3QpCj4gLQkJY3RsLT5vcHMuZ2V0X2JpdG1hc2tfcm90 KGN0bCwgZmx1c2hfcm90LCByc3RhdGUtPnJvdF9ody0+aWR4KTsKPiAgfQo+ICAKPiAgc3RhdGlj IGludCBkcHVfcGxhbmVfcHJlcGFyZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiBAQCAt MjcxNyw3ICsxNDc2LDYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfcHJlcGFyZV9mYihzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKPiAgCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gbmV3X3N0 YXRlLT5mYjsKPiAgCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHUgPSB0b19kcHVfcGxhbmUocGxhbmUp Owo+ICAJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRl KG5ld19zdGF0ZSk7Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqbmV3X3JzdGF0ZTsK PiAgCXN0cnVjdCBkcHVfaHdfZm10X2xheW91dCBsYXlvdXQ7Cj4gIAlzdHJ1Y3QgbXNtX2dlbV9h ZGRyZXNzX3NwYWNlICphc3BhY2U7Cj4gIAlpbnQgcmV0Owo+IEBAIC0yNzM2LDE2ICsxNDk0LDgg QEAgc3RhdGljIGludCBkcHVfcGxhbmVfcHJlcGFyZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKPiAgCS8qIGNhY2hlIGFzcGFjZSAqLwo+ICAJcHN0YXRlLT5hc3BhY2UgPSBhc3BhY2U7Cj4g IAo+IC0JcmV0ID0gZHB1X3BsYW5lX3JvdF9wcmVwYXJlX2ZiKHBsYW5lLCBuZXdfc3RhdGUpOwo+ IC0JaWYgKHJldCkgewo+IC0JCURQVV9FUlJPUigiZmFpbGVkIHRvIHByZXBhcmUgcm90IGZyYW1l YnVmZmVyXG4iKTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAtCW5ld19yc3RhdGUgPSAm dG9fZHB1X3BsYW5lX3N0YXRlKG5ld19zdGF0ZSktPnJvdDsKPiAtCj4gIAlpZiAocHN0YXRlLT5h c3BhY2UpIHsKPiAtCQlyZXQgPSBtc21fZnJhbWVidWZmZXJfcHJlcGFyZShuZXdfcnN0YXRlLT5v dXRfZmIsCj4gKwkJcmV0ID0gbXNtX2ZyYW1lYnVmZmVyX3ByZXBhcmUobmV3X3N0YXRlLT5mYiwK PiAgCQkJCXBzdGF0ZS0+YXNwYWNlKTsKPiAgCQlpZiAocmV0KSB7Cj4gIAkJCURQVV9FUlJPUigi ZmFpbGVkIHRvIHByZXBhcmUgZnJhbWVidWZmZXJcbiIpOwo+IEBAIC0yNzU1LDcgKzE1MDUsNyBA QCBzdGF0aWMgaW50IGRwdV9wbGFuZV9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAo+ICAKPiAgCS8qIHZhbGlkYXRlIGZyYW1lYnVmZmVyIGxheW91dCBiZWZvcmUgY29tbWl0ICov Cj4gIAlyZXQgPSBkcHVfZm9ybWF0X3BvcHVsYXRlX2xheW91dChwc3RhdGUtPmFzcGFjZSwKPiAt CQkJbmV3X3JzdGF0ZS0+b3V0X2ZiLCAmbGF5b3V0KTsKPiArCQkJbmV3X3N0YXRlLT5mYiwgJmxh eW91dCk7Cj4gIAlpZiAocmV0KSB7Cj4gIAkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsICJmYWlsZWQg dG8gZ2V0IGZvcm1hdCBsYXlvdXQsICVkXG4iLCByZXQpOwo+ICAJCXJldHVybiByZXQ7Cj4gQEAg LTI3NjksNyArMTUxOSw2IEBAIHN0YXRpYyB2b2lkIGRwdV9wbGFuZV9jbGVhbnVwX2ZiKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAo+ICB7Cj4gIAlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1ID0gdG9f ZHB1X3BsYW5lKHBsYW5lKTsKPiAgCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKm9sZF9wc3RhdGU7 Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqb2xkX3JzdGF0ZTsKPiAgCj4gIAlpZiAo IW9sZF9zdGF0ZSB8fCAhb2xkX3N0YXRlLT5mYikKPiAgCQlyZXR1cm47Cj4gQEAgLTI3NzgsMTEg KzE1MjcsNyBAQCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfY2xlYW51cF9mYihzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKPiAgCj4gIAlEUFVfREVCVUdfUExBTkUocGRwdSwgIkZCWyV1XVxuIiwgb2xk X3N0YXRlLT5mYi0+YmFzZS5pZCk7Cj4gIAo+IC0Jb2xkX3JzdGF0ZSA9ICZvbGRfcHN0YXRlLT5y b3Q7Cj4gLQo+IC0JbXNtX2ZyYW1lYnVmZmVyX2NsZWFudXAob2xkX3JzdGF0ZS0+b3V0X2ZiLCBv bGRfcHN0YXRlLT5hc3BhY2UpOwo+IC0KPiAtCWRwdV9wbGFuZV9yb3RfY2xlYW51cF9mYihwbGFu ZSwgb2xkX3N0YXRlKTsKPiArCW1zbV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKG9sZF9zdGF0ZS0+ZmIs IG9sZF9wc3RhdGUtPmFzcGFjZSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIF9kcHVfcGxhbmVf c3NwcF9hdG9taWNfY2hlY2tfbW9kZV9jaGFuZ2VkKHN0cnVjdCBkcHVfcGxhbmUgKnBkcHUsCj4g QEAgLTI3OTEsOCArMTUzNiw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfc3NwcF9hdG9taWNf Y2hlY2tfbW9kZV9jaGFuZ2VkKHN0cnVjdCBkcHVfcGxhbmUgKnBkcHUsCj4gIHsKPiAgCXN0cnVj dCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7Cj4g IAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpvbGRfcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRl KG9sZF9zdGF0ZSk7Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRlID0gJnBz dGF0ZS0+cm90Owo+IC0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKm9sZF9yc3RhdGUgPSAm b2xkX3BzdGF0ZS0+cm90Owo+ICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsICpvbGRfZmI7 Cj4gIAo+ICAJLyogbm8gbmVlZCB0byBjaGVjayBpdCBhZ2FpbiAqLwo+IEBAIC0yODExLDEyICsx NTU0LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zc3BwX2F0b21pY19jaGVja19tb2RlX2No YW5nZWQoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKPiAgCQkJcHN0YXRlLT5tdWx0aXJlY3RfbW9k ZSAhPSBvbGRfcHN0YXRlLT5tdWx0aXJlY3RfbW9kZSkgewo+ICAJCURQVV9ERUJVR19QTEFORShw ZHB1LCAibXVsdGlyZWN0IGNvbmZpZyB1cGRhdGVkXG4iKTsKPiAgCQlwc3RhdGUtPmRpcnR5IHw9 IERQVV9QTEFORV9ESVJUWV9BTEw7Cj4gLQl9IGVsc2UgaWYgKHJzdGF0ZS0+b3V0X3NyY193ICE9 IG9sZF9yc3RhdGUtPm91dF9zcmNfdyB8fAo+IC0JCSAgIHJzdGF0ZS0+b3V0X3NyY19oICE9IG9s ZF9yc3RhdGUtPm91dF9zcmNfaCB8fAo+IC0JCSAgIHJzdGF0ZS0+b3V0X3NyY194ICE9IG9sZF9y c3RhdGUtPm91dF9zcmNfeCB8fAo+IC0JCSAgIHJzdGF0ZS0+b3V0X3NyY195ICE9IG9sZF9yc3Rh dGUtPm91dF9zcmNfeSkgewo+IC0JCURQVV9ERUJVR19QTEFORShwZHB1LCAic3JjIHJlY3QgdXBk YXRlZFxuIik7Cj4gLQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfUkVDVFM7Cj4g IAl9IGVsc2UgaWYgKHN0YXRlLT5jcnRjX3cgIT0gb2xkX3N0YXRlLT5jcnRjX3cgfHwKPiAgCQkg ICBzdGF0ZS0+Y3J0Y19oICE9IG9sZF9zdGF0ZS0+Y3J0Y19oIHx8Cj4gIAkJICAgc3RhdGUtPmNy dGNfeCAhPSBvbGRfc3RhdGUtPmNydGNfeCB8fAo+IEBAIC0yODMxLDggKzE1NjgsOCBAQCBzdGF0 aWMgdm9pZCBfZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrX21vZGVfY2hhbmdlZChzdHJ1Y3Qg ZHB1X3BsYW5lICpwZHB1LAo+ICAJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX1JF Q1RTOwo+ICAJfQo+ICAKPiAtCWZiID0gcnN0YXRlLT5vdXRfZmI7Cj4gLQlvbGRfZmIgPSBvbGRf cnN0YXRlLT5vdXRfZmI7Cj4gKwlmYiA9IHN0YXRlLT5mYjsKPiArCW9sZF9mYiA9IG9sZF9zdGF0 ZS0+ZmI7Cj4gIAo+ICAJaWYgKCFmYiB8fCAhb2xkX2ZiKSB7Cj4gIAkJRFBVX0RFQlVHX1BMQU5F KHBkcHUsICJjYW4ndCBjb21wYXJlIGZiIGhhbmRsZXNcbiIpOwo+IEBAIC0yOTgyLDcgKzE3MTks NiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKPiAgCWludCByZXQgPSAwOwo+ICAJc3RydWN0IGRwdV9wbGFuZSAqcGRwdTsK PiAgCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZTsKPiAtCXN0cnVjdCBkcHVfcGxhbmVf cm90X3N0YXRlICpyc3RhdGU7Cj4gIAljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqZm10Owo+ICAJ c3RydWN0IGRwdV9yZWN0IHNyYywgZHN0Owo+ICAJdWludDMyX3QgZGVjaV93LCBkZWNpX2gsIHNy Y19kZWNpX3csIHNyY19kZWNpX2g7Cj4gQEAgLTI5OTgsNyArMTczNCw2IEBAIHN0YXRpYyBpbnQg ZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAK PiAgCXBkcHUgPSB0b19kcHVfcGxhbmUocGxhbmUpOwo+ICAJcHN0YXRlID0gdG9fZHB1X3BsYW5l X3N0YXRlKHN0YXRlKTsKPiAtCXJzdGF0ZSA9ICZwc3RhdGUtPnJvdDsKPiAgCj4gIAlpZiAoIXBk cHUtPnBpcGVfc2Jsaykgewo+ICAJCURQVV9FUlJPUl9QTEFORShwZHB1LCAiaW52YWxpZCBjYXRh bG9nXG4iKTsKPiBAQCAtMzAxMCw4ICsxNzQ1LDggQEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3Nw cF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAlkZWNpX2ggPSBkcHVf cGxhbmVfZ2V0X3Byb3BlcnR5KHBzdGF0ZSwgUExBTkVfUFJPUF9WX0RFQ0lNQVRFKTsKPiAgCj4g IAkvKiBzcmMgdmFsdWVzIGFyZSBpbiBRMTYgZml4ZWQgcG9pbnQsIGNvbnZlcnQgdG8gaW50ZWdl ciAqLwo+IC0JUE9QVUxBVEVfUkVDVCgmc3JjLCByc3RhdGUtPm91dF9zcmNfeCwgcnN0YXRlLT5v dXRfc3JjX3ksCj4gLQkJCXJzdGF0ZS0+b3V0X3NyY193LCByc3RhdGUtPm91dF9zcmNfaCwgcTE2 X2RhdGEpOwo+ICsJUE9QVUxBVEVfUkVDVCgmc3JjLCBzdGF0ZS0+c3JjX3gsIHN0YXRlLT5zcmNf eSwgc3RhdGUtPnNyY193LAo+ICsJCXN0YXRlLT5zcmNfaCwgcTE2X2RhdGEpOwo+ICAJUE9QVUxB VEVfUkVDVCgmZHN0LCBzdGF0ZS0+Y3J0Y194LCBzdGF0ZS0+Y3J0Y195LCBzdGF0ZS0+Y3J0Y193 LAo+ICAJCXN0YXRlLT5jcnRjX2gsICFxMTZfZGF0YSk7Cj4gIAo+IEBAIC0zMDI4LDE4ICsxNzYz LDYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCj4gIAlpZiAoIWRwdV9wbGFuZV9lbmFibGVkKHN0YXRlKSkKPiAgCQlnb3Rv IG1vZGVzZXRfdXBkYXRlOwo+ICAKPiAtCURQVV9ERUJVRygKPiAtCQkicGxhbmUlZC4ldSBzc3Bw OiV4LyVkeCVkLyU0LjRzLyVsbHgvJWR4JWQrJWQrJWQgY3J0YzolZHglZCslZCslZFxuIiwKPiAt CQkJcGxhbmUtPmJhc2UuaWQsIHJzdGF0ZS0+c2VxdWVuY2VfaWQsCj4gLQkJCXJzdGF0ZS0+b3V0 X3JvdGF0aW9uLAo+IC0JCQlyc3RhdGUtPm91dF9mYl93aWR0aCwgcnN0YXRlLT5vdXRfZmJfaGVp Z2h0LAo+IC0JCQkoY2hhciAqKSAmcnN0YXRlLT5vdXRfZmJfcGl4ZWxfZm9ybWF0LAo+IC0JCQly c3RhdGUtPm91dF9mYl9tb2RpZmllclswXSwKPiAtCQkJcnN0YXRlLT5vdXRfc3JjX3cgPj4gMTYs IHJzdGF0ZS0+b3V0X3NyY19oID4+IDE2LAo+IC0JCQlyc3RhdGUtPm91dF9zcmNfeCA+PiAxNiwg cnN0YXRlLT5vdXRfc3JjX3kgPj4gMTYsCj4gLQkJCXN0YXRlLT5jcnRjX3csIHN0YXRlLT5jcnRj X2gsCj4gLQkJCXN0YXRlLT5jcnRjX3gsIHN0YXRlLT5jcnRjX3kpOwo+IC0KPiAgCWZtdCA9IHRv X2RwdV9mb3JtYXQobXNtX2ZyYW1lYnVmZmVyX2Zvcm1hdChzdGF0ZS0+ZmIpKTsKPiAgCj4gIAlt aW5fc3JjX3NpemUgPSBEUFVfRk9STUFUX0lTX1lVVihmbXQpID8gMiA6IDE7Cj4gQEAgLTMwNTMs MTEgKzE3NzYsMTEgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2soc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAkJcmV0ID0gLUVJTlZBTDsKPiAgCj4gIAkvKiBjaGVj ayBzcmMgYm91bmRzICovCj4gLQl9IGVsc2UgaWYgKHJzdGF0ZS0+b3V0X2ZiX3dpZHRoID4gTUFY X0lNR19XSURUSCB8fAo+IC0JCXJzdGF0ZS0+b3V0X2ZiX2hlaWdodCA+IE1BWF9JTUdfSEVJR0hU IHx8Cj4gKwl9IGVsc2UgaWYgKHN0YXRlLT5mYi0+d2lkdGggPiBNQVhfSU1HX1dJRFRIIHx8Cj4g KwkJc3RhdGUtPmZiLT5oZWlnaHQgPiBNQVhfSU1HX0hFSUdIVCB8fAo+ICAJCXNyYy53IDwgbWlu X3NyY19zaXplIHx8IHNyYy5oIDwgbWluX3NyY19zaXplIHx8Cj4gLQkJQ0hFQ0tfTEFZRVJfQk9V TkRTKHNyYy54LCBzcmMudywgcnN0YXRlLT5vdXRfZmJfd2lkdGgpIHx8Cj4gLQkJQ0hFQ0tfTEFZ RVJfQk9VTkRTKHNyYy55LCBzcmMuaCwgcnN0YXRlLT5vdXRfZmJfaGVpZ2h0KSkgewo+ICsJCUNI RUNLX0xBWUVSX0JPVU5EUyhzcmMueCwgc3JjLncsIHN0YXRlLT5mYi0+d2lkdGgpIHx8Cj4gKwkJ Q0hFQ0tfTEFZRVJfQk9VTkRTKHNyYy55LCBzcmMuaCwgc3RhdGUtPmZiLT5oZWlnaHQpKSB7Cj4g IAkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsICJpbnZhbGlkIHNvdXJjZSAldSwgJXUsICV1eCV1XG4i LAo+ICAJCQlzcmMueCwgc3JjLnksIHNyYy53LCBzcmMuaCk7Cj4gIAkJcmV0ID0gLUUyQklHOwo+ IEBAIC0zMTEyLDggKzE4MzUsOCBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY19j aGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCQkJc3JjX2RlY2lfdywgc3JjX2RlY2lf aCwgZHN0LncsIGRzdC5oKTsKPiAgCQlyZXQgPSAtRTJCSUc7Cj4gIAl9IGVsc2UgaWYgKF9kcHVf cGxhbmVfdmFsaWRhdGVfc2NhbGVyX3YyKHBkcHUsIHBzdGF0ZSwgZm10LAo+IC0JCQkJcnN0YXRl LT5vdXRfZmJfd2lkdGgsCj4gLQkJCQlyc3RhdGUtPm91dF9mYl9oZWlnaHQsCj4gKwkJCQlzdGF0 ZS0+ZmItPndpZHRoLAo+ICsJCQkJc3RhdGUtPmZiLT5oZWlnaHQsCj4gIAkJCQlzcmMudywgc3Jj LmgsIGRlY2lfdywgZGVjaV9oKSkgewo+ICAJCXJldCA9IC1FSU5WQUw7Cj4gIAl9Cj4gQEAgLTMx NzAsMTAgKzE4OTMsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCj4gIAo+ICAJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJcbiIpOwo+ ICAKPiAtCXJldCA9IGRwdV9wbGFuZV9yb3RfYXRvbWljX2NoZWNrKHBsYW5lLCBzdGF0ZSk7Cj4g LQlpZiAocmV0KQo+IC0JCWdvdG8gZXhpdDsKPiAtCj4gIAlyZXQgPSBkcHVfcGxhbmVfc3NwcF9h dG9taWNfY2hlY2socGxhbmUsIHN0YXRlKTsKPiAgCj4gIGV4aXQ6Cj4gQEAgLTMyMzgsNyArMTk1 Nyw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPiAgCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlOwo+ICAJc3Ry dWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwo+ICAJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAq b2xkX3BzdGF0ZTsKPiAtCXN0cnVjdCBkcHVfcGxhbmVfcm90X3N0YXRlICpyc3RhdGU7Cj4gIAlj b25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqZm10Owo+ICAJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ ICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gQEAgLTMyNjEsMTIgKzE5NzksMTEgQEAg c3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAo+ICAJc3RhdGUgPSBwbGFuZS0+c3RhdGU7Cj4gIAo+ICAJcHN0YXRlID0gdG9fZHB1 X3BsYW5lX3N0YXRlKHN0YXRlKTsKPiAtCXJzdGF0ZSA9ICZwc3RhdGUtPnJvdDsKPiAgCj4gIAlv bGRfcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKG9sZF9zdGF0ZSk7Cj4gIAo+ICAJY3J0YyA9 IHN0YXRlLT5jcnRjOwo+IC0JZmIgPSByc3RhdGUtPm91dF9mYjsKPiArCWZiID0gc3RhdGUtPmZi Owo+ICAJaWYgKCFjcnRjIHx8ICFmYikgewo+ICAJCURQVV9FUlJPUl9QTEFORShwZHB1LCAiaW52 YWxpZCBjcnRjICVkIG9yIGZiICVkXG4iLAo+ICAJCQkJY3J0YyAhPSAwLCBmYiAhPSAwKTsKPiBA QCAtMzI3NSwxOCArMTk5Miw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3Vw ZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCWZtdCA9IHRvX2RwdV9mb3JtYXQobXNt X2ZyYW1lYnVmZmVyX2Zvcm1hdChmYikpOwo+ICAJbnBsYW5lcyA9IGZtdC0+bnVtX3BsYW5lczsK PiAgCj4gLQlEUFVfREVCVUcoCj4gLQkJInBsYW5lJWQuJWQgc3NwcDolZHglZC8lNC40cy8lbGx4 LyVkeCVkKyVkKyVkLyV4IGNydGM6JWR4JWQrJWQrJWRcbiIsCj4gLQkJCXBsYW5lLT5iYXNlLmlk LCByc3RhdGUtPnNlcXVlbmNlX2lkLAo+IC0JCQlyc3RhdGUtPm91dF9mYl93aWR0aCwgcnN0YXRl LT5vdXRfZmJfaGVpZ2h0LAo+IC0JCQkoY2hhciAqKSAmcnN0YXRlLT5vdXRfZmJfcGl4ZWxfZm9y bWF0LAo+IC0JCQlyc3RhdGUtPm91dF9mYl9tb2RpZmllclswXSwKPiAtCQkJcnN0YXRlLT5vdXRf c3JjX3cgPj4gMTYsIHJzdGF0ZS0+b3V0X3NyY19oID4+IDE2LAo+IC0JCQlyc3RhdGUtPm91dF9z cmNfeCA+PiAxNiwgcnN0YXRlLT5vdXRfc3JjX3kgPj4gMTYsCj4gLQkJCXJzdGF0ZS0+b3V0X3Jv dGF0aW9uLAo+IC0JCQlzdGF0ZS0+Y3J0Y193LCBzdGF0ZS0+Y3J0Y19oLAo+IC0JCQlzdGF0ZS0+ Y3J0Y194LCBzdGF0ZS0+Y3J0Y195KTsKPiAtCj4gIAkvKiBmb3JjZSByZXByb2dyYW1taW5nIG9m IGFsbCB0aGUgcGFyYW1ldGVycywgaWYgdGhlIGZsYWcgaXMgc2V0ICovCj4gIAlpZiAocGRwdS0+ cmV2YWxpZGF0ZSkgewo+ICAJCURQVV9ERUJVRygicGxhbmU6JWQgLSByZWNvbmZpZ3VyZSBhbGwg dGhlIHBhcmFtZXRlcnNcbiIsCj4gQEAgLTMzMTgsOSArMjAyMyw2IEBAIHN0YXRpYyBpbnQgZHB1 X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCQkJ LyogcG90ZW50aWFsbHkgbmVlZCB0byByZWZyZXNoIGV2ZXJ5dGhpbmcgKi8KPiAgCQkJcHN0YXRl LT5kaXJ0eSA9IERQVV9QTEFORV9ESVJUWV9BTEw7Cj4gIAkJCWJyZWFrOwo+IC0JCWNhc2UgUExB TkVfUFJPUF9ST1RBVElPTjoKPiAtCQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlf Rk9STUFUOwo+IC0JCQlicmVhazsKPiAgCQljYXNlIFBMQU5FX1BST1BfSU5GTzoKPiAgCQljYXNl IFBMQU5FX1BST1BfQUxQSEE6Cj4gIAkJY2FzZSBQTEFORV9QUk9QX0lOUFVUX0ZFTkNFOgo+IEBA IC0zMzMxLDEyICsyMDMzLDYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBk YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJCWNhc2UgUExBTkVfUFJPUF9QUkVGSUxM X1RJTUU6Cj4gIAkJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX1BFUkY7Cj4gIAkJ CWJyZWFrOwo+IC0JCWNhc2UgUExBTkVfUFJPUF9ST1RfRFNUX1g6Cj4gLQkJY2FzZSBQTEFORV9Q Uk9QX1JPVF9EU1RfWToKPiAtCQljYXNlIFBMQU5FX1BST1BfUk9UX0RTVF9XOgo+IC0JCWNhc2Ug UExBTkVfUFJPUF9ST1RfRFNUX0g6Cj4gLQkJCS8qIGhhbmRsZWQgYnkgcm90YXRvciBhdG9taWMg dXBkYXRlICovCj4gLQkJCWJyZWFrOwo+ICAJCWRlZmF1bHQ6Cj4gIAkJCS8qIHVua25vd24gcHJv cGVydHksIHJlZnJlc2ggZXZlcnl0aGluZyAqLwo+ICAJCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9Q TEFORV9ESVJUWV9BTEw7Cj4gQEAgLTMzNzEsOCArMjA2Nyw4IEBAIHN0YXRpYyBpbnQgZHB1X3Bs YW5lX3NzcHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCj4gIAkv KiB1cGRhdGUgcm9pIGNvbmZpZyAqLwo+ICAJaWYgKHBzdGF0ZS0+ZGlydHkgJiBEUFVfUExBTkVf RElSVFlfUkVDVFMpIHsKPiAtCQlQT1BVTEFURV9SRUNUKCZzcmMsIHJzdGF0ZS0+b3V0X3NyY194 LCByc3RhdGUtPm91dF9zcmNfeSwKPiAtCQkJcnN0YXRlLT5vdXRfc3JjX3csIHJzdGF0ZS0+b3V0 X3NyY19oLCBxMTZfZGF0YSk7Cj4gKwkJUE9QVUxBVEVfUkVDVCgmc3JjLCBzdGF0ZS0+c3JjX3gs IHN0YXRlLT5zcmNfeSwKPiArCQkJc3RhdGUtPnNyY193LCBzdGF0ZS0+c3JjX2gsIHExNl9kYXRh KTsKPiAgCQlQT1BVTEFURV9SRUNUKCZkc3QsIHN0YXRlLT5jcnRjX3gsIHN0YXRlLT5jcnRjX3ks Cj4gIAkJCXN0YXRlLT5jcnRjX3csIHN0YXRlLT5jcnRjX2gsICFxMTZfZGF0YSk7Cj4gIAo+IEBA IC0zNDQyLDExICsyMTM4LDYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBk YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJaWYgKChwc3RhdGUtPmRpcnR5ICYgRFBV X1BMQU5FX0RJUlRZX0ZPUk1BVCkgJiYKPiAgCQkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX2Zv cm1hdCkgewo+ICAJCXNyY19mbGFncyA9IDB4MDsKPiAtCQlEUFVfREVCVUdfUExBTkUocGRwdSwg InJvdGF0aW9uIDB4JVhcbiIsIHJzdGF0ZS0+b3V0X3JvdGF0aW9uKTsKPiAtCQlpZiAocnN0YXRl LT5vdXRfcm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1gpCj4gLQkJCXNyY19mbGFncyB8PSBE UFVfU1NQUF9GTElQX0xSOwo+IC0JCWlmIChyc3RhdGUtPm91dF9yb3RhdGlvbiAmIERSTV9NT0RF X1JFRkxFQ1RfWSkKPiAtCQkJc3JjX2ZsYWdzIHw9IERQVV9TU1BQX0ZMSVBfVUQ7Cj4gIAo+ICAJ CS8qIHVwZGF0ZSBmb3JtYXQgKi8KPiAgCQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfZm9ybWF0 KHBkcHUtPnBpcGVfaHcsIGZtdCwgc3JjX2ZsYWdzLAo+IEBAIC0zNDY5LDM4ICsyMTYwLDYgQEAg c3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAo+ICAJCQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfY2RwKHBkcHUtPnBpcGVfaHcs IGNkcF9jZmcpOwo+ICAJCX0KPiAgCj4gLQkJaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9z eXNfY2FjaGUpIHsKPiAtCQkJaWYgKHJzdGF0ZS0+b3V0X3NidWYgJiYgcnN0YXRlLT5yb3RfaHcp IHsKPiAtCQkJCWlmIChyc3RhdGUtPm5wbGFuZSA8IDIpCj4gLQkJCQkJcHN0YXRlLT5zY19jZmcu b3BfbW9kZSA9Cj4gLQkJCQkJRFBVX1BJUEVfU0NfT1BfTU9ERV9JTkxJTkVfU0lOR0xFOwo+IC0J CQkJZWxzZSBpZiAocnN0YXRlLT5vdXRfeHBvcyA9PSAwKQo+IC0JCQkJCXBzdGF0ZS0+c2NfY2Zn Lm9wX21vZGUgPQo+IC0JCQkJCQlEUFVfUElQRV9TQ19PUF9NT0RFX0lOTElORV9MRUZUOwo+IC0J CQkJZWxzZQo+IC0JCQkJCXBzdGF0ZS0+c2NfY2ZnLm9wX21vZGUgPQo+IC0JCQkJCURQVV9QSVBF X1NDX09QX01PREVfSU5MSU5FX1JJR0hUOwo+IC0KPiAtCQkJCXBzdGF0ZS0+c2NfY2ZnLnJkX2Vu ID0gdHJ1ZTsKPiAtCQkJCXBzdGF0ZS0+c2NfY2ZnLnJkX3NjaWQgPQo+IC0JCQkJCQlyc3RhdGUt PnJvdF9ody0+Y2Fwcy0+c2NpZDsKPiAtCQkJCXBzdGF0ZS0+c2NfY2ZnLnJkX25vYWxsb2NhdGUg PSB0cnVlOwo+IC0JCQkJcHN0YXRlLT5zY19jZmcucmRfb3BfdHlwZSA9Cj4gLQkJCQkJRFBVX1BJ UEVfU0NfUkRfT1BfVFlQRV9DQUNIRUFCTEU7Cj4gLQkJCX0gZWxzZSB7Cj4gLQkJCQlwc3RhdGUt PnNjX2NmZy5vcF9tb2RlID0KPiAtCQkJCQkJRFBVX1BJUEVfU0NfT1BfTU9ERV9PRkZMSU5FOwo+ IC0JCQkJcHN0YXRlLT5zY19jZmcucmRfZW4gPSBmYWxzZTsKPiAtCQkJCXBzdGF0ZS0+c2NfY2Zn LnJkX3NjaWQgPSAwOwo+IC0JCQkJcHN0YXRlLT5zY19jZmcucmRfbm9hbGxvY2F0ZSA9IHRydWU7 Cj4gLQkJCQlwc3RhdGUtPnNjX2NmZy5yZF9vcF90eXBlID0KPiAtCQkJCQlEUFVfUElQRV9TQ19S RF9PUF9UWVBFX0NBQ0hFQUJMRTsKPiAtCQkJfQo+IC0KPiAtCQkJcGRwdS0+cGlwZV9ody0+b3Bz LnNldHVwX3N5c19jYWNoZSgKPiAtCQkJCQlwZHB1LT5waXBlX2h3LCAmcHN0YXRlLT5zY19jZmcp Owo+IC0JCX0KPiAtCj4gIAkJLyogdXBkYXRlIGNzYyAqLwo+ICAJCWlmIChEUFVfRk9STUFUX0lT X1lVVihmbXQpKQo+ICAJCQlfZHB1X3BsYW5lX3NldHVwX2NzYyhwZHB1KTsKPiBAQCAtMzU5Myw4 ICsyMjUyLDYgQEAgc3RhdGljIHZvaWQgZHB1X3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCj4gIAo+ICAJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJcbiIpOwo+ICAK PiAtCWRwdV9wbGFuZV9yb3RfYXRvbWljX3VwZGF0ZShwbGFuZSwgb2xkX3N0YXRlKTsKPiAtCj4g IAlpZiAoIWRwdV9wbGFuZV9zc3BwX2VuYWJsZWQoc3RhdGUpKSB7Cj4gIAkJX2RwdV9wbGFuZV9h dG9taWNfZGlzYWJsZShwbGFuZSwgb2xkX3N0YXRlKTsKPiAgCX0gZWxzZSB7Cj4gQEAgLTM3NTcs OCArMjQxNCw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfaW5zdGFsbF9wcm9wZXJ0aWVzKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3ZvbGF0aWxl X3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAo+ICAJCQkiZXhjbF9yZWN0X3YxIiwgMHgwLCAw LCB+MCwgMCwgUExBTkVfUFJPUF9FWENMX1JFQ1RfVjEpOwo+ICAKPiAtCWRwdV9wbGFuZV9yb3Rf aW5zdGFsbF9wcm9wZXJ0aWVzKHBsYW5lLCBjYXRhbG9nKTsKPiAtCj4gIAltc21fcHJvcGVydHlf aW5zdGFsbF9lbnVtKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAiYmxlbmRfb3AiLCAweDAsIDAsCj4g IAkJZV9ibGVuZF9vcCwgQVJSQVlfU0laRShlX2JsZW5kX29wKSwgUExBTkVfUFJPUF9CTEVORF9P UCk7Cj4gIAo+IEBAIC00MDg2LDE1ICsyNzQxLDYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfYXRv bWljX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCXJldHVybiByZXQ7 Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgZHB1X3BsYW5lX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPiAtCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0 X3QgdmFsKQo+IC17Cj4gLQlEUFVfREVCVUcoIlxuIik7Cj4gLQo+IC0JcmV0dXJuIGRwdV9wbGFu ZV9hdG9taWNfc2V0X3Byb3BlcnR5KHBsYW5lLAo+IC0JCQlwbGFuZS0+c3RhdGUsIHByb3BlcnR5 LCB2YWwpOwo+IC19Cj4gLQo+ICBzdGF0aWMgaW50IGRwdV9wbGFuZV9hdG9taWNfZ2V0X3Byb3Bl cnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKnN0YXRlLAo+ICAJCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRf dCAqdmFsKQo+IEBAIC00MTEwLDkgKzI3NTYsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9hdG9t aWNfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJfSBlbHNlIHsKPiAg CQlEUFVfREVCVUdfUExBTkUocGRwdSwgIlxuIik7Cj4gIAkJcHN0YXRlID0gdG9fZHB1X3BsYW5l X3N0YXRlKHN0YXRlKTsKPiAtI2lmZGVmIENPTkZJR19RQ09NX0RQVV9ST1QKPiAtCQlkcHVfcGxh bmVfcm90X2luc3RhbGxfY2FwcyhwbGFuZSk7Cj4gLSNlbmRpZgo+ICAJCXJldCA9IG1zbV9wcm9w ZXJ0eV9hdG9taWNfZ2V0KCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAo+ICAJCQkJJnBzdGF0ZS0+cHJv cGVydHlfc3RhdGUsIHByb3BlcnR5LCB2YWwpOwo+ICAJfQo+IEBAIC00MTYzLDggKzI4MDYsNiBA QCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKPiAgCj4gIAlEUFVfREVCVUdfUExBTkUocGRwdSwgIlxuIik7Cj4gIAo+IC0JZHB1X3Bs YW5lX3JvdF9kZXN0cm95X3N0YXRlKHBsYW5lLCAmcHN0YXRlLT5iYXNlKTsKPiAtCj4gIAkvKiBy ZW1vdmUgcmVmIGNvdW50IGZvciBmcmFtZSBidWZmZXJzICovCj4gIAlpZiAoc3RhdGUtPmZiKQo+ ICAJCWRybV9mcmFtZWJ1ZmZlcl9wdXQoc3RhdGUtPmZiKTsKPiBAQCAtNDIyNiw4ICsyODY3LDYg QEAgc3RhdGljIHZvaWQgZHB1X3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCj4gIAo+ICAJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUo cGxhbmUsICZwc3RhdGUtPmJhc2UpOwo+ICAKPiAtCWRwdV9wbGFuZV9yb3RfZHVwbGljYXRlX3N0 YXRlKHBsYW5lLCAmcHN0YXRlLT5iYXNlKTsKPiAtCj4gIAlyZXR1cm4gJnBzdGF0ZS0+YmFzZTsK PiAgfQo+ICAKPiBAQCAtNDQ1NSwxMyArMzA5NCw2IEBAIHN0YXRpYyBpbnQgX2RwdV9wbGFuZV9p bml0X2RlYnVnZnMoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCj4gIAkJCTA2MDAsCj4gIAkJCXBk cHUtPmRlYnVnZnNfcm9vdCwKPiAgCQkJa21zLCAmZHB1X3BsYW5lX2Rhbmdlcl9lbmFibGUpOwo+ IC0JZGVidWdmc19jcmVhdGVfdTMyKCJzYnVmX21vZGUiLAo+IC0JCQkwNjAwLAo+IC0JCQlwZHB1 LT5kZWJ1Z2ZzX3Jvb3QsICZwZHB1LT5zYnVmX21vZGUpOwo+IC0JZGVidWdmc19jcmVhdGVfdTMy KCJzYnVmX3dyaXRlYmFjayIsCj4gLQkJCTA2MDAsCj4gLQkJCXBkcHUtPmRlYnVnZnNfcm9vdCwK PiAtCQkJJnBkcHUtPnNidWZfd3JpdGViYWNrKTsKPiAgCj4gIAlyZXR1cm4gMDsKPiAgfQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuaCBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5oCj4gaW5kZXggYWQ5ZDVjZi4u MjViNmIxNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf cGxhbmUuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5o Cj4gQEAgLTI0LDcxICsyNCw4IEBACj4gICNpbmNsdWRlICJtc21fcHJvcC5oIgo+ICAjaW5jbHVk ZSAiZHB1X2ttcy5oIgo+ICAjaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKPiAtI2luY2x1ZGUgImRw dV9od19yb3QuaCIKPiAgI2luY2x1ZGUgImRwdV9od19zc3BwLmgiCj4gIAo+IC0vKioKPiAtICog c3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgLSBzdGF0ZSBvZiBwcmUtc3NwcCByb3RhdG9yIHN0 YWdlCj4gLSAqIEBzZXF1ZW5jZV9pZDogc2VxdWVuY2UgaWRlbnRpZmllciwgaW5jcmVtZW50ZWQg cGVyIHN0YXRlIGR1cGxpY2F0aW9uCj4gLSAqIEByb3RfaHc6IFBvaW50ZXIgdG8gcm90YXRvciBo YXJkd2FyZSBkcml2ZXIKPiAtICogQHJvdDkwOiB0cnVlIGlmIHJvdGF0aW9uIG9mIDkwIGRlZ3Jl ZSBpcyByZXF1aXJlZAo+IC0gKiBAaGZsaXA6IHRydWUgaWYgaG9yaXpvbnRhbCBmbGlwIGlzIHJl cXVpcmVkCj4gLSAqIEB2ZmxpcDogdHJ1ZSBpZiB2ZXJ0aWNhbCBmbGlwIGlzIHJlcXVpcmVkCj4g LSAqIEByb3RfY21kOiByb3RhdG9yIGNvbmZpZ3VyYXRpb24gY29tbWFuZAo+IC0gKiBAbnBsYW5l OiB0b3RhbCBudW1iZXIgb2YgZHJtIHBsYW5lIGF0dGFjaGVkIHRvIHJvdGF0b3IKPiAtICogQGlu X2ZiOiBpbnB1dCBmYiBhdHRhY2hlZCB0byByb3RhdG9yCj4gLSAqIEBpbl9yb3RhdGlvbjogaW5w dXQgcm90YXRpb24gcHJvcGVydHkgb2Ygcm90YXRvciBzdGFnZQo+IC0gKiBAaW5fcm90X3JlY3Q6 IGlucHV0IHJlY3RhbmdsZSBvZiB0aGUgcm90YXRvciBpbiBwbGFuZSBmYiBjb29yZGluYXRlCj4g LSAqIEBvdXRfcm90YXRpb246IG91dHB1dCByb3RhdGlvbiBwcm9wZXJ0eSBvZiByb3RhdG9yIHN0 YWdlCj4gLSAqIEBvdXRfcm90X3JlY3Q6IG91dHB1dCByZWN0YW5nbGUgb2YgdGhlIHJvdGF0b3Ig aW4gcGxhbmUgZmIgY29vcmRpbmF0ZQo+IC0gKiBAb3V0X3NyY19yZWN0OiBvdXRwdXQgcmVjdGFu Z2xlIG9mIHRoZSBwbGFuZSBzb3VyY2UgaW4gcGxhbmUgZmIgY29vcmRpbmF0ZQo+IC0gKiBAb3V0 X3NyY194OiBvdXRwdXQgc3JjX3ggb2Ygcm90YXRvciBzdGFnZSBpbiByb3RhdG9yIG91dHB1dCBm YiBjb29yZGluYXRlCj4gLSAqIEBvdXRfc3JjX3k6IG91dHB1dCBzcmMgeSBvZiByb3RhdG9yIHN0 YWdlIGluIHJvdGF0b3Igb3V0cHV0IGZiIGNvb3JkaW5hdGUKPiAtICogQG91dF9zcmNfdzogb3V0 cHV0IHNyYyB3IG9mIHJvdGF0b3Igc3RhZ2UgaW4gcm90YXRvciBvdXRwdXQgZmIgb29vcmRpbmF0 ZQo+IC0gKiBAb3V0X3NyY19oOiBvdXRwdXQgc3JjIGggb2Ygcm90YXRvciBzdGFnZSBpbiByb3Rh dG9yIG91dHB1dCBmYiBjb29yZGluYXRlCj4gLSAqIEBvdXRfZmJfd2lkdGg6IG91dHB1dCBmcmFt ZWJ1ZmZlciB3aWR0aCBvZiByb3RhdG9yIHN0YWdlCj4gLSAqIEBvdXRfZmJfaGVpZ2h0OiBvdXRw dXQgZnJhbWVidWZmZXIgaGVpZ2h0IG9mIHJvdGF0b3Igc3RhZ2UKPiAtICogQG91dF9mYl9waXhl bF9mb3JtYXQ6IG91dHB1dCBmcmFtZWJ1ZmZlciBwaXhlbCBmb3JtYXQgb2Ygcm90YXRvciBzdGFn ZQo+IC0gKiBAb3V0X2ZiX21vZGlmaWVyOiBvdXRwdXQgZnJhbWVidWZmZXIgbW9kaWZpZXIgb2Yg cm90YXRvciBzdGFnZQo+IC0gKiBAb3V0X2ZiX2ZsYWdzOiBvdXRwdXQgZnJhbWVidWZmZXIgZmxh Z3Mgb2Ygcm90YXRvciBzdGFnZQo+IC0gKiBAb3V0X3NidWY6IHRydWUgaWYgb3V0cHV0IHN0cmVh bWluZyBidWZmZXIgaXMgcmVxdWlyZWQKPiAtICogQG91dF9mYl9mb3JtYXQ6IFBvaW50ZXIgdG8g b3V0cHV0IGZyYW1lYnVmZmVyIGZvcm1hdCBvZiByb3RhdG9yIHN0YWdlCj4gLSAqIEBvdXRfZmI6 IFBvaW50ZXIgdG8gb3V0cHV0IGRybSBmcmFtZWJ1ZmZlciBvZiByb3RhdG9yIHN0YWdlCj4gLSAq IEBvdXRfZmJvOiBmcmFtZWJ1ZmZlciBvYmplY3Qgb2Ygb3V0cHV0IHN0cmVhbWluZyBidWZmZXIK PiAtICogQG91dF94cG9zOiByZWxhdGl2ZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBwbGFu ZSAoMCAtIGxlZnRtb3N0KQo+IC0gKi8KPiAtc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgewo+ IC0JdTMyIHNlcXVlbmNlX2lkOwo+IC0Jc3RydWN0IGRwdV9od19yb3QgKnJvdF9odzsKPiAtCWJv b2wgcm90OTA7Cj4gLQlib29sIGhmbGlwOwo+IC0JYm9vbCB2ZmxpcDsKPiAtCXN0cnVjdCBkcHVf aHdfcm90X2NtZCByb3RfY21kOwo+IC0JaW50IG5wbGFuZTsKPiAtCS8qIGlucHV0ICovCj4gLQlz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICppbl9mYjsKPiAtCXN0cnVjdCBkcm1fcmVjdCBpbl9yb3Rf cmVjdDsKPiAtCXUzMiBpbl9yb3RhdGlvbjsKPiAtCS8qIG91dHB1dCAqLwo+IC0Jc3RydWN0IGRy bV9yZWN0IG91dF9yb3RfcmVjdDsKPiAtCXN0cnVjdCBkcm1fcmVjdCBvdXRfc3JjX3JlY3Q7Cj4g LQl1MzIgb3V0X3JvdGF0aW9uOwo+IC0JdTMyIG91dF9zcmNfeDsKPiAtCXUzMiBvdXRfc3JjX3k7 Cj4gLQl1MzIgb3V0X3NyY193Owo+IC0JdTMyIG91dF9zcmNfaDsKPiAtCXUzMiBvdXRfZmJfd2lk dGg7Cj4gLQl1MzIgb3V0X2ZiX2hlaWdodDsKPiAtCXUzMiBvdXRfZmJfcGl4ZWxfZm9ybWF0Owo+ IC0JdTY0IG91dF9mYl9tb2RpZmllcls0XTsKPiAtCXUzMiBvdXRfZmJfZmxhZ3M7Cj4gLQlib29s IG91dF9zYnVmOwo+IC0JY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKm91dF9mYl9mb3JtYXQ7Cj4g LQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvdXRfZmI7Cj4gLQlzdHJ1Y3QgZHB1X2ttc19mYm8g Km91dF9mYm87Cj4gLQlpbnQgb3V0X3hwb3M7Cj4gLX07Cj4gLQo+ICAvKiBkaXJ0eSBiaXRzIGZv ciB1cGRhdGUgZnVuY3Rpb24gKi8KPiAgI2RlZmluZSBEUFVfUExBTkVfRElSVFlfUkVDVFMJMHgx Cj4gICNkZWZpbmUgRFBVX1BMQU5FX0RJUlRZX0ZPUk1BVAkweDIKPiBAQCAtMTUxLDEwICs4OCw2 IEBAIHN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgewo+ICAJc3RydWN0IGRwdV9od19waXhlbF9leHQg cGl4ZWxfZXh0Owo+ICAJZW51bSBkcHVfcGxhbmVfc2NsY2hlY2tfc3RhdGUgc2NhbGVyX2NoZWNr X3N0YXRlOwo+ICAKPiAtCS8qIEBzY19jZmc6IHN5c3RlbV9jYWNoZSBjb25maWd1cmF0aW9uICov Cj4gLQlzdHJ1Y3QgZHB1X2h3X3BpcGVfc2NfY2ZnIHNjX2NmZzsKPiAtCXN0cnVjdCBkcHVfcGxh bmVfcm90X3N0YXRlIHJvdDsKPiAtCj4gIAlzdHJ1Y3QgZHB1X2h3X3BpcGVfY2RwX2NmZyBjZHBf Y2ZnOwo+ICB9Owo+ICAKPiBAQCAtMjAwLDE3ICsxMzMsOSBAQCBzdHJ1Y3QgZHB1X211bHRpcmVj dF9wbGFuZV9zdGF0ZXMgewo+ICAgKiBAcGxhbmU6ICAgUG9pbnRlciB0byBEUk0gcGxhbmUgb2Jq ZWN0Cj4gICAqIEBjdGw6IFBvaW50ZXIgdG8gY29udHJvbCBoYXJkd2FyZQo+ICAgKiBAZmx1c2hf c3NwcDogUG9pbnRlciB0byBzc3BwIGZsdXNoIGNvbnRyb2wgd29yZAo+IC0gKiBAZmx1c2hfcm90 OiBQb2ludGVyIHRvIHJvdGF0b3IgZmx1c2ggY29udHJvbCB3b3JkCj4gICAqLwo+ICB2b2lkIGRw dV9wbGFuZV9nZXRfY3RsX2ZsdXNoKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCBzdHJ1Y3QgZHB1 X2h3X2N0bCAqY3RsLAo+IC0JCXUzMiAqZmx1c2hfc3NwcCwgdTMyICpmbHVzaF9yb3QpOwo+IC0K PiAtLyoqCj4gLSAqIGRwdV9wbGFuZV9yb3RfY2FsY19wcmVmaWxsIC0gY2FsY3VsYXRlIHJvdGF0 b3Igc3RhcnQgcHJlZmlsbAo+IC0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCj4gLSAq IHJldHVybjogcHJlZmlsbCB0aW1lIGluIGxpbmUKPiAtICovCj4gLXUzMiBkcHVfcGxhbmVfcm90 X2NhbGNfcHJlZmlsbChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSk7Cj4gKwkJdTMyICpmbHVzaF9z c3BwKTsKPiAgCj4gIC8qKgo+ICAgKiBkcHVfcGxhbmVfcmVzdG9yZSAtIHJlc3RvcmUgaHcgc3Rh dGUgaWYgcHJldmlvdXNseSBwb3dlciBjb2xsYXBzZWQKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfcm0uYwo+IGluZGV4IDNhMjYxMmEuLjFkODFiMWIgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYwo+IEBAIC0yNSw5ICsyNSw2IEBACj4gICNpbmNsdWRl ICJkcHVfZW5jb2Rlci5oIgo+ICAjaW5jbHVkZSAiZHB1X2Nvbm5lY3Rvci5oIgo+ICAjaW5jbHVk ZSAiZHB1X2h3X2RzYy5oIgo+IC0jaWZkZWYgQ09ORklHX0RSTV9NU01fUk9UQVRPUgo+IC0jaW5j bHVkZSAiZHB1X2h3X3JvdC5oIgo+IC0jZW5kaWYKPiAgCj4gICNkZWZpbmUgUkVTRVJWRURfQllf T1RIRVIoaCwgcikgXAo+ICAJKChoKS0+cnN2cCAmJiAoKGgpLT5yc3ZwLT5lbmNfaWQgIT0gKHIp LT5lbmNfaWQpKQo+IEBAIC0yNTksMTEgKzI1Niw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfcm1faHdf ZGVzdHJveShlbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlLCB2b2lkICpodykKPiAgCWNhc2UgRFBV X0hXX0JMS19EU0M6Cj4gIAkJZHB1X2h3X2RzY19kZXN0cm95KGh3KTsKPiAgCQlicmVhazsKPiAt I2lmZGVmIENPTkZJR19EUk1fTVNNX1JPVEFUT1IKPiAtCWNhc2UgRFBVX0hXX0JMS19ST1Q6Cj4g LQkJZHB1X2h3X3JvdF9kZXN0cm95KGh3KTsKPiAtCQlicmVhazsKPiAtI2VuZGlmCj4gIAljYXNl IERQVV9IV19CTEtfU1NQUDoKPiAgCQkvKiBTU1BQcyBhcmUgbm90IG1hbmFnZWQgYnkgdGhlIHJl c291cmNlIG1hbmFnZXIgKi8KPiAgCWNhc2UgRFBVX0hXX0JMS19UT1A6Cj4gQEAgLTM1MiwxMSAr MzQ0LDYgQEAgc3RhdGljIGludCBfZHB1X3JtX2h3X2Jsa19jcmVhdGUoCj4gIAljYXNlIERQVV9I V19CTEtfRFNDOgo+ICAJCWh3ID0gZHB1X2h3X2RzY19pbml0KGlkLCBtbWlvLCBjYXQpOwo+ICAJ CWJyZWFrOwo+IC0jaWZkZWYgQ09ORklHX0RSTV9NU01fUk9UQVRPUgo+IC0JY2FzZSBEUFVfSFdf QkxLX1JPVDoKPiAtCQlodyA9IGRwdV9od19yb3RfaW5pdChpZCwgbW1pbywgY2F0KTsKPiAtCQli cmVhazsKPiAtI2VuZGlmCj4gIAljYXNlIERQVV9IV19CTEtfU1NQUDoKPiAgCQkvKiBTU1BQcyBh cmUgbm90IG1hbmFnZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgKi8KPiAgCWNhc2UgRFBVX0hX X0JMS19UT1A6Cj4gQEAgLTUxMCwxNSArNDk3LDYgQEAgaW50IGRwdV9ybV9pbml0KHN0cnVjdCBk cHVfcm0gKnJtLAo+ICAJCX0KPiAgCX0KPiAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgY2F0LT5yb3Rf Y291bnQ7IGkrKykgewo+IC0JCXJjID0gX2RwdV9ybV9od19ibGtfY3JlYXRlKHJtLCBjYXQsIG1t aW8sIERQVV9IV19CTEtfUk9ULAo+IC0JCQkJY2F0LT5yb3RbaV0uaWQsICZjYXQtPnJvdFtpXSk7 Cj4gLQkJaWYgKHJjKSB7Cj4gLQkJCURQVV9FUlJPUigiZmFpbGVkOiByb3QgaHcgbm90IGF2YWls YWJsZVxuIik7Cj4gLQkJCWdvdG8gZmFpbDsKPiAtCQl9Cj4gLQl9Cj4gLQo+ICAJZm9yIChpID0g MDsgaSA8IGNhdC0+Y3RsX2NvdW50OyBpKyspIHsKPiAgCQlyYyA9IF9kcHVfcm1faHdfYmxrX2Ny ZWF0ZShybSwgY2F0LCBtbWlvLCBEUFVfSFdfQkxLX0NUTCwKPiAgCQkJCWNhdC0+Y3RsW2ldLmlk LCAmY2F0LT5jdGxbaV0pOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9k cnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4gaW5kZXggODU3NGYzMC4uYjU2 ZDkxZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4gQEAgLTEwNSwxNSArMTA1LDEwIEBAIGVu dW0gbXNtX21kcF9wbGFuZV9wcm9wZXJ0eSB7Cj4gIAlQTEFORV9QUk9QX1ZBTFVFX0FESlVTVCwK PiAgCVBMQU5FX1BST1BfQ09OVFJBU1RfQURKVVNULAo+ICAJUExBTkVfUFJPUF9FWENMX1JFQ1Rf VjEsCj4gLQlQTEFORV9QUk9QX1JPVF9EU1RfWCwKPiAtCVBMQU5FX1BST1BfUk9UX0RTVF9ZLAo+ IC0JUExBTkVfUFJPUF9ST1RfRFNUX1csCj4gLQlQTEFORV9QUk9QX1JPVF9EU1RfSCwKPiAgCVBM QU5FX1BST1BfUFJFRklMTF9TSVpFLAo+ICAJUExBTkVfUFJPUF9QUkVGSUxMX1RJTUUsCj4gIAo+ ICAJLyogZW51bS9iaXRtYXNrIHByb3BlcnRpZXMgKi8KPiAtCVBMQU5FX1BST1BfUk9UQVRJT04s Cj4gIAlQTEFORV9QUk9QX0JMRU5EX09QLAo+ICAJUExBTkVfUFJPUF9TUkNfQ09ORklHLAo+ICAK PiBAQCAtMTQyLDggKzEzNyw2IEBAIGVudW0gbXNtX21kcF9jcnRjX3Byb3BlcnR5IHsKPiAgCUNS VENfUFJPUF9MTENDX0lCLAo+ICAJQ1JUQ19QUk9QX0RSQU1fQUIsCj4gIAlDUlRDX1BST1BfRFJB TV9JQiwKPiAtCUNSVENfUFJPUF9ST1RfUFJFRklMTF9CVywKPiAtCUNSVENfUFJPUF9ST1RfQ0xL LAo+ICAJQ1JUQ19QUk9QX0lETEVfVElNRU9VVCwKPiAgCUNSVENfUFJPUF9ERVNUX1NDQUxFUiwK PiAgCj4gQEAgLTY2MSw3ICs2NTQsNyBAQCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm1zbV9nZW1f cHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIHZvaWQgKm1z bV9nZW1fZ2V0X3ZhZGRyKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAgdm9pZCAqbXNt X2dlbV9nZXRfdmFkZHJfYWN0aXZlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiAgdm9p ZCBtc21fZ2VtX3B1dF92YWRkcihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gLWludCBt c21fZ2VtX21hZHZpc2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHVuc2lnbmVkIG1hZHYp Owo+ICtpbnQgbXNtX2dlbV9tYWR2aXNlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1bnNp Z25lZCBpbnQgbWFkdik7Cj4gIGludCBtc21fZ2VtX3N5bmNfb2JqZWN0KHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqLAo+ICAJCXN0cnVjdCBtc21fZmVuY2VfY29udGV4dCAqZmN0eCwgYm9vbCBl eGNsdXNpdmUpOwo+ICB2b2lkIG1zbV9nZW1fbW92ZV90b19hY3RpdmUoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmosCj4gQEAgLTcwMCw3ICs2OTMsNyBAQCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICptc21fZnJhbWVidWZmZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCXN0cnVj dCBkcm1fZ2VtX29iamVjdCAqKmJvcyk7Cj4gIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm1zbV9m cmFtZWJ1ZmZlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCQlzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCk7Cj4g LXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKiBtc21fYWxsb2Nfc3RvbGVuX2ZiKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm1zbV9hbGxvY19zdG9sZW5f ZmIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCQlpbnQgdywgaW50IGgsIGludCBwLCB1aW50 MzJfdCBmb3JtYXQpOwo+ICAKPiAgc3RydWN0IGRybV9mYl9oZWxwZXIgKm1zbV9mYmRldl9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+IC0tIAo+IFRoZSBRdWFsY29tbSBJbm5vdmF0aW9u IENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCj4gYSBM aW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAo+IAoKLS0gClNlYW4gUGF1bCwg U29mdHdhcmUgRW5naW5lZXIsIEdvb2dsZSAvIENocm9taXVtIE9TCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJl ZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=