From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sagar Arun Kamble Subject: Re: [PATCH v8 6/6] drm/i915/guc : Decouple logs and ADS from submission Date: Thu, 2 Nov 2017 14:53:13 +0530 Message-ID: References: <1508865685-7722-1-git-send-email-sujaritha.sundaresan@intel.com> <1508865685-7722-7-git-send-email-sujaritha.sundaresan@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2E26A6E052 for ; Thu, 2 Nov 2017 09:23:15 +0000 (UTC) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Michal Wajdeczko , intel-gfx@lists.freedesktop.org, Sujaritha Sundaresan List-Id: intel-gfx@lists.freedesktop.org CgpPbiAxMC8yNS8yMDE3IDk6NDkgUE0sIE1pY2hhbCBXYWpkZWN6a28gd3JvdGU6Cj4gT24gVHVl LCAyNCBPY3QgMjAxNyAxOToyMToyNSArMDIwMCwgU3VqYXJpdGhhIFN1bmRhcmVzYW4gCj4gPHN1 amFyaXRoYS5zdW5kYXJlc2FuQGludGVsLmNvbT4gd3JvdGU6Cj4KPj4gVGhlIEFkZGl0aW9uYWwg RGF0YSBTdHJ1Y3QgKEFEUykgY29udGFpbnMgb2JqZWN0cyB0aGF0IGFyZSByZXF1aXJlZCBieQo+ PiBndWMgcG9zdCBGVyBsb2FkIGFuZCBhcmUgbm90IG5lY2Vzc2FyaWx5IHN1Ym1pc3Npb24tb25s eSAoYWx0aG91Z2ggCj4+IHRoYXQncwo+PiBvdXIgY3VycmVudCBvbmx5IHVzZS1jYXNlKS4gSWYg aW4gdGhlIGZ1dHVyZSB3ZSBsb2FkIEd1QyB3aXRoIHN1Ym1pc3Npb24KPj4gZGlzYWJsZWQgdG8g dXNlIHNvbWUgb3RoZXIgR3VDIGZlYXR1cmUgd2UgbWlnaHQgc3RpbGwgZW5kIHVwIHJlcXVpcmlu Zwo+PiBzb21ldGhpbmcgaW5zaWRlIHRoZSBBRFMsIHNvIGl0IG1ha2VzIG1vcmUgc2Vuc2UgZm9y IHRoZW0gdG8gYmUgYWx3YXlzCj4+IGNyZWF0ZWQgaWYgR3VDIGlzIGxvYWRlZC4KPj4KPj4gU2lt aWxhcmx5LCB3ZSBzdGlsbCB3YW50IHRvIGFjY2VzcyBHdUMgbG9ncyBldmVuIGlmIEd1QyBzdWJt aXNzaW9uIGlzCj4+IGRpc2FibGUgdG8gZGVidWcgaXNzdWVzIHdpdGggR3VDIGxvYWRpbmcgb3Ig d2l0aCB3YXRoZXZlciB3ZSdyZSB1c2luZwo+PiBHdUMgZm9yLgo+Pgo+PiBUbyBtYWtlIGEgY29u Y3JldGUgZXhhbXBsZSwgdGhlIHBhZ2VzIHVzZWQgYnkgR3VDIHRvIHNhdmUgc3RhdGUgZHVyaW5n Cj4+IHN1c3BlbmQgYXJlIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIHRoZSBBRFMuCj4+Cj4+IHYzOiBH cm91cCBpbml0aWFsaXphdGlvbiBvZiBHdUMgb2JqZWN0cwo+Pgo+PiB2MjogRGVjb3VwbGluZyBB RFMgdG9nZXRoZXIgd2l0aCBsb2dzCj4+Cj4+IHYzOiBSZS1mYWN0b3JpbmcgY29kZSBhcyBwZXIg cmV2aWV3IChNaWNoYWwpCj4+Cj4+IHY0OiBSZWJhc2UKPj4KPj4gdjU6IFNlcGFyYXRpbmcgZ3Jv dXAgb2JqZWN0IGluaXRpYWxpemF0aW9uIGludG8gbmV4dCBwYXRjaAo+PiDCoMKgwqAgQ2xhcmlm eWluZyBjb21taXQgbWVzc2FnZQo+Pgo+PiB2NjogUmV2ZXJ0aW5nIHRvIGdvdG8gZXJyIGZvcm1h dCAoTWljaGFsKQo+PiDCoMKgwqAgTW92ZWQgZ3VjX2FkcyBmdW5jdGlvbnMgdG8gZGVkaWNhdGVk IGZpbGUKPj4gwqDCoMKgIFJlYmFzZQo+Pgo+PiB2NzogUmViYXNlCj4+Cj4+IHY4OiBBcHBseWlu ZyByZXZpZXcgY29tbWVudHMgKE1pY2hhbCkKPj4KPj4gU2lnbmVkLW9mZi1ieTogU3VqYXJpdGhh IFN1bmRhcmVzYW4gPHN1amFyaXRoYS5zdW5kYXJlc2FuQGludGVsLmNvbT4KPj4gQ2M6IEFudXNo YSBTcml2YXRzYSA8YW51c2hhLnNyaXZhdHNhQGludGVsLmNvbT4KPj4gQ2M6IE1pY2hhbCBXYWpk ZWN6a28gPG1pY2hhbC53YWpkZWN6a29AaW50ZWwuY29tPgo+PiBDYzogT3NjYXIgTWF0ZW8gPG9z Y2FyLm1hdGVvQGludGVsLmNvbT4KPj4gQ2M6IFNhZ2FyIEFydW4gS2FtYmxlIDxzYWdhci5hLmth bWJsZUBpbnRlbC5jb20+Cj4+IC0tLQo+PiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4+IMKgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jIHwgMTM5IAo+PiArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KPj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfYWRzLmPCoMKgwqDC oMKgwqAgfCAxNDkgCj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+IMKgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Fkcy5owqDCoMKgwqDCoMKgIHzCoCAzMyArKysrKysr Cj4+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuY8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfMKgIDM4ICsrKysrKystCj4+IMKgNSBmaWxlcyBjaGFuZ2VkLCAyMjAgaW5zZXJ0aW9ucygr KSwgMTQwIGRlbGV0aW9ucygtKQo+PiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9ndWNfYWRzLmMKPj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Fkcy5oCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ PiBpbmRleCA2YzNiMDQ4Li5kN2NlMDdlIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+PiBA QCAtNjIsNiArNjIsNyBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXAo+PiDCoGk5MTUt eSArPSBpbnRlbF91Yy5vIFwKPj4gwqDCoMKgwqDCoMKgIGludGVsX3VjX2Z3Lm8gXAo+PiDCoMKg wqDCoMKgwqAgaW50ZWxfZ3VjLm8gXAo+PiArwqDCoMKgwqDCoCBpbnRlbF9ndWNfYWRzLm8gXAo+ PiDCoMKgwqDCoMKgwqAgaW50ZWxfZ3VjX2N0Lm8gXAo+PiDCoMKgwqDCoMKgwqAgaW50ZWxfZ3Vj X2xvZy5vIFwKPj4gwqDCoMKgwqDCoMKgIGludGVsX2d1Y19mdy5vIFwKPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYyAKPj4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKPj4gaW5kZXggYTJlODExNC4uM2E1 NjQyOSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlz c2lvbi5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24u Ywo+PiBAQCAtNzIsMTMgKzcyLDYgQEAKPj4gwqAgKiBFTFNQIGNvbnRleHQgZGVzY3JpcHRvciBk d29yZCBpbnRvIFdvcmsgSXRlbS4KPj4gwqAgKiBTZWUgZ3VjX3dxX2l0ZW1fYXBwZW5kKCkKPj4g wqAgKgo+PiAtICogQURTOgo+PiAtICogVGhlIEFkZGl0aW9uYWwgRGF0YSBTdHJ1Y3QgKEFEUykg aGFzIHBvaW50ZXJzIGZvciBkaWZmZXJlbnQgCj4+IGJ1ZmZlcnMgdXNlZCBieQo+PiAtICogdGhl IEd1Qy4gT25lIHNpbmdsZSBnZW0gb2JqZWN0IGNvbnRhaW5zIHRoZSBBRFMgc3RydWN0IGl0c2Vs ZiAKPj4gKGd1Y19hZHMpLCB0aGUKPj4gLSAqIHNjaGVkdWxpbmcgcG9saWNpZXMgKGd1Y19wb2xp Y2llcyksIGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSAKPj4gY29sbGVjdGlvbiBvZgo+PiAtICog cmVnaXN0ZXIgc2V0cyAoZ3VjX21taW9fcmVnX3N0YXRlKSBhbmQgc29tZSBleHRyYSBwYWdlcyBm b3IgdGhlIAo+PiBHdUMgdG8gc2F2ZQo+PiAtICogaXRzIGludGVybmFsIHN0YXRlIGZvciBzbGVl cC4KPj4gLSAqCj4+IMKgICovCj4+IHN0YXRpYyBpbmxpbmUgYm9vbCBpc19oaWdoX3ByaW9yaXR5 KHN0cnVjdCBpOTE1X2d1Y19jbGllbnQqIGNsaWVudCkKPj4gQEAgLTg1NSwxMTUgKzg0OCw2IEBA IHN0YXRpYyB2b2lkIGd1Y19jbGllbnRfZnJlZShzdHJ1Y3QgCj4+IGk5MTVfZ3VjX2NsaWVudCAq Y2xpZW50KQo+PiDCoMKgwqDCoCBrZnJlZShjbGllbnQpOwo+PiDCoH0KPj4gLXN0YXRpYyB2b2lk IGd1Y19wb2xpY3lfaW5pdChzdHJ1Y3QgZ3VjX3BvbGljeSAqcG9saWN5KQo+PiAtewo+PiAtwqDC oMKgIHBvbGljeS0+ZXhlY3V0aW9uX3F1YW50dW0gPSBQT0xJQ1lfREVGQVVMVF9FWEVDVVRJT05f UVVBTlRVTV9VUzsKPj4gLcKgwqDCoCBwb2xpY3ktPnByZWVtcHRpb25fdGltZSA9IFBPTElDWV9E RUZBVUxUX1BSRUVNUFRJT05fVElNRV9VUzsKPj4gLcKgwqDCoCBwb2xpY3ktPmZhdWx0X3RpbWUg PSBQT0xJQ1lfREVGQVVMVF9GQVVMVF9USU1FX1VTOwo+PiAtwqDCoMKgIHBvbGljeS0+cG9saWN5 X2ZsYWdzID0gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgZ3VjX3BvbGljaWVzX2luaXQo c3RydWN0IGd1Y19wb2xpY2llcyAqcG9saWNpZXMpCj4+IC17Cj4+IC3CoMKgwqAgc3RydWN0IGd1 Y19wb2xpY3kgKnBvbGljeTsKPj4gLcKgwqDCoCB1MzIgcCwgaTsKPj4gLQo+PiAtwqDCoMKgIHBv bGljaWVzLT5kcGNfcHJvbW90ZV90aW1lID0gUE9MSUNZX0RFRkFVTFRfRFBDX1BST01PVEVfVElN RV9VUzsKPj4gLcKgwqDCoCBwb2xpY2llcy0+bWF4X251bV93b3JrX2l0ZW1zID0gUE9MSUNZX01B WF9OVU1fV0k7Cj4+IC0KPj4gLcKgwqDCoCBmb3IgKHAgPSAwOyBwIDwgR1VDX0NMSUVOVF9QUklP UklUWV9OVU07IHArKykgewo+PiAtwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gR1VDX1JFTkRFUl9F TkdJTkU7IGkgPCBHVUNfTUFYX0VOR0lORVNfTlVNOyBpKyspIHsKPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcG9saWN5ID0gJnBvbGljaWVzLT5wb2xpY3lbcF1baV07Cj4+IC0KPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZ3VjX3BvbGljeV9pbml0KHBvbGljeSk7Cj4+IC3CoMKgwqDCoMKg wqDCoCB9Cj4+IC3CoMKgwqAgfQo+PiAtCj4+IC3CoMKgwqAgcG9saWNpZXMtPmlzX3ZhbGlkID0g MTsKPj4gLX0KPj4gLQo+PiAtLyoKPj4gLSAqIFRoZSBmaXJzdCA4MCBkd29yZHMgb2YgdGhlIHJl Z2lzdGVyIHN0YXRlIGNvbnRleHQsIGNvbnRhaW5pbmcgdGhlCj4+IC0gKiBleGVjbGlzdHMgYW5k IHBwZ3R0IHJlZ2lzdGVycy4KPj4gLSAqLwo+PiAtI2RlZmluZSBMUl9IV19DT05URVhUX1NJWkXC oMKgwqAgKDgwICogc2l6ZW9mKHUzMikpCj4+IC0KPj4gLXN0YXRpYyBpbnQgZ3VjX2Fkc19jcmVh dGUoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+PiAtewo+PiAtwqDCoMKgIHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGd1Y190b19pOTE1KGd1Yyk7Cj4+IC3CoMKgwqAgc3RydWN0 IGk5MTVfdm1hICp2bWE7Cj4+IC3CoMKgwqAgc3RydWN0IHBhZ2UgKnBhZ2U7Cj4+IC3CoMKgwqAg LyogVGhlIGFkcyBvYmogaW5jbHVkZXMgdGhlIHN0cnVjdCBpdHNlbGYgYW5kIGJ1ZmZlcnMgcGFz c2VkIHRvIAo+PiBHdUMgKi8KPj4gLcKgwqDCoCBzdHJ1Y3Qgewo+PiAtwqDCoMKgwqDCoMKgwqAg c3RydWN0IGd1Y19hZHMgYWRzOwo+PiAtwqDCoMKgwqDCoMKgwqAgc3RydWN0IGd1Y19wb2xpY2ll cyBwb2xpY2llczsKPj4gLcKgwqDCoMKgwqDCoMKgIHN0cnVjdCBndWNfbW1pb19yZWdfc3RhdGUg cmVnX3N0YXRlOwo+PiAtwqDCoMKgwqDCoMKgwqAgdTggcmVnX3N0YXRlX2J1ZmZlcltHVUNfUzNf U0FWRV9TUEFDRV9QQUdFUyAqIFBBR0VfU0laRV07Cj4+IC3CoMKgwqAgfSBfX3BhY2tlZCAqYmxv YjsKPj4gLcKgwqDCoCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4+IC3CoMKgwqAg ZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4+IC3CoMKgwqAgY29uc3QgdTMyIHNraXBwZWRfb2Zm c2V0ID0gTFJDX0hFQURFUl9QQUdFUyAqIFBBR0VfU0laRTsKPj4gLcKgwqDCoCBjb25zdCB1MzIg c2tpcHBlZF9zaXplID0gTFJDX1BQSFdTUF9TWiAqIFBBR0VfU0laRSArIAo+PiBMUl9IV19DT05U RVhUX1NJWkU7Cj4+IC3CoMKgwqAgdTMyIGJhc2U7Cj4+IC0KPj4gLcKgwqDCoCBHRU1fQlVHX09O KGd1Yy0+YWRzX3ZtYSk7Cj4+IC0KPj4gLcKgwqDCoCB2bWEgPSBpbnRlbF9ndWNfYWxsb2NhdGVf dm1hKGd1YywgUEFHRV9BTElHTihzaXplb2YoKmJsb2IpKSk7Cj4+IC3CoMKgwqAgaWYgKElTX0VS Uih2bWEpKQo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIodm1hKTsKPj4gLQo+PiAt wqDCoMKgIGd1Yy0+YWRzX3ZtYSA9IHZtYTsKPj4gLQo+PiAtwqDCoMKgIHBhZ2UgPSBpOTE1X3Zt YV9maXJzdF9wYWdlKHZtYSk7Cj4+IC3CoMKgwqAgYmxvYiA9IGttYXAocGFnZSk7Cj4+IC0KPj4g LcKgwqDCoCAvKiBHdUMgc2NoZWR1bGluZyBwb2xpY2llcyAqLwo+PiAtwqDCoMKgIGd1Y19wb2xp Y2llc19pbml0KCZibG9iLT5wb2xpY2llcyk7Cj4+IC0KPj4gLcKgwqDCoCAvKiBNTUlPIHJlZyBz dGF0ZSAqLwo+PiAtwqDCoMKgIGZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkg ewo+PiAtIGJsb2ItPnJlZ19zdGF0ZS53aGl0ZV9saXN0W2VuZ2luZS0+Z3VjX2lkXS5tbWlvX3N0 YXJ0ID0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW5naW5lLT5tbWlvX2Jhc2UgKyBHVUNf TU1JT19XSElURV9MSVNUX1NUQVJUOwo+PiAtCj4+IC3CoMKgwqDCoMKgwqDCoCAvKiBOb3RoaW5n IHRvIGJlIHNhdmVkIG9yIHJlc3RvcmVkIGZvciBub3cuICovCj4+IC3CoMKgwqDCoMKgwqDCoCBi bG9iLT5yZWdfc3RhdGUud2hpdGVfbGlzdFtlbmdpbmUtPmd1Y19pZF0uY291bnQgPSAwOwo+PiAt wqDCoMKgIH0KPj4gLQo+PiAtwqDCoMKgIC8qCj4+IC3CoMKgwqDCoCAqIFRoZSBHdUMgcmVxdWly ZXMgYSAiR29sZGVuIENvbnRleHQiIHdoZW4gaXQgcmVpbml0aWFsaXNlcwo+PiAtwqDCoMKgwqAg KiBlbmdpbmVzIGFmdGVyIGEgcmVzZXQuIEhlcmUgd2UgdXNlIHRoZSBSZW5kZXIgcmluZyBkZWZh dWx0Cj4+IC3CoMKgwqDCoCAqIGNvbnRleHQsIHdoaWNoIG11c3QgYWxyZWFkeSBleGlzdCBhbmQg YmUgcGlubmVkIGluIHRoZSBHR1RULAo+PiAtwqDCoMKgwqAgKiBzbyBpdHMgYWRkcmVzcyB3b24n dCBjaGFuZ2UgYWZ0ZXIgd2UndmUgdG9sZCB0aGUgR3VDIHdoZXJlCj4+IC3CoMKgwqDCoCAqIHRv IGZpbmQgaXQuIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIHNraXAgb3VyIGhlYWRlciAoMSBwYWdlKSwK Pj4gLcKgwqDCoMKgICogYmVjYXVzZSBvdXIgR3VDIHNoYXJlZCBkYXRhIGlzIHRoZXJlLgo+PiAt wqDCoMKgwqAgKi8KPj4gLcKgwqDCoCBibG9iLT5hZHMuZ29sZGVuX2NvbnRleHRfbHJjYSA9Cj4+ IC0gZ3VjX2dndHRfb2Zmc2V0KGRldl9wcml2LT5rZXJuZWxfY29udGV4dC0+ZW5naW5lW1JDU10u c3RhdGUpICsgCj4+IHNraXBwZWRfb2Zmc2V0Owo+PiAtCj4+IC3CoMKgwqAgLyoKPj4gLcKgwqDC oMKgICogVGhlIEd1QyBleHBlY3RzIHVzIHRvIGV4Y2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhlIGNv bnRleHQgCj4+IGltYWdlIHRoYXQKPj4gLcKgwqDCoMKgICogaXQgc2tpcHMgZnJvbSB0aGUgc2l6 ZSBpdCBpcyB0byByZWFkLiBJdCBzdGFydHMgcmVhZGluZyBmcm9tIAo+PiBhZnRlcgo+PiAtwqDC oMKgwqAgKiB0aGUgZXhlY2xpc3QgY29udGV4dCAoc28gc2tpcHBpbmcgdGhlIGZpcnN0IHBhZ2Ug W1BQSFdTUF0gYW5kIDgwCj4+IC3CoMKgwqDCoCAqIGR3b3JkcykuIFdlaXJkIGd1YyBpcyB3ZWly ZC4KPj4gLcKgwqDCoMKgICovCj4+IC3CoMKgwqAgZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2 X3ByaXYsIGlkKQo+PiAtwqDCoMKgwqDCoMKgwqAgYmxvYi0+YWRzLmVuZ19zdGF0ZV9zaXplW2Vu Z2luZS0+Z3VjX2lkXSA9IAo+PiBlbmdpbmUtPmNvbnRleHRfc2l6ZSAtIHNraXBwZWRfc2l6ZTsK Pj4gLQo+PiAtwqDCoMKgIGJhc2UgPSBndWNfZ2d0dF9vZmZzZXQodm1hKTsKPj4gLcKgwqDCoCBi bG9iLT5hZHMuc2NoZWR1bGVyX3BvbGljaWVzID0gYmFzZSArIHB0cl9vZmZzZXQoYmxvYiwgcG9s aWNpZXMpOwo+PiAtwqDCoMKgIGJsb2ItPmFkcy5yZWdfc3RhdGVfYnVmZmVyID0gYmFzZSArIHB0 cl9vZmZzZXQoYmxvYiwgCj4+IHJlZ19zdGF0ZV9idWZmZXIpOwo+PiAtwqDCoMKgIGJsb2ItPmFk cy5yZWdfc3RhdGVfYWRkciA9IGJhc2UgKyBwdHJfb2Zmc2V0KGJsb2IsIHJlZ19zdGF0ZSk7Cj4+ IC0KPj4gLcKgwqDCoCBrdW5tYXAocGFnZSk7Cj4+IC0KPj4gLcKgwqDCoCByZXR1cm4gMDsKPj4g LX0KPj4gLQo+PiAtc3RhdGljIHZvaWQgZ3VjX2Fkc19kZXN0cm95KHN0cnVjdCBpbnRlbF9ndWMg Kmd1YykKPj4gLXsKPj4gLcKgwqDCoCBpOTE1X3ZtYV91bnBpbl9hbmRfcmVsZWFzZSgmZ3VjLT5h ZHNfdm1hKTsKPj4gLX0KPj4gLQo+PiDCoC8qCj4+IMKgICogU2V0IHVwIHRoZSBtZW1vcnkgcmVz b3VyY2VzIHRvIGJlIHNoYXJlZCB3aXRoIHRoZSBHdUMgKHZpYSB0aGUgR0dUVCkKPj4gwqAgKiBh dCBmaXJtd2FyZSBsb2FkaW5nIHRpbWUuCj4+IEBAIC05NzMsNyArODU3LDYgQEAgaW50IGk5MTVf Z3VjX3N1Ym1pc3Npb25faW5pdChzdHJ1Y3QgCj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+PiDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSAmZGV2X3ByaXYtPmd1YzsKPj4g wqDCoMKgwqAgc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4+IMKgwqDCoMKgIHZvaWQgKnZhZGRyOwo+ PiAtwqDCoMKgIGludCByZXQ7Cj4+IMKgwqDCoMKgaWYgKGd1Yy0+c3RhZ2VfZGVzY19wb29sKQo+ PiDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiBAQCAtOTg4LDMxICs4NzEsMTUgQEAgaW50 IGk5MTVfZ3VjX3N1Ym1pc3Npb25faW5pdChzdHJ1Y3QgCj4+IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+PiDCoMKgwqDCoHZhZGRyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoZ3VjLT5z dGFnZV9kZXNjX3Bvb2wtPm9iaiwgCj4+IEk5MTVfTUFQX1dCKTsKPj4gwqDCoMKgwqAgaWYgKElT X0VSUih2YWRkcikpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHJldCA9IFBUUl9FUlIodmFkZHIpOwo+ PiAtwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfdm1hOwo+PiArIGk5MTVfdm1hX3VucGluX2FuZF9y ZWxlYXNlKCZndWMtPnN0YWdlX2Rlc2NfcG9vbCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g UFRSX0VSUih2YWRkcik7Cj4+IMKgwqDCoMKgIH0KPj4gwqDCoMKgwqBndWMtPnN0YWdlX2Rlc2Nf cG9vbF92YWRkciA9IHZhZGRyOwo+PiAtwqDCoMKgIHJldCA9IGludGVsX2d1Y19sb2dfY3JlYXRl KGd1Yyk7Cj4+IC3CoMKgwqAgaWYgKHJldCA8IDApCj4+IC3CoMKgwqDCoMKgwqDCoCBnb3RvIGVy cl92YWRkcjsKPj4gLQo+PiAtwqDCoMKgIHJldCA9IGd1Y19hZHNfY3JlYXRlKGd1Yyk7Cj4+IC3C oMKgwqAgaWYgKHJldCA8IDApCj4+IC3CoMKgwqDCoMKgwqDCoCBnb3RvIGVycl9sb2c7Cj4+IC0K Pj4gwqDCoMKgwqAgaWRhX2luaXQoJmd1Yy0+c3RhZ2VfaWRzKTsKPj4gwqDCoMKgwqByZXR1cm4g MDsKPj4gLQo+PiAtZXJyX2xvZzoKPj4gLcKgwqDCoCBpbnRlbF9ndWNfbG9nX2Rlc3Ryb3koZ3Vj KTsKPj4gLWVycl92YWRkcjoKPj4gLcKgwqDCoCBpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKGd1 Yy0+c3RhZ2VfZGVzY19wb29sLT5vYmopOwo+PiAtZXJyX3ZtYToKPj4gLcKgwqDCoCBpOTE1X3Zt YV91bnBpbl9hbmRfcmVsZWFzZSgmZ3VjLT5zdGFnZV9kZXNjX3Bvb2wpOwo+PiAtwqDCoMKgIHJl dHVybiByZXQ7Cj4+IMKgfQo+PiB2b2lkIGk5MTVfZ3VjX3N1Ym1pc3Npb25fZmluaShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+IEBAIC0xMDIwLDggKzg4Nyw2IEBAIHZvaWQg aTkxNV9ndWNfc3VibWlzc2lvbl9maW5pKHN0cnVjdCAKPj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4+IMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3Vj Owo+PiDCoMKgwqDCoGlkYV9kZXN0cm95KCZndWMtPnN0YWdlX2lkcyk7Cj4+IC3CoMKgwqAgZ3Vj X2Fkc19kZXN0cm95KGd1Yyk7Cj4+IC3CoMKgwqAgaW50ZWxfZ3VjX2xvZ19kZXN0cm95KGd1Yyk7 Cj4+IMKgwqDCoMKgIGk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoZ3VjLT5zdGFnZV9kZXNjX3Bv b2wtPm9iaik7Cj4+IMKgwqDCoMKgIGk5MTVfdm1hX3VucGluX2FuZF9yZWxlYXNlKCZndWMtPnN0 YWdlX2Rlc2NfcG9vbCk7Cj4+IMKgfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZ3VjX2Fkcy5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19h ZHMuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi5iZmY5M2ZkCj4+ IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Fk cy5jCj4+IEBAIC0wLDAgKzEsMTQ5IEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IMKpIDIwMTQt MjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgo+PiArICoKPj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIAo+PiBvYnRhaW5pbmcgYQo+ PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAKPj4gIlNvZnR3YXJlIiksCj4+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCAKPj4gbGltaXRhdGlvbgo+ PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIAo+PiBzdWJsaWNlbnNlLAo+PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gCj4+IHRoZQo+PiArICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKPj4gKyAqCj4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIAo+PiB0aGUgbmV4dAo+PiArICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIAo+ PiBwb3J0aW9ucyBvZiB0aGUKPj4gKyAqIFNvZnR3YXJlLgo+PiArICoKPj4gKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCAK Pj4gRVhQUkVTUyBPUgo+PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiAKPj4gTUVSQ0hBTlRBQklMSVRZLAo+PiArICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoCBJTiBOTyAKPj4g RVZFTlQgU0hBTEwKPj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIAo+PiBPUiBPVEhFUgo+PiArICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIAo+ PiBBUklTSU5HCj4+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIAo+PiBPVEhFUiBERUFMSU5HUwo+PiArICogSU4gVEhFIFNP RlRXQVJFLgo+PiArICoKPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSAiaW50ZWxfZ3VjX2Fkcy5o Igo+PiArI2luY2x1ZGUgImludGVsX3VjLmgiCj4+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPj4g KyNpbmNsdWRlICJpOTE1X2d1Y19zdWJtaXNzaW9uLmgiCj4+ICsKPj4gKy8qKgo+PiArICogRE9D OiBHdUMgQWRkaXRpb25hbCBEYXRhIFN0cnVjdAo+PiArICoKPj4gKyAqIEFEUzoKPj4gKyAqIFRo ZSBBZGRpdGlvbmFsIERhdGEgU3RydWN0IChBRFMpIGhhcyBwb2ludGVycyBmb3IgZGlmZmVyZW50 IAo+PiBidWZmZXJzIHVzZWQgYnkKPj4gKyAqIHRoZSBHdUMuIE9uZSBzaW5nbGUgZ2VtIG9iamVj dCBjb250YWlucyB0aGUgQURTIHN0cnVjdCBpdHNlbGYgCj4+IChndWNfYWRzKSwgdGhlCj4+ICsg KiBzY2hlZHVsaW5nIHBvbGljaWVzIChndWNfcG9saWNpZXMpLCBhIHN0cnVjdHVyZSBkZXNjcmli aW5nIGEgCj4+IGNvbGxlY3Rpb24gb2YKPj4gKyAqIHJlZ2lzdGVyIHNldHMgKGd1Y19tbWlvX3Jl Z19zdGF0ZSkgYW5kIHNvbWUgZXh0cmEgcGFnZXMgZm9yIHRoZSAKPj4gR3VDIHRvIHNhdmUKPj4g KyAqIGl0cyBpbnRlcm5hbCBzdGF0ZSBmb3Igc2xlZXAuCj4+ICsgKgo+PiArICovCj4+ICsKPj4g K3N0YXRpYyB2b2lkIGd1Y19wb2xpY3lfaW5pdChzdHJ1Y3QgZ3VjX3BvbGljeSAqcG9saWN5KQo+ PiArewo+PiArwqDCoMKgIHBvbGljeS0+ZXhlY3V0aW9uX3F1YW50dW0gPSBQT0xJQ1lfREVGQVVM VF9FWEVDVVRJT05fUVVBTlRVTV9VUzsKPj4gK8KgwqDCoCBwb2xpY3ktPnByZWVtcHRpb25fdGlt ZSA9IFBPTElDWV9ERUZBVUxUX1BSRUVNUFRJT05fVElNRV9VUzsKPj4gK8KgwqDCoCBwb2xpY3kt PmZhdWx0X3RpbWUgPSBQT0xJQ1lfREVGQVVMVF9GQVVMVF9USU1FX1VTOwo+PiArwqDCoMKgIHBv bGljeS0+cG9saWN5X2ZsYWdzID0gMDsKPj4gK30KPj4gKwo+PiArdm9pZCBndWNfcG9saWNpZXNf aW5pdChzdHJ1Y3QgZ3VjX3BvbGljaWVzICpwb2xpY2llcykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1 Y3QgZ3VjX3BvbGljeSAqcG9saWN5Owo+PiArwqDCoMKgIHUzMiBwLCBpOwo+PiArCj4+ICvCoMKg wqAgcG9saWNpZXMtPmRwY19wcm9tb3RlX3RpbWUgPSBQT0xJQ1lfREVGQVVMVF9EUENfUFJPTU9U RV9USU1FX1VTOwo+PiArwqDCoMKgIHBvbGljaWVzLT5tYXhfbnVtX3dvcmtfaXRlbXMgPSBQT0xJ Q1lfTUFYX05VTV9XSTsKPj4gKwo+PiArwqDCoMKgIGZvciAocCA9IDA7IHAgPCBHVUNfQ0xJRU5U X1BSSU9SSVRZX05VTTsgcCsrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSBHVUNfUkVO REVSX0VOR0lORTsgaSA8IEdVQ19NQVhfRU5HSU5FU19OVU07IGkrKykgewo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBwb2xpY3kgPSAmcG9saWNpZXMtPnBvbGljeVtwXVtpXTsKPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBndWNfcG9saWN5X2luaXQocG9saWN5KTsKPj4gK8KgwqDC oMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBwb2xpY2llcy0+aXNfdmFs aWQgPSAxOwo+PiArfQo+PiArCj4+ICsvKgo+PiArICogVGhlIGZpcnN0IDgwIGR3b3JkcyBvZiB0 aGUgcmVnaXN0ZXIgc3RhdGUgY29udGV4dCwgY29udGFpbmluZyB0aGUKPj4gKyAqIGV4ZWNsaXN0 cyBhbmQgcHBndHQgcmVnaXN0ZXJzLgo+PiArICovCj4+ICsjZGVmaW5lIExSX0hXX0NPTlRFWFRf U0laRcKgwqDCoCAoODAgKiBzaXplb2YodTMyKSkKPj4gKwo+PiAraW50IGludGVsX2d1Y19hZHNf Y3JlYXRlKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOwo+PiArwqDCoMKgIHN0 cnVjdCBpOTE1X3ZtYSAqdm1hOwo+PiArwqDCoMKgIHN0cnVjdCBwYWdlICpwYWdlOwo+PiArwqDC oMKgIC8qIFRoZSBhZHMgb2JqIGluY2x1ZGVzIHRoZSBzdHJ1Y3QgaXRzZWxmIGFuZCBidWZmZXJz IHBhc3NlZCB0byAKPj4gR3VDICovCj4+ICvCoMKgwqAgc3RydWN0IHsKPj4gK8KgwqDCoMKgwqDC oMKgIHN0cnVjdCBndWNfYWRzIGFkczsKPj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBndWNfcG9s aWNpZXMgcG9saWNpZXM7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZ3VjX21taW9fcmVnX3N0 YXRlIHJlZ19zdGF0ZTsKPj4gK8KgwqDCoMKgwqDCoMKgIHU4IHJlZ19zdGF0ZV9idWZmZXJbR1VD X1MzX1NBVkVfU1BBQ0VfUEFHRVMgKiBQQUdFX1NJWkVdOwo+PiArwqDCoMKgIH0gX19wYWNrZWQg KmJsb2I7Cj4+ICvCoMKgwqAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+PiArwqDC oMKgIGVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+PiArwqDCoMKgIGNvbnN0IHUzMiBza2lwcGVk X29mZnNldCA9IExSQ19IRUFERVJfUEFHRVMgKiBQQUdFX1NJWkU7Cj4+ICvCoMKgwqAgY29uc3Qg dTMyIHNraXBwZWRfc2l6ZSA9IExSQ19QUEhXU1BfU1ogKiBQQUdFX1NJWkUgKyAKPj4gTFJfSFdf Q09OVEVYVF9TSVpFOwo+PiArwqDCoMKgIHUzMiBiYXNlOwo+PiArCj4+ICvCoMKgwqAgR0VNX0JV R19PTihndWMtPmFkc192bWEpOwo+PiArCj4+ICvCoMKgwqAgdm1hID0gaW50ZWxfZ3VjX2FsbG9j YXRlX3ZtYShndWMsIFBBR0VfQUxJR04oc2l6ZW9mKCpibG9iKSkpOwo+PiArwqDCoMKgIGlmIChJ U19FUlIodm1hKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKHZtYSk7Cj4+ICsK Pj4gK8KgwqDCoCBndWMtPmFkc192bWEgPSB2bWE7Cj4+ICsKPj4gK8KgwqDCoCBwYWdlID0gaTkx NV92bWFfZmlyc3RfcGFnZSh2bWEpOwo+PiArwqDCoMKgIGJsb2IgPSBrbWFwKHBhZ2UpOwo+PiAr Cj4+ICvCoMKgwqAgLyogR3VDIHNjaGVkdWxpbmcgcG9saWNpZXMgKi8KPj4gK8KgwqDCoCBndWNf cG9saWNpZXNfaW5pdCgmYmxvYi0+cG9saWNpZXMpOwo+PiArCj4+ICvCoMKgwqAgLyogTU1JTyBy ZWcgc3RhdGUgKi8KPj4gK8KgwqDCoCBmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdiwg aWQpIHsKPj4gKyBibG9iLT5yZWdfc3RhdGUud2hpdGVfbGlzdFtlbmdpbmUtPmd1Y19pZF0ubW1p b19zdGFydCA9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVuZ2luZS0+bW1pb19iYXNlICsg R1VDX01NSU9fV0hJVEVfTElTVF9TVEFSVDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgLyogTm90 aGluZyB0byBiZSBzYXZlZCBvciByZXN0b3JlZCBmb3Igbm93LiAqLwo+PiArwqDCoMKgwqDCoMKg wqAgYmxvYi0+cmVnX3N0YXRlLndoaXRlX2xpc3RbZW5naW5lLT5ndWNfaWRdLmNvdW50ID0gMDsK Pj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBUaGUgR3VDIHJl cXVpcmVzIGEgIkdvbGRlbiBDb250ZXh0IiB3aGVuIGl0IHJlaW5pdGlhbGlzZXMKPj4gK8KgwqDC oMKgICogZW5naW5lcyBhZnRlciBhIHJlc2V0LiBIZXJlIHdlIHVzZSB0aGUgUmVuZGVyIHJpbmcg ZGVmYXVsdAo+PiArwqDCoMKgwqAgKiBjb250ZXh0LCB3aGljaCBtdXN0IGFscmVhZHkgZXhpc3Qg YW5kIGJlIHBpbm5lZCBpbiB0aGUgR0dUVCwKPj4gK8KgwqDCoMKgICogc28gaXRzIGFkZHJlc3Mg d29uJ3QgY2hhbmdlIGFmdGVyIHdlJ3ZlIHRvbGQgdGhlIEd1QyB3aGVyZQo+PiArwqDCoMKgwqAg KiB0byBmaW5kIGl0LiBOb3RlIHRoYXQgd2UgaGF2ZSB0byBza2lwIG91ciBoZWFkZXIgKDEgcGFn ZSksCj4+ICvCoMKgwqDCoCAqIGJlY2F1c2Ugb3VyIEd1QyBzaGFyZWQgZGF0YSBpcyB0aGVyZS4K Pj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgYmxvYi0+YWRzLmdvbGRlbl9jb250ZXh0X2xyY2Eg PQo+PiArIGd1Y19nZ3R0X29mZnNldChkZXZfcHJpdi0+a2VybmVsX2NvbnRleHQtPmVuZ2luZVtS Q1NdLnN0YXRlKSArIAo+PiBza2lwcGVkX29mZnNldDsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvC oMKgwqDCoCAqIFRoZSBHdUMgZXhwZWN0cyB1cyB0byBleGNsdWRlIHRoZSBwb3J0aW9uIG9mIHRo ZSBjb250ZXh0IAo+PiBpbWFnZSB0aGF0Cj4+ICvCoMKgwqDCoCAqIGl0IHNraXBzIGZyb20gdGhl IHNpemUgaXQgaXMgdG8gcmVhZC4gSXQgc3RhcnRzIHJlYWRpbmcgZnJvbSAKPj4gYWZ0ZXIKPj4g K8KgwqDCoMKgICogdGhlIGV4ZWNsaXN0IGNvbnRleHQgKHNvIHNraXBwaW5nIHRoZSBmaXJzdCBw YWdlIFtQUEhXU1BdIGFuZCA4MAo+PiArwqDCoMKgwqAgKiBkd29yZHMpLiBXZWlyZCBndWMgaXMg d2VpcmQuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGZvcl9lYWNoX2VuZ2luZShlbmdpbmUs IGRldl9wcml2LCBpZCkKPj4gK8KgwqDCoMKgwqDCoMKgIGJsb2ItPmFkcy5lbmdfc3RhdGVfc2l6 ZVtlbmdpbmUtPmd1Y19pZF0gPSAKPj4gZW5naW5lLT5jb250ZXh0X3NpemUgLSBza2lwcGVkX3Np emU7Cj4+ICsKPj4gK8KgwqDCoCBiYXNlID0gZ3VjX2dndHRfb2Zmc2V0KHZtYSk7Cj4+ICvCoMKg wqAgYmxvYi0+YWRzLnNjaGVkdWxlcl9wb2xpY2llcyA9IGJhc2UgKyBwdHJfb2Zmc2V0KGJsb2Is IHBvbGljaWVzKTsKPj4gK8KgwqDCoCBibG9iLT5hZHMucmVnX3N0YXRlX2J1ZmZlciA9IGJhc2Ug KyBwdHJfb2Zmc2V0KGJsb2IsIAo+PiByZWdfc3RhdGVfYnVmZmVyKTsKPj4gK8KgwqDCoCBibG9i LT5hZHMucmVnX3N0YXRlX2FkZHIgPSBiYXNlICsgcHRyX29mZnNldChibG9iLCByZWdfc3RhdGUp Owo+PiArCj4+ICvCoMKgwqAga3VubWFwKHBhZ2UpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7 Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgaW50ZWxfZ3VjX2Fkc19kZXN0cm95KHN0cnVjdCBpbnRlbF9n dWMgKmd1YykKPj4gK3sKPj4gK8KgwqDCoCBpOTE1X3ZtYV91bnBpbl9hbmRfcmVsZWFzZSgmZ3Vj LT5hZHNfdm1hKTsKPj4gK30KPj4gXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfYWRzLmggCj4+IGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Fkcy5oCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+ IGluZGV4IDAwMDAwMDAuLjNlZjlhNWUKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfYWRzLmgKPj4gQEAgLTAsMCArMSwzMyBAQAo+PiArLyoK Pj4gKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCj4+ICsgKgo+PiArICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gCj4+IG9idGFpbmluZyBhCj4+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIAo+PiAiU29mdHdhcmUiKSwKPj4gKyAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IAo+PiBsaW1pdGF0aW9uCj4+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgCj4+IHN1YmxpY2Vuc2UsCj4+ICsgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSAKPj4gdGhlCj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+PiArICoKPj4gKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgCj4+ IHRoZSBuZXh0Cj4+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgCj4+IHBvcnRpb25zIG9mIHRoZQo+PiArICogU29mdHdhcmUuCj4+ ICsgKgo+PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIAo+PiBFWFBSRVNTIE9SCj4+ICsgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIAo+PiBNRVJDSEFOVEFCSUxJ VFksCj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULsKgIElOIE5PIAo+PiBFVkVOVCBTSEFMTAo+PiArICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgCj4+IE9SIE9U SEVSCj4+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgCj4+IEFSSVNJTkcKPj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgCj4+IE9USEVSIERFQUxJ TkdTCj4+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4+ICsgKgo+PiArICovCj4+ICsKPj4gKyNpZm5k ZWYgX0lOVEVMX0dVQ19BRFNfSF8KPj4gKyNkZWZpbmUgX0lOVEVMX0dVQ19BRFNfSF8KPj4gKwo+ PiArc3RydWN0IGludGVsX2d1YzsKPj4gKwo+PiAraW50IGludGVsX2d1Y19hZHNfY3JlYXRlKHN0 cnVjdCBpbnRlbF9ndWMgKmd1Yyk7Cj4+ICt2b2lkIGludGVsX2d1Y19hZHNfZGVzdHJveShzdHJ1 Y3QgaW50ZWxfZ3VjICpndWMpOwo+PiArCj4+ICsjZW5kaWYKPj4gXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5j IAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmMKPj4gaW5kZXggZGM5NzhhMC4u MTJkYjViZCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuYwo+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5jCj4+IEBAIC0yNCw2ICsyNCw3 IEBACj4+ICNpbmNsdWRlICJpbnRlbF91Yy5oIgo+PiDCoCNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ PiArI2luY2x1ZGUgImludGVsX2d1Y19hZHMuaCIKPj4gwqAjaW5jbHVkZSAiaTkxNV9ndWNfc3Vi bWlzc2lvbi5oIgo+PiAvKiBSZXNldCBHdUMgcHJvdmlkaW5nIHVzIHdpdGggZnJlc2ggc3RhdGUg Zm9yIGJvdGggR3VDIGFuZCBIdUMuCj4+IEBAIC0xNTQsNiArMTU1LDM0IEBAIHN0YXRpYyB2b2lk IGd1Y19kaXNhYmxlX2NvbW11bmljYXRpb24oc3RydWN0IAo+PiBpbnRlbF9ndWMgKmd1YykKPj4g wqDCoMKgwqAgZ3VjLT5zZW5kID0gaW50ZWxfZ3VjX3NlbmRfbm9wOwo+PiDCoH0KPj4gK3N0YXRp YyBpbnQgZ3VjX3NoYXJlZF9vYmplY3RzX2luaXQoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+PiAr ewo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZ3VjLT5hZHNfdm1hKQo+ PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4KPiBIbW0sIHRoaXMgJ2FkcycgaW50ZXJuYWwg bWVtYmVyLCBzbyBtYXliZSB0aGlzIGNoZWNrIHNob3VsZAo+IGJlIG1vdmVkIHRvIGludGVsX2d1 Y19hZHNfY3JlYXRlKCkgPwo+Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBpbnRlbF9ndWNfbG9nX2Ny ZWF0ZShndWMpOwo+PiArwqDCoMKgIGlmIChyZXQgPCAwKQo+PiArwqDCoMKgwqDCoMKgwqAgZ290 byBlcnJfbG9nczsKPgo+IEhtbSwgaWYgaW50ZWxfZ3VjX2xvZ19jcmVhdGUoKSBmYWlsZWQgdGhl biB0aGVyZSBzaG91bGQgYmUKPiBubyByZWFzb24gdG8gY2FsbCBpbnRlbF9ndWNfbG9nX2Rlc3Ry b3koKQo+Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBpbnRlbF9ndWNfYWRzX2NyZWF0ZShndWMpOwo+ PiArwqDCoMKgIGlmIChyZXQgPCAwKQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfYWRzOwo+ PiArCj4+ICtlcnJfYWRzOgo+PiArwqDCoMKgIGludGVsX2d1Y19hZHNfZGVzdHJveShndWMpOwo+ PiArZXJyX2xvZ3M6Cj4+ICvCoMKgwqAgaW50ZWxfZ3VjX2xvZ19kZXN0cm95KGd1Yyk7Cj4+ICvC oMKgwqAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZ3VjX3NoYXJlZF9v YmplY3RzX2Zpbmkoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+PiArewo+PiArwqDCoMKgIGludGVs X2d1Y19hZHNfZGVzdHJveShndWMpOwo+PiArwqDCoMKgIGludGVsX2d1Y19sb2dfZGVzdHJveShn dWMpOwo+PiArfQo+PiArCj4+IMKgaW50IGludGVsX3VjX2luaXRfaHcoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+PiDCoHsKPj4gwqDCoMKgwqAgc3RydWN0IGludGVsX2d1YyAq Z3VjID0gJmRldl9wcml2LT5ndWM7Cj4+IEBAIC0xNjgsNiArMTk3LDggQEAgaW50IGludGVsX3Vj X2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgCj4+ICpkZXZfcHJpdikKPj4gwqDCoMKg wqAgLyogV2UgbmVlZCB0byBub3RpZnkgdGhlIGd1YyB3aGVuZXZlciB3ZSBjaGFuZ2UgdGhlIEdH VFQgKi8KPj4gwqDCoMKgwqAgaTkxNV9nZ3R0X2VuYWJsZV9ndWMoZGV2X3ByaXYpOwo+PiArwqDC oMKgIHJldCA9IGd1Y19zaGFyZWRfb2JqZWN0c19pbml0KGd1Yyk7Cj4KPiBJZiB0aGlzIGZhaWxz LCBkb2VzIGl0IG1ha2Ugc2Vuc2UgdG8gY29udGludWUgPwpJZiBsb2cgY3JlYXRpb24gZmFpbHMg SSBkb24ndCBzZWUgYSByZWFzb24gdG8gbm90IGluaXQgR3VDIGFuZCBhbHNvIHdlIApjYW4gcGxh biB0byBzcGxpdCB0aGUgbG9nIGNyZWF0aW9uCmludG8gbG9nIHZtYSBhbmQgbG9nIHJ1bnRpbWUg aGFuZGxpbmcgc28gSSB0aGluayBpdCB3b3VsZCBiZSBnb29kIGlmIHdlIApoYW5kbGUgbG9nIGFu ZCBhZHMgc2VwYXJhdGVseSBhbmQgbm90CnRvZ2V0aGVyIGFzIHNoYXJlZF9vYmplY3RzLgpBbm90 aGVyIGltcHJvdmVtZW50IGNhbiBiZSB0byBtb3ZlIHRoaXMgaW5pdCBvdXQgb2YgaW50ZWxfdWNf aW5pdF9odyAKaW50byBpOTE1X2dlbV9pbml0IChhbmQgcmVtb3ZlIHRoZSBzdGFnZV9kZXNjX3Bv b2wgY2hlY2sKR0VNX0JVR19PTiBpbiBhZHMvbG9nIGNyZWF0ZT8pClRoYXQgd2F5IGl0IGlzIGFs c28gY2xlYXIgdGhhdCB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgb25seSBvbmNlLgo+ Cj4+ICsKPj4gwqDCoMKgwqAgaWYgKGk5MTVfbW9kcGFyYW1zLmVuYWJsZV9ndWNfc3VibWlzc2lv bikgewo+PiDCoMKgwqDCoMKgwqDCoMKgIC8qCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAqIFRoaXMg aXMgc3R1ZmYgd2UgbmVlZCB0byBoYXZlIGF2YWlsYWJsZSBhdCBmdyBsb2FkIHRpbWUKPj4gQEAg LTE3NSw3ICsyMDYsNyBAQCBpbnQgaW50ZWxfdWNfaW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAKPj4gKmRldl9wcml2KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4gwqDCoMKgwqDC oMKgwqDCoCByZXQgPSBpOTE1X2d1Y19zdWJtaXNzaW9uX2luaXQoZGV2X3ByaXYpOwo+PiDCoMKg wqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJy X2d1YzsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfc2hhcmVkOwo+PiDCoMKg wqDCoCB9Cj4+IMKgwqDCoMKgLyogaW5pdCBXT1BDTSAqLwo+PiBAQCAtMjUyLDggKzI4Myw4IEBA IGludCBpbnRlbF91Y19pbml0X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIAo+PiAqZGV2X3By aXYpCj4+IMKgZXJyX3N1Ym1pc3Npb246Cj4+IMKgwqDCoMKgIGlmIChpOTE1X21vZHBhcmFtcy5l bmFibGVfZ3VjX3N1Ym1pc3Npb24pCj4+IMKgwqDCoMKgwqDCoMKgwqAgaTkxNV9ndWNfc3VibWlz c2lvbl9maW5pKGRldl9wcml2KTsKPj4gLWVycl9ndWM6Cj4+IC3CoMKgwqAgaTkxNV9nZ3R0X2Rp c2FibGVfZ3VjKGRldl9wcml2KTsKPj4gK2Vycl9zaGFyZWQ6Cj4+ICvCoMKgwqAgZ3VjX3NoYXJl ZF9vYmplY3RzX2ZpbmkoZ3VjKTsKPj4gwqDCoMKgwqBpZiAoaTkxNV9tb2RwYXJhbXMuZW5hYmxl X2d1Y19zdWJtaXNzaW9uID4gMSkgewo+PiDCoMKgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiR3VD IGluaXQgZmFpbGVkLiBGaXJtd2FyZSBsb2FkaW5nIGRpc2FibGVkLlxuIik7Cj4+IEBAIC0yODUs NSArMzE2LDYgQEAgdm9pZCBpbnRlbF91Y19maW5pX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl IAo+PiAqZGV2X3ByaXYpCj4+IMKgwqDCoMKgwqDCoMKgwqAgaTkxNV9ndWNfc3VibWlzc2lvbl9m aW5pKGRldl9wcml2KTsKPj4gwqDCoMKgwqAgfQo+PiArwqDCoMKgIGd1Y19zaGFyZWRfb2JqZWN0 c19maW5pKCZkZXZfcHJpdi0+Z3VjKTsKPj4gwqDCoMKgwqAgaTkxNV9nZ3R0X2Rpc2FibGVfZ3Vj KGRldl9wcml2KTsKPj4gwqB9CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngK