From mboxrd@z Thu Jan 1 00:00:00 1970 From: Changqing Tang Subject: Re: [PATCH v5 2/2] drm/i915: add in-kernel blitter client Date: Tue, 28 May 2019 13:45:15 -0700 Message-ID: References: <20190528195724.2786-1-matthew.auld@intel.com> <20190528195724.2786-2-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id E17B96E064 for ; Tue, 28 May 2019 20:43:57 +0000 (UTC) In-Reply-To: <20190528195724.2786-2-matthew.auld@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matthew Auld , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCAyMDE5LTA1LTI4IGF0IDIwOjU3ICswMTAwLCBNYXR0aGV3IEF1bGQgd3JvdGU6Cj4g VGhlIHBsYW4gaXMgdG8gdXNlIHRoZSBibGl0dGVyIGVuZ2luZSBmb3IgYXN5bmMgb2JqZWN0IGNs ZWFyaW5nIHdoZW4KPiB1c2luZyBsb2NhbCBtZW1vcnksIGJ1dCBiZWZvcmUgd2UgY2FuIG1vdmUg dGhlIHdvcmtlciB0byBnZXRfcGFnZXMoKQo+IHdlCj4gaGF2ZSB0byBmaXJzdCB0YW1lIHNvbWUg bW9yZSBvZiBvdXIgc3RydWN0X211dGV4IHVzYWdlLiBXaXRoIHRoaXMgaW4KPiBtaW5kIHdlIHNo b3VsZCBiZSBhYmxlIHRvIHVwc3RyZWFtIHRoZSBvYmplY3QgY2xlYXJpbmcgYXMgc29tZQo+IHNl bGZ0ZXN0cywgd2hpY2ggc2hvdWxkIHNlcnZlIGFzIGEgZ3VpbmVhIHBpZyBmb3IgdGhlIG9uZ29p bmcgbG9ja2luZwo+IHJld29yayBhbmQgdXBjb21pbmcgYXN5bmMgZ2V0X3BhZ2VzKCkgZnJhbWV3 b3JrLgoKTWF0dCwKICBJIGxvb2tlZCB0aGlzIHBhdGNoLCBhbmQgYW0gdGhpbmtpbmcgaWYgd2Ug Y2FuIG1ha2Ugc2NoZWR1bGUvd29ya2VyCmludGVyZmFjZSB0byBiZSBtb3JlIGdlbmVyaWMgc28g dGhhdCB3ZSBjYW4gZG8gdmFyaW91cyBhc3luYyB0YXNrcywKc3VjaCBhcyBjbGVhcmluZyBvYmpl Y3QgcGFnZXMsIHN3YXBwaW5nIG9iamVjdCBwYWdlcywgbWlncmF0aW5nIG9iamVjdApwYWdlcywg ZXRjLiBPciBldmVuIGdldF9wYWdlcygpIGl0c2VsZiBjYW4gYmUgcnVubmluZyBhc3luY2hyb25p emVseS4KICBUaG91Z2h0cz8KCi0tQ1EKCj4gCj4gU2lnbmVkLW9mZi1ieTogTWF0dGhldyBBdWxk IDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgo+IENjOiBDUSBUYW5nIDxjcS50YW5nQGludGVsLmNv bT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAg IHwgICAyICsKPiAgLi4uL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY2xpZW50X2JsdC5jICAg IHwgMzA2Cj4gKysrKysrKysrKysrKysrKysrCj4gIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX2NsaWVudF9ibHQuaCAgICB8ICAyMSArKwo+ICAuLi4vZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9vYmplY3RfYmx0LmMgICAgfCAxMDkgKysrKysrKwo+ICAuLi4vZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9vYmplY3RfYmx0LmggICAgfCAgMjQgKysKPiAgLi4uL2k5MTUvZ2VtL3NlbGZ0 ZXN0cy9pOTE1X2dlbV9jbGllbnRfYmx0LmMgIHwgMTI3ICsrKysrKysrCj4gIC4uLi9pOTE1L2dl bS9zZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0X2JsdC5jICB8IDExMSArKysrKysrCj4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dwdV9jb21tYW5kcy5oICB8ICAgMSArCj4gIC4uLi9k cm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oICB8ICAgMiArCj4gIDkgZmls ZXMgY2hhbmdlZCwgNzAzIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jbGllbnRfYmx0LmMKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jbGllbnRfYmx0LmgKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmpl Y3RfYmx0LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9vYmplY3RfYmx0LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0Cj4gZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9jbGllbnRfYmx0LmMKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0Cj4gZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9v YmplY3RfYmx0LmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggODM1ODhlOTg0MGY4 Li5hNzg1MGJiZmZiZTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IEBAIC05MCw2ICs5MCw3 IEBAIG9iai15ICs9IGdlbS8KPiAgZ2VtLXkgKz0gXAo+ICAJZ2VtL2k5MTVfZ2VtX2J1c3kubyBc Cj4gIAlnZW0vaTkxNV9nZW1fY2xmbHVzaC5vIFwKPiArCWdlbS9pOTE1X2dlbV9jbGllbnRfYmx0 Lm8gXAo+ICAJZ2VtL2k5MTVfZ2VtX2NvbnRleHQubyBcCj4gIAlnZW0vaTkxNV9nZW1fZG1hYnVm Lm8gXAo+ICAJZ2VtL2k5MTVfZ2VtX2RvbWFpbi5vIFwKPiBAQCAtOTcsNiArOTgsNyBAQCBnZW0t eSArPSBcCj4gIAlnZW0vaTkxNV9nZW1fZmVuY2UubyBcCj4gIAlnZW0vaTkxNV9nZW1faW50ZXJu YWwubyBcCj4gIAlnZW0vaTkxNV9nZW1fb2JqZWN0Lm8gXAo+ICsJZ2VtL2k5MTVfZ2VtX29iamVj dF9ibHQubyBcCj4gIAlnZW0vaTkxNV9nZW1fbW1hbi5vIFwKPiAgCWdlbS9pOTE1X2dlbV9wYWdl cy5vIFwKPiAgCWdlbS9pOTE1X2dlbV9waHlzLm8gXAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY2xpZW50X2JsdC5jCj4gYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fY2xpZW50X2JsdC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAwMDAuLjJkOGNmMjlhNTc5Ngo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY2xpZW50X2JsdC5jCj4gQEAgLTAsMCAr MSwzMDYgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAo+ICsvKgo+ICsgKiBD b3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArI2luY2x1ZGUgImk5 MTVfZ2VtX2NsaWVudF9ibHQuaCIKPiArCj4gKyNpbmNsdWRlICJpOTE1X2dlbV9vYmplY3RfYmx0 LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPiArCj4gK3N0cnVjdCBpOTE1X3NsZWV2ZSB7 Cj4gKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmo7Cj4gKwlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOwo+ICsJc3RydWN0IGk5MTVfcGFnZV9z aXplcyBwYWdlX3NpemVzOwo+ICt9Owo+ICsKPiArc3RhdGljIGludCB2bWFfc2V0X3BhZ2VzKHN0 cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9zbGVldmUgKnNsZWV2ZSA9 IHZtYS0+cHJpdmF0ZTsKPiArCj4gKwl2bWEtPnBhZ2VzID0gc2xlZXZlLT5wYWdlczsKPiArCXZt YS0+cGFnZV9zaXplcyA9IHNsZWV2ZS0+cGFnZV9zaXplczsKPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgdm1hX2NsZWFyX3BhZ2VzKHN0cnVjdCBpOTE1X3ZtYSAqdm1h KQo+ICt7Cj4gKwlHRU1fQlVHX09OKCF2bWEtPnBhZ2VzKTsKPiArCXZtYS0+cGFnZXMgPSBOVUxM Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZtYV9iaW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+ ICsJCSAgICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWwsCj4gKwkJICAgIHUzMiBm bGFncykKPiArewo+ICsJcmV0dXJuIHZtYS0+dm0tPnZtYV9vcHMuYmluZF92bWEodm1hLCBjYWNo ZV9sZXZlbCwgZmxhZ3MpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2bWFfdW5iaW5kKHN0cnVj dCBpOTE1X3ZtYSAqdm1hKQo+ICt7Cj4gKwl2bWEtPnZtLT52bWFfb3BzLnVuYmluZF92bWEodm1h KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3ZtYV9vcHMgcHJveHlfdm1h X29wcyA9IHsKPiArCS5zZXRfcGFnZXMgPSB2bWFfc2V0X3BhZ2VzLAo+ICsJLmNsZWFyX3BhZ2Vz ID0gdm1hX2NsZWFyX3BhZ2VzLAo+ICsJLmJpbmRfdm1hID0gdm1hX2JpbmQsCj4gKwkudW5iaW5k X3ZtYSA9IHZtYV91bmJpbmQsCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfc2xlZXZl ICpjcmVhdGVfc2xlZXZlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UKPiAqdm0sCj4gKwkJCQkJ IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0Cj4gKm9iaiwKPiArCQkJCQkgc3RydWN0IHNnX3Rh YmxlICpwYWdlcywKPiArCQkJCQkgc3RydWN0IGk5MTVfcGFnZV9zaXplcwo+ICpwYWdlX3NpemVz KQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9zbGVldmUgKnNsZWV2ZTsKPiArCXN0cnVjdCBpOTE1X3Zt YSAqdm1hOwo+ICsJaW50IGVycjsKPiArCj4gKwlzbGVldmUgPSBremFsbG9jKHNpemVvZigqc2xl ZXZlKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXNsZWV2ZSkKPiArCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKPiArCj4gKwl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosIHZtLCBOVUxMKTsK PiArCWlmIChJU19FUlIodm1hKSkgewo+ICsJCWVyciA9IFBUUl9FUlIodm1hKTsKPiArCQlnb3Rv IGVycl9mcmVlOwo+ICsJfQo+ICsKPiArCXZtYS0+cHJpdmF0ZSA9IHNsZWV2ZTsKPiArCXZtYS0+ b3BzID0gJnByb3h5X3ZtYV9vcHM7Cj4gKwo+ICsJc2xlZXZlLT52bWEgPSB2bWE7Cj4gKwlzbGVl dmUtPm9iaiA9IGk5MTVfZ2VtX29iamVjdF9nZXQob2JqKTsKPiArCXNsZWV2ZS0+cGFnZXMgPSBw YWdlczsKPiArCXNsZWV2ZS0+cGFnZV9zaXplcyA9ICpwYWdlX3NpemVzOwo+ICsKPiArCXJldHVy biBzbGVldmU7Cj4gKwo+ICtlcnJfZnJlZToKPiArCWtmcmVlKHNsZWV2ZSk7Cj4gKwlyZXR1cm4g RVJSX1BUUihlcnIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkZXN0cm95X3NsZWV2ZShzdHJ1 Y3QgaTkxNV9zbGVldmUgKnNsZWV2ZSkKPiArewo+ICsJaTkxNV9nZW1fb2JqZWN0X3B1dChzbGVl dmUtPm9iaik7Cj4gKwlrZnJlZShzbGVldmUpOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgY2xlYXJfcGFn ZXNfd29yayB7Cj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlIGRtYTsKPiArCXN0cnVjdCBkbWFfZmVuY2Vf Y2IgY2I7Cj4gKwlzdHJ1Y3QgaTkxNV9zd19mZW5jZSB3YWl0Owo+ICsJc3RydWN0IHdvcmtfc3Ry dWN0IHdvcms7Cj4gKwlzdHJ1Y3QgaXJxX3dvcmsgaXJxX3dvcms7Cj4gKwlzdHJ1Y3QgaTkxNV9z bGVldmUgKnNsZWV2ZTsKPiArCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsKPiArCXUzMiB2YWx1 ZTsKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyICpjbGVhcl9wYWdlc193b3JrX2RyaXZl cl9uYW1lKHN0cnVjdCBkbWFfZmVuY2UKPiAqZmVuY2UpCj4gK3sKPiArCXJldHVybiBEUklWRVJf TkFNRTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKmNsZWFyX3BhZ2VzX3dvcmtfdGlt ZWxpbmVfbmFtZShzdHJ1Y3QgZG1hX2ZlbmNlCj4gKmZlbmNlKQo+ICt7Cj4gKwlyZXR1cm4gImNs ZWFyIjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY2xlYXJfcGFnZXNfd29ya19yZWxlYXNlKHN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgY2xlYXJfcGFnZXNfd29yayAq dyA9IGNvbnRhaW5lcl9vZihmZW5jZSwgdHlwZW9mKCp3KSwKPiBkbWEpOwo+ICsKPiArCWRlc3Ry b3lfc2xlZXZlKHctPnNsZWV2ZSk7Cj4gKwo+ICsJaTkxNV9zd19mZW5jZV9maW5pKCZ3LT53YWl0 KTsKPiArCj4gKwlCVUlMRF9CVUdfT04ob2Zmc2V0b2YodHlwZW9mKCp3KSwgZG1hKSk7Cj4gKwlk bWFfZmVuY2VfZnJlZSgmdy0+ZG1hKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBk bWFfZmVuY2Vfb3BzIGNsZWFyX3BhZ2VzX3dvcmtfb3BzID0gewo+ICsJLmdldF9kcml2ZXJfbmFt ZSA9IGNsZWFyX3BhZ2VzX3dvcmtfZHJpdmVyX25hbWUsCj4gKwkuZ2V0X3RpbWVsaW5lX25hbWUg PSBjbGVhcl9wYWdlc193b3JrX3RpbWVsaW5lX25hbWUsCj4gKwkucmVsZWFzZSA9IGNsZWFyX3Bh Z2VzX3dvcmtfcmVsZWFzZSwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIGNsZWFyX3BhZ2VzX3Np Z25hbF9pcnFfd29ya2VyKHN0cnVjdCBpcnFfd29yayAqd29yaykKPiArewo+ICsJc3RydWN0IGNs ZWFyX3BhZ2VzX3dvcmsgKncgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCp3KSwKPiBpcnFf d29yayk7Cj4gKwo+ICsJZG1hX2ZlbmNlX3NpZ25hbCgmdy0+ZG1hKTsKPiArCWRtYV9mZW5jZV9w dXQoJnctPmRtYSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNsZWFyX3BhZ2VzX2RtYV9mZW5j ZV9jYihzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwKPiArCQkJCSAgICAgc3RydWN0IGRtYV9mZW5j ZV9jYiAqY2IpCj4gK3sKPiArCXN0cnVjdCBjbGVhcl9wYWdlc193b3JrICp3ID0gY29udGFpbmVy X29mKGNiLCB0eXBlb2YoKncpLCBjYik7Cj4gKwo+ICsJaWYgKGZlbmNlLT5lcnJvcikKPiArCQlk bWFfZmVuY2Vfc2V0X2Vycm9yKCZ3LT5kbWEsIGZlbmNlLT5lcnJvcik7Cj4gKwo+ICsJLyoKPiAr CSAqIFB1c2ggdGhlIHNpZ25hbGxpbmcgb2YgdGhlIGZlbmNlIGludG8geWV0IGFub3RoZXIgd29y a2VyIHRvCj4gYXZvaWQKPiArCSAqIHRoZSBuaWdodG1hcmUgbG9ja2luZyBhcm91bmQgdGhlIGZl bmNlIHNwaW5sb2NrLgo+ICsJICovCj4gKwlpcnFfd29ya19xdWV1ZSgmdy0+aXJxX3dvcmspOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjbGVhcl9wYWdlc193b3JrZXIoc3RydWN0IHdvcmtfc3Ry dWN0ICp3b3JrKQo+ICt7Cj4gKwlzdHJ1Y3QgY2xlYXJfcGFnZXNfd29yayAqdyA9IGNvbnRhaW5l cl9vZih3b3JrLCB0eXBlb2YoKncpLAo+IHdvcmspOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPSB3LT5jZS0+Z2VtX2NvbnRleHQtPmk5MTU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqID0gdy0+c2xlZXZlLT5vYmo7Cj4gKwlzdHJ1Y3QgaTkxNV92bWEgKnZt YSA9IHctPnNsZWV2ZS0+dm1hOwo+ICsJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gKwlpbnQg ZXJyID0gdy0+ZG1hLmVycm9yOwo+ICsKPiArCWlmICh1bmxpa2VseShlcnIpKQo+ICsJCWdvdG8g b3V0X3NpZ25hbDsKPiArCj4gKwlpZiAob2JqLT5jYWNoZV9kaXJ0eSkgewo+ICsJCW9iai0+d3Jp dGVfZG9tYWluID0gMDsKPiArCQlpZiAoaTkxNV9nZW1fb2JqZWN0X2hhc19zdHJ1Y3RfcGFnZShv YmopKQo+ICsJCQlkcm1fY2xmbHVzaF9zZyh3LT5zbGVldmUtPnBhZ2VzKTsKPiArCQlvYmotPmNh Y2hlX2RpcnR5ID0gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJLyogWFhYOiB3ZSBuZWVkIHRvIGtpbGwg dGhpcyAqLwo+ICsJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwllcnIg PSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNFUik7Cj4gKwlpZiAodW5saWtlbHkoZXJy KSkKPiArCQlnb3RvIG91dF91bmxvY2s7Cj4gKwo+ICsJcnEgPSBpOTE1X3JlcXVlc3RfY3JlYXRl KHctPmNlKTsKPiArCWlmIChJU19FUlIocnEpKSB7Cj4gKwkJZXJyID0gUFRSX0VSUihycSk7Cj4g KwkJZ290byBvdXRfdW5waW47Cj4gKwl9Cj4gKwo+ICsJLyogVGhlcmUncyBubyB3YXkgdGhlIGZl bmNlIGhhcyBzaWduYWxsZWQgKi8KPiArCWlmIChkbWFfZmVuY2VfYWRkX2NhbGxiYWNrKCZycS0+ ZmVuY2UsICZ3LT5jYiwKPiArCQkJCSAgIGNsZWFyX3BhZ2VzX2RtYV9mZW5jZV9jYikpCj4gKwkJ R0VNX0JVR19PTigxKTsKPiArCj4gKwlpZiAody0+Y2UtPmVuZ2luZS0+ZW1pdF9pbml0X2JyZWFk Y3J1bWIpIHsKPiArCQllcnIgPSB3LT5jZS0+ZW5naW5lLT5lbWl0X2luaXRfYnJlYWRjcnVtYihy cSk7Cj4gKwkJaWYgKHVubGlrZWx5KGVycikpCj4gKwkJCWdvdG8gb3V0X3JlcXVlc3Q7Cj4gKwl9 Cj4gKwo+ICsJZXJyID0gaW50ZWxfZW1pdF92bWFfZmlsbF9ibHQocnEsIHZtYSwgdy0+dmFsdWUp Owo+ICsJaWYgKHVubGlrZWx5KGVycikpCj4gKwkJZ290byBvdXRfcmVxdWVzdDsKPiArCj4gKwkv KiBYWFg6IG1vcmUgZmV2ZXJpc2ggbmlnaHRtYXJlcyBhd2FpdCAqLwo+ICsJaTkxNV92bWFfbG9j ayh2bWEpOwo+ICsJZXJyID0gaTkxNV92bWFfbW92ZV90b19hY3RpdmUodm1hLCBycSwgRVhFQ19P QkpFQ1RfV1JJVEUpOwo+ICsJaTkxNV92bWFfdW5sb2NrKHZtYSk7Cj4gK291dF9yZXF1ZXN0Ogo+ ICsJaWYgKHVubGlrZWx5KGVycikpIHsKPiArCQlpOTE1X3JlcXVlc3Rfc2tpcChycSwgZXJyKTsK PiArCQllcnIgPSAwOwo+ICsJfQo+ICsKPiArCWk5MTVfcmVxdWVzdF9hZGQocnEpOwo+ICtvdXRf dW5waW46Cj4gKwlpOTE1X3ZtYV91bnBpbih2bWEpOwo+ICtvdXRfdW5sb2NrOgo+ICsJbXV0ZXhf dW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArb3V0X3NpZ25hbDoKPiArCWlmICh1 bmxpa2VseShlcnIpKSB7Cj4gKwkJZG1hX2ZlbmNlX3NldF9lcnJvcigmdy0+ZG1hLCBlcnIpOwo+ ICsJCWRtYV9mZW5jZV9zaWduYWwoJnctPmRtYSk7Cj4gKwkJZG1hX2ZlbmNlX3B1dCgmdy0+ZG1h KTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCBfX2k5MTVfc3dfZmVuY2VfY2FsbAo+ICtj bGVhcl9wYWdlc193b3JrX25vdGlmeShzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqZmVuY2UsCj4gKwkJ CWVudW0gaTkxNV9zd19mZW5jZV9ub3RpZnkgc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBjbGVhcl9w YWdlc193b3JrICp3ID0gY29udGFpbmVyX29mKGZlbmNlLCB0eXBlb2YoKncpLAo+IHdhaXQpOwo+ ICsKPiArCXN3aXRjaCAoc3RhdGUpIHsKPiArCWNhc2UgRkVOQ0VfQ09NUExFVEU6Cj4gKwkJc2No ZWR1bGVfd29yaygmdy0+d29yayk7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBGRU5DRV9GUkVF Ogo+ICsJCWRtYV9mZW5jZV9wdXQoJnctPmRtYSk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIE5PVElGWV9ET05FOwo+ICt9Cj4gKwo+ICtzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZl bmNlX2xvY2spOwo+ICsKPiArLyogWFhYOiBiZXR0ZXIgbmFtZSBwbGVhc2UgKi8KPiAraW50IGk5 MTVfZ2VtX3NjaGVkdWxlX2ZpbGxfcGFnZXNfYmx0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 Cj4gKm9iaiwKPiArCQkJCSAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ICsJCQkJICAg ICBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzLAo+ICsJCQkJICAgICBzdHJ1Y3QgaTkxNV9wYWdlX3Np emVzCj4gKnBhZ2Vfc2l6ZXMsCj4gKwkJCQkgICAgIHUzMiB2YWx1ZSkKPiArewo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOwo+ICsJc3Ry dWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCA9IGNlLT5nZW1fY29udGV4dDsKPiArCXN0cnVjdCBp OTE1X2FkZHJlc3Nfc3BhY2UgKnZtOwo+ICsJc3RydWN0IGNsZWFyX3BhZ2VzX3dvcmsgKndvcms7 Cj4gKwlzdHJ1Y3QgaTkxNV9zbGVldmUgKnNsZWV2ZTsKPiArCWludCBlcnI7Cj4gKwo+ICsJdm0g PSBjdHgtPnBwZ3R0ID8gJmN0eC0+cHBndHQtPnZtIDogJmk5MTUtPmdndHQudm07Cj4gKwo+ICsJ c2xlZXZlID0gY3JlYXRlX3NsZWV2ZSh2bSwgb2JqLCBwYWdlcywgcGFnZV9zaXplcyk7Cj4gKwlp ZiAoSVNfRVJSKHNsZWV2ZSkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoc2xlZXZlKTsKPiArCj4gKwl3 b3JrID0ga21hbGxvYyhzaXplb2YoKndvcmspLCBHRlBfS0VSTkVMKTsKPiArCWlmICghd29yaykg ewo+ICsJCWRlc3Ryb3lfc2xlZXZlKHNsZWV2ZSk7Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9 Cj4gKwo+ICsJd29yay0+dmFsdWUgPSB2YWx1ZTsKPiArCXdvcmstPnNsZWV2ZSA9IHNsZWV2ZTsK PiArCXdvcmstPmNlID0gY2U7Cj4gKwo+ICsJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCBjbGVhcl9w YWdlc193b3JrZXIpOwo+ICsKPiArCWluaXRfaXJxX3dvcmsoJndvcmstPmlycV93b3JrLCBjbGVh cl9wYWdlc19zaWduYWxfaXJxX3dvcmtlcik7Cj4gKwo+ICsJZG1hX2ZlbmNlX2luaXQoJndvcmst PmRtYSwKPiArCQkgICAgICAgJmNsZWFyX3BhZ2VzX3dvcmtfb3BzLAo+ICsJCSAgICAgICAmZmVu Y2VfbG9jaywKPiArCQkgICAgICAgaTkxNS0+bW0udW5vcmRlcmVkX3RpbWVsaW5lLAo+ICsJCSAg ICAgICAwKTsKPiArCWk5MTVfc3dfZmVuY2VfaW5pdCgmd29yay0+d2FpdCwgY2xlYXJfcGFnZXNf d29ya19ub3RpZnkpOwo+ICsKPiArCWk5MTVfZ2VtX29iamVjdF9sb2NrKG9iaik7Cj4gKwllcnIg PSBpOTE1X3N3X2ZlbmNlX2F3YWl0X3Jlc2VydmF0aW9uKCZ3b3JrLT53YWl0LAo+ICsJCQkJCSAg ICAgIG9iai0+cmVzdiwgTlVMTCwKPiArCQkJCQkgICAgICB0cnVlLCBJOTE1X0ZFTkNFX1RJTUVP VVQsCj4gKwkJCQkJICAgICAgSTkxNV9GRU5DRV9HRlApOwo+ICsJaWYgKGVyciA8IDApIHsKPiAr CQlkbWFfZmVuY2Vfc2V0X2Vycm9yKCZ3b3JrLT5kbWEsIGVycik7Cj4gKwl9IGVsc2Ugewo+ICsJ CXJlc2VydmF0aW9uX29iamVjdF9hZGRfZXhjbF9mZW5jZShvYmotPnJlc3YsICZ3b3JrLQo+ID5k bWEpOwo+ICsJCWVyciA9IDA7Cj4gKwl9Cj4gKwlpOTE1X2dlbV9vYmplY3RfdW5sb2NrKG9iaik7 Cj4gKwo+ICsJZG1hX2ZlbmNlX2dldCgmd29yay0+ZG1hKTsKPiArCWk5MTVfc3dfZmVuY2VfY29t bWl0KCZ3b3JrLT53YWl0KTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICsjaWYgSVNf RU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QpCj4gKyNpbmNsdWRlICJzZWxmdGVzdHMv aTkxNV9nZW1fY2xpZW50X2JsdC5jIgo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NsaWVudF9ibHQuaAo+IGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX2NsaWVudF9ibHQuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMDAwMDAwLi4zZGJkMjhjMjJmZjUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NsaWVudF9ibHQuaAo+IEBAIC0wLDAg KzEsMjEgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLwo+ICsvKgo+ICsg KiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArI2lmbmRlZiBf X0k5MTVfR0VNX0NMSUVOVF9CTFRfSF9fCj4gKyNkZWZpbmUgX19JOTE1X0dFTV9DTElFTlRfQkxU X0hfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKwo+ICtzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdDsKPiArc3RydWN0IGk5MTVfcGFnZV9zaXplczsKPiArc3RydWN0IGludGVs X2NvbnRleHQ7Cj4gK3N0cnVjdCBzZ190YWJsZTsKPiArCj4gK2ludCBpOTE1X2dlbV9zY2hlZHVs ZV9maWxsX3BhZ2VzX2JsdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdAo+ICpvYmosCj4gKwkJ CQkgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiArCQkJCSAgICAgc3RydWN0IHNnX3Rh YmxlICpwYWdlcywKPiArCQkJCSAgICAgc3RydWN0IGk5MTVfcGFnZV9zaXplcwo+ICpwYWdlX3Np emVzLAo+ICsJCQkJICAgICB1MzIgdmFsdWUpOwo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfYmx0LmMKPiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfYmx0LmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uODQzMjRiNzU1ZGU2Cj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfYmx0LmMK PiBAQCAtMCwwICsxLDEwOSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCj4g Ky8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4gKyAqLwo+ICsK PiArI2luY2x1ZGUgImk5MTVfZ2VtX29iamVjdF9ibHQuaCIKPiArCj4gKyNpbmNsdWRlICJpOTE1 X2dlbV9jbGZsdXNoLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPiArCj4gK2ludCBpbnRl bF9lbWl0X3ZtYV9maWxsX2JsdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiArCQkJICAgIHN0 cnVjdCBpOTE1X3ZtYSAqdm1hLAo+ICsJCQkgICAgdTMyIHZhbHVlKQo+ICt7Cj4gKwl1MzIgKmNz Owo+ICsKPiArCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgOCk7Cj4gKwlpZiAoSVNfRVJSKGNz KSkKPiArCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gKwo+ICsJaWYgKElOVEVMX0dFTihycS0+aTkx NSkgPj0gOCkgewo+ICsJCSpjcysrID0gWFlfQ09MT1JfQkxUX0NNRCB8IEJMVF9XUklURV9SR0JB IHwgKDctMik7Cj4gKwkJKmNzKysgPSBCTFRfREVQVEhfMzIgfCBCTFRfUk9QX0NPTE9SX0NPUFkg fCBQQUdFX1NJWkU7Cj4gKwkJKmNzKysgPSAwOwo+ICsJCSpjcysrID0gdm1hLT5zaXplID4+IFBB R0VfU0hJRlQgPDwgMTYgfCBQQUdFX1NJWkUgLyA0Owo+ICsJCSpjcysrID0gbG93ZXJfMzJfYml0 cyh2bWEtPm5vZGUuc3RhcnQpOwo+ICsJCSpjcysrID0gdXBwZXJfMzJfYml0cyh2bWEtPm5vZGUu c3RhcnQpOwo+ICsJCSpjcysrID0gdmFsdWU7Cj4gKwkJKmNzKysgPSBNSV9OT09QOwo+ICsJfSBl bHNlIHsKPiArCQkqY3MrKyA9IFhZX0NPTE9SX0JMVF9DTUQgfCBCTFRfV1JJVEVfUkdCQSB8ICg2 LTIpOwo+ICsJCSpjcysrID0gQkxUX0RFUFRIXzMyIHwgQkxUX1JPUF9DT0xPUl9DT1BZIHwgUEFH RV9TSVpFOwo+ICsJCSpjcysrID0gMDsKPiArCQkqY3MrKyA9IHZtYS0+c2l6ZSA+PiBQQUdFX1NI SUZUIDw8IDE2IHwgUEFHRV9TSVpFIC8gNDsKPiArCQkqY3MrKyA9IHZtYS0+bm9kZS5zdGFydDsK PiArCQkqY3MrKyA9IHZhbHVlOwo+ICsJCSpjcysrID0gTUlfTk9PUDsKPiArCQkqY3MrKyA9IE1J X05PT1A7Cj4gKwl9Cj4gKwo+ICsJaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBpOTE1X2dlbV9vYmplY3RfZmlsbF9ibHQoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY2UsCj4gKwkJCSAgICAgdTMyIHZhbHVlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCAqY3R4ID0gY2UtPmdlbV9jb250ZXh0Owo+ICsJc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqdm07Cj4gKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiArCXN0cnVjdCBpOTE1X3Zt YSAqdm1hOwo+ICsJaW50IGVycjsKPiArCj4gKwkvKiBYWFg6IGNlLT52bSBwbGVhc2UgKi8KPiAr CXZtID0gY3R4LT5wcGd0dCA/ICZjdHgtPnBwZ3R0LT52bSA6ICZpOTE1LT5nZ3R0LnZtOwo+ICsK PiArCXZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKG9iaiwgdm0sIE5VTEwpOwo+ICsJaWYgKElTX0VS Uih2bWEpKQo+ICsJCXJldHVybiBQVFJfRVJSKHZtYSk7Cj4gKwo+ICsJZXJyID0gaTkxNV92bWFf cGluKHZtYSwgMCwgMCwgUElOX1VTRVIpOwo+ICsJaWYgKHVubGlrZWx5KGVycikpCj4gKwkJcmV0 dXJuIGVycjsKPiArCj4gKwlpZiAob2JqLT5jYWNoZV9kaXJ0eSAmIH5vYmotPmNhY2hlX2NvaGVy ZW50KSB7Cj4gKwkJaTkxNV9nZW1fb2JqZWN0X2xvY2sob2JqKTsKPiArCQlpOTE1X2dlbV9jbGZs dXNoX29iamVjdChvYmosIDApOwo+ICsJCWk5MTVfZ2VtX29iamVjdF91bmxvY2sob2JqKTsKPiAr CX0KPiArCj4gKwlycSA9IGk5MTVfcmVxdWVzdF9jcmVhdGUoY2UpOwo+ICsJaWYgKElTX0VSUihy cSkpIHsKPiArCQllcnIgPSBQVFJfRVJSKHJxKTsKPiArCQlnb3RvIG91dF91bnBpbjsKPiArCX0K PiArCj4gKwllcnIgPSBpOTE1X3JlcXVlc3RfYXdhaXRfb2JqZWN0KHJxLCBvYmosIHRydWUpOwo+ ICsJaWYgKHVubGlrZWx5KGVycikpCj4gKwkJZ290byBvdXRfcmVxdWVzdDsKPiArCj4gKwlpZiAo Y2UtPmVuZ2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIpIHsKPiArCQllcnIgPSBjZS0+ZW5naW5l LT5lbWl0X2luaXRfYnJlYWRjcnVtYihycSk7Cj4gKwkJaWYgKHVubGlrZWx5KGVycikpCj4gKwkJ CWdvdG8gb3V0X3JlcXVlc3Q7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gaW50ZWxfZW1pdF92bWFfZmls bF9ibHQocnEsIHZtYSwgdmFsdWUpOwo+ICsJaWYgKHVubGlrZWx5KGVycikpCj4gKwkJZ290byBv dXRfcmVxdWVzdDsKPiArCj4gKwlpOTE1X3ZtYV9sb2NrKHZtYSk7Cj4gKwllcnIgPSBpOTE1X3Zt YV9tb3ZlX3RvX2FjdGl2ZSh2bWEsIHJxLCBFWEVDX09CSkVDVF9XUklURSk7Cj4gKwlpOTE1X3Zt YV91bmxvY2sodm1hKTsKPiArb3V0X3JlcXVlc3Q6Cj4gKwlpZiAodW5saWtlbHkoZXJyKSkKPiAr CQlpOTE1X3JlcXVlc3Rfc2tpcChycSwgZXJyKTsKPiArCj4gKwlpOTE1X3JlcXVlc3RfYWRkKHJx KTsKPiArb3V0X3VucGluOgo+ICsJaTkxNV92bWFfdW5waW4odm1hKTsKPiArCXJldHVybiBlcnI7 Cj4gK30KPiArCj4gKyNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkKPiAr I2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3RfYmx0LmMiCj4gKyNlbmRpZgo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X2JsdC5o Cj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X2JsdC5oCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjdlYzdkZTZhYzBjMAo+IC0t LSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2Jq ZWN0X2JsdC5oCj4gQEAgLTAsMCArMSwyNCBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogTUlUICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9u Cj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX0k5MTVfR0VNX09CSkVDVF9CTFRfSF9fCj4gKyNkZWZp bmUgX19JOTE1X0dFTV9PQkpFQ1RfQkxUX0hfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+Cj4gKwo+ICtzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdDsKPiArc3RydWN0IGludGVsX2Nv bnRleHQ7Cj4gK3N0cnVjdCBpOTE1X3JlcXVlc3Q7Cj4gK3N0cnVjdCBpOTE1X3ZtYTsKPiArCj4g K2ludCBpbnRlbF9lbWl0X3ZtYV9maWxsX2JsdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAr CQkJICAgIHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+ICsJCQkgICAgdTMyIHZhbHVlKTsKPiArCj4g K2ludCBpOTE1X2dlbV9vYmplY3RfZmlsbF9ibHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKPiArCQkJICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4gKwkJCSAgICAgdTMy IHZhbHVlKTsKPiArCj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX2NsaWVudF9ibHQuYwo+IGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9jbGllbnRfYmx0LmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYjY1MGQ4NjU2ZDkyCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fY2xp ZW50X2JsdC5jCj4gQEAgLTAsMCArMSwxMjcgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IE1JVAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgo+ ICsgKi8KPiArCj4gKyNpbmNsdWRlICIuLi9pOTE1X3NlbGZ0ZXN0LmgiCj4gKwo+ICsjaW5jbHVk ZSAic2VsZnRlc3RzL2lndF9mbHVzaF90ZXN0LmgiCj4gKyNpbmNsdWRlICJzZWxmdGVzdHMvbW9j a19kcm0uaCIKPiArI2luY2x1ZGUgIm1vY2tfY29udGV4dC5oIgo+ICsKPiArc3RhdGljIGludCBp Z3RfY2xpZW50X2ZpbGwodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y2UgPSBhcmc7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGNlLT5nZW1fY29u dGV4dC0+aTkxNTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwlzdHJ1 Y3Qgcm5kX3N0YXRlIHBybmc7Cj4gKwlJR1RfVElNRU9VVChlbmQpOwo+ICsJdTMyICp2YWRkcjsK PiArCWludCBlcnIgPSAwOwo+ICsKPiArCXByYW5kb21fc2VlZF9zdGF0ZSgmcHJuZywgaTkxNV9z ZWxmdGVzdC5yYW5kb21fc2VlZCk7Cj4gKwo+ICsJZG8gewo+ICsJCXUzMiBzeiA9IHByYW5kb21f dTMyX3N0YXRlKCZwcm5nKSAlIFNaXzMyTTsKPiArCQl1MzIgdmFsID0gcHJhbmRvbV91MzJfc3Rh dGUoJnBybmcpOwo+ICsJCXUzMiBpOwo+ICsKPiArCQlzeiA9IHJvdW5kX3VwKHN6LCBQQUdFX1NJ WkUpOwo+ICsKPiArCQlwcl9kZWJ1ZygiJXMgd2l0aCBzej0leCwgdmFsPSV4XG4iLCBfX2Z1bmNf Xywgc3osIHZhbCk7Cj4gKwo+ICsJCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJu YWwoaTkxNSwgc3opOwo+ICsJCWlmIChJU19FUlIob2JqKSkgewo+ICsJCQllcnIgPSBQVFJfRVJS KG9iaik7Cj4gKwkJCWdvdG8gZXJyX2ZsdXNoOwo+ICsJCX0KPiArCj4gKwkJdmFkZHIgPSBpOTE1 X2dlbV9vYmplY3RfcGluX21hcChvYmosIEk5MTVfTUFQX1dCKTsKPiArCQlpZiAoSVNfRVJSKHZh ZGRyKSkgewo+ICsJCQllcnIgPSBQVFJfRVJSKHZhZGRyKTsKPiArCQkJZ290byBlcnJfcHV0Owo+ ICsJCX0KPiArCj4gKwkJLyoKPiArCQkgKiBYWFg6IFRoZSBnb2FsIGlzIG1vdmUgdGhpcyB0byBn ZXRfcGFnZXMsIHNvIHRyeSB0bwo+IGRpcnR5IHRoZQo+ICsJCSAqIENQVSBjYWNoZSBmaXJzdCB0 byBjaGVjayB0aGF0IHdlIGRvIHRoZSByZXF1aXJlZAo+IGNsZmx1c2gKPiArCQkgKiBiZWZvcmUg c2NoZWR1bGluZyB0aGUgYmx0IGZvciAhbGxjIHBsYXRmb3Jtcy4gVGhpcwo+IG1hdGNoZXMKPiAr CQkgKiBzb21lIHZlcnNpb24gb2YgcmVhbGl0eSB3aGVyZSBhdCBnZXRfcGFnZXMgdGhlIHBhZ2Vz Cj4gKwkJICogdGhlbXNlbHZlcyBtYXkgbm90IHlldCBiZSBjb2hlcmVudCB3aXRoIHRoZQo+IEdQ VShzd2FwLWluKS4gSWYKPiArCQkgKiB3ZSBhcmUgbWlzc2luZyB0aGUgZmx1c2ggdGhlbiB3ZSBz aG91bGQgc2VlIHRoZQo+IHN0YWxlIGNhY2hlCj4gKwkJICogdmFsdWVzIGFmdGVyIHdlIGRvIHRo ZSBzZXRfdG9fY3B1X2RvbWFpbiBhbmQgcGljayBpdAo+IHVwIGFzIGEKPiArCQkgKiB0ZXN0IGZh aWx1cmUuCj4gKwkJICovCj4gKwkJbWVtc2V0MzIodmFkZHIsIHZhbCBeIDB4ZGVhZGJlYWYsIG9i ai0+YmFzZS5zaXplIC8KPiBzaXplb2YodTMyKSk7Cj4gKwo+ICsJCWlmICghKG9iai0+Y2FjaGVf Y29oZXJlbnQgJgo+IEk5MTVfQk9fQ0FDSEVfQ09IRVJFTlRfRk9SX1dSSVRFKSkKPiArCQkJb2Jq LT5jYWNoZV9kaXJ0eSA9IHRydWU7Cj4gKwo+ICsJCWVyciA9IGk5MTVfZ2VtX3NjaGVkdWxlX2Zp bGxfcGFnZXNfYmx0KG9iaiwgY2UsIG9iai0KPiA+bW0ucGFnZXMsCj4gKwkJCQkJCSAgICAgICAm b2JqLQo+ID5tbS5wYWdlX3NpemVzLAo+ICsJCQkJCQkgICAgICAgdmFsKTsKPiArCQlpZiAoZXJy KQo+ICsJCQlnb3RvIGVycl91bnBpbjsKPiArCj4gKwkJLyoKPiArCQkgKiBYWFg6IEZvciBub3cg ZG8gdGhlIHdhaXQgd2l0aG91dCB0aGUgb2JqZWN0IHJlc3YKPiBsb2NrIHRvCj4gKwkJICogZW5z dXJlIHdlIGRvbid0IGRlYWRsb2NrLgo+ICsJCSAqLwo+ICsJCWVyciA9IGk5MTVfZ2VtX29iamVj dF93YWl0KG9iaiwKPiArCQkJCQkgICBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8Cj4gKwkJCQkJ ICAgSTkxNV9XQUlUX0FMTCwKPiArCQkJCQkgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cj4gKwkJ aWYgKGVycikKPiArCQkJZ290byBlcnJfdW5waW47Cj4gKwo+ICsJCWk5MTVfZ2VtX29iamVjdF9s b2NrKG9iaik7Cj4gKwkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKG9i aiwgZmFsc2UpOwo+ICsJCWk5MTVfZ2VtX29iamVjdF91bmxvY2sob2JqKTsKPiArCQlpZiAoZXJy KQo+ICsJCQlnb3RvIGVycl91bnBpbjsKPiArCj4gKwkJZm9yIChpID0gMDsgaSA8IG9iai0+YmFz ZS5zaXplIC8gc2l6ZW9mKHUzMik7ICsraSkgewo+ICsJCQlpZiAodmFkZHJbaV0gIT0gdmFsKSB7 Cj4gKwkJCQlwcl9lcnIoInZhZGRyWyV1XT0leCwgZXhwZWN0ZWQ9JXhcbiIsCj4gaSwKPiArCQkJ CSAgICAgICB2YWRkcltpXSwgdmFsKTsKPiArCQkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJCQlnb3Rv IGVycl91bnBpbjsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJaTkxNV9nZW1fb2JqZWN0X3VucGlu X21hcChvYmopOwo+ICsJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiArCX0gd2hpbGUgKCF0 aW1lX2FmdGVyKGppZmZpZXMsIGVuZCkpOwo+ICsKPiArCWdvdG8gZXJyX2ZsdXNoOwo+ICsKPiAr ZXJyX3VucGluOgo+ICsJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChvYmopOwo+ICtlcnJfcHV0 Ogo+ICsJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICtlcnJfZmx1c2g6Cj4gKwltdXRleF9s b2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCWlmIChpZ3RfZmx1c2hfdGVzdChpOTE1 LCBJOTE1X1dBSVRfTE9DS0VEKSkKPiArCQllcnIgPSAtRUlPOwo+ICsJbXV0ZXhfdW5sb2NrKCZp OTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCj4gKwlpZiAoZXJyID09IC1FTk9NRU0pCj4gKwkJ ZXJyID0gMDsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtpbnQgaTkxNV9nZW1fY2xp ZW50X2JsdF9saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ICppOTE1KQo+ ICt7Cj4gKwlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0gewo+ICsJ CVNVQlRFU1QoaWd0X2NsaWVudF9maWxsKSwKPiArCX07Cj4gKwo+ICsJaWYgKGk5MTVfdGVybWlu YWxseV93ZWRnZWQoaTkxNSkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKCFIQVNfRU5HSU5F KGk5MTUsIEJDUzApKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldHVybiBpOTE1X3N1YnRlc3Rz KHRlc3RzLCBpOTE1LT5lbmdpbmVbQkNTMF0tCj4gPmtlcm5lbF9jb250ZXh0KTsKPiArfQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX29i amVjdF9ibHQuYwo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dl bV9vYmplY3RfYmx0LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAw MC4uNzE3NTIxYzhlYjBhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0X2JsdC5jCj4gQEAgLTAsMCArMSwxMTEg QEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAo+ICsvKgo+ICsgKiBDb3B5cmln aHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICIuLi9p OTE1X3NlbGZ0ZXN0LmgiCj4gKwo+ICsjaW5jbHVkZSAic2VsZnRlc3RzL2lndF9mbHVzaF90ZXN0 LmgiCj4gKyNpbmNsdWRlICJzZWxmdGVzdHMvbW9ja19kcm0uaCIKPiArI2luY2x1ZGUgIm1vY2tf Y29udGV4dC5oIgo+ICsKPiArc3RhdGljIGludCBpZ3RfZmlsbF9ibHQodm9pZCAqYXJnKQo+ICt7 Cj4gKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBhcmc7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSA9IGNlLT5nZW1fY29udGV4dC0+aTkxNTsKPiArCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwlzdHJ1Y3Qgcm5kX3N0YXRlIHBybmc7Cj4gKwlJR1RfVElN RU9VVChlbmQpOwo+ICsJdTMyICp2YWRkcjsKPiArCWludCBlcnIgPSAwOwo+ICsKPiArCXByYW5k b21fc2VlZF9zdGF0ZSgmcHJuZywgaTkxNV9zZWxmdGVzdC5yYW5kb21fc2VlZCk7Cj4gKwo+ICsJ ZG8gewo+ICsJCXUzMiBzeiA9IHByYW5kb21fdTMyX3N0YXRlKCZwcm5nKSAlIFNaXzMyTTsKPiAr CQl1MzIgdmFsID0gcHJhbmRvbV91MzJfc3RhdGUoJnBybmcpOwo+ICsJCXUzMiBpOwo+ICsKPiAr CQlzeiA9IHJvdW5kX3VwKHN6LCBQQUdFX1NJWkUpOwo+ICsKPiArCQlwcl9kZWJ1ZygiJXMgd2l0 aCBzej0leCwgdmFsPSV4XG4iLCBfX2Z1bmNfXywgc3osIHZhbCk7Cj4gKwo+ICsJCW9iaiA9IGk5 MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoaTkxNSwgc3opOwo+ICsJCWlmIChJU19FUlIo b2JqKSkgewo+ICsJCQllcnIgPSBQVFJfRVJSKHZhZGRyKTsKPiArCQkJZ290byBlcnJfZmx1c2g7 Cj4gKwkJfQo+ICsKPiArCQl2YWRkciA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKG9iaiwgSTkx NV9NQVBfV0IpOwo+ICsJCWlmIChJU19FUlIodmFkZHIpKSB7Cj4gKwkJCWVyciA9IFBUUl9FUlIo dmFkZHIpOwo+ICsJCQlnb3RvIGVycl9wdXQ7Cj4gKwkJfQo+ICsKPiArCQkvKgo+ICsJCSAqIE1h a2Ugc3VyZSB0aGUgcG90ZW50aWFsbHkgYXN5bmMgY2xmbHVzaCBkb2VzIGl0cwo+IGpvYiwgaWYK PiArCQkgKiByZXF1aXJlZC4KPiArCQkgKi8KPiArCQltZW1zZXQzMih2YWRkciwgdmFsIF4gMHhk ZWFkYmVhZiwgb2JqLT5iYXNlLnNpemUgLwo+IHNpemVvZih1MzIpKTsKPiArCj4gKwkJaWYgKCEo b2JqLT5jYWNoZV9jb2hlcmVudCAmCj4gSTkxNV9CT19DQUNIRV9DT0hFUkVOVF9GT1JfV1JJVEUp KQo+ICsJCQlvYmotPmNhY2hlX2RpcnR5ID0gdHJ1ZTsKPiArCj4gKwo+ICsJCW11dGV4X2xvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJCWVyciA9IGk5MTVfZ2VtX29iamVjdF9maWxs X2JsdChvYmosIGNlLCB2YWwpOwo+ICsJCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4gKwkJaWYgKGVycikKPiArCQkJZ290byBlcnJfdW5waW47Cj4gKwo+ICsJCWk5MTVf Z2VtX29iamVjdF9sb2NrKG9iaik7Cj4gKwkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19j cHVfZG9tYWluKG9iaiwgZmFsc2UpOwo+ICsJCWk5MTVfZ2VtX29iamVjdF91bmxvY2sob2JqKTsK PiArCQlpZiAoZXJyKQo+ICsJCQlnb3RvIGVycl91bnBpbjsKPiArCj4gKwkJZm9yIChpID0gMDsg aSA8IG9iai0+YmFzZS5zaXplIC8gc2l6ZW9mKHUzMik7ICsraSkgewo+ICsJCQlpZiAodmFkZHJb aV0gIT0gdmFsKSB7Cj4gKwkJCQlwcl9lcnIoInZhZGRyWyV1XT0leCwgZXhwZWN0ZWQ9JXhcbiIs Cj4gaSwKPiArCQkJCSAgICAgICB2YWRkcltpXSwgdmFsKTsKPiArCQkJCWVyciA9IC1FSU5WQUw7 Cj4gKwkJCQlnb3RvIGVycl91bnBpbjsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJaTkxNV9nZW1f b2JqZWN0X3VucGluX21hcChvYmopOwo+ICsJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiAr CX0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIGVuZCkpOwo+ICsKPiArCWdvdG8gZXJyX2Zs dXNoOwo+ICsKPiArZXJyX3VucGluOgo+ICsJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChvYmop Owo+ICtlcnJfcHV0Ogo+ICsJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICtlcnJfZmx1c2g6 Cj4gKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCWlmIChpZ3RfZmx1 c2hfdGVzdChpOTE1LCBJOTE1X1dBSVRfTE9DS0VEKSkKPiArCQllcnIgPSAtRUlPOwo+ICsJbXV0 ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCj4gKwlpZiAoZXJyID09IC1F Tk9NRU0pCj4gKwkJZXJyID0gMDsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtpbnQg aTkxNV9nZW1fb2JqZWN0X2JsdF9saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZQo+ICppOTE1KQo+ICt7Cj4gKwlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0 c1tdID0gewo+ICsJCVNVQlRFU1QoaWd0X2ZpbGxfYmx0KSwKPiArCX07Cj4gKwo+ICsJaWYgKGk5 MTVfdGVybWluYWxseV93ZWRnZWQoaTkxNSkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKCFI QVNfRU5HSU5FKGk5MTUsIEJDUzApKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldHVybiBpOTE1 X3N1YnRlc3RzKHRlc3RzLCBpOTE1LT5lbmdpbmVbQkNTMF0tCj4gPmtlcm5lbF9jb250ZXh0KTsK PiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ncHVfY29t bWFuZHMuaAo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3B1X2NvbW1hbmRzLmgK PiBpbmRleCBhMzRlY2U1M2E3NzEuLjdlOTU4MjdiMDcyNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ncHVfY29tbWFuZHMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2dwdV9jb21tYW5kcy5oCj4gQEAgLTE4MCw2ICsxODAsNyBAQAo+ ICAjZGVmaW5lIEdGWF9PUF9EUkFXUkVDVF9JTkZPX0k5NjUgICgoMHg3OTAwPDwxNil8MHgyKQo+ ICAKPiAgI2RlZmluZSBDT0xPUl9CTFRfQ01ECQkJKDI8PDI5IHwgMHg0MDw8MjIgfCAoNS0KPiAy KSkKPiArI2RlZmluZSBYWV9DT0xPUl9CTFRfQ01ECQkoMjw8MjkgfCAweDUwPDwyMikKPiAgI2Rl ZmluZSBTUkNfQ09QWV9CTFRfQ01ECQkoKDI8PDI5KXwoMHg0Mzw8MjIpfDQpCj4gICNkZWZpbmUg WFlfU1JDX0NPUFlfQkxUX0NNRAkJKCgyPDwyOSl8KDB4NTM8PDIyKXw2KQo+ICAjZGVmaW5lIFhZ X01PTk9fU1JDX0NPUFlfSU1NX0JMVAkoKDI8PDI5KXwoMHg3MTw8MjIpfDUpCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgK PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgK PiBpbmRleCA5YmRhMzZhNTk4YjMuLmQ1ZGM0NDI3ZDY2NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaAo+IEBAIC0y NSw2ICsyNSw4IEBAIHNlbGZ0ZXN0KGdlbSwgaTkxNV9nZW1fbGl2ZV9zZWxmdGVzdHMpCj4gIHNl bGZ0ZXN0KGV2aWN0LCBpOTE1X2dlbV9ldmljdF9saXZlX3NlbGZ0ZXN0cykKPiAgc2VsZnRlc3Qo aHVnZXBhZ2VzLCBpOTE1X2dlbV9odWdlX3BhZ2VfbGl2ZV9zZWxmdGVzdHMpCj4gIHNlbGZ0ZXN0 KGNvbnRleHRzLCBpOTE1X2dlbV9jb250ZXh0X2xpdmVfc2VsZnRlc3RzKQo+ICtzZWxmdGVzdChi bHQsIGk5MTVfZ2VtX29iamVjdF9ibHRfbGl2ZV9zZWxmdGVzdHMpCj4gK3NlbGZ0ZXN0KGNsaWVu dCwgaTkxNV9nZW1fY2xpZW50X2JsdF9saXZlX3NlbGZ0ZXN0cykKPiAgc2VsZnRlc3QocmVzZXQs IGludGVsX3Jlc2V0X2xpdmVfc2VsZnRlc3RzKQo+ICBzZWxmdGVzdChoYW5nY2hlY2ssIGludGVs X2hhbmdjaGVja19saXZlX3NlbGZ0ZXN0cykKPiAgc2VsZnRlc3QoZXhlY2xpc3RzLCBpbnRlbF9l eGVjbGlzdHNfbGl2ZV9zZWxmdGVzdHMpCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZng=