From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH v4 7/9] vpci/msi: add MSI handlers Date: Tue, 18 Jul 2017 08:56:44 +0000 Message-ID: <7dd7fdb9eac4441dafd0b03763c42c8d@AMSPEX02CL01.citrite.net> References: <20170630150117.88489-1-roger.pau@citrix.com> <20170630150117.88489-8-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dXOJE-0005RD-Gz for xen-devel@lists.xenproject.org; Tue, 18 Jul 2017 08:56:48 +0000 In-Reply-To: <20170630150117.88489-8-roger.pau@citrix.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , "julien.grall@arm.com" , Jan Beulich , "boris.ostrovsky@oracle.com" , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSb2dlciBQYXUgTW9ubmUgW21h aWx0bzpyb2dlci5wYXVAY2l0cml4LmNvbV0NCj4gU2VudDogMzAgSnVuZSAyMDE3IDE2OjAxDQo+ IFRvOiB4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gQ2M6IGJvcmlzLm9zdHJvdnNr eUBvcmFjbGUuY29tOyBqdWxpZW4uZ3JhbGxAYXJtLmNvbTsNCj4ga29ucmFkLndpbGtAb3JhY2xl LmNvbTsgUm9nZXIgUGF1IE1vbm5lIDxyb2dlci5wYXVAY2l0cml4LmNvbT47IEphbg0KPiBCZXVs aWNoIDxqYmV1bGljaEBzdXNlLmNvbT47IEFuZHJldyBDb29wZXINCj4gPEFuZHJldy5Db29wZXIz QGNpdHJpeC5jb20+OyBQYXVsIER1cnJhbnQgPFBhdWwuRHVycmFudEBjaXRyaXguY29tPg0KPiBT dWJqZWN0OiBbUEFUQ0ggdjQgNy85XSB2cGNpL21zaTogYWRkIE1TSSBoYW5kbGVycw0KPiANCj4g QWRkIGhhbmRsZXJzIGZvciB0aGUgTVNJIGNvbnRyb2wsIGFkZHJlc3MsIGRhdGEgYW5kIG1hc2sg ZmllbGRzIGluDQo+IG9yZGVyIHRvIGRldGVjdCBhY2Nlc3NlcyB0byB0aGVtIGFuZCBzZXR1cCB0 aGUgaW50ZXJydXB0cyBhcyByZXF1ZXN0ZWQNCj4gYnkgdGhlIGd1ZXN0Lg0KPiANCj4gTm90ZSB0 aGF0IHRoZSBwZW5kaW5nIHJlZ2lzdGVyIGlzIG5vdCB0cmFwcGVkLCBhbmQgdGhlIGd1ZXN0IGNh bg0KPiBmcmVlbHkgcmVhZC93cml0ZSB0byBpdC4NCj4gDQo+IFdoZXRoZXIgWGVuIGlzIGdvaW5n IHRvIHByb3ZpZGUgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIERvbTAgKE1TSQ0KPiBlbXVsYXRpb24p IGlzIGNvbnRyb2xsZWQgYnkgdGhlICJtc2kiIG9wdGlvbiBpbiB0aGUgZG9tMCBmaWVsZC4gV2hl bg0KPiBkaXNhYmxpbmcgdGhpcyBvcHRpb24gWGVuIHdpbGwgaGlkZSB0aGUgTVNJIGNhcGFiaWxp dHkgc3RydWN0dXJlIGZyb20NCj4gRG9tMC4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IFJvZ2VyIFBh dSBNb25uw6kgPHJvZ2VyLnBhdUBjaXRyaXguY29tPg0KPiAtLS0NCj4gQ2M6IEphbiBCZXVsaWNo IDxqYmV1bGljaEBzdXNlLmNvbT4NCj4gQ2M6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIz QGNpdHJpeC5jb20+DQo+IENjOiBQYXVsIER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29t Pg0KPiAtLS0NCj4gQ2hhbmdlcyBzaW5jZSB2MzoNCj4gIC0gUHJvcGFnYXRlIGNoYW5nZXMgZnJv bSBwcmV2aW91cyB2ZXJzaW9uczogZHJvcCB4ZW5fIHByZWZpeCwgZHJvcA0KPiAgICByZXR1cm4g dmFsdWUgZnJvbSBoYW5kbGVycywgdXNlIHRoZSBuZXcgdnBjaV92YWwgZmllbGRzLg0KPiAgLSBV c2UgTUFTS19FWFRSLg0KPiAgLSBSZW1vdmUgdGhlIHVzYWdlIG9mIEdFTk1BU0suDQo+ICAtIEFk ZCBHRkxBR1NfU0hJRlRfREVTVF9JRCBhbmQgdXNlIGl0IGluIG1zaV9mbGFncy4NCj4gIC0gQWRk ICJhcmNoIiB0byB0aGUgTVNJIGFyY2ggc3BlY2lmaWMgZnVuY3Rpb25zLg0KPiAgLSBNb3ZlIHRo ZSBkdW1waW5nIG9mIHZQQ0kgTVNJIGluZm9ybWF0aW9uIHRvIGR1bXBfbXNpIChrZXkgJ00nKS4N Cj4gIC0gUmVtb3ZlIHRoZSBndWVzdF92ZWN0b3JzIGZpZWxkLg0KPiAgLSBBbGxvdyB0aGUgZ3Vl c3QgdG8gY2hhbmdlIHRoZSBudW1iZXIgb2YgYWN0aXZlIHZlY3RvcnMgd2l0aG91dA0KPiAgICBo YXZpbmcgdG8gZGlzYWJsZSBhbmQgZW5hYmxlIE1TSS4NCj4gIC0gQ2hlY2sgdGhlIG51bWJlciBv ZiBhY3RpdmUgdmVjdG9ycyB3aGVuIHBhcnNpbmcgdGhlIGRpc2FibGUNCj4gICAgbWFzay4NCj4g IC0gUmVtb3ZlIHRoZSBkZWJ1ZyBtZXNzYWdlcyBmcm9tIHZwY2lfaW5pdF9tc2kuDQo+ICAtIE1v dmUgdGhlIGFyY2gtc3BlY2lmaWMgcGFydCBvZiB0aGUgZHVtcCBoYW5kbGVyIHRvIHg4Ni9odm0v dm1zaS5jLg0KPiAgLSBVc2UgdHJ5bG9jayBpbiB0aGUgZHVtcCBoYW5kbGVyIHRvIGdldCB0aGUg dnBjaSBsb2NrLg0KPiANCj4gQ2hhbmdlcyBzaW5jZSB2MjoNCj4gIC0gQWRkIGFuIGFyY2gtc3Bl Y2lmaWMgYWJzdHJhY3Rpb24gbGF5ZXIuIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgaW1wbGVtZW50 ZWQNCj4gICAgZm9yIHg4NiBjdXJyZW50bHkuDQo+ICAtIEFkZCBhIHdyYXBwZXIgdG8gZGV0ZWN0 IE1TSSBlbmFibGluZyBmb3IgdlBDSS4NCj4gDQo+IE5COiBJJ3ZlIG9ubHkgYmVlbiBhYmxlIHRv IHRlc3QgdGhpcyB3aXRoIGRldmljZXMgdXNpbmcgYSBzaW5nbGUgTVNJIGludGVycnVwdA0KPiBh bmQgbm8gbWFzayByZWdpc3Rlci4gSSB3aWxsIHRyeSB0byBmaW5kIGhhcmR3YXJlIHRoYXQgc3Vw cG9ydHMgdGhlIG1hc2sNCj4gcmVnaXN0ZXIgYW5kIG1vcmUgdGhhbiBvbmUgdmVjdG9yLCBidXQg SSBjYW5ub3QgbWFrZSBhbnkgcHJvbWlzZXMuDQo+IA0KPiBJZiB0aGVyZSBhcmUgZG91YnRzIGFi b3V0IHRoZSB1bnRlc3RlZCBwYXJ0cyB3ZSBjb3VsZCBhbHdheXMgZm9yY2UgWGVuIHRvDQo+IHJl cG9ydCBubyBwZXItdmVjdG9yIG1hc2tpbmcgc3VwcG9ydCBhbmQgb25seSAxIGF2YWlsYWJsZSB2 ZWN0b3IsIGJ1dCBJIHdvdWxkDQo+IHJhdGhlciBhdm9pZCBkb2luZyBpdC4NCj4gLS0tDQo+ICB4 ZW4vYXJjaC94ODYvaHZtL3Ztc2kuYyAgICAgIHwgMTQ5ICsrKysrKysrKysrKysrKysrKw0KPiAg eGVuL2FyY2gveDg2L21zaS5jICAgICAgICAgICB8ICAgMyArDQo+ICB4ZW4vZHJpdmVycy92cGNp L01ha2VmaWxlICAgIHwgICAyICstDQo+ICB4ZW4vZHJpdmVycy92cGNpL21zaS5jICAgICAgIHwg MzQ4DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIHhl bi9pbmNsdWRlL2FzbS14ODYvaHZtL2lvLmggfCAgMTggKysrDQo+ICB4ZW4vaW5jbHVkZS9hc20t eDg2L21zaS5oICAgIHwgICAxICsNCj4gIHhlbi9pbmNsdWRlL3hlbi9odm0vaXJxLmggICAgfCAg IDIgKw0KPiAgeGVuL2luY2x1ZGUveGVuL3ZwY2kuaCAgICAgICB8ICAyNiArKysrDQo+ICA4IGZp bGVzIGNoYW5nZWQsIDU0OCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgeGVuL2RyaXZlcnMvdnBjaS9tc2kuYw0KPiANCj4gZGlmZiAtLWdpdCBhL3hl bi9hcmNoL3g4Ni9odm0vdm1zaS5jIGIveGVuL2FyY2gveDg2L2h2bS92bXNpLmMNCj4gaW5kZXgg YTM2NjkyYzMxMy4uNTczMmM3MGI1YyAxMDA2NDQNCj4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS92 bXNpLmMNCj4gKysrIGIveGVuL2FyY2gveDg2L2h2bS92bXNpLmMNCj4gQEAgLTYyMiwzICs2MjIs MTUyIEBAIHZvaWQgbXNpeF93cml0ZV9jb21wbGV0aW9uKHN0cnVjdCB2Y3B1ICp2KQ0KPiAgICAg IGlmICggbXNpeHRibF93cml0ZSh2LCBjdHJsX2FkZHJlc3MsIDQsIDApICE9IFg4NkVNVUxfT0tB WSApDQo+ICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiTVNJLVggd3JpdGUgY29t cGxldGlvbiBmYWlsdXJlXG4iKTsNCj4gIH0NCj4gKw0KPiArc3RhdGljIHVuc2lnbmVkIGludCBt c2lfdmVjdG9yKHVpbnQxNl90IGRhdGEpDQo+ICt7DQo+ICsgICAgcmV0dXJuIE1BU0tfRVhUUihk YXRhLCBNU0lfREFUQV9WRUNUT1JfTUFTSyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1bnNpZ25l ZCBpbnQgbXNpX2ZsYWdzKHVpbnQxNl90IGRhdGEsIHVpbnQ2NF90IGFkZHIpDQo+ICt7DQo+ICsg ICAgdW5zaWduZWQgaW50IHJoLCBkbSwgZGVzdF9pZCwgZGVsaXZfbW9kZSwgdHJpZ19tb2RlOw0K PiArDQo+ICsgICAgcmggPSBNQVNLX0VYVFIoYWRkciwgTVNJX0FERFJfUkVESVJFQ1RJT05fTUFT Syk7DQo+ICsgICAgZG0gPSBNQVNLX0VYVFIoYWRkciwgTVNJX0FERFJfREVTVE1PREVfTUFTSyk7 DQo+ICsgICAgZGVzdF9pZCA9IE1BU0tfRVhUUihhZGRyLCBNU0lfQUREUl9ERVNUX0lEX01BU0sp Ow0KPiArICAgIGRlbGl2X21vZGUgPSBNQVNLX0VYVFIoZGF0YSwgTVNJX0RBVEFfREVMSVZFUllf TU9ERV9NQVNLKTsNCj4gKyAgICB0cmlnX21vZGUgPSBNQVNLX0VYVFIoZGF0YSwgTVNJX0RBVEFf VFJJR0dFUl9NQVNLKTsNCj4gKw0KPiArICAgIHJldHVybiAoZGVzdF9pZCA8PCBHRkxBR1NfU0hJ RlRfREVTVF9JRCkgfCAocmggPDwgR0ZMQUdTX1NISUZUX1JIKQ0KPiB8DQo+ICsgICAgICAgICAg IChkbSA8PCBHRkxBR1NfU0hJRlRfRE0pIHwgKGRlbGl2X21vZGUgPDwNCj4gR0ZMQUdTX1NISUZU X0RFTElWX01PREUpIHwNCj4gKyAgICAgICAgICAgKHRyaWdfbW9kZSA8PCBHRkxBR1NfU0hJRlRf VFJHX01PREUpOw0KPiArfQ0KPiArDQo+ICt2b2lkIHZwY2lfbXNpX2FyY2hfbWFzayhzdHJ1Y3Qg dnBjaV9hcmNoX21zaSAqYXJjaCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZW50cnksIGJvb2wgbWFzaykNCj4gK3sNCj4gKyAg ICBzdHJ1Y3QgZG9tYWluICpkID0gcGRldi0+ZG9tYWluOw0KPiArICAgIGNvbnN0IHN0cnVjdCBw aXJxICpwaW5mbzsNCj4gKyAgICBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7DQo+ICsgICAgdW5zaWdu ZWQgbG9uZyBmbGFnczsNCj4gKyAgICBpbnQgaXJxOw0KPiArDQo+ICsgICAgQVNTRVJUKGFyY2gt PnBpcnEgPj0gMCk7DQo+ICsgICAgcGluZm8gPSBwaXJxX2luZm8oZCwgYXJjaC0+cGlycSArIGVu dHJ5KTsNCj4gKyAgICBBU1NFUlQocGluZm8pOw0KPiArDQo+ICsgICAgaXJxID0gcGluZm8tPmFy Y2guaXJxOw0KPiArICAgIEFTU0VSVChpcnEgPCBucl9pcnFzICYmIGlycSA+PSAwKTsNCj4gKw0K PiArICAgIGRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOw0KPiArICAgIEFTU0VSVChkZXNjKTsNCj4g Kw0KPiArICAgIHNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7DQo+ICsgICAg Z3Vlc3RfbWFza19tc2lfaXJxKGRlc2MsIG1hc2spOw0KPiArICAgIHNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsNCj4gK30NCj4gKw0KPiAraW50IHZwY2lfbXNpX2Fy Y2hfZW5hYmxlKHN0cnVjdCB2cGNpX2FyY2hfbXNpICphcmNoLCBzdHJ1Y3QgcGNpX2RldiAqcGRl diwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBhZGRyZXNzLCB1aW50MzJf dCBkYXRhLCB1bnNpZ25lZCBpbnQgdmVjdG9ycykNCj4gK3sNCj4gKyAgICBzdHJ1Y3QgbXNpX2lu Zm8gbXNpX2luZm8gPSB7DQo+ICsgICAgICAgIC5zZWcgPSBwZGV2LT5zZWcsDQo+ICsgICAgICAg IC5idXMgPSBwZGV2LT5idXMsDQo+ICsgICAgICAgIC5kZXZmbiA9IHBkZXYtPmRldmZuLA0KPiAr ICAgICAgICAuZW50cnlfbnIgPSB2ZWN0b3JzLA0KPiArICAgIH07DQo+ICsgICAgdW5zaWduZWQg aW50IGk7DQo+ICsgICAgaW50IHJjOw0KPiArDQo+ICsgICAgQVNTRVJUKGFyY2gtPnBpcnEgPT0g LTEpOw0KPiArDQo+ICsgICAgLyogR2V0IGEgUElSUS4gKi8NCj4gKyAgICByYyA9IGFsbG9jYXRl X2FuZF9tYXBfbXNpX3BpcnEocGRldi0+ZG9tYWluLCAtMSwgJmFyY2gtPnBpcnEsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9QSVJRX1RZUEVfTVVMVElfTVNJLCAm bXNpX2luZm8pOw0KPiArICAgIGlmICggcmMgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgZHByaW50 ayhYRU5MT0dfRVJSLCAiJTA0eDolMDJ4OiUwMnguJXU6IGZhaWxlZCB0byBtYXAgUElSUToNCj4g JWRcbiIsDQo+ICsgICAgICAgICAgICAgICAgcGRldi0+c2VnLCBwZGV2LT5idXMsIFBDSV9TTE9U KHBkZXYtPmRldmZuKSwNCj4gKyAgICAgICAgICAgICAgICBQQ0lfRlVOQyhwZGV2LT5kZXZmbiks IHJjKTsNCj4gKyAgICAgICAgcmV0dXJuIHJjOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGZvciAo IGkgPSAwOyBpIDwgdmVjdG9yczsgaSsrICkNCj4gKyAgICB7DQo+ICsgICAgICAgIHhlbl9kb21j dGxfYmluZF9wdF9pcnFfdCBiaW5kID0gew0KPiArICAgICAgICAgICAgLm1hY2hpbmVfaXJxID0g YXJjaC0+cGlycSArIGksDQo+ICsgICAgICAgICAgICAuaXJxX3R5cGUgPSBQVF9JUlFfVFlQRV9N U0ksDQo+ICsgICAgICAgICAgICAudS5tc2kuZ3ZlYyA9IG1zaV92ZWN0b3IoZGF0YSkgKyBpLA0K PiArICAgICAgICAgICAgLnUubXNpLmdmbGFncyA9IG1zaV9mbGFncyhkYXRhLCBhZGRyZXNzKSwN Cj4gKyAgICAgICAgfTsNCj4gKw0KPiArICAgICAgICBwY2lkZXZzX2xvY2soKTsNCj4gKyAgICAg ICAgcmMgPSBwdF9pcnFfY3JlYXRlX2JpbmQocGRldi0+ZG9tYWluLCAmYmluZCk7DQo+ICsgICAg ICAgIGlmICggcmMgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgICBkcHJpbnRrKFhFTkxP R19FUlIsDQo+ICsgICAgICAgICAgICAgICAgICAgICIlMDR4OiUwMng6JTAyeC4ldTogZmFpbGVk IHRvIGJpbmQgUElSUSAldTogJWRcbiIsDQo+ICsgICAgICAgICAgICAgICAgICAgIHBkZXYtPnNl ZywgcGRldi0+YnVzLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksDQo+ICsgICAgICAgICAgICAgICAg ICAgIFBDSV9GVU5DKHBkZXYtPmRldmZuKSwgYXJjaC0+cGlycSArIGksIHJjKTsNCj4gKyAgICAg ICAgICAgIHNwaW5fbG9jaygmcGRldi0+ZG9tYWluLT5ldmVudF9sb2NrKTsNCj4gKyAgICAgICAg ICAgIHVubWFwX2RvbWFpbl9waXJxKHBkZXYtPmRvbWFpbiwgYXJjaC0+cGlycSk7DQo+ICsgICAg ICAgICAgICBzcGluX3VubG9jaygmcGRldi0+ZG9tYWluLT5ldmVudF9sb2NrKTsNCj4gKyAgICAg ICAgICAgIHBjaWRldnNfdW5sb2NrKCk7DQo+ICsgICAgICAgICAgICBhcmNoLT5waXJxID0gLTE7 DQo+ICsgICAgICAgICAgICByZXR1cm4gcmM7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgcGNp ZGV2c191bmxvY2soKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiAraW50IHZwY2lfbXNpX2FyY2hfZGlzYWJsZShzdHJ1Y3QgdnBjaV9hcmNoX21zaSAqYXJj aCwgc3RydWN0IHBjaV9kZXYNCj4gKnBkZXYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCB2ZWN0b3JzKQ0KPiArew0KPiArICAgIHVuc2lnbmVkIGludCBpOw0KPiAr DQo+ICsgICAgQVNTRVJUKGFyY2gtPnBpcnEgIT0gLTEpOw0KPiArDQo+ICsgICAgZm9yICggaSA9 IDA7IGkgPCB2ZWN0b3JzOyBpKysgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgeGVuX2RvbWN0bF9i aW5kX3B0X2lycV90IGJpbmQgPSB7DQo+ICsgICAgICAgICAgICAubWFjaGluZV9pcnEgPSBhcmNo LT5waXJxICsgaSwNCj4gKyAgICAgICAgICAgIC5pcnFfdHlwZSA9IFBUX0lSUV9UWVBFX01TSSwN Cj4gKyAgICAgICAgfTsNCj4gKw0KPiArICAgICAgICBwY2lkZXZzX2xvY2soKTsNCj4gKyAgICAg ICAgcHRfaXJxX2Rlc3Ryb3lfYmluZChwZGV2LT5kb21haW4sICZiaW5kKTsNCj4gKyAgICAgICAg cGNpZGV2c191bmxvY2soKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBwY2lkZXZzX2xvY2soKTsN Cj4gKyAgICBzcGluX2xvY2soJnBkZXYtPmRvbWFpbi0+ZXZlbnRfbG9jayk7DQo+ICsgICAgdW5t YXBfZG9tYWluX3BpcnEocGRldi0+ZG9tYWluLCBhcmNoLT5waXJxKTsNCj4gKyAgICBzcGluX3Vu bG9jaygmcGRldi0+ZG9tYWluLT5ldmVudF9sb2NrKTsNCj4gKyAgICBwY2lkZXZzX3VubG9jaygp Ow0KPiArDQo+ICsgICAgYXJjaC0+cGlycSA9IC0xOw0KPiArDQo+ICsgICAgcmV0dXJuIDA7DQo+ ICt9DQo+ICsNCj4gK2ludCB2cGNpX21zaV9hcmNoX2luaXQoc3RydWN0IHZwY2lfYXJjaF9tc2kg KmFyY2gpDQo+ICt7DQo+ICsgICAgYXJjaC0+cGlycSA9IC0xOw0KPiArICAgIHJldHVybiAwOw0K PiArfQ0KPiArDQo+ICt2b2lkIHZwY2lfbXNpX2FyY2hfcHJpbnQoc3RydWN0IHZwY2lfYXJjaF9t c2kgKmFyY2gsIHVpbnQxNl90IGRhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDY0X3QgYWRkcikNCj4gK3sNCj4gKyAgICBwcmludGsoInZlYz0lIzAyeCU3cyU2cyUzc2Fzc2Vy dCU1cyU3cyBkZXN0X2lkPSVsdSBwaXJxOiAlZFxuIiwNCj4gKyAgICAgICAgICAgTUFTS19FWFRS KGRhdGEsIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLKSwNCj4gKyAgICAgICAgICAgZGF0YSAmIE1TSV9E QVRBX0RFTElWRVJZX0xPV1BSSSA/ICJsb3dlc3QiIDogImZpeGVkIiwNCj4gKyAgICAgICAgICAg ZGF0YSAmIE1TSV9EQVRBX1RSSUdHRVJfTEVWRUwgPyAibGV2ZWwiIDogImVkZ2UiLA0KPiArICAg ICAgICAgICBkYXRhICYgTVNJX0RBVEFfTEVWRUxfQVNTRVJUID8gIiIgOiAiZGUiLA0KPiArICAg ICAgICAgICBhZGRyICYgTVNJX0FERFJfREVTVE1PREVfTE9HSUMgPyAibG9nIiA6ICJwaHlzIiwN Cj4gKyAgICAgICAgICAgYWRkciAmIE1TSV9BRERSX1JFRElSRUNUSU9OX0xPV1BSSSA/ICJsb3dl c3QiIDogImNwdSIsDQo+ICsgICAgICAgICAgIE1BU0tfRVhUUihhZGRyLCBNU0lfQUREUl9ERVNU X0lEX01BU0spLA0KPiArICAgICAgICAgICBhcmNoLT5waXJxKTsNCj4gK30NCj4gZGlmZiAtLWdp dCBhL3hlbi9hcmNoL3g4Ni9tc2kuYyBiL3hlbi9hcmNoL3g4Ni9tc2kuYw0KPiBpbmRleCBkOThm NDAwNjk5Li41NzMzNzhkNmMzIDEwMDY0NA0KPiAtLS0gYS94ZW4vYXJjaC94ODYvbXNpLmMNCj4g KysrIGIveGVuL2FyY2gveDg2L21zaS5jDQo+IEBAIC0zMCw2ICszMCw3IEBADQo+ICAjaW5jbHVk ZSA8cHVibGljL3BoeXNkZXYuaD4NCj4gICNpbmNsdWRlIDx4ZW4vaW9tbXUuaD4NCj4gICNpbmNs dWRlIDx4c20veHNtLmg+DQo+ICsjaW5jbHVkZSA8eGVuL3ZwY2kuaD4NCj4gDQo+ICBzdGF0aWMg czggX19yZWFkX21vc3RseSB1c2VfbXNpID0gLTE7DQo+ICBib29sZWFuX3BhcmFtKCJtc2kiLCB1 c2VfbXNpKTsNCj4gQEAgLTE1MzYsNiArMTUzNyw4IEBAIHN0YXRpYyB2b2lkIGR1bXBfbXNpKHVu c2lnbmVkIGNoYXIga2V5KQ0KPiAgICAgICAgICAgICAgICAgYXR0ci5ndWVzdF9tYXNrZWQgPyAn RycgOiAnICcsDQo+ICAgICAgICAgICAgICAgICBtYXNrKTsNCj4gICAgICB9DQo+ICsNCj4gKyAg ICB2cGNpX2R1bXBfbXNpKCk7DQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBfX2luaXQgbXNpX3Nl dHVwX2tleWhhbmRsZXIodm9pZCkNCj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3ZwY2kvTWFr ZWZpbGUgYi94ZW4vZHJpdmVycy92cGNpL01ha2VmaWxlDQo+IGluZGV4IDI0MTQ2NzIxMmYuLjYy Y2VjOWU4MmIgMTAwNjQ0DQo+IC0tLSBhL3hlbi9kcml2ZXJzL3ZwY2kvTWFrZWZpbGUNCj4gKysr IGIveGVuL2RyaXZlcnMvdnBjaS9NYWtlZmlsZQ0KPiBAQCAtMSArMSBAQA0KPiAtb2JqLXkgKz0g dnBjaS5vIGhlYWRlci5vDQo+ICtvYmoteSArPSB2cGNpLm8gaGVhZGVyLm8gbXNpLm8NCj4gZGlm ZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3ZwY2kvbXNpLmMgYi94ZW4vZHJpdmVycy92cGNpL21zaS5j DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmQ4ZjM0MTg2MTYN Cj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi94ZW4vZHJpdmVycy92cGNpL21zaS5jDQo+IEBAIC0w LDAgKzEsMzQ4IEBADQo+ICsvKg0KPiArICogSGFuZGxlcnMgZm9yIGFjY2Vzc2VzIHRvIHRoZSBN U0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUuDQo+ICsgKg0KPiArICogQ29weXJpZ2h0IChDKSAyMDE3 IENpdHJpeCBTeXN0ZW1zIFImRA0KPiArICoNCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCj4gKyAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0K PiArICogTGljZW5zZSwgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4NCj4gKyAqDQo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4gKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQo+ICsgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlDQo+IEdOVQ0KPiArICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz Lg0KPiArICoNCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYw0KPiArICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg SWYgbm90LCBzZWUNCj4gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lg0KPiArICovDQo+ ICsNCj4gKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4NCj4gKyNpbmNsdWRlIDx4ZW4vdnBjaS5oPg0K PiArI2luY2x1ZGUgPGFzbS9tc2kuaD4NCj4gKyNpbmNsdWRlIDx4ZW4va2V5aGFuZGxlci5oPg0K PiArDQo+ICsvKiBIYW5kbGVycyBmb3IgdGhlIE1TSSBjb250cm9sIGZpZWxkIChQQ0lfTVNJX0ZM QUdTKS4gKi8NCj4gK3N0YXRpYyB2b2lkIHZwY2lfbXNpX2NvbnRyb2xfcmVhZChzdHJ1Y3QgcGNp X2RldiAqcGRldiwgdW5zaWduZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bmlvbiB2cGNpX3ZhbCAqdmFsLCB2b2lkICpkYXRhKQ0KPiArew0KPiArICAg IGNvbnN0IHN0cnVjdCB2cGNpX21zaSAqbXNpID0gZGF0YTsNCj4gKw0KPiArICAgIC8qIFNldCBt dWx0aXBsZSBtZXNzYWdlIGNhcGFibGUuICovDQo+ICsgICAgdmFsLT51MTYgPSBNQVNLX0lOU1Io ZmxzKG1zaS0+bWF4X3ZlY3RvcnMpIC0gMSwNCj4gUENJX01TSV9GTEFHU19RTUFTSyk7DQo+ICsN Cj4gKyAgICBpZiAoIG1zaS0+ZW5hYmxlZCApIHsNCj4gKyAgICAgICAgdmFsLT51MTYgfD0gUENJ X01TSV9GTEFHU19FTkFCTEU7DQo+ICsgICAgICAgIHZhbC0+dTE2IHw9IE1BU0tfSU5TUihmbHMo bXNpLT52ZWN0b3JzKSAtIDEsIFBDSV9NU0lfRkxBR1NfUVNJWkUpOw0KPiArICAgIH0NCj4gKyAg ICB2YWwtPnUxNiB8PSBtc2ktPm1hc2tpbmcgPyBQQ0lfTVNJX0ZMQUdTX01BU0tCSVQgOiAwOw0K PiArICAgIHZhbC0+dTE2IHw9IG1zaS0+YWRkcmVzczY0ID8gUENJX01TSV9GTEFHU182NEJJVCA6 IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHZwY2lfbXNpX2VuYWJsZShzdHJ1Y3QgcGNp X2RldiAqcGRldiwgc3RydWN0IHZwY2lfbXNpICptc2ksDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IHZlY3RvcnMpDQo+ICt7DQo+ICsgICAgaW50IHJldDsNCj4g Kw0KPiArICAgIEFTU0VSVCghbXNpLT52ZWN0b3JzKTsNCj4gKw0KPiArICAgIHJldCA9IHZwY2lf bXNpX2FyY2hfZW5hYmxlKCZtc2ktPmFyY2gsIHBkZXYsIG1zaS0+YWRkcmVzcywgbXNpLT5kYXRh LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvcnMpOw0KPiArICAgIGlm ICggcmV0ICkNCj4gKyAgICAgICAgcmV0dXJuOw0KPiArDQo+ICsgICAgLyogQXBwbHkgdGhlIG1h c2sgYml0cy4gKi8NCj4gKyAgICBpZiAoIG1zaS0+bWFza2luZyApDQo+ICsgICAgew0KPiArICAg ICAgICB1bnNpZ25lZCBpbnQgaTsNCj4gKyAgICAgICAgdWludDMyX3QgbWFzayA9IG1zaS0+bWFz azsNCj4gKw0KPiArICAgICAgICBmb3IgKCBpID0gZmZzKG1hc2spIC0gMTsgbWFzayAmJiBpIDwg dmVjdG9yczsgaSA9IGZmcyhtYXNrKSAtIDEgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAg ICB2cGNpX21zaV9hcmNoX21hc2soJm1zaS0+YXJjaCwgcGRldiwgaSwgdHJ1ZSk7DQo+ICsgICAg ICAgICAgICBfX2NsZWFyX2JpdChpLCAmbWFzayk7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ ICsNCj4gKyAgICBfX21zaV9zZXRfZW5hYmxlKHBkZXYtPnNlZywgcGRldi0+YnVzLCBQQ0lfU0xP VChwZGV2LT5kZXZmbiksDQo+ICsgICAgICAgICAgICAgICAgICAgICBQQ0lfRlVOQyhwZGV2LT5k ZXZmbiksIG1zaS0+cG9zLCAxKTsNCj4gKw0KPiArICAgIG1zaS0+dmVjdG9ycyA9IHZlY3RvcnM7 DQo+ICsgICAgbXNpLT5lbmFibGVkID0gdHJ1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCB2 cGNpX21zaV9kaXNhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgdnBjaV9tc2kgKm1z aSkNCj4gK3sNCj4gKyAgICBpbnQgcmV0Ow0KPiArDQo+ICsgICAgQVNTRVJUKG1zaS0+dmVjdG9y cyk7DQo+ICsNCj4gKyAgICBfX21zaV9zZXRfZW5hYmxlKHBkZXYtPnNlZywgcGRldi0+YnVzLCBQ Q0lfU0xPVChwZGV2LT5kZXZmbiksDQo+ICsgICAgICAgICAgICAgICAgICAgICBQQ0lfRlVOQyhw ZGV2LT5kZXZmbiksIG1zaS0+cG9zLCAwKTsNCj4gKw0KPiArICAgIHJldCA9IHZwY2lfbXNpX2Fy Y2hfZGlzYWJsZSgmbXNpLT5hcmNoLCBwZGV2LCBtc2ktPnZlY3RvcnMpOw0KPiArICAgIGlmICgg cmV0ICkNCj4gKyAgICAgICAgcmV0dXJuIHJldDsNCj4gKw0KPiArICAgIG1zaS0+dmVjdG9ycyA9 IDA7DQo+ICsgICAgbXNpLT5lbmFibGVkID0gZmFsc2U7DQo+ICsNCj4gKyAgICByZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgdnBjaV9tc2lfY29udHJvbF93cml0ZShzdHJ1Y3Qg cGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5pb24gdnBjaV92YWwgdmFsLCB2b2lkICpkYXRhKQ0KPiArew0KPiAr ICAgIHN0cnVjdCB2cGNpX21zaSAqbXNpID0gZGF0YTsNCj4gKyAgICB1bnNpZ25lZCBpbnQgdmVj dG9ycyA9IDEgPDwgTUFTS19FWFRSKHZhbC51MTYsIFBDSV9NU0lfRkxBR1NfUVNJWkUpOw0KPiAr ICAgIGludCByZXQ7DQo+ICsNCj4gKyAgICBpZiAoIHZlY3RvcnMgPiBtc2ktPm1heF92ZWN0b3Jz ICkNCj4gKyAgICAgICAgdmVjdG9ycyA9IG1zaS0+bWF4X3ZlY3RvcnM7DQo+ICsNCj4gKyAgICBp ZiAoICEhKHZhbC51MTYgJiBQQ0lfTVNJX0ZMQUdTX0VOQUJMRSkgPT0gbXNpLT5lbmFibGVkICYm DQo+ICsgICAgICAgICAodmVjdG9ycyA9PSBtc2ktPnZlY3RvcnMgfHwgIW1zaS0+ZW5hYmxlZCkg KQ0KPiArICAgICAgICByZXR1cm47DQoNClBlcnNvbmFsbHkgSSBmaW5kIHRoZSBhYm92ZSBsb2dp YyBhIGxpdHRsZSB0cmlja3kgdG8gZm9sbG93LiBXb3VsZCBpdCBiZSBjbGVhcmVyIHRvIGZvbGQg aXQgaW50byB0aGUgbG9naWMgYmVsb3c/IChJIG9ubHkgdW5kZXJzdG9vZCB0aGUgcmVhc29uIGZv ciB0aGUgbG9naWMgYWJvdmUgYWZ0ZXIgcmVhZGluZyB0aGUgbG9naWMgYmVsb3cpLg0KDQo+ICsN Cj4gKyAgICBpZiAoIHZhbC51MTYgJiBQQ0lfTVNJX0ZMQUdTX0VOQUJMRSApDQo+ICsgICAgew0K PiArICAgICAgICBpZiAoIG1zaS0+ZW5hYmxlZCApDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAg ICAgIC8qDQo+ICsgICAgICAgICAgICAgKiBDaGFuZ2UgdG8gdGhlIG51bWJlciBvZiBlbmFibGVk IHZlY3RvcnMsIGRpc2FibGUgYW5kDQo+ICsgICAgICAgICAgICAgKiBlbmFibGUgTVNJIGluIG9y ZGVyIHRvIGFwcGx5IGl0Lg0KPiArICAgICAgICAgICAgICovDQo+ICsgICAgICAgICAgICByZXQg PSB2cGNpX21zaV9kaXNhYmxlKHBkZXYsIG1zaSk7DQo+ICsgICAgICAgICAgICBpZiAoIHJldCAp DQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIHZw Y2lfbXNpX2VuYWJsZShwZGV2LCBtc2ksIHZlY3RvcnMpOw0KPiArICAgIH0NCj4gKyAgICBlbHNl DQo+ICsgICAgICAgIHZwY2lfbXNpX2Rpc2FibGUocGRldiwgbXNpKTsNCj4gK30NCj4gKw0KPiAr LyogSGFuZGxlcnMgZm9yIHRoZSBhZGRyZXNzIGZpZWxkICgzMmJpdCBvciBsb3cgcGFydCBvZiBh IDY0Yml0IGFkZHJlc3MpLiAqLw0KPiArc3RhdGljIHZvaWQgdnBjaV9tc2lfYWRkcmVzc19yZWFk KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgcmVnLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHZwY2lfdmFsICp2YWwsIHZvaWQgKmRhdGEpDQo+ ICt7DQo+ICsgICAgY29uc3Qgc3RydWN0IHZwY2lfbXNpICptc2kgPSBkYXRhOw0KPiArDQo+ICsg ICAgdmFsLT51MzIgPSBtc2ktPmFkZHJlc3M7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHZw Y2lfbXNpX2FkZHJlc3Nfd3JpdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBy ZWcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHZwY2lfdmFs IHZhbCwgdm9pZCAqZGF0YSkNCj4gK3sNCj4gKyAgICBzdHJ1Y3QgdnBjaV9tc2kgKm1zaSA9IGRh dGE7DQo+ICsNCj4gKyAgICAvKiBDbGVhciBsb3cgcGFydC4gKi8NCj4gKyAgICBtc2ktPmFkZHJl c3MgJj0gfih1aW50NjRfdCkweGZmZmZmZmZmOw0KPiArICAgIG1zaS0+YWRkcmVzcyB8PSB2YWwu dTMyOw0KPiArfQ0KPiArDQo+ICsvKiBIYW5kbGVycyBmb3IgdGhlIGhpZ2ggcGFydCBvZiBhIDY0 Yml0IGFkZHJlc3MgZmllbGQuICovDQo+ICtzdGF0aWMgdm9pZCB2cGNpX21zaV9hZGRyZXNzX3Vw cGVyX3JlYWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkDQo+IGludCByZWcsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gdnBjaV92YWwgKnZh bCwgdm9pZCAqZGF0YSkNCj4gK3sNCj4gKyAgICBjb25zdCBzdHJ1Y3QgdnBjaV9tc2kgKm1zaSA9 IGRhdGE7DQo+ICsNCj4gKyAgICB2YWwtPnUzMiA9IG1zaS0+YWRkcmVzcyA+PiAzMjsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHZvaWQgdnBjaV9tc2lfYWRkcmVzc191cHBlcl93cml0ZShzdHJ1Y3Qg cGNpX2RldiAqcGRldiwgdW5zaWduZWQNCj4gaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gdnBjaV92YWwgdmFsLCB2b2lkICpkYXRhKQ0K PiArew0KPiArICAgIHN0cnVjdCB2cGNpX21zaSAqbXNpID0gZGF0YTsNCj4gKw0KPiArICAgIC8q IENsZWFyIGhpZ2ggcGFydC4gKi8NCj4gKyAgICBtc2ktPmFkZHJlc3MgJj0gfigodWludDY0X3Qp MHhmZmZmZmZmZiA8PCAzMik7DQo+ICsgICAgbXNpLT5hZGRyZXNzIHw9ICh1aW50NjRfdCl2YWwu dTMyIDw8IDMyOw0KPiArfQ0KPiArDQo+ICsvKiBIYW5kbGVycyBmb3IgdGhlIGRhdGEgZmllbGQu ICovDQo+ICtzdGF0aWMgdm9pZCB2cGNpX21zaV9kYXRhX3JlYWQoc3RydWN0IHBjaV9kZXYgKnBk ZXYsIHVuc2lnbmVkIGludCByZWcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5pb24gdnBjaV92YWwgKnZhbCwgdm9pZCAqZGF0YSkNCj4gK3sNCj4gKyAgICBjb25zdCBzdHJ1 Y3QgdnBjaV9tc2kgKm1zaSA9IGRhdGE7DQo+ICsNCj4gKyAgICB2YWwtPnUxNiA9IG1zaS0+ZGF0 YTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgdnBjaV9tc2lfZGF0YV93cml0ZShzdHJ1Y3Qg cGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5pb24gdnBjaV92YWwgdmFsLCB2b2lkICpkYXRhKQ0KPiArew0KPiArICAg IHN0cnVjdCB2cGNpX21zaSAqbXNpID0gZGF0YTsNCj4gKw0KPiArICAgIG1zaS0+ZGF0YSA9IHZh bC51MTY7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHZwY2lfbXNpX21hc2tfcmVhZChzdHJ1 Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bmlvbiB2cGNpX3ZhbCAqdmFsLCB2b2lkICpkYXRhKQ0KPiArew0KPiAr ICAgIGNvbnN0IHN0cnVjdCB2cGNpX21zaSAqbXNpID0gZGF0YTsNCj4gKw0KPiArICAgIHZhbC0+ dTMyID0gbXNpLT5tYXNrOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCB2cGNpX21zaV9tYXNr X3dyaXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgcmVnLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiB2cGNpX3ZhbCB2YWwsIHZvaWQgKmRhdGEp DQo+ICt7DQo+ICsgICAgc3RydWN0IHZwY2lfbXNpICptc2kgPSBkYXRhOw0KPiArICAgIHVpbnQz Ml90IGRtYXNrOw0KPiArDQo+ICsgICAgZG1hc2sgPSBtc2ktPm1hc2sgXiB2YWwudTMyOw0KPiAr DQo+ICsgICAgaWYgKCAhZG1hc2sgKQ0KPiArICAgICAgICByZXR1cm47DQo+ICsNCj4gKyAgICBp ZiAoIG1zaS0+ZW5hYmxlZCApDQo+ICsgICAgew0KPiArICAgICAgICB1bnNpZ25lZCBpbnQgaTsN Cj4gKw0KPiArICAgICAgICBmb3IgKCBpID0gZmZzKGRtYXNrKSAtIDE7IGRtYXNrICYmIGkgPCBt c2ktPnZlY3RvcnM7DQo+ICsgICAgICAgICAgICAgIGkgPSBmZnMoZG1hc2spIC0gMSApDQo+ICsg ICAgICAgIHsNCj4gKyAgICAgICAgICAgIHZwY2lfbXNpX2FyY2hfbWFzaygmbXNpLT5hcmNoLCBw ZGV2LCBpLCBNQVNLX0VYVFIodmFsLnUzMiwgMSA8PA0KPiBpKSk7DQo+ICsgICAgICAgICAgICBf X2NsZWFyX2JpdChpLCAmZG1hc2spOw0KPiArICAgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgbXNpLT5tYXNrID0gdmFsLnUzMjsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCB2cGNpX2lu aXRfbXNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQ0KPiArew0KPiArICAgIHVpbnQ4X3Qgc2VnID0g cGRldi0+c2VnLCBidXMgPSBwZGV2LT5idXM7DQo+ICsgICAgdWludDhfdCBzbG90ID0gUENJX1NM T1QocGRldi0+ZGV2Zm4pLCBmdW5jID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pOw0KPiArICAgIHN0 cnVjdCB2cGNpX21zaSAqbXNpOw0KPiArICAgIHVuc2lnbmVkIGludCBtc2lfb2Zmc2V0Ow0KPiAr ICAgIHVpbnQxNl90IGNvbnRyb2w7DQo+ICsgICAgaW50IHJldDsNCj4gKw0KPiArICAgIG1zaV9v ZmZzZXQgPSBwY2lfZmluZF9jYXBfb2Zmc2V0KHNlZywgYnVzLCBzbG90LCBmdW5jLCBQQ0lfQ0FQ X0lEX01TSSk7DQo+ICsgICAgaWYgKCAhbXNpX29mZnNldCApDQo+ICsgICAgICAgIHJldHVybiAw Ow0KPiArDQo+ICsgICAgbXNpID0geHphbGxvYyhzdHJ1Y3QgdnBjaV9tc2kpOw0KPiArICAgIGlm ICggIW1zaSApDQo+ICsgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsgICAgbXNpLT5w b3MgPSBtc2lfb2Zmc2V0Ow0KPiArDQo+ICsgICAgY29udHJvbCA9IHBjaV9jb25mX3JlYWQxNihz ZWcsIGJ1cywgc2xvdCwgZnVuYywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1z aV9jb250cm9sX3JlZyhtc2lfb2Zmc2V0KSk7DQo+ICsNCj4gKyAgICByZXQgPSB2cGNpX2FkZF9y ZWdpc3RlcihwZGV2LCB2cGNpX21zaV9jb250cm9sX3JlYWQsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdnBjaV9tc2lfY29udHJvbF93cml0ZSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtc2lfY29udHJvbF9yZWcobXNpX29mZnNldCksIDIsIG1zaSk7DQo+ICsgICAg aWYgKCByZXQgKQ0KPiArICAgICAgICBnb3RvIGVycm9yOw0KPiArDQo+ICsgICAgLyogR2V0IHRo ZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3JzIHRoZSBkZXZpY2Ugc3VwcG9ydHMuICovDQo+ICsg ICAgbXNpLT5tYXhfdmVjdG9ycyA9IG11bHRpX21zaV9jYXBhYmxlKGNvbnRyb2wpOw0KPiArICAg IEFTU0VSVChtc2ktPm1heF92ZWN0b3JzIDw9IDMyKTsNCj4gKw0KPiArICAgIC8qIE5vIFBJUlEg YmluZCB5ZXQuICovDQo+ICsgICAgdnBjaV9tc2lfYXJjaF9pbml0KCZtc2ktPmFyY2gpOw0KPiAr DQo+ICsgICAgaWYgKCBpc182NGJpdF9hZGRyZXNzKGNvbnRyb2wpICkNCj4gKyAgICAgICAgbXNp LT5hZGRyZXNzNjQgPSB0cnVlOw0KPiArICAgIGlmICggaXNfbWFza19iaXRfc3VwcG9ydChjb250 cm9sKSApDQo+ICsgICAgICAgIG1zaS0+bWFza2luZyA9IHRydWU7DQo+ICsNCj4gKyAgICByZXQg PSB2cGNpX2FkZF9yZWdpc3RlcihwZGV2LCB2cGNpX21zaV9hZGRyZXNzX3JlYWQsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdnBjaV9tc2lfYWRkcmVzc193cml0ZSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtc2lfbG93ZXJfYWRkcmVzc19yZWcobXNpX29mZnNldCks IDQsIG1zaSk7DQo+ICsgICAgaWYgKCByZXQgKQ0KPiArICAgICAgICBnb3RvIGVycm9yOw0KPiAr DQo+ICsgICAgcmV0ID0gdnBjaV9hZGRfcmVnaXN0ZXIocGRldiwgdnBjaV9tc2lfZGF0YV9yZWFk LCB2cGNpX21zaV9kYXRhX3dyaXRlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1z aV9kYXRhX3JlZyhtc2lfb2Zmc2V0LCBtc2ktPmFkZHJlc3M2NCksIDIsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbXNpKTsNCj4gKyAgICBpZiAoIHJldCApDQo+ICsgICAgICAgIGdv dG8gZXJyb3I7DQo+ICsNCj4gKyAgICBpZiAoIG1zaS0+YWRkcmVzczY0ICkNCj4gKyAgICB7DQo+ ICsgICAgICAgIHJldCA9IHZwY2lfYWRkX3JlZ2lzdGVyKHBkZXYsIHZwY2lfbXNpX2FkZHJlc3Nf dXBwZXJfcmVhZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnBjaV9tc2lf YWRkcmVzc191cHBlcl93cml0ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bXNpX3VwcGVyX2FkZHJlc3NfcmVnKG1zaV9vZmZzZXQpLCA0LCBtc2kpOw0KPiArICAgICAgICBp ZiAoIHJldCApDQo+ICsgICAgICAgICAgICBnb3RvIGVycm9yOw0KPiArICAgIH0NCj4gKw0KPiAr ICAgIGlmICggbXNpLT5tYXNraW5nICkNCj4gKyAgICB7DQo+ICsgICAgICAgIHJldCA9IHZwY2lf YWRkX3JlZ2lzdGVyKHBkZXYsIHZwY2lfbXNpX21hc2tfcmVhZCwNCj4gdnBjaV9tc2lfbWFza193 cml0ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNpX21hc2tfYml0c19y ZWcobXNpX29mZnNldCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbXNpLT5hZGRyZXNzNjQpLCA0LCBtc2kpOw0KPiArICAgICAgICBpZiAoIHJl dCApDQo+ICsgICAgICAgICAgICBnb3RvIGVycm9yOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHBk ZXYtPnZwY2ktPm1zaSA9IG1zaTsNCj4gKw0KPiArICAgIHJldHVybiAwOw0KPiArDQo+ICsgZXJy b3I6DQoNCkRvIHlvdSBub3QgbmVlZCB0byBjbGVhbiB1cCBhbnkgYWRkZWQgcmVnaXN0ZXIgaGFu ZGxlcnMgaGVyZT8gVGhleSBoYXZlIGJlZW4gZ2l2ZW4gYSBjb250ZXh0IHZhbHVlIHdoaWNoIHlv dSdyZSBhYm91dCB0byB4ZnJlZSgpLg0KDQogIFBhdWwNCg0KPiArICAgIEFTU0VSVChyZXQpOw0K PiArICAgIHhmcmVlKG1zaSk7DQo+ICsgICAgcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArUkVH SVNURVJfVlBDSV9JTklUKHZwY2lfaW5pdF9tc2kpOw0KPiArDQo+ICt2b2lkIHZwY2lfZHVtcF9t c2kodm9pZCkNCj4gK3sNCj4gKyAgICBzdHJ1Y3QgZG9tYWluICpkOw0KPiArDQo+ICsgICAgZm9y X2VhY2hfZG9tYWluICggZCApDQo+ICsgICAgew0KPiArICAgICAgICBjb25zdCBzdHJ1Y3QgcGNp X2RldiAqcGRldjsNCj4gKw0KPiArICAgICAgICBpZiAoICFoYXNfdnBjaShkKSApDQo+ICsgICAg ICAgICAgICBjb250aW51ZTsNCj4gKw0KPiArICAgICAgICBwcmludGsoInZQQ0kgTVNJIGluZm9y bWF0aW9uIGZvciBndWVzdCAldVxuIiwgZC0+ZG9tYWluX2lkKTsNCj4gKw0KPiArICAgICAgICBp ZiAoICF2cGNpX3RyeWxvY2soZCkgKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgICBwcmlu dGsoIlVuYWJsZSB0byBnZXQgdlBDSSBsb2NrLCBza2lwcGluZ1xuIik7DQo+ICsgICAgICAgICAg ICBjb250aW51ZTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIGxpc3RfZm9yX2VhY2hf ZW50cnkgKCBwZGV2LCAmZC0+YXJjaC5wZGV2X2xpc3QsIGRvbWFpbl9saXN0ICkNCj4gKyAgICAg ICAgew0KPiArICAgICAgICAgICAgdWludDhfdCBzZWcgPSBwZGV2LT5zZWcsIGJ1cyA9IHBkZXYt PmJ1czsNCj4gKyAgICAgICAgICAgIHVpbnQ4X3Qgc2xvdCA9IFBDSV9TTE9UKHBkZXYtPmRldmZu KSwgZnVuYyA9IFBDSV9GVU5DKHBkZXYtDQo+ID5kZXZmbik7DQo+ICsgICAgICAgICAgICBzdHJ1 Y3QgdnBjaV9tc2kgKm1zaSA9IHBkZXYtPnZwY2ktPm1zaTsNCj4gKw0KPiArICAgICAgICAgICAg aWYgKCAhbXNpICkNCj4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gKw0KPiArICAgICAg ICAgICAgcHJpbnRrKCJEZXZpY2UgJTA0eDolMDJ4OiUwMnguJXVcbiIsIHNlZywgYnVzLCBzbG90 LCBmdW5jKTsNCj4gKw0KPiArICAgICAgICAgICAgcHJpbnRrKCJFbmFibGVkOiAldSBTdXBwb3J0 cyBtYXNraW5nOiAldSA2NC1iaXQgYWRkcmVzc2VzOiAldVxuIiwNCj4gKyAgICAgICAgICAgICAg ICAgICBtc2ktPmVuYWJsZWQsIG1zaS0+bWFza2luZywgbXNpLT5hZGRyZXNzNjQpOw0KPiArICAg ICAgICAgICAgcHJpbnRrKCJNYXggdmVjdG9yczogJXUgZW5hYmxlZCB2ZWN0b3JzOiAldVxuIiwN Cj4gKyAgICAgICAgICAgICAgICAgICBtc2ktPm1heF92ZWN0b3JzLCBtc2ktPnZlY3RvcnMpOw0K PiArDQo+ICsgICAgICAgICAgICB2cGNpX21zaV9hcmNoX3ByaW50KCZtc2ktPmFyY2gsIG1zaS0+ ZGF0YSwgbXNpLT5hZGRyZXNzKTsNCj4gKw0KPiArICAgICAgICAgICAgaWYgKCBtc2ktPm1hc2tp bmcgKQ0KPiArICAgICAgICAgICAgICAgIHByaW50aygibWFzaz0lIzAzMnhcbiIsIG1zaS0+bWFz ayk7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgdnBjaV91bmxvY2soZCk7DQo+ICsgICAgfQ0K PiArfQ0KPiArDQo+ICsvKg0KPiArICogTG9jYWwgdmFyaWFibGVzOg0KPiArICogbW9kZTogQw0K PiArICogYy1maWxlLXN0eWxlOiAiQlNEIg0KPiArICogYy1iYXNpYy1vZmZzZXQ6IDQNCj4gKyAq IHRhYi13aWR0aDogNA0KPiArICogaW5kZW50LXRhYnMtbW9kZTogbmlsDQo+ICsgKiBFbmQ6DQo+ ICsgKi8NCj4gKw0KPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW8uaCBi L3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2lvLmgNCj4gaW5kZXggNGZlOTk2ZmU0OS4uNTVlZDA5 NDczNCAxMDA2NDQNCj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW8uaA0KPiArKysg Yi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9pby5oDQo+IEBAIC0yMCw2ICsyMCw3IEBADQo+ICAj ZGVmaW5lIF9fQVNNX1g4Nl9IVk1fSU9fSF9fDQo+IA0KPiAgI2luY2x1ZGUgPHhlbi9tbS5oPg0K PiArI2luY2x1ZGUgPHhlbi9wY2kuaD4NCj4gICNpbmNsdWRlIDxhc20vaHZtL3ZwaWMuaD4NCj4g ICNpbmNsdWRlIDxhc20vaHZtL3Zpb2FwaWMuaD4NCj4gICNpbmNsdWRlIDxwdWJsaWMvaHZtL2lv cmVxLmg+DQo+IEBAIC0xMjYsNiArMTI3LDIzIEBAIHZvaWQgaHZtX2RwY2lfZW9pKHN0cnVjdCBk b21haW4gKmQsIHVuc2lnbmVkIGludA0KPiBndWVzdF9pcnEsDQo+ICB2b2lkIG1zaXhfd3JpdGVf Y29tcGxldGlvbihzdHJ1Y3QgdmNwdSAqKTsNCj4gIHZvaWQgbXNpeHRibF9pbml0KHN0cnVjdCBk b21haW4gKmQpOw0KPiANCj4gKy8qIEFyY2gtc3BlY2lmaWMgTVNJIGRhdGEgZm9yIHZQQ0kuICov DQo+ICtzdHJ1Y3QgdnBjaV9hcmNoX21zaSB7DQo+ICsgICAgaW50IHBpcnE7DQo+ICt9Ow0KPiAr DQo+ICsvKiBBcmNoLXNwZWNpZmljIHZQQ0kgTVNJIGhlbHBlcnMuICovDQo+ICt2b2lkIHZwY2lf bXNpX2FyY2hfbWFzayhzdHJ1Y3QgdnBjaV9hcmNoX21zaSAqYXJjaCwgc3RydWN0IHBjaV9kZXYg KnBkZXYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZW50cnksIGJv b2wgbWFzayk7DQo+ICtpbnQgdnBjaV9tc2lfYXJjaF9lbmFibGUoc3RydWN0IHZwY2lfYXJjaF9t c2kgKmFyY2gsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQ2NF90IGFkZHJlc3MsIHVpbnQzMl90IGRhdGEsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IHZlY3RvcnMpOw0KPiAraW50IHZwY2lfbXNpX2FyY2hfZGlz YWJsZShzdHJ1Y3QgdnBjaV9hcmNoX21zaSAqYXJjaCwgc3RydWN0IHBjaV9kZXYNCj4gKnBkZXYs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2ZWN0b3JzKTsNCj4g K2ludCB2cGNpX21zaV9hcmNoX2luaXQoc3RydWN0IHZwY2lfYXJjaF9tc2kgKmFyY2gpOw0KPiAr dm9pZCB2cGNpX21zaV9hcmNoX3ByaW50KHN0cnVjdCB2cGNpX2FyY2hfbXNpICphcmNoLCB1aW50 MTZfdCBkYXRhLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFkZHIpOw0K PiArDQo+ICBlbnVtIHN0ZHZnYV9jYWNoZV9zdGF0ZSB7DQo+ICAgICAgU1REVkdBX0NBQ0hFX1VO SU5JVElBTElaRUQsDQo+ICAgICAgU1REVkdBX0NBQ0hFX0VOQUJMRUQsDQo+IGRpZmYgLS1naXQg YS94ZW4vaW5jbHVkZS9hc20teDg2L21zaS5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9tc2kuaA0K PiBpbmRleCAyMTNlZTUzZjcyLi45YzM2YzM0MzcyIDEwMDY0NA0KPiAtLS0gYS94ZW4vaW5jbHVk ZS9hc20teDg2L21zaS5oDQo+ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvbXNpLmgNCj4gQEAg LTQ4LDYgKzQ4LDcgQEANCj4gICNkZWZpbmUgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQgIDMN Cj4gICNkZWZpbmUgTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVICAgICgwIDw8DQo+IE1TSV9BRERS X1JFRElSRUNUSU9OX1NISUZUKQ0KPiAgI2RlZmluZSBNU0lfQUREUl9SRURJUkVDVElPTl9MT1dQ UkkgKDEgPDwNCj4gTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQpDQo+ICsjZGVmaW5lIE1TSV9B RERSX1JFRElSRUNUSU9OX01BU0sgICAweDgNCj4gDQo+ICAjZGVmaW5lIE1TSV9BRERSX0RFU1Rf SURfU0hJRlQJCTEyDQo+ICAjZGVmaW5lCSBNU0lfQUREUl9ERVNUX0lEX01BU0sJCTB4MDBmZjAw MA0KPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUveGVuL2h2bS9pcnEuaCBiL3hlbi9pbmNsdWRl L3hlbi9odm0vaXJxLmgNCj4gaW5kZXggMGQyYzcyYzEwOS4uZDA3MTg1YTQ3OSAxMDA2NDQNCj4g LS0tIGEveGVuL2luY2x1ZGUveGVuL2h2bS9pcnEuaA0KPiArKysgYi94ZW4vaW5jbHVkZS94ZW4v aHZtL2lycS5oDQo+IEBAIC01Nyw3ICs1Nyw5IEBAIHN0cnVjdCBkZXZfaW50eF9nc2lfbGluayB7 DQo+ICAjZGVmaW5lIFZNU0lfREVMSVZfTUFTSyAgIDB4NzAwMA0KPiAgI2RlZmluZSBWTVNJX1RS SUdfTU9ERSAgICAweDgwMDANCj4gDQo+ICsjZGVmaW5lIEdGTEFHU19TSElGVF9ERVNUX0lEICAg ICAgICAwDQo+ICAjZGVmaW5lIEdGTEFHU19TSElGVF9SSCAgICAgICAgICAgICA4DQo+ICsjZGVm aW5lIEdGTEFHU19TSElGVF9ETSAgICAgICAgICAgICA5DQo+ICAjZGVmaW5lIEdGTEFHU19TSElG VF9ERUxJVl9NT0RFICAgICAxMg0KPiAgI2RlZmluZSBHRkxBR1NfU0hJRlRfVFJHX01PREUgICAg ICAgMTUNCj4gDQo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vdnBjaS5oIGIveGVuL2lu Y2x1ZGUveGVuL3ZwY2kuaA0KPiBpbmRleCA0NTJlZTQ4MmU4Li4yYTdkNzU1N2IzIDEwMDY0NA0K PiAtLS0gYS94ZW4vaW5jbHVkZS94ZW4vdnBjaS5oDQo+ICsrKyBiL3hlbi9pbmNsdWRlL3hlbi92 cGNpLmgNCj4gQEAgLTEzLDYgKzEzLDcgQEANCj4gICAqIG9mIGp1c3QgcmV0dXJuaW5nIHdoZXRo ZXIgdGhlIGxvY2sgaXMgaG9sZCBieSBhbnkgQ1BVKS4NCj4gICAqLw0KPiAgI2RlZmluZSB2cGNp X2xvY2soZCkgc3Bpbl9sb2NrX3JlY3Vyc2l2ZSgmKGQpLQ0KPiA+YXJjaC5odm1fZG9tYWluLnZw Y2lfbG9jaykNCj4gKyNkZWZpbmUgdnBjaV90cnlsb2NrKGQpIHNwaW5fdHJ5bG9ja19yZWN1cnNp dmUoJihkKS0NCj4gPmFyY2guaHZtX2RvbWFpbi52cGNpX2xvY2spDQo+ICAjZGVmaW5lIHZwY2lf dW5sb2NrKGQpIHNwaW5fdW5sb2NrX3JlY3Vyc2l2ZSgmKGQpLQ0KPiA+YXJjaC5odm1fZG9tYWlu LnZwY2lfbG9jaykNCj4gICNkZWZpbmUgdnBjaV9sb2NrZWQoZCkgc3Bpbl9pc19sb2NrZWQoJihk KS0+YXJjaC5odm1fZG9tYWluLnZwY2lfbG9jaykNCj4gDQo+IEBAIC04NSw5ICs4NiwzNCBAQCBz dHJ1Y3QgdnBjaSB7DQo+ICAgICAgICAgIH0gYmFyc1s3XTsgLyogQXQgbW9zdCA2IEJBUlMgKyAx IGV4cGFuc2lvbiBST00gQkFSLiAqLw0KPiAgICAgICAgICAvKiBGSVhNRTogY3VycmVudGx5IHRo ZXJlJ3Mgbm8gc3VwcG9ydCBmb3IgU1ItSU9WLiAqLw0KPiAgICAgIH0gaGVhZGVyOw0KPiArDQo+ ICsgICAgLyogTVNJIGRhdGEuICovDQo+ICsgICAgc3RydWN0IHZwY2lfbXNpIHsNCj4gKyAgICAg ICAgLyogT2Zmc2V0IG9mIHRoZSBjYXBhYmlsaXR5IGluIHRoZSBjb25maWcgc3BhY2UuICovDQo+ ICsgICAgICAgIHVuc2lnbmVkIGludCBwb3M7DQo+ICsgICAgICAgIC8qIE1heGltdW0gbnVtYmVy IG9mIHZlY3RvcnMgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UuICovDQo+ICsgICAgICAgIHVuc2ln bmVkIGludCBtYXhfdmVjdG9yczsNCj4gKyAgICAgICAgLyogTnVtYmVyIG9mIHZlY3RvcnMgY29u ZmlndXJlZC4gKi8NCj4gKyAgICAgICAgdW5zaWduZWQgaW50IHZlY3RvcnM7DQo+ICsgICAgICAg IC8qIEFkZHJlc3MgYW5kIGRhdGEgZmllbGRzLiAqLw0KPiArICAgICAgICB1aW50NjRfdCBhZGRy ZXNzOw0KPiArICAgICAgICB1aW50MTZfdCBkYXRhOw0KPiArICAgICAgICAvKiBNYXNrIGJpdGZp ZWxkLiAqLw0KPiArICAgICAgICB1aW50MzJfdCBtYXNrOw0KPiArICAgICAgICAvKiBFbmFibGVk PyAqLw0KPiArICAgICAgICBib29sIGVuYWJsZWQ7DQo+ICsgICAgICAgIC8qIFN1cHBvcnRzIHBl ci12ZWN0b3IgbWFza2luZz8gKi8NCj4gKyAgICAgICAgYm9vbCBtYXNraW5nOw0KPiArICAgICAg ICAvKiA2NC1iaXQgYWRkcmVzcyBjYXBhYmxlPyAqLw0KPiArICAgICAgICBib29sIGFkZHJlc3M2 NDsNCj4gKyAgICAgICAgLyogQXJjaC1zcGVjaWZpYyBkYXRhLiAqLw0KPiArICAgICAgICBzdHJ1 Y3QgdnBjaV9hcmNoX21zaSBhcmNoOw0KPiArICAgIH0gKm1zaTsNCj4gICNlbmRpZg0KPiAgfTsN Cj4gDQo+ICt2b2lkIHZwY2lfZHVtcF9tc2kodm9pZCk7DQo+ICsNCj4gICNlbmRpZg0KPiANCj4g IC8qDQo+IC0tDQo+IDIuMTEuMCAoQXBwbGUgR2l0LTgxKQ0KDQpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1k ZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK